{"version":3,"sources":["scripts/app.js"],"names":["angular","module","ndStocktakingHistoricItemController","$scope","STOCKTAKING_CHANGE_TYPES","STOCKTAKING_PRODUCT_NOT_FOUND_REASONS","controller","directive","restrict","scope","stocktakingChange","controllerAs","templateUrl","ndStocktakingHistoricHeaderController","ndSaleOrderDeliveryActionsController","$mdToast","$state","$document","$mdDialog","$window","api","$interval","$filter","$rootScope","HTTP_STATUS","ORDER_DELIVERY_STATUSES_REVERSE","SALE_ORDER_STATUSES_REVERSE","ORDER_DELIVERY_STATUSES","SALE_ORDER_DELIVERY_STATUS_COLORS","Session","OrderActionsService","vm","this","executeAutocomplete","onlyStockAvailable","changingStatus","inventories","saleOrderDeliveries","update","id","saleOrderDelivery","option","only_stock_available","response","callback","status","HTTP_200_OK","get","orderDeliveryProductVariantsByOrderProductVariantIds","order_delivery_product_variants","forEach","sale_order_delivery_product_variant","order_product_variant","sendReloadTableEvent","show","simple","textContent","position","cancel","hasPermission","showProgressBar","changeStatus","statusNotChanged","SALE_ORDER_STATUS_DRAFT","SALE_ORDER_STATUS_PREPARED","go","sale","SALE_ORDER_STATUS_SHIPPED","statusChanged","autocode","canceled_at","canceled_by","created_at","created_by","created_by_fullname","expected_at","notes","private_notes","prepared_at","prepared_by","prepared_by_fullname","shipped_at","shipped_by","shipped_by_fullname","received_at","received_by_fullname","order","is_editable","sendChangeStatusEvent","sale_order_status","HTTP_409_CONFLICT","showReloadToast","printing","shippingAddresses","generatingInvoice","saving","changed","endpoints","checkStatus","gotoSales","prepare","ship","receive","getStatusLabel","getStatusColorClass","autocomplete","confirm","title","clickOutsideToClose","ok","then","showCancelDeliveryDialog","SALE_ORDER_STATUS_PARTIALLY_PREPARED","escapeToClose","parent","element","find","initialize","type","currentTab","options","ndSaleOrderActionsController","$http","MAX_PRODUCTS_PER_PDF","SALE_ORDER_STATUSES","saleOrders","saleOrder","changing_status","pending_to_change_status","importToLabelsGenerator","fetching","results","fn","partialDelivery","allocate","importProductsDialog","ev","document","body","targetEvent","locals","saleId","updatePrices","save","createProforma","htmlContent","accounting","invoices","sale_order_id","HTTP_201_CREATED","printOrder","defEmail","customer_instance","email","send","recordsTotal","SALE_ORDER","sendEmail","emailTo","print","prices","pricing_tier","origin_codes","images","brand","hs_code","composition","attributes","content","user","dialog","alert","file","Blob","data","fileURL","URL","createObjectURL","window","open","a","createElement","href","download","click","hide","printCatalog","params","isSaleOrder","show_origin_code","showOriginCode","show_totals","showTotals","show_product_description","showProductDescription","products_per_page","productsPerPage","downloadExcel","url","urls","saleOrdersDownloadExcel","replace","post","responseType","downloadImages","saleOrdersDownloadImages","downloadLink","target","blob","downloadUrl","webkitURL","appendChild","removeChild","revokeObjectURL","fillAll","onAutoUpdateProductsChange","ndPurchaseOrderDeliveryActionsController","PURCHASE_ORDER_STATUSES_REVERSE","PULLING_FREQUENCE","startPulling","timeout","purchaseOrderDeliveries","purchaseOrderDelivery","purchase_order_id","purchase_order","result","HTTP_404_NOT_FOUND","$broadcast","purchase_order_status","calculatePurchaseDdpCostPrice","purchaseOrderDeliveriesStatus","calculate_purchase_ddp_cost_price","success","action","hideDelay","highlightAction","location","reload","focusOnOpen","taxes","transfer","purchaseOrderDeliveriesTransfer","transfer_order","new_cost_product_prices","length","costProductPrices","catch","error","wrapped","reject","isUid","deliveryId","openDialogSetTaxToAllPurchaseOrderProducts","multiple","purchase","openDialogSetDiscountToAllPurchaseOrderProducts","purchaseId","printDelivery","contact","customDdpPrices","orderDelivery","isSaleOrderDelivery","isTransferOrderDelivery","isPurchaseOrderDelivery","orderBy","startPullingEvent","$on","event","args","ndOrderProductPriceActionsController","openDatepicker","changePurchaseOrderProductDate","purchaseOrderProducts","orderProduct","start_date","getTime","createOrUpdateOrderProductPrice","price","productOptions","show_prices_incl_tax","selected","isNaN","price_excl_tax","price_incl_tax","orderProducts","order_id","order_type","incl_tax","tax","reloadCallback","createOrUpdateOrderProductDiscount","discount","productDiscountOriginal","openTaxDialog","push","provider_price","session","taxSearchText","getShowTaxesEvent","showTaxes","editable","showPriceTaxes","disableTaxes","ndPurchaseActionsController","$mdMenu","receiveAndConfirm","sendReloadAllEvent","purchaseOrderStatus","purchaseOrder","purchase_order_deliveries_id","purchaseOrderDeliveryId","orderDeliveryId","errorMessage","order_status","partiallyReceive","contact_instance","PURCHASE_ORDER","purchaseOrders","pricingTier","originCodes","show_prices","showPrice","produce","importSaleOrdersDialog","order_ids","duplicate","config","$stateProvider","$translatePartialLoaderProvider","msApiProvider","msNavigationServiceProvider","state","abstract","views","content@app","resolve","bodyClass","subcontent@app.inventory.configuration","AccountData","apiResolver","InventoryConfiguration","SerialNumberTypesData","ConfigurationData","CategoriesData","SitesData","serializer","WarehousesData","PricingTiersData","ContractedPlanLimitData","PLAN_LIMIT_CODES","codes","RETAIL_STORE_LIMIT","STORE_AND_SHOWROOM_LIMIT","WAREHOUSE_LIMIT","join","WarehouseData","$stateParams","subcontent@app.inventory.warehouses.warehouse","TicketConfigurationsData","FiscalAddressesData","InventoryConfigurationData","WarehouseStocksData","restricted","PickingPackingType","PICKING_PACKING_TYPES","PICKING_TYPE","tab","subcontent@app.inventory.pickings","previousState","PickingOrderData","UsersData","UserCreatePicking","PackingOrderData","subcontent@app.inventory.picking_packing.packing_order","ShippingBoxesData","ShippingMethodsData","subcontent@app.inventory.low_stock","TableType","subcontent@app.inventory.low_stock.purchases","BrandsData","SubcategoriesData","SeasonsData","ProvidersData","subcontent@app.inventory.low_stock.replenishments","CollectionData","idCollection","subcontent@app.inventory.collections.collection","loadTableState","CompositionsData","isBundle","subcontent@app.inventory.products.product","ProductData","TaxesData","filter_stock_by_warehouse","CollectionsData","ProductTranslationsData","product_id","ProductProviderPricesData","VariantCategoriesData","include_deleted","SiteProductsData","ImagesData","BundleImagesData","StockLocations","product_variants__product_id","Categories","SubCategories","Compositions","Brands","Seasons","ContactsData","is_gift_card","isRawMaterial","all","PurchaseData","subcontent@app.inventory.purchases.new","types","subcontent@app.inventory.purchases.purchase","PurchaseOrderData","PaymentMethodsData","PurchaseOrderDeliveryData","subcontent@app.inventory.stocktakings.new","StocktakingData","subcontent@app.inventory.stocktakings.stocktaking","subcontent@app.inventory.transfers.new","TransferData","subcontent@app.inventory.transfers.transfer","TransferOrderData","TransferOrderDeliveriesData","TransferOrderDeliveryData","search","value","squash","subcontent@app.inventory.adjustments.new","AdjustmentData","subcontent@app.inventory.adjustments.adjustment","AdjustmentOrderData","ProductImportData","ProductLabelDesignData","transferOrder","addPart","ProductVariantUnitCostDialogController","productVariant","updateAllProducts","currency","company","products","product","ddp_price","updateAllUnitCosts","productVariants","ProductVariantPriceDialogController","productVariantPrice","_delete","_options","deleting","productVariantPrices","delete","HTTP_204_NO_CONTENT","clearPriceFields","clearDiscountPriceFields","discount_price_excl_tax","discount_price_incl_tax","initPriceFields","temp_price_excl_tax","temp_price_incl_tax","priceExclTaxChanged","parseFloat","tax_percent_value","toFixed","priceInclTaxChanged","offerPercentValueChanged","offerPriceExclTaxChanged","offerPriceInclTaxChanged","RolesData","updated","PlansData","BillingPortalData","feature","source","sourceStateParams","addOnId","addOnCode","ProductProviderPriceDialogController","$q","productProviderPrice","PROVIDER_PRICE_TYPES","CURRENCIES","providerCopy","copy","provider_instance","querySearch","deferred","defer","searchContact","substring","SEARCH_MAX_LENGTH","contacts","promise","selectContact","item","name","first_name","provider","ReplenishmentsByWarehouseController","$timeout","$mdSidenav","$parent","currentNavItem","performingAnalysis","performAnalysis","HTTP_202_ACCEPTED","LowStockPurchasesByProviderController","UiGridService","PULLING_DELAY_MS","loading","saveStatus","gridApi","saveState","localStorage","setItem","JSON","stringify","getColumnStatusVisibility","field","defaultValue","avoidState","columns","column","visible","setGridColumns","key","orderCellHtml","extend","displayName","headerTooltip","permission","cellClass","enablePinning","pinnedLeft","enableHiding","leadTime","cellTemplate","rotation","stockoutLosses","minWidth","stock","stockValue","stockToOrder","stockToOrderValue","totalDraft","enableSorting","pinnedRight","editableCellTemplate","enableCellEdit","enableCellEditOnFocus","enableColumnMenu","gridOptions","columnDefs","getGridPostBody","d","page","pageSize","ordering","columns_names","Object","values","map","filter","Boolean","columns_fields","exporting","uiGridInitialized","filters","warehouses","providers","seasons","brands","categories","subcategories","DEFAULT_PAGE_SIZE","getGridPage","createPurchaseDraft","providerId","replenishmentWarehouseId","provider_id","updateTotalDraft","HTTP_400_BAD_REQUEST","message","downloadCSV","fetch","URLSearchParams","method","headers","Authorization","token","Content-Type","signal","json","getGridOptions","onRegisterApi","core","on","columnVisibilityChanged","changedColumn","colDef","pagination","paginationChanged","newPage","sortChanged","grid","sortColumns","getSortString","colResizable","columnSizeChanged","deltaChange","gridMenuCustomItems","$event","useExternalPagination","AbortController","performAnalysisIfEmpty","pullingIfEmpty","undefined","abort","totalItems","orderQuantities","item_external_id","location_external_id","replenishment_stock_to_order","handleWindowResize","$apply","providersIdsWithWarehousesIdsDict","provider_external_id","provider_ids_with_warehouses_ids_dict","LowStockPurchasesByProductController","ERROR_CODES","setProductVariantGridColumns","image","width","maxWidth","sku","code","barcode","size","color","category","subcategory","season","availabilityStatus","abcCategory","stock_in_transit","stock_on_hand","globalStock","totalUnitsSold","averageDailySales","rop","expectedDemand","expectedSales","stockTurnDraft","ddp","demand_value","page_size","order_by","abcCategories","abc_categories","availabilityStatuses","availability_statuses","updateTotalOnOrder","located_product_variants","product_variant_id","warehouse_id","purchaseProductVariant","productVariantId","targetWarehouseId","replenishmentStockToOrder","quantity","target_warehouse","configuration_data","configurationData","ERROR_11001_OPTIMIZATION_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED","ERROR_11002_OPTIMIZATION_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED","ERROR_11003_OPTIMIZATION_CONFIGURATION_MINIMUM_STOCK_EXCEEDED","ERROR_11005_OPTIMIZATION_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY","productId","limitMinQty","limit_min_qty","percentage","amount","minStock","min_stock","toggleFilterVisibility","property","filterChanged","resetPagination","getProductVariantsGridPage","getGridProductsVariantsReplenishmentsPage","getCoverage","entity","global_stock","avg_daily_total_units_sold","dynamicFilters","icon","svgIcon","pinning","columnPinned","colMovable","columnPositionChanged","oldPosition","newPositio","loadedStatus","parse","getItem","restore","minimumColumnSize","paginationCurrentPage","ImportEditWizardDialogController","IMPORTER_STATUS","setStep","template","wizard","step","selectOption","history","dtInstance","nextStep","prevStep","pop","showBackOption","getTemplateUrl","showImportationDialog","importerType","SalePrintDialogController","printType","printPrices","printImages","showBrand","showHsCode","showComposition","showAttributes","changePrintType","savedPrintType","ImportSaleProductsDialogController","fileLoaded","ngFlow","flow","ngFlowOptions","chunkSize","maxChunkRetries","simultaneousUploads","allowDuplicateUploads","testChunks","progressCallbacksInterval","sale_order_products","filename","fileAdded","files","uploadFile","opts","saleOrderProductsImport","query","uploadMethod","upload","uploadFileSuccess","DeliverySaleController","INVOICE_TYPES","VideosData","ChangelogsData","ndServerController","processing","run","startEventName","performance","server","endEventName","getIconName","average","regularBound","badBound","getSvgIcon","getVeredictTitle","getCustomClass","withBackground","cancelPerformanceEventListener","triggerEventName","ndBenchmarkController","Performance","benchmark","ratio","ndBandwidthController","avgBandwidth","getColor","uploadSpeed","minUpload","downloadSpeed","minDownload","NdSellMatrixController","VIEW_CATEGORIES","VIEW_PRODUCTS","currentView","sellMatrixData","selectedCategory","currencyCharacter","registerConfiguration","showProductImages","touch_ui_show_product_images","showProductPrice","touch_ui_show_price","mdGridColsSm","touch_ui_cols_sm","mdGridColsMd","touch_ui_cols_md","mdGridColsGtMd","touch_ui_cols_gt_md","mdGridColsGtLg","touch_ui_cols_gt_lg","back","previousPageUrl","getPreviousPage","nextPage","getNextPage","categoryClicked","getProductsByCategory","productClicked","productSelected","getColsSm","getColsMd","getColsGtMd","getColsGtLg","warehouseId","link","attrs","RegistersData","PaymentMethods","is_retail_method","posOrder","isDevolution","main@","content@app.sale.display","RegisterActivityData","ContactGroupsData","OrderData","ShippingBox","WAREHOUSE_TYPES","STORE","SalesGoalsData","PromotionData","SetNumberDialogController","apply","decimals","unit","minusClicked","plusClicked","setValue","NumericKeywordController","$mdMedia","updateFloat","recentDecimal","stringValue","insertValue","includes","split","toString","returnValue","removeValue","endsWith","clearValue","fillValue","Math","round","totalValue","String","decimalPlaces","CashMovementDialogController","register","CASH_MOVEMENT_TYPES","movement","used_for_purchase","saveMovement","CASH_MOVEMENT_TYPE_OUTPUT","sales","cash_movements","openCashCounter","context","cashCounterContex","total","SalePosOrderDialogController","PosOrderData","PosOrder","Invoice","SALES_STATUS_COLORS_FG","previousPosOrderId","SALES_STATUS_COLORS_BG","$mdBottomSheet","PosOrderProductVariant","POS_ORDER_PAYMENT_STATUSES_COLORS","POS_ORDER_PAYMENT_STATUSES","INTEGRATION_APP_TYPE","Utils","FeatureFlagService","PRINTER_TYPES","PAGE_SIZES","sendPdfRequest","tempSale","flag_enabled","pos_order_invoices","printer","pos_order_invoice_ids","invoice","pos_order_ids","printer_type","PRINTER_TYPE_PDF","PAGE_SIZE_A4","register_id","customer_id","customer","is_gift","is_gift_ticket","gift_pos_order_product_variants","pos_order_product_variants","handleSendPdfResponse","posOrders","toast_response","contact_id","createDevolutionByRegister","registerId","devolution","selectEndpoint","private","v2","HTTP_405_METHOD_NOT_ALLOWED","saveChanges","object","notesChanged","customerChanged","createdByChanged","incidenceChanged","incidence","afterSave","Error","ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER","refreshAtClose","MIN_QUERY_LENGTH","AUTOCOMPLETE_MS_TIMEOUT","posOrderInvoices","showDeleteAction","deletting","customerAutocomplete","selectedItem","selectedCustomerId","assignCustomerError","customerSearchText","userSearchText","paymentMethodEdited","giftCardKinds","CONSUMED","CREATED","refresh","getTotal","getTaxAmount","posOrderProductVariant","customPrice","custom_price_incl_tax","custom_price_excl_tax","getTotalByProduct","giftTicket","hasEposItalyActive","$emit","site","openDrawer","avoidNormalTicket","continueSale","devolution_of","createDevolution","defaultRegister","goToProduct","deletePosOrder","createNegativePaymentMethods","force","getGiftCardsKind","create_negative_payment_methods","ERROR_04003_DELETING_POS_ORDER_REGISTER_ACTIVITY_CLOSED","generateInvoice","postal_address","errors","error_text","apiToUse","postal_addresses","vat","address_1","city","country","zip","querySelector","ariaLabel","pos_order_invoice","send_invoice","substitutive_invoices","error_code","HTTP_500_INTERNAL_SERVER_ERROR","detail","setNdBarcodeListenerEnabled","ndBarcodeListenerEnabled","customersQuerySearch","text","customers","userQuerySearch","account","users","createCustomer","$mdAutocompleteCtrl","hidden","forceCustomer","forceNaturalPersonType","rerender","getCustomerText","phone","getUserText","printDevolutionCard","generated_devolution_card","autocompleteDisabled","showAssignCustomer","originalPosOrder","showChangeVendor","printPdf","isFeatureFlagEnabled","posOrdersPrintPdf","setTokenCookie","site_id","printHtml","posOrdersPrintHtml","printWindow","write","html","close","focus","onload","e","sendPdf","isGift","isEco","gift_amounts","gift_amount","notesHasChanged","createByHasChanged","customerHasChanged","isAllowedToCreateDevolution","some","cancelChanges","showEditPayment","is_closed","current_activity","register_activity","editPayment","getElementById","modifiedPosOrder","isReturned","devolutions_of","goToPosOrder","posOrderId","hasBackdrop","getPosOrderProductVariants","popv","hide_from_lists","getConsumedGiftCards","is_old_devolution_cards","devolution_cards","consumed_gift_card","getChargedGiftCards","is_old_generated_devolution_cards","charged_gift_card","charged_gift_card_is_voucher","giftCards","gift_card_code","markAsIncidence","getSubtotal","ignoreDiscount","discount_excl_tax","twoDecimals","isDevolutionWithPaymentGateway","pos_order_payment_methods","pm","payment_method_instance","payment_gateway","is_devolution","openInvoice","downloadInvoice","openSubstitutiveInvoice","substitutive_invoice","showAndHideBundleVariants","showBundle","is_bundle","EditPaymentsController","tempPosOrderPaymentMethods","isNegative","roundedValue","abs","Number","EPSILON","getTotalDevolutionCardAmount","devolutionCard","devolutionCardCallback","findIndex","devolutionCards","target_pos_order","is_valid","updateSale","promotion","promotion_discount","promotion_fixed_discount","max","min","getPrice","subtotal","total_taxes","generateDevolutionCard","refundByPaymentMethod","refundByPaymentMethodCash","refundByPaymentMethodCard","inclTax","isRegenerateDevolutionCardPayingWorkflow","getBalance","getTotalAssigned","ignoreDevolutionCards","paymentMethod","paying","paymentMethodsDict","tempPosOrder","source_warehouse","avoid_devolution_card","output_amount","successfullyPaid","assignAllToPaymentMethod","openDevolutionCardFinder","deleteDevolutionCard","index","splice","isNormalPayingWorkflow","getPendingToAssigned","refundByCash","is_default_cash","disabled","payment_method","refundByCard","is_default_card","refundByNewDevolutionCard","popm","newPopm","GenerateInvoicesDialogController","alreadyInvoicedDict","getFilename","invoice_id","SelectRegisterDialogController","select","registers","OpenRegisterDialogController","hotkeys","saveOpening","form","$valid","opening","ERROR_04008_REGISTER_ALREADY_OPENED","selectFilter","add","combo","allowIn","NewRegisterDialogController","RegisterData","SerialNumberType","SERIAL_NUMBER_TYPES","contractedPlanLimit","postSave","toastMessage","setPaymentMethodAlreadyLinkedValidity","ERROR_04039_PAYMENT_METHOD_LINKED_TO_ANOTHER_WAREHOUSE","paymentMethodErrorData","warehouse","registerForm","paymentMethods","$setValidity","serialNumberTypes","saveRegister","default_card_method","printWidthDiscover","getSerialNumberTypePreview","prefix","pos_order_prefix","suffix","pos_order_suffix","counter","pos_order_counter","counter_length","pos_order_counter_length","getCurrent","getSerialNumberTypeDevolutionPreview","pos_order_devolution_prefix","pos_order_devolution_suffix","pos_order_devolution_counter","pos_order_devolution_counter_length","createNewSerialNumberType","printer_characters_per_line","open_drawer_pin","showPassword","payment_methods","list","onSelectorOpen","stopPropagation","onSelectorClose","unbind","CloseRegisterDialogController","registerActivity","getDefaultCashPaymentMethod","total_payment_amounts","totalPaymentAmount","getOpeningCashMovement","cashMovement","is_opening","balancePosted","balancePostedChanged","unbalance","balancePostedExpected","totalCashMovements","cashFund","cashToRemove","closureNotes","totalPaymentAmounts","hideCashMovementColumns","closeRegister","closure_cash_movement_amount","closure_notes","register_activities","toast","clicked","cashFundChanged","tpa","CashCounterDialogController","bills","bill","coins","coin","SalesGoalDetailDialogController","salesGoal","showSalesGoalFormDialog","editSalesGoal","closeDialog","SalesGoalFormDialogController","SalesGoal","warehousesDict","saveSalesGoal","salesGoals","start","removeSalesGoal","getCurrency","w","dialogTitle","StockLocationSearchDialogController","fetchStockLocations","stockLocations","nextPageUrl","next","onScroll","el","scrollTop","clientHeight","scrollHeight","loadMore","loadingMoreData","filteredCategories","concat","finally","$applyAsync","isLocationSelected","stock_locations","sl","toggleLocation","idx","getProductVariantName","product_name","size_name","color_name","stockLocationDialog","stockLocation","unshift","removeStockLocation","setTimeout","container","addEventListener","$watch","newVal","oldVal","StockLocationDialogController","isSaving","stockLocationForm","deleteLocation","DeleteWarehouseDialogController","ndTransferOrderDeliveryActionsController","TRANSFER_ORDER_STATUSES_REVERSE","manageReceiveOption","condition","createEmpty","changeDeliveryStatus","create_empty","extraParams","transferOrderDelivery","extra_parameters","transferOrderDeliveriesStatus","transferOrderDeliveries","deliveryStatusChanged","transfer_order_status","created_by_username","prepared_by_username","received_by","received_by_username","shipped_by_username","toasMessage","transferOrderId","receivedActionStoredValue","transferId","isDelivery","isReplenishment","is_replenishment","transferOrders","receiveWithEmptyDeliveryOption","isMainOption","createEmptyDeliveryOnReceive","getReceivedWithMainOptionText","getReceivedWithSecondaryOptionText","ndTransferOrderActionsController","transferOrderStatus","prepareAndShip","partiallyPrepare","screenIsBig","TransferPrintDialogController","printOriginCodes","thermalPrinter","transferOrdersPrint","path","ImportTransferProductsDialogController","transfer_order_products","transferOrderProductsImport","transferOrderDeliveryProductsImport","LoadingBarDialogController","ndStocktakingOrderProductUidController","UidStock","StocktakingOrderProductVariantLot","totalAmount","MIN_GRID_HEIGHT","gridHeight","pageNumber","getGridDetailPage","deleteOrderProductWrapper","hasPermissions","product_code","isDefined","deleteOrderProduct","copyFieldInClipboard","textarea","css","opacity","val","append","successful","execCommand","err","remove","updateNewAmount","lotId","stocktakingOrderProductVariantLots","new_amount","targetVariant","i","order_product_variants","stocktaking_order_product_variant","targetLot","j","stocktaking_order_product_variant_lots","total_product_amount","updateTotalAmount","total_stocktaking_order_products_amount","showErrorToast","addLot","isEditable","uidStock","manageLots","sourceWarehouse","product_variants","received","hideNotes","hideMovementReason","disableWarehouseSelector","disableVariantSelector","createMovement","lot","stocktaking_id","stocktaking_order","order_product_id","expiration_date","product_variant","uid_stock_id","uid","rowsRendered","sort","priority","direction","identifier","newAmountTemplate","newAmount","enableRowHeaderSelection","enableColumnMenus","enableGridMenu","paginationPageSize","minRowsToShow","enableHorizontalScrollbar","enableVerticalScrollbar","enablePaginationControls","stocktakingOrderProductVariantLot","total_stocktaking_order_product_variant_lots","calculateTableHeight","defaultGridOptions","rowHeight","total_amount","onSave","validateOrderProduct","showStocks","updateAmountPermission","deletePermission","ndStocktakingOrderProductController","initOrderProductVariantByColorAndSizeDict","tempTotal","orderProductVariantByColorAndSize","orderProductVariant","previous_amount","sendEventOpenUidDialog","saveOrderProductVariant","colorId","pv","previousTotal","hasOwnProperty","totalPrevious","getTotalByColor","getOrderProductVariantByColorAndSize","sizeId","colorName","sizeName","getTooltip","previousAmount","isUndefined","showUidsDialog","initDictEvent","ndStocktakingHistoricController","stocktakingHistoricSearch","getPreviousStocktakingChanges","filterString","stocktakingHistoricArray","toLowerCase","indexOf","slice","getLastStocktakingChange","stocktakingHistoricNext","showHeader","StocktakingSummaryDialogController","stocktakingSummaryData","resetStock","getStocktakingInformation","stocktaking","brand_name","brand_instance","category_name","category_instance","season_name","season_instance","StocktakingCloneSuccessDialogController","lastClone","goToClonedStocktaking","ndPurchaseOrderPaymentsController","ORDER_TYPES","PURCHASE_ORDER_PAYMENT_STATUSES","PURCHASE_ORDER_PAYMENT_STATUSES_COLORS","orderType","purchaseOrderPaymentStatuses","PURCHASE_ORDER_PAYMENT_STATUS_PENDING","PURCHASE_ORDER_PAYMENT_STATUS_PAID","orderTypesDict","showAddPaymentMethodRow","temporalPayment","searchText","newPayment","addPayment","payments","editing","date","savePayment","payment","updateOrderKPIs","deletePayment","selectItem","displayFunction","purchase_order_total_amount","pending_amount","purchase_order_pending_amount","pending_payments","purchase_order_pending_payments","paid_payments","purchase_order_paid_payments","setOrderPendingAmount","checkFormPayment","ndOrderPaymentsController","cancelAllPaymentsEditing","showPendingAmountButton","globalEditMode","invoice_instance","clearFilter","cancelPayment","getCancelEditModeText","checkValidAmount","CostPricesDialogController","$compile","DTColumnBuilder","ddp_price_table","unitString","createdRow","row","dataIndex","contents","datatableReady","delivery_id","showConfirmAction","showCancelAction","dtOptions","dtColumns","newColumn","withTitle","renderWith","full","product_cover_thumbnail","subcategory_name","current_stock","current_cost_price","purchased_cost_price","withOption","new_stock","new_cost_price","rowId","dom","autoWidth","pagingType","lengthMenu","pageLength","scrollY","responsive","serverSide","searchDelay","stateSave","PurchasePrintCatalogDialogController","init","productsPerPageOptions","PurchasePrintDialogController","pricingTiers","printSalePricesChanged","printSalePrices","LinkWithInvoiceController","$translate","deliveries","exists","linkOrCreateInvoice","requestData","purchaseOrderDeliveriesLinkToInvoices","toggle","selectedDelivery","ajax","dataSrc","rowCallback","nRow","aData","iDisplayIndex","iDisplayIndexFull","$","initComplete","searchBox","DataTable","adjust","input","draw","language","use","notSortable","ImportSaleOrdersDialogController","SALE_ORDER_STATUS_COLORS","orderStatuses","orderStatusColors","headerCallback","header","headerCompiled","accept","selectAll","rows","preorder","ImportPurchaseOrderDeliveryProductsDialogController","purchase_order_products","ImportPurchaseProductsDialogController","purchaseOrderProductsImport","ChangeProviderController","overWriteNewProviderPrices","overwrite_new_provider_prices","toastText","DeliveryPurchaseController","BindInvoiceToOrderController","hasInvoices","orderId","invoiceId","sale_order","ndProductsFiltersController","STOCK_FILTER_STATES","VISIBLE_IN_ECOMMERCE_FILTER_STATES","DISCOUNT_PRICE_FILTER_STATES","CONTACT_TYPES_REVERSE","initializeDateRanges","productCreatedDateRange","dateStart","dateEnd","showClear","format","moment","productUpdatedDateRange","productPriceUpdatedDateRange","newValue","oldValue","filtersStatusInitialized","setDateRangeFilters","filtersChanged","updateFilterNotifications","updateFiltersParam","onFiltersChangeDebounceTimer","onFiltersChange","formatDate","Date","toISOString","productCreatedStartDate","productCreatedEndDate","productUpdatedStartDate","productUpdatedEndDate","productPriceUpdatedStartDate","productPriceUpdatedEndDate","loadStatus","collections","compositions","sites","sizes","colors","webCategories","purchases","cover","tag","visibleInEcommerce","discountPrice","stockBelowMinimum","discountActive","duplicatedProducts","isNoos","archived","duplicatedBarcode","duplicatedSku","keys","notifications","mapAndJoinList","filter_barcode","filter_sku","web_category","only_in_stock_products","only_products_visible_in_ecommerce","only_with_discount_price","stock_below_minimum","discount_active","duplicated","is_noos","duplicated_barcode","duplicated_sku","product_created_start_date","product_created_end_date","product_updated_start_date","product_updated_end_date","product_price_updated_start_date","product_price_updated_end_date","filtersParams","TYPE_SIZE","TYPE_COLOR","WEB_CATEGORY","TYPE_PROVIDER","TYPE_PURCHASE","TYPE_COLLECTION","WITH_BARCODE_FILTER","WITHOUT_BARCODE_FILTER","WITH_SKU_FILTER","WITHOUT_SKU_FILTER","mdLocalizationMap","GetMdDatePickerLocalizationMap","stockDict","ONLY_PRODUCTS_IN_STOCK","ONLY_PRODUCTS_NOT_IN_STOCK","visibleInEcommerceDict","ONLY_PRODUCTS_VISIBLE_IN_ECOMMERCE","ONLY_PRODUCTS_NOT_VISIBLE_IN_ECOMMERCE","discountPriceDict","ONLY_PRODUCTS_WITH_DISCOUNT_PRICE","ONLY_PRODUCTS_WITH_NO_DISCOUNT_PRICE","sizeSearchText","selectedSize","colorSearchText","selectedColor","webCategorySearchText","selectedWebCategory","providerSearchText","purchaseSearchText","collectionSearchText","selectedProvider","selectedPurchase","selectedCollection","enableBarcodeListener","disableBarcodeListener","updateMultiselectFilters","filterCategory","variantQuerySearch","variants","variantIds","variant","providerQuerySearch","CONTACT_TYPE_PROVIDER","providerIds","purchaseQuerySearch","purchaseIds","collectionQuerySearch","manufactures","collectionIds","collection","webCategoryQuerySearch","ecommerce","show_all","webCategoriesIds","webCategory","updateFiltersWatcher","clearFiltersWatcher","statusLoadedWatcher","ProductsEditDialogController","Selected","GS1_BARCODE_TYPES_BY_ID","WEIGHT_UNITS","WEIGHT_UNITS_FORMATTED","ROUNDING_PRICE_TYPES","ECOMMERCE_PLATFORMS","taToolbar","showSaveMessage","currencies","barcode_types","FIXED","PURCHASE_RELATED","SALES_RELATED","tags","ecommerceCategories","webCategoriesToAdd","webCategoriesToRemove","loadingWebCategories","webSites","webSitesHasPrestashop","webSitesToAdd","webSitesToRemove","visibleOnSites","notVisibleOnSites","loadingWebSites","selectedProductsIds","selectedCategoryId","selectedSubcategoryId","selectedAddTags","selectedRemoveTags","selectedSizes","selectedColors","selectedColorCategoryName","selectedSizeCategoryName","generateBarcodes","generateCodes","productPrices","selectedItemAdd","selectedItemRemove","searchTextAdd","searchTextRemove","web_availability","discountInactive","isNotRawMaterial","isNotNoos","catalog","notCatalog","notAllowB2bPreSales","allowB2bPreSales","selectedCode","selectedOriginCode","selectedGroupCode","selectedName","selectedShortDescription","selectedLongDescription","selectedBrandId","selectedSeasonId","selectedCompositionId","selectedProviderId","selectedDefaultBarcodeType","selectedWidth","selectedHeight","selectedDepth","selectedWeight","selectedWeightUnit","selectedFOBPrice","selectedFOBPriceCurrency","selectedDDPPrice","backordersAllowed","notBackordersAllowed","manageUids","unmanageUids","unmanageLots","archive","unarchive","syncEcommerceProducts","syncEcommerceStocks","syncEcommercePrices","forceSiteProductVariants","doNotForceSiteProductVariants","generateSkus","loadingEcommerces","b2bEcommerces","ecommercesToAdd","ecommercesToRemove","setPriceMethod","newCategoryAdded","newObject","newSubcategoryAdded","tempPricingTiers","addCategories","removeCategories","relative_cost_price_incl_tax","relative_cost_price_excl_tax","round_type","relative_sale_price_incl_tax","relative_sale_price_excl_tax","addCategoriesDict","selectedCategories","removeCategoriesDict","products_ids","add_tags","remove_tags","color_category_name","size_category_name","web_categories_to_add","web_categories_to_remove","web_sites_to_add","web_sites_to_remove","visible_on_sites","not_visible_on_sites","generate_barcodes","generate_codes","pricing_tiers","discount_inactive","backorders_allowed","backorders_not_allowed","is_raw_material","is_not_raw_material","is_not_noos","not_catalog","allow_b2b_pre_sales","not_allow_b2b_pre_sales","origin_code","group_code","short_description","trim","long_description","brand_id","season_id","category_id","subcategory_id","composition_id","default_barcode_type","height","depth","weight","weight_unit","fob_price","fob_price_currency","sync_ecommerce_products","sync_ecommerce_stocks","sync_ecommerce_prices","manage_uids","unmanage_uids","manage_lots","unmanage_lots","force_site_product_size_variations","forceSiteProductSizeVariations","force_site_product_color_variations","forceSiteProductColorVariations","do_not_force_site_product_size_variations","doNotForceSiteProductSizeVariations","do_not_force_site_product_color_variations","doNotForceSiteProductColorVariations","set_product_variant_prices","setProductVariantPrices","generate_skus","ecommerces_to_add","ecommerces_to_remove","lowercaseQuery","lowercase","querySearchCategories","dict","category_group_id","category_group","siteCategorySelected","openAdvancedCategorySearch","setDefaultRoundType","roundType","resetPricingTiers","merge","b","platform","ECOMMERCE_PLATFORM_PRESTASHOP","hasMultipleB2B","wholesale","selectedEcommerces","slug","domain","warehouse_name","defaultB2b","getDefaultB2B","ndStockOverviewController","stockByWarehouseAndProductVariantId","colorIdByProductVariantById","totalsByColor","stocks","color_variants","totalsByWarehouseId","totalInWarehouse","totalInTransit","transferred_pending_to_receive","QuickProductCreatorDialogController","defaultBrand","isValid","valid","has_variants","size_category","size_variants","color_category","set_price","autogenerateCode","autogenerate","gettingCode","next_code","endpoint","parameters","AUTOCOMPLETE_PAGE","sizeVariantCategories","colorVariantCategories","sizeVariants","colorVariants","codeAlreadyExists","hasProductBundlesFeature","hasSubscription","hasAddOn","productType","checkCodeUnique","checkCodeUniqueTimeout","current_id","autogenerateChanged","pricingTierChanged","taxChanged","hasVariantsChanged","setPriceChanged","sizeVariantCategoryChanged","colorVariantCategoryChanged","goToNewProductPage","highlightClass","codeNameFormatter","categoryQuerySearch","categorySearchText","categoryChanged","removeItem","subcategoryChanged","subcategoryQuerySearch","subcategorySearchText","seasonQuerySearch","seasonSearchText","seasonChanged","brandQuerySearch","brandSearchText","brandChanged","defaultCategory","defaultSeason","variantCategories","vc","is_principal","ndQuickProductCreatorButtonController","openDialog","saveCallback","ndProductVariantsController","$cookies","sizeCategories","sizeCategoriesById","colorCategories","colorCategoriesById","collapse","firstOption","collapsed","secondOption","categoriesById","variantsById","categoryIdByVariantId","variantId","categoryId","currentCategory","total_stock","hasStock","saveProductVariantsListener","saveProductVariants","size_category_id","color_category_id","hideToasts","updateProductVariantsArray","allVariantsIds","selectedVariantCategories","selectedVariantCategoryToAdd","categoriesFilter","optionsFilter","cancelProductVariants","cancelCallback","variantsForm","$setPristine","setAllColorVariants","setAllSizeVariants","createNewVariant","variantCategory","fullscreen","customFullscreen","isCategory","specificCategory","preSaveProductVariants","selectSize","selectColor","categoryIsSelected","setSelection","indexOfCategory","setSelectionForAllVariants","toggleCollapse","showButtons","isNew","ndProductVariantsInformationController","GS1_BARCODE_TYPES_BY_NAME","NdBarcodeService","checkBarcodeUnique","barcodeAlreadyExists","checkBarcodeUniqueTimeout","getProductVariantPrices","fetchingProductVariantPrices","productVariantPricesAbortController","productVariantPricesMatrix","product_price","checkBarcodeInvalid","validEan13","validUpcA","barcodeInvalid","GS1_EAN_13","GS1_UPC_A","updateProductVariant","showWooCommerceBanner","variantCategoriesById","pricingTiersById","pricesByPricingTierDict","productVariantsWithInvalidBarcode","backupCode","showPriceInclTax","showDeletedVariants","showDeleted","productVariantsById","checkedVariants","editUnitCostPrice","pV","getProductVariantPricingTierPrice","productPrice","updateVariantPrice","$promise","$resolved","editProductVariantPrice","buttonId","openFrom","closeTo","getLength","updateBarcode","isBarcodeInvalidDialogOpen","generateCode","dialogContent","generatingBarcode","generatingSku","ERROR_03_001_BARCODE_OVERFLOW","toastMsg","backupBarcode","generateAllBarcodes","generateBarcodeRecursive","enableDiscounts","isCase1","isCase2","isCase3","isCase4","isCase5","isCase6","onShowPriceInclTaxChange","deleteProductVariant","selectedVariants","someHasStock","getVariantTag","deleted","onShowDeletedVariantsClick","hasInvalidSku","site_platforms","ECOMMERCE_PLATFORM_WOOCOMMERCE","getInvalidSkuTooltip","indexof","onCheckChanged","restoring","isCheckedSomeDeletableVariant","someDeletable","preExchangeProductVariant","selectedProductVariants","subjects","subjectsIds","is_merging","intervalPromise","hasProductVariants","getDynamicHeader","isFirstOption","placeholder","size_variants_instances","color_variants_instances","variantsHasBeenUpdatedListener","updatedProduct","ndProductTranslationsController","languages","addTranslation","productTranslations","description","lang","deleteTranslation","translation","current","cancelTranslation","saveTranslation","ndProductStockKpisController","sessionWarehousesId","sessionWarehouses","getTransferOrderProductVariants","previsualizeTransferDraft","loadingTransferOrderProductVariantDrafts","transferOrderProductVariants","statuses","topv","source_warehouse_id","target_warehouse_id","reloadTable","selectedProduct","isProductBundleVariantSelected","aggregatedData","aggregatedDict","aggregatedDictBackup","aggregateName","aoh","color_id","productVariantKpisTotals","productVariantKpisColorSizeTotals","productVariantKpisColorTotals","initStockDict","size_id","msAoh","minimum_stock","restoreCurrentStockBackup","setCurrentStockBackup","showStockMinimumToast","available_on_hand","allocated_on_retail","in_transit_on_transfer","in_transit_on_purchase","sold_on_retail","showEditTransfersButton","showAggregates","allowEdition","view","setEdit","edit","showExtraColumns","productVariantKpis","productVariantKpisDict","productVariantByVariantsIds","hideAggregates","editTransfer","stocksByProductVariantIdAndWarehouseId","viewStock","hasMinStockFeature","hasTransferOrderFeature","hasPurchaseOrderFeature","updateStock","stockId","stock_id","minimumStock","return_stock_and_movement","showToast","stock_movement","HTTP_403_FORBIDDEN","patch","readonly","stockMovements","previewProductVariantTransfers","selectedSourceWarehouse","firstWarehouseObject","removeClass","firstColorId","firstSizeId","selectedTargetWarehouse","preview","productInstance","sourceWarehouseId","currentTarget","addClass","showEditButton","toggleEdition","toggleEditTransfers","togglePrevisualizeTransferDrafts","paintUnderMinimumBg","setView","viewSelectChanged","upgradePlan","flag","changeSelectedProduct","showStockColumn","showAllocatedColumn","showTransferredInTransitColumn","showPurchasedInTransitColumn","showSoldColumn","getCover","cover_thumbnail","viewType","sessionStorage","hasFeature","showInfo","editType","ndProductProviderPriceController","PROVIDER_PRICE_TYPES_REVERSE","productProviderPrices","ppp","setupProductProviderPrice","hasProviderPricesFeature","productVariantProviderPriceById","product_variant_provider_prices","pvpp","provider_sku","provider_barcode","final_cost_price","product_provider_price","updateProductProviderPrice","dirty","createProductProviderPrice","isRowValid","saveProductProviderPrices","cancelProductProviderPrices","addProductProviderPrice","provider_currency","provider_price_type","provider_product_code","showVariants","deleteProductProviderPrice","showAndHideVariants","arrayIndex","editProductProviderPrice","pppIndex","setAsDirty","allRowsValid","every","hasDirtyness","getProviderName","providerName","last_name","ndProductPricingTiersController","pricesMatrix","newEmptyProductPrice","deregisterListener","saveProductPrices","pricingTierId","defaultTax","default","focused","pp","saved","productPricesForm","hideDiscountWarning","percent_value","latestFieldSet","lastFocused","cancelProductPrices","selectedPriceMatrixChanged","lastTax","tmpPricingTierId","getIsValid","priceTaxChanged","taxId","o1_price_incl_tax","o2_price_excl_tax","o2_price_incl_tax","o1_price_excl_tax","roundDigits","keep_price_excl_tax","showDiscountBanner","pt","changeFocused","pricingId","ndProductPlanningConfigurationController","ProductPlanningConfiguration","maxTypes","replenishment_planning_configuration","purchase_planning_configuration","examplePercentage","maxStock","percentageValue","floor","isPercentage","maxType","parseInt","isFixedAmount","ndProductOrdersController","TRANSFER_ORDER_STATUS_COLORS","TRANSFER_ORDER_STATUSES","PURCHASE_ORDER_STATUS_COLORS","PURCHASE_ORDER_STATUSES","loadingStocks","loadingTransfers","loadingPurchases","loadingSales","loadingPosOrders","totalPendingByWarehouseColorSize","totalAllocatedByWarehouseColorSize","selectedWarehouses","purchaseOrderProductVariants","warehouse_ids","order_autocode","totalPendingByColor","contact_name","pending","total_received_amount","saleOrderProductVariants","sopv","totalAllocatedByColor","total_allocated_amount","total_prepared_amount","total_shipped_amount","posOrderFulfillmentProductVariants","source_warehouses","posOrderProductVariants","pofpv","pos_order_id","pos_order_autocode","loadingPoss","target_warehouse_name","source_warehouse_name","totalShippedByColor","warehousesById","changeWarehouses","checkTransfer","filterType","getTransferAmount","checkSale","getSaleAmount","checkPurchase","getPurchaseAmount","ndProductMainInformationController","INVENTORY_POLICY_TYPES","$mdSelect","PRODUCT_TYPES","DEFAULT_AUTOCOMPLETE_PAGE_SIZE","PRODUCT_TYPES_REVERSE","PRODUCT","PRODUCT_BUNDLE","GIFT_CARD","RAW_MATERIAL","1","2","3","4","saveProductListener","saveProduct","GS1_CODE_128","product_type","b2b_ecommerces","selectedUniqueB2b","postSaveProduct","isUpdate","NOTES_MAX_LENGTH","singleFile","useFlowjs","currencyFontIcon","fileReader","FileReader","readAsDataURL","productForm","$dirty","origin","group","productApi","isProductBundle","productBundles","fileSuccess","cancelProduct","showNewObjectOptionDialog","newCompositionAdded","largestTagLength","maxLength","setUniqueB2bToProduct","manageStockChanged","manage_stock","getProductTypeImage","productTypeChanged","isProductTypeDisabled","CONTACT_TYPE_MANUFACTURER","providerChanged","compositionQuerySearch","compositionSearchText","compositionChanged","inventoryConfiguration","ecommerceProductRestrictions","ndProductEcommerceController","ECOMMERCE_SYNC_OPTIONS","$sce","showForceVariations","tempColorDIct","tempSizeDIct","syncSiteProduct","ECOMMERCE_PLATFORM_ZALANDO","siteProductsDict","sync_enabled","synchronizing","siteProducts","force_creation","checkSyncSiteProductFinished","waiting_to_synchronize","isImportation","interval","importing","updateSiteProduct","siteProductId","showSyncColumn","sitesDict","ECOMMERCE_PLATFORM_WIX","showForceSyncDialog","contentElement","showForceSizeVariations","showForceColorVariations","sites_data","categories_data","web_categories","showAdminActions","isSuperAdmin","importProduct","external_id","external_ids","showErrors","rawMessage","error_message","trustAsHtml","min-width","showWarnings","warning_messages","warning_message","full_warning_messages","clickSiteSwitch","saveSiteProduct","showConfig","siteProductsEditDict","active","ECOMMERCE_PLATFORM_SHOPIFY","showForceCreationCheckbox","showLog","log","getButtonText","siteId","deleteSiteProduct","showDeleteButton","showErrorColumn","ECOMMERCE_PLATFORM_CUSTOM_API","showNeverSynchronizedText","ECOMMERCE_PLATFORM_CUSTOM_CSV","last_sync","showNextSyncText","next_sync","showActiveColumn","showForceSyncSizeDialog","showForceSyncColorDialog","showAndHideConfig","sync_stock_only","allow_sync_productvariants_by_variant","isMiraviaProduct","only_leafs","siteProductBlocked","MARKETPLACE_PLATFORM_MIRAVIA","hasCustomOptions","hasCustomName","hasCustomDescription","hasCustomLongDescription","hasCustomCode","selectAllVariants","variantsList","existingVariants","sync_variants","newVariants","showSlug","color_code","size_code","sp","ndProductChipVariantsController","DEFAULT_CATEGORY_NAME_LABEL","DEFAULT_CATEGORY_SIZE_NAME_LABEL","DEFAULT_CATEGORY_COLOR_NAME_LABEL","categoryName","isCustomName","is_color_category_name_custom","is_size_category_name_custom","colorVariant","sizeVariant","computeSelectedCategories","ready","productHasBeenUpdatedListener","getCategory","getCategoryNameLabel","isSecondOption","getCategoryName","variantAdded","categoriesIds","self","swappingVariants","onVariantsUpdate","chip","onDelete","exclude","available","categoryAlreadySelected","variantAlreadySelected","selectedVariant","showAllVariants","excludeCategories","newSelectedVariant","alreadySelectedVariant","selectedIds","onCategoryNameUpdate","showSwapCategoriesDialog","NdProductAutocompleteController","DTO_ORDER_TYPES","productSearchText","productsQuerySearch","TRANSFER_ORDER","hide_bundles","selectedProductChange","setFocus","getElementsByTagName","ndOrderProductController","secondaryVariantAndTotal","newTotal","calculateTotalBySecondaryVariant","totalsBySecondaryVariant","totalCost","order_product","validateOrderProductWrapper","onChange","colorsWithAmount","totalAmountFilter","console","time","totalsByMainVariant","source_stocks","sourceStockByProductVariantId","target_stocks","targetStockByProductVariantId","deprecated","secondaryVariantsAndTotals","orderProductVariantByVariantsIds","orderProductVariantByVariantsIdsInverse","oldSizesBId","oldColorsBId","productVariantPriceBySizeAndColor","total_cost","product_variant_prices","need_update","tempOrderProductVariant","removed","pending_to_receive_amount","pending_to_prepare_amount","isTotal","timeEnd","showPrices","targetWarehouse","ndOrderDeliveryProductController","orderDeliveryProductVariantsByColorAndSize","saveOrderDeliveryProductVariant","orderDeliveryProductVariant","pointer","totals","prepared_amount","shipped_amount","received_amount","orderDeliveryProductVariants","order_delivery","ordered_amount","ndCsvEcommerceController","sitesRules","rules","backup","initMetadata","updateLeafs","saveEvent","cancelEvent","resetHipercalzadosCsv","destroyEvent","hasSelected","rule","toUpperCase","replaceAll","required","col","meta","children","nameById","collectionById","available_collection","custom_name","getSelected","items","leafs","immersion","noTranslate","checkLeafsStatus","switchCollapsible","clearMetadata","ndBundleContentVariantsController","updateVariant","newVariant","bundle_content_variant","openProductSearchDialog","bundle_content_variants","resultVariant","bundle_variant","bundleContentVariant","saveBundleContentVariants","bundle_data","deleteBundleContentVariant","bundleVariantId","initBundleContentVariantAmount","saveBundleContentVariant","changeVariants","inStock","productVariantBundleProductVariant","saveBundleContentVariantsListener","ndAttributesCardController","AttributeCategory","Attribute","AttributeCategoryValue","addAttributeCategory","attributeCategory","newAttributeCategory","attributeCategories","ac","attributeCategoriesAutocomplete","attributeCategoryValue","attributecategory","attributecategory_instance","attributeCategoryValues","attributeAutocomplete","saveAttributeCategoryValues","attributeCategoriesQuerySearch","attributeQuerySearch","attributeSearchText","attribute_category","createAttributeCategory","isAttributeCategory","specificAttributeCategory","transformChip","isObject","removeAttributeCategory","attribute_categories","getAttributes","availableAttributes","customOptionClickedBehaviour","acv","attribute","isSingleAttribute","removeAttributeCategoryValue","setCategoryAttributes","waitingSetCategories","acById","displayedInInputContainer","isText","isJson","isInt","isDecimal","singleAttributeChanged","singleAttributeInstance","multipleAttributeChanged","multipleAttributeInstances","removeMultipleAttribute","addMultipleAttribute","productSavedEvent","attribute_instances","ndAdjustmentOrderProductController","orderProductVariantsBySize","sourceStockByColorAndSize","product_variant__color","product_variant__size","VariantsSelectorDialogController","selectedVariantsIds","variantsByCategoryId","allCategories","selectedId","currentCategoryId","variantsFilter","selectVariantsForm","fixed","onSelectorChange","isSelected","selectSelectedVariants","UidsSearchDialogController","allowCreate","showAll","warehouseName","operation","excludeUids","initSearch","saveSelectedState","columnState","loadSelectedState","savedState","statusFilter","uidToSearch","order_delivery_id","transfer_order_delivery_product_variant_to_prepare","transfer_order_product_variant_to_receive","add_uid_to_purchase_order_delivery_for_devolution","recordsFiltered","uidStocksById","split_amount","totalSelected","uidStocks","enableFooter","paginationPageSizes","useExternalSorting","savedColumn","searchUID","uidStockId","createUidStock","newUidStock","editUID","EditUidDialogController","STOCK_MOVEMENT_REASONS","isEditMode","editUidForm","reason","warehouseIsDisabled","productVariantIsDisabled","warehouseSearchText","disableSavingButton","amountChanged","movements","STOCK_MOVEMENT_REASON_BREAKAGE","STOCK_MOVEMENT_REASON_EXPIRY","STOCK_MOVEMENT_REASON_ROBBERY","STOCK_MOVEMENT_REASON_TESTER","STOCK_MOVEMENT_REASON_COURSE","STOCK_MOVEMENT_REASON_INTERNAL_USE","STOCK_MOVEMENT_REASON_LOSS","STOCK_MOVEMENT_REASON_ADJUSTMENT","STOCK_MOVEMENT_REASON_PRESS_GIFT","STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT","STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT","STOCK_MOVEMENT_REASON_CUSTOMER_GIFT","STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT","STOCK_MOVEMENT_REASON_OWNER_GIFT","STOCK_MOVEMENT_REASON_OTHER","UidsAddDialogController","purchase_order_delivery_product_variant","purchase_order_delivery","bind","notVisible","withClass","sale_order_delivery_autocode","addUidStock","expirationDate","uidListenerCallback","ResurrectUidDialogController","uidID","selectedWarehouse","stock_warehouse_id","ERROR_04027_UDI_ALREADY_ALIVE","ERROR_04028_UDI_WITH_NO_STOCK_INSTANCE","validForm","UidMovementsDialogController","UIDId","STOCK_MOVEMENT_TYPES","STOCK_MOVEMENT_AUTOCODE_DICT","getGridProductsPage","stock_movement_types","stock_movement_reasons","stock_movement_autocode_dict","columnsState","pinned","getColumnVisibility","datetime","saveSelection","editMovement","StockMovementDialogController","hasReasonWhenInit","deleteReason","ProductVariantSelectorGridController","BarcodeService","getGridProductsPagePostData","fields","long_url_get","v","keptSelectionArray","registerDataChangeCallback","treeBase","expandAllRows","allSelected","part","array","selection","rowSelectionChanged","updateSelectedRows","rowSelectionChangedBatch","getSelectAllState","codeSku","grouping","groupPriority","enableRowSelection","toggleSidenav","sidenavId","barcodeListenerCallbackId","subscribeBarcode","unsubscribeBarcode","changed_row","ProductSearchController","initVariantsComplete","dtVariantsInstance","updateAmounts","clickedProduct","headerVariantCallback","headerVariantCompiled","rowVariantCallback","multipleProducts","selectAllProductsFromTable","selectedProductDict","itemId","variantsTable","indexProduct","p","selectedAmountsDict","productsById","getVariants","isChecked","isVariantChecked","tabIndex","filterSite","sourceUnderMinimum","targetUnderMinimum","sidenavLockedOpen","hideBundles","filterBrands","filterCategories","filterSeasons","fetchingVariants","showProductVariantSelector","productsDict","dtVariantsOptions","baseUrl","collectionId","presale","under_minimum","scrollX","fixedHeader","stateSaveCallback","settings","stateLoadCallback","dtVariantsColumns","showDialog","orderProductsBackup","filterByColumn","table","lastPage","info","lastPageAllSelected","toArray","productInTable","deselectProduct","selectAllVariant","productIndex","isIndeterminate","getProductsCheckboxIcon","getProductsCheckboxClass","toggleAndSelectAllVariants","tempDict","unselectProduct","setVisibleTable","reloadProducts","enabled","ExchangeProductVariantsDialogController","errorMessageKey","showWaringMessage","getProductVariantDetails","EcommerceCategoryTreeDialogController","c","recursiveIndexFilterPath","filterPath","childrenFilterPath","child","ChangeCoverDialogController","selectedImage","productImages","changeSelectedImage","img","is_cover","ndPickingPackingShippedListController","PICKABLE_ORDER_STATUS","PACKING_STATUS","PACKING_ORDER_STATUS_COLORS","uiGridGroupingConstants","gridApiInitializedUnwatch","pickingPackingPickableOrders","storageLabel","PICKABLE_ORDER_STATUS_SHIPPED","packing_order_id","parent_autocode","constructCellTemplateLink","target_destination","assigned_to","treeAggregationType","aggregation","SUM","customTreeAggregationFinalizerFn","rendered","ndPickingPackingToPrepareListController","PICKABLE_ORDER_STATUS_PENDING","getSelectedGridRows","createPickingOrder","serialNumberTypeId","creating","pickingOrder","serialNumberType","pos_order_fulfillment_ids","sale_order_delivery_ids","transfer_order_delivery_ids","picking_order","createPackingOrder","ordersType","ordersIds","pickingPackingPackingOrder","pickable_order_ids","generatePickingOrder","generatePackingOrder","picking_order_default_serial_number_type","packing_order_default_serial_number_type","inventoryConfigurationId","serialNumberTypeType","SERIAL_NUMBER_TYPE_PACKING_ORDER","ndPickingPackingPickingListController","PICKING_STATUS","PICKING_ORDER_STATUS_COLORS","PICKABLE_ORDER_STATUS_IN_PROGRESS","picking_order_id","pending_picked_amount_not_finished","ndPickingPackingPickedListController","PICKABLE_ORDER_STATUS_DONE","idRowCreated","picked_quantity","create_packing_order","pickingOrderId","ndPickingPackingPackingListController","PICKABLE_ORDER_STATUS_PACKING","ndPickingPackingPackedListController","PICKABLE_ORDER_STATUS_PACKED","openShippingPackingDialog","pickableOrders","autocodes","hasParcels","packingOrder","markAsShipped","packing_order","openShippingPackingDialogUnwatch","selectedRowsChangedUnwatch","packingOrderIds","ids","ndPickingPackingActionsController","showPackingButton","navItem","showPickingButton","showShippingButton","anySelection","canCreatePackingOrder","InvoiceType","INVOICE","InvoiceData","PricingTiers","PROFORMA","QUOTE","SelectSerialNumberTypeDialogControllerPickings","packing_order_default_serial_number_type_id","FinishPickingOrderDialogController","totalPicked","isPacking","isShipping","translationData","pickedAmount","mainTitle","colorBadgeClass","statusName","allPicked","finish","FinishPickingAndPackPickingOrderDialogController","getIsSendPackingOrderFromStorage","setIsSendPackingOrderToStorage","sendPackingOrder","processPacking","PackingProductsController","PosOrderFulfillmentShippingBox","SENDCLOUD_SHIPPING_METHODS","PackingOrder","byteArrayBufferService","ITEM_PACKING_STATUS","ITEM_STATUS","generatingDelivieresPdf","deliveryUrl","PACKING_ORDER_STATUS","showSendcloudSettings","shippingBoxes","sendcloudShippingMethods","selectedSendcloudShippingMethod","sendcloudOptions","printLabelsAutomatically","printDeliveriesAutomatically","volumeWeight","shippingMethodSearch","generatingOrderPdf","cancelParcel","nonStorableFilters","defaultShippingBox","hasSendcloud","hasInstalledAppEnabled","SENDCLOUD","toggleVisibilitySendcloudSettings","createShippingBox","removeShippingBox","pofsb","removing","pickingPackingPackingOrderShippingBoxes","instanceIndex","packingOrderShippingBoxes","sb","packing_order_shipping_box","bulkEditStatus","packed","selectedItems","getSelectedRows","pickingPackingPackingOrderProductVariants","PENDING_TO_PACK","updatePackingOrder","checkAndFinishDialog","storeShippingMethod","restoreShippingMethod","barcodeListenerCallback","packingOrderProductVariantId","pofShippingBox","pof_shipping_box","PACKED","packing_order_product_variant_id","isPendingToPack","isTotallyPacked","is_totally_packed","tagAndFinishSendcloud","Audio","playErrorSound","downloadLabels","handleCancel","okButton","showCancelDialog","finishing","printDeliveriesPdf","dispatchEvent","MouseEvent","pullingPdfFileUrl","shippingMethods","errorData","showGetShippingMethodsError","isArray","shippingMethod","SENDCLOUD_UNSTAMPED_LETTER","errorResponse","autoAssignToAllProducts","shippingBox","packingOrderProductVariant","shippingBoxId","creatingShippingBox","shipping_box","showErrorDialog","getTranslatedError","errorCode","defaultTranslationKey","translationKey","translatedError","appendPackingOrderMessage","packingOrderAutocode","packing_order_autocode","printLabels","bytes","embedElement","popupWindow","b64","allPacked","pickingPackingPackingOrders","print_labels","sendcloud_shipping_method_id","all_packed","volumetric_weight","volumetricWeight","print_deliveries","printingSendcloudLabels","ERROR_09008_MISSING_WAREHOUSE_CONTACT_PERSON","noop","destination","withSendcloud","totalPacked","total_packed","finishPacking","checkSendcloudOptions","packingOrderSendcloudData","createShippingBoxWithProductVariant","errorText","PackingDetailsController","PackingActivity","usersList","isLoading","searchUserText","updatePackedBy","packingActivity","toJson","ShippingDialogController","autocodesString","FinishPackingOrderDialogController","packedAmount","LowStockReplenishmentsController","openAnalysisInformationDialog","analysisPeriodDays","analysis_period_days","orderFrequency","order_frequency_days","replenishmentWarehouse","replenishment_warehouse_name","LowStockPurchasesController","ndProductLabelDesignCardController","ProductLabelDesign","ZOOM_FACTOR","setDefaultProductLabelDesign","productLabelDesign","emitProductLabelDesign","hasCustomLabelFeature","closed","productLabelDesigns","productLabelDesignScopeListener","previewProductVariant","colorCode","sizeCode","description_long","customText","fieldsClosed","layoutClosed","newProductLabelDesign","productLabelDesignBackup","getLabelPreviewStyle","labelWidth","getLabelWidth","labelHeight","getLabelHeight","label_top_margin","label_right_margin","label_bottom_margin","label_left_margin","getLabelRowStyle","getSheetPreviewMarginStyle","page_top_margin","page_right_margin","page_bottom_margin","page_left_margin","getTableRows","getTableCols","cols","isSkiped","start_at","getFieldFromPreviewProductVariant","field_name","custom_label","getStyleFromPreviewProductVariant","font_size","text_align","bold","italic","underline","spacer_height","getPreviewBarcodeStyle","getFieldByFieldName","imgWidth","imgHeight","swap","barcode_align","barcode_height","barcode_vertical","moveFieldForward","moveFieldBackward","layoutSelected","isCustomLayout","saveDesign","saveAsNewDesign","tmpProductLabelDesign","onProductLabelDesignChange","previousPricingTier","setSkipped","setStartAt","getPartNumber","page_layout","getButterflyCellStyle","style","withMM","multilabel_width","getButterflyRowStyle","label_height","ImportProductsController","importationInstance","ImportationData","DONE","importerContext","changesMade","importationId","importationsById","statusColors","IN_PROGRESS","ENQUEUED","VALIDATING","PENDING_TO_VALIDATE","VALIDATION_DONE","importer","searchInput","searchRequest","total_items","total_items_in_file","has_errors","showImportationTypeDialog","ImportEditDialogConfig","InventoryImportImagesController","DTOptionsBuilder","DTColumnDefBuilder","selectedStep","productImport","code_index","name_index","origin_code_index","group_code_index","cover_index","images_index","category_code_index","category_name_index","subcategory_code_index","subcategory_name_index","composition_name_index","brand_code_index","brand_name_index","season_code_index","season_name_index","provider_index","color_category_name_index","color_code_index","color_name_index","size_category_name_index","size_name_index","tags_index","description_index","description_long_index","fob_price_index","fob_price_currency_index","ddp_price_index","default_barcode_type_index","discount_active_index","manage_stock_index","is_noos_index","catalog_index","is_raw_material_index","width_index","height_index","depth_index","weight_index","extra_shipping_fee_index","attribute_category_index","attributes_index","web_categories_index","product_variant_barcode_index","product_variant_sku_index","pricing_tiers_indexes","tax_id","warehouses_stock_indexes","sites_external_ids_indexes","scrollTo","columnName","productImagesImportStep","code_separator","productImportsStep","changeStep","draftByCode","selectAllDataImports","fromFnPromise","validated_data","withPaginationType","withDisplayLength","withDOM","variant_errors","previousStep","notes_index","created","old_category_id","create","changeSelectDataImport","restart","ImportationWizardDialogController","COUNTRIES_DICT","COMPANY_SECTORS","IMPORTING_INTERVAL_MS","VALIDATING_INTERVAL_MS","PRODUCT_VARIANTS_TEMPLATE_URL","PRODUCTS_TEMPLATE_URL","SERIES_TEMPLATE_URL","BUNDLES_TEMPLATE_URL","STOCKTAKING_PRODUCT_VARIANTS_TEMPLATE_URL","startValidationPulling","checkValidationInterval","importation","validationErrors","checkImportationProgress","checkImportationInterval","importationWentWrong","msWizardController","selectedIndex","currentBarProgress","hasFileAttached","fileLoadedSuccessfully","fileColumnsRules","requirementsCompleted","draggingFile","targetHeadersByOrigin","requiredToAssign","validationWarnings","productErrors","dtColumnCache","properties","propertyKey","spacer","param","onceFileUploaded","isError","checkCurrentStep","msWizard","validate","importation_id","import","onMandatoryHeadersChange","enable","selections","downloadImportationFile","goBack","goFront","allowToUpload","stepDisabled","data_preview","ndColumnsSelectorController","MAX_ITEMS_TO_SHOW","MULTIPLE_VALUES_KEY","SEPARATOR_REGEX","columnItemsByHeader","targetHeaders","once","getPreviewItemsByHeader","buildColumnItemsByHeader","columnItems","onTargetSelectorChange","isTargetHeaderAvailable","consumedTargetHeaders","getOriginHeaders","idx1","idx2","selectedProperties","mandatory","autoSelectTranslation","translationNormalized","normalize","ident","preset","matchingHeader","original_reference","matchingTargetHeader","CategoryTreeDialogController","newSelectedCategories","initialSelectedCategories","deselectedCategories","CategoryMassivePercentageDialogController","loyaltyPercentage","noneChecked","ndNewObjectOptionController","saveAndClose","saveObject","apiName","selectedParent","secondaryPlaceholder","keypressHandler","nextId","keyCode","formatComposition","word","charAt","match","number","getChipNumber","getChipName","optionLabel","parentIcon","parentName","IntegrationAppData","VERIFACTU","subcontent@app.integration_apps.verifactu","VerifactuIntegrationInstalledAppsData","VeriFactuDetailsController","VerifactuIntegrationInstalledApp","selectedVerifactuIntegrationInstalledApp","integrationApp","fiscalAddresses","fetchingInstalledApps","verifactuIntegrationInstalledApps","createVeriFactuApp","selectedTabIndex","selectVeriFactuApp","verifactuIntegrationInstalledApp","ndIntegrationCardController","INSTALLED_INTEGRATION_APP_STATUS","INTEGRATION_APP_AVAILABLE_STATUS","getSubType","app","subtype","getWebUrl","web_url","getIntegrationName","getIntegrationDescription","openIntegrationAppDialog","isAvailable","isCompatible","contractedPlanLimitCode","HOLDED","HOLDED_INTEGRATION_APP","KUBIBAI","KUBIBAI_INTEGRATION_APP","SENDCLOUD_INTEGRATION_APP","SAGE_200","SAGE_200_INTEGRATION_APP","instance","wasInstalled","ENABLED","DISABLED","isInstalled","isNotAvailable","NOT_AVAILABLE","isBeta","BETA","hasWebUrl","getIncompatibleApplication","applicationNames","incompatible_with","holded","kubibai","mailchimp","sendcloud","epos_italy","verifactu","AVAILABLE","is_compatible","integrationApps","apps","ERROR_09004_SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND","ndIntegrationDialogController","ContractedPlanLimit","showUpgradePlan","showPlanLimitAlert","showUpgradePlanTitle","showUpgradePlanBody","installed","disableSaveButton","EPOS_ITALY","public_key","secret_key","getFormFilepath","base","initKeys","saveWarehouseSenderAddress","warehouseSenderAddressId","sender_address_id","sendcloud_installed_integration_app_id","sendcloudWarehouseSenderAddress","copyToClipboard","blocksCreation","allowsCreation","planName","EXTRA_ECOMMERCE","EXTRA_ECOMMERCE_VOUCHERS","EXTRA_MARKETPLACE","EXTRA_CSV","EXTRA_API","SiteData","subcontent@app.ecommerce.sites.site","AttributeCategoriesData","RoutingRulesData","CountriesData","orders","subcontent@app.ecommerce.picking.product","previousStateParams","ndSiteDetailsController","$location","ECOMMERCE_PLATFORMS_NAMES","CSV_DELIMITERS","AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY","AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY","RETURN_MANAGEMENT_POLICY","AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY","startPullingTestResults","pullingInterval","testing","last_test","test_results","INTERVAL_MS","managesOrders","ECOMMERCE_PLATFORM_MAGENTO","MARKETPLACE_PLATFORM_AMAZON_US","MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES","MARKETPLACE_PLATFORM_MIRAKL_ECI","showDefaultPaymentMethod","ECOMMERCE_PLATFORMS_TO_LIST","ECOMMERCE_PLATFORMS_NAMES_TO_LIST","customWarehousePolicy","replenishmentWarehousePolicy","returnManagementPolicy","selectedPlatform","importingVariantCategories","shopifyAuthUrl","shopifyAuth","shopifyConnected","shopify","searchWarehouse","shopifyWarningClosed","timezones","searchTimezone","delimiters","character","CSV_DELIMITER_SEMICOLON","CSV_DELIMITER_COMA","CSV_DELIMITER_TAB","fulfillmentPolicies","AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_NONE","iconInfo","AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_WITH_MORE_STOCK","AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE","AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY","autoManageProductVisibilityPolicies","AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_MANUAL","AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_BY_STOCK_LEVEL","cplData","contractedPlanLimits","contractedPlanLimitsDict","contractedPlanLimitEcommerce","contractedPlanLimitMarketplace","contractedPlanLimitCSV","submitShopifyForm","siteForm","endDate","brand_category_name","discount_end_datetime","setHours","checkFields","scheduled_hours","consumer_key","consumer_secret","scheduled_hours_products","url_products","ticket_configuration","serial_number_type","testSite","showUrlStock","showWarehouse","showTicketConfig","showSerialNumber","showTests","isNewSite","trustSrc","src","trustAsResourceUrl","showBrandInfo","showEciInfo","showCompositionInfo","showTestErrors","openInfoDialog","policy","auto_assign_custom_warehouse_policy","siteWarehouses","showSyncStockOnly","MARKETPLACE_PLATFORM_HIPERCALZADO","showAutoServeOrder","enabledChanged","hasAdvancedConfiguration","connect","getTimezones","showInfoDialogForFulfillmentPolicies","showAlert","cpl","ECOMMERCE_PLATFORM_MIINTO","contractedPlanLimitAPI","contractedPlanLimitVouchers","isDateWithinLast10Minutes","tenMinutesAgo","setMinutes","getMinutes","ticketConfigurations","SyncOrderFromSiteDialogController","originId","onlyMissingOrders","onlyWarningOrders","dateRange","date_start","date_end","origin_id","only_missing_orders","only_warning_orders","NewOrderOriginDialogController","warehousesData","sitesData","GenerateLabelsWithSendcloudController","ArtifactService","posOrdersFulfillments","onLabelsGenerated","storeVolumetricWeight","generating","fetchingBoxes","selectedShippingBoxId","selectedShippingMethodId","CUSTOM_SHIPPING_METHOD_CHECKOUT","errorMessages","ERROR_09002_INVALID_FULFILLMENT_TYPE","ERROR_09003_FULFILLMENT_WITHOUT_ITEMS","ERROR_09005_SENDCLOUD_NOT_KEYS_PROVIDED_EXCEPTION","ERROR_09006_SENDCLOUD_ORDER_ALREADY_PROCESSED_EXCEPTION","ERROR_09007_ORDER_WITHOUT_CUSTOMER","generateLabels","posOrdersFulfillment","shipping_box_id","redownload","artifact_id","downloadLabel","storeSelectedShippingMethodId","storePrintDeliveriesAutomatically","storeSelectedShippingBoxId","toggleVolumetricWeight","buttonActionText","SelectRegisterActivityController","selectedRegisterActityId","registerActivities","register_code","closed_at","closed_by","registerActivityId","ExecuteSupplyingPolicyController","warehousesResults","StockoutService","sitePlatformName","filteredFulfillments","loadingFilteredFulfillments","action_is_replenish","auto_assign_replenishment_warehouse_policy","AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_BY_WAREHOUSE_ID_SELECTED_BY_SITE","getTransferStatusLabel","getPurchaseStatusLabel","getWarehouseLabel","fulfillment","custom_source_warehouse","getSupplyingPolicyText","translatedText","updateStockoutAmount","isCheckedForReplenish","stockoutAmount","stockoutChecked","maxStockoutAmount","initIsCheckedForReplenish","pos_order_fulfillments","pof","pos_order_fulfillment_product_variant_instances","selectedInstances","fulfillmentId","stockouts","pos_order_product_variant_id","pos_order_product_variant","pos_order_product_variant_instance","pos_order_fulfillment_id","ensureNotEmpty","stockout_data","setStockoutData","AddDeliveryNoteDialogController2","no_invoice","addDeliveryNote","delivery","ContactData","subcontent@app.contacts.contact","InvoicesData","ContactDialogController","msUtils","CONTACT_TYPES","CONTACT_PERSON_TYPES","PAYMENT_TERM_TYPES","CONTACT_PERSON_TYPES_REVERSE","CONTACT_INVOICING_TYPES","saveEditingAddress","editingAddress","postalAddresses","address","newAddress","newContact","is_billing_address","allFields","contactTypes","personTypes","countries","contactInvoicingTypes","editingPerson","selectedTab","toggleInArray","en","locale","es","ca","fr","POS_ORDERS_VIEW","pos_order","units_sold","units_returned","dtOptionsInvoices","dtColumnsInvoices","total_incl_tax","addNewContact","addressForm","$invalid","$pristine","saveContact","savingContact","deleteContactConfirm","cancelDialog","showInformationActions","editAddress","editingAddressBackup","deleteAddress","cancelEditingAddress","cancelDeletingAddress","confirmDeletingAddress","showAddressActions","editPerson","person","editingPersonBackup","deletePerson","cancelEditingPerson","saveEditingPerson","persons","newPerson","cancelDeletingPerson","confirmDeletingPerson","showPersonsActions","CONTACT_TYPE_SHOP_CUSTOMER","person_type","NATURAL_PERSON_TYPE","newDate","birthday","ImportContactsDialogController","IMPORT_URL","contactType","contactsImport","ContactAddressDialogController","AddressData","saveAddress","ndDynamicReportFieldCardController","DynamicReportFilter","initSelections","selectedOptions","optionHeaders","selectedFilters","selectedSorting","selectedOptionsForDnd","useFilters","sorting","label","optionRemovedWatcher","checkNeedToRemoveSortingFromRemovedMetricOption","availableSortingWatcher","availableSorting","sendChangeCallback","onSelectionChange","arrayDifference","arr1","arr2","removedOption","removeSorting","helpText","availableOptions","availableFilters","selectedFiltersForDnd","selectedFilter","selectedSortingField","localizationMap","dndItemMoved","getFieldName","startsWith","onSelectChange","temp","added","removeOption","matchingAttr","onFilterChange","newFilter","onSortingChange","updateSortingDirection","selectedDynamicReportFilter","purchase_order_ids","purchase_order_season_ids","transfer_order_ids","sale_order_ids","adjustment_order_ids","product_ids","product_category_ids","product_subcategory_ids","product_brand_ids","product_season_ids","pos_order_register_ids","pos_order_site_ids","pos_order_seller_ids","pos_order_customer_ids","pos_order_source_warehouse_ids","apiEndpoint","parts","resource","selectedValues","Array","itemInstance","getChipDisplayValue","possibleAttributes","primaryAttribute","secondaryAttribute","optionMatchesSearch","q","searchFilter","translatedSortKey","it","rawName","f","s","toggleOption","dndIndex","toggleFilterOption","dndIdx","def","toggleSortingField","existingIndex","addOption","onDateFilterChange","restoreOptionsWatcher","selectedOptionsWatcher","selectedFiltersWatcher","require","ndDynamicReportController","fusePalettes","presetName","timeInterval","presets","report","dimensions","columnDimensions","selectedDimensions","selectedColumnDimensions","metrics","metricHeaders","selectedMetrics","selectedTotals","debounceTimeout","chart","getData","dimensionsChanged","saveSelections","columnDimensionsChanged","metricsChanged","sortingChanged","applyFilters","openExportDialog","fileType","export","changeDate","changePageSize","getTableData","savePagination","changePageManually","goToFirstPage","goToPreviousPage","goToNextPage","totalPages","goToLastPage","timeIntervalChanged","getStorageKey","restoreFilters","getRowValue","presetChanged","updateSortingOptions","sorts","translated","field_value","storedPagination","showChart","dateRangeWatcher","storedDateRange","today","days","getDay","getFullYear","getMonth","getDate","todayIndex","storedDimensions","safeParse","storedColumnDimensions","storedMetrics","storedSorting","storedFilters","deserializeFilter","storedTimeInterval","filterMap","toDate","x","prototype","call","getFilterMetaByName","applyPiece","opRaw","valueRaw","op","normalized","isNumericMeta","isNumericOp","n","scheduleUrlSync","urlSyncDebounce","syncUrlFromState","dims","colDims","formatISO","toParams","k","assign","test","dd","padStart","getChartData","column_dimensions","formatFilters","ceil","key_name","isMetric","tempData","series","groupedData","allIntervalDates","chartDom","echarts","selectedMetric","metric","defaultDimensionName","dimension","intervalDate","interval_date","currentDate","setDate","day","diff","setMonth","seriesIntervals","totalData","markArea","area","itemStyle","isoWeekday","xAxis","nextDay","hex","lineStyle","smooth","areaStyle","tooltip","trigger","valueFormatter","formatter","gridTooltipFormatter","legend","orient","bottom","left","boundaryGap","axisLabel","inside","margin","formatXAxisLabel","yAxis","right","top","containLabel","setOption","serializeFilter","flat","resizeChart","resize","startDate","ticket","axisValue","marker","seriesName","global","dynamicReportName","trans","m","tok","shift","onResizeWatcher","reportTitle","ExportReportDialogController","exportReport","file_type","send_email","email_to","ndWeeklyHeatmapController","unregisterDateEnd","updateHeatmap","accumulate","accumulateHeadmap","warehouseIds","heatmapData","max_value","hours","h","textStyle","fontFamily","animation","y","splitArea","axisLine","axisTick","splitLine","inverse","align","visualMap","itemWidth","inRange","calculable","normal","fontSize","emphasis","borderWidth","borderColor","heatmapChart","ndTopTenController","unregisterDateStart","unregisterSeason","unregisterBrand","unregisterCategory","unregisterSubcategory","unregisterIsNoos","updateTopTen","saveDateRangeToLocalStorage","formatDateToStringLocal","analytics","topTen","topTenType","partial","showSellOuts","sellOuts","ndSellOutController","unregisterIsNOOS","updateSellOut","sellOut","sellOutType","ndProductKpisController","productKpis","ignorables","ndCompanyBasicRetailKpisController","BasicRetailKpi","initOptions","chartOptions","animationEasing","animationDelay","animationDuration","smoothMonotone","sampling","z","chartOptionsDict","grossSalesActualChart","grossSalesPlanChart","percentageToPlanChart","transactionsChart","trafficChart","conversionChart","unitsPerTransactionChart","grossSalePerTransactionChart","unitsSoldChart","averageUnitRetailChart","returnsChart","grossSalesLastYearChart","grossSalesPercentageLastYearChart","unitsSoldCostChart","grossProfitMarginChart","netSalesActualChart","netSalesLastYearChart","detailChartOptions","arg","selectedChart","tooltipDecimals","tooltipUnits","verticalLayout","symbolSize","handleStyle","shadowBlur","shadowColor","shadowOffsetX","shadowOffsetY","dataZoom","yAxisIndex","zoom","getKpis","basicRetailKpis","basicRetailKpisReady","paramsAggregateAsList","date_gte","date_lte","paramsAggregate","basicRetailKpi","basicRetailKpisDict","titleUnit","basicRetailKPI","gross_sales_actual","gross_sales_plan","gross_sales_percentage_to_plan","transactions","traffic","conversion","returns","gross_sales_last_year","gross_sales_percentage_last_year","units_sold_cost","gross_profit_margin","net_sales_actual","net_sales_last_year","unitsReturnedChart","units_per_transaction","gross_sale_per_transaction","average_unit_retail","tempDelay","chartKeys","chartKey","stack","values2","key2","values3","key3","setOptionsColorsByChart","getElementsByClassName","selectChart","basicRetailKpiAggregated","selectedChartId","selectedChartInstance","isSmall","graphic","LinearGradient","offset","cartConfig","refreshDataOnly","deepWatchData","ndBasicRetailKpisTodateTableController","kpi","kpiWtd","kpiMtd","kpiYtd","content_type","object_id","object_ids","ndBasicRetailKpisWidgetController","$mdDateRangePicker","now","basicRetailKpisByCompany","basicRetailKpisByCompanyDict","isArea","interpolate","clipEdge","duration","showXAxis","showYAxis","showLegend","useInteractiveGuideline","tickFormat","formatedDate","interactiveLayer","gravity","classes","selectedColumns","yDomains","toggleColumn","put","toggleWarehouse","sortByHeader","getColumns","filterDates","model","UTC","getUTCMonth","cookie","generateKpisDict","rawData","point","yDomain","ndReportFilterController","FIELD_TYPE_SELECT","FIELD_TYPE_CHECKBOX","FIELD_TYPE_AUTOCOMPLETE","weekday","year","month","dateRangeDict","TODAY","dateStartString","toLocaleDateString","dateEndString","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","ALL","downloading","columnFilterDict","DEFAULT_COLUMNS","ALL_COLUMNS","PERSONALIZED","datesFilter","columnFilter","showDateRange","updateDateRange","checkFilters","emptyColumns","unixRange","toUnixTimestamp","customFields","selectChecked","checked","countColumns","filterColumns","getSelectedColumns","getItemText","selectedItemChange","getSelectedCategoryParam","showPdfDownloadButton","ConflictDeletedProductsDialogController","deletedProducts","AddDeliveryNoteDialogController","customerId","receivedInvoice","selectedDeliveries","searchChanged","salesStatus","onlyMyContact","purchasesStatus","transfersStatus","fiscalAddressPosOrdersStatus","createdDateRange","selectedTransfers","transfersStorageLabel","sourceWarehouses","targetWarehouses","fiscal_address_pending_to_invoice","fiscal_address_contact_id","selectedSales","salesStorageLabel","selectedPurchases","selectedFiscalAddressPosOrders","fiscalAddressPosOrdersStorageLabel","transfers","fiscalAddressPosOrders","getFilterNotifications","selectedDates","generate","UserDialogController","UserData","USER_ROLES","COUNTIRES_ISO_APLPHA_2_EN","newUser","selectedRole","roles","customRoles","hasMultipleFiscalDirectionFeature","showVatHint","username","password","role","has_notifications","addNewUser","msg","userForm","saveUser","deleteUserConfirm","removeUser","usernameChange","hideDelete","r","USER_ROLE_WHOLESALE_VENDOR","USER_ROLE_WHOLESALE_MANAGER","PurchaseAddOnDialogController","priceExclTax","sourceState","purchasing","messageParams","planFeatures","absolute","RoleEditorDialogController","isDuplicate","isCorrect","getAvailableRoles","PresaleData","idPresale","subcontent@app.wholesale.presales.presale","subcontent@app.wholesale.sales.new","SaleData","presaleId","subcontent@app.wholesale.sales.sale","sale_id","SaleOrderData","SaleOrderDeliveryData","B2BEcommercesData","EXTRA_B2B_ECOMMERCE","B2B_WAREHOUSE_LIMIT","WholesaleSaleProductsController","visualizationOptions","show_tax_select","shippingDate","productVariantOptions","leftAmount","rightAmount","initializeSaleEvent","WholesaleSaleInvoicingController","PAYMENT_STATUS_TYPES","LANGUAGES","getAddressesById","addressId","minDate","searchSelectHeader","paymentStatusTypes","obj","getBillingAddress","billing_address","getShippingAddress","shipping_address","sale_order_payments","removePayment","updatePayment","WholesaleSaleDetailsController","delivery_notes_serial_number_type","defaultPricingTier","showroomsAvailable","isNewSale","sale_order_devolution_default_serial_number_type","sale_order_default_serial_number_type","sale_order_delivery_devolution_default_serial_number_type","sale_order_delivery_default_serial_number_type","showroom","sales_agent","sales_agent_instance","cancel_date","detailsForm","selectSalesAgent","salesAgent","creatingSalesAgent","salesAgentSearchText","salesWarehouseSearchText","aux_address","postalAddress","is_shipping_address","invoice_type","exclude_taxes","surcharge","early_payment_discount","actionSaveButton","translateSaveButton","defaultCurrency","pricingTierMatch","salesAgentQuerySearch","createSalesAgent","getSelectedSalesAgentName","WholesaleSaleDeliveryController","getTotalPriceEvent","totalOrderPrice","total_price_excl_tax","total_excl_tax","total_price_incl_tax","subtotal_early_payment_discount","subtotal_discount","subtotals_by_tax","saleOrderDeliveryFiles","sale_order_delivery","firstImageLoaded","getContactShippingAddresses","unbindInvoice","invoiceSerialNumberTypeId","wholesale_invoice_default_serial_number_type","summary","pricing_tier_currency","isShippingAddressSelectorEnabled","DRAFT","PREPARED","isInPickingPackingProcess","goPickingAndPackingView","saveSaleOrderDelivery","setShippingAddress","sale_order_delivery_id","serial_number_type_id","linkWithInvoice","unbindInvoiceDialog","onComplete","$actionsSection","$cancelButton","$confirmButton","isNotAllowedToEdit","setSaleOrderDeliveryNotes","downloadInvoicePdf","uploadingFile","uniqueIdentifier","filesAdded","progressValue","progress","media","deleteFile","document_name","dropping","WholesaleSaleDeliveriesController","ORDER_DELIVERY_STATUS_COLORS","creatingNewDelivery","className","displayStart","newDelivery","showNewDeliveryButton","SALE_ORDER_STATUS_RECEIVED","SALE_ORDER_STATUS_CANCELED","NewPresaleDialogController","newSeason","savingSeason","newBrand","savingBrand","presales","saveSeason","saveBrand","WholesalePresalePurchasesController","WholesalePresaleProductsController","defaultRow","substr","newProduct","ProductionData","subcontent@app.manufacture.productions.new","subcontent@app.manufacture.productions.production","ProductionOrderData","WholesalePresalePreordersController","getCreatePurchasesStatus","creatingPurchases","creating_purchase_orders","pullCreatePurchasesStatus","customer_name","showroom_name","sales_agent_name","createPurchases","presale_order_ids","presale_collection_id","createPendingPurchases","newPreorder","WholesalePresaleDetailsController","generateClicked","collectionForm","newBrandAdded","newSeasonAdded","generateCSV","selectedWholesalePricingTier","selectedRetailPricingTier","presalesCSV","wholesale_pricing_tier_id","retail_pricing_tier_id","generatePDF","SalesSearchGiftCardDialogController","searching","giftCardForm","useGiftCard","SalesSearchDevolutionCardDialogController","voucherForm","ProductVariantSelectorDialogController","colorVariantsById","sizeVariantsById","variantsDependencyTree","selectedSizeVariantId","selectedColorVariantId","disableBackButton","getAvailableVariants","onVariantSelected","autocompleteProductVariantSelection","sizeVariantIds","colorVariantIds","in_stock","aux_product_variants","ProductNotFoundDialogController","PaymentStatusDialogController","GATEWAY_ERRORS","DOJO_STATES","DOJO_ERROR_MESSAGES","Comercia","PAYMENT_METHOD_GATEWAYS","isComerciaGateway","pos_order_payment_method","payment_gateway_data","gateway","COMERCIA","isDojoGateway","DOJO","validatePayment","posOrderPaymentMethods","callPaymentService","callRefundComerciaPayment","cancelServer","stopPulling","callPayComercia","init_payment","initPinPad","pulling","checkPaymentStatus","pullingId","isLastTransactionFinished","resultCode","paymentStatus","payment_status","dialogErrorMessage","payment_data","response_code","abortPayment","clearTimeout","confirmCancel","timesRun","cancelling","callCancel","retry","pos_order_payment_method_id","UsersBottomSheetController","listUsers","setUser","NumericBottomSheetController","ndPosOrderVerifactuCardController","VERIFACTU_STATUS","invoiceTabs","selectedInvoice","tabsConfig","selectedTabName","addressLine","cityLine","verifactuData","verifactu_data","qrCodeImage","qr_code_url","verifactuUrl","fiscalAddress","fiscal_address","fiscalInfo","legalName","cityZip","concept","updatedAt","createdAt","selectInvoice","onTabChange","inv","labels","getStatusBadgeClass","showErrorDetails","hasError","isValidWithErrors","isPending","ndPaymentMethodsIconController","hasPaymentMethods","parentObject","getCapital","toLocaleUpperCase","getNumberOfPaymentMethods","numberOfPaymentMethods","getIconsTooltip","tooltipVoucher","separator","getIcon","getPaymentMethodName","hasIcon","hasCapital","PlanningValidationErrorsDialogController","textTitle","textWarning","textFooter","productPlanningConfiguration","proposedStock","orderedStock","minQuantity","proposedValue","goTo","currentOption","scrollIntoView","behavior","ManufactureProductionProductsController","PRODUCTION_ORDER_STATUSES","PRODUCTION_ORDER_STATUSES_REVERSE","production","productionOrders","total_production_order_product_variants","total_order_product_variants","searchProductCallback","productionOrderProducts","production_order","lastAddedByBarcodeScan","addingProduct","oFeatures","bServerSide","currentRows","clear","productionOrderStatus","drawCallback","gotoProductions","cancelOrder","cancelProduce","hidePrices","productionOrdersPrintHidePrices","productionOrdersPrint","productionOrdersPrintCatalog","saveOnBlur","productionOrderProduct","production_order_product","productionOrderProductVariants","PRODUCTION_ORDER_STATUS_DRAFT","productionOrder","initializeProductionEvent","ManufactureProductionMaterialsController","calculatingMaterials","calculateMaterials","ManufactureProductionDetailsController","PRODUCTION_ORDER_STATUS_COLORS","defaultWarehouse","isNewProduction","production_order_default_serial_number_type","WarehouseDialogController","Warehouse","setContractedPlanLimit","WAREHOUSE","saveWarehouse","InventoryWarehouseStockController","subcategoriesByCategory","categoriesWidget","mainChart","donut","cornerRadius","labelType","padAngle","valueFormat","d3","subcategoriesWidget","showControls","showValues","transitionDuration","showMaxMin","rotateLabels","brandsWidget","seasonsWidget","total_by_category","product_variant__product__category__name","stock__sum","total_by_subcategory","product_variant__product__subcategory__name","total_by_brand","product_variant__product__brand__name","total_by_season","product_variant__product__season__name","WarehouseStockLocationsController","searchTextLocation","searchTextProduct","statusByStockLocation","show_only_available","limit","statusByProducts","redirectParams","getStatus","reloadStockLocations","reloadStockLocationsTimeout","newStockLocationWatcher","WarehouseRegistersController","registerLimit","opened_at","salesSerial","serial_number_type_instance","devolutionSerial","pos_order_devolution_serial_number_type_instance","newRegister","allowRegisterCreation","blockRegisterCreation","REGISTER_LIMIT","WarehouseDetailsController","getSerialNumberTypes","selectedTax","default_tax_instance","hasPickingAndPacking","usersUrl","fiscalAddressChanged","getDefaultReplenishmentWarehouseName","replenishment_warehouse","taxQuerySearch","selectedTaxChanged","default_tax","getVerifactuSerialNumberTypes","verifactuApp","getVerifactuApp","verifactu_app","TransferAllDialogController","unableToDelete","userEmail","transferAll","InventoryTransferProductsController","initializeTransferEvent","InventoryTransferDetailsController","isNewTransfer","transfer_order_default_serial_number_type","transfer_order_delivery_default_serial_number_type","replenishment_period_start","replenishment_period_end","gotoTransfers","InventoryTransferDeliveriesController","single_delivery","transferOrderProducts","total_transfer_order_product_variants","total_transfer_order_delivery_product_variants","getTabName","niceDate","transferDeliveryUpdateEvent","dtUIDInstance","transfer_order_delivery_product_variant","InventoryStocktakingProductsController","STOCKTAKING_STATUSES","STOCKTAKING_CLONE_STATUS","STOCKTAKING_STATUS_COLORS","IMPORTATION_TYPE_STOCKTAKING_PRODUCT_VARIANT","getTotals","clone_status","startClonePulling","getImportations","loadingImportations","STOCKTAKING_PRODUCT_VARIANT","importations","searchProduct","stocktakings","totalStocktakingOrderProducts","total_stocktaking_order_products","totalStocktakingOrderProductVariants","total_count","stocktakingOrderProducts","updateStocktakingHistoric","last_stocktaking_change","notFoundReason","not_found_reason","pending_to_apply","showCloneSuccessDialog","READY_TO_CLONE","last_clone","pullingStatus","APPLIED","initializeHistoric","stocktakingChanges","lastStocktakingChange","showStocktakingHistoric","updating","totalPreviousAmount","total_previous_amount","productVariantById","gotoStocktakings","STOCKTAKING_ORDER_STATUSES","deleteStocktakingProductVariant","stocktakingProductVariantId","stocktakingProductVariants","amount_after","product_variants_previous_amount","reset_stock","statusHttp","ERROR_04022_CANCEL_STOCKTAKING_NOT_ALLOWED_DUE_TO_UIDS","ERROR_04024_ERROR_APPLYING_STOCKTAKING_DUE_TO_PENDING_IMPORTATION","stocktakingOrderProductVariant","stocktaking_order_product","stocktakingOrderProductVariants","isDisabled","switchShowStocktakingHistoric","cloneStocktaking","CLONE_IN_PROGRESS","showImportStocktakingDialog","showImportAction","showProgressCircular","showStatusDialog","getSwitchShowStocktakingHistoric","openImportation","menuOpened","initializeStocktakingEvent","loadedDT","showUidsDialogEvent","source_warehouse_instance","stockDetail","order_product_variant_id","getTotalsEvent","reloadProductsTableEvent","updateStocktakingEvent","InventoryStocktakingDetailsController","isNewStocktaking","apply_raw_materials","inventoryConfigurationData","stocktaking_default_serial_number_type","subcategory_instance","collection_instance","created_by_instance","full_name","applied_by","applied_by_instance","apiFunc","searchBrand","searchCategory","searchSubcategory","searchSeason","searchCollection","disableDetails","InventoryPurchaseProductsController","creating_replenishment","pending_to_create_replenishment","checkReplenishmentCompleted","completed","timeoutPromise","gotoPurchases","initializePurchaseEvent","InventoryPurchasePaymentsController","InventoryPurchaseInvoiceController","createDocument","waiting","is_received","purchaseOrderInvoices","emptyTable","pending_update_pdf_file","InventoryPurchaseDetailsController","isNewPurchase","purchase_order_default_serial_number_type","purchase_order_delivery_default_serial_number_type","self_supplied","minimum_stock_replenishment","no_stock_replenishment","negative_stock_replenishment","maxDate","enqueue_replenish","contactName","checkChangeProvider","continueDisable","InventoryPurchaseDeliveryController","OrderDeliveryLine","getTotalOrderProductVariants","updatingTotal","orderedIcon","saveExpectedDate","partialUpdate","setShowSkusCookie","createInvoice","newIcon","purchase_order_delivery_lines","isDisabledDelivery","getSummaryEvent","purchaseOrderDeliveryFiles","editRelatedInvoice","InventoryPurchaseDeliveriesController","drawTable","InventoryProductUidStocksController","refreshUidStocks","columnUidLotName","currentMovItem","addingUidStock","product_variant_ids","mapUIDs","is_available","deleteUID","HTTP_406_NOT_ACCEPTABLE","resurrectUID","copyUID","showMovements","product_variant_name","hasFeatureOrAddon","InventoryProductTranslationsController","gotoProducts","getVariantName","saveProductCallback","cancelProductPricesCallback","saveProductVariantsCallback","cancelProductVariantsCallback","InventoryProductStockController","InventoryProductStockMovementsController","refreshMovements","movementDictById","currentStateItem","purchaseOrderStatuses","purchaseOrderStatusColors","purchasesStorageLabel","wholesaleSalesStorageLabel","dtOptionsMovements","STOCK_MOVEMENT_TYPE_MANUAL_RESET","thead","end","display","attr","dtColumnsMovements","parentAutocode","STOCK_MOVEMENT_TYPE_STOCKTAKING","STOCK_MOVEMENT_TYPE_STOCKTAKING_CANCELLED","STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARED","STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARATION_CANCELLED","STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEIVED","STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEPTION_CANCELLED","STOCK_MOVEMENT_TYPE_TRANSFER_ALLOCATED","STOCK_MOVEMENT_TYPE_TRANSFER_DEALLOCATED","STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARED","STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARATION_CANCELLED","STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION","STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION_CANCELLED","parent_object_id","STOCK_MOVEMENT_TYPE_SALE_ALLOCATED","STOCK_MOVEMENT_TYPE_SALE_DEALLOCATED","STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEIVED","STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEPTION_CANCELLED","STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RETURNED","STOCK_MOVEMENT_TYPE_ADJUSTMENT_ADJUSTED","STOCK_MOVEMENT_TYPE_ADJUSTMENT_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER","STOCK_MOVEMENT_TYPE_POS_ORDER_REMOVAL","STOCK_MOVEMENT_TYPE_POS_ORDER_DEVOLUTION","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PENDING","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_ALLOCATED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_SHIPPED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PICKED_UP","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED","STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_RETURNED","STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_REMOVED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_ALLOCATED_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_SHIPPED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_ALLOCATED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_RETURN_RECEIVED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED_RECEIVED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURNED_RECEIVED_CANCELLED","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_TO_PENDING","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_TO_PENDING","STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURN_RECEIVED_TO_RETURNED","STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_ALLOCATED","STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_SHIPPED","STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_PICKED_UP","getReasonStyle","showMovementDetails","showSaleDialog","InventoryProductStockLocationsController","StockLocation","stockLocationsDict","filteredWarehouses","InventoryProductProductVariantsController","InventoryProductPricingTiersController","InventoryProductOverviewController","InventoryProductService","tempMeasurements","getProductTags","getPricingTierName","product_variant_kpis","measurement_unit","measurements","InventoryProductManufacturingController","$log","selectSelectedProductVariant","selectedProductVariant","selectedProductVariantManufacturings","productVariantManufacturings","updateProductVariantManufacturing","productVariantManufacturing","selected_product_variant_instance","cost_per_item","selected_product_instance","wastage","selectManufacturingCategory","manufacturingCategory","manufacturing_category_instance","manufacturing_category","creatingCategory","addProductVariantManufacturing","manufacturingCategoryQuerySearch","manufacturingCategorySearchText","manufacturingCategories","createManufacturingCategory","productVariantsQuerySearch","productVariantSearchText","selected_product","calculateProductVariantManufacturingTotal","raw","selectProduct","selected_product_variant","selectProductVariant","removeProductVariantManufacturing","calculateOtherCostTotal","calculateTotalCost","pvm","getAutocompleteText","getProductVariantAutocompleteText","getManufacturingCategoryAutocompleteText","setManufacturingDDPPrice","copyManufacturingToProduct","InventoryProductImagesController","updateImageZoomOptions","imageZoomOptions","thumb","medium","large","selectImage","updateVisibleImages","startIndex","endIndex","visibleImages","selectedToUpload","selectedImageVariants","productVariantsByVariantId","colorSearch","savePromise","saveVariants","deleteImage","imageToUpdate","imageApi","productBundleImages","selectImageVariants","selectedProductVariantsById","imageProductVariantsIds","useAsCover","uploadDialog","updatePositions","reorderedImages","debouncedSaveVariants","imageTouched","selectAllFromColor","first","second","InventoryProductEcommerceController","InventoryProductDetailsController","$element","platformIds","platformDict","description_short","min_length","max_length","coverId","saveDescription","cancelDescription","initToggleDescriptions","removeDescriptionHTML","descriptionPasted","removeDescriptionLongHTML","normalizeHTML","healthy","sanitizeHTML","allowedTags","allowedAttributes","button","div","toggleDescriptionWidget","long","showLongDescriptionCustomTextArea","containsScript","showContainScriptDialog","showDescriptionCustomTextArea","getProductImages","purchase_catalog","deleteCover","showModalChangeCover","saveProductEvent","tag_max_lengths","description_short_max_lengths","ndProductMainInformationCtrl","InventoryProductBundlesController","bundleProductVariant","WarehouseSelectDialogController","selectedProducts","productIds","ConfigurationWebhooksController","PERMISSIONS","WEBHOOK_TYPES","createClicked","webhook","WEBHOOK_COLORS","configurationOptions","WEBHOOKS","webhooks","deleteWebhook","stateDuration","ConfigurationVariantsController","VARIANTS","selectVariantCategory","clickedVariantCategory","selectedVariantCategory","dtInstance2","elements","classList","_data","_dataIndex","_iDisplayIndex","_iDisplayIndexFull","deleteVariantCategory","conflicts","objectType","objectName","downloadFile","binaryStringToArrayBuffer","atob","cell","dtOptions2","from","to","pullingPromise","deleteVariant","dtColumns2","_type","_full","TicketTemplatesController","ticketTemplate","TICKET_TEMPLATES","deleteTicketTemplate","ConfigurationTaxController","deleteTax","postDelete","TAXES","openDialogByType","selectedRegister","ConfigurationTagsController","TAGS","configuration","ConfigurationStocksOptimizationController","saveStockOptimization","initializing","transfer_lead_time_days","purchase_lead_time_days","purchase_order_frequency_days","replenishment_max_total_overexceed_percentage","delivery_days","only_replenishment_stock_for_coverage","prevConfigurationData","PLANNING","academyLink","deliveryDays","initWarehouseSelect","ConfigurationShippingMethodsController","deleteShippingMethod","SHIPPING_METHODS","ConfigurationShippingBoxesController","deleteShippingBox","SHIPPING_BOXES","ConfigurationSerialNumberTypesController","SERIAL_NUMBER_TYPES_REVERSE","deleteSerialNumberType","appName","serialNumberTypesReverse","fiscal_address_legal_name","ConfigurationSeasonsController","SEASONS","deleteSeason","ConfigurationPricingTiersController","PRICING_TIERS","icons","preDeletePricingTier","pricingtierId","pricingtierName","duplicatePricingTier","ConfigurationPaymentMethodsController","deletePaymentMethod","PAYMENT_METHODS","foregroundColor","foreground_color","span","getChecksum","barcode_type","GS1_EAN_8","service","MailTemplatesController","EMAIL_TEMPLATES","posOrderEmailSubject","pos_order_email_subject","posOrderEmailBody","pos_order_email_body","posOrderInvoiceEmailSubject","pos_order_invoice_email_subject","posOrderInvoiceEmailBody","pos_order_invoice_email_body","emailTestPosOrder","emailTestPosOrderInvoice","sendTestEmail","test_email","PosOrderInvoiceMailTemplateForm","PosOrderMailTemplateForm","ConfigurationLoyaltyController","LOYALTY_CONFIGURATION","getGridOrdersPage","setGridOrdersColumns","saveLoyaltyConfiguration","balanceForm","exampleAccumulated","baseValue","default_contact_balance_ratio","newCategoriesIds","newCategory","existingCategory","loyalty_percentage","deselectedCategory","removePercentage","addLoyaltyPercentageToCategories","addLoyaltyPercentageToCategory","openCategoryMassivePercentage","getPercentage","updatePercentage","constructObject","pinLeft","num_products","getGridOrdersPageGetData","loyalty","loyalty_rounding","default_contact_balance_ratio_active","accumulate_balance_when_balance_discount","prev_default_contact_balance_ratio","isMassive","categories_ids","ConfigurationEmailController","company_backup","emailForm","email_host_email","DocumentsController","DOCUMENTS","ConfigurationDefaultSerialNumbersController","DEFAULT_SERIAL_NUMBERS","delivery_note","setAttributes","saveDefaults","cancelDefaults","use_product_default_serial_number_type","product_default_serial_number_type","ConfigurationCompositionsController","COMPOSITIONS","deleteComposition","ConfigurationCompanyController","SpainFiscalProfile","SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES","companyForm","openFiscalAddress","multipleFiscalDirectionsLimit","COMPANY","isNgFlowUpdate","logo","showFiscalProfile","hasFiscalProfile","fiscalProfileTemplate","fiscal_profile","isSpainFiscalProfile","fiscalProfile","savingFiscalProfile","saveCompany","$setDirty","allowFiscalAddressCreation","blockFiscalAddressCreation","saveFiscalProfile","fiscalProfiles","spainFiscalProfiles","isVerifactuActive","MULTIPLE_FISCAL_DIRECTIONS","ConfigurationCategoriesController","CATEGORIES","selectCategory","clickedCategory","deleteCategory","deleteSubcategory","ConfigurationBrandsController","BRANDS","deleteBrand","ConfigurationBarcodesController","BARCODES","nextEan13","nextEan8","nextUpcA","nextCode128","maxNumberCounterEan13","pow","ean_13_company_prefix","maxNumberCounterUpca","upc_a_company_prefix","maxNumberCounterEan8","ean_8_company_prefix","errorEan13","errorEan8","errorUpcA","quite","displayValue","font","textAlign","backgroundColor","lineColor","getNextEan13","ean_13_product_counter","JsBarcode","getNextEan8","ean_8_product_counter","getNextUpcA","upc_a_product_counter","getNextCode128","code_128_product_counter","tempCode128ProductCounter","ConfigurationAttributesController","ATTRIBUTE_CATEGORY_TYPES","ATTRIBUTES","create2Disabled","selectedAttributeCategory","selectAttributeCategory","clickedAttributeCategory","MULTIPLE_ATTRIBUTES","SINGLE_ATTRIBUTE","deleteAttributeCategory","deleteAttribute","attribute_category_id","ConfigurationAppearanceController","fuseTheming","APPEARANCE","themes","layoutModes","layoutStyles","figure","layoutMode","layoutStyle","setActiveTheme","themeName","getActiveTheme","updateLayoutMode","toggleClass","updateLayoutStyle","ConfigurationWebhookDialogController","webhookForm","saveing","webhookTypes","CUSTOMER_CREATED","CUSTOMER_UPDATED","CUSTOMER_DELETED","CUSTOMERS_IMPORTED","ORDER_CREATED","ORDER_UPDATED","ORDER_DELETED","ORDER_RESTORED","SALE_ORDER_CREATED","SALE_ORDER_UPDATED","SALE_ORDER_DELETED","SALE_ORDER_RESTORED","PRODUCT_CREATED","PRODUCT_UPDATED","PRODUCT_DELETED","PRODUCT_RESTORED","PRODUCT_STOCK_CHANGED","PRODUCTS_IMPORTED","PURCHASE_ORDER_CREATED","PURCHASE_ORDER_UPDATED","PURCHASE_ORDER_DELETED","PURCHASE_ORDER_RESTORED","SITE_CATEGORIES_UPDATED","SITE_PRODUCT_SYNC","CUSTOM_API_SITE_ORDER_UPDATED","CUSTOM_API_SITE_ORDER_DELETED","TRANSFER_ORDER_STATUS_UPDATED","TRANSFER_ORDER_DELIVERY_STATUS_UPDATED","TRANSFER_ORDER_SOURCE_WAREHOUSE_UPDATED","webhookTypesAvailable","VariantCategoryDialogController","categoryForm","new_category","ConfigurationTicketTemplateDialogController","PRODUCT_IDENTIFIER_TYPES","VARIANT_IDENTIFIER_TYPES","PRODUCT_PRICE_POSITION_TYPES","BARCODE_DESIGN_TYPES","TOTAL_DESIGN_TYPES","saveTicketTemplate","ticketTemplateForm","TaxSelectorController","selectTax","createTax","ConfigurationTaxDialogController","taxForm","ConfigurationShippingMethodDialogController","materialUiColorsMin","getSendcloudShippingMethods","loadingSendcloudData","shipping_methods","sendcloudInstalledAndActive","external_shipping_method_id","ConfigurationShippingBoxDialogController","SetDiscountToPurchaseProductsController","setDiscount","ConfigurationSerialNumberTypeDialogController","VERIFACTU_SERIAL_NUMBER_TYPES","fiscalAddressWatcher","examplePrefix","exampleCounter","exampleLength","exampleSuffix","groupName","SERIAL_NUMBER_TYPE_INVOICE","SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE","SERIAL_NUMBER_TYPE_PROFORMA_INVOICE","SERIAL_NUMBER_TYPE_QUOTE","SERIAL_NUMBER_TYPE_PRODUCT","SERIAL_NUMBER_TYPE_PURCHASE_ORDER","SERIAL_NUMBER_TYPE_PURCHASE_ORDER_DELIVERY","SERIAL_NUMBER_TYPE_TRANSFER_ORDER","SERIAL_NUMBER_TYPE_TRANSFER_ORDER_DELIVERY","SERIAL_NUMBER_TYPE_SALE_ORDER","SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY","SERIAL_NUMBER_TYPE_POS_ORDER","SERIAL_NUMBER_TYPE_POS_ORDER_DEVOLUTION","SERIAL_NUMBER_TYPE_ADJUSTMENT_ORDER","SERIAL_NUMBER_TYPE_PRODUCTION_ORDER","SERIAL_NUMBER_TYPE_STOCKTAKING_ORDER","SERIAL_NUMBER_TYPE_PICKING_ORDER","verifactuSerialNumberTypes","verifactuSerialNumberTypesValues","serialNumberTypesSearchText","serialNumberTypeForm","openActivateVerifactuDialog","verifactuInstalledIntegrationApp","isVerifactuInstalled","showAssociate","showActivated","ConfigurationSeasonDialogController","seasonForm","active_date","discontinued_date","ConfigurationPricingTierDialogController","pricingTierForm","ConfigurationPaymentMethodDialogController","FiscalAddressDialogController","FISCAL_ADDRESS_INVOICING_METHODS","fiscalAddressForm","ExchangeVariantDialogController","sanitize","str","fromVariant","variantTag","allVariants","affected","from_variant","to_variant","toMerge","count","ERROR_05108_STOCK_COLLISION_IN_MERGE","collisions","collision","productName","productUrl","getSelectedVariantName","category_code","DeletePricingTierDialogController","fromPricingTierId","fromPricingTierName","allPricingTiers","replace_id","selectedPricingTier","ConfigurationCompositionDialogController","compositionForm","CategoryDialogController","ConfigurationBrandDialogController","brandForm","AttributeDialogController","attributeCategoryForm","attributeCategoryTypes","TEXT","HTML_TEXT","INT","DECIMAL","ActivateVerifactuDialogController","activate","NewInventoryCollectionDialogController","InventoryCollectionProductsController","style_id","style_ids","InventoryCollectionDetailsController","generateStylesCSV","collectionsStylesCSV","generatePDFCatalog","InventoryAdjustmentProductsController","ADJUSTMENT_ORDER_STATUSES","ADJUSTMENT_ORDER_STATUSES_REVERSE","adjustment","selectedOrderDirection","selectedOrder","adjustmentOrders","total_adjustment_order_product_variants","pendingBarcode","adjustmentOrderProducts","adjustment_order","pendingBarcodes","adjustmentOrderStatus","gotoAdjustments","ADJUSTMENT_ORDER_STATUS_DRAFT","adjustmentOrderProductVariant","adjustment_order_product","adjustmentOrderProductVariants","validated","adjustmentOrdersPrint","adjustmentOrder","setSortMode","columnToSort","adjustmentId","initializeAdjustmentEvent","InventoryAdjustmentDetailsController","ADJUSTMENT_ORDER_STATUS_COLORS","ADJUSTMENT_ORDER_REASONS","ADJUSTMENT_ORDER_OPERATIONS","ADJUSTMENT_ORDER_REASONS_REVERSE","ADJUSTMENT_ORDER_OPERATIONS_REVERSE","isNewAdjustment","adjustment_order_default_serial_number_type","reasons","reasons_reverse","operations","operations_reverse","RoutingRulesController","RoutingRule","RULE_CRITERIA_TYPES","callDynamicQuerySearch","routingRule","createRuleLine","addRuleLine","createRuleCriteria","ruleLine","addRuleCriteria","warehouseQuerySearch","searchWarehouseText","selectWarehouseValue","action_object_id","action_object_name","getAutocompleteObjectName","ruleCriteria","criteria_object_name","dynamicQuerySearch","criteria_type","ORDER_PRODUCT_BRAND","ORDER_PRODUCT_CATEGORY","ORDER_PRODUCT_SUBCATEGORY","ORDER_PRODUCT_PROVIDER","getSelectedWarehouseName","selectDynamicObjectValue","dynamicObject","criteria_object_id","routingRules","EcommerceSiteProductsController","Version","ARCHIVED_FILTER_STATES","filterStatus","filterArchived","archivedDict","ONLY_ARCHIVED_PRODUCTS","ONLY_NOT_ARCHIVED_PRODUCTS","filterIndexes","initialized","watches","brandsList","categoriesList","seasonsList","orderDir","colName","orderColIdx","dir","isGrater","product_brand_name","siteProduct","activedChanged","getSynchronizingText","deleteProduct","reloadSiteProducts","EcommerceSiteDetailsController","submit","ZALANDO_HEADER_KEY","API_URL","siteCopy","syncErrors","discount_start_date","discount_end_date","discount_start_datetime","parseZone","saveCsvConfig","cancelCsvConfig","downloadDataFile","checkIsSuperAdmin","showSyncProducts","showProductsCsvEndpoint","showDeleteSiteDialog","showAdvancedCard","showSyncErrors","submitShopifyFormWatch","setSyncErrors","EcommerceSiteCategoriesController","UNMODIFIABLE_PLATFORMS","showEcommerceInit","node","updatePosition","parentId","treeOptions","dragStop","nodeScope","$modelValue","moveLastToTheBeginning","translations","newNode","products_amount","newSubItem","nodeData","collapseAll","expandAll","importFromEcommerce","ImportProductsDialogController","maxProducts","externalIds","ImportMissingProductsDialogController","goToImportation","EcommerceCategoryDialogController","categoryTranslations","AutoAssignWarehouseInfoDialog","AutoAssignWarehouseByStockAvailabilityInfoDialog","ContactsContactWishlistController","DefaultRegisterService","reloadProductVariants","dtInstanceProducts","addProductVariants","productVariantsIdsArray","productVariantsIdsString","deleteProductVariantsConfirmed","productVariantsIds","product_variants_ids","createPosOrderConfirmed","confirmDelete","getDefaultRegister","createPosOrderByRegister","requestDefaultRegister","delete_product_variants","deleteProductVariants","createPosOrder","NoneChecked","ContactsContactWholesaleSalesController","salesAgents","ContactsContactRetailSalesController","startTime","endTime","payment_statuses","ContactsContactPurchasesController","ContactsContactPersonsController","selectedPerson","addingNewPerson","addPerson","cancelAddPerson","savePerson","tempPerson","dateToDateString","personId","ContactsContactOverviewController","saleInvoices","returnInvoices","totalSaleInvoices","totalReturnInvoices","totalPaid","totalUnpaid","pendingDifference","salesVsReturnsOptions","subtext","radius","center","borderRadius","paymentOptions","printBalance","contactPrintBalance","salesVsReturnsDom","paymentDom","ContactsContactLoyaltyController","saveClientLoyaltyConfiguration","contactData","prevContactData","balance_ratio","prev_contact_balance_ratio","editingBalanceRatio","setHistoricVisibleColumns","historicMode","HISTORIC_ONLY_CHANGE","dtInstanceRelatedPosOrders","dataTable","fnSetColumnVis","HISTORIC_ACCUMULATED_AND_SPENT","HISTORIC_ALL","dtOptionsRelatedPosOrders","dtColumnsRelatedPosOrders","startBalanceRatioEdition","getLoyaltyStartDate","loyalty_start_date","getDefaultBalanceRatio","setBalanceRatioToDefault","ContactsContactInvoicesController","reloadInvoices","reloadInvoicesTimeout","generateInvoices","downloadZip","invoicesDownloadZip","invoices_ids","showDateRangeDialog","ContactsContactDetailsController","contactTypesReverse","contactGroups","loadingDelete","salesWarehouseQuerySearch","selectSalesWarehouse","salesWarehouse","sales_warehouse_instance","sales_warehouse","getSelectedSalesWarehouseName","newGroupAdded","groups","isProvider","ContactsContactBillingController","selectSalesChannel","salesChannel","sales_channel_instance","sales_channel","getSelectedPaymentMethod","creatingSalesChannel","salesChannelSearchText","paymentMethodDays","savePromises","selectedPM","paymentMethodUpdate","salesChannelQuerySearch","salesChannels","createSalesChannel","onPaymentMethodChange","ContactsContactB2BEcommerceController","b2bEcommercePassword","sending","changePassword","setUniqueB2bToContact","setDirty","b2b_ecommerceForm","saveB2BPassword","sendCredentials","send_credentials","b2b_ecommerce_password","ContactsContactAddressesController","openAddress","StartDashboardData","StartBannersData","filter_warehouse_by_user","subcontent@app.analytics.retail_dashboard","RetailDashboardData","subcontent@app.analytics.inventory","subcontent@app.analytics.wholesale_dashboard","subcontent@app.analytics.report","BasicRetailKPIsData","lastDate","firstDate","setUTCHours","from_date","to_date","AnalyticsWholesaleDashboardRealtimeController","recovered_filters","showInclTaxes","updateTable","wholesaleDashboard","show_incl_taxes","AnalyticsRetailDashboardRealtimeController","stringId","selectedWarehouseId","pieWidget","mainChartData","salesChartData","productsChartData","chartApi","selectProject","project","selectedProject","calculateConversion","visitors","getLabel","updateChart","getColorFromName","employees_sales_2","total_products_sold","pos_order__source_warehouse__pricing_tier__currency_convertion","total_products_returned","total_transactions","amount_products_sold","employee","pos_order__site__name","employee_first_name","employee_last_name","backgrounds","charCodeAt","AnalyticsRetailDashboardProductsController","dateRangeChanged","AnalyticsRetailDashboardPerformanceController","recovered_daterange","categoryIdBySubcategoryId","availableSubcategories","categoriesFilterHasChanged","getDateRangeFromLocalStorage","AnalyticsRetailDashboardCategoriesController","categoryKpis","totalsByWeek","amountsByWeek","salesBySubcategoryCode","subcategoriesWithSales","compare","lastValue","totals_by_week","amounts_by_week","salesBySubcategoryCodeAndWeek","subcategoriesWithSalesDict","lastWeekStart","weeklySales","weekly_sales","subcategorySales","subcategory_code","week_start","reportUtils","querySearchCustomField","getSelectedIds","Set","getTextElements","ReportsWorkdaysController","ReportUtils","reportTypes","INVENTORY_TITLE","buttons","WORKDAYS","ID_WAREHOUSES","columnsString","reports","workdaysReport","ReportsWholesaleTransactionsController","WHOLESALE_TITLE","WHOLESALE_TRANSACTIONS","ID_SALES_AGENTS","dataRange","sales_agents","wholesaleTransactionsReport","sales_agent_id","ReportsWholesaleSalesController","WHOLESALE_SALES","wholesaleSalesReport","ReportsWholesaleProductsSoldController","WHOLESALE_PRODUCTS_SOLD","wholesaleProductsSoldReport","ReportsWholesaleDeliveryNotesController","WHOLESALE_DELIVERY_NOTES","wholesaleDeliveryNotesReport","ReportsWholesaleCustomersController","WHOLESALE_CUSTOMERS","contactsReport","ReportUidStockController","downloadReport","filterData","checkboxValue","checkboxName","UID_STOCK","uidStockReport","ReportUIDStockMovementsController","UID_STOCK_MOVEMENTS","uidStockMovementsReport","ReportsTransferOrdersController","TRANSFER_ORDERS","transferOrdersReport","ReportsTicketsController","RETAIL_TITLE","TICKETS","ticketsReport","ReportStockReplenishmentController","STOCK_REPLENISHMENT","renderableColumns","warehousesList","warehouseSearch","submitDisabled","stockReplenishmentReport","ReportStockMovementsController","STOCK_MOVEMENTS","ID_REPORT_TYPE","REPORTS.STOCK_MOVEMENTS","REPORTS.STOCK_DAILY_SNAPSHOT","reportType","stockMovementsReport","report_type","ReportsRetailTransactionsController","RETAIL_TRANSACTIONS","retailTransactionsReport","retailTransactions","scrollCollapse","ReportsSellerTransactionsController","SELLER_TRANSACTIONS","ID_CATEGORIES","ID_SUBCATEGORIES","sellerTransactionsReport","uidstocks","brand_ids","season_ids","category_ids","subcategory_ids","uidstocks_uids","ReportsRetailTaxesController","retailTaxesReport","ReportsRetailKpisController","RETAIL_KPIS","chartOptionsAccent","ReportsRetailCustomersController","RETAIL_CUSTOMERS","ReportsRegisterClosuresController","REGISTER_CLOSURES","registerClosuresReport","ReportsPurchaseOrdersController","PURCHASE_ORDERS","purchaseOrdersReport","ReportProductStatusController","PRODUCTS_STATUS","ID_BREAK_DOWN_BY_COLOR","ID_BREAK_DOWN_BY_SIZES","breakdownBySizes","breakdownByColors","breakDownByColor","breakDownBySize","productStatusReport","ReportsPreOrdersController","PRE_ORDERS","styleOrdersReport","ReportsPaymentsController","PAYMENTS","paymentsReport","ReportsInvoicesController","INVOICES","REPORTS.INVOICE_HEADERS","REPORTS.INVOICE_LINES","Including","invoicesReport","ReportsInventoryController","INVENTORY","ID_COLLECTIONS","ID_AVAILABLE_STOCK","REPORTS.ALL_PRODUCTS","REPORTS.ONLY_INCLUDE_ARCHIVED","REPORTS.ONLY_INCLUDE_NOT_ARCHIVED","not_archived","only_available_stock","includeKpis","inventoryReport","collection_id","include_kpis","ReportsDailyBillingsController","DAILY_BILLINGS","dailyBillingsReport","ReportsCatalogController","CATALOG","catalogReport","ReportsCashMovementController","CASH_MOVEMENT","REPORTS.ALL_MOVEMENTS","REPORTS.ONLY_INPUT_MOVEMENTS","CASH_MOVEMENT_TYPE_INPUT","REPORTS.ONLY_OUTPUT_MOVEMENTS","request","movementType","cashMovementReport","AnalyticsInventoryOverviewController","reloadAggregates","retrievingAggregates","aggregatedStockByWarehouseId","positive_with_cost","positive","positive_cost","negative","negative_with_cost","negative_cost","total_volume","used_volume","aggregatedStock","stock_with_cost","stock_cost","allocated_on_wholesale","aggregatedStockByWarehouseArray","availableOnHandOnInactiveProducts","available_on_hand_on_inactive_products","availableOnHandOnDiscontinuedProducts","available_on_hand_on_discontinued_products","availableOnHandOnActiveProducts","available_on_hand_on_active_products","availableOnHandOnActivePermanentProducts","available_on_hand_on_active_noos_products","availableOnHandOnActiveSeasonalProducts","available_on_hand_on_active_not_noos_products","availableOnHandRemaining","activeProducts","active_products","activePermanentProducts","active_noos_products","activeSeasonalProducts","active_not_noos_products","activeProductsWithAvailableOnHand","active_products_with_available_on_hand","activePermanentProductsWithAvailableOnHand","active_noos_products_with_available_on_hand","activeSeasonalProductsWithAvailableOnHand","active_not_noos_products_with_available_on_hand","initializeStockQuantityByProductStatusChart","initializeStockCostByProductStatusChart","initializeAvailableStockOnPermanentProductsChart","initializeAvailableStockOnSeasonalProductsChart","reloadAggregatesFilters","selectedSeasons","selectedBrands","selectedSubcategories","selectedProviders","selectedWarehousesIds","selectedSeasonsIds","selectedBrandsIds","selectedCategoriesIds","selectedSubcategoriesIds","selectedProvidersIds","reloadStockKpisChart","stockKpis","stockByWarehouseAndDate","warehouseNameById","warehouseStockData","warehouseCostData","cost","stockKpiChartOptions","stockQuantityByProductStatusChartOption","fontWeight","COLORS","DISCONTIUED_STOCK_CHART_COLORS","selectedMode","bleedMargin","overflow","stockQuantityByProductStatusChartDom","stockCostByProductStatusChartOption","stockCostByProductStatusChartDom","availableStockOnPermanentProductsChartOption","AVAILABLE_STOCK_CHART_COLORS","availableStockOnPermanentProductsChartDom","availableStockOnSeasonalProductsChartOption","availableStockOnSeasonalProductsChartDom","warehouseById","availableOnHandOnInactiveNotDiscontinuedNotNoosProducts","selectedWarehousesFunction","getUsedVolumePercentage","usedVolume","totalVolume","toolbox","saveAsImage","axisPointer","alignTicks","AnalyticsInventoryLowStockController","discontinuedStockChartOption","discontinuedStockChartDom","availableStockChartOption","availableStockChartDom","AnalyticsInventoryDistributionController","MIN_BARS_TO_PERCENT_THRESHOLD","THRESHOLD_PERCENTAGE","includeNoos","comonEChartOptions","rotate","totalBySubcategory","percentThresholdIndex","reducedSum","totalByBrand","initEcharts","subcategoryChartOptions","barMaxWidth","subcategoryChartInstance","brandChartOptions","brandChartInstance","resizeEChart","brandChartCardWidth","clientWidth","subcategoryChartCardWidth","AnalyticsInventoryABCAnalysisController","SUMMARY_INTERVAL_MS","dtInstanceABCAnalysisSummary","dtOptionsABCAnalysisSummary","_","summaryInterval","reloadData","targets","dtColumnsABCAnalysisSummary","ndInvoiceIntegrationAppDetailsCardController","holdedInvoiceData","holded_installed_integration_app","integration_app","updated_at","kubibaiInvoiceData","kubibai_installed_integration_app","eposItalyInvoiceData","epos_italy_installed_integration_app","invoiceData","UpgradePlanController","FeatureService","featureData","getFeatureDict","purchaseAddOn","SubscriptionController","Coupon","ContractedAddOn","Subscription","SUBSCRIPTION_PERIOD","PAYMENT_SERVICE_TYPES","SUBSCRIPTION_EXCEED_LIMIT_POLICY","PLAN_LIMIT_EXCEED_LIMIT_POLICIES","TAX_NAME","TAX_RATE","plans","hubs","contractedAddOns","yearlyPeriod","subscriptionMessage","subscriptionChanged","period","MONTHLY","periodStr","billingPortalUrl","showBillingPortalButton","partner","showSubscriptionDetails","showDiscountInputs","mockFeatures","subscription","billableContractedPlanLimits","periodChanged","YEARLY","drawPlanFeatureTemplate","getPlansByHub","hubId","plan","hub","planClicked","getContractedPlanLimitsBySelectedPlans","initContractedAddOns","getPlanName","getContractedPlanLimits","contracted_plans","contractedPlan","contracted_plan_limits","getBillabledPlanLimits","onAddOnChanged","addOn","coupon","getSelectedPlans","getPlanPrice","getDiscountAmount","getPlanDiscountAmount","saveSubscription","getSubscriptionSubtotal","getSubscriptionTaxes","getSubscriptionCommercialDiscount","planLimit","getSubscriptionGenericDiscount","getSubscriptionTotal","formatPriceWithCurrencyAndPeriod","setEditing","tempHubs","onReady","paymentServiceType","DEFAULT","payment_service_type","isYearly","has_changed","selectedPlanIds","cp","plan_ids","limits","planFeature","getPlanLimit","formattedPrice","included_amount","amountStr","exceed_limit_policy","BLOCK_CREATION","getFeatureLockedTemplate","getPlanFeatureByFeatureCode","plan_features","is_add_on","plan_feature","contracted_plan_add_ons","contractedAddOn","forceSafe","planAddOns","pf","toApplyJson","add_ons","coupons","discount_value","ERROR_14006_PLAN_DOWNGRADE_NOT_VALID","details","included","current_amount","formattedDetail","withDiscounts","withGenericDiscount","getContractedPlan","content@signup","CompleteSignUpTwoDialogController","SignupGetResult","SignupGetStatus","SignupTwo","signupGetResult","signupGetStatus","signUpLoaded","generationInProgress","getFormVersion","signUp","form_version","getErrorMessage","ERROR_01003_TOKEN_IS_NULL","ERROR_01004_TOKEN_NOT_FOUND","ERROR_01005_TOKEN_ALREADY_VALIDATED","ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS","ERROR_01011_DATA_ALREADY_GENERATED","formDoneCallback","signupFinished","finished","errorVerifiedAt","verified_at","ERROR_01010_DATA_GENERATION_IN_PROGRESS","SalesController","reloadSales","reloadSalesTimeout","getCurrentNavItem","totalsByStatus","status_counts","TYPE_CUSTOMER","TYPE_SALES_AGENT","salesTypes","showDateFilter","selectedCustomer","filterSalesAgent","filterSalesAgentInstance","toggleSidenavDesktop","customerQuerySearch","handleNavClick","selectedSalesAgent","WholesaleSaleController","changeOrderStatus","isPreorderPage","saleOrderStatus","deleteSale","barcodeLogOpened","cancelSale","WholesalePresalesController","filtersNotifications","newCollection","WholesalePresaleController","deleteCollection","securityWord","checkSecurityWord","answer","DeliveriesController","getStatusListByDict","filterDateRange","statusList","filterSourceWarehouse","dicFilterColumns","filter_status","filter_source_warehouse","getHours","updateProviderFilter","sale_order_autocode","invoice_payment_status","WholesaleB2BEcommercesController","countB2bEcommerces","showOldCreateB2bButton","WholesaleB2BEcommerceController","B2BEcommerce","B2B_ECOMMECE_MENU_TYPES","b2bEcommerce","searchPricingTier","saveingB2bEcommerce","saveB2bEcommerce","getLeatTimePreview","global_lead_time_prefix","global_lead_time","global_lead_time_units","videosByCategory","videos","video","DialogController","videoId","VIDEO_CATEGORIES","categoryNotEmpty","SupportVideosController","PerformanceController","PERFORMANCE_EVENT_RUN","PERFORMANCE_EVENT_START","PERFORMANCE_EVENT_END","runAll","cancelStartEventListener","cancelEndEventListener","SupportChangelogsController","Changelog","changelogs","newChangelogs","changelog","change","SellSaleController","AuthService","SellMatrixData","msNavigationService","refreshDisplay","registerHasChanged","setDefaultRegister","amountList","trafficKpis","peopleCounter","createDevolutionSale","newSale","createNewSale","olderSale","balance_discount","discount_incl_tax","paymentValue","gift_cards","promotions","productAutocomplete","SELL_VIEW","currentViewType","CURRENT_VIEW_TYPE_LIST","DEFAULT_IN_STOCK","devolution_of_object","original_balance_discount","original_total_without_discount","addPosProductVariantToSale","register_configuration","touch_ui_as_default","CURRENT_VIEW_TYPE_MATRIX","newPosOrderPaymentMethods","given_amount","deletePosOrderProductVariant","hasBundle","uid_stock_uid","selectedUidStocks","onProductVariantSelected","clearProductAutocomplete","setPricingTier","applyCustomerPricingTier","hideStock","showStockDetails","selectedProductStock","selectedPosOrderProductVariant","rounded","roundPrice","discountAsPercentage","avoidConsumedGiftCards","discounted","balance","createPosOrderProductVariant","isFetching","init_search","manage_uid_and_product_variant","excludedUids","uid_stock","incrementProductVariantAmount","tpv_dialog_product_not_found","openNotFoundDialog","ERROR_04001_PRICE_NOT_SET","ERROR_04040_UID_HAS_SHIPPED","fromProductVariant","devolutionPosOrderProductVariant","addProductVariantIntoPosOrder","productVariantIdToChangeTo","toProductVariant","popvIndex","productVariant_id","changeAmount","buttonText","ERROR_04041_UID_HAS_ALLOCATED","ERROR_04042_UID_IS_TRANSFERRING","posProductVariant","customer_discount_applied","applyCustomerDiscount","assignAllToGiftCard","setPaymentView","PAY_VIEW","_payByCash","paymentMethodId","posPaymentMethod","getRegisterConfigurationProperty","posOrderPaymentMethod","selectPaymentMethod","_payByCard","getCardPaymentWithNoGateway","postCreateOrUpdatePosOrder","printGiftTicket","generateDevolutionCardClicked","giftAmounts","createPosOrderApiVersion","has_gateway_payment","activeRequestStatusObserver","postPayedPosOrder","available_payment_methods","ERROR_01025_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE","ERROR_01026_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_FOR_WAREHOUSE","ERROR_01013_GATEWAY_CONNECTION_FAILED","ERROR_01027_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_NOT_ASSOCIATED_WITH_VERIFACTU","ERROR_04011_GIFT_CARD_ALREADY_EXISTS","printSale","source_pos_order","giftCard","closeCurrentSaleTimeout","autocloseCurrentSaleInterval","closeCurrentSale","cancelCloseCurrentSaleTimeout","saleIndex","avoidGetPromotions","quantityDictById","getUnitPrice","promotion_id","longList","tempPromotion","localPromotion","restorePricesBackup","promotion_name","popvs","len","tempPopv","tempApplyTo","apply_to","setPromotionAttributes","popv1","popv2","registerConfigurations","register_message","oldAmount","pricesBackup","promotionApplied","fixed_price_incl_tax","fixed_discount","promotion_public_name","public_name","saveSale","allocateDraft","extra_actions","finishCustomPriceEdition","editingPrice","customPriceChanged","showRegisterMessageDialog","allow_to_pay","_pay","totalAssigned","isDevolutionPayingWorkflow","showUsersBottomSheet","tempListUsers","searchGiftCardCallback","showNonDeclaredBanner","consumed_gift_card_is_voucher","is_old_non_declared","totalAvailable","pendingToAssigned","price_incl_tax_positive","custom_price_incl_tax_positive","taxPercentValue","getRefundCardPaymentMethod","getPaymentMethodByPaymentGateway","getOriginalPayment","checkEditableCustomer","sellerChanged","seller","seller_instance","addingSeller","selectedPosOrderPaymentMethod","openSetNumberDialog","showPayByCardButton","showPayByCashButton","changePricesFromPricingTier","successMessage","default_pricing_tier","new_pricing_tier","CATALOG_LENGTH","REFUND_ENABLED","isFullsize","isDialogOpen","hasUID","creatingCustomer","allowDebtSells","register_warehouse","category__id","checkEnterPressed","which","blur","openingOrClosing","createNegativeCashMovement","createPositiveCashMovement","deleteCurrentSale","finishPayment","getRefoundByAny","customerAutocompleteFocused","getItemCustomerText","getPriceByPrices","priceInPricingTier","getTotalTaxByGroup","groupedProductVariants","totalExcTaxByTax","goToRegisterActivity","openCashDrawer","prompt","openRegister","pay","payButtonDisabled","payByCard","payByCash","posOrderCallback","priceClicked","nameClicked","originalProductName","editingName","finishCustomNameEdition","selectedCustomerChange","hasPreviousPricingTier","setSelectedRegister","showTotalTaxes","togglePosOrderProductVariant","currentStatus","is_open","toggleWindowSize","bodyEl","getFolded","toggleFolded","showGenerateVoucherConfirmation","getVoucherValue","countTotalProductVariants","finishSale","peopleCounterMove","toggleCurrentViewType","matrixSelectedProductChange","getTotalLessDevolution","getConsumedGiftCardsNotVoucher","getConsumedGiftCardsVoucher","deleteConsumedGiftCard","finishGiftCardCustomPriceEdition","checkGiftCardCode","invalid","iprod","prod","repeated","isPaymentDisabled","showApplyBalanceButton","applyOrRemoveBalanceDiscount","getLanguage","showSaleDialogById","saveButtonDisabled","saveButtonClicked","paymentMethodBlurred","elem","paymentMethodFocused","hasPaymentGateway","showPromotions","customer_discount","prom","isLowStock","hasAdyenPaymentGateway","ADYEN","hasComerciaPaymentGateway","getOriginalCardNumber","original_payment","card_number","getOriginalCardIssuer","card_issuer","assignSeller","removeSeller","hasCustomerSelected","toggleShowTaxesDict","showTaxesDict","openSearchVendorDialog","showAssignSeller","amountFocus","list_amounts","discountFocus","list_discounts","openDisplay","displayUrl","showRefundByCardButton","showRefundByCashButton","defaultRegisterObj","SaleSalesLogController","INCIDENCE_STATUSES","setCurrentView","registersAndSites","registersDict","loadDateRangeFilters","reloadPosOrders","reloadPosOrdersTimeout","POS_ORDERS_PRODYCT_VARIANTS_VIEW","posOrderPaymentStatuses","POS_ORDER_PAYMENT_STATUS_PENDING","POS_ORDER_PAYMENT_STATUS_PAID","POS_ORDER_PAYMENT_STATUS_UNPAID","transferPaymentMethods","showTimeFilter","dialogOpened","timeRange","paymentMethodsMap","showNewOrderDialog","createInvoices","generatingInvoices","toggleDateFilter","toggleTimeFilter","getPaymentMethodNameFromChip","getPaymentMethodIconFromChip","showPaymentMethodChips","filterPaymentMethods","registersAndSitesChanged","SaleRegistersController","closeRegisterConfirm","deleteRegister","getUserName","opened_by","SaleRegisterClosuresController","filterRegister","filterUser","activityId","registerActivitiesInvoice","selectedRegisterChanged","filterUserHasChanged","exportTableToCSV","tableId","$table","$headers","$rows","tmpColDelim","fromCharCode","tmpRowDelim","csv","csvData","formatRows","grabRow","encodeURIComponent","navigator","msSaveOrOpenBlob","decodeURIComponent","encodeURI","msSaveBlob","setAttribute","innerHTML","$row","$cols","grabCol","SaleRegisterClosureController","POS_ORDER_SHIPPING_STATUSES_COLORS","POS_ORDER_SHIPPING_STATUSES","showPosOrderDialog","lastPosOrderIdOpened","dtInstanceViewPO","showGiftCardsData","filterIndexesPO","created_by_id","shipping_status","dtOptionsViewPO","filterIndexesPM","pos_order__autocode","dtOptionsViewPM","posOrdersPaymentMethods","dtColumnsViewPM","is_external_pos_order","pos_order_created_by","payment_method_name","pos_order_currency","register_currency","dtColumnsViewPO","is_paid_in_other_register_activity","negative_of","units_sold_returned","status_id","getInvoiceNameFromPath","fileName","gotoRegisterClosures","printSoldProducts","printSummary","SalePromotionsController","only_for_loyal_customers","SalePromotionController","excluded","excluded_products","excluded_product_instances","product_instances","openMenu","end_date","hour","minute","removeProduct","GoalsController","warehouseDict","saleGoal","initTotalDict","updateSalesGoalEvents","warehouseTotalDict","selectedDate","goal","goals","goalName","salesGoalEvents","salesGoalEvent","tempGoalIndex","calendarUiConfig","calendar","firstDay","eventLimit","aspectRatio","dayNames","dayNamesShort","viewRender","calendarView","currentMonthShort","eventRender","innerText","columnFormat","week","eventClick","selectable","selectHelper","addSalesGoal","prev","SaleGiftCardsController","is_voucher","orderingField","consumed_pos_orders","amount_incl_tax","getGridGiftCardsPage","exporterCsvFilename","showCustomerDialog","printGiftCard","sourcePosOrderId","register_instance","getShortDate","getAmount","SellDisplayController","ReplenishmentController","PLANNING_AVAILABILITY_STATUS","VIEW_BY_PRODUCT","VIEW_BY_WAREHOUSE","columnsByProduct","columnsByWarehouse","gridApiByProduct","gridApiByWarehouse","uiGridByProductInitialized","uiGridByWarehouseInitialized","statusByProduct","warehouseStock","statusByWarehouse","warehouseUrl","seasonsUrl","brandsUrl","categoriesUrl","subcategoriesUrl","collectionsUrl","orderQuantitiesByWeeklyCoverage","totalDraftByProduct","totalDraftByWarehouse","pullingTimeouts","OUT_OF_STOCK","URGENT_ORDER","IN_STOCK","gridOptionsByProduct","getGridPageByProduct","restoreGridColumns","gridOptionsByWarehouse","getGridPageByWarehouse","setGridColumnsByWarehouse","selectedStatus","activePresetFilter","countByAvailabilityStatusDict","searchInputChanged","isProductView","isWarehouseView","replenishProductVariant","original_quantity","replenishment_stock_to_order_with_max_min","updateTotalOnOrderByProduct","ERROR_11001_PLANNING_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED","ERROR_11002_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_PERCENTAGE","ERROR_11003_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_FIXED_AMOUNT","ERROR_11004_PLANNING_CONFIGURATION_MINIMUM_STOCK_EXCEEDED","ERROR_11005_PLANNING_CONFIGURATION_MIN_QTY_EXCEEDED","ERROR_11006_PLANNING_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY","ERROR_11007_PLANNING_CONFIGURATION_MAX_PRICE_EXCEEDED","fixed_amount","new_value","originalValue","original_value","avgDailyTotalUnitsSold","getGridPostBodyByProduct","getGridPostBodyByWarehouse","applyAvailabilityStatusFilter","getAggregatedByStatusFilter","createReplenishmentDraft","TRANSFER_ORDER_STATUS_CREATING_DRAFT","startPullingDrafts","collapseAllRows","orderQuantityByWeeklyCoverageChanged","weeks","newOrderQuantity","replenishment_rop","stock_total_store","orderQuantityByUnitsChanged","calculateDate","calculateDateByNumberDays","onClickInput","stopPullingDrafts","statusBy","statusKey","setGridColumnsByProduct","orderByCoverageCellHtml","enableColumnResizing","movable","item_code","groupingShowAggregationMenu","item_name","item_sku","item_barcode","separator_2","enableFiltering","headerCellTemplate","headerCellClass","replenishment_stock_purchase_in_transit","cellFilter","replenishment_stock_transfers_in_transit","stock_replenishment","replenishment_stock_total","separator_3","location_name","stock_purchase_in_transit_to_store","stock_transfers_in_transit_to_store","stock_available_store","separator_4","item_abc_category","customTreeAggregationFn","fieldValue","numValue","mostFrequent","counts","coverage_days","sum","avg","coverage_weeks","total_units_sold","avg_weekly_total_units_sold","separator_5","replenishment_lead_time","stock_available_on_lead_time","expected_demand","all_locations_expected_demand","replenishment_stockout_losses","expected_sales","replenishment_stock_to_order_with_shop_expansion","total_draft","order_by_coverage","discontinued_stock_value_percentage","stock_value","replenishment_stock_to_order_value","warehouse_stock","stock_to_order","count_by_availability_status","updateTotalDraftByWarehouse","pullDrafts","TRANSFER_ORDER_STATUS_DRAFT","getAggregationValue","aggregations","agg","ReorderController","VIEW_BY_PROVIDER","abortController","columnsByProvider","gridApiByProvider","uiGridByProductInitialize","uiGridByProviderInitialize","abcCategetAggregories","statusByProvider","totalDraftByProvider","headerRowHeight","gridOptionsByProvider","getGridPageByProvider","setGridColumnsByProvider","productVariantsRequest","getSaleOrderValue","isProviderView","toggleView","showSalesAnalysisPopup","locatedItemId","SalesAnalysisDialogController","salesData","PURCHASE_ORDER_STATUS_DRAFT","updateTotalDraftByProvider","PURCHASE_ORDER_STATUS_CREATING_DRAFT","availability_status","num","availabilityStatusValue","abcCategoryValue","stock_turn","total_avg_daily_total_units_sold","stock_turn_weeks","warehouse_stock_turn","warehouse_stock_turn_weeks","stores_stock_turn","stores_stock_turn_weeks","item_provider","unit_price","AVG","sale_value","columnMap","stateColumn","groupingShowGroupingMenu","provider_name","ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION","ERROR_04043_NOT_DEFAULT_PRICING_TIER","ManufactureProductionController","ProductionsController","filterTargetWarehouse","seasonsById","WarehousesController","customMapStyles","focusSearch","featureType","elementType","stylers","visibility","saturation","lightness","allowCreation","google","maps","Map","lat","lng","maxZoom","styles","hotkeyHtml","bounds","LatLngBounds","latitude","longitude","isWarehouse","Marker","LatLng","scale","fillColor","fillOpacity","strokeWeight","strokeColor","anchor","Point","infoWindow","InfoWindow","addListener","fitBounds","newWarehouseClicked","isStore","blockCreation","warehouseSearchFilter","term","WarehouseController","transferAllDialog","deleteWarehouse","handleNewStockLocation","UIDsController","filterWarehouse","uidStocksList","product_cover_annotation","product_id_annotation","product_name_annotation","product_variant_size_name_annotation","product_variant_color_name_annotation","product_variant_sku_annotation","product_variant_barcode_annotation","uid_annotation","expiration_date_annotation","total_purchased","total_available","total_allocated","total_sold","TransfersController","reloadTransfers","reloadTransfersTimeout","transferTypes","transfersTypes","InventoryTransferController","StocktakingsController","stocktakingStatuses","fullname","InventoryStocktakingController","getStatusColor","showStocktakingHistoricFunc","InventoryStocksController","availableWarehousesIds","contains","checkboxesStatuses","firstRow","filterStock","gotoProductDetail","inStockChanged","PurchasesCalendarController","filterSubcategories","calendarType","currentYear","popsByMonth","prevYear","loadOrderProductPurchases","nextYear","getPopsOrPodps","podpsByMonth","popByProductId","purchaseOrderDeliveryProducts","podp","order_product_variant__purchase_order_product__product","order_product_variant__purchase_order_product__product_code","order_product_variant__purchase_order_product__product_name","order_delivery__expected_at","received_amount__sum","order_delivery__purchase_order","order_delivery__autocode","saveFiltersStatus","PurchasesController","EXPIRING_DATE_PAYMENT_STATUS","reloadPurchases","reloadPurchasesTimeout","InventoryPurchaseController","showInvoicesTab","InventoryProductsController","variant_barcode","tableType","variant_sku","variant_color","variant_size","web_sites","product_variants_list","exporterFieldCallback","tier","showImportDialog","showQuickProductCreatorDialog","setEnabled","openProductsEditDialog","printOverview","ProductLocationsController","excludedWarehouses","excludedWarehousesLoading","excludedWarehouseChanged","copyColumnState","productIdReference","valueToCopy","productWarehouses","commonValue","warehousesLoadingByProduct","tempExcludedWarehouses","excluded_warehouses","excludedWarehouseId","InventoryProductController","goToEditProduct","goToNewProduct","printInformation","InventoryPricingController","subcategoriesList","sitesList","selectedSiteId","dtOptionsProducts","filterSites","dtColumnsProducts","preventDefault","dtcb","PickingPackingController","navItems","toPrepare","picking","picked","packing","shipped","currentItem","filterStorageLabel","globalStatus","stockAvailability","unitsFilter","orderTypes","stockAvailabilityOptions","labelKey","unitsFilterOptions","previousValue","filterProperty","FILTER_BY_STOCK_AVAILABILITY","FILTER_BY_UNITS","filterName","getCount","reloadPIckingPackingTimeout","old","new","hasFilterChanged","controlSelected","selectedRows","typePickableOrder","type_pickable_order","getGlobalStatus","transformCallback","pickable_orders_count","in_progress_orders_count","picked_orders_count","packing_orders_in_progress_count","packing_orders_packed_count","PìckingController","ITEM_PICKING_STATUS","uiGridConstants","isPickingOrderPendingToPick","PICKING_ORDER_STATUS","PENDING_TO_PICK","isPickingOrderPicking","finishAndPackPickingOrder","all_picked","send_packing_order","finishPicking","changePickItemLot","changingPickingLot","opv_id","getOrderProductVariantFromRow","updateRowData","picking_order_product_variant_id","notifyDataChange","dataChange","EDIT","pickable_item_type","box","updatePickingOrder","origin_order_autocode","variant_1","variant_2","warehouse_location","warehouse_location_position","pickable_items","userCreatePicking","pickers","status_pending_to_pick","ITEM_PENDING_TO_PICK","status_picked","ITEM_PICKED","generating_pickable_pdf","generating_delivieres_pdf","changingPickingStatus","uidStockSearch","loadingUidStocks","conLog","deletePickingOrder","updatePickedBy","pickingActivity","picking_activity","changePickItemStatus","itemStatus","picking_order_product_variant_ids","bulkEditStats","opv","printPickableItemListPdf","sampleArr","base64ToArrayBuffer","saveByteArray","isPickingOrderPicked","PICKED","updatedVariant","updated_variant","gs1datamatrixCallback","gs1_number","openSelectUidStock","fetched","onUidStockChange","body_translation","old_uid_stock","old_uid_stock_uid","selectedUid","title_trans_key","isRemoving","body_trans_key","ok_trans_key","currentLotNumber","newLotNumber","handleFinishPicking","executeFinishPicking","handleFinishPickingAndPack","handleFinishPickingAndShip","pack","total_picked","pickAll","PackingController","externalParcelsIds","printDeliveries","external_parcels_ids","orderAutocode","changingPackingStatus","packing_activity","hasCompanySendcloud","handleDownloadLabels","handleDownloadLabelsWithDeliveries","openShippingDialog","ordersAutocode","packing_orders","getOrderTypeLabel","article","deletePackingOrder","isInProgress","changePackItemStatus","tagAndFinishWithSendcloud","generating_order_pdf","NewInventoryProductController","is_sample","bundleContentVariants","stepTwoValid","finishWizard","idStyle","mainInformationSaveCallback","getMainTitle","getFirstStepTitle","LowStockController","isABCAnalysisEnabled","has_inventory_analytics","isReplenishmentsEnabled","notImplemented","LabelsGeneratorController","initFromOrder","orderProdutVariantAmountDict","tempVariantsDict","principalVariantsById","nonPrincipalVariantsById","orderProdutVariant","primaryVariantCategories","nonPrimaryVariantCategories","principalVariant","nonPrincipalVariant","hasDiscountVar","totalLabels","hasDiscount","useDiscountPrice","matchProduct","updateProduct","primaryId","nonprimaryId","match_barcode","postGetProductVariants","productVariantPricesByPricingTier","pv2","sumAllAmounts","pimaryVariant","nonPimaryVariant","getCurrentCurrency","getProductIdx","MAX_LABELS","MAX_LABELS_WITHOUT_EMAIL","ORDER_BY","asc","desc","variantsDict","variantCategoriesDict","startAt","usePriceExclTax","oneLabelPerPage","printGrid","documentType","printing_pdf","printing_spreadsheet","use_discount","document_type","product_label_design","getTotalPages","getLabelsPerPage","hasPrice","initUseDiscountPrice","lastBarcode","showImportFromWarehouseDialog","onFocus","onBlur","defaultId","storedString","purchase_order_delivery_products","unregisterPricingTier","promises","productIdx","ConfigurationController","GENERAL_CONFIGURATION","serf","EMAIL_CONFIGURATION","newButtonPermission","newButtonLabel","INVENTORY_CONFIGURATION","title2","newButtonLabel2","svg_icon","RETAIL_CONFIGURATION","newOption","isActive","create2Clicked","InventoryCollectionsController","reloadCollections","reloadCollectionsTimeout","getCollections","InventoryCollectionController","AdjustmentsController","filterByReplenishment","InventoryAdjustmentController","VeriFactuController","AppsController","EcommerceSortingController","orderedProductsList","orderedProductsDict","changes","gridOpts","addProduct","savePositions","clearPositions","dragEnd","cleanProduct","addAllList","sortProducts","category_position","subcategory_position","brand_position","season_position","checkSubcategory","hasSubcategory","EcommerceSitesController","newSite","EcommerceSiteController","startPullingStatus","site_products","site_products_synchronizing","site_products_waiting_to_synchronize","deleteSite","sync","syncProducts","syncStock","syncPrices","importProducts","importOrder","importMissingProducts","importVariantCategories","getSyncStockClass","importVariantCategoriesDisabled","EcommerceScanAndGoController","scanning","setBanner","selectedFulfillment","hasMultiple","multipleProductsOrder","setPosOrder","onBarcodeNotFound","showBanner","onBarcodeAlreadyScanned","bannerTimeout","bannerMessage","bannerBarcode","canShipItems","allowToFulfillOnPlatform","hasOrderEditPermission","posOrderFulfillment","allowShip","sendcloud_pos_order_fulfillment_data","isSendcloudShipment","selectFulfillment","setUpdateActionShip","getVisiblePosOrderFulfillmentProductVariantInstances","uploadAmount","sendcloudShippingMethodsDict","pos_order_shipping_methods","shipping_method_name","closeBanner","warehouseChanged","setOderTypeChanged","openScanner","principal","deregisterBarcodeNotFound","deregisterBarcodeAlreadyScanned","deregisterPickingFinished","EcommerceOrdersController","POS_ORDER_FULFILLMENTS","selectedOrders","orderDto","selectedFulfillmentsDict","selectedFulfillments","generating_items_pdf","replenishmentStatuses","stockWarehouses","fulfillmentTypes","warnings","isOrdersState","withWarning","FULFILLMENT_STATUS_PENDING","FULFILLMENT_STATUS_ALLOCATED","FULFILLMENT_STATUS_SHIPPED","FULFILLMENT_STATUS_PICKED_UP","FULFILLMENT_STATUS_RETURNED","FULFILLMENT_STATUS_RETURNED_RECEIVED","FULFILLMENT_STATUS_CANCELLED","isFunction","getTranslation","shipping_method","product_variants_count","products_count","stock_location","isPickingState","getGridPickingPage","initializingPage","deselectFulfillment","setGridPickingColumns","getGridPickingPageGetData","totalOrders","hasSendcloudInstalledAppEnabled","mappedShippingMethods","exportingOrdersByShippingMethod","getPaymentStatusColorClass","removeOrderFilter","downloadDeliveriesPdf","getSelectedOrderIds","generatingDeliveriesPdf","exportOrdersByShippingMethod","shippingMethodId","orderIds","shipping_method_id","printItemsListPdf","areSourceWarehouseUnique","showItemsListPdf","showMarkAsShippedDialog","twoOptions","option1Text","option1Callback","option1Classes","cancelClasses","isPickableOnPickingOrder","has_picking_and_packing","posOrderFulfillments","showCancelItemButton","cancelItem","cancelPicking","cancelPicked","cancelPrepared","hasMultipleScanAndGoFeature","has_scan_and_go","openMultipleScanAndGoDialog","initCounters","getPage","has_shipping_method_mappings","mapper","fulfillments","totalItemsToPrepareCount","to_prepare_count","totalItemsPreparedCount","prepared_count","totalItemsIncidenceCount","with_incidences_count","totalItemsPickingCount","picking_count","totalItemsPickedCount","picked_count","totalItemsReturnedCount","returned_count","totalItemsFinishedCount","finished_count","totalItemsDeletedCount","deleted_count","totalItemsInRepositionCount","in_reposition_count","totalItemsList","all_count","totalTemplate","pickingOrderTemplate","actionTemplate","numberOfButtons","actionWidth","pos_order__private_notes","exporterSuppressExport","pos_order_fulfillment","selectRow","fulfillment_types","EcommerceOrderController","FULFILLMENT_DEPLOY_DATE","BANNER_ACADEMY_URL","BANNER_VIDEO_URL","orderBackup","updateActivity","addProductsEnabled","showNewScreenBanner","showUploadFulfillmentsDisabled","showOldOrdersBanner","posOrderPaymentStatusDisabled","siteHasReplenishmentPolicy","autoAssignReplenishmentWarehousePolicies","AUTO_ASSIGN_PURCHASE_POLICY","POS_ORDER_PAYMENT_STATUS_FAILED","posOrderShippingStatuses","POS_ORDER_SHIPPING_STATUS_PENDING","POS_ORDER_SHIPPING_STATUS_ALLOCATED","POS_ORDER_SHIPPING_STATUS_PICKED_UP","POS_ORDER_SHIPPING_STATUS_SHIPPED","printTicket","printPosTicket","isGiftTicket","siteObj","sendPosTicket","closeInvoice","canCreateInvoice","shipping_address_instance","billing_address_instance","updateDebounce","shippingAddressChanged","billingAddressChanged","addPosOrderProductVariant","addProducts","removeCustomer","dismissNewOrderBanner","dismissWarningOrderBanner","showWarningOrderBanner","openSendEmailDialog","documentName","invoiceType","updateOrder","saveOrder","saveAndCloseOrder","saveAndAllocateDraft","showSaveDraftButton","allowedToClose","showSaveDraftAndAllocateButton","showSaveButton","is_negated","showSaveAndCloseButton","cancelProductsEdition","executeSupplyingPolicy","posOrdersExecuteSupplyingPolicy","updateFulfillmentProductVariantsStockoutData","hasStockouts","importOrderFromSite","goToInvoice","POS_ORDER_SHIPPING_STATUS_CANCELLED","register_activity_closed","paymentMethodParams","setSaving","updateTotals","closeOrder","forceUpdate","force_update","ERROR_04002_REGISTER_CLOSED","setStockoutDataFromFulfillment","upload_fulfillments","warning","NewEcommerceSiteController","gotoSites","ContactsController","reloadContacts","isContactsPage","reloadContactsTimeout","listType","openContactDialog","importContactsDialog","newCustomer","ConnectSiteController","urlSearchParams","fromEntries","entries","sitesConnect","selling_partner_id","spapi_oauth_code","ContactController","CONTACT_TYPE_CUSTOMER","personDeletedWatcher","deletedPersonId","personSavedWatcher","existingPersonIndex","AnalyticsWholesaleDashboardController","channels","selectedChannel","selectStoreTimeout","selectChannel","channel","changeTabToRealtime","changeTabToPerformance","AnalyticsStartController","COMPANY_PLANS","DASHBOARD_ITEM_TYPES","banners","bannerClicked","banner","panel_sref","getBannerFlex","ui_flex_sm","ui_flex_xl","ui_flex","getBannerImage","image_sm","image_xl","isFreemium","FREEMIUM","employees_working_list","employees_working_list_str","user__first_name","user__last_name","SaleAnalyticsController","DynamicReport","dataLoaded","salesDynamicReport","Promise","metadata","AnalyticsRetailDashboardController","changeTabToProducts","changeTabToCategories","ReportsReportController","translate","RETAIL_SALES","fileFormat","toggleCheckboxValue","showHeaderItems","ProductAnalyticsController","productsDynamicReport","staticPresetFilters","subtract","startOf","endOf","metric_headers","AnalyticsInventoryController","AnalyticsHealthController","PaymentsController","invoice_autocode","isFilterActive","InvoiceController","OrderDelivery","CORRECTIVE_INVOICE_TYPES","INVOICE_PAYMENT_STATUSES","invoiceAPI","FEATURE_FLAG_ACCOUNTING_INVOICE_V2","isNewInvoice","addLine","refreshAllTotalPrices","sale_order_deliveries","initializeSaleOrderDelivery","purchase_order_deliveries","initializePurchaseOrderDelivery","defaultTaxIndex","defaultTaxId","filterSerialNumberTypesByIntegrationInstalledApp","defaultSerialNumberType","snt","odpvByOpvIds","loaded","odpvByColorAndSize","odpv","order_products","product_ddp_price","refreshTotalPrice","invoice_lines","invoiceLine","avoidRefreshTotals","tax_instance","getTaxById","has_custom_price_excl_tax","taxName","taxPercentage","taxSurcharge","invoiceForm","line","holded_invoice_data","isValidForHolded","invoiceCopy","billing_date","calculateExpirationDateFromCustomerPaymentMethod","billingDate","payment_method_days","addProductLine","invoiceLineIndex","requests","isMissingRequiredHoldedData","isValidKubiBaiInvoice","kubibai_invoice_data","successMessageKey","extraData","ERROR_01021_MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE","showEmitButton","isPurchaseInvoice","isInvoiceType","getSerialNumberTypeType","paymentMethodsData","discount_as_percentage","early_payment_discount_as_percentage","object_delivery_autocode","removeLine","addExpirationDays","saveInvoice","filteredDeliveryNoteId","transfer_order_deliveries","updateLines","pos_orders","removeDeliveryNote","deliveryNote","delete_text","delete_title","cancelInvoice","contactChanged","toastMessages","found","mutable_fields","createInvoiceFromProforma","createSaleOrder","pricing_tier_id","ERROR_01017_CANT_CREATE_SALE_ORDER_FROM_PROFORMA_WITH_DELETED_PRODUCT_EXCEPTION","openConflictDeletedProductsDialog","deleted_products","saveInvoiceLine","invoice_line","newDocument","getPdfName","getAutocodeOrDraft","message_body","excludeTaxesHasChanged","restoreTaxes","confirmInvoicePricingTierUpdate","payload","isDisabledInvoice","corrective_of","canAddPayments","canDuplicateInvoice","isInvoiceLineDisabled","kubibaiInstalledAndActive","isInstalledAndActive","installed_integration_apps","installedApp","isNotPrintablePurchaseOrderInvoice","getOrderDeliveryProductAmount","sale_order_is_devolution","getOrderDeliveryProductPriceExclTax","order_product_price_excl_tax","createReplacementInvoice","createCorrectiveInvoice","isSendButtonDisabled","isSaveButtonDisabled","isDownloadButtonDisabled","isCloseButtonDisabled","InvoicesController","serialNumberTypeIdFilter","selectedContactType","creatingDocument","usersController","Role","userRoles","userRolesDict","USER_ROLE_RETAIL_VENDOR","USER_ROLE_RETAIL_MANAGER","USER_ROLE_PRODUCTS_EDITOR","USER_ROLE_OWNER","USER_LIMIT","userLimit","reloadUsers","reloadUsersTimeout","listOrder","listOrderAsc","selectedContacts","newGroupName","USER_ROLE_SUPERUSER","openUserDialog","allowUserCreation","blockUserCreation","RolesController","createMatrix","fetchingPermissions","fetchingRoles","rolesMatrix","rolesChanged","permissions","sortText","class","createBackup","backupRolesMatrix","getRoleTitle","roleId","permissionId","openRoleDialog","newName","updatedRole","foundRole","replaceFor","replace_for","exclude_superadmin","getPermissions","RequestPinDialogController","scopedHotKeys","pin","checking","bindTo","checkPin","setFormValidity","ndPrinterUtilsService","WIDTH","DOUBLE_WIDTH_TEXT_WIDTH","characters","INIT","TXT_ENC_WPC1252","BR","BR_2","BR_3","BOND_ON","BOND_OFF","LEFT_ALIGN","RIGHT_ALIGN","CENTER_ALIGN","DOULE_FONT_SIZE","NORMAL_FONT_SIZE","SMALL_TEXT","NORMAL_TEXT_SIZE","BOLD_ON","BOLD_OFF","CUT","OPEN_CASH_DRAWER","PRODUCTS_SPACE","LINE","LINE_2","LINE_2_","dotDensity","SPACE","COMA","commands","CTL_LF","CTL_FF","CTL_CR","CTL_HT","CTL_VT","DLE_EOT_PRINTER","DLE_EOT_OFFLINE","DLE_EOT_ERROR","DLE_EOT_PAPER","HW_INIT","HW_SELECT","HW_RESET","CD_KICK_2","CD_KICK_5","CUSTOM_PAPER_FULL_CUT","PAPER_FULL_CUT","PAPER_PART_CUT","SHEET_SLIP_MODE","SHEET_ROLL_MODE","TXT_NORMAL","TXT_2HEIGHT","TXT_2WIDTH","TXT_DOUBLE","TXT_UNDERL_ON","TXT_UNDERL_OFF","TXT_UNDERL2_ON","TXT_BOLD_OFF","TXT_BOLD_ON","TXT_FONT_A","TXT_FONT_B","TXT_ALIGN_LT","TXT_ALIGN_CT","TXT_ALIGN_RT","TXT_COLOR_BLACK","TXT_COLOR_RED","TXT_SMALL_SIZE","TXT_NORMAL_SIZE","TXT_ENC_PC437","TXT_ENC_KATAKANA","TXT_ENC_PC850","TXT_ENC_PC860","TXT_ENC_PC863","TXT_ENC_PC865","TXT_ENC_KANJI6","TXT_ENC_KANJI7","TXT_ENC_KANJI8","TXT_ENC_PC851","TXT_ENC_PC853","TXT_ENC_PC857","TXT_ENC_PC737","TXT_ENC_8859_7","TXT_ENC_PC866","TXT_ENC_PC852","TXT_ENC_PC858","TXT_ENC_KU42","TXT_ENC_TIS11","TXT_ENC_TIS18","TXT_ENC_TCVN3","TXT_ENC_TCVN3B","TXT_ENC_PC720","TXT_ENC_WPC775","TXT_ENC_PC855","TXT_ENC_PC861","TXT_ENC_PC862","TXT_ENC_PC864","TXT_ENC_PC869","TXT_ENC_PC936","TXT_ENC_8859_2","TXT_ENC_8859_9","TXT_ENC_PC1098","TXT_ENC_PC1118","TXT_ENC_PC1119","TXT_ENC_PC1125","TXT_ENC_WPC1250","TXT_ENC_WPC1251","TXT_ENC_WPC1253","TXT_ENC_WPC1254","TXT_ENC_WPC1255","TXT_ENC_WPC1256","TXT_ENC_WPC1257","TXT_ENC_WPC1258","TXT_ENC_KZ1048","bin2Hex","0","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","244","245","246","247","248","249","250","251","252","253","254","255","repeatCharacter","numberTimes","pullRight","centerText","justify2Text","textLeft","textRight","createParagraphText","double_width_text","paragraphs","createPosOrderHeader","extraTitle","ticket_configuration_object","ticket_configuration_instance","mainAddress","print_logo","logo_b64","fiscal_address_instance","legal_name","dateToLocalString","addEmptyLine","createFooter","kubibaiTicketData","canvas","barcodeOptions","barcode_design","SMALL","base64","toDataURL","print_barcode","footer_devolution_card","footer","closure","tbai_code","batuz_qr_image","pushOrGetPrice","plainTicket","returnPrice","price_diff","priceText","getProductIdentifier","product_identifier_type","getVariantIdentifier","variant_identifier_type","product_variant_color_name","product_variant_size_name","showVariantIdentifier","inlineProductAndPrice","product_price_position","createRegisterActivityHeader","createRegisterActivitySummaryMainInformation","getCashDrawerCharacter","open_drawer_signal","decimalNumber","printPosOrder","amount_less_returns","priceString","spacesNeeded","productIdentifier","canceled_amount","product_identifier","availableSpaceForName","repeat","variant_identifier","translate_gift_card","pv_price","total_with_disc","total_design","posOrderPendingAmount","kubibai_ticket_data","actual_gift_card_amount","ticketConfiguration","printerCharactersPerLine","printLogo","logoBase64","amountInclTax","footerDevolutionCard","barcodeDesign","printRegisterActivitySummary","caracteresPorLinea","textoFormateado","linea","palabra","res","total_used_devolution_cards","total_generated_devolution_cards","total_used_gift_cards","total_generated_gift_cards","total_revenue","is_closure","printRegisterActivitySoldProductsSummary","usersDict","userId","includeReturns","returned_amount","printVerificationTicket","ip","EscPosPrinterDialogController","addGiftAmount","removeGiftAmount","_PackingOrder","Factory","PosOrderFulfillment","_getValue","createdBy","createdByInstance","deliveryOrder","hasSendcloudData","constructor","isPacked","isPendingToShip","PENDING_TO_SHIP","isShipped","SHIPPED","canEditItemStatus","isFulfillmentType","factory","_PackingActivity","startedAt","finishedAt","packedBy","started_at","finished_at","packed_by","ValidateSignUpTwoController","addFunctions","purchased_pending_to_receive","sold_pending_to_prepare","sold_pending_to_ship","transferred_pending_to_prepare","transferred_pending_to_ship","signupTwo","ValidateSignUpController","generatingData","signup","postLogIn","content@signuptwo","SignUpTwoController","getEmail","SignUpController","content@app.pages_hub","subcontent@app.pages_hub","t","HubDocumentsController","documents","documentPageUrl","mediaLtLg","pageUrl","HubDocumentController","recalculatePDFHeight","iframeElement","currentWidth","offsetWidth","pdfData","printPDF","iframe","contentWindow","downloadPDF","withCredentials","objectUrl","File","HTTP_429_TOO_MANY_REQUESTS","content@app.pages_errors_error-500","saveItem","content@app.pages_errors_error-404","content@app.pages_auth_reset-password","ResetPasswordController","checkPasswordMismatch","repeatPassword","resetPasswordForm","authService","showRepeatPassword","passwordReset","resetPassword","recovering","passwordResetComplete","content@app.pages_auth_register-v2","RegisterV2Controller","AUTH_EVENTS","rootScope","authEvents","loginFailed","content@app.pages_auth_register","content@app.pages_auth_login-v3","LoginV3Controller","logging","login","rememberPassword","redirectFreemiumPage","loginSuccess","loginForm","typingUsername","passwordRecovery","content@app.pages_auth_login-v2","LoginV2Controller","content@app.pages_auth_login","content@app.pages_auth_lock","content@app.pages_auth_forgot-password","ForgotPasswordController","isValidEmail","RegExp","resetPasswordRequest","typingEmail","forgotPasswordForm","component","transclude","bindings","$onInit","registerFilter","each","ngModel","$setViewValue","$render","$root","toggleFilter","SelectDefaultPrinterDialogController","listPrinters","SelectDefaultRegisterDialogController","IpEpsonPrinterDialogController","eposdev","EpsonPrinterService","STATES","ERROR","connecting","READY","saveDefaultRegister","ipEpsonForm","printersate","testConnection","isValidIp","printer_ip","ndSetupDialogController","delayInSeconds","onOptionChanged","delay","DELETE_DEMO_DATA","KEEP_DEMO_DATA","confirmation","showList","getOptionDynClass","expected","disableAcceptButton","getOkButtonTranslationKey","onSelectAllChange","applyChanges","ProductVariantTransfersPreviewController","msApi","colorById","sizeById","newTOPV","updateAmount","transferOrderProductVariant","epsonPrinterService","printFromQueue","raw_data","flagEnabled","imageCommands","processed","lastBaseImage","queue","command","__print","baseImage","Image","naturalWidth","naturalHeight","logo_width","logo_height","getContext","drawImage","disconnectDevice","createDevice","deviceId","printer_device_id","force_new_device","DEVICE_TYPE_PRINTER","crypto","buffer","callbackCreateEpsonDevice","callbackEpsonConnect","resultConnect","emitState","deviceObj","CONNECTING_TO_PRINTER","use_ssl","deleteDevice","callbackDeleteDevice","is_printing","featureFlagAndPosOrderInvoice","addImage","addCommand","addBarcode","BARCODE_CODE128","HRI_BELOW","addPulse","onreceive","onerror","ondisconnect","random","epson","ePOSDevice","WAITING","ACTIVE","SETTING_DEFAULT_PRINTER","SETTING_DEFAULT_REGISTER","READY_UPDATE_NEEDED","CLOSING","CLOSED","startConnection","connectPrinter","connectEpsonPrinter","openPrinterDialog","printerIp","printerPort","PRINTER_TYPE_QZ","prePrintTicket","_VerifactuIntegrationInstalledApp","InstalledIntegrationApp","VERIFACTU_DOCUMENTS_STATUS","VERIFACTU_ENVIRONMENT_STATUS","identity_card","contract","documents_status","VERIFACTU_DOCUMENTS_PENDING_TO_UPLOAD","rejected_reason","rejected_at","rejected_by","approved_at","approved_by","environment_status","ENVIRONMENT_STATUS_TEST","getName","getDocumentsStatusName","getContractFileName","isRejected","VERIFACTU_DOCUMENTS_REJECTED","isPendingToUpload","isPendingToReview","VERIFACTU_DOCUMENTS_PENDING_TO_REVIEW","isApproved","VERIFACTU_DOCUMENTS_APPROVED","canUploadDocuments","isEnabled","canEnableTestMode","canEnableRealMode","isTestEnvironment","_InstalledIntegrationApp","end_at","installed_at","_InstalledIntegrationAppFactory","getInstalledIntegrationAppClass","_Warehouse","TicketConfiguration","address_2","simplified_invoice_serial_number_type","corrective_simplified_invoice_serial_number_type","custom_invoice_serial_number_type","create_register_activity_invoices","register_activity_invoice_serial_number_type","register_activity_invoice_contact","register_activity_invoice_contact_instance","transfer_lead_time","order_frequency","expansion_percentage","sendcloud_warehouse_sender_address","contact_person","total_area","_TicketConfiguration","returnPolicy","return_policy","returnInstructions","return_instructions","printBarcode","systemPrinter","system_printer","variantIdentifier","productPricePosition","totalDesign","getBarcodeHeight","_Register","printName","print_name","printDeviceId","print_device_id","useSSL","relatedIntegrationApp","related_integration_app","is_limit_min","is_limit_max","max_type","max_percentage_value","max_fixed_amount_value","is_limit_max_to_min_stock_origin","externalId","externalParcelId","external_parcel_id","orderNumber","order_number","externalStatus","external_status","externalStatusMsg","external_status_msg","trackingNumber","tracking_number","labelPrinted","label_printed","parcelUrl","pos_order_default_serial_number_type","retail_simplified_invoice_default_serial_number_type","retail_invoice_default_serial_number_type","corrective_invoice_default_serial_number_type","wholesale_proforma_invoice_default_serial_number_type","wholesale_quote_invoice_default_serial_number_type","product_code_template","product_code_template_counter_length","product_variant_sku_template","product_variant_sku_template_counter_length","invoice_data_protection","quote_data_protection","proforma_data_protection","_GIftCard","amountExclTax","amount_excl_tax","tax_name","isVoucher","_SpainFiscalProfile","FiscalProfile","verifactu_type","VERIFACTU_TYPE_UNKNOWN","requires_completion","profile_type","_FiscalProfileFactory","_MutableInvoiceFields","MutableInvoiceFields","credit_note_of","toolbar@app.pages_trial_expired","content@app.pages_trial_expired","quickPanel@app.pages_trial_expired","TrialExpiredController","content@app.pages_shopify","ShopifyController","content@app.pages_maintenance","HubController","navigation","logoUrl","route","goToStockagile","getNavigation","leading","barTitle","actions","leadingSlot","barTitleSlot","actionsSlot","tabs","selectTab","headerTitle","subtitle","statusLabels","statusTranslate","clearable","onChanged","selectPlaceholder","additionalClass","isMultiple","itemTemplate","$transclude","getContainerClass","loadData","onDropdownChanged","isSvgIcon","showLabel","mdClass","ctrl","mainTarget","actionsTarget","mainButtonNode","clone","mdMenu","isMain","compiledNode","wrapper","nodeType","Node","ELEMENT_NODE","hasAttribute","originalNode","cloneNode","mdMenuCtrl","variation","getPanelClass","getIconClass","onInputChange","oneRow","emitChanged","layout","discount_is_percentage","duration_in_months","onValueChange","parsed","isPercent","onClick","onDurationChange","onDurationMonthsChange","activeFilters","loadActiveFIlters","saveActiveFilters","onFiltersChanged","ndInputChanged","ndPaginatedDropdownChanged","wbUpgradePlan","features","Sha256","hash","utf8Encode","o","S","O","σ1","σ0","u","R","T","Σ1","Ch","Σ0","Maj","toHexStr","ROTR","qz","unescape","utf8Decode","escape","exports","define","amd","lib$rsvp$utils$$isFunction","lib$rsvp$utils$$_isArray","lib$rsvp$utils$$isArray","lib$rsvp$utils$$now","lib$rsvp$utils$$F","lib$rsvp$utils$$o_create","arguments","TypeError","lib$rsvp$events$$indexOf","callbacks","l","lib$rsvp$events$$callbacksFor","_promiseCallbacks","lib$rsvp$events$$default","mixin","eventName","allCallbacks","off","lib$rsvp$config$$config","instrument","lib$rsvp$config$$configure","lib$rsvp$instrument$$queue","lib$rsvp$instrument$$default","_guidKey","_id","_result","childId","_label","timeStamp","entry","guid","childGuid","lib$rsvp$$internal$$noop","lib$rsvp$$internal$$PENDING","lib$rsvp$$internal$$FULFILLED","lib$rsvp$$internal$$REJECTED","lib$rsvp$$internal$$GET_THEN_ERROR","lib$rsvp$$internal$$ErrorObject","lib$rsvp$$internal$$handleForeignThenable","thenable","async","sealed","fulfillmentHandler","rejectionHandler","lib$rsvp$$internal$$resolve","lib$rsvp$$internal$$fulfill","lib$rsvp$$internal$$reject","lib$rsvp$$internal$$handleMaybeThenable","maybeThenable","_state","_onError","lib$rsvp$$internal$$subscribe","lib$rsvp$$internal$$publishRejection","lib$rsvp$$internal$$publish","_subscribers","onFulfillment","onRejection","subscribers","settled","lib$rsvp$$internal$$invokeCallback","lib$rsvp$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$rsvp$enumerator$$makeSettledResult","lib$rsvp$enumerator$$Enumerator","Constructor","abortOnReject","enumerator","_instanceConstructor","_abortOnReject","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$rsvp$enumerator$$default","_eachEntry","_settledAt","_willSettleAt","_makeResult","lib$rsvp$promise$all$$default","lib$rsvp$promise$race$$default","lib$rsvp$promise$resolve$$default","lib$rsvp$promise$reject$$default","lib$rsvp$promise$$guidKey","lib$rsvp$promise$$counter","lib$rsvp$promise$$Promise","resolver","lib$rsvp$$internal$$initializePromise","resolved","lib$rsvp$promise$$default","lib$rsvp$all$settled$$AllSettled","_superConstructor","cast","race","after","lib$rsvp$all$settled$$default","lib$rsvp$all$$default","lib$rsvp$asap$$vertxNext","lib$rsvp$asap$$len","lib$rsvp$asap$$default","lib$rsvp$asap$$queue","lib$rsvp$asap$$scheduleFlush","lib$rsvp$asap$$browserWindow","lib$rsvp$asap$$browserGlobal","lib$rsvp$asap$$BrowserMutationObserver","MutationObserver","WebKitMutationObserver","lib$rsvp$asap$$isNode","process","lib$rsvp$asap$$isWorker","Uint8ClampedArray","importScripts","MessageChannel","lib$rsvp$asap$$useSetTimeout","lib$rsvp$asap$$flush","iterations","nextTick","lib$rsvp$asap$$attemptVertex","vertx","runOnLoop","runOnContext","lib$rsvp$defer$$default","version","versions","setImmediate","observer","createTextNode","observe","characterData","port1","onmessage","port2","postMessage","lib$rsvp$filter$$default","filterFn","filtered","newLength","lib$rsvp$promise$hash$$PromiseHash","lib$rsvp$promise$hash$$default","lib$rsvp$hash$settled$$HashSettled","lib$rsvp$hash$settled$$default","lib$rsvp$hash$$default","lib$rsvp$map$$default","mapFn","lib$rsvp$node$$Result","lib$rsvp$node$$ERROR","lib$rsvp$node$$GET_THEN_ERROR","lib$rsvp$node$$tryApply","lib$rsvp$node$$default","nodeFunc","promiseInput","onFulFillment","argumentNames","__proto__","lib$rsvp$platform$$platform","lib$rsvp$platform$$default","lib$rsvp$race$$default","lib$rsvp$reject$$default","lib$rsvp$resolve$$default","lib$rsvp$rethrow$$default","cb","lib$rsvp$$on","lib$rsvp$$eventName","lib$rsvp$$callbacks","lib$rsvp$umd$$RSVP","allSettled","hashSettled","denodeify","rethrow","EventTarget","configure","isInteger","isFinite","_qz","VERSION","DEBUG","trace","warn","allay","streams","serial","usb","hid","socket","websocket","connection","connectConfig","host","hostIndex","usingSecure","protocol","secure","insecure","port","portIndex","keepAlive","retries","setup","findConnection","deeper","tools","ws","established","onopen","evt","openConnection","setInterval","clearInterval","onclose","userAgent","openPromise","sendCert","cert","getVersion","semver","ignore","compatible","algorithm","sendData","certificate","callClose","pendingCalls","callError","timestamp","newUID","screen","availWidth","availLeft","availHeight","availTop","signObj","hashing","signature","security","needsSigned","hashed","callSign","signAlgorithm","signContent","returned","portName","output","callSerial","callSocket","vendorId","callUsb","callHid","printers","callPrinter","callFile","callCert","dataPromise","callName","signingTimestamp","errorCallbacks","closedCallbacks","defaultConfig","colorType","copies","density","duplex","fallbackDensity","interpolation","jobName","legacy","margins","orientation","paperThickness","printerTray","rasterize","scaleContent","units","forceRaw","encoding","spool","serialCallbacks","streamEvent","socketCallbacks","socketEvent","usbCallbacks","hidCallbacks","printerCallbacks","fileCallbacks","certHandler","signatureFactory","toSign","RSVP","pjson","toJSON","SHA","WebSocket","loc","relative","flavor","overlay","versionCompare","major","minor","build","assertActive","localeCompare","isVersion","printData","altPrinting","perSpool","endOfDoc","networking","hostname","mappingCallback","ipAddress","macAddress","mac","quiet","K","H","N","M","W","_dev1","_dev0","g","T1","_sig1","_ch","T2","_sig0","_maj","_hexStr","_rotr","Config","_dirtyOpts","setPrinter","newPrinter","getPrinter","reconfigure","newOpts","getOptions","attempt","nextAttempt","tried","delayed","disconnect","setErrorCallbacks","calls","setClosedCallbacks","getNetworkInfo","getConnectionInfo","getDefault","startListening","printerNames","jobData","maxJobData","stopListening","setPrinterCallbacks","configs","setDefaults","resumeOnError","signatures","signaturesTimestamps","chain","i_","mapping","fallen","fallThrough","last","reduce","sequence","findPorts","setSerialCallbacks","openPort","closePort","setSocketCallbacks","listDevices","includeHubs","listInterfaces","deviceInfo","listEndpoints","interface","setUsbCallbacks","claimDevice","isClaimed","readData","responseSize","openStream","closeStream","releaseDevice","setHidCallbacks","sendFeatureReport","getFeatureReport","read","include","setFileCallbacks","device","devices","setCertificatePromise","promiseHandler","setSignaturePromise","promiseFactory","setSignatureAlgorithm","getSignatureAlgorithm","showDebug","isVersionGreater","isVersionLess","setPromiseType","promiser","setSha256Type","hasher","setWebSocketType","callbackInfo","callbackInfoList","CommBox","boxID","commBoxManager","ERROR_OK","ERROR_NOT_OPENED","ERROR_MEMBER_NOT_FOUND","ERROR_SYSTEM_ERROR","connectionObj","CommBoxManager","ERROR_BOX_COUNT_OVER","ERROR_BOX_CLIENT_OVER","ERROR_MEMBERID_ALREADY_USED","ERROR_ALREADY_OPENED","ERROR_PARAMETER_ERROR","commBoxList","DeviceObjectSelector","type2objectMap","type_scanner","type_keyboard","type_poskeyboard","type_msr","type_cat","type_cash_changer","type_printer","type_display","type_simple_serial","type_hybrid_printer","type_hybrid_printer2","type_dt","type_other_peripheral","type_storage","CashChanger","deviceID","isCrypto","CONFIG_LEFT_CASH","CONFIG_COUNT_MODE","MODE_MANUAL_INPUT","MODE_AUTOCOUNT","DEPOSIT_CHANGE","DEPOSIT_NOCHANGE","DEPOSIT_REPAY","COLLECT_ALL_CASH","COLLECT_PART_OF_CASH","SUE_POWER_ONLINE","SUE_POWER_OFF","SUE_POWER_OFFLINE","SUE_POWER_OFF_OFFLINE","SUE_STATUS_EMPTY","SUE_STATUS_NEAREMPTY","SUE_STATUS_EMPTYOK","SUE_STATUS_FULL","SUE_STATUS_NEARFULL","SUE_STATUS_FULLOK","SUE_STATUS_JAM","SUE_STATUS_JAMOK","CAT","SUE_LOGSTATUS_OK","SUE_LOGSTATUS_NEARFULL","SUE_LOGSTATUS_FULL","trainingMode","DeviceTerminal","onshutdown","onrestart","Display","ePOSDeviceContext","ePosDev","ASB_NO_RESPONSE","ASB_DISPLAY_SUCCESS","SCROLL_OVERWRITE","SCROLL_VERTICAL","SCROLL_HORIZONTAL","MOVE_TOP_LEFT","MOVE_TOP_RIGHT","MOVE_BOTTOM_LEFT","MOVE_BOTTOM_RIGHT","CURSOR_NONE","CURSOR_UNDERLINE","BRIGHTNESS_20","BRIGHTNESS_40","BRIGHTNESS_60","BRIGHTNESS_100","MARQUEE_WALK","MARQUEE_PLACE","LAYOUT_MODE_1","LAYOUT_MODE_2","LAYOUT_MODE_3","LAYOUT_MODE_4","LAYOUT_MODE_5","LAYOUT_MODE_6","LAYOUT_MODE_7","LAYOUT_MODE_8","LAYOUT_MODE_9","LAYOUT_MODE_10","LAYOUT_MODE_11","LAYOUT_MODE_12","LAYOUT_MODE_13","LAYOUT_MODE_14","LAYOUT_MODE_15","LANDSCAPE_LAYOUT_MODE_1","LANDSCAPE_LAYOUT_MODE_2","LANDSCAPE_LAYOUT_MODE_3","LANDSCAPE_LAYOUT_MODE_4","LANDSCAPE_LAYOUT_MODE_5","PORTRAIT_LAYOUT_MODE_1","PORTRAIT_LAYOUT_MODE_2","PORTRAIT_LAYOUT_MODE_3","PORTRAIT_LAYOUT_MODE_4","PORTRAIT_LAYOUT_MODE_5","PORTRAIT_LAYOUT_MODE_6","PORTRAIT_LAYOUT_MODE_7","EVEN_ROWS","ODD_ROWS","ALL_ROWS","SYMBOL_QRCODE_MODEL_1","SYMBOL_QRCODE_MODEL_2","LEVEL_L","LEVEL_M","LEVEL_Q","LEVEL_H","LEVEL_DEFAULT","addCallback","sq","removeCallback","getCallback","getCommHistory","_option","_callback","allHistory","box_id","all_history","eposmsg","MessageFactory","getCommBoxDataMessage","isOpened","getBoxId","emit","memberID","member_id","client_getcommhistory","historyList","history_list","getCommHistoryCB","client_send","sendCB","client_onreceive","rcvData","senderId","sender_id","receiverId","receiver_id","setConnectionObject","openCommBox","getOpenCommBoxMessage","isUsableDeviceIF","closeCommBox","boxObj","getCloseCommBoxMessage","client_opencommbox","commBoxObj","openCommBoxCB","getCommBox","client_closecommbox","closeCommBoxCB","removeCommBox","executeCommDataCallback","eval","isSelectable","deviceType","isUsablePrintIF","isUsableDisplayIF","specificDevice","deviceObjectName","templateObject","client_oncashcounts","oncashcounts","client_onstatuschange","onstatuschange","client_ondeposit","ondeposit","client_ondispense","ondispense","client_oncollect","oncollect","client_onconfigchange","onconfigchange","client_oncommandreply","oncommandreply","hexData","hexNum","client_ondirectio","ondirectio","client_onstatusupdate","onstatusupdate","readCashCounts","beginDeposit","pauseDeposit","restartDeposit","endDeposit","cmd","dispenseCash","data_","cash","dispenseChange","collectCash","collectMode","collectmode","setConfig","mode","sendCommand","toHexBinary","callEvent","eventReq","getDeviceDataMessage","authorizeSales","additional_security_information","additionalSecurityInformation","training","authorizeVoid","authorizeRefund","authorizeCompletion","accessDailyLog","dailylog_type","dailylogType","string","checkConnection","clearOutput","scanCode","_timeout","scanData","client_onauthorizesales","onauthorizesales","getResultObject","client_onauthorizevoid","onauthorizevoid","client_onauthorizerefund","onauthorizerefund","client_onauthorizecompletion","onauthorizecompletion","client_onaccessdailylog","onaccessdailylog","getDailyLogObject","getCommandReplyObject","client_oncheckconnection","oncheckconnection","client_onclearoutput","onclearoutput","client_onscancode","onscancode","client_onscandata","onscandata","accountNumber","account_number","settledAmount","settled_amount","slipNumber","slip_number","kid","approvalCode","approval_code","transactionNumber","transaction_number","paymentCondition","payment_condition","voidSlipNumber","void_slip_number","transactionType","transaction_type","dailylogData","logList","daily_log","logData","salesCount","sales_count","salesAmount","sales_amount","voidCount","void_count","voidAmount","void_amount","dailyLog","shutdown","client_onshutdown","client_onrestart","reset","createWindow","hight","scrollMode","getIntAttr","getEnumAttr","regexScrollMode","destroyWindow","setCurrentWindow","setCursorPosition","moveCursorPosition","regexMoveto","setCursorType","regexUnderline","addText","escapeMarkup","addReverseText","getBoolAttr","clearWindow","setBlink","getUShortAttr","setBrightness","regexBrightness","addMarquee","uwait","rwait","regexMarquee","showClock","addCreateScreen","addCreateScreenCustom","addBackgroundColor","regexRow","addStartSlideShow","addStopSlideShow","addSymbol","level","dotX","dotY","quietZone","regexSymbol","regexLevel","regexQuietZone","escapeControl","addDownloadImage","key1","addRegisterDownloadImage","toBase64Binary","addNVImage","addClearImage","addClearSymbol","createTextArea","destroyTextArea","setCurrentTextArea","clearTextArea","eposprint","xml","displaydata","xhr","tid","getAddressWithProtocol","soap","XMLHttpRequest","XDomainRequest","setRequestHeader","onreadystatechange","readyState","responseXML","getAttribute","fireReceiveEvent","fireErrorEvent","responseText","$1","onprogress","ontimeout","cleanup","client_onxmlresult","resultdata","setXmlString","getXmlString","OtherPeripheral","Keyboard","VK_CANCEL","VK_BACK","VK_TAB","VK_RETURN","VK_SHIFT","VK_CONTROL","VK_MENU","VK_PAUSE","VK_CAPITAL","VK_KANA","VK_ESCAPE","VK_CONVERT","VK_NONCONVERT","VK_SPACE","VK_PRIOR","VK_NEXT","VK_END","VK_HOME","VK_LEFT","VK_UP","VK_RIGHT","VK_DOWN","VK_INSERT","VK_DELETE","VK_0","VK_1","VK_2","VK_3","VK_4","VK_5","VK_6","VK_7","VK_8","VK_9","VK_A","VK_B","VK_C","VK_D","VK_E","VK_F","VK_G","VK_H","VK_I","VK_J","VK_K","VK_L","VK_M","VK_N","VK_O","VK_P","VK_Q","VK_R","VK_S","VK_T","VK_U","VK_V","VK_W","VK_X","VK_Y","VK_Z","VK_LWIN","VK_RWIN","VK_APPS","VK_NUMPAD0","VK_NUMPAD1","VK_NUMPAD2","VK_NUMPAD3","VK_NUMPAD4","VK_NUMPAD5","VK_NUMPAD6","VK_NUMPAD7","VK_NUMPAD8","VK_NUMPAD9","VK_MULTIPLY","VK_ADD","VK_SEPARATOR","VK_SUBTRACT","VK_DECIMAL","VK_DIVIDE","VK_F1","VK_F2","VK_F3","VK_F4","VK_F5","VK_F6","VK_F7","VK_F8","VK_F9","VK_F10","VK_F11","VK_F12","VK_NUMLOCK","VK_SCROLL","VK_LSHIFT","VK_RSHIFT","VK_LCONTROL","VK_RCONTROL","VK_LMENU","VK_RMENU","VK_OEM_1","VK_OEM_PLUS","VK_OEM_COMMA","VK_OEM_MINUS","VK_OEM_PERIOD","VK_OEM_2","VK_OEM_3","VK_OEM_4","VK_OEM_5","VK_OEM_6","VK_OEM_7","VK_OEM_102","VK_OEM_ATTN","MSR","ePOSBuilder","halftone","brightness","FONT_A","FONT_B","FONT_C","FONT_D","FONT_E","FONT_SPECIAL_A","FONT_SPECIAL_B","ALIGN_LEFT","ALIGN_CENTER","ALIGN_RIGHT","COLOR_NONE","COLOR_1","COLOR_2","COLOR_3","COLOR_4","FEED_PEELING","FEED_CUTTING","FEED_CURRENT_TOF","FEED_NEXT_TOF","MODE_MONO","MODE_GRAY16","BARCODE_UPC_A","BARCODE_UPC_E","BARCODE_EAN13","BARCODE_JAN13","BARCODE_EAN8","BARCODE_JAN8","BARCODE_CODE39","BARCODE_ITF","BARCODE_CODABAR","BARCODE_CODE93","BARCODE_GS1_128","BARCODE_GS1_DATABAR_OMNIDIRECTIONAL","BARCODE_GS1_DATABAR_TRUNCATED","BARCODE_GS1_DATABAR_LIMITED","BARCODE_GS1_DATABAR_EXPANDED","BARCODE_CODE128_AUTO","HRI_NONE","HRI_ABOVE","HRI_BOTH","SYMBOL_PDF417_STANDARD","SYMBOL_PDF417_TRUNCATED","SYMBOL_QRCODE_MICRO","SYMBOL_MAXICODE_MODE_2","SYMBOL_MAXICODE_MODE_3","SYMBOL_MAXICODE_MODE_4","SYMBOL_MAXICODE_MODE_5","SYMBOL_MAXICODE_MODE_6","SYMBOL_GS1_DATABAR_STACKED","SYMBOL_GS1_DATABAR_STACKED_OMNIDIRECTIONAL","SYMBOL_GS1_DATABAR_EXPANDED_STACKED","SYMBOL_AZTECCODE_FULLRANGE","SYMBOL_AZTECCODE_COMPACT","SYMBOL_DATAMATRIX_SQUARE","SYMBOL_DATAMATRIX_RECTANGLE_8","SYMBOL_DATAMATRIX_RECTANGLE_12","SYMBOL_DATAMATRIX_RECTANGLE_16","LEVEL_0","LEVEL_1","LEVEL_2","LEVEL_3","LEVEL_4","LEVEL_5","LEVEL_6","LEVEL_7","LEVEL_8","LINE_THIN","LINE_MEDIUM","LINE_THICK","LINE_THIN_DOUBLE","LINE_MEDIUM_DOUBLE","LINE_THICK_DOUBLE","DIRECTION_LEFT_TO_RIGHT","DIRECTION_BOTTOM_TO_TOP","DIRECTION_RIGHT_TO_LEFT","DIRECTION_TOP_TO_BOTTOM","CUT_NO_FEED","CUT_FEED","CUT_RESERVE","FULL_CUT_NO_FEED","FULL_CUT_FEED","FULL_CUT_RESERVE","DRAWER_1","DRAWER_2","PULSE_100","PULSE_200","PULSE_300","PULSE_400","PULSE_500","PATTERN_NONE","PATTERN_0","PATTERN_1","PATTERN_2","PATTERN_3","PATTERN_4","PATTERN_5","PATTERN_6","PATTERN_7","PATTERN_8","PATTERN_9","PATTERN_10","PATTERN_A","PATTERN_B","PATTERN_C","PATTERN_D","PATTERN_E","PATTERN_ERROR","PATTERN_PAPER_END","LAYOUT_RECEIPT","LAYOUT_RECEIPT_BM","LAYOUT_LABEL","LAYOUT_LABEL_BM","HALFTONE_DITHER","HALFTONE_ERROR_DIFFUSION","HALFTONE_THRESHOLD","toMonoImage","imgdata","e1","e2","m8","toGrayImage","v1","m4","thermal","markup","control","methodName","eventData","client_onkeypress","onkeypress","client_onstring","onstring","setPrefix","keycodes","client_ondata","ondata","addTextLang","addTextAlign","regexAlign","addTextRotate","addTextLineSpace","linespc","getUByteAttr","addTextFont","regexFont","addTextSmooth","addTextDouble","dw","dh","addTextSize","addTextStyle","reverse","ul","em","regexColor","addTextPosition","addTextVPosition","addFeedUnit","addFeedLine","addFeed","addFeedPosition","pos","regexFeed","ht","br","regexMode","getImageData","raster","addLogo","hri","regexBarcode","regexHri","getEnumIntAttr","addHLine","x1","x2","regexLine","addVLineBegin","addVLineEnd","addPageBegin","addPageEnd","addPageArea","addPageDirection","regexDirection","addPagePosition","addPageLine","y1","y2","addPageRectangle","addRotateBegin","addRotateEnd","addCut","regexCut","drawer","regexDrawer","regexPulse","addSound","pattern","cycle","regexPattern","addLayout","margin_top","margin_bottom","offset_cut","offset_label","regexLayout","getShortAttr","addRecovery","addReset","regex","ePOSPrint","battery","drawerOpenLevel","ononline","onoffline","onpoweroff","oncoverok","oncoveropen","onpaperok","onpaperend","onpapernearend","ondrawerclosed","ondraweropen","onbatterylow","onbatteryok","onbatterystatuschange","ASB_PRINT_SUCCESS","ASB_DRAWER_KICK","ASB_BATTERY_OFFLINE","ASB_OFF_LINE","ASB_COVER_OPEN","ASB_PAPER_FEED","ASB_WAIT_ON_LINE","ASB_PANEL_SWITCH","ASB_MECHANICAL_ERR","ASB_AUTOCUTTER_ERR","ASB_UNRECOVER_ERR","ASB_AUTORECOVER_ERR","ASB_RECEIPT_NEAR_END","ASB_RECEIPT_END","ASB_BUZZER","ASB_WAIT_REMOVE_LABEL","ASB_NO_LABEL","ASB_SPOOLER_IS_STOPPED","DRAWER_OPEN_LEVEL_LOW","DRAWER_OPEN_LEVEL_HIGH","epos","printjobid","fireStatusEvent","difb","updateStatus","intervalid","intervalxhr","CanvasPrint","paper","feed","cut","PAPER_RECEIPT","PAPER_RECEIPT_BM","PAPER_LABEL","PAPER_LABEL_BM","POSKeyboard","Printer","HybridPrinter","ReceiptPrinter","SlipPrinter","EndorsePrinter","MICRReader","ASB_TOF_NOPAPER","ASB_BOF_NOPAPER","ASB_SLIP_NO_SELECT","ASB_SLIP_IMPOSSIBLE_PRINT","SUCCESS","CANCEL","ERROR_PARAMMETER","ERROR_COMMAND","ERROR_DEVICE_NOT_FOUND","ERROR_DEVICE_BUSY","ERROR_NOT_SUPPORTED","ERROR_COVER_OPEN","ERROR_TIMEOUT","ERROR_AUTOMATICAL","ERROR_UNRECOVERABLE","ERROR_BADPORT","SYSTEM_ERROR","EPTR_CUTTER","EPTR_MECHANICAL","EPTR_REC_EMPTY","EPTR_SCHEMAERROR","EPTR_PRINT_SYSTEM_ERROR","mode40cpl","FONT_E13B","FONT_CMC7","EMICR_ILLEGAL_LENGTH","EMICR_NO_MICR","EMICR_RECOGNITION","EMICR_READ","EMICR_NOISE_DETECTED","EMICR_COVER_OPENED","EMICR_PAPER_JAM","HybridPrinter2","SlipPrinter2","ValidationPrinter","EndorsePrinter2","MICRReader2","currentPrinter","isMicrMode","ASB_INSERTION_WAIT_PAPER","ASB_REMOVAL_WAIT_PAPER","ASB_EJD_NOPAPER","ASB_VALIDATION_NO_SELECT","ASB_VALIDATION_IMPOSSIBLE_PRINT","ERROR_CANCEL_FAILED","EPTR_AUTOMATICAL","EPTR_COVER_OPEN","EPTR_UNRECOVERABLE","EPTR_PAPER_PULLED_OUT","EMICR_PAPER_PULLED_OUT","DeviceNotFound","EX_TIMEOUT","EX_BADPORT","SchemaError","PrintSystemError","PAPERTYPE_RECEIPT","PAPERTYPE_SLIP","PAPERTYPE_ENDORSE","PAPERTYPE_VALIDATION","paperType","waitTime","enable40cplMode","Scanner","SimpleSerial","GermanyFiscalElement","ongfereceive","Ofsc","SERVICE_ID","CookieIO","TAG","EXPIRES_MINUTES","DeviceObjElement","deviceObject","DeviceObjElementMap","elementList","DEVICE_TYPE_SCANNER","DEVICE_TYPE_KEYBOARD","DEVICE_TYPE_POSKEYBOARD","DEVICE_TYPE_MSR","DEVICE_TYPE_CAT","DEVICE_TYPE_CASH_CHANGER","DEVICE_TYPE_DISPLAY","DEVICE_TYPE_SIMPLE_SERIAL","DEVICE_TYPE_HYBRID_PRINTER","DEVICE_TYPE_HYBRID_PRINTER2","DEVICE_TYPE_DT","DEVICE_TYPE_OTHER_PERIPHERAL","DEVICE_TYPE_GFE","RESULT_OK","ERROR_SYSTEM","ERROR_DEVICE_IN_USE","ERROR_DEVICE_OPEN","ERROR_DEVICE_CLOSE","ERROR_DEVICE_NOT_OPEN","ERROR_PARAMETER","IFPORT_EPOSDEVICE","IFPORT_EPOSDEVICE_S","CONNECT_TIMEOUT","RECONNECT_TIMEOUT","MAX_RECONNECT_RETRY","connectionId","reconnectTimerId","reconnectTryCount","admin","recievedDataId","connectStartTime","waitRetryConnectId","conectionObj","Connection","devObjSelector","devObjElmMap","ofsc","cookieIo","gbox","SocketGarbageBox","cbCheckEposPrintService","onbeforeunload","onpagehide","OK","SSL_CONNECT_OK","socket_p","address_p","protocol_p","port_p","callback_p","usableIF_p","ws_status_p","dev_status_p","IF_EPOSDEVICE","IF_EPOSPRINT","IF_EPOSDISPLAY","IF_ALL","ACCESS_OK","ACCESS_ERROR","ACCESS_TIMEOUT","ACCESS_NONE","CONNECT","DISCONNECT","RECONNECTING","ePosCrypto","pubkey_c","secretKey","ePosDeviceMessage","REQUEST","PUBKEY","ADMININFO","RECONNECT","OPENDEVICE","CLOSEDEVICE","DEVICEDATA","SERVICEDATA","OPENCOMMBOX","CLOSECOMMBOX","COMMDATA","serviceId","data_id","getPrintJobStatus","recover","finalize","stopMonitor","barCodeData","symbolData","printdata","startMonitor","sendStartMonitorCommand","xdr","timeoutid","isPrint","lock","unlock","eject","ret","eventtype","fireOnReceive","tmp","is40cplmode","enable40cplmode","ignoreerror","cleaning","isValidFunction","supportPaperTypes","setMessage","getMessage","selectPaperType","waitInsertion","cancelInsertion","ejectPaper","readMicrData","micrFont","ignoreerrorMicr","micrFontMicr","cleanMicrReader","slipWaitTime","waittime","endorseWaitTime","micrWaitTime","validationWaitTime","client_onbinarydata","onbinarydata","client_setbinarymode","onbinarymode","setBinaryMode","binarymode","operate","jsonString","requestdata","client_operateresult","resultformat","uint8array","Uint8Array","charData","Zlib","Inflate","decompress","getServiceMessage","notify","decrypt","onxmlresult","writeId","encodedTitle","expired","encodedAddress","getExpiredDate","readId","strCookie","searchKey","keyValueFrom","keyValueTo","expire","nTime","setTime","toUTCString","getByObj","removeAll","getElementList","selfofProb","setAddress","registCallback","probeWebServiceIF","accessTime","connectBySocketIo","isConnected","devIsConnect","wsIsConnect","getDisconnectMessage","isBufferEnable","driver","getOpenDeviceMessage","checkEposPrintService","getCloseDeviceMessage","getAdmin","getLocation","sendOfscXml","getCommBoxManager","dispose","setSocket","getSocketIoURL","io","reconnect","connect timeout","force new connection","tselfofProb","startReconnectAction","registIFAccessResult","parseRequestMessage","procConnect","procPubkey","procAdminInfo","procReconnect","procDisconnect","procOpenDevice","procCloseDevice","procDeviceData","procServiceData","procOpenCommBox","procCloseCommBox","procCommBoxData","procError","prevConnectionId","protocol_version","getPubkeyMessage","prime","getReconnectMessage","client_id","mismatchErrTime","mismatchTimeout","getAdminInfoMessage","admin_name","onreconnect","devObjElm","onreconnecting","postUrl","printUrl","postData","removeAllListeners","probe","postdata","probeSelf","isPrintReceive","isDisplayReceive","isNotified","toTransmissionForm","genClientKeys","arg_prime_s","arg_pubkey_s","str2bigInt","prime_c","privkey_c","randBigInt","intPubkey","powMod","strSecretKey","bigInt2str","md5","bin","bfEncrypt","enc_req","iv","blowfish","mkIV","enc_data","encrypt","cdata","encode","bfDecrypt","dec_req","decode","ddata","cipher","getNextSequence","MAX_VALUE","testData","pubkey","prevId","curId","dataId","old_client_id","new_client_id","received_id","deviceTypeName","isCrypt","decryptoData","ePOSDeviceConfiguration","DEVICE_GROUP_ALL","DEVICE_GROUP_PRINTER","DEVICE_GROUP_DISPLAY","DEVICE_GROUP_HID","DEVICE_GROUP_SERIAL","DEVICE_GROUP_OTHER","DEVICE_TYPE_CASH_DRAWER","DEVICE_TYPE_PIN_PAD","DEVICE_TYPE_SMARTCARD_RW","CGI_PATH","UNKNOWN","ONLINE","OFFLINE","INTERVAL","TIMEOUT","WEBSOCKET_PORT","SSLWEBSOCKET_PORT","getRegisterdDevices","jsonObj","checkDevice","resultList","timer","valueOf","getUTCFullYear","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","cx","escapable","gap","indent","\b","\t","\n","\f","\r","\"","\\","rep","quote","lastIndex","holder","mind","replacer","space","","reviver","walk","SyntaxError","transports","sockets","uuri","uri","util","parseUri","uniqueUri","Socket","of","re","pageLoaded","exec","addition","chunkQuery","components","qs","kv","load","capture","attachEvent","xdomain","ua","hasCORS","ActiveXObject","webkit","additional","deep","lastseen","prop","seen","ctor","ctor2","inherit","intersect","arr","longest","shortest","enu","EventEmitter","$events","removeListener","listener","listeners","handler","nativeJSON","parser","packets","advice","regexp","encodePacket","packet","ack","adv","ackId","encoded","encodePayload","decoded","decodePacket","pieces","decodePayload","Transport","sessid","onData","clearCloseTimeout","connected","reconnecting","setCloseTimeout","msgs","onPacket","onHeartbeat","onConnect","closeTimeout","onDisconnect","clearTimeouts","reopenTimeout","heartbeat","onOpen","onClose","prepareUrl","scheme","try multiple transports","reconnection delay","reconnection limit","Infinity","reopen delay","max reconnection attempts","sync disconnect on unload","auto connect","flash policy port","namespaces","doBuffer","isXDomain","disconnectSync","empty","SocketNamespace","publish","nsp","handshake","complete","onError","insertAt","script","loadTimeout","srcIndex","lastIndexOf","parentNode","insertBefore","getTransport","override","transport","check","xdomainCheck","sessionid","sid","heartbeatTimeout","connectTimeoutTimer","remainingTransports","remaining","setBuffer","wasConnected","flags","Flag","ackPackets","acks","namespace","lastArg","WS","MozWebSocket","Flashsocket","flashsocket","__addTask","__tasks","WEB_SOCKET_SWF_LOCATION","loadFlashPolicyFile","__initialize","WEB_SOCKET_DISABLE_AUTO_INITIALIZATION","protocols","proxyHost","proxyPort","__id","__nextId","__instances","CONNECTING","bufferedAmount","__events","__flash","useCapture","removeEventListener","events","__handleEvent","flashEvent","jsEvent","__createSimpleEvent","__createMessageEvent","createEvent","Event","initEvent","bubbles","cancelable","MessageEvent","opera","initMessageEvent","OPEN","loadManualPolicyFile","__swfLocation","__isFlashLite","__onFlashInitialized","setCallerUrl","setDebug","WEB_SOCKET_DEBUG","__onFlashEvent","receiveEvents","webSocketId","__log","__error","task","mimeType","mimeTypes","enabledPlugin","XHR","sendBuffer","sendXHR","posting","req","contentType","HTMLFile","htmlfile","doc","iframeC","parentWindow","destroy","CollectGarbage","XHRPolling","indicator","documentElement","JSONPPolling","initIframe","iframeId","bpe","mask","radix","digitsStr","adapterMathRandom","rand","msCrypto","getRandomValues","Uint32Array","findPrimes","ans","millerRabinInt","mr_x1","dup","mr_r","mr_a","copyInt_","millerRabin","copy_","addInt_","rightShift_","powMod_","equalsInt","equals","squareMod_","bitSize","expand","int2bigInt","randTruePrime","randTruePrime_","randProbPrime","randProbPrimeRounds","divisible","primes","rpprb","randBigInt_","modInt","greater","mod","mod_","addInt","mult","mult_","sub","sub_","add_","inverseMod","inverseMod_","multMod","multMod_","B","zz","recSize","pows","recLimit","s_i2","s_R","s_n1","s_r2","s_d","s_x1","s_x2","s_b","s_n","s_i","s_rm","s_q","s_a","s_aa","carry_","divide_","multInt_","isZero","GCD_","GCD","xc","xp","yp","A","C","D","sing","qp","linComb_","eg_u","eg_v","eg_A","eg_B","eg_C","eg_D","halve_","inverseModInt","inverseModInt_","eGCD_","leftShift_","greaterShift","kx","ky","subShift_","linCombShift_","addShift_","bits","minSize","buff","kk","s6","divInt_","ys","ss","s4","s5","s0","k1","k2","kn","np","s7","s3","mont_","one","ui","ks","sa","s1","s2","md_q1","md_q2","md_q3","md_r","md_r1","md_r2","md_tt","P","S1","S2","S3","S4","i2s","s2i","xor","encipher","decipher","subkey","block","pchar","utf16","a0","b0","c0","d0","aa","execScript","Uint16Array","DataView","POSITIVE_INFINITY","bufferSize","bufferType","G","set","subarray","ba","U","V","F","E","I","J","L","da","ea","fa","Q","ga","verify","ha","Y","Z","ia","X","ADAPTIVE","BLOCK","PendingInvoicesDialogController","invoice_date","due_date","orderProductsStockDetailsController","OrderProductDTO","uiGridGroupingService","uiGridTreeViewConstants","ORDER_LOG_CHANGE_TYPES","StockDetailDTO","getProductRowClass","treeLevel","stockDetailDTO","contextDataByProductDict","received_amount_by_product","order_delivery_product_variant_id","transfer_order_delivery_product_variant_id","callAddStockDetailToOrder","newUidEmptyRow","stockDetailInstance","stockDetailDto","purchase_order_delivery_id","showProductAutocompleteInput","deleteStockDetailFromOrder","rowIndex","log_type","addNewUidEmptyRow","updateUidStock","fieldName","product_variant_code","autocompleteCallback","uidFieldsEditable","showUIDsDialogAndAdd","productContextData","stock_detail_id","isStockDetailEditable","treeRowHeaderAlwaysVisible","groupHeader","rowRenderIndex","colRenderIndex","ordered","orderProductsLogController","OrderLogChange","PRODUCT_NOT_FOUND_REASONS","getGridLogsPage","getFirstRowClass","before","pos_order_detail","stock_amount","has_ia_movements","not_linked_amount_in_purchase","addLogChangeEvent","log_change","orderLogs","orderProductsListController","reverseOrder","reloadTableEvent","editPrices","orderProductController","OrderProductVariantDTO","DTO_ORDER_DELIVERY_TYPES","isLot","getTotalProductAmountByColor","editableInputAmount","getEnabledProductVariantByColorAndSize","getDisabledBackground","isDeliveryType","dtoOrderDeliveryTypes","updateOrderProductVariantAndTotals","updateOrderProductVariant","sendReloadTotalsEvent","manageErrors","dictResponse","total_order_price","total_order_amount","total_order_volume","mapPriceHeight","order_log_type","orderProductVariants","createOrUpdateOrderProductVariantPrice","autocompleteProduct","openStockDialog","selectedProductId","getTotalProductPriceByColor","getInputTextColor","getLeftBackgroundColor","danger_left_amount","safe_left_amount","getRightBackgroundColor","safe_right_amount","danger_right_amount","getSku","skus","getPriceHeightClass","numberVisualizeOptionsSelected","priceOption","manageStockDetail","left_amount","getOrderProductVariantByVariantIds","editablePriceAmount","getAmountBackgroundColor","danger_amount","showAmountInput","manageUIDs","getLeftAmount","getRightAmount","right_amount","excl_tax","showOrderProductPriceActions","showUidLotOutOfStockAlert","showOutOfStockDialog","updateOrderProductAndTotals","showDialogNoPricingTier","pricin_tier","pricing_tier_name","filterColorByStatusAndAmount","isDisabledDeleteProductOption","shouldShowTaxes","ndSearchProductInOrderController","ndOrderProductVisualizationOptionsController","localStorageKey","orderByDict","showProductOptions","openViewOptionsMenu","saveVisualizationOptionsFromLocalStorage","changeProductsOrder","sendTaxEvent","changeProductsFilters","getVisualizationOptionsFromLocalStorage","resetLocalStorage","taxesSelected","ndGetOrderTotalsController","setTotalAmount","setTotalVolume","setTotalPriceExclTax","sendEvent","totalPriceExclTax","setTotalPriceInclTax","totalPriceInclTax","total_available_volume","totalAvailableVolume","showCost","ndAddOrderProductController","showDialogWhenAdding","callAddProductApi","enableStockDetailScan","newProductAddedCallback","ndActionsOrderSelectorController","ndStockLocationsByWarehouseListController","searchFields","openProductVariantSearchDialog","removeProductVariantFromStockLocation","handleStockLocationDialog","goToProductsView","ndStockLocationsByProductsListController","stockLocationId","openStockLocationSearchDialog","wbItemDetail","CLOTH_MATERIALS","clothMaterials","auxMaterial","material","setToolbarBackgroundColor","getFinalPrice","percentage_discount","addOrRemoveMaterial","getFinalMaterials","materials","wbListItemsRow","STATUS_COLORS","showStatusTags","isOpen","wbListItems","orderItems","initializeSelected","outputSelectedOrderItems","ORDERBY_NAME","ORDERBY_ACTION","ORDERBY_PAID","filterIds","findString","auxArray","sortAndToggleIf","wbNewOrderInvoice","showSubtotal","outputTotal","hideTitle","final_price","getSubTotal","getTotalTax","ndDashboardItemsCardController","dashboardItems","getDashboardItemTitle","dashboardItem","getDashboardItemBody","dashboardItemClicked","DASHBOARD_ITEM_TYPE_VIDEO_DEMO","DASHBOARD_ITEM_TYPE_COURSE","DASHBOARD_ITEM_TYPE_WEBINAR","support","wbCustomerDetail","wbConstGenders","$resource","hideComments","hideGender","hideSaveButton","hideDeleteButton","isNewCustomer","constGenders","creation_date","showComments","showGender","saveCustomer","deleteCustomer","MsWidgetController","flipped","flip","flippable","compile","tElement","iElement","iAttrs","MsWidgetCtrl","transcludeFn","flipWidget","MsStepperController","gotoFirstStep","setCurrentStep","isStepOptional","stepNumber","isStepNumberValid","steps","optionalStep","isStepHidden","hideStep","isStepValid","mainForm","currentStep","currentStepNumber","setOrientation","registerMainForm","registerStep","stepTitle","stepTitleTranslate","setupSteps","resetForm","$setUntouched","gotoStep","gotoPreviousStep","gotoNextStep","gotoLastStep","isFirstStep","isLastStep","isStepCurrent","isStepDisabled","filterHiddenStep","isFormValid","msVerticalStepperDirective","bindToController","ctrls","FormCtrl","MsStepperCtrl","stepInfo","MsStepper","msTimelineItemDirective","MsTimelineCtrl","threshold","itemLoaded","itemInViewport","scrollEl","getScrollEl","testForImage","testForVisibility","itemReadyWatcher","imgEl","setScrollEl","msTimeline","loadMoreEl","unregisterOnScroll","registerOnScroll","msSplashScreenDirective","$animate","splashScreenRemoveEvent","leave","MsShortcutsController","queryOptions","debounce","resultsLoading","selectedResultIndex","ignoreMouseEvents","mobileBarActive","shortcuts","sortableOptions","ghostClass","forceFallback","fallbackClass","onSort","saveShortcuts","populateResults","flatNavigation","getFlatNavigation","uisref","hasShortcut","loadShortcuts","fromJson","addShortcut","removeShortcut","handleResultClick","absorbEvent","handleKeydown","ensureSelectedResultIsVisible","handleMouseenter","temporarilyIgnoreMouseEvents","mouseEventIgnoreTimeout","resultsEl","selectedItemEl","outerHeight","toggleMobileBar","MdSidenavCtrl","isLockedOpen","MsSearchBarController","isNull","onExpand","onCollapse","onResultClick","isPromise","onSearchEvaluated","$eval","onSearch","msSearchBarDirective","inputEl","msScrollDirective","msScrollConfig","fuseConfig","getConfig","isMobile","updateScrollbar","PerfectScrollbar","msScroll","defaultConfiguration","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","useKeyboard","suppressScrollX","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","stopPropagationOnClick","$get","msRandomClass","randomClass","MsNavigationController","root","toggleHorizontalMobileMenu","msNavigationDirective","folded","foldExpanderEl","foldCollapserEl","sidenav","setFolded","setFoldExpander","activeItem","getActiveItem","onFoldExpanderHover","setFoldedOpen","onFoldCollapserHover","setNavigationScope","MsNavigationNodeController","hasChildren","collapsable","animateHeightClass","toggleCollapsed","collapseEl","offsetHeight","$evalAsync","animate","expandEl","_path","getClass","isHidden","stateParams","setActiveItem","activePathParts","givenPathParts","msNavigationHorizontalDirective","MsNavigationHorizontalNodeController","msNavigationHorizontalItemDirective","MsNavigationHorizontalNodeCtrl","injector","isString","createParent","updateItem","_getUiSref","isNumber","deleteItem","sortByWeight","_byWeight","navigationScope","foldedOpen","clearNavigation","_flattenNavigation","flatNav","navToPush","getFoldedOpen","MsNavigationNodeCtrl","msNavIsFoldedDirective","msNavFoldService","isFolded","msNavIsFolded","isFoldedOpen","openOverlay","closeOverlay","sidenavEl","fold","openFolded","closeFolded","unfold","setFoldable","toggleFold","isNavFoldedOpen","msNavDirective","$mdComponentRegistry","stateChangeSuccessEvent","when","msNavToggleDirective","tAttrs","MsNavCtrl","expanded","expandAnimation","collapseAnimation","links","states","regExp","isCollapsed","elementToExpand","elementToCollapse","setToggleItem","disable","clearLockedItems","lockedItems","getLockedItems","locked","lockedItem","currentState","shouldExpand","setLockedItem","foldable","toggleItems","msMasonryController","defaultOpts","columnCount","respectItemOrder","reLayoutDebounce","md","sm","xs","reLayoutTimeout","reLayout","containerPos","getBoundingClientRect","columnWidth","referenceArr","xPos","yPos","refTop","transform","waitImagesLoaded","imagesLoaded","msMasonry","pre","msMaterialColorPickerController","$mdColorPalette","fuseGenerator","activateHueSelection","palette","hues","selectedPalette","selectedHues","removeColor","hue","updateModel","updateSelectedColor","bgColorValue","rgba","palettes","fgColorValue","contrast","msModelType","modelCtrl","$viewValue","$selectedColor","controllers","replaceWith","msInfoBarDirective","removeInfoBar","$destroy","totalSteps","forms","firstStep","lastStep","currentStepInvalid","previousStepInvalid","formsIncomplete","formCtrl","msDatepickerFix","msDatepickerFixConfig","$formatters","$parsers","utcOffset","templatePath","card","cardTemplateLoaded","WorkdayService","WORKDAY_STATUSES","Workday","NOT_STARTED","workday","pause","true","utils","precision","getSeconds","applyOffset","getTimezoneOffset","sanitizeTags","purgeAttributes","clean","padding","subject","getTagName","statement","sanitizeAttributes","purgeComments","binaryString","buf","ArrayBuffer","resourceToBase64","digits","multiplier","isDateToday","isDateYesterday","validateEmail","getCompanyPlanName","Mon","Tue","Wed","Thu","Fri","Sat","Sun","Today","Yesterday","This Week","Last Week","This Month","Last Month","This Year","Last Year","January","February","March","April","May","June","July","August","September","October","November","December","rangeToSave","formatDateToString","rangeStr","parsedRange","offsetMinutes","minutes","seconds","milliseconds","getMilliseconds","downloadFileInterceptor","fileNameMatch","contentDisposition","_UiGridService","i18nService","suppressMultiSort","fastWatch","enableSelectAll","multiSelect","selectionRowHeaderWidth","showGridFooter","saveWidths","saveScroll","saveFocus","saveVisible","saveSort","saveFilter","savePinning","saveGrouping","saveGroupingExpandedStates","saveTreeView","exporterMenuAllData","exporterMenuPdf","exporterMenuExcel","setCurrentLang","adjustAllColumns","columnElements","querySelectorAll","doubleClickEvent","trackerService","ALLOWED_COMPANY_PLANS","mixpanel","registered","registerAccount","allowedRegisterAccount","registerMixpanelAccount","track","trackMixpanelEvent","initMixpanel","debug","identify","$name","getFullName","$email","company_id","people","add_group","userInitialized","initUser","Intercom","api_base","app_id","user_id","date_joined","Is owner","isOwner","Company partner ID","Company partner name","partner_name","Account manager ID","account_manager","toggleChat","hide_default_launcher","openAcademy","stockoutService","in_stockout","$injector","Support","User","TrackerService","Company","DEFAULT_PERMISSIONS","app.pages_sign_up","app.pages_sign_up_two","app.pages_validate_sign_up","app.pages_validate_sign_up_two","app.pages_auth_login-v3","app.pages_shopify","app.support.videos","app.support.changelogs","app.support.performance","app.support.trial_status_details","app.pages_trial_expired","signup.pages_validate_sign_up_two","app.ecommerce.sites.site.routing_rules","app.pages_hub.receipts","app.pages_hub.receipts.receipt","app.pages_hub.invoices","app.pages_hub.proformas","app.pages_hub.quotes","app.ecommerce.scan_and_go","app.sale.display","DEFAULT_FEATURES","app.analytics.start","initializeSessionPermissions","isAuthenticated","checkTermsAndConditionDialog","checkTerms","terms_and_conditions_accepted","checkNetPromoterScore","presentUsernames","localStorageUsersDict","tempUser","sessionStorageUsersDict","_changeUser","remember","dataLayer","setSupportUser","setDataLayer","initializeTracker","userFullName","userCompanyId","userCompanyName","userCompanyPlan","isTrial","subsribeNotifications","serviceWorker","serviceWorkerRegistration","base64String","userVisibleOnly","applicationServerKey","pushManager","subscribe","pushSubscription","updates","loadedFromServer","loadFromServerDeferrer","loadFromStorage","loadFromServer","userCallback","companyCallback","getFeaturesDict","addOns","getAddOnsDict","getContractedAddOnsDict","unsubscribeNotifications","getRegistrations","registrations","unregister","is_trial","getTrialRemainingDays","trial_remaining_days","getSession","addUser","usersLocalStorage","usersSessionStorage","changeUser","invoke","changedSuccessfully","baseDomain","expiration","expires","hasUpdates","setTermsAndConditions","showFreemiumBanner","hasAnyFeature","has_multiple_b2b","default_b2b","isAddOn","getAddOn","ScanQueueService","ts","normalizeSuccess","normalizeError","taskFn","skipped","calculateBandwidth","truncate","maxSize","initializeOptions","uploadData","uploadDataMaxSize","randomBytes","uploadDataSize","bandwidth","httpPromise","testDownloadSpeed","speedPromise","downloadResult","testUploadSpeed","uploadResult","toMbps","DEFAULT_OPTIONS","latencyTestUrl","latencyTest","uploadUrl","dataType","Content-type","testLatency","latency","innerDeferred","avgBandwidthImmersion","samples","bps","elementId","estimatedMilliseconds","statusChangedCallbackOK","statusChangedCallbackKO","changeStatusModule","changeStatusModel","checkingStatusModule","checkingStatusModel","existsProductVariantWithVariant","existsProductVariantWithVariantByVariants","InventoryConfigurationService","INVOICE_TYPES_REVERSE","getEmailTemplate","defaultSubject","defaultMessage","documentText","userName","companyName","featureService","featuresData","defaultFeature","landingLink","imageSrc","getFeatureName","FEATURE_FLAG_CREATE_POS_ORDER_V2","FEATURE_FLAG_PRINTER_POS_ORDER_INVOICE","endpointIfFalse","endpointIfTrue","feature_flags","_DefaultRegisterService","getDefaultRegisterIdFromStorage","setDefaultRegisterIdToStorage","defaultRegisterId","comercia","getUrl","isProduction","device_ip","deffered","returnDto","statusText","resultMessage","transactionId","devolution_transaction_id","barcodeService","ND_BARCODE_PREFIXES","GS1Datamatrix","MIN_LENGTH","BARCODE_MODES","BARCODE","UID","inputDelay","subscriptions","gs1Datamatrix","onKeyDown","sendValue","onKeyPress","cancelTimeout","addValue","setDelayInput","sanitizedValue","getSanitizeValue","isPosOrderBarcode","callCallbacks","isDevolutionCardBarcode","isFulfillmentBarcode","isGS1Datamatrix","callbackId","isPrintableAsciiCharacter","keycode","POS_ORDER_BARCODE_PREFIX","DEVOLUTION_CARD_BARCODE_PREFIX","FULFILLMENT_BARCODE_PREFIX","getLotNumberFromDatamatrix","getLot","getSerialNumberFromDatamatrix","getSerialNumber","getSkuFromDatamatrix","getSKU","getAllParsedData","sendBarcode","getBarcodeEventId","BARCEDE_EVENT_ID","setMode","setBarcodeMode","setUidMode","isBarcodeMode","isUidMode","subscribeCallback","subscriptionId","unsubscribe","subscribeUid","subscribePosOrder","subscribeDevolutionCard","subscribeFulfillment","subscribeGS1Datamatrix","unsubscribeUid","unsubscribePosOrder","unsubscribeDevolutionCard","unsubscribeFulfillment","unsubscribeGS1Datamatrix","toggleMode","modeA","modeB","tempLoginPromise","credentials","logout","isAuthorized","authorizedRoles","resetPasswordRequestPromise","requestResetEmail","passwordResetPromise","passwordResetCompletePromise","errorAudio","play","artifactService","ARTIFACT_STATUSES","artifactId","artifacts","internalCallback","ARTIFACT_STATUS_FINISHED","ARTIFACT_STATUS_ERROR","manageArtifact","openUrl","openError","openAlertDialog","start_time","end_time","work_time","pause_time","activities","start_notes","end_notes","_User","is_staff","is_active","terms_and_conditions_accepted_at","signup_finished","signup_token","has_multiple_companies","companies","__hasRole","isProductEditor","isRetailManager","isRetailVendor","isWholesaleManager","isWholesaleVendor","stock_warehouse_name","_SubtotalByTax","surcharge_amount","surcharge_difference","total_price_excl_tax_sum","getTotalRoundedTax","_Subscription","ContractedPlan","subscription_period","cancelled_at","initializeFromCoupon","featuresDict","addOnsDict","getPlan","planId","isMonthly","product_cover","_SignupTwo","COUNTRIES_PHONE_PREFIX_DICT","data_generated_at","sal_at","customer_at","receive_content_accepted","company_name","sells_products_without_expiration","sells_products_with_expiration","sells_products_with_lots","sells_products_with_uid","sells_services","sector","FASHION_AND_ACCESSORIES","channel_online","total_online_stores","channel_physical_store","total_physical_stores","channel_wholesale","total_commercial_agents","channel_manage_stock","total_warehouses","interests","interests_other","hubspotutk","msclkid","gclid","twclid","fbclid","utm_source","utm_medium","utm_campaign","utm_content","utm_term","phonePrefix","tempPhone","fillName","fullNameArr","fillPhone","fillMetaFields","__getFromCookieOrUrl","fillFormVersion","formVersion","fillEmail","cookieName","SignupStep","academy_url","video_link","company_plan","done","substeps","substep","getIconStyle","setSubstepCompleted","_ShippingBox","COMMON_VOLUMETRIC_WEITHT_DIVISOR","measurementUnit","getVolumetricWeight","_replaceYear","yy","yyyy","_getPrefix","_getSuffix","_getCounter","zeros","_SellMatrixData","_this","pagination_class","previous","_RuleLine","RuleCriteria","RULE_ACTION_TYPES","action_type","action_value","rule_criteria","action_is_valid","isMoreStockType","FORCE_WAREHOSUE","allowedToRemoveRuleCriteria","removeRuleCriteria","allowedToAddRuleCriteria","getAvailableActionTypes","isAddScoring","ADD_SCORING","isForceOrDiscardWarehouse","DISCARD_WAREHOSUE","resetActionValues","_RuleCriteria","setCriteriaValue","isNumberInput","criteria_value","operator","criteria_value_list","hasOperations","getAvailableCriteriaTypes","WAREHOUSE_MORE_STOCK","getOperatorByCriteria","WAREHOUSE_COUNTRY_CODE","ORDER_COUNTRY_CODE","EQUAL_CRITERIA","NOT_EQUAL_CRITERIA","WAREHOUSE_ZIP_CODE","ORDER_ZIP_CODE","START_WITH_CRITERIA","END_WITH_CRITERIA","WAREHOUSE_PENDING_ORDERS","ORDER_PRODUCT_QUANTITY","LESS_THAN_CRITERIA","LESS_THAN_OR_EQUAL_CRITERIA","GREATER_THAN_OR_EQUAL_CRITERIA","GREATER_THAN_CRITERIA","isMultiSelect","isTextInput","isAutocomplete","getMultiselectOptions","getHintText","example","resetCriteriaValues","_RoutingRule","RuleLine","rule_lines","removeRuleLine","_ProductLabelDesign","ProductLabelDesignField","hasZeroPosition","AVAILABLE_FIELDS","color__code","color__name_code","size__code","size__name_code","barcode_number","variant_1_code_variant_2_name","variant_1_name_variant_2_code","custom_text","AVAILABLE_FONT_SIZES","isButterfly","initButterflyMultiWidths","DEFAULT_WIDTH","use_price_excl_tax","one_label_per_page","print_grid","label_width","fieldAtZero","getPageHeight","getPageWidth","removeField","_setPositions","addEmptyField","tempField","isCustomLandscapeOrPortrait","getPricingTier","isLabelCenteredButterfly","layoutChanged","barcode_numbers","barcode_width","barcode_space","butterfly_position","allowMove","_PosOrder","PosOrderRefund","DevolutionCard","PosOrderPaymentMethod","is_v2","deleted_at","is_negative","is_restored","restored_of","total_devolution_cards","total_without_discount","related_name","total_pending_to_refund","kubibai_cancelled_invoice_data","epos_italy_ticket_data","pos_order_payment_methods_dict","pos_order_product_variants_dict","fillPosOrderProductVariants","pos_order_refunds","fillPosOrderRefunds","refundsDictByPosOrderFulfillmentProductVariantId","por","pos_order_refund_fulfillment_product_variants_instances","fulfillmentProductVariantId","pos_order_fulfillment_product_variant","refundTotal","has_bundles","findProductVariantIndex","recentlyAdded","allowRefundAndReturn","isPrestashopOrder","isShopifyOrder","allowReturn","allowReceiveReturn","isAmazonOrder","isZalandoOrder","allowRefund","posOrderShippingMethod","getTotalTaxes","getPendingAmount","getTotalPendingToRefund","total_pending","payment_method_available_left","posOrderRefund","available_left","amount_to_refund","recalculate","updateTaxesDict","isEcommerceOrder","isAllowedToAddProducts","canEditPosOrderProductVariant","canEditContact","has_permission","canEditPosOrderPaymentMethods","canEditPosOrderShippingMethods","canUpdateFulfillments","isEciOrder","canAllocateItems","canPickUpItems","canReturnItems","canReceiveReturnItems","canBackToShippedFulfillment","canBackToPickedUpFulfillment","canBackToPendingFulfillment","canBackToReturnedFulfillment","canCancelFulfillment","canEditGiftCardCode","getPaymentStatusColor","getPaymentStatusText","isPopvFulfilled","popv_id","pof_id","pofpv_id","deletePosOrderAndCreateNegativePaymentMethods","deletePosOrderFunc","deletePosOrderAndCreateNegativePaymentMethodsFromRegisterInstance","hasPaymentMethodOnClosedRegisterActivity","register_activity_instance","hasVerifactuInvoices","deletePosOrderPre","_PosOrderShippingMethod","ShippingMethod","COMERCIAL_INVOICE_TYPES_OF_EXPORT","COMERCIAL_INVOICE_TERMS_OF_TRADE","shipping_method_instance","commercial_invoice","tracking_code","carrier","total_net_weight","total_declared_value","total_gross_weight","freight_and_insurance_charges","total_shipment_pieces","other_charges","total_invoice_amount","type_of_export","terms_of_trade","TERM_OF_TRADE_DDU","reason_for_export","TYPE_OF_EXPORT_PERMANENT","general_notes","_PosOrderRefund","PosOrderRefundFulfillmentProductVariant","pos_order_refund_fulfillment_product_variants","_PosOrderProductVariant","composition_name","composition_code","brand_code","season_code","source_stock","target_stock","gift_card","uid_stock_best_before_date","uid_stock_expiration_date","uid_stocks","is_batches_manager","bundle_content","pos_order_bundle_content","getPopvCover","unitPrice","getTaxQuantity","getTotalReturned","recalculateDiscounts","showStrikePrice","getOriginalTotal","avoidReturns","setCustomPriceInclTax","showDiscountInput","showDiscountText","_PosOrderFulfillment","PosOrderFulfillmentProductVariant","PackingOrderSendcloudData","AVAILABLE_PLATFORMS_FOR_RETURN_MANAGEMENT_POLICY","pos_order_fulfillment_product_variants","is_fulfillment_blocked","packing_order_sendcloud_data","pos_order_fulfillment_shipping_boxes","pos_order_fulfillment_shipping_box_instances","updatingAmounts","updatingAction","refundAmount","refundPaymentMethod","refundPaymentMethodError","refundAmountError","popvDict","posOrderRefunds","refundsDict","porfpv","setRefunds","isAllocated","allowWarehouseChange","allowCancel","allowAllocate","allowPickUp","getTotalItems","getTotalRefundedItems","allowBackToShipped","allowBackToPickedUp","allowBackToPending","allowBackToReturned","allowDeleteFromSendcloud","allowSendToSendcloud","refunds","getTotalRefundUploadAmounts","refundUploadAmount","getUpdatingAmountsDict","getUpdatingWeightDict","getUpdatingShippingBoxDict","pos_order_fulfillment_shipping_box","getUpdatingTotalRefundDict","total_refund","resetUpdatingAmounts","isUpdatingActionRefund","isUpdatingActionCancel","isChangingWarehouseAction","allowChangeWarehouse","isInPickingButNoPackingProcess","canEditShippingBoxes","canEditShippingMethods","canLabelWithSendcloud","addPosOrderFulfillmentShippingBox","removePosOrderFulfillmentShippingBox","pofsbId","idIndex","updatePosOrderFulfillmentShippingBox","isntance","setUpdateAction","isUpdateActionShip","setUpdateActionPickUp","isUpdateActionPickUp","getRealWeight","acc","isPackingCompleted","showTextAmounts","someDevolution","showInputAmounts","showRefundInputAmounts","hasManualReturnPolicy","return_management_policy","RETURN_MANAGEMENT_POLICY_MANUAL","canAssignBatches","_PosOrderFulfillmentShippingBox","shipping_box_instance","getShippingBoxName","_PosOrderFulfillmentProductVariant","custom_attributes","uids","assigned_uid_stocks","can_edit_uid_stocks","maxReturnableAmount","returnable_amount","maxRefundUploadAmount","updateTotal","getRefundString","setRefundUploadAmount","isValidUploadAmount","getProductInstanceFullName","fullName","getPosOrderProductVariantInstanceLots","getTotalConsumedAmount","batch","consumed_amount","getRemainingAmount","_Plan","PlanFeature","PlanLimit","Hub","CURRENCY","base_monthly_price","base_yearly_price","plan_limits","getPermissionDict","subscriptionPeriod","getPriceMonthly","getAddOns","getIncludedLimits","featureCode","_PlanLimit","filter_per_month_field","pack_amount","pack_monthly_price","pack_yearly_price","extra_price","_PlanFeature","Feature","devolution_card","devolution_card_instance","input_amount","_OrderProduct","OrderProductVariant","Variant","purchase_order_product_provider_price","let","sale_order_product","_OrderProductVariantDTO","total_row_amount","total_product_amount_by_color","total_row_price","total_product_price_by_color","_OrderProductDTO","_getEnabledProductVariantByColorAndSize","enabled_variants_by_color","_updateOrderProductVariant","order_product_variants_by_variant_ids","_updateTotals","totals_by_color_ids","_getTotals","_getContext","_getOrderProductVariantByVariantIds","_getPrice","order_product_totals_by_color","color_variant","size_variant","total_price","has_pricing_tier","stock_detail_identifier","site_platform","_OrderDelivery","OrderDeliveryProductVariant","OrderProduct","SubtotalByTax","purchase_order_autocode","invoice_pdf_file","subtotalByTaxId","subtotalByTax","totalTaxesPercentValue","priceInclTax","excludeTaxes","setTaxInstance","net_promoter_score","_Invoice","InvoiceLine","Payment","INVOICE_MODELS","invoice_model","corrected_by","replaced_by","replacement_of","discount_as_absolut","company_address_1","company_address_2","company_city","company_country","company_email","company_legal_name","company_phone","company_state","company_vat","company_zip","customer_email","customer_first_name","customer_last_name","customer_phone","customer_vat","billing_address_1","billing_address_2","billing_city","billing_country","billing_state","billing_zip","PAYMENT_STATUS_PENDING","is_retail","total_tax","send_to_kubibai","getDiscount","totalToApply","getEarlyPaymentDiscount","getDiscountPercentage","PURCHASE_INVOICE","isDefaultInvoice","canBeCorrected","getEarlyPaymentDiscountPercentage","newLines","applyDiscount","updateSubtotalsByTax","surchargeAmount","invoiceLineTax","subtotalsByTax","subtotal_by_tax","roundSubtotalTaxesSurchargeAmount","updateSubtotalsByTaxWithDiscount","updateDiscount","getFinalTotalInclTax","finalTotalInclTax","isCorrective","getFileName","_InvoiceLine","remaining_amount_to_correct_from_original","related_orders","related_object_type","related_object_id","related_object_autocode","initQuantity","avoidRound","GS1ApplicationIdentifiers","parsedData","parseValue","gs1DatamatrixRegex","pairs","regexParts","pair","getLotOrSeries","planFeatureId","permissionDict","_DynamicReport","chartType","chartGranularity","_DynamicReportFilter","DYNAMIC_REPORT_OPERATIONS","DYNAMIC_REPORT_FILTERS","asISODate","past","FILTER_TYPE_DATE","FILTER_OPERATION_EQUAL","getAvailableOperations","FILTER_TYPE_FK","FILTER_OPERATION_NOT_EQUAL","FILTER_OPERATION_GREATER_THAN","FILTER_OPERATION_LESS_THAN","FILTER_OPERATION_GREATER_THAN_OR_EQUAL","FILTER_OPERATION_LESS_THAN_OR_EQUAL","formatName","formatValue","vv","out","applies_until","percent_off","amount_off","_ContractedPlan","Plan","contracted_at","contractedAddOnsDict","_ContractedPlanLimit","model_name","contracted_packs","plan_id","plan_limit_id","showIncreaseSubscription","getAlertTitleMessage","getAlertBodyMessage","ALLOW_CREATION","getExtraAmount","withDiscount","_ContractedAddOn","plan_feature_id","_Company","FiscalProfileFactory","InstalledIntegrationAppFactory","hide_upgrade_features_in_menu","installedIntegrationAppClass","getInstalledApp","getInstalledAppByFiscalAddress","fiscalAddressId","released_at","new_features","improved_features","fixed_features","removed_features","week_day","gross_profit_margin_per_transaction","net_returns","units_returned_cost","average_unit_cost","units_sold_with_cost","_B2BEcommerce","menu_type","MENU_TYPE_CATEGORIES","selected_categories","selected_collections","selected_seasons","show_menu_option_all","show_menu_option_new_in","login_required","twitter_link","facebook_link","instagram_link","youtube_link","filter_by_category","filter_by_subcategory","filter_by_season","filter_by_collection","filter_by_color","filter_by_size","filter_by_weight","filter_by_brand","filter_by_price","filter_by_attributes","filter_by_stock","allocate_orders","show_stock","show_attributes","show_retail_prices","show_products_without_stock","crop_product_images","infinite_scroll","quick_add_products","show_color_images_in_product_list","display_lead_times_out_of_stock","display_lead_times_on_backorder","getFullUrl","_AttributeCategory","isMultipleAttribute","isHtmlText","_AttributeCategoryValue","ndWorkingActivityListController","workdayService","getHash","foregrounds","getCapitals","getBackgroundColor","getForegroundColor","defaultDate","secondaryText","isAi","infoTooltip","ndUserAutocompleteController","excludeMe","userChanged","getPlaceholder","UpgradeSubscriptionPlanBannerController","buttonBelow","clickCallback","ndTrialStatusController","TRIAL_CONTACT","trialDays","trial_period_days","trialRemainingDays","emailHref","MAILTO","trialPercentage","ndTrackType","trackId","typed","ndTrackClick","ndStartBannerController","getStyle","image_background","background-image","getTitle","getBody","getButton","ndSignupWizardController","getFromCookieOrUrl","changeLanguage","sectors","availableSortedSectors","instant","countrySearch","sectorSearch","isUserDataValidated","isCompanyDataValidated","emailSent","emailError","finalUserContract","FOOT_WEAR","LUXURY_GOODS_AND_JEWELRY","CHILDCARE","LINGERIE","LUGGAGE_AND_TRAVEL_ACCESSORIES","SPORTS","TOYS","COSMETICS","PERSONAL_CARE","HEALTH_WELLNESS_AND_FITNESS","PHARMACY_AND_HERBALISTS","HOME","FURNITURE","LIGHTING","KITCHENWARE","GARDENING","GLASS_CERAMICS_AND_CONCRETE","FLOWERS","MUSIC","PHOTOGRAPHY","OFFICE_SUPPLIES_AND_STATIONERY","LIBRARIES","ARTS_AND_CRAFTS","PETS","CONSUMER_ELECTRONICS","COMPUTER_GAMES","COMPUTER_HARDWARE","MEDICAL_DEVICES","MACHINERY","HARDWARE","SUPERMARKETS","FOOD_AND_BEVERAGES","WINE_AND_SPIRITS","UTILITIES","OTHER","firstName","lastName","billing","validateCurrentStep","ERROR_01001_USER_MAIL_ALREADY_EXISTS","wizardStep2","$setTouched","ERROR_01002_USER_PHONE_ALREADY_EXISTS","number_of_warehouses","annual_income","removeFormErrors","wizardStep4","ndSignupCreationFormController","sendValidationEmail","querytoken","showEmailSent","SHOW_EMAIL_SENT_STEP","getStepOrder","ONLY_EMAIL_STEP","ADDITIONAL_INFO_STEP","TRIAL_DAYS","TERMS_URL","PRIVACY_URL","creationForm","minimalSignupDone","submitCreationForm","setValidityFalse","formField","submitMinimalSignup","currentStepIndex","openGmail","openOutlook","ndSignupCompleteFormController","SIGNUP_INTERESTED_IN","STEP_2","STEP_3","STEP_4","TOTAL_STEPS","tempAuth","completeForm","completeForm2","completeForm3","completeForm4","generationProgress","generationMessageIndex","generationMessages","generationMessage","interestsIn","INVENTORY_MANAGEMENT","REAL_TIME_SYNCHRONIZATION_WITH_ECOMMERCE_AND_MARKETPLACES","MANAGEMENT_OF_STORES_AND_POINTS_OF_SALE","WORK_IN_THE_CLOUD_AND_FROM_MULTIPLE_DEVICES","WHOLESALE_AND_B2B_STORE_MANAGEMENT","BILLING","ANALYTICS_AND_DASHBOARDS","CUSTOMER_LOYALTY","interestsInDict","getErrorTitle","getErrorClass","generateData","nextButtonDisabled","phoneValidationCode","getCompleteForm3Valid","fullValidation","bookDemo","startGenerationBarAndMessages","generationStartTime","generationBarInterval","elapsedTime","sendValidationSMS","interestIn","channelSelected","productTypeSelected","finalRedirect","completing","generating_data","newStep","updateStep","updateProgress","submitSuccessCallback","phone_verification_code","SendEmailDialogController","emails","cc","bcc","document_id","hasValidEmail","downloadDocument","ReplenishByWarehouseController","discontinuedStockValuePercentage","npsHidden","netPromoterScore","npss","companyId","DEMO","environment","companyStatus","openNpsMenu","fetchingNpss","netPromoterScores","openNotes","nps","ndPrinterController","Register","GiftCard","storedPrinterType","ENCODING","printerType","bufferPendingPrintings","registerPrinterName","registerPrinterIp","qzConfiguration","alreadyLaunched","qzVersion","qzLibVersion","defaultStartConfig","STATES_ICONS","QZ","SYSTEM","EPSON_IP","changeRegisterPrinter","togglePrinterTypeQZ","togglePrinterType","enableChanged","toggleSystemPrinterEnabled","toggleEpsonPrinterEnabled","getWindowsDownloadUrl","getMacDownloadUrl","getLinuxDownloadUrl","isPrinterTypeQZ","isPrinterTypeSystem","isPrinterTypeEpsonIp","getDefaultPrinterIp","openEpsonPrinterDialog","setPrinterTypeToStorage","startPrinterConnection","connectPrinterTypeQz","setState","handleConnectionError","getListPrinters","findVersion","asyncConnection","printSendcloudLabel","displayError","connectQzPrinter","printer_name","openDefaultPrinterDialog","resetPrinterType","printQZRaw","PAGE_SIZE_ROLL","setPrinterType","fail","printHtmlTicket","balanceDiscountAsPercentage","chargedGiftCardVoucher","PRINTER_TYPE_HTML","ticketHtml","contentDocument","htmlTicket","isDevolutionCard","balance_discount_as_percentage","withNoDiscount","consumedGiftCards","oldDevolutionCard","_printGiftCard","warmUpConnection","htmlRegisterActivitySummary","innerContents","popupWinindow","stateTimeout","handleEmitStateEvent","primerType","printSendcloudTagEvent","printPosOrderEvent","warmUpConnectionEvent","printDevolutionCardEvent","printGiftCardEvent","openCashDrawerEvent","printRegisterActivitySummaryEvent","printRegisterActivitySoldProductsSummaryEvent","printerStateChangedEvent","ndPosOrderShippingMethodsCardController","PosOrderShippingMethod","recalculatePosOrderShippingMethodExclTax","updateShipping","addShipping","posOrderShippingMethods","deleteShipping","posm","selectShipping","viewCommercialInvoice","selectedShippingMethod","updateAndPrintCommercialInvoice","posOrdersCommercialInvoice","printShippingLabel","posOrdersPrintShippingLabel","shippingMethodChanged","updatePosOrderShippingMethodTax","initTax","ndPosOrderRepositionOfCardController","unbindReplenishmentPolicyExecuted","fetchAll","fetchingTransfers","postInit","fetchingPurchases","showCard","ndPosOrderProductVariantsTableController","pos_order_product_variants_copy","showSave","canEditPosOrderProductVariantDiscount","getMinimumAmount","hideStockDialog","finishDiscountEdition","canEditPopvLine","ndPosOrderPaymentMethodsCardController","$$hashKey","assignPending","totalPending","showNoPaymentMethods","callUpdateOrder","regidterActivityId","paymentMethodEditingDisabled","ndPosOrderFulfillmentCardController","packWithSendcloud","refundProductsError","checkMinMaxAmount","amountUpdated","changeFulfillment","amount_dict","total_refund_dict","refund_payment_method","scanAndGo","weight_dict","shipping_box_dict","jsonResponse","ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN","spofd","highlightProducts","autoAssignShippingBox","shippingBoxesDictByBarcode","shippingBoxesDictById","previousWarehouseId","fulfillmentAvailableWarehouses","allowToggleWarehouse","sendcloudUrl","weightUnit","sendcloudShippingMethodsLoaded","sendcloudShippingMethodsLoading","allocateFulfillment","shipFulfillment","shipSendcloudFulfillment","pickUpFulfillment","returnFulfillment","receiveReturnFulfillment","showFulfillmentActions","cancelFulfillment","refundFulfillment","refundAndReturnFulfillment","assignBatches","pendingFulfillment","updateFulfillment","refundUploadAmountChanged","changeWarehouse","isExternalShipment","generating_pdf","canAddShippingBox","canReadShippingBoxes","lineWeightDisabled","showLineWeight","updateShippingBox","posOrderFulfillmentShippingBox","posOrderFulfillmentShippingBoxes","getPosOrderFulfillmentProductVariantRowClasses","md-orange-50-bg","pofpv-already-refunded","filled","getWeightUnit","alreadyScanned","pofpvNotFound","showBoxInLines","showBoxAndWeightInLines","parseString","realWeight","showSendToSendcloud","labelToSendcloud","storePrintLabelsAutomatically","external_parcels_id","isReturnedInStore","dtInstanceViewPOPV","initCustomSourceWarehouse","shippingMethodsWatch","selectedSendcloudShippingMethodId","FulFillmentStockDialogController","ndPosOrderContactCardController","contactId","shippingAddressId","billingAddressId","hideBillingAddress","addingContact","fetchingContact","shippingAddress","fetchingShippingAddress","billingAddress","fetchingBillingAddress","changeContact","contactSelected","showCustomerPopup","openingCustomerDialog","changeShippingAddress","changeBillingAddress","showNewAddressDialog","attachField","toggleFetchingContact","PlanCardController","isCurrentPlan","hasAddOns","contractedAddOnsDuct","featureIconsDict","RETAIL_WHOLESALE_SALES","ONLINE_SALES","BUSINESS","ANALYTICS","SUPPORT","basePrice","showAddOnInfo","showUpdateCurrentPlan","selectedAddOnsDict","hideDialog","changePlan","updatePlan","addOnIds","getFilteredFeatures","getSiteIcon","bannerText","clickable","openInvoicesDialog","pendingInvoices","orderProductsController","manageResponse","autoNavigateToHistoryScan","autoNavigateToHistoryScanChanged","showStockDetailsFeatures","barcodeListenerCallbackUIDS","_fn","httpErr","goToDetailsEvent","onLine","$digest","ndNotificationsController","NOTIFICATION_TYPES","NOTIFICATION_PRIORITIES","URLS","registerNotifications","notificationsList","showSONotification","newest","notificationById","orderNotifications","formatNotifications","lastRelativeDate","notification","typeString","relativeDate","shownTitle","shownBody","placeholderIcon","aDate","bDate","setPendingNotifications","unreadNotifications","notificationTabs","lastIdx","pullNotifications","hasNotificationsToRead","archiveNotification","notificationCopy","newNotifications","archivedNotifications","onNotificationRendered","renderedStack","deleteAllNotifications","notificationsByDate","setAllNotificationsAsRead","scannForReadNotifications","scrollViewTop","scrollViewHeight","notificationId","scrollBound","elemViewTop","elemViewHeight","readAt","getNotificationClass","riseNotification","Notification","LOGO_SMALL","badge","onclick","requestPermission","showArchiveButton","goToLink","registration","menuOpenWatch","menuCloseWatch","read_at","readNotificationsIndex","ndNoFloat","constant","PRODUCT_PENDING_ORDERS","activationDate","daysActive","PRICE_DECIMALS","CUSTOM_INVOICE_SERIAL_NUMBER_TYPE","DELIVERY_FCP","academyUrl","INVOICE_FCP","PURCHASE_FCP","MAIN_PURCHASE_FCP","PURCHASE_PRICES","LABELS_GENERATOR","LABELS_GENERATOR_PRODUCT","NEW_PRODUCTS_TABLE","EDITABLE_POPV_PRODUCT_NAME","HEALTH_CHECK","INVENTORY_ANALYTICS_IMPROVEMENT","NEW_DETAILS_PRODUCT","NEW_PRODUCT_STOCKS_SCREEN","NEW_STOCKS_SCREEN","NEW_GIFT_CARD_SCREEN","CHANGES_ON_REGISTER_CLOSURE","DYNAMIC_ATTRIBUTES","PURCHASES_DTO","NEW_ORDERS_SCREEN","PRODUCT_BUNDLES","NEW_PICKING_SCREEN","MIN_STOCK_THRESHOLD","PICKING_WITH_LOTS","INVENTORY_LOYALTY_BY_CATEGORIES","SALES_DYNAMIC_REPORTS","SALES_DTO","NEW_PRODUCT_LOCATIONS","NEW_STOCK_LOCATIONS","removeMargin","visibleBadge","showIcon","NEW_FEATURE_BADGE_CONFIGURATIONS","dismiss","ndWarehouseIconController","ndWizardCardController","callSignupStep","callSignup","toggleStep","signupSteps","signupStepsById","currentlyActive","parent_step","signupStep","$$state","steps_done","ndWarehouseBadgeController","ndVerifactuIntegrationInstalledAppFormController","updatedData","integrationInstalledApp","hasContractAttached","hasIdentityCardAttached","ERROR_10003_VERIFACTU_ALREADY_EXISTS","verifactuIntegrationInstalledAppForm","allowedToSave","fileParameterName","ngFlowIdentityCardOptions","ngFlowIdentityCard","downloadGrantDocument","ERROR_10004_VERIFACTU_MISSING_OWNER","ERROR_10005_VERIFACTU_MISSING_OWNER_DATA","ERROR_10006_VERIFACTU_MISSING_COMPANY_DATA","ERROR_10007_VERIFACTU_MISSING_FISCAL_ADDRESS_DATA","identityCardFileAdded","formData","dataToSend","targetUrl","FormData","transformRequest","identity","getInformationPanelVariation","showEnableTestModeDialog","showDocumentInformationPanel","showTestModeInformationPanel","isEnableRealModeButtonDisabled","ndUsersListController","userPaymentMethods","getRolesBadge","_role","getWarehousesBadge","getFiscalAddressesBadge","fiscal_addresses","fiscal_addresse_name","warehouses_names","fiscal_addresses_names","ndTransfersListController","getStatusBadge","source_warehouse__name","target_warehouse__name","ndTransferDeliveriesListController","transfer_order__autocode","transfer_order__status","transfer_order__source_warehouse__name","transfer_order__target_warehouse__name","transfer_order__created_at","transfer_order__notes","ndSetupCardController","PRODUCT_CATEGORIES","VARIANT_CATEGORIES","PRODUCTS","WHOLESALES","STORE_SALES_AND_REGISTER_CLOSURES","ECOMMERCE_SALES","PURCHASES","TRANSFERS","SETTINGS","INVOICES_PROFORMAS_BUDGETS_AND_PAYMENTS","WAREHOUSES","CONTACTS","openSuperUserDialog","openSetupDialog","dialogDef","getValue","ndSalesListController","getGeneratedDocuments","proforma_count","quote_count","invoice_count","sales_agent__first_name","season__name","collection__code","customer__name","generated_documents","ndSaleDeliveriesListController","sale_order__autocode","sale_order__created_at","ndPurchasesListController","purchasePaymentMethods","contact__name","shipping_date","expiring_date","ndProductsController","selectPricingTier","productVariantBySizeAndColor","colorsById","registerWarehouse","selectPrices","setDisabled","ndInput","ndPurchaseDeliveriesListController","purchase_order__autocode","purchase_order__target_warehouse__name","purchase_order__contact__name","PrintOrderDeliveryDialogController","printSkus","changePrintConfig","printConfig","printOrderDelivery","printSaleOrderDelivery","printTransferOrderDelivery","printPurchaseOrderDelivery","savedPrintConfig","SALE_ORDER_DELIVERY","PURCHASE_ORDER_DELIVERY","output_format","searchParams","transferOrderDeliveriesPrint","ndPrintOrderDeliveryButtonController","showOnlyIcon","ndPosOrdersListController","registerSearchText","getAutocode","getUnitsSold","getPaymentStatus","rowClass","customer__first_name","ndPosOrderProductVariantsListController","pos_order__register__id","ndPosOrderFulfillmentsListController","ndPackingProductsListController","shippingBoxChanged","isNewShippingBox","PENDING","weightChanged","reference","delivery_autocode","package","shippingBoxCreatedEvent","ndInvoicesListController","invoicePaymentMethods","getPaymentStatusBadge","getOrigin","POS_ORDER","getInvoiceName","pdf_file","getHeader","getCorrectiveOf","correctiveState","correctiveStateParams","getCorrectedBy","correctedByStates","correctedByStateParams","correctedInv","getReplacedBy","replacedByState","replacedByStateParams","getReplacementOf","replacementOfStates","replacementOfStateParams","replacementInv","ndGridController","initializeUidGrid","searchParam","sizeWatcher","columnKey","copyNonStorableFilters","getGridPagePostData","search_fields","toTimeDateStart","toTimeDateEnd","target_warehouses","stock_availability","units_filter","order_types","serial_number_types","contact_types","fromTimeDateStart","fromTimeDate","fromTimeDateEnd","start_time_start","start_time_end","toTimeDate","end_time_start","end_time_end","pending_to_invoice","emptyLabel","enableGrouping","targetDest","treeNode","customerName","formatLargeLocation","filtersChangedWatcher","sortColumnEnabledWatcher","setLoading","selector","getShortDateTime","getText","ndContactsListController","contactPaymentMethods","hasSearch","getTypeBadge","getCountryName","updateHasSearch","updateSorting","commercial_name","mobile_phone","purchase_count","gender","website","iban","swift","last_visit","total_pos_orders","total_pos_orders_revenue","total_pos_order_items_avg","total_pos_order_revenue_avg","ndContactsController","openingDialog","avoidCheckEquals","contactInstance","contactIdChange","createContact","ngDisabled","createButton","ndAdjustmentsListController","ndAutocompleteController","ndA","navigate","ManyOptionsDialogController","ndLogoStockagile","ndHealthCheckWidgetController","initDatatable","selectDefaultAttribute","showProductAttribute","selectedProductAttribute","firstTimeProcessedProducts","dtProductsOptions","showProductVariantAttribute","selectedProductVariantAttribute","firstTimeProcessedProductVariants","dtProductVariantsOptions","showStockAttribute","selectedStockAttribute","firstTimeProcessedStock","dtStocksOptions","showSeasonAttribute","selectedSeasonAttribute","firstTimeProcessedSeason","dtSeasonsOptions","initProductsDatatable","productsHealthCheck","initProductVariantsDatatable","productVariantHealthCheck","initStocksDatatable","stockHealthCheck","initSeasonsDatatable","seasonHealthCheck","productsWithError","totalProducts","loadingProducts","showProducts","totalProductErrors","loadingProductVariants","showProductVariants","totalProductVariantErrors","loadingStock","totalStockErrors","loadingSeason","showSeasons","totalSeasonErrors","dtProductsInstance","dtProductsColumns","dtProductVariantsInstance","dtProductVariantsColumns","dtStocksInstance","dtStocksColumns","dtSeasonsInstance","dtSeasonsColumns","affected_products","total_product_count","health_check","loadingSeasons","hasPermissionLogic","hasNotPermission","hasNotPermissionLogic","hasPermissionElseDisable","hasPermissionElseDisableLogic","$set","hasPermissionAndFeature","hasPermissionAndFeatureLogic","watcher","permissionAndFeatures","withPermission","loadGlobalBanners","startBanners","is_global","selectBanner","currentBanner","startBanner","dismissUntil","dismiss_days","global_body","remainingDays","hideFreemiumBanner","goToStatusIfMobile","focusIf","iconSize","getIconSizeClass","wbDaysOfWeek","ndContractedPlanLimitAlertBoxController","ndMuteBarcodeCallbacks","ndIgnoreBarcodeInputs","INPUT_DELAY","ndBarcodeListener","avoidChangeRootScope","barcodeListenerInputDelay","uidCallback","fulfillmentCallback","callCallback","ndBarcodeListenerEnabledUdis","logType","requestBarcodeListener","fuseThemingService","$mdTheming","getRegisteredPalettes","PALETTES","getRegisteredThemes","THEMES","theme","setThemesList","themeList","$mdThemingProvider","fuseThemes","_$cookies","customTheme","getObject","alwaysWatchTheme","definePalette","primaryPalette","primary","accentPalette","accent","warnPalette","backgroundPalette","background","hue-1","hue-2","hue-3","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastStrongLightColors","fuseGeneratorService","registeredThemes","registeredPalettes","styleVars","registeredTheme","colorTypeName","levels","contrast1","contrast2","contrast3","contrast4","hue1","hue2","hue3","_themes","selectedTheme","styleEl","colorTypes","colorLevelName","ucfirst","matched","headEl","_contrastLevel","contrastLevel","contrastLevels","white","black","MsThemeOptionsController","msThemeOptions","toggleOptionsSidenav","mobileDetect","MobileDetect","browserInfo","detectBrowser","versionSearchString","browser","os","browserData","subString","versionSearch","vendor","osData","searchString","searchVersion","appVersion","dataString","dataProp","guidGenerator","mobile","setBaseUrl","getBaseUrl","paramDefaults","getApiObject","actionParts","apiObject","binaryLen","ascii","reportName","byte","apiResolverService","resourceParts","tagExists","itemTag","itemTags","parameter","toTrustedFilter","fromNow","hljsDirective","$interpolate","shouldInterpolate","contentParent","firstLineWhitespace","startingWhitespaceRegex","codeElement","lines","highlightedCode","hljs","highlight","fuseConfiguration","disableCustomScrollbars","disableMdInkRippleOnMobile","disableCustomScrollbarsOnMobile","configName","configValue","ToolbarController","tmhDynamicLocale","requestBarcode","ACADEMY_LANGS","ACADEMY_URL","hasSession","server_version","menuItems","randomEmoji","autocompleteCompanies","companyInstance","userMdOpenMenu","companiesMdOpenMenu","currentCompanyName","trialExpired","hasSupportChat","iconSvg","toggleMsNavigationFolded","searchResultClick","goto","ui_serf","setUserCompany","goToChangelog","showVersionBanner","getUsers","getFilteredCompanies","companySearch","displayNameFunction","supportButtonClicked","isSignupFinished","finishSignup","toggleBarcodeServiceMode","general","QuickPanelController","cloud","retro","posts","postsByState","postsFilter","hasWorkActivityFeature","closeQuickPanel","SignUpNavigationController","msScrollOptions","appname","NavigationController","newFeatureBadge","PreviewPanelController","previewTemplate","MainController","targetScope","$id","runBlock","htmlClass","$ariaProvider","$logProvider","msScrollConfigProvider","fuseConfigProvider","debugEnabled","tabindex","editableThemes","stateChangeStartEvent","showTermsDialogEvent","expireDate","showTermsDialogOpened","submitTpl","cancelTpl","baseDomainCookie","$$path","showTermsAndConditionDialog","stateChangeStart","stateChangeSuccess","elasticApm","serviceName","serverUrl","disableInstrumentations","toState","fromState","fromParams","loadingProgress","redirectState","TermsAndConditionsDialogController","NetPromoterScoreDialogController","availableNpss","skip","routeConfig","$urlRouterProvider","$locationProvider","html5Mode","layouts","verticalNavigation","main","toolbar","verticalNavigationFullwidthToolbar","verticalNavigationFullwidthToolbar2","horizontalNavigation","contentOnly","contentWithToolbar","toolbar@app","navigation@app","quickPanel@app","previewPanel@app","toolbar@signup","navigation@signup","toolbar@signuptwo","navigation@signuptwo","phonenumber","minutesString","elapsedHours","msInMinute","elapsedMinutes","hourString","IndexController","logoutSuccess","sessionTimeout","notAuthenticated","notAuthorized","lt","lte","eq","gte","gt","neq","sw","ew","TYPE_OF_EXPORT_TEMPORARY","TYPE_OF_EXPORT_REEXPORT","TERM_OF_TRADE_DDP","STOCK_BELOW_MINIMUM","STOCK_AT_ZERO","NEGATIVE_STOCK","B2B","ECOMMERCE","ECOMMERCE_UPDATE","NORMAL","WARNING","ALERT","AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_MANUAL","RETURN_MANAGEMENT_POLICY_AUTO","FILTER_TYPE_INT","FILTER_TYPE_FLOAT","FILTER_TYPE_STRING","FILTER_TYPE_BOOLEAN","fk","int","float","boolean","301","302","303","304","305","401","501","502","503","504","601","602","701","702","801","802","803","804","901","902","903","ECOMMERCE_SYNC_STOCK","ECOMMERCE_SYNC_PRODUCT","ECOMMERCE_SYNC_PRICE","MENU_TYPE_MIXED","MENU_TYPE_SEASONS","MENU_TYPE_COLLECTIONS","POS_ORDER_INVOICE","FORMAL_MATERIAL_ERROR","TOTAL_OR_PARTIAL_DEVOLUTION","PACKING_TYPE","PICKING_WHOLESALE","PICKING_SALE","PICKING_TRANSFER","MARKED_AS_INCIDENCE","UNMARKED_AS_INCIDENCE","PRODUCT_DOESNT_EXIST","PRODUCT_VARIANT_DELETED","BARCODE_COLLISION","PRODUCT_ALREADY_IN_ORDER","PRODUCT_ALREADY_CREATED","WRONG_WAREHOUSE","ORDER_LOG_TYPE_SCAN","ORDER_LOG_TYPE_MANUAL","ORDER_LOG_TYPE_IMPORT","ORDER_LOG_TYPE_DELETED","ORDER_LOG_TYPE_REFUND","ORDER_LOG_TYPE_AI","TRANSFER_ORDER_DELIVERY","PurchaseOrderDelivery","TransferOrderDelivery","SaleOrderDelivery","STOCKTAKING_ORDER","ADJUSTMENT_ORDER","POS_ORDER_PAYMENT_STATUS_REFUNDED","POS_ORDER_SHIPPING_STATUS_RETURNED","POS_ORDER_SHIPPING_STATUS_RETURNED_RECEIVED","POS_ORDER_SHIPPING_STATUS_ROUTED","POS_ORDER_SHIPPING_STATUS_PARTIALLY_SHIPPED","WEIGHT_UNIT_KG","WEIGHT_UNIT_G","WEIGHT_UNIT_LB","WEIGHT_UNIT_KGM2","WEIGHT_UNIT_GM2","KG","LB","kg/m2","g/m2","STARTED","PAUSED","FINISHED","WORKDAY_ACTIVITY_START","WORKDAY_ACTIVITY_FINISH","WORKDAY_ACTIVITY_PAUSE","WORKDAY_ACTIVITY_LUNCH","WORKDAY_ACTIVITY_COFFEE","WORKDAY_ACTIVITY_OTHER","PAYMENT_STATUS_TYPE_PENDING","PAYMENT_STATUS_TYPE_PARTIALLY_PAID","PAYMENT_STATUS_TYPE_PAID","CONTACT_INVOICE_TYPE_NATIONAL","CONTACT_INVOICE_TYPE_INTRACOMMUNITY","CONTACT_INVOICE_TYPE_EXPORTATION","VIDEO_CATEGORY_ANALYTICS","VIDEO_CATEGORY_INVENTORY","VIDEO_CATEGORY_CONTACTS","VIDEO_CATEGORY_RETAIL","VIDEO_CATEGORY_ECOMMERCE","VIDEO_CATEGORY_CONFIGURATION","VIDEO_CATEGORY_WHOLESALE","VIDEO_CATEGORY_INVOICING","EX_WORKS","FREE_CARRIER","FREE_ON_BOARD","FREE_ALONGSIDE_SHIP","CARRIAGE_PAID_TO","CARRIAGE_AND_INSURANCE_PAID","COST_AND_FREIGHT","COST_INSURANCE_AND_FREIGHT","DELIVERED_AT_PLACE_UNLOADED","DELIVERED_AT_PLACE","DELIVERED_DUTY_PAID","USER_ROLE_INVENTORY_MANAGER","USER_ROLE_ECOMMERCE_MANAGER","CONTACT_TYPE_VENDOR","CONTACT_TYPE_DISTRIBUTOR","CONTACT_TYPE_OTHER","CONTACT_TYPE_DROPSHIPPER","barcode_dirtective_type","ARTIFACT_STATUS_PENDING","ARTIFACT_STATUS_STARTED","HTTP_100_CONTINUE","HTTP_101_SWITCHING_PROTOCOLS","HTTP_203_NON_AUTHORITATIVE_INFORMATION","HTTP_205_RESET_CONTENT","HTTP_206_PARTIAL_CONTENT","HTTP_207_MULTI_STATUS","HTTP_300_MULTIPLE_CHOICES","HTTP_301_MOVED_PERMANENTLY","HTTP_302_FOUND","HTTP_303_SEE_OTHER","HTTP_304_NOT_MODIFIED","HTTP_305_USE_PROXY","HTTP_306_RESERVED","HTTP_307_TEMPORARY_REDIRECT","HTTP_401_UNAUTHORIZED","HTTP_402_PAYMENT_REQUIRED","HTTP_407_PROXY_AUTHENTICATION_REQUIRED","HTTP_408_REQUEST_TIMEOUT","HTTP_410_GONE","HTTP_411_LENGTH_REQUIRED","HTTP_412_PRECONDITION_FAILED","HTTP_413_REQUEST_ENTITY_TOO_LARGE","HTTP_414_REQUEST_URI_TOO_LONG","HTTP_415_UNSUPPORTED_MEDIA_TYPE","HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE","HTTP_417_EXPECTATION_FAILED","HTTP_422_UNPROCESSABLE_ENTITY","HTTP_423_LOCKED","HTTP_424_FAILED_DEPENDENCY","HTTP_428_PRECONDITION_REQUIRED","HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE","HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS","HTTP_501_NOT_IMPLEMENTED","HTTP_502_BAD_GATEWAY","HTTP_503_SERVICE_UNAVAILABLE","HTTP_504_GATEWAY_TIMEOUT","HTTP_505_HTTP_VERSION_NOT_SUPPORTED","HTTP_507_INSUFFICIENT_STORAGE","HTTP_511_NETWORK_AUTHENTICATION_REQUIRED","ERROR_01007_ERROR_CREATING_SIGN_UP_OBJECT","ERROR_01008_TERMS_AND_CONDITIONS_NOT_ACCEPTED","ERROR_01009_ERROR_SENDING_SIGN_UP_EMAIL","ERROR_01015_GATEWAY_PAYMENT_ALREADY_PAID","ERROR_04004_SOME_PRODUCTS_RETURNED","ERROR_04005_GIFT_CARD_ALREADY_USED","ERROR_04006_GIFT_CARD_NOT_FOUND","ERROR_04007_REGISTER_ACTIVITY_CLOSED","ERROR_04009_REGISTER_ALREADY_CLOSED","ERROR_04010_GIFT_CARD_PRICE_INSUFFICIENT","ERROR_04012_HAS_CONSUMED_GIFT_CARDS","ERROR_04013_HAS_CREATED_GIFT_CARDS_CONSUMED","ERROR_04014_GIFT_CARD_NOT_VALID","ERROR_04015_REGISTER_OR_SITE_IS_MANDATORY","ERROR_04018_CREATE_NEGATIVE_PAYMENT_METHODS_REGISTER_ACTIVITY_CLOSED","ERROR_04019_RESTORING_POS_ORDER_REGISTER_ACTIVITY_CLOSED","ERROR_04020_RESTORING_POS_ORDER_THAT_IS_DEVOLUTION","ERROR_04021_RESTORING_POS_ORDER_THAT_IS_NOT_DELETED","ERROR_04029_CONTACT_WITHOUT_B2B_EXCEPTION","ERROR_04030_PICKING_ORDER_PICKED_CANNOT_PICK_ITEMS","ERROR_04031_NOT_MORE_UNITS_TO_PICK","ERROR_04037_SCANNED_LOT_NOT_AVAILABLE","ERROR_04045_CHANGE_WAREHOUSE_FULFILLMENT_STATUS","ERROR_05040_NO_AVAILABLE_UIDS","ERROR_05107_CANNOT_CHANGE_WAREHOUSE_OF_A_RETURN_RECEIVED_UID","ERROR_05106_CANNOT_SET_TO_RETURNED_A_RETURNED_RECEIVED_UID","ERROR_05109_PRODUCT_VARIANT_IS_BEING_MERGED","ERROR_07001_PRESTASHOP_INVALID_OPTION_NAME","ERROR_08001_PRESTASHOP_DUPLICATED_COMPOSITION_NAME","ERROR_08003_PRESTASHOP_CANNOT_GET_PRODUCT_IMAGES","ERROR_08004_PRESTASHOP_CANNOT_DELETE_PRODUCT_IMAGE","ERROR_08005_IMPORTATION_IN_PROGRESS","ERROR_09001_INVALID_ORDER_PAYMENT_STATUS","ERROR_10002_KUBIBAI_CANNOT_GENERATE_INVOICE_PDF","ERROR_10008_ASSIGN_VERIFACTU_TO_KUBIBAI_SERIAL_NUMBER_TYPE","ERROR_10009_MISMATCHING_FISCAL_ADDRESSES_BETWEEN_VERIFACTU_AND_SERIAL_NUMBER_TYPE","ERROR_10010_INVALID_VERIFACTU_ENVIRONMENT_STATUS","ERROR_10011_INVALID_VERIFACTU_ENVIRONMENT_STATUS_TRANSITION","ERROR_13001_DYNAMIC_REPORTS_INVALID_METRIC_COMBINATION","GATEWAY_ERROR_NOT_ENOUGH_BALANCE","GATEWAY_ERROR_BLOCK_CARD","GATEWAY_ERROR_CARD_EXPIRED","GATEWAY_ERROR_INVALID_AMOUNT","GATEWAY_ERROR_INVALID_CARD","GATEWAY_ERROR_PIN_TRIES_EXCEEDED","GATEWAY_ERROR_WITHDRAWAL_AMOUNT_EXCEEDED","MALE","FEMALE","TOTAL","PARTIAL","RECEPTION_DRAFT","RECEIVED","PURCHASE_ORDER_STATUS_ORDERED","PURCHASE_ORDER_STATUS_PARTIALLY_RECEIVED","PURCHASE_ORDER_STATUS_RECEIVED","PRODUCTION_ORDER_STATUS_ORDERED","PRODUCTION_ORDER_STATUS_PRODUCED","PRODUCTION_ORDER_STATUS_CANCELED","SALE_ORDER_STATUS_PENDING_TO_PREPARE","SALE_ORDER_STATUS_PARTIALLY_SHIPPED","SALE_ORDER_STATUS_PENDING_TO_RECEIVE","SALE_ORDER_STATUS_PARTIALLY_RECEIVED","SALE_ORDER_STATUS_B2B_DRAFT","SALE_ORDER_STATUS_B2B_ORDERED","TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE","TRANSFER_ORDER_STATUS_ALLOCATED","TRANSFER_ORDER_STATUS_PREPARED","TRANSFER_ORDER_STATUS_SHIPPED","TRANSFER_ORDER_STATUS_RECEPTION_DRAFT","TRANSFER_ORDER_STATUS_RECEIVED","ADJUSTMENT_ORDER_STATUS_ADJUSTED","JURIDICAL_PERSON_TYPE","USAGE","DAMAGE","SHRINKAGE","PROMOTION","RETURN","INCREASE","DECREASE","ARS","CHF","COP","EUR","IDR","GBP","JPY","MXN","USD","VEF","ZAR","CLP","AED","PEN","CAD","GTQ","HNL","NIO","CRC","PAB","BZD","SVC","HTG","DOP","JMD","BSD","CUP","CUC","TTD","BOB","BRL","GYD","PYG","SRD","UYU","DKK","SEK","NOK","ISK","PLN","CZK","HUF","RON","BGN","HRK","TRY","MKD","ILS","KWD","OMR","QAR","SAR","YER","CNY","KRW","TWD","MOP","HKD","MYR","PHP","SGD","THB","VND","AFN","BDT","INR","PKR","LKR","NPR","MVR","BTN","KZT","KGS","TJS","TMT","UZS","AUD","NZD","FJD","PGK","SBD","TOP","VUV","WST","DZD","AOA","BWP","BIF","CVE","XAF","XOF","KMF","CDF","DJF","EGP","ERN","SZL","ETB","GMD","GHS","GNF","KES","LSL","LRD","LYD","MWK","MUR","MAD","MZN","NAD","NGN","RWF","STD","SCR","SLL","SOS","SSP","SDG","TZS","UGX","ZMW","ZWL","XCD","backend-code","ItemDetailsDialog","NewCustomerDialog","PayOrderItemsDialog","REMOVED","STOCKTAKING","310","311","312","313","314","315","316","317","318","319","320","321","322","323","324","325","326","STOCK_MOVEMENT_TYPE_POS_ORDER_RESTORATION","STOCK_MOVEMENT_TYPE_PRODUCT_VARIANT_MERGED","STOCK_MOVEMENT_TYPE_PRODUCT_IMPORT","STOCK_MOVEMENT_TYPE_WAREHOUSE_DELETED","STOCK_MOVEMENT_TYPE_AUTOMATIC_RESET","STOCK_MOVEMENT_TYPE_UPDATED_AMOUNT","STOCK_MOVEMENT_TYPE_PRODUCTION_PRODUCED","STOCK_MOVEMENT_TYPE_PRODUCTION_CANCELLED","STOCK_MOVEMENT_TYPE_MANUAL_RESET_FROM_API","STOCK_MOVEMENT_TYPE_MANUAL_RESET_FROM_ECOMMERCE","STOCK_MOVEMENT_TYPE_UID_CREATED","STOCK_MOVEMENT_TYPE_UID_MODIFIED","STOCK_MOVEMENT_TYPE_UID_DELETED","STOCK_MOVEMENT_TYPE_UID_INVENTORIED","STOCK_MOVEMENT_TYPE_UID_SPLITTED","STOCK_MOVEMENT_TYPE_UID_IMPORTED","STOCK_MOVEMENT_TYPE_PICKING_UID_ASSIGN","STOCK_MOVEMENT_TYPE_PICKING_UID_UNASSIGN","APP","ACCOUNT","USERS","ACCOUNTING","PROFORMAS","QUOTES","MANUFACTURE","COLLECTIONS","CONFIGURATION","IMPORT","SALES","PICKING","DASHBOARD","STOCKS","LIST","REPORTS","SALE","SELL","REGISTER_CLOSURE","SALES_LOG","CUSTOMERS","CASH_MANAGEMENT","REGISTERS","SITES","IMPORTER","UPDATE","CREATE","DELETE","NEW_PRODUCT","OPEN_REGISTER","CLOSE_REGISTER","CHANGE_REGISTER","ADD_CASH","REMOVE_CASH","CUSTOMER","LIST_PURCHASES","RETURN_POS_ORDER","AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","IO","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CX","CC","CO","KM","CD","CG","CK","CR","CI","HR","CU","CY","CZ","CS","DK","DJ","DM","DO","TP","EC","EG","SV","GQ","ER","EE","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GN","GW","GY","HT","HM","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IL","IT","JM","JP","JO","KZ","KE","KI","KP","KR","KW","LA","LV","LS","LR","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","MS","MA","MZ","MM","NA","NR","NP","NL","AN","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","SU","RU","RW","SH","KN","LC","PM","VC","SM","ST","SA","RS","SN","SC","SL","SG","SK","SI","SB","SO","ZA","GS","ES","LK","SD","SR","SJ","SZ","SE","CH","SY","TW","TJ","TZ","TH","TG","TK","TO","TT","TE","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VA","VE","VN","VI","VQ","WF","EH","YE","YU","ZR","ZM","ZW","AX","BQ","AP","CW","EU","GG","IM","JE","ME","BL","MF","SX","SS","TL","VG","PARTNER","ALTERNATIVE_MEDICINE","APPAREL_AND_FASHION","ARCHITECTURE_AND_PLANNING","AUTOMOTIVE","BROADCAST_MEDIA","BUILDING_MATERIALS","BUSINESS_SUPPLIES_AND_EQUIPMENT","CHEMICALS","COMPUTER_AND_NETWORK_SECURITY","CONSTRUCTION","CONSUMER_GOODS","CONSUMER_SERVICES","DESIGN","EDUCATION_MANAGEMENT","ELECTRICAL_ELECTRONIC_MANUFACTURING","EVENTS_SERVICES","FACILITIES_SERVICES","FINANCIAL_SERVICES","FINE_ART","FOOD_PRODUCTION","GAMBLING_AND_CASINOS","GOVERNMENT_ADMINISTRATION","GRAPHIC_DESIGN","HIGHER_EDUCATION","HOSPITAL_AND_HEALTH_CARE","HOSPITALITY","IMPORT_AND_EXPORT","INDUSTRIAL_AUTOMATION","INDUSTRY_CURRENT_VALUE","INFORMATION_TECHNOLOGY_AND_SERVICES","INTERNATIONAL_TRADE_AND_DEVELOPMENT","LAW_PRACTICE","LEISURE_TRAVEL_AND_TOURISM","LOGISTICS_AND_SUPPLY_CHAIN","MANAGEMENT_CONSULTING","MARKET_RESEARCH","MARKETING_AND_ADVERTISING","MECHANICAL_OR_INDUSTRIAL_ENGINEERING","MEDIA_PRODUCTION","MEDICAL_PRACTICE","MOTION_PICTURES_AND_FILM","NEWSPAPERS","NON_PROFIT_ORGANIZATION_MANAGEMENT","OIL_AND_ENERGY","ONLINE_MEDIA","PACKAGING_AND_CONTAINERS","PHARMACEUTICALS","PUBLISHING","REAL_ESTATE","RESTAURANTS","RETAIL","SPORTING_GOODS","TELECOMMUNICATIONS","TEXTILES","TOBACCO","TRANSPORTATION_RUCKING_RAILROAD","TRAVEL","WAREHOUSING","WHOLESALE","HOME_AND_APPLIANCES","LEISURE","IT_AND_ELECTRONICS","FOOD_FLOWERS_AND_DRINK","MEETING","STOCKTAKING_PRODUCT_DOESNT_EXIST","STOCKTAKING_PRODUCT_DELETED","STOCKTAKING_PRODUCT_VARIANT_DELETED","STOCKTAKING_BARCODE_COLLISION","STOCKTAKING_PRODUCT_ALREADY_IN_STOCKTAKING","STOCKTAKING_CHANGE_TYPE_SCAN","STOCKTAKING_CHANGE_TYPE_MANUAL","STOCKTAKING_CHANGE_TYPE_IMPORT","STOCKTAKING_CHANGE_TYPE_DELETED","STOCKTAKING_CHANGE_TYPE_ALLOCATION","NAME_IDENTIFIER","CODE_IDENTIFIER","NAME_CODE_IDENTIFIER","CODE_NAME_IDENTIFIER","COLOR_AND_SIZE_IDENTIFIER","SKU_IDENTIFIER","DO_NOT_SHOW","NEW_LINE","SAME_LINE_AS_PRODUCT","BIG","POS_ORDER_SUBTOTAL_LIMIT","EPOS_ITALY_INTEGRATION_APP","VERIFACTU_INTEGRATION_APP","NO_ADVANCED_ECOMMERCE","NO_MARKETPLACE_INCLUDED","NO_CUSTOM_API_CHANNEL","NO_EXTRA_REGISTERS","STRIPE","CREATE_POS_ORDER_V2","FISCAL_ADDRESS_INVOICING_METHOD_FIRM_SALE","FISCAL_ADDRESS_INVOICING_METHOD_CONSIGNMENT_SALE","PRICE_NO_ROUND","PRICE_ROUND_UP","PRICE_ROUND_UP_99","PRICE_ROUND_DOWN","PRICE_ROUND_DOWN_99","no_round","round_up","round_up_99","round_down","round_down_99","-1","NON_URGENT_ORDER","PRINTER_TYPE_EPSON","PAGE_SIZE_A3","PAGE_SIZE_A5","VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01","VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07","VERIFACTU_TYPE_SII","VERIFACTU_TYPE_OTHER","VERIFACTU_TYPE_ASAP","VERIFACTU_DOCUMENTS_UNDER_REVIEW","PAYMENT_STATUS_PAID","$translateProvider","$httpProvider","$provide","$mdDateLocaleProvider","AnalyticsProvider","$mdAriaProvider","tmhDynamicLocaleProvider","$sceDelegateProvider","$qProvider","errorOnUnhandledRejections","useLoader","urlTemplate","preferredLanguage","useSanitizeValueStrategy","interceptors","ApiInjector","NotificationsInjector","parseDate","dateString","NaN","decorator","taOptions","focussed","toolbarGroup","toolbarButton","toolbarButtonActive","textEditor","htmlEditor","taTools","iconclass","italics","strikeThrough","ol","redo","undo","justifyLeft","justifyCenter","justifyRight","justifyFull","outdent","insertImage","insertLink","insertVideo","setAccount","tracker","trackEvent","trackPages","disableWarnings","resourceUrlWhitelist","responseError","lastUpdate","apiService","NetPromoterScore","localIp","baseUrlV2","branch","quickPanel","myCompany","billingPortal","interceptor","paymentsGateway","dashboard","dataImports","dataImportsStep","productImports","productVariantProviderPrices","product_variant__product","bulk","execute","purchaseOrderProductProviderPrice","purchaseOrderProductVariantProviderPrice","purchaseOrderDeliveryLine","purchaseOrderDeliveryProductVariants","purchaseOrdersSendCatalog","saleOrderProducts","saleOrderDeliveryProductVariants","saleOrderDeliveriesStatus","transferOrderDeliveryProductVariants","pofpvUidStocks","pofpvId","packings","collectionOrders","categoryGroups","startDashboard","retailDashboard","proformas","quotes","receipts","featureFlag","purchaseOrdersPrint","purchaseOrdersPrintCatalog","purchaseOrderDeliveriesPrintHidePrices","saleOrdersPrintCatalog","saleOrderDeliveriesPrintHidePrices","posOrdersInvoice","posOrdersSendPdf","collectionsPrintCatalog","presalesPDF","saleOrdersReport","stockReport","tickets","registerClosures","sellerTransactions","wholesaleDeliveryNotes","workdays","retailCustomers","retailCustomersReport","wholesaleCustomers","wholesaleCustomersReport","productKpi","stockKpi","$templateCache"],"mappings":"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mqL,aAAa+/F,EAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAIC,EAAQ,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IA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AAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,QAAQ,UAAU,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,SAAS,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,YAAYC,EAAG,CAAC,WAAW,WAAW,WAAW,WAAW,SAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,UAAU,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,SAAS,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,WAAW,UAAU,WAAW,SAAS,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,YAAYC,EAAG,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,UAAU,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,WAAW,SAAS,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,UAAU,SAAS,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,QAAQ,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,YAAYC,EAAG,CAAC,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,SAAS,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,SAAS,SAAS,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,UAAU,WAAW,WAAW,SAAS,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,SAAS,UAAW,WAAW,UAAU,WAAW,WAAW,UAAU,SAAS,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,SAAS,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,UAAU,SAAS,SAAS,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAyB,SAASC,EAAIzhS,GAAG,OAAOnf,OAAOmqL,aAAahrK,GAAG,GAAG,IAAIA,GAAG,GAAG,IAAIA,GAAG,EAAE,IAAM,IAAFA,CAAE,CAAA,CAAK,SAAS0hS,EAAIzlN,EAAE77E,GAAG,OAAyB,IAAlB67E,EAAE26D,WAAWx2I,CAAA,EAAA,IAAW,IAAsB,IAAlB67E,EAAE26D,WAAWx2I,CAAA,EAAA,IAAW,IAAsB,IAAlB67E,EAAE26D,WAAWx2I,CAAA,EAAA,IAAW,EAAqB,IAAlB67E,EAAE26D,WAAWx2I,CAAA,EAAA,CAAK,CAAK,SAASuhS,EAAIhsU,EAAEssD,GAAG,OAAOw/Q,EAAIC,EAAI/rU,EAAE,CAAA,EAAG+rU,EAAIz/Q,EAAE,CAAA,CAAA,EAAIw/Q,EAAIC,EAAI/rU,EAAE,CAAA,EAAG+rU,EAAIz/Q,EAAE,CAAA,CAAA,CAAA,CAAI,SAAS+5D,EAAEiF,GAAG,OAAO0/M,EAAG1/M,GAAG,GAAG,KAAK2/M,EAAG3/M,GAAG,GAAG,KAAKo/M,EAAGp/M,GAAG,EAAE,MAAM4+M,EAAK,IAAF5+M,GAAO,CAAA,CAAE,SAAS2gN,EAAS3gN,GAAmC,IAAhC,IAAQ6xI,EAAJ9yN,EAAE,EAAIksO,EAAEw1D,EAAIzgN,EAAE,CAAA,EAAG2X,EAAE8oM,EAAIzgN,EAAE,CAAA,EAASjhF,EAAE,IAAsB8yN,EAAlBoZ,GAAGrvL,EAAE78C,CAAA,IAAiBksO,EAAZtzI,GAAG5c,EAAEkwJ,CAAA,EAAWtzI,EAAEk6H,EAAoB,OAAlBoZ,GAAGrvL,EAAE78C,CAAA,IAAoByhS,EAAf7oM,GAAG/7C,EAAE78C,EAAc,EAAGyhS,EAAIv1D,CAAA,CAAA,CAAG,SAAS21D,EAAS5gN,GAAoC,IAAjC,IAAS6xI,EAAL9yN,EAAE,GAAKksO,EAAEw1D,EAAIzgN,EAAE,CAAA,EAAG2X,EAAE8oM,EAAIzgN,EAAE,CAAA,EAAW,EAAFjhF,GAAuB8yN,EAAlBoZ,GAAGrvL,EAAE78C,CAAA,IAAiBksO,EAAZtzI,GAAG5c,EAAEkwJ,CAAA,EAAWtzI,EAAEk6H,EAAoB,OAAlBoZ,GAAGrvL,EAAE78C,CAAA,IAAoByhS,EAAf7oM,GAAG/7C,EAAE78C,EAAc,EAAGyhS,EAAIv1D,CAAA,CAAA,CAAG,SAAS41D,EAAO1/M,GAAG,IAAIpiF,EAAEihF,EAAE,mBAAuF,IAApEpkC,EAAEukP,EAAE97R,MAAA,EAAQq7R,EAAGU,EAAG/7R,MAAA,EAAQs7R,EAAGU,EAAGh8R,MAAA,EAAQ+6R,EAAGkB,EAAGj8R,MAAA,EAAQu6R,EAAG2B,EAAGl8R,MAAA,EAAc88E,EAAEzoH,OAAO,IAAIyoH,GAAGA,EAAM,IAAJpiF,EAAE,EAAQA,EAAE,IAAI68C,EAAE78C,IAAI0hS,EAAIt/M,EAAEpiF,GAAG,CAAA,EAAGA,CAAA,GAAQ,IAAJA,EAAE,EAAQA,EAAE,IAAIihF,EAAE2gN,EAAS3gN,CAAA,EAAGpkC,EAAE78C,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAGpkC,EAAE78C,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAO,IAAJjhF,EAAE,EAAQA,EAAE,KAAKihF,EAAE2gN,EAAS3gN,CAAA,EAAG0/M,EAAG3gS,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAG0/M,EAAG3gS,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAO,IAAJjhF,EAAE,EAAQA,EAAE,KAAKihF,EAAE2gN,EAAS3gN,CAAA,EAAG2/M,EAAG5gS,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAG2/M,EAAG5gS,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAO,IAAJjhF,EAAE,EAAQA,EAAE,KAAKihF,EAAE2gN,EAAS3gN,CAAA,EAAGo/M,EAAGrgS,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAGo/M,EAAGrgS,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAO,IAAJjhF,EAAE,EAAQA,EAAE,KAAKihF,EAAE2gN,EAAS3gN,CAAA,EAAG4+M,EAAG7/R,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,EAAG4+M,EAAG7/R,CAAA,IAAK0hS,EAAIzgN,EAAE,CAAA,CAAA,CAAszB,MAAM,CAACinM,QAAQ,SAAS3rN,GAAO,IAAIv8D,EAAEogD,EAAE5F,EAAEunP,EAAM,GAAG1sU,EAAKknG,EAAMlnG,MAAM,GAAGqW,EAAI6wF,EAAM7wF,KAAK,KAAK0mR,EAAK71L,EAAM61L,MAAM,MAAM4vC,EAAMzlO,EAAMylO,OAAO,IAAsF,GAA/EF,EAAOp2T,CAAA,EAAKrW,EAAz8B,SAAc4mH,GAAmD,IAAhD,IAAyC77B,EAArCpgD,EAAE,EAAEksO,EAAEjwJ,EAAEtiH,OAAOsnH,EAAEpgG,OAAOmqL,aAAepyE,EAAE,GAAS54F,EAAEksO,IAAG9rL,EAAE67B,EAAE26D,WAAW52I,CAAA,EAAA,GAAU,IAAK44F,EAAE/7H,KAAKokH,EAAE7gC,CAAA,CAAA,EAAYA,EAAE,KAAMw4C,EAAE/7H,KAAKokH,EAAE7gC,GAAG,EAAE,GAAG,IAAM,GAAFA,EAAK,GAAA,CAAA,EAAcA,EAAE,MAAOw4C,EAAE/7H,KAAKokH,EAAE7gC,GAAG,GAAG,GAAG,IAAIA,GAAG,EAAE,GAAG,IAAM,GAAFA,EAAK,GAAA,CAAA,EAAcA,EAAE,SAASw4C,EAAE/7H,KAAKokH,EAAE7gC,GAAG,GAAG,EAAE,IAAIA,GAAG,GAAG,GAAG,IAAIA,GAAG,EAAE,GAAG,IAAM,GAAFA,EAAK,GAAA,CAAA,EAAgB,OAAOw4C,EAAEn4H,KAAK,EAAA,CAAA,EAA0oBpL,CAAA,EAAMA,GAAM,IAAI+lH,OAAO,EAAE/lH,EAAKsE,OAAO,GAAG,EAAE,CAAA,EAAG8G,KAAKuhU,CAAA,EAAgB,OAAN5vC,EAA8D,IAAjD53M,EAAE+hB,EAAMurN,IAAI,mBAAmBia,EAAMllU,KAAK29E,CAAA,EAAGx6C,EAAE,EAAQA,EAAE3qC,EAAKsE,QAAQymF,EAAEwhP,EAASD,EAAItsU,EAAK4sI,OAAOjiG,EAAE,CAAA,EAAGw6C,CAAA,CAAA,EAAIunP,EAAMllU,KAAKujF,CAAA,EAAG5F,EAAE4F,EAAEpgD,GAAG,OAAY,IAAJA,EAAE,EAAQA,EAAE3qC,EAAKsE,QAAQooU,EAAMllU,KAAK+kU,EAASvsU,EAAK4sI,OAAOjiG,EAAE,CAAA,CAAA,CAAA,EAAKA,GAAG,EAAG,OAAO+hS,EAAMthU,KAAK,EAAA,CAAA,EAAKghT,QAAQ,SAASllN,GAAO,IAAIv8D,EAAEogD,EAAE5F,EAAEunP,EAAM,GAAG1sU,EAAKknG,EAAMlnG,MAAM,GAAGqW,EAAI6wF,EAAM7wF,KAAK,KAAK0mR,EAAK71L,EAAM61L,MAAM,MAAM4vC,EAAMzlO,EAAMylO,OAAO,IAAqE,GAA9DF,EAAOp2T,CAAA,EAAKrW,GAAM,IAAI+lH,OAAO,EAAE/lH,EAAKsE,OAAO,GAAG,EAAE,CAAA,EAAG8G,KAAK,IAAA,EAAe,OAAN2xR,EAAwD,IAA3C53M,EAAEnlF,EAAK4sI,OAAO,EAAE,CAAA,GAAI,mBAAmBjiG,EAAE,EAAQA,EAAE3qC,EAAKsE,QAAQymF,EAAE/qF,EAAK4sI,OAAOjiG,EAAE,CAAA,EAAG+hS,EAAMllU,KAAK8kU,EAAIE,EAASzhP,CAAA,EAAG5F,CAAA,CAAA,EAAIA,EAAE4F,EAAEpgD,GAAG,OAAY,IAAJA,EAAE,EAAQA,EAAE3qC,EAAKsE,QAAQooU,EAAMllU,KAAKglU,EAASxsU,EAAK4sI,OAAOjiG,EAAE,CAAA,CAAA,CAAA,EAAKA,GAAG,EAAvwC,IAAw0CiiS,IAA/0C7hP,EAA5C67B,EAAi4C5mH,EAA/D0sU,EAAMthU,KAAK,EAAA,EAAIzJ,QAAQ,IAAIw/P,OAAOwrE,EAAM,IAAA,EAAM,EAAA,EAAz2ChiS,EAAE,EAAEksO,EAAEjwJ,EAAEtiH,OAAOsnH,EAAEpgG,OAAOmqL,aAAepyE,EAAE,GAAS54F,EAAEksO,GAAmC,IAAN,KAA1B9rL,EAAE67B,EAAE26D,WAAW52I,CAAA,EAAA,IAAoB44F,EAAE/7H,KAAKokH,EAAI,IAAF7gC,CAAE,CAAA,EAAuB,MAAN,IAAFA,GAAgBpgD,EAAEksO,GAAGtzI,EAAE/7H,KAAKokH,EAAG7gC,GAAG,EAAE,KAAyB,GAAlB67B,EAAE26D,WAAW52I,CAAA,EAAA,CAAK,CAAA,EAAwB,MAAN,IAAFogD,GAAgBpgD,EAAE,EAAEksO,GAAGtzI,EAAE/7H,KAAKokH,EAAG7gC,GAAG,GAAG,MAAQ67B,EAAE26D,WAAW52I,CAAA,EAAA,GAAM,EAAE,KAAyB,GAAlBi8E,EAAE26D,WAAW52I,CAAA,EAAA,CAAK,CAAA,EAAwB,MAAN,IAAFogD,IAAgBpgD,EAAE,EAAEksO,GAAGtzI,EAAE/7H,KAAKokH,EAAG7gC,GAAG,GAAG,QAAU67B,EAAE26D,WAAW52I,CAAA,EAAA,GAAM,GAAG,OAASi8E,EAAE26D,WAAW52I,CAAA,EAAA,GAAM,EAAE,KAAyB,GAAlBi8E,EAAE26D,WAAW52I,CAAA,EAAA,CAAK,CAAA,EAAiB,OAAO44F,EAAEn4H,KAAK,EAAA,CAA+6B,EAAOunT,KAAK,WAAW,SAASoR,IAAoB,IAA8CC,EAA1Cj+D,EAAO3lQ,OAAO2lQ,QAAQ3lQ,OAAO6jU,SAAkB,IAAID,EAAKj+D,EAAOm+D,gBAAgB,IAAIC,YAAY,CAAA,CAAA,EAAI,GAAG,UAAgC,CAArB,MAAMruS,GAAG4/C,QAAQ5F,IAAI,kDAAA,CAAA,CAAoD,OAAOk0P,CAAA,CAAK,OAAOoI,EAAwB,WAApBrI,EAAA,CAAoB,EAAYqI,EAAwB,WAApBrI,EAAA,CAAoB,CAAA,CAAA,CAAA,EAAA,EAAsB1R,IAAI,WAAqB,IAAIzrM,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAImG,EAAE,CAAC,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,YAAYvlC,EAAE,IAAO,IAAIu+B,MAAM,EAAA,EAAI36G,KAAK,IAAA,EAAM,SAASghU,EAAIzhS,GAAG,OAAOnf,OAAOmqL,aAAe,IAAFhrK,EAAMA,GAAG,EAAE,IAAIA,GAAG,GAAG,IAAIA,GAAG,GAAG,GAAA,CAAA,CAAoI,MAAM,CAAC2nR,IAAI,SAAStyT,GAAM,IAA2DM,EAAEssD,EAAEm+B,EAAE7yE,EAAEyuG,EAAI4c,EAAE54F,EAAEI,EAAvN67E,EAAE77E,EAA8I8hS,EAAG,WAAWC,EAAG,WAAWC,EAAG,WAAWC,EAAG,UAA4B17M,EAAE,IAAIvL,MAAM,EAAA,EAAsE,IAAlE/lH,GAAMwnF,EAAEv3C,MAAM,EAAE,IAAIjwC,EAAKsE,OAAO,GAAG,EAAA,EAAI8nU,EAAIpsU,EAAKsE,QAAQ,CAAA,EAAG8nU,EAAI,CAAA,EAAOzhS,EAAE,EAAEA,EAAE3qC,EAAKsE,OAAOqmC,GAAG,GAAG,CAAC,IAAII,EAAE,EAAEA,EAAE,GAAGA,CAAA,GAAKumF,EAAEvmF,IAA1VA,EAAsWJ,GAAGI,GAAG,GAAhV,KAA9B67E,EAAmW5mH,GAArVuhL,WAAWx2I,CAAA,EAAA,GAA6B,IAAlB67E,EAAE26D,WAAWx2I,CAAA,EAAA,IAAW,GAAqB,IAAlB67E,EAAE26D,WAAWx2I,CAAA,EAAA,IAAW,GAAI67E,EAAE26D,WAAWx2I,CAAA,EAAA,GAAO,IAAuR,IAApBzqC,EAAEusU,EAAGjgR,EAAEkgR,EAAG/hP,EAAEgiP,EAAG70T,EAAE80T,EAAOjiS,EAAE,EAAEA,EAAE,GAAGA,CAAA,GAA6Bu/O,EAArBv/O,EAAE,IAAI47E,EAAG/5D,EAAEm+B,EAAI,CAACn+B,EAAE10C,EAAK6yB,GAAUA,EAAE,IAAI47E,EAAGzuG,EAAE00C,EAAI,CAAC10C,EAAE6yE,EAAO,EAAFhgD,EAAI,EAAE,IAAWA,EAAE,IAAI47E,EAAE/5D,EAAEm+B,EAAE7yE,EAAM,EAAF6yB,EAAI,EAAE,KAAQ47E,EAAE57B,GAAGn+B,EAAE,CAAC10C,GAAO,EAAF6yB,EAAI,IAAKw4F,EAAEjjI,EAAEqmH,EAAEoG,EAAEhiF,GAAGumF,EAAEg5J,GAAG,EAA4BhqR,EAAE4X,EAAEA,EAAE6yE,EAAMn+B,GAAnC22E,GAAG3c,EAAE77E,GAAKw4F,IAAI,GAAG3c,EAAE77E,KAAYggD,EAAEn+B,GAAQ,EAAEigR,EAAGA,EAAGvsU,EAAE,EAAEwsU,EAAGA,EAAGlgR,EAAE,EAAEmgR,EAAGA,EAAGhiP,EAAE,EAAEiiP,EAAGA,EAAG90T,EAAE,CAAA,CAAE,OAAOk0T,EAAIS,CAAA,EAAIT,EAAIU,CAAA,EAAIV,EAAIW,CAAA,EAAIX,EAAIY,CAAA,CAAA,CAAA,CAAA,EAAA,EAAU,CAAA,WAAY,IAAIn2D,EAAE,KAAA,EAAOo2D,EAAG/1U,KAAK,SAASqsI,EAAEx4C,EAAE7yE,GAAG,IAAsF4d,EAAlFx1B,EAAEyqF,EAAEjgE,MAAM,GAAA,EAAK8hC,EAAEqgR,EAAK3sU,EAAE,KAAMssD,GAAIA,CAAAA,EAAEsgR,YAAYtgR,EAAEsgR,WAAW,OAAO5sU,EAAE,EAAA,EAAI,KAAUA,EAAEgE,SAASwxB,EAAEx1B,EAAEkxH,MAAA,IAAYlxH,EAAEgE,QAAQ4T,IAAI2+P,EAASjqN,EAAEA,EAAE92B,KAAQ82B,EAAE92B,GAAG,IAAxB82B,EAAE92B,GAAG5d,CAAmB,CAAI,IAAIulP,EAAE,aAAc,OAAOouD,YAAY,aAAc,OAAOshB,aAAa,aAAc,OAAOhJ,aAAa,aAAc,OAAOiJ,SAAS,SAASjoP,EAAE4F,GAAqE,IAAlE,IAA8Cj1D,EAAE6wF,EAAE2jK,EAAE73J,EAAE1F,EAAEuE,EAAE/E,EAAI3F,EAAEgF,EAA5D1zG,EAAE6yE,EAAEzmF,OAAOhE,EAAE,EAAEssD,EAAElzB,OAAO2zS,kBAA0C7lP,EAAE,EAAEA,EAAEtvE,EAAE,EAAEsvE,EAAGuD,EAAEvD,GAAGlnF,IAAIA,EAAEyqF,EAAEvD,IAAIuD,EAAEvD,GAAG56B,IAAIA,EAAEm+B,EAAEvD,IAAkD,IAA9C1xD,EAAE,GAAGx1B,EAAEqmH,EAAE,IAAK82I,EAAE0mE,YAAYp+M,OAAOjwF,CAAA,EAAGw0P,EAAE,EAAE73J,EAAE,EAAM1F,EAAE,EAAEu9J,GAAGhqR,GAAG,CAAC,IAAIknF,EAAE,EAAEA,EAAEtvE,EAAE,EAAEsvE,EAAG,GAAGuD,EAAEvD,KAAK8iM,EAAE,CAAS,IAAJ/9J,EAAEkG,EAAM7L,EAAZ0K,EAAE,EAAc1K,EAAE0jK,EAAE,EAAE1jK,EAAG0K,EAAEA,GAAG,EAAI,EAAF/E,EAAIA,IAAI,EAAY,IAAVX,EAAE0+J,GAAG,GAAG9iM,EAAMo/B,EAAE0K,EAAE1K,EAAE9wF,EAAE8wF,GAAGmG,EAAGpG,EAAEC,GAAGgF,EAAE,EAAE6G,CAAA,CAAG,EAAE63J,EAAE73J,IAAI,EAAE1F,IAAI,CAAA,CAAE,MAAM,CAACpG,EAAErmH,EAAEssD,EAAA,CAAG,SAAStpB,EAAEynD,EAAE7yE,GAAmQ,OAAhQhhB,KAAKozR,EAAE,GAAGpzR,KAAKu7H,EAAE,MAAMv7H,KAAKghB,EAAEhhB,KAAKyvH,EAAEzvH,KAAKoJ,EAAEpJ,KAAK2/Q,EAAE,EAAE3/Q,KAAK4gD,MAAM2lN,EAAE,IAAIouD,WAAW9gO,CAAA,EAAGA,EAAE7zF,KAAKo6H,EAAE,CAAA,EAAGp6H,KAAKyzC,EAAEkoF,EAAE37H,KAAKqsI,EAAE,CAAA,GAAMrrH,GAAYA,EAAE8jB,QAAQ9kC,KAAKoJ,EAAE4X,EAAE8jB,OAAO9jB,EAAEo1T,aAAap2U,KAAKu7H,EAAEv6G,EAAEo1T,YAAYp1T,EAAEq1T,aAAar2U,KAAKyzC,EAAEzyB,EAAEq1T,YAAYr1T,EAAE24G,SAA3G34G,EAAE,GAAJ,MAAsHhhB,KAAKqsI,EAAErrH,EAAE24G,QAAe35H,KAAKyzC,GAAG,KAAK89R,EAAEvxU,KAAK01D,EAAE,MAAM11D,KAAK6zF,EAAE,IAAK0yK,EAAEouD,WAAW9lM,OAAO,MAAM7uH,KAAKu7H,EAAE,GAAA,EAAK,MAAM,KAAKI,EAAE37H,KAAK01D,EAAE,EAAE11D,KAAK6zF,EAAE,IAAK0yK,EAAEouD,WAAW9lM,OAAO7uH,KAAKu7H,CAAA,EAAGv7H,KAAK4+B,EAAE5+B,KAAK6+H,EAAE7+H,KAAKq1H,EAAEr1H,KAAKiuF,EAAEjuF,KAAK6zC,EAAE7zC,KAAKosC,EAAE,MAAM,QAAQ,MAAM1T,MAAM,sBAAA,CAAA,CAAA,CAAkkE,IAAziE,IAAI64S,EAAE,EAAE51M,EAAE,EAAEg0M,EAAK4B,EAAL5B,EAASh0M,EAAy9C26M,GAAt9ClqS,EAAEuoF,UAAUkB,EAAE,WAAW,KAAK,CAAC71H,KAAKo6H,GAAG,CAAC,IAAIvmC,EAAE29O,EAAExxU,KAAK,CAAA,EAA2B,OAAtB,EAAF6zF,IAAM7zF,KAAKo6H,EAAE,CAAA,GAAIvmC,KAAK,GAAY,KAAK,EAAE,IAAI7yE,EAAEhhB,KAAK4gD,MAAMx3C,EAAEpJ,KAAKoJ,EAAEssD,EAAE11D,KAAK6zF,EAAEj1D,EAAE5+B,KAAK01D,EAAE+5D,EAAEzuG,EAAE5T,OAAOgmR,EAAEzT,EAAM9pJ,EAAEngE,EAAEtoD,OAAOgtH,EAAEulJ,EAAkB,GAAhB3/Q,KAAKghB,EAAEhhB,KAAKyvH,EAAE,EAAUA,GAALrmH,EAAE,EAAM,MAAMsvB,MAAM,wCAAA,EAA6D,GAAnB06P,EAAEpyQ,EAAE5X,CAAA,IAAK4X,EAAE5X,CAAA,KAAM,EAAUqmH,GAALrmH,EAAE,EAAM,MAAMsvB,MAAM,yCAAA,EAA8D,GAAG06P,IAAI,EAAxBpyQ,EAAE5X,CAAA,IAAK4X,EAAE5X,CAAA,KAAM,GAAa,MAAMsvB,MAAM,kDAAA,EAAoD,GAAGtvB,EAAEgqR,EAAEpyQ,EAAE5T,OAAQ,MAAMsrB,MAAM,wBAAA,EAA0B,OAAO14B,KAAKyzC,GAAG,KAAK89R,EAAE,KAAK3yS,EAAEw0P,EAAE19N,EAAEtoD,QAAQ,CAAY,GAALgmR,GAANh5J,EAAEvE,EAAEj3F,EAAU2nO,EAAG7wM,EAAE6gR,IAAIv1T,EAAEw1T,SAASptU,EAAEA,EAAEgxH,CAAA,EAAGx7F,CAAA,EAAGA,GAAGw7F,EAAEhxH,GAAGgxH,OAAO,KAAKA,CAAA,IAAM1kE,EAAE92B,CAAA,IAAK5d,EAAE5X,CAAA,IAAMpJ,KAAK01D,EAAE92B,EAAE82B,EAAE11D,KAAK4+B,EAAA,EAAIA,EAAE5+B,KAAK01D,CAAA,CAAE,MAAM,KAAKimE,EAAE,KAAK/8F,EAAEw0P,EAAE19N,EAAEtoD,QAASsoD,EAAE11D,KAAK4+B,EAAE,CAAC0xD,EAAE,CAAA,CAAA,EAAI,MAAM,QAAQ,MAAM53D,MAAM,sBAAA,CAAA,CAAwB,GAAG6tO,EAAG7wM,EAAE6gR,IAAIv1T,EAAEw1T,SAASptU,EAAEA,EAAEgqR,CAAA,EAAGx0P,CAAA,EAAGA,GAAGw0P,EAAEhqR,GAAGgqR,OAAO,KAAKA,CAAA,IAAM19N,EAAE92B,CAAA,IAAK5d,EAAE5X,CAAA,IAAMpJ,KAAKoJ,EAAEA,EAAEpJ,KAAK01D,EAAE92B,EAAE5+B,KAAK6zF,EAAEn+B,EAAE,MAAM,KAAK,EAAE11D,KAAK6zC,EAAE4iS,EAAGzuN,CAAA,EAAI,MAAM,KAAK,EAAE,IAAI,IAAqF61J,EAAQ64D,EAAQ1jD,EAAgB2jD,EAAjHthN,EAAEm8M,EAAExxU,KAAK,CAAA,EAAG,IAAIswF,EAAEkhP,EAAExxU,KAAK,CAAA,EAAG,EAAE0vH,EAAE8hN,EAAExxU,KAAK,CAAA,EAAG,EAAE00H,EAAE,IAAK6xI,EAAEouD,WAAW9lM,OAAO4iN,EAAErkU,MAAA,EAAoB6wQ,EAAE0B,EAAMi3D,EAAEj3D,EAAE9gJ,EAAE8gJ,EAAEvwJ,EAAEuwJ,EAAMvwJ,EAAE,EAAEA,EAAEM,EAAE,EAAEN,EAAGsF,EAAE+8M,EAAEriN,IAAIoiN,EAAExxU,KAAK,CAAA,EAAG,GAAG,CAACumQ,EAAO,IAAJn3I,EAAEM,EAAMA,EAAEgF,EAAEtnH,OAAOgiH,EAAEM,EAAE,EAAEN,EAAGsF,EAAE+8M,EAAEriN,IAAI,EAA8C,IAA3CyuJ,EAAE5vL,EAAEymC,CAAA,EAAGupJ,EAAE,IAAK1X,EAAEouD,WAAW9lM,OAAOwG,EAAE/kC,CAAA,EAAG8+B,EAAE,EAAMunN,EAAEthN,EAAE/kC,EAAE8+B,EAAEunN,GAAI,OAAO3jD,EAAE6jD,EAAE72U,KAAK69Q,CAAA,GAAM,KAAK,GAAG,IAAIh/I,EAAE,EAAE2yM,EAAExxU,KAAK,CAAA,EAAG6+H,CAAA,IAAMo/I,EAAE7uJ,CAAA,IAAKwnN,EAAE,MAAM,KAAK,GAAG,IAAI/3M,EAAE,EAAE2yM,EAAExxU,KAAK,CAAA,EAAG6+H,CAAA,IAAMo/I,EAAE7uJ,CAAA,IAAK,EAAEwnN,EAAE,EAAE,MAAM,KAAK,GAAG,IAAI/3M,EAAE,GAAG2yM,EAAExxU,KAAK,CAAA,EAAG6+H,CAAA,IAAMo/I,EAAE7uJ,CAAA,IAAK,EAAEwnN,EAAE,EAAE,MAAM,QAAQA,EAAE34D,EAAE7uJ,CAAA,IAAK4jK,CAAA,CAAG7U,EAAIlwL,EAAFs4K,EAAI0X,EAAEu4D,SAAS,EAAEnhN,CAAA,EAAM4oJ,EAAEllO,MAAM,EAAEs8E,CAAA,CAAhB,EAAoBqhN,EAAIzoP,EAAFs4K,EAAI0X,EAAEu4D,SAASnhN,CAAA,EAAM4oJ,EAAEllO,MAAMs8E,CAAA,CAAd,EAAkBr1H,KAAK6zC,EAAEsqO,EAAEu4D,CAAA,EAAG,MAAM,QAAQ,MAAMh+S,MAAM,kBAAkBm7D,CAAA,CAAA,CAAA,CAAI,OAAO7zF,KAAKq1H,EAAA,CAAA,EAAW,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAIo8M,EAAElrE,EAAE,IAAI0vE,YAAYK,CAAA,EAAGA,EAAExjD,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKgkD,EAAEvwE,EAAE,IAAI0vE,YAAYnjD,CAAA,EAAGA,EAAEikD,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAGlkD,EAAEtsB,EAAE,IAAIouD,WAAWoiB,CAAA,EAAGA,EAAEC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,OAAOC,EAAG1wE,EAAE,IAAI0vE,YAAYe,CAAA,EAAGA,EAAEE,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAInkD,EAAExsB,EAAE,IAAIouD,WAAWuiB,CAAA,EAAIA,EAAGp5D,EAAE,IAAKvX,EAAEouD,WAAW9lM,OAAO,GAAA,EAAUgmN,EAAE,EAAMsC,EAAGr5D,EAAE1wQ,OAAOynU,EAAEsC,EAAG,EAAEtC,EAAG/2D,EAAE+2D,GAAQA,GAAL,IAAO,EAAOA,GAAL,IAAO,EAAOA,GAAL,IAAO,EAAE,EAAsD,IAApD,IAAI4B,EAAGxoP,EAAE6vL,CAAA,EAAGs5D,EAAE,IAAK7wE,EAAEouD,WAAW9lM,OAAO,EAAA,EAASqvJ,EAAE,EAAMm5D,EAAGD,EAAEhqU,OAAO8wQ,EAAEm5D,EAAG,EAAEn5D,EAAGk5D,EAAEl5D,GAAG,EAAE,IAAIl2J,EAAG/5B,EAAEmpP,CAAA,EAAG,SAAS5F,EAAE39O,EAAE7yE,GAAG,IAAI,IAA2Cu6G,EAAvCnyH,EAAEyqF,EAAE47B,EAAE/5D,EAAEm+B,EAAE7yE,EAAE4d,EAAEi1D,EAAEjzC,MAAM6uE,EAAE57B,EAAEzqF,EAAEgqR,EAAEx0P,EAAExxB,OAASsoD,EAAE10C,GAAG,CAAC,GAAMoyQ,GAAH3jK,EAAM,MAAM/2F,MAAM,wBAAA,EAA0BtvB,GAAGw1B,EAAE6wF,CAAA,KAAM/5D,EAAEA,GAAG,CAAA,CAAuC,OAArC6lE,EAAEnyH,GAAG,GAAG4X,GAAG,EAAE6yE,EAAE47B,EAAErmH,IAAI4X,EAAE6yE,EAAE7yE,EAAE00C,EAAE10C,EAAE6yE,EAAEzqF,EAAEqmH,EAAS8L,CAAA,CAAE,SAASs7M,EAAEhjP,EAAE7yE,GAAG,IAAI,IAAI5X,EAAEyqF,EAAE47B,EAAE/5D,EAAEm+B,EAAE7yE,EAAE4d,EAAEi1D,EAAEjzC,MAAM6uE,EAAE57B,EAAEzqF,EAAEgqR,EAAEx0P,EAAExxB,OAAOmuH,EAAEv6G,EAAE,GAAG60G,EAAE70G,EAAE,GAAO00C,EAAEmgE,GAAG,EAAKu9J,GAAH3jK,IAAQrmH,GAAGw1B,EAAE6wF,CAAA,KAAM/5D,EAAEA,GAAG,EAA2B,GAAKA,GAAd2/D,GAAhB+E,EAAEmB,EAAEnyH,GAAG,GAAGysH,GAAG,MAAS,IAAW,MAAMn9F,MAAM,wBAAwB28F,CAAA,EAA0B,OAAvBxhC,EAAE47B,EAAErmH,GAAGisH,EAAExhC,EAAE7yE,EAAE00C,EAAE2/D,EAAExhC,EAAEzqF,EAAEqmH,EAAW,MAAF2K,CAAE,CAAo2D,SAAS64J,EAAEp/L,EAAE7yE,GAAG,IAAI5X,EAAEssD,EAAyH,GAAvH11D,KAAK4gD,MAAMizC,EAAE7zF,KAAKoJ,EAAE,GAAK4X,GAAYA,EAAE8jB,QAAQ9kC,KAAKoJ,EAAE4X,EAAE8jB,OAAO9jB,EAAEs2T,SAAnCt2T,EAAE,GAAJ,MAA8ChhB,KAAKuxU,EAAEvwT,EAAEs2T,QAAQluU,EAAEyqF,EAAE7zF,KAAKoJ,CAAA,IAAKssD,EAAEm+B,EAAE7zF,KAAKoJ,CAAA,KAAc,GAAFA,KAAWmuU,EAAgC,MAAM7+S,MAAM,gCAAA,EAAkC,GAA3E14B,KAAKgjB,OAAOu0T,EAAkE,KAAMnuU,GAAG,GAAGssD,GAAG,GAAI,MAAMh9B,MAAM,yBAAyBtvB,GAAG,GAAGssD,GAAG,EAAA,EAAI,GAAK,GAAFA,EAAM,MAAMh9B,MAAM,6BAAA,EAA+B14B,KAAKovH,EAAE,IAAIhjF,EAAEynD,EAAE,CAAC/uD,MAAM9kC,KAAKoJ,EAAEgtU,WAAWp1T,EAAEo1T,WAAWC,WAAWr1T,EAAEq1T,WAAW18M,OAAO34G,EAAE24G,MAAA,CAAA,CAAA,CAA/xEvtF,EAAEuoF,UAAU9gF,EAAE,SAASggD,EAAE7yE,GAAG,IAAI5X,EAAEpJ,KAAK6zF,EAAEn+B,EAAE11D,KAAK01D,EAAE11D,KAAK49Q,EAAE/pL,EAAE,IAAI,IAAmB47B,EAAE2jK,EAAE73J,EAAE1F,EAArBj3F,EAAEx1B,EAAEgE,OAAO,IAAY,OAAOqiH,EAAEonN,EAAE72U,KAAK6zF,CAAA,IAAM,GAAO47B,EAAJ,IAAU7wF,GAAH82B,IAAO11D,KAAK01D,EAAEA,EAAEtsD,EAAEpJ,KAAK4+B,EAAA,EAAI82B,EAAE11D,KAAK01D,GAAGtsD,EAAEssD,CAAA,IAAK+5D,OAAmI,IAApHoG,EAAEihN,EAAV1jD,EAAE3jK,EAAE,KAAW,EAAEojK,EAAEO,KAAKv9J,GAAG27M,EAAExxU,KAAK6yR,EAAEO,EAAA,GAAK3jK,EAAEonN,EAAE72U,KAAKghB,CAAA,EAAGu6G,EAAE07M,EAAGxnN,GAAG,EAAEsjK,EAAEtjK,KAAK8L,GAAGi2M,EAAExxU,KAAK+yR,EAAEtjK,EAAA,GAAQ7wF,GAAH82B,IAAO11D,KAAK01D,EAAEA,EAAEtsD,EAAEpJ,KAAK4+B,EAAA,EAAI82B,EAAE11D,KAAK01D,GAAQmgE,CAAA,IAAMzsH,EAAEssD,GAAGtsD,EAAEssD,CAAA,GAAI6lE,GAAK,KAAK,GAAGv7H,KAAKghB,GAAIhhB,KAAKghB,GAAG,EAAEhhB,KAAKoJ,CAAA,GAAIpJ,KAAK01D,EAAEA,CAAA,EAAGtpB,EAAEuoF,UAAUvoF,EAAE,SAASynD,EAAE7yE,GAAG,IAAI5X,EAAEpJ,KAAK6zF,EAAEn+B,EAAE11D,KAAK01D,EAAE11D,KAAK49Q,EAAE/pL,EAAE,IAAI,IAAe47B,EAAE2jK,EAAE73J,EAAE1F,EAAjBj3F,EAAEx1B,EAAEgE,OAAe,OAAOqiH,EAAEonN,EAAE72U,KAAK6zF,CAAA,IAAM,GAAO47B,EAAJ,IAAU7wF,GAAH82B,IAAkB92B,GAAXx1B,EAAEpJ,KAAK4+B,EAAA,GAAQxxB,QAAQhE,EAAEssD,CAAA,IAAK+5D,OAA6H,IAA9GoG,EAAEihN,EAAV1jD,EAAE3jK,EAAE,KAAW,EAAEojK,EAAEO,KAAKv9J,GAAG27M,EAAExxU,KAAK6yR,EAAEO,EAAA,GAAK3jK,EAAEonN,EAAE72U,KAAKghB,CAAA,EAAGu6G,EAAE07M,EAAGxnN,GAAG,EAAEsjK,EAAEtjK,KAAK8L,GAAGi2M,EAAExxU,KAAK+yR,EAAEtjK,EAAA,GAAS7wF,EAAJ82B,EAAEmgE,IAAiBj3F,GAAXx1B,EAAEpJ,KAAK4+B,EAAA,GAAQxxB,QAAayoH,CAAA,IAAMzsH,EAAEssD,GAAGtsD,EAAEssD,CAAA,GAAI6lE,GAAK,KAAK,GAAGv7H,KAAKghB,GAAIhhB,KAAKghB,GAAG,EAAEhhB,KAAKoJ,CAAA,GAAIpJ,KAAK01D,EAAEA,CAAA,EAAGtpB,EAAEuoF,UAAU/1F,EAAE,WAAW,IAA4Dx1B,EAAEssD,EAA1Dm+B,EAAE,IAAK0yK,EAAEouD,WAAW9lM,OAAO7uH,KAAK01D,EAAE,KAAA,EAAO10C,EAAEhhB,KAAK01D,EAAE,MAAU92B,EAAE5+B,KAAK6zF,EAAE,GAAG0yK,EAAG1yK,EAAE0iP,IAAI33S,EAAE43S,SAAS,MAAM3iP,EAAEzmF,MAAA,CAAA,OAAkB,IAAJhE,EAAE,EAAMssD,EAAEm+B,EAAEzmF,OAAOhE,EAAEssD,EAAE,EAAEtsD,EAAGyqF,EAAEzqF,GAAGw1B,EAAEx1B,EAAE,OAAwC,GAAhCpJ,KAAKozR,EAAE9iR,KAAKujF,CAAA,EAAG7zF,KAAK2/Q,GAAG9rL,EAAEzmF,OAAUm5P,EAAG3nO,EAAE23S,IAAI33S,EAAE43S,SAASx1T,EAAI,MAAFA,CAAE,CAAA,OAAa,IAAI5X,EAAE,EAAQA,EAAN,MAAQ,EAAEA,EAAGw1B,EAAEx1B,GAAGw1B,EAAE5d,EAAE5X,GAAiB,OAAbpJ,KAAK01D,EAAE,MAAa92B,CAAA,EAAGwN,EAAEuoF,UAAUkK,EAAE,SAAShrC,GAAG,IAAI7yE,EAAE5X,EAAEpJ,KAAK4gD,MAAMxzC,OAAOpN,KAAKoJ,EAAE,EAAE,EAAQgqR,EAAEpzR,KAAK4gD,MAAM26E,EAAEv7H,KAAK6zF,EAA8M,OAA5MA,IAAI,UAAW,OAAOA,EAAEvD,IAAIlnF,EAAEyqF,EAAEvD,GAAG,UAAW,OAAOuD,EAAEoqL,KAAI70Q,GAAGyqF,EAAEoqL,GAAqDr/O,EAA/Cx1B,EAAF,GAAmCqmH,GAA3B2jK,EAAEhmR,OAAOpN,KAAKoJ,GAAGpJ,KAAK49Q,EAAE,GAAY,EAAP,IAAU,GAAMriJ,EAAEnuH,OAAOmuH,EAAEnuH,OAAOqiH,EAAE8L,EAAEnuH,QAAQ,EAAKmuH,EAAEnuH,OAAOhE,EAAEm9P,GAAGvlP,EAAE,IAAI2zS,WAAW/1R,CAAA,GAAK23S,IAAIh7M,CAAA,EAAIv6G,EAAEu6G,EAASv7H,KAAK6zF,EAAE7yE,CAAA,EAAGorB,EAAEuoF,UAAUU,EAAE,WAAW,IAA0B3/D,EAAoD+5D,EAAE2jK,EAAE73J,EAAE1F,EAAhFhiC,EAAE,EAAE7yE,EAAEhhB,KAAK6zF,EAAEzqF,EAAEpJ,KAAKozR,EAAIx0P,EAAE,IAAK2nO,EAAEouD,WAAW9lM,OAAO7uH,KAAK2/Q,GAAG3/Q,KAAK01D,EAAE,MAAA,EAAgB,GAAG,IAAItsD,EAAEgE,OAAQ,OAAOm5P,EAAEvmQ,KAAK6zF,EAAE2iP,SAAS,MAAMx2U,KAAK01D,CAAA,EAAG11D,KAAK6zF,EAAE96C,MAAM,MAAM/4C,KAAK01D,CAAA,EAAO,IAAJ+5D,EAAE,EAAM2jK,EAAEhqR,EAAEgE,OAAOqiH,EAAE2jK,EAAE,EAAE3jK,EAAc,IAAJ8L,EAAE,EAAM1F,GAAfngE,EAAEtsD,EAAEqmH,IAAeriH,OAAOmuH,EAAE1F,EAAE,EAAE0F,EAAG38F,EAAEi1D,CAAA,IAAKn+B,EAAE6lE,GAAY,IAAR9L,EAAE,MAAU2jK,EAAEpzR,KAAK01D,EAAE+5D,EAAE2jK,EAAE,EAAE3jK,EAAG7wF,EAAEi1D,CAAA,IAAK7yE,EAAEyuG,GAAa,OAAVzvH,KAAKozR,EAAE,GAAUpzR,KAAK8uQ,OAAOlwO,CAAA,EAAGwN,EAAEuoF,UAAU1mC,EAAE,WAAW,IAAI4F,EAAE7yE,EAAEhhB,KAAK01D,EAAkI,OAAhI6wM,EAAEvmQ,KAAKqsI,GAAGx4C,EAAE,IAAI8gO,WAAW3zS,CAAA,GAAKu1T,IAAIv2U,KAAK6zF,EAAE2iP,SAAS,EAAEx1T,CAAA,CAAA,EAAK6yE,EAAE7zF,KAAK6zF,EAAE2iP,SAAS,EAAEx1T,CAAA,GAAIhhB,KAAK6zF,EAAEzmF,OAAO4T,IAAIhhB,KAAK6zF,EAAEzmF,OAAO4T,GAAG6yE,EAAE7zF,KAAK6zF,GAAU7zF,KAAK8uQ,OAAOj7K,CAAA,EAA6co/L,EAAEt+J,UAAUkB,EAAE,WAAW,IAAIhiC,EAAE7zF,KAAK4gD,MAAU5/B,EAAEhhB,KAAKovH,EAAEyG,EAAA,EAAoB,GAAhB71H,KAAKoJ,EAAEpJ,KAAKovH,EAAEhmH,EAAKpJ,KAAKuxU,EAAE,CAAoE,IAAnEnoU,GAAGyqF,EAAE7zF,KAAKoJ,CAAA,KAAM,GAAGyqF,EAAE7zF,KAAKoJ,CAAA,KAAM,GAAGyqF,EAAE7zF,KAAKoJ,CAAA,KAAM,EAAEyqF,EAAE7zF,KAAKoJ,CAAA,OAAQ,EAAMssD,EAAE10C,EAAE,GAAG,UAAW,OAAO00C,EAAE,CAA2B,IAA1B,IAAI92B,EAAE82B,EAAE9hC,MAAM,EAAA,EAAQ67F,EAAE,EAAM2jK,EAAEx0P,EAAExxB,OAAOqiH,EAAE2jK,EAAE3jK,CAAA,GAAK7wF,EAAE6wF,IAAuB,IAAnB7wF,EAAE6wF,GAAG46D,WAAW,CAAA,KAAU,EAAE30H,EAAE92B,CAAA,CAAE,IAAI,IAAuBy2F,EAAnBkG,EAAE,EAAE1F,EAAE,EAAEuE,EAAE1kE,EAAEtoD,OAASkjF,EAAE,EAAE,EAAE8pC,GAAG,CAAsB,IAALA,GAAhB/E,EAAE,KAAK+E,EAAE,KAAKA,EAAoBvE,GAAV0F,GAAG7lE,EAAE46B,CAAA,IAAgB,EAAE+kC,IAAGkG,GAAG,MAAM1F,GAAG,KAAA,CAAM,GAAGzsH,IAAKysH,GAAG,GAAG0F,KAAK,EAAG,MAAM7iG,MAAM,2BAAA,CAAA,CAA8B,OAAO1X,CAAA,EAAG,IAAiHw2T,EAAEC,EAAEl3R,EAAEm3R,EAAnHH,EAAG,EAA+EI,GAA7EtrM,EAAE,eAAe4mJ,CAAA,EAAG5mJ,EAAE,oCAAoC4mJ,EAAEt+J,UAAUkB,CAAA,EAAS,CAAC+hN,SAASjI,EAAIkI,MAAMlI,CAAE,GAAY,GAAGtuT,OAAOwkC,KAAM2xR,EAAEn2T,OAAOwkC,KAAK8xR,CAAA,OAAQ,IAAIF,KAAKD,EAAE,GAAGj3R,EAAE,EAAEo3R,EAAGH,EAAEj3R,CAAA,IAAKk3R,EAAO,IAAJl3R,EAAE,EAAMm3R,EAAGF,EAAEpqU,OAAOmzC,EAAEm3R,EAAG,EAAEn3R,EAAU8rF,EAAE,4BAATorM,EAAED,EAAEj3R,IAAkCo3R,EAAEF,EAAA,CAAA,EAAO7iN,KAAK50H,IAAA,EAAUkJ,OAAOknQ,QAAOlnQ,OAAOknQ,MAAM,IAAGlnQ,OAAOknQ,MAAMC,WAAWA,WAAWnnQ,OAAOknQ,MAAM4sD,wBAAwBA,uBAAA,EAA0B9zT,MAAA,EAC51hF,CAAA,WACE,aAOA,SA5cM4uU,EAA0B54U,EAAYyK,GA6cjC3J,KACN0kI,IA5cC,IAAOxgF,KA2cFlkD,KAENmH,SAAWwC,EAAOxC,SAASoa,IAAI,SAASoV,GAGzC,OAFAA,EAAQohT,aAAe,IAAI7zR,KAAKvtB,EAAQohT,YAAA,EACxCphT,EAAQqhT,SAAW,IAAI9zR,KAAKvtB,EAAQqhT,QAAA,EAC7BrhT,C,GALA32B,KAQNy+B,MAEH,WACEv/B,EAAUwC,OAAA,C,mCAjBd1D,QACGC,OAAO,UAAA,EACPK,WAAW,kCAAmCw5U,CAAA,C,IAqBnD,CAAA,WACE,aAuBA,SAASG,EAAoC95U,EACA+5U,EA3cZ94U,EACUI,EACJo9C,EA6cM79C,EACAygD,EACA24R,EACA16T,EACA/X,EACA0yU,EACAC,EACAx4U,EACAoe,EACA22E,EACA0jP,EACA37R,EACAz9C,EACAI,GAE3C,IA5cES,EAAMC,KAkiBR,SA5cQu4U,EAAkBv7R,GA6cxB,OA5ca,IAAXA,EAAAw7R,UA6cO,4BAEF,E,CAgNT,SAASpmS,IACPryC,EAAGoe,QAAU,CAAA,EACbzY,EAAM,CACJ4E,IAAKlL,EAAImL,KAAKnK,YAAYurJ,YAAYlhJ,QAAQ,QAAS,EAAA,EAAIA,QAAQ,UAAW,EAAA,EAC9EuY,OAAQ,MA3cVC,QAAA,CACEC,cAAiB,SAAArjB,EAAesjB,MA6c9BC,eAAgB,kB,EAElBzZ,OAAQ,CACNma,WAAY,YACZhU,WAAY3R,EAAOmH,KACnBuK,SAAU1R,EAAOmF,MAAM/C,GACvBuY,OAAQ/Y,EAAG66C,WACXxtC,OAAQrN,EAAGc,OAAOqgB,SAClBD,KAAMlhB,EAAGc,OAAOsxC,WAChBlG,MAAOlsC,EAAGc,OAAOqgB,UAAYnhB,EAAGc,OAAOsxC,WAAa,E,IAErDrtC,KAAK,SAASnE,GACfZ,EAAG6hB,kBAAoB,CAAA,EACvB7hB,EAAG8gB,YAAY/X,KAAO,GA1ctB,IAAA,IAAO2qC,EAAI,EAAAA,EAAM9yC,EAAAmI,KAAeA,KAAOsE,OAAOqmC,CAAA,GAAA,CA6c5C,IAAIglS,EAAiB,IAAIH,EAAe33U,EAASmI,KAAKA,KAAK2qC,EAAA,EAC3D1zC,EAAG8gB,YAAY/X,KAAKwH,KAAKmoU,CAAA,EAc7B14U,EAAG24U,yBAbmCD,EAaE7hU,YAAc,CACpDmS,OAdoC0vT,EAchBE,2BACpBC,kCAfoCH,EAeWI,2CAC/ChxT,mBAhBoC4wT,EAgBJrjS,gBAChCttB,aAjBoC2wT,EAiBVlsP,kB,EAd1BxsF,EAAG8gB,YAAYmE,WAAarkB,EAASmI,KAAKogF,gBAC1CnpF,EAAGoe,QAAU,CAAA,C,GAEZ7Q,MAAM,SAASC,GACd,MAAMA,C,GAcZ,SA5cQurU,EAAaC,EAAAC,GA6cQ,KAAvBD,EAAezjS,KAAeyjS,EAAe3jS,iBAIjDh2C,EAAIgB,YAAYurJ,YAAY5kJ,KAC1BgyU,EACA,SAASp4U,EAAUC,EAAUC,GACvBA,IAAWrB,EAAYsB,aACrBm4U,EAAiB,IAAIX,EAAe33U,CAAA,EACpCq4U,EA3cV9vU,OAAAlL,QAAkBqhB,OAAS25T,EAAIC,CAAA,EA8cvBl5U,EAAG8gB,YAAY/X,KAAKwH,KAAK2oU,CAAA,GAGvBt4U,EAAS4M,OACPiE,EAAe,UAAY7Q,EAAS4M,MACxCxO,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAakS,EAAc,CAAE3Q,OAAQF,EAAS8Q,YAAA,CAAA,CAAA,EAAiBhQ,SAAS,WAAA,CAAA,GAE5H1C,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,GAyM5G,SA9cMyyC,IA+cJn1C,EA9cIuC,KAAQvC,EAAUwC,OAAA,EAAGC,YAAWlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,CArGtC1B,EAAGgf,QAAU,GACbhf,EAAGs4U,uBAAyBA,EAC5Bt4U,EAAGse,QAAU,KACbte,EAAG6hB,kBAAoB,CAAA,EACvB7hB,EAAGq0C,WAAaj2C,EAAOmF,MAAMC,YAC7BxD,EAAGoe,QAAU,CAAA,EACbpe,EAAGc,OAAS,CACV8R,MAAO,GACPwO,SAAU,GACVrI,OAAQ,GACR+I,QAAS,GACTswB,WAAY,EACZjxB,SAAUjD,EAAcmE,iB,EAE1BriB,EAAG24U,yBAA2B,GAC9B34U,EAAG+pF,YAAc,CACfx0C,IAAK,GA3cLvsB,OAAO,EA6cPjB,aA5cc/nB,EAAA6xB,YA6cd/J,mBA5ca,KA6cb4sB,SAAU,CAAA,EACVykS,2BAA4B/6U,EAAOmF,MAAM/C,E,EAG3CR,EAAG66C,WAAa,GAChB76C,EAAGo5U,6BAA+B,CAAA,EAElCp5U,EAAGqyC,kBAAoBA,EACvBryC,EAAGq5U,2BA6fH,SAAoCC,EAAU1tL,GA7c5CA,EAAAprJ,GAmdAnB,EAAIgB,YAAYurJ,YAAYlxI,OAAO,CAC/B5K,SAAU1R,EAAOmF,MAAM/C,GA7c7BuP,WAAS3R,EAAAmH,KACH/E,GAAIorJ,EAAAprJ,GACN+4U,SAAOv5U,EAAAs4U,uBAAA,sB,EAET,SAAO13U,EAAAC,EAAAC,GA+cCA,IAAWrB,EAAYkb,qBACrB3a,EAAG8gB,YAAY/X,KAAKuwU,GAAU/jS,KA7cjCv1C,EAAA24U,yBAA2B/sL,EAAA/0I,YAAAmS,MAAA,GAEhChpB,EAAA8gB,YAAc/X,KAAAi8B,OAAAs0S,EAAA,CAAA,GAEZnlS,EAAA,C,GA6bFn0C,EAAG8gB,YAAY/X,KAAKi8B,OAAOs0S,EAAU,CAAA,C,EA9fzCt5U,EAAGw5U,kBAmVH,SAA2Bv8R,GACzBj9C,EAAG8gB,YAAY/X,KAAKwH,KAAK,IAAIgoU,EAAe,CAC1ChjS,IAAK,GA3cZ1+B,WAAWomC,EAAApmC,WACNg3B,aAAOoP,EAAWpP,aACpBwH,gBAAO4H,EAAA5H,gBA6cHZ,iBA5cYwI,EAAAxI,iBAChBq8G,qBAAiB7zG,EAAA6zG,qBA6cbt+G,aA5cCyK,EAAAzK,aACLxpB,OAAY,EA6cRxoB,GAAI,KACJgnC,UAAWyV,EAAIuvC,mBACf18E,SAAU1R,EAAOmF,MAAM/C,GACvBuP,WAAY3R,EAAOmH,KA3c1B7E,OAAS,eA6cF64U,SAAUv5U,EAAGs4U,uBAAuB,sBA3c5CQ,2CAA4C77R,EAAW67R,2CA6c/CpkS,SAAU,CAAA,C,KAnWd10C,EAAGy5U,eALH,SAAG7tL,EAA+B4/D,EAAAkuH,GA+c3BluH,GAAekuH,GAAc9tL,EAAYv2G,kBA3c7Cu2G,EAAAprJ,GAmBCnB,EAAGgB,YAAQurJ,YAAc5kJ,KA+cvB,CA7cExG,GAAAorJ,EAAcprJ,GAChBE,OAAO,eACL2yH,YAASm4F,EACT3lH,WAAG6zO,EA+cH3pU,WAAY3R,EAAOmH,KACnBuK,SAAU1R,EAAOmF,MAAM/C,E,EA5czB,SAAGI,EAAUC,EAASC,GACjBA,IAAUrB,EAAAsB,aAEZf,EAAA24U,yBAAA/sL,EAAA/0I,YAAAmS,OAAApoB,EAAAg4U,2BA+cmB,oBAAdc,IACF9tL,EAAY+tL,qBAAuB/4U,EAAS+4U,uBA5c3C74U,IAAcrB,EAAAkE,mBAChB8N,EAAA,UAAmB7Q,EAAA4M,MACrBxO,EAAOuC,KAAAvC,EAAawC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAAkS,CAAA,CAAA,EAAA/P,SAAA,WAAA,CAAA,GAEvByyC,EAAA,C,GAtCH4kS,EAAiB,CACjBxjS,IAAAq2G,EAAAr2G,KAAuB,GACvB1+B,WAAA+0I,EAAuB/0I,WACvBg3B,aAAA+9G,EAAoB/9G,aACpBwH,gBAAAu2G,EAAuBv2G,gBACvBy7G,qBAAwBlF,EAAAkF,qBA+crBt+G,aAAco5G,EAAYp5G,aA7c7BxpB,OAAA4iI,EAAc5iI,QAAc,EAC7BxoB,GAAA,KACAgnC,UAAeokH,EAAAp/D,mBACf18E,SAAA1R,EAAgBmF,MAAA/C,GA+cZuP,WAAY3R,EAAOmH,KACnB7E,OAAQ,eACR64U,SAAUv5U,EAAGs4U,uBAAuB,sBA7c1CQ,2CAAoCltL,EAAAktL,2CAC/BpkS,SAAU,CAAA,C,EA+cRk3G,CAAA,E,EA7dP5rJ,EAAG45U,qBAsWH,SAA8B5/T,GAC5B++T,EAA0B,CA5c9BliU,WAAAmD,EAAAxZ,GACGqtC,aAAO7zB,EAAAsD,KACPwzI,qBAAW,KA8cRt+G,aAAc,KACdhyC,GAAI,KA5cVgnC,UAASppC,EAAAmF,MAAAqhE,oBACHlwB,SAAK,CAAA,EACN6kS,SAAUv5U,EAAAs4U,uBAAA,sBACVxoU,SAAW1R,EAAOmF,MAAA/C,GACnBuP,WAAQ3R,EAAAmH,KACR7E,OAAQ,eACRsoB,OAAO,EA8cLusB,IAAK,E,IAnXTv1C,EAAG2yC,qBAhCH,SAAa35B,GACb,IAAGrS,EAAA1I,QAAAmH,QAAyBsB,SAAAC,IAAA,EACzBisC,EAAU30C,QAAAmH,QAAA,aAAA,EACbwtC,EAAGC,IAAA,CAAAnxC,SAAoB,QAAAoxC,QAAA,GAAA,CAAA,EACvBF,EAAGG,IAAA/5B,CAAA,EACHrS,EAAGqsC,OAAUJ,CAAA,EACbA,EAAG,GAAS3M,OAAA,EACV,IACA,IAAAgN,EAAUvsC,SAAAwsC,YAAA,MAAA,EACV,GAAAD,CAAAA,EASA,MAAAA,EARAj0C,EAASuC,KACTvC,EACAwC,OAAA,EA+cSC,YAAYlC,EAAQ,WAAA,EAAa,gBAAA,CAAA,EA7czCmC,SAAA,WAAA,EACAiL,UAAc,GAAA,C,EAKf,MAAAwmC,IAgdAP,EAASQ,OAAA,C,EAncXpzC,EAAG65U,kBAvFH,SAAiBznT,GACf,MAAA,CAAApyB,EAAUq0C,YAAAjiB,C,EAuFZpyB,EA5cE85U,qBAq0BF,SAA8B78R,GAC5B,IAAI88R,EAAqB/5U,EAAG24U,yBAAyB17R,EAAIpmC,YA3c9D1X,EAAWoC,KAAA,CACVhD,WAAA,6BA8cMK,aAAc,KACdC,YAAa,6EA7cnBsG,OAAAlH,QAAAmH,QAAAsB,SAAAC,IAAA,EACG9B,oBAAO,CAAA,EACPgC,OAAW,CACXyhF,UAAU,mBA+cLjI,4BAA6B,CAC3B7/E,GAAIu5U,EAAmB,kCA7cxBl5P,eAAA,GACAL,gBAAA,C,EAELlpC,oBAAa,KACbrvB,iBAAO8xT,EAAA,mBACLloT,YAAOkoT,EAAA,aACP5xP,YAAM,CAAA,EA+cJC,QAAS,CAAA,EA7cbG,YAAY,GACZC,WAAc,KA+cVj0C,WAAY,KACZ8a,WAAY,KACZg5B,cAAe,KACfruE,QAAS,I,IA5cjBjV,KAAS,SAAAqB,GA+cHA,EAAQjF,QAAQ,SAAS0rF,GACvBksP,EAA0B,CACxB/vT,OAAQ,EACRgxT,gBAAiBntP,EACjBrlD,UAAWuyS,EAAmB,aAC9BjqU,SAAU1R,EAAOmF,MAAM/C,GACvBuP,WAAY3R,EAAOmH,KACnB7E,OAAQ,eACR64U,SAAUv5U,EAAGs4U,uBA9csB,sBA+cnCQ,2CA9cmCiB,EAAA,kCA+cnCrlS,SAAU,CAAA,C,MAGb,Y,GAlaL10C,EAAGi6U,sBAgQH,WACE,MAAuB,0BAAhB77U,EAAOmH,MAAqD,sBAAhBnH,EAAOmH,MAAgCnH,EAAOmF,MAAMw/O,wB,EA/PzG/iP,EAAG8gB,YAAc5C,EAAcsF,eAAe,CAC5C02T,2BAA4B,CAAA,EAC5Bz2T,cAKF,SAA2BnF,GACzBte,EAAGse,QAAUA,EAEbte,EAAGse,QAAQoF,KAAKC,GAAGC,wBAAwBxlB,EAAQ,SAASylB,GAC1D7jB,EAAGgf,QAAQ6E,EAAcC,OAAOjF,OAAOK,QAAU2E,EAAcC,OAAO5E,QAElE2E,EAAcC,OAAO5E,SACnBlf,EAAG6L,UACL6R,EAAS/b,OAAO3B,EAAG6L,OAAA,EACnB7L,EAAG6L,QAAU,MAGb7L,EAAG6hB,oBACL7hB,EAAG6L,QAAU6R,EAAS,WACpB1d,EAAG6L,QAAU,KACbwmC,EAAA,C,EA3cN,GAAA,E,GAgdAryC,EA5cEse,QAAIyF,WAAUJ,GAAOK,kBAAmB5lB,EAAA,SAAgB6lB,EAAM9C,GAC5DnhB,EAAA6hB,oBA6cA7hB,EAAGc,OAAOsxC,WAAanuB,EA3czBjkB,EAAIc,OAAQqgB,SAAUA,EACtBkxB,EAAA,E,GAgdFryC,EAAGse,QAAQ6F,KAAKiqE,2BAA2B,WACzCpuF,EAAGse,QAAQ+vE,SAASC,cAAA,C,GAiBxB,WAkME,IAAK,IAAIlvE,KAjMTnhB,QAAQqhB,OAAOtf,EAAGgf,QAAS,CACzBwzB,aAAc,CACZjzB,YAAahgB,EAAQ,WAAA,EAAa,iBAAA,EAClCsf,MAAO,eACPmwE,SAAU,CAAEC,cAAe,CAAA,EAC3BxvE,WAAY,CAAA,EA3chBP,QAAA,CAAA,EACEi7T,YAAS,CAAA,EA6cPt5T,iBAAkB,CAAA,EAClBkF,MAAO,IACP0vB,KAAM,CAAEC,SAAU,EAAGC,UAAW,MAAA,EAChCn1B,cAAe,CAAA,EACfb,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAW,SAASyE,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GA3c1D,OAAY7B,EAAAv7R,CAAA,C,EA8cNl9B,aAAc,kjD,EA0BhBu6T,QAAS,CACP/6T,YAAahgB,EAAQ,WAAA,EAAa,eAAA,EAClCsf,MAAO,iBACPY,WAAY,CAAA,EACZP,QA9IG,EAAA,0BAAA9gB,EAAAmH,MAAA,CAAAnH,EAAAmF,MAAAitC,kBA7TPxqB,SAAU,IA6cNnF,iBAAkB,CAAA,EA3cpBlB,cAAc,CAAA,EACZa,cAAW,CAAA,EA6cXZ,WA5cM,CAAA,EA6cNC,aA5cY,CAAA,EA6cZH,UA5cI,SAAeyE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GA6cjB,OAAO7B,EAAmBv7R,CAAA,EAAO,0B,EAEnCl9B,aA5cK,qH,EA8cP+wI,qBAAsB,CACpBvxI,YAAahgB,EAAQ,WAAA,EAAa,yBAAA,EAClCsf,MAAO,uBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACT8G,SAAU,IACVxF,cAAe,CAAA,EACfb,cAAe,CAAA,EACfC,WAAY,CAAA,EACZiB,iBAAkB,CAAA,EAClBhB,aAAc,CAAA,EA3clBH,UAAS,SAASyE,EAAU84B,EAAM4kC,EAAAu4P,EAAAC,GA6c5B,OAAO7B,EAAmBv7R,CAAA,C,EA1c5Bl9B,aAAW,oxB,EAudb61B,WAAY,CACVr2B,YAAahgB,EAAQ,WAAA,EAAa,0BAAA,EAClCsf,MAAO,aACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACT2B,iBAAkB,CAAA,EA3cxBlB,cAAU,CAAA,EA6cJa,cAAe,CAAA,EACfZ,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAW,SAASyE,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GAClD,OAAO7B,EAAmBv7R,CAAA,C,EAE5Bl9B,aAAc,mhC,EAahBiJ,OAAQ,CACNzJ,YAAahgB,EAAQ,WAAA,EAAa,gBAAA,EAClCsf,MAAO,SACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACT2B,iBAAkB,CAAA,EAClBmF,SAAU,IACVuvE,oBAAqB8iP,EAAwB7iP,YAAYC,IACzD91E,cAAe,CAAA,EACfa,cAAe,CAAA,EA3cnBZ,WAAA,CAAA,EACEC,aAAa,CAAA,EA6cXH,UAAW,SAASyE,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GAClD,OAAO7B,EAAmBv7R,CAAA,EAAO,0B,EAEnCl9B,aAAc,qyB,EAnchBq1B,gBAAS,CACP71B,YAAAhgB,EAAA,WAAA,EAAA,yBAAA,EA6cAsf,MAAO,kBACPY,WAAY,CAAA,EA3cdoB,iBAAa,CAAA,EACX3B,QAAQ,CAAA,EA6cR8G,SA5cK,IACLrG,cAAa,CAAA,EA6cba,cAAe,CAAA,EACfZ,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAW,SAASyE,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GAClD,OAAO7B,EAAmBv7R,CAAA,C,EAE5Bl9B,aAAc,yuB,EAUhBrF,OAAQ,CACN6E,YAAa,GACbV,MAAO,SACPY,WAAY,CAAA,EA3cbP,QAAA,CAAA,EA6cC6G,MAAO,GACPpG,cAAe,CAAA,EACfa,cAAe,CAAA,EACfK,iBAAkB,CAAA,EAClBjB,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAW,SAASyE,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GA3cxD,OAAW7B,EAAev7R,CAAA,C,EA8ctBl9B,aAAc,07C,IAoBF/f,EAAGgf,QACbhf,EAAGgf,QAAQI,GAAKK,YA3ctBzf,EAAA8gB,YAAeC,WAAMxQ,KAAAvQ,EAAAgf,QAAAI,EAAA,C,EA0PrB,EAEA1B,EAAS,WACP20B,EAAA,C,EACC,GAAA,C,EAxCH4D,eAAgB,CAAA,C,4SApFpBh4C,QACGC,OAAO,UAAA,EACPK,WAAW,sCAAuC25U,CAAA,EAClD15U,UAAU,4BAGb,WACE,MAAO,CACLC,SAAU,IACVI,YAAa,+FA3cfH,MAAM,CA6cF6E,MAAO,IACPgC,KAAM,G,EAERhH,WAAY,sCACZK,aAAc,I,EAZwB,C,IAkmB5C,CAAA,WACE,aAuBA,SAAS27U,EA9cCn8U,EACAiB,EACAm7U,EA+c0B/6U,EA7crBT,EACc0e,EACd5d,EACKoe,EACHu8T,EACCnC,EACQ/4U,GAgdxB,IAAIS,EA9cEC,KA2CAqqB,GAqaNtqB,EAAGy6U,0BA9ciBA,EA+cpBz6U,EAAGs4U,uBA9cuBA,EAid1Bt4U,EAAGgf,QA9cG,GA+cNhf,EAAGse,QAAU,KACbte,EAAG6hB,kBA9cC,CAAA,EA+cJ7hB,EAAGoe,QA9cG,CAAA,EA+cNpe,EAAGc,OA9cG,CA+cJ8R,MA9cI,GA+cJwO,SA9cI,GA+cJrI,OA9cI,GA+cJ+I,QA9cI,GA+cJswB,WA9cI,EA+cJjxB,SA9cIjD,EAAYmE,iB,EAidlBriB,EAAG06U,gBA9ccA,EAgdjB16U,EAAG8gB,YAAc5C,EAAcsF,eAAe,CAC5CC,cAmCF,SA9cQnF,GA+cNte,EAAGse,QAAUA,EAEbte,EAAGse,QA9cCoF,KAAAC,GAAaC,wBAAqBxlB,EAAA,SAAAylB,GA+cpC7jB,EA9cEgf,QAAO6E,EAAAC,OAAAjF,OAAAK,QAAA2E,EAAAC,OAAA5E,QAEP2E,EAASC,OAAA5E,SACTlf,EAAA6L,UACA6R,EAAU/b,OAAA3B,EAAA6L,OAAA,EACV7L,EAAA6L,QAAA,MAGA7L,EAAA6hB,oBA8bJ7hB,EAAGc,OA9cG8R,MAAA5S,EAAAse,QAAAC,UAAAvX,KAAA,EA+cNwX,aA9cMC,QAAA3e,EAAAga,QAAAtZ,GAAA,qCAAAke,KAAAC,UAAA3e,EAAAc,MAAA,CAAA,EAiBFd,EAAA6L,QAAW6R,EAAS,WAClB1d,EAAA6L,QAAO,KA+cP6uU,EAAA,C,EA7cF,GAAA,E,GAkdJ16U,EAAGse,QA9cGyF,WAAAJ,GAAAK,kBAAA5lB,EAAA,SAAA6lB,EAAA9C,GACAnhB,EAAA6hB,oBA+cF7hB,EA9cEc,OAAAsxC,WAAAnuB,EA+cFjkB,EA9cEc,OAAAqgB,SAAAA,EA+cFu5T,EAAA,E,GAoCN,SA9ciB37T,GA8sBf,IAAK,IA9cCK,KA+MNnhB,QA9cMqhB,OAAOtf,EAAAgf,QAAA,CA+cXgqI,iBAAkB,CA7chBzpI,YAAA,GA+cAV,MA9cE,mBA+cFY,WA9cE,CAAA,EA+cFP,QA9cE,CAAA,EA+cFsB,cA9cE,CAAA,EA+cFuF,MA9cE,GA+cFpG,cA9cE,CAAA,EA+cFC,WA9cE,CAAA,EA+cFC,aA9cE,CAAA,EA+cFE,aA9cE,8PAmdFL,UA9cE,SAAAyE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GACA,OAAAM,EAAAP,EAAAn9R,EAAAvzB,MAAA,C,GAidJnkB,KAAM,CACJga,YAAahgB,EAAQ,WAAA,EAAa,cAAA,EA7ctCsf,MAAS,OACPY,WAAO,CAAA,EACLP,QAAGN,EAA+B,OAAQ,CAAA,EAAAG,CAAA,EA+c1CyB,cAAe,CAAA,EACfuF,MAAO,GACPpG,cAAe,CAAA,EACfC,WAAY,CAAA,EA7clBC,aAAS,CAAA,EACPE,aAAc,wqDA0BVL,UAAI,SAAiByE,EAAI84B,EAAA4kC,EAAAu4P,EAAwBC,GACjD,OAAGM,EAAsBP,EAAAn9R,EAAAvzB,MAAA,C,GAid3BmgD,gBAAiB,CA7cjBtqD,YAAe,GACfV,MAAG,kBA+cDY,WAAY,CAAA,EA7cbP,QAAMN,EAAgB,kBAAA,CAAA,EAAAG,CAAA,EACrByB,cAAM,CAAA,EA+cNN,SAAU,GACV6F,MAAO,GACPpG,cAAe,CAAA,EACfC,WAAY,CAAA,EA7clBC,aAAS,CAAA,EACJE,aAAA,sOAEDL,UAAA,SAAAyE,EAAA84B,EAAA4kC,EAAmCu4P,EAAYC,GAC/C,OAAAM,EAAoBP,EAAYn9R,EAAAvzB,MAAA,C,GAidhCmkB,aAAc,CACZtuB,YAAahgB,EAAQ,WAAA,EAAa,cAAA,EA7cxCsf,MAAS,eACHY,WAAA,CAAA,EACFP,QAAAN,EAAA,eAAA,CAAA,EAAAG,CAAA,EA+cEmB,SAAU,IACVM,cAAe,CAAA,EA7cfb,cAAY,CAAA,EACdC,WAAA,CAAA,EACAC,aAAS,CAAA,EACPE,aAAI,gTAgdJL,UA9cM,SAAAyE,EAAqB84B,EAAA4kC,EAAAu4P,EAAAC,GA+czB,OA9cEM,EAAsBP,EAAAn9R,EAAAvzB,MAAA,C,GAid5BvD,QAAS,CACP5G,YA9cOhgB,EAAA,WAAA,EAAA,iBAAA,EA+cPsf,MA9cM,UA+cNY,WA9cQ,CAAA,EA+cRP,QA9cIN,EAAuB,UAAS,CAAA,EAAYG,CAAA,EA+chDmB,SA9cS,IA+cTP,cA9ca,CAAA,EA+cba,cAAe,CAAA,EACfZ,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,qOAEdL,UAAW,SAAUyE,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GA7c3D,OAASM,EAAuBP,EAAAn9R,EAAAvzB,MAAA,C,GAG5Bk0M,UAAA,CACAr+M,YAAchgB,EAAI,WAAA,EAAA,mBAAA,EAClBsf,MAAA,QACAY,WAAA,CAAA,EACAP,QAAAN,EAA0B,QAAA,CAAA,EAAAG,CAAA,EAC1ByB,cAAc,CAAA,EACdN,SAAQ,IACRP,cAAI,CAAA,EACJC,WAAW,CAAA,EACXC,aAAU,CAAA,EACVE,aAAY,2DACZL,UAAQ,SAAAyE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GACR,OAAUM,EAAGP,EAAuBn9R,EAAAvzB,MAAA,C,GAidpCm0M,UAAW,CACTt+M,YAAahgB,EAAQ,WAAA,EAAa,mBAAA,EAClCsf,MAAO,OA7cbY,WAAS,CAAA,EACPP,QAAAN,EAA0B,OAAA,CAAA,EAAAG,CAAA,EACxBmB,SAAY,IACZM,cAAc,CAAA,EACdb,cAAA,CAAA,EACAC,WAAc,CAAA,EACdC,aAAI,CAAA,EACJE,aAAW,0DACXL,UAAU,SAAAyE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GACV,OAAUM,EAAGP,EAAuBn9R,EAAAvzB,MAAA,C,GAGpCkxT,OAAQ,CACRr7T,YAAQhgB,EAAA,WAAA,EAAA,gBAAA,EACRsf,MAAK,SA+cHY,WAAY,CAAA,EACZP,QAASN,EAA0B,SAAU,CAAA,EAAMG,CAAA,EACnDyB,cAAe,CAAA,EA7crBN,SAAS,IACPP,cAAW,CAAA,EA+cPC,WAAY,CAAA,EACZC,aAAc,CAAA,EA7cpBE,aAAS,uDACHL,UAAA,SAAqByE,EAAG84B,EAAA4kC,EAAAu4P,EAA6BC,GA+cnD,OAAOM,EAAiBP,EAAgBn9R,EAAIvzB,MAAA,EAAU,0B,GA3c1Dy7P,MAAA,CACA5lQ,YAAahgB,EAAA,WAAA,EAAA,eAAA,EACbsf,MAAQ,QACRY,WAAA,CAAA,EACAP,QAAQN,EAAA,QAAA,CAAA,EAAAG,CAAA,EACNyB,cAAW,CAAA,EACXN,SAAA,IA+cAP,cA9cM,CAAA,EA+cNC,WA9cE,CAAA,EA+cFC,aA9cE,CAAA,EA+cFE,aAAc,sDA7cdL,UAAA,SAAqByE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GACrB,OAAAM,EAAkBP,EAAmBn9R,EAAAvzB,MAAA,EAAA,0B,GAidvC6jE,SA9cE,CACAhuE,YAAahgB,EAAA,WAAA,EAAA,cAAA,EACbsf,MAAA,WACAY,WAAY,CAAA,EACZP,QAAAN,EAAY,WAAA,CAAA,EAAAG,CAAA,EACZyB,cAAe,CAAA,EACfN,SAAS,IA+cTP,cAAe,CAAA,EA7chBC,WAAK,CAAA,EACNC,aAAgB,CAAA,EACdE,aAAA,oFA+cAL,UA9cU,SAAAyE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GACR,OAAAM,EAAiBP,EAAAn9R,EAAAvzB,MAAA,C,GAidrBmxT,iBA9cgB,CA+cdt7T,YA9cUhgB,EAAA,WAAA,EAAA,gBAAA,EA+cVsf,MA9cE,mBA+cFY,WA9cE,CAAA,EA+cFP,QA9cEN,EAAU,mBAAA,CAAA,EAAAG,CAAA,EA+cZyB,cAAe,CAAA,EACfN,SAAU,IA7cXP,cAAW,CAAA,EA+cVC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,mgBArclBL,UAAe,SAAUyE,EAAA84B,EAAS4kC,EAAAu4P,EAASC,GAC3C,OAAaM,EAAAP,EAAAn9R,EAAAvzB,MAAA,C,GAGboxT,aAAI,CACFv7T,YAAIhgB,EAAa,WAAA,EAAS,sBAAA,EAC1Bsf,MAAI,eACFY,WAAS,CAAA,EA+cTP,QA9cEN,EAAA,eAAA,CAAA,EAAAG,CAAA,GAAA3gB,EAAAmF,MAAAw3U,iBA+cFv6T,cA9cK,CAAA,EA+cLN,SA9cK,IA+cLP,cA9cc,CAAA,EA+cdC,WA9cK,CAAA,EA+cLC,aAAc,CAAA,EACdE,aA9cK,6DACLL,UAAM,SAAAyE,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GA+cJ,OAAOM,EAAiBP,EAAgBn9R,EAAIvzB,MAAA,EAAU,0B,GA3c5DsxT,8BAAS,CA+cLz7T,YAAahgB,EAAQ,WAAA,EAAa,uCAAA,EAClCsf,MAAO,gCA7cbY,WAAS,CAAA,EACHP,QAACN,EAA6B,gCAA6B,CAAA,EAAAG,CAAA,GAAA3gB,EAAAmF,MAAAw3U,iBAC7Dv6T,cAAA,CAAA,EA+cEN,SAAU,IA7cVP,cAAa,CAAA,EACfC,WAAA,CAAA,EACEC,aAAK,CAAA,EACLE,aAAY,8EACZL,UAAA,SAAcyE,EAAY84B,EAAA4kC,EAAAu4P,EAAAC,GAC1B,OAAAM,EAAiBP,EAAYn9R,EAAAvzB,MAAA,EAAA,0B,GAid/Bm3D,eA9cU,CACRthE,YAAIhgB,EAAA,WAAA,EAAA,wBAAA,EACJsf,MAAA,iBACAY,WAAU,CAAA,EACVP,QAAAN,EAAmB,iBAAA,CAAA,EAAAG,CAAA,GAAA3gB,EAAAmF,MAAAw3U,iBACnBv6T,cAAQ,CAAA,EACRN,SAAU,IACVP,cAAA,CAAA,EACAC,WAAU,CAAA,EA+cVC,aA9cC,CAAA,EA+cDE,aA9cG,+DACLL,UAAI,SAAYyE,EAAY84B,EAAA4kC,EAAAu4P,EAAAC,GAC1B,OAAAM,EAAAP,EAAAn9R,EAAAvzB,MAAA,EAAA,0B,KAMY1pB,EAAAgf,QA+cVhf,EAAGgf,QAAQI,GAAKK,YA7clBzf,EAAA8gB,YAASC,WAAUxQ,KAAUvQ,EAAAgf,QAAQI,EAAA,C,EA4KzC,EAEA1B,EA9cI,WA+cFg9T,EAAA,C,EACC,GAAA,C,EAnEH3kS,yBA9cM,CAAA,EA+cNC,kBA9cM,CAAA,C,GAodN53C,EA9cM68U,kBAAA78U,EAAAuQ,IAAA,mCAAA,SAAAC,EAAA7F,GAwXKmyU,EAvXLnyU,EAAAmyU,WAs0BNl7U,EAAG8gB,YA9cK/X,KAAWmlC,QAAA,IAAYssS,EAAAU,CAAA,CAAA,C,GA0F/B98U,EA9cIuQ,IAAO,WAAA,WA+cTvQ,EA9cE68U,kBAAA,C,GAOWv8T,KAAS6L,MAAM/L,aAAUgM,QAAA1qB,EAAgBga,QAAAtZ,GAAgB,oCAAA,CAAA,GAggB1E,SA9cMoe,EAAcC,EAAAC,EAAAC,GA+clB,GA9cI/e,EAAAc,OAAA8R,MAAWoM,QAAS,CA+ctB,IA9cIC,EAAOjf,EAAAc,OAAA8R,MAAAoM,QAAmB3Z,KAAA,SAAA4Z,GA+c5B,OAAOA,EAAO3B,OAASuB,C,GAEzB,GA9cI,CAAAE,GAAAE,EA+cF,OA9cEA,EAAAC,O,CAidN,OA9cMJ,C,CAidR,SA9cQ67T,EAAAP,EAAAn9R,GA+cN,OAAuB,IAAnBm9R,GAA6C,KAArBp6U,EAAGc,OAAOiY,OA7cpCkkC,EAAQ13C,OAAA+yU,EAAA,uBACN,eAEAr7R,EAAA13C,OAAY+yU,EAAA,sBACZ,eAEe,OAAfr7R,EAAA+rG,iBAAe,cAAA,YAEf,E,CAwtBN,SAAS0xL,IACP16U,EAAGoe,QAAU,CAAA,EACb/e,EAAIgB,YA9cS86U,UAAIn6U,IAAW,CA+c1B8O,SA9cU1R,EAAAmF,MAAA/C,GA+cVuP,WA9cM3R,EAASmH,KA+cfwT,OAAQ/Y,EA9cGc,OAAAiY,OA+cXgL,WA9cM,YA+cN1W,OAAQrN,EAAGc,OAAOqgB,SAClBD,KAAMlhB,EAAGc,OAAOsxC,WAChBlG,MAAOlsC,EAAGc,OAAOqgB,UAAYnhB,EAAGc,OAAOsxC,WAAa,E,EACnD,SAASxxC,EAAUC,EAAUC,GAC9B,GAAIA,IAAWrB,EAAYsB,YAAa,CACtCf,EAAG8gB,YAAY/X,KAAO,GA7c5B/I,EAAS6hB,kBAAA,CAAA,EACH,IAAC,IAAA6xB,EAAY,EAAAA,EAAI9yC,EAAAmI,KAAAsE,OAAAqmC,CAAA,GAChB1zC,EAAA8gB,YAAY/X,KAAKwH,KAAO,IAAAiqU,EAAU55U,EAAAmI,KAAA2qC,EAAA,CAAA,EAgdnC1zC,EAAG8gB,YAAYmE,WAAarkB,EAAS8zK,MACrC10K,EAAGoe,QAAU,CAAA,C,MAYjBpf,EA9cSuC,KAAAvC,EAAYwC,OAAA,EAAKC,YAAiBlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,GA+FvC4oB,IACFrsB,QAAQqhB,OAAOtf,EAAGc,OAAQwpB,CAAA,EA7cxBtqB,EAAAse,UA+cAte,EA9cEse,QAAAC,UAAAkM,QAAArsB,EAAA4B,EAAAc,OAAA8R,KAAA,C,0KA8XV3U,QACGC,OA9cO,UAAA,EA+cPK,WA9cO,6BAAAg8U,CAAA,EA+cP/7U,UA9cO,mBAidV,WACE,MAAO,CACLC,SA9cM,IA+cNI,YA9cM,2EA+cNH,MA9cM,CA+cJ6E,MA9cI,IA+cJgC,KA9cI,G,EAgdNhH,WA9cM,6BA+cNK,aA9cM,I,EAZA,C,IA84BZ,CAAA,WACE,aA2BA,SAASw8U,EAA4Bh9U,EACAiB,EACAL,EACAO,EACAkgD,EA9cDprC,EACA8jU,EACA14U,EACAo9C,EACAr9C,EACAM,EACAX,EACAy9C,GAokBlC,SAAS6D,IACPriD,EA/cEggB,QAAW,CAAA,C,CAkdf,SAASymD,IACPzmE,EAAOggB,QAAU,CAAA,EA9cnBhgB,EAASgtB,WAAAu1B,UAAeG,KAAA,EACtB1iD,EAAAggB,QAAe,CAAA,C,CAkdjB,SA/cM4+B,EAAOC,EAAAl0C,EAAAm0C,GAgdXN,EA/cI3+C,QAAYmH,QAAA63C,CAAA,EAAAE,SAAA,CAAA,EAAA/+C,CAAA,C,CAmVlBA,EAAOyR,cAAgB,GA9cvBzR,EAAIgtB,WAAK,GAgdThtB,EAAOq/C,UAAY,KA9cnBr/C,EAAGo/C,UAAA,KACHp/C,EAAG6hD,KAAA,KAgdH7hD,EAAOqS,QAAU3Q,EACjB1B,EAAO+H,SAAW,CAAA,EA9clB/H,EAAGwJ,aAAU,EACbxJ,EAAG0hJ,uBAAU,CAAA,EACb1hJ,EAAGy8C,WAAA,KACHz8C,EAAGqQ,QAAU,cACbrQ,EAAGi9U,aAAS,CAAA,EAgdZj9U,EA/cEggB,QAAO,CAAA,EAkdThgB,EA/cE4+C,WAASA,EAgdX5+C,EA/cEkqJ,cA8jBF,WACElqJ,EA/cIggB,QAAA,CAAA,EAgdJhgB,EA/cIgtB,WAAYu1B,UAAAG,KAAA,EAgdhB1iD,EA/cIggB,QAAA,CAAA,C,EA3GJhgB,EAAAggB,QAAe,CAAA,EACfhgB,EAAAk9U,iBAA0Bl9U,EAAAuQ,IAAA,kCAAA,SAAAC,EAAA7F,GAC1B3K,EAAAy8C,WAAmB9xC,GAAAA,EAAA8xC,WAAA9xC,EAAA8xC,WAAA,KAgdjBgqB,EAAA,C,GA7cJzmE,EAAAk9U,iBAAAl9U,EAAAuQ,IAAA,8BAAA,SAAAC,EAAA7F,GAgdI3K,EAAOqQ,QAAU1F,EA9crB87D,EAAA,C,GAEsB,0BAAlBzmE,EAAAmH,MAgdA/F,EAAW4M,WAAW,8CAAA,EAIxBhO,EA/cEuQ,IAAO,WAAA,WAgdPvQ,EAAOk9U,iBAAA,C,GAGNjnU,EAAa0E,SACd3a,EAAOy8C,WAAaxmC,EAAa0E,QA5cnC3a,EAAI6hD,KAAA,CACFC,QAAQ,SAAUt/C,GAClB,OAAOA,EAASmI,I,EAidhBwB,IAAKlL,EAAImL,KAAKnK,YAAYwP,cAAcnF,QAAQ,QAAS,EAAA,EAAIA,QAAQ,UAAW,EAAA,EAChFnF,KAAM,MACN2d,QAAS,CACPC,cAAiB,SAAWrjB,EAAQsjB,K,EA7cxCra,KAAG,SAAOkY,GACVA,EAAA8C,WAAa,YAgdT9C,EAAElR,WAAa3R,EAAOmH,KACtB0b,EAAEnR,SAAW1R,EAAOmF,MAAM/C,GA9chCygB,EAAAlI,OAAS3a,EAAAy8C,WACJ55B,EAAAsG,SAAUnpB,EAAAqQ,QAgdNrQ,EAAOqH,QAAQqc,UA9cnBb,EAAAsvD,QAAanyE,EAAGqH,QAAAqc,QAAAyuD,Q,GAmdnBnyE,EA/cIo/C,UAAO,CAgdTyC,KA/cI7hD,EAAS6hD,KAgdby0F,UA/cO,cAgdPp2F,MAAO,KACPC,IAAK,mEA9cLvB,WAAOA,EAgdPyD,aA/cEA,EAgdFhC,WA/cK,eAgdLC,WA/cO,CAAA,EAAA,GAAU,GAAA,GAAA,KAgdjBC,WA/cI,EAgdJE,WA/cK,CAAA,EAgdLC,WAAY,CAAA,EACZ7wB,WAAY,CAAA,EACZ8wB,YAAa,IA9cf41F,aAAW,EACTpxI,MAAO,CAAA,CAAA,EAAA,SAgdPw9C,SA/cK,CACHktG,WAAU1uJ,EAAA,WAAA,EAAW,mBAAA,C,EAidvBy/C,UAAW,CAAA,EACXgzC,kBAAmB,SAASC,EAAUlpF,GACpCyV,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,cAAgBpC,EAAOk8C,UAAY,qBAAsB57B,KAAKC,UAAU5V,CAAA,CAAA,C,EAEpHmpF,kBAAmB,SAASD,EAAUpxF,GA7ctC,OADO6d,KAAW6L,MAAA/L,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,cAAApC,EAAAk8C,UAAA,oBAAA,CAAA,C,GAKtBl8C,EAASq/C,UAAA,CACPZ,EAAca,UAAM,YAAA,EAClBS,WAAa,YAAU,YAAA,EACrBP,WAAO,SAAO70C,EAASxD,EAAAs4C,GAErB,OA8cAz/C,EAAOyR,cAAcguC,EAAKr9C,IAAM,IAAI23U,EAAgBt6R,CAAA,EA9cnD,0KAOiCA,EAAKr9C,GAEvC,mC,gLA0TVvC,QACGC,OAAO,UAAA,EACPK,WAAW,8BAA+B68U,CAAA,EAC1C58U,UAAU,oBA3cb,WA+cE,MAAO,CACLC,SAAU,IA9cdI,YAAA,6EACGH,MAAO,CACP6E,MAAA,IACAgC,KAAA,IAgdGE,QAAS,IACTu6E,WAAY,IA9clBu7P,WAAS,IACPxqU,aAAO,IACL/D,MAAA,G,EAEAzO,WAAO,6B,EA+buB,C,IA+KpC,CAAA,WACE,aA4BA,SAASi9U,EA/cCp9U,EACAq9U,EACEtD,EACF34U,EACAH,EACAgd,EACErd,EACFO,EACAN,EACAi3B,EACmBz2B,EACZi8U,EAgdepD,EACAn5U,EA9cTD,EACFugD,EACN5C,EACK/8C,GA0hBlB,SAAS87D,EAASlkB,EAASO,GACzB,OA/cU,EAAR75C,EAAQ8Q,aAAAo/P,WAAA52N,EAAAO,CAAA,EAAA93B,K,CAkdZ,SA/cMw7T,IAgdJ,OA/cIv9U,EAAS8Q,aAAA8kD,aAA0B51D,EAAU8Q,aAAM4kD,W,CA6lBzD,SAASgmR,EAAqBz5P,EAA6BiI,EAAWvgE,GACpE5oB,EAAUoC,KAAK,CA9cjBhD,WAAS,6BACPK,aAAe,KAgdbC,YAAa,6EACbsG,OAAQlH,QAAQmH,QAAQsB,SAASC,IAAA,EA9crC9B,oBAAS,CAAA,EACPgC,OAAS,CAgdLyhF,UAAWA,EACXjI,4BAA6BA,EAC7B/oC,oBAAqB,KACrBrvB,iBAAkBo4D,EAA4Bv4D,mBAC9C+J,YAAa9J,EACbogE,YAAa,CAAA,EA9ctBC,QAAW,CAAA,EACVG,YAAA,GAgdQC,WAAY,KACZj0C,WAAYn2C,EAAO8Q,aAAa8kD,YA/cxC3E,WAAAjxD,EAAA8Q,aAAA4kD,YACGu0B,cAAOjqF,EAAAmF,MAAAguE,sBACPv3D,QAAW,I,IAkdPjV,KAAK,SAASqB,GACfA,EAAQjF,QAAQ,SAASm/N,GAiBM04G,EAheR,CACpBgB,gBAAA15G,EAAA9/N,GACL6oF,aAAUi3I,EAAAj3I,aACVv5E,SAAa1R,EAAAmF,MAAA/C,GACbuP,WAAO3R,EAAAmH,KACL8vC,gBAAOgrC,EAAAv4D,mBACPpnB,OAAM,eACN64U,SAASn7U,EAAAk6U,uBAAA,sBACTO,kCAAYx4P,EAAA7/E,E,EAyddnB,EAAIgB,YAAYurJ,YAAY5kJ,KAC1BgyU,EA/cN,SAASp4U,EAAAC,EAAAC,GAidGA,IAAWrB,EAAYsB,YAEzBoQ,EAAmBvQ,CAAA,EAEnB5B,EAASuC,KAAKvC,EAASwC,OAAA,EAhdIC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,MAb/B,Y,EAihBJ,SAhdKk6U,EAAoBlkS,GAidvB,OAhdEt5C,EAAO8Q,cAAa9Q,EAAa8Q,aAAA64I,UAAA,EAAArwG,GAAAt5C,EAAA8Q,aAAA64I,UAAA,EAAArwG,GAAA1uB,OAAA,C,CAmfrC,SAhdI6yT,EAAYnkS,EAAAO,GAidd,OAhdE75C,CAAAA,EAAAmF,MAAas0C,eAAA,iBAAA,GAAAz5C,CAAAA,EAAAmF,MAAAs0C,eAAA,0BAAA,GAAAz5C,CAAAA,EAAAmF,MAAAyC,iBAAA5H,CAAAA,EAAAmF,MAAA0C,4BAIC,0BAAZ7H,EAAAmH,MAAiC,IAAAnH,EAAAmF,MAAAzC,QAAA1C,CAAAA,EAAA8Q,aAAA4kD,aAAA11D,CAAAA,EAAA8Q,aAAA8kD,cAGnC51D,EAAAmF,MAAAC,aAA4Bs4U,EAAgBpkS,EAAAO,CAAA,C,CAudhD,SAAS6jS,EAAuCpkS,EAASO,GACvD,OAAO75C,EAAO8Q,aAAa4sU,uCAAuCpkS,EAASO,CAAA,C,CAoE7E,SAjdE8jS,IAkdA,OAAO39U,EAAOmF,MAAMC,YAAc,GAAK,e,CArYzC,SAASw4U,IACP,OAAO59U,EAAA69U,sBAAsBpkS,eAAAz5C,EAAAmH,IAAA,C,CAuhB/B,SAjdO22U,EAA2Bt7U,GAkdhCxC,EAjdK8Q,aAAYitU,0BAAA,IAAAV,EAAA76U,CAAA,CAAA,EAkdjBw7U,EAjdKx7U,CAAA,C,CAodP,SAjdOy7U,EAAev7U,EAAAF,GAkdpB,IAhdE6Q,EAgdE7Q,EAAS4M,OAhdXiE,EAAe,UAAc7Q,EAAW4M,MAkdxCxO,EAjdSuC,KAAGvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAwC,WAAA,EAAakS,EAAa,CAAA3Q,OAAAF,EAAA8Q,YAAA,CAAA,CAAA,EAAAhQ,SAAA,WAAA,CAAA,GAmd9EyyC,EAAA,C,CAIJ,SAjdOA,IAkdLn1C,EAjdKuC,KAAOvC,EAAQwC,OAAA,EAAQC,YAASlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,CAOvC,SAAS06U,EAAAx7U,GAEP,IAAI07U,EAAY,KACd17U,IACA07U,EAAA,CACAC,kBAAA37U,EAAA27U,kBACEC,mBAAA57U,EAAA47U,mBACAC,mBAAA77U,EAAA67U,kB,GAodJj9U,EAjdO4M,WAAA,mCAAAkwU,CAAA,EAmda,0BAAhBl+U,EAAOmH,MAET/F,EAjdO4M,WAAA,+CAAAxL,CAAA,C,CAqdX,SAjdMuQ,EAAUvQ,GA4bdpB,EAAW4M,WAAW,kCA3bTxL,CA2b4C,EAuBzDw7U,EAjdIx7U,CAAA,C,CAhHJxC,EA/cI4hF,WAAc,CAAA,CAAA5hF,EAAA4hF,WAgdlB5hF,EA/cIm9U,WAAc,CAAA,CAAAn9U,EAAAm9U,WAgdlBn9U,EA/cI2S,aAAW,CAAA,CAAA3S,EAAgB2S,aA2ZjC3S,EA/cMgC,eAAe,CAAA,EAgdrBhC,EA/cM69U,sBAAYP,EAgdlBt9U,EA/cMk6U,uBAAcA,EAgdpBl6U,EA/cMqS,QAAA3Q,EAidN1B,EA/cMs+U,eAAW,CAgdf5uF,EAAG,iBACHl7K,EAAG,cACHC,EAAG,kB,EAILz0E,EA/cMq5C,wBAktBN,SAAiCH,EAhdE+tB,EAAAK,GAidjC,IA5cFi3Q,EA4cMv+U,EAAO8Q,aAAa4kD,aAhdmB,0BAAV11D,EAAUmH,KAidzC+xC,EAAoBtuB,OAAS,MA7cjC2zT,EAAuBv+U,EAAAk6U,uBAAA,sBACvBhhS,EAAoBtuB,QAAAsuB,EAAAtuB,OAAA,IACpB2zT,EAAmBv+U,EAAAk6U,uBAAA,uBAEnBhhS,EAAc92C,GACdnB,EAAOgB,YAAUu8U,qBAAA90Q,MAAA,CACVtnE,GAAA82C,EAAW92C,GACXE,OAAA,6BACAoP,SAAA1R,EAAAmF,MAAA/C,GACAwoB,OAAAsuB,EAAatuB,QAAA,IAAAsuB,EAAAtuB,OAAAsuB,EAAAtuB,OAAA,EACb6iI,yBAAUv0G,EAAA92C,GACVuP,WAAA3R,EAAemH,KACfg0U,SAAUoD,C,EAidR,SAAS/7U,EAAUyF,EAAIvF,GACpBA,IAAWrB,EAAYsB,YA/c5Bm7U,EAAat7U,CAAA,EAkdVy7U,EAAav7U,EAAQF,CAAA,C,GA3c/BvB,EAAAgB,YAASu8U,qBAAa51U,KAAA,CACpB8I,SAAO1R,EAAUmF,MAAA/C,GACjB6lB,MAAOg/C,EACLj/C,KAAOs/C,EACP18C,OAAAsuB,EAAAtuB,OAidIjZ,WAAY3R,EAAOmH,KA/czB64E,cAAOhgF,EAAmB8Q,aAAW1O,GACnC+4U,SAAOoD,C,EACP,SAAA/7U,EAAAyF,EAAAvF,GAidQA,IAAWrB,EAAY6H,iBA/c7B40U,EAAgBt7U,CAAA,EAkdZy7U,EAAav7U,EAAQF,CAAA,C,KAzS/BxC,EA/cMy+U,uCAmcN,SAA+BvlS,GAC/B,IAAAhoC,EAAOlR,EAAAqH,QAAA8J,eAAyBC,qBAAA0P,SAAA9gB,EAAAqH,QAAA8J,eAAAC,qBAAAC,SAAA6nC,EAAA1nC,eAAA0nC,EAAA3nC,eAmd1BD,MAAMJ,CAAA,IA9cP,OAAAA,IACHA,EAAGlR,EAAA8Q,aAAAS,gBAodHtQ,EAAIgB,YAAYu8U,qBAAqB51U,KAAK,CAhd5CxG,GAAO82C,EAAAu0G,yBACP77I,SAAO5R,EAAAqH,QAAA8J,eAAAC,qBAAyC0P,SAAA9gB,EAAAqH,QAAA8J,eAAAC,qBAAAC,SAChDH,MAAOA,EACPQ,SAAO1R,EAAAmF,MAAA/C,GACPuP,WAAO3R,EAAAmH,KACP7E,OAAO,W,EACP,SAAOE,EAAAyF,EAAAvF,GACAA,IAAArB,EAAAsB,aACPm7U,EAA2Bt7U,CAAA,EAC3B02C,EAAO1nC,eAAyBhP,EAAAgP,eAChC0nC,EAAO3nC,eAA0B/O,EAAA+O,gBAEjC3Q,EAAOuC,KAAAvC,EAAAwC,OAAA,EAAwBC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,KAV/BtD,EA/cMk0C,0BAi+BN,SAjdsBpjC,GAkdpB,IAIIvK,EArdFvG,EAAO4F,SAmdT5F,EAAO4F,OAAS,CAAA,EAhdhB5F,EAAO6F,QAAU,CAAA,EAkdbU,EAAUxF,EAAUwF,QAAA,EACrBC,MAAMrF,EAAQ,WAAA,EAAa,sCAAA,CAAA,EAhdhC2H,YAAS3H,EAAA,WAAA,EAA0B,6CAAA,CAAAya,QAAA9K,EAAA2+B,YAAA,CAAA,CAAA,EACjChpC,oBAAkB,CAAA,CAAA,EAkdfM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAhdnC7B,GAAIvF,EAAQ,WAAA,EAAc,gBAAA,CAAA,EACxBoC,OAAIpC,EAAU,WAAA,EAAU,gBAAA,CAAA,EAmd1BJ,EAjdKoC,KAAAoD,CAAA,EAAYI,KAAA,WAkdf1F,EAjdGgB,YAAAwP,cAAoB6K,OAkdrB,CAhdCla,GAAG0O,EAAQ1O,GACXsP,SAAO1R,EAAQmF,MAAA/C,GAkdduP,WAAY3R,EAAOmH,I,EA/crB,SAAO3E,EAAGyF,EAAAvF,GAkdJA,IAAWrB,EAAYkb,qBAhd1Bvc,EAAA+H,SAAA,CAAA,EACD/H,EAAA4F,OAAU,CAAA,EACX5F,EAAM6F,QAAQ,CAAA,EACdkN,EAAYvQ,CAAA,GAEZy7U,EAAev7U,EAAQF,CAAA,C,IAG1B,WAkdAxC,EAAO4F,OAAS,CAAA,EAChB5F,EAAO6F,QAAU,CAAA,C,KAjjBrB7F,EA/cM0+U,oBAs8BN,WACM1+U,EAAOgC,iBAIXhC,EAAOgC,eAAiB,CAAA,EA/cxBf,EAAAgB,YAAcwP,cAAQtP,OAkdpB,CACEC,GAAIpC,EAAO8Q,aAAa1O,GAhd9BsP,SAAS1R,EAAAmF,MAAA/C,GACHuP,WAAO3R,EAAMmH,KACf7E,OAAO,c,EAodP,SAASE,EAAUC,EAAUC,GAC3B1C,EAAOgC,eAAiB,CAAA,EAhdrBU,IAASrB,EAASkb,oBACzBxJ,EAAcvQ,CAAA,EAmdRuzC,EAAA,C,KA1gBR/1C,EA/cM49U,eAAeA,EAgdrB59U,EA/cM2+U,gBA2dN,WACA59U,EAAOoC,KAAA,CACPhD,WAAO,mCACPK,aAAO,KACPC,YAAO,0EACPsG,OAAOlH,QAAAmH,QAAgBlG,EAAAmG,KAAA,MAAA,CAAA,EACvBR,oBAAwB,CAAA,EACxBkI,YAAO,CAAA,EACPlG,OAAO,CACP+C,OAAO,CACAojM,qBAAW,KACXgwI,kBAAQ5+U,EAAA8Q,aAAA2H,WACR8/I,uBAAA,KACAo2C,iBAAA,CAAA,EACAhrL,WAAA,I,MAzBP3jB,EA/cMw9U,6BAAcA,EAgdpBx9U,EA/cM6+U,4BA6vBN,SAhdgBvlS,GACZviB,EAAS/2B,EAAS8Q,cAAU9Q,EAAA8Q,aAAA64I,UAAA,EAAArwG,GAAAt5C,EAAA8Q,aAAA64I,UAAA,EAAArwG,GAAA,EAid9B,GAhdIt5C,EAAOqH,QAAA8J,eAASC,qBAAAC,SAidlB,OAAOymB,EAAMi3K,WAAWh4K,EAAQvlB,eAAgB,CAAA,EAElD,OAhdEsmB,EAAMi3K,WAAAh4K,EAAAxlB,eAAA,CAAA,C,EA8JVvR,EAAO8+U,kBAqTP,SAA2Bl0T,GACzB,GAhdQ,EAANA,EAidA,MAhdI,cAkdN,GAhdIA,EAAE,EAidJ,MAhdI,aAkdN,MAhdO,a,EAqJT5qB,EA/cM++U,uBAs1BN,SAAgC7lS,EAAqBI,EAASO,GA/cjE,GAAA,CAAAX,EACC,MAAA,GAEA,GAAAr5C,QAAAq6C,YAAAhB,EAAA92C,EAAA,EACG,IACA,IAAA20B,EAAW/2B,EAAA8Q,aAA0Bo/P,WAAA52N,EAAAO,CAAA,EACrC,GAAA9iB,EAAUhV,MAAAgV,EAAgBywC,cAkdnB,MAAO,Q,CA/cjB,MAASgnN,IAIL,MAAO,CAAA,IAAPt1O,EAAO8lS,mBAGE,CAAA,IAAP9lS,EAAO+lS,iBAIPtB,EAAA,EAHA,SAHM,Q,EA2DV39U,EAAOk/U,wBA6TP,SAAiChmS,GAC/B,OAAKA,EA5cI,OAAPA,EAAOimS,mBAAA,CAAA,IAAAjmS,EAAAimS,kBAGO,OAAdjmS,EAAckmS,qBAAA,CAAA,IAAAlmS,EAAAkmS,oBAGd,GAFA,UAHK,UAJA,E,EAkJTp/U,EAAOq/U,OAobP,SAAgB/lS,EAASO,GACvB,GAAI75C,EAAO8Q,cAAgB9Q,EAjdC8Q,aAAAwuU,MAAAt/U,EAAA8Q,aAAAwuU,KAAAhmS,IAAAt5C,EAAA8Q,aAAAwuU,KAAAhmS,GAAAO,GAC9B,OAAA75C,EAAA8Q,aAAAwuU,KAAAhmS,GAAAO,GAmdE,MAAO,G,EAvbT75C,EAAO29U,sBAAwBA,EAC/B39U,EA/cIu/U,oBA+2BJ,WACE,IAAIC,EAAiC,EAEjCx/U,EAAOqH,QAAQ4oI,sBAjdSpoH,IAAAxW,UAkd1BmuU,CAAA,IAEEx/U,EAAOqH,QAAQ4oI,sBAjdSC,WAAA7+H,UAAArR,EAAAqH,QAAA4oI,sBAAAE,YAAA9+H,WAkd1BmuU,CAAA,GAEF,IAAIC,EAAc,GACdz/U,EAAOqH,QAAQ8J,eAjdSD,MAAAG,WAkd1BouU,EAAc,iBAGhB,OAAOz/U,EAAOs+U,eAjdckB,GAAAC,C,EAoC9Bz/U,EA/cM0/U,kBAmnBN,SAA2Bz4Q,EAAUK,EAAS2a,GAC5C,IAhgBgBA,EAAAhb,EAAAK,GAggBXtnE,EAAO8Q,aAAa4kD,aAAgB11D,EAAO8Q,aAAa8kD,eA5ctD,0BAAT51D,EAASmH,MAAkB,sBAAAnH,EAAAmH,MAAAnH,EAAAmF,MAAAw/O,0BAAA3kP,EAAA8Q,aAAA8kD,aApDTqR,EAqDHA,EArDGK,EAqDHA,IArDG2a,EAqDHA,GApD0B09P,aAAgB3/U,EAAM8Q,aAAAo/P,WAAuBjpM,EAAMK,CAAA,GACtF,GAgdF2a,EA/cYQ,eAAAzsD,KAAAoO,IAAA69C,EAAA09P,WAAA,EAgdZ19P,EA/ciBG,gBAAA,EAgdjBs5P,EA9cEz5P,EACA,6CACAjiF,EAAAmF,MAAWqhE,mB,IAkdT38C,EAAmB7pB,EAAO8Q,aAAa8uU,mCAAmC34Q,EAAUK,CAAA,EAAS59C,mBA7c/FkxT,EAAa,CACbzjS,IAAA,GACA1+B,WAAYzY,EAAA8Q,aAAA2H,WACZg3B,aAASzvC,EAAA8Q,aAAA2+B,aACTwH,gBAAeptB,EACfo9C,SAAUA,EACVK,QAAAA,EACAorF,qBAAY,KACZt+G,aAAcp0C,EAAA8Q,aAAAsjC,aACdxpB,OAAA,EACAwe,UAAWppC,EAAAmF,MAAUqhE,oBAgdrBu0Q,2BA/c0B/6U,EAAAmF,MAAA/C,GAgd1BE,OAAQ,eACRoP,SAAU1R,EAAOmF,MAAM/C,GA9czBuP,WAAA3R,EAAgBmH,KACdg0U,SAAAn7U,EAAak6U,uBAAqB,sBAgdlC5jS,SA/cS,CAAA,C,EAkdXr1C,EA/cEgB,YAAAurJ,YAAe5kJ,KACfgyU,EACA,SAAAp4U,EAAeC,EAAAC,GACfA,IAAYrB,EAAAsB,YACZvB,EAAc4M,WAAA,4BAAAxL,CAAA,EACdE,IAAcrB,EAAAkE,mBACd8N,EAAqB,UAAW7Q,EAAK4M,MACnCxO,EAAOuC,KAAAvC,EAAiBwC,OAAA,EAAAC,YAAoBlC,EAAU,WAAA,EAAAkS,CAAA,CAAA,EAAA/P,SAAA,WAAA,CAAA,GAidpD1C,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,MAjcxGyzB,EAAU/2B,EAAO8Q,aAAMo/P,WAAAjpM,EAAAK,CAAA,EACvB2a,EAAmBv4D,mBAAAqN,EAAArN,mBACnBu4D,EAAkBQ,eAAAR,EAAA09P,YAClB19P,EAAYG,gBAAA,EACZH,EAAkB77C,iBAAApmC,EAAAmF,MAAAohE,oBAElB0b,EAAiB0I,kBAAsB3qF,EAAamF,MAAA/C,GAEhD8nF,EAAW,GACbvgE,EAAe,KACZ,sBAAH3pB,EAAGmH,KACH+iF,EAAS,eACa,0BAAjBlqF,EAAAmH,OAgdLwiB,EAAe3pB,EAAOmF,MAAMohE,oBA9c5B2jB,EAAG,oBAidLwxP,EA/cOz5P,EAAAiI,EAAAvgE,CAAA,G,EAqRX3pB,EA/cMg+U,sBAAOA,EAgdbh+U,EA/cM+S,mBAAYA,EAgdlB/S,EA/cMy9U,oBAASA,EAgdfz9U,EA/cM6/U,oBA6xBN,SAhduBj1T,EAAS0uB,EAAUO,GAidxC,OAhdgB,IAAZjvB,GAAiB6yT,EAAmBnkS,EAAQO,CAAA,C,EAkIlD75C,EA/cM09U,uCAAeA,EAgdrB19U,EA/cM8/U,yBA8WN,SAA+B5mS,GAC7B,GAAA,CAAAA,EAidE,MAAO,GA9cX,GAAyB,OAAzBA,EAAyB6mS,eAAA,CAAA,IAAA7mS,EAAA6mS,cACvB,MAAO,SAmdP,GAAI7mS,EAAoBtuB,OAAS,EAC/B,MAAO,Q,EAvXX5qB,EA/cMggV,gBAkyBN,WACE,IAAIC,EAhdYjgV,EAAA8Q,aAAqB4kD,YAidjCvf,EAhdSn2C,EAAA8Q,aAAmB8kD,YAidhC,GAAIgoR,EAAA,EAhdS,CAidX,GAhdM,0BAgdF59U,EAhdEmH,OAAA84U,GAAA9pS,GAidJ,MAhdI,CAAA,EACA,GAAA,0BAAAn2C,EAAAmH,OAAA84U,GAAA9pS,GAidF,MAhdE,CAAA,EACA,GAAA,sBAAAn2C,EAAAmH,KAAA,CAidJ,IAhdI6sB,EAAAh0B,EAAAmF,MAAAw/O,yBAidJ,GAhdIs7F,IAAAjsT,GAAA,CAAAmiB,GAidF,MAhdE,CAAA,C,EAqdR,MAAO,CAAA,C,EAlWTn2C,EA/cMkgV,cAozBN,SAAuBhnS,EAAqBI,EAASO,GACnD,OAAOX,GAAuBA,EAAoBymS,YAAczmS,EAAkCl5C,EAAO8Q,aAAao/P,WAAW52N,EAASO,CAAA,GAAtD8lS,W,EArWtF3/U,EA/cMmgV,eAuzBN,SAhdoBjnS,EAAUI,EAAAO,GAC5B,OAAOX,GAAUA,EAAAknS,aAAAlnS,EAAAl5C,EAAA8Q,aAAAo/P,WAAA52N,EAAAO,CAAA,GAAAumS,Y,EAwGnBpgV,EAAOolC,SAklBP,SAjdiB6hC,EAAOK,GAkdtB,IAjdI+4Q,EAAA,CAAA,EACArgV,EAAAqH,QAAQ8J,eAAAC,qBAAA0P,SAAA9gB,EAAAqH,QAAA8J,eAAAC,qBAAAC,WAkdVgvU,EAjdE,CAAA,GAmdJ,OAjdIrgV,EAAU8Q,aAAOs0B,SAAA6hC,EAAuBK,EAAA+4Q,CAAA,C,EArI9CrgV,EA/cMsgV,6BAwiCN,WACE,MAjdkB,kBAAZtgV,EAAAmH,MAAwB,0BAAAnH,EAAAmH,MAC1B,cAidFnH,EAjdEmH,MAAA,sBAAAnH,EAAAmH,I,EAzINnH,EAAO0S,eA6lBP,WACE,MAjdiB,kBAidV1S,EAjdMmH,MAA2B,0BAAAnH,EAAAmH,I,EA5I1CnH,EAAOw9D,SAAWA,EAClBx9D,EAAOu9U,MAAQA,EACfv9U,EA/cIugV,0BAofJ,SA/cqBjnS,EAAAO,GAgdnB,GA/cgB,cAAZ75C,EAAAmH,MAAY,sBAAAnH,EAAAmH,MAAAnH,EAAAmF,MAAAw/O,yBAgdd,MA/cE,CAAA,EAkdJ,MA/cM,CAAAnnL,EAAOlkB,EAAAO,CAAA,GAAiB0jS,EAAA,IAA8B,kBAAdv9U,EAAImH,MAAU,0BAAAnH,EAAAmH,MAAA,cAAAnH,EAAAmH,MAAA,sBAAAnH,EAAAmH,K,EAsa9DnH,EA/cMwgV,qBAuhBN,WACE,IAAIpmR,EAAcp6D,EAAO8Q,aAAa8kD,YAAcz0D,EAAQ,WAAA,EAAa,aAAA,EAAiBA,EAAQ,WAAA,EAAa,gBAAA,EA9c7GkC,EAAAlC,EAAkB,WAAA,EAAA,sCAAA,CAAAi5D,YAAAA,CAAA,CAAA,EAidpB,CAAA,IAlcM7zD,EAbF7E,EAAO8B,cAAA,uDAAA,GACP+C,EAAYxF,EAAAwF,QAAA,EACZC,MAAArF,EAAS,WAAA,EAAA,+BAAA,CAAA,EACTkC,YAAAA,CAAA,EACAoD,oBAAU,CAAA,CAAA,EACVM,OAAAlH,QAAemH,QAAAsB,SAAAC,IAAA,CAAA,EACf7B,GAAAvF,EAAY,WAAA,EAAA,iBAAA,CAAA,EACZoC,OAAApC,EAAc,WAAA,EAAA,gBAAA,CAAA,EAidhBJ,EA/cIoC,KAAAoD,CAAA,EAAAI,KAAA,WAgdF9F,EA/cEiD,GAAA,uCAAA,CAAA1B,GAAApC,EAAA8Q,aAAA2H,UAAA,CAAA,C,KAGAlS,EAAAxF,EAAAyJ,MAAA,EAgdDhE,MA/cCrF,EAAA,WAAA,EAAA,+BAAA,CAAA,EAgdDkC,YA/cCA,CAAA,EAgdDoD,oBA/cC,CAAA,CAAA,EACFM,OAAAlH,QAAWmH,QAAUsB,SAAWC,IAAA,CAAA,EAgd/B7B,GA/cCvF,EAAO,WAAA,EAAA,YAAA,CAAA,EAidXJ,EAAUoC,KAAKoD,CAAA,E,GA/FnBvG,EA/cMygV,4BAw+BN,SAjd2Bj+U,GACzBxC,EAAI8Q,aAAc,IAAQipU,EAAav3U,CAAA,EAkdvCw7U,EAAsBx7U,CAAA,C,EA1hBxBxC,EA/cM0gV,wBAyfN,WACE,IA/cIr9U,EAAalC,EAAQ,WAAA,EAAa,uCAAA,CAAAw/U,YAAA3gV,EAAAmF,MAAAy7U,iBAAA,CAAA,EAidtC,CAAA,IAlcIr6U,EAbA7E,EAAA8B,cAAY,8CAAA,GACZ+C,EAASxF,EAAAwF,QAAA,EACTC,MAAArF,EAAe,WAAA,EAAA,0BAAA,CAAA,EACf2H,YAAUzF,CAAA,EACVoD,oBAAe,CAAA,CAAA,EACfM,OAAAlH,QAAYmH,QAAAsB,SAAAC,IAAA,CAAA,EACZ7B,GAAAvF,EAAA,WAAA,EAAc,wBAAA,CAAA,EACdoC,OAAApC,EAAc,WAAA,EAAA,gBAAA,CAAA,EAidhBJ,EA/cIoC,KAAOoD,CAAA,EAAAI,KAAiB,WAgd1B9F,EAAOiD,GAAG,+CAAgD,CAAE1B,GAAIpC,EAAO8Q,aAAa2H,UAAA,CAAA,C,KA5cpFlS,EAAAxF,EAAqByJ,MAAA,EACrBhE,MAAOrF,EAAA,WAAA,EAAA,8BAAA,CAAA,EACP2H,YAAYzF,CAAA,EACZoD,oBAAS,CAAA,CAAA,EACTM,OAAAlH,QAAemH,QAAAsB,SAAAC,IAAA,CAAA,EACf7B,GAAAvF,EAAU,WAAA,EAAA,YAAA,CAAA,EAidZJ,EA/cEoC,KAAYoD,CAAA,E,GA+YlBvG,EA/cM6gV,6BAieN,SA/cqB54T,GAgdnB,GA/cIjoB,EAAAmF,MAAYC,YAgdd,MA/cE,CAAA,EAidJ,OA/cyC,IAArCo4U,EAAgCv1T,EAAK7lB,EAAA,C,EA0b3CpC,EA/cM8gV,8BAwdN,WACE,MA/cE,CAAA9gV,EAAWmF,MAAAC,aAAAw4U,EAAA,GAAA,0BAAA59U,EAAAmH,I,EAscfnH,EA/cM+gV,gBA2dN,WACE,OA/cI/gV,EAASqH,QAAA8J,eAAA4+H,gBAAwCjvH,SAAA9gB,EAAAqH,QAAA8J,eAAA4+H,gBAAA1+H,Q,mQAmWzDxR,QACGC,OA/cK,UAAA,EAgdLK,WA/cK,yBAAOi9U,CAAA,EAgdZh9U,UA/cK,eAkdR,WACE,MA/cM,CAgdJC,SA/cI,IAgdJI,YA/cI,iEAgdJH,MA/cI,CAgdF6G,KA/cI,IAgdJE,QA/cM,KAgdNlC,MA/cM,IAgdN2L,aA/cI,IAgdJlC,MA/cI,IAgdJgzE,WA/cM,IAgdNu7P,WA/cI,IAgdJxqU,aA/cI,G,EAidNxS,WA/cQ,wB,EAjBQ,C,IAuoCtB,CAAA,WACE,aAmBA,SAjdM6gV,EAAmB5/U,EAAA6U,GAkdvB,IAjdIrU,EAAIC,KAmdRD,EAAG66C,WAjdY,GAkdf76C,EAAGsoJ,cAUH,WACE9oJ,EAjdE4M,WAAa,kCAAA,CAAAyuC,WAAA76C,EAAA66C,UAAA,CAAA,C,EA2cZxmC,EAAa0E,SACd/Y,EAAG66C,WAAaxmC,EAAa0E,O,yCA3BnC9a,QAhdEC,OAAA,UAAA,EAkdCK,WAjdM,mCAAoC6gV,CAAA,EAkd1C5gV,UAjdG,yBAodN,WACE,MAAO,CACLC,SAjdM,IAkdNF,WAjdE,mCAkdFK,aAjdE,KAkdFF,MAjdE,GAkdFG,YAjdE,0F,EATA,C,IAqfR,CAAA,WACE,aAqBA,SAASwgV,EAjdEjhV,EAAA0B,EAAAN,GAkdTpB,EAAOkhV,gBAAkBx/U,EAAQga,QAAQtZ,GAAK,KAAOpC,EAAOmH,KAAO,yCACnEnH,EAjdKqQ,QAAW,cAkdhBrQ,EAAOmhV,YAAc,CACnB,CAAEvmU,MAAO,cAAesE,KAAM,mBAAA,EAC9B,CAAEtE,MAAO,aAAcsE,KAAM,oBAAA,EAC7B,CAAEtE,MAAO,eAAgBsE,KAAM,uBAAA,EAhdjC,CAAAtE,MAAS,gBAAAsE,KAAA,wBAAA,GAmdTlf,EAjdIohV,mBAAA,CAAA,EAmdJphV,EAjdMqhV,oBAqeN,SAjdoBxuU,EAAAxK,GAkdlBwK,EAjdM7H,KAAI3C,CAAA,C,EA6bZrI,EAAOshV,yCAuBP,SAjdgDh/U,GAkd9C0tC,WAjdM,WAkdJ5vB,aAjdIC,QAAYrgB,EAAOkhV,gBAAA5gU,KAAAC,UAAAvgB,EAAAqH,OAAA,CAAA,C,EAkdtB,GAAA,EA/cO,YAidN/E,EAjdMF,IAkdRm/U,EAAA,EA/cM,yBAidJj/U,EAjdIF,IAkdNo/U,EAAA,C,EA/BJxhV,EAAOuhV,oBAjdoBA,EAkd3BvhV,EAAOyhV,sBA8EP,SAA+B7mU,GAC7BxZ,EAAW4M,WAAW,kCAAmC4M,CAAA,C,EA9E3D5a,EAAOwhV,aAjdeA,EAsdpB,IAhdO3hV,QAAAq6C,YAAAl6C,EAAwBqH,QAAA8J,eAAqB2P,OAAA,IAChD9gB,EAAOohV,mBAAa,CAAA,CAAAphV,EAAeqH,QAAO8J,eAAS2P,SAErD4gU,CAsfJ,WACE,IACE,IAAIltU,EAAQ8L,KAAK6L,MAAM/L,aAAagM,QAAQpsB,EAAOkhV,eAAA,CAAA,EAC/C1sU,IACFxU,EAAOqH,QAAQ8J,eAAeD,MAAMG,SAAWmD,EAAMrD,eAAeD,MAAMG,SAC1ErR,EAAOqH,QAAQ8J,eAAea,SAASX,SAAWmD,EAAMrD,eAAea,SAASX,SAhdtFrR,EAASqH,QAAA8J,eAAA6+H,aAAsC3+H,SAAAmD,EAAArD,eAAA6+H,aAAA3+H,SAC7CrR,EAAOqH,QAAO8J,eAAgBC,qBAAoBC,SAAYmD,EAAArD,eAAkBC,qBAAyBC,SAkdrGrR,EAAOqH,QAAQ8J,eAAe4+H,gBAAgB1+H,SAAWmD,EAAMrD,eAAe4+H,gBAAgB1+H,SA/cpGrR,EAASqH,QAAA4oI,sBAA4BpoH,IAASxW,SAAAmD,EAAAy7H,sBAAApoH,IAAAxW,SACxCrR,EAAAqH,QAAU4oI,sBAAuBC,WAAO7+H,SAAamD,EAAYy7H,sBAAkBC,WAAa7+H,SAChGrR,EAAOqH,QAAQ4oI,sBAAeE,YAAA9+H,SAAqBmD,EAAUy7H,sBAAAE,YAAA9+H,S,CAmd/D,MAAO0jC,GAhdT4sS,EAAA,C,CAGF3hV,EAASqH,QAAA8J,gBAA0BnR,EAAAqH,QAAA8J,eAAAC,qBAAAC,UACjCmwU,EAAA,C,EAxDE,C,CAkdA,MAAO/gT,GAhdTkhT,EAAA,C,CAweF,SAjdQH,IAkdNxxS,WAjdM,WAkdJ,IAjdI4xS,EAAM,KAkdV,IACEA,EAjdc5hV,EAAOqH,QAAA8J,eAAAC,qBAAAC,Q,CAkdrB,MAjdE0jC,GAkdF4sS,EAAA,C,CAEFvgV,EAjdQ4M,WAAW,gCAA8B4zU,CAAA,C,EAkdhD,GAAA,C,CA0BL,SAjdID,IAkdFvhU,aAAaC,QAAQrgB,EAAOkhV,gBAAiB,EAAA,C,CAG/C,SAASK,EAAoB3mU,GAhd7BxZ,EAAS4M,WAAA,8BAA6C4M,CAAA,C,8CAqWxD/a,QACGC,OAjdK,UAAA,EAkdLK,WAjdK,+CAAY8gV,CAAA,EAkdjB7gV,UAjdK,qCAodR,WACE,MAAO,CACLC,SAjdQ,IAkdRC,MAjdE,CAkdA+G,QAjdE,IAkdFF,KAjdI,G,EAmdNhH,WAjdM,+CAkdNM,YAjdM,kH,EAX8B,C,IAqkB1C,CAAA,WACE,aAwBA,SAjdQohV,EAAkB7hV,EACAqB,EACXJ,EACkBL,EAChBQ,EACgBM,EACCP,GAmdhC,IAAIS,EAjdIC,KAggBR,SAjdMigV,EAAAjuS,GAkdJjyC,EAjdEiyC,YAAOA,C,CAodX,SAjdSkuS,EAAA9lJ,GAkdPr6L,EAAGq6L,YAAcj/K,WAAWi/K,CAAA,C,CAO9B,SAjdM+lJ,EAAAxuM,EAAiCyuM,GAkdrCrgV,EAAGsgV,kBAAoB1uM,EAAgBC,qBAhdnCwuM,GACF7gV,EAAA4M,WAAA,8CAAAwlI,CAAA,C,CAqdJ,SAAS2uM,EAAqB3uM,EAAiByuM,GAhd7CrgV,EAAAwgV,kBAAkB5uM,EAAAG,qBACdsuM,GACF7gV,EAAA4M,WAAc,8CAAAwlI,CAAA,C,CAqdlB,SAASsd,EAA6BmxL,GACpChhV,EAAIgB,YAAYkD,MAAMvC,IAAI,CACxBN,OAAQ,mCAhdZoP,SAAS1R,EAAOmF,MAAS/C,GACvBuP,WAAW3R,EAAAmH,I,EACT,SAAO3E,EAAOC,EAAaC,GAkdvBA,IAAWrB,EAAYsB,aAhdtB,IAAAH,EAAAg2C,cAAAh2C,CAAAA,EAAAg2C,cAkdDspS,EAAet/U,EAASg2C,YAAA,EA/cvB,IAAAh2C,EAAAg1L,cAAAh1L,CAAAA,EAAuCg1L,cAC1CuqJ,EAAev/U,EAAQg1L,YAAA,EAET,IAAdh1L,EAAM6/U,wBAAQ7/U,CAAAA,EAAA6/U,yBA/BEC,EAgClB9/U,EAAA6/U,uBAkbFzgV,EAAG0gV,qBAAuBtlU,WAAWslU,CAAA,GAhbjB,IAAhB9/U,EAAUixI,sBAAMjxI,CAAAA,EAAAixI,sBAClBuuM,EAAex/U,EAAay/U,CAAA,EAmdY,IAAlCz/U,EAASmxI,sBAA8BnxI,CAAAA,EAASmxI,sBAhdpDwuM,EAAY3/U,EAAqBy/U,CAAA,GAGnCrhV,EACAuC,KAAUvC,EAAOwC,OAAA,EACjBC,YAAmBlC,EAAA,WAAA,EAAA,eAAA,CAAA,EACnBmC,SAAQ,WAAA,CAAA,C,GA+WZ1B,EAAGiyC,YAAc,KACjBjyC,EAAGsgV,kBAAoB,KACvBtgV,EAAGwgV,kBAAoB,KACvBxgV,EAAG2gV,SAAW,CAAC,CAACviV,EAAOuiV,SACvB3gV,EAjdEyQ,QAAO3Q,EAkdTE,EAAG6Z,SAAWzb,EAAOmF,MAAMovI,uBAA6D7yI,EAAQga,QAAQD,SAKtGzb,EAAOuS,kBAAoBvS,EAAOuQ,IAAI,gCAAiC,SAASC,EAAOgC,GAhdzFxS,EAASwS,UAAAA,C,GAodPxS,EAAO0tJ,eAAiB1tJ,EAAOuQ,IAAI,mCAAoC,SAASC,EAAO7F,GAhdzF,IACOA,EAAAwzU,oBACI,IAAAxzU,EAAAwzU,kBAAA1qM,sBAAA9oI,CAAAA,EAAAwzU,kBAAA1qM,sBAkdDuuM,EAAqBr3U,EAAKwzU,kBAAmB,CAAA,CAAA,EA/c5C,IAAAxzU,EAAAwzU,kBAAAxqM,sBAAAhpI,CAAAA,EAAAwzU,kBAAAxqM,sBAkdDwuM,EAAqBx3U,EAAKwzU,kBAAmB,CAAA,CAAA,GA9c5C,IAAPxzU,EAAO0zU,oBAAA1zU,CAAAA,EAAA0zU,oBAkdH0D,EAAe/kU,WAAWrS,EAAK0zU,kBAAA,CAAA,EAED,IAA5B1zU,EAAKyzU,oBAA4BzzU,EAAKyzU,mBAhdhD0D,EAASn3U,EAAAyzU,kBAAA,EAELttL,EAAO,CAAA,CAAA,C,CAmdL,MAAO1hJ,GAhdP0hJ,EAAoB,CAAA,CAAA,C,IAsdxB9wJ,EAAOuQ,IAAI,WAAY,WACrBvQ,EAjdE0tJ,eAAA,EAkdF1tJ,EAAOuS,kBAAA,C,GA9cTu+I,EAAwB,CAAA,CAAA,C,sFAuY5BjxJ,QACGC,OAjdK,UAAA,EAkdLK,WAjdU,6BAAA0hV,CAAA,EAkdVzhV,UAAU,mBAGb,WACE,MAAO,CAhdLC,SAAO,IAkdPC,MAAO,CACL6E,MAAO,IAhdXgC,KAAS,IACPo7U,SAAO,IAkdL/vU,UAAW,G,EA/cfrS,WAAS,6BACPK,aAAc,KAkddC,YAAa,4E,EAdgB,C,IAuInC,CAAA,WACE,aAwBA,SAAS+hV,EAA4BxiV,EACAqB,EAhdJD,EACFkM,EACzBrM,EAkd+BJ,EACAq/F,EAhdTg6O,EAkdSn5U,EAhdHD,EAC5BF,EAC0BO,EACD+9E,GAmd7B,IAAIt9E,EAjdEC,KAygBN,SAjdSqoJ,EAAatuI,EAAAmM,EAAApM,GAmctB,IAAyBC,EAASmM,EAASpM,EAlczC/Z,EAAA6gV,sBAkcuB7mU,EAgBLA,EAhBcmM,EAgBLA,EAhBcpM,EAgBLA,EAflC5a,EAAUoC,KAAKpC,EAAUwF,QAAA,EAhdxBC,MAAArF,EAAW,WAAA,EAAA,0CAAA,CAAA,EACZ2H,YAAO3H,EAAS,WAAA,EAAA,4CAAA,CAAA,EAChBsF,oBAAiB,CAAA,CAAA,EAkddM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAChC7B,GAAGvF,EAAQ,WAAA,EAAa,kBAAA,CAAA,EACxBoC,OAAOpC,EAAQ,WAAA,EAAa,gBAAA,CAAA,C,EAhdnCwF,KAAS,WACP+7U,EAAsB9mU,EAAImM,EAAApM,CAAA,C,EAC1B,Y,GASA+mU,EAAoB9mU,EAAAmM,EAAApM,CAAA,C,CAqdtB,SAjdI+mU,EAAA9mU,EAAAmM,EAAApM,GAkdF1a,EAAIgB,YAAYwP,cAAc7I,KAAK,CACjCgT,QAASA,EAAUA,EAAQxZ,GAAK,KAChCuZ,SAAUA,EAhddjK,SAAS9P,EAAAuD,MAAA/C,GACPuP,WAAc/P,EAAAuF,KAkdZouC,uBAAwB,GACxB4lS,SAAUv5U,EAAGs4U,uBAAuB,qB,EAhdxC,SAAS13U,EAAAyF,EAAAvF,GACP,IAUI2Q,EAVJ3Q,IAAWrB,EAAW6H,iBA0BxB9H,EAAS4M,WAAS,kCAwbZ9K,KAAAA,CAxb+B,GAlBVV,EALlBA,GAKHE,EALGA,KAMHrB,EAAsBkE,mBACtB8N,EAAA,UAAsB7Q,EAAS4M,MAkdjCxO,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAakS,EAAc,CAAE3Q,OAAQF,EAAS8Q,YAAA,CAAA,CAAA,EAAiBhQ,SAAS,WAAA,CAAA,GACnHZ,IAAWrB,EAAY0M,oBAhdlCnN,EAAWuC,KAAAvC,EAAWwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAoC,yBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAkdxDlC,EAAW4M,WAAW,mCAAoC,CAAE8uU,WAAct6U,CAAA,CAAA,GAzc5E5B,EAAAuC,KAAAvC,EAAqBwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA6crB48F,EAAMC,eAAA,E,GA3FRv+F,EAAGuD,MAAQnF,EAAOmF,MAClBvD,EAAGuF,KAAOnH,EAAOmH,KACjBvF,EAAG6gV,qBAjdoB,CAAA,EAkdvB7gV,EAAG+gV,sBAjdU,CAAA,EAkdb/gV,EAAGs4U,uBAjdkBA,EAmdrBt4U,EAAGsoJ,cAjdUA,EAkdbtoJ,EAAGgjF,wBASH,SAjdkBv8E,GAChB,IAAAyqF,EAAiBlxF,EAAAuF,OAAA+3E,EAAAzrE,gBAAA7R,EAAAuF,OAAA+3E,EAAAG,eAmdjBt+E,EAjdSoC,KAAA,CAkdPhD,WAjdC,0BAkdDK,aAjdC,KAkdDC,YAjdQ,mFAkdRsG,OAjdIlH,QAAQmH,QAAAlG,EAAamG,KAAA,MAAA,CAAA,EAkdzBuB,YAjdQH,EAkdR5B,oBAAqB,CAAA,EAhdvBgC,OAAU,CACR+C,OAAI,CACF+nF,aAAA3xF,EAAAuD,MAAA8mD,WACEv8C,SAAI,CAAA,EACJmyE,gBAAiBjgF,EAAAuD,MAAM8kB,iBACvB6oE,YAAYA,C,KAodfnsF,KAjdG,SAAImH,GAkdRo8I,EAjdap8I,EAAA8N,QAAW,KAAA9N,EAAA6N,SAAAyH,IAAA,SAAA+uE,GAkdtB,OAjdIA,EAAA/vF,E,OAqbVR,EAAGghV,wBA8FH,SAjdehnU,GAkdb8mU,EAAkB9mU,EAAS,EAAM,IAAA,C,EA3iBnCha,EAAA6gV,qBAAS,CAAA,CAAAziV,EAA0ByiV,oB,kMA+ZrC5iV,QACGC,OAjdC,UAAA,EAkdDK,WAjdG,8BAAYqiV,CAAA,EAkdfpiV,UAjdG,oBAodN,WACE,MAjdI,CAkdFC,SAjdU,IAkdVC,MAjdI,CAkdF6E,MAjdI,IAkdJgC,KAjdI,IAkdJC,WAjdI,IAkdJq7U,qBAjdsB,G,EAmdxBtiV,WAAY,8BACZK,aAAc,KACdC,YAAa,8E,EA/dG,C,IAimBtB,CAAA,WACE,aAuBA,SAldIoiV,EAAc7iV,I,qBA6blBH,QACGC,OAAO,UAAA,EACPK,WAAW,mCAAoC0iV,CAAA,EAC/CziV,UAAU,yBAGb,WAhdD,MAAA,CACCC,SAAA,IAkdII,YAAa,yFACbH,MAAO,CAjdX6G,KAAA,IACGhC,MAAO,IACPkC,QAAW,G,EAodVlH,WAAY,kC,EAZuB,C,IAyBzC,CAAA,WACE,aA5bA,SAAA2iV,EAAA9iV,EAAAiB,EAAAE,EAAAJ,EAAAH,EAAAE,GAEA,IAAAc,EAAAC,KAodED,EAndCuK,IAAOlL,EAAAmL,KAAAnK,YAAAosC,eAAA/hC,QAAA,QAAA,EAAA,EAodR1K,EAndCgf,QAAW,KAodZhf,EAndCc,OAAU1C,EAAA0C,OAodXd,EAAGg1F,aAAe52F,EAAO42F,cAAqC,uDAC9Dh1F,EAAGmhV,aAAe,CAAC,aAjdnB/iV,EAAOgjV,+BAwdP,SAAwC18T,EAAQupB,GAld9C9uC,EAAAoC,KAAY,CACZhD,WAAa,uCAodXK,aAAc,KACdC,YAAa,iHACbsG,OAAQlH,QAAQmH,QAAQlG,EAAUmG,KAAK,MAAA,CAAA,EACvCR,oBAAqB,CAAA,EAld3BgC,OAAS,CACP86D,iBAAO1zB,EAA0BkyI,sBAA2B,E,IAE5Dp7K,KAAO,SAAAmH,GACHA,GAA4B,IAArBA,EAAemB,SAudlBs8C,EAAaz9C,EAAOsV,IAAI,SAAUooC,GAldnC,MAAqB,UAArB,OAAAA,EAodUA,EAAQppD,GAldI,UAAtB,OAAAopD,EACAA,EADA,KAAA,C,GAMPvqD,EAAAgB,YAAAosC,eAAAlsC,OAAA,CAodMC,GAAIytC,EAAcztC,GAldxBi0C,iBAAsBkV,EAChBjpD,OAAA,sB,EACF,SAAaE,GACXqtC,EAAOwG,kBAAuB7zC,EAAO6zC,kBAAuB,IAAAuE,MAAA,EAAA,CAAA,EAod5D/K,EAAcsgM,uBAAyB3tO,EAAS2tO,uBAldlDtgM,EAAAkyI,qBAAAv/K,EAAAu/K,sBAAA,GACAnhL,EAAUuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,gCAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,EACV,SAAA8L,GAodExO,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,OAtCxGtD,EAndEijV,sCA8fF,SAnde38T,EAAAupB,EAAAutB,GAodbn8D,EAAIgB,YAAYosC,eAAelsC,OAAO,CACpCC,GAAIytC,EAAcztC,GAldtBi0C,iBAAS,CAAA+mB,GACP96D,OAAA,yB,EACE,SAAAE,GAodAqtC,EAndCwG,kBAAA7zC,EAAA6zC,kBAAA,IAAAuE,MAAA,EAAA,CAAA,EAodD/K,EAAcsgM,uBAAyB3tO,EAAS2tO,uBAldlDvvO,EAAWuC,KAAAvC,EAAOwC,OAAA,EAAWC,YAAAlC,EAAA,WAAA,EAAA,gCAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,EAC3B,SAAA8L,GAodAxO,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,GAEpGgjB,EAndE4kB,gBAAA,C,EA6ZJlrC,EAndEkjV,0BA0mBF,SAAmCrzS,GAndnC7vC,EAAAm8B,MAAA,wCAAA0T,CAAA,C,EA6TA7vC,EAndImjV,iBA2gBJ,SAA0BtzS,GACxB7vC,EAAOwf,QAAQ5d,GAAGkkJ,iBAAiBnrI,OAASk1B,EAAcphC,SAld5DzO,EAASwf,QAAA5d,GAAA6d,eAAe,U,EA2dtB7d,EAndEgf,QAAW,CAodXnS,SAndC,CAodC0S,YAAahgB,EAAQ,WAAA,EAAa,yBAAA,EAClCsf,MAAO,WAldbY,WAAS,CAAA,EACHP,QAAA,CAAA,EACFgB,SAAY,IACZ6F,MAAI,IACFpG,cAAe,CAAA,EACfC,WAAO,CAAA,EACPC,aAAO,CAAA,EACPH,UAAO,eACPK,aAAO,wb,EA4dTre,SAAU,CAldR6d,YAAOhgB,EAAQ,WAAA,EAAkB,wBAAA,EACnCsf,MAAA,WAodEY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,GAldhB6F,MAAS,GACPpG,cAAa,CAAA,EAodTC,WAAY,CAAA,EACZC,aAAc,CAAA,EAldpBH,UAAS,eACPK,aAAW,qE,EAqdT00B,iBAAkB,CAldtBl1B,YAAShgB,EAAA,WAAA,EAA6B,mBAAA,EACpCsf,MAAW,mBAodPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAe,CAAA,EACfa,cAAe,CAAA,EACfZ,WAAY,CAAA,EAldrBC,aAAW,CAAA,EACVH,UAAA,eAodQK,aAAc,msC,EAoBhB65P,QAAS,CACPr6P,YAAa,GACbV,MAAO,UACPY,WAAY,CAAA,EAndpBP,QAAS,CAAA,EAqdDgB,SAAU,GACV8F,SAAU,GACVD,MAAO,GACPpG,cAAe,CAAA,EACfE,aAAc,CAAA,EACdY,YAAa,CAAA,EACbI,iBAAkB,CAAA,EAndpBL,cAAK,CAAA,EACNgqM,gBAAc,CAAA,EACdzqM,aAAA,sP,2EAkSL9hB,QAjdEC,OAAG,UAAA,EAmdFK,WAAW,4CAA6C2iV,CAAA,EAjdzD1iV,UAAA,kCAqdF,WACE,MAldO,CAmdLC,SAAU,IACVC,MAAO,CACLoC,OAAQ,IAjdZk0F,aAAS,I,EAodPz2F,WAAY,4CACZK,aAAc,KACdC,YAAa,6G,EA9df,C,IA8oBJ,CAAA,WACE,aAsBA,SAAS2iV,EAAyCpjV,EAAQiB,EAAKE,EAASJ,EAAWH,EAAUE,GAG3F,IApdIc,EAAAC,KAqdJD,EAAGuK,IAAMlL,EAAImL,KAAKnK,YAAY8Z,gBAAgBzP,QAAQ,QAAS,EAAA,EAAIA,QAAQ,UAAW,EAAA,EACtF1K,EAAGgf,QAAU,KACbhf,EApdEc,OAAA1C,EAAA0C,OAqdFd,EAAGg1F,aAAe52F,EAAO42F,cAAqC,sDAC9Dh1F,EAAGmhV,aAAe,CAAC,aAWjBnhV,EAAGgf,QAAU,CACXy1B,iBAAkB,CAndtBl1B,YAAShgB,EAAA,WAAA,EAAqB,mBAAA,EACzBsf,MAAA,mBACCY,WAAW,CAAA,EACbP,QAAW,CAAA,EAqdTgB,SAAU,IACV6F,MAAO,IACPpG,cAAe,CAAA,EAndrBa,cAAS,CAAA,EACJZ,WAAA,CAAA,EACCC,aAAW,CAAA,EACbH,UAAW,eAqdTK,aAzaL,mpB,EA2aGlT,SAAU,CAndd0S,YAAShgB,EAAA,WAAA,EAA6B,yBAAA,EAChCsf,MAAA,WACFY,WAAQ,CAAA,EACRP,QAAU,CAAA,EACVgB,SAAY,IACXP,cAAS,CAAA,EACVC,WAAI,CAAA,EACFC,aAAa,CAAA,EAqdbH,UApdE,eAqdFK,aAAc,ioB,EAYhB65P,QAAS,CACPr6P,YApdK,GACLV,MAAA,UAqdAY,WApdQ,CAAA,EAqdRP,QApdK,CAAA,EAqdLgB,SApdK,GAqdL8F,SAAU,GACVD,MAAO,GACPpG,cAAe,CAAA,EACfE,aAAc,CAAA,EACdY,YAAa,CAAA,EACbI,iBAAkB,CAAA,EAClBL,cAAe,CAAA,EACfgqM,gBAAiB,CAAA,EAnd1BzqM,aAAW,sO,GAzDR3hB,EAAAijV,sCAqiBA,SAA+C38T,EAAQ/K,EAAgB8nU,GACrEpiV,EAAIgB,YAAYosC,eAAelsC,OAAO,CApd1CC,GAASihV,EAsdHhtS,iBAAkB,CAAC96B,EArdYnZ,IAsd/BE,OAAQ,yB,EACP,SAAUE,GACX+Y,EAAe6zB,gBArdgB7zB,EAAA6zB,gBAAA/rB,OAAA,SAAA5U,GAsd7B,OAAOA,EAASrM,KAAOihV,C,GAEzBziV,EAASuC,KAAKvC,EAASwC,OAAA,EArdQC,YAAAlC,EAAA,WAAA,EAAA,yBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,EAsd9B,SAAU8L,GACXxO,EAASuC,KAAKvC,EAASwC,OAAA,EArdQC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,GAudjCgjB,EAAO4kB,gBAAA,C,EA7FTlrC,EApdKsjV,8BA+FL,SAASh9T,EAAA/K,GACTxa,EAAWoC,KAAA,CACRhD,WAAO,sCACPK,aAAA,KACAC,YAAA,iHACAsG,OAAAlH,QAAAmH,QAAyBlG,EAAAmG,KAAA,MAAA,CAAA,EAsdxBR,oBAAqB,CAAA,EApdtBiJ,SAAA,CAAA,EACAjH,OAAA,CACAgrB,YAAA7xB,EAAAc,OAA0Bq7F,mBAAAp0E,aAsdvBpO,eAAgBA,C,IAEjB5U,KAAK,SAAU0nC,GApdpB9yB,EAAS6zB,gBAAaf,C,4EAsUxBxuC,QACGC,OAAO,UAAA,EACPK,WAAW,2CAA4CijV,CAAA,EACvDhjV,UApdO,iCAudV,WACE,MApdM,CAqdJC,SApdM,IAqdNC,MAAO,CACLoC,OApdM,IAqdNk0F,aApdI,I,EAsdNz2F,WApdM,2CAqdNK,aAAc,KACdC,YApdW,2G,EAZsB,C,IAwmBvC,CAAA,WACE,aAOA,SAAS8iV,EArdCziV,EAAuBye,EAAAgzJ,EAAAixK,GAsd/B,MAAO,CACLnjV,SArdM,IAsdNI,YArdM,qDAsdNH,MAAO,CACL2e,KAAM,IACNvD,QArdM,G,EAudRvb,WArdW,CAAE,SAAA,SAAAH,GAsdXA,EAAOif,KAAOjf,EAAOif,MAAQ,GAC7Bjf,EAAO0b,QAAU1b,EAAO0b,SAAW,GACnC1b,EAAOuyK,oBAAsBA,EAC7BvyK,EAAOyjV,eAAiB,GAndxB,IAAA,IAAAnuS,EAAU,EAAKA,EAAAkuS,EAAUv0U,OAAA,EAAAqmC,EAAA,CAsdvB,IArdCouS,EAAc,GAsdfA,EArdCC,SAAoBH,EAAaluS,GAsdlCouS,EArdCryU,SAAoBrR,EAAAif,KAAA0kU,UAAA,CAAA,GAAA3jV,EAAAif,KAAA0kU,SAAAhpS,QAAA+oS,EAAAC,QAAA,EAsdrB3jV,EArdCyjV,eAAetxU,KAAQuxU,CAAA,C,IAyd5BhwT,KArdI,SAAApzB,EAAkBS,GAudpBT,EAAMsjV,0BAA4B,SAAS37T,GACzC3nB,EAAMkqD,cAAgBviC,EACtB3nB,EAAM2e,KAAKgJ,MAAQA,C,EASrB3nB,EAAMujV,cAAgB,WApd1B,IAASjpU,EAAAob,KAAAC,MAAkB31B,EAAS2e,KAAA/N,OAAS,EAAA5Q,EAAU2e,KAAA6kU,oBAAA,KAAA,GAAA,EAAA,IACjD,OAAAxyU,MAAAsJ,CAAA,EACOta,EAAA2e,KAAU/N,MACnB0J,C,EAGAta,EAAAyjV,oBAAwB,SAAAJ,GAItB,GAHFrjV,EAAU2e,KAAG0kU,WACZrjV,EAAS2e,KAAA0kU,SAAc,IAEtBA,EAAAtyU,SAsdE/Q,EArdG2e,KAAA0kU,SAAAxxU,KAAAwxU,EAAAA,QAAA,OAudH,IAAI,IAAIruS,EAAI,EAAGA,EAAIh1C,EAAM2e,KAAK0kU,SAAS10U,OAAQ,EAAEqmC,EAC/C,GAAGh1C,EAAM2e,KAAK0kU,SAASruS,IAAMquS,EAASA,SAAS,CAC7CrjV,EAAM2e,KAAK0kU,SAAS/8S,OAAO0O,EAAG,CAAA,EAC9B,K,GAKRh1C,EArdK0jV,kBAAe,WAwdlB,IAvdF,IAAAC,EAAc,GACdnkM,EAAW,GACNxqG,EAAA,EAAAA,EAAAh1C,EAAAmjV,eAAAx0U,OAAA,EAAAqmC,EACLh1C,EAAAmjV,eAAAnuS,GAAAjkC,WAsdM4yU,GAAa3jV,EAAMmjV,eAAeE,SAAW7jM,EApd/CA,EAAA,KAGR,OAASmkM,C,iFA8YXpkV,QACGC,OArdG,UAAA,EAsdHM,UArdG,eAAqBmjV,CAAA,C,IAiiB7B,CAAA,WACE,aAOA,SAASW,EAAepjV,EAAWye,EAAY4kU,GApdhD,MAAA,CACC9jV,SAAA,IAsdII,YAAa,yDACbH,MAAO,CArdX2e,KAAA,IACGmlU,eAAO,G,EAEPjkV,WAAU,CAAA,SAAA,SAAAH,GAudPA,EAAOif,KAAOjf,EAAOif,MAAQ,GAC7Bjf,EAAOokV,eAAiBpkV,EAAOokV,gBAAkB,CAAA,EArdvDpkV,EAASqkV,OAAA,CAAA,EACPrkV,EAAOqqG,aAAA85O,C,GAELzwT,KAAA,SAAapzB,I,uDAmcjBT,QACGC,OAAO,UAAA,EACPM,UAAU,iBAAkB8jV,CAAA,C,IAsBjC,CAAA,WACE,aAOA,SAASI,EAAYxjV,EAAWye,GAC9B,MAAO,CACLlf,SAAU,IACVI,YAAa,mDACbH,MAAO,CACLikV,WAAY,KArdnBC,mBAAY,KACXC,yBAAA,KAudML,eAAgB,I,EArdtBjkV,WAAA,CAAA,SAAA,SAAAH,GAMA,GALGA,EAAO0kV,aAAA,sBACP1kV,EAAA2kV,eAAW,mBACX3kV,EAAU4kV,aAAA,OAwdP5kV,EAAOokV,eAAiBpkV,EAAOokV,gBAAkB,CAAA,EACjDpkV,EAAOukV,WAAavkV,EAAOukV,YAAc,GAtdtCvkV,EAAAwkV,mBACP,IAAO,IAAAlvS,EAAA,EAAAA,EAAAt1C,EAAAukV,WAAAt1U,OAAA,EAAAqmC,EACLt1C,EAAUukV,WAAAjvS,GAAAjkC,SAAA,CAAA,EAGRrR,EAAA6kV,UAAc,KAwdd7kV,EAAO45O,SAAW,MAtdpB55O,EAAAomP,UAAYpmP,EAAA0kV,aACZ1kV,EAAAqmP,aAAc,CAAA,EACdrmP,EAAA8kV,WAAa,GAydX9kV,EAAOuQ,IAAI,uBAAwB,SAASC,EAAOC,GACjD,IAAK,IAAI6kC,EAAI,EAAGA,EAAIt1C,EAAOukV,WAAWt1U,OAAQ,EAAEqmC,EAC9Ct1C,EAAOukV,WAAWjvS,GAAGjkC,SAAW,CAAA,C,GAGpCrR,EAAOuQ,IAAI,yBAA0B,SAASC,EAAOC,GAtdrD,IAAK,IAAA6kC,EAAA,EAAAA,EAAAt1C,EAAAukV,WAAAt1U,OAAA,EAAAqmC,EACNt1C,EAAUukV,WAAKjvS,GAAAjkC,SAAY,CAAA,C,GAO9BrR,EAAOmwC,OAAA,aAAA,WAEP,IADA,IAAO40S,EAAA,GACAzvS,EAAA,EAAAA,EAAmBt1C,EAAAukV,WAAAt1U,OAAA,EAAAqmC,EAwddt1C,EAAOukV,WAAWjvS,GAAGjkC,UAtdxB0zU,EAAA5yU,KAAAnS,EAAAukV,WAA+BjvS,EAAA,EAEpCt1C,EAAAykV,yBAAYM,C,EACZ,CAAA,CAAA,C,GA0dFrxT,KAvdE,SAAApzB,EAAAS,EAAqBsnH,GA+drB/nH,EAAM0kV,gBAAkB,SAAS79U,GAtdjC7G,EAAI+lP,aAAa/lP,EAAW8lP,WAAUj/O,GAAS,CAAA7G,EAAA+lP,aAwd7C/lP,EAvdM8lP,UAAOj/O,C,yCAqZrBtH,QACGC,OAAO,UAAA,EACPM,UAAU,cAAekkV,CAAA,C,IAkG9B,CAAA,WACE,aAOA,SAASW,EAAkBnkV,EAAWye,GACpC,MAAO,CAtdPlf,SAAA,IAwdEI,YAAa,gEACbH,MAAO,CAtdT0qC,KAAS,IACP7lC,MAAG,IACDuW,QAAA,IAwdAwpU,aAvdE,KAwdFC,YAvdS,KAwdTC,UAvdE,I,EAydJjlV,WAvdI,CAAA,SAAU,SAAAH,GAwdZA,EAvdEgrC,KAAOhrC,EAAAgrC,KAwdThrC,EAvdEmF,MAAAnF,EAAemF,MAwdjBnF,EAvdE0b,QAAY1b,EAAA0b,QAwdd1b,EAvdEklV,aAAcllV,EAAAklV,cAAA,CAAA,EAwdhBllV,EAvdEolV,UAAWplV,EAAAolV,WAAA,CAAA,C,GAydf1xT,KAvdM,SAAApzB,GAydJA,EAvdIo7B,SAAA,WAydF,IADA,IAvdEzE,EAAA,EACAqe,EAAA,EAAAA,EAAAh1C,EAAA0qC,KAAA/7B,OAAA,EAAAqmC,EACAre,GAAA32B,EAAA0qC,KAAAsK,GAAA+vS,YAGJ,OAqdEpuT,EAvdEA,EAAA/Z,QAAA,CAAA,EAwdF5c,EAAM6kV,YAAcluT,C,EAItB32B,EAvdEglV,YAAY,aA2ddhlV,EAvdEilV,YAAe,WAEf,OADYjlV,EAAAo7B,SAAA,EACEp7B,EAAAob,QAAA8hB,IAAA,KAAAtgB,QAAA,CAAA,C,yCA8atBrd,QAtdEC,OAAA,UAAA,EAwdCM,UAvdQ,oBAAW6kV,CAAA,C,IAqgBxB,CAAA,WACE,aAqBA,SAASO,EAvdCxlV,EAAAe,EAAAE,EAAAI,EAAAggD,EAAAxgD,EAAAa,EACA65O,GA0dR,IAAI35O,EAvdIC,KAwdRD,EAAG4E,MAAQ,GACX5E,EAAGoe,QAvdU,CAAA,EAwdbpe,EAAG6jV,eAvdgB,GA0dnB7jV,EAAG8jV,sBA8BH,SAxdWC,GAydT,OAAOA,EAAcn/U,MAAM66C,EAAWuB,IAAA,E,EA9BxChhD,EAAGgkV,qBAvbH,SAAOD,GACL,OAAAA,EAAUp9U,KAAA84C,EAAAuB,IAAA,E,EAubZhhD,EAAGikV,qBAoCH,SAxdkBF,GAydZA,EAAcjyT,KAvdlB3oB,OAAAC,KAAY26U,EAAAjyT,KAAA,QAAA,EACZiyT,EAAchqG,YAAAj6O,EAAA8B,cAAAmiV,EAAAhqG,UAAA,GACd96O,EAAAiD,GAAA6hV,EAAahqG,UAAA,C,EAsbb/5O,EAAG4E,MAaCxG,EAAOmH,OAASo0O,EAAqBuqG,+BAChC,wBAtdF9lV,EAAAmH,OAAAo0O,EAAAwqG,2BACX,0BAwde/lV,EAAOmH,OAASo0O,EAAqByqG,4BACvC,0BADF,KAAA,EAhBPpkV,EAAGoe,QAvdC,CAAA,EAwdJ/e,EAvdIglV,QAAAR,eAAcz6S,KAAA,CAwdhB7jC,KAAMnH,EAAOmH,I,EACZ,SAAU3E,EAAUC,EAAUC,GAC3BA,IAAWrB,EAAYsB,cACzBf,EAAG6jV,eAAiBjjV,EAASwF,SArdjCpG,EAAAoe,QAAa,CAAA,C,+GA0ajBngB,QACGC,OAvdK,UAAA,EAwdLK,WAvdK,iCAAYqlV,CAAA,EAwdjBplV,UAvdK,uBA0dR,WACE,MAAO,CACLC,SAvdM,IAwdNI,YAvdM,sFAwdNN,WAvdM,uCAwdNG,MAvdM,CAwdJ6G,KAvdI,G,GATY,C,IAiiBxB,CAAA,WACE,aAOA,SAAS++U,EAAiBplV,EAAWqlV,EAAgBllV,EAAKL,EAAUG,EAAWC,EAASolV,EAAW7+U,GACjG,MAAO,CAvdPlH,SAAA,IAydEI,YAAa,iEAvdfH,MAAO,CACPy4B,SAAO,KAydHstT,aAAc,KACdC,WAAY,KACZC,eAAgB,KAvdpBC,iBAAsB,KACpBlsT,UAAa,I,EA0dbn6B,WAxdI,CAAA,SAAa,SAAQH,GA0dvBA,EAxdEymV,cAAY9/T,MAAA3mB,EAAA+4B,SAydd/4B,EAxdE+4B,SAAS/4B,EAAA+4B,UAAA,GA0dX/4B,EAxdE0mV,aAAO7mV,QAAAye,KAAA6nU,CAAA,EAydTnmV,EAxdE2mV,cAAe,IAAA5gS,KAAA/lD,EAAA+4B,SAAA10B,UAAA,EAydjBrE,EAxdEs6B,UAAet6B,EAAAs6B,UA0djBt6B,EAxdEqmV,aAAc1/T,MAAA3mB,EAAA4mV,cAAA5mV,EAAA4mV,aAydhB5mV,EAxdEsmV,WAAW3/T,MAAA3mB,EAAA6mV,YAAA7mV,EAAA6mV,WAydb7mV,EAxdEumV,eAAc5/T,MAAA3mB,EAAAumV,gBAAAvmV,EAAAumV,eAydhBvmV,EAAOwmV,iBAA8C7/T,MAA3B3mB,EAAOwmV,kBAAwCxmV,EAAOwmV,gB,GAGlF9yT,KAxdI,SAAOpzB,GA0dTA,EAxdEiQ,IAAA,YAAS,SAAAC,EAAA7F,GACTrK,EAAAmmV,cAAU97U,EAAA87U,cACVnmV,EAAAwmV,aAAA,C,GA4dFxmV,EAxdEwmV,aAAc,WACZxmV,EAAAmmV,cACAxlV,EAAAw9B,UAAA71B,KAAAA,KACAtI,EAAAy4B,SACA,SAAAv2B,GAEAA,EAAAJ,IACA9B,EAAAipE,UAAA,mBAAA,IAAA,EACAjpE,EAAAy4B,SAAAv2B,EA2d6BmkB,MAAnBrmB,EAAMg6B,WAvdXh6B,EAAAg6B,UAAA,CACPvB,SAAaz4B,EAAAy4B,Q,IAKbz4B,EAAUipE,UAAA,uBAAA,OAAA,C,GAMVtoE,EAAAw9B,UAAet8B,OAAAA,OACf7B,EAAAy4B,SACA,SAAAv2B,GA0dUA,EAASJ,IACX9B,EAAMipE,UAAU,mBAAoB,IAAA,EACpCjpE,EAAMy4B,SAAWv2B,EArd3BmkB,MAAArmB,EAAAg6B,WACAh6B,EAAAg6B,UAAA,CACAvB,SAAAz4B,EAAAy4B,Q,IAKAz4B,EAAAipE,UAAA,uBAAA,OAAA,C,IAMAjpE,EAAAymV,eAAA,SAAA1+U,GA0dM9B,EAAUxF,EAAUwF,QAAA,EACrBC,MAAM,kBAAA,EAvdNnD,YAAA,2EAAA,EACHy6B,UAAY,WAAA,EACVt1B,YAAAH,CAAA,EACJ5B,oBAAmB,CAAA,CAAA,EACnBM,OAAQlH,QAAAmH,QAAAsB,SAAAC,IAAA,CAAA,EACP7B,GAAA,QAAA,EACDnD,OAAA,QAAA,EA0dExC,EAAUoC,KAAKoD,CAAA,EAASI,KAAK,WAtd9BrG,EAAAy4B,SAAiB2qC,QAAA,CAAA,EA0ddziE,EAAIw9B,UAAUt8B,OAAOA,OAvdpB7B,EAAAy4B,SA0dC,SAASv2B,GAvdVxB,EAAA+rB,QAAA6F,KAAA,EACGtyB,EAAKipE,UAAA,mBAAA,IAAA,C,EAGb,SAAa/mE,GACL69E,QAAQjxE,MAAA5M,CAAA,C,MA+dhBlC,EAxdMipE,UAAU,SAAA9kD,EAAgBtd,GA0d9BvG,EAASuC,KAAK,CACZwpB,SAAU,6BAAgCxlB,EAAO,KAAQsd,EAAU,cACnEnhB,SAAU,c,0GA1HpBzD,QAvdEC,OAAG,UAAA,EACHM,UAAG,mBAAgB8lV,CAAA,C,IAulBvB,CAAA,WAvdE,aAmeE,SAzdIc,EAAMhnV,EAAA88J,GA2dN,IAAIl7J,EAAKC,KAtdTD,EAAAqlV,QAAO,CAAA,EA4dPrlV,EAAGslV,KAOH,WAqBYrnV,QAAQw0C,UAAUr0C,EAAOmnV,SAAA,GAAmC,CAAA,IAArBnnV,EAAOmnV,YAbtDvlV,EAAGqlV,QAAU,CAACrlV,EAAGqlV,QAGjBnqL,EAASoS,YAAY,UAAWttK,EAAGqlV,OAAA,E,kCAlC3CpnV,QACKC,OAAO,UAAA,EACPK,WAAW,qBAAsB6mV,CAAA,EAxdxC5mV,UAAS,WAugBP,WAEI,MAzdM,CACFC,SAAY,IA0dZC,MAzdW,CACP6mV,UAAW,I,EA2dfhnV,WAAY,qBACZgsQ,WAAY,CAAA,EACZi7E,QAAY,SAAUC,GArdpB,OAFAA,EAAA78Q,SAAoB,WAAA,EAEpB,SAAYlqE,EAAAgnV,EAAAC,EAAAC,EAAAC,GAGZA,EAAmB,SAAAtqE,GA2dTmqE,EAASzf,MAAA,EACTyf,EAAS1yS,OAAOuoO,CAAA,C,MA1hBhB,EACpB/8Q,UAAO,gBAmiBP,WAxdF,MAAA,CACUC,SAAA,IACP+xH,QAAU,YA2dH+5I,WAAY,CAAA,EACZi7E,QAAY,SAAUC,GAtd5B,OAFKA,EAAA78Q,SAAA,iBAAA,EAEQ,SAAAlqE,EAAAgnV,EAAAC,EAAAC,EAAAC,GAGXA,EAAgB,SAAAtqE,GAELmqE,EAAUzf,MAAA,EACPyf,EAAO1yS,OAAQuoO,CAAA,C,GA8djB78Q,EAAMonV,WAAaF,EAAaN,I,IAvjBzC,EACL9mV,UAAU,eAmGd,WA4dM,MAAO,CA1dbC,SAAA,IACU+xH,QAAA,YACP+5I,WAAU,CAAA,EA4dHi7E,QAAY,SAAUC,GAvdlB,OAFLA,EAAY78Q,SAAW,gBAAA,EAElB,SAAAlqE,EAAAgnV,EAAAC,EAAAC,EAAAC,GAGIA,EAAA,SAAAtqE,GAEZmqE,EAAAzf,MAAA,EACgByf,EAAA1yS,OAAAuoO,CAAA,C,GAIT78Q,EAAAonV,WAAiBF,EAAAN,I,IAtHhB,C,IAwlBhB,CAAA,WAEI,aAWA,SA3dIS,EAAWroU,GA6dX,IA3dI1d,EAAAC,KA+NJ,SAAO+lV,IAgeHhmV,EAAGimV,eAAe,CAAA,C,CAkFtB,SAASC,EAAeC,GAGpB,OAAMC,EAAkBD,CAAA,EAzdjBnmV,EAAAqmV,MAAKF,EAAA,GAAAznV,MAAA4nV,aA2dD,I,CAldtB,SAAAC,EAAAJ,GAieW,OAAMC,EAAkBD,CAAA,EA1djB,CAAA,CAAAnmV,EAAAqmV,MAAAF,EAAY,GAAAznV,MAAA8nV,SAH3B,I,CAuBI,SAASC,EAAAN,GAGL,OAAAC,EAAAD,CAAA,EAqeKD,CAAAA,CAAAA,EAAeC,CAAA,GAKbnmV,EAAGqmV,MAAMF,EAAa,GAAG7/S,KAAKC,OAT1B,I,CAkBf,SAAS6/S,EAAkBD,GAEvB,MAAO,EAAEloV,QAAQq6C,YAAY6tS,CAAA,GAAeA,EAAa,GAAKA,EAAanmV,EAAGqmV,MAAMh5U,O,CAzXxFrN,EAAG0mV,SAAW3hU,KAAAA,EAEd/kB,EAAG+vR,YAAc,aACjB/vR,EAAGqmV,MAAQ,GA1dXrmV,EAAA2mV,YAAc5hU,KAAAA,EA4dd/kB,EA3dE4mV,kBAAe,EA8djB5mV,EAAG6mV,eAkCH,SA3diB92D,GAEb/vR,EAAA+vR,YAAgBA,GAAA,Y,EAwbpB/vR,EAAG8mV,iBA2CH,SAA0BxgT,GAEtBtmC,EAAG0mV,SAAWpgT,C,EA5ClBtmC,EA3dE+mV,aAqDL,SAAU3hV,EAAqB1G,EAAA4nC,GA8dpBrb,EAAO,CA3dZ7lB,QAAkBA,EAClB1G,MAAAA,EACK4nC,KAAAA,EACV6/S,WAAaznV,EAAAusB,MAAAjrB,EAAAqmV,MAAAh5U,OAAA,EACN25U,UAAAtoV,EAAAsoV,UACCC,mBAAAvoV,EAAAuoV,kB,EAYN,OARAjnV,EAAAqmV,MAAa91U,KAAA0a,CAAA,EAGfjrB,EAAAqmV,MAAa5wS,KAAA,SAAUpsC,EAASssD,GAEvB,OAAQtsD,EAAA88U,WAAOxwR,EAAAwwR,U,GAGfl7T,C,EAmZPjrB,EA3dGknV,WA0iBH,WA1dElnV,EAAAimV,eAAcjmV,EAAQ4mV,iBAAA,C,EA4YxB5mV,EAAGmnV,UAsFH,WAvdEzpU,EAAQ,WA+dF,IAAM,IAAIi3G,EAAI,EAAGA,EAAI30H,EAAGqmV,MAAMh5U,OAAQsnH,CAAA,GAElC30H,EAAGqmV,MAAM1xN,GAAGruF,KAAKq2B,aAAA,EACjB38D,EAAGqmV,MAAM1xN,GAAGruF,KAAK8gT,cAAA,EAIrBpnV,EAAG0mV,SAAS/pR,aAAA,EA5d1B38D,EAAA0mV,SAAAU,cAAA,EAGapB,EAAA,C,IArGThmV,EAAAimV,eA8GE,SAAME,GAgeF,GAAMC,EAAkBD,CAAA,EArd5B,GA2dInmV,EAAG4mV,kBAAoBT,EA3dtB,eAAAnmV,EAAA+vR,YACN,CAEA,IAAA,IAAiBr8O,EAAA,EAAAA,EAAA1zC,EAAAqmV,MAAAh5U,OAAAqmC,CAAA,GA+dJ1zC,EAAGqmV,MAAM3yS,GAAGtuC,QAAQsE,KAAA,EAIxB1J,EAAGqmV,MAAMrmV,EAAG4mV,kBAAoB,GAAGxhV,QAAQ7D,KAAA,C,MA3dvD,GAAA,aAAAvB,EAAA+vR,YA8dQ,CA3dH,IAAQ,IAAAj8O,EAAA,EAAAA,EAAA9zC,EAAAqmV,MAAAh5U,OAAAymC,CAAA,GAEC9zC,EAAAqmV,MAAAvyS,GAAA1uC,QAAoBC,KAAA,0BAAA,EAAAqE,KAAA,EAIzB1J,EAAAqmV,MAAArmV,EAAA4mV,kBAA0B,GAAAxhV,QAAAC,KAAA,0BAAA,EAAA9D,KAAA,C,GAgV/BvB,EAAGqnV,SAsJH,SA7dgBlB,GAiePI,EAAaJ,CAAA,GAKlBnmV,EAAGimV,eAAeE,CAAA,C,EA9JtBnmV,EAAGsnV,iBAzTP,WAmeQ,IAjeJ,IAAOnB,EAAKnmV,EAAA4mV,kBAAoB,EAielBj3N,EAAIw2N,EAAiB,GAALx2N,EAAQA,CAAA,GAE9B,GAAK,CAAC42N,EAAa52N,CAAA,EACnB,CA5dJw2N,EAAAx2N,EACV,K,CAGU3vH,EAAAimV,eAAAE,CAAA,C,EA4SJnmV,EAAGunV,aAtSL,WAME,IAJF,IAAOpB,EAAAnmV,EAAA4mV,kBAAA,EAILj3N,EAAgBw2N,EAAAx2N,GAAA3vH,EAAAqmV,MAAAh5U,OAAAsiH,CAAA,GAEhB,GAAW,CAAA42N,EAAA52N,CAAA,EA+dH,CA7dGw2N,EAAUx2N,EA+dT,K,CA1dZ3vH,EAAOimV,eAAeE,CAAA,C,EAwRtBnmV,EAAGgmV,cAAgBA,EACnBhmV,EAAGwnV,aAmNH,WAEIxnV,EAAGimV,eAAejmV,EAAGqmV,MAAMh5U,MAAA,C,EA9qB/BrN,EAAAynV,YAsrBA,WAEI,OA9duB,IAAjBznV,EAAA4mV,iB,EAkQV5mV,EA3dE0nV,WA+rBF,WAEI,OA9dM1nV,EAAA4mV,oBAAgB5mV,EAAAqmV,MAAAh5U,M,EA0P1BrN,EAAG2nV,cA6OH,SAAuBxB,GAGnB,OA9dMC,EAAiBD,CAAA,EAmehBnmV,EA9dG4mV,oBAAkBT,EA2djB,I,EAjPfnmV,EAAG4nV,eA6PH,SAAwBzB,GAGpB,GAAK,CAACC,EAAkBD,CAAA,EA5dvB,OAAM,KAmeP,IAFA,IA9dC9gT,EAAY,CAAA,EAELqO,EAAA,EAAQA,EAAAyyS,EAAiBzyS,CAAA,GAEhC,GAAO,CAAA+yS,EAAA/yS,CAAA,EA+dJ,CA7dIrO,EAAK,CAAA,EA+dL,K,CAIR,OA9dEA,C,EA+MNrlC,EAAGkmV,eAAiBA,EACpBlmV,EAAGumV,aAAeA,EAClBvmV,EAAG6nV,iBAwTH,SAA0B58T,GAEtB,MAAO,CAACs7T,EAAat7T,EAAKk7T,UAAA,C,EAzT9BnmV,EAAGymV,YAAcA,EACjBzmV,EAAGomV,kBAAoBA,EAzdvBpmV,EAAA8nV,YA2zBA,WA7dI,OAAA9nV,EAAA0mV,SAAYngT,M,EA0EvB,SAAAwhT,EAAArqU,GAEG,MAAA,CAgeQjf,SAAkB,IAClBC,MAAkB,GAClB8xH,QAAkB,CAAC,OAAQ,qBAhenC96E,SAAA,KACKn3C,WAAO,mCACPypV,iBAAW,CACX7hN,MAAU,U,EAEVokI,WAAU,CAAA,EACV1rQ,YAAU,kEAkeP2mV,QAAkB,SAAUC,GA7d5B,OAFCA,EAAA78Q,SAAoB,YAAA,EAEhB,SAAAlqE,EAAAgnV,EAAAC,EAAAsC,GAmeG,IAAIC,EAAWD,EAAM,GAhenBE,EAAAF,EAAA,GASXvqU,EAAA,WAEayqU,EAAAtB,eAAA,UAAA,EACDsB,EAAArB,iBAAAoB,CAAA,EAkeCC,EAAcjB,WAAA,C,oDA5flCjpV,QA1dIC,OAAO,UAAA,EACPK,WAAO,sBAAawnV,CAAA,EA4dnBvnV,UAAU,sBAmZf,WAEI,MAAO,CACHC,SA/dQ,IAgeRC,MA/dY,GAgeZ8xH,QA/dY,CAAA,OAAS,uBAgerB96E,SAAkB,KAClBn3C,WAAkB,mCAClBypV,iBAAkB,CACd7hN,MAAO,U,EAEXokI,WAAkB,CAAA,EAClB1rQ,YAAkB,sEAClB2mV,QAAkB,SAAUC,GA3dzB,OAFFA,EAAA78Q,SAAA,YAAA,EAEE,SAAAlqE,EAAAgnV,EAAAC,EAAAsC,GAEH,IAAYC,EAAAD,EAAA,GACAE,EAAAF,EAAA,GAmeJE,EAActB,eAAe,YAAA,EA9djCsB,EAAgBrB,iBAAgBoB,CAAA,EAChCC,EAAAjB,WAAA,C,IAkD0B,EA1dlC1oV,UAAW,0BA84Bf,WAEI,MAAO,CACHC,SAAU,IACV+xH,QAAU,CAAC,OAAQ,wBACnB96E,SAAU,IACVh3C,MAAU,CACNusB,KAAoB,KACpB+7T,UAAoB,KA9dvBC,mBAAA,KACTX,aAAA,KACWE,SAAA,I,EAEHhB,QAAA,SAAYC,GAIR,OAFJA,EAAY78Q,SAAU,iBAAA,EAElB,SAAkBlqE,EAAAgnV,EAAAC,EAAAsC,GAElB,IAAOC,EAASD,EAAS,GACzBE,EAAAF,EAAA,GAGIvpV,EAAA4nV,aAAAroV,QAAAw0C,UAAAkzS,EAAAW,YAAA,EAkeA6B,EAAcpB,aAAarB,EAAUhnV,EAAOwpV,CAAA,EA5d5CxC,EAAMh8U,KAAA,C,IA5ciB,EA4dlClL,UA3dU,oBAAkBupV,CAAA,EA4d5BvpV,UA3dU,wBAy9Bf,WA/dI,MAAG,CAkeCC,SAAa,IAhed+xH,QAAA,CAAA,OAAgB,sBAChB96E,SAAA,IACAh3C,MAAA,CACAusB,KAAe,KACf+7T,UAAmB,KACnBC,mBAAc,KACdX,aAAoB,KAkefE,SAAoB,I,EAExBj8E,WAAa,CAAA,EACb1rQ,YAAa,4EACb2mV,QAAa,SAAUC,GAInB,OAFAA,EAAS78Q,SAAS,iBAAA,EAEX,SAAkBlqE,EAAOgnV,EAAUC,EAAQsC,GA/djD,IAAAC,EAAeD,EAAA,GACxBE,EAAAF,EAAA,GAoeYvpV,EAAM4nV,aAAeroV,QAAQw0C,UAAUkzS,EAAOW,YAAA,EAG9C5nV,EAAM0pV,SAAWD,EAAcpB,aAAarB,EAAUhnV,EAAOwpV,CAAA,EA9dhExpV,EAAA2pV,UAAiBF,EAoedzC,EAASrgV,KAAK,0BAAA,EAA4BqE,KAAA,C,IA3/BlB,C,IAigC5C,CAAA,WAEI,aA8IA,SAAS4+U,EAAwB5qU,EAAUrB,GAEvC,MAAO,CAheH3d,MAAM,CAAA,EACN8xH,QAAA,cAkeAg1N,QAjeS,SAACC,GAqeN,OAFAA,EAjeI78Q,SAAa,kBAAA,EAAAA,SAAA,QAAA,EAmeV,SAAkBlqE,EAAOgnV,EAAUC,EAAQ4C,GAE9C,IAAIC,EAAY,GAherBC,EAAe,CAAA,EAkeNC,EAAiB,CAAA,EACjBC,EAAWJ,EAAeK,YAAA,EArdjClD,EAAArgV,KAAA,SAAA,EAoeW3G,EAAMiQ,IAAI,6BAA8B,SAAUC,EAAOC,GAKrDg6U,EAHa5qV,QAAQmH,QAAQyJ,EAAK,EAAA,CAGrB,EAAQ9J,KAAK,WA/dzC2Y,EAAA,WAEK+qU,EAAsB,CAAA,C,OAQ3BI,EAAAnD,CAAA,EAAA3gV,KAAA,WAEK2Y,EAAA,WAmec+qU,EAAa,CAAA,C,KAMzBE,EAAShlU,GAAG,SAAUmlU,CAAA,EAGtBA,EAAA,EAIJ,IAAIC,EAAmBrqV,EAAM6vC,OACzB,WAEI,OAAOk6S,GAAcC,C,EAEzB,SAAU3kR,EAASu3J,GAEVr9N,QAAQgwU,OAAOlqQ,EAASu3J,CAAA,GA5djDv3J,IAEU2hR,EAAkBt9Q,YAAA,QAAA,EAAAQ,SAAA,SAAA,EAoeJmgR,EAAA,E,EA/dL,CAAA,CAAA,EAyeP,SAASF,EAAazjV,GAElB,IAAIyX,EAAWR,EAAGS,MAAA,EAhevBksU,EAAA5jV,EAAAC,KAAA,KAAA,EAcI,OAqdqB,EAAf2jV,EAAM37U,OAEP27U,EAAMrlU,GAAG,OAAQ,WAEb9G,EAAS7J,QAAQ,iBAAA,C,GAKrB6J,EAAS7J,QAAQ,WAAA,EA9dtB6J,EAAAM,O,CAueH,SAAS2rU,IAEAH,EAAS77S,UAAA,EAAc67S,EAASt1R,OAAA,EAAWqyR,EAAShkV,SAAA,EAAW43H,IAAMkvN,IAEtE9qU,EAAS,WA/dPgrU,EAAA,CAAA,C,GAIlBC,EAAAxoE,IAAA,SAAA2oE,CAAA,E,iCA0NR7qV,QACKC,OAjeO,UAAA,EAkePK,WAjeO,uBAseZ,WAEI,IAAIyB,EAAKC,KAGTD,EAAG2oV,SAAW5jU,KAAAA,EAGd/kB,EAAGipV,YAvdH,SAASN,GAEL3oV,EAAG2oV,SAAAA,C,EAsdP3oV,EAAG4oV,YAmBH,WAEI,OAAO5oV,EAAG2oV,Q,EApgBc,EAke3BnqV,UAjeO,aAwgBZ,WAEI,MAAO,CACHE,MAAY,CACRwqV,WAAY,KACZj8S,SAAY,sB,EAEhB1uC,WAjeO,uBAkePinV,QAAY,SAAUC,GAIlB,OAneAA,EAAA78Q,SAAA,aAAA,EAmeO,SAAkBlqE,EAAOgnV,EAAUC,EAAQ4C,GAG9C,IAAIY,EAAalrV,QAAQmH,QAAQ,mHAAA,EA7dpCmN,GA8dGmzU,EAAS1yS,OAAOm2S,CAAA,EA9dJ,CACxBR,SAAA,U,GAIQp2U,EAAAtU,QAAAqhB,OAAA/M,EAAA7T,EAAAwqV,WAAA,EAAA,EAoeQP,EAAW1qV,QAAQmH,QAAQmN,EAAOo2U,QAAA,EA7d9CH,GAHGD,EAAoBU,YAAAN,CAAA,EAGvB,KAQO,SAAS/7S,IAEH+7S,EAAA77S,UAAA,EAAgB67S,EAAAt1R,OAAA,EAAAm1R,EAAAW,EAAAznV,SAAA,EAAA43H,MAGf6vN,EAAWvgR,SAAS,MAAA,EAoelBwgR,EAAA,EA9dA1qV,EAAAuuC,SAAA,EAAAloC,KAmeI,WAGIokV,EAAW/gR,YAAY,MAAA,EAGvBihR,EAAA,C,EAIJ,WA9dhBF,EAAA/1S,OAAA,C,IASC,SAAAi2S,IAEDV,EAAgBhlU,GAAA,SAAAipB,CAAA,C,CAMhB,SAAMw8S,IAEFT,EAAaxoE,IAAA,SAAAvzO,CAAA,C,CAlDjBy8S,EAAA,EAuhBI3qV,EAAMiQ,IAAI,WAAY,WAElBy6U,EAAA,C,MAlmBR,EAkeP5qV,UAjeO,iBAAoB8pV,CAAA,C,IA4uBpC,CAAA,WAEI,aAOA,SAASgB,EAAwBC,GAE7B,MAAO,CACH9qV,SAAU,IACVqzB,KAAU,SAAUpzB,EAAOgnV,GAEvB,IAAI8D,EAA0B9qV,EAAMiQ,IAAI,yBAA0B,WA/d1E46U,EAAAE,MAAA/D,CAAA,EAAA3gV,KAAA,WAGIykV,EAAA,EAoeY9qV,EAAQgnV,EAAW,I,8BAnBvCznV,QAheIC,OAAA,UAAA,EACAM,UAAA,iBAAA8qV,CAAA,C,IAyfR,CAAA,WAEI,aAQA,SAjeII,EAAAtrV,EAAAw8D,EAAA17D,EAAAwe,EAAArB,EAAAmuL,GAmeA,IAAIxqM,EAAKC,KAGTD,EAAGwtB,MAAQ,GACXxtB,EAAG2pV,aAAe,CACdC,SAAU,G,EA/dd5pV,EAAA6pV,eAAS,CAAA,EACT7pV,EAAA8pV,oBAAA,EAkeA9pV,EAAG+pV,kBAjeoB,CAAA,EAkevB/pV,EAAGgqV,gBAAkB,CAAA,EAErBhqV,EAAGoG,QAAU,KACbpG,EAAGiqV,UAAY,GA/dnBjqV,EAAAkqV,gBAAA,CACIC,WAAO,QACHC,cAAA,CAAA,EACAC,cAAA,WACAC,OAAA,WAEAtqV,EAAAuqV,cAAA,C,GAseJvqV,EAAGwqV,gBA4EH,WASI,IAPA,IAAIpkV,EAAU,GACVqkV,EAAiBjgJ,EAAoBkgJ,kBAAA,EACrC7tU,EAAWR,EAAGS,MAAA,EAKR63G,EAAI,EAAGA,EAAI81N,EAAep9U,OAAQsnH,CAAA,GA/dpC81N,EAAA91N,GAAAg2N,QAmeAvkV,EAjeImK,KAAAk6U,EAAc91N,EAAA,EAse1B,GAAK30H,EAAGwtB,MACR,CACIpnB,EAAUA,EAAQqb,OAAO,SAAUpE,GA/dtC,GAAA,CAAA,EAAApf,QAAA+2D,UAAA33C,EAAAzY,KAAA,EAAAmU,OAAA9a,QAAA+2D,UAAAh1D,EAAAwtB,KAAA,CAAA,EAEE,MAAA,CAAA,C,GAMC,IAAA,IAAAkmB,EAAA,EAAAA,EAAoBttC,EAAAiH,OAAAqmC,CAAA,GACpB,CAEAttC,EAAAstC,GAAAk3S,YAAoB,CAAA,EAGxB,IAAa,IAAAhvN,EAAA,EAAAA,EAAA57H,EAAAiqV,UAAA58U,OAAAuuH,CAAA,GAEb,GAAA57H,EAAAiqV,UAAAruN,GAAA8kJ,MAAAt6Q,EAAAstC,GAAAgtO,IACI,CAkeYt6Q,EAAQstC,GAAGk3S,YAAc,CAAA,EAhe9B,K,QA4eoB,EAAtB5qV,EAAGiqV,UAAU58U,SAEdjH,EAAUpG,EAAGiqV,WAndxB,OAwdGjqV,EAAG8pV,oBAAsB,EA9dpCpsU,EAAA,WAoeeb,EAAS7J,QAAQ5M,CAAA,C,EAClB,GAAA,EA/dNyW,EAAWM,O,EAkVZnd,EAAG6qV,cA5UP,WAoeQ,IAAIhuU,EAAWR,EAAGS,MAAA,EA5dnBmtU,EAAchsV,QAAA6sV,SAAAlwR,EAAA55D,IAAA,gBAAA,CAAA,EAqeR/C,QAAQq6C,YAAY2xS,CAAA,IAErBA,EAAY,GAiBZrvR,EAASkrE,IAAI,iBAAkB7nI,QAAQskG,OAAO0nP,CAAA,CAAA,GA5dtD,OAFJptU,EAAS7J,QAAAi3U,CAAA,EAEEptU,EAAAM,O,EAySPnd,EAAGuqV,cA+LH,WAEI,IAleI1tU,EAASR,EAAAS,MAAA,EAgfb,OARA89C,EAleQkrE,IAAA,iBAAgB7nI,QAAAskG,OAAAviG,EAAAiqV,SAAA,CAAA,EAqexBvsU,EAleQ,WAoeJb,EAAS7J,QAAQ,CAACvG,QAAW,CAAA,CAAA,CAAA,C,EAC9B,GAAA,EAEIoQ,EAleCM,O,EAoRZnd,EAAG+qV,YAsNH,SAAqB1tU,GAGjBA,EAAKutU,YAAc,CAAA,EAGnB5qV,EAAGiqV,UAAU15U,KAAK8M,CAAA,EAGlBrd,EAAGuqV,cAAA,C,EA9NPvqV,EAAGgrV,eAsOH,SAAwB3tU,GAGpBA,EAAKutU,YAAc,CAAA,EAGnB,IAAM,IAAIj2N,EAAI,EAAGA,EAAI30H,EAleGiqV,UAAA58U,OAAWsnH,CAAA,GAoe1B30H,EAAGiqV,UAAUt1N,GAAG+rJ,MAAQrjQ,EAAKqjQ,MAG9B1gR,EAAGiqV,UAAUjlT,OAAO2vF,EAAG,CAAA,EAGjB30H,EAAGwtB,QAIwB,IAAxBxtB,EAAGiqV,UAAU58U,OAEdrN,EAAGoG,QAAU,KA7dZuuH,GAAA30H,EAAAiqV,UAAA58U,SAELrN,EAAS8pV,oBAAa9pV,EAAAiqV,UAAA58U,OAAA,KA0elCrN,EAAGuqV,cAAA,C,EAxQPvqV,EAAGirV,kBAgRH,SAA2B5tU,GAGlBA,EAAKutU,YAEN5qV,EAAGgrV,eAAe3tU,CAAA,EA9dtBrd,EAAA+qV,YAAS1tU,CAAA,C,EA2Mbrd,EAAGkrV,YAgSH,SAlegBt8U,GAoeZA,EAAMirN,eAAA,C,EAjSV75N,EAAGmrV,cAySH,SAAuBv8U,GAEnB,IAAI+kG,EAleI/kG,EAAA+kG,QAMQ,CAAA,EA6dL,CAAC,GAAI,IAKN56D,QAleM46D,CAAA,GAoeZ/kG,EAAMirN,eAAA,EAGV,OAASlmH,GAGL,KAAK,GAGD3zG,EAAGirV,kBAAkBjrV,EAAGoG,QAAQpG,EAAG8pV,oBAAA,EAEnC,MAGJ,KAAK,GA/dW,GAkeP9pV,EAAG8pV,oBAleI,IAqeR9pV,EAAG8pV,mBAAA,GAGH9pV,EAAGorV,8BAAA,GAGP,MAGJ,KAAK,GA/dGprV,EAAA8pV,oBAAA,EAAA9pV,EAAAoG,QAAAiH,SAqeArN,EAAG8pV,mBAAA,GAGH9pV,EAAGorV,8BAAA,E,GAxVnBprV,EAAGqrV,iBAuWH,SAA0BtmT,GAEjB/kC,EAAG+pV,oBAOR/pV,EAAG8pV,oBAAsB/kT,E,EA/W7B/kC,EAAGsrV,6BAuXH,WAGItrV,EAAG+pV,kBAAoB,CAAA,EAGvBrsU,EAAS/b,OAAO3B,EAAGurV,uBAAA,EAGnBvrV,EAAGurV,wBAA0B7tU,EAAS,WAElC1d,EAAG+pV,kBAleU,CAAA,C,EAmed,GAAA,C,EAlYP/pV,EAAGorV,8BA0YH,WAEI,IAAII,EAAYtsV,EAAUmG,KAAK,uBAAA,EAAyBA,KAAK,UAAA,EACzDomV,EAAiBxtV,QAAQmH,QAAQomV,EAAUnmV,KAAK,SAAA,EAAWrF,EAAG8pV,oBAAA,EAElE,CAAA,IAEQxwN,EAFHkyN,GAAaC,IAEVnyN,EAAMmyN,EAAe/pV,SAAA,EAAW43H,IAAM,EACtCT,EAAS4yN,EAAe/pV,SAAA,EAAW43H,IAAMmyN,EAAeC,YAAA,EAAgB,EA/dxF1rV,EAAAsrV,6BAAA,EAoeiBE,EAAU1+S,UAAA,EAAcwsF,GAje7BkyN,EAAA1+S,UAAAwsF,CAAA,EAseKT,EAAU2yN,EAAUn4R,OAAA,EAAWm4R,EAAU1+S,UAAA,IAje1D0+S,EAAA1+S,UAAA+rF,EAAA2yN,EAAAn4R,OAAA,CAAA,C,GAsEIrzD,EAAG2rV,gBAqaH,WAEI3rV,EAAGgqV,gBAneS,CAAAhqV,EAAAgqV,e,EA5ZpBhqV,EAAS6qV,cAAA,EAAA9lV,KAEE,SAAAnE,GAEHZ,EAAWiqV,UAAQrpV,EAGK,EAApBZ,EAAAiqV,UAAoB58U,SAEpBrN,EAAAoG,QAAoBxF,E,GAuexBxC,EAjeImwC,OAAS,oBAAS,SAAAw1B,EAAAu3J,GAElBr9N,QAAOq6C,YAAkByrB,CAAA,GAsepB9lE,QAAQgwU,OAAOlqQ,EAASu3J,CAAA,IAM7Bt7N,EAAG6pV,eAAiB,CAAA,EAGpB7pV,EAAGwqV,gBAAA,EAAkBzlV,KAEjB,SAAUnE,GAENZ,EAAGoG,QAAUxF,C,EA9dtB,WAEHZ,EAAAoG,QAAkB,E,GAElBinC,QACA,WAoeYrtC,EAAG6pV,eAAiB,CAAA,C,wFArGxC5rV,QACKC,OAAO,UAAA,EACPK,WAAW,wBAAyBmrV,CAAA,EACpClrV,UAAU,cAudf,WAEI,MAAO,CACHC,SAAkB,IAClBC,MAAkB,GAle7B8xH,QAAA,cACDjyH,WAAA,uCACIypV,iBAAA,GAoeQnpV,YAAkB,qDAClB2mV,QAAkB,SAAUC,GAKxB,OAtePA,EAAW78Q,SAAA,cAAA,EAseG,SAAkBlqE,EAAOgnV,I,GAred,C,IA+elC,CAAA,WAEI,aAEAznV,QACKC,OAAO,UAAA,EAneRM,UAAG,kBAueP,WAEI,MApeI,CACAC,SAAA,IACA+xH,QAAA,aACA1+F,KAAA,SAAApzB,EAAAgnV,EAAAC,EAAAiG,GAyeIltV,EAAM6vC,OAAO,WAlelB,OAAgBq9S,EAAAnJ,OAAA,GAAA,CAAAmJ,EAAAC,aAAA,C,EAChB,SAAgB9nR,GAEhB9lE,QAAiBq6C,YAAAyrB,CAAA,IAKjB2hR,EAAAvgV,OAAA,EAAmBmoK,YAAA,cAAAvpG,CAAA,EACnB9lE,QAAAmH,QAAA,MAAA,EAA+BkoK,YAAA,eAAAvpG,CAAA,E,KAxBrB,C,IAkgBrB,CAAA,WAEI,aAQA,SAAS+nR,EAAsB1tV,EAAQ88J,EAAUx9I,GAE7C,IAAI1d,EAAKC,KAGTD,EAAGm7D,UAAY,CAAA,EACfn7D,EAAGwtB,MAAQ,GACXxtB,EAAG2pV,aAAe,CACdC,SAAU5pV,EAAG4pV,UAAY,C,EAE7B5pV,EAAG6pV,eApee,CAAA,EAqelB7pV,EAAGoG,QApeC,KAqeJpG,EAAG8pV,oBApekB,EAqerB9pV,EAAG+pV,kBApeK,CAAA,EAueR/pV,EAAGwqV,gBAkFH,SAAyBpkV,GAIrB,IAKIg5F,EACA2sP,EA1eA/rV,CAAAA,EAAAm7D,YAyeAikC,EAAUnhG,QAAQmhG,QAAQh5F,CAAA,EAC1B2lV,EAAqB,OAAZ3lV,EAGPg5F,GAAY2sP,KAMlB/rV,EAAG8pV,oBAAsB,EAGzB9pV,EAAGoG,QAAUA,E,EAtGjBpG,EAAGouU,OAxXH,WAueIpuU,EAAGm7D,UAAY,CAAA,EAGf/8D,EAAOgwU,OAAA,EAGFpuU,EAAGgsV,UAAY/tV,QAAQmwO,WAAWpuO,EAAGgsV,QAAA,GAle1ChsV,EAAAgsV,SAAA,C,EA8WJhsV,EAAGi7D,SA6HH,WAGIj7D,EAAGwtB,MAAQ,GAGXxtB,EAAGwqV,gBAAgB,IAAA,EAGnBxqV,EAAGm7D,UAAY,CAAA,EAGf/8D,EAAO68D,SAAA,EAjePj7D,EAAAisV,YAAiBhuV,QAAAmwO,WAAApuO,EAAAisV,UAAA,GAEjBjsV,EAAOisV,WAAA,C,EAwVXjsV,EAAGkrV,YAqJH,SAAqBt8U,GAEjBA,EAAMirN,eAAA,C,EAtJV75N,EAAGmrV,cA8JH,SApeiBv8U,GAseb,IAAI+kG,EAAU/kG,EAAM+kG,QAMS,CAAC,EAzevB,CAAA,GAAS,GAAA,IAyeN56D,QAAQ46D,CAAA,GAEd/kG,EAAMirN,eAAA,EAGV,OAASlmH,GAGL,KAAK,GAGD3zG,EAAGirV,kBAAkBjrV,EAAGoG,QAAQpG,EAAG8pV,oBAAA,EAEnC,MAGJ,KAAK,GAGD9pV,EAAGi7D,SAAA,EAlef,MAueQ,KAAK,GAjeT,GAAAj7D,EAAA8pV,oBAAA,IAueY9pV,EAAG8pV,mBAAA,GAGH9pV,EAAGorV,8BAAA,GAGP,MAGJ,KAAK,GAEKprV,EAAGoG,SAMJpG,EAAG8pV,oBApeO,EAAA9pV,EAAsBoG,QAAGiH,SAuepCrN,EAAG8pV,mBAAA,GAGH9pV,EAAGorV,8BAAA,E,GA1NnBprV,EAAGqrV,iBAyOH,SApe0BtmT,GAsejB/kC,EAAG+pV,oBAOR/pV,EAAG8pV,oBAAsB/kT,E,EAjP7B/kC,EAAGsrV,6BAyPH,WAGItrV,EAAG+pV,kBAAoB,CAAA,EAje3BrsU,EAAS/b,OAAA3B,EAAcurV,uBAAA,EAuenBvrV,EAAGurV,wBApea7tU,EAAA,WAseZ1d,EAAG+pV,kBAAoB,CAAA,C,EACxB,GAAA,C,EApQP/pV,EAAGirV,kBA4QH,SAA2B5tU,GAlenBrd,EAAAksV,eAseAlsV,EAAGksV,cAAc,CAAC7uU,KAAMA,CAAA,CAAA,EAI5Brd,EAAGi7D,SAAA,C,EAnRPj7D,EAAGorV,8BA2RH,WAEI,IAAII,EAAYtwL,EAAS71J,KAAK,wBAAA,EAC1BomV,EApeWxtV,QAAAmH,QAAAomV,EAAAnmV,KAAA,SAAA,EAAArF,EAAA8pV,oBAAA,EAsef,CAAA,IAEQxwN,EAFHkyN,GAAaC,IAEVnyN,EAAMmyN,EAAe/pV,SAAA,EAAW43H,IAAM,EACtCT,EAAS4yN,EAAe/pV,SAAA,EAAW43H,IAAMmyN,EAAeC,YAAA,EAAgB,EAG5E1rV,EAAGsrV,6BAAA,EAleCE,EAAA1+S,UAAA,EAAAwsF,GAseAkyN,EApeO1+S,UAAAwsF,CAAA,EAueNT,EApeM2yN,EAAAn4R,OAAA,EAAAm4R,EAAA1+S,UAAA,IAseP0+S,EAAU1+S,UAAU+rF,EAAS2yN,EAAUn4R,OAAA,CAAA,C,GAtS/Cj1D,EAAOmwC,OApeK,oBAAa,SAAAw1B,EAAAu3J,GAserB,IAmBI6wH,EAvfFluV,QAAAq6C,YAAAyrB,CAAA,GAyeG9lE,QAAQgwU,OAAOlqQ,EAASu3J,CAAA,GAKxBt7N,EAAGm7D,YA7dRixR,EAAchuV,EAAAwf,QAAAyuU,MAAArsV,EAAAssV,SAAA,CAAA9+T,MAAAu2C,CAAA,CAAA,EAqeVq7B,EAAUnhG,QAAQmhG,QAAQgtP,CAAA,EAC1BD,EAAaC,GAAqB,CAAC,CAACA,EAAkBrnV,KAErDq6F,GAjeLp/F,EAAKwqV,gBAAkB4B,CAAA,EAuelBD,IAGDnsV,EAAG6pV,eAAiB,CAAA,EAle5BuC,EAAArnV,KAEI,SAAAnE,GAGQZ,EAAOwqV,gBAAA5pV,CAAA,C,EAueP,WAheRZ,EAAAwqV,gBAAA,EAAA,C,GAEIn9S,QAAQ,WAGFrtC,EAAI6pV,eAAc,CAAA,C,OA8tBxC,SAAS0C,EAAqBrtV,GAE1B,MAAO,CACHT,SAAkB,IAClBC,MAAkB,GAClB8xH,QAAkB,cAnetBjyH,WAAS,uCACTypV,iBAAA,CACI4B,SAAQ,KACR0C,SAAA,IACIJ,cAAA,KAqeAF,SAAe,KACfC,WAAe,I,EAEnBptV,YAAkB,uDAnelB2mV,QAAG,SAAsBC,GAyerB,OAFAA,EAAS78Q,SAAS,eAAA,EAEX,SAAkBlqE,EAAOgnV,GAje/B,IAAA8G,EACTv0I,EAAA/4M,EAAAmG,KAAA,MAAA,EAueY3G,EAAMu8D,SAjcV,WAueQyqR,EAASt9Q,YAAY,UAAA,EAGrB6vI,EAAO7vI,YAAY,wBAAA,C,EAxCvB1pE,EAAM0vU,OAmBN,WAjeAsX,EAAM98Q,SAAe,UAAA,EAuejBqvI,EAAOrvI,SAAS,wBAAA,EAjenB4jR,EAAU7tT,MAAA,C,EAqdP6tT,EAAU9G,EAASrgV,KAAK,sBAAA,C,uEA/X5CpH,QACKC,OApeM,UAAA,EAqeNK,WAAW,wBAAyButV,CAAA,EACpCttV,UApeO,cAAU+tV,CAAA,C,IAk4B1B,CAAA,WAEI,aAiEA,SAASE,EAAkB/uU,EAAUgvU,EAAgBjmO,EAASkmO,GApe9D,MAAA,CACKluV,SAAO,KACP+mV,QAAW,SAAAC,GAIP,GAAAkH,EAAAA,EAAAC,UAAsB,yBAAA,GAOxBD,EAAeC,UAAA,iCAAA,GAAAnmO,EAAAomO,SAAA,GA8eV,OAxeLpH,EAAA78Q,SAAoB,WAAA,EAweR,SAAkBlqE,EAAOgnV,EAAUC,GAEtC,IAAIlgV,EAAU,GA2Dd,SAASqnV,IApeLC,iBAAAxsV,OAAAmlV,EAAA,EAAA,C,CApDbC,EAAAqH,WAweavnV,EAAU/G,EAAM2tV,MAAM1G,EAAOqH,QAAA,GAlepCvnV,EAAAxH,QAAAqhB,OAAA,GAAAotU,EAAAE,UAAA,EAAAnnV,CAAA,EAGEiY,EAAO,WAELqvU,iBAAoBznV,WAAAogV,EAAA,GAAAjgV,CAAA,C,EACzB,CAAA,EAyeIigV,EAAS/hU,GAAG,aAAcmpU,CAAA,EAI1BpuV,EAAM6vC,OAAO,WApeT,OAAAm3S,EAAA1jB,KAAA,cAAA,C,EACR,SAAAj+P,EAAAu3J,GAwear9N,QAAQq6C,YAAYyrB,CAAA,GAAY9lE,QAAQgwU,OAAOlqQ,EAASu3J,CAAA,GAjejEwxH,EAAA,C,GA2eApuV,EAAM6vC,OAAO,WAET,OAAOm3S,EAAS1jB,KAAK,aAAA,C,EACtB,SAAUj+P,EAASu3J,GApe1Br9N,QAAAq6C,YAAAyrB,CAAA,GAAA9lE,QAAAgwU,OAAAlqQ,EAAAu3J,CAAA,GA2eQwxH,EAAA,C,GAYJpuV,EAAMiQ,IAAI,WAAY,WApelB+2U,EAAAvlE,IAAA,YAAA,EAueA4sE,iBAAiB7gB,QAAQwZ,EAAS,EAAA,C,qEAhoBtDznV,QACIC,OAAO,UAAA,EAqeNsf,SApeG,iBAweR,WAGI,IApeIyvU,EAAA,CAqeAC,WAAwB,EACxBC,iBApesB,CAAA,EAqetBC,iBAAwB,CAAA,EACxBC,mBApeoB,KAqepBC,mBApeI,KAqeJC,iBAAwB,CAAA,EACxBC,YAAwB,CAAA,EACxBC,gBAAwB,CAAA,EACxBC,gBAAwB,CAAA,EACxBC,oBAAwB,EACxBC,oBAAwB,EACxBC,uBAAwB,CAAA,C,EAhehC5tV,KAAAsS,OASI,SAAOquJ,GAEHqsL,EAAUhvV,QAAAqhB,OAAA,GAAA2tU,EAAArsL,CAAA,C,EA0ed3gK,KAAK6tV,KApeG,WA0eJ,MAxeQ,CAqeJlB,UAUJ,WAEI,OAAOK,C,IA3hBO,EAqerBzuV,UApeG,WAAkBiuV,CAAA,C,IAooB9B,CAAA,WAEI,aAEAxuV,QACKC,OAAO,UAAA,EAreRM,UAAS,oBAyeb,WAEI,MAteI,CAueAC,SAteI,IAueJqzB,KAAU,SAAUpzB,EAAOgnV,GAnevB,IAAA/pE,EAAS19Q,QAAYmH,QAAA,iDAAA,EAuerBsgV,EAASvgE,MAAMxJ,CAAA,EACfA,EAAQ3oO,OAAO0yS,CAAA,C,GAlfE,C,IAyfjC,CAAA,WAEI,aAEAznV,QACKC,OAAO,UAAA,EACPM,UAAU,gBAGf,WAEI,MAAO,CAreHC,SAAG,IAueHC,MAAU,CACNqvV,cAAe,G,EAEnBj8T,KAAU,SAAUpzB,EAAOgnV,GApenBsI,EAAYtvV,EAAQqvV,cAAc35T,KAAA46C,MAAA56C,KAAAg8O,OAAA,EAAA1xQ,EAAAqvV,cAAA,MAAA,GAC1CrI,EAAA98Q,SAAAolR,CAAA,C,GAydwB,C,IAkBpC,CAAA,WAEI,aAmeA,SAASC,EAAuB7vV,EAAQosM,GAK/BpsM,EAAO8vV,KA1enBjuV,KA4eco5Q,WAAa7uE,EAAoBivE,cAAcr7Q,EAAO8vV,IAAA,EA5epEjuV,KAgfco5Q,WAAa7uE,EAAoBivE,cAAA,EAhf/Cx5Q,KAOQkuV,2BA+fD,WAEIlwV,QAAQmH,QAAQ,MAAA,EAAQkoK,YAAY,6CAAA,C,EARpCk9B,EAAoB/0J,KAAA,C,CAa5B,SA7eI24S,EAAqB5uV,EAAAke,EAAAC,EAAA6sL,GA+erB,MAAO,CACH/rM,SAAa,IACbC,MAAa,CACT2vV,OAAQ,IACRH,KAAQ,G,EAEZ3vV,WAAa,+BACbM,YAAa,4DACb0rQ,WAAa,CAAA,EA5ejBi7E,QAAS,SAAeC,GAIhB,OAFJA,EAAM78Q,SAAQ,eAAA,EAEL,SAAMlqE,EAAAgnV,GA+eP,IAAIztI,EAASh6M,QAAQmH,QAAQ,MAAA,EACzBkpV,EAAiBrwV,QAAQmH,QAAQ,8CAAA,EA5ejCmpV,EAAWtwV,QAAAmH,QAAA,+CAAA,EA8eXopV,EAAU7wU,EAAW,YAAA,EAoGzB,SAAS8wU,EAAUJ,GAGf7jJ,EAAoBikJ,UAAUJ,CAAA,EA3e9CA,GAGI7uV,EAAA4M,WAAA,wBAAA,EAgfgB6rM,EAAOrvI,SAAS,sBAAA,EA1elB8lR,EAAA,KAKVC,EAAAnkJ,EAAAokJ,cAAA,IAgfgBD,EAAWjwV,MAAM67B,MAAM,4BAAA,EAI3B09K,EAAO7vI,YAAY,gDAAA,EAoCvBmmR,EAAgBn7S,OAAA,E,CA1BpB,SAASs7S,IAELhJ,EAASvgV,OAAA,EAAS6tC,OAAOs7S,CAAA,EAzezC5wU,EAAA,WAEiB4wU,EAAA3qU,GAAA,wBAAAkrU,CAAA,C,GAqgBL,SA7eIA,EAAejgV,GAEfA,GA+eIA,EAAMirN,eAAA,EAIVrvB,EAAoBskJ,cAAc,CAAA,CAAA,EA1elCH,EAAOnkJ,EAAAokJ,cAAA,EACPD,GAEAA,EAAUjwV,MAAA67B,MAAA,4BAAA,EAifV09K,EAAOrvI,SAAS,2BAAA,EAGhB0lR,EAAel7S,OAAA,EApCf6kK,EAAO5yM,KAAK,OAAA,EAAS2tC,OAAOu7S,CAAA,EAC5BA,EAAgB5qU,GAAG,wBAAyBorU,CAAA,C,CA4ChD,SAASA,EAAqBngV,GAErBA,GAEDA,EAAMirN,eAAA,EAIVrvB,EAAoBskJ,cAAc,CAAA,CAAA,EAGlCtvV,EAAW4M,WAAW,wBAAA,EAGtB6rM,EAAO7vI,YAAY,2BAAA,EA1e1BmmR,EAAWn7S,OAAA,EAgfJs7S,EAAA,C,CAvNJlkJ,EAAoBwkJ,mBAAmBtwV,CAAA,EAtdZ,OAApB8rM,EAAoB0N,UAAA,GA+enB1N,EAAoBikJ,UAAU/vV,EAAM2vV,MAAA,EAGnC7jJ,EAAoB0N,UAAA,IAQrBx6L,EAAS,WA3eVle,EAAA4M,WAAA,wBAAA,C,GAifC6rM,EAAOrvI,SAAS,sBAAA,EAGhB8lR,EAAA,GAKRhwV,EAAM6vC,OAAO,WAET,OAAOigT,EAAQ3C,aAAA,C,EAChB,SAAU9nR,EAASu3J,GAEbr9N,QAAQq6C,YAAYyrB,CAAA,GAAY9lE,QAAQgwU,OAAOlqQ,EAASu3J,CAAA,GAxe1D9wB,EAAA0N,UAAA,IAifMn0I,EAGDvkE,EAAW4M,WAAW,wBAAA,GAxerBuiV,EAASnkJ,EAAQokJ,cAAA,IAG9BD,EAAAjwV,MAAA67B,MAAA,4BAAA,E,GAofA77B,EAAM6vC,OA7eE,SAAO,SAAAw1B,EAAAu3J,GA+eNr9N,QAAQq6C,YAAYyrB,CAAA,GAAY9lE,QAAQgwU,OAAOlqQ,EAASu3J,CAAA,GAK7DmzH,EAAU1qR,CAAA,C,GAzWlBrlE,EAAAy5M,aAAA,WAifQs2I,EAAU,CAFGjkJ,EAAoB0N,UAAA,CAEtB,C,EAMfx5M,EAAMiQ,IAAI,oBAAqB,WA1e3C6/U,EAAA9vT,MAAA,C,GAIQhgC,EAAAiQ,IAAa,WAAA,WAEb4/U,EAAUpuE,IAAA,uBAAA,EACVmuE,EAAoBnuE,IAAA,uBAAA,C,MAqfhC,SAAS8uE,EA7euB7wV,EAAA88J,EAAA17J,EAAA+pV,EAAAtqV,EAAAurM,GA+e5B,IAAIxqM,EA7eIC,KAsiBJ,GAtDJD,EAAGoF,QA7eK81J,EA8eRl7J,EAAGi+K,KAAO7/K,EAAO6/K,KACjBj+K,EAAGkvV,YAAcnqU,KAAAA,EACjB/kB,EAAGm7D,UA7eQp2C,KAAAA,EA8eX/kB,EAAGmvV,YAAcpqU,KAAAA,EACjB/kB,EAAGk0E,MAAQnvD,KAAAA,EACX/kB,EAAGovV,mBAAqB,iBAGxBpvV,EAAGqvV,gBA0JH,WAESrvV,EA7eGm7D,UA+eJn7D,EAAGouU,OAAA,EAIHpuU,EAAGi7D,SAAA,C,EAjKXj7D,EAAGi7D,SArUH,WAGA,IAAKq0R,EAAOtvV,EAAAoF,QAAA28E,SAAA,IAAA,EAgfJ1uB,EAASi8R,EAAW,GAAGC,aA3e/BnxV,EAAAoxV,WAAA,WAgfQxvV,EAAGm7D,UAAY,CAAA,EAGfn7D,EAAGoF,QAAQwjE,SAAS,YAAA,EA1e5B2gR,EAAAkG,QAAAH,EA8eY,CACIl9L,QAAW,QACX/+F,OAAWA,EAAS,I,EA3e3B,CACTA,OAAA,K,EAEIrzD,EAAAovV,kB,EA8eMrqV,KACE,WAGIuqV,EAAWz8S,IAAI,CA5etBu/G,QAAA,GACT/+F,OAAA,E,GAifgBrzD,EAAGoF,QAAQgjE,YAAY,YAAA,C,GAxenChqE,EAAAgO,WAAa,wBAAA,C,IA6RjBpM,EAAGouU,OAuNH,WAGI,IA7eIshB,EAAS1vV,EAAAoF,QAAS28E,SAAA,IAAA,EAyflB1uB,GARJq8R,EA7eQ78S,IAAI,CA8eRnxC,SA7eQ,WA8eRsvN,WA7eQ,SA8eR5+D,QA7eQ,QA8eR/+F,OAAc,M,GAILq8R,EAAS,GAAGH,cAGzBG,EAAS78S,IAAI,CACTnxC,SAAc,GACdsvN,WAAc,GACd5+D,QA7ea,GA8eb/+F,OA7eI,E,GAgfRj1D,EAAOoxV,WAAW,WAGdxvV,EAAGm7D,UAAY,CAAA,EAGfn7D,EAAGoF,QAAQwjE,SAAS,WAAA,EAGpB2gR,EAASkG,QAAQC,EACb,CA5eIt9L,QAAK,QACL/+F,OAAA,K,EA+eJ,CACIA,OAAUA,EAAS,I,EAEvBrzD,EAAGovV,kB,EACLrqV,KACE,WAGI2qV,EAAS78S,IAAI,CACTwgB,OAAU,E,GAIdrzD,EAAGoF,QAAQgjE,YAAY,WAAA,C,GAM/B5oE,EAAW4M,WA7eC,yBAAApM,EAAAi+K,KAAA0xK,KAAA,C,IA6NpB3vV,EAAG4vV,SAyRH,WAEI,OAAO5vV,EAAGi+K,KA7eEunE,K,EAmNhBxlP,EAAG6vV,SAkSH,WAEI,GAAK5xV,QAAQw0C,UAAUzyC,EAAGi+K,KAAK9gJ,MAAA,GAAWl/B,QAAQmwO,WAAWpuO,EAAGi+K,KAAK9gJ,MAAA,EAEjE,OAAOn9B,EAAGi+K,KAAK9gJ,OAAA,EAGnB,MAAO,CAAA,C,EA3RPn9B,EAAGkvV,YAAwC,EAA1BlvV,EAAGi+K,KAAKl8F,SAAS10E,OAGlCrN,EAAGk0E,MA7eC,EAAAj2E,CAAAA,QAAaw0C,UAAAzyC,EAAAi+K,KAAA/pG,KAAA,GAAA,CAAA,IAAAl0E,EAAAi+K,KAAA/pG,OAgfZ,CAACl0E,EAAGkvV,aAAelvV,EAAGk0E,MAEvBl0E,EAAGmvV,YAAc,CAAA,EAzerBnvV,EAAAmvV,YAAS,EAAAlxV,CAAAA,QAAAq6C,YAAAt4C,EAAAi+K,KAAAkxK,WAAA,GAAA,WAAA,OAAAnvV,EAAAi+K,KAAAkxK,aAAA,CAAA,IAAAnvV,EAAAi+K,KAAAkxK,aAifHnvV,EAAGmvV,YAMLnvV,EAAGm7D,UAAY,EAAGl9D,CAAAA,QAAQq6C,YAAYt4C,EAAGi+K,KAAK9iH,SAAA,GAA2C,WAA7B,OAAOn7D,EAAGi+K,KAAK9iH,WAAiD,CAAA,IAAtBn7D,EAAGi+K,KAAK9iH,WAJ9Gn7D,EAAGm7D,UAAY,CAAA,EASdn7D,EA7eGi+K,KAAArrK,QAAc3T,EAAO8kE,QAAAzmD,MAAWre,EAAQ20B,SAAA5zB,EAAAi+K,KAAArrK,KAAA,EA8ehD,CAGI,GAAK3U,QA7eOw0C,UAAQzyC,EAAAi+K,KAAW6xK,WAAA,GAAA7xV,QAAAw0C,UAAAxzC,EAAA2K,MAAA,GAAA,CAAA3L,QAAAgwU,OAAAjuU,EAAAi+K,KAAA6xK,YAAA7wV,EAAA2K,MAAA,EA+e3B,OA5DZ5J,IAiBAk/C,CA2CY,KAAA,EAGJ9gD,EAAOm8B,MAAM,4BAAA,EAGbiwK,EAAoBulJ,cAAc/vV,EAAGi+K,KAAM7/K,CAAA,C,CAG/CA,EAAOuQ,IAAI,6BAA8B,WAGhC3O,EAAGmvV,aAAenvV,EAAGm7D,WA3e9B/8D,EAASoxV,WAAA,WA+eGxvV,EAAGm7D,UAAY,CAAA,C,KAM3B/8D,EAAOuQ,IAAI,yBAA0B,SAAUC,EAAO4iC,GAElD,IA7dAw+S,EA+eQrB,EAlBH3uV,EAAGm7D,WAAa,CAACn7D,EAAGmvV,aAvezBlxV,CAAAA,QAAAq6C,YAAkB9G,CAAA,IAStBy+S,EAAAz+S,EAAA3d,MAAA,GAAA,EACIm8T,EAAS,IA+eDrB,EAAankJ,EAAoBokJ,cAAA,KAGjCoB,EAAkBrB,EAAW1wK,KAAK0xK,MAAM97T,MAAM,GAAA,GAze1D,CAAA,EAAAo8T,EAAAl3S,QAAA/4C,EAAAi+K,KAAAyiG,GAAA,GAmfoD,CAAC,EAAxCsvE,EAAgBj3S,QAAQ/4C,EAAGi+K,KAAKyiG,GAAA,IAxezC1gR,EAAAi7D,SAAA,C,GAkfJ78D,EAAOuQ,IAAI,sBAAuB,WAE9B,GAAK3O,EAAGi+K,KAAKrrK,QAAU3T,EAAO8kE,QAAQzmD,KA5e1C,CAgfQ,GAAKrf,QAAQw0C,UAAUzyC,EAAGi+K,KAAK6xK,WAAA,GAAgB7xV,QAAQw0C,UAAUxzC,EAAO2K,MAAA,GAAW,CAAC3L,QAAQgwU,OAAOjuU,EAAGi+K,KAAK6xK,YAAa7wV,EAAO2K,MAAA,EAE3H,OAzeZ4gM,EAASulJ,cAAA/vV,EAAAi+K,KAAA7/K,CAAA,EAgfDoB,EAAW4M,WAAW,yBAA0BpM,EAAGi+K,KAAK0xK,KAAA,C,CAKvD1wV,CAAAA,EAAO20B,SAAS5zB,EAAGi+K,KAAKrrK,KAAA,GAzejC3U,QAAAw0C,UAAAzyC,EAAAi+K,KAAA6xK,WAAA,GAAA7xV,QAAAw0C,UAAAxzC,EAAA2K,MAAA,GAAA,CAAA3L,QAAAgwU,OAAAjuU,EAAAi+K,KAAA6xK,YAAA7wV,EAAA2K,MAAA,GAmfQxL,EAAOm8B,MAAM,4BAAA,C,GAwN7B,SAAS21T,EAAgC1lJ,GAErC,MAAO,CACH/rM,SA7eY,IA8eZC,MAAa,CACTwvV,KAAM,G,EAEV3vV,WA7eY,+BA8eZM,YA7eY,8DA8eZ0rQ,WAAa,CAAA,EACbi7E,QAAa,SAAUC,GAInB,OAFAA,EAAS78Q,SAAS,0BAAA,EAEX,SAAkBlqE,GA1erB8rM,EAAAwkJ,mBAAAtwV,CAAA,C,IAofhB,SAASyxV,EAAqC/xV,EAAQ88J,EAAU17J,EAAYP,EAAQurM,GAEhF,IAAIxqM,EAAKC,KAiCL,GA9BJD,EAAGoF,QAAU81J,EACbl7J,EAAGi+K,KAAO7/K,EAAO6/K,KACjBj+K,EAAGkvV,YAAcnqU,KAAAA,EACjB/kB,EAAGk0E,MAAQnvD,KAAAA,EAGX/kB,EAAG4vV,SA+GH,WAEI,OAAO5vV,EAAGi+K,KAAKunE,K,EAnGfxlP,EAAG6nO,SAAW,CAAA,EAGd7nO,EAAGkvV,YAAwC,EAA1BlvV,EAAGi+K,KAAKl8F,SAAS10E,OAGlCrN,EAAGk0E,MAAQ,EAAGj2E,CAAAA,QAAQw0C,UAAUzyC,EAAGi+K,KAAK/pG,KAAA,GAA4B,CAAA,IAAlBl0E,EAAGi+K,KAAK/pG,OAIrDl0E,EAAGi+K,KAAKrrK,QAAU3T,EAAO8kE,QAAQzmD,MAAQre,EAAO20B,SAAS5zB,EAAGi+K,KAAKrrK,KAAA,EACtE,CAGI,GA7eI3U,QAASw0C,UAAAzyC,EAAAi+K,KAAA6xK,WAAA,GAAqB7xV,QAAAw0C,UAAAxzC,EAAA2K,MAAA,GAAA,CAAA3L,QAAAgwU,OAAAjuU,EAAAi+K,KAAA6xK,YAAA7wV,EAAA2K,MAAA,EA+e9B,OApCZ5J,IAUAk/C,CA0BY,KAAA,EAGJ9gD,EAAOm8B,MAAM,4BAAA,EAGbiwK,EA7eQulJ,cAAoB/vV,EAAAi+K,KAAc7/K,CAAA,C,CAgf9CA,EAAOuQ,IAAI,6BA7euB,WAgfzB3O,EA7eGkvV,aA+eJ9wV,EAAOoxV,WAAW,WAEdxvV,EAAG6nO,SAAW,CAAA,C,KAM1BzpO,EAAOuQ,IAAI,4BAA6B,WAEpC,IAKIqhV,EAEArB,EApfA3uV,EAAAkvV,cAkfAc,EAAkB,GASsB,CAAC,GAjfzCA,GA0eArB,EAAankJ,EAAoBokJ,cAAA,GA1evBD,EAAA1wK,KAAqB0xK,MAAA97T,MAAA,GAAA,EAif9Bm8T,GAAgBj3S,QAAQ/4C,EAAGi+K,KAAKyiG,GAAA,EAEjCtiR,EAAOoxV,WAAW,WA3elBxvV,EAAA6nO,SAAA,CAAA,C,GAkfAzpO,EAAOoxV,WAAW,WAEdxvV,EAAG6nO,SAAW,CAAA,C,MAO1BzpO,EAAOuQ,IAAI,sBAAuB,WA3e5B3O,EAAAi+K,KAAOrrK,QAAA3T,EAAA8kE,QAAAzmD,MAAAre,CAAAA,EAAA20B,SAAA5zB,EAAAi+K,KAAArrK,KAAA,GAIN3U,QAAAw0C,UAAAzyC,EAAAi+K,KAAA6xK,WAAA,GAAA7xV,QAAAw0C,UAAAxzC,EAAA2K,MAAA,GAAA,CAAA3L,QAAAgwU,OAAAjuU,EAAAi+K,KAAA6xK,YAAA7wV,EAAA2K,MAAA,IAMC4gM,EAAAulJ,cAAA/vV,EAAAi+K,KAAA7/K,CAAA,EAgfAoB,EAAW4M,WAAW,2BAAA,E,GA6CtC,SAASgkV,EA7eG78T,GA+eR,MAAO,CACH90B,SAAU,IACV+xH,QA7eI,8BA8eJg1N,QAAU,SAAUC,GAIhB,OA/eAA,EAAA78Q,SAAA,+BAAA,EA+eO,SAAkBlqE,EAAOgnV,EAAUC,EAAQ0K,GA3etD3K,EAAA/hU,GAAA,QAEI,WAEW0sU,EAAWnB,aAAA37T,CAAAA,EAAA,OAAA,GAkfdmyT,EAASp4K,YAAY,UAAA,C,CAtfjC,EAaA5uK,EAAAiQ,IAAA,WAAA,WAEI+2U,EAAAvlE,IAAA,OAAA,C,oVAn3BZliR,QACKC,OAAO,UAAA,EACPsf,SAteM,sBAofX,WAGI,IAAIi5I,EAAOx4J,QAAQqyV,SAAS,CAAC,KAAA,EAAOtvV,IAAI,MAAA,EAGpCq4Q,EAAa,GAiBjB,SAASxR,EAASr2N,EAAMn0B,GAEpB,GAAMpf,QAAQsyV,SAAS/+S,CAAA,EAAvB,CAiBA,IAXA,IAAIm9E,EAAQn9E,EAAK3d,MAAM,GAAA,EAGnBrzB,EAAKmuH,EAAMA,EAAMthH,OAAS,GAG1BlI,EAwIR,SAA6BwpH,GAnejC,IAAAxpH,EAAAk0Q,EAIQ,GAAkB,IAAlB1qJ,EAAAthH,OAAA,CA6eAshH,EAteIpjG,IAAA,EAGJ,IAAA,IAAAmoB,EAAA,EAAAA,EAAkBi7E,EAAAthH,OAAUqmC,CAAA,GAC5B,CAII,IAmeA,IAmBQr2B,EAnBJqjQ,EAAM/xJ,EAAMj7E,GArehB88S,EAAkB,CAAA,EAEXjgQ,EAAA,EAASA,EAAAprF,EAASkI,OAAOkjF,CAAA,GAwe5B,GAAKprF,EAAOorF,GAAGmwL,MAAQA,EArevB,CACIv7Q,EAASA,EAAAorF,GAAUxO,SAuenByuQ,EAAe,CAAA,EApenB,K,CA6eCA,IAEGnzU,EAAO,CACPqjQ,IAAUA,EAredivE,MAAShhO,EAAAx6G,KAAA,GAAA,EACTvP,MAAA87Q,EAueIntN,OAAU,EAreVwuB,SAAU,E,EAyed58E,EAAOoL,KAAK8M,CAAA,EACZlY,EAASkY,EAAK0kE,S,EAItB,OAAO58E,C,EA3L0BwpH,CAAA,EAG7B8hO,EAteI,CAAA,EAweE/8S,EAAI,EAAGA,EAAIvuC,EAAOkI,OAAQqmC,CAAA,GAEhC,GAAKvuC,EAAOuuC,GAAGgtO,MAAQlgR,EACvB,CAreIiwV,EAAGtrV,EAAAuuC,GAEH,K,CA2eH+8S,GAEDxyV,QAteIqhB,OAAAmxU,EAAApzU,CAAA,EAyeJozU,EAAW9F,OAAS+F,EAAWD,CAAA,IAM/BpzU,EAAK0kE,SAAW,GAGX9jF,CAAAA,QAAQq6C,YAAYj7B,EAAKk2C,MAAA,GAAYt1D,QAAQ0yV,SAAStzU,EAAKk2C,MAAA,IApe5Dl2C,EAAAk2C,OAAA,GA0eJl2C,EAAKqjQ,IAAMlgR,EAGX6c,EAAKsyU,MAAQn+S,EAGbn0B,EAAKstU,OAAS+F,EAAWrzU,CAAA,EAGzBlY,EAAOoL,KAAK8M,CAAA,E,MA7hBhBo5I,EAAKjpJ,MAAK,iDAAA,C,CAsiBd,SAASojV,EAAWp/S,GAEhB,GAAMvzC,QAAQsyV,SAAS/+S,CAAA,EAAvB,CAUA,IAHA,IAAIn0B,EAAOg8P,EACP1qJ,EAAQn9E,EAAK3d,MAAM,GAAA,EAEb08D,EAAI,EAAGA,EAAIo+B,EAAMthH,OAAQkjF,CAAA,GAI/B,IAFA,IAAI/vF,EAAKmuH,EAAMp+B,GAEL78C,EAAI,EAAGA,EAAIr2B,EAAKhQ,OAAQqmC,CAAA,GAE9B,GAAKr2B,EAAKq2B,GAAGgtO,MAAQlgR,EACrB,CAII,GAAK6c,EAAKq2B,GAAGi8S,QAAUn+S,EAGnB,OADAn0B,EAAK2nB,OAAO0O,EAAG,CAAA,EACR,CAAA,EAjevBr2B,EAAAA,EAAAq2B,GAAAquC,SACO,K,CA2eP,MAAO,CAAA,C,CAvgBX00E,EAASjpJ,MAAA,iDAAA,C,CA+gBT,SAteQqjV,EAAG1rV,GAyeDA,IAEFA,EAASk0Q,GACF5jO,KAAKq7S,CAAA,EAIhB,IAAM,IAAIp9S,EAAI,EAAGA,EAAIvuC,EAAOkI,OAAQqmC,CAAA,GACpC,CAreJ,IAASquC,EAAA58E,EAAAuuC,GAAAquC,SAEoB,EAArBA,EAAY10E,QAweR00E,EAAStsC,KAAKq7S,CAAA,EAneR,EAAN/uQ,EAAM10E,QAweNwjV,EAAa9uQ,CAAA,C,EA8EzB,SAAS+uQ,EAAUn8N,EAAGiH,GAElB,OAAOzsD,SAteCwlD,EAASphE,MAAA,EAAA4b,SAAAysD,EAAAroE,MAAA,C,CAgfrB,SAASm9R,EAAWrzU,GAEhB,IAAIstU,EAAS,GA3drB,OAJcA,EALlB1sV,QAAAw0C,UAAAp1B,EAAAzK,KAAA,IAwegB+3U,EAASttU,EAAKzK,MAre1B3U,QAAAw0C,UAAAp1B,EAAAyyU,WAAA,IAAA7xV,QAAAsnF,SAAAloE,EAAAyyU,WAAA,EAEcnF,EAAkB,IAAA1sV,QAAAskG,OAAAllF,EAAAyyU,WAAA,EAAA,IAIvBnF,C,CA0OS1qV,KAneV4nQ,SAAMA,EAmeI5nQ,KAIN2wV,WAAaA,EAJP3wV,KAKN4wV,aAAeA,EA+PvB5wV,KAveI6tV,KAAA,WAEA,IAAAa,EAAA,KACAoC,EAAA,KACA1C,EAAA,KACA2C,EAAA,KA0fA,MAxfA,CACAnpF,SAAwBA,EAwepB+oF,WAAoBA,EACpBn7S,KAAoBo7S,EACpBI,gBAndJ,WA0eI53E,EAAa,GAGR03E,IAEDA,EAAgB/wV,GAAGq5Q,WAAaA,E,EAlgBvC02E,cA4gBD,SAAuB9xK,EAAMv/K,GArerCiwV,EAAA,CACW1wK,KAAAA,EACHv/K,MAAUA,C,GA+bNkwV,cA+CJ,WAEI,OAAOD,C,EAhDPl1E,cAAoBA,EACpBixE,kBAgFJ,SAveYwD,GA6eR,OAoEJ,SAASgD,EAAmB73E,GAExB,IAAI83E,EAAU,GAEd,IAAM,IAAIx8N,EAAI,EAAGA,EAAI0kJ,EAAWhsQ,OAAQsnH,CAAA,GACxC,CApeZ,IAAAy8N,EAAAnzV,QAAAye,KAAA28P,EAAA1kJ,EAAA,EAwegBy8N,EAAUrvQ,SAAW,GApetBovQ,EAAA5gV,KAAA6gV,CAAA,EAIf,EAAA/3E,EAAA1kJ,GAAA5yC,SAAA10E,SAEkB8jV,EAAAA,EAAA/jT,OAAA8jT,EAAA73E,EAAA1kJ,GAAA5yC,QAAA,CAAA,E,CAIV,OAAUovQ,C,EA0YW13E,EAAcy0E,CAAA,CAGL,C,EArF1Bc,mBA6FJ,SAveYtwV,GAyeRqyV,EAAkBryV,C,EA9FlB+vV,UAsGJ,SAveQ3tV,GAyeJutV,EAveOvtV,C,EAgYPo3M,UA+GJ,WAEI,OAAOm2I,C,EAhHPS,cAwHJ,SAAuBhuV,GAEnBkwV,EAveIlwV,C,EA8WJuwV,cAiIJ,WAreZ,OAAAL,C,EAlIQ74I,aAgnBI,WAreR44I,EAAA54I,aAAA,C,GA8YQ,SAveIshE,EAAkBy0E,GAElB,GAAAA,EACA,CACI,IAAI,IAAAx6S,EAAU,EAAAA,EAAA2lO,EAAAhsQ,OAAAqmC,CAAA,GAyeV,GAAK2lO,EAAW3lO,GAAGgtO,MAAQwtE,EAEvB,MAAO,CAAC70E,EAAW3lO,IAI3B,OAAO,I,CAGX,OAAO2lO,C,GAt1BA,EAued96Q,WAAW,yBAA0B0vV,CAAA,EAErCzvV,UAteM,eAAgB4vV,CAAA,EAuetB7vV,WAAW,6BAA8B0wV,CAAA,EACzCzwV,UAAU,mBAklCf,WAEI,MAAO,CACHC,SAAkB,IAClBupV,iBAAkB,CACd/pK,KAAM,mB,EAEV1/K,WA7eQ,mCA8eRinV,QA7eiB,SAAQC,GAifrB,OAFAA,EAAS78Q,SA7eG,oBAAA,EA+eL,SAAkBlqE,EAAOgnV,EAAUC,EAAQ2L,GAG9C5L,EAAS98Q,SAAS0oR,EAAqB1B,SAAA,CAAA,EAGlC0B,EAAqBp9Q,OAEtBwxQ,EAAS98Q,SAAS,OAAA,C,IAtmCH,EAC9BpqE,UAteM,mBAmlDX,WAEI,MAAO,CACHC,SAAU,IACV+xH,QAAU,oBACVg1N,QAAU,SAAUC,GAIhB,OAFAA,EAAS78Q,SA7eG,oBAAA,EA+eL,SAAkBlqE,EAAOgnV,EAAUC,EAAQ2L,GAGzCA,EA7eoBnC,aA+erBzJ,EA7eI/hU,GAAA,QAAA2tU,EAAAjC,eAAA,EAifR3wV,EAAMiQ,IAAI,WAAY,WAElB+2U,EAASvlE,IAAI,OAAA,C,MAvmDV,EAwelB3hR,UAAU,yBAA0B0xV,CAAA,EACpC3xV,WAteU,uCAAA4xV,CAAA,EAueV3xV,UAAU,6BA8xCf,WAEI,MA7eI,CACAC,SAAA,IA8eAupV,iBA7eO,CA8eH/pK,KAAM,6B,EA3eV1/K,WAAA,6CA8eAinV,QA7eO,SAAiBC,GAIxB,OA2eIA,EAAS78Q,SAAS,+BAAA,EA3eb,SAAAlqE,EAAAgnV,EAAAC,EAAA0K,GAgfD3K,EAAS98Q,SAASynR,EAA+BT,SAAA,CAAA,EA1elDS,EAAmCn8Q,OA+e9BwxQ,EAAS98Q,SAAS,OAAA,C,IAlzCO,EACxCpqE,UAAU,6BAA8B4xV,CAAA,C,IA41CjD,CAAA,WAEI,aA6EA,SAASmB,EAAuBryV,EAAWM,EAAYgyV,GAEnD,MAAO,CACH/yV,SAAU,IACVqzB,KAAU,SAAUpzB,EAAOgnV,EAAUC,GA3ezC,IAAA8L,EAAA,SAAA9L,EAAA+L,cA8eYC,EAAe,CAAA,EA5enBhrV,EAAA1I,QAAgBmH,QAAQlG,EAAS,GAAAyH,IAAA,EA8e7BirV,EAAc3zV,QAAQmH,QAAQ,2CAAA,EAC9BysV,EAAe5zV,QAAQmH,QAAQ,4CAAA,EA5enC0sV,EAASpM,EAAcvgV,OAAA,EA2C/B,SAAA4sV,IAgfYprV,EAAKiiE,SAAS,eAAA,EA1etBppE,EAAa4M,WAAA,sBAAA,EACTs5U,EAAA54S,UAAc,CAAA,EAGdglT,EAAc9+S,OAAA4+S,CAAA,EAgfVA,EAAYjuU,GAAG,wBAAyB,SAAU/U,GAE9CojV,EAAWpjV,CAAA,EACX+iV,EAAe,CAAA,C,GAOvB,SAASK,EAAWpjV,GA3exB3Q,QAAAw0C,UAAA7jC,CAAA,GAEOA,EAAAirN,eAAA,EAGAlzN,EAAAiiE,SAAQ,oBAAA,EAGXppE,EAAS4M,WAAQ,8BAAA,EAgfb0lV,EA7eIzsV,KAAWusV,CAAA,EAAAx+S,OAAA,EAgff0+S,EA7eI3sV,OAAA,EAAU6tC,OAAS6+S,CAAA,EA8evBA,EAAaluU,GAAG,wBAAyB,SAAU/U,GA3erDqjV,EAAArjV,CAAA,EACE+iV,EAAA,CAAA,C,GAofJ,SAASM,EAAYrjV,GAEZ3Q,QAAQw0C,UAAU7jC,CAAA,GAEnBA,EAAMirN,eAAA,EAIVr6N,EAAW4M,WAAW,sBAAA,EACtBs5U,EAAS54S,UAAU,CAAA,EAEnBnmC,EAAKyhE,YAAY,oBAAA,EAGjB0pR,EAAU3sV,OAAA,EAASE,KAAKwsV,CAAA,EAAcz+S,OAAA,EA1elD0+S,EAAA9+S,OAAA4+S,CAAA,EACWA,EAAQjuU,GAAA,wBAAA,SAAA/U,GA+eHojV,EAAWpjV,CAAA,EACX+iV,EAAe,CAAA,C,GAte3B,SAAaO,IAETvrV,EAAOyhE,YAAQ,kCAAA,EAGZ5oE,EAAA4M,WAAA,8BAAA,EA+eCs5U,EAASvlE,IAAI,uBAAA,C,CA1mBrBqxE,EAAAW,YAAAzzV,EAAAgnV,EAAA+L,CAAA,GAgfSA,EA3eFM,EAICG,GAJD,EA4HfxzV,EAAA0zV,WAmYY,aAEIX,EAAW,CAACA,GAIRM,EAIAG,GAJA,C,EAxYTxzV,EAAAszV,WAAAA,EACHtzV,EAAAuzV,YAAkBA,EAClBvzV,EAAA2zV,gBAwXI,WA3eE,OAAAV,C,EAsHNjzV,EAAAiQ,IAAA,WAAkB,WAElBijV,EAAAzxE,IAAA,uBAAA,EACI0xE,EAAS1xE,IAAS,uBAAA,EA8edulE,EAASvlE,IAAI,uBAAA,C,KAsG7B,SAASmyE,EAAe9yV,EAAY+yV,EAAsBf,GAEtD,MA7eI,CACA/yV,SAAA,IA8eAC,MAAY,GACZH,WAAY,kBACZinV,QA7eS,SAAQC,GAifb,OAFAA,EA7eI78Q,SAAA,QAAA,EA+eG,SAAkBlqE,GAGrBc,EAAW4M,WAAW,8BAAA,EAGtB,IAAIomV,EAA0BhzV,EAAWmP,IAAI,sBAAuB,WA3e5EnP,EAAA4M,WAAA,8BAAA,EAGImmV,EAAAE,KAAA,YAAA,EAAA1tV,KAAA,SAAAs0Q,GAEIA,EAAA36O,MAAA,EA+ea8yT,EAAiBa,gBAAA,GAElBb,EAAiBS,YAAA,C,KAvejCvzV,EAAAiQ,IAAA,WAAA,WA+eQ6jV,EAAA,C,MA0CpB,SAASE,EAAqBlzV,EAAY6c,EAAIktU,EAAUtqV,GAEpD,MAAO,CACHR,SAAU,IACV+xH,QAAU,SACV9xH,MAAU,CAAA,EACV8mV,QAAU,SAAUC,EAAUkN,GAY1B,OAVAlN,EAAS78Q,SAAS,eAAA,EAGb3qE,QAAQq6C,YAAYq6S,EAAOx3R,SAAA,IA3exCw3R,EAAAx3R,UAAA,CAAA,GAgfQsqR,EAASpzL,KAAK,YAAasgM,EAAOx3R,SAAA,EAE3B,SAAkBz8D,EAAOgnV,EAAUC,EAAQiN,GA3e9D,IAAAltN,EAAA,CACWmtN,SAAA,WACHC,gBAAkB,mBAClBC,kBAAkB,oB,EAIlBC,EAAkBtN,EAAUrgV,KAAA,GAAA,EAC5B4tV,EAAA,GACIC,EAAS,UA0JT,SAAAC,IAkfQ,MAAsC,SAA/BzN,EAASrzL,KAAK,WAAA,C,CA9dzB,SAAA+7K,IAmfI,IAheJglB,EA4fQ//R,EA5BAx2C,EAAWR,EAAGS,MAAA,EAkElB,OA7EQq2U,EAAA,GAwBRzN,EAASrzL,KAAK,YAAa,CAAA,CAAA,EA7e/B+gM,EAAmBn1V,QAAAmH,QAAAsgV,EAAArgV,KAAA,qBAAA,EAAA,EAAA,EA4fXguD,GARJ+/R,EAAgBvgT,IAAI,CAChBnxC,SAAc,WA/etBsvN,WAAe,SACf5+D,QAAA,QACI/+F,OAAW,M,GAofE+/R,EAAgB,GAAG7D,cAGhC6D,EAAgBvgT,IAAI,CA/enBnxC,SAAW,GACpBsvN,WAAA,GACS5+D,QAAQ,GACb/+F,OAAA,E,GAIA30D,EAAK8wV,WAAS,WAkfNjG,EAASkG,QAAQ2D,EA/ed,CAifKhhM,QAAW,QACX/+F,OAAW,K,EAEf,CACIA,OAAUA,EAAS,I,EA9enCqyE,EAAgBotN,e,EAChB/tV,KACI,WAmfYquV,EAAgBxqR,SAAS88D,EAAQmtN,QAAA,EAGjCO,EAAgBvgT,IAAI,CAACwgB,OAAU,EAAA,CAAA,EA7enDx2C,EAAA7J,QAAA,CAAAvG,QAAA,CAAA,CAAA,CAAA,C,MA0bYoQ,EAASnP,OAAO,CAACF,MAAS,CAAA,CAAA,CAAA,EA4DvBqP,EAASM,O,CAQpB,SAAS89C,IA7eT,IAggBQo4R,EAGAhgS,EAngBRx2C,EAAeR,EAAAS,MAAA,EAmDd,OAhDGq2U,EAAA,EAmfIt2U,EAASnP,OAAO,CAACF,MAAS,CAAA,CAAA,CAAA,GAO9Bk4U,EAASrzL,KAAK,YAAa,CAAA,CAAA,EAGvBghM,EAAoBp1V,QAAQmH,QAAQsgV,EAASrgV,KAAK,qBAAA,EAAuB,EAAA,EAGzEguD,EAASggS,EAAkB,GAAG9D,aA7epC7wV,EAAA8wV,WAAa,WAEbjG,EAAAkG,QAAkB4D,EAifR,CACIhgS,OAAUA,EAAS,I,EA9evC,CACoBA,OAAA,K,EAEPqyE,EAAIqtN,iB,EAifHhuV,KACE,WAGIsuV,EAAkBjrR,YAAYs9D,EAAQmtN,QAAA,EA7e7DQ,EAAAxgT,IAAA,CACTu/G,QAAA,GACa/+F,OAAA,E,GAofmBx2C,EAAS7J,QAAQ,CAACvG,QAAW,CAAA,CAAA,CAAA,C,MA1e5CoQ,EAAAM,O,CA/SLlf,QAAOkD,QAAS6xV,EAAS,SAAOlhU,GA+epBlf,EAAQ3U,QAAQmH,QAAQ0sB,CAAA,EAAMugI,KAAK,SAAA,EAElCp0J,QAAQq6C,YAAY1lC,CAAA,IAMzBA,EAAQA,EAAMlI,QAAQwoV,EAAQ,EAAA,EAE9BD,EAAO1iV,KAAKqC,CAAA,E,GAzevBggV,EAAAU,cAAA5N,EAAoChnV,CAAA,EAGrCgnV,EAAU3jQ,SAAA,gBAAA,EAAAp+D,GAAA,QAGV,WAGWivU,EAAS/nM,WAAA,IAMR+nM,EAAMW,QAAA,EAEFJ,EAAA,GAGJP,EAASY,iBAAA,EAgfL90V,EAAM67B,MAAM,yBAAA,EA1ehB/6B,EAAa4M,WAAA,iBAAA,EAgfTgiU,EAAA,EAASrpU,KAAK,WAGV6tV,EAAUliP,OAAA,C,IAMdhyG,EAAM0N,WAAW,sBAAA,E,CAhhBvB,EAqCN1N,EAAAiQ,IAAA,WAAA,WAEG+2U,EAAA3jQ,SAAiB,gBAAA,EAAAo+L,IAAA,OAAA,C,GAUxBzhR,EAAWiQ,IAAA,kBAAA,WAGX,IAAA8kV,EAAiBb,EAAAc,eAAA,EACjBC,EAAiB,CAAA,EAEjB11V,QAAiBkD,QAAAsyV,EAAA,SAAAG,GAkfI31V,QAAQgwU,OAAO2lB,EAAWl1V,MAAOA,CAAA,IA9enDi1V,EAAA,CAAA,E,GAofcA,GA1eZ14R,EAAA,EAAYl2D,KAAO,WAGT6tV,EAAAliP,OAAA,C,KAufPhyG,EAAMiQ,IAAI,uBAAwB,WA7enCssD,EAAA,EAAel2D,KAAA,WAmfN6tV,EAAUliP,OAAA,C,KAOlBhyG,EAAMiQ,IAAI,+BAAgC,WAEtC,IAAIklV,EAAe50V,EAAO8kE,QAAQzmD,KAC9Bw2U,EAAe,CAAA,EA9enC71V,QAAAkD,QAAA8xV,EAAA,SAAArgV,GAkfyBihV,IAAiBjhV,IAElBkhV,EAAe,CAAA,E,IA5evCA,EAkfoB1lB,EA5efnzQ,GA4ee,C,GAreRv8D,EAAAiQ,IAAA,0BAAe,WAGfikV,EAAAmB,cAAuBrO,EAAQhnV,CAAA,C,mLArF/CT,QACKC,OAAO,UAAA,EACP4mQ,QAAQ,mBASb,WAEI,IAAIkvF,EAAW,GAUf,MARc,CACV7B,YAiBJ,SA7eiBzzV,EAAQ0G,GA+erB4uV,EAAW,CACPt1V,MAAWA,EACX0G,QAAWA,C,GApBfitV,gBA2BJ,WAEI,OAAO2B,EAASt1V,MAAM2zV,gBAAA,C,EA5BtBD,WAkCJ,WAEI4B,EAASt1V,MAAM0zV,WAAA,C,EAnCfJ,WAyCJ,WAEIgC,EAASt1V,MAAMszV,WAAA,C,EA1CfC,YAgDJ,WAEI+B,EAASt1V,MAAMuzV,YAAA,C,GAjjBH,EA8efzzV,UAAU,gBAAiB+yV,CAAA,EAC3BhzV,WA7eW,kBAqtBhB,WAEI,IACI8mC,EAAW,CAAA,EACX4uT,EAAc,GACdR,EAAc,GAHTxzV,KAreb4qJ,WA4fI,WAEI,OAAOxlH,C,EAzBFplC,KApeTywG,OA2gBA,WAEIrrE,EAAW,CAAA,C,EAzCNplC,KAUNszV,QAqBH,WAEIluT,EAAW,CAAA,C,EAjCNplC,KAWNqzV,cAuCH,SA7eQluV,EAAA1G,GA+eJu1V,EA7eQ1jV,KAAA,CA8eJnL,QAAWA,EACX1G,MAAWA,C,IAtDVuB,KAYNyzV,eAmDH,WA3eG,OAAOD,C,EA4aDxzV,KAaN8zV,cAhbH,SAAA3uV,EAAA1G,GA+eI+0V,EAAYljV,KAAK,CACbnL,QAAWA,EACX1G,MAAWA,C,IA9EVuB,KAcNuzV,iBAuEH,WA3eIC,EAAG,E,EAjUsB,EA8e5Bj1V,UAAU,QA7eM8zV,CAAA,EA8ehB9zV,UAAU,aA+Wf,WAEI,MAAO,CACHC,SA7eS,IA8eT+mV,QA7eI,SAAAC,GAifA,OAFAA,EA7eI78Q,SAAA,cAAA,EA+eG,Y,GAp2BH,EA8eXpqE,UAAU,cA+Xf,WAEI,MAAO,CACHC,SAAU,KA5eV+mV,QAAO,SAAIC,GAifP,OA/eAA,EAAQ78Q,SAAK,eAAA,EA+eN,Y,GAp3BC,EA8efpqE,UAAU,cAAek0V,CAAA,C,IAuuBlC,CAAA,WAEI,aASA,SAASwB,EAAoB91V,EAAQgB,EAASm0B,EAAU7V,GAEpD,IAAI1d,EAAKC,KA/eTk0V,EAAS,CACTC,YAAA,EACIC,iBAAW,CAAA,EAifPC,iBAAkB,IAClBz1S,WAAkB,CACd01S,GAAI,EACJC,GAAI,EACJC,GAAI,C,GA7eZC,EAAW,CAAA,EA4iBf,SAASC,IAGAD,GAEDh3U,EAAS/b,OAAO+yV,CAAA,EAGpBA,EAhfQh3U,EAAA,WA2fJ1d,EAAG40V,aAAe50V,EAAGquC,UAAU,GAAGwmT,sBAAA,EA0DtC70V,EAAGo0V,YAAcp0V,EAAGyF,QAAQ2uV,YA9exB7gU,EAAK,OAAA,EAkfLvzB,EAAGo0V,YAhfQp0V,EAAAyF,QAAY2uV,YAkfjB7gU,EAAS,IAAA,EAEfvzB,EAAGo0V,YAAep0V,EAAGo0V,YAAcp0V,EAAGyF,QAAQo5C,WAAW01S,GAAKv0V,EAAGyF,QAAQo5C,WAAW01S,GAAKv0V,EAAGo0V,YA9e5F7gU,EAAA,IAAA,EAkfAvzB,EAAGo0V,YAhfKp0V,EAAAo0V,YAAmBp0V,EAAAyF,QAAAo5C,WAAA21S,GAAAx0V,EAAAyF,QAAAo5C,WAAA21S,GAAAx0V,EAAAo0V,YAof3Bp0V,EAAGo0V,YAAcp0V,EAAGyF,QAAQo5C,WAAW41S,GAG3Cz0V,EAAG80V,YAhfS90V,EAAA40V,aAAS7uU,MAAA/lB,EAAAo0V,YAuajBh2V,EAAOgO,WAAW,2BAAA,EAElBpM,EAAGqiF,MAhfCriF,EAAAquC,UAAAhpC,KAAA,iBAAA,EASP,IA0eG,IAAI0vV,EAAejmO,MAAM97F,MAAM,KAAM,IAAI87F,MAAM9uH,EAAGo0V,WAAA,CAAA,EAAc5yU,IAAI,WAEhE,OAAO,C,GA5edkyB,EAAA,EAAAA,EAAA1zC,EAAAqiF,MAAAh1E,OAAAqmC,CAAA,GACT,CACW,IACOshT,EAAAC,EAAAh2U,EAAAi2U,EADP73U,EAAArd,EAAAqiF,MAAA3uC,IAGHr2B,EAAApf,QAAAmH,QAAAiY,CAAA,GAkfkB3e,MAAA,GA9ed2e,EAAA3e,MAAA,EAAA0N,WAAA,6BAAA,EAmfIiR,EAAKw1B,IAAI,CAAC9sB,MAAS/lB,EAAG80V,WAAA,CAAA,EAEjB90V,EAAGyF,QAAQ4uV,kBAEZp1U,EAASy0B,EAAI1zC,EAAGo0V,YA/e3Bc,EAAAH,EAAA91U,KAISi2U,EAAU9gU,KAAAmP,IAAAvQ,MAAAoB,KAAA2gU,CAAA,EACpB91U,EAAA81U,EAAAh8S,QAAAm8S,CAAA,GAGIH,EAAgB91U,GAAAi2U,EAAA73U,EAAA,GAAAw3U,sBAAA,EAAAxhS,OAkfZ2hS,EAAO5gU,KAAKC,MAAMpV,EAASjf,EAAG80V,WAAA,EAC9BG,EAAOC,EAEP73U,EAAKw1B,IAAI,CAACsiT,UAAa,eAAiBH,EAAO,MAAQC,EAAO,SAAA,CAAA,EAC9D53U,EAAKurD,SAAS,QAAA,EAETvrD,EAAK3e,MAAA,GA9e1B2e,EAAA3e,MAAA,EAAA0N,WAAA,8BAAA,C,CAubYhO,EAAOgO,WAhfC,4BAAA,C,EAkfTpM,EAAGyF,QAAQ6uV,gBAAA,C,CAxElBt0V,EAAGyF,QAAU,KACbzF,EAAGquC,UAAY,GACfruC,EAAG40V,aAAe,GAClB50V,EAAG80V,YAAc,GACjB90V,EAAGqiF,MAAQ,GA7eXriF,EAAA20V,SAASA,EACT30V,EAAAsF,WAmfA,WAEItF,EAAGyF,QAAWzF,EAAGyF,QAAwBxH,QAAQqhB,OAAO60U,EAAan0V,EAAGyF,OAAA,EAA7C0uV,EAld/B/1V,EAAAmwC,OACI,WAkfQ,OAAOvuC,EAAGquC,UAAUtoB,MAAA,C,EAExB,SAAU09B,EAAUC,GA9ehCD,IAAAC,GAEoBixS,EAAA,C,IAqchB30V,EAAGo1V,iBAeH,SAA0BhwV,EAASvE,GAEF,aAAxB,OAAOw0V,aAEMj2V,EAAQi2V,aAAajwV,CAAA,EAE3Bue,GAAG,OAAQ,WA9e3B9iB,EAAA,C,GAqfQA,EAAA,C,EAlBRzC,EAAOuQ,IAAI,qBAAsB,WA9ejCgmV,EAAA,C,GA2nBJ,SAASW,EAAU53U,GAEf,MAAO,CACHjf,SAAY,MACZF,WAAY,sBACZinV,QAEJ,SAhfgBpgV,EAAQoD,GAkfpB,MAAO,CACH+sV,IAAM,SAAiB72V,EAAOgnV,EAAUC,EAAQpnV,GAE5CA,EAAWkH,QAAUxH,QAAQ6sV,SAAStiV,EAAW/C,SAAW,IAAA,EA/e5DlH,EAAU8vC,UAAAjpC,C,EAkfduF,KAAM,SAAkBjM,EAAOgnV,EAAUC,EAAQpnV,GAE7Cmf,EAAS,WA9eTnf,EAAS+G,WAAA,C,mFAuSzBrH,QACKC,OAAO,UAAA,EA/eRK,WAAS,sBAAA21V,CAAA,EACT11V,UAAA,YAAA82V,CAAA,EAifC92V,UAhfU,gBA6rBf,WAEI,MAAO,CACHC,SAAU,MACV+xH,QAAU,aACV96E,SAAU,EACV5jB,KAGJ,SAAcpzB,EAhfM0G,EAAMoD,EAAMjK,GAkf5BA,EAAW62V,iBAAiBhwV,EAAS,WAEjC7G,EAAWo2V,SAAA,C,GAIfj2V,EAAMiQ,IAAI,+BAAgC,WAEtCjQ,EAAM6vC,OAAO,WAET,OAAOnpC,EAAQiuD,OAAA,C,EAChB,SAhfK7kB,EAAAC,GAkfCD,IAhfSC,GAkfVlwC,EAAWo2V,SAAA,C,KAKvBvvV,EAAQue,GAAG,WAhfU,WAkfjBplB,EAAWo2V,SAAA,C,KA9tBR,C,IAmuBnB,CAAA,WAEI,aAQA,SAASa,EAhfWp3V,EAAAq3V,EAAAxkV,EAAAykV,GAkfhB,IAAI11V,EAAKC,KAqBT,SAAS01V,EAhfaC,EAAAC,GAkflB71V,EAAG81V,gBAAkBF,EACrB51V,EAAG+1V,aAhfSF,C,CAmgBhB,SAASG,IAELh2V,EAAG4oD,cAAgB,CACfgtS,QAAS,GACTK,IAhfQ,GAifRzwG,MAhfQ,E,EAmfZmwG,EAAqB,CAAA,EAAO,CAAA,CAAA,EAE5BO,EAAA,C,CAgDJ,SAASC,EAhfYP,EAAAK,GAkfjBj2V,EAAG4oD,cAAgB,CACfgtS,QAhfYA,EAifZK,IAAcA,EACdzwG,MAAc,MAAQowG,EAAU,IAAMK,EAAM,MAC5CG,aAhfYV,EAAgBW,KAAAr2V,EAAAs2V,SAAAV,GAAAK,GAAAj9U,KAAA,EAif5Bu9U,aAAcb,EAAcW,KAAKr2V,EAAGs2V,SAASV,GAASK,GAAKO,QAAA,C,EAKvC,QAAnBx2V,EAAGy2V,aAA0Bx4V,QAAQgwU,OAAOjuU,EAAG4oD,cAAe5oD,EAAG02V,UAAUC,UAAA,GAG5ET,EAAA,EAGJP,EAhfgBC,EAAc51V,EAAAs2V,SAAAV,EAAA,EAkf9Bx3V,EAAOw4V,eAhfS52V,EAAA4oD,a,CAsfpB,SAASstS,IA9eO,UAgfPl2V,EAAGy2V,YAEJz2V,EAAG02V,UAhfS7rF,cAAc7qQ,EAAA4oD,cAAA48L,KAAA,EAEd,QAgfNxlP,EAAGy2V,aAETz2V,EAAG02V,UAAU7rF,cAAc7qQ,EAAG4oD,aAAA,C,CAtItC5oD,EAAGs2V,SAAWb,EACdz1V,EAAG81V,gBAAkB,CAAA,EACrB91V,EAAG+1V,aAAe,CAAA,EAClB33V,EAAOw4V,eAAiB,GAGxB52V,EAAG21V,qBAhfiBA,EAifpB31V,EAAGs9D,YAuBH,SAAqBs4R,EAASK,GAG1BE,EAhfkBP,EAAAK,CAAA,EAmflBC,EAAA,EAGAjlV,EAAQvH,KAAA,C,EA/BZ1J,EAAGg2V,YAAcA,EAKjB53V,EAAOmwC,OAAO,UA6Cd,WAEI,IAMIqnT,EAKIvvU,EAXFrmB,EAhfE02V,UAAAC,YAAA,KAAA32V,EAAA02V,UAAAC,YAyfgB,UAAnB32V,EAAGy2V,aAEApwU,EAAQrmB,EAAG02V,UAAUC,WAAW9iU,MAAM,GAAA,EA5etCoiU,EA6eiB,GAAhB5vU,EAAMhZ,QA9ePuoV,EAASvvU,EAAA,GAAA,IAAAA,EAAA,GACTA,EAAA,KAofAuvU,EAAUvvU,EAAM,GACVA,EAAM,KA3eZ,QAAArmB,EAAAy2V,cAkfJb,EAAU51V,EAAG02V,UAAUC,WAAWf,QAClCK,EAAMj2V,EAAG02V,UAAUC,WAAWV,KAAO,KAIzCE,EAAoBP,EAASK,CAAA,GA9BzBD,EAAA,C,CAjiBY,C,kEA0dxB/3V,QACKC,OAAO,UAAA,EACPK,WAAW,kCAhfgCi3V,CAAA,EAif3Ch3V,UAAU,wBAkJf,WAEI,MAAO,CACHgyH,QAAa,CAAC,wBAhfM,WAifpB/xH,SAAa,IACbC,MAAa,CACTksQ,QAAa,IACb6rF,YAAa,I,EAEjBl4V,WAAa,wCACbgsQ,WAAa,CAAA,EACb1rQ,YAAa,6EACbizB,KAAa,SAAUpzB,EAAO0G,EAAS2sB,EAAO8kU,EAAatsF,GAEvD,IAAI4Q,EAAO07E,EAhfS,GAqfpB17E,EAAKu7E,UAAYG,EAAY,GAM7B17E,EAAKs7E,YAAc/3V,EAAM+3V,aAAe,QAExClsF,EAAW7rQ,EAAO,SAAU68Q,IAExBA,EAAQA,EAAM95P,OAAO,SAAUiyB,EAAG7G,GA9elC,OAAS,IAAAA,EAAA+uO,Q,IAGDvuQ,QAkfJjI,EAAQC,KAAK,wBAAA,EAA0ByxV,YAAYv7E,CAAA,C,KAtqBtC,C,IA6qBrC,CAAA,WAEI,aAOA,SAASw7E,EAAmB73V,GAExB,MAAO,CACHT,SAAa,IACbC,MAhfY,GAifZ6rQ,WAhfY,CAAA,EAifZ1rQ,YAAa,mDACbizB,KAAa,SAhfOpzB,EAAAgnV,GAkfhB,IAAI/+U,EAAOzH,EAAUmG,KAAK,MAAA,EACtB4N,EAhfY,qBAmfhBtM,EAAKiiE,SAAS31D,CAAA,EAadvU,EAAMs4V,cARN,WAEIrwV,EAAKyhE,YAAYn1D,CAAA,EACjByyU,EAAStyS,OAAA,EACT10C,EAAMu4V,SAAA,C,4BA3BtBh5V,QACKC,OAAO,UAAA,EACPM,UAAU,YAAau4V,CAAA,C,IAkChC,CAAA,WAEI,aAEA94V,QACKC,OAAO,UAAA,EACPK,WAAW,yBAMhB,WAEI,IAAIyB,EAAKC,KAhaT,SAAAi3V,IAEI,OAAKl3V,EAAAm3V,MAAA9pV,M,CA0fT,SAASo6U,IAEL,OAA4B,IAArBznV,EAAGkvG,a,CAQd,SAlfQw4O,IAofJ,OAlfI1nV,EAAAkvG,gBAAkBgoP,EAAA,EAAA,C,CA6Y1Bl3V,EAlfCm3V,MAAA,GAmfDn3V,EAlfCkvG,cAAU,EAqfXlvG,EAAGynC,aA3dH,SAAcnB,GAEXtmC,EAAAm3V,MAAA5mV,KAAA+1B,CAAA,C,EAvBPtmC,EAAAytG,aA+gBI,WAESg6O,EAAA,GAKLznV,EAAGkvG,aAAA,E,EArhBPlvG,EAAAqrB,SA2hBA,WAhfQq8T,EAAA,GAufJ1nV,EAAGkvG,aAAA,E,EA/CPlvG,EAAGo3V,UA7bH,WAEIp3V,EAAAkvG,cAAO,C,EA4bXlvG,EAAGq3V,SA4DH,WAEIr3V,EAAGkvG,cAlfKgoP,EAAA,EAAA,C,EAsbZl3V,EAAGk3V,WAlfKA,EAmfRl3V,EAAGynV,YAlfKA,EAmfRznV,EAAG0nV,WAlfaA,EAofhB1nV,EAAGs3V,mBA8FH,WAEI,OAAOr5V,QAAQw0C,UAAUzyC,EAAGm3V,MAAMn3V,EAAGkvG,cAAA,GAAmBlvG,EAAGm3V,MAAMn3V,EAAGkvG,eAAe0Z,Q,EA/FvF5oH,EAAGu3V,oBAuGH,WAEI,OAlfyB,EAkflBv3V,EAAGkvG,eAlfejxG,QAAWw0C,UAAAzyC,EAAAm3V,MAAAn3V,EAAAkvG,cAAA,EAAA,GAAAlvG,EAAAm3V,MAAAn3V,EAAAkvG,cAAA,GAAA0Z,Q,EA0YxC5oH,EAAGw3V,gBAgHH,WAEI,IAAM,IAAI7iO,EAAI,EAAGA,EAAI30H,EAAGm3V,MAAM9pV,OAAQsnH,CAAA,GAElC,GAAK30H,EAlfGm3V,MAAAxiO,GAAS/L,SAofb,MAAO,CAAA,EAIf,MAAO,CAAA,C,EAzHX5oH,EAAGmnV,UA+HH,WAMI,IAAM,IAAIxyN,EAHV30H,EAAGkvG,cAAgB,EAGFylB,EAAI30H,EAAGm3V,MAAM9pV,OAAQsnH,CAAA,GAhf1C30H,EAASm3V,MAAAxiO,GAAAh4D,aAAA,EACT38D,EAAAm3V,MAAAxiO,GAAAyyN,cAAA,C,EA6UsC,EACrC5oV,UAAU,eA0Kf,WAEI,MAlfI,CAmfAC,SAlfO,IAmfPC,MAAY,CAAA,EACZH,WAlfU,qCACVinV,QAAA,SAAAC,GAIA,OAgfIA,EAAS78Q,SAAS,gBAAA,EAhftB,Y,GA8TuB,EAC1BpqE,UAAU,mBA4Lf,WAhfA,MAAA,CACIC,SAAO,IACH+xH,QAAA,CAAA,OAAY,iBACZg1N,QAAA,SAAYC,GAIhB,OAgfQA,EAAS78Q,SAAS,qBAAA,EAhf1B,SAAAlqE,EAAAgnV,EAAAC,EAAAsC,GAEQ,IAAMwP,EAASxP,EAAQ,GACvBA,EAAA,GAEexgT,aAAYgwT,CAAA,C,IAwSJ,C,IAkNvC,CAAA,WAEI,aA6DA,SAASC,EAAgBC,GAjfrB,MAAG,CACAnnO,QAAA,UAofC96E,SAAU,EACV5jB,KAAU,SAAUpzB,EAAOm7M,EAAM9nL,EAAO64O,GAEpCA,EAAQgtF,YAAYrnV,KAAKonV,EAAsBl/N,SAAA,EAlfhDmyI,EAAOitF,SAAWtnV,KAAAonV,EAAA10B,MAAA,C,uCAgb7BhlU,QACKC,OAAO,UAAA,EAjfZsf,SAAS,wBAsfT,WAEI,IA/eA6xQ,EAAc,CAEV52J,UAAW,SAAA1lF,GAEP,OAAAA,EAKJ,KAAAA,EAAAA,EAAA,IAAAoR,KAAApR,CAAA,EA+ee,E,EAMfkwR,OAlfQ,SAAOlwR,GAEX,OAAAA,EAufOuQ,OAAOvQ,CAAA,EAAKpM,IAAI2c,OAAOvQ,CAAA,EAAK+kT,UAAA,EAAa,GAAA,EAAKpjO,OAAA,EArfjD,E,GAnBEz0H,KA2BNsS,OA2fR,SAAgBquJ,GAjffyuH,EAAOpxR,QAAAqhB,OAAA,GAAA+vQ,EAAAzuH,CAAA,C,EArCM3gK,KA2ClB6tV,KAAA,WAEO,OAAAz+D,C,EAnDE,EACT7wR,UAAA,kBAAAk5V,CAAA,C,IAujBJ,CAAA,WAEI,aAEAz5V,QACKC,OAnfM,UAAA,EAofNM,UAAU,SAGf,WAEI,MAAO,CAlfPC,SAAS,IACTC,MAAA,CAofQq5V,aAAc,YAlflBC,KAAA,WAofIh4V,GAAc,Y,EAjflB+qB,SAAA,sGAofAy6T,QAAU,SAAUC,GA9exB,OAifQA,EAAS78Q,SAAS,SAAA,EAjfjB,SAAAlqE,EAAAgnV,GAGDhnV,EAASu5V,mBAOb,WAqfYv5V,EAAM67B,MAAM,6BAA8BmrT,CAAA,C,KA9BrC,C,IAqC7B,CAAC,WACC,aAOA,SAASwS,EAnfS77U,EAAA7c,EAAgBF,EAAAD,EAAAS,EAAAq4V,EAAAC,GAEpBn4V,KAqfJa,OAnfIq3V,EAAAE,YAFAp4V,KAufJisC,MAnfQ,SAAMrpC,GAofpBxD,EAAI09B,QAAQu7T,QAAQtxV,KAAK,CAACtG,OAAQ,QAASmC,MAAOA,CAAA,EAAQ,SAAUjC,EAAUC,EAAUC,GACtF7C,QAAQqhB,OAAOxf,EAAQ4I,KAAK4vV,QAAS,IAAIF,EAAQx3V,CAAA,CAAA,C,IAzfzCX,KA6fJs4V,MAAQ,SAAU11V,GACxBxD,EAAI09B,QAAQu7T,QAAQtxV,KAAK,CAACtG,OAAQ,QAASmC,MAAOA,CAAA,EAAQ,SAAUjC,EAAUC,EAAUC,GACtF7C,QAAQqhB,OAAOxf,EAAQ4I,KAAK4vV,QAAS,IAAIF,EAAQx3V,CAAA,CAAA,C,IA/fzCX,KAmgBJu6F,OAnfI,SAAa33F,GAofvBxD,EAAI09B,QAnfMu7T,QAAStxV,KAAA,CAAAtG,OAAU,SAAWmC,MAAOA,CAAA,EAAA,SAAAjC,EAAAC,EAAAC,GAof7C7C,QAAQqhB,OAAOxf,EAAQ4I,KAAK4vV,QAAS,IAAIF,EAAQx3V,CAAA,CAAA,C,2FAzBvD3C,QACGC,OAAO,uBAAwB,EAAA,EAC/BwlK,QAnfO,iBAAaw0L,CAAA,C,IAkhBzB,CAAC,WACC,aAEAj6V,QACGC,OAnfG,uBAAA,EAAA,EAofHwlK,QAnfO,UAsfV,WAEE,IAAIA,EAnfQzjK,KAqfZyjK,EAAQmuH,MAAQ,EAChBnuH,EAAQouH,MAAQ,GAChBpuH,EAAQquH,MAAQ,EAEhBruH,EAnfQgpH,WAAA,WAofN,MAAO,CAAChpH,EAAQmuH,MAAOnuH,EAAQouH,MAAOpuH,EAAQquH,OAAO59Q,KAAK,GAAA,C,EAG5DuvJ,EAAQwY,SAAW,SAAU21G,EAAOC,EAAOC,GACzC,OAAIruH,EAnfEmuH,MAAAA,GAsfFnuH,EAAQouH,MAAQA,GAGhBpuH,EAAQ80L,KAAOzmE,C,EAzgBV,C,IAihBf,CAAC,WACC,aAOA,SAnfE0mE,EACAl5V,GAsfA,IAAImkK,EAnfIzjK,KAqfRyjK,EAAQpiI,YAnfI,SAAa4tL,GAofvB,OAAIx/M,MAnfMw/M,CAAA,IAwfNpnI,GAnfE,EAAA1zD,KAAaC,MAAA,EAAA66L,EADb,KAC8B,EAAgB,IAAA,CAD9C,IAC2D5zM,QAD3D,CAC2D,EAqf1D5L,MAnfGo4E,CAAA,GAAW,OAAAA,C,EAsfvB47E,EAAQypC,WAAa,SAASn5F,EAAQ0kP,GAOpC,IAIIp2T,EAJJ,OANAo2T,EAAiC,KAAA,IAAdA,EAA4BA,EAAY,EAMrC,UAAlB,OAHF1kP,EADoB,UAAlB,OAAOA,EACA54F,WAAW44F,CAAA,EAGXA,IAAuBtkG,MAAMskG,CAAA,GAAW,CAACi2K,SAASj2K,CAAA,EACpD,GAGL1xE,EAnfM0xE,EAAA,EAofVA,EAAS5/E,KAnfKoO,IAAAwxE,CAAA,EAqfVk5F,EAAU9xL,YAnfW,EAAKA,WAAa,MAAA,GAAaE,QAAAo9U,CAAA,CAAA,EAqfjDp2T,EAAa,CAAC4qK,EAAUA,E,EAGjCxpC,EAAQl7B,gBAnfY,SAAattF,GAof/B,OAAKA,GAIE9mB,KAAKC,MAAM6mB,EAAK9rC,QAAA,EAAY,GAAA,C,EAQrCs0J,EApfKm7F,kBAAO,SAAA3jN,GAqfV,IACM8rF,EACAC,EAFN,GApfG/rF,aAAUiJ,KA4fX,OAPI6iF,EAAO9rF,EAAK24E,YAAA,EACZoT,EAAS/rF,EAAK44E,SAAA,EAAa,EAAK,GAAK,KAAO54E,EAAK44E,SAAA,EAAa,GAAM54E,EAAK44E,SAAA,EAAa,GAnfrF54E,EAAA64E,QAAA,EAAmB,GAAA,IAAA74E,EAAA64E,QAAA,EAAA74E,EAAA64E,QAAA,GAKpB,IAAakT,EAAA,IAAAD,EAAA,MAJrB9rF,EAAA4sJ,SAAA,EAAA,GAAA,IAAA5sJ,EAAA4sJ,SAAA,EAAA5sJ,EAAA4sJ,SAAA,GAIqB,KAHV5sJ,EAAA2lE,WAAA,EAAA,GAAA,IAAA3lE,EAAA2lE,WAAA,EAAA3lE,EAAA2lE,WAAA,GAGU,KAFb3lE,EAAay9S,WAAA,EAAA,GAAA,IAAAz9S,EAAAy9S,WAAA,EAAAz9S,EAAAy9S,WAAA,GAwfjB,MApfI,IAAAl5E,UAAa,yBAAA,C,EA8frB/7G,EAAQie,iBAAmB,SAASp0F,EAAUqrQ,GAC5C,GAAMrrQ,aApfappC,KAwfnB,OAAIy0S,EACa,IAAIz0S,KAAKopC,EAASn+E,QAAA,EAA2C,GAA/Bm+E,EAASsrQ,kBAAA,EAA2B,GAAA,EAG5EtrQ,GAFWnpC,YAAA,EAAcpnC,UAAU,EAAG,EAAA,C,EAM/C0mJ,EAAQo+F,sBAAwB,SAAS3vO,GAnf5C,IAAAo+C,EAAAp+C,EAAAkD,MAyfK,OAxfNlD,EAAAqP,0BAAArgC,QAAA,SAAAquM,GACIj/H,GAAAi/H,EAAAnD,Y,GAGY,EAAP97H,EAAOA,EAAA,I,EAufZmzF,EApfKo1L,aAAU,SAAA7tR,EAAoBixF,GA8fjC,IA1fF,IAKIknJ,EAJJ,QAKO1vQ,EAAA,EAAAwoH,GAAgBxoH,EAAAwoH,EAAA7uJ,OAAAqmC,CAAA,GAqfnB0vQ,IAAgB,EAAJ1vQ,EAAQ,IAAM,IA3frB,OASLwoH,EAAGxoH,GAufL0vQ,GA9fW,WA+fX,IApfKY,EAAA,IAAY95C,OAAAk5C,EAAA,GAAA,EAsfjB,OArfKn4O,EAAWvgE,QAAAs5S,EAAA,EAAA,C,EAwflBtgJ,EApfOq1L,gBAAa,SAAA9tR,EAAAkxF,GA6flB,IANA,IApfK6nJ,EAAA95C,OAAA,0BAAsB,GAAA,EAufvB8uF,EAAQ/tR,EACRguR,EAAU,EAE0B,QAAhC/sV,EAAS83S,EAAM+c,KAAK91P,CAAA,IAAkB,CAC5C,IAAMlmC,EAAQ74B,EAAO64B,MACfm0T,EAAUhtV,EAAO,GAEjBypI,EAASujN,EAAQvjN,OAAO,EAAGujN,EAAQ7rV,OAAS,CAAA,EAnflD8uJ,GAAsBA,EAAA9uJ,QAAA8uJ,EAAAvoI,SAAA+hH,CAAA,IAEfsO,EAAMh5E,EAAKlmC,EAAAm0T,EAAA7rV,QAqfVukM,EAAM3mI,EAAMjuD,UAAU+nB,EAAQm0T,EAAQ7rV,OAAS,CAAA,EAAG0rC,QAAQkrG,CAAA,EAAS,EAEzE+0M,EAAQA,EAAMhgT,MAAM,EAAGjU,EAAQk0T,CAAA,EAC7BD,EAAMhgT,MAAMjU,EAAQm0T,EAAQ7rV,OAASukM,EAAMqnJ,CAAA,EAlf/CA,GAASC,EAAA7rV,OAAAukM,E,CAwfX,OAAOonJ,C,EAGTt1L,EApfQy1L,WAAG,SAAAC,GAwfLltV,EAFQg+P,OADE,UACc,GAAA,EAET62D,KAAKq4B,CAAA,EACxB,OAAIltV,GAAUA,EAAO,GAnfnBA,EAAS,GAGL,E,EAufRw3J,EAAQ21L,mBAAqB,SAASpuR,EAAOkxF,GAU3C,IARA,IACM6nJ,EAAQ95C,OADE,eACc,GAAA,EAhf5B8uF,EAAS/tR,EACTguR,EAAA,EAsfsC,QAAhC/sV,EAAS83S,EAAM+c,KAAK91P,CAAA,IAAkB,CAC5C,IAAMlmC,EAAQ74B,EAAO64B,MACfm0T,EAAUhtV,EAAO,GACjBy/G,EAAQ+3C,EAAQy1L,WAAWD,CAAA,EAhf7Bl4Q,EAAGm7E,EAAgBA,EAAexwC,GAqfpC,GAEIqwC,EAAU0H,EAAQq1L,gBAAgBG,EAASl4Q,CAAA,EACjDg4Q,EAAQA,EAAMhgT,MAAM,EAAGjU,EAAQk0T,CAAA,EAC7Bj9L,EACAg9L,EAAMhgT,MAAMjU,EAAQm0T,EAAQ7rV,OAAS4rV,CAAA,EAlfvCA,GAASC,EAAA7rV,OAAA2uJ,EAAA3uJ,M,CAufX,OAAO2rV,C,EAGTt1L,EAAQ41L,cAAgB,SAASruR,GAC/B,IACM+4O,EAAQ95C,OADE,qBACc,GAAA,EAE9B,OApfEj/L,EAASvgE,QAAAs5S,EAAA,EAAA,C,EAufbtgJ,EAAQzH,aAAe,SAAShxF,EAAO+V,GACjCg7E,EAAU0H,EAAQ41L,cAAcruR,CAAA,EACpC+wF,EAAU0H,EAAQo1L,aAAa98L,EAASh7E,EAAMk7E,WAAA,EAE9C,OADUwH,EAAQ21L,mBAAmBr9L,EAASh7E,EAAMm7E,iBAAA,C,EAItDuH,EApfItE,aAAS,SAAA9hJ,EAAA/X,EAAAwD,GAqfX,GApfE,OAAAA,GAAAk2M,UAAAI,WAqfA,OApfIJ,UAAUI,WAAA,IAAkBv2M,KAAA,CAAAC,GAAA,CAAexD,KAAAA,CAAA,CAAA,EAAA+X,CAAA,EAqfjD,IAAIjU,EAAIm3C,EAAE,6BAAA,EACNj2C,EAAMpB,OAAOF,IAAIC,gBAAgB,IAAIJ,KAAK,CAACC,GAAO,CAAExD,KAAMA,CAAA,CAAA,CAAA,EAC9D8D,EAAEgpJ,KAAK,OAAQ9nJ,CAAA,EACflB,EAAEgpJ,KAAK,WAAY/0I,CAAA,EACnBkjC,EAAE,MAAA,EAAQxN,OAAO3pC,CAAA,EACjBA,EAAE,GAAGI,MAAA,EACLN,OAAOF,IAAIqC,gBAAgBf,CAAA,EAC3BlB,EApfE+pC,OAAA,C,EAufJswH,EAAQrE,0BAA4B,SAASk6L,GAG3C,IAFA,IAAIC,EAAM,IAAIC,YAAYF,EAAalsV,MAAA,EACnCm5D,EAAO,IAAIouP,WAAW4kC,CAAA,EACjB9lT,EAAI,EAAGA,GAAK6lT,EAAalsV,OAAQ,EAAEqmC,EAAG8yB,EAAK9yB,GAAkC,IAA7B6lT,EAAajvK,WAAW52I,CAAA,EACjF,OAAO8lT,C,EAGT91L,EApfIg2L,iBAAS,SAAA9qO,GAsfX,IADA,IApfEywI,EAAA,GACI3rN,EAAO,EAAmB3uB,KAAAA,IAAhB6pG,EAAAl7E,GAAqBA,CAAA,GAqfnC2rN,GAAUzwI,EAASl7E,GAErB,OAAO2rN,C,EAGT37F,EAAQx1F,YAAc,SAASghJ,EAAKyqI,GAClCzqI,EAAM9zM,WAAW8zM,CAAA,EAnff0qI,EAASxlU,KAAAg2I,IAAA,GAAAuvL,CAAA,EAqfX,OApfEvlU,KAAAC,OAAA66L,EAAAzsL,OAAAC,SAAAk3T,CAAA,EAAAA,C,EAufJl2L,EAAQm2L,YApfY,SAAS3+S,GAqf3B,IAAIw4E,EApfM,IAAAvvE,KAqfV,OAAOjJ,EAAK64E,QAAA,IApfSL,EAAAK,QAAA,GAqfnB74E,EAAK44E,SAAA,IAAeJ,EAAMI,SAAA,GAC1B54E,EAAK24E,YAAA,IAAkBH,EAAMG,YAAA,C,EAGjC6vC,EAAQo2L,gBAAkB,SAAS5+S,GACjC,IAAIw4E,EAAQ,IAAIvvE,KAChB,OAAOjJ,EAAK64E,QAAA,IAAcL,EAAMK,QAAA,EAAY,GAC1C74E,EAAK44E,SAAA,IAAeJ,EAAMI,SAAA,GAC1B54E,EAAK24E,YAAA,IAAkBH,EAAMG,YAAA,C,EAGjC6vC,EAAQq2L,cAAgB,SAASryV,GAE/B,MArfS,eAqfCsuH,KAAKtuH,CAAA,C,EAGjBg8J,EApfQs2L,mBAAA,SAAAr6J,GAsfN,IA7eFzzL,EAAA,YA8fE,OA7fEyzL,IA6eU,EAQVzzL,EApfI,WACAyzL,IA4eM,EASVzzL,EApfI,WACAyzL,IA2eE,GAUNzzL,EApfI,OACIyzL,IA0eC,KAWTzzL,EAAS,WAEJA,C,EAGTw3J,EAAQ37G,+BAAiC,WACvC,MAAO,CACLkyS,IAAO16V,EAAQ,WAAA,EAAa,gBAAA,EAC5B26V,IAAO36V,EAAQ,WAAA,EAAa,gBAAA,EAC5B46V,IAAO56V,EAAQ,WAAA,EAAa,gBAAA,EAnfhC66V,IAAS76V,EAAA,WAAA,EAAA,gBAAA,EACT86V,IAAA96V,EAAA,WAAA,EAAA,gBAAA,EACI+6V,IAAO/6V,EAAA,WAAA,EAAA,gBAAA,EAqfPg7V,IApfIh7V,EAAU,WAAA,EAAA,gBAAA,EAqfdi7V,MApfIj7V,EAAW,WAAA,EAAQ,kBAAA,EAqfvBk7V,UApfIl7V,EAAU,WAAA,EAAU,sBAAA,EAqfxBm7V,YApfIn7V,EAAA,WAAA,EAAA,sBAAA,EAqfJo7V,YApfQp7V,EAAS,WAAA,EAAS,sBAAA,EAqf1Bq7V,aAAcr7V,EAAQ,WAAA,EAAa,uBAAA,EACnCs7V,aApfQt7V,EAAO,WAAA,EAAkB,uBAAA,EAqfjCu7V,YApfQv7V,EAAA,WAAA,EAAA,sBAAA,EAqfRw7V,YApfYx7V,EAAI,WAAA,EAAiB,sBAAA,EAqfjCy7V,QAAWz7V,EApfK,WAAA,EAAA,oBAAA,EAqfhB07V,SAAY17V,EAAQ,WAAA,EAAa,qBAAA,EACjC27V,MAAS37V,EApfG,WAAA,EAAiB,kBAAA,EAqf7B47V,MAAS57V,EAAQ,WAAA,EAAa,kBAAA,EAC9B67V,IAAO77V,EAAQ,WAAA,EAAa,gBAAA,EAC5B87V,KAAQ97V,EAAQ,WAAA,EAAa,iBAAA,EAC7B+7V,KAAQ/7V,EAAQ,WAAA,EAAa,iBAAA,EAC7Bg8V,OAAUh8V,EAAQ,WAAA,EAAa,mBAAA,EAC/Bi8V,UAAaj8V,EAAQ,WAAA,EAAa,sBAAA,EAClCk8V,QAAWl8V,EAAQ,WAAA,EAAa,oBAAA,EAnfvCm8V,SAAAn8V,EAAA,WAAA,EAAA,qBAAA,EACDo8V,SAAAp8V,EAAA,WAAA,EAAA,qBAAA,C,GAGImkK,EAAArmC,4BAAA,SAAAj+G,EAAA+hG,GACKy6O,EAAO,CAsfR14S,UArfUi+D,EAAAj+D,UAAAjjD,KAAyB47V,mBAAA16O,EAAAj+D,SAAA,EAAA,KAsfnCC,QArfCg+D,EAAUh+D,QAAAljD,KAAmB47V,mBAAA16O,EAAAh+D,OAAA,EAAA,I,EAufhC3kC,aAAaC,QAAQW,EAAKV,KAAKC,UAAUi9U,CAAA,CAAA,C,EAG3Cl4L,EArfQonB,6BAAU,SAAA1rK,GAsfhB,IAAI08U,EAAWt9U,aAAagM,QAAQpL,CAAA,EACpC,OAAK08U,EAjfC,CAsfJ54S,WAFE64S,EArfar9U,KAAA6L,MAAUuxU,CAAA,GAEX54S,UAAA,IAAAiB,KAAA43S,EAAA74S,UAAA,WAAA,EAAA,KAsfdC,QArfQ44S,EAAA54S,QAAA,IAAAgB,KAAA43S,EAAA54S,QAAA,WAAA,EAAA,I,EALJ,I,EA8fRugH,EAAQm4L,mBArfmB,SAAW3gT,GAsfpC,IAAI8gT,EAAgB9gT,EAAK29S,kBAAA,EAEzB,OADgB,IAAI10S,KAAKjJ,EAAK9rC,QAAA,EAA4B,GAAhB4sV,EAAqB,GAAA,EApf9C53S,YAAA,EAAUvwB,MAAA,GAAA,EAAA,E,EAyf7B6vI,EAAQpmC,wBArfe,SAAApiF,GAkgBrB,IAZA,IAAI8rF,EAAO9rF,EAAK24E,YAAA,EACZoT,GAAS/rF,EAAK44E,SAAA,EAAa,GAAGhgG,SAAA,EAE9ByjG,GAtfa,IAqfb0P,EArfM55H,SAAc45H,EAAK,IAAIA,GAsfvB/rF,EAAK64E,QAAA,EAAUjgG,SAAA,GAErBynG,GADe,IAAfhE,EAAIlqH,SAAckqH,EAAM,IAAMA,GACtBr8E,EAAK4sJ,SAAA,EAAWh0K,SAAA,GAnf1BmoU,GAofmB,IAAjB1gO,EAAMluH,SAAckuH,EAAQ,IAAMA,GApf5BrgF,EAAS2lE,WAAA,EAAA/sF,SAAA,GAuffooU,GADmB,IAAnBD,EAAQ5uV,SAAc4uV,EAAU,IAAMA,GAC5B/gT,EAAKy9S,WAAA,EAAa7kU,SAAA,GAE5BqoU,GADmB,IAAnBD,EAAQ7uV,SAAc6uV,EAAU,IAAMA,GACvBhhT,EAAKkhT,gBAAA,EAAkBtoU,SAAA,GACnCqoU,EAAa9uV,OAAS,GAAG8uV,EAAe,IAAMA,EAErD,OAAOn1N,EAAO,IAAMC,EAAQ,IAAM1P,EAAM,IAAMgE,EAAQ,IAAM0gO,EAAU,IAAMC,EAAU,IAAMC,C,EAG9Fz4L,EArfI+lD,0BAAA,SAAA91F,EAAAkG,GA4fF,MAHyB,UAArB,OAFFA,EAtfI90G,KAAAA,IAqfF80G,EACU,IAAI11E,KAEP01E,KACTA,EAAY,IAAI11E,KAAK01E,CAAA,GAnfrB,IAAQ11E,KAAO,MAAPwvE,EAAOkG,EAAAzqH,QAAA,CAAA,C,EAwfnBs0J,EAAQ24L,wBAA0B,CAChCz7V,SAAU,SAASA,GACjB,IAlfJgrU,EACItqH,EAEIg7I,EA+eAt9V,EAAWf,QAAQmH,QAAQsB,SAASC,IAAA,EAAM2pV,SAAA,EAAWtvV,IAAI,UAAA,EApejE,OAqe4B,MAApBJ,EAASE,QApfRy7V,EAAgB37V,EAAAsiB,QAAA,EAAA,uBACzB0oT,EAAAhrU,EAAAsiB,QAAA,EAAA,gBACIo+L,EAAO/hN,EAAA,WAAA,EAAA,yBAAA,EAAAu5C,YAAA,EAAA6oC,WAAA,IAAA,GAAA,EACH46Q,GAE2B,KAD3BD,EAAUC,EAAAxoP,MAAA,sBAAA,GACA1mG,SACVi0M,EAAAg7I,EAAA,IAwfF54L,EAAQtE,aAAakiD,EAAUsqH,EAAaloK,EAAQg2L,iBAAiB94V,EAASmI,IAAA,CAAA,GACjD,MAApBnI,EAASE,OAClB9B,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,wBAAA,CAAA,EAA2BmC,SAAS,WAAA,CAAA,EAnf9G1C,EAAAuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAEGd,EAAAmI,I,yBAmHF9K,QACGC,OAAO,qBAAsB,CAAC,KAAA,EAC9BwlK,QAAQ,QAAS+0L,CAAA,C,IAsYtB,CAAC,WACC,aAOA,SAAS+D,EArfKC,EAAc38V,GAuf1B,IAAI4jK,EArfIzjK,KAwfRyjK,EAAQrhJ,kBAAoB,GAG5BqhJ,EAAQhtH,mBArfoB,CAsf1B+yC,oBArfU,CAAA,EAAA,GAAA,GAAA,GAAA,IAAA,KAsfVvzC,mBAAoBwtH,EAAQrhJ,kBAC5BsC,sBArfoB,CAAA,EAsfpB+kE,mBAAoB,CAAA,EACpBsgI,qBAAsB,CAAA,EACtB1zK,yBAA0B,CAAA,EAC1B91B,cAAe,CAAA,EACfy1B,eAAgB,CAAA,EAChBt1B,eAAgB,CAAA,EAChB+7U,kBArfc,CAAA,EAsfdC,UAAW,CAAA,EACXztQ,mBArfkB,CAAA,EAsflB0tQ,gBAAiB,CAAA,EACjBC,YAAa,CAAA,EACbC,wBAAyB,GACzBnmT,UAAW,GACXu3K,gBAAiB,GACjB6uI,eAAgB,CAAA,EApfrB/mT,kBAAY,CAAA,EACXj1B,WAAA,GAsfIhY,KAAM,GACNi0V,WAAY,CAAA,EArfhBlnH,UAAA,CAAA,EACGmnH,WAAO,CAAA,EACPC,UAAQ,CAAA,EAufPC,YAAa,CAAA,EACbC,SAAU,CAAA,EArfdC,WAAS,CAAA,EAufL/qO,eAAgB,CAAA,EArflBgrO,YAAc,CAAA,EAufZC,aAAc,CAAA,EArfhBC,2BAAiB,CAAA,EAuffC,aAAc,CAAA,EArfhBjwQ,cAAgB,CAAA,EACdkwQ,oBAAoB,CAAA,EAufpBC,gBAtfiB,CAAA,EAufjBC,kBAAmB,CAAA,C,EAIrBl6L,EAtfMlgJ,eAKN,SAAiB/d,GAwff,GAvfAg3V,EAAYoB,eAAc/9V,EAAQ4I,KAAAk7D,IAAA,EAChCn+D,EAufA,OAAOxH,QAAQqhB,OAAOrhB,QAAQye,KAAKgnJ,EAAQhtH,kBAAA,EAAqBjxC,CAAA,EAElE,OAAOxH,QAAQye,KAAKgnJ,EAAQhtH,kBAAA,C,EAT9BgtH,EAtfIr/I,cAkgBJ,SAAuBF,EAAMC,GAC3B,GAA2B,IAAvBA,EAAY/W,OArfrB,MAAY,GAwfP,IAAI+T,EAAW,GA5ejB,OATFgD,EAAAjjB,QAAA,SAAA8d,EAAA8lB,GACkC,SAAxB9lB,EAAAw2B,KAAAE,YACPv0B,GAAQ,KAwfLA,GAAYnC,EAAO6E,OAAO0gM,eAA8CvlM,EAAO6E,OAAOjF,MArfnFkmB,EAAA3gB,EAAU/W,OAAA,IAufX+T,GAAY,I,GAnfVA,C,EA6dRsiJ,EAAQo6L,iBA4BR,WAIE,IAAIC,EAAiBr3V,SAASs3V,iBAAiB,yBAAA,EArfjDC,EAAmB,IAAUl/P,WAAO,WAAc,CAChDkrO,QAAI,CAAA,EACFC,WAAO,CAAA,EAufP1jQ,KAAMr9D,M,GAGR40V,EAAe58V,QAAQ,SAAS8d,GArfhCA,EAAI6/E,cAAem/P,CAAA,C,wCAsZvBhgW,QACGC,OArfO,+BAAU,EAAA,EAsfjBwlK,QArfO,gBAAU84L,CAAA,C,IAylBtB,CAAC,WACC,aAOA,SAvfG0B,EAwfDhoU,EACAwjN,GArfA,MAAAykH,EAAA,CACAzkH,EAAAc,UA0fA,IAAI0jH,EAAiB,CAtfrBE,SAAQ,CACN3iL,YAAU,CAAA,EACR4iL,WAAO,CAAA,C,EA4fXC,gBAAiC,SAAU51V,EAAMoR,GAtf/CokV,EAAaK,uBAAkB71V,EAAAoR,CAAA,GAGjCokV,EAAQM,wBAA8B91V,EAAAoR,CAAA,C,EA0ftCykV,uBAvfkC,SAAA71V,EAAAoR,GAwfhC,MAvfsB,CAAA,IAApBqkV,EAAoBplT,QAAAj/B,EAAA6lL,IAAA,GAGuC,CAAA,IAAzDx2L,OAAO0D,SAAAtD,KAAWwvC,QAAA,sBAAA,C,EA6fxB0lT,MAAuB,SAAU7vV,EAAOhF,GAtflCgF,EA2fJsvV,EAAeQ,mBAAmB9vV,EAAOhF,CAAA,EAHvC60E,QAAQ6rM,KAAK,wBAAA,C,EAOjBq0E,aAA8B,SAAUv7U,GArftCja,OAAOi1V,SAAKl/S,KAAM97B,EAAK,CAAAw7U,MAAY,CAAA,CAAA,CAAA,EAwfnCV,EAAeE,SAAS3iL,YAAc,CAAA,C,EAGxC+iL,wBAAyC,SAAU91V,EAAMoR,GACvD,IAAI0/F,EAAWtjF,EAAM8jU,mBAAmBlgV,EAAQ6lL,IAAA,EAEhDx2L,OAAOi1V,SAASS,SAASn2V,EAAKhB,KAAA,EArf9ByB,OAAIi1V,SAAA1pU,SAAgB,CAClBoqU,MAAIp2V,EAAOq2V,YAAA,EACXC,OAAIt2V,EAAShB,MACbu3V,WAAUnlV,EAAKtZ,GACfsZ,QAAIA,EAAawD,KACjBqiL,KAAInmF,C,GA0fNrwG,OAvfEi1V,SAAac,OAAM1oB,IAAA,CAwfnBsoB,MAvfKp2V,EAAAq2V,YAAA,EACLC,OAAMt2V,EAAIhB,MAwfVu3V,WAAYnlV,EAAQtZ,GACpBsZ,QAASA,EAAQwD,KACjBqiL,KAAMnmF,C,GAGRrwG,OAAOi1V,SAASe,UAAU,UAAWrlV,EAAQwD,IAAA,EAC7C4gV,EAAeE,SAASC,WAAa,CAAA,C,EApfvCK,mBAAoC,SAAU9vV,EAAAhF,GACxCs0V,EAAEE,SAAoB3iL,aACxBtyK,OAAAi1V,SAAAK,MAAA7vV,EAAAhF,CAAA,C,GA2fJ,OAvfIs0V,C,qCAnFNjgW,QAufGC,OAAO,uBAAwB,EAAA,EAC/B4mQ,QAAQ,iBAAkBo5F,CAAA,C,IAuF/B,CAAC,WACC,aAEAjgW,QACGC,OAvfC,uBAAS,EAAA,EAwfVwlK,QAvfG,UA0fN,WAEE,IAAI2gL,EAAUpkV,KAGdokV,EAAQnlU,QAAU,CAAA,EAClBmlU,EAAQ+a,gBAAkB,CAAA,EAK1B/a,EAAQgb,SAuCR,SAAkB32V,EAAMoR,GAtftBuqU,EAAO+a,iBAwfLj2V,OAAOm2V,SAAS,UAAA,EArfpB,IAAAxmP,EAAQ,CACNymP,SApDM,8BAqDNC,OAmcoB,U,EAjchBz2V,EAAA,GACAL,IACFK,EAAO,CAwfL02V,QAAS/2V,EAAKlI,GACd8c,KAAM5U,EAAKq2V,YAAA,EAtffr3V,MAAOgB,EAAAhB,MAwfHjF,WAAYiG,EAAKg3V,YACjBC,WAAYj3V,EAAKk3V,QAAA,C,GApfrB9lV,GACA7b,QAAMqhB,OAAQvW,EAAO,CAwfjB+Q,QAAS,CACPtZ,GAAIsZ,EAAQtZ,GAtfd8c,KAAAxD,EAAAwD,KACAuiV,qBAAQ/lV,EAAAklL,QACR8gK,uBAAUhmV,EAAAimV,aAwfRC,qBAAsBlmV,EAAQmmV,e,IAnflC3+U,OAAMwkC,KAAQ/8C,CAAA,EAAAsE,SAwfdlE,OAAOm2V,SAAS,OAAQrhW,QAAQqhB,OAAOw5F,EAAM/vG,CAAA,CAAA,EAC7Cs7U,EAAQ36U,KAAA,EACR26U,EAAQ+a,gBAAkB,CAAA,E,EAtE9B/a,EAvfM6b,WAikBN,WAtfI7b,EAAQnlU,QAwfRmlU,EAvfE3lT,MAAA,EAyfF2lT,EAAQj7U,KAAA,C,EA7EZi7U,EAvfO36U,KA2gBP,WAtfEP,OAAOm2V,SAAC,SAAe,CAAKa,sBAAkB,CAAA,CAAA,CAAA,C,EAmehD9b,EAvfI9iV,KA+gBJ,WACE4H,OAvfOm2V,SAAA,SAAA,CAAqBa,sBAAmB,CAAA,CAAA,CAAA,C,EA+djD9b,EAvfMj7U,KAkhBN,WACED,OAAOm2V,SAAS,YAAa,MAAA,C,EA3B/Bjb,EAvfM3lT,MAqhBN,WACEv1B,OAvfIm2V,SAAW,MAAA,C,EAydjBjb,EAAQ+b,YA6ER,WACEj3V,OAAOm2V,SAAS,YAAY,MAAA,C,EAvE5Bn2V,OAAOm2V,SAAS,SAAU,WAtf5Bjb,EAAQnlU,QAAA,CAAA,C,GAGN/V,OAAMm2V,SAAQ,SAAO,WAwfnBjb,EAAQnlU,QAAU,CAAA,C,GAvhBP,C,IA+lBnB,CAAC,WACC,aAOA,SAASmhV,EAAgB16V,EAAOtG,EAAKI,EAAa4c,GAChD,IAAIqnJ,EAAUzjK,KAEdyjK,EAvfM6zE,+BAA2B,SAAA7yH,GAwf/BA,EAvfSynH,qDAAA,EAAuDhrO,QAAA,SAAA+vE,GAChEwyF,EAAU19C,gBAAA90C,CAAA,C,IA2fZwyF,EAvfI19C,gBAAe,SAAA90C,GACjB,IAAEr0D,EAAGR,EAAAS,MAAA,EACLvS,EAAOlL,EAAImL,KAAAnK,YAAgB0wE,mCACzBrmE,QAAA,MAAAwmE,EAAA1wE,EAAA,EAwfCkK,QAAQ,UAAW,mBAAA,EAgBtB,OArgBF/E,EAAQ3E,IAAAuJ,CAAA,EAAAxF,KAAA,SAAAnE,GACFA,EAAUE,SAAYrB,EAAAsB,aACtBmwE,EAAA60C,cAAsBnlH,EAAAmI,KAC1BmoE,EAAS8zC,eAAY9zC,EAAA60C,cAA0B70C,EAAK60C,cAAK,gBAA6B,KACtF70C,EAAOg0C,kBAAAh0C,EAAA8zC,eAwfH9zC,EAAMovR,YAAcpvR,EAAM8zC,eAAwC,EAAvB9zC,EAAM8zC,eAAqB,KACtEnoG,EAAS7J,QAAQk+D,CAAA,GArfjBr0D,EAASnP,OAAA,8BAAA,C,EAEX,SAAUF,GAwfVqP,EAASnP,OAAOF,CAAA,C,GAGXqP,EAASM,O,+CAlCpBlf,QACGC,OAvfK,wBAAkB,EAAA,EAwfvBwlK,QAvfC,kBAAkB28L,CAAA,C,IA4hBxB,CAAC,WACC,aAOA,SAAS5vV,EAAQ4L,EAAIu+C,EAAUnb,EAAYjgD,EAAY+gW,EAAWC,EAASC,EAAM/mH,EAAej6O,EAAay2B,EAtfnGwqU,EAAkBC,GAyf1B,IAvfEj9L,EAAYzjK,KA2fV2gW,EAAsB,CAtf1BC,oBAAQ,CAAA,EACNC,wBAAS,CAAA,EACTC,6BAAe,CAAA,EAwffC,iCAAkC,CAAA,EAClCC,0BAA2B,CAAA,EAtf7BC,oBAAQ,CAAA,EAwfNC,qBAAsB,CAAA,EAtftBC,yBAAoB,CAAA,EAwfpBC,0BAvfY,CAAA,EAwfZC,mCAvfY,CAAA,EAwfZC,0BAvfQ,CAAA,EAwfRC,oCAvfW,CAAA,EAwfXC,yCAA0C,CAAA,EAC1CC,yBAA0B,CAAA,EAtf1BC,iCAAa,CAAA,EACbC,yBAAa,CAAA,EAwfbC,0BAvfW,CAAA,EAwfXC,uBAvfoB,CAAA,EAwfpBC,4BAvfW,CAAA,EAwfXC,mBAvfoB,CAAA,C,EAyflBC,EAvfkB,CAwfpBC,sBAvfW,CAAA,C,EAonBb,SAASC,IAEP7gV,OAAOwkC,KAAK49G,EAAQ4hF,WAAA,EAAankP,QAAQ,SAAS0kP,GAvfhDniF,EAAA4hF,YAAUO,GAAA,CAAA,C,GAGd,IAAA,IAAQnyM,EAAA,EAAAA,EAAAgwH,EAAoBh7J,KAAA4iI,MAAAj+H,OAAAqmC,CAAA,GAyfxB,IAAK,IAAII,EAAI,EAAGA,EAAI4vH,EAAQh7J,KAAK4iI,MAAM53F,GAAG4xM,YAAYj4O,OAAQymC,CAAA,GAC5D4vH,EAAQ4hF,YAAY5hF,EAAQh7J,KAAK4iI,MAAM53F,GAAG4xM,YAAYxxM,GAAG5tB,MAAQ,CAAA,EArfrEjoB,QAAAqhB,OAAAokJ,EAAoB4hF,YAAQs7G,CAAA,C,CAsgB9B,SAxfE52R,EAAWjuD,GACX,MAAA,CAAA,CAAA2nJ,EAAiB+5G,SAAA1hQ,E,CAogBnB,SAxfEw8C,EAAgBx8C,GAChB,MAAA,CAAA,CAAA2nJ,EAAa66B,iBAAAxiL,E,CA+ff,SAxfEna,EAAmB6d,GAyfnB,MAAO,CAAC,CAACikJ,EAAQ4hF,YAAY7lO,IAA6B,OAAdA,C,CAkD9C,SAAS2iV,IAtfX,OADDC,EAAA,EACC,CAAA,CAAA3+L,EAAAtgJ,K,CAEA,SAAAk/U,IACG,OAAO5+L,EAAAh7J,MAAAg7J,EAAwBh7J,KAAAlI,IAAA,CAAAkjK,EAAAh7J,KAAA65V,6B,CA4fhC,SAASF,IAxfXC,EAAA,GACE9iW,EAAA4M,WAAA,wCAAA,C,CA6fA,SAzfEo2V,IA0fI9+L,EAAQh7J,MAAQg7J,EAAQh7J,KAAKlI,IAC/BhB,EAAW4M,WAAW,iCAAA,C,CA2E1B,SAASovI,IACP,IAAIx+G,EAAQ0mI,EAAQh7J,KAAO,CAAC,CAxfjCK,KAAW26J,EAAAh7J,KACVgjI,SAAAg4B,EAAAh7J,KAAAgjI,SA0fMtoH,MAAOsgJ,EAAQtgJ,K,GAxfrB,GAEGq/U,EAAmB,GAKhBC,GAqfEh/L,EAAQh7J,OACV+5V,EAAiB/+L,EAAQh7J,KAAKgjI,UAAY,CAAA,GAtfhChtH,KAAA6L,MAAA/L,aAAAgM,QAAA,OAAA,CAAA,GACd,IAAI9hB,KAAeg6V,EACfD,EAAkB/5V,KACtB+5V,EAAkB/5V,GAAA,CAAA,GA2fZi6V,EA1fED,EAAkBh6V,IA0fXK,KAAO,IAAI03V,EAAKkC,EAAS55V,IAAA,EAClCi0B,EAAMzsB,KAAKoyV,CAAA,GAtfjB,IACQj6V,EAGAi6V,EAJRC,EAAmBlkV,KAAA6L,MAAAw/C,eAAAv/C,QAAA,OAAA,CAAA,EACnB,IAAQ9hB,KAAAk6V,EACAH,EAAO/5V,KACf+5V,EAAe/5V,GAAA,CAAA,GAEfi6V,EADeC,EAAAl6V,IACPK,KAAQ,IAAA03V,EAAAkC,EAAA55V,IAAA,EAChBi0B,EAAQzsB,KAAAoyV,CAAA,GAGR,OAAA3lU,C,CA+hBA,SAzfM6lU,EAAOn6V,GA2fX8V,aAzfSi7C,WAAA,OAAA,EA0fTsQ,eAzfatQ,WAAK,OAAA,GAEd/wD,EAAAo6V,SA0fFtkV,aAEAurD,gBA3fEtrD,QAAiB,QAAA/V,EAAA0a,KAAA,EA8frBsgJ,EAzfEtgJ,MAAQ1a,EAAO0a,MA0fjBsgJ,EAzfIh7J,KAAS,IAAA+3V,EAAA/3V,EAAAK,IAAA,GAEDI,OAAQ45V,UAAA55V,OAAA45V,WAAA,IACdxyV,KAAA,CA0fJ+yP,OAzfI56P,EAAAgjI,Q,GA4fFg4B,EAAQh7J,KAAKk7D,MACfnkB,EAAWuB,IAAI0iH,EAAQh7J,KAAKk7D,IAAA,EAG9Bu+R,EAAA,EACAE,EAAA,EACAW,EAAA,EACAR,EAAA,EACAS,EAAA,EAxfFC,EAAA,C,CA0DF,SAAAD,IA2fI,IAAItjK,EAAOzpK,EAAM8jU,mBAAmBt2L,EAAQ5pJ,QAAQ6lL,IAAA,GACpCx2L,OAAO45V,UAAY55V,OAAO45V,WAAa,IAzfjDxyV,KAAA,CACP3B,MAAQ,oBA4fLu0V,aAAcz/L,EAAQh7J,KAAK6U,WAAa,IAAMmmJ,EAAQh7J,KAAK4jE,UAC3D+5E,UAAWqd,EAAQh7J,KAAKhB,MA1f9B47P,OAAS5/F,EAAYh7J,KAAAgjI,SA4ff03N,cA3fW1/L,EAAA5pJ,QAAgBtZ,GA4f3B6iW,gBAAiB3/L,EAAQ5pJ,QAAQwD,KA1fjCgmV,gBAAU3jK,EA4fV4jK,QAAS7/L,EAAQ6/L,QAAA,C,GAIrB,SA3fEP,IACAxC,EAAAnB,SAAA37L,EAAyBh7J,KAAAg7J,EAAA5pJ,OAAA,C,CA8f3B,SA3fEopV,IACAxC,EAAApC,gBAAqB56L,EAAAh7J,KAAAg7J,EAAA5pJ,OAAA,C,CA8fvB,SA3fE0pV,EAA2BpwV,GAC3B,IAAAb,EACA,0FAIA,IACA0sM,UAAAwkJ,cAA0B/uU,SAAA,SAAA,CAAAh2B,MAAA,GAAA,CAAA,EAC1BugN,UAAAwkJ,cAA2B7nR,MAAA72E,KAC3B,SAAA2+V,GACA,IAwBMC,EAMAn9N,EA9BN/gI,EAAA,CACAm+V,gBAAoB,CAAA,EA4fVC,sBAreJF,EAqe6CpxV,EApe7C0mV,EAAA,IAAAz3F,QAAA,EAAAmiG,EAA+Bt2V,OAAA,GAAA,CAAA,EAC/BgyP,GAAAskG,EAAgB1K,GACxBvuV,QAAQ,MAAA,GAAA,EACRA,QAAQ,KAAU,GAAA,EAEV87H,EAAAr9H,OAAAm2J,KAAkB+/F,CAAA,EACL,IAAAu1D,WAAApuL,EAAAn5H,MAAA,EACHmU,IAClB,SAAQ8sQ,EAAYvpP,GACZ,OAAAyhG,EAAa8jD,WAAAvlJ,CAAA,C,KA9BnB2+T,EAAuBI,YAAAC,UAAAt+V,CAAA,EAAAV,KA4fb,SAASi/V,GACP5wV,EAAYJ,QACV,6BA1fA,CAAAosL,aAAA4kK,CAAA,C,EACDj/V,KAAA,SAAAnE,GACC69E,QAAA5F,IAAAj4E,CAAA,C,KAER2M,MAAW,SAAA4lC,GACXsrC,QAAA5F,IAAc1lC,CAAA,C,KAGd5lC,MAAA,SAAA4lC,GA4fAsrC,QAAQ5F,IAAI1lC,CAAA,C,GAzfpB,MAAQtU,GACR4/C,QAAQjxE,MAAUqxB,CAAA,C,EAZlB6kI,EAAQtgJ,MAAQ,KAtfhBsgJ,EAAQh7J,KAAA,KAwfRg7J,EAvfE1mI,MAAO,GAwfT0mI,EAvfI5pJ,QAAO,KAwfX4pJ,EAvfI+5G,SAAe,GAwfnB/5G,EAvfI4hF,YAAe,GAwfnB5hF,EAvfIugM,QAAO,CAAA,EAwfXvgM,EAvfIwgM,iBAAe,CAAA,EAwfnBxgM,EAvfIygM,uBAA4B,KA0fhCzgM,EAvfI71D,OA4hBJ,SAvfezqF,EAAA1a,GAwfbg7J,EAvfEtgJ,MAASA,EAwfXsgJ,EAAQh7J,KAAO,IAAI+3V,EAAK/3V,CAAA,GAERS,OAAO45V,UAAY55V,OAAO45V,WAAa,IAtfjDxyV,KAAA,CACN+yP,OAAI5/F,EAAAh7J,KAAgBgjI,Q,IA6ctBg4B,EAvfIwoK,QAqiBJ,WACExoK,EAAQtgJ,MAAQ,KAtflBsgJ,EAAQh7J,KAAA,KACNg7J,EAAI5pJ,QAAY,KAChB0E,aAAai7C,WAAK,OAAA,EAClBsQ,eAAUtQ,WAAc,OAAA,C,EAqc1BiqG,EAvfI0gM,gBA4iBJ,WAtfkC,MAA5B5lV,aAAMgM,QAAc,OAAA,EACxBk5I,EAAI71D,OAAUrvF,aAAKgM,QAAa,OAAA,EAAA,IAAA,EACU,MAAtCu/C,eAAsBv/C,QAAA,OAAA,GAC1Bk5I,EAAI71D,OAAU9jC,eAAkBv/C,QAAA,OAAA,EAAA,IAAA,C,EA+blCk5I,EAvfI2gM,eAmjBJ,SAAwBjxV,GAtftBswJ,EAAOygM,uBAAqB9nV,EAAMS,MAAA,EAyflC,IAAI5Q,EAASmQ,EAAGS,MAAA,EAtflBwnV,EAAQjoV,EAAAS,MAAA,EACFynV,EAAcloV,EAAAS,MAAA,EAsCnB,OAmdC1J,EAAYJ,QAAQ,kBAAA,EAAoBjO,KAAK,SAASnE,GAtftD8iK,EAAIh7J,KAAO,IAAA+3V,EAAc7/V,CAAA,EACvB0jW,EAAYtxV,QAAA,EAwfgB,MAAxB0wJ,EAAQh7J,KAAKoR,SAtfnByqV,EAAgBvxV,QAAA,C,GAIhBI,EAAUJ,QAAS,uBAAA,EAAUjO,KAAA,SAAAnE,GAC3B8iK,EAAI5pJ,QAAW,IAAA6mV,EAAQ//V,CAAA,EA6CzB3C,QAAAw0C,UAAAixH,EAA0B5pJ,OAAA,IAC1B4pJ,EAAAprG,gBAAeorG,EAAA5pJ,QAAAw+C,gBAAA,EACforG,EAAA+5G,SAAgB/5G,EAAA5pJ,QAAA0qV,gBAAA,EAChB9gM,EAAA+gM,OAAgB/gM,EAAA5pJ,QAAA4qV,cAAA,EAChBhhM,EAAA66B,iBAAmB76B,EAAA5pJ,QAAA6qV,wBAAA,EACnB1mW,QAAAqhB,OAAWokJ,EAAA+5G,SAAAwkF,CAAA,EACXhkW,QAAAqhB,OAAAokJ,EAAoB+5G,SAAAmjF,CAAA,GAsclB2D,EAvfMvxV,QAAA,C,GA0fRqJ,EAAGvE,IAvfC,CAwfFwsV,EAvfQnnV,QAwfRonV,EAvfQpnV,Q,EAwfPpY,KAvfK,SAAAgE,GAyfF9K,QAAQq6C,YAAYorH,EAAQh7J,KAAKoR,OAAA,EAtfnC4pJ,EAAQwoK,QAAA,GAERi2B,EAAA,EAwfAE,EAAA,EAtfAW,EAAA,EAwfAR,EAAA,EAtfFgB,EAAgBpwV,CAAA,EAwfd6vV,EAAA,EACAC,EAAA,EAEAx/L,EAAQwgM,iBAAmB,CAAA,EAC3BxgM,EAAQygM,uBAAuBnxV,QAAQ0wJ,CAAA,GAGzCx3J,EAAO8G,QAAA,C,GArfH9G,EAAAiR,O,EAiZRumJ,EAvfI8/L,sBAAsBA,EAwf1B9/L,EAvfIkhM,yBAygBJ,WACA,kBAAqB3lJ,WACrBA,UAAQwkJ,cAAgBoB,iBAAA,EAAA9/V,KAAA,SAAA+/V,GACxB,IAAQ,IAAApxT,EAAA,EAAAA,EAAiBoxT,EAAAz3V,OAAAqmC,CAAA,GACjBoxT,EAAApxT,GAAgBqxT,WAAA,EAAAx3V,MAAA,SAAAC,GAChBixE,QAAAjxE,MAAWA,CAAA,C,KAGnBD,MAAQ,SAAWC,GA4fbixE,QAAQjxE,MAAMA,CAAA,C,IArhBpBk2J,EAvfIy+L,6BAAkCA,EAwftCz+L,EAvfI9hK,cAAmBA,EAwfvB8hK,EAvfInxH,eAuJJ,SAAQ9yB,GA2fN,IAzfF,IAAA6lO,EAAQ7lO,EAAmB/U,QAAA,KAAA,EAAA,EAAAmpB,MAAA,GAAA,EAyfhB6f,EAAI,EAAGA,EAAI4xM,EAAYj4O,OAAQ,EAAEqmC,EACxC,GAAI9xC,EAAc0jP,EAAY5xM,EAAA,EAvflC,MAAS,CAAA,EA2fP,MAxfE,CAAA,C,EAyVJgwH,EAvfI6/L,QAiqBJ,WACE,GAxfI7/L,EAAA5pJ,QAyfF,OAAO4pJ,EAAQ5pJ,QAAQkrV,SAEzB,MAxfM,CAAA,C,EA2URthM,EAvfIuhM,sBAuqBJ,WAvfE,GAAAvhM,EAAO5pJ,QAyfL,OAAO4pJ,EAAQ5pJ,QAAQorV,qBAtf3B,MAAS,CAAA,C,EAqUTxhM,EAvfI0+L,gBAAeA,EAwfnB1+L,EAvfIyhM,WAstBJ,WACE,MAAK/C,CAAAA,EAAA,GAEM1+L,EAAQwgM,iBA1fnBxgM,EAIIA,EAAAygM,uBAA8BhnV,O,EAqRpCumJ,EAvfI0hM,QA+tBJ,SAzfW15N,EAAAtoH,EAAA1a,EAAAo6V,GA0fT,IAAI9lU,EAEJ,CAAA,IAleEqoU,EAkeEvC,IAtfA9lU,EADS,OAwfXA,EAAQte,KAAK6L,MAAM/L,aAAagM,QAAQ,OAAA,CAAA,GAvf9B,GAEVwS,GAAA0uG,GAAA,CAAAA,SAAAA,EAAAtoH,MAAAA,EAAAra,KAAAL,EAAAo6V,SAAAA,CAAA,EA0fAtkV,aAAaC,QAAQ,QAASC,KAAKC,UAAUqe,CAAA,CAAA,GAGzCsoU,EAAsB5mV,KAAK6L,MAAMw/C,eAAev/C,QAAQ,OAAA,CAAA,IACjC86U,EAAoB55N,KAxfnD,OAAA45N,EAA8B55N,GA0fxB3hE,eAAetrD,QAAQ,QAASC,KAAKC,UAAU2mV,CAAA,CAAA,MApfrDtoU,EAwfiB,OADbA,EAAQte,KAAK6L,MAAMw/C,eAAev/C,QAAQ,OAAA,CAAA,GAvf9C,GA2fIwS,GAAM0uG,GAAY,CAAEA,SAAUA,EAAUtoH,MAAOA,EAAOra,KAAML,EAAMo6V,SAAUA,CAAA,EAxf9E/4R,eAAgBtrD,QAAS,QAAKC,KAAAC,UAAAqe,CAAA,CAAA,GAG5BqoU,EAAY3mV,KAAA6L,MAAA/L,aAAAgM,QAAA,OAAA,CAAA,IACC66U,EAAA35N,KACb,OAAA25N,EAAoB35N,GACpBltH,aAASC,QAAQ,QAAAC,KAAAC,UAAA0mV,CAAA,CAAA,G,CAInB3hM,EAAO1mI,MAASw+G,EAAA,C,EAiPlBkoB,EAvfIloB,UAAUA,EAwfdkoB,EAvfI6hM,WA2TJ,SAAgB78V,GACd,IAAAwD,EAAOmQ,EAASS,MAAA,EACdpU,EAAQK,KAAAy9O,IAygBZ,SAAwB99O,GAxfxB,OAAS63V,EAAOiF,OAAA,CAAA,YAAA,SAAArmW,GACd,OAAOA,EAASoC,KAAA,CA0fZhD,WAAY,6BACZK,aAAc,KAxfpBC,YAAiB,uEACfsG,OAAOlH,QAASmH,QAAAsB,SAAAC,IAAA,EA0fZ9B,oBAAqB,CAAA,EACrBK,cAAe,CAAA,EAxfrB4I,SAAS,CAAA,EACHjH,OAAQ,CACV6B,KAAOA,C,QA+dQA,CAAA,EAAM3D,KAAK,SAAS0gW,GAC7BA,GAxfR5C,EAAgBn6V,CAAA,EACdwD,EAAQ8G,QAAU,CAAA,CAAA,GA2fd9G,EAAO8G,QAAQ,CAAA,CAAA,C,IAInB6vV,EAAYn6V,CAAA,EACZwD,EAAO8G,QAAQ,CAAA,CAAA,GAvfnB,OAAS9G,EAAOiR,O,EA8KhBumJ,EAvfIv3B,WAq3BJ,SAzfST,GA0fP,IAzfE1uG,EAAQte,KAAA6L,MAAA/L,aAAAgM,QAAA,OAAA,CAAA,EA0fG,MAATwS,GACF,OAAOA,EAAM0uG,GACfltH,aAAaC,QAAQ,QAASC,KAAKC,UAAUqe,CAAA,CAAA,EAGhC,OA1fbA,EAAOte,KAAA6L,MAASw/C,eAAYv/C,QAAA,OAAA,CAAA,IA2f1B,OAAOwS,EAAM0uG,GACf3hE,eAAetrD,QAAQ,QAASC,KAAKC,UAAUqe,CAAA,CAAA,EAE/C0mI,EAAQugM,QAAU,CAAA,C,EAxYpBvgM,EAvfIvlI,eAs4BJ,SA1fS89T,GA2fFA,EAAAA,GACO,EAxfd,IAGEyJ,EAHEC,EAAU,IAAAxhT,KA2fZwhT,EAAW/kP,WAAW+kP,EAAW9kP,WAAA,EAAeo7O,CAAA,EAvftB,CAAA,IAAxB9yV,OAAQ0D,SAAAtD,KAAAwvC,QAAgB,WAAA,EA2fxB2sT,EAAa,YACqD,CAAC,IAA1Dv8V,OAAO0D,SAAStD,KAAKwvC,QAAQ,sBAAA,EACtC2sT,EAAa,iBAzfyB,CAAA,IAAlCv8V,OAAA0D,SAAkBtD,KAAAwvC,QAAgB,SAAA,IACxC2sT,EAAev8V,OAAG0D,SAAAtD,KAAAsqB,MAAA,IAAA,EAAA,GAAAA,MAAA,GAAA,EAAA,IA6flB+mC,EA1fGkrE,IAAQ,QAAW49B,EAAAtgJ,MAAA,CAAAwiV,QAAAD,EAAAzvS,OAAAwvS,CAAA,CAAA,C,EA4FxBhiM,EAvfImiM,WAw5BJ,WACE,GA1fIniM,EAAMugM,QA4fR,MA1fE,EAyfFvgM,EA1fQugM,QAAA,CAAA,GA8fV,MAAO,CAAA,C,EAtaTvgM,EAAQ4+L,WAAaA,EACrB5+L,EAAQ8+L,sBAAwBA,EAChC9+L,EAAQoiM,sBA+MR,SAzfgB9sV,GA0fV0qJ,EAAQh7J,MAAQg7J,EAAQh7J,KAAKlI,KAC/BkjK,EAAQh7J,KAAK65V,8BAAgCvpV,EAmDjD,SAzfgBtQ,GA0fd,IAjfFw1Q,EARIwkF,EAAiBhkV,KAAA6L,MAAA/L,aAAAgM,QAAA,OAAA,CAAA,EA0fnB,IAzfQ0zP,KAAAwkF,EA0fFA,EAAsBxkF,GAAGn1Q,KAAKvI,KAAOkI,EAAKlI,KAC5CkiW,EAAsBxkF,GAAGn1Q,KAAOL,EAxfpC8V,aAAgBC,QAAA,QAAUC,KAAWC,UAAQ+jV,CAAA,CAAA,GAI/C,IAAAxkF,KAwfEwkF,EAAwBhkV,KAAK6L,MAAMw/C,eAAev/C,QAAQ,OAAA,CAAA,EAvftDk4U,EAAwBxkF,GAAAn1Q,KAAAvI,KAAakI,EAAAlI,KACvCkiW,EAAsBxkF,GAAAn1Q,KAAOL,EA0f3BqhE,eAAetrD,QAAQ,QAASC,KAAKC,UAAU+jV,CAAA,CAAA,GAtfrDh/L,EAAO1mI,MAAAw+G,EAAA,C,EAwbMkoB,EAAQh7J,IAAA,E,EAxsBrBg7J,EAAQ4lG,qBA65BR,WACE,OA1fE5lG,EAASqiM,mBAAA,GAAOriM,EAAA5pJ,SAAA4pJ,EAAA5pJ,QAAAorV,qBAAA,C,EAoFpBxhM,EAvfMqiM,mBAg6BN,WACE,OAAOriM,EAAQ5pJ,SACb4pJ,EAAQ5pJ,QAAQ6lL,OAAS+5C,EAAcc,UACvC92E,EAAQ5pJ,QAAQkrV,Q,EA3apBthM,EAvfI15F,WAAWA,EAwff05F,EAvfIsiM,cAymBJ,SAxfcvoF,GACZ,IAAA,IAAM/pO,EAAA,EAAAA,EAAA+pO,EAAApwQ,OAAAqmC,CAAA,GACN,GAAAs2B,EAAYyzM,EAAA/pO,EAAA,EACZ,MAAW,CAAA,EAGX,MAAA,CAAA,C,EAiYFgwH,EAAQ5tG,eAuKR,WAvfE,GAAI4tG,EAAA5pJ,QACJ,OAAI4pJ,EAAA5pJ,QAAmBmsV,iBA0fvB,MAxfE,CAAA,C,EA8UJviM,EAvfErtG,cAoqBF,WAvfE,GAAAqtG,EAAA5pJ,QACE,OAAO4pJ,EAAA5pJ,QAAcosV,YA0fvB,MAAO,CAAA,C,EAhLTxiM,EAAQnrG,SAAWA,EACnBmrG,EAAQ3S,kBA2HR,SAxfgBh1I,GACd,OAAAiuD,EAAejuD,CAAA,GAAAw8C,EAAAx8C,CAAA,C,EA1HjB2nJ,EAAQyiM,QAooBR,SAAiB1mV,GACf,MAAO,CAAC,CAACikJ,EAAQ+gM,OAAOhlV,E,EA7I1BikJ,EAvfM0iM,SAuoBN,SAxfW3mV,GAyfT,OAAOikJ,EAAQ+gM,OAAOhlV,E,EA9IxBikJ,EAAQ1mI,MAAQw+G,EAAA,C,qJApFlBv9I,QACGC,OAvfC,uBAA0B,EAAA,EAwf3BwlK,QAvfQ,UAAAjzJ,CAAA,C,IA0kCb,CAAC,WACC,aAOA,SA3fI41V,EAAgB1gW,EAAAtG,EAAAI,EAAA4c,GA4flB,IA3fEwxP,EAAQxxP,EAAAo2U,KAAA,EACRx8D,EAAQ,CAAA72Q,IAAA,KAAUknV,GAAA,CAAA,EA+hBpB,SA3fIC,EAAgB1jG,GA4flB,OA3fGA,GAAK5kQ,QAASsnF,SAAMs9K,CAAA,GAAA,aAAAA,EA4fd,CAAE/hQ,OAAQ+hQ,EAAI/hQ,QAAUrB,EAAYsB,YAAagI,KAAM85P,EAAIjiQ,QAAA,EAzfhEiiQ,GAAA5kQ,QAAQsnF,SAAAs9K,CAAA,GAAA,WAAAA,GAAA,SAAAA,EACH,CAAA/hQ,OAAA+hQ,EAAA/hQ,OAAAiI,KAAA85P,EAAA95P,IAAA,EAEL,CAAAjI,OAAArB,EAAAsB,YAAAgI,KAAA85P,CAAA,C,CA8fN,SA3fM2jG,EAAArzT,GA4fJ,IA3fIryC,EAAAqyC,GAAAA,EAAAryC,QAAArB,EAAA88B,+BACAxzB,EAAAoqC,IAAAA,EAAApqC,MAAAoqC,EAAAvyC,WAAAuyC,EA4fJ,OAAO92B,EAAG3O,OAAO,CAAE5M,OAAQA,EAAQiI,KAAMA,CAAA,CAAA,C,CA9C3C9I,KAAKiuB,IAAM,SAASu4U,EAAQrnV,GAC1B,IAAIulH,EAAMxgF,KAAKwgF,IAAA,EAzff,OAAIvlH,GAAAA,IAAa62Q,EAAA72Q,KAAQulH,EAAYsxJ,EAAMqwE,GAL9B,IAMXjqV,EAAQrJ,QAAO,CAAAlS,OAAarB,EAAQkb,oBAAU5R,KAAA,CAAA29V,QAAA,CAAA,CAAA,CAAA,CAAA,GAE9CtnV,IA4fA62Q,EAAO,CAAE72Q,IAAKA,EAAKknV,GAAI3hO,CAAA,GAxf3BkpI,EAASA,EAAAtgQ,MAAAtP,QAAeqjG,IAAA,EAAAv8F,KAAa,WACnC,IAAAkc,EAAQ5E,EAAAS,MAAA,EA4fN,IA1fc,GAAZ2pV,EAASp5V,OACTo5V,EAAA,SAAkB1zT,GAClB9xB,EAAAjO,QAAA+/B,CAAA,C,EAEJ,SAAoBI,GACVlyB,EAAAvT,OAAOylC,CAAA,C,GAGb92B,EAAAo2U,KAAAgU,EAAA,CAAA,EAAgB1hW,KAAAkc,EAAAjO,QAAAiO,EAAAvT,MAAA,C,CA6fhB,MAAOmxB,GACP5d,EAAEvT,OAAOmxB,CAAA,C,CAzfX,OAAA5d,EAAQ9D,O,GAERpY,KAAAwhW,EAAgBC,CAAA,E,+CAqdtBvoW,QACGC,OAAO,0BAA2B,EAAA,EAClCwlK,QAAQ,mBAAoB2iM,CAAA,C,IA4DjC,CAAC,WACC,aAOA,SA3fMj4U,EAAQ/R,EAAA1W,EAAYtG,GA4fxB,IAAIqkK,EAAUzjK,KAmCd,SA3fS0mW,EAAUvgV,EAAA8lB,GA4fjB,OAAe,EAAP9lB,KAAc,IAAI+9B,MAAO/0C,QAAA,EAAY88B,GAAS,I,CAGxD,SA3fS06T,EAAA79V,EAAW89V,GA4flB,GAAgB9hV,KAAAA,IAAZ8hV,EAYJ,OARI99V,EAAKsE,OAASw5V,IACZ99V,EAAKiU,UA1fbjU,EAASA,EAAAiU,UAAe,EAAA6pV,CAAA,EAElB99V,EAAAsE,OAAcw5V,GA+fX99V,C,CAmBT,SAAS+9V,EAAkBrhW,GAnf3B,OANMA,EAAQshW,WAGZthW,EAAOshW,WAAAH,EAAAnhW,EAAAshW,WAAAthW,EAAAuhW,iBAAA,EAFLvhW,EAAOshW,WAAQH,EAwenB,SAAwBv5V,GACtB,GAAIq2J,EAAAA,EAAQujM,aAAevjM,EAAQujM,YAAY55V,QAAUA,GAAzD,CAIKq2J,EAAQujM,cA1ffvjM,EAASujM,YAAS,IA8fhB,IAAK,IAAIvzT,EAAIgwH,EAAQujM,YAAY55V,OAAQqmC,EAAIrmC,EAAQqmC,CAAA,GA1fvDgwH,EAASujM,YAAU12V,KAAA6jB,KAAA46C,MAAA,IAAA56C,KAAAg8O,OAAA,CAAA,CAAA,C,CA8fjB,OAAO1sG,EAAQujM,W,EArfUxhW,EAAAyhW,cAAA,EAAAzhW,EAAAuhW,iBAAA,EAKlBvhW,C,CA4jBT,SA3fQ0hW,EAAA1hW,GA4fN,IA3fI2hW,EAAO1jM,EAAA2jM,kBAAoB5hW,CAAA,EAC3B6hW,EAAeF,EAAQriW,KAAS,SAAKwiW,GA4fvC9hW,EAAQshW,WAAaQ,EAAex+V,KAzfpC,IAAAu+V,GA0fAF,EA3fK1jM,EAAA8jM,gBAAA/hW,CAAA,GACcV,KAAe,SAAQ0iW,GAC1C,MAAI,CACF/3U,cAAQg0I,EAAAgkM,OAAAH,EAAA73U,aAAA,EA4fNF,YAAak0I,EAAQgkM,OAAOD,EAAaj4U,WAAA,C,IAtf7C,OA0fA83U,EAAa3lW,OAASylW,EAAYzlW,OA1f9B2lW,C,GA+fN,OADAA,EA3fI3lW,OAAaylW,EAAiBzlW,OA4f3B2lW,C,CA7JT5jM,EA3fMujM,YAAQ,GA4fdvjM,EAAQikM,gBAAkB,CACxBC,eAAgBvoW,EAAImL,KAAK4jB,YAAYy5U,YA1frC38V,YAAQ7L,EAAOmL,KAAA4jB,YAAQ5kB,SA4fvBs+V,UAAWzoW,EAAImL,KAAK4jB,YAAYV,OAChCw5U,eAAgB,QA1flBF,kBAASvkU,OAAA45R,S,EA+fT34J,EA3fI2jM,kBA+jBJ,SAA2B5hW,GA1fzB,IAAAymC,GAAO,IAAAiY,MAAA/0C,QAAA,EA4fHg4V,EAAczhW,EAAM,CACtBsd,OAAQ,MA1fZ1Y,IAAS9E,EAAAyF,YAAgB,OAAAghC,EACvB67T,SAAY,2BACV7kV,QAAO,CA4fL8kV,eAAgB,0B,IAvftBV,EAASF,EAAkBriW,KAAA,SAAAnE,GACzB,MAAA,CACA8uB,cAAiBi3U,GAAA/lW,EAAAmI,MAAAnI,GAAAyM,OAAA6+B,CAAA,EA4fbnjC,KAAMnI,EAASmI,MAAQnI,C,IAK3B,OADA0mW,EAAa3lW,OAASylW,EAAYzlW,OAC3B2lW,C,EAtFT5jM,EA3fI8jM,gBAolBJ,SA3fe/hW,GA4fbA,EAAUqhW,EAAkBrhW,CAAA,EAC5B,IAAIymC,GAAQ,IAAIiY,MAAO/0C,QAAA,EAzfzBg4V,EAASzhW,EAAA,CACPsd,OAAI,OACF1Y,IAAA9E,EAAWqiW,UAAW,OAAA57T,EA4ftBnjC,KAAMtD,EAAQshW,WACdgB,SAAU,2BACV7kV,QAAS,CAAC8kV,eAAgB,0BAAA,C,GAxf1BV,EAAaF,EAAAriW,KAAA,SAAAnE,GACb,MAAA,CAAA4uB,YAAiBm3U,EAAAlhW,EAAAshW,WAAA15V,OAAA6+B,CAAA,CAAA,C,GAIrB,OA0fEo7T,EAAa3lW,OAASylW,EAAYzlW,OA1f3B2lW,C,EAkZT5jM,EA3fIukM,YAumBJ,SA3fqBxiW,GA4fnBA,EA3fEmiW,eAAOniW,EAAAmiW,gBAAAniW,EAAAyF,YA6fT,IA3fEghC,GAAO,IAAAiY,MAAQ/0C,QAAA,EA4fbg4V,EAAczhW,EAAM,CACtBsd,OAAQ,OACR1Y,IAAK9E,EAAQmiW,eAAiB,OAAS17T,EA1f3C67T,SAAS,2BACP7kV,QAAI,CAAA8kV,eAAA,0BAAA,C,GAGFV,EAAaF,EAAMriW,KAAa,SAAQnE,GA6fxC,MA3fE,CAAAsnW,UAAQ,IAAA/jT,MAAA/0C,QAAA,EAAA88B,GAAA,CAAA,C,GA+fZ,OADAo7T,EA3fE3lW,OAAaylW,EAAiBzlW,OA4fzB2lW,C,EA5HT5jM,EA3fIyjM,UAAeA,EA4fnBzjM,EAAQp0I,aA8JR,SA3fgBgmG,EAAA7vH,GA6fdA,EA3fIqhW,EA0fJrhW,EA3fMxH,QAAAqhB,OAAAokJ,EAAyBikM,gBAAiBliW,CAAA,CACtB,EA6f1B,IACI0iW,EAAgB9rV,EAAGS,MAAA,EA1fvBD,EAAQR,EAAQS,MAAA,EA+gBhB,OAtCF,SA3fEsrV,EAAgB/4O,EAAA5pH,EAAA4iW,EAAA/yO,GA4fhB,GAAI+yO,EAAQh7V,QAAUioH,EAAI,EAzf5B,OA0fIjG,KAAAA,EAAEr8G,QAAQq1V,CAAA,EAIZlB,EA3fM1hW,CAAA,EAAAV,KAAA,SAAyBmH,GA4f7Bk8V,EA3fE/4O,EAAsB5pH,EAAU4iW,EAAA/yO,CAAA,EA4flC+yO,EA3fE93V,KAAArE,CAAA,C,IAugBkBi8V,EAAe1iW,EAJvB,GAIyC6vH,CAAA,EA1fzD6yO,EAAShrV,QAAYpY,KAAA,SAAAsjW,GAigBjB,IAhgBF,IAAI75U,EAAQ,CACVkB,cAAc,EACdF,YAAU,C,EA8fDkkB,EAAI,EAAGA,EAAI20T,EAAQh7V,OAAQqmC,CAAA,GA1flCllB,EAAAkB,eAAmB24U,EAAA30T,GAAAhkB,cACnBlB,EAAQgB,aAAM64U,EAAA30T,GAAAlkB,YA8fhBhB,EAAQkB,cAAgB0E,KAAK46C,MAAOxgD,EAAQkB,cAAgB24U,EAAQh7V,OAAU,GAAA,EAAO,IA1fvFmhB,EAAIgB,YAAA4E,KAAwB46C,MAAKxgD,EAAMgB,YAAa64U,EAAQh7V,OAAA,GAAA,EAAA,IAE1DwP,EAAK7J,QAAAwb,CAAA,C,GAGH3R,EAASM,O,EAoUfumJ,EAAQgkM,OA0LR,SAAgBY,GA1fd,OAAIA,EAAA,GAAA54V,MAAA44V,CAAA,EAA0B,EAAKl0U,KAAA46C,MAAMs5R,EA8S3B,IA9SkD,GAAA,EAAA,G,EAiUlE5kM,EAAQv0I,UA6LR,SA3fMo5U,EAAiB/hF,EAAQ36Q,GACzB08V,EAAAA,GAAe,2BACf/hF,EAAAA,GAAyB,IACzB36Q,EAAAA,GAAW,IA6ff,IAAIgR,EAAWR,EAAGS,MAAA,EApelB,OAtBAsxB,WAAO,WAKP,IAufE,IAAIsmI,EAAQ,EACRxoI,GAAQ,IAAIiY,MAAO/0C,QAAA,EA1f3B+iJ,GAAS,IAAAhuG,MAAW/0C,QAAA,EAEPskC,EAAA,EAAKA,EAAK8yO,GAAAr0H,EAAAjmH,EAAArgC,EAAA6nC,CAAA,GACnBhtC,SAAAo5B,eAA0ByoU,CAAA,EACxB7zL,CAAA,GA6fAviB,GA3fE,IAAOhuG,MAAQ/0C,QAAA,EA+fnByN,EAAS7J,QAAQ,CACfwzQ,WA3fG9xG,EACLxoI,MAAAA,EACAimH,IAAOA,EA4fLq2M,sBAAuBr2M,EAAMjmH,EA1fjC9c,MAAOgF,KAAO46C,MAAA0lG,GAAAviB,EAAAjmH,GAAA,GAAA,EAAA,G,IA6fX,GAAA,EAzfIrvB,EAAAM,O,iCAwQXlf,QACGC,OAAO,2BAA4B,EAAA,EA1fpCwlK,QAAS,cAAAt1I,CAAA,C,IAivBb,CAAA,WACE,aAOA,SAASruB,EAAoBZ,EAAWH,EAAUM,EAAWC,EAASF,EAAKI,EAAaK,EAASN,GAC/F,IAAIkkK,EAAUzjK,KACd,MAAO,CA1fPqF,WAogBA,SAAoBtF,EAAIuD,EAAOW,EAAWukW,EAAyBC,GACjEhlM,EAAQ1jK,GAAKA,EA1fb0jK,EAAQngK,MAAQA,EAChBvD,EAAAI,eAAmBmD,EAAKyC,iBAAKzC,EAAA0C,yBA4f7BjG,EAAGkE,UAAYA,EA1fflE,EAAAyoW,wBAAuBA,EACvBzoW,EAAA0oW,wBAAeA,EACb1oW,EAAAI,gBA4fAwL,EAAA,C,EAhBFA,aAAcA,EA1fd9J,aAuiBF,SAAsBpB,GACpB,IArfIioW,EACJC,EAofI5oW,EAAK0jK,EAAQ1jK,GAzfnBA,EAASI,iBACPJ,EAAAI,eAAc,CAAA,EA4fdJ,EA3fEgE,OAAU,CAAA,EAER2kW,EAAiB3oW,EAAAkE,UAAApC,aAAA+xB,MAAA,GAAA,EAAA,GACrB+0U,EAAsB5oW,EAAAkE,UAAWpC,aAAe+xB,MAAA,GAAA,EAAA,GAEhDx0B,EAAIspW,GAAAC,GAAAroW,OACJ,CACEC,GAAAkjK,EAAangK,MAAA/C,GA4fXE,OA3fOA,C,EA6fT,SA3fSE,EAAOC,EAASC,GACzBd,EAAAgE,OAAa,CAAA,EA4fXhE,EAAGiE,QAAU,CAAA,EACTnD,IAAWrB,EAAYsB,YA1f/B6K,EAAalL,CAAA,GA4fEI,IAAWrB,EAAYkE,kBAChCC,EAAA,EAxfJ5E,EAAQuC,KAAUvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAClB1B,EAAOI,eAAA,CAAA,E,KApETyB,gBA0EF,SAAS+C,GACPA,EAAAA,GA4fU,+BAzfZzF,EAASoC,KAAA,CACPhD,WAAO,6BACLK,aAAQ,KACRC,YAAQ,8EA4fRsG,OAAQlH,QAAQmH,QAAQsB,SAASC,IAAA,EACjC9B,oBAAqB,CAAA,EA1fzBkI,YAAS,CAAA,EACPlG,OAAI,CACAjC,MAAAA,EA4fA+B,KAAM,mC,KAtFV/C,gBAAiBA,EA1fjBtC,qBAkmBF,SA3fiBV,GA4ffpB,EAAW4M,WAAW,kCAAmCxL,CAAA,EACzDpB,EAAW4M,WAAW,mCAAoCxL,CAAA,C,EAxG1D6C,sBA2GF,SA3fa3C,GA4fXtB,EAAW4M,WAAW,+BAAgC,CAAEtL,OAAQA,CAAA,CAAA,C,GA7FlE,SAAS8K,EAAalL,GACpB,IAAIV,EAAK0jK,EAAQ1jK,GA1fjB6oW,EAAA7oW,EAAAkE,UAAAC,YAAA0vB,MAAA,GAAA,EAAA,GACAi1U,EAAA9oW,EAAAkE,UAAAC,YAAA0vB,MAAA,GAAA,EAAA,GACA7zB,EAAA6L,QAAAvM,EAAA,WACAD,EAAAwpW,GAAAC,GAAA9nW,IAAA,CACAR,GAAAkjK,EAAAngK,MAAA/C,GACAE,OAAA,c,EA4fK,SAASwL,EAAQrL,EAAUC,GACxBA,IAAWrB,EAAYsB,aAAgBmL,EAAOjG,0BAA6BiG,EAAOlG,kBA1f5F1G,EAASqC,OAAW3B,EAAA6L,OAAA,EACd1M,EAAQuK,KAAA,EACR1J,EAAAyoW,wBAAS/nW,CAAA,GA8fLV,EAAG0oW,yBAA2B5nW,IAAWrB,EAAY0M,qBA1f7D7M,EAAaqC,OAAM3B,EAAA6L,OAAA,EACf1M,EAASuK,KAAA,EACX1J,EAAO0oW,wBAAA,E,IA+fN,GAAA,C,CAoDL,SA3fI9kW,IA4fF5E,EA3fEuC,KAAAvC,EAAewC,OAAA,EACfC,YAAAlC,EAAiB,WAAA,EAAgB,2CAAA,CAAA,EACjCmN,OAAAnN,EAAA,WAAA,EAAiB,iBAAA,CAAA,EACjBoN,UAAS,GAAA,EA4fRC,gBAAgB,CAAA,CAAA,EAChBlL,SAAS,WAAA,CAAA,EAAcqD,KAAK,SAASnE,GACrB,OAAbA,GA1fRiM,SAASC,OAAA,C,wGA4YX7O,QACGC,OA3fK,6BAAQ,EAAA,EA4fbwlK,QA3fO,sBAAM3jK,CAAA,C,IAwnBlB,CAAC,WACC,aAEA9B,QACGC,OAAO,iCA3f0B,EAAA,EA4fjCwlK,QAAQ,0BAGX,WAEEzjK,KAAK8oW,gCASL,SA3foB/uV,EAAA4vC,GA4flB,OAAO5vC,EAAQy6B,iBAAiBlV,KAAK,SAASoY,GAC5C,OA3fEA,EAAO+R,SAAGnqB,KAAA,SAAA2uD,GACV,OAAAA,EAAQ1tF,IAAMopD,EAAAppD,E,MAgfpBP,KAAK+oW,0CAsBL,SA3f6Ct/S,EAAAE,GA4f3C,OA3fEF,EAAOnqB,KAAY,SAAAoY,GA4fnB,OA3fEA,EAAA+R,SAAiBnqB,KAAA,SAAO2uD,GA4fxB,OA3fEjwF,QAAOq6C,YAAQ41C,EAAA1tF,EAAA,EA4fR0tF,GAAKtkC,EAAQppD,GACf0tF,EAAE1tF,IAAMopD,EAAQppD,E,MAjCO,C,IAyCxC,CAAA,WACE,aAOA,SAASyoW,EAA8B5sV,EAAIhd,EAAKgU,EAAwB9T,EAASO,EAAS+tB,EAAeq7U,GAEvGjpW,KAAKe,IAAM,WACT,IAAI6b,EAAWR,EAAGS,MAAA,EAOlB,OANAzd,EAAIgB,YAAYk1E,uBAAuBv0E,IAAI,GAAI,SAASJ,GAClDmI,EAAOnI,GAAYA,EAASwF,SAAWxF,EAASwF,QAAQiH,OAASzM,EAASwF,QAAQ,GAAKxF,EAC3Fic,EAAS7J,QAAQ,IAAIK,EAAuBtK,CAAA,CAAA,C,EA1fnD,WACC8T,EAAAnP,OAAA,C,GA6fWmP,EAASM,O,EAIlBld,KAAKkpW,iBAAmB,SAASvzH,EAAaD,EAAcxnO,GAC1D,IAAI0O,EAAWR,EAAGS,MAAA,EA1fhB+xI,EAAW,GAOTu6M,GANFj7V,GAASA,EAAWoP,WACpBsxI,EAAA,IAAgB1gJ,EAAAoP,WA6fPpP,GAAWA,EAAQmP,OA3fhCuxI,EAAW,IAAS1gJ,EAAQmP,MAGPq4N,EAAa,KAAW71O,EAAMga,QAAAwD,KAAe,KAC9D+rV,EAAkB9pW,EAAE,WAAA,EAAoB,gCAA6B,CA6frEsvJ,YAAaA,EA3ffy6M,aAAS/pW,EAAA,WAAA,EAAA,iCAAA2pW,EAAAtzH,GAAA/nN,EAAA0rE,SAAA,CACPo8I,aAAcA,C,GA8fd4zH,SAAUzpW,EAAQ4I,KAAKq2V,YAAA,EA3fzByK,YAAc1pW,EAAMga,QAAQwD,I,GA8B5B,OAieArd,KA5fIe,IAAA,EAAI+D,KAAO,SAAU67J,GA6fvB,IA5fIs4L,EAAOkQ,EA6fPvmV,EA5fMwmV,EA8fNzoM,IACEg1E,IA5fW/nN,EAAA0rE,SA6fTqnE,EAAcsD,kCAChBg1L,EA5fGt4L,EAAAsD,iCA8fDtD,EAAcwD,+BA3fpBvhJ,EAAU+9I,EAAAwD,gCAGLxD,EAAEkD,0BA6fHo1L,EAAUt4L,EAAckD,yBAEtBlD,EAAcoD,uBA3fjBnhJ,EAAA+9I,EAAAoD,wBAKLnnJ,EAAS7J,QAAQ,CAAAkmV,QAAIA,EAAUr2U,QAAYA,CAAA,CAAA,C,EA6f1C,WA3fHhG,EAAW7J,QAAQ,CAAAkmV,QAASkQ,EAAQvmV,QAAmBwmV,CAAA,CAAA,C,GAGhDxsV,EAAEM,O,8GA0bblf,QACGC,OAAO,uCAAwC,EAAA,EAC/CwlK,QAAQ,gCAAiCulM,CAAA,C,IAuE9C,CAAC,WACC,aAOA,SAASQ,EAAe9jW,GA5fxB,IAAA8jW,EAAA,CACGC,aAAO,GACPC,eAAQ,CA8fLrsV,KAAM,kCACNqmD,YAAa,KA5fnBimS,YAAS,0BACHpoM,YAAU,KACdqoM,SAAM,4C,GA4hBN,OAxhBAlkW,EAAA3E,IAAQ,+BAAA,EAAkB+D,KAAA,SAAAnE,GACxBA,EAAAmI,OACA0gW,EAAiBC,aAAK9oW,EAAYmI,K,GAigBpC0gW,EAAehsK,eAAiB,SAAS1hL,GACvC,OAAI0tV,EAAeC,aAAa3tV,GA3fN,UAA5B,OAAQ0tV,EAAoBC,aAAA3tV,GACpB0tV,EAAkBC,aAAAD,EAAAC,aAAA3tV,IAElB0tV,EAAYC,aAAA3tV,GAEZ0tV,EAASE,c,EAggBjBF,EAAeK,eAAiB,SAAS/tV,GACvC,OAAI0tV,EAAeC,aAAa3tV,IAEqB,UAAhD,OAAO0tV,EAAeC,aAAa3tV,GAC7B0tV,EAAeC,aAAa3tV,GAGhC,E,EAGF0tV,C,qBA5CTxrW,QACGC,OAAO,uBAAwB,EAAA,EA3fnC4mQ,QAAY,iBAAA2kG,CAAA,C,IA0iBb,CAAC,WACG,aAOA,SA7fMtzU,EAAcr2B,GA8flB,IA7fE4jK,EAASzjK,KA+fXyjK,EAAQqmM,iCA7fC,sBA8fTrmM,EA7fIm5E,mCAAc,oBA8flBn5E,EAAQsmM,uCAAyC,4BA1fjDtmM,EAAO3rI,eAAA,SAAAsxC,EAAA4gS,EAAAC,GA8fL,OAAOxmM,EAAQzlI,qBAAqBorC,CAAA,EAChC6gS,EA5fRD,C,EAggBEvmM,EAAQzlI,qBAAuB,SAASorC,GACtC,OAAOylD,MAAM1vB,QAAQt/F,EAAQga,QAAQqwV,aAAA,GA5flCrqW,EAAQga,QAAAqwV,cAAav2U,SAAAy1C,CAAA,C,wBArB5BprE,QACEC,OAAI,4BAAuB,EAAA,EA8f1BwlK,QA7fC,qBAAAvtI,CAAA,C,IAshBR,CAAC,WACC,aAOA,SA7fMi0U,EA8fJjrW,EACAkd,EACAnd,EACAY,EACAT,EACAI,GAGA,IA7fEikK,EAAYzjK,KA6Dd,SAAS0qM,EAAmB7vK,GAC1B4oI,EAAI5oI,gBAAsB78B,QAAAye,KAAAoe,CAAA,EAC1Btc,aAAIC,QAAe3e,EAAAga,QAAiBtZ,GAAA,oBAA0Bs6B,EAAAt6B,EAAA,C,CAichEkjK,EA7fI5oI,gBAAa,KAggBjB4oI,EA7fM4c,mBAogBN,WACE,IAAIzjK,EAAWR,EAAGS,MAAA,EAqBlB,OApBI4mJ,EAAQ5oI,gBACVje,EAAS7J,QAAQ0wJ,EAAQ5oI,eAAA,EAGxB4oI,EAAQ2mM,gCAAA,EACThrW,EAAI21B,MAAMkR,UAAUllC,IA5fxB,CACER,GAAAkjK,EAAU2mM,gCAAA,EACN32V,WAAY,0B,EA8fX,SAAStN,EAASC,EAAIvF,GA5fvBA,IAAcrB,EAAMsB,aACtB4pM,EAAQvkM,CAAA,EACRyW,EAAa7J,QAAA5M,CAAA,GAEbyW,EAAU7J,QAAA,IAAA,C,GAkgBZ6J,EA7fS7J,QAAC,IAAA,EA8fH6J,EAASM,O,EA5BlBumJ,EAAQ8c,uBA+BR,WACE,IAAI3jK,EAAWR,EAAGS,MAAA,EA3elB,OA4eA3d,EAAUoC,KAAK,CA5fjBhD,WAAS,wCACPK,aAAQ,KA8fNC,YAAa,6FA5ffsG,OAAIlH,QAAYmH,QAAOlG,EAAAmG,KAAA,MAAA,CAAA,EACvBR,oBAAkB,CAAA,EAChBmO,QAAQ,CACRgf,cAAA,CAAA,cAAa,SAAA5e,GACb,OAAUA,EAAAJ,QAAA,uBAAA,CAAAU,WAAA,0BAAA,CAAA,C,MAggBT3O,KAAK,SAAS+1B,GA5fjB6vK,EAAmB7vK,CAAA,EA8fjBje,EAAS7J,QAAQ8nB,CAAA,C,EA5fjB,WA8fAje,EAAS7J,QAAQ,IAAA,C,GA3fnB6J,EAAaM,O,EA4cfumJ,EAAQinC,mBAAqBA,EAC7BjnC,EAAQ2mM,gCAyDR,WACE,OA7fI7rV,aAAOgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,mBAAA,C,EAocbkjK,EA7fM4mM,8BAyjBN,SAAuCC,GACrC/rV,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,oBAAqB+pW,CAAA,C,EA5DjE7mM,EA7fIioG,oBA4jBJ,SA7fW7wO,GA+fTz7B,EAAI21B,MAAMkR,UAAU3lC,OA5fpB,CACAC,GAAOs6B,EAAAt6B,GA8fHE,OAAQ,iBACRsrQ,WAAYlxO,EAAgBkxO,WA5flCsD,QAASx0O,EAAsBw0O,QACzBX,kBAAkB7zO,EAAO6zO,iB,EAE3B,SAAAvoQ,EAAAC,EAAAvF,GA8fMA,IAAWrB,EAAYsB,YACzB09E,QAAQjxE,MAAM,mCAAA,EA1flBk2J,EAAQinC,mBAAK7vK,CAAA,C,2EAsZnB78B,QACGC,OAAO,wCAAyC,EAAA,EA5fjDwlK,QAAS,yBAAkB0mM,CAAA,C,IAymB/B,CAAC,WACC,aAOA,SA7fQI,EAAA7kW,EAAe0W,EAAA+8H,EAAA/5I,GA8frB,IACId,EAAa,IAAIqmB,gBAErB,SA7fS6lV,EAAInxN,GA8fX,IA7fIgyI,EAAA,QAigBJ,OAhgBIjsR,EAAAqrW,aAAA,IA8fFp/E,EAAO,SA3fP,UAAQhyI,EAA4B53G,wBAAwBC,gBAAkBmgD,KAAO6oR,UAAAr/E,C,CARnFrrR,KAWF86I,aAAiB,WA8fnBx8I,EAAWymB,MAAA,C,EAzgBP/kB,KA4gBEm6I,WAAa,SAAUd,GAC7B,IA5fFsxN,EAIAC,EAwfE,OAAIvxN,EAAyB53G,wBAAwBC,gBAAgB63G,UAAYJ,EAAwBK,WA5f3GmxN,EAAgBvuV,EAAKS,MAAA,GACZpP,OAAW,CAAAF,MAAM,CAAA,CAAA,CAAA,EA8ffo9V,EAASztV,UA3fpB0tV,EAAS,CACPp+V,QAAK,CAAA,EACL1D,KAAK,GA+fHyyB,OAAU,CAAA,EA5fZ75B,OAAI,CAAA,C,EAEEgE,EAAAgF,KACJ8/V,EAAInxN,CAAA,EAAmB,wBACvB,CA8fE5wI,KAAQ4wI,EAAyB53G,wBAAwBC,gBAAgBmgD,KAAKp5E,KA5fhFijI,SAAa2N,EAAsB53G,wBAAwBC,gBAAKmgD,KAAA6pD,Q,GA+fhE5mI,KA7fE,SAAAnE,GA2gBF,OAzgBmB,MAAjBA,EAAUE,QA8fV+pW,EAAUr9V,MAAQ,CAAA,EAClBq9V,EAAUrvU,OAAS56B,EAASkqW,YAAmC,CAAA,GA1fnD,MAAZlqW,EAAAmI,KAAY0xI,YACZowN,EAAOr9V,MAAA,CAAA,EACPq9V,EAAKrvU,OAAA56B,EAAAmI,KAAAgiW,eAAA,CAAA,IAggBPF,EAAUp+V,QAAU,CAAA,EACpBo+V,EA7fC9hW,KAAAnI,EAAAmI,MA8fM8hW,C,EA5fT,SAAOr9V,GAggBL,OAFAq9V,EAAUr9V,MAAQ,CAAA,EAClBq9V,EAAUrvU,OAAShuB,EACZq9V,C,KAjjBL5qW,KAqjBEi6I,gBAAkB,SAAUZ,EAA0BlxB,GAC5D,IA7fJwiP,EA6fI,OAAItxN,EAAyB53G,wBAAwBC,gBAAgB63G,UAAYJ,EAAwBK,WA7f7GmxN,EAAAvuV,EAAAS,MAAA,GACUpP,OAAA,CAAAF,MAAA,CAAA,CAAA,CAAA,EACCo9V,EAAAztV,SAGFld,KAAAu6I,0BAA+BlB,EAAqBlxB,CAAA,EAAcrjH,KACrE,SAAUnE,GACd,IAAOiqW,EAAA,CACLp+V,QAAY,CAAA,EACZ1D,KAAc,GACdyyB,OAAc,CAAA,EACd75B,OAAA,CAAA,C,EAEA,MAAA,CAAA,IAAAf,GAAsB,IAAAA,EAAAmI,KAAA0xI,YACtBowN,EAAAp+V,QAAuB,CAAA,EA+fjBo+V,EAAU9hW,KAAOnI,EAASmI,KACnB8hW,IA5fbtsW,EAAa,IAAAqmB,gBAEV7B,MACA0nV,EAAAnxN,CAAA,EAAY,2BACZ,CACAr2H,OAAA,OACIC,QAAA,CACLG,eAAA,kB,EAggBM1c,KAAM+X,KAAKC,UACT,CA7fH6jC,QAAa4lE,EAAQ5nH,GACnBwoB,OAAQswH,EAAAtwH,OACb26C,YAAuB21E,EAAyBh8H,I,GAG9CgG,OAAA/kB,EAAA+kB,M,GAEFve,KAAA,SAAQnE,GACP,OAAAA,EAAiB2iB,KAAA,C,GAClBxe,KAAI,SAAWnE,GA6gBb,OA5gBoB,IAApBA,EAAU65I,YACA,KAAV75I,EAAU65I,YACPowN,EAAAr9V,MAAA,CAAA,EA+fCq9V,EAAUlpW,OAAS,CAAA,GA1fvBkpW,EAAUr9V,MAAA,CAAA,EACPq9V,EAAArvU,OAAA56B,EAAAmqW,eAAA,CAAA,IAINF,EAAAp+V,QAAA,CAAA,EA+fGo+V,EAAU9hW,KAAOnI,GACViqW,C,GA7fNt9V,MAAA,SAAaC,GAGhB,OAFAq9V,EAAKr9V,MAAQ,CAAA,EA+fXq9V,EAAUrvU,OAAShuB,EA7flBq9V,C,OAlHH5qW,KAsnBE85I,0BAA4B,SAAUT,EAA0BlxB,GA7ftE,IACEwiP,EADF,OAAItxN,EAAoB53G,wBAAmBC,gBAAA63G,UAAAJ,EAAAK,WACzCmxN,EAAAvuV,EAAAS,MAAA,GACMpP,OAAQ,CAAAF,MAAM,CAAA,CAAA,CAAA,EAClBo9V,EAAQztV,SAGLld,KAAAu6I,0BAASlB,EAAAlxB,CAAA,EAAArjH,KA+fd,SA9fKnE,GACH,IAAIiqW,EAAW,CACbp+V,QAAA,CAAA,EA+fA1D,KA9fK,GACLyyB,OAAA,CAAA,EACA75B,OAAG,CAAA,C,EAigBL,MA9fK,CAAA,IAAHf,GAAoB,IAAAA,EAAAmI,KAAA0xI,YA+fpBowN,EAAUp+V,QAAU,CAAA,EACpBo+V,EAAU9hW,KAAOnI,EAASmI,KACnB8hW,GA3fNllW,EAAAgF,KACF8/V,EAAOnxN,CAAA,EAAA,0BACV,CA+fM92F,QAAW4lE,EAAU5nH,GA7f7BwoB,OAAe,CAAA,EAAAswH,EAAAtwH,OACb26C,YAAY21E,EAAAh8H,KACZ0tV,cAAc1xN,EAAAC,qBAAAz3D,KAAAmpR,yB,GAEdlmW,KAAQ,SAAQnE,GAef,OAdoB,IAArBA,EAAAmI,KAAqB0xI,YACR,KAAb75I,EAAamI,KAAA0xI,YACLowN,EAAAr9V,MAAA,CAAA,EACNq9V,EAAOlpW,OAAA,CAAA,GAkgBDkpW,EAAUr9V,MAAQ,CAAA,EAClBq9V,EAAUrvU,OAAS56B,EAASmI,KAAKgiW,eAA8C,CAAA,IA1ftFF,EAAOp+V,QAAQ,CAAA,EACfo+V,EAAU9hW,KAAAnI,EAAAmI,MACV8hW,C,MArKC5qW,KAyqBEm7I,WAAa,SAAUo0D,GAC7B,IA7fFo7J,EA6fE,OAAIp7J,EAAsB9tK,wBAAwBC,gBAAgB63G,UAAYJ,EAAwBK,WA7fxGmxN,EAASvuV,EAAAS,MAAA,GACIpP,OAAA,CAAAF,MAAW,CAAA,CAAA,CAAA,EACtBo9V,EAAWztV,SAGJxX,EAAA3E,IACPypW,EAAAj7J,CAAA,EAAsB,yB,GAnLlBvvM,KAqrBEu6I,0BAA4B,SAAUg1D,EAAuBr9K,GA7fxE,IAAAtV,EAAWR,EAAAS,MAAA,EA+gBN,OAfI0yL,EAAsB9tK,wBAAwBC,gBAAgB63G,UAAYJ,EAAwBK,SA7f1G58H,EAAAnP,OAAA,CAAAF,MAAA,CAAA,CAAA,CAAA,EAkgBI7H,EAAM3E,IA7fVypW,EAASj7J,CAAA,EAA0B,uB,EA+f7BzqM,KA7fJ,SAAKnE,GACAA,EAAAmI,MAAA,CAAAnI,EAAAmI,KAAAy5C,UAA4CrwB,EAAA3xB,IA+fzCqc,EAAS7J,QAAQpS,CAAA,EAEnBic,EAAS7J,QAAQ,CAAA,CAAA,C,GAGd6J,EAASM,O,2DAhNpBlf,QACGC,OAAO,wBAAyB,EAAA,EAChCwlK,QA7fC,WAAA8mM,CAAA,C,IAgtBN,CAAA,WACE,aAOA,SAASU,EACP1rW,EACAN,EA7fAwe,EA+fAne,EACA4rW,EACAC,GAEA,IAAI1nM,EA9fSzjK,KAigBbyjK,EAAQ2nM,WAAa,EACrB3nM,EAAQ4nM,cAAgB,CACtBC,QAAS,UACTC,IAAK,K,EAIP9nM,EAAQ1qJ,MAAQ,GAChB0qJ,EAAQlwE,QAAU,CAAA,EA9fpBkwE,EAAA+nM,WAAA,GAggBE/nM,EA/fQoiI,KAAApiI,EAAA4nM,cAAAC,QAggBR7nM,EA/fCgoM,cAAQ,CAggBPvlV,QAAS,GACTovB,IAAK,GA9fTpjB,SAAS,GAggBLyQ,eAAgB,GA9flB8hF,YAAW,GACTinP,cAAe,E,EAmgBjBjoM,EA/fKkoM,UAAW,SAAA/sU,GACZ6kI,EAASlwE,SAkgBO,KAAd30D,EAAE80E,SACJ+vD,EAAQmoM,UAAA,C,EAIZnoM,EAAQooM,WAAa,SAASjtU,GA9fxB6kI,EAAAlwE,UAkgBJkwE,EA/fOqoM,cAAA,EAggBProM,EA/fEsoM,SAAcntU,CAAA,EAggBhB6kI,EAAQ73J,QAAU6R,EAASgmJ,EAAQmoM,UAAWnoM,EAAQ+nM,UAAA,E,EAGxD/nM,EA/fMuoM,cAAiB,SAAQ7/F,GAggB7B1oG,EA/fE+nM,WAAar/F,C,EAkgBjB1oG,EAAQmoM,UAAY,WAGlB,IAKIK,EAlfEP,EA2eNjoM,EA/fEqoM,cAAA,EAigBEroM,EAAQ1qJ,MAAM3L,OAASq2J,EAAQ2nM,WACjC3nM,EAAQ1qJ,MAAQ,IAIdkzV,EAAiBxoM,EAAQyoM,iBAAA,EAC7BzoM,EA/fM1qJ,MAAA,GACFkzV,IAmgBAxoM,EA/fM0oM,kBAAA,EAggBR1oM,EA/fM2oM,cAAU,WAAcH,CAAA,EAggBrBxoM,EAAQ4oM,wBAAA,EACjB5oM,EAAQ2oM,cA/fC,iBAAAH,CAAA,EACDxoM,EAAA6oM,qBAAA,EAggBR7oM,EA/fM2oM,cAAU,cAAcH,CAAA,EAggBrBxoM,EAAQ8oM,gBAAgBN,CAAA,GA9f7BP,EAAI,IAAcP,EAAAc,CAAA,EAggBtBxoM,EA/fM2oM,cAAU,gBAAcV,CAAA,GAggBrBjoM,EAAQoiI,OAASpiI,EAAQ4nM,cAAcC,QAChD7nM,EAAQ2oM,cAAc,UAAWH,CAAA,EACxBxoM,EAAQoiI,OAASpiI,EAAQ4nM,cAAcE,KAChD9nM,EAAQ2oM,cAAc,MAAOH,CAAA,G,EAIjCxoM,EAAQ2oM,cAAgB,SAASvmR,EAAW9sE,GAC1CsI,OAAOwkC,KAAK49G,EAAQgoM,cAAc5lR,EAAA,EAAY3kF,QAAQ,SAASsrW,GA9f/D/oM,EAAOgoM,cAAS5lR,GAAA2mR,GAAAzzV,CAAA,C,IAmgBlB0qJ,EAAQqoM,cAAgB,WAClBroM,EAAQ73J,SACV6R,EAAS/b,OAAO+hK,EAAQ73J,OAAA,C,EAI5B63J,EAAQsoM,SAAW,SAASntU,GA/f9B6kI,EAAAgpM,0BAAA7tU,EAAA80E,OAAA,IACG+vD,EAAO1qJ,OAAA6lB,EAAAzf,I,EAIVskJ,EAASgpM,0BAAsB,SAAAC,GAC7B,OAAI,IAAAA,C,EAmgBJjpM,EAhgBI0oM,kBAAM,WAigBR,OAhgBE1oM,EAAa1qJ,MAAAgE,UAAA,EAAA,CAAA,EAAA87B,YAAA,IAAAqyT,EAAAyB,yBAAA,G,EAmgBjBlpM,EAhgBI4oM,wBAAU,WAigBZ,OAAO5oM,EAAQ1qJ,MAAMgE,UAAU,EAAG,CAAA,EAAG87B,YAAA,IAAmBqyT,EAAoB0B,+BAAiC,G,EA7f/GnpM,EAAM6oM,qBAAI,WACR,OAAI7oM,EAAS1qJ,MAAMgE,UAAA,EAAA,CAAA,EAAA87B,YAAA,IAAAqyT,EAAA2B,2BAAA,G,EAmgBrBppM,EAAQ8oM,gBAAkB,SAASxzV,GACjC,OAAOoyV,EAAcoB,gBAAgBxzV,CAAA,C,EAGvC0qJ,EAAQqpM,2BAA6B,SAAS/zV,GAC5C,OAhgBK,IAAAoyV,EAAOpyV,CAAA,EAAeg0V,OAAA,C,EAmgB7BtpM,EAhgBIupM,8BAAmC,SAAAj0V,GAigBrC,OAAO,IAAIoyV,EAAcpyV,CAAA,EAAOk0V,gBAAA,C,EAGlCxpM,EAAQypM,qBAAuB,SAASn0V,GA/fxC,OAAA,IAAAoyV,EAAepyV,CAAA,EAAiBo0V,OAAA,C,EAmgBhC1pM,EAhgBO2pM,iBAAO,SAAer0V,GAigB3B,OAhgBI,IAAOoyV,EAAApyV,CAAA,EAAeq0V,iBAAA,C,EAmgB5B3pM,EAhgBE4pM,YAAO,aAkgBT5pM,EAAQ6pM,kBAAoB,WA/f5B,OAAO7pM,EAAA8pM,gB,EAmgBP9pM,EAAQyoM,iBAAmB,WAGzB,OAlgBOluW,QAAAye,KAAAgnJ,EAAA1qJ,KAAA,EACT65C,KAAA,C,EAogBA6wG,EAjgBG+pM,QAAO,SAAA3nE,GAkgBRpiI,EAjgBCoiI,KAAQA,C,EAGXpiI,EAAAgqM,eAAS,WACPhqM,EAAI+pM,QAAU/pM,EAAA4nM,cAAAnlV,OAAA,C,EAogBhBu9I,EAjgBEiqM,WAAQ,WACRjqM,EAAQ+pM,QAAA/pM,EAAA4nM,cAAA/1T,GAAA,C,EAogBVmuH,EAjgBEkqM,cAAQ,WAkgBR,OAjgBElqM,EAAOoiI,OAAQpiI,EAAA4nM,cAAqBC,O,EAogBxC7nM,EAAQmqM,UAAY,WAClB,OAAOnqM,EAAQoiI,OAASpiI,EAAQ4nM,cAAcE,G,EAGhD9nM,EAAQoqM,kBAjgBmB,SAAAhoR,EAAcjlF,GAkgBvC6iK,EAAQw0D,WAAW,CAAA,CAAA,EACnB,IAAI61I,EAAiB35U,KAAKg8O,OAAA,EAE1B,OADA1sG,EAAQgoM,cAAc5lR,GAAWioR,GAAkBltW,EAC5CktW,C,EA9fXrqM,EAAAsqM,YAAA,SAAAloR,EAAAioR,GAkgBI,OAAOrqM,EAAQgoM,cAAc5lR,GAAWioR,GACxCrqM,EAAQw0D,WAAW52M,OAAOwkC,KAAK49G,EAAQgoM,cAAcvlV,OAAA,EAAS9Y,QAjgBlEiU,OAAAwkC,KAAA49G,EAAAgoM,cAAAn2T,GAAA,EAAAloC,QACGiU,OAAOwkC,KAAA49G,EAAAgoM,cAAAv5U,QAAA,EAAA9kB,QACPiU,OAAQwkC,KAAA49G,EAAAgoM,cAA0B9oU,cAAA,EAAAv1B,QAmgB/BiU,OAAOwkC,KAAK49G,EAAQgoM,cAAchnP,WAAA,EAAar3G,QAC/CiU,OAAOwkC,KAAK49G,EAAQgoM,cAAcC,aAAA,EAAet+V,MAAA,C,EA/frDq2J,EAAAw0D,WAAA,SAAAl/M,GACA0qJ,EAAAlwE,QAAAx6E,C,EAGA0qJ,EAAAp0E,iBAAA,SAAAzuF,GACA,OAAA6iK,EAAAoqM,kBAAA,UAAAjtW,CAAA,C,EAqgBA6iK,EAAQuqM,aAAe,SAASptW,GAC9B,OAAO6iK,EAAQoqM,kBAAkB,MAAOjtW,CAAA,C,EAG1C6iK,EAAQwqM,kBAAoB,SAASrtW,GAjgBrC,OAAQ6iK,EAAAoqM,kBAAqB,WAAAjtW,CAAA,C,EAG7B6iK,EAAQyqM,wBAAA,SAAkCttW,GAC1C,OAAQ6iK,EAAAoqM,kBAAA,iBAAgCjtW,CAAA,C,EAGxC6iK,EAAA0qM,qBAA8B,SAAAvtW,GAC5B,OAAI6iK,EAAWoqM,kBAAG,cAAAjtW,CAAA,C,EAqgBpB6iK,EAlgBI2qM,uBAAgB,SAAAxtW,GAmgBlB,OAAO6iK,EAAQoqM,kBAAkB,gBAAiBjtW,CAAA,C,EAGpD6iK,EAlgBIn0E,mBAAA,SAAAw+Q,GAmgBFrqM,EAlgBQsqM,YAAQ,UAAAD,CAAA,C,EAqgBlBrqM,EAlgBM4qM,eAAe,SAAYP,GAmgB/BrqM,EAlgBMsqM,YAAA,MAAmBD,CAAA,C,EAqgB3BrqM,EAlgBQ6qM,oBAAiB,SAAAR,GAmgBvBrqM,EAAQsqM,YAAY,WAAYD,CAAA,C,EAGlCrqM,EAAQ8qM,0BAA4B,SAAST,GAjgB3CrqM,EAAAsqM,YAAiB,iBAAAD,CAAA,C,EAqgBnBrqM,EAAQ+qM,uBAAyB,SAASV,GAjgB1CrqM,EAASsqM,YAAA,cAAyBD,CAAA,C,EAqgBlCrqM,EAlgBIgrM,yBAAY,SAAAX,GAmgBdrqM,EAlgBEsqM,YAAc,gBAAAD,CAAA,C,EAqgBlBrqM,EAlgBIirM,WAAA,SAAqBC,EAAAC,GACrBnrM,EAASoiI,OAAA8oE,EAmgBTlrM,EAlgBE+pM,QAAAoB,CAAA,EAogBFnrM,EAAQ+pM,QAAQmB,CAAA,C,EAIpB1vW,EAlgBI4sF,KAAS,yBAAQ43E,EAAAkoM,SAAA,EAmgBrB1sW,EAlgBK4sF,KAAA,0BAAW43E,EAAAooM,UAAA,EAmgBhBtsW,EAlgBImP,IAAS,iCAAQ,WAmgBnB+0J,EAAQ1qJ,MAAQ7P,OAAO0tM,OAAOt3M,EAAQ,WAAA,EAAa,yBAAA,CAAA,EAjgBnDmkK,EAAO1qJ,OAmgBL0qJ,EAAQmoM,UAAA,C,mGAjQd5tW,QACGC,OAAO,uBAAwB,EAAA,EAC/BwlK,QAAQ,iBAAkBwnM,CAAA,C,IAqQ/B,CAAC,WACC,aAOA,SAAS9iG,EAAY/rP,EAAIu+C,EAAU96D,EAAST,EAAK+T,EAAaqtV,EAAMhhW,GAClE,IAAI2oQ,EAAc,CAjgBlBiB,iBAA6B,CAAA,EAmgB7BylG,iBAA+B,KAE/B1lG,MAlgBI,SAAA2lG,EAAAjM,GAuhBF,OApBA16F,EAlgBQiB,iBAAgBy5F,EAmgBxB16F,EAlgBY0mG,iBAAAzyV,EAAAS,MAAA,EAogBZzd,EAlgBI09B,QAAAqsO,MAASpiQ,KAogBX,CAjgBA0kI,SAASqjO,EAAarjO,SACpBC,SAAIojO,EAAWpjO,Q,EAsgBjBy8H,EAlgBUnC,UAqgBV,SAASrlQ,GACPd,EAAQosU,QAAA,EACR9jE,EAAY0mG,iBAAiB97V,QAAQpS,CAAA,C,GAIlCwnQ,EAAY0mG,iBAAiB3xV,O,EAGtC8oP,UAngBQ,SAAyBrlQ,GAChCA,EAAQwiB,OAogBLxiB,EAAS8H,KAAO,IAAI+3V,EAAK7/V,EAAS8H,IAAA,EAhgBlC0/P,EAAUiB,kBACV7qP,aAAaC,QAAI,QAAA7d,EAAAwiB,KAAA,EAogBftjB,EAAQslW,QAAQxkW,EAAS8H,KAAKgjI,SAAU9qI,EAASwiB,MAAOxiB,EAAS8H,KAAM,CAAA,CAAA,IAhgBvEqhE,eAAItrD,QAAgB,QAAA7d,EAAAwiB,KAAA,EACtBtjB,EAAOslW,QAAAxkW,EAAA8H,KAAAgjI,SAAA9qI,EAAAwiB,MAAAxiB,EAAA8H,KAAA,CAAA,CAAA,GAugBPkyD,EAASxnB,OAAO,eAAA,EAGhBtzC,EAAQskW,gBAAA,EACRtkW,EAAQukW,eAAejxV,CAAA,EAAarO,KAAK,WAlgBrCqjQ,EAAa0mG,kBACf1mG,EAAA0mG,iBAAyB97V,QAAApS,CAAA,C,KAugB3Bd,EAAQosU,QAAA,EAlgBN9jE,EAAY0mG,kBACd1mG,EAAW0mG,iBAAA97V,QAAApS,CAAA,E,EAwgBfolQ,OAAqB,SAASt6H,EAAUhkI,EAAOikI,GAE7C,OAngBEtsI,EAAO09B,QAAAipO,OAAAh/P,KAqgBP,CAlgBE0kI,SAAAA,EAogBAhkI,MAAOA,EAlgBTikI,SAAKA,C,EAugBL,SAngBE/qI,KA0gBF,SAASA,GAjgBT,OADAd,EAAUosU,QAAA,EACVtrU,C,GAqgBAo/D,Q,EAIJgvS,OAAqB,WACnBlvW,EAAQ8kW,yBAAA,EACR9kW,EAAQqsI,WAAWrsI,EAAQ4I,KAAKgjI,QAAA,EAlgBlC5rI,EAAQosU,QAAA,C,EAsgBRk2B,gBAngB8B,WAogB5B,MAngBE,CAAA,CAAOtiW,EAAAsjB,K,EAsgBX6rV,aAngBc,SAAAC,GAugBZ,OAtgBEjxW,QAAUmhG,QAAA8vQ,CAAA,IAogBVA,EAngBkB,CAAAA,IAEd9mG,EAAQg6F,gBAAA,GACE,CAAA,IAmgBd8M,EAngBcn2T,QAAAj5C,EAAA4I,KAAAkjI,IAAA,C,EAsgBlB25N,WAngBuB,SAAS78V,GAogB9B,OAngBM5I,EAAAylW,WAAoB78V,CAAA,EAAA3D,KAAA,SAAA0gW,GA8gBxB,OAVGA,GAEDryV,EAAYJ,QAAQ,kBAAA,EAAoBjO,KAAK,SAASnE,GAlgBtD,MAAAA,CAAAA,CAAAA,EAAaJ,KAogBTV,EAAQ4I,KAAO,IAAI+3V,EAAK7/V,CAAA,EAlgBrB,CAAA,E,GAwgBF6kW,C,IAIXt7F,qBAngBmC,SAAAziQ,GAogBjC,IAAIynW,EAngBkB9yV,EAAAS,MAAA,EAwhBtB,OAnBAzd,EAAI09B,QAAQqyU,kBAAkBpoW,KAE5B,CACEU,MAAOA,C,EAGT,SAngBK9G,EAAKyF,EAAUvF,GAChBA,IAAarB,EAAAsB,YAogBbouW,EAngBen8V,QAAmBpS,CAAA,EAqgBlCuuW,EAngBuBzhW,OAAA9M,CAAA,C,EAugB3B,SAngBQA,GAogBNuuW,EAngByBzhW,OAAS9M,CAAA,C,GAIhCuuW,EAAoBhyV,O,EAsgB5BmrP,cAngByB,SAAO/yN,EAAAnyB,GAogB9B,IAAIisV,EAngBoBhzV,EAAAS,MAAA,EAyhBxB,OApBAzd,EAAI09B,QAngBEurO,cAAOtnQ,IAqgBX,CACEu0C,IAAKA,EACLnyB,MAAOA,C,EAhgBX,SAAIxiB,EAAAyF,EAAAvF,GACEA,IAAWrB,EAAGsB,YAClBsuW,EAAiBr8V,QAASpS,CAAA,EAqgBtByuW,EAAqB3hW,OAAO9M,CAAA,C,EAIhC,SAngBMA,GAogBJyuW,EAngBa3hW,OAAA9M,CAAA,C,GAugBVyuW,EAAqBlyV,O,EAG9BsrP,sBAngB4B,SAAAlzN,EAAAnyB,EAAAuoH,GAogB1B,IAAI2jO,EAngB4BjzV,EAAAS,MAAA,EA0hBhC,OArBAzd,EAAI09B,QAAQ0rO,sBAAsB3gM,MAEhC,CACEvyB,IAngBEA,EAogBFnyB,MAngBEA,EAogBFuoH,SAngBIA,C,EAsgBN,SAngBM/qI,EAAAyF,EAAiBvF,GAogBjBA,IAAWrB,EAAYsB,YAlgBzBuuW,EAAyBt8V,QAAApS,CAAA,EAqgBzB0uW,EAngBoB5hW,OAAe9M,CAAA,C,EAugBvC,SAngBQA,GAogBN0uW,EAngBW5hW,OAAA9M,CAAA,C,GAugBR0uW,EAA6BnyV,O,CAnMpB,EAsMlB,OAAOirP,C,gFA5MTnqQ,QACGC,OAAO,oBAAqB,EAAA,EAC5B4mQ,QAAQ,cAAesD,CAAA,C,IA+M5B,CAAC,WACC,aAEAnqQ,QACGC,OAngBO,qBAAc,EAAA,EAogBrBwlK,QAngBG,QAsgBN,WAEE,IAEI6rM,EAAa,IAAIjxQ,MAAM,sFAAA,EArgBhBr+F,KAIXs+F,eAAQ,WACNgxQ,EAAIC,KAAA,C,EAVO,C,IAohBjB,CAAC,WACC,aAOA,SAASC,EACPjwW,EACAke,EACApe,EACAH,EACAw2E,EACA32E,EAlgBH2G,EACCpG,EAogBEF,EACAqwW,EAngBFjwW,GAsgBE,IApgBCikK,EAAQzjK,KAGXyjK,EAAS/3J,kBAAA,IACP+3J,EAAA73J,QAAA,KAGA63J,EAAA93J,aAAA,SAAA+jW,EAAA9uW,GACA6iK,EAAAjkD,eAAA,EACAikD,EAAA73J,QAAAvM,EAAA,WACAD,EAAAgB,YAAAuvW,UAAA5uW,IAAA,CACIR,GAAAmvW,EAqgBEjvW,OAAQ,Y,EACP,SAAUwL,EAAQ2jW,EAAkB/uW,GAngBnCoL,EAAApL,SAAa4uW,EAAAI,0BACb5jW,EAAApL,SAAgB4uW,EAAAK,wBACtBzwW,EAASqC,OAAA+hK,EAAA73J,OAAA,EACJ63J,EAAAssM,eAAAL,EAAA,SAAAplW,GAqgBG1J,EAAS0J,CAAA,C,OAhgBnBm5J,EAAQ/3J,iBAAA,C,EAGR+3J,EAAQssM,eAAgB,SAAAL,EAAA9uW,GACtBxB,EAAAgB,YAASuvW,UAAA5uW,IAAA,CACTR,GAAKmvW,C,EACL,SAAU/uW,EAAAivW,EAAA/uW,GACVA,IAAgBrB,EAAAsB,cAChBH,EAAa2J,MACbpL,EAAeuK,KAAA,EAqgBTg6J,EAAQusM,QAAQrvW,EAAS2J,GAAA,EACzB1J,EAASD,EAAS2J,GAAA,GAlgBlB3J,EAAA46B,SACDkoI,EAAQwsM,UAAStvW,EAAA46B,MAAA,C,IA0gBxBkoI,EAAQjkD,eAAiB,WACvBikD,EAAQysM,gBAngBV5wW,EAAQ,WAAA,EAAa,6CAAA,EACnBA,EAAK,WAAA,EAAiB,2CAAA,C,GAwgBxBmkK,EApgBEusM,QAAQ,SAAS1lW,GACjBwY,MAAAxY,CAAA,EAqgBGxF,KAAK,SAAUnE,GACd,OAAOA,EAASg8B,KAAA,C,GAlgBpB73B,KAAQ,SAAAgE,GAqgBJvJ,EAAW+6B,MAAM,iCAAkC,CACjDomE,IAAK53F,C,MAKb26J,EApgBIzgD,cAAgB,SAAA14G,GAqgBlBwY,MApgBExY,CAAA,EAqgBCxF,KAAK,SAAUnE,GACd,OAAOA,EAASg8B,KAAA,C,GAlgBpB73B,KAAQ,SAAQgE,GACZ,IAACgC,EAAgBrE,SAAA4C,cAAA,GAAA,EACnByB,EAAAxB,KAAA,+BAAAR,EAsgBEgC,EAAavB,SAAW83M,YAngBxB56M,SAAQC,KAAAyE,YAAAL,CAAA,EACVA,EAAQtB,MAAA,EAqgBN/C,SApgBOC,KAAA0E,YAAQN,CAAA,C,IAwgBrB24J,EAAQwsM,UApgBK,SAAQ10U,GAqgBnB,IApgBEt0B,EAAI3H,EAAoB,WAAA,EAAA,2CAAA,EAqgB1B2H,GApgBU,WAAcs0B,EAAAhuB,MAqgBxBk2J,EApgBOysM,gBACL5wW,EAAQ,WAAA,EAAA,6CAAA,EAqgBRo2E,EApgBKoC,YAAY7wE,CAAA,C,GAwgBrBw8J,EAAQysM,gBAAkB,SAAUvrW,EAAO+B,EAAMgoM,GAngBjDxvM,EAAQoC,KACNpC,EAAYyJ,MAAA,EACV/D,oBAAsB,CAAA,CAAA,EAqgBnBD,MAAMA,CAAA,EACNsC,YAAYP,CAAA,EACZ7B,GAAG6pM,GAAcpvM,EAAQ,WAAA,EAAa,eAAA,CAAA,C,2IA9G/CtB,QACGC,OAngBK,wBAAsB,EAAA,EAogB3BwlK,QAngBO,kBAAiB+rM,CAAA,C,IAsnB7B,CAAA,WACE,aAEAxxW,QACGC,OAAO,qBAAsB,EAAA,EAC7B4mQ,QAAQ,UAGX,WAlfE,OAhBA,SAAQ9rP,GACN/Y,KAAAyI,KAAOsQ,EAAQA,EAAMtQ,KAAU,KAqgB/BzI,KAAKi7C,KAAOliC,GAASA,EAAMkiC,KAAO,IAAIiJ,KAAKnrC,EAAMkiC,IAAA,EAAQ,KACzDj7C,KAAKmwW,WAAap3V,GAASA,EAAMo3V,WAAa,IAAIjsT,KAAKnrC,EAAMo3V,UAAA,EAAc,KAngB7EnwW,KAAAowW,SAAQr3V,GAAAA,EAAAq3V,SAA0B,IAAWlsT,KAAAnrC,EAAAq3V,QAAA,EAAA,KAC3CpwW,KAAAqwW,UAAet3V,EAAMA,EAAUs3V,UAAM,KAqgBrCrwW,KAAKswW,WAAav3V,EAAQA,EAAMu3V,WAAa,KAC7CtwW,KAAKa,OAASkY,EAAQA,EAAMlY,OAAS,KAngBvCb,KAAAuwW,WAAQx3V,EAAAA,EAAuBw3V,WAAW,KACxCvwW,KAAAwwW,YAAez3V,EAAMA,EAAUy3V,YAAM,KAqgBrCxwW,KAAKywW,UAAY13V,EAAQA,EAAM03V,UAAY,I,EAfzB,C,IA0BxB,CAAA,WACE,aAEAzyW,QACGC,OApgBC,8BAAgC,EAAA,EAqgBjC4mQ,QAAQ,mBAGX,WAcE,OAZA,SAAyB9rP,GAngBzB/Y,KAAAglI,SAAQjsH,EAAcA,EAAAisH,SAAW,KAqgB/BhlI,KAAKowW,SAAWr3V,EAAQ,IAAImrC,KAAKnrC,EAAMq3V,QAAA,EAAY,KAngBrDpwW,KAAAmwW,WAAQp3V,EAAoB,IAAAmrC,KAAAnrC,EAAWo3V,UAAA,EAAA,KACrCnwW,KAAAsF,KAAOyT,EAAQA,EAAAzT,KAAA,KAqgBftF,KAAKwwW,YAAcz3V,EAAQA,EAAMy3V,YAAc,KAC/CxwW,KAAKywW,UAAY13V,EAAQA,EAAM03V,UAAY,I,EAXhB,C,IAsBjC,CAAA,WACE,aAEAzyW,QAngBEC,OAAQ,qBAAa,EAAA,EAqgBpB4mQ,QApgBC,UAugBJ,WAqBE,OAnBA,SAAiB9rP,GAKf/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAhgB7BP,KAAAqd,KAAQtE,EAAAA,EAAcsE,KAAW,KACjCrd,KAAAimB,KAAOlN,EAAAA,EAAAkN,KAAA,KAsgBPjmB,KAAKqmB,SAAWtN,EAAQA,EAAMsN,SAAW,KAngB3CrmB,KAAAopO,kBAAsBrwN,EAASA,EAAAqwN,kBAA2B,KAExDppO,KAAAyB,SAAQsX,EAAWA,EAAOtX,SAAa,I,EApBvB,C,IAgiBtB,CAAA,WACE,aAOA,SApgBEivW,EAAQvY,EAAAv0G,EAAe34G,GAylBvB,OAnFA,SAAclyH,GACZ/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAngB/BP,KAAA6Z,QAAQd,EAAAA,EAAoBc,QAAS,KAsgBnC7Z,KAAKyrI,SAAW1yH,EAAQA,EAAM0yH,SAAW,KACzCzrI,KAAKsd,WAAavE,EAAQA,EAAMuE,WAAa,KAngB/Ctd,KAAAqsE,UAAQtzD,EAAAA,EAAAszD,UAAmC,KACzCrsE,KAAA2jE,KAAO5qD,EAAQA,EAAA4qD,KAAkB,KAqgBjC3jE,KAAKumP,IAAMxtO,EAAQA,EAAMwtO,IAAM,KAC/BvmP,KAAK27B,IAAM5iB,EAAQA,EAAM4iB,IAAM,KAngBjC37B,KAAA4rI,kBAAQ7yH,CAAAA,CAAAA,GAAuBA,EAAS6yH,kBAsgBtC5rI,KAAKyH,MAAQsR,EAAQA,EAAMtR,MAAQ,KACnCzH,KAAKu9B,MAAQxkB,EAAQA,EAAMwkB,MAAQ,KAlgBnCv9B,KAAA2wW,SAAe53V,EAAAA,EAAA43V,SAAkB,KAqgBjC3wW,KAAK4wW,UAAY73V,EAAQA,EAAM63V,UAAY,KAC3C5wW,KAAKy/V,YAAc1mV,GAASA,EAAM0mV,YAAc,IAAIv7S,KAAKnrC,EAAM0mV,WAAA,EAAe,KAngBhFz/V,KAAAq4V,QAAQt/U,EAAA,IAAqBo/U,EAAAp/U,EAASs/U,OAAA,EAAgB,IAAAF,EAsgBpDn4V,KAAKsiW,8BAAgCvpV,CAAAA,CAAAA,GAAQA,EAAMupV,8BACnDtiW,KAAK6wW,iCAAmC93V,GAASA,EAAM83V,iCAAmC,IAAI3sT,KAAKnrC,EAAM83V,gCAAA,EAAoC,KAG7I7wW,KAAK8hB,WAAa/I,EAAQA,EAAM+I,WAAa,GAC7C9hB,KAAK+lQ,OAAShtP,EAAQA,EAAMgtP,OAAS,KAngBvC/lQ,KAAA8wW,gBAAQ/3V,EAAsBA,EAAS+3V,gBAAgB,KACrD9wW,KAAA+wW,aAAoBh4V,EAAAA,EAAYg4V,aAAA,KAsgBhC/wW,KAAKqrI,MAAQ,GAngBftyH,GAAQA,EAAAsyH,QACNrrI,KAAAqrI,MAAQtyH,EAAYsyH,MAAA9pH,IAAA,SAAkBoqH,GAqgBlC,OAAO,IAAIi4G,EAAKj4G,CAAA,C,IAIpB3rI,KAAKgxW,uBAAyBj4V,EAAQA,EAAMi4V,uBAAyB,KACrEhxW,KAAKixW,UAAYl4V,EAAQA,EAAMk4V,UAAY,GAG3CjxW,KAAKu3E,aAAe,WAClB,OAAOv3E,KAAKkxW,UAAUjmO,EAAW05G,mBAAA,C,EAGnC3kP,KApgBE2/V,QAAQ,WAqgBR,OApgBK3/V,KAAAkxW,UAAAjmO,EAAAi5G,eAAA,C,EAugBPlkP,KAAKmxW,gBAAkB,WACrB,OAAOnxW,KAAKkxW,UAAUjmO,EAAWg5G,yBAAA,C,EAjgBrCjkP,KAAAoxW,gBAAe,WACb,OAAQpxW,KAAAkxW,UAAejmO,EAAO+4G,wBAAA,C,EAugB9BhkP,KAAKqxW,eAAiB,WACpB,OAAOrxW,KAAKkxW,UAAUjmO,EAAW84G,uBAAA,C,EAGnC/jP,KAAKsxW,mBAAqB,WAngB/B,OAAWtxW,KAAAkxW,UAAAjmO,EAAAsB,2BAAA,C,EAugBNvsI,KAAKuxW,kBAAoB,WApgB7B,OAAAvxW,KAAAkxW,UAAAjmO,EAAAqB,0BAAA,C,EAwgBItsI,KAAKkxW,UAAY,SAASvrH,GACxB,MAngBA,CAAA,IAmgBO3lP,KAAKqrI,MAAMxoG,UAAU,SAAS8oG,GApgB3C,OAASA,EAAAprI,KAAgBolP,C,IAygBrB3lP,KAAK8+V,YAAc,WApgBrB,MAAA,CAAY9+V,KAAAsd,WAAiBtd,KAAAqsE,WAAan4D,KAAA,GAAA,C,6CAmb5ClW,QAngBEC,OAAQ,kBAAmB,EAAA,EAqgB1B4mQ,QApgBQ,OAAQ6rG,CAAA,C,IAimBrB,CAAA,WACE,aAEA1yW,QACGC,OArgBK,uBAAY,EAAA,EAsgBjB4mQ,QAAQ,WAGX,WA4BE,OA1BA,SAAkB9rP,GAKhB/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KArgBEg/V,WAAgBjmV,EAAAA,EAAAimV,WAAkB,KAsgBpCh/V,KArgBI4W,WAAamC,EAAQA,EAAAnC,WAAkB,KAsgB3C5W,KArgBIuyC,aAAgBx5B,EAAAA,EAAcw5B,aAAU,KAsgB5CvyC,KAAKs1C,IAAMv8B,EAAQA,EAAMu8B,IAAM,KAC/Bt1C,KAAKo1C,gBArgBIr8B,EAAAA,EAAAq8B,gBAAA,KAsgBTp1C,KArgBI6wJ,qBAAuB93I,EAASA,EAAA83I,qBAAS,KAsgB7C7wJ,KArgBIkgB,MAAQnH,EAAQA,EAAAmH,MAAc,KAsgBlClgB,KAAKm1C,gBAAkBp8B,EAAQA,EAAMo8B,gBAAkB,KACvDn1C,KAAKunC,UAAYxuB,EAAQA,EAAMwzE,mBAAqB,KACpDvsF,KAAKwxW,qBAAuBz4V,EAAQA,EAAMy4V,qBAAuB,KACjExxW,KArgBE+oB,OAAShQ,EAAOA,EAAAgQ,OAAA,EAsgBlB/oB,KAAKy0C,SAAW17B,EAAQA,EAAM07B,SAAW,KACzCz0C,KAAK4C,MAAQmW,EAAQA,EAAMnW,MAAQ,KACnC5C,KArgBEoqF,OAAQrxE,EAAAA,EAAAqxE,OAAA,I,EA6eS,C,IAmCzB,CAAA,WACE,aAOA,SArgBQqnR,EAAUx7U,GA2BhB,OA4eA,SArgBgBld,GA0gBd/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAG7BP,KAAK+oB,OAAShQ,EAAQA,EAAMgQ,OAAS,KACrC/oB,KAAKqd,KAAOtE,EAAQA,EAAMsE,KAAO,KACjCrd,KAAKmtE,cAAgBp0D,EAAQA,EAAMo0D,cAAgB,KACnDntE,KArgBEgxI,UAASj4H,EAAUA,EAAAi4H,UAAA,KAsgBrBhxI,KArgBI0xW,iBAAQ34V,EAAAA,EAAA24V,iBAAA,KAsgBZ1xW,KArgBI2xW,qBAAO54V,EAAAA,EAAA44V,qBAAA,KAsgBX3xW,KAAK4xW,yBAA2B74V,EAAQA,EAAM64V,yBAA2B,KAEzE5xW,KAAK6xW,mBAAqB,WACxB,IAAIF,EAAuB3xW,KAAK2xW,qBAjgBlC,OAkgBMA,MAAAA,IApgBRA,EAAqB3xW,KAAW0xW,iBAAA1xW,KAAA+oB,QAEtBkN,EAAAi3K,WAAWykK,EAAa,CAAA,EAAA17U,EAAAi3K,WAAAltM,KAAA+oB,OAAA,CAAA,C,uBAyepC/qB,QACGC,OAAO,6BAA8B,EAAA,EACrC4mQ,QArgBQ,gBAAY4sG,CAAA,C,IAuiBzB,CAAA,WACE,aAOA,SArgBEK,EAsgBAC,EACAp0K,EACAG,GAqFA,OAlFA,SArgBkB/kL,GA4gBhB,GALA/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KAAKgyW,oBArgBQj5V,EAAAA,EAAAi5V,oBAAA,KAsgBbhyW,KAAKyhM,qBAAuB1oL,EAAQA,EAAM0oL,qBAAuB,KACjEzhM,KAAK2hM,YAAc5oL,CAAAA,CAAAA,GAAQA,EAAM4oL,YACjC3hM,KArgBEigM,iBAAO,GAsgBLlnL,GAASA,EAAMknL,iBACjB,IAAK,IAAIxsJ,EAAI,EAAGA,EAAI16B,EAAMknL,iBAAiB7yL,OAAQ,EAAEqmC,EAC9C16B,EAAMknL,iBAAiBxsJ,GAAGw+T,cApgBrCjyW,KAAYigM,iBAAA3vL,KAAuB,IAAAyhW,EAAgBh5V,EAAAknL,iBAAAxsJ,EAAA,CAAA,EAygBhDzzC,KAAKugM,OAAS,IAAI5C,EApgBjB5kL,GAAAA,EAAAoqL,SAAApqL,EAAAoqL,QAAA/1L,SAsgBApN,KArgBEugM,OAAO,IAAA5C,EAAAu0K,qBAAAn5V,EAAAoqL,QAAA,EAAA,GAygBXnjM,KArgBIukW,gBAAe,WAsgBjB,IArgBI4N,EAAA,GAygBJ,OAHAnyW,KAAKigM,iBArgBI/+L,QAAA,SAAAg/L,GAsgBPliM,QArgBEqhB,OAAA8yV,EAAAjyK,EAAmCqkK,gBAAA,CAAA,C,GAugBhC4N,C,EAGTnyW,KArgBIykW,cAAA,WAsgBF,IAAI2N,EAAa,GAIjB,OAHApyW,KAAKigM,iBAAiB/+L,QAAQ,SAASg/L,GACrCliM,QAAQqhB,OAAO+yV,EAAYlyK,EAAeukK,cAAA,CAAA,C,GAErC2N,C,EAlgBTpyW,KAAI0kW,wBAA0B,WAsgB5B,IAAI0N,EAAa,GAIjB,OAxgBFpyW,KAAIigM,iBAAQ/+L,QAAc,SAAAg/L,GAsgBtBliM,QAAQqhB,OAAO+yV,EAAYlyK,EAAewkK,wBAAA,CAAA,C,GAngBrC0N,C,EAwgBTpyW,KAAKmmW,SAAW,SAAS3mV,GApgBvB,IAAA,IAASi0B,EAAA,EAAAA,EAAUzzC,KAAIigM,iBAAQ7yL,OAAA,EAAAqmC,EAAA,CAC7B,IAAIxnC,EAAAjM,KAAWigM,iBAAYxsJ,GAAA0yT,SAAa3mV,CAAA,EAsgBxC,GArgBEvT,EAsgBA,OArgBKA,C,GA0gBXjM,KArgBEqyW,QAAS,SAAUC,GAsgBnB,IArgBEpyK,EAAAlgM,KAAqBigM,iBAAO76L,KAAA,SAAA86L,GAsgB5B,OAAOA,EAAeR,KAAKn/L,KAAO+xW,C,GAEpC,OAAIpyK,EApgBCA,EAAAR,KAugBE,I,EAGT1/L,KAAK4jM,kBAAoB,SAAS0uK,GApgBlC,OAAItyW,KAAQigM,iBAAA76L,KAAsB,SAAA86L,GAsgB9B,OAAOA,EAAeR,KAAKn/L,KAAO+xW,C,IAItCtyW,KArgBIuyW,UAAU,WAsgBZ,OAAOvyW,KAAKgyW,sBAAwBl0K,EAAoBa,O,EAG1D3+L,KArgBI0hM,SAAI,WAsgBN,OArgBI1hM,KAAAgyW,sBAA6Bl0K,EAAQwB,M,+DAgb/CthM,QACGC,OArgBC,0BAAoB,EAAA,EAsgBrB4mQ,QArgBG,eAAgBitG,CAAA,C,IAqmBxB,CAAA,WACE,aAEA9zW,QACGC,OAAO,mDAAoD,EAAA,EAC3D4mQ,QAAQ,oCAGX,WAhfA,OApBA,SAAA9rP,GA2gBI/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KApgB/BP,KAAIs1C,IAAQv8B,EAAAA,EAAAu8B,IAAA,KAsgBVt1C,KAAKo1C,gBAAkBr8B,EAAQA,EAAMq8B,gBAAkB,KApgBzDp1C,KAAI6wJ,qBAAuB93I,EAAAA,EAAA83I,qBAAA,KAsgBzB7wJ,KAAK05U,qBAAuB3gU,EAAQA,EAAM2gU,qBAAuB,KApgBnE15U,KAAMgmB,IAAAjN,EAAAA,EAAiBiN,IAAA,KACrBhmB,KAAAkmB,QAAWnN,EAAAA,EAAAmN,QAAA,KAsgBXlmB,KAAKm1C,gBAAkBp8B,EAAQA,EAAMo8B,gBAAkB,KACvDn1C,KAAK+oB,OAAShQ,EAAQA,EAAMgQ,OAAS,KACrC/oB,KAAKuzC,WAAax6B,EAAQA,EAAMw6B,WAAa,KAC7CvzC,KAAK+zC,qBAAuBh7B,EAAQA,EAAMg7B,qBAAuB,I,EApBrB,C,IA6BlD,CAAA,WACE,aApgBA/1C,QACEC,OAAA,4BAAA,EAAA,EACA4mQ,QAAA,gBAygBF,WAcE,OAlhBA,SAAA9rP,GACA/Y,KAAAO,GAAAwY,EAAAA,EAAAxY,GAAA,KACAP,KAAAo1C,gBAAAr8B,EAAAA,EAAAq8B,gBAAA,KACAp1C,KAAAw0C,iBAAAz7B,EAAAA,EAAAy7B,iBAAA,GACAx0C,KAAAunC,UAAAxuB,EAAAA,EAAAwuB,UAAA,KACAvnC,KAAA4M,SAAAmM,EAAAA,EAAAnM,SAAA,KACA5M,KAAI6Z,QAAUd,EAAAA,EAAAc,QAAA,I,EAXd,C,IA4hBJ,CAAA,WACE,aAEA7b,QACGC,OAtgBO,8BAAkB,EAAA,EAugBzB4mQ,QAtgBO,iBAygBV,WA+CE,OA9CA,SAAwB9rP,GAiCtB,GAliBF/Y,KAAAO,GAAQwY,EAAAA,EAAiBxY,GAAA,KACvBP,KAAIs1C,IAAAv8B,EAAYA,EAAAu8B,IAAc,KAugB9Bt1C,KAtgBE4W,WAAImC,EAAAA,EAAAnC,WAAA,KAugBN5W,KAtgBG4tC,aAAU70B,EAAUA,EAAA60B,aAA0B,KAugBjD5tC,KAtgBEo1C,gBAAer8B,EAAYA,EAAAq8B,gBAAa,KAugB1Cp1C,KAtgBI6wJ,qBAAkB93I,EAAAA,EAAA83I,qBAAA,KAugBtB7wJ,KAAK05U,qBAtgBW3gU,EAAAA,EAAA2gU,qBAAA,KAugBhB15U,KAAKkmB,QAtgBSnN,EAAQA,EAAAmN,QAAS,KAugB/BlmB,KAAKuyC,aAtgBUx5B,EAASA,EAAAw5B,aAAA,KAugBxBvyC,KAAKm1C,gBAAkBp8B,EAAQA,EAAMo8B,gBAAkB,KACvDn1C,KAtgBI+oB,OAAIhQ,EAASA,EAAQgQ,OAAA,KAugBzB/oB,KAAK4rF,wBAtgBmB7yE,EAASA,EAAA6yE,wBAAA,KAugBjC5rF,KAAK2rF,wCAA0C5yE,EAAQA,EAAM4yE,wCAA0C,KACvG3rF,KAAK64U,2CAA6C9/T,EAAQA,EAAM8/T,2CAA6C,KAC7G74U,KAAKgM,eAAiB+M,EAAQA,EAAM/M,eAAiB,KACrDhM,KAAKusF,mBAAqBxzE,EAAQA,EAAMwzE,mBAAqB,KAC7DvsF,KAAKwxW,qBAAuBz4V,EAAQA,EAAMy4V,qBAAuB,KArgBnExxW,KAAAygF,gBAAyB1nE,EAAAA,EAAY0nE,gBAAA,KACnCzgF,KAAA24U,2BAAQ5/T,EAAAA,EAAA4/T,2BAAA,KAugBR34U,KAtgBE4gF,eAAQ7nE,EAAaA,EAAA6nE,eAAA,KAugBvB5gF,KAtgBE69C,wBAAqB9kC,EAAAA,EAAA8kC,wBAAA,KAugBvB79C,KAAKwyW,cAAgBz5V,EAAQA,EAAMy5V,cAAgB,KACnDxyW,KAAK2hC,cAAgB5oB,CAAAA,CAAAA,GAAQA,EAAM4oB,cApgBrC3hC,KAAA6zD,YAAkB96C,EAAUA,EAAK86C,YAAA,KAC/B7zD,KAAA+zD,YAAMh7C,EAAAA,EAAAg7C,YAAA,KAwgBN/zD,KAtgBIw0C,iBAAgB,GAugBhBz7B,EAAMy7B,iBACR,IAtgBC,IAAKf,EAAA,EAAUA,EAAA16B,EAAMy7B,iBAAApnC,OAAAqmC,CAAA,GAAA,CACpB,IAAA/5B,EAAiBX,EAAAy7B,iBAAAf,GAugBjBzzC,KAtgBEw0C,iBAAKlkC,KAugBL,CACE/P,GAAImZ,EAAenZ,GACnB8c,KAAM3D,EAAem3I,sBAAwBn3I,EAAe2D,I,KAjjB7C,C,IA6jB7B,CAAA,WACE,aAOA,SAtgBIo1V,EAAe93S,EAAA2/C,EAAoBrM,EAAAykQ,GAkpBrC,OA1IA,SAtgBY35V,GAugBV/Y,KAtgBEO,GAAKwY,EAAAA,EAAYxY,GAAA,KAugBnBP,KAAK80N,SAAW/7M,EAAQA,EAAM+7M,SAAW,KACzC90N,KAAKsd,WAAavE,EAAQA,EAAMuE,WAAa,KAC7Ctd,KAAKqsE,UAAYtzD,EAAQA,EAAMszD,UAAY,KArgB7CrsE,KAAAyH,MAAQsR,EAAAA,EAAkBtR,MAAU,KAClCzH,KAAAu9B,MAAUxkB,EAAAA,EAAAwkB,MAAA,KAugBVv9B,KAtgBE87B,QAAU/iB,EAAAA,EAAA+iB,QAAA,KAugBZ97B,KAtgBK2jE,KAAA5qD,EAAAA,EAAoB4qD,KAAA,KAugBzB3jE,KAtgBK0rI,SAAM3yH,EAAAA,EAAA2yH,SAAA,KAugBX1rI,KAtgBKwC,WAAYuW,GAAAA,EAAAvW,WAAA,IAAA0hD,KAAAnrC,EAAAvW,UAAA,EAAA,KAugBjBxC,KAtgBK2yW,kBAAiB55V,GAAQA,EAAA45V,kBAAa,IAAAzuT,KAAAnrC,EAAA45V,iBAAA,EAAA,KAugB3C3yW,KAAKmlM,YAAcpsL,GAASA,EAAMosL,YAAc,IAAIjhJ,KAAKnrC,EAAMosL,WAAA,EAAe,KAC9EnlM,KAAK4yW,OAAS75V,GAASA,EAAM65V,OAAS,IAAI1uT,KAAKnrC,EAAM65V,MAAA,EAAU,KAC/D5yW,KAAK6yW,YAAc95V,GAASA,EAAM85V,YAAc,IAAI3uT,KAAKnrC,EAAM85V,WAAA,EAAe,KAC9E7yW,KAAKmjB,MAAQpK,EAAQA,EAAMoK,MAAQ,KACnCnjB,KAAKsiW,8BAAgCvpV,CAAAA,CAAAA,GAAQA,EAAMupV,8BACnDtiW,KAAK8yW,yBAA2B/5V,CAAAA,CAAAA,GAAQA,EAAM+5V,yBApgBlD9yW,KAAA+yW,aAAAh6V,GAAAA,EAAAg6V,aAAAh6V,EAAAg6V,aAAA,GAugBI/yW,KAAKgzW,kCAAoCj6V,CAAAA,CAAAA,GAAQA,EAAMi6V,kCArgB3DhzW,KAAAizW,+BAAAl6V,CAAAA,CAAAA,GAAAA,EAAAk6V,+BACGjzW,KAAAkzW,yBAA6Bn6V,CAAAA,CAAAA,GAAAA,EAAAm6V,yBAC7BlzW,KAAAmzW,wBAAmBp6V,CAAAA,CAAAA,GAAAA,EAAAo6V,wBAugBlBnzW,KAAKozW,eAAiBr6V,CAAAA,CAAAA,GAAQA,EAAMq6V,eACpCpzW,KAAKqzW,OAASt6V,EAAQA,EAAMs6V,OAASplQ,EAAgBqlQ,wBArgBzDtzW,KAASuzW,eAAWx6V,CAAAA,CAAAA,GAAAA,EAAAw6V,eAugBhBvzW,KAAKwzW,oBAAsBz6V,EAAQA,EAAMy6V,oBAAsB,KArgBjExzW,KAAAyzW,uBAAwB16V,CAAAA,CAAAA,GAAAA,EAAA06V,uBACtBzzW,KAAK0zW,sBAAqB36V,EAAOA,EAAA26V,sBAAA,KACjC1zW,KAAK2zW,kBAAgB56V,CAAAA,CAAAA,GAAMA,EAAW46V,kBACtC3zW,KAAK4zW,wBAAsB76V,EAAMA,EAAA66V,wBAA4B,KAC7D5zW,KAAK6zW,qBAAoB96V,CAAAA,CAAAA,GAAMA,EAAW86V,qBAC1C7zW,KAAK8zW,iBAAY/6V,EAAcA,EAAA+6V,iBAAY,KAC3C9zW,KAAK+zW,UAAAh7V,EAAaA,EAAQg7V,UAAM,GAChC/zW,KAAKg0W,gBAAiBj7V,EAAMA,EAASi7V,gBAAA,KACrCh0W,KAAKilM,SAAAlsL,CAAAA,CAAAA,GAAaA,EAAQksL,SAE1BjlM,KAAK6hF,KAAA9oE,EAAYA,EAAQ8oE,KAAM,KAugB/B7hF,KAAKi0W,WAAal7V,EAAQA,EAAMk7V,WAAa,KAC7Cj0W,KAAKk0W,QAAUn7V,EAAQA,EAAMm7V,QAAU,KACvCl0W,KAAKm0W,MAAQp7V,EAAQA,EAAMo7V,MAAQ,KACnCn0W,KAAKo0W,OAASr7V,EAAQA,EAAMq7V,OAAS,KACrCp0W,KAAKq0W,OAASt7V,EAAQA,EAAMs7V,OAAS,KArgBvCr0W,KAAOs0W,WAAAv7V,EAAAA,EAAAu7V,WAAA,KAugBLt0W,KAAKu0W,WAAax7V,EAAQA,EAAMw7V,WAAa,KAC7Cv0W,KAAKw0W,aAAez7V,EAAQA,EAAMy7V,aAAe,KACjDx0W,KAAKy0W,YAAc17V,EAAQA,EAAM07V,YAAc,KAC/Cz0W,KAAK00W,SAAW37V,EAAQA,EAAM27V,SAAW,KApgB7C10W,KAAAwkM,aAAAzrL,EAAAA,EAAAyrL,aAAA,KA2gBIxkM,KAAK20W,YAAc57V,GAASA,EAAM47V,YAAc57V,EAAM47V,YAAcjC,EAA4B1yW,KAAK87B,SACrG97B,KAAK40W,UAAY,GAjgBjB50W,KAAK60W,SAAW,WAChB,IAAKC,EAAa90W,KAAA80N,SAAYlhM,MAAK,KAAA,EACnC5zB,KAAKsd,WAAew3V,EAAaA,EAAA,GAAA90W,KAAA80N,SAC5BggJ,GACLA,EAAKx6O,MAAA,EAwgBHt6H,KAAKqsE,UAAYyoS,EAAcA,EAAY5gW,KAAK,GAAA,EAAOlU,KAAK80N,Q,EAG9D90N,KAAK+0W,UAAY,WArgBZ/0W,KAAA20W,aAAA,IAAA30W,KAAA40W,UAAA97T,QAAA94C,KAAA20W,WAAA,IAugBD30W,KAAKu9B,MAAQv9B,KAAK20W,YAAc30W,KAAK40W,U,EAlgB9C50W,KAAAg1W,eAAY,WACXh1W,KAAA6hF,KAAA,CAugBQl4E,OAAQgxD,EAAS55D,IAAI,cAAA,EAAkB0d,KAAK6L,MAAMqwC,EAAS55D,IAAI,cAAA,CAAA,EAAmBu5G,EAAUxhG,OAAA,C,EApgBjG9Y,KAAOi0W,WAAAt5S,EAAsB55D,IAAA,YAAA,EAC7Bf,KAAQk0W,QAAAl0W,KAAWi1W,qBAAA,SAAA,EAugBhBj1W,KAAKm0W,MAAQn0W,KAAKi1W,qBAAqB,OAAA,EACvCj1W,KAAKo0W,OAASp0W,KAAKi1W,qBAAqB,QAAA,EArgB9Cj1W,KAASq0W,OAAWr0W,KAAAi1W,qBAAA,QAAA,EAugBdj1W,KAAKs0W,WAAat0W,KAAKi1W,qBAAqB,YAAA,EArgBhDj1W,KAASu0W,WAAQv0W,KAAOi1W,qBAAA,YAAA,EAugBpBj1W,KAAKw0W,aAAex0W,KAAKi1W,qBAAqB,cAAA,EAC9Cj1W,KAAKy0W,YAAcz0W,KAAKi1W,qBAAqB,aAAA,EAC7Cj1W,KAAK00W,SAAW10W,KAAKi1W,qBAAqB,UAAA,C,EAG5Cj1W,KAAKk1W,gBAAkB,WACrB,IAAIC,EAAcn1W,KAAKi1W,qBAAqB,cAAA,EACxCE,IArgBNn1W,KAAKwkM,aAAe2wK,GAwgBbn1W,KAAKwkM,eArgBZxkM,KAAKwkM,aAAmB,KAwgBtBxkM,KAAKwkM,aAAelwK,OAAOt0B,KAAKwkM,YAAA,C,EAGlCxkM,KAAKo1W,UAAY,WACVp1W,KAAKyH,QArgBdzH,KAAOyH,MAAAzH,KAAAi1W,qBAAA,OAAA,E,EA6gBLj1W,KAAKi1W,qBAAuB,SAAUI,GAtgB1C,IAAAhvO,EAAA,KAKSttH,EAAM,KAMX,MAAwB,UAAnB,OAAWA,IATjBstH,EADO1rE,EAAA55D,IAAA,cAAA,EACC0d,KAAQ6L,MAAAqwC,EAAA55D,IAAA,cAAA,CAAA,EA2gBTslI,IAAUA,EAAOgvO,GAtgBXhvO,EAEP/rB,EAAUxhG,OAAA,GAFIu8V,IAIWt8V,EAAW,GAAAA,C,EAMzC/Y,KAAKg1W,eAAA,EAwgBLh1W,KAAKk1W,gBAAA,EAtgBLl1W,KAAKo1W,UAAA,C,qFA4XTp3W,QACGC,OAAO,wBAAyB,EAAA,EAChC4mQ,QAAQ,YAAa4tG,CAAA,C,IAoJ1B,CAAA,WACE,aAEAz0W,QACGC,OAvgBM,yBAAuB,EAAA,EAwgB7B4mQ,QAAQ,aAGX,WAkEE,OAhEA,SAASywG,EAAWv8V,GAClB/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KAAK+zG,OAASh7F,EAAQA,EAAMg7F,OAAS,KAtgBrC/zG,KAAKyB,SAAAsX,EAAAA,EAAyBtX,SAAQ,KACtCzB,KAAKsF,KAAAyT,EAAYA,EAAQzT,KAAM,KAwgB/BtF,KAAK2E,MAAQoU,EAAQA,EAAMpU,MAAQ,KACnC3E,KAAKm8J,OAASpjJ,EAAQA,EAAMojJ,OAAS,KAtgBrCn8J,KAAK28B,KAAA5jB,EAAeA,EAAA4jB,KAAU,KAwgB9B38B,KAvgBEu1W,YAAYx8V,EAAUA,EAAAw8V,YAAW,KAwgBnCv1W,KAAK6pB,KAAO9Q,EAAQA,EAAM8Q,KAAO,KACjC7pB,KAAKipM,MAAQ,KAtgBbjpM,KAAKw4E,OAAA,CAAA,EAwgBLx4E,KAvgBEw1W,WAAY,GAwgBVz8V,GAASA,EAAMkwL,QACjBjpM,KAAKipM,MAAQlwL,EAAMkwL,MAtgBrBjpM,KAAKw1W,WAAAz8V,EAAkBkwL,MAAAp3K,MAygBvB7xB,KAAK85O,WAAa/gO,EAAQA,EAAM+gO,WAAa,KAC7C95O,KAAK/B,OAAS8a,EAAQA,EAAM9a,OAAS,KAtgBrC+B,KAAKwf,WAAAzG,EAAkBA,EAAAyG,WAAU,KAwgBjCxf,KAvgBEy1W,aAAY18V,EAAUA,EAAA08V,aAAW,KAwgBnCz1W,KAAK01W,KAAO,CAAA,EArgBZ11W,KAAK21W,SAAA,GAygBL,IAAI51W,EAAKC,KACL+Y,EAAM48V,UAtgBV58V,EAAK48V,SAAAngU,KAAA,SAAqBpsC,EAAAssD,GACxB,OAAOtsD,EAAA3H,SAAei0D,EAAAj0D,Q,GAwgBnBP,QAAQ,SAAU00W,EAAS9wU,GAC5B8wU,EAAQ7hQ,OAASjvE,EAAQ,EAtgBxB9Z,EAAA,IAAAsqV,EAAoBM,CAAA,EACvB71W,EAAA41W,SAAYrlW,KAAA0a,CAAA,C,GA2gBdhrB,KAvgBEk+I,QAAY,WAwgBZ,GAtgBO,YADLl+I,KAAOsF,KAygBL,MAAO,uB,EAIbtF,KAAK61W,aAAe,WAClB,OAAO71W,KAAK01W,KAAO,eAAiB,a,EAGtC11W,KAAKstJ,UAAY,WACf,OAAOttJ,KAAK01W,MAAS11W,KAAK21W,SAASvoW,QAAU,CAACpN,KAAK21W,SAASr2U,KAAK,SAAUtU,GACzE,MAAO,CAACA,EAAK0qV,I,IAIjB11W,KAAK81W,oBAAsB,SAAUv1W,GACxBP,KAAK21W,SAASvwW,KAAK,SAAU4lB,GAtgB/C,OAAYA,EAAAzqB,IAAAA,C,GAygBAm1W,KAAO,CAAA,C,GA9DO,C,IAyE3B,CAAA,WACE,aAEA13W,QACGC,OAvgBM,6BAA2B,EAAA,EAwgBjC4mQ,QAvgBM,iBA0gBT,WAaE,OAXA,SAvgBOpuJ,GAKLz2G,KAAKO,GAAAk2G,EAAgBA,EAAMl2G,GAAQ,KACnCP,KAAK6Z,QAAS48F,EAAQA,EAAM58F,QAAS,KAwgBrC7Z,KAAKqd,KAAOo5F,EAAWA,EAASp5F,KAAO,KACvCrd,KAAK2P,eAAiB8mG,EAAWA,EAAS9mG,eAAiB,I,EAphBvC,C,IA2hB1B,CAAA,WACE,aAOA,SAxgBGomW,EAAQl2W,GAwiBT,OA9BA,SAAqBkZ,GAvgBvB/Y,KAASg2W,iCAAsB,IAE7Bh2W,KAAAO,GAASwY,EAAAA,EAAcxY,GAAO,KAygB5BP,KAAKqd,KAAOtE,EAAQA,EAAMsE,KAAO,KACjCrd,KAAKoN,OAAS2L,EAAQA,EAAM3L,OAAS,KACrCpN,KAAKozD,OAASr6C,EAAQA,EAAMq6C,OAAS,KACrCpzD,KAAK8lB,MAAQ/M,EAAQA,EAAM+M,MAAQ,KAvgBnC9lB,KAAK6sE,QAAK9zD,CAAAA,CAAAA,GAAQA,EAAW8zD,QAygB7B7sE,KAAKkmB,QAAUnN,CAAAA,CAAAA,GAAQA,EAAMmN,QArgB7BlmB,KAAKi2W,gBAAep2W,EAAMga,QAAOw8I,iBAAAx9G,YAAA,EAGjC74C,KAAK8+V,YAAA,WACL,OAAK9+V,KAAAqd,KAAA,KAAuBrd,KAAAoN,OAAcpN,KAAAi2W,gBAAuB,MAAAj2W,KAAA8lB,MAAA9lB,KAAAi2W,gBAAA,MAAAj2W,KAAAozD,OAAApzD,KAAAi2W,gBAAA,G,EAGjEj2W,KAAKk2W,oBAAqB,WACxB,OAAI,OAAAl2W,KAAAoN,QAA4B,OAALpN,KAAK8lB,OAAA,OAAA9lB,KAAAozD,OAC5BpzD,KAAAoN,OAAApN,KAAyB8lB,MAAQ9lB,KAAAozD,OAAApzD,KAAAg2W,iCA0gB9B,I,yBAriBbh4W,QAwgBGC,OAAO,0BAA2B,EAAA,EAClC4mQ,QAAQ,cAAekxG,CAAA,C,IAwC5B,CAAA,WAxgBE,aA2gBE/3W,QACGC,OAAO,gCAAiC,EAAA,EACxC4mQ,QAAQ,mBAtgBX,WAskBE,OApkBF,SAAA9rP,GA0gBI/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAxgBjCP,KAAS6Z,QAAAd,EAAaA,EAAOc,QAAA,KAE3B7Z,KAAKqd,KAAKtE,EAAQA,EAAMsE,KAAK,KAC7Brd,KAAKooC,QAAArvB,EAAAA,EAAsBqvB,QAAc,KACzCpoC,KAAKsoC,eAAAvvB,EAAuBA,EAAQuvB,eAAM,KAC1CtoC,KAAKgoC,OAAAjvB,EAAcA,EAAQivB,OAAM,KACjChoC,KAAKkoC,OAAAnvB,EAAmBA,EAAAmvB,OAAA,KACxBloC,KAAI6Z,QAASd,EAAMA,EAAAc,QAAkB,KA4gBnC7Z,KAzgBIm2W,aAAK,SAAiBp9V,GA0gBxB,IAQQq9V,EARR,OAAKr9V,EAtgBU,CAAA,IAAbA,EAAA+/B,QAAa,IAAA,EACiB,CAAA,IAAhC//B,EAAS+/B,QAAM,MAAA,GACZu9T,GAAS,IAAInyT,MAAO0vE,YAAA,EAAA//F,SAAA,EA0gBZ9a,EAAMtO,QAAQ,OAAQ4rW,CAAA,IAEzBD,GAAK,IAAIlyT,MAAO0vE,YAAA,EAAc//F,SAAA,EAAW6hH,OAAO,CAAA,EAxgBvD38H,EAAAtO,QAAkB,KAAW2rW,CAAA,GAG9Br9V,EA8fS,E,EAcX/Y,KAAKs2W,WAAa,WAChB,OAAOt2W,KAAKm2W,aAAan2W,KAAKgoC,MAAA,C,EAtgBhChoC,KAAKu2W,WAAA,WACH,OAAAv2W,KAAQm2W,aAAOn2W,KAAYkoC,MAAA,C,EA4gB7BloC,KAAKw2W,YAAc,WACjB,GAAI,CAACx2W,KAAKooC,QAxgBT,MAAA,GAEH,GAAKpoC,KAAAooC,QAAAvU,SAAA,EAAyBzmB,QAASpN,KAAAsoC,eACrC,OAAQtoC,KAAAooC,QA4gBR,IA1gBF,IAAAquU,EAAO,GA0gBIhjU,EAAI,EAAGA,EAAIzzC,KAAKsoC,eAAiBtoC,KAAKooC,QAAQvU,SAAA,EAAWzmB,OAAQ,EAAEqmC,EAC1EgjU,GAAS,IAvgBb,OAASA,EAAOz2W,KAAIooC,QAAKvU,SAAA,C,EA4gBzB7zB,KAzgBIwoC,WAAO,WA0gBT,OAAOxoC,KAAKs2W,WAAA,EAAet2W,KAAKw2W,YAAA,EAAgBx2W,KAAKu2W,WAAA,C,GAxD5B,C,IAsEnC,CAAA,WACE,aAEAv4W,QACGC,OAAO,kDAAmD,EAAA,EAC1D4mQ,QAAQ,mCAGX,WAqBE,OAnBA,SAzgB4B9rP,GA2gB1B/Y,KAAKwC,WAAauW,GAASA,EAAMvW,WAAa,IAAI0hD,KAAKnrC,EAAMvW,UAAA,EAAc,KAC3ExC,KAAK+8L,WAAahkL,GAASA,EAAMgkL,WAAa,IAAI74I,KAAKnrC,EAAMgkL,UAAA,EAAc,KAC3E/8L,KAAKy3E,YAAc1+D,EAAQA,EAAM0+D,YAAc,KAC/Cz3E,KAAKo2Q,mBAAqBr9P,EAAQA,EAAMq9P,mBAAqB,KAC7Dp2Q,KAAKs2Q,aAAev9P,EAAQA,EAAMu9P,aAAe,KACjDt2Q,KAAKw2Q,gBAAkBz9P,EAAQA,EAAMy9P,gBAAkB,KACvDx2Q,KAAK02Q,oBAAsB39P,EAAQA,EAAM29P,oBAAsB,KAxgBjE12Q,KAAO42Q,gBAAA79P,EAAAA,EAAA69P,gBAAA,KA0gBL52Q,KAAK82Q,cAAgB/9P,CAAAA,CAAAA,GAAQA,EAAM+9P,cAGnC92Q,KAAK+2Q,UAAY,KAxgBtB/2Q,KAAWo2Q,qBACVp2Q,KAAA+2Q,UAdkB,2DAclBtsQ,QAAA,YAAAzK,KAAAo2Q,kBAAA,E,EAqf+C,C,IA6BjD,CAAA,WACE,aAOA,SAzgBSsgG,EAAAt3W,EACAsG,EACclG,GA0lBrB,OA/EA,SAzgBOuZ,GACL/Y,KAAK4xB,YAAS7Y,EAAQ6Y,YACtB5xB,KAAKkiB,WAAa,GAClBliB,KAAK8Z,SAAA,GA0gBL9Z,KAAKkG,SAAW,CAAA,EAChBlG,KAAKgxB,gBAAkB,GACvBhxB,KAAKysC,YAAc,GAEnBzsC,KAAKqxB,sBAWL,SAA+BhL,GAxgBnCrmB,KAASkG,SAAA,CAAA,EA0gBH,IAAIywW,EAAQ32W,KAxgBhBZ,EAAAgB,YAAS0Z,SAAcqvB,KAAO,CAC5BssK,aAAkBpvL,EAAM9lB,GACxBi1M,mBAAuBx1M,KAAA4xB,YACvBne,WAAK,6BACLmjW,iBAAiB,2B,EACZ,SAAAzwW,EAAmBC,EAAAvF,GACnBA,IAAUrB,EAAcsB,cA0gBvB61W,EAAM78V,SAAW3T,EAAQA,QACzBwwW,EAAM3lV,gBAAkB7qB,EAAQ0wW,SAChCF,EAAMlqU,YAActmC,EAAQumC,MAI9BiqU,EAAMzwW,SAAW,CAAA,C,IA1BrBlG,KAAKmxB,YA3eV,WACC,CAAA,IAEAwlV,EAFA32W,KAAAysC,cA0gBQzsC,KAAKkG,SAAW,CAAA,EAxgBxBywW,EAAA32W,KACG0F,EAAO3E,IAAAf,KAAAysC,WAAA,EAAA3nC,KACP,SAAQqB,GA0gBwB,MAAnBA,EAAQtF,SACV81W,EAAM78V,SAAW3T,EAAQ2C,KAAK3C,QAxgBnCwwW,EAAA3lV,gBAAkB7qB,EAAA2C,KAAA+tW,SAChBF,EAAAlqU,YAAsBtmC,EAAA2C,KAAA4jC,MA6gBrBiqU,EAAMzwW,SAAW,CAAA,C,MA1CzBlG,KAAKixB,gBA1dL,WACA,CAAA,IAEK0lV,EAFA32W,KAAAgxB,kBACLhxB,KAAKkG,SAAA,CAAA,EACAywW,EAAU32W,KACf0F,EAAK3E,IAAAf,KAAAgxB,eAAA,EAA6BlsB,KAC7B,SAAAqB,GACuB,MAAvBA,EAAStF,SACT81W,EAAA78V,SAAA3T,EAA0B2C,KAAQ3C,QAClCwwW,EAAA3lV,gBAAA7qB,EAAA2C,KAA0C+tW,SAC1CF,EAAAlqU,YAAAtmC,EAAA2C,KAAA4jC,MAIAiqU,EAAAzwW,SAAkB,CAAA,C,MA1D5BlG,KAAAkG,SAAY,CAAA,EACX,IAAAywW,EAAA32W,KA0gBIZ,EAAIgB,YAAY8hB,WAAWinB,KAAK,SAAUhjC,GAxgB9CwwW,EAAAzwW,SAAA,CAAA,EACGywW,EAAOz0V,WAAA/b,EAAAA,O,4CAgfVnI,QACGC,OAAO,8BAA+B,EAAA,EACtC4mQ,QAzgBM,iBAAmB6xG,CAAA,C,IAomB9B,CAAA,WACE,aAEA14W,QACGC,OAAO,wBAAyB,EAAA,EAChC4mQ,QAAQ,YAGX,WAeE,OAthBA,SAAO9rP,GA0gBL/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KAAKwC,WAAauW,GAASA,EAAMvW,WAAa,IAAI0hD,KAAKnrC,EAAMvW,UAAA,EAAc,KAC3ExC,KAAK+8L,WAAahkL,GAASA,EAAMgkL,WAAa,IAAI74I,KAAKnrC,EAAMgkL,UAAA,EAAc,KAC3E/8L,KAAKunC,UAAYxuB,GAASA,EAAMwuB,UAAYxuB,EAAMwuB,UAAY,KAxgBnEvnC,KAAAk2D,eAAYn9C,GAAAA,EAAAm9C,eAAAn9C,EAAAm9C,eAAA,KACXl2D,KAAA4iN,KAAA7pM,GAAAA,EAAA6pM,KAAA7pM,EAAA6pM,KAAA,KA0gBI5iN,KAAKisC,MAAQlzB,GAASA,EAAMkzB,MAAQ,IAAIiY,KAAKnrC,EAAMkzB,KAAA,EAAS,I,EAZxC,C,IAuB1B,CAAA,WACE,aAOA,SA1gBS6qU,EA2gBPC,EACAC,GA2FA,OAxFA,SA1gBej+V,GASb,GARA/Y,KAAKO,GAAAwY,EAAAA,EAAAxY,GAAA,KACLP,KAAKqd,KAAAtE,EAAAA,EAAAsE,KAA2B,GA2gBhCrd,KAAKsD,MAAQyV,EAAQA,EAAMzV,MAAQ,EAzgBnCtD,KAAKi3W,YAAAl+V,EAAeA,EAASk+V,YAAM,KACnCj3W,KAAKk3W,aAAAn+V,GAAAA,EAAAm+V,aAA4C,CAAAn+V,EAAMm+V,aAAA,KACvDl3W,KAAK+5K,iBAAAhhK,EAAAA,EAAiCghK,iBAAc,KACpD/5K,KAAKg6K,mBAAAjhK,EAA2BA,EAAQihK,mBAAM,KAC9Ch6K,KAAKm3W,cAAA,GACLp+V,GAAKA,EAAAo+V,cACL,IAAK,IAAA1jU,EAAS,EAAAA,EAAQ16B,EAAMo+V,cAAS/pW,OAAA,EAAAqmC,EACrCzzC,KAAKm3W,cAAiB7mW,KAAA,IAAQymW,EAAMh+V,EAAAo+V,cAAiB1jU,EAAA,CAAA,OAGrDzzC,KAAKm3W,cAAA7mW,KAAA,IAAwBymW,CAAA,EAI7B/2W,KAAKi3D,QAAA,WACL,OAAKj3D,KAAAo3W,gBAAA,GAA0Bp3W,KAAAm3W,cAAYlrS,MAAA,SAAAiuG,GAC3C,OAAKA,EAAkBjjH,QAAA,C,IAIvBj3D,KAAKo3W,gBAAa,WAClB,OAAKp3W,KAAAm3W,cAAkB73U,KAAM,SAAU46I,GAClC,OAAQA,EAAQm9L,gBAAA,C,GAEhBr3W,KAASi3W,cAAcD,EAASM,iBAAA,CAAA,CAAAt3W,KAAAi3W,cAAA,CAAA,CAAAj3W,KAAAk3W,cAAA,CAAA,CAAAl3W,KAAA+5K,kBAGhC,EAAA,CAAA/5K,KAAAi3W,aAAuB,CAAMj3W,KAAAk3W,cAAe,CAAAl3W,KAAA+5K,iB,EA6gBjD/5K,KAAK25K,gBAAkB,WAzgBvB35K,KAAKm3W,cAAe7mW,KAAA,IAAQymW,CAAA,C,EA6gB5B/2W,KAAKu3W,4BAA8B,SAAUzyU,GAC3C,OAAiB,IAAVA,GAA2C,EAA5B9kC,KAAKm3W,cAAc/pW,M,EAG3CpN,KAAKw3W,mBAAqB,SAAU1yU,GAClC9kC,KAAKm3W,cAAcpyU,OAAOD,EAAO,CAAA,EACC,IAA9B9kC,KAAKm3W,cAAc/pW,QACrBpN,KAAK25K,gBAAA,C,EAIT35K,KA1gBEy3W,yBAAiB,WA2gBjB,OA1gBc,EAAZz3W,KAAAm3W,cAAY/pW,QA2gBLpN,KAAKm3W,cAAcn3W,KAAKm3W,cAAc/pW,OAAS,GAAG6pD,QAAA,C,EAK7Dj3D,KA1gBE03W,wBAA6B,WA2gB7B,OA1gBOr2V,OAAAg3N,YAAah3N,OAAAi3N,QAAmB0+H,CAAA,EAAAx1V,OAAA,SAAArC,GA2gBrC,OAAO1P,MAAMy/D,SAAS/vD,CAAA,CAAA,C,KAI1Bnf,KA1gBE23W,aAAY,WA2gBZ,OA1gBE33W,KAAQi3W,cAAaD,EAAuBY,W,EA6gBhD53W,KA1gBE63W,0BAAoB,WACpB,MAAA,EAAA73W,KAAKi3W,cAAaD,EAAqBM,iBAAAt3W,KAAAm3W,cAAA73U,KAAA,SAAA46I,GACvC,OAAKA,EAAcm9L,gBAAA,C,IAKdr3W,KAAAi3W,cAAmBD,EAAqBM,iBAC7Ct3W,KAAKi3W,cAAgBD,EAAAc,kB,EAGvB93W,KAAK+3W,kBAAkB,WACrB/3W,KAAIk3W,aAAc,KAClBl3W,KAAI+5K,iBAAa,KA2gBjB/5K,KA1gBEg6K,mBAAoB,I,kDAgb5Bh8K,QACGC,OA1gBM,uBAAsB,EAAA,EA2gB5B4mQ,QA1gBM,WAAUiyG,CAAA,C,IA+mBrB,CAAA,WACE,aAOA,SAASkB,EACP14W,EACA85K,EACAluC,GA4HA,OAzHA,SA1gBcnyH,GA4gBZ/Y,KA1gBEi4W,iBAAc,SAAUl/V,GA2gBpB/Y,KAAKk4W,cAAA,EACPl4W,KAAKm4W,eAAiB,CAACp/V,EAEvB/Y,KAAKm4W,eAAiBp/V,C,EAtgB1B/Y,KAAKi3D,QAAA,WA2gBH,MAAO,GAAC,CAACj3D,KAAKq6K,eAAkB,CAACr6K,KAAKo4W,UAClC,CAACp4W,KAAKm4W,gBAAmB,CAACn4W,KAAK66K,oBAAuB,CAAC76K,KAAKq4W,sBAAyBr4W,KAAKs4W,cAAA,E,EAGhGt4W,KAAKu4W,0BAA4B,WAzgBnC,OAAOl3V,OAAAg3N,YAAAh3N,OAAAi3N,QAAAl/D,CAAA,EAAA53J,OAAA,SAAArC,GA2gBD,OAAO1P,MAAMy/D,SAAS/vD,CAAA,CAAA,C,KAtgB/Bnf,KAAAq3W,gBAAY,WACX,OAAAr3W,KAAAq6K,gBAAAjB,EAAAo/L,oB,EAGGx4W,KAAAs4W,cAAO,WACP,OAAQt4W,KAAAq6K,gBAAcjB,EAAAo/L,oB,EAGzBx4W,KAASy4W,sBAAc,WA2gBjB,OAAIz4W,KAAKq6K,gBAAkBjB,EAAoBs/L,wBAzgBnD14W,KAASq6K,gBAAkBjB,EAAAu/L,oBACzB34W,KAAKq6K,gBAAmBjB,EAAKmB,wBAC7Bv6K,KAAKq6K,gBAAiBjB,EAAeoB,2BACrCx6K,KAAKq6K,gBAAmBjB,EAAiBqB,wBACzCz6K,KAAKq6K,gBAAqBjB,EAAOkB,oBAC5B,CACAs+L,eAAiB,KACjBC,mBAAqB,K,EAGrB74W,KAAAq6K,gBAAQjB,EAAA0/L,oBACb94W,KAAKq6K,gBAASjB,EAAA2/L,eACT,CACDH,eAAe,KACjBC,mBAAmB,MACnBG,oBAAwB,KA2gBpBC,kBAAqB,I,EAvgBtBj5W,KAAAq6K,gBAAqBjB,EAAmB8/L,0BAC7Cl5W,KAAKq6K,gBAAejB,EAAc+/L,uBAC7B,CA2gBCC,mBAAsB,KAzgBvBC,4BAAW,MA2gBVT,eAAkB,KAzgBpBU,+BAAK,MACLC,sBAAgB,I,EAPpB,KAAA,C,EAshBAv5W,KA1gBIw5W,cAAe,WA2gBjB,OA1gBKx5W,KAAAq6K,gBAAcjB,EAAAs/L,wBA2gBjB14W,KAAKq6K,gBAAkBjB,EAAoBu/L,kB,EAvgB/C34W,KAAKy5W,YAAU,WACb,OAAAz5W,KAAQq6K,gBAAKjB,EAAA0/L,oBACX94W,KAAKq6K,gBAAAjB,EAAA2/L,c,EA6gBT/4W,KAAKk4W,cAAgB,WACnB,OAAOl4W,KAAKq6K,gBAAkBjB,EAAoB8/L,0BAzgBpDl5W,KAAKq6K,gBAAejB,EAAY+/L,sB,EA6gBhCn5W,KAAK05W,eAAiB,WAzgBtB,OAAK15W,KAAAq6K,gBAAwBjB,EAAAkB,qBAC3Bt6K,KAAOq6K,gBAAcjB,EAAwBmB,wBAC3Cv6K,KAAAq6K,gBAAajB,EAAAoB,2BA2gBbx6K,KAAKq6K,gBAAkBjB,EAAoBqB,sB,EAvgB/Cz6K,KAAK25W,sBAAsB,WACzB,GAAI35W,KAAAq6K,gBAAqBjB,EAAqBs/L,wBAC5C14W,KAAAq6K,gBAAkBjB,EAAAu/L,mBA2gBlB,OAAOztO,C,EAIXlrI,KAAK45W,YAAc,WACjB,GAAI55W,KAAKq6K,gBAAkBjB,EAAoB0/L,oBAC7C94W,KAAKq6K,gBAAkBjB,EAAoB2/L,eAC3C,OAAOz5W,EAAQ,WAAA,EAAa,0CAA2C,CAAEu6W,QAAS,QAAA,CAAA,C,EAItF75W,KAAK85W,oBAAsB,WAzgBhC95W,KAAYo4W,SAAA,KACXp4W,KAAAm4W,eAAA,KA2gBMn4W,KAAK66K,mBAAqB,KAzgBhC76K,KAAAm6K,qBAAA,KACGn6K,KAAOq4W,oBAAA,I,EAIVr4W,KAASO,GAAAwY,EAAAA,EAAkBxY,GAAA,KA2gBvBP,KAAKq6K,cAAgBthK,EAAQA,EAAMshK,cAAgB,KAzgBrDr6K,KAAAo4W,SAASr/V,EAAeA,EAAAq/V,SAAU,KA2gB5Br/V,GACF/Y,KAAKi4W,iBAAiBl/V,EAAMo/V,cAAA,EAE9Bn4W,KAAK66K,mBAAqB9hK,EAAQA,EAAM8hK,mBAAqB,KAzgB7D76K,KAAKm6K,qBAAgBphK,EAAcA,EAAAohK,qBAAA,KACnCn6K,KAAKq4W,oBAAqBt/V,EAASA,EAAAs/V,oBAAU,I,0EA4YjDr6W,QACGC,OA1gBM,2BAAuB,EAAA,EA2gB7B4mQ,QA1gBO,eAASmzG,CAAA,C,IAipBrB,CAAA,WACE,aAOA,SAAS+B,EAAaC,GApepB,OAseA,SA3gBOjhW,GAohBL,GARA/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KA1gB7BP,KAAK6Z,QAAKd,EAAQA,EAAWc,QAAA,KAC7B7Z,KAAKm+B,QAAOplB,EAAQA,EAAMolB,QAAO,KAEjCn+B,KAAKwC,WAASuW,GAAQA,EAAMvW,WAAS,IAAA0hD,KAAAnrC,EAAAvW,UAAA,EAAA,KACrCxC,KAAK+8L,WAAQhkL,GAAcA,EAAAgkL,WAAQ,IAAA74I,KAAAnrC,EAAAgkL,UAAA,EAAA,KAEnC/8L,KAAKi6W,WAAU,GA4gBXlhW,GAASA,EAAMkhW,WACjB,IAAK,IAAIxmU,EAAI,EAAGA,EAAI16B,EAAMkhW,WAAW7sW,OAAQ,EAAEqmC,EA1gBjDzzC,KAAKi6W,WAAA3pW,KAAkB,IAAA0pW,EAAQjhW,EAAQkhW,WAAAxmU,EAAA,CAAA,EAghBvCzzC,KAAKi3D,QAAU,WACb,OAAOj3D,KAAKi6W,WAAWhuS,MAAM,SAASytG,GA1gBxC,OAAKA,EAAAziH,QAAA,C,IA+gBLj3D,KA3gBEw5K,YAAO,WA4gBP,IAAIE,EAAW,IAAIsgM,EAAS,CAC1B12W,MAAOtD,KAAKi6W,WAAW7sW,M,GAEzBpN,KAAKi6W,WAAW3pW,KAAKopK,CAAA,C,EAxgBzB15K,KAAOk6W,eAAA,SAAAp1U,GA4gBH9kC,KAAKi6W,WAAWl1U,OAAOD,EAAO,CAAA,C,0BArCpC9mC,QA1gBGC,OAAA,0BAAuB,EAAA,EA4gBvB4mQ,QAAQ,cAAek1G,CAAA,C,IA+C5B,CAAA,WACE,aAEA/7W,QACGC,OA3gBG,kBAAuB,EAAA,EA4gB1B4mQ,QAAQ,OAGX,WAkBE,OAhBA,SA3gBS9rP,GA4gBP/Y,KA3gBEO,GAAKwY,EAAUA,EAAAxY,GAAQ,KA4gBzBP,KAAKqd,KAAOtE,EAAQA,EAAMsE,KAAO,KACjCrd,KAAK0jE,YAAc3qD,EAAQA,EAAM2qD,YAAc,KAC/C1jE,KA3gBE6Z,QAAKd,EAAeA,EAAAc,QAAiB,KA6gBvC7Z,KAAKqlP,YA3gBQ,GA4gBVtsO,GAASA,EAAMssO,cAChBrlP,KA3gBEqlP,YAAUtsO,EAAQssO,Y,EA8fP,C,IA0BrB,CAAA,WACE,aAOA,SA3gBQ80H,EAAmB76W,EACV86W,GAmyBf,OAtRA,SA3gBuBrhW,GAiFrB,IA6gBM49V,EA3gBD0D,EA0bLr6W,KAAKs6W,iBAAmB,CACtBr0V,KA3gBM,eA4gBN5I,KA3gBO,eA4gBP+I,MA3gBI,gBA4gBJm0V,YAAe,qBACfC,iBA3gBiB,0BA4gBjBr0V,KAAQ,eACRs0V,WAAc,oBA1gBdC,gBAAkB,yBA4gBlBrrW,MA3gBS,QA4gBT6W,QAAW,UACXy0V,eAAkB,iBAClB30V,IAAO,MACP+pF,OAAU,SACVlqF,MAAS,cACT4sC,YAAe,cACfiR,YAAe,cA1gBjBugC,iBAAO,mBA4gBL77F,MAAS,QACTie,SAAY,WACZC,YAAe,cACfs0V,8BAAiC,gCACjCC,8BAAiC,gCA1gBxCC,YAAW,cACVv9V,SAAA,U,EAEAvd,KAAA+6W,qBAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IAEG/6W,KAAAg7W,YAAQ,WA4gBL,MAA4B,gBAArBh7W,KAAKynG,aAAsD,gBAArBznG,KAAKynG,aAAsD,iBAArBznG,KAAKynG,W,EAG1FznG,KAAKi7W,yBAA2B,WA1gBlC,GAAAj7W,KAASg7W,YAAA,EAAA,CAEP,GAA2B,gBAAtBh7W,KAAAynG,YACA,MAAA,CAAAtzE,KAAa46C,MAAAmsS,EAAe,EAAA/mV,KAAiB46C,MAAKmsS,IAAM,EAAc/mV,KAAA46C,MAAAmsS,IAAA,GAE3E,GAA0B,gBAArBl7W,KAAAynG,YACA,MAAA,CAAAtzE,KAAA46C,MAAemsS,IAAc,EAAA/mV,KAAe46C,MAAAmsS,EAAA,EAAA/mV,KAAA46C,MAAAmsS,IAAA,GAEjD,GAA2B,iBAAtBl7W,KAAAynG,YACA,MAAA,CAAAtzE,KAAA46C,MAAkBmsS,IAAc,EAAA/mV,KAAA46C,MAAkBmsS,IAAA,EAAA/mV,KAAA46C,MAAAmsS,IAAA,EAAA/mV,KAAA46C,MAAAmsS,IAAA,EAAA/mV,KAAA46C,MAAAmsS,IAAA,E,CA8gBrD,MAAO,E,EAGTl7W,KA3gBEO,GAAKwY,EAAAA,EAAYxY,GAAA,KA4gBnBP,KAAKqd,KAAOtE,GAASA,EAAMsE,KAAOtE,EAAMsE,KAAO/d,EAAQ,WAAA,EAAa,4CAAA,EACpEU,KAAKiI,aAAe8Q,GAASA,EAAM9Q,aAAe8Q,EAAM9Q,aAAe,KAzgBzEjI,KAAO0lG,SAAA3sF,GAAAA,EAAA2sF,SAAA3sF,EAAA2sF,SAAA,EA4gBL1lG,KAAKm7W,mBAAqBpiW,EAAAA,CAAAA,GAASA,CAAAA,EAAMoiW,qBAAqBpiW,EAAMoiW,mBACpEn7W,KAAKo7W,mBAAqBriW,EAAAA,CAAAA,GAASA,CAAAA,EAAMqiW,qBAAqBriW,EAAMqiW,mBACpEp7W,KAAKq7W,WAAatiW,EAAAA,CAAAA,GAASA,CAAAA,EAAMsiW,aAAatiW,EAAMsiW,WACpDr7W,KAAKs/P,cAAgBvmP,CAAAA,GAASA,CAAAA,EAAMumP,eAAgBvmP,EAAMumP,cAzgB9Dt/P,KAAAs7W,YAAAviW,GAAAA,EAAAuiW,YAAAviW,EAAAuiW,YAAA,GA4gBIt7W,KAAK+nG,aAAehvF,GAASA,EAAMgvF,aAAehvF,EAAMgvF,aAAe,GACvE/nG,KAAK6nG,iBAAmB9uF,GAASA,EAAM8uF,iBAAmB9uF,EAAM8uF,iBAAmB7nG,KAAKi7W,yBAAA,EA1gBzFj7W,KAAA+e,QAAOhG,GAAAA,EAAAgG,QAA+BhG,EAAAgG,QAAA,EACtC/e,KAAA0hD,KAAQ3oC,GAAAA,EAAkB2oC,KAAA3oC,EAAA2oC,KAAA,GA8gBzB1hD,KAAKklG,gBAAkBnsF,GAAkC,MAAzBA,EAAMmsF,gBAA0BnsF,EAAMmsF,gBAAkB,EA3gB5FllG,KAASolG,mBAAgBrsF,GAAA,MAAAA,EAAAqsF,mBAAArsF,EAAAqsF,mBAAA,EA6gBrBplG,KAAKqlG,iBA5gBgBtsF,GAAA,MAAAA,EAAAssF,iBAAAtsF,EAAAssF,iBAAA,EA6gBrBrlG,KAAKmlG,kBA5gBgBpsF,GAAa,MAAAA,EAAAosF,kBAAApsF,EAAAosF,kBAAA,EAEpCnlG,KAAA4kG,iBAAwB,EACtB5kG,KAAK6kG,mBAAoB9rF,GAAA,MAAAA,EAAA8rF,mBAAA9rF,EAAA8rF,mBAAA,EACzB7kG,KAAK8kG,oBAAa,EAClB9kG,KAAK+kG,kBAAWhsF,GAAA,MAAAA,EAAAgsF,kBAAAhsF,EAAAgsF,kBAAA,EAEhB/kG,KAAKqnB,UAAAtO,GAAkBA,EAAAsO,UAAAtO,EAAAsO,UAAA,KACvBrnB,KAAKynG,YAAc1uF,GAAAA,EAAA0uF,YAAA1uF,EAAA0uF,YAAA,WAGnBznG,KAAK+tF,OAAA,GACLh1E,GAAKA,EAAAg1E,QA6gBC4oR,EAAQ32W,KA3gBTq6W,EAAW,CAAA,EAChBthW,EAAIg1E,OAAQ7sF,QAAA,SAAA0d,EAAAkmB,GACe,IAAvBlmB,EAAAnd,WACF44W,EAAiB,CAAA,GA8gBf1D,EAAM5oR,OAAOz9E,KAAK,IAAI8pW,EAAwBx7V,CAAA,CAAA,C,GAzgBhDy7V,IACA1D,EAAI5oR,OAAQ7sF,QAAA,SAAA0d,GACRA,EAAAnd,UAAY,C,GAGd85W,EAAY5E,EAAA5oR,OAAA3oF,KAAA,SAAAwZ,GACZ,OAAkB,IAAlBA,EAAAnd,Q,MAGE85W,EAAM95W,SAAW,GAghBrBzB,KAAK+tF,OAAOv4C,KAAK,SAASpsC,EAAGssD,GAC3B,OAAOtsD,EAAE3H,SAAWi0D,EAAEj0D,Q,KAvgB1BzB,KAAA+tF,OAASz9E,KAAA,IAAc8pW,EAAA,CACrBx0Q,WAAS,OACPG,UAAK,GACLE,KAAI,CAAA,C,IA8gBNjmG,KA5gBI+tF,OAAAz9E,KAAU,IAAA8pW,EAAS,CA6gBrBx0Q,WA5gBQ,OA6gBRG,UA5gBM,EA6gBNG,OA5gBM,CAAA,C,IA8gBRlmG,KAAK+tF,OAAOz9E,KA5gBC,IAAA8pW,EAAA,CA6gBXx0Q,WAAY,QACZG,UAAW,EACXG,OA5gBI,CAAA,C,IA8gBNlmG,KAAK+tF,OAAOz9E,KAAK,IAAI8pW,EAAwB,CAC3Cx0Q,WAAY,OACZG,UAAW,GA3gBfE,KAAS,CAAA,EACPJ,aAAQvmG,EAAgB,WAAA,EAAA,uBAAA,C,IA8gBxBU,KA5gBE+tF,OAAIz9E,KAAQ,IAAA8pW,EAAA,CACZx0Q,WAAU,QA6gBVG,UA5gBE,GA6gBFE,KA5gBI,CAAA,EA6gBJJ,aA5gBYvmG,EAAA,WAAA,EAAmB,wBAAA,C,IA8gBjCU,KAAK+tF,OA5gBGz9E,KAAM,IAAA8pW,EAA2B,CA6gBvCx0Q,WA5gBW,UA6gBXc,cAAe,QACfE,iBAAkB,CAAA,C,KAKtB5mG,KAAKw7W,cAAgB,WACnB,MAAuB,OAAnBx7W,KAAKqnB,UACkB,aAArBrnB,KAAKynG,YACA,IA1gBR,IA6gB2B,OAAnBznG,KAAKqnB,UACW,aAArBrnB,KAAKynG,YACA,MA1gBN,IAwgBE,KAAA,C,EApgBVznG,KAAAy7W,aAAO,WACP,MAAqB,OAArBz7W,KAAQqnB,UA6gBsB,aAArBrnB,KAAKynG,YACA,IAEF,IA3gBa,OAAjBznG,KAAUqnB,UACY,aAAxBrnB,KAAKynG,YACL,IAEA,MAJE,KAAA,C,EAohBPznG,KAAK2kG,eAAiB,SAAS51B,GAC7B,MAAyB,WAArB/uE,KAAKynG,YACH14B,EACK56C,KAAK46C,OAAO/uE,KAAKw7W,cAAA,EAAkBx7W,KAAKklG,gBAAkBllG,KAAKolG,oBAAsBplG,KAAK0hD,IAAA,GA1gBlG1hD,KAAAw7W,cAAA,EAAAx7W,KAAAklG,gBAAAllG,KAAAolG,oBAAAplG,KAAA0hD,KA8gBM1hD,KAAK+nG,Y,EAKhB/nG,KAAKykG,cAAgB,SAAS11B,GAC5B,MAAyB,WAArB/uE,KAAKynG,YA5gBf14B,EACU56C,KAAA46C,OAAA/uE,KAAwBy7W,aAAA,EAAAz7W,KAAAqlG,iBAAArlG,KAAAmlG,mBAAAnlG,KAAA+e,OAAA,GA+gBlB/e,KAAKy7W,aAAA,EAAiBz7W,KAAKqlG,iBAAmBrlG,KAAKmlG,mBAAqBnlG,KAAK+e,QA3gBpF/e,KAAAs7W,W,EAihBLt7W,KAAK07W,YAAc,SAAS52U,GA5gB9B9kC,KAAS+tF,OAAAhpD,OAASD,EAAO,CAAA,EACvB9kC,KAAK27W,cAAA,C,EAGL37W,KAAK47W,cAAc,WACnB57W,KAAK+tF,OAAAz9E,KAAA,IAAe8pW,EAAe,CACnCx0Q,WAAK,M,IAEL5lG,KAAK27W,cAAA,C,EAghBL37W,KA7gBI6mG,iBAAmB,SAASpzD,GA8gB9B,IAAIooU,EAAY,IAAIzB,EAAwBp6W,KAAK+tF,OAAOt6C,EAAI,EAAA,EAC5DzzC,KA7gBK+tF,OAAAt6C,EAAA,GAAAzzC,KAAA+tF,OAAAt6C,GACLzzC,KAAK+tF,OAAAt6C,GAAAooU,EA8gBL77W,KAAK27W,cAAA,C,EA1gBP37W,KAAK8mG,kBAAU,SAAYrzD,GACzB,IAAAooU,EAAY,IAAAzB,EAA0Bp6W,KAAA+tF,OAAct6C,EAAM,EAAA,EA8gB1DzzC,KA7gBE+tF,OAAOt6C,EAAA,GAAAzzC,KAAa+tF,OAAAt6C,GA8gBtBzzC,KAAK+tF,OAAOt6C,GAAKooU,EACjB77W,KAAK27W,cAAA,C,EAGP37W,KA7gBEmmO,iBAAS,WA8gBT,OA7gBInmO,KAAO+e,QAAA/e,KAAa0hD,I,EAghB1B1hD,KAAKsmG,oBAAsB,SAASV,GAClC,OAAO5lG,KAAK+tF,OAAO3oF,KAAK,SAASwZ,GA5gBjC,OAASA,EAAKgnF,aAAgBA,C,IAihBhC5lG,KA7gBE27W,cAAmB,WA8gBnB37W,KAAK+tF,OAAO7sF,QAAQ,SAAS0d,EAAOkmB,GAClClmB,EAAMnd,SAAWqjC,C,IAIrB9kC,KAAKunG,WAAa,SAASvqD,EAAKh+B,GA5gBhChf,KAAK0lG,SAAA1oD,EAAAh9C,KAAqB+e,QAAUC,EAAO,C,EAghB3Chf,KA7gBIgnG,eAAK,WA8gBP,MAA4B,WAArBhnG,KAAKynG,W,EA1gBdznG,KAAK87W,4BAA2B,WAC9B,MAAuB,cAAnB97W,KAAKynG,aAA0B,aAAAznG,KAAAynG,W,EAihBrCznG,KAAKi3D,QAAU,WACb,MAAA,EAAKj3D,CAAAA,KAAKiI,cA1gBDjI,KAAAgnG,eAAA,IAAe,CAAAhnG,KAAA+nG,cAAA,CAAA/nG,KAAAs7W,a,EAghB1Bt7W,KAAK+7W,eAAiB,WA5gBtB,OAAK/7W,KAAAiI,Y,EAghBLjI,KAAKg8W,yBAA2B,WA5gBhC,MAAK,iBAAAh8W,KAAAynG,W,EAghBLznG,KAAKi8W,cA7gBG,WACJj8W,KAAOg7W,YAAA,IA8gBPh7W,KAAK6nG,iBAAmB7nG,KAAKi7W,yBAAA,E,mDArRrCj9W,QACGC,OA3gBK,kCAA8B,EAAA,EA4gBnC4mQ,QAAQ,qBAAsBs1G,CAAA,C,IAiSnC,CAAA,WACE,aAEAn8W,QACGC,OAAO,wCAAyC,EAAA,EAChD4mQ,QAAQ,0BA1gBZ,WAmjBG,OApCA,SAAiC9rP,GAC/B/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KA7gBjCP,KAAA4lG,WAAA7sF,GAAAA,EAAA6sF,WAAA7sF,EAAA6sF,WAAA,GACG5lG,KAAAyB,SAAOsX,GAA4B,MAA5BA,EAAAtX,SAA4BsX,EAAAtX,SAAA,EAghBlCzB,KAAK+lG,UAAYhtF,GAASA,EAAMgtF,UAAYhtF,EAAMgtF,UAAY,GAC9D/lG,KAAKgmG,WAAajtF,GAASA,EAAMitF,WAAajtF,EAAMitF,WAAa,OA5gBnEhmG,KAAAimG,KAAAltF,EAAAA,CAAAA,GAAAA,CAAAA,EAAAktF,OAAAltF,EAAAktF,KACAjmG,KAAAkmG,OAAAntF,EAAAA,CAAAA,GAAAA,CAAAA,EAAAmtF,SAAAntF,EAAAmtF,OACAlmG,KAAAmmG,UAAAptF,EAAAA,CAAAA,GAAAA,CAAAA,EAAAotF,YAAAptF,EAAAotF,UAGAnmG,KAAA6lG,aAAsB9sF,GAAOA,EAAA8sF,aAAA9sF,EAAA8sF,aAAA,GA+gB3B7lG,KAAK0P,eAAiBqJ,EAAAA,CAAAA,GAAiC,MAAxBA,EAAMrJ,iBAAyBqJ,EAAMrJ,eA7gBpE1P,KAAK0mG,cAAA3tF,GAAmBA,EAAS2tF,cAAO3tF,EAAA2tF,cAAA,OA+gBxC1mG,KA9gBE4mG,iBAAS7tF,CAAAA,GAAiB,MAAAA,EAAA6tF,kBAAA7tF,EAAA6tF,iBA+gB5B5mG,KA9gBIomG,cAAKrtF,GAAkBA,EAAAqtF,cAAArtF,EAAAqtF,cAAA,EAghB3BpmG,KA9gBIk8W,gBAAKnjW,CAAAA,GAAiB,MAAAA,EAAAmjW,iBAAAnjW,EAAAmjW,gBA+gB1Bl8W,KAAKm8W,cAAgBpjW,GAASA,EAAMojW,cAAgBpjW,EAAMojW,cAAgB,KAC1En8W,KAAK2mG,eAAiB5tF,GAASA,EAAM4tF,eAAiB5tF,EAAM4tF,eAAiB,KAC7E3mG,KAAKo8W,cAAgBrjW,GAASA,EAAMqjW,cAAgBrjW,EAAMqjW,cAAgB,KAE1Ep8W,KA9gBEq8W,mBAActjW,GAAmBA,EAAKsjW,mBAAAtjW,EAAAsjW,mBAAA,OAIxCr8W,KAAKs8W,UAAA,WACH,MAA0B,YAAnBt8W,KAAA4lG,YAAkC,UAAR5lG,KAAQ4lG,U,GA4eT,C,IA8CxC,CAAA,WACE,aAKA,SA9gBQ22Q,EA+gBNtmV,EACAp2B,EACA21B,EACAuuO,EACAluO,EACA2mV,EACAC,EACAC,EACAjuO,EACA34G,EACAC,EACAo1B,EACAjsD,EACAI,EACAH,EACAC,EACA+T,EACA6iB,EACAx2B,GA6tBA,OA3tBA,SA9gBQuZ,GA+gBN,MA9gBMq6N,EAAA,IAAAlvL,KAAkC,8BAAA,EAqjBxC,GAlCAlkD,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KA7gB7BP,KAAK28W,MAAA5jW,CAAAA,CAAAA,GAAgBA,EAAA4jW,MAghBrB38W,KA9gBIwC,WA+gBFuW,GAASA,EAAMvW,WAAa,IAAI0hD,KAAKnrC,EAAMvW,UAAA,EAAc,KAC3DxC,KAAK+8L,WA7gBLhkL,GAAKA,EAAAgkL,WAAyB,IAAA74I,KAAAnrC,EAAAgkL,UAAA,EAAA,KA+gB9B/8L,KA9gBE6hE,QAAY9oD,EAAAA,EAAA8oD,QAAkB,KA+gBhC7hE,KA9gBI48W,WA+gBF7jW,GAASA,EAAM6jW,WAAa,IAAI14T,KAAKnrC,EAAM6jW,UAAA,EAAc,KAG3D58W,KA9gBEqC,SAAY0W,EAAAA,EAAA1W,SAAkB,KAihBhCrC,KAAKyyD,YAAc15C,EAAQA,EAAM05C,YAAc,KA7gB/CzyD,KAAKukC,iBAAiBxrB,EAAAA,EAAWwrB,iBAAA,KA+gBjCvkC,KA9gBE0rJ,0BAA8B3yI,EAAAA,EAAA2yI,0BAAoB,KAghBpD1rJ,KA9gBIooB,iBAAKrP,EAAkBA,EAAAqP,iBAAoB,KA+gB/CpoB,KA9gBIyvI,kCAAuB12H,EA+gBvBA,EAAM02H,kCACN,KA7gBJzvI,KAAK4C,MAAAmW,EAAAA,EAAAnW,MAAwB,KA+gB7B5C,KA9gBE6C,cAASkW,EAAkBA,EAAAlW,cAAoB,KA+gBjD7C,KA9gBI2rD,KAAK5yC,EAAAA,EAAA4yC,KAAkB,KA+gB3B3rD,KA9gBIyC,WAAOsW,EAAAA,EAAAtW,WAAA,KA+gBXzC,KAAK6Z,QAAUd,EAAQA,EAAMc,QAAU,KACvC7Z,KAAKw4B,UAAYzf,EAAQA,EAAMyf,UAAY,KAC3Cx4B,KAAKw3O,QAAUz+N,EAAQA,EAAMy+N,QAAU,KAIvCx3O,KA9gBIw2B,mBAAe,GA+gBfzd,GAASA,EAAMyd,mBACjB,IAAK,IAAIid,EAAI,EAAGA,EAAI16B,EAAMyd,mBAAmBppB,OAAQ,EAAEqmC,EACrDzzC,KAAKw2B,mBAAmBlmB,KAAK,IAAIklB,EAAQzc,EAAMyd,mBAAmBid,EAAA,CAAA,EA+BtE,GA5BAzzC,KA9gBEy0B,SAAK1b,EAAiBA,EAAA0b,SAAA,KA+gBxBz0B,KA9gBE+kN,kBAAKhsM,EAAqBA,EAAAgsM,kBAAA,KA+gB5B/kN,KA9gBE2/B,kBAAK5mB,EAAuBA,EAAA4mB,kBAAA,KA+gB9B3/B,KA9gBE82O,yBAA2B/9N,EAAAA,EAAA+9N,yBAAA,KA+gB7B92O,KAAKk3B,SAAWne,EAAQA,EAAMme,SAAW,KACzCl3B,KAAKwH,kBAAoBuR,EAAQA,EAAMvR,kBAAoB,KAC3DxH,KAAK0pH,OAAS3wG,EAAQA,EAAM2wG,OAAS,KA7gBrC1pH,KAAK2hC,cAAa5oB,EAAWA,EAAA4oB,cAAA,KAC7B3hC,KAAK26B,cAAgB5hB,EAAQA,EAAM4hB,cAAgB,KACnD36B,KAAK68W,YAAW9jW,EAAQA,EAAM8jW,YAAW,KACzC78W,KAAIihN,YAAOloM,EAAAA,EAAAkoM,YAAA,KA+gBXjhN,KA9gBE88W,YAAK/jW,EAAiBA,EAAM8jW,YAAA,KA+gB9B78W,KAAK+8W,YAAchkW,EAAQA,EAAMkoM,YAAc,KA7gB/CjhN,KAAKo2O,WAAAr9N,EAAqBA,EAAAq9N,WAAc,KACxCp2O,KAAKmQ,SAAA4I,EAAAA,EAAuB5I,SAAQ,KACpCnQ,KAAKmrM,kBAAApyL,EAAsBA,EAAQoyL,kBAAM,KA+gBzCnrM,KAAKohC,kBAAoBroB,EAAQA,EAAMqoB,kBAAoB,KAC3DphC,KAAKkrM,iBAAmBnyL,EAAQA,EAAMmyL,iBAAmB,KACzDlrM,KAAKwjC,SAAWzqB,EAAQA,EAAMyqB,SAAW,KACzCxjC,KAAKyjC,YAAc1qB,EAAQA,EAAM0qB,YAAc,KAC/CzjC,KAAKg9W,uBAAyBjkW,EAAQA,EAAMikW,uBAAyB,KA7gBvEh9W,KAAOo1B,MAAArc,EAAAA,EAAAqc,MAAA,KA+gBDp1B,KAAKkrM,kBAAoB,CAAClrM,KAAK2hC,gBACjC3hC,KAAKmtM,qBAAuBntM,KAAKkrM,kBAAoBlrM,KAAKkrM,iBAAmBlrM,KAAKo1B,QAEpFp1B,KAAKi9W,uBAAyBj9W,KAAKo1B,MAAQp1B,KAAKkrM,iBA7gBrDlrM,KAAA22B,QAAW5d,GAAAA,EAAA4d,QAAA,IAAAnB,EAAAzc,EAAA4d,OAAA,EAAA,KACV32B,KAAAo8B,sBAAA,KA+gBQrjB,GAASA,EAAMqjB,uBAAyBrjB,EAAMqjB,sBAAsBhvB,OAAQ,CAC9EpN,KAAKo8B,sBAAwB,GA9gBnC,IAAAqX,EAAA,EAAAA,EAAA16B,EAAAqjB,sBAAAhvB,OAAA,EAAAqmC,EACGzzC,KAAOo8B,sBAAA9rB,KAA2B,IAAAklB,EAAAzc,EAAAqjB,sBAAAqX,EAAA,CAAA,C,CA2jBjC,GAzCAzzC,KAAKykC,cAAgB1rB,EAAQA,EAAM0rB,cAAgB,KA9gBvDzkC,KAASkmB,QAAAnN,EAAaA,EAAUmN,QAAA,KAghB5BlmB,KAAKqhH,UAAYtoG,EAAQA,EAAMsoG,UAAY,KA9gB7CrhH,KAAAyyD,YAAqB15C,EAAOA,EAAA05C,YAAA,KAC1BzyD,KAAKu6B,KAAKxhB,EAAQA,EAAMwhB,KAAK,KAC7Bv6B,KAAKkvI,gBAAkBn2H,EAAMA,EAAAm2H,gBAAU,KACvClvI,KAAK+0O,yBAAwBh8N,EAghBzBA,EAAMg8N,yBA9gBV,KACA/0O,KAAKk9W,aAAankW,EAASA,EAAMmkW,aAAa,KAghB9Cl9W,KAAKovI,iBAAmBr2H,EAAQA,EAAMq2H,iBAAmB,KA9gBzDpvI,KAAK80O,0BAAa/7N,EACdA,EAAA+7N,0BACF,KAghBF90O,KA/gBIa,OAAKkY,EAAWA,EAAKlY,OAAI,KAghB7Bb,KAAKmgN,gBAAkBpnM,EAAQA,EAAMonM,gBAAkB,KACvDngN,KAAK06I,eAAiB3hI,EAAQA,EAAM2hI,eAAiB,KAErD16I,KAAK4Z,UAAWb,GAAyBlZ,EAAQga,SAAnBD,SAE9B5Z,KA/gBEy7C,eAAY1iC,EAAWA,EAAM0iC,eAAkB,KAghBjDz7C,KA/gBIm9W,wBAAgBpkW,EAAAA,EAAAokW,wBAAA,KAihBpBn9W,KAAK8hQ,oBAAsB/oP,EAAQA,EAAM+oP,oBAAsB,KAC/D9hQ,KAAKo9W,+BAAiCrkW,EAAQA,EAAMqkW,+BAAiC,KAErFp9W,KA/gBEq9W,uBAA4BtkW,EAAAA,EAAAskW,uBAAA,KAihB9Br9W,KAAKqsO,2BA9gBHtzN,GAAKA,EAAAszN,2BAghBDtzN,EAAMszN,2BACN,GA9gBNrsO,KAAK09B,0BACH3kB,GAghBAA,EAAM2kB,2BACN3kB,EAAM2kB,0BAA0BtwB,OAC5B,IAAIqvW,EAAe1jW,EAAM2kB,0BAA0B,EAAA,EACnD,KAEN19B,KAAKuhC,0BAA4B,GA9gBnCvhC,KAAOs9W,+BAAA,GAghBDvkW,GAASA,EAAMwoB,0BACjB,IAASkS,EAAI,EAAGA,EAAI16B,EAAMwoB,0BAA0Bn0B,OAAQ,EAAEqmC,EAAG,CAC/D,IAAI87J,EAAwB,IAAImtK,EAAsB3jW,EAAMwoB,0BAA0BkS,EAAA,EACtFzzC,KAAKuhC,0BAA0BjxB,KAAKi/L,CAAA,EA9gB7CvvM,KAAYs9W,+BAAAvkW,EAAAwoB,0BAAAkS,GAAAlzC,IAAAgvM,C,CAKR,GADAvvM,KAAAygC,iBAAO,GACP1nB,GAAQA,EAAQ0nB,iBAghBb,IAASgT,EAAI,EAAGA,EAAI16B,EAAM0nB,iBAAiBrzB,OAAQ,EAAEqmC,EACnDzzC,KAAKygC,iBAAiBnwB,KA9gBrB,IAAAmsW,EAAQ1jW,EAAA0nB,iBAAAgT,EAAA,C,EAshBb,GAjhBAzzC,KAAKs3B,2BAA4B,GACjCt3B,KAAKu9W,gCAAkC,GAghBnCxkW,GAASA,EAAMue,2BAA4B,CA9gB/Ct3B,KAAKs3B,2BAAcve,EAAAue,2BAAA/V,IAAA,SAAA8e,GAChB,OAAA,IAASxK,EAAkBwK,CAAA,C,GAkhB5B,IAASoT,EAAI,EAAGA,EAAIzzC,KAAKs3B,2BAA2BlqB,OAAQ,EAAEqmC,EAC5DzzC,KAAKu9W,gCACHv9W,KAAKs3B,2BAA2Bmc,GAAGlzC,IAC/BP,KAAKs3B,2BAA2Bmc,E,CAK1C,GADAzzC,KAAKmlH,uBAAyB,GAC1BpsG,GAASA,EAAMosG,uBAAwB,CACzC,IAAS1xE,EAAI,EAAGA,EAAI16B,EAAMosG,uBAAuB/3G,OAAQ,EAAEqmC,EACzDzzC,KAAKmlH,uBAAuB70G,KA9gB1B,IAAAyzP,EAAAhrP,EAAAosG,uBAAA1xE,EAAA,C,EAIP,IAAOA,EAAA,EAAAA,EAAAzzC,KAAAmlH,uBAAmC/3G,OAAA,EAAAqmC,EAC1CzzC,KAAQmlH,uBAAsB1xE,GAAA+pU,4BAihBvBx9W,KAAKu9W,+B,EAMX,GAjhBFv9W,KAAAy9W,kBAAS,GAihBH1kW,GAASA,EAAM0kW,kBAAmB,CA/gBtC,IAAKhqU,EAAA,EAAAA,EAAA16B,EAAmB0kW,kBAAArwW,OAAA,EAAAqmC,EACtBzzC,KAAAy9W,kBAAQntW,KACR,IAAQksW,EAAAzjW,EAAA0kW,kBAAAhqU,EAAA,C,EAKR,IAAAA,EAAA,EAAcA,EAAAzzC,KAAAmlH,uBAAA/3G,OAAA,EAAAqmC,EACdzzC,KAAAmlH,uBAAmB1xE,GAAAiqU,oBACnB19W,KAASy9W,iB,EAuhBX,IADAz9W,KAhhBE29W,iDAAe,GACflqU,EAAA,EAAAA,EAAezzC,KAAAy9W,kBAAArwW,OAAA,EAAAqmC,EAEf,IADA,IAAAmqU,EAAA59W,KAAAy9W,kBAAoBhqU,GAEpBI,EAAA,EACAA,EACA+pU,EAAAC,wDAAiCzwW,OACjC,EAAAymC,EACA,CACA,IAAAiqU,EAAYF,EAAAC,wDAAAhqU,GAAAkqU,sCAihBNC,EAAcJ,EAAIC,wDAAwDhqU,GAAGze,MAE7Ep1B,KAAK29W,iDAAiDG,GA/gBzD99W,KAAA29W,iDAAyBG,IAAAE,EAkhBxBh+W,KAAK29W,iDAAiDG,GAA+BE,C,CAI3Fh+W,KAhhBIwgC,wBAAyBznB,CAAAA,CAAAA,GAAIA,EAAAynB,wBAihBjCxgC,KAhhBI4gC,kCAAyB7nB,CAAAA,CAAAA,GAAeA,EAAA6nB,kCAkhB5C5gC,KAAKi+W,YAAcllW,CAAAA,CAAAA,GAAQA,EAAMklW,YACjCj+W,KAhhBIiI,aAAS8Q,CAAAA,CAAAA,GAAAA,EAAgB9Q,aAqhB7BjI,KAAKi2O,eAAiB,WACpB,MAAO,CAACj2O,KAAKqC,UAAY,CAACrC,KAAK6hE,SAAW,CAAC7hE,KAAKo2O,U,EAGlDp2O,KAAKk+W,wBAA0B,SAASl2V,GA/gBxC,OAAKhoB,KAAKs3B,2BAAmBuL,UAAA,SAAAxC,GAC7B,OAAKA,EAAO+U,kBAAsBptB,C,IAIlChoB,KAAKm1O,0BAAqB,SAAe90M,GACzCA,EAAK8nF,UAAAnoH,KAAAO,GACL8/B,EAAK89U,cAAa,CAAA,EAClBn+W,KAAKs3B,2BAAyBhnB,KAAM+vB,CAAA,EAihBlCrgC,KAAKi3O,aAAA,C,EA7gBPj3O,KAAKo+W,qBAAmB,WAihBtB,OAAOp+W,KAAKq+W,kBAAA,GAAuBr+W,KAAKs+W,eAAA,C,EAG1Ct+W,KAAKu+W,YAAc,WA/gBnB,MAAK,EAAAv+W,KAAAq+W,kBAAA,GAAiCr+W,KAAAs+W,eAAA,GAA0B,CAAAt+W,KAAM0rO,yBAAA,E,EAGtE1rO,KAAKw+W,mBAAoB,WAihBvB,MAAO,CAACx+W,KAAKy+W,cAAA,C,EA7gBfz+W,KAAK0rO,yBAAsB,WAC3B,MAAK,EAAA1rO,KAAAy+W,cAAA,GAA6Bz+W,KAAM0+W,eAAA,GAAqB1+W,KAAAwC,WAAa4wO,E,EAG1EpzO,KAAK2+W,YAAc,WAihBjB,MAAO,EAAE3+W,KAAKq+W,kBAAA,GAAuBr+W,KAAKs+W,eAAA,GAAoB,CAACt+W,KAAK0rO,yBAAA,E,EA7gBtE1rO,KAAI65B,SAAS,WACX,IAAI5tB,EAAQ,EACRo/L,EAAA,GACJsxK,EAAM38W,KAAO28W,MA6iBb,OA5iBE38W,KAAIs3B,4BAihBJt3B,KAhhBEs3B,2BAAkBp2B,QAAA,SAAAm/B,GAihBdA,EAAKQ,mBAAqBR,EAAKK,mBA/gBrC2qK,EAAa/6L,KAAK+vB,CAAA,EAkhBdp0B,GAAUo0B,EAAKxG,SAAS,CAAA,EAAM,CAAA,EAAM8iV,CAAA,C,GAKtC38W,KAAKqsO,4BA/gBPrsO,KAAIqsO,2BAA2BnrO,QAAK,SAClC09W,GAEF3yW,GAAI2yW,EAAajvW,c,GAohBf3P,KAAKmrM,oBA/gBTl/L,GAAYjM,KAAKmrM,mBAmhBbE,EAAWj+L,QACbi+L,EAhhBGnqM,QAAA,SAAAm/B,GAihBDp0B,GAAUo0B,EAAKxG,SAAS,CAAA,CAAA,C,GA5gB1B75B,KAAMkrM,kBAAA,CAAAlrM,KAAA2hC,eAihBN3hC,KAAKkrM,iBAAmB/2K,KAAKoO,IAAIviC,KAAKkrM,gBAAA,EAAoB/2K,KAAKoO,IAAIt2B,CAAA,EAAUA,EAASjM,KAAKkrM,iBA/gB7FlrM,KAAKmtM,qBAAgBntM,KAAAkrM,kBAAwBj/L,EAAAjM,KAAAkrM,iBAAAj/L,EAAA,EAC3CgqB,EAAYi3K,WAAAjhM,EAAAjM,KAAAkrM,gBAAA,GAmhBPj1K,EAAMi3K,WAAWjhM,CAAA,C,EAG1BjM,KAhhBIkhC,YAAW,SAAAC,GAihBb,IAhhBEl1B,EAAQ,EAihBN0wW,EAAQ38W,KAAK28W,MA3fnB,OApBE38W,KAAKs3B,4BACHt3B,KAAAs3B,2BAAYp2B,QAAA,SAAAm/B,GACZp0B,GAAWo0B,EAAAa,YAAA,CAAA,EAAA,CAAA,EAAAy7U,CAAA,C,GAIb38W,KAAKqsO,4BACHrsO,KAAAqsO,2BAAYnrO,QAAA,SACZ09W,GAEA3yW,GAAA2yW,EAAmClvW,c,GAInC,CAAAyxB,GAAenhC,KAAAohC,oBACfn1B,GAAAjM,KAAAohC,mBAkhBEphC,KAAKmtM,uBACPlhM,GAAmB,EAAIjM,KAAKmtM,sBA9gB3Bl3K,EAAAi3K,WAAgBjhM,CAAA,C,EAmhBrBjM,KAAK6+W,cAhhBQ,WAihBX,OAAO7+W,KAAKo1B,MAAQp1B,KAAKwjC,Q,EAG3BxjC,KAhhBI8+W,iBAAS,WAihBX,IAhhBIxuS,EAAOtwE,KAAAo1B,MA2hBX,OAVAp1B,KAAKuhC,0BAA0BrgC,QAAQ,SAASquM,GA/gB9CA,EAAOkuK,mBAAA,CAAAluK,EAAAkuK,kBAAArwW,SAihBLkjE,GAAWi/H,EAAsBnD,a,GA7gBlCpsM,KAAAwgC,yBACHxgC,KAAIygC,iBAAmBv/B,QAAM,SAAAyhC,GAC3B2tC,GAAS3tC,EAAgB5Z,M,GAGlB,EAAPunD,EAAOA,EAAA,I,EAmhBXtwE,KAAK++W,wBAhhBQ,WAihBX,IAGMzB,EAHF0B,EAAgB,EA/gBlBC,EAAO,GA6BT,OAofIj/W,KAAKy9W,oBACHH,EAAiCt9W,KAAKs9W,+BAC1Ct9W,KAAKy9W,kBAAkBv8W,QAAQ,SAASg+W,GA/gBvC,IA2hBKC,EA3hBLC,EAAiBjrV,KAASoO,IAAO28U,EAAA9pV,KAAA,EAChCm6K,EAAqB+tK,EAAU4B,EAAA7lO,0BAC7Bk2D,GAWmB6vK,IA8gBjBD,EAPI5vK,EAAsBhvM,MAAM0+W,EAOfA,EAA8B1vK,EAAsBhvM,IAthBnE4jC,cAAK1C,wBAAuB0D,gBAC/BhR,KAAAoO,IAAAgtK,EAAAnD,YAAA,EAkhBoBj4K,KAAKoO,IAAIgtK,EAAsBxmL,MAAA,GA1gBpDo2V,GAAOC,GAkhBLJ,GAAiBI,EAAmBD,EA/gB1CA,EAAa,GAEbF,EAAY1vK,EAAAhvM,IAAA4+W,GAkhBRH,GAAiBI,C,IA5gBlBJ,C,EAGPh/W,KAAKikC,iBAAgB,WACnB,IAAAh4B,EAAY,EAQZ,OAPEjM,KAAAuhC,2BAihBAvhC,KAAKuhC,0BAA0BrgC,QAAQ,SAASijC,GA/gB7CA,EAAAioK,eAihBCngM,GAAUkP,WAAWgpB,EAAcioK,YAAA,E,GA5gBpCn2K,EAAOi3K,WAASjhM,CAAA,C,EAmhBvBjM,KAAKilC,qBAAuB,SAASmoK,GACnC,OAAOn3K,EAAMi3K,WAAW/4K,KAAKkP,IAAIrjC,KAAKo1B,MAAQp1B,KAAKikC,iBAAA,EAAoB,CAAA,CAAA,C,EAGzEjkC,KAhhBEgkC,WAAgB,WAChB,OAAiB,IAAjBhkC,KAAKuhC,0BAAYn0B,OACZ,EAkhBE6oB,EAAMi3K,WA/gBf/4K,KAAKkP,IAAArjC,KAAAikC,iBAAA,EAA8BjkC,KAAAo1B,MAAA,CAAA,C,GAInCp1B,KAAKi3O,aAAA,WACHj3O,KAAOs3B,4BACLt3B,KAAAs3B,2BAA4Bp2B,QAAA,SAAAm/B,GAihB1BA,EAAKg/U,YAAA,C,GA5gBTr/W,KAAKo1B,MAAOp1B,KAAA65B,SAAA,EAihBZ75B,KAhhBEwjC,SAAMxjC,KAAWkhC,YAAA,EAihBnBlhC,KAAKyjC,YAAczjC,KAAK6+W,cAAA,EACxB7+W,KAAKykC,cAAgBzkC,KAAKgkC,WAAA,EAC1BhkC,KAAKy7C,eAAiBz7C,KAAK8+W,iBAAA,EA9gB3B9+W,KAAKs/W,gBAAA,C,EAGPt/W,KAAKs/W,gBAAiB,WACpBt/W,KAAA+M,MAAY,GAihBZ,IAAK,IAAI0mC,EAAI,EAAGA,EAAIzzC,KAAKs3B,2BAA2BlqB,OAAQ,EAAEqmC,EACvDzzC,KAAK+M,MAAM/M,KAAKs3B,2BAA2Bmc,GAAGzjC,OA/gBlDhQ,KAAA+M,MAAA/M,KAAAs3B,2BAAyCmc,GAAAzjC,KAAA,IAkhB1ChQ,KAAK+M,MAAM/M,KAAKs3B,2BAA2Bmc,GAAGzjC,KAAKM,KACjDtQ,KAAKs3B,2BAA2Bmc,E,GAKtCzzC,KAAKq/B,4BAA8B,WA/gBjC,GAAAr/B,KAASu/W,iBAAA,GAihBP,GAAI,CAAC1/W,EAAQyyC,eAAe,uBAAA,EAC1B,MAAO,CAAA,C,MAGT,GAAI,CAACzyC,EAAQyyC,eAAe,kCAAA,EAC1B,MAAO,CAAA,EAGX,MAAItyC,CAAAA,KAAKo2O,YA5gBP,EAAAp2O,CAAAA,KAAKs3B,4BAihBsC,IAA3Ct3B,KAAKs3B,2BAA2BlqB,SAI3BpN,KAAKs3B,2BAA2BgI,KAAK,SAC1CvF,GAEA,OAAuC,EAAhCA,EAAuBhR,M,IAIlC/oB,KAAKw/W,uBAAyB,WAC5B,GAAIx/W,KAAKu/W,iBAAA,GA/gBhB,GAAY,CAAA1/W,EAAAyyC,eAAA,uBAAA,EACX,MAAA,CAAA,C,MAGG,GAAO,CAAAzyC,EAAAyyC,eAAA,4BAAA,EACP,MAAQ,CAAA,EAGX,MAAS,CAAA,C,EAGLtyC,KAAK60O,iBAAmB,WACxB,MAAK70O,CAAAA,CAAAA,KAAAu/W,iBAAA,GAGA1/W,CAAAA,CAAAA,EAAYyyC,eAAe,iCAAA,C,EAuhBhCtyC,KAAKy/W,8BAAgC,WA/gBrC,MAAK,CAAAz/W,KAAAo2O,YAAwBp2O,KAAA2rO,uBAAA,C,EAG7B3rO,KAAK0/W,eAAA,WACL,IAEAC,EA+gBM3/W,KAAKu/W,iBAAA,EA/gBN1/W,EAAkByyC,eAAe,uBAAA,EAEjCzyC,EAAiByyC,eAAe,gCAAA,EAkhBnC,MAAO,CAAC,CAACtyC,KAAKy0B,UAAY,CAACz0B,KAAKo2O,YAAcp2O,KAAK2rO,uBAAA,GAA4Bg0I,C,EAGjF3/W,KAAK4/W,8BAAgC,WA9gBrC,OAAK,CAAA5/W,KAAAu6B,MAAYv6B,KAAYu6B,MAAAv6B,KAAA2hC,gBAAA,CAAA3hC,KAAAo2O,YAAAp2O,KAAA2rO,uBAAA,C,EAmhB7B3rO,KAAK6/W,+BAAiC,WACpC,MAAO,CAAC7/W,KAAKu6B,MAAQ,CAACv6B,KAAKo2O,YAAcp2O,KAAK2rO,uBAAA,C,EAGhD3rO,KAAK2rO,uBAAyB,WA/gBhC,IAkhBMg0I,EADE3/W,KAAKu/W,iBAAA,EACU1/W,EAAQyyC,eAAe,uBAAA,EAEvBzyC,EAAQyyC,eAAe,4BAAA,EA9gBhD,OAAAqtU,C,EAEA3/W,KAAQu/W,iBAAO,WAkhBT,OAAoB,MAAbv/W,KAAKu6B,I,EA9gBhBv6B,KAAA8/W,sBAAA,WACA,MAAA,EAAA9/W,KAAAu/W,iBAAA,GAAA,CAAAv/W,KAAAu6B,KAAAg9M,sBAAAv3O,KAAA2rO,uBAAA,C,EAGA3rO,KAAAq+W,kBAAA,WACA,OAAAr+W,KAAAu/W,iBAAA,GAAAv/W,KAAAu6B,KAAAo7B,WAAAxK,EAAAyK,6B,EAGA51D,KAAAs+W,eAAA,WACA,OAAAt+W,KAAAu/W,iBAAA,GAAAv/W,KAAAu6B,KAAAo7B,WAAAxK,EAAAstB,0B,EAGAz4E,KAAA0+W,eAAA,WACA,OAAA1+W,KAAAu6B,MAAAv6B,KAAAu6B,KAAAo7B,WAAAxK,EAAA4qB,0B,EAGA/1E,KAAA+/W,WAAA,WACA,OAAA//W,KAAAu6B,MAAAv6B,KAAAu6B,KAAAo7B,WAAAxK,EAAAowD,+B,EAGAv7G,KAAAy+W,cAAkB,WAChB,OAAMz+W,KAAAu6B,OAAAv6B,KAAAu6B,KAA0Bo7B,WAASxK,EAAAmwD,uCAAAt7G,KAAAu6B,KAAAo7B,WAAAxK,EAAAkwD,+B,EAohBzCr7G,KAAKggX,iBAAmB,WACtB,OAAOhgX,KAAK8/W,sBAAA,C,EAGd9/W,KAAKigX,eAAiB,WAhhBtB,OAAKjgX,KAAA8/W,sBAAA,C,EAohBL9/W,KAjhBEyrO,aAAe,WACjB,OAAKzrO,KAAA8/W,sBAAA,C,EAohBL9/W,KAAKkgX,eAAiB,WACpB,MAAIlgX,CAAAA,KAAK+/W,WAAA,GAGT,EAAK//W,CAAAA,KAAKu/W,iBAAA,GAhhBP1/W,CAAAA,EAAAyyC,eAAsB,kCAAA,GAItBtyC,KAAAo+W,qBAAA,GAAiCp+W,KAAAo2O,aAAmBp2O,KAAA8/W,sBAAA,C,EAohBzD9/W,KAjhBImgX,sBAAA,WACJ,OAAKngX,KAAQ8/W,sBAAA,C,EAGb9/W,KAAKogX,4BAA2B,WAChC,MAAK,CAAApgX,KAAUu6B,MAAQv6B,KAAA8/W,sBAAA,GAAgB,CAAA9/W,KAAA28W,K,EAohBvC38W,KAAKqgX,6BAA+B,WAClC,MAAO,CAACrgX,KAAKu6B,MAAQv6B,KAAK8/W,sBAAA,GAA2B,CAAC9/W,KAAK28W,K,EA9gB7D38W,KAAIsgX,4BAAe,WACjB,MAAK,CAAAtgX,KAAQu6B,MAAOv6B,KAAM8/W,sBAAA,C,EAohB5B9/W,KAAKugX,6BAA+B,WAhhBpC,MAAK,CAAAvgX,KAAAu6B,MAAWv6B,KAAQ8/W,sBAAA,C,EAGxB9/W,KAAKwgX,qBAAA,WACL,MAAK,CAAAxgX,KAAAu6B,MAAWv6B,KAAQ8/W,sBAAA,C,EAGxB9/W,KAAKygX,oBAAgB,SAAcpgV,GACnC,OAAKA,EAAA1oB,cAAwB3X,KAAMqC,UAAA,CAAArC,KAAgBqC,Q,EAGnDrC,KAAK0gX,sBAAsB,WAC3B,OAAK5qV,EAA4B91B,KAAc06I,e,EAG/C16I,KAAK2gX,qBAAoB,WACzB,MAAK,SAAA5qV,EAAkC/1B,KAAA06I,e,EAGvC16I,KAAK4gX,gBAAc,SAAQC,GAC3B,GAAK7gX,KAAAmlH,wBAAyB,GAqhB1B,IAAK,IAAI27P,KAAU9gX,KAAKmlH,uBAhhBvB,IAAA,IAAA47P,KAAA/gX,KAAyBmlH,uBAAkB27P,GAAAz7P,gDAC3C,GAAArlH,KAAUmlH,uBAAyB27P,GAAIz7P,gDAAyB07P,GAAAr7P,2BAAAm7P,EAChE,MAAA,CAAA,EAshBD,MAAO,CAAA,C,EA7gBX7gX,KAAKghX,8CAAsC,SAAAC,EAAArpV,GAC3C,IAAK1F,EAAAlyB,KACLZ,EAAK21B,MAAOkR,UAAQllC,IACpB,CACKR,GAAAq3B,EACDnkB,WAAM,0B,EAEV,SAAKtN,EAAeC,EAAAvF,GACfA,IAAArB,EAA2BsB,YAC3BoxB,EAAAgvV,kEAA4BD,EAAA96W,CAAA,GAE7BpG,GAAA4S,MAAA5S,GAAAurQ,OAAAC,MACC/sL,QAASjxE,MAAQ,mCAAA,E,IAshBtBvN,KAAKkhX,kEAAoE,SAASD,EAAoBxsV,GAhhBtG,IACK/rB,EADA+rB,EAAAgL,WACA/2B,EAAAxJ,EAAAyJ,MAAA,EAkhBEhE,MAAMrF,EAAQ,WAAA,EAAa,2CAAA,CAAA,EAhhB7BkC,YAAAlC,EAAsB,WAAA,EAAQ,yCAAA,CAAA,EAC9BsF,oBAAA,CAAA,CAAA,EAkhBEM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAhhBlC7B,GAAAvF,EAAA,WAAA,EAAyB,eAAA,CAAA,EAE9BJ,EAAKoC,KAAAoH,CAAA,GAmhBDu4W,EAjhBQ,CAAA,EAAAxsV,EAAAl0B,EAAA,C,EAqhBZP,KAjhBEmhX,yCAAM,WACN,IAAA5xK,KAAMvvM,KAA0BuhC,0BAkhB9B,GAjhBEvhC,KAAIuhC,0BAAqBguK,GAA0B6xK,2BAAA19P,UAAA,MAAA,CAAA,EAmhBvD,MAAO,CAAA,C,EA9gBT1jH,KAAIq6B,mBAAe,WACjB,MAAKr6B,CAAAA,CAAAA,KAAI+kN,mBAGF/kN,KAAA+kN,kBAAA4wD,0BAAqC3/O,EAAmCyiF,U,EAohBjFz4G,KAAKqhX,qBAAuB,WAhhB5B,MAAK,EAAArhX,CAAAA,KAAAw2B,oBAAmB,IAAAx2B,KAAAw2B,mBAAAppB,SAGfpN,KAAAw2B,mBAAiB8I,KAAA,SAAA3I,GAkhBtB,MAjhBM,CAAA,CAAAA,EAAAwlH,c,IAqhBVn8I,KAAKshX,kBAAoB,SAASL,GAhhBlC,IAEI/uV,EACGxtB,EAHF7E,EAAA8B,cAAA,uBAAA,IACA,CAAA3B,KAAAqC,UAAArC,KAAAmhX,yCAAA,GACDjvV,EAAelyB,KACZ0E,EAAAxF,EAAAwF,QAAA,EACHC,MAAWrF,EAAA,WAAA,EAAA,6CAAA,CAAA,EAkhBNkC,YAAYlC,EAAQ,WAAA,EAAa,2CAAA,CAAA,EACjCsF,oBAAoB,CAAA,CAAA,EAhhBtBM,OAAQlH,QAAOmH,QAAKsB,SAAAC,IAAA,CAAA,EAClB7B,GAAAvF,EAAA,WAAA,EAAA,aAAA,CAAA,EACHoC,OAAKpC,EAAA,WAAA,EAAA,YAAA,CAAA,EAmhBLJ,EAAUoC,KAAKoD,CAAA,EAASI,KAAK,WAC3B,IAAIwlW,EAAoBnrW,EAAQof,aAAagM,QAAQ1qB,EAAQga,QAAQtZ,GAAK,mBAAA,EACtE+pW,EAhhBPp4U,EAAA8uV,8CAAyBC,EAAA3W,CAAA,EAEvBprW,EAAWoC,KAAI,CACbhD,WAAA,iCACCK,aAAA,KAkhBEC,YAAa,yFACbsG,OAAQlH,QAAQmH,QAAQsB,SAASC,IAAA,EACjC9B,oBAAqB,CAAA,EACrBmO,QAAS,CAhhBVgf,cAAA,CAAA,cAAgB,SAAA5e,GAClB,OAAAA,EAA0BJ,QAAA,sBAAA,C,IAohBvBnM,OAAQ,CACNgc,QAAS,qC,IA/gBlB9d,KAAA,SAAoBmH,GACrBq+V,EAAe7rV,KAAAC,UAAmBzS,EAAA1L,EAAA,EAC3Bge,aAAWC,QAAM3e,EAAAga,QAAkBtZ,GAAQ,oBAAK+pW,CAAA,EAClDp4U,EAAAgvV,kEAAkBD,EAAAh1W,CAAA,C,EACjB,Y,GAqhBD,WAhhBFg1W,EAAoB,CAAA,CAAA,C,IAohBrBA,EAAmB,CAAA,CAAA,E,EA5gBzBjhX,KAAK2gC,oBAAA,WACL,OAAS3gC,KAAIs3B,2BAAY9V,OAAkB,SAAa6e,GACtD,OAAIA,EAAMQ,iB,IAqhBZ7gC,KAjhBIugC,qBAAI,WAkhBN,OAjhBIvgC,KAAAs3B,2BAAA9V,OAAA,SAAA6e,GACF,OAAAA,EAAAK,kB,IAwhBJ1gC,KAAKi3O,aAAA,C,0VAhvBTj5O,QA9gBQC,OAAK,uBAAkB,EAAA,EAAA4mQ,QAAoB,WAAA03G,CAAA,C,IAqwCrD,CAAA,WACE,aAOA,SAASgF,EAAwBC,EACAC,EAhhBxBC,GAujBP,OApCA,SAjhBkB3oW,GAuhBhB/Y,KAjhBEO,GAAKwY,EAAAA,EAAgBxY,GAAA,KAkhBvBP,KAjhBEmoH,UAAKpvG,EAAAA,EAAAovG,UAAgC,KAkhBvCnoH,KAjhBEquO,gBAAKt1N,EAAAA,EAAAs1N,gBAAA,KAkhBPruO,KAAKssO,qBAAuBvzN,EAAQA,EAAMuzN,qBAAuB,KACjEtsO,KAAK2P,eAAiBoJ,EAAQA,EAAMpJ,eAAiB,KAhhBrD3P,KAAK2hX,yBAAuB5oW,GAAWA,EAAA4oW,yBACrC,IAAAH,EAAYzoW,EAAA4oW,wBAAA,EAA4B,KAkhB1C3hX,KAAK4hX,mBAAqB7oW,EAAQA,EAAM6oW,mBAAqB,KAC7D5hX,KAAK+3U,aAAeh/T,GAASA,EAAMg/T,aAAe,IAAI7zR,KAAKnrC,EAAMg/T,YAAA,EAAgB,KAhhBjF/3U,KAAK6hX,cAAc9oW,EAAAA,EAAW8oW,cAAA,KAkhB9B7hX,KAjhBE8hX,QAAS/oW,EAAKA,EAAA+oW,QAAuB,KAkhBvC9hX,KAAK+hX,iBAAmBhpW,EAAQA,EAAMgpW,iBAAmB,KACzD/hX,KAAKgiX,qBAAuBjpW,EAAQA,EAAMipW,qBAAuB,KAhhBjEhiX,KAAKiiX,mBAAqBlpW,EAAAA,EAAWkpW,mBAAA,KAkhBrCjiX,KAjhBEkiX,8BAAanpW,EAAAA,EAAAmpW,8BAAA,KAkhBfliX,KAAKkiX,8BAAgCnpW,EAAQA,EAAMmpW,8BAAgC,KACnFliX,KAAKmiX,sBAAwBppW,EAAQA,EAAMopW,sBAAwB,KAhhBnEniX,KAAKoiX,cAAArpW,EAAAA,EAA2BqpW,cAAW,KAkhB3CpiX,KAjhBE4Z,SAAcb,EAAAA,EAAAa,SAAyB,KAkhBzC5Z,KAAKqiX,qBAAuBtpW,EAAQA,EAAMspW,qBAAuB,KACjEriX,KAAKsiX,eAAiBvpW,EAAQA,EAAMupW,eAAiB,KAhhBrDtiX,KAAKuiX,eAAcxpW,GAAWA,EAAAwpW,eAC5BxpW,EAAAwpW,eAkhBAb,EAAiCc,kBACnCxiX,KAAKyiX,kBAAoB1pW,GAASA,EAAM0pW,kBAhhBxC1pW,EAAK0pW,kBACHhB,EAAaiB,yBAkhBf1iX,KAjhBE2iX,cAAiB5pW,EAAAA,EAAA4pW,cAAA,I,sGAuevB3kX,QACGC,OAAO,uCAAwC,EAAA,EAC/C4mQ,QAAQ,yBAA0B08G,CAAA,C,IA+CvC,CAAA,WACE,aAOA,SAASqB,EAjhBCC,GAijBR,OA9BA,SAAwB9pW,GAkBtB,GAbA/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KAAK+zG,OAASh7F,EAAQA,EAAMg7F,OAAS,KACrC/zG,KAjhBEyC,WAAesW,EAAQA,EAAAvW,WAAA,KAkhBzBxC,KAjhBIwC,WAAWuW,GAAQA,EAAStW,WAAM,IAAAyhD,KAAAnrC,EAAAtW,UAAA,EAAA,KAkhBtCzC,KAAK+8L,WAjhBWhkL,GAAKA,EAASgkL,WAAA,IAAA74I,KAAAnrC,EAAAgkL,UAAA,EAAA,KAkhB9B/8L,KAAK4C,MAAQmW,EAAQA,EAAMnW,MAAQ,KACnC5C,KAAK8iX,8CAAgD/pW,EAAQA,EAAM+pW,8CAAgD,GACnH9iX,KAAKwjC,SAAWzqB,EAAQA,EAAMyqB,SAAW,KACzCxjC,KAjhBEyjC,YAAS1qB,EAAAA,EAAqB0qB,YAAK,KAkhBrCzjC,KAjhBIo1B,MAAKrc,EAAAA,EAAAqc,MAAwB,KAkhBjCp1B,KAjhBIq5I,yBAA4BtgI,EAAKA,EAAAsgI,yBAAkC,KAmhBvEr5I,KAAK69W,wDAA0D,GAC3D9kW,GAASA,EAAM8kW,wDAhhBjB,IAAA,IAAOpqU,EAAM,EAAAA,EAAA16B,EAAW8kW,wDAAAzwW,OAAA,EAAAqmC,EAkhBtBzzC,KAAK69W,wDAAwDvtW,KAC3D,IAAIuyW,EAAwC9pW,EAAM8kW,wDAAwDpqU,EAAA,CAAA,C,wDA5BpHz1C,QACGC,OAAO,8BAA+B,EAAA,EACtC4mQ,QAjhBO,iBAAK+9G,CAAA,C,IAwjBjB,CAAA,WACE,aAEA5kX,QACGC,OAAO,0DAA2D,EAAA,EAClE4mQ,QAjhBQ,0CAohBX,WAmBE,OAjBA,SAAiD9rP,GAK/C/Y,KAjhBEO,GAAOwY,EAAKA,EAAQxY,GAAK,KAkhB3BP,KAAK+oB,OAAShQ,EAAQA,EAAMgQ,OAAS,KACrC/oB,KAAKwjC,SAAWzqB,EAAQA,EAAMyqB,SAAW,KAhhBzCxjC,KAAKyjC,YAAA1qB,EAAmBA,EAAA0qB,YAAW,KAkhBnCzjC,KAjhBEo1B,MAAIrc,EAAeA,EAAAqc,MAAA,KAkhBrBp1B,KAjhBE+9W,sCAAuChlW,EAASA,EAAAglW,sCAAuB,I,EAfxB,C,IA2iBvD,CAAA,WACE,aAOA,SAASgF,EAjhBwB9sV,EAAKC,GAq1BpC,OAnUA,SAjhBYnd,GAqhBV/Y,KAAKO,GAjhBKwY,EAAIA,EAAAxY,GAAc,KAkhB5BP,KAAKmoH,UAjhBOpvG,EAAAA,EAAiBovG,UAAS,KAmhBtCnoH,KAAK+Z,QAjhBOhB,EAAAA,EAAiBgB,QAAS,KAkhBtC/Z,KAAK4tC,aAAe70B,EAAQA,EAAM60B,aAAe,KACjD5tC,KAAKuyC,aAjhBUx5B,EAAAA,EAAAw5B,aAAA,KAkhBfvyC,KAAK2rD,KAjhBK5yC,EAAAA,EAAA4yC,KAAiB,KAkhB3B3rD,KAAK0jE,YAAc3qD,EAAQA,EAAM2qD,YAAc,KAC/C1jE,KAAK4C,MAjhBOmW,EAAAA,EAAAnW,MAAkB,KAkhB9B5C,KAAKga,UAjhBKjB,EAAAA,EAAiBiB,UAAA,KAkhB3Bha,KAAKqmB,SAjhBUtN,EAAAA,EAAAsN,SAAA,KAkhBfrmB,KAAK05C,cAjhBK3gC,EAAiBA,EAAA2gC,cAAmB,KAkhB9C15C,KAAKg1K,cAjhBKj8J,EAAiBA,EAAAi8J,cAAA,KAkhB3Bh1K,KAAKsmB,YAAcvN,EAAQA,EAAMuN,YAAc,KAC/CtmB,KAAK89C,iBAjhBG/kC,EAAAA,EAA8B+kC,iBAAA,KAkhBtC99C,KAAK8rL,iBAjhBQ/yK,EAAAA,EAAA+yK,iBAAA,KAkhBb9rL,KAAKsI,YAjhBGyQ,EAAiBA,EAAAzQ,YAAA,KAkhBzBtI,KAAKgjX,iBAAmBjqW,EAAQA,EAAMiqW,iBAAmB,KACzDhjX,KAAKijX,iBAAmBlqW,EAAQA,EAAMkqW,iBAAmB,KACzDjjX,KAAKoI,MAAQ2Q,EAAQA,EAAM3Q,MAAQ,KACnCpI,KAjhBEw5C,WAAOzgC,EAAAA,EAAAygC,WAAA,KAkhBTx5C,KAAKkjX,WAAanqW,EAAQA,EAAMmqW,WAAa,KAC7CljX,KAAKumB,OAASxN,EAAQA,EAAMwN,OAAS,KAhhBrCvmB,KAAK45C,YAAA7gC,EAAmBA,EAAA6gC,YAAW,KAkhBnC55C,KAjhBEmjX,YAAapqW,EAAAA,EAAAoqW,YAAA,KAkhBfnjX,KAjhBEo1C,gBAASr8B,EAAAA,EAAAq8B,gBAA2B,KAkhBtCp1C,KAjhBIsgQ,0BAAKvnP,EAkhBLA,EAjhBMunP,0BAkhBN,KACJtgQ,KAAKqgQ,2BAA6BtnP,EAC9BA,EAAMsnP,2BACN,KACJrgQ,KAjhBE66E,WAAa9hE,EAAWA,EAAA8hE,WAAA,KAkhB1B76E,KAAK86E,UAAY/hE,EAAQA,EAAM+hE,UAAY,KAC3C96E,KAAKkmB,QAAUnN,EAAQA,EAAMmN,QAAU,KAhhBvClmB,KAAKojX,aAAArqW,EAAuBA,EAAAqqW,aAAS,KAkhBrCpjX,KAjhBEqjX,aAAatqW,EAAWA,EAAKsqW,aAAiB,KAkhBhDrjX,KAAK4pE,gBAAkB7wD,EAAQA,EAAM6wD,gBAAkB,KACvD5pE,KAAKkgB,MAAQnH,EAAQA,EAAMmH,MAAQ,KAhhBnClgB,KAAKs0M,OAAAv7L,EAAaA,EAAAu7L,OAAW,KAkhB7Bt0M,KAjhBEu0M,gBAASx7L,EAAAA,EAA0Bw7L,gBAAc,KAmhBnDv0M,KAAKiI,aAAe8Q,EAAQA,EAAM9Q,aAAe,KACjDjI,KAjhBE++U,kBAAahmU,EAAAA,EAAAgmU,kBAAA,KAkhBf/+U,KAjhBI4C,MAASmW,EAAKA,EAAAnW,MAAA,KAkhBlB5C,KAAK26B,cAAgB5hB,EAAQA,EAAM4hB,cAAgB,KACnD36B,KAAKggC,eAAiBjnB,EAAQA,EAAMinB,eAAiB,KA/gBrDhgC,KAAKkjC,UAAAnqB,EAAeA,EAAWmqB,UAAA,KAkhB/BljC,KAjhBEyxM,eAAS14L,EAAAA,EAAA04L,eAA4B,KAkhBvCzxM,KAjhBIyyM,sBAAK15L,EAA2BA,EAAA05L,sBAAuB,KAmhB3DzyM,KAAK+oB,OAAShQ,EAAQA,EAAMgQ,OAAS,KACrC/oB,KAAKujQ,gBAAkBxqP,EAAQA,EAAMwqP,gBAAkB,KACvDvjQ,KAAKohQ,gBAAkBroP,EAAQA,EAAMqoP,gBAAkB,KACvDphQ,KAjhBEghQ,oBAAkBjoP,EAAAA,EAAAioP,oBAAA,KAmhBpBhhQ,KAjhBEgmB,IAAKjN,EAAAA,EAAciN,IAAK,KAohB1BhmB,KAAKi6B,sBAAwBlhB,EAAQA,EAAMkhB,sBAAwB,KACnEj6B,KAjhBEk6B,sBAAKnhB,EAAAA,EAAAmhB,sBAAA,KAkhBPl6B,KAAK2P,eAAiBoJ,EAAQA,EAAMpJ,eAAiB,KACrD3P,KAAK0P,eAAiBqJ,EAAQA,EAAMrJ,eAAiB,KAhhBrD1P,KAAKgQ,IAAA+I,EAAAA,EAAkB/I,IAAA,KAkhBvBhQ,KAjhBEg4Q,SAAaj/P,EAAAA,EAAAi/P,SAAA,KAkhBfh4Q,KAjhBEob,kBAAoBrC,EAAKA,EAAAqC,kBAA2B,KAkhBtDpb,KAjhBImQ,SAAU4I,EAAMA,EAAK5I,SAAA,KAkhBzBnQ,KAAK8a,wBAjhBiB/B,EAkhBlBA,EAAM+B,wBAhhBN,KAkhBJ9a,KAAK6a,wBAjhBM9B,EAkhBPA,EAAM8B,wBACN,KAEJ7a,KAAKi5H,OAASlgH,EAAQA,EAAMkgH,OAAS,KAhhBrCj5H,KAAK84L,KAAA//K,EAAAA,EAAA+/K,KAAA,KAkhBL94L,KAjhBEwjC,SAASzqB,EAAAA,EAAAyqB,SAAoB,KAkhB/BxjC,KAjhBIo1B,MAAKrc,EAAQA,EAAAqc,MAAe,KAohBhCp1B,KAAK2X,aAjhBIoB,CAAAA,CAAAA,GAAAA,EAAApB,aAkhBT3X,KAjhBIsjX,UAAavqW,EAAAA,EAAAuqW,UAAe,KAkhBhCtjX,KAAK0gC,mBAjhBQ3nB,EAAAA,EAAA2nB,mBAAA,KAkhBb1gC,KAAKghC,eAAiBjoB,EAAQA,EAAMioB,eAAiB,KACrDhhC,KAAK0zM,8BAAgC36L,CAAAA,CAAAA,GAAQA,EAAM26L,8BACnD1zM,KAjhBE6gC,kBAAqB9nB,EAAAA,EAAA8nB,kBAAA,KAkhBvB7gC,KAjhBI8gC,6BAAO/nB,CAAAA,CAAAA,GAAAA,EAAA+nB,6BAohBX9gC,KAjhBKqhH,UAAKtoG,EAAAA,EAAAsoG,UAAA,KAohBVrhH,KAjhBI+yM,aAAO,CAAA,EAkhBX/yM,KAAKs3M,YAAc,CAAA,EACnBt3M,KAjhBEm+W,cAAY,CAAA,EAkhBdn+W,KAjhBIsgC,gBAAAvnB,CAAAA,CAAAA,GAAAA,EAAAunB,gBAohBJtgC,KAAK4tM,UAAY70L,EAAQA,EAAM60L,UAAY,KAC3C5tM,KAAKusM,cAAgBxzL,EAAQA,EAAMwzL,cAAgB,KACnDvsM,KAAKujX,2BAA6BxqW,EAAQA,EAAMwqW,2BAA6B,KAhhB7EvjX,KAAKwjX,0BAAyBzqW,EAAWA,EAAAyqW,0BAAA,KAkhBzCxjX,KAjhBEyjX,WAAS1qW,EAAAA,EAAoB0qW,WAAA,KAkhB/BzjX,KAjhBI0jX,mBAAa3qW,CAAAA,CAAAA,GAAeA,EAAA2qW,mBAohBhC1jX,KAAK2jX,eAjhBI5qW,EAAAA,EAAA4qW,eAAA,KAkhBT3jX,KAjhBI4jX,yBAA4B7qW,EAAAA,EAAA6qW,yBAA+B,KAkhB/D5jX,KAAKkiC,UAjhBQnpB,EAAAA,EAAAmpB,UAAA,KAkhBbliC,KAAKiiC,WAAalpB,CAAAA,CAAAA,GAAQA,EAAMkpB,WAEhCjiC,KAjhBE6jX,aAAO,WAkhBP,OAAI7jX,KAAK4pE,kBA/gBN5pE,KAAA2X,aACM,qCACA3X,KAAAkiC,UACF,2EAEH,4C,EAwhBNliC,KAjhBEmxM,aAAa,SAAcrtK,EAAK1P,GA4hB1B0vV,EAzhByB,OAAjC9jX,KAAKi6B,uBACC,OAAJj6B,KAAIk6B,sBAshBEl6B,KAAKk6B,wBAA0Bl6B,KAAKi6B,sBAhhBlC6J,EAkhBU9jC,KAAKi6B,sBA/gBuB,IAA3Cj6B,KAAAi6B,uBAA2C,IAAAj6B,KAAAob,mBAohB9B0oB,EACR9jC,KAAKi6B,sBAhhBVj6B,KAAAk6B,sBAmhB0B,OAAlBl6B,KAAKmQ,SACF2zB,EAhhBX9jC,KAAA8a,wBACC9a,KAAA6a,wBAEFipB,EAAiB9jC,KAAQ2P,eAAe3P,KAAA0P,eAO5C,OAHEo0W,EAghBI1vV,EAhhBG6B,EAAAi3K,WAAA42K,CAAA,EAGJA,C,EAohBL9jX,KAAK65B,SAAW,SAAUypO,EAAgBlvO,EAAOuoV,GAhhB5C,KAAA,IAAAvoV,IACHA,EAAS,CAAA,GAmhBKtP,KAAAA,IAAV63V,IAhhBNA,EAAK,CAAA,GAmhBH,IAAIpmV,EAAeL,EAAmB8H,qBAAqB,qBAAA,EACvD8lV,EAAY9jX,KAAKmxM,aAAa,CAAA,EAAM,CAAA,CAAA,EAIpC/7K,EAnhBJkuO,EAkhBM/sO,GAAgBomV,EACVmH,EAAY9jX,KAAK+oB,OA/gBjB+6V,GAAa9jX,KAAK+oB,OAAA/oB,KAAaujQ,gBAAAvjQ,KAAoBohQ,iBAG5D7qO,GAAaomV,EACJmH,EAAQ9jX,KAAK+oB,OAmhBb+6V,GAAa9jX,KAAK+oB,OAAS/oB,KAAKohQ,iBAI5C,OAAOhtO,EAAQ6B,EAAMi3K,WAAW93K,CAAA,EAASa,EAAMi3K,WAAW93K,EAAO,CAAA,C,EAGnEp1B,KAAKkhC,YAAc,SAAUoiO,EAAgBlvO,EAAOuoV,GAC7B,KAAA,IAAVvoV,IAhhBbA,EAAK,CAAA,GAmhBWtP,KAAAA,IAAV63V,IACFA,EAAQ,CAAA,GA/gBV,IAkhBIpmV,EAAeL,EAAmB8H,qBAAqB,qBAAA,EACvD8lV,EAAY9jX,KAAKmxM,aAAa,CAAA,EAAO,CAAA,CAAA,EA9gBvC3tK,EAFC8/N,EACC/sO,GAAKomV,EACAmH,EAAA9jX,KAAA+oB,OAEC+6V,GAAA9jX,KAAoB+oB,OAAA/oB,KAAAujQ,gBAAAvjQ,KAAAohQ,iBAohBxB7qO,GAAgBomV,EACPmH,EAAY9jX,KAAK+oB,OAEjB+6V,GAAa9jX,KAAK+oB,OAAS/oB,KAAKohQ,iBA9gB/C,OAAOhtO,EAAK6B,EAAAi3K,WAAA1pK,CAAA,EAAAA,C,EAGdxjC,KAAK+jX,eAAA,WACH,OAAO/jX,KAAC65B,SAAa,CAAA,EAAK,CAAA,CAAA,EAAA75B,KAAAkhC,YAAA,CAAA,EAA4B,CAAA,CAAA,C,EAGxDlhC,KAAKgkX,iBAAA,WACH,OAAOhkX,KAACmxM,aAAa,CAAA,CAAA,EAAKnxM,KAAAujQ,e,EAG5BvjQ,KAAKikX,qBAAA,WAmhBH,IAaMv0W,EAbF1P,KAAKkjC,WAAaljC,KAAKmjC,oBACzBnjC,KAAKmQ,SAAWnQ,KAAKojC,yBA/gBvBpjC,KAAO6a,wBAAmBob,EAAAi3K,WAkhBtBltM,KAAK0P,gBAAkB,EAAMyL,WAAWnb,KAAKmQ,QAAA,EAAY,I,EA/gB/DnQ,KAAK8a,wBAAuBmb,EAAWi3K,WACrCltM,KAAQ2P,gBAAkB,EAAAwL,WAAAnb,KAAAmQ,QAAA,EAAA,I,GAmhBfnQ,KAAKmQ,WAhhBlBnQ,KAAKmQ,SAAAgkB,KAAAkP,IAAsBrjC,KAAAmQ,SAAe,CAAA,EACxCnQ,KAAOmQ,SAAKgkB,KAAAmP,IAAAtjC,KAAgBmQ,SAAK,GAAA,EAmhB3BT,EAAiB1P,KAAK2P,gBAAkB,EAAOwL,WAAWnb,KAAKob,iBAAA,EAAqB,KAAQpb,KAAK6a,wBAhhBpGnL,GAAA,EAAwByL,WAAWnb,KAAAmQ,QAAA,EAAA,KACtCnQ,KAAO8a,wBAkhBH9a,KAAK2P,gBAAkB,EAAMwL,WAAWnb,KAAKmQ,QAAA,EAAY,KA/gB/DnQ,KAAK6a,wBACHnL,IAAkB,IAAAyL,WAAAnb,KAA2BmQ,QAAA,GAAK,KAkhBhDnQ,KAAK8a,wBAA0B9a,KAAK6a,yBAA2B,EAAOM,WAAWnb,KAAKob,iBAAA,EAAqB,K,EAI/Gpb,KAjhBIq/W,YAAO,WAkhBTr/W,KAAKikX,qBAAA,EACLjkX,KAAKwjC,SAAWxjC,KAAKkhC,YAAA,EACrBlhC,KAjhBEo1B,MAASp1B,KAAA65B,SAAA,C,EAwhBb75B,KAAKkkX,gBAAkB,WAErB,OADAlkX,KAjhBEq/W,YAAA,EAmhBA,CAAC,CAACr/W,KAAKmQ,UACyB,OAA/BnQ,KAAKi6B,uBAhhBLj6B,KAAAi6B,sBAAAj6B,KAAA2P,c,EAyhBL3P,KAAKmkX,iBAjhBgB,SAAYC,GAmhB/B,OADApkX,KAAKq/W,YAAA,EACD+E,EAhhBKpkX,KAAA+oB,OAAW/oB,KAAO2P,gBAmhBnB3P,KAAK+oB,OAAS/oB,KAAKujQ,iBAAmBvjQ,KAAK2P,c,EAGrD3P,KAAKqkX,sBAAwB,SAAUpqV,GAhhBvCj6B,KAAKi6B,sBAAAA,EAEsB,OAAvBj6B,KAAIi6B,uBAC0BnV,KAAAA,IAihB9B9kB,KAjhBGi6B,sBAmhBHj6B,KAjhBGk6B,sBAAoB,KAmhBvBl6B,KAjhBGk6B,sBAAwBjE,EAAAi3K,WAkhBzB/xL,WAhhBFnb,KAAAi6B,uBAAe,EAAAj6B,KAAAob,kBAAA,I,GAqhBjBpb,KAAKq/W,YAAA,C,EAGPr/W,KAjhBEkxK,YAAK,SAAA/gK,KAmhBPnQ,KAAKskX,kBAAoB,WAhhBvB,OAkhBkC,OAA/BtkX,KAAKi6B,uBAC2BnV,KAAAA,IAA/B9kB,KAAKi6B,wBAhhBX,CAAKj6B,KAAA2X,Y,EAqhBL3X,KAjhBEukX,iBAAY,WAkhBZ,OACEvkX,KAAKmQ,UAAY,CAACnQ,KAAK2X,Y,EAO3B3X,KAAKq/W,YAAA,C,2CAtUTrhX,QACGC,OAjhBO,uCAAgC,EAAA,EAkhBvC4mQ,QAjhBO,yBAAwBk+G,CAAA,C,IA41BpC,CAAA,WACE,aAEA/kX,QACGC,OAAO,sCAjhBmC,EAAA,EAkhB1C4mQ,QAAQ,wBAGX,WAkBE,OAhBA,SAjhBc9rP,GAshBZ/Y,KAAKO,GAAKwY,EAjhBEA,EAAAxY,GAAc,KAkhB1BP,KAAK4gN,oBAjhBoB7nM,EAAAA,EAAA6nM,oBAAA,KAkhBzB5gN,KAAK+oB,OAjhBOhQ,EAAQA,EAAQgQ,OAAQ,KAkhBpC/oB,KAAKosM,aAjhBOrzL,EAAAA,EAAqBqzL,aAAA,KAkhBjCpsM,KAAKqlC,eAjhBgBtsB,EAAAA,EAAAssB,eAAA,KAkhBrBrlC,KAAK2/B,kBAjhBS5mB,EAAAA,EAAA4mB,kBAAwB,KAkhBtC3/B,KAAKohX,2BAjhBkBroW,EAAYA,EAAQqoW,2BAAA,GAkhB3CphX,KAAKy9W,kBAAoB1kW,EAAQA,EAAM0kW,kBAAoB,GAC3Dz9W,KAAKyhC,wBAA0B1oB,EAAQA,EAAM0oB,wBAA0B,I,EAniBnD,C,IA0iB1B,CAAA,WACE,aAOA,SAAS+iV,EACPC,EACA3pR,EACA4pR,EACA13I,EACA7hL,EACAwvD,GA8YA,OA3YA,SAA6B5hG,GAE3B,IA/gBE4rW,EAA8C,CAkhB9Cx5T,EAjhBckwD,+BAkhBdlwD,EAAoBmwD,uCA5f1B,GAfIt7G,KAAKO,GAAAwY,EAAAA,EAAAxY,GAAA,KAkhBLP,KAAKyyD,YAAc15C,EAAQA,EAAM05C,YAAc,KAC/CzyD,KAAKmoH,UAAYpvG,EAAQA,EAAMovG,UAAW,KAhhB5CnoH,KAAO+zG,OAAAh7F,EAAAA,EAAAg7F,OAAA,KAkhBL/zG,KAAK6Z,QAAUd,EAAQA,EAAMc,QAAU,KACvC7Z,KAAKsF,KAAOyT,EAAQA,EAAMzT,KAAO,KACjCtF,KAAKwC,WAAauW,GAASA,EAAMvW,WAAa,IAAI0hD,KAAKnrC,EAAMvW,UAAA,EAAc,KAhhBhFxC,KAAA+8L,WAAYhkL,GAAAA,EAAAgkL,WAAA,IAAA74I,KAAAnrC,EAAAgkL,UAAA,EAAA,KACX/8L,KAAA6hX,cAAA9oW,EAAAA,EAAA8oW,cAAA,KAkhBI7hX,KAAK4kX,uCAAyC7rW,EAAQA,EAAM6rW,uCAAyC,KACrG5kX,KAAK0kH,wBAA0B3rG,EAAQA,EAAM2rG,wBAA0B,KAjhB3E1kH,KAAA6kX,uBAAA9rW,EAAAA,EAAA8rW,uBAAA,KACG7kX,KAAAs2F,cAAOv9E,EAAAA,EAAAu9E,cAAwC,KAC/Ct2F,KAAAy4F,cAAQ1/E,EAAAA,EAA0B0/E,cAAA,KAohBjCz4F,KAAK8kX,6BAA+B,GAjhBxC/rW,GAASA,EAAA+rW,6BAmhBH,IAAK,IAAIrxU,EAAI,EAAGA,EAAI16B,EAAM+rW,6BAlhBC13W,OAAA,EAAAqmC,EAmhBzBzzC,KAAK8kX,6BAlhBoBx0W,KAAA,IAAAo0W,EAAkC3rW,EAAA+rW,6BAAArxU,EAAA,CAAA,EAuhB/D,GADAzzC,KAAKqlH,gDAAkD,GACnDtsG,GAASA,EAAMssG,gDACjB,IAAS5xE,EAAI,EAAGA,EAAI16B,EAAMssG,gDAAgDj4G,OAAQ,EAAEqmC,EAClFzzC,KAAKqlH,gDAAgD/0G,KAAK,IAAIm0W,EAAkC1rW,EAAMssG,gDAAgD5xE,EAAA,CAAA,EA5gB1J,GAFAzzC,KAAK+kX,qCAAqChsW,EAAAA,EAAAgsW,qCAAuB,GACjE/kX,KAAKglX,6CAA+B,GACpCjsW,GAAKA,EAAAisW,6CACH,IAAIvxU,EAAA,EAAAA,EAAe16B,EAAMisW,6CAA4B53W,OAAA,EAAAqmC,EACvDzzC,KAAKglX,6CAAmC10W,KAAA,IAAqBwqF,EAAA/hF,EAAAisW,6CAAAvxU,EAAA,CAAA,EAK7DzzC,KAAKilX,gBAAA,CAAA,EACLjlX,KAAKklX,eAAA,GACLllX,KAAKmlX,aAAA,KACLnlX,KAAKolX,oBAAA,KAELplX,KAAKqlX,yBAAwB,CAAA,EAC7BrlX,KAAKslX,kBAAmB,CAAA,EAuhBxBtlX,KAlhBEw9W,4BAAiC,SAAA+H,GACnC,IAAK,IAAA9xU,EAAA,EAAAA,EAAA16B,EAAoBssG,gDAAej4G,OAAA,EAAAqmC,EACtCzzC,KAAMqlH,gDAAA5xE,GAAA+pU,4BAAA+H,CAAA,C,EAshBRvlX,KAAK09W,oBAAsB,SAAS8H,GAElC,IAAIC,EAAc,GAClBD,EAAgBtkX,QAAQ,SAASg+W,GAC/BA,EAAerB,wDAAwD38W,QAAQ,SAASwkX,GAjhBrFD,EAAAC,EAAA3H,yCACX0H,EAAAC,EAAA3H,uCAAA,GAohBU0H,EAAYC,EAAO3H,wCAA0C2H,EAAO38V,M,KAIxE,IAAK,IAAI0qB,EAAI,EAAGA,EAAI16B,EAAMssG,gDAAgDj4G,OAAQ,EAAEqmC,EAClFzzC,KAAKqlH,gDAAgD5xE,GAAGkyU,WAAWF,EAAYzlX,KAAKqlH,gDAAgD5xE,GAAGlzC,GAAA,C,EAI3IP,KAAKu9I,UAAY,WACf,OAAOv9I,KAAKsF,OAAS0nO,EAAuBY,0B,EAhhB9C5tO,KAAK4lX,YAAa,WAClB,OAAK5lX,KAASsF,OAAQ0nO,EAAea,4B,EAGrC7tO,KAAKouO,eAAa,WAClB,MAAK,SAAQpB,EAAsBhtO,KAAAsF,K,EAGnCtF,KAAK6lX,qBAAsB,WAC3B,MAAK,CAAA,C,EAGL7lX,KAAK8lX,YAAA,WACL,MAAI,CAAA9lX,KAASklX,gBAAMllX,KAAAsF,OAAA0nO,EAAAkB,4B,EAshBnBluO,KAAK+lX,cAnhBK,WAohBR,OAAO/lX,KAAKsF,OAAS0nO,EAAuBY,0B,EAG9C5tO,KAAKgmX,YAAc,WACjB,OAAOhmX,KAAKsF,OAAS0nO,EAAuBY,4BAA8B5tO,KAAKsF,OAAS0nO,EAAuBa,4B,EAGjH7tO,KAAK6rO,UAAY,WAlhBnB,OAAO7rO,KAAAsF,OAAA0nO,EAAAY,4BAAA5tO,KAAAsF,OAAA0nO,EAAAa,4B,EAshBL7tO,KAAKu+W,YAAc,WAlhBxB,OAAYv+W,KAAAsF,OAAA0nO,EAAAc,4BAAA9tO,KAAAsF,OAAA0nO,EAAAe,4B,EAGX/tO,KAAAw+W,mBAAA,WACG,OAAOx+W,KAAAsF,OAAA0nO,EAAAgB,2B,EAshBNhuO,KAAK2+W,YAAc,WAlhBvB,OAAS3+W,KAAAsF,OAAA0nO,EAAAY,4BAA2C5tO,KAAAimX,cAAA,EAAAjmX,KAAAkmX,sBAAA,C,EAshBhDlmX,KAAKo+W,qBAAuB,WAC1B,OAAOp+W,KAAKsF,OAAS0nO,EAAuBY,4BAA8B5tO,KAAKimX,cAAA,EAAkBjmX,KAAKkmX,sBAAA,IAA4BlmX,KAAKsF,OAAS0nO,EAAuBc,4BAA8B9tO,KAAKsF,OAAS0nO,EAAuBe,6B,EAhhB5O/tO,KAAKmmX,mBAAmB,WACxB,OAAKnmX,KAASsF,OAAQ0nO,EAAegB,2B,EAGrChuO,KAAKomX,oBAAsB,WAC3B,OAAKpmX,KAAAsF,OAAA0nO,EAAwCgB,2B,EAshB7ChuO,KAAKqmX,mBAAqB,WACxB,OAAOrmX,KAAKsF,OAAS0nO,EAAuBc,4BAC1C9tO,KAAKsF,OAAS0nO,EAAuBe,4B,EAGzC/tO,KAAKsmX,oBAAsB,WACzB,OAAOtmX,KAAKsF,OAAS0nO,EAAuBiB,oC,EAhhBlDjuO,KAAAumX,yBAAA,WAohBM,OAAOvmX,KAAKsF,OAAS0nO,EAAuBa,8BAAgC7tO,KAAK8rO,sCAAwC,CAAC9rO,KAAK6kX,sB,EAjhBlI7kX,KAAAwmX,qBAAO,WACP,OAAQxmX,KAAAsF,OAAA0nO,EAA0BY,4BAAA5tO,KAAAsF,OAAA0nO,EAAAa,+BAAA,CAAA7tO,KAAA8rO,oC,EAGrC9rO,KAASimX,cAAA,WAshBH,IArhBJ,IAAAh6W,EAAS,EAqhBIwnC,EAAI,EAAGA,EAAI16B,EAAMssG,gDAAgDj4G,OAAQ,EAAEqmC,EAClFxnC,GAAUjM,KAAKqlH,gDAAgD5xE,GAAG1qB,OAlhBtE,OAAK9c,C,EAGLjM,KAAKkmX,sBAAwB,WAE7B,IADA,IAAKj6W,EAAA,EACAwnC,EAAA,EAAAA,EAAe16B,EAAQssG,gDAAqBj4G,OAAA,EAAAqmC,EACjDxnC,GAAYjM,KAAAqlH,gDAAqB5xE,GAAAgzU,QAEjC,OAAKx6W,C,EAGLjM,KAAK0mX,4BAA8B,WAEnC,IADA,IAAKz6W,EAAA,EACAwnC,EAAA,EAAAA,EAAc16B,EAAQssG,gDAAoBj4G,OAAA,EAAAqmC,EAC/CxnC,GAAKjM,KAAAqlH,gDAAoD5xE,GAAAkzU,mBAEzD,OAAK16W,C,EAGLjM,KAAK4mX,uBAAsB,WAC3B,IAAK36W,EAAA,GACA45E,EAA2B,WAAd7lF,KAAAklX,gBAA2B,kBAAAllX,KAAAklX,eAAA,qBAAA,eA2hB3C,OAzhBFllX,KAAKqlH,gDAA0CnkH,QAAA,SAAA+vE,GAC1CA,EAAAk7J,eACAlgO,EAAAglE,EAAA1wE,IAAkB0wE,EAAQ4U,G,GAG3B55E,C,EAuhBJjM,KAphBI6mX,sBAAA,WACJ,IAAK56W,EAAA,GAIL,OAHAjM,KAAKqlH,gDAAsCnkH,QAAA,SAAA+vE,GAC3ChlE,EAAKglE,EAAU1wE,IAAQ0wE,EAAM3d,M,GAExBrnD,C,EAGLjM,KAAK8mX,2BAAuB,WAC5B,IAAK76W,EAAA,GAIL,OAihBEjM,KAAKqlH,gDAAgDnkH,QAAQ,SAAS+vE,GAnhBxEhlE,EAAKglE,EAAA1wE,IAAe0wE,EAAQ81S,kC,GAEvB96W,C,EAuhBLjM,KAAKgnX,2BAA6B,WAnhBlC,IAAK/6W,EAAA,GAOL,OALAjM,KAAKqlH,gDAAsCnkH,QAAA,SAAwB+vE,GAqhB3DA,EAAMk7J,eAnhBTlgO,EAAAglE,EAAS1wE,IAAQ0wE,EAAMg2S,a,GAGvBh7W,C,EAuhBLjM,KAAKknX,qBAAuB,WAC1BlnX,KAAKilX,gBAAkB,CAAA,EAnhBzBjlX,KAAKmlX,aAAA,KACLnlX,KAAKolX,oBAAwB,KAC7BplX,KAAKklX,eAAiB,GACtBllX,KAAKqlX,yBAAyB,CAAA,EAC9BrlX,KAAKslX,kBAAoB,CAAA,EAEzBtlX,KAAKqlH,gDAAkCnkH,QAAoB,SAAA+vE,GAC3DA,EAAKi2S,qBAAA,C,IAILlnX,KAAKmnX,uBAAA,WAqhBH,MAphBQ,WAANnnX,KAAMklX,gBAAA,kBAAAllX,KAAAklX,c,EAIVllX,KAAKonX,uBAAqB,WAC1B,MAA8B,WAAzBpnX,KAAAklX,c,EAuhBLllX,KAAKqnX,0BAA4B,WAnhBjC,MAA4B,qBAAvBrnX,KAAAklX,c,EAGLllX,KAAKsnX,qBAAiB,WACtB,MAAKtnX,CAAAA,CAAAA,KAAAqnX,0BAAA,GAwhBCrnX,CAAAA,KAAKmnX,uBAAA,GAA4BnnX,CAAAA,KAAKonX,uBAAA,GA7gBb,KAA1BpnX,KAAAklX,c,EAGLllX,KAAKksO,qDAAsC,WAC3C,OAAKlsO,KAAAqlH,gDAA8C7jG,OAAA,SAAAyvD,GACnD,MAAK,CAAAA,EAAA00C,mCAA2CrlF,e,IAwhBhDtgC,KAAK8yI,0BAA4B,WAC/B,OAAQ9yI,KAAKs2F,eAAiBt2F,KAAKs2F,cAAclpF,QAAWpN,KAAKy4F,a,EAjhBnEz4F,KAAKunX,+BAA0B,WAC/B,OAAKvnX,KAAAs2F,eAA2Bt2F,KAAAs2F,cAAalpF,QAAA,CAAApN,KAAAy4F,a,EAuhB7Cz4F,KAphBEwnX,qBAA0B,WAqhB1B,OAphBExnX,KAAOilX,iBAqhBPjlX,KAphBKsF,OAAS0nO,EAAca,8BAC5B7tO,KAAA+kX,qCAAO33W,M,EAuhBXpN,KAAKynX,uBAphBI,WAqhBP,OAphBEznX,KAAOilX,iBAAAjlX,KAAAsF,OAAA0nO,EAAAa,4B,EAuhBX7tO,KAAK0nX,sBAAwB,WAC3B,OAAO1nX,KAAKwnX,sBAAwBxnX,KAAKynX,uBAAA,C,EAjhB3CznX,KAAK2nX,kCAAkC,SAAOjrR,GAC5C18F,KAAIglX,6CAAA10W,KAAAosF,CAAA,EACJ18F,KAAA+kX,qCAAAz0W,KAAAosF,EAAAn8F,EAAA,C,EAuhBFP,KAphBI4nX,qCAAA,SAAAC,GAqhBF,IAAIhrR,EAAgB78F,KAAKglX,6CAA6CniV,UAAU,SAAS65D,GACvF,OAAOA,EAAMn8F,KAAOsnX,C,EACnB,CAAA,EAICC,GAvhBO,CAAA,IAATjrR,GAqhBA78F,KAphBEglX,6CAAajgV,OAAA83D,EAAA,CAAA,EAEN78F,KAAA+kX,qCAAAliV,UAAA,SAAA65D,GAqhBT,OAphBIA,IAAamrR,C,IAEV,CAAA,IAohBLC,GACF9nX,KAphBE+kX,qCAAYhgV,OAAA+iV,EAAA,CAAA,EAshBhB9nX,KAAKqlH,gDAphBQnkH,QAAA,SAAA+vE,GAqhBPA,EAAM81S,qCAAuCc,IAC/C52S,EAphBG81S,mCAA4B,K,IAyhBrC/mX,KAphBI+nX,qCAA2B,SAAsBrrR,GAqhBnD,IAAI53D,EAAQ9kC,KAAKglX,6CAA6CniV,UAAU,SAASmlV,GAC/E,OAAOtrR,EAAMn8F,KAAOynX,EAASznX,E,GAlhBjB,CAAA,IAAZukC,EAqhBA9kC,KAAKglX,6CAA6ClgV,GAAS43D,EAlhB7D18F,KAAO2nX,kCAAAjrR,CAAA,C,EAwhBT18F,KAphBEioX,gBAAqB,SAAAx7W,GAqhBrBzM,KAphBEklX,eAAQz4W,EAqhBVzM,KAAKilX,gBAAkB,CAAA,C,EAGzBjlX,KAAKisO,oBAAsB,WAnhBzBjsO,KAAIioX,gBA2MY,MA3MG,C,EAuhBrBjoX,KAphBEkoX,mBAAoB,WAqhBpB,MA7UgB,SAvMVloX,KAAAklX,c,EAuhBRllX,KAAKmoX,sBAphBsB,WAqhBzBnoX,KAAKioX,gBAj2BF,SAi2BkB,C,EAGvBjoX,KAAKooX,qBAphBqB,WAqhBxB,MAr2BG,YAq2BIpoX,KAphBEklX,c,EAuhBXllX,KAAKqoX,cAAgB,WACnB,OAAOroX,KAAKqlH,gDAAgD4wK,OAAO,SAASqyF,EAAKr3S,GAnhBjF,OAAOq3S,EAAQr3S,EAAM3d,OAAA2d,EAAWk7J,Y,EAqhB7B,CAAA,C,EAGLnsO,KAphBEuoX,mBAAqB,WAqhBrB,OAphBEvoX,KAAQqlH,gDAAAp5C,MAAA,SAAAgF,GAqhBR,OAAOA,EAAMk7J,eAAiBl7J,EAAMloD,QAAUkoD,EAAM81S,kC,IAIxD/mX,KAphBEwoX,gBAAI,SAAAllX,GACJ,IAAImlX,EAAezoX,KAAAqlH,gDAAwC/lF,KAAA,SAAA2xC,GAC3D,OAAIA,EAAAloD,OAAiB,C,GAuhBrB,MAphBI,CAAA/oB,KAAAilX,iBAA4BwD,C,EAuhBlCzoX,KAAK0oX,iBAAmB,SAASplX,GAC/B,OAphBOtD,KAAAilX,iBAAA,CAAAjlX,KAAAwoX,gBAAAllX,CAAA,GAAA,CAAAtD,KAAAmnX,uBAAA,C,EAuhBTnnX,KAAK2oX,uBAphBM,SAAArlX,GAqhBT,OAphBItD,KAAAilX,iBAAwB,CAAKjlX,KAAAwoX,gBAAcllX,CAAA,GAAAtD,KAAAmnX,uBAAA,C,EAuhBjDnnX,KAphBE4oX,sBAAqB,SAAWtlX,GAqhBhC,OACEA,GAASA,EAAMi3B,MAAQj3B,EAAMi3B,KAAKsuV,2BAA6BluQ,EAAyBmuQ,iCAAqH,CAAC,IAAnFnE,EAAiD7rU,QAAQx1C,EAAMi3B,KAAKo7B,QAAA,C,EAInM31D,KAAK+oX,iBAAmB,SAASzlX,GAQ/B,MAphBuB,CAAA,IAPpB,CACH0pO,EAAyBY,2BAqhBvBZ,EAAuBa,6BACvBb,EAAuBe,6BAnhB3Bf,EAAKc,4BAGeh1L,QAAK94C,KAAAsF,IAAA,GAqhBhBtF,KAAK4kX,wCAnhB2B,EAAhC5kX,KAAA4kX,uCAAgCx3W,QACnC9J,GAAKA,EAAAqoO,uBAAA,C,0LA+Hf3tO,QACGC,OAAO,mCAAoC,EAAA,EAC3C4mQ,QAAQ,sBAjhBa2/G,CAAA,C,IA46B1B,CAAA,WACE,aAOA,SAphBQwE,EAA+Bv2V,EAAKiyV,GAuiB1C,OAjBA,SAAwC3rW,GACtC/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAnhB7BP,KAAK4/F,aAAc7mF,EAAAA,EAAY6mF,aAAA,KAqhB/B5/F,KAphBEy4F,cAAK1/E,EAAAA,EAAA0/E,cAAA,KAqhBPz4F,KAphBE4hG,0BAAqB7oF,GAAAA,EAAA+rW,6BAAA,IAAAJ,EAAA3rW,EAAA+rW,4BAAA,EAAA,KAuhBvB9kX,KAAKipX,sBAAwBlwW,GAASA,EAAMkwW,sBAAwB,IAAIx2V,EAAY1Z,EAAMkwW,qBAAA,EAAyB,KAEnHjpX,KAAKkpX,mBAAqB,WACxB,OAAKlpX,KAAKipX,sBAjhBLjpX,KAAAipX,sBAAAnqB,YAAA,EAkhBI,E,yDAlBf9gW,QACGC,OAphBO,gDAA6C,EAAA,EAqhBpD4mQ,QAAQ,iCAAkCmkH,CAAA,C,IA0B/C,CAAA,WACE,aAOA,SAASG,EAAmC7pX,GAyI1C,OAvIA,SAA2CyZ,GAKzC/Y,KAphBIO,GAAKwY,EAAAA,EAAAxY,GAAA,KAqhBTP,KAphBI6Z,QAAKd,EAAAA,EAAAc,QAA0B,KAqhBnC7Z,KAphBI0lH,0BAAA3sG,EAAAA,EAAA2sG,0BAAA,KAqhBJ1lH,KAphBI+oB,OAAKhQ,EAAAA,EAAAgQ,OAAwB,KAqhBjC/oB,KAAKinX,aAphBIluW,EAAAA,EAAAkuW,aAAA,KAqhBTjnX,KAphBI2lH,mCAAmC5sG,EAAAA,EAAA4sG,mCAAA,GAqhBvC3lH,KAAKszD,OAphBCv6C,EAAAA,EAAAu6C,OAAA,KAqhBNtzD,KAAKuzD,YAphBQx6C,EAAAA,EAAAw6C,YAAkC,KAqhB/CvzD,KAAK+mX,mCAAqChuW,EAAQA,EAAMguW,mCAAqC,KAC7F/mX,KAAKopX,kBAAoBrwW,EAAQA,EAAMqwW,kBAAoB,KAC3DppX,KAAKqpX,KAAOtwW,EAAQA,EAAMswW,KAAO,KACjCrpX,KAphBEspX,oBAAKvwW,EAAAA,EAAAuwW,oBAAA,GAqhBPtpX,KAAKupX,oBAAsBxwW,CAAAA,GAAQA,EAAMwwW,oBAGzCvpX,KAAKo1B,MAAQ,KAnhBbp1B,KAAKwpX,oBAAoBzwW,EAAAA,EAAY0wW,kBAAA,KAqhBrCzpX,KAphBEmsO,aAAAnsO,KAAAwpX,qBAAAxpX,KAAA+oB,OAqhBF/oB,KAphBK2mX,mBAAK,KAqhBV3mX,KAAK0pX,sBAphBM1pX,KAAA+oB,OAqhBX/oB,KAphBKymX,QAAK,KAqhBVzmX,KAAK8kH,sBAAwB,CAAA,EAC7B9kH,KAAK8lH,cAAgB,KACrB9lH,KAAK+kH,eAAiB,KAnhBtB/kH,KAAKilH,kBAAmB,KAqhBxBjlH,KAphBEqgW,YAAA,KAyhBFrgW,KAAK2pX,YAAc,WACjB3pX,KAAKo1B,MAAQp1B,KAAKmsO,aAAensO,KAAK2lH,mCAAmCwrF,aAAa,CAAA,CAAA,C,EAGxFnxM,KAAKw9W,4BAA8B,SAAS+H,GACtCA,EAASvlX,KAAK0lH,6BAnhBtB1lH,KAAO2lH,mCAAA4/P,EAAAvlX,KAAA0lH,2BAqhBD1lH,KAAKo1B,MAAQp1B,KAAK2lH,mCAAmCvwF,MACrDp1B,KAAK2pX,YAAA,E,EAIT3pX,KAAK4pX,gBAAkB,SAAStmX,GAnhBpC,IAKAq5B,EALA,GAAA7X,KAAAA,IAAA9kB,KAAAymX,QAaI,OA0gBM9pV,EAAO,GAlhBjBA,EAmhB2B,IAAjB38B,KAAKymX,QAnhBNnnX,EAAA,WAAA,EAAyB,0BAAA,EAqhBA,IAAjBU,KAAKymX,QAnhBXnnX,EAAA,WAAA,EAAsB,0BAAA,EAshBlBA,EAAQ,WAAA,EAAa,2BAA4B,CAAE+1H,EAAGr1H,KAAKymX,OAAA,CAAA,GAEpE9pV,GAAQ,MAAQr5B,EAAMq6W,iDAAiD39W,KAAKO,KAnhBpEjB,EAAQ,mBAAA,EAAWgE,EAAAsW,QAAA,C,EAI7B5Z,KAAK2lX,WAAA,SAAiBc,GACjB3hW,KAAAA,IAAA2hW,IACLzmX,KAAKymX,QAAAA,EACLzmX,KAAK2mX,mBAAoB,EACzB3mX,KAAK0pX,sBAA0B1pX,KAAA+oB,OAAc/oB,KAAAymX,Q,EAwhB7CzmX,KAAKknX,qBAAuB,WAC1BlnX,KAAKmsO,aAAensO,KAAK+oB,OACzB/oB,KAAK2mX,mBAAqB,KAnhBjC3mX,KAAW0pX,sBAAA1pX,KAAA+oB,M,EAuhBN/oB,KAAK6pX,sBAAwB,SAAS9wW,GAphB1C/Y,KAAA2mX,mBAAA5tW,EACG/Y,KAAO2mX,mBAAAxyV,KAAAmP,IAAAnP,KAAoCkP,IAAArjC,KAAA2mX,mBAAA,CAAA,EAAA3mX,KAAA0pX,qBAAA,EAC3C1pX,KAAQinX,aAAAjnX,KAAA2mX,mBAAuB3mX,KAAA2lH,mCAAAwrF,aAAA,CAAA,CAAA,C,EAGlCnxM,KAASyqF,cAAA,WACPzqF,KAAAmsO,aAAAh4M,KAAAkP,IAAArjC,KAAAmsO,aAAA,CAAA,EACAnsO,KAAAmsO,aAAAh4M,KAAAmP,IAAAtjC,KAAAmsO,aAAAnsO,KAAAwpX,mBAAA,EACAxpX,KAAA2pX,YAAA,C,EAGA3pX,KAAA8pX,oBAAA,SAAA/wW,GACA,OAAA,GAAAA,GAAAA,GAAA/Y,KAAA+oB,M,EAwhBE/oB,KAAKmkX,iBAAmB,WAphBxB,OAAInkX,KAAA2lH,mCAAcw+P,iBAAA,EAAAnkX,KAAA+oB,OAAA/oB,KAAA2lH,mCAAA58F,M,EAwhBlB/oB,KArhBE+pX,2BAAoB,WACpB,IAAAC,EAAAhqX,KAAoB2lH,mCAAA/3E,aActB,OAwgBM5tC,KAAK2lH,mCAAmC26I,2BAA6BtgQ,KAAK2lH,mCAAmC06I,8BAC/G2pH,GAAY,KACRhqX,KAAK2lH,mCAAmC06I,6BAC1C2pH,GAAYhqX,KAAK2lH,mCAAmC06I,4BAnhBrDrgQ,KAAK2lH,mCAAmB26I,4BACxBtgQ,KAAA2lH,mCAA0C06I,6BAC1C2pH,GAAY,KAEZA,GAAUhqX,KAAQ2lH,mCAAgB26I,2BAEvC0pH,GAAK,KAEAA,C,EAGLhqX,KAAKiqX,sCAAuC,WAE5C,OADKjqX,KAAAqpX,KACAn1W,KAAA,KAAA,C,EAGLlU,KAAIkqX,uBAAe,WACjB,OAAKlqX,KAAIspX,qBAAiBz6P,MAAA1vB,QAAAn/F,KAAAspX,mBAAA,EAwhBnBtpX,KAAKspX,oBAAoBrzF,OAAO,SAAS7gQ,EAAO+0V,GACrD,OAAO/0V,GAAS+0V,EAAMC,iBAAmB,E,EAphBxC,CAAA,EAJI,C,EA4hBTpqX,KArhBIqqX,mBAAK,WAshBP,OAAOrqX,KAAK+oB,OAAS/oB,KAAKkqX,uBAAA,C,yBA1IhClsX,QACGC,OAphBM,mDAA2C,EAAA,EAqhBjD4mQ,QAphBQ,oCAAAskH,CAAA,C,IAoqBb,CAAA,WACE,aAOA,SAASmB,EACPC,EACAC,EACAC,EACA3sL,GA4HA,OAzHA,SArhBO/kL,GAkiBL,GAZA/Y,KArhBE0qX,SAAa,MAwhBf1qX,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KAAKqd,KAAOtE,EAAQA,EAAMsE,KAAO,KAphBjCrd,KAAKimB,KAAAlN,EAAAA,EAAAkN,KAAsB,KAshB3BjmB,KAAKsD,MAAQyV,EAAQA,EAAMzV,MAAQ,KACnCtD,KArhBE2/L,IAAI5mL,EAAA,IAAc0xW,EAAA1xW,EAAA4mL,GAAA,EAAA,KAshBpB3/L,KArhBE4wW,UAAA73V,EAAgBA,EAAQ63V,UAAS,KAshBnC5wW,KArhBI2qX,mBAAe5xW,EAAAA,EAAA4xW,mBAAA,KAshBnB3qX,KAAK4qX,kBArhBkB7xW,EAAOA,EAAA6xW,kBAAA,KAshB9B5qX,KAAKyiM,cArhBe,GAshBhB1pL,GAASA,EAAM0pL,cACjB,IArhBI,IAAAhvJ,EAAA,EAAYA,EAAA16B,EAAO0pL,cAAAr1L,OAAA,EAAAqmC,EAshBrBzzC,KAAKyiM,cAAcnyL,KAAK,IAAIi6W,EAAYxxW,EAAM0pL,cAAchvJ,EAAA,CAAA,EAIhE,GADAzzC,KArhBE6qX,YAAgB,GACd9xW,GAAKA,EAAA8xW,YAshBP,IAASp3U,EAAI,EAAGA,EAAI16B,EAAM8xW,YAAYz9W,OAAQ,EAAEqmC,EAC9CzzC,KAAK6qX,YAAYv6W,KAAK,IAAIk6W,EAAUzxW,EAAM8xW,YAAYp3U,EAAA,CAAA,EAG1DzzC,KArhBEugM,OAAY,GAGdvgM,KAAKukW,gBAAc,WACjB,IAAA4N,EAAY,GA2hBZ,OALAnyW,KAAKyiM,cAAcjhL,OAAO,SAASwgL,GACjC,MAAO,CAACA,EAAYU,S,GAphBnBxhM,QAAA,SAAiB8gM,GACpBhkM,QAAOqhB,OAAA8yV,EAAWnwK,EAAuB8oL,kBAAA,CAAA,C,GAuhBlC3Y,C,EAGTnyW,KAAKykW,cAAgB,WACnB,IAAI2N,EAAa,GA/gBjB,OALFpyW,KAAKyiM,cAAcjhL,OAAA,SAAWwgL,GAC5B,OAAQA,EAAKU,S,GAshBVxhM,QAAQ,SAAS8gM,GAClBhkM,QAAQqhB,OAAO+yV,EAAYpwK,EAAY8oL,kBAAA,CAAA,C,GAnhBlC1Y,C,EAGTpyW,KAAKujC,SAAA,SAAcwnV,GACjB,OAAAA,IAAqBjtL,EAAuBwB,OAshBnCt/L,KAAK4qX,kBAnhBXG,IAAuBjtL,EAAAa,QACnB3+L,KAAK2qX,mBAuhBL,I,EAGT3qX,KAAKgrX,gBAAkB,SAASD,GAC9B,OAAIA,IAAuBjtL,EAAoBwB,OAphB5Ct/L,KAAA4qX,kBAAqB,GAuhBpBG,IAAuBjtL,EAAoBa,QACtC3+L,KAAK2qX,mBAnhBP,I,EAGT3qX,KAAKirX,UAAA,WACH,OAAOjrX,KAAKyiM,cAASjhL,OAAA,SAAAwgL,GAshBnB,OAAOA,EAAYU,S,IAIvB1iM,KAAKkrX,kBAAoB,WACvB,OAAOlrX,KAAK6qX,YAAYrpW,OAAO,SAASw/K,GAphB1C,OAAsC,EAAjCA,EAAAmB,e,IAILniM,KAAKiiM,aAAA,SAAqBh8K,GACxB,IAAAha,EAAYjM,KAAA6qX,YAASrpW,OAAA,SAAuBw/K,GAC1C,OAAKA,EAAS/6K,OAAAA,C,GAuhBhB,GAAIha,EAAOmB,OAphBb,OAAKnB,EAAA,E,EAILjM,KAAKwiM,4BAA2B,SAAW2oL,EAAAjlB,GACzC,IAAAj6V,EAAYjM,KAAAyiM,cAASjhL,OAAA,SAAuBwgL,GAshB1C,OAAOA,EAAYlmL,QAAQmK,OAASklW,GAAenpL,EAAYU,YAAc,CAAC,CAACwjK,C,GAnhBnF,GAAKj6V,EAAAmB,OACH,OAAQnB,EAAK,E,EAyhBfjM,KArhBEsiG,OAAI,WACJ,IAAAh/E,EAAS,CACP/iB,GAAAP,KAAAO,GAshBA8c,KAAMrd,KAAKqd,KAphBb4I,KAAOjmB,KAAAimB,KAshBL3iB,MAAOtD,KAAKsD,MACZq8L,IAAK3/L,KAAK2/L,IAphBdixK,UAAK5wW,KAAA4wW,UACH+Z,mBAAa3qX,KAAA2qX,mBACbC,kBAAoB5qX,KAAM4qX,kBACxBnoL,cAAeziM,KAAAyiM,cAshBfooL,YAAa7qX,KAAK6qX,YAphBpB1nL,QAAO,E,EAKP,OAkhBInjM,KAAKugM,QAAUvgM,KAAKugM,OAAO6C,gBAphBjC9/K,EAAK6/K,QAAA7yL,KAAAtQ,KAAAugM,OAAAj+F,OAAA,CAAA,EAEEh/E,C,qEAuZXtlB,QACGC,OArhBM,kBAAkB,EAAA,EAshBxB4mQ,QArhBM,OAAAylH,CAAA,C,IA6pBX,CAAA,WACE,aAOA,SArhBMc,EAshBJ9rX,EACAw+L,GAiDA,OA9CA,SAAmB/kL,GAIjB/Y,KArhBIO,GAAAwY,EAAaA,EAAMxY,GAAM,KAshB7BP,KAAKimB,KAAOlN,EAAQA,EAAMkN,KAAO,KACjCjmB,KArhBEqd,KAAOtE,EAAAA,EAAAsE,KAAA,KAshBTrd,KAAKmiM,gBAAkBppL,EAAQA,EAAMopL,gBAAkB,EACvDniM,KAAKqrX,uBAAyBtyW,CAAAA,CAAAA,GAAQA,EAAMsyW,uBAphB5CrrX,KAAKsrX,YAAAvyW,EAAAA,EAAAuyW,YAAwC,EAshB7CtrX,KArhBEurX,mBAAaxyW,EAAAA,EAAAwyW,mBAAA,EAshBfvrX,KAAKwrX,kBAAoBzyW,EAAQA,EAAMyyW,kBAAoB,EAC3DxrX,KArhBEqiM,oBAAKtpL,EAAAA,EAAAspL,oBAAwD,KAuhB/DriM,KAAKojD,OArhBQ,SAAM2nU,GAshBjB,IAAI96V,EAAoB3wB,EAAQ,mBAAA,EAniB7B,KAmiBkD,EACrD,OAAOA,EAAQ,WAAA,EAAa,gBAAkBU,KAAKimB,KAAM,CAphBzDs9K,SAAOvjM,KAAAmiM,gBAshBLmpL,YAAatrX,KAAKsrX,YAClBG,YAAansX,EAAQ,aAAA,EAAeU,KAAKgrX,gBAAgBD,CAAA,CAAA,EAAuB,IAAM96V,EAphB1FrW,SAAKqW,C,IAyhBLjwB,KArhBEgrX,gBAAK,SAAiBD,GACtB,OAAAA,IAAKjtL,EAA2BwB,OAC3Bt/L,KAAAwrX,kBAAoB,GAEzBT,IAAKjtL,EAAAa,QACG3+L,KAAAurX,mBADR,KAAA,C,EAKFvrX,KAAKujC,SAAA,SAAAwnV,GACH,OAAAA,IAAYjtL,EAA+BwB,OAshBlCt/L,KAAKwrX,kBAEVT,IAAuBjtL,EAAoBa,QAphB5C3+L,KAAAurX,mBAohBH,KAAA,C,+CA/CNvtX,QACGC,OAAO,wBAAyB,EAAA,EAChC4mQ,QAAQ,YAAaumH,CAAA,C,IA0D1B,CAAA,WACE,aAOA,SArhBMM,EAshBJC,EACA7tL,GA4CA,OAzCA,SArhBoB/kL,GAuhBlB/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAC7BP,KAAK0iM,UAAY3pL,CAAAA,CAAAA,GAAQA,EAAM2pL,UAphB/B1iM,KAAK2qX,mBAAA5xW,CAAAA,CAAAA,GAA4BA,EAAA4xW,mBAshBjC3qX,KArhBE4qX,kBAAa7xW,CAAAA,CAAAA,GAAiBA,EAAK6xW,kBAshBrC5qX,KAAK8b,QAAU/C,EAAQ,IAAI4yW,EAAQ5yW,EAAM+C,OAAA,EAAW,KAGpD9b,KArhBE8qX,kBAAa,WAshBb,OAAI9qX,KAAK8b,QACH9b,KAAK0iM,UAphBR1iM,KAAA8b,QAAAgvW,kBAAkC9qX,KAAA0iM,UAAA1iM,KAAAO,EAAA,EAE9BP,KAAA8b,QAASgvW,kBAAA,EAuhBT,E,EAGT9qX,KArhBEujC,SAAY,SAAAwnV,GAshBZ,OAAIA,IAAuBjtL,EAAoBwB,OACtCt/L,KAAK4qX,kBAnhBdG,IAAYjtL,EAA6Ba,QAshBhC3+L,KAAK2qX,mBAthBd,KAAA,C,EA0hBF3qX,KArhBEgrX,gBAAK,SAAAD,GAshBL,OAAIA,IAAuBjtL,EAAoBwB,OACtCt/L,KAAK4qX,kBAAkB,GAnhB5BG,IAAqBjtL,EAAAa,QAChB3+L,KAAA2qX,mBADT,KAAA,C,+CA2eN3sX,QACGC,OAAO,0BAA2B,EAAA,EAClC4mQ,QAAQ,cAAe6mH,CAAA,C,IAsD5B,CAAA,WACE,aAEA1tX,QAAQC,OAAO,qBAAsB,EAAA,EAAI4mQ,QAAQ,UAGjD,WAiDE,OAhDA,SArhBa9rP,GAyhBX/Y,KAAKO,GArhBIwY,EAAAA,EAAAxY,GAAA,KAwhBTP,KAAK+oB,OAAShQ,EAAQA,EAAMgQ,OAAS,KAnhBrC/oB,KAAK6Z,QAAAd,EAAkBA,EAAAc,QAAS,KAuhBhC7Z,KArhBEwC,WAAKuW,EAAkBA,EAAAvW,WAAA,KAshBzBxC,KAAKyC,WAAasW,EAAQA,EAAMtW,WAAa,KAnhB7CzC,KAAKq2I,cAAAt9H,EAAsBA,EAAAs9H,cAAW,KAuhBtCr2I,KAAKi7C,KAAOliC,EAAQA,EAAMkiC,KAAO,KAnhBjCj7C,KAAKu8B,OAAAxjB,EAAAA,EAAqBwjB,OAAW,KAuhBrCv8B,KAAK4rX,gBAAkB7yW,EAAQA,EAAM6yW,gBAAkB,KACvD5rX,KAAK6rX,yBAA2B9yW,EAphBhCA,EAAK8yW,yBACH,KAuhBF7rX,KAAK8rX,aAAe/yW,EAAQA,EAAM+yW,aAAe,KAEjD9rX,KArhBE22B,QAAY5d,EAAAA,EAAA4d,QAAmB,KAshBjC32B,KAAKq8O,iBAAmBtjO,EAAQA,EAAMsjO,iBAAmB,KACzDr8O,KAAKgoM,uBAAyBjvL,EAAQA,EAAMivL,uBAAyB,KAErEhoM,KArhBEykC,cAAY1rB,EAAAA,EAAA0rB,cAAA,KAuhBdzkC,KArhBKqlC,eAAAtsB,EAAAA,EAAAssB,eAAA,KAshBLrlC,KAAKyhC,wBAA0B1oB,EAC3BA,EAAM0oB,wBAphBV,KAuhBAzhC,KArhBIyiD,WAAa1pC,EAAAA,EAAA0pC,WAAuB,KAshBxCziD,KAAK+nM,oBAAsBhvL,EAAQA,EAAMgvL,oBAAsB,KAE/D/nM,KAAK+8L,WAAahkL,EAAQA,EAAMgkL,WAAa,I,EA7CW,C,IAwD9D,CAAA,WACE,aAOA,SArhBQgvL,EAAeC,EAAmBC,GA0kBxC,OAnDA,SAAsBlzW,GApgBtB,GAygBE/Y,KArhBIO,GAAAwY,EAAAA,EAAAxY,GAAuB,KA0hB3BP,KArhBEw5C,WAAOzgC,EAAcA,EAAQygC,WAAK,KAshBpCx5C,KAAK05C,cArhBS3gC,EAAAA,EAAA2gC,cAAA,KAshBd15C,KAAK89C,iBArhBS/kC,EAAAA,EAAA+kC,iBAAuC,KAuhBrD99C,KAAKuQ,eAAiBwI,EAAQA,EAAMmzW,sCAAwC,KAE5ElsX,KAAK02D,eAAiB,GAphBxB39C,GAAOA,EAAA29C,eAshBH,IAAKy1T,IAAI14U,EAAI,EAAGA,EAAI16B,EAAM29C,eAAetpD,OAAQ,EAAEqmC,EACjDzzC,KAAK02D,eAAepmD,KAAK,IAAI27W,EAAQlzW,EAAM29C,eAAejjB,EAAA,CAAA,EAI9D,GAthBJzzC,KAAAq3D,cAAA,GAshBQt+C,GAASA,EAAMs+C,cACjB,IAAK80T,IAAI14U,EAAI,EAAGA,EAAI16B,EAAMs+C,cAAcjqD,OAAQ,EAAEqmC,EArhBxDzzC,KAAAq3D,cAAA/mD,KAAA,IAAA27W,EAAAlzW,EAAAs+C,cAAA5jB,EAAA,CAAA,EAOE,GAmhBEzzC,KAAK6zD,YAAc96C,EAAQA,EAAM86C,YAAc,KAE/C7zD,KAAK0zC,uBAAyB,GArhBhC36B,GAASA,EAAA26B,uBACP,IAAKy4U,IAAK14U,EAAA,EAAQA,EAAA16B,EAAM26B,uBAAKtmC,OAAA,EAAAqmC,EAC7BzzC,KAAK0zC,uBAAuBpjC,KAAM,IAAA07W,EAAejzW,EAAA26B,uBAAAD,EAAA,CAAA,EA0hBjDzzC,KAAKu+D,cAAgBxlD,EAAQA,EAAMwlD,cAAgB,KArhBnDv+D,KAAKu/E,uBAAwBxmE,EAASA,EAAMwmE,uBAAwB,KAuhBpEv/E,KAAK0P,eAAiBqJ,EAAQA,EAAMrJ,eAAiB,KArhBrD1P,KAAK2P,eAAAoJ,EAAqBA,EAAApJ,eAAY,KAwhBtC3P,KAthBI+Z,QAAOhB,EAAAA,EAAAgB,QAAA,KAuhBX/Z,KAAK4tC,aAAe70B,EAAQA,EAAM60B,aAAe,KACjD5tC,KAthBEuyC,aAAYx5B,EAAAA,EAAAw5B,aAAsB,KAuhBpCvyC,KAAKwyW,cAAgBz5V,EAAQA,EAAMy5V,cAAgB,KACnDxyW,KAAK69C,wBAA0B9kC,EAAQA,EAAM8kC,wBAA0B,I,8CAtD3E7/C,QACGC,OAAO,2BAA4B,EAAA,EACnC4mQ,QAAQ,eAAgBknH,CAAA,C,IA4D7B,CAAA,WACE,aAEA/tX,QAthBGC,OAAA,mCAAQ,EAAA,EAwhBR4mQ,QAAQ,sBAGX,WAyCE,OAvCA,SAA6B9rP,GAlhB3B/Y,KAAKO,GAAAwY,EAAUA,EAAQxY,GAAM,KAI7BP,KAAKosX,mBAAArzW,EAAAA,EAAAqzW,mBAAmD,KAExDpsX,KAAKkmB,QAAAnN,EAAcA,EAAQmN,QAAM,KACjClmB,KAAK+oB,OAAAhQ,EAAAA,EAAAgQ,OAAA,KAEL/oB,KAAKomB,MAAOrN,EAAQA,EAAMqN,MAAO,KACjCpmB,KAAK66E,WAAA9hE,EAAAA,EAAsB8hE,WAAc,KACzC76E,KAAK8tC,WAAA/0B,EAAAA,EAAsB+0B,WAAc,KAyhBzC9tC,KAAKmmB,KAAOpN,EAAQA,EAAMoN,KAAO,KAthBjCnmB,KAAK86E,UAAQ/hE,EAAAA,EAAA+hE,UAAA,KACb96E,KAAK6tC,UAAA90B,EAAAA,EAAsB80B,UAAc,KAEzC7tC,KAAKo1C,gBAAAr8B,EAAqBA,EAAAq8B,gBAAA,KAC1Bp1C,KAAK05U,qBAAA3gU,EAA6BA,EAAA2gU,qBAAA,KAClC15U,KAAK6wJ,qBAAU93I,EAAAA,EAAA83I,qBAAA,KAEf7wJ,KAAK0P,eAAgBqJ,EAAAA,EAAArJ,eAAA,KACrB1P,KAAK2P,eAAiBoJ,EAAAA,EAAApJ,eAAA,KAEtB3P,KAAKuQ,eAAcwI,EAAAA,EAAAxI,eAAA,KAyhBnBvQ,KAAKojX,aAAerqW,EAAQA,EAAMqqW,aAAe,KAEjDpjX,KAAK4wE,sBAAwB73D,EAAQA,EAAM63D,sBAAwB,KAthBnE5wE,KAAKuwE,sBAAcx3D,EAAWA,EAAAw3D,sBAAA,KAwhB9BvwE,KAvhBE6wE,qBAAkB93D,EAAeA,EAAK83D,qBAAA,I,EA+eV,C,IAgDpC,CAAA,WACE,aAOA,SAvhBMw7S,EAAwB/zC,EAAAriT,GA4kB5B,OAnDA,SAvhBgCld,GA4hB9B/Y,KAvhBEO,GAAQwY,EAAQA,EAAMxY,GAAA,KA2hBxBP,KAAKkmB,QAAUnN,EAAQA,EAAMmN,QAAU,KAthBvClmB,KAAK+oB,OAAAhQ,GAA+B,IAAlBA,EAASgQ,OAAShQ,EAAAgQ,OAAA,KAwhBpC/oB,KAvhBEk+U,cAAgBnlU,EAAWA,EAAAmlU,cAAA,KAwhB7Bl+U,KAvhBIs3C,gBAAev+B,EAAAA,EAAAgQ,OAAA,KAyhBnB/oB,KAvhBIomB,MAAKrN,EAAAA,EAAAqN,MAAwB,KAwhBjCpmB,KAAKolE,SAAWrsD,EAAQA,EAAMqsD,SAAW,KACzCplE,KAAK66E,WAAa9hE,EAAQA,EAAM8hE,WAAa,KAC7C76E,KAAK8tC,WAAa/0B,EAAQA,EAAM+0B,WAAa,KAE7C9tC,KAvhBEmmB,KAAKpN,EAAAA,EAAeoN,KAAK,KAwhB3BnmB,KAvhBEylE,QAAK1sD,EAAAA,EAAqB0sD,QAAA,KAwhB5BzlE,KAvhBE86E,UAAK/hE,EAAAA,EAAwB+hE,UAAK,KAwhBpC96E,KAAK6tC,UAAY90B,EAAQA,EAAM80B,UAAY,KArhB3C7tC,KAAK6nB,mBAAA9O,EAAwBA,EAAS8O,mBAAO,KAwhB7C7nB,KAvhBE05U,qBAA0B3gU,EAAAA,EAAA2gU,qBAAA,KAwhB5B15U,KAvhBE6wJ,qBAA0B93I,EAAKA,EAAS83I,qBAAS,KAyhBnD7wJ,KAAK0P,eAAiBqJ,EAAQkd,EAAMi3K,WAAWn0L,EAAMrJ,eAAgB,CAAA,EAAK,KAC1E1P,KAAK2P,eAAiBoJ,EAAQkd,EAAMi3K,WAAWn0L,EAAMpJ,eAAgB,CAAA,EAAK,KAE1E3P,KAvhBE4rJ,yBAA6B7yI,EAAKA,EAAA6yI,yBAAc,KAyhBlD5rJ,KAvhBEojX,aAAKrqW,EAAAA,EAAAqqW,aAAA,KAyhBPpjX,KAAKm9U,mBAAqBpkU,EAAMokU,mBAthBhCn9U,KAAKo9U,iBAAArkU,EAAsBqkU,iBAwhB3Bp9U,KAvhBEu9U,oBAAqBxkU,EAASwkU,oBAwhBhCv9U,KAAKs9U,kBAAoBvkU,EAAMukU,kBArhB/Bt9U,KAAK4wE,sBAAmB73D,EAAWA,EAAA63D,sBAAA,KAwhBnC5wE,KAvhBEuwE,sBAAYx3D,EAAAA,EAAAw3D,sBAAmC,KAwhBjDvwE,KAAK6wE,qBAAuB93D,EAAQA,EAAM83D,qBAAuB,KArhBjE7wE,KAAK89U,YAAA/kU,EAAAA,EAAA+kU,YAAwC,KAwhB7C99U,KAvhBEu+U,aAAexlU,EAAKA,EAAAwlU,aAAA,KAyhBtBv+U,KAvhBIssX,iBAAYvzW,EAAAA,EAAAwzW,8BAAA,KAwhBhBvsX,KAvhBIwsX,gBAASzzW,EAAAA,EAAA0zW,6BAAmC,I,uCAgepDzuX,QACGC,OAvhBO,uCAA4B,EAAA,EAwhBnC4mQ,QAvhBK,yBAAAwnH,CAAA,C,IAmlBV,CAAA,WACI,aAOA,SAvhBQK,EAAYlxC,EAAAywC,EAAAh2V,EAAAp2B,GAwGlB,SAAK8sX,EAAuBl1U,EAAAO,GAC1B,MAAAh4C,EAAAA,CAAAA,KAAO4sX,0BAA0Bn1U,IAASz3C,CAAAA,KAAA4sX,0BAAan1U,GAAAO,KAC9Ch4C,KAAA4sX,0BAAYn1U,GAAAO,E,CA6hBvB,SAxhBS60U,EAAwBx1U,GAyhB/B,IAxhBEvS,EAAO9kC,KAAA0zC,uBAA4B7Q,UAAA,SAAAu8L,GAyhBnC,GAAIA,EAAI7+N,KAAO82C,EAAoB92C,GACjC,OAAO6+N,C,GArhBXp/N,KAAI0zC,uBAAc5O,GAAmBuS,EA0hBhCr3C,KAAK8sX,sCAAsCz1U,EAAoB+tB,YAvhBpEplE,KAAI8sX,sCAAez1U,EAAA+tB,UAAA,IA0hBnBplE,KAAK8sX,sCAAsCz1U,EAAoB+tB,UAAU/tB,EAAoBouB,SAAWpuB,EACxGr3C,KAAKi3O,aAAa5/L,CAAA,C,CAGpB,SAxhBM01U,EAAc11U,GAyhBlBr3C,KAxhBEgtX,oBAAmB31U,EAAiB+tB,UAAer8C,OAAAsuB,EAA4Bi1U,iBAyhBjFtsX,KAAKgtX,oBAAoB31U,EAAoB+tB,UAAUz1D,eAAiB0nC,EAAoBm1U,gBAAkBn1U,EAAoBm1U,gBAAgBz8W,SAAW,KAvhB7J/P,KAAIgtX,oBAAe31U,EAAA+tB,UAAA11D,eAAA2nC,EAAAm1U,gBAAAn1U,EAAAm1U,gBAAAhuC,SAAA,I,CA2hBrB,SAASyuC,IACP,OAAOjtX,KAAKgtX,mB,CAGd,SAxhBQE,EAAKz1U,EAAAO,GAyhBX,MAxhBE,CAAAh6C,QAAWq6C,YAAAr4C,KAAAk1B,OAAA,GAAAl1B,KAAAk1B,SAAAl1B,KAAAk1B,QAAAuiB,IAAAz3C,KAAAk1B,QAAAuiB,GAAAO,GACLh4C,KAAKk1B,QAAAuiB,GAAAO,GAEN,C,CA2hBT,SAxhBIm1U,EAAwB11U,EAAAO,GAyhB1B,GAxhBEh4C,KAAA8sX,sCACA,OAAA9sX,KAAA8sX,sCAAkBr1U,GAAAO,E,CA4hBtB,SAxhBSo1U,EAAQ31U,EAAUO,EAAOwmS,GAyhBhC,OAAIx+U,KAAKk1B,SAAWl1B,KAAKk1B,QAAQ0iB,eAAeH,CAAA,GAAYz3C,KAAKk1B,QAAQuiB,GAASG,eAAeI,CAAA,GAvhB1F,OAAPh4C,KAAOk1B,QAAAuiB,GAAAO,GAyhBEwmS,EAAWx+U,KAAKk1B,QAAQuiB,GAASO,GAAQtoC,eAAiB1P,KAAKk1B,QAAQuiB,GAASO,GAAQroC,eAE1F,I,CAGT,OA7JA,SAvhBmBoJ,GAsBvB,GAsgBM/Y,KAvhBEO,GAAOwY,EAAAA,EAAAxY,GAAA,KAwhBTP,KAAKy9U,KAAO1kU,EAAQA,EAAM0kU,KAAO,KAGjCz9U,KAvhBGw5C,WAAAzgC,EAAAA,EAAAygC,WAAA,KAwhBHx5C,KAAK05C,cAAgB3gC,EAAQA,EAAM2gC,cAAgB,KACnD15C,KAAK89C,iBAAmB/kC,EAAQA,EAAM+kC,iBAAmB,KArhBzD99C,KAAAqxD,oBAA0Bt4C,EAAAA,EAAAs4C,oBAAA,KAwhB1BrxD,KAAKsxD,mBAAqBv4C,EAAQA,EAAMu4C,mBAAqB,KAC7DtxD,KAAKsxD,mBAAqBv4C,EAAQA,EAAMu4C,mBAAqB,KArhBjEtxD,KAAOgtX,oBAAAj0W,EAAAA,EAAAs0W,8BAAA,GAwhBHrtX,KAAKk1B,QAAUnc,EAAQA,EAAMmc,QAAU,GACvCl1B,KAAK4sX,0BAA4B7zW,EAAQA,EAAM6zW,0BAA4B,GArhBlF5sX,KAAWq3D,cAAA,GACVt+C,GAAAA,EAAAs+C,cAwhBQ,IAAK,IAAI5jB,EAAI,EAAGA,EAAI16B,EAAMs+C,cAAcjqD,OAAQ,EAAEqmC,EAChDzzC,KAAKq3D,cAAc/mD,KAAK,IAAI27W,EAAQlzW,EAAMs+C,cAAc5jB,EAAA,CAAA,EAlhBlE,GAshBMzzC,KAAK02D,eAAiB,GACtB12D,KAAK8sX,sCAAwC,GAvhB1C/zW,GAAAA,EAAA29C,eACP,IAAAjjB,EAAA,EAAAA,EAAA16B,EAAA29C,eAAAtpD,OAAA,EAAAqmC,EAAA,CACA,IAAA65U,EAAA,IAAArB,EAAAlzW,EAAA29C,eAAAjjB,EAAA,EACAzzC,KAAA02D,eAAApmD,KAAAg9W,CAAA,EACAttX,KAAA8sX,sCAAAQ,EAAA/sX,IAAA,GA0hBaP,KAAKgtX,oBAAoBM,EAAc/sX,MAvhB3CP,KAAKgtX,oBAAOM,EAAA/sX,IAAA,CACdwoB,OAAW,EAyhBN1Z,MAAO,C,GAphBZ,IAAA,IAAOwkC,EAAA,EAAQA,EAAM7zC,KAAAq3D,cAAOjqD,OAAA,EAAAymC,EAAA,CAC5B,IAAA05U,EAAsBvtX,KAAAq3D,cAAQxjB,GAC9B7zC,KAAM8sX,sCAA6BQ,EAAA/sX,IAAAgtX,EAAAhtX,IAAA,CAAAwoB,OAAA,IAAA,C,EAiiBtC,GA5hBF/oB,KAAI6zD,YAAe96C,EAAAA,EAAe86C,YAAA,KAChC7zD,KAAK+zD,YAAWh7C,EAAUA,EAAAg7C,YAAc,KA0hBxC/zD,KAAK0zC,uBAAyB,GAC1B36B,GAASA,EAAM26B,uBAvhBrB,IAAKD,EAAA,EAAcA,EAAA16B,EAAA26B,uBAAAtmC,OAAA,EAAAqmC,EACfzzC,KAAA0zC,uBAA4BpjC,KAAA,IAAAkrU,EAAAziU,EAAA26B,uBAAAD,EAAA,CAAA,EA4BhC,IAggBEzzC,KAAK0P,eAAiBqJ,GAASA,EAAMrJ,eAAiBumB,EAAMi3K,WAAWn0L,EAAMrJ,eAAgB,CAAA,EAAK,KAvhBpG1P,KAAK2P,eAASoJ,GAAAA,EAAApJ,eAAAsmB,EAAAi3K,WAAAn0L,EAAApJ,eAAA,CAAA,EAAA,KAyhBZ3P,KAAKgQ,IAAM+I,EAAQA,EAAM/I,IAAM,KAthBjChQ,KAAKmQ,SAAA4I,EAAkBA,EAAA5I,SAAW,KAEhCnQ,KAAK+Z,QAAAhB,EAAcA,EAAOgB,QAAS,KAyhBnC/Z,KAxhBE4W,WAAQmC,EAAYA,EAAAnC,WAAA,KAyhBtB5W,KAxhBG4tC,aAAiB70B,EAAAA,EAAa60B,aAAA,KAyhBjC5tC,KAxhBEuyC,aAAex5B,EAAAA,EAAcw5B,aAAY,KAyhB3CvyC,KAAKwyW,cAAgBz5V,EAAQA,EAAMy5V,cAAgB,KAvhBnDxyW,KAAA69C,wBAAO9kC,EAAAA,EAAA8kC,wBAAA,KA0hBP79C,KAAK22C,aAAe59B,EAAQA,EAAM49B,aAAe,KAvhBnD32C,KAAKwtX,YAAgBz0W,EAAAA,EAAWy0W,YAAA,KAC9BxtX,KAAIytX,iBAAa10W,EAAAA,EAAA00W,iBAAA,KACjBztX,KAAK4Z,UAAAb,GAAqBA,EAAAa,SAASb,EAAalZ,EAAAga,SAAAD,SA2hBhD5Z,KAxhBEkP,WAAe6J,EAAAA,EAAY7J,WAAY,KAKtCukC,EAAA,EAAWA,EAAAzzC,KAAS0zC,uBAAoBtmC,OAAAqmC,CAAA,GAAA,CAC3C,IAAI4D,EAAuBr3C,KAAA0zC,uBAA4BD,GACrDzzC,KAAO8sX,sCAAKz1U,EAAA+tB,YAyhBVplE,KAAK8sX,sCAAsCz1U,EAAoB+tB,UAAY,IAthB7EplE,KAAA8sX,sCAAYz1U,EAAA+tB,UAAA/tB,EAAAouB,SAAApuB,C,CAMdr3C,KAAI+9U,mCAAuBovC,EAyhB3BntX,KAxhBEujC,SAAY6pV,EAyhBdptX,KAAKk8U,0BAA4B2wC,EAvhBjC7sX,KAAIi3O,aAAA81I,EAyhBJ/sX,KAxhBE8nJ,UAAYmlO,EAyhBdjtX,KAAKquQ,WAAa6+G,EAvhBlBltX,KAAA67U,uCAAO8wC,C,mEA6aX3uX,QACGC,OAvhBC,+BAAO,EAAA,EAwhBR4mQ,QAAQ,kBAAmB6nH,CAAA,C,IAwKlC,CAAA,WACE,aAvhBA1uX,QACGC,OAAO,8BAAyB,EAAA,EAChC4mQ,QAAQ,iBAGX,WAqjBE,OApjBA,SAAA9rP,GAKE/Y,KAAIO,GAAAwY,EAAWA,EAAAxY,GAAA,KA0hBfP,KAAKsF,KAAOyT,EAAQA,EAAMzT,KAAO,KACjCtF,KAAK4tC,aAAe70B,EAAQA,EAAM60B,aAAe,KAxhBjD5tC,KAAKuyC,aAAax5B,EAAMA,EAAKw5B,aAAA,KAC7BvyC,KAAK8tC,WAAO/0B,EAAcA,EAAA+0B,WAAO,KACjC9tC,KAAK6tC,UAAO90B,EAAQA,EAAM80B,UAAO,KACjC7tC,KAAKstF,SAAAv0E,EAAkBA,EAAAu0E,SAAc,KACrCttF,KAAK26U,OAAA5hU,EAAAA,EAAA4hU,OAAyB,KAC9B36U,KAAKklR,MAAAnsQ,EAAcA,EAAQmsQ,MAAM,KACjCllR,KAAKkmB,QAAAnN,EAAAA,EAAqBmN,QAAQ,KAClClmB,KAAKihP,MAAAloO,EAAAA,EAAoBkoO,MAAQ,KACjCjhP,KAAK+oJ,iBAAAhwI,EAAsBA,EAAQgwI,iBAAM,KA0hBzC/oJ,KAAK4pE,gBAAkB7wD,EAAQA,EAAM6wD,gBAAkB,KAxhBvD5pE,KAAK0tX,wBAAkB30W,EAAAA,EAAoB20W,wBAAA,KA0hB3C1tX,KAzhBEkxE,aAAIn4D,EAAoBA,EAAQm4D,aAAA,KA0hBlClxE,KAzhBEmxE,mBAAep4D,EAAaA,EAAAo4D,mBAA6B,KA0hB3DnxE,KAzhBI2tX,cAAe50W,EAAAA,EAAA40W,cAAA,KA0hBnB3tX,KAzhBI66U,aAAa9hU,EAAKA,EAAA8hU,aAAA,KA0hBtB76U,KAzhBI4gF,eAAa7nE,EAAQA,EAAA6nE,eAAoB,KA0hB7C5gF,KAzhBI+6U,8BAAUhiU,EAAAA,EAAAgiU,8BAAA,I,EA5BM,C,IA6jB1B,CAAA,WACE,aAOA,SAAS6yC,EAAeC,EAxhBdC,EACUC,EA0hBIj8U,GA4FtB,OA1FA,SAAuB/4B,EAAO3H,GA9f5B,GAtBFpR,KAAOO,GAAAwY,EAAAA,EAAAxY,GAAA,KA4hBLP,KAAKqC,SAAW0W,EAAQA,EAAM1W,SAAW,KAGzCrC,KAAK6Z,QAAUd,EAAQA,EAAMc,QAAU,KACvC7Z,KAAKgM,eAAiBoF,GAAgC,KAzhB1DpR,KAAAguX,wBAAAj1W,EAAAA,EAAAi1W,wBAAA,KAEGhuX,KAAAwC,WAAQuW,EAAeA,EAAAvW,WAAA,KA2hBtBxC,KAAKyC,WAAasW,EAAQA,EAAMtW,WAAa,KAC7CzC,KAAK4vC,oBAAsB72B,EAAQA,EAAM62B,oBAAsB,KAzhBnE5vC,KAASkO,QAAA6K,GAAAA,EAAA7K,QAAA6K,EAAA7K,QAAA,KAEPlO,KAAA22B,QAAA5d,EAAAA,EAAA4d,QAAA,KACA32B,KAAAiuX,iBAAAl1W,EAAAA,EAAAk1W,iBAAA,KAEAjuX,KAAA4C,MAASmW,EAAYA,EAAOnW,MAAA,KA2hB1B5C,KAAK8iP,yBAA2B/pO,EAAQA,EAAM+pO,yBAA2B,KAzhBzE9iP,KAAK+nM,oBAAmBhvL,EAAKA,EAAAgvL,oBAAA,KAE7B/nM,KAAKiB,gCAA6B,GAClC8X,GAAKA,EAAA9X,gCACL,IAAKkrX,IAAA14U,EAAU,EAAAA,EAAA16B,EAAY9X,gCAAyBmM,OAAA,EAAAqmC,EA2hBhDzzC,KAAKiB,gCAAgCqP,KAAK,IAAIu9W,EAA4B90W,EAAM9X,gCAAgCwyC,EAAA,CAAA,EAKpH,GADAzzC,KA1hBI69O,eAAS,GA2hBT9kO,GA1hBSA,EAAK8kO,eA2hBhB,IAAKsuI,IAAI14U,EAAI,EAAGA,EAAI16B,EAAM8kO,eAAezwO,OAAQ,EAAEqmC,EAzhBjDzzC,KAAA69O,eAAoBvtO,KAAA,IAAAw9W,EAAA/0W,EAAA8kO,eAAApqM,EAAA,CAAA,EA4iBxB,GAdAzzC,KAAK8C,YAAciW,EAAQA,EAAMjW,YAAc,KAzhB/C9C,KAAK+C,YAAWgW,EAASA,EAAAhW,YAAoB,KA2hB7C/C,KA1hBE6vC,qBAAI92B,EAAuBA,EAAA82B,qBAA4B,KA2hBzD7vC,KA1hBI6C,cAAYkW,EAAAA,EAAAlW,cAAA,KA2hBhB7C,KAAKyiD,WAAa1pC,EAAQA,EAAM0pC,WAAa,KAC7CziD,KA1hBEiD,WAAI8V,EAAAA,EAAuB9V,WAAA,KA2hB7BjD,KA1hBIkD,WAAY6V,EAAAA,EAAA7V,WAAA,KA2hBhBlD,KAAKgwC,oBAAsBj3B,EAAQA,EAAMi3B,oBAAsB,KAC/DhwC,KAAKa,OAASkY,EAAQA,EAAMlY,OAAS,KACrCb,KAAKwjC,SAAWzqB,EAAQA,EAAMyqB,SAAW,KAzhBzCxjC,KAAKgyI,kBAAkBj5H,EAASA,EAAAi5H,kBAAoB,KA2hBpDhyI,KA1hBE+xI,gCAA2Bh5H,EAAAA,EAAoBg5H,gCAAQ,KA4hBzD/xI,KAAKiyI,iBAAmB,GAzhBtBl5H,GAAIA,EAAAk5H,iBA4hBJ,IAAK,IAAIi8O,KAAmBn1W,EAAMk5H,iBAAkB,CAClD,IAAIk8O,EAAgBp1W,EAAMk5H,iBAAiBi8O,GACtCluX,KAAKiyI,iBAAiBi8O,KACzBluX,KAAKiyI,iBAAiBi8O,GAAmB,IAAIH,EAC7C/tX,KAAKiyI,iBAAiBi8O,GAAiB7wW,KAAO8wW,EAAc9wW,KAC1Drd,KAAKiyI,iBAAiBi8O,GAAiB/gT,cAAgBhyD,WAAWgzW,EAAchhT,aAAA,EAChFntE,KAAKiyI,iBAAiBi8O,GAAiBl9O,UAAY71H,WAAWgzW,EAAcn9O,SAAA,GAE9EhxI,KAAKiyI,iBAAiBi8O,GAAiBtc,0BAA4Bz2V,WAAWgzW,EAAcvc,wBAAA,C,CASlG,GA/hBL5xW,KAAA6xI,eAAY94H,EAAAA,EAAA84H,eAAA,KACX7xI,KAAAwoH,eAAAzvG,EAAAA,EAAAyvG,eAAA,KA2hBIxoH,KAAKipG,YAAclwF,EAAQA,EAAMkwF,YAAc,KAE/CjpG,KAAKyjX,WAAa,GACd1qW,GAASA,EAAM0qW,WAzhBvB,IAAS0I,IAAA14U,EAAA,EAAWA,EAAA16B,EAAA0qW,WAAAr2W,OAAA,EAAAqmC,EAClBzzC,KAASyjX,WAAQnzW,KAAO,IAAAwhC,EAAA/4B,EAAA0qW,WAAAhwU,EAAA,CAAA,EAItBzzC,KAAK8G,aAAa,WA2hBhB,GAAI9G,KAAKiB,gCACP,IAAKkrX,IAAI14U,EAAI,EAAGA,EAAIzzC,KAAKiB,gCAAgCmM,OAAQ,EAAEqmC,EAzhBlEzzC,KAAA6xI,gBAAuB7xI,KAAAiB,gCAASwyC,GAAAo+F,eA2hB/B7xI,KAAKwoH,gBAAkBxoH,KAAKiB,gCAAgCwyC,GAAG+0E,c,uFA9FzExqH,QACGC,OAAO,4BAA6B,EAAA,EACpC4mQ,QAzhBO,gBAAW+oH,CAAA,C,IA+nBvB,CAAA,WACE,aAEA5vX,QACGC,OA1hBK,4CAAM,EAAA,EA2hBX4mQ,QA1hBK,8BA6hBR,WAgBE,OAdA,SA1hBkC9rP,GAKhC/Y,KAAKO,GAAAwY,EAAAA,EAAiBxY,GAAA,KA6hBtBP,KA1hBIoB,sBAAA2X,EAAAA,EAAA3X,sBAAA,KA2hBJpB,KAAKugF,gBAAkBxnE,EAAQA,EAAMwnE,gBAAkB,KAzhBvDvgF,KAAKwgF,eAAaznE,EAAQA,EAAMynE,eAAa,KAC7CxgF,KAAKygF,gBAAA1nE,EAAsBA,EAAQ0nE,gBAAM,I,EAhBrC,C,IAijBV,CAAA,WACE,aAEAziF,QACGC,OAAO,iCAAkC,EAAA,EACzC4mQ,QAAQ,oBAGX,WAwGE,OAvGA,SAA2B9rP,GAIzB/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAG7BP,KAAKqC,SAAW0W,EAAQA,EAAM1W,SAAW,KAGzCrC,KAAKk6B,sBAAwBnhB,EAAQA,EAAMmhB,sBAAwB,KACnEl6B,KAAKi6B,sBAAwBlhB,EAAQA,EAAMkhB,sBAAwB,KACnEj6B,KAAK0P,eAAiBqJ,EAAQA,EAAMrJ,eAAiB,KA1hBrD1P,KAAK2P,eAAaoJ,EAAWA,EAAApJ,eAAA,KA6hB7B3P,KAAK0jE,YAAc3qD,EAAQA,EAAM2qD,YAAc,KAE/C1jE,KAAKmQ,SAAW4I,EAAQA,EAAM5I,SAAW,EA1hBzCnQ,KAAK6a,wBAAqB9B,EAC1BA,EAAK8B,wBACL,KA4hBA7a,KAAK8a,wBAA0B/B,EA1hB/BA,EAAK+B,wBA4hBD,KAzhBJ9a,KAAI22B,QAAS5d,EAAMA,EAAA4d,QAAgB,KA4hBnC32B,KA3hBE0rH,MAAS3yG,EAAOA,EAAI2yG,MAAM,KA4hB5B1rH,KA3hBIo1C,gBAAKr8B,EAAoBA,EAAIq8B,gBAAc,KA4hB/Cp1C,KAAKmoB,SAAWpP,EAAQA,EAAMoP,SAAW,EAzhBzCnoB,KAAKgQ,IAAA+I,EAAAA,EAAgB/I,IAAA,KACrBhQ,KAAIm+O,aAAeplO,EAAAA,EAAeolO,aAAA,KA4hBlCn+O,KA3hBEg4Q,SAAaj/P,EAAOA,EAAMi/P,SAAA,KA4hB5Bh4Q,KA3hBIob,kBAAmBrC,EAASA,EAAAqC,kBAAc,KA6hB9Cpb,KAAK4xI,qBAAuB74H,EACxBA,EAAM64H,qBA1hBV5xI,KAAKmoB,UAAcnoB,KAAAk6B,uBAA4Bl6B,KAAA0P,gBA4hB/C1P,KAAK8xI,qBAAuB/4H,EA1hB5BA,EAAK+4H,qBACD9xI,KAAAmoB,UAAenoB,KAAAi6B,uBAAwBj6B,KAAA2P,gBAgiB3C3P,KAAKqgV,kBAAoB,WA1hBzB,IAEKlwU,EAFAs8H,EAAgBzsI,KAAAk6B,uBAA8Bl6B,KAAA0P,eACnD,OAAK1P,KAAAmQ,UAAiC,EAAjCnQ,KAAAmQ,UAAuCnQ,KAAAmQ,UAAA,KACvCA,GAAA,IAAiBnQ,KAAQmQ,UAAM,IAC/Bs8H,EAAiBzsI,KAAQmoB,SAAMhY,GAE/Bs8H,EAAkBzsI,KAAMmoB,Q,EAG7BnoB,KAAKugV,kBAAgB,SAAcvvM,GACnC,OAAKhxI,KAAAgQ,KAAAhQ,KAAAm+O,cA4hBGiwI,EAAyBp9O,EACzBhxI,KAAKm+O,aAAahxK,cAAgBntE,KAAKm+O,aAAantG,UACpDhxI,KAAKm+O,aAAahxK,cA1hBrBntE,KAAA4xI,sBAAA,EAAAw8O,EAAA,MA6hBMpuX,KAAK4xI,oB,EAxhBpB5xI,KAAAquX,aAAA,SAAAr9O,GA4hBM,OAAIhxI,KAAKgQ,KAAOhQ,KAAKm+O,cA1hB3BiwI,EAAAp9O,EACUhxI,KAAAm+O,aAAAhxK,cAAoCntE,KAAAm+O,aAAAntG,UACnChxI,KAAAm+O,aAAAhxK,cA4hBIntE,KAAK0P,gBAAkB,EAAI0+W,EAAyB,MAzhB1DpuX,KAAA0P,c,EA8hBL1P,KAAK8G,aAAe,SAAUwnX,EAAct9O,GACrChxI,KAAKmoB,WACRnoB,KAAKmoB,SAAW,GAGbnoB,KAAKmQ,WACRnQ,KAAKmQ,SAAW,GAGlBnQ,KAAK4xI,qBAAuB5xI,KAAKqgV,kBAAA,EAzhB9BiuC,GAILtuX,KAAK8xI,qBAA2B9xI,KAAA4xI,qBA4hB5B5xI,KAAK2P,eAAiB3P,KAAK0P,iBAJ3B1P,KAAK8xI,qBAAuB9xI,KAAKugV,kBAAkBvvM,CAAA,EA1hBvDhxI,KAAK2P,eAAgB3P,KAAMquX,aAAQr9O,CAAA,E,EAMnChxI,KAAKuuX,eAAY,SAAcxhX,GA4hB7B,IA1hBGw/F,EA0hBCvsG,KAAKgQ,MA1hBNu8F,EAAAvsG,KAAAgQ,IACLhQ,KAAKm+O,aAAApxO,EAAuB3H,KAAA,SAAc4K,GACrC,OAAAA,EAAAzP,IAAAgsG,C,MAsbuB,C,IA+GlC,CAAA,WACE,aAEAvuG,QACGC,OAAO,gCAAiC,EAAA,EA1hBzC4mQ,QAAO,mBA8hBT,WASE,OAliBF,SAAA9rP,GA4hBI/Y,KAAKyI,KAAOsQ,EAAQA,EAAMtQ,KAAO,GACjCzI,KAAKwuX,mBAAqBz1W,EAAQA,EAAMy1W,mBAAqB,KA3hBjExuX,KAAAwC,WAAAuW,GAAAA,EAAAvW,WAAA,IAAA0hD,KAAAnrC,EAAAvW,UAAA,EAAA,KACGxC,KAAA4C,MAAOmW,EAAAA,EAAAnW,MAAA,I,EARD,C,IA2iBX,CAAA,WACE,aAKA,SAAS6rX,EACPnvX,EACAovX,EACAlyI,EACAmyI,EACA14V,EACA83V,EACAr1G,EACAk2G,EACAlyI,EACA9uN,EACAoZ,GAEA,SA5hBOxR,EAAUzc,GAgnBf,GA3mBA/Y,KAAKO,GAAAwY,EAAAA,EAAAxY,GAAuB,KAG5BP,KAAKqC,SAAA0W,EAAiBA,EAAQ1W,SAAM,KACpCrC,KAAKy/B,UAAA1mB,EAAiBA,EAAQ0mB,UAAM,KA6hBpCz/B,KAAK6uX,cAAgB91W,EAAQA,EAAM81W,cAAgB,KA3hBnD7uX,KAAKoiP,cAAArpO,EAAAA,EAA2BqpO,cAAc,KA6hB9CpiP,KAAK8uX,aAAe/1W,EAAQA,EAAM+1W,aAAe,GA3hBjD9uX,KAAK+uX,YAAAh2W,EAAeA,EAAQg2W,YAAM,KA6hBlC/uX,KAAKgvX,eAAiBj2W,EAAQA,EAAMi2W,eAAiB,GA3hBrDhvX,KAAKm8I,eAAApjI,EAAqBA,EAAMojI,eAAA,KAChCn8I,KAAKq8I,YAAAtjI,EAAmBA,EAAMsjI,YAAA,KA+hB9Br8I,KAAK+wI,cAAgBh4H,CAAAA,CAAAA,GAAQA,EAAMg4H,cA3hBnC/wI,KAAKgxI,UAAAj4H,EAAAA,EAAwBi4H,UAAc,KAC3ChxI,KAAKsF,KAAAyT,EAAAA,EAAAzT,KAAwB,KAC7BtF,KAAK8wI,aAAA/3H,EAAuBA,EAAA+3H,aAAc,KA6hB1C9wI,KAAKqkI,aAAetrH,EAAQA,EAAMsrH,aAAe,KA3hBjDrkI,KAAKiI,aAAc8Q,EAAQA,EAAM9Q,aAAc,KAC/CjI,KAAKskI,UAAAvrH,EAAeA,EAAQurH,UAAM,KAElCtkI,KAAKmQ,SAAA4I,EAAmBA,EAAA5I,SAAc,KACtCnQ,KAAKgyI,kBAAkBj5H,EAAQA,EAAMi5H,kBAAA,KA6hBrChyI,KAAKixI,uBAAyBl4H,EAAQA,EAAMk4H,uBAAyB,KACrEjxI,KAAK+xI,gCAAkCh5H,EA3hBzCA,EAAOg5H,gCA6hBD,KAEJ/xI,KAAKivX,oBAAsBl2W,EAAQA,EAAMk2W,oBAAsB,KAG/DjvX,KAAKkvX,kBAAoBn2W,EAAQA,EAAMm2W,kBAAoB,KAC3DlvX,KAAKmvX,kBAAoBp2W,EAAQA,EAAMo2W,kBAAoB,KA5hB7DnvX,KAAAovX,aAAAr2W,EAAAA,EAAAq2W,aAAA,KA8hBEpvX,KA7hBCqvX,gBAAOt2W,EAAAA,EAAAs2W,gBAAgC,KA8hBxCrvX,KA7hBCsvX,cAAQv2W,EAAmBA,EAAAu2W,cAAA,KA8hB5BtvX,KAAKuvX,mBAAqBx2W,EAAQA,EAAMw2W,mBAAqB,KAC7DvvX,KAAKwvX,cAAgBz2W,EAAQA,EAAMy2W,cAAgB,KA5hBrDxvX,KAAAyvX,cAAS12W,EAAiBA,EAAA02W,cAAwB,KAChDzvX,KAAA0vX,YAAS32W,EAAgBA,EAAO22W,YAAA,KA8hBhC1vX,KAAK2vX,YAAc52W,EAAQA,EAAM42W,YAAc,KAG/C3vX,KAAKwH,kBAAoBuR,EAAQA,EAAMvR,kBAAoB,KAC3DxH,KA7hBEk3B,SAAUne,EAAQA,EAAMme,SAAK,KA8hB/Bl3B,KA7hBE4vX,eAAoB72W,EAAMA,EAAO62W,eAAA,KA8hBnC5vX,KAAK6vX,oBAAsB92W,EAAQA,EAAM82W,oBAAsB,KAC/D7vX,KAAKwH,kBAAoBuR,EAAQA,EAAMvR,kBAAoB,KAC3DxH,KA7hBE8vX,mBAAkB/2W,EAAcA,EAAA+2W,mBAAa,KA8hB/C9vX,KA7hBEq2I,cAAKt9H,EAAgBA,EAAQs9H,cAAM,KA8hBrCr2I,KA7hBE+vX,eAAKh3W,EAAmBA,EAAQg3W,eAAM,KA8hBxC/vX,KAAKgwX,aAAej3W,EAAQA,EAAMi3W,aAAe,KAGjDhwX,KA7hBEw8I,eAAKzjI,EAAqBA,EAAQyjI,eAAM,KA8hB1Cx8I,KAAKkvI,gBAAkBn2H,EAAQA,EAAMm2H,gBAAkB,KACvDlvI,KA7hBEiwX,kBAAKl3W,EAAsBA,EAAQk3W,kBAAM,KA8hB3CjwX,KA7hBEkwX,kBAAuBn3W,EAAMA,EAAAm3W,kBAAU,KA8hBzClwX,KA7hBEmwX,aAAKp3W,EAAAA,EAAAo3W,aAA0C,KA8hBjDnwX,KAAKowX,gBAAkBr3W,EAAQA,EAAMq3W,gBAAkB,KACvDpwX,KA7hBEqwX,cAAKt3W,EAAgBA,EAAAs3W,cAAA,KA8hBvBrwX,KA7hBEswX,YAAav3W,EAAMA,EAAAu3W,YAAe,KA+hBpCtwX,KAAK8+O,aA7hBM/lO,GAAcA,EAAS+lO,aA8hB9B,IAAI56L,KAAKnrC,EAAM+lO,YAAA,EACf,KACJ9+O,KAAKm1C,gBAAkBp8B,GAASA,EAAMo8B,gBA5hBpC,IAAK+O,KAAAnrC,EAAAo8B,eAAA,EACL,KA+hBFn1C,KA7hBI48I,QAAS7jI,EAAOA,EAAI6jI,QAAM,KA+hB9B58I,KAAK8gD,SA7hBM/nC,EAAAA,EAAe+nC,SAAK,KA8hB/B9gD,KAAK4Z,SA7hBMb,EAAAA,EAAAa,SAAA,MA+hBX5Z,KAAKy+G,mBA7hBW1lG,EAAAA,EAAoB0lG,mBAAmB,KA+hBvDz+G,KAAK+6C,SA7hBK,GA8hBNhiC,GA7hBMA,EAAOgiC,SA8hBf,IAAK,IAAItH,EAAI,EAAGA,EAAI16B,EAAMgiC,SAAS3tC,OAAQ,EAAEqmC,EAC3CzzC,KAAK+6C,SAASzqC,KAAK,IAAIq+W,EAAQ51W,EAAMgiC,SAAStH,EAAA,CAAA,EAWlD,GARAzzC,KAAKqlC,eA7hBOtsB,EAAeA,EAAKssB,eAAc,KA8hB9CrlC,KAAK06I,eA7hBQ3hI,GAAAA,EAAA2hI,eAAsC3hI,EAAA2hI,eAAkBgiG,EAA6B6zI,uBA8hBlGvwX,KAAK4C,MAAQmW,EAAQA,EAAMnW,MAAQ,KACnC5C,KAAK6C,cAAgBkW,EAAQA,EAAMlW,cAAgB,KAEnD7C,KAAKgM,eAAiB+M,EAAQA,EAAM/M,eAAiB,KAErDhM,KA7hBEg+O,cAAmB,GA8hBjBjlO,GAASA,EAAMilO,cA5hBjB,IAAKvqM,EAAA,EAAAA,EAAA16B,EAAAilO,cAAyB5wO,OAAA,EAAAqmC,EAC9BzzC,KAAIg+O,cAAe1tO,KAAA,IAAAo+W,EAAA31W,EAAwBilO,cAAAvqM,EAAA,CAAA,EAiiB7C,GADAzzC,KAAKg9O,sBAAwB,GACzBjkO,GAASA,EAAMikO,sBACjB,IAASvpM,EAAI,EAAGA,EAAI16B,EAAMikO,sBAAsB5vO,OAAQ,EAAEqmC,EA5hB1DzzC,KAAKg9O,sBAAiB1sO,KACtB,IAAKksO,EAAiBzjO,EAAAikO,sBAAevpM,EAAA,C,EAkiBvC,GADAzzC,KAAKk9O,0BAA4B,GA5hB/BnkO,GAAKA,EAAUmkO,0BACf,IAAKzpM,EAAA,EAAAA,EAAa16B,EAAQmkO,0BAAmB9vO,OAAA,EAAAqmC,EAC7CzzC,KAAKk9O,0BAAuB5sO,KAC5B,IAAKksO,EAAezjO,EAAQmkO,0BAAqBzpM,GAAAzzC,KAAAgM,cAAA,C,EAkiBnDhM,KA7hBE8tJ,YAAK/0I,CAAAA,CAAAA,GAAcA,EAAQ+0I,YA8hB7B9tJ,KA7hBEwwX,UAAKz3W,EAAAA,EAAmBy3W,UAAc,KA8hBxCxwX,KA7hBEmoH,UAAKpvG,EAAYA,EAASovG,UAAM,KA8hBlCnoH,KAAKiyI,iBAAmBl5H,EAAQA,EAAMk5H,iBAAmB,GACrDl5H,EAAMk5H,kBA5hBR5wH,OAAKwkC,KAAA7lD,KAAAiyI,gBAAA,EAA2B/wI,QAAA,SAAaie,GA8hB3Cnf,KAAKiyI,iBAAiB9yH,GAAO,IAAI4uW,EAC/B/tX,KAAKiyI,iBAAiB9yH,E,GAEvBnf,IAAA,EAGLA,KA7hBI6xI,eAAU94H,GAAAA,EAAA84H,eAAsCrvG,OAAArnB,WAAoBpC,EAAA84H,cAAA,EAAW,KA8hBnF7xI,KAAKwoH,eA7hBMzvG,GAAAA,EAAAyvG,eAAsChmF,OAAArnB,WAAoBpC,EAAAyvG,cAAA,EAAY,KA8hBjFxoH,KAAKywX,UAAY13W,GAASA,EAAM03W,UAAYjuV,OAAOrnB,WAAWpC,EAAM03W,SAAA,EAAa,KAEjFzwX,KAAK2+O,oBAAsB5lO,EAAQA,EAAM4lO,oBAAsB,KAC/D3+O,KAAKu/O,qBAAuBxmO,EAAQA,EAAMwmO,qBAAuB,KACjEv/O,KAAK0wX,gBAAkB33W,CAAAA,CAAAA,GAAQA,EAAM23W,gBAErC1wX,KAAKkhP,eAAiBnoO,EAAQ,IAAI2/P,EAAqB3/P,EAAMmoO,cAAA,EAAkB,KAM/ElhP,KA7hBE2wX,YAAK,WACL,IA8hBMC,EA9hBN,OAAA5wX,KAAKmQ,UA8hBCygX,EAAe5wX,KAAKwwX,UACpBxwX,KAAKwoH,eA5hBbxoH,KAAS6xI,eACE57G,EAAAi3K,WAAAltM,KAAAmQ,SAA0BygX,EAAiB,GAAA,GA+hB7C,C,EAGT5wX,KAAK6wX,wBAA0B,WA3hB7B,IACMD,EADN,GAAI5wX,KAAAixI,uBAiiBF,OAhiBI2/O,EAAW5wX,KAAAwwX,UACbxwX,KAAOwoH,eA8hBLxoH,KAAK6xI,eACF57G,EAAMi3K,WAAYltM,KAAKixI,uBAAyB2/O,EAAgB,GAAA,C,EAI3E5wX,KA7hBI8wX,sBAAK,WA8hBP,IAAIF,EAAe5wX,KAAKwwX,UA5hBxBxwX,KAAKwoH,eACLxoH,KAAK6xI,eA8hBL,OAAI7xI,KAAKgyI,mBAAqC,GAAhB4+O,EACpB5wX,KAAKgyI,kBAAoB4+O,EAAgB,IA3hB9C,C,EAiiBP5wX,KAAK4/O,kBAAoB,WA5hBzB,OAAS5/O,KAAA6uX,gBAAaD,EAAAmC,gB,EAgiBtB/wX,KAAKgxX,iBAAmB,WA5hBxB,OAAShxX,KAAA6uX,gBAAqBD,EAAQt1R,O,EAgiBtCt5F,KAAKixX,eAAiB,WA5hBpB,OAAOjxX,KAAAsF,OAAAsoB,EAAA0rE,SAAAt5F,KAAAqC,UAAA,EAAArC,KAAAoiP,eAAApiP,KAAA8uX,aAAA1hX,SAAApN,KAAAgxX,iBAAA,GAAA,EAAAhxX,KAAA+uX,aAAA/uX,KAAAgvX,eAAA5hX,O,EAGTpN,KAAAkxX,kCAAS,WACP,IAAIN,EAAK5wX,KAAAwwX,UACPxwX,KAAOwoH,eA8hBLxoH,KAAK6xI,eACT,OAAI7xI,KAAK+xI,iCAAmD,GAAhB6+O,EAClC5wX,KAAK+xI,gCAAkC6+O,EAAgB,IA3hBxD,C,EAiiBX5wX,KA7hBE88O,QAAO,SAAAlvK,GA8hBP5tE,KAAKg+O,cAAc1tO,KAAK,IAAIo+W,EAAY,CACtC1+W,IAAK49D,C,KAIT5tE,KAAKwgP,YAAc,SAAS2wI,GAE1B,GADAnxX,KAAKg+O,cAAgB,GACjBmzI,EACF,IAAK,IAAI19U,EAAI,EAAGA,EAAI09U,EAAS/jX,OAAQ,EAAEqmC,EA5hBrCzzC,KAAAg+O,cAAA1tO,KAAA,IAAAo+W,EAAAyC,EAAA19U,EAAA,CAAA,C,EAKPzzC,KAAAmgP,WAAQ,SAAkBzB,GA8hBnB55M,EAAQ9kC,KAAKg+O,cAAcllM,QAAQ4lM,CAAA,EACvC1+O,KAAKg+O,cAAcj5M,OAAOD,EAAO,CAAA,C,EAGnC9kC,KAAKoxX,cAAgB,SAAS/hX,GAC5B,OACErP,KAAKmQ,UACLnQ,KAAKixI,uBA1hBJ5hI,GAAe,IADarP,KAAAmQ,UAAA,IAAAnQ,KAAAixI,wBAAA,IACgB,KAE5C5hI,C,EAGLrP,KAAKqxX,qBAAuB,SAAStkX,GAErC,GADA/M,KAAKiyI,iBAAgB,GAChBjyI,KAAAg+O,cACL,IAAK,IAAQvqM,EAAA,EAAAA,EAAQzzC,KAAMg+O,cAAQ5wO,OAAA,EAAAqmC,EAAA,CAC9B,IAwjBO4sS,EAYEixC,EAPJvoW,EA7jBLk1N,EAAmBj+O,KAAAg+O,cAAcvqM,GACjC89U,EAAkBxkX,EAAQ3H,KAAM,SAAA4K,GAChC,OAAAA,EAAAzP,IAAA09O,EAA0BjuO,G,IAuiBrBuhX,EAriBLA,GACgB,CAChBhxX,GAAA09O,EAAe1xI,QAA6B0xI,EAAA+5B,SAC5C36P,KAAA4gO,EAAiB+5B,SACjB7qM,cAAA8wK,EAAgC7iO,kBA8hB3B41H,UAAW,C,KAIRhxI,KAAKiyI,iBAAiBs/O,EAAehxX,MACxCP,KAAKiyI,iBAAiBs/O,EAAehxX,IAAM,IAAIwtX,EAC7C,CA5hBLxtX,GAAAgxX,EAAAhxX,GACX8c,KAAAk0W,EAAAl0W,KA8hBkB8vD,cAAeokT,EAAepkT,cAC9B6jE,UAAWugP,EAAevgP,UA7hB5CjoH,OAAA,KACU2oV,iBAAA,KACCC,qBAAiB,KA+hBVC,yBAA0B,I,IAI5BvxB,EA9hBQpiG,EAAAoiG,kBAAA,CAAA,CAAA,EA+hBRE,EA9hBkBtiG,EAAAsiG,kBAAA,CAAA,CAAA,EA+hBtBvgV,KAAKiyI,iBAAiBs/O,EAAehxX,IAAIqxW,0BAA4BvxB,EA7hBtEt3T,EAAc,EAgiBXA,EADEw3T,EACOA,EAAoBF,EAEpBpqT,EAAMi3K,WAAWmzI,EAAoBkxC,EAAepkT,cAAgB,GAAA,EAG/EntE,KAAKiyI,iBAAiBs/O,EAAehxX,IAAIwoB,QAAUA,EA7hBtD/oB,KAAWgxI,WA+hBFsgP,EAAkBrzI,EAAYrsG,uBAAyB2/O,EAAepkT,cAAgBokT,EAAevgP,WAAa,KACtHhxI,KAAKiyI,iBAAiBs/O,EAAehxX,IAAImxW,kBAAoBz7U,EAAMi3K,WAAWokL,CAAA,GA5hBnFtxX,KAAAiyI,iBAAiBs/O,EAAgBhxX,IAAAmxW,kBAAgB3oV,EAgiB9C/oB,KAAKiyI,iBAAiBs/O,EAAehxX,IAAIoxW,qBAAuB17U,EAAMi3K,WAAWltM,KAAKiyI,iBAAiBs/O,EAAehxX,IAAImxW,iBAAmB1xW,KAAKiyI,iBAAiBs/O,EAAehxX,IAAIwoB,MAAA,E,CA1hB9L,GAAK/oB,KAAAg9O,sBA+hBD,IAASvpM,EAAI,EAAGA,EAAIzzC,KAAKg9O,sBAAsB5vO,OAAQ,EAAEqmC,EAAG,CA7hB3D,IAAA+9U,EAAkBxxX,KAAMg9O,sBAAUvpM,GAAAw+F,iBAClC5wH,OAAAwkC,KAAA2rU,CAAA,EAA2BtwX,QAAM,SAAA0sE,GA+hB9B,IAAI6jT,EAAkBD,EAAe5jT,GAgBjC7kD,GA7iBC/oB,KAAAiyI,iBAAsBrkE,KAC9B5tE,KAAAiyI,iBAA2BrkE,GAAQ,IAAAmgT,EACnC,CA+hBSxtX,GAAIqtE,EA7hBbvwD,KAAAo0W,EAAAp0W,KACQ8vD,cAAMskT,EAAAtkT,cACR6jE,UAAWygP,EAAMzgP,UACnBjoH,OAAA,KA+hBK2oV,iBAAkB,KAClBC,qBAAsB,KACtBC,yBAA0B,I,IA1hBpC5xW,KAAKiyI,iBAAoBrkE,GAAIgkS,0BAAmB6f,EAAe7f,yBA+hB9C37U,EAAMi3K,WAAWukL,EAAgB7f,yBAA2B6f,EAAgBtkT,cAAgB,GAAA,GACzGntE,KAAKiyI,iBAAiBrkE,GAAO7kD,QAAUA,EA5hB1C/oB,KAAAgxI,UACAhxI,KAAAiyI,iBAAsBrkE,GAAM8jS,kBAAc+f,EAAA7f,2BAC1C6f,EAAuBzgP,UAAcygP,EAAAtkT,eAAuB,KAE5DntE,KAAAiyI,iBAA2BrkE,GAAA8jS,kBAAa3oV,EAExC/oB,KAAAiyI,iBAAqBrkE,GAAM+jS,qBAAa3xW,KAAAiyI,iBAAArkE,GAAA8jS,iBAAA1xW,KAAAiyI,iBAAArkE,GAAA7kD,M,EACxC/oB,IAAA,C,CAGL,GAAKA,KAAAk9O,0BACL,IAAKzpM,EAAA,EAAAA,EAAAzzC,KAAAk9O,0BAAgD9vO,OAAA,EAAAqmC,EAAA,CA+hB3C+9U,EAAiBxxX,KAAKk9O,0BAA0BzpM,GAAGw+F,iBA7hBxD5wH,OAAAwkC,KAAA2rU,CAAA,EAAmBtwX,QAAA,SAAA0sE,GACpB,IAAA6jT,EAAeD,EAAkB5jT,GA+iBzB7kD,GAhBC/oB,KAAKiyI,iBAAiBrkE,KA7hB5B5tE,KAAIiyI,iBAAmBrkE,GAAM,IAAAmgT,EAC5B,CACMxtX,GAAAqtE,EACHvwD,KAAAo0W,EAAiBp0W,KACjB8vD,cAAiBskT,EAAiBtkT,cAChC6jE,UAAAygP,EAAiBzgP,UACjBjoH,OAAA,KA+hBC2oV,iBAAkB,KA7hBrBC,qBAAiB,KA+hBdC,yBAA0B,I,IAzhBnC5xW,KAAAiyI,iBAAsBrkE,GAAMgkS,0BAAc6f,EAAA7f,yBA+hB1B6f,EAAgB7f,yBAA2B6f,EAAgBtkT,cAAgB,KA7hB3FntE,KAAAiyI,iBAAarkE,GAAA7kD,QAAAA,EAEP/oB,KAAIgxI,UACNhxI,KAAAiyI,iBAAoBrkE,GAAS8jS,kBAAiB+f,EAAA7f,2BA+hBzC6f,EAAgBzgP,UAAYygP,EAAgBtkT,eAAiB,KAEjEntE,KAAKiyI,iBAAiBrkE,GAAO8jS,kBAAoB3oV,EA5hBrD/oB,KAAKiyI,iBAAArkE,GAAA+jS,qBAAiC3xW,KAAAiyI,iBAAArkE,GAAA8jS,iBAAA1xW,KAAAiyI,iBAAArkE,GAAA7kD,M,EACnC/oB,IAAA,C,CAiiBPA,KAAK0xX,kCAAA,C,EAGP1xX,KAAK0xX,kCAAoC,WACXrwW,OAAOC,OAAOthB,KAAKiyI,gBAAA,EA7hB5C/wI,QAAA,SAAA8O,GA+hBDhQ,KAAKiyI,iBAAiBjiI,EAAIzP,IAAImxW,iBAAmBz7U,EAAMi3K,WAAWltM,KAAKiyI,iBAAiBjiI,EAAIzP,IAAImxW,gBAAA,EAChG1xW,KAAKiyI,iBAAiBjiI,EAAIzP,IAAIoxW,qBAAuB17U,EAAMi3K,WAAWltM,KAAKiyI,iBAAiBjiI,EAAIzP,IAAIoxW,oBAAA,EACpG3xW,KAAKiyI,iBAAiBjiI,EAAIzP,IAAIqxW,yBAA2B37U,EAAMi3K,WAAWltM,KAAKiyI,iBAAiBjiI,EAAIzP,IAAIqxW,wBAAA,EA7hBjH5xW,KAAYiyI,iBAAAjiI,EAAAzP,IAAAwoB,OAAAkN,EAAAi3K,WAAAltM,KAAAiyI,iBAAAjiI,EAAAzP,IAAAwoB,MAAA,C,EACX/oB,IAAA,C,EAGGA,KAAA6xW,mBAAO,WAsiBJ,OAriBKxwV,OAAAC,OAA+BthB,KAAAiyI,gBAAA,EA+hBFgkJ,OAChC,SAAS7gQ,EAAOq8V,GA7hBf,OAAAr8V,EAAAq8V,EAA+B5f,mBAAA,C,EAEtC,C,GAKE7xW,KAAK2xX,iCAAwB,WA+hB3B3xX,KAAKywX,UAAY,EACWpvW,OAAOC,OAAOthB,KAAKiyI,gBAAA,EA7hB5C/wI,QAAwB,SAAQuwX,GACrCA,EAAK1oW,OAAkB/oB,KAAQoxX,cAAMK,EAAkB1oW,MAAA,EACvD0oW,EAAK/f,iBAA+B1xW,KAAAoxX,cAAiBK,EAAA/f,gBAAA,EACrD+f,EAAK9f,qBAAgC3xW,KAAAoxX,cAAkBK,EAAA9f,oBAAA,EA+hB9C3xW,KAAK+wI,gBACR/wI,KAAKywX,WAAagB,EAAgB5f,mBAAA,E,EAEnC7xW,IAAA,C,EA3hBVA,KAAAi3O,aAAY,WAIR,GAHHj3O,KAAA6xI,eAAA,EA+hBM7xI,KAAKwoH,eAAiB,EA5hBlBxoH,KAAAg+O,cACP,IAAQ,IAAAvqM,EAAA,EAAAA,EAAAzzC,KAAqBg+O,cAAA5wO,OAAA,EAAAqmC,EA+hBtBzzC,KAAK6xI,gBAAkB7xI,KAAKg+O,cAAcvqM,GAAGm+F,qBAC7C5xI,KAAKwoH,gBAAkBxoH,KAAKg+O,cAAcvqM,GAAGq+F,qBAGjD,GAAI9xI,KAAKg9O,sBACP,IAASvpM,EAAI,EAAGA,EAAIzzC,KAAKg9O,sBAAsB5vO,OAAQ,EAAEqmC,EACnDzzC,KAAKg+O,eAA+D,IAA9C38N,OAAOwkC,KAAK7lD,KAAKiyI,gBAAA,EAAkB7kI,QAAiD,UAAjC,OAAOpN,KAAKiyI,iBA7hB1FjyI,KAAK6xI,gBAAmB12H,WAAAnb,KAAAg9O,sBAAAvpM,GAAAjQ,QAAA,EAgiBrBxjC,KAAK6xI,gBAAkB12H,WAAWnb,KAAKg9O,sBAAsBvpM,GAAGo+F,cAAA,EAzhBxE,GAAK7xI,KAAAk9O,0BACL,IAAKzpM,EAAA,EAAAA,EAAiBzzC,KAAAk9O,0BAA+B9vO,OAAA,EAAAqmC,EAChDzzC,KAAA6xI,gBA+hBG12H,WAAWnb,KAAKk9O,0BAA0BzpM,GAAGjQ,QAAA,EA1hBrDxjC,KAAKywX,UAAA,EACDzwX,KAAM+wI,gBACN/wI,KAAAywX,UAAAx6V,EAAAi3K,WAAAltM,KAAAwoH,eAAAxoH,KAAA6xI,cAAA,GAgiBF7xI,KA9hBEwoH,eAAMvyF,EAAAi3K,WAAAltM,KAAAwoH,cAAA,EA+hBRxoH,KA9hBE6xI,eAAA57G,EAAAi3K,WAAAltM,KAAA6xI,cAAA,EA+hBF7xI,KAAK4xX,eAAA,EA7hBP5xX,KAAKwoH,eAAkBxoH,KAAM6xI,eAAU7xI,KAAA2wX,YAAA,EAAA3wX,KAAAywX,UACvCzwX,KAAK2xX,iCAAA,C,EAiiBL3xX,KAAK6xX,qBAAuB,WA7hB5B,IAAKC,EAAoB9xX,KAAMoxX,cAAApxX,KAAA6xI,cAAA,EAkiB7B,OAjiBG7xI,KAAA+wI,gBACL+gP,GAAwB9xX,KAAMywX,WAgiBrBqB,C,EAGT9xX,KA9hBI4xX,eAAiB,WAChB5xX,KAAAivX,qBACDjvX,KAAAmQ,SAAMnQ,KAAA8wX,sBAAA,EACN9wX,KAAKixI,uBA+hBHjxI,KAAKkxX,kCAAA,IAEPlxX,KAAKgyI,kBAAoBhyI,KAAK2wX,YAAA,EAC9B3wX,KAAK+xI,gCAAkC/xI,KAAK6wX,wBAAA,E,EAIhD7wX,KA9hBI8G,aAAgB,SAAMiG,GA+hBxB,IA9hBE,IAAO0mC,EAAA,EAAAA,EAAAzzC,KAAeg+O,cAAK5wO,OAAW,EAAAqmC,EA+hBtCzzC,KA9hBKg+O,cAAAvqM,GAAA86U,eAAAxhX,CAAA,EACL/M,KAAAg+O,cAAOvqM,GAAe3sC,aA+hBpB9G,KAAK+wI,cACL/wI,KAAKgxI,S,EA3hBPhxI,KAAI+wI,eA+hBJ/wI,KA9hBIqxX,qBAAkBtkX,CAAA,EAgiBxB/M,KA9hBEi3O,aAAA,C,EAkiBJj3O,KAAK4+O,iBAAmB,WA7hBxB,MAAK5+O,CAAAA,CAAAA,KAAAk3B,UAGGl3B,KAAK8+O,Y,EAkiBb9+O,KA9hBI+xX,aAAY,WA+hBd,OAA8B,OAAvB/xX,KAAKoiP,a,EAGdpiP,KA9hBE8/O,wBAAoB,WA+hBpB,OA9hBE9/O,KAAK+xX,aAAA,EA+hBE/qV,EAAoB4qI,sCAClB5xK,KAAKsF,OAASsoB,EAAc0rE,QA7hBlCtyD,EAAe2qI,2BACb3xK,KAAAsF,OAAWsoB,EAAA6rE,SA+hBTzyD,EAAoB6qI,oCA5hBxB7qI,EAAuB8qI,wB,EAkiB9B9xK,KA9hBI6hP,mBAAsB,WA+hBxB,OA9hBOrsN,EAAAqsN,mBAAA7hP,KAAAqC,QAAA,C,EAiiBTrC,KAAKgyX,YAAc,WACjB,OAAOx8V,EAAQw8V,YAAYhyX,KAAKqC,QAAA,C,EAYpC,OARAmzB,EA9hBMqsN,mBAAoB,SAAWx/O,GA+hBnC,OA9hBMA,GAAW/C,EAAM,WAAA,EAAA,eAAA,EAAAu5C,YAAA,C,EAiiBzBrjB,EAAQw8V,YAAc,SAAS3vX,GAC7B,OAAOmzB,EAAQqsN,mBAAmBx/O,CAAA,EAAY,M,EAGzCmzB,C,gMAngBTx3B,QAAQC,OAAO,qBAAsB,EAAA,EAAI4mQ,QAAQ,UAAW4pH,CAAA,C,IAugB9D,CAAA,WACE,aAOA,SAASwD,EAAah8V,GAgJpB,OA7qBA,SAASld,GAIP/Y,KAAKO,GAAAwY,EAAQA,EAAQxY,GAAM,KAG7BP,KAAOqC,SAAA0W,EAAAA,EAAA1W,SAAA,KAiiBLrC,KAAKk6B,sBAAwBnhB,EAAQA,EAAMmhB,sBAAwB,KA7hBxEl6B,KAAAi6B,sBAAWlhB,EAAAA,EAAAkhB,sBAAA,KACVj6B,KAAA0P,eAAAqJ,EAAAA,EAAArJ,eAAA,KA+hBI1P,KAAK2P,eAAiBoJ,EAAQA,EAAMpJ,eAAiB,KA7hBzD3P,KAAQ0jE,YAAO3qD,EAAAA,EAAsB2qD,YAAY,KAiiB7C1jE,KAAKmQ,SAAW4I,EAAQA,EAAM5I,SAAW,EA9hB7CnQ,KAAS6a,wBAAA9B,EACPA,EAAA8B,wBACA,KACA7a,KAAA8a,wBAAA/B,EACAA,EAAA+B,wBACA,KAEA9a,KAAA22B,QAAA5d,EAAAA,EAAA4d,QAAA,KACA32B,KAAA0rH,MAAA3yG,EAAAA,EAAA2yG,MAAA,KACA1rH,KAAAo1C,gBAAAr8B,EAAAA,EAAAq8B,gBAAA,KACAp1C,KAAAkyX,0CAAAn5W,EAAAA,EAAAm5W,0CAAA,KACAlyX,KAAAoiP,cAAArpO,CAAAA,CAAAA,GAAAA,EAAAqpO,cACApiP,KAAAmoB,SAAApP,EAAAA,EAAAoP,SAAA,KAiiBEnoB,KAAKgQ,IAAM+I,EAAQA,EAAM/I,IAAM,KAC/BhQ,KAAKm+O,aAAeplO,EAAQA,EAAMolO,aAAe,KACjDn+O,KAAKg4Q,SAAWj/P,EAAQA,EAAMi/P,SAAW,KACzCh4Q,KAAKob,kBAAoBrC,EAAQA,EAAMqC,kBAAoB,KAE3D,IAAIqxH,EAA+C,OAA/BzsI,KAAKk6B,uBAAiEpV,KAAAA,IAA/B9kB,KAAKk6B,sBAAuCl6B,KAAKk6B,sBAAwBl6B,KAAK0P,eACrI2+W,EAA+C,OAA/BruX,KAAKi6B,uBAAiEnV,KAAAA,IAA/B9kB,KAAKi6B,sBAAuCj6B,KAAKi6B,sBAAwBj6B,KAAK2P,eA7hBzI3P,KAAK4xI,qBAAoB74H,EACzBA,EAAK64H,qBACL5xI,KAAKmoB,SAAAskH,EACLzsI,KAAK8xI,qBAAuB/4H,EAC5BA,EAAK+4H,qBACL9xI,KAAKmoB,SAAAkmW,EAELruX,KAAKmyX,eAAcp5W,EAAQA,EAAMo5W,eAAc,KAiiB/CnyX,KAAKoyX,oBAAsBr5W,EAAQA,EAAMq5W,oBAAsB,KA9hB/DpyX,KAAKqyX,kBAAgBt5W,EAAQA,EAAMs5W,kBAAgB,KACnDryX,KAAKsyX,wBAA0Bv5W,EAAAA,EAAYu5W,wBAAA,KAK3CtyX,KAAKuyX,aAAY,WAgiBf,OAAIvyX,KAAKoiP,eAAiC,EAAhBpiP,KAAKmoB,SA9hB5B,CAAAnoB,KAAWkyX,0CAEXlyX,KAAAmoB,Q,EAmiBLnoB,KAAKmoB,SAAWnoB,KAAKuyX,aAAA,EAErBvyX,KAAKqgV,kBAAoB,SAAUmyC,GACjC,IAAIp9V,EAAQ,KA9hBTq3G,EAAkC,OAAlCzsI,KAAoBk6B,uBAAkCpV,KAAAA,IAAA9kB,KAAAk6B,sBAAAl6B,KAAAk6B,sBAAAl6B,KAAA0P,eAO3D,OAJA0lB,EAFKp1B,KAAAmQ,UAAkC,EAAlCnQ,KAAoBmQ,UAAcnQ,KAAAmQ,UAAoB,IAEtDs8H,IADe,IAAAzsI,KAAQmQ,UAAM,KACGnQ,KAAAmoB,SAEhCskH,EAAqBzsI,KAAAmoB,SAErBqqW,EACAp9V,EAiiBMa,EAAMi3K,WAAW93K,CAAA,C,EA3hB5Bp1B,KAAKugV,kBAAiB,SAAQvvM,GAC9B,IAEA3hI,EADKrP,KAAAgQ,KAAAhQ,KAAAm+O,aACAn+O,KAAAqgV,kBAA6B,CAAA,CAAA,GAAM,EAAArgV,KAAAm+O,aAAqBhxK,cAAA,KAQxDntE,KAAAob,kBAEApb,KAAAqgV,kBAA6B,CAAA,CAAA,GAAA,EAAArgV,KAAeob,kBAAA,KAE5Cpb,KAAA4xI,qBAiiBH,OAAO37G,EAAMi3K,WAAW79L,CAAA,C,EAG1BrP,KA/hBIquX,aAAA,SAAAr9O,GACJ,IAkiBI3hI,EAzhBJ,OAyhBIA,EAjiBArP,KAAIgQ,KAAKhQ,KAAMm+O,cACfiwI,EAAApuX,KAAAm+O,aAAAhxK,cAgiBQl3C,EAAMi3K,WAAWltM,KAAK0P,gBAAkB,EAAI0+W,EAAyB,IAAA,GA9hB5EpuX,KAAUob,kBAgiBHpb,KAAK2P,eA7hBZ3P,KAAW0P,eAEXumB,EAAAi3K,WAAqB79L,EAAQ,CAAA,C,EAGlCrP,KAAI8G,aAAe,SAAUwnX,EAAAt9O,GACtBhxI,KAAImoB,WACPnoB,KAAKmoB,SAAS,GAGbnoB,KAAAmQ,WACLnQ,KAAKmQ,SAAA,GAELnQ,KAAK4xI,qBAAwB5xI,KAAMqgV,kBAAA,EAgiB5BiuC,GA3hBHtuX,KAAA8xI,qBAAe9xI,KAAe4xI,qBAChC5xI,KAAK2P,eAAe3P,KAAM0P,iBAJ5B1P,KAAK2P,eAAiB3P,KAAQquX,aAAMr9O,CAAA,EAgiBhChxI,KAAK8xI,qBAAuB9xI,KAAKugV,kBAAkBvvM,CAAA,E,EAxhBvDhxI,KAAKuuX,eAAA,SAAwBxhX,GAC7B,IACOw/F,EADHvsG,KAAAgQ,MACGu8F,EAAQvsG,KAAOgQ,IAClBhQ,KAAKm+O,aAAApxO,EAAA3H,KAAsB,SAAA4K,GACzB,OAAIA,EAAAzP,IAAAgsG,C,0BAgZdvuG,QA7hBGC,OAAA,0BAA4B,EAAA,EA+hB5B4mQ,QAAQ,cAAeotH,CAAA,C,IAuJ5B,CAAA,WACE,aAEAj0X,QACGC,OA/hBM,iBAAY,EAAA,EAgiBlB4mQ,QA/hBM,MAkiBT,WAaE,OAXA,SA/hBa9rP,GAiiBX/Y,KA/hBKO,GAAAwY,EAAAA,EAAAxY,GAAA,KAgiBLP,KAAKimB,KAAOlN,EAAQA,EAAMkN,KAAO,KACjCjmB,KAAKqd,KAAOtE,EAAQA,EAAMsE,KAAO,KA9hBjCrd,KAAKsD,MAAAyV,EAAAA,EAAiBzV,MAAS,I,EAV1B,C,IAojBX,CAAA,WACE,aAEAtF,QACGC,OA/hBO,2BAAe,EAAA,EAgiBtB4mQ,QA/hBK,gBAkiBR,WACE,IAAI4tH,EAEG,KAFHA,EAvhBW,KAuhBXA,EAthBW,MAokBf,SAAStnB,EAAcpyV,GACrB/Y,KAAK+Y,MAAQA,EA9hBb/Y,KAAK0yX,WAAU1yX,KAAA2yX,WAAgB55W,CAAA,C,CAklBjC,OAhDAoyV,EAAcynB,mBAZd,SA/hBaC,GAmiBX,OAHIC,EA/hBOD,EAAAtxW,IAAA,SAAAwxW,GACT,OAAIA,EAAK5pX,KAAA,aAAA4pX,EAAAt0V,MAAmC,MAAAs0V,EAAgB5pX,KAAG4pX,EAAAt0V,MAAA,K,GAiiB1D,IA/hBEwrO,OAAA6oH,EAAA5+W,KAAA,GAAA,EAAA,GAAA,C,EATK,CAgiBd,CAAE/K,KAAM,MAAOs1B,MAAO,KAAA,EACtB,CAAEt1B,KAAM,MAAOs1B,MAAO,GAAA,EAesB,EAE9C0sU,EAAcx2O,UAAUg+P,WAAa,SAAS55W,GA9hB5C,IAAA+6F,EACEhrG,EAAK,GAkiBP,IAFAqiW,EA/hBMynB,mBAAUlzD,UAAA,EAEuC,QAAjD5rN,EAAKq3P,EAAmBynB,mBAAgB9xD,KAAA/nT,CAAA,IAgiB5C,IAAK,IAAI06B,EAAI,EAAGA,EAAIqgE,EAAM1mG,OAAQqmC,GAAK,EACrC,GAAIqgE,EAAMrgE,GAAI,CACZ3qC,EAAKgrG,EAAMrgE,IAAMqgE,EAAMrgE,EAAI,GAAGmf,KAAA,EAC9B,K,CAIN,OAAO9pD,C,EAGTqiW,EA/hBIoB,gBAAA,SAAAxzV,GAiiBF,MA/hBIA,CAAAA,CAAAA,EAAK4a,SAAAW,OAAAmqL,aADA,EACA,CAAA,IAmiBT0sJ,EAAcynB,mBAAmBlzD,UAAY,EA9hB3CyrC,EAAOynB,mBAAA9xD,KAAA/nT,CAAA,E,EAkiBXoyV,EA/hBOx2O,UAAAw4O,OAAuB,WAgiB5B,OA/hBOntW,KAAA0yX,WAAAD,IAAmB,I,EAkiB5BtnB,EA/hBYx2O,UAAAq+P,eAAmB,WAgiB7B,OA/hBMhzX,KAAI0yX,WAAAD,IAA0CzyX,KAAA0yX,WAAAD,IAAA,I,EAkiBtDtnB,EA/hBax2O,UAAAo4O,OAAgB,WAgiB3B,OAAO/sW,KA/hBC0yX,WAAAD,IAAiB,I,EAkiB3BtnB,EA/hBYx2O,UAAAs4O,gBAA2B,WAgiBrC,OAAOjtW,KA/hBG0yX,WAAWD,IAAA,I,EAkiBvBtnB,EA/hBYx2O,UAAAy4O,iBAAgB,WAgiB1B,OAAO/rV,OA/hBMC,OAAKthB,KAAA0yX,UAAA,EAAiBx+W,KAAA,EAAA,C,EAkiB9Bi3V,C,CAtoBkB,C,IA0oB7B,CAAA,WACE,aAEAntW,QACGC,OAAO,qBAAsB,EAAA,EAC7B4mQ,QAAQ,UAGX,WA+BE,OA7BA,SA/hBc9rP,GAiiBZ/Y,KAAKO,GA/hBKwY,EAAAA,EAASxY,GAAA,KAgiBnBP,KAAKimB,KAAOlN,EA/hBGA,EAAAkN,KAAA,KAgiBfjmB,KAAKqd,KA/hBKtE,EAASA,EAAMsE,KAAA,KAgiBzBrd,KAAKqlP,YAActsO,EAAQA,EAAMssO,YAAc,GAG/CrlP,KAAK8qX,kBA/hBY,SAAW5kB,EAAA+sB,GAgiB1B,IAAIC,EA/hBQ,GAgiBZ,GAAIhtB,EACF,IAAK,IAAIzyT,EA/hBE,EAAAA,EAAAzzC,KAAAqlP,YAAAj4O,OAAA,EAAAqmC,EAgiBTy/U,EA/hBSlzX,KAAAqlP,YAAiB5xM,IAAA,CAgiBxBlzC,GAAI0yX,EA9hBJhtW,KAAKjmB,KAAAimB,I,OAIXjmB,KAAIqlP,YAAKnkP,QAAA,SAAuBse,GAC9B0zW,EAAgB1zW,GAAS,CAAA,C,GAkiB3B,OA/hBM0zW,C,GAogBU,C,IAuCxB,CAAA,WACE,aAEAl1X,QACGC,OAAO,qBA/hBqB,EAAA,EAgiB5B4mQ,QAAQ,UAEX,WAEE,SAASf,KAeT,OAZAA,EAAQnvI,UAAUqvI,UAAY,SAAUjrP,EAAOoG,EAAKN,GAC9CovE,EA/hBIl1E,GAAsB+L,KAAAA,IAAjB/L,EAAAoG,GAAwBpG,EAAAoG,GAAAN,EAgiBrC,MA/hBS,UA+hBL,OA/hBKovE,GAAAx+E,MAAAy0C,KAAA55B,MAAA2jE,CAAA,CAAA,EAGHA,EA6hBG,IAAI/pC,KAAK+pC,CAAA,C,EAKpB61K,EA/hBQnvI,UAAOryB,OAAK,WAgiBlB,MAAM,IA/hBE5pE,MAAI,+BAAA,C,EAkiBPorO,C,CAljBQ,C,IAujBnB,CAAA,WACE,aAOA,SAASqvH,EACPloQ,GAqCA,OAlCA,SA/hBmBlyG,GAqjBjB,GAZA/Y,KA/hBEO,GAAKwY,EAAAA,EAAAxY,GAAA,KAgiBPP,KAAKqd,KAAOtE,EAAQA,EAAMsE,KAAO,KACjCrd,KAAKm6H,MAAQphH,EAAQA,EAAMohH,MAAQ,KA9hBnCn6H,KAAKozX,UAZU,OA4iBfpzX,KA/hBEqzX,iBAVa,MA0iBfrzX,KA/hBE8wH,WAAA/3G,EAAsBA,EAAQ+3G,WAAS,GAgiBzC9wH,KA/hBI+wH,iBAAKh4G,EAAqBA,EAAIg4G,iBAAmB,GAgiBrD/wH,KA/hBIkxH,QAAKn4G,EAAAA,EAAiBm4G,QAAQ,GAgiBlClxH,KA/hBIkzH,MAAKn6G,EAAAA,EAAiBm6G,MAAQ,GAgiBlClzH,KA/hBIsgF,OAAKvnE,CAAAA,CAAAA,GAAAA,EAAiBunE,OAiiB1BtgF,KAAK6hB,QAAU,GACX9I,GAASA,EAAM8I,QA9hBnB,IAAK,IAAA4xB,EAAA,EAAAA,EAAA16B,EAAqB8I,QAAAzU,OAAWqmC,CAAA,GACnCzzC,KAAI6hB,QAAAvR,KAAA,IAAA26G,EAAsClyG,EAAK8I,QAAA4xB,EAAA,CAAA,C,oCA8frDz1C,QACGC,OAAO,4BAA6B,EAAA,EACpC4mQ,QAAQ,gBAAiBsuH,CAAA,C,IA6C9B,CAAA,WACE,aAOA,SAASG,EAAqBC,EAA2BC,GAEvD,SA/hBSC,EAAAzyW,GAgiBP,OA/hBEA,EAgiBE9X,OAAOm6C,QAAUn6C,OAAOm6C,OAAOriC,CAAA,EAAGi2C,QAAA,EA9hBhC/tD,OAAKm6C,OAAAriC,CAAA,EAAeoiC,OAAA,YAAA,GAiiBtB4yE,EA/hBE,IAAK9xE,KAAAljC,CAAA,EAgiBPvR,MA/hBEumH,EAAK7mH,QAAA,CAAA,EAAuB,KAgiB1B6mH,EAAGpC,YAAA,EA5hBF,KA6hBAoC,EAAGnC,SAAA,EAAa,GAAGhgG,SAAA,EAAWoiG,SAAS,EAAG,GAAA,EA7hB/B,IADdD,EAAKlC,QAAA,EAAAjgG,SAAA,EAAuBoiG,SAAA,EAAA,GAAA,GAR3B,I,CA2iBT,SAASxB,EA/hBMC,GAgiBb,OAAKA,EACqC,kBAAtCrzG,OAAOszG,UAAU9gG,SAAS+gG,KAAKF,CAAA,EAAiCA,GAChE1zG,EAAI,IAAIkjC,KAAKwwE,CAAA,EACVjlH,MAAMuR,EAAE7R,QAAA,CAAA,EAAa,KAAO6R,GAliBtB,I,CA0Ff,OA2cA,SA/hB0BjI,GAyiBxB,IAvhBM26W,EA+gBN1zX,KAAKO,GA/hBGwY,EAAgBA,EAAAxY,GAAA,KAgiBxBP,KAAKqd,KAAatE,EAAQA,EAAMsE,KAAO,KACvCrd,KAAKsF,KAAcyT,GAASA,EAAMzT,KAAQyT,EAAMzT,KAAOkuX,EAAuBG,iBAC9E3zX,KAAKqoF,UAActvE,GAASA,EAAMsvE,UAAatvE,EAAMsvE,UAAYkrS,EAA0BK,uBAC3F5zX,KA/hBE43D,SAAK7+C,EAAYA,EAAA6+C,SAAA,KAgiBnB53D,KA/hBEyT,WAAUsF,EAAAA,EAAetF,WAAA,KAgiB3BzT,KA/hBI+Y,MAAKA,EAAYA,EAAMA,MAAW,KAEpC/Y,KAAKsF,OAAAkuX,EAAkCG,mBACvC1lS,EAAKjuF,KAAA+Y,OAAuC,UAAtB,OAAM/Y,KAAA+Y,MAAgB/Y,KAAA+Y,MAAA,GAC5C/Y,KAAK+Y,MAAA,CACLkqC,UAAKwxE,EAAiBxmC,EAAChrC,SAAA,EACvBC,QAAKuxE,EAAAxmC,EAAA/qC,OAAA,C,EAiiBEljD,KAAK+Y,MAAMkqC,WAAcjjD,KAAK+Y,MAAMmqC,UA9hBxCuwE,EAAA,IAAAvvE,MACCwvU,EAAA,IAAAxvU,MACCmzE,QAAK5D,EAAAK,QAAA,EAAe,CAAA,EACvB9zH,KAAA+Y,MAAAkqC,UAAqBywU,EAgiBnB1zX,KAAK+Y,MAAMmqC,QAAUuwE,IAK3BzzH,KA/hBEoyQ,QAAS,WAgiBT,MA/hBO,yBAAgBpyQ,KAAAqd,KAAAokE,YAAA,C,EAkiBzBzhF,KAAK6zX,uBA/hBI,WAgiBP,OA/hBE7zX,KAAKsF,OAAAkuX,EAAyBM,eACzB,CAAAP,EAAAK,wBAiiBA,CACLL,EAA0BK,uBA9hB9BL,EAA6BQ,2BAC3BR,EAAyBS,8BACvBT,EAAsBU,2BACtBV,EAAsBW,uCAgiBtBX,EA/hBOY,oC,EAmiBXn0X,KA/hBEo0X,WAAU,WAgiBV,OA/hBEp0X,KAAKqoF,YAAAkrS,EAAqBK,uBAAA5zX,KAAAqd,KAgiBxBrd,KAAKqoF,YAAckrS,EAA0BQ,2BAAqC/zX,KAAKqd,KAAO,QA9hBlGrd,KAAKqoF,YAAAkrS,EAAAS,8BAAAh0X,KAAAqd,KAAA,OAgiBDrd,KAAKqoF,YAAckrS,EAA0BU,2BAAqCj0X,KAAKqd,KAAO,OAC9Frd,KAAKqoF,YAAckrS,EAA0BW,uCAAiDl0X,KAAKqd,KAAO,QAC1Grd,KAAKqoF,YAAckrS,EAA0BY,oCAA8Cn0X,KAAKqd,KAAO,QAA3G,KAAA,C,EAGFrd,KA/hBIq0X,YAAO,WAgiBT,OAAIr0X,KAAK+Y,iBAAiB81G,MA9hBnB7uH,KAAK+Y,MAAAwI,IAAA,SAAA4W,GAAA,OAAAA,EAAA53B,EAAA,CAAA,EAAA2T,KAAA,GAAA,EAiiBLlU,KAAK+Y,K,EAGd/Y,KA/hBE41H,SAAY,WAiiBZ,IAeIC,EACAy+P,EA7hBJtlP,EA6gBA,OAAIhvI,KAAKsF,OAASkuX,EAAuBG,kBA9hBtCjkQ,EAAA+jQ,EAAAzzX,KAAA+Y,OAA0B/Y,KAAA+Y,MAAWkqC,SAAA,EACpCrkB,EAAK60V,EAAAzzX,KAAgB+Y,OAAA/Y,KAAA+Y,MAAAmqC,OAAA,EACvBqxU,EAAO,GAgiBH7kQ,IA/hBK6kQ,EAAAv0X,KAAKqd,KAAS,SAAAqyG,GACvB9wF,IAAO21V,EAAAv0X,KAAAqd,KAAA,SAAoBuhB,GACtBvd,OAASwkC,KAAA0uU,CAAA,EAASnnX,OAAAmnX,EAAc,MAGrCv0X,KAAOsF,OAAAkuX,EAAoBM,eAiiBvB7lS,OADAA,EAAIjuF,KAAKq0X,YAAA,IAC8B,KAANpmS,EAAmB,OACpD2vL,EAAI,IAAM59Q,KAAKo0X,WAAA,GAAgBnmS,EAAU2vL,IAG3C/nJ,EAAI71H,KAAKo0X,WAAA,EA7hBVE,OA8hBCA,EAAKt0X,KAAKq0X,YAAA,IA9hBc,KAAAC,EAAA,OAC5BtlP,EAAO,IAAQnZ,GAAAy+P,EAAiBtlP,G,oEAobtChxI,QACGC,OA/hBO,mCAAkC,EAAA,EAgiBzC4mQ,QAAQ,sBAAuByuH,CAAA,C,IAgHpC,CAAA,WACE,aAEAt1X,QACGC,OAAO,6BAA8B,EAAA,EA9hBtC4mQ,QAAO,iBAkiBT,WA0BE,OAvjBF,SAAA9rP,GAIG/Y,KAAAO,GAAQwY,EAAAA,EAAexY,GAAA,KAkiBtBP,KAAKwC,WAAauW,GAASA,EAAMvW,WAAa,IAAI0hD,KAAKnrC,EAAMvW,UAAA,EAAc,KA/hB/ExC,KAAS+8L,WAAahkL,GAAOA,EAAAgkL,WAAA,IAAA74I,KAAAnrC,EAAAgkL,UAAA,EAAA,KAC3B/8L,KAAA6hE,QAAS9oD,EAAYA,EAAO8oD,QAAA,KAiiB1B7hE,KAAK48W,WAAa7jW,GAASA,EAAM6jW,WAAa,IAAI14T,KAAKnrC,EAAM6jW,UAAA,EAAc,KAE3E58W,KAAK0wM,iBAAmB33L,EAAQA,EAAM23L,iBAAmB,KA/hBzD1wM,KAAK+iC,iBAAmBhqB,EAAKA,EAAAgqB,iBAAA,KAiiB7B/iC,KAAKyC,WAAasW,EAAQA,EAAMtW,WAAa,KAC7CzC,KAAKunC,UAAYxuB,EAAQA,EAAMwuB,UAAY,KA/hB3CvnC,KAAKy0B,SAAW1b,EAAQA,EAAM0b,SAAW,KAiiBzCz0B,KAAKkmB,QAAUnN,EAAQA,EAAMmN,QAAU,KACvClmB,KAAK+oB,OAAShQ,EAAQA,EAAMgQ,OAAS,KA/hBrC/oB,KAAKgjC,SAAAjqB,EAAAA,EAAwBiqB,SAAQ,KACrChjC,KAAK+hQ,wBAAwBhpP,EAAQA,EAAMgpP,wBAAwB,I,EAxB9D,C,IAgkBX,CAAA,WACE,aAEA/jQ,QACGC,OAhiBK,oBAAA,EAAA,EAiiBL4mQ,QAAQ,SAGX,WAEE,SAhiBOlnE,EAAA5kL,GACL/Y,KAAKO,GAAAwY,EAAWA,EAAQxY,GAAA,KAiiBxBP,KAAKimB,KAAOlN,EAAQA,EAAMkN,KAAO,KA/hBjCjmB,KAAKojM,eAAcrqL,EAAMA,EAAMqqL,eAAA,KAC/BpjM,KAAKy8Q,uBAAuB1jQ,CAAAA,CAAAA,GAAM,CAAA,CAAAA,EAAA0jQ,uBAClCz8Q,KAAKglI,SAAWjsH,GAAQA,EAAMisH,SAAWjsH,EAAAisH,SAAA,UACzChlI,KAAK08Q,mBAAoB3jQ,EAAQA,EAAM2jQ,mBAAoB,KAiiB3D18Q,KAAKw0X,cAAgBz7W,EAAQA,EAAMy7W,cAAgB,KA9hBnDx0X,KAAI0gM,kBAAqB,SAAA3nL,GAiiBvB,OAAI/Y,KAAKy8Q,uBA/hBN1jQ,EAAA/Y,KAAAojM,eAAuB,KAAA,EAEnBpjM,KAAAojM,gBAAW,C,EAmiBpBpjM,KAhiBIsiG,OAAK,WAiiBP,MAAO,CA/hBT/hG,GAAKP,KAAAO,GAiiBD8c,KAAMrd,KAAKimB,KA/hBfwuW,YAAKz0X,KAAAy8Q,uBAAoCz8Q,KAAAojM,eAAsB,KAC/DsxL,WAAK10X,KAAAy8Q,uBAAkC,KAAAz8Q,KAAAojM,eACvCp+D,SAAKhlI,KAAAglI,UAA0B,UAiiB3B03I,mBAAsC,cAAlB18Q,KAAKglI,SAA2BhlI,KAAK08Q,mBAAqB,I,GAoBpF,OAfA/+E,EAhiBIu0K,qBAA0B,SAAK3xK,GAiiBjC,OAhiBIA,EAmiBG,IAAI5C,EAAO,CAChBp9L,GAAIggM,EAAOhgM,GACX0lB,KAAMs6K,EAAOt6K,KA/hBfw2P,uBAAqB,CAAA,CAAAl8E,EAAAk0L,YAiiBnBrxL,eAAkB7C,EAAOk0L,aAAmCl0L,EAAOm0L,WA/hBrE1vP,SAAKu7D,EAAAv7D,UAAoB,UACvB03I,mBAAYn8E,EAAAm8E,oBAAA,KACZ83G,cAAIj0L,EAAgBi0L,eAAK,I,GATlB,IAAA72L,C,EA6iBJA,C,CAhDY,C,IAsDvB,CAAA,WACE,aAOA,SAASg3L,EACPh3L,EACAi3L,EACA18Q,EACA0lF,GA+CA,OA5CA,SAhiBoB7kL,GAuiBlB,GALA/Y,KAhiBIO,GAAAwY,EAAaA,EAAAxY,GAAA,KAiiBjBP,KAAKqd,KAhiBItE,EAAAA,EAAAsE,KAAA,KAiiBTrd,KAhiBI60X,cAAa97W,GAAAA,EAAA87W,cAAA,IAAA3wU,KAAAnrC,EAAA87W,aAAA,EAAA,KAiiBjB70X,KAAK0/L,KAAO3mL,EAAQ,IAAI67W,EAAK77W,EAAM2mL,IAAA,EAAQ,KAC3C1/L,KAhiBE4iM,wBAAwB,GAiiBtB7pL,GAASA,EAAM6pL,wBACjB,IAAK,IAAInvJ,EAAI,EAAGA,EAAI16B,EAAM6pL,wBAAwBx1L,OAAQ,EAAEqmC,EA/hB9DzzC,KAAK4iM,wBAAyBtyL,KAAA,IAAWstL,EAAA7kL,EAAA6pL,wBAAAnvJ,EAAA,CAAA,EAoiBzC,GADAzzC,KAhiBImgM,uBAAI,GACJpnL,GAAQA,EAAMonL,uBAiiBhB,IAhiBO1sJ,EAAI,EAAKA,EAAA16B,EAAAonL,uBAAmB/yL,OAAA,EAAAqmC,EACjCzzC,KAAAmgM,uBAAa7vL,KAAA,IAAA4nG,EAAAn/F,EAAAonL,uBAAA1sJ,EAAA,CAAA,EAmiBjBzzC,KAAKugM,OAAS,GA/hBVxnL,GAAOA,EAAMoqL,SAAWpqL,EAAOoqL,QAAA/1L,SAiiBjCpN,KAAKugM,OAAS,IAAI5C,EAAOu0K,qBAAqBn5V,EAAMoqL,QAAQ,EAAA,GAI9DnjM,KAhiBIukW,gBAAgB,WAiiBlB,OAAOvkW,KAAK0/L,KAAK6kK,gBAAA,C,EAGnBvkW,KAhiBIykW,cAAgB,WAiiBlB,OAAOzkW,KAAK0/L,KAAK+kK,cAAA,C,EAGnBzkW,KAhiBI0kW,wBAA2B,WAiiB7B,IAhiBEowB,EAAK,GAoiBP,OAHA90X,KAAK4iM,wBAhiBE1hM,QAAA,SAAA2hM,GACL7kM,QAAKqhB,OAAAy1W,EAA4BjyL,EAAAF,aAAAmoL,kBAAA,CAAA,C,GAkiB5BgK,C,uEAjDb92X,QACGC,OAhiBM,6BAA8B,EAAA,EAiiBpC4mQ,QAhiBO,iBAAA8vH,CAAA,C,IA2lBZ,CAAA,WACE,aAzhBA,SAAAI,EAiiBEz1X,EACAq+L,EACAM,EACAH,GAzaA,OA2aA,SAA6B/kL,GA7hB3B/Y,KAAKO,GAAKwY,EAAAxY,GACVP,KAAKimB,KAAOlN,EAAAkN,KACZjmB,KAAKqd,KAAOtE,EAAAsE,KACZrd,KAAKkmI,MAAQntH,EAAAmtH,MAiiBblmI,KAAKg1X,WAAaj8W,EAAMi8W,WACxBh1X,KAAKmiM,gBAAkBppL,EAAMopL,gBAC7BniM,KAAKwjM,eAAiBzqL,EAAMyqL,eAC5BxjM,KAAKurX,mBAAqBxyW,EAAMwyW,mBAChCvrX,KAAKwrX,kBAAoBzyW,EAAMyyW,kBA/hBjCxrX,KAAO0P,eAAAqJ,EAAArJ,eAiiBL1P,KAAKqiM,oBAAsBtpL,EAAMspL,oBACjCriM,KAAKi1X,iBAAmBl8W,EAAMk8W,iBAC9Bj1X,KAAKk1X,QAAUn8W,EAAMm8W,QACrBl1X,KAAKm1X,cAAgBp8W,EAAMo8W,cA/hBhCn1X,KAAAugM,OAAW,IAAA5C,EACV5kL,EAAAoqL,SAAApqL,EAAAoqL,QAAA/1L,SAiiBMpN,KAAKugM,OAAS5C,EAAOu0K,qBAAqBn5V,EAAMoqL,QAAQ,EAAA,GA7hB3DnjM,KAAAo1X,yBAAyB,WAiiBtB,OAAOp1X,KAAKmiM,iBAAmBniM,KAAKwjM,c,EA7hBxCxjM,KAAIq1X,qBAAA,WACF,IACKl2W,EADL,GAAMnf,KAAAimB,KAEN,OADK9G,EAAA,+BAAAnf,KAAAimB,KAAAw7D,YAAA,EAAA,SACLniF,EAAiB,WAAA,EAAA6f,CAAA,C,EAIjBnf,KAAAs1X,oBAAa,WACb,IACAn2W,EACA9P,EAFA,GAAArP,KAAAimB,KAGA,OAFA9G,EAAA,+BAAenf,KAAAimB,KAAAw7D,YAAA,EAAA,QACfpyE,EAAe/P,EAAA,OAAA,EAAAU,KAAA0P,cAAA,EAAA,IACLpQ,EAAA,WAAA,EAAA6f,EAAA,CACV9P,MAASA,C,IAKTrP,KAAAq5G,eAAgB,WAChB,OAAAr5G,KAAcqiM,sBAAApE,EAAAqE,gBACdtiM,KAAMmiM,iBAAAniM,KAAAwjM,c,EAGNxjM,KAAAs5G,eAAkB,WAClB,OAAAt5G,KAAAqiM,sBAAkBpE,EAAAs3L,c,EAGlBv1X,KAAAw1X,eAAqB,WACrB,OAAArhW,KAAAkP,IAAiB,EAAArjC,KAAAwjM,eAAAxjM,KAAAmiM,eAAA,C,EAGjBniM,KAAA0gM,kBAAsB,SAAAqqL,GACtB,OAAA/qX,KAAAugM,QAiiBQujL,EAAY9jX,KAAKujC,SAASwnV,CAAA,EAC1BvnV,EAAWxjC,KAAKi1X,iBAAmBnR,EA/hBzC9jX,KAAAugM,OAAiBG,kBAAAl9J,CAAA,GAEX,C,EAGVxjC,KAAAujC,SAAS,SAAkBm7J,GACzB,IAAIrvL,EAAA,KAOJ,OANEqvL,IAAYZ,EAAsBwB,SAiiBhCjwL,EAAQrP,KAAKwrX,mBAGbn8W,EADEqvL,IAAWZ,EAAoBa,QACzB3+L,KAAKurX,mBA9hBZl8W,C,EAmiBLrP,KAAK65B,SAAW,SAAS6kK,EAAQ+2L,GA/hBnC3R,EAAc9jX,KAAAujC,SAAAm7J,EAAqB,CAAA,CAAA,EAiiB3Bl7J,EAAWxjC,KAAKi1X,iBAAmBnR,EA/hB3C,OAAA2R,GAAwBz1X,KAAAugM,QAClBpwL,EAAA,EACAnQ,KAAOugM,OAAAk8E,uBACXtsQ,EAAcnQ,KAAAugM,OAAAG,kBAA+Bl9J,CAAA,EAIrCrP,KAAMkP,IAAI,EAAAG,EAAArzB,CAAA,GAEZqzB,C,EAmiBNxjC,KAAKsiG,OAAS,WA/hBd,IAAAh/E,EAAO,CAiiBH/iB,GAAIP,KAAKO,GACT0lB,KAAMjmB,KAAKimB,KA/hBjB5I,KAAArd,KAAcqd,KACR6oH,MAAAlmI,KAAAkmI,MACA8uP,WAAMh1X,KAASg1X,WACjB7yL,gBAAOniM,KAAAmiM,gBAiiBLqB,eAAgBxjM,KAAKwjM,eACrB9zL,eAAgB1P,KAAK0P,eA/hBzB2yL,oBAAcriM,KAAAqiM,oBACd4yL,iBAAqBj1X,KAAAi1X,iBAiiBjBC,QAASl1X,KAAKk1X,QACdC,cAAen1X,KAAKm1X,cA/hB1BhyL,QAAc,E,EAKZ,OA6hBMnjM,KAAKugM,QAAUvgM,KAAKugM,OAAO6C,gBAC7B9/K,EAAK6/K,QAAQ7yL,KAAKtQ,KAAKugM,OAAOj+F,OAAA,CAAA,EA9hB3Bh/E,C,2FAuaXtlB,QACGC,OAAO,mCAAoC,EAAA,EA/hB/C4mQ,QAAW,sBAAAkwH,CAAA,C,IAkqBZ,CAAA,WACE,aAzhBD,SAAAW,EACC/3L,EAiiBE4sL,GAyDA,OAtDA,SAhiBoBxxW,GAkiBlB/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KA/hBjCP,KAASugM,OAAA,IAAW5C,EAiiBZ5kL,GAASA,EAAMoqL,SAAWpqL,EAAMoqL,QAAQ/1L,SA/hB9CpN,KAASugM,OAAQ,IAAA5C,EAAOu0K,qBAAAn5V,EAAAoqL,QAAA,EAAA,GAEtBnjM,KAAK2iM,aAAa5pL,EAAM,IAAKwxW,EAAAxxW,EAAA4pL,YAAA,EAAA,KAE7B3iM,KAAKwP,SAAO,CAAA,EAmiBZxP,KAAKujC,SAAW,SAASm7J,EAAQ+2L,GA/hBjC,OAAKA,EACCz1X,KAAA2iM,aAAiBp/J,SAAAm7J,CAAA,EAAA1+L,KAAA0gM,kBAAAhC,CAAA,EAEd1+L,KAAI2iM,aAAWp/J,SAAKm7J,CAAA,C,EAmiB7B1+L,KAAK0gM,kBAhiBc,SAAAhC,GAiiBjB,OAAO1+L,KAAKugM,OAAOG,kBAAkB1gM,KAAK2iM,aAAap/J,SAASm7J,CAAA,CAAA,C,EAGlE1+L,KAhiBIsiG,OAAK,WAiiBP,IAhiBIh/E,EAAA,CAiiBF/iB,GAAIP,KAAKO,GACToiM,aAAc,KA/hBhBQ,QAAO,E,EAwiBP,OANInjM,KAAKugM,QAAUvgM,KAAKugM,OAAO6C,gBAC7B9/K,EAAK6/K,QAAQ7yL,KAAKtQ,KAAKugM,OAAOj+F,OAAA,CAAA,EAE7BtiG,KAAK2iM,eACNr/K,EAAKq/K,aAAe3iM,KAAK2iM,aAAapiM,IAEjC+iB,C,EAGTtjB,KAAKijM,YAAc,WA/hBxB,IAAA3/K,EAAY,CACXqyW,gBAAA31X,KAAA2iM,aAAA3iM,KAAA2iM,aAAApiM,GAAA,I,EAEAszF,EAAA7zF,KAAAugM,QAAAvgM,KAAAugM,OAAA6C,eAAApjM,KAAAugM,OAAAj+F,OAAA,EAAA,KAIA,OAHUzO,IACPvwE,EAAQ6/K,QAAW,CAAAtvG,IAEbvwE,C,sCAweTtlB,QA/hBEC,OAAO,+BAAA,EAAA,EAiiBN4mQ,QAAQ,kBAAmB6wH,CAAA,C,IAmEhC,CAAA,WACE,aAOA,SAASE,EA/hBV/3L,EACCg4L,EAiiBEC,EACA9/V,EAhiBFq/E,GAuoBE,OAnGA,SAAiBt8F,GA9hBjB,GAAAA,EAmiBI,IAliBJ,IAAA8sC,EAAAxkC,OAAAwkC,KAAA9sC,CAAA,EAkiBa06B,EAAI,EAAGA,EAAIoS,EAAKz4C,OAAQ,EAAEqmC,EAhiBvCzzC,KAAS6lD,EAAApS,IAAAz1C,QAAqBye,KAAA1D,EAAA8sC,EAAApS,GAAA,EAyiB5B,GALAzzC,KAAK+1X,8BAAgCh9W,CAAAA,CAAAA,GAAQA,EAAMg9W,8BAhiBnD/1X,KAAIm/L,aAAApmL,GAAwBA,EAAAomL,aAAA,IAAAtB,EAAA9kL,EAAAomL,YAAA,EAAA,KAC5Bn/L,KAAIsoK,eAAAvvJ,GAAyBA,EAAAuvJ,eAAAutN,EAAAjoR,OAAA70F,EAAAuvJ,cAAA,EAAA,KAE7BtoK,KAAI0iP,2BAAyB,GAkiBzB3pO,GAASA,EAAM2pO,2BA/hBnB,IAgiBE,IAAImiB,EAAU,IAAIixH,EAhiBVjiV,EAAA,EAAQA,EAAA96B,EAAM2pO,2BAAKt1O,OAAA,EAAAymC,EAAA,CAC7B,IAAKmiV,EAA4BnxH,EAAA0O,gCAAAx6P,EAAA2pO,2BAAA7uM,GAAAipJ,eAAA,EAC5Bk5L,EACAh2X,KAAA0iP,2BAAYpyO,KAAA,IAAA0lX,EAAAj9W,EAAA2pO,2BAAA7uM,EAAA,CAAA,EAEZ7zC,KAAA0iP,2BAA2BpyO,KAAAyI,EAAa2pO,2BAAA7uM,EAAA,C,CAO7C7zC,KAAIukW,gBAAe,WACjB,OAAAvkW,KAASm/L,aACFn/L,KAAAm/L,aAAiBolK,gBAAA,EAmiBjB,E,EAGTvkW,KAAKykW,cAAgB,WACnB,OAAIzkW,KAAKm/L,aACAn/L,KAAKm/L,aAAaslK,cAAA,EAEpB,E,EAGTzkW,KAAK0kW,wBAA0B,WAC7B,OAAI1kW,KAAKm/L,aAhiBLn/L,KAAAm/L,aAAAulK,wBAAA,EAmiBG,E,EA/hBV1kW,KAAAq4D,gBAAO,WACP,MAAQ,CAAA,CAAAr4D,KAAAm/L,Y,EAGXn/L,KAASmmW,SAAA,SAAA3mV,GAmiBH,OAAOxf,KAAKm/L,aAAagnK,SAAS3mV,CAAA,C,EA/hBpCxf,KAAIq8F,uBAAwB,SAAUrmE,GACpC,MAAO,CAAA,CAAAh2B,KAAOi2X,gBAAUjgW,CAAA,C,EAG1Bh2B,KAAIi2X,gBAAS,SAAcjgW,GAC3B,OAAIh2B,KAAO0iP,2BAGJ1iP,KAAI0iP,2BAAgBt9O,KAAA,SAAAu9O,GAmiBvB,OAAOA,EAAa7lD,gBAAgBx3L,OAAS0wB,GAC3C2sN,EAAa9hP,SAAWw0G,EAAiCsB,O,GAtiBtD,I,EAQT32G,KAAIk2X,+BAAa,SAAAlgW,EAAAmgW,GACjB,OAAOn2X,KAAA0iP,2BAGA1iP,KAAA0iP,2BAA2Bt9O,KAAA,SAAAu9O,GAmiB9B,OAAIwzI,MAAAA,EAjiBHxzI,EAAqB7lD,gBAAWx3L,OAAA0wB,GAChC2sN,EAAa9hP,SAAcw0G,EAAOsB,SACL,OAA7BgsI,EAAcnmG,eAEdmmG,EAAa7lD,gBAAcx3L,OAAW0wB,GACtC2sN,EAAa9hP,SAAQw0G,EAAmBsB,SACxCgsI,EAAanmG,iBAAc25O,C,GAwhBrB,I,EAcXn2X,KAliBIgmJ,gBAAa,SAAAmwO,GAmiBf,OAliBIn2X,KAAAk2X,+BAAoBlgW,EAAAs+E,UAAA6hR,CAAA,C,EAqiB1Bn2X,KAliBIooK,iBAAgB,WAmiBlB,MAliBI,CAAI,CAAApoK,KAAAsoK,c,gJAybdtqK,QA/hBEC,OAAO,qBAAA,EAAA,EAiiBN4mQ,QAAQ,UAAW+wH,CAAA,C,IAmHxB,CAAA,WACE,aAEA53X,QACGC,OAAO,uBAAwB,EAAA,EAC/B4mQ,QAliBG,YAqiBN,WAgBE,OAdA,SAliBM9rP,GAmiBJ/Y,KAliBIO,GAAAwY,EAAAA,EAAAxY,GAAA,KAmiBJP,KAAK8xR,MAAQ/4Q,EAAQA,EAAM+4Q,MAAQ,KACnC9xR,KAAK6xR,MAAQ94Q,EAAQA,EAAM84Q,MAAQ,KACnC7xR,KAAK4xR,MAAQ74Q,EAAQA,EAAM64Q,MAAQ,KAjiBnC5xR,KAAK+zG,OAAAh7F,EAAaA,EAAAg7F,OAAW,KAmiB7B/zG,KAliBEo2X,YAASr9W,GAAcA,EAAAq9W,YAAA,IAA0BlyU,KAAAnrC,EAAAq9W,WAAA,EAA0B,KAoiB7Ep2X,KAliBEq2X,aAASt9W,EAAcA,EAAAs9W,aAAA,KAmiBzBr2X,KAliBEs2X,kBAAuBv9W,EAAAA,EAAAu9W,kBAA0B,KAmiBnDt2X,KAliBEu2X,eAASx9W,EAAcA,EAAAw9W,eAA0B,KAmiBnDv2X,KAliBEw2X,iBAASz9W,EAAcA,EAAAy9W,iBAA0B,I,EAhB1C,C,IAyjBf,CAAA,WACE,aAEAx4X,QACGC,OAAO,8BAA+B,EAAA,EACtC4mQ,QAliBO,iBAqiBV,WA+CE,OA7CA,SAliBwB9rP,GAmiBtB/Y,KAliBIi7C,KAAOliC,GAAOA,EAAKkiC,KAAK,IAASiJ,KAAMnrC,EAAAkiC,IAAA,EAAA,KAmiB3Cj7C,KAAKs3H,IAAMv+G,EAAQA,EAAMu+G,IAAM,KAC/Bt3H,KAAKy2X,SAAW19W,EAAQA,EAAM09W,SAAW,KACzCz2X,KAliBE+jN,KAAShrM,EAASA,EAAAgrM,KAAA,KAmiBpB/jN,KAliBIgnI,MAAQjuH,EAAKA,EAAAiuH,MAAA,KAmiBjBhnI,KAliBI+mI,KAAIhuH,EAAMA,EAAQguH,KAAM,KAqiB5B/mI,KAAKqiI,iBAAmBtpH,EAAQA,EAAMspH,iBAAmB,EACzDriI,KAliBEsiI,oBAAavpH,EAAAA,EAAAupH,oBAAA,EAoiBftiI,KAliBE0hI,mBAAmB3oH,EAAOA,EAAA2oH,mBAAiC,EAmiB7D1hI,KAliBE2hI,iBAAkB5oH,EAASA,EAAO4oH,iBAAA,EAmiBpC3hI,KAAK4hI,+BAAiC7oH,EAAQA,EAAM6oH,+BAAiC,EACrF5hI,KAAKiiI,sBAAwBlpH,EAAQA,EAAMkpH,sBAAwB,EACnEjiI,KAAKkiI,iCAAmCnpH,EAAQA,EAAMmpH,iCAAmC,EAEzFliI,KAAKyiI,2BAA6B1pH,EAAQA,EAAM0pH,2BAA6B,EAC7EziI,KAAK02X,oCAAsC39W,EAAQA,EAAM29W,oCAAsC,EAhiBnG12X,KAAAgiI,QAAAjpH,EAAAA,EAAAipH,QAAA,EAmiBIhiI,KAAK22X,YAAc59W,EAAQA,EAAM49W,YAAc,EAjiBnD32X,KAAAqoH,eAAAtvG,EAAAA,EAAAsvG,eAAA,EACGroH,KAAA42X,oBAAO79W,EAAAA,EAA8B69W,oBAAA,EACrC52X,KAAAooH,WAAQrvG,EAAkBA,EAAAqvG,WAAA,EAmiBzBpoH,KAAKmiI,gBAAkBppH,EAAQA,EAAMopH,gBAAkB,EACvDniI,KAAK6hI,aAAe9oH,EAAQA,EAAM8oH,aAAe,EAEjD7hI,KAAKwiI,sBAAwBzpH,EAAQA,EAAMypH,sBAAwB,EAjiBrExiI,KAAA0iI,oBAAwB3pH,EAAOA,EAAA2pH,oBAAA,EAmiB7B1iI,KAAK62X,kBAAoB99W,EAAQA,EAAM89W,kBAAoB,EAC3D72X,KAAK82X,qBAAuB/9W,EAAQA,EAAM+9W,qBAAuB,EAEjE92X,KAAK8hI,QAAU/oH,EAAQA,EAAM+oH,QAAU,EAjiBvC9hI,KAAK+hI,WAAahpH,EAAMA,EAAKgpH,WAAA,EAE7B/hI,KAAKmiI,gBAAappH,EAASA,EAAMopH,gBAAsB,EACvDniI,KAAKoiI,oBAAsBrpH,EAAMA,EAAAqpH,oBAA4B,C,EA3CzC,C,IAylB1B,CAAA,WACE,aA3hBD,SAAA20P,EAAWzuL,GAkmBR,OA9DA,SAAsBvvL,GAjiBxB/Y,KAAAO,GAAAwY,EAAAA,EAAAxY,GAAA,KACGP,KAAAg2D,KAAOj9C,EAAAA,EAAAi9C,KAAqB,KAC5Bh2D,KAAAi2D,OAAQl9C,EAAUA,EAAAk9C,OAAA,KAmiBjBj2D,KAAKunC,UAAYxuB,EAAQA,EAAMwuB,UAAY,KAC3CvnC,KAAK8hB,WAAa/I,EAAQA,EAAM+I,WAAa,KAE7C9hB,KAAKiI,aAAe8Q,EAAQA,EAAM9Q,aAAe,KAjiBnDjI,KAAAg3X,UAAgBj+W,EAAOA,EAAAi+W,UAAA1uL,EAAA2uL,qBACrBj3X,KAAKk3X,oBAAmBn+W,EAAKA,EAAAm+W,oBAAA,GAC7Bl3X,KAAKm3X,qBAAqBp+W,EAAOA,EAAAo+W,qBAAA,GACjCn3X,KAAKo3X,iBAAiBr+W,EAAQA,EAAMq+W,iBAAiB,GACrDp3X,KAAKq3X,qBAAAt+W,CAAAA,CAAAA,GAAyBA,EAAUs+W,qBACxCr3X,KAAKs3X,wBAA0Bv+W,CAAAA,CAAAA,GAAAA,EAAWu+W,wBAC1Ct3X,KAAKu3X,eAAAx+W,CAAAA,CAAAA,GAAqBA,EAAQw+W,eAoiBlCv3X,KAAKyH,MAAQsR,EAAQA,EAAMtR,MAAQ,KAjiBnCzH,KAAKu9B,MAAAxkB,EAAAA,EAAoBwkB,MAAS,KAmiBlCv9B,KAliBEw3X,aAASz+W,EAAAA,EAAAy+W,aAAwB,KAmiBnCx3X,KAliBIy3X,cAAe1+W,EAAKA,EAAA0+W,cAAwB,KAmiBhDz3X,KAAK03X,eAAiB3+W,EAAQA,EAAM2+W,eAAiB,KACrD13X,KAliBE23X,aAAY5+W,EAAAA,EAAkB4+W,aAAA,KAoiBhC33X,KAAK43X,mBAAqB7+W,CAAAA,CAAAA,GAAQA,EAAM6+W,mBAjiBxC53X,KAAK63X,sBAAoB9+W,CAAAA,CAAAA,GAAAA,EAAA8+W,sBAmiBzB73X,KAliBE83X,iBAAO/+W,CAAAA,CAAAA,GAAAA,EAAA++W,iBAmiBT93X,KAliBI+3X,qBAASh/W,CAAAA,CAAAA,GAAAA,EAAAg/W,qBAmiBb/3X,KAliBIg4X,gBAAWj/W,CAAAA,CAAAA,GAAAA,EAAAi/W,gBAmiBfh4X,KAliBIi4X,eAAkBl/W,CAAAA,CAAAA,GAAAA,EAAAk/W,eAmiBtBj4X,KAliBIk4X,iBAAiBn/W,CAAAA,CAAAA,GAAAA,EAAAm/W,iBAmiBrBl4X,KAliBIm4X,gBAAep/W,CAAAA,CAAAA,GAAYA,EAAAo/W,gBAmiB/Bn4X,KAliBIo4X,gBAAAr/W,CAAAA,CAAAA,GAAyBA,EAAAq/W,gBAmiB7Bp4X,KAAKq4X,qBAAuBt/W,CAAAA,CAAAA,GAAQA,EAAMs/W,qBAC1Cr4X,KAAKs4X,gBAAkBv/W,CAAAA,CAAAA,GAAQA,EAAMu/W,gBAErCt4X,KAAKu4X,gBAAkBx/W,CAAAA,CAAAA,GAAQA,EAAMw/W,gBAjiBvCv4X,KAAOw4X,WAAAz/W,CAAAA,CAAAA,GAAAA,EAAuBy/W,WAC5Bx4X,KAAKy4X,gBAAQ1/W,CAAAA,CAAAA,GAAAA,EAAA0/W,gBAmiBbz4X,KAliBE04X,mBAAW3/W,CAAAA,CAAAA,GAAAA,EAAA2/W,mBAmiBb14X,KAAK24X,4BAA8B5/W,CAAAA,CAAAA,GAAQA,EAAM4/W,4BAjiBjD34X,KAAA44X,oBAAkB7/W,CAAAA,CAAAA,GAAAA,EAAA6/W,oBAmiBlB54X,KAliBE64X,gBAAW9/W,CAAAA,CAAAA,GAAAA,EAAA8/W,gBAmiBb74X,KAliBE84X,mBAAa//W,CAAAA,CAAAA,GAAAA,EAAA+/W,mBAmiBf94X,KAliBE+4X,kCAAiChgX,CAAAA,CAAAA,GAAAA,EAAAggX,kCAoiBnC/4X,KAliBEg5X,gCAA6BjgX,CAAAA,CAAAA,GAAAA,EAAAigX,gCAmiB/Bh5X,KAliBEi5X,gCAA2BlgX,CAAAA,CAAAA,GAAAA,EAAsBkgX,gCAmiBnDj5X,KAliBE4oM,wBAAsB7vL,CAAAA,CAAAA,GAAAA,EAAiB6vL,wBAmiBzC5oM,KAAK6oM,iBAAmB9vL,CAAAA,CAAAA,GAAQA,EAAM8vL,iBACtC7oM,KAAK8oM,uBAAyB/vL,CAAAA,CAAAA,GAAQA,EAAM+vL,uBAG5C9oM,KAAKk5X,WAAa,WAEhB,MAAO,oBADUl5X,KAAKg2D,MAAmB,UACA,8B,yCA7D/Ch4D,QAjiBEC,OAAO,2BAAA,EAAA,EAmiBN4mQ,QAAQ,eAAgBkyH,CAAA,C,IAwE7B,CAAA,WACE,aAEA/4X,QAliBEC,OAAA,uBAAA,EAAA,EAoiBC4mQ,QAAQ,YAGX,WAaE,OAXA,SAniBO9rP,GACL/Y,KAAKO,GAAAwY,EAAOA,EAAYxY,GAAK,KAC7BP,KAAKqd,KAAAtE,EAAAA,EAAAsE,KAA0B,KAC/Brd,KAAI6Z,QAASd,EAAMA,EAAAc,QAAA,KAoiBnB7Z,KAniBEilF,mBAAoBlsE,EAAMA,EAAAksE,mBAAgC,I,EA0hBxC,C,IAqB1B,CAAA,WACE,aAOA,SAniBSk0S,EAAgBttN,GA4kBvB,OAvCA,SAA2B9yJ,GACzB/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAliB7BP,KAAKqd,KAAAtE,EAAAA,EAAAsE,KAA0B,KAoiB/Brd,KAniBE6Z,QAAId,EAAAA,EAAuBc,QAAA,KAoiB7B7Z,KAniBEsF,KAAKyT,EAAAA,EAAAzT,KAAwB,KAoiB/BtF,KAniBIuI,WAAQwQ,GAAOA,EAAAxQ,WAAsBwQ,EAAAxQ,WAAgB,GAqiBzDvI,KAniBE8lF,kBAAO,WAoiBP,OAAO9lF,KAAKsF,OAASumK,EAAyBO,gB,EAGhDpsK,KAAKo5X,oBAAsB,WACzB,OAAOp5X,KAAKsF,OAASumK,EAAyBM,mB,EAGhDnsK,KAAKomF,OAAS,WACZ,OAAOpmF,KAAKsF,OAASumK,EAAyBkK,I,EAhiBrD/1K,KAAAq5X,WAAW,WACV,OAAAr5X,KAAAsF,OAAAumK,EAAAmK,S,EAEAh2K,KAAAqmF,OAAA,WACG,OAAOrmF,KAAAsF,OAAAumK,EAAoCptJ,I,EAuiB1Cze,KAAKsmF,MAAQ,WAniBjB,OAAStmF,KAAAsF,OAAAumK,EAAAoK,G,EAGPj2K,KAAAumF,UAAA,WACA,OAAAvmF,KAAAsF,OAAqBumK,EAAAqK,O,0CA6fvBl4K,QACGC,OAniBM,gCAA6B,EAAA,EAoiBnC4mQ,QAniBG,oBAAiBs0H,CAAA,C,IAolBzB,CAAA,WACE,aAOA,SApiBOG,EAAuBt1S,EAAQD,GA4nBpC,OAtFA,SAAgChrE,GAc9B,GAbA/Y,KAAKO,GAAKwY,EAAQA,EAAMxY,GAAK,KAniB7BP,KAAK+Z,QAAAhB,EAAAA,EAAAgB,QAA2B,KAqiBhC/Z,KApiBEykF,kBAAY1rE,EAAmBA,EAAK0rE,kBAAA,KAqiBtCzkF,KAAK0kF,2BAA6B3rE,GAASA,EAAM2rE,2BAC/C,IAAIX,EAAkBhrE,EAAM2rE,0BAAA,EAA8B,KAniB5D1kF,KAAKuI,WAAAwQ,EAAAA,EAAuBxQ,WAAW,GAqiBvCvI,KApiBE+mF,oBAAe,GAqiBjB/mF,KApiBI+Y,MAAI,GAuiBR/Y,KAAKymF,wBAA0B,KAC/BzmF,KAAK2mF,2BAA6B,GAliBhC5tE,EAAIguE,oBAAW,CAqiBf,IApiBE,IAAItzC,EAAM,EAAAA,EAAA16B,EAAAguE,oBAAiC35E,OAAKqmC,CAAA,GAChDzzC,KAAI+mF,oBAAgBz2E,KAAS,IAAK0zE,EAAAjrE,EAAAguE,oBAAkBtzC,EAAA,CAAA,EAsiBnDzzC,KApiBC0kF,2BAAOoB,kBAAA,GAAA/sE,EAAAguE,oBAAA35E,OAqiBTpN,KAAKymF,wBAA0BzmF,KAAK+mF,oBAAoB,GAC/C/mF,KAAK0kF,2BAA2B00S,oBAAA,GAA0BrgX,EAAMguE,oBAAoB35E,SAC7FpN,KAAK2mF,2BAA6B3mF,KAAK+mF,oB,CAK3C/mF,KAAK8lF,kBAAoB,WACvB,MAAG9lF,CAAAA,CAAAA,KAAK0kF,4BAniBL1kF,KAAA0kF,2BAA4BoB,kBAAA,C,EAyiBjC9lF,KApiBEo5X,oBAAwB,WAqiBxB,MAAGp5X,CAAAA,CAAAA,KAAK0kF,4BACC1kF,KAAK0kF,2BAA2B00S,oBAAA,C,EAK3Cp5X,KApiBIomF,OAAO,WAqiBT,MAAGpmF,CAAAA,CAAAA,KAAK0kF,4BAniBD1kF,KAAA0kF,2BAAA0B,OAAA,C,EAyiBTpmF,KApiBEq5X,WAAe,WAqiBf,MApiBEr5X,CAAAA,CAAAA,KAAA0kF,4BAqiBO1kF,KAAK0kF,2BAA2B20S,WAAA,C,EAK3Cr5X,KAAKqmF,OAAS,WACZ,MAAGrmF,CAAAA,CAAAA,KAAK0kF,4BAniBL1kF,KAAW0kF,2BAAiB2B,OAAA,C,EAyiBjCrmF,KApiBIsmF,MAAS,WAqiBX,MAAGtmF,CAAAA,CAAAA,KApiBC0kF,4BACK1kF,KAAA0kF,2BAAA4B,MAAA,C,EAyiBXtmF,KApiBEumF,UAAO,WAqiBP,MAAGvmF,CAAAA,CAAAA,KAAK0kF,4BACC1kF,KAAK0kF,2BAA2B6B,UAAA,C,EAK3CvmF,KApiBI+Y,MAAMA,EAAKA,EAAAA,MAAA,GAqiBZ/Y,KApiBC+Y,OAAY/Y,KAAAsmF,MAAA,EAqiBdtmF,KApiBE+Y,MAAAm2D,SAAiBlvE,KAAA+Y,KAAA,EACjB/Y,KAAA+Y,OAAiB/Y,KAAKumF,UAAA,IAqiBxBvmF,KApiBE+Y,MAAAoC,WAAqBnb,KAAA+Y,KAAA,E,8CA8c7B/a,QACGC,OApiBM,sCAAyB,EAAA,EAqiB/B4mQ,QApiBM,yBAAgBy0H,CAAA,C,IAooB3B,CAAA,WACE,aAQA,SAASC,EAniBVp7X,EACC85V,EAqiBEp4V,EACAq4V,GAEA,IAriBCn4V,EAAOC,KAsiBR7B,EAriBC+5V,iBAAQA,EAsiBT/5V,EAAOqS,QAAU3Q,EAliBjBE,EAAAk7C,KAAA,IAAAiJ,KACAnkD,EAAAy5X,eAAAvhC,EAGAl4V,EAAAksC,MA0iBA,WACElsC,EAAGy5X,eAAevtV,MAAM/iC,OAAOlL,QAAQye,KAAK1c,EAAG6C,KAAA,CAAA,EApiB/C7C,EAAA6C,MAAK,I,EA+hBP7C,EAAGu4V,MASH,WACEv4V,EAAGy5X,eAAelhC,MAAMpvV,OAAOlL,QAAQye,KAAK1c,EAAG6C,KAAA,CAAA,EApiB/C7C,EAAA6C,MAAK,I,EA2hBP7C,EAriBEw6F,OAkjBF,WACEx6F,EAriBEy5X,eAAYj/R,OAAArxF,OAAalL,QAASye,KAAA1c,EAAA6C,KAAA,CAAA,EAsiBpC7C,EAAG6C,MAAQ,I,qEAtCf5E,QACGC,OAAO,UAAA,EACPK,WAAW,kCAAmCi7X,CAAA,EAniB/Ch7X,UAAO,wBA6kBT,WACE,MAriBI,CAsiBFC,SAriBQ,IAsiBRC,MAriBI,CAsiBFo7O,OAriBE,G,EAuiBJv7O,WAriBW,kCAsiBXK,aAriBS,KAsiBTC,YAAa,oE,EArlBR,C,IA0lBX,CAAA,WACE,aAEAZ,QACGC,OAriBK,UAAA,EAsiBLK,WAAW,kCAId,YAJiD,EAC9CC,UAriBO,wBA8iBV,WACE,MAAO,CACLC,SAAU,IApiBZiM,QAAO,CAAA,EAsiBLhM,MAAO,CACLo7O,OAAQ,G,EAEVv7O,WAAY,kCApiBjBK,aAAW,KACVC,YAAA,oE,EAlBkC,C,IA4jBpC,CAAA,WACE,aApiBAZ,QACEC,OAAA,UAAA,EACAM,UAAA,gBAyiBF,WAriBE,MAAA,CAuiBEkM,QAAS,CAAA,EAriBXjM,SAAS,IAuiBPI,YAAa,mDACbH,MAAO,CAriBPgK,KAAI,KACFqsN,SAAI,I,EAwiBNx2N,WAtiBS,CAAA,SAAW,SAAaH,GAijB/B,SAtiBMs7X,IACJ,GAAIt7X,EAAAsK,MAAAtK,EAAA22N,SAAJ,CA4iBA,IAHA,IAtiBEA,EAAK32N,EAAAsK,KAAAtK,EAA2BsK,KAAK6U,WAAMnf,EAAAsK,KAAA4jE,UAA2BluE,EAAA22N,SAAArqN,QAAA,IAAA,EAAA,EAuiBpEwB,EAAS,EAEJwnC,EAAI,EAAGA,EAAIqhL,EAAS1nN,OAAQ,EAAEqmC,EACrCxnC,GAAU6oN,EAASzqC,WAAW52I,CAAA,EAniBpC,OAAKxnC,EAAA9N,EAAkBisL,YAAWh9K,M,EAlBlCjP,EAAKisL,YAAe,CAAA,SAAS,SAAM,SAAmB,SAAA,SAAmB,SAAA,SAAgB,SAAA,SAAA,SAAA,SAAA,SAAA,SAAA,SAAA,UACzFjsL,EAAKu7X,YAAiB,CAAA,SAAS,SAAM,SAAiB,SAAA,SAAA,SAA4B,SAAM,SAAA,SAAkB,SAAA,SAAA,SAAA,SAAA,SAAA,UAE1Gv7X,EAAKw7X,YAiCH,WAuiBE,CAAA,IACM9+N,EAriBLm7H,EAoiBD,GAAI73R,EAAOsK,KAniBb,OAoiBQoyJ,EAAQ18J,EAAOsK,KAAK6U,WAAanf,EAAOsK,KAAK6U,WAAW,GAAGsgI,kBAAA,EAAsB,GAriBtFo4I,EAAA73R,EAAkBsK,KAAA4jE,UAAWluE,EAAAsK,KAAA4jE,UAAA,GAAAuxE,kBAAA,EAAA,GACvBid,EAAKm7H,C,CAwiBZ,GAAI73R,EAAO22N,SAriBV,OAAgC,IAAhC32N,EAAW22N,SAASlhM,MAAA,GAAA,EAAYxmB,QAAA,KAAAjP,EAAA22N,SAAAlhM,MAAA,GAAA,EAAA,GAAA,GACvBz1B,EAAA22N,SAAalhM,MAAS,GAAA,EAAA,GAAA,GAAAgqH,kBAAA,EAwiBvBz/I,EAAO22N,SAASlhM,MAAM,GAAA,EAAK,GAAG,GAAGgqH,kBAAA,EAAsBz/I,EAAO22N,SAASlhM,MAAM,GAAA,EAAK,GAAG,GAAGgqH,kBAAA,EApiBnG,MAAS,E,EA5CXz/I,EAAIy7X,mBAujBF,WAEE,GAviBKH,EAAA,EAwiBH,OAAOt7X,EAAOisL,YAAYqvM,EAAA,GApiB9B,MAAS,Q,EArBTt7X,EAAI07X,mBAwBJ,WAwiBE,GADWJ,EAAA,EApiBV,OAAAt7X,EAAAu7X,YAA0BD,EAAA,E,KAhDjC,C,IA6mBJ,CAAA,WACE,aAEAz7X,QACGC,OAAO,UAAA,EACPM,UAAU,eAGb,WACE,MAAO,CACLkM,QAtiBS,CAAA,EAuiBTjM,SAtiBQ,IAuiBRI,YAtiBa,iDAuiBbH,MAAM,CACJgK,KAtiBM,KAuiBNqsN,SAAU,KACV75K,KAtiBE,KAuiBF6+U,YAtiBI,KAuiBJC,cAtiBI,KAuiBJC,KAAM,KACNC,YAAa,I,GAfU,C,IAqB/B,CAAA,WACE,aAsBA,SAtiBEC,EAuiBA/7X,EACAoB,EACAH,EACAgd,EACA9c,EACAO,EACAmd,GAIA7e,EAtiBO6e,kBAAmBA,EAG1B7e,EAAOwe,YAgjBP,WApiBF,IAAAC,EAASR,EAAAS,MAAA,EAqBL,OAkhBA1e,EAAOy8C,WAAaz8C,EAAOy8C,WAAW79B,UAAU,EAAG5e,EAAO6e,iBAAA,EApiB1D5d,EAAA09B,QAAYC,MAAAh8B,IACZ,CACA+X,OAAK3a,EAAWy8C,WAChBnnC,WAAY,oB,EAEZ,SAAKtN,GAuiBGA,EAAQA,SACNhI,EAAOg8X,YAriBZh0X,EAAAA,QAAmBA,EAAQA,QAAMqb,OAAA,SAAmB/Y,GACpD,OAAAA,EAAAlI,KAAsBV,EAAQ4I,KAAMlI,E,IAGpCqc,EAAA7J,QAAA5M,EAAmBA,OAAA,GAEnByW,EAAA7J,QAAA,EAAA,C,GAIA6J,EAAAM,O,EAsgBP/e,EAAOm9C,WAmCP,SAtiBOl+B,GACA,UAAL,OAAKA,GACLjf,EAAKi8X,YAAA,CAAA9lL,OAAsBl3L,CAAA,CAAA,C,EAkgB7Bjf,EAAOo9C,gBAwCP,SAAyBxiC,GAriBvB,OAAKA,EAAAsE,MAAwBtE,EAAQuE,WAAM,IAAAvE,EAAAszD,S,EA8f7CluE,EAAOk8X,eAGP,WAriBF,OAAA/6X,EAAA,WAAA,EAAA,mBAAA,C,EAHDnB,EAAAq+B,4BAglBG,SAtiB8BzjB,GAuiB5BxZ,EAAWk9B,yBAA2B1jB,C,uFAjF1C/a,QACGC,OAAO,UAAA,EACPK,WAAW,+BAAgC47X,CAAA,EAC3C37X,UAAU,qBAGb,WACE,MAAO,CACLC,SAAU,IACVI,YAAa,6DAriBlBH,MAAY,CACX07X,UAAA,KAuiBMC,YAAa,G,EApiBhB97X,WAAO,8B,EA2hByB,C,IAoFrC,CAAA,WACE,aAQA,SAASg8X,EACPn8X,EAriBHa,EACCwgD,EAuiBElgD,EACAO,EAtiBFy9L,GA0iBE,IAAIv9L,EAAKC,KACTD,EAAG4E,MAAQ,GAtiBb5E,EAAA2G,KAAS,GAwiBP3G,EAAGw6X,YAAc,CAAC,CAACp8X,EAAOo8X,YAG1Bx6X,EAviBEopE,YAojBF,WAtiBE,IAAAm3H,EAAKzgM,EAAQsmW,SAAchoW,EAAQ4d,MAAA,EACnC/c,EAAKiD,GAAA,2BAA8B,CACnC8Z,OAAK5d,EAAA4d,OACLE,QAAKqkL,EAAAA,EAAgB//L,GAAQ,KAC7B2b,UAAKokL,EAAAA,EAAiBr6K,KAAQ,KAC9BnK,QAAKwhL,EAAeusK,eAAc1rW,EAAA4d,MAAA,C,GAGlC5d,EAAKq8X,eACLr8X,EAAKq8X,cAAA,C,EAhBLh7U,EAAK8hJ,QAAA,WACLvhM,EAAK4E,MAAArF,EAAA,WAAA,EAAuBnB,EAAQwG,KAAA,EACpC5E,EAAK2G,KAAApH,EAAA,WAAA,EAA2BnB,EAAMuI,IAAA,C,mFAygB1C1I,QACGC,OAAO,UAAA,EACPK,WAAW,0CAA2Cg8X,CAAA,EAriBvD/7X,UAAO,kCAqlBT,WACE,MAviBO,CACLC,SAAK,IAwiBLC,MAAO,CAtiBPkG,MAAK,IACL+B,KAAK,IACLqV,OAAK,IACLw+W,YAAK,KACLC,cAAK,I,EAELl8X,WAAK,0CACLK,aAAK,KACLC,YAAK,2FAwiBLizB,KAAM,SAASpzB,EAAO0G,EAAS2sB,I,EAlmB1B,C,IAymBX,CAAA,WACE,aAmBA,SAviBG2oW,EAAOn7X,EACcg7G,EAwiBSz6G,EACA66X,GAE/B,IAAI36X,EAAKC,KAtiBTD,EAAA46X,UAAS96X,EAAUga,QAAO+gX,kBAwiB1B76X,EAviBE86X,mBAAkBh7X,EAAWga,QAAAorV,qBAwiB/BllW,EAviBE+6X,UAAY,GA0iBd/6X,EAAGuvB,SAcH,WAviBF,GAAA,IAAAvvB,EAAA86X,mBACG,MAAO,MA2iBN,GADsB96X,EAAG86X,mBAAqB96X,EAAG46X,WAC1B,GAviB3B,MAAS,SAEP,MAAS,O,EAmhBT56X,EAAG8H,UAwBH,WAviBE,IAAAoxV,EAAY35V,EAAQ,WAAA,EAAa,qCAAA,EACjCoH,EAAKpH,EAAa,WAAA,EAAS,mCAAsC,CAyiB/Dua,QAASha,EAAQga,QAAQwD,KAviB3B5U,KAAK5I,EAAA4I,KAAAhB,K,GA0iBLf,EAAOA,EAAK+D,QAAQ,OAAQ,IAAA,EAC5B1K,EAAG+6X,UAAY,UAAYJ,EAAcK,OAviBzCh7X,EAAA+6X,WAAK,YAAsB7hC,EAyiB3Bl5V,EAxiBE+6X,WAAY,SAASp0X,EAyiBvBwC,OAAOC,KAAKpJ,EAAG+6X,SAAA,C,EApkBVj7X,EAAAimW,mBAAA,EAKV/lW,EAAAi7X,gBAAWj7X,EAAA86X,mBAAA96X,EAAA46X,UAAA,IAmiBJrgR,EAAU/oE,KAAK,GAAA,C,6DAnCrBvzC,QACGC,OAAO,UAAA,EACPK,WAAW,0BAA2Bm8X,CAAA,EACtCl8X,UAAU,gBAGb,WACE,MAAO,CAtiBPkM,QAAO,CAAA,EAwiBLjM,SAAU,IACVI,YAAa,mDACbN,WAAY,+B,EARc,C,IAkEhC,CAAA,WACE,aAOA,SAxiBS28X,EAAQx6B,EAAWzhW,GAyiB1B,MAxiBI,CAyiBFR,SAAU,IACVC,MAAO,CAAA,EAviBPozB,KAAK,SAAApzB,EAAY0G,EAAW2sB,GAC1B,IAAAopW,EAAYppW,EAAAmpW,YAyiBRE,EAAQ,CAAA,EAcZh2X,EAAQue,GAAG,UAZX,SAAmB/U,GACjBwsX,EAAQ,CAAA,C,CAWY,EAxiB5Bh2X,EAAAue,GAAA,WARE,SAAO/U,GAyiBGA,EAAM5D,OAAOgO,OAASoiX,GACxB16B,EAAejC,MAAMx/V,EAAO8kE,QAAQzmD,KAAM,CACxC/X,KAAM41X,C,GAniBlB,C,yCA+gBAl9X,QACGC,OAxiBM,UAAA,EAyiBNM,UAxiBU,cAAc08X,CAAA,C,IAskB7B,CAAA,WACE,aAOA,SAziBSG,EAAA36B,EAAsBzhW,GA0iB7B,MAziBO,CA0iBLR,SAAU,IACVC,MAAO,CAAA,EAxiBPozB,KAAK,SAAApzB,EAAA0G,EAA0B2sB,GAC/B,IAAKopW,EAAAppW,EAAAspW,aAkjBHj2X,EAziBOue,GAAA,QAPT,SAAU/U,GACR,IAAKqxQ,EAAWhhR,EAAI8kE,QAAMzmD,KACxBojV,EAAKjC,MAAAx+E,EAAyB,CA0iB5Bx2Q,MAAO0xX,C,GAriBJ,C,yCAshBbl9X,QACGC,OAziBM,UAAA,EA0iBNM,UAziBM,eAAA68X,CAAA,C,IAgkBX,CAAA,WACE,aAQA,SAASC,EAAwBl9X,EAAQqhD,EAAYlsB,EAAUoiD,GAC7D,IAziBI31E,EAAAC,KA4iBJD,EAziBE85O,OAAK17O,EAAS07O,OA4iBhB95O,EAAGu7X,SAMH,WACE,GAAIhoW,CAAAA,EAAS,IAAA,GAASA,CAAAA,EAAS,IAAA,GAriB/BvzB,EAAK85O,OAAS0hJ,iBACZ,MAAG,CACDC,mBAAY,OAAAz7X,EAAA85O,OAA2B0hJ,iBAAA,G,GA6hB7Cx7X,EAAG07X,SAiBH,WACE,OAziBK17X,EAAK85O,OAAAl1O,MAAA66C,EAAAuB,IAAA,E,EAwhBZhhD,EAAG27X,QAoBH,WACE,OAAOhmT,EAAKoC,YAAY/3E,EAAG85O,OAAOnzO,KAAK84C,EAAWuB,IAAA,EAAA,C,EApBpDhhD,EAAG47X,UAuBH,WACE,OAziBI57X,EAAA85O,OAAY19E,OAAA38G,EAAAuB,IAAA,E,sDAigBpB/iD,QACGC,OAAO,UAAA,EACPK,WAAW,0BAA2B+8X,CAAA,EACtC98X,UAziBM,gBAmlBT,WACE,MAziBK,CA0iBHC,SAziBO,IA0iBPiM,QAziBO,CAAA,EA0iBPhM,MAziBO,CA0iBLo7O,OAAQ,G,EAEVv7O,WAAY,0BACZK,aAAc,KACdC,YAAa,mDACbizB,KAAM,SAAUpzB,EAAO0G,EAAS2sB,I,EA7lB3B,C,IAomBX,CAAA,WACE,aAliBA,SAAS8pW,EAAA5tR,EACPC,EACAzuG,EACAmmB,EACA3I,EACA7e,EACSm8G,EACiB3/C,EACT17D,EA2iBeugD,EACAlgD,EAziBlBF,GACd,IAAGW,EAAAC,KAgtBH,SAAS67X,EAAmBxmB,GAC1B,IAAIhvO,EAAS,KAKTttH,EAAQ,KAMZ,MAAuB,UAAhB,OAAOA,IATZstH,EADE1rE,EAAS55D,IAAI,cAAA,EACN0d,KAAK6L,MAAMqwC,EAAS55D,IAAI,cAAA,CAAA,EAI/BslI,IAAUA,EAAOgvO,GA1iBzBhvO,EAEc/rB,EAAAxhG,OAAA,GAFdu8V,IA+iBsCt8V,EAAM,GAAKA,C,CA4C/C,SAAS+iX,EAAen4T,GA1iBtBnkB,EAAIuB,IAAQ4iB,EAAM19C,IAAA,EAAAnhB,KAAA,SAAAgE,GA6iBhB/I,EA3iBEg8X,QAAQh8X,EAAAi8X,uBAAOz6W,IAAA,SAAApC,GACf,MAAA,CA4iBE8G,KAAM9G,EA1iBV9B,KAASmiC,EAASy8U,QAAA,WAAAhuR,EAAA9uF,EAAA,C,MA+iBpBpf,EAAG4jE,KA3iBOA,C,CApOZ5jE,EAAGid,kBAAQA,EA8iBXjd,EAAGynH,UAAY,GAziBfznH,EAAAg8X,QAAS,GA2iBTh8X,EA1iBEm8X,cAAG,GA2iBLn8X,EA1iBEo8X,aAAW,GA2iBbp8X,EAAGymP,SAAW,CAAA,EACdzmP,EAAGi2F,SAAW,CAAA,EAziBdj2F,EAAAq8X,oBAAiB,CAAA,EA2iBjBr8X,EA1iBEs8X,uBAAwB,CAAA,EA2iB1Bt8X,EA1iBEu8X,UAAW,CAAA,EA2iBbv8X,EAAGw8X,WAAa,CAAA,EAChBx8X,EAAGm3V,MAAQ,GAziBXn3V,EAAAy8X,kBAAkB,sEA2iBlBz8X,EA1iBEi8X,uBAAyB,CACzB/tR,EAAWqlQ,wBAAArlQ,EAAAwuR,UAAAxuR,EAAAyuR,yBAAAzuR,EAAA0uR,UAAA1uR,EAAA2uR,SAAA3uR,EAAA4uR,+BAAA5uR,EAAA6uR,OAAA7uR,EAAA8uR,KAAA9uR,EAAA+uR,UAAA/uR,EAAAgvR,cAAAhvR,EAAAivR,4BAAAjvR,EAAAkvR,wBAAAlvR,EAAAmvR,KAAAnvR,EAAAovR,UAAApvR,EAAAqvR,SAAArvR,EAAAsvR,YAAAtvR,EAAAuvR,UAAAvvR,EAAAwvR,4BAAAxvR,EAAAyvR,QAAAzvR,EAAA0vR,MAAA1vR,EAAA2vR,YAAA3vR,EAAA4vR,+BAAA5vR,EAAA6vR,UAAA7vR,EAAA8vR,gBAAA9vR,EAAA+vR,KAAA/vR,EAAAgwR,qBAAAhwR,EAAAiwR,eAAAjwR,EAAAkwR,kBAAAlwR,EAAAmwR,gBAAAnwR,EAAAowR,UAAApwR,EAAAqwR,SAAArwR,EAAAswR,aAAAtwR,EAAAuwR,mBAAAvwR,EAAAwwR,iBAAAxwR,EAAAywR,UAAAzwR,EAAA0wR,OAkjBb5+X,EA1iBE0I,KAAA,CACAm2X,UAAO,GA2iBPC,SA1iBU,GA2iBVnzP,SAAU,GAziBVu8H,eAAY,GACZq6F,8BAAc,CAAA,C,EA4iBhBviW,EAAGmO,QAAU,CACXzG,MAAO,GACP81B,MAAO,GACPzB,QAAS,I,EAxiBb/7B,EAAA8Z,QAAA,CA2iBIwD,KAAM,GAviBPg2V,OAAA,KACAtqV,OAAA,KA2iBC+1W,QAAS,I,EAxiBb/+X,EAAAwjE,UAAS,CACPskD,GAAI,CA2iBAljH,MAAO,UACPk/D,YAAa,kBACb59C,KAAM,KACNmjD,KAAM,KAziBZ0+C,OAAS,O,EAELC,GAAA,CACApjH,MAAS,UACTk/D,YAAO,kBACL59C,KAAA,KA2iBAmjD,KAAM,KAziBR0+C,OAAA,O,EAEAE,GAAA,CA2iBErjH,MAAO,SACPk/D,YAAa,kBACb59C,KAAM,KACNmjD,KAAM,KAziBb0+C,OAAY,O,EA4iBPG,GAAI,CAziBRtjH,MAAA,WACGk/D,YAAO,iBACP59C,KAAA,KA2iBGmjD,KAAM,KACN0+C,OAAQ,O,GAKZ/nH,EA1iBEqpC,eAqsBF,WAGEnqC,EAAUmG,KAAK,uCAAA,EAAyCse,GAAG,UAAW,SAAUkb,GAC9EA,EAAEyK,gBAAA,C,IA9JNtpC,EA1iBEupC,gBA4sBF,SAAyB9nB,GAIvBviB,EAAUmG,KAAK,uCAAA,EAAyCmkC,OAAO,SAAA,C,EArKjExpC,EAAGg/X,oBAwBH,SAA6B/zW,EAAMpqB,GAE1B,IA3iBHoqB,EAyjBN,SAAuBpqB,GACrBb,EAAGymP,SAAW,CAAA,EACdpnP,EAAI2mQ,OAAOh/P,KAAK,CAziBdtG,OAAS,aACPgH,MAAI1H,EAAAmO,QAAazG,MA2iBjB81B,MA1iBMx9B,EAAAmO,QAAQqvB,K,EA4iBhB,SA1iBI58B,EAAeyF,EAAAvF,GA2iBbA,IAAWrB,EAAYsB,aAziB3Bf,EAAIq8X,oBAAiB,CAAA,EACnBx7X,EAAA,GACSC,IAAOrB,EAAemjB,sBA2iB3BhiB,EAAS4M,QAAUoY,EAAYq5W,sCAziBnCj/X,EAAAm3V,MAAO+nC,YAAgBx3X,MAAMigC,aAAW,SAAA,CAAA,CAAA,EA2iBtC3nC,EAAGm3V,MAAM+nC,YAAYx3X,MAAMy3X,YAAA,GAziBxBv+X,EAAA4M,QAAAoY,EAAAw5W,wCA2iBHp/X,EAAGm3V,MAAM+nC,YAAY1hW,MAAMmK,aAAa,SAAU,CAAA,CAAA,EAClD3nC,EAAGm3V,MAAM+nC,YAAY1hW,MAAM2hW,YAAA,GAE7Bn/X,EAAGq8X,oBAAsB,CAAA,IAEzBr8X,EAAGq8X,oBAAsB,CAAA,EAziBpC59S,QAAY5F,IAAAj4E,CAAA,GA4iBHZ,EAAGymP,SAAW,CAAA,C,IArCA5lP,CAAA,EAjiBhBA,EAAA,C,EAugBJb,EAAG+7X,eA1iBWA,EA2iBd/7X,EAAG08K,OA1cH,SAAO77K,GACLb,EAAAi2F,SAAU,CAAA,EAEV52F,EAAA2mQ,OAAOh/P,KAAA,CACLuW,WAAWvd,EAAA0I,KAAAm2X,UACXvyT,UAAatsE,EAAA0I,KAAAo2X,SA4iBXnzP,SAAU3rI,EAAG0I,KAAKijI,SA1iBtBjkI,MAAA1H,EAAYmO,QAAAzG,MA4iBR81B,MAAOx9B,EAAGmO,QAAQqvB,MAClBzB,QAAS/7B,EAAGmO,QAAQ4tB,QACpBi3U,aAAchzW,EAAG8Z,QAAQwD,KACzBg2V,OAAQtzW,EAAG8Z,QAAQw5V,OACnB+rB,qBAAsBr/X,EAAG8Z,QAAQkP,OA1iBzCs2W,cAASt/X,EAAA8Z,QAAAilX,QACPn7T,KAAA5jE,EAAA4jE,KAAA19C,KACAq8U,8BAAAviW,EAAA0I,KAAA65V,8BACAzgR,KAAA,CACAl4E,OAAAgxD,EAAA55D,IAAA,cAAA,GAAAu5G,EAAAxhG,OAAA,C,EAEAm7V,WAAAt5S,EAAA55D,IAAA,YAAA,EACAmzW,QAAA2nB,EAAA,SAAA,EACA1nB,MAAA0nB,EAAA,OAAA,EA4iBMznB,OAAQynB,EAAmB,QAAA,EAC3BxnB,OAAQwnB,EAAmB,QAAA,EA1iBjCvnB,WAAOunB,EAAoB,YAAA,EA4iBrBtnB,WAAYsnB,EAAmB,YAAA,EAC/BrnB,aAAcqnB,EAAmB,cAAA,EA1iBvCpnB,YAAOonB,EAAc,aAAA,EACrBnnB,SAAOmnB,EAAa,UAAA,C,EAEpB,SAAOl7X,EAAiByF,EAAAvF,GACjBA,IAAArB,EAAA6H,kBA4iBCtH,EAAGu8X,UAAY,CAAA,EA1iBvB17X,EAAA,GA6iBQb,EAAGw8X,WAAa,CAAA,EAziBxBx8X,EAASi2F,SAAA,CAAA,C,IAsaTj2F,EA1iBEu/X,iBAoKF,SAAyBj5V,EAAOznB,EAAArR,GAC9BxN,EAAAm3V,MAAO7wT,GAAMznB,GAAO8oB,aAAcn6B,EAAM,CAAA,CAAA,C,EAsY1CxN,EAAGioQ,sBAnYH,WACEjoQ,EAAA0I,KAAWijI,WAAA3rI,EAAA0I,KAAAw/P,eA4iBTloQ,EAAGm3V,MAAMqoC,YAAYt3H,eAAevgO,aAAa,WAAY,CAAA,CAAA,EAE7D3nC,EAAGm3V,MAAMqoC,YAAYt3H,eAAevgO,aAAa,WAAY,CAAA,CAAA,C,EAvK/Do0V,EAAe/7X,EAAGwjE,UAAUwkD,EAAA,EAE5B9oH,EA1iBSmG,KAAA,uCAAA,EAAqBmkC,OAAA,SAAA,EA2iB9BtqC,EA1iBSmG,KAAA,uCAAA,EAAqBse,GAAA,UAAA,SAAAkb,GA2iB5BA,EAAEyK,gBAAA,C,GAGJtpC,EAAGynH,UA1iBGnmG,OAAAwkC,KAAAmoD,CAAA,EAAAzsF,IAAA,SAAApC,GA2iBJ,MAAO,CAziBL8G,KAAI9G,EACJ9B,KAAI2wF,EAAS7uF,E,4KAvHrBnhB,QACGC,OAAO,UAAA,EACPK,WAAW,2BAAAs9X,CAAA,EACXr9X,UAAU,iBAi0Bb,WA3iBA,MAAA,CACGC,SAAO,IACPC,MAAA,GACAH,WAAU,2BA6iBTK,aAAc,KACdC,YAAa,qDA3iBjBizB,KAAS,SAAApzB,EAAA0G,EAAA2sB,I,EA5RI,C,IA+0Bf,CAAA,WACE,aAQA,SAAS0tW,EAA+BrhY,EACAqhD,EA3iBtCvgD,EA6iBsCglM,EACAj2F,EA3iBtB0kQ,EACgB/3S,EACIv7D,EACD4d,EA6iBGxd,EACA86G,EACAv7G,EA3iBfO,EACeqmB,EAC1BsQ,GA6iBZ,IA5iBIl2B,EAAAC,KA+sBJ,SAASy/X,IACH1/X,EAAGwkM,OAAOphL,QA9iBZpjB,EAAA4mL,QAAW,CAAA,EAgjBXvnL,EAAI09B,QAAQ8oO,UAAU7+P,KAAK,CACzB24X,WAAY3/X,EAAGwkM,OAAOphL,MACtB1iB,OAAQ,uB,EACP,SAAUE,EAAUyF,EAAIvF,GACrBA,IAAWrB,EAAYsB,aA9iBpCf,EAAY4/X,cAAA,CAAA,EACX5/X,EAAAirB,KAAAjrB,EAAA6/X,sBAijBU7gY,EAASuC,KA/iBnBvC,EACUwC,OAAA,EACIC,YAAAlC,EAAA,WAAA,EAA2B,qBAAA,CAAA,EAC5BmC,SAAA,WAAA,EAijBEiL,UAAU,GAAA,C,EA7iBnB3M,EAAK4mL,QAAA,CAAA,C,IAqjBT,SAASm1M,EAAen4T,GA/iBxBnkB,EAAGuB,IAAW4iB,EAAA19C,IAAA,EACdlmB,EAAG4jE,KAAAA,C,CAklBH,SAhjBEk8T,IACA,MAAO,MAAP9/X,EAAOo1W,aAGK,MAAZp1W,EAAYo1W,YACZ,CAAAp1W,EAAA+/X,gBAAc//X,EAAAggY,qBAAAhgY,EAAA6/X,sBAmjBL,CAAC7/X,EAAGggY,qBAAsBhgY,EAAG6/X,qB,CApOxC7/X,EAAGigY,WA5iBU,GA6iBbjgY,EAAGkgY,UAAY,sEACflgY,EAAGmgY,YAAc,kDACjBngY,EA5iBEid,kBAAWA,EA6iBbjd,EAAG+/X,gBA5iBQ,EA6iBX//X,EAAGggY,qBAAuB,EAC1BhgY,EAAG6/X,qBAAuB,EAG1B7/X,EAAGwkM,OAASpmM,EAAO4nQ,OA3iBrBhmQ,EAAAo1W,YAAS7gV,OAAAn2B,EAAAg3W,WAAA,EACPp1W,EAAAynH,UAAO,GA6iBPznH,EA5iBEogY,aAAU,GA6iBZpgY,EA5iBEkpC,aAAO,CAAA,EA6iBTlpC,EAAG4/X,cA5iBQ,CAAA,EA6iBX5/X,EAAG4mL,QA5iBO,CAAA,EA6iBV5mL,EAAGqgY,kBA5iBS,CAAA,EA6iBZrgY,EAAGirB,KA5iBC60W,EAAA,EAAa,GA8iBjB9/X,EAAGwjE,UAAY,CA3iBbskD,GAAA,CACAljH,MAAA,UACAk/D,YAAa,kBACb59C,KAAM,KA6iBJmjD,KAAM,KACN0+C,OAAQ,O,EAEVC,GAAI,CACFpjH,MAAO,UACPk/D,YAAa,kBA3iBpB59C,KAAY,KACXmjD,KAAA,KA6iBM0+C,OAAQ,O,EA3iBdE,GAAA,CACGrjH,MAAO,SACPk/D,YAAW,kBACX59C,KAAA,KA8iBGmjD,KAAM,KACN0+C,OAAQ,O,EA3iBZG,GAAA,CACEtjH,MAAS,WACTk/D,YAAU,iBACV59C,KAAA,KACAmjD,KAAA,KA8iBE0+C,OAAQ,O,GAIZ/nH,EAAG4jE,KAAO5jE,EAAGwjE,UAAUwkD,GAGvBhoH,EAAG+7X,eAAiBA,EACpB/7X,EAAGqpC,eAuIH,WA7iBEnqC,EAAImG,KAAS,uCAAA,EAAyBse,GAAA,UAAA,SAAAkb,GACpCA,EAAAyK,gBAAA,C,IAsaJtpC,EAAGupC,gBA8IH,SAhjBW9nB,GAojBTviB,EAAUmG,KAAK,uCAAA,EAAyCmkC,OAAO,SAAA,C,EA9rBjExpC,EAAAsgY,mBA0mBA,WA7iBItgY,EAAIogY,aAAQ75V,SA+iBZvmC,EAAGi2F,SAAW,CAAA,EA7iBdj2F,EAAAwkM,OAAS5gI,KAAA5jE,EAAU4jE,KAAA19C,KA+iBnBlmB,EA9iBEwkM,OAAQswK,SAAA,EA+iBV90W,EAAGwkM,OAAOwwK,UAAA,EACVh1W,EAAGwkM,OAAOywK,eAAA,GA5iBEj1W,EAAAqgY,kBAAuBhhY,EAAA09B,QAAA8oO,UAAAtlQ,OAAAlB,EAAA09B,QAAA8oO,UAAA7+P,MAijBjChH,EAAGwkM,OACH,SAAU5jM,EAAUyF,EAAIvF,GAClBA,IAAWrB,EAAY6H,kBAAoBxG,IAAWrB,EAAYsB,aAC/Df,EAAGqgY,oBA7iBNrgY,EAAGwkM,OAAAhkM,GAAWI,EAAAJ,GACdR,EAAGwkM,OAAAphL,MAAYxiB,EAAAwiB,OAgjBjBs8W,EAAA,IAGE9+X,EADEA,EAASiiB,QACAtjB,EAAQ,WAAA,EAAa,UAAYqB,EAASiiB,OAAA,EA5iBnEtjB,EAAA,WAAA,EAAA,qBAAA,EAgjBYP,EAASuC,KA9iBrBvC,EACUwC,OAAA,EACGC,YAAgBb,CAAA,EAgjBZc,SAAS,WAAA,EACTiL,UAAU,GAAA,C,GA5iBvB3M,EAAAi2F,SAAU,CAAA,C,GAGR9sF,OAAI45V,UAAU55V,OAAM45V,WAAA,GAgjBpB55V,OAAO45V,UAAUxyV,KAAK,CA9iBtB3B,MAAS,mB,KAhGb5O,EAAG0/X,oBAAoBA,EACvB1/X,EAAGugY,iBA+rBH,SAhjByBC,GAijBpBxgY,EAAGogY,aAAaI,IACjBxgY,EAAGogY,aAAaI,GAAW74V,aAAa,SAAU,CAAA,CAAA,C,EAhsBtD3nC,EAAGygY,oBA2kBH,WA5iBIvqW,EAAA6jU,cAAiB/5V,EAAQwkM,OAAA98L,KAAA,IACzB1H,EAAAi2F,SAAc,CAAA,EA8iBdj2F,EAAGwkM,OAAO5gI,KAAO5jE,EAAG4jE,KAAK19C,KA5iB3BlmB,EAAAwkM,OAAYywK,eAAA,EAEZ51W,EAAG09B,QAAA8oO,UAAa7+P,KACbhH,EAAAwkM,OACH,SAAY5jM,EAAGyF,EAAAvF,GA8iBLA,IAAWrB,EAAY6H,kBACzBtH,EAAGwkM,OAAOhkM,GAAKI,EAASJ,GACxBR,EAAGwkM,OAAOphL,MAAQxiB,EAASwiB,MAC3BpjB,EAAGqgY,kBAAoB,CAAA,GA3iBxBrhY,EAAAuC,KACXvC,EA8iBiBwC,OAAA,EACAC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EA7iBlDmC,SAAA,WAAA,EACUiL,UAAA,GAAA,C,EAijBA3M,EAAGi2F,SAAW,CAAA,C,KAnDtBj2F,EAAG8/X,aAAeA,EAClB9/X,EAAGqrB,SA2KH,WACE,GAAIrrB,EAAGirB,OAASjrB,EAAG+/X,iBA/iBxB,CAAY7pW,EAAA6jU,cAAA/5V,EAAAwkM,OAAA98L,KAAA,EACX,OAEA,IAAAg5X,EAAA1gY,EAAA8/X,aAAA,EAAA/mV,QAAA/4C,EAAAirB,IAAA,EACGy1W,EAAO1gY,EAAA8/X,aAAA,EAAAzyX,OAAA,IACPrN,EAAAirB,KAAWjrB,EAAA8/X,aAAA,EAAAY,EAA4B,G,EA9KxC1gY,EAAG2gY,UAisBH,WA9iBEx3X,OAAOC,KADA,0CACU,QAAA,C,EAlJnBpJ,EAAG4gY,YAqsBH,WA9iBFz3X,OAASC,KA+iBK,sCA/iBL,QAAA,C,EAtJPpJ,EAAA+5V,cAAA7jU,EAAA6jU,cAojBEgiC,EAAe/7X,EAAGwjE,UAAUwkD,EAAA,EA3iB5BhoH,EAAGynH,UAAAnmG,OAAkBwkC,KAAGmoD,CAAA,EAAAzsF,IAAqB,SAAGpC,GA8iB9C,MAAO,CACL8G,KAAM9G,EA5iBZ9B,KAAS2wF,EAAW7uF,GACd6oB,OAAG0qU,EAA0BvzV,E,IAI7BhhB,EAAAsJ,QACF1H,EAAAwkM,OAAO98L,MAAAtJ,EAAAsJ,MA8iBHwuB,EAAM6jU,cAAc/5V,EAAGwkM,OAAO98L,KAAA,KA5iBpC1H,EAAOirB,KAAAjrB,EAAAggY,qB,oNAicX/hY,QA3iBEC,OAAG,UAAA,EACHK,WAAG,iCAAuBkhY,CAAA,EA6iBzBjhY,UAAU,uBA2Qb,WACE,MAAO,CACLC,SAAU,IACVC,MAAO,CACLsnQ,OAAQ,KACRt+P,MAAO,KACP0tW,YAAa,I,EAEf72W,WAAY,iCACZK,aAAc,KAhjBhBC,YAAS,SAAAuG,EAAA2sB,GAkjBDqjV,EAAcrjV,EAAMqjV,aAAe,IACvC,MAAO,wCAA0CA,EAAc,6BAA+BA,EAAc,O,GAvR7E,C,IA6RvC,CAAA,WACE,aA2BA,SAjjBIyrB,EAAOziY,EACAqhD,EACEvgD,EAkjB2BglM,EAhjBzBtpI,EACLvmD,EAkjB8B/U,EACAL,EAhjB5Bs7G,EACAv7G,EACCO,EAkjB2BF,EAhjBvBirM,EACTo2J,EACKzjV,EACMxd,EACPyuG,EACAtoF,EACEqoF,EAkjB0B0kQ,EAhjBhCmuB,EACK1hY,EACMid,EACPvc,GAkjBV,IAjjBIE,EAAAC,KAIA8gY,EAAO,EACPC,EAAA,EACAC,EAAM,EAENC,EAAQ,EAkjBRv1X,EAAoB,IA0GtB,GAtGF3L,EAAG4lB,YAjjBOA,EAkjBV5lB,EAAGkuG,gBAjjBOA,EAkjBVluG,EAAG8gY,qBAjjBSA,EAojBZ9gY,EAAGwkM,OAASpmM,EAAO4nQ,OACnBhmQ,EAAGskM,qBAAuBlmM,EAAOkmM,qBAhjBjCtkM,EAAGo1W,YAAAh3W,EAAiBg3W,YACpBp1W,EAAG4jE,KAAAvvD,EAAkBuvD,MAAA,KACrB5jE,EAAGmhY,SAAA,KACHnhY,EAAGwN,MAAA,KACHxN,EAAGirB,KAAA,EACHjrB,EAAGk0I,SAAA,EACHl0I,EAAGohY,aAAA,GAkjBHphY,EAAGqhY,cAAgB,GAhjBnBrhY,EAAAshY,cAAA,GAkjBAthY,EAAGuhY,cAAgB,GAhjBnBvhY,EAAAwhY,mBAAsB,EAkjBtBxhY,EAjjBEyhY,uBAAkB,EAkjBpBzhY,EAAG0hY,mBAAqB,CAhjBtB,kCACA,kCAkjBA,8BACA,kCACA,oCAhjBA,kCAkjBA,gCACA,oCACA,qCACA,wCACA,yCACA,sCA/iBF1hY,EAAA2hY,kBAAS3hY,EAAA0hY,mBAAoC1hY,EAAAyhY,wBAkjB7CzhY,EAjjBEg8X,QAAQ,CAkjBR9tR,EAjjBOqlQ,wBAAArlQ,EAAAwuR,UAAAxuR,EAAAyuR,yBAAAzuR,EAAA0uR,UAAA1uR,EAAA2uR,SAAA3uR,EAAA4uR,+BAAA5uR,EAAA6uR,OAAA7uR,EAAA8uR,KAAA9uR,EAAA+uR,UAAA/uR,EAAAgvR,cAAAhvR,EAAAivR,4BAAAjvR,EAAAkvR,wBAAAlvR,EAAAmvR,KAAAnvR,EAAAovR,UAAApvR,EAAAqvR,SAAArvR,EAAAsvR,YAAAtvR,EAAAuvR,UAAAvvR,EAAAwvR,4BAAAxvR,EAAAyvR,QAAAzvR,EAAA0vR,MAAA1vR,EAAA2vR,YAAA3vR,EAAA4vR,+BAAA5vR,EAAA6vR,UAAA7vR,EAAA8vR,gBAAA9vR,EAAA+vR,KAAA/vR,EAAAgwR,qBAAAhwR,EAAAiwR,eAAAjwR,EAAAkwR,kBAAAlwR,EAAAmwR,gBAAAnwR,EAAAowR,UAAApwR,EAAAqwR,SAAArwR,EAAAswR,aAAAtwR,EAAAuwR,mBAAAvwR,EAAAwwR,iBAAAxwR,EAAAywR,UAAAzwR,EAAA0wR,OAmjBT5+X,EAAG4hY,YAjjBG,CAkjBJd,EAAqBe,qBACrBf,EAjjBOgB,0DAkjBPhB,EAAqBiB,wCACrBjB,EAjjBIkB,4CAkjBJlB,EAjjBImB,mCAkjBJnB,EAAqBoB,QACrBpB,EAjjBEqB,yBAkjBFrB,EAjjBIsB,iBAkjBJtB,EAAqBlC,OAEvB5+X,EAAGqiY,gBAAkB,GAErBriY,EAjjBEwjE,UAAG,CACHskD,GAAI,CAkjBFljH,MAjjBE,UAkjBFk/D,YAjjBY,kBAkjBZ59C,KAjjBE,KAkjBFmjD,KAAM,KAhjBN0+C,OAAA,O,EAmjBFC,GAAI,CACFpjH,MAjjBI,UAkjBJk/D,YAjjBa,kBAkjBb59C,KAjjBI,KAkjBJmjD,KAjjBM,KAkjBN0+C,OAjjBM,O,EAmjBRE,GAAI,CACFrjH,MAjjBM,SAkjBNk/D,YAAa,kBACb59C,KAjjBI,KAkjBJmjD,KAAM,KACN0+C,OAjjBO,O,EAmjBTG,GAAI,CACFtjH,MAjjBK,WAkjBLk/D,YAAa,iBACb59C,KAAM,KACNmjD,KAAM,KAhjBV0+C,OAAS,O,GAsjBT/nH,EAAGsiY,cAuDH,WACE,OAjjBEtiY,EAAAwN,QAAUoY,EAAc++K,2BAAQ3kM,EAAAwN,QAAAoY,EAAAg/K,4BAojB9B5kM,EAjjBEwN,QAAAoY,EAAAi/K,oCAojBF7kM,EAAGwN,QAAUoY,EAAYk/K,4CA3iB7B9kM,EAAAwN,QAAeoY,EAAWm/K,mCAGtB,GARG,sBA8iBE,iCApjBD,sB,EAyfV/kM,EAAGuiY,cAyEH,WACE,OAAIviY,EAAGwN,QAAUoY,EAAY++K,2BAC3B3kM,EAAGwN,QAAUoY,EAAYg/K,6BAhjB3B5kM,EAAGwN,QAAOoY,EAAAi/K,oCAGH,MA+iBE,Q,EA5EX7kM,EAAG+7X,eAjjBMA,EAkjBT/7X,EAAGqpC,eAqLH,WAGEnqC,EAljBEmG,KAAa,uCAAA,EAAAse,GAAA,UAAA,SAAAkb,GACbA,EAAAyK,gBAAA,C,IA0XJtpC,EAAGupC,gBA4LH,SAljBM9nB,GAsjBJviB,EAljBQmG,KAAA,uCAAA,EAAAmkC,OAAA,SAAA,C,EAmXVxpC,EAAG8qB,QAjjBUA,EAkjBb9qB,EAAGwiY,aAjjBaA,EAkjBhBxiY,EAAGyiY,mBAuRH,WACE,GAljBa,IAkjBTziY,EAAGirB,KACL,MAljBM,CAAAjrB,EAAIwkM,OAAAhnK,OAAS,CAASx9B,EAAAwkM,OAAAk+L,oBAojB9B,GAljBe,IAkjBX1iY,EAAGirB,KAGP,GAljBQ,IAkjBJjrB,EAAGirB,KAGP,OAljBa,IAkjBTjrB,EAAGirB,MACE,CAACjrB,EAljBGuhY,cAASh7V,WAHZo8V,CA2hBV,IAljBEC,EAAiB5iY,EAAGshY,cAAK/6V,SACzBvmC,EAAGwkM,OAAOgvK,gBACVxzW,EAAGwkM,OAAOkvK,wBACV1zW,EAAGwkM,OAAOovK,mBAmjBR5zW,EAAGwkM,OAAOsvK,sBAEd,MAiBS,EAjBc,MAAnB9zW,EAAGo1W,aAhjBA,MAAAp1W,EAAAo1W,YACHp1W,EAAAshY,cAAoB/6V,OAqjBjBq8V,GAviBGD,MAkjBD,CAljBCA,KAAAA,CAAA,CA+iBR,MAAO,CAtCX,WACE,IAAIC,EAljBa5iY,EAAAqhY,cAAA96V,SAmjBdvmC,EAAGwkM,OAljBIyuK,mCAmjBNjzW,EAAGwkM,OAljBM0uK,gCAmjBTlzW,EAAGwkM,OAljBM2uK,0BAmjBTnzW,EAAGwkM,OAljBM4uK,yBAmjBTpzW,EAAGwkM,OAljBM6uK,gBAojBb,MAAuB,MAAnBrzW,EAAGo1W,aAEuB,MAAnBp1W,EAAGo1W,YACLp1W,EAAGqhY,cAAc96V,OAGnBq8V,C,EA1hBG,C,EAuRZ5iY,EAAG6iY,SA0TH,WACEzjY,EAljBQgK,KAAA,6CAAA,QAAA,C,EAwPVpJ,EAAG8iY,8BAqSH,WACExjY,EAAU,WAjjBRU,EAAAyhY,wBAA0B,EAC1BzhY,EAAOyhY,wBAAezhY,EAAA0hY,mBAAAr0X,SACpBrN,EAAAyhY,uBAAO,GAojBTzhY,EAAG2hY,kBAAoB3hY,EAAG0hY,mBAAmB1hY,EAAGyhY,uB,EA17B9C,IA27B6BzhY,EAAG0hY,mBAAmBr0X,OAAS,CAAA,EAhjBlErN,EAAA+iY,oBAAS,IAAsB5+U,KAC7BnkD,EAAAgjY,sBAAqB1jY,EAAA,WACnB,IAAG2jY,EAAU,IAAA9+U,KAAAnkD,EAAA+iY,oBACb/iY,EAAAwhY,mBAAsByB,EAAA,KAAK,IACH,KAAtBjjY,EAAAwhY,qBACAxhY,EAAAwhY,mBAAQ,IAmjBRliY,EAljBCqC,OAAU3B,EAAAgjY,qBAAA,E,EAhZN,GAo8BN,C,EArTLhjY,EAAGkjY,kBAgWH,WAjjBEljY,EAAOwkM,OAAKhnK,QAmjBVx9B,EAAG4mL,QAAU,CAAA,EACbvnL,EAAI09B,QAAQ8oO,UAAU7+P,KAAK,CAjjB/B24X,WAAS3/X,EAAAwkM,OAAcphL,MACjBoa,MAAMx9B,EAAAwkM,OAAAhnK,MACV98B,OAAY,qB,EAmjBP,SAAUE,EAAUyF,EAAIvF,GACzBd,EAAG4mL,QAAU,CAAA,EAjjBV9lL,IAAArB,EAAesB,YAClB/B,EAAGuC,KACLvC,EAmjBSwC,OAAA,EAjjBFC,YAAGlC,EAAgB,WAAA,EAAK,iBAAA,CAAA,EACvBmC,SAAG,WAAA,EAmjBFiL,UAAU,GAAA,C,GAIb/L,EADEA,EAASiiB,QACAtjB,EAAQ,WAAA,EAAa,UAAYqB,EAASiiB,OAAA,EAhjB3CtjB,EAAA,WAAA,EAAA,qBAAA,EAEZP,EAAOuC,KACTvC,EAmjBOwC,OAAA,EACAC,YAAYb,CAAA,EAjjBnBc,SAAA,WAAA,EACAiL,UAAA,GAAA,C,GAqjBA3M,EAAG4mL,QAAU,CAAA,C,KA/6BnB5mL,EAAAglM,iBAAS5mM,EAAmB4mM,iBAO1Bl6K,EA9GI,CA8GA,EAkjBJixW,EAjjBU,IAAA,EAkjBL/7X,EAjjBEskM,qBA8jBLx5K,EA1qBM,CAyHJ,EAkjBFlf,EAAA,MA/jBK,CACLmwX,EAAQ/7X,EAAUwkM,OAAA5gI,IAAA,EA2kBpB5jE,EAAG4hY,YAjjBQzgY,QAAA,SAAmBgiY,GAkjB5BnjY,EAjjBEqiY,gBAAQc,GAAmB,CAC3B7lX,KAAA,wBAA2BwjX,EAAAqC,GAC3B1zX,SAA+B,CAAA,IAA/BzP,EAAYwkM,OAAAwvK,UAAAj7T,QAAmBoqV,CAAA,C,IA3BnC,IAAO,IAAAzvV,EAAO,EAAAA,GAAS,EAAAA,CAAA,GAkjBnB,GAAI,CA8TV,SAAyBzoB,GAjjBvB,CAAA,IA0jBMm4W,EA1jBN,GAAU,IAAVn4W,EAwjBE,OAvjBEo4W,EAAArjY,EAAAwkM,OAAAyuK,mCAmjBAjzW,EAAGwkM,OAAO0uK,gCACVlzW,EAAGwkM,OAAO2uK,0BACVnzW,EAAGwkM,OAAO4uK,yBAjjBhBpzW,EAASwkM,OAAA6uK,eAmjBErzW,EAAGwkM,OAAOwuK,cAAgBqwB,GAAuBrjY,EAAGwkM,OAAOzoK,QAjjBpE,GAAS,IAAA9Q,EAKX,OA8iBQm4W,EAAkBpjY,EAAGwkM,OAAOgvK,gBAjjBlCxzW,EAAAwkM,OAAUkvK,wBAmjBN1zW,EAAGwkM,OAAOovK,mBACV5zW,EAAGwkM,OAAOsvK,qBAjjBP9zW,EAAAwkM,OAAA8uK,QAAiB8vB,EAClB,GAAa,IAAbn4W,EACJ,MAohBF,EAAIjrB,EAAGwkM,OAljBIgvK,gBAAUxzW,CAAAA,EAAAwkM,OAAAivK,qBAGjBzzW,EAAGwkM,OAAAkvK,wBAAU1zW,CAAAA,EAAAwkM,OAAAmvK,uBAqjBb3zW,EAAGwkM,OAAOovK,mBAAsB5zW,CAAAA,EAAGwkM,OAAOqvK,yBA/iB9C7zW,EAAAwkM,OAAWsvK,sBAAS9zW,CAAAA,EAAAwkM,OAAAuvK,iB,CAykBpB,OAAO,C,EA/UkBrgU,CAAA,EAAI,CACvB5oB,EAAQ4oB,CAAA,EAhjBhB,K,CAGkB,IAAZ1zC,EAAAirB,MACAH,EA1HA,CA0HA,C,CAsmBN,SAjjBEw4W,IACIxjY,EAAAsiW,gBAAA,EAkjBFnjW,EAAOiD,GAAG,qBAAA,EAEVjD,EAAOiD,GAAG,yBAAA,C,CA4Bd,SAjjBEsgY,IACAxiY,EAAMohY,aAAU76V,QAkjBdvmC,EAAGqhY,cAAc96V,QACjBvmC,EAAGshY,cAAc/6V,QACjBvmC,EAAGuhY,cAAch7V,QACjB,CAACvmC,EAAGwkM,OAAOouK,oBACX5yW,EAAGujY,WAAa,CAAA,EA/iBvBlkY,EAAA09B,QAAY8oO,UAAAtlQ,OACX,CAkjBUC,GAAIR,EAAGwkM,OAAOhkM,GACdE,OAAQ,e,EAhjBf,SAAOE,EAAAyF,EAAAvF,GACIA,IAAArB,EAAAsB,aACXf,EAAUmhY,SAAAvgY,EAmjBDgL,EAAA,GACS9K,IAAWrB,EAAYmjB,qBAjjBnChiB,EAAA4M,QAAAoY,EAA+By/K,wCAmjB1Bz5L,EAAA,EACShL,EAAS4M,QAljBQoY,EAAAm/K,qCAmjB1B/kM,EAAGujY,WAAa,CAAA,EAChBvjY,EAAGglM,iBAAA,EACHs+L,EAAA,IAGFtjY,EAAGujY,WAAa,CAAA,EAChBvjY,EAAGglM,iBAAA,EACHhmM,EAASuC,KACPvC,EACGwC,OAAA,EACAC,YAAYlC,EAAQ,WAAA,EAljBG,yBAAA,CAAA,EAmjBvBmC,SAAS,WAAA,EAjjBfiL,UAAA,GAAA,C,MAQT,SAAGf,IACH5L,EAAG6L,QAAAvM,EAAA,WAmjBCD,EAAI09B,QAAQ8oO,UAAUtlQ,OAAO,CAC3BC,GAAIR,EAAGwkM,OAAOhkM,GAjjBjBE,OAAS,kB,EACT,SAAcwL,EAAOrL,EAAOC,GAC5BoL,EAAYs3X,kBACZxjY,EAAAskM,qBAAe,CAAA,EACftkM,EAAAwhY,mBAAe,IACfliY,EAAAqC,OAAgB3B,EAAA6L,OAAA,EAChB7L,EAAAglM,iBAAA,EACAhlM,EAAAmhY,UACO72L,EAAA++D,iBAAe,CAAA,EAmjBf/+D,EAAY27D,UAAUjmQ,EAAGmhY,QAAA,EAjjBhCliY,EAAYiD,GAAA,qBAAA,GAEXjD,EAAOiD,GAAA,yBAAA,E,IAIPyJ,CAAA,C,CAqjBJ,SAljBIowX,EAAOn4T,GAmjBTnkB,EAljBEuB,IAAa4iB,CAAA,EAmjBf5jE,EAljBE4jE,KAAMA,C,CAokBV,SAAS94C,EAAQ24W,EAAS/mN,GAriBZ,SAAXgnN,EAAWD,GACX/iC,EAAYjC,MAAAx/V,EAAA8kE,QAAAzmD,KAAA,CACZ2N,KAAAw4W,C,GAqjBCzjY,EAAGirB,KAAOw4W,EAjjBdE,EAAA,C,CAgiBE,IAuBMC,EApIYt9V,EA/PbpgB,EA4WDy9W,EAAiB,WAjjBA,MAApB3jY,EAAOo1W,cAojBwB,MAAnBp1W,EAAGo1W,aAhjBE,MAAjBp1W,EAAAo1W,aACAp1W,EAAAk0I,SAAAl0I,EAAkBirB,MAAAi2W,EAAA,GAAA,IAElBlhY,EAAAk0I,SAAAl0I,EAAAirB,KAAsBi2W,EAAA,G,EAazBxkN,GACEp2I,EAAA,KAmjBMs9V,EAAwB,WAjjB3BF,EAAYD,CAAA,C,EAGXA,IAAM1C,GA2KL76W,EA1KOlmB,EAAAwkM,OAAAk+L,oBA2KZ1iY,EAAAwkM,OAAUhnK,QACVx9B,EAAAymP,SAAO,CAAA,EACLpnP,EAAA09B,QAAQ8oO,UAAA7+P,KAAA,CACR24X,WAAO3/X,EAAAwkM,OAAAphL,MACP8C,KAAAA,EAmjBExlB,OAAQ,mB,EAjjBZ,SAAYE,EAAAyF,EAAAvF,GACZA,IAAcrB,EAAAsB,aACdf,EAAAohY,aAAsByC,wBAAgBl8V,aAAA,YAAA,CAAA,CAAA,EAChC7c,EAAAi2W,CAAA,GAojBA/gY,EAAGohY,aAAayC,wBAAwBl8V,aAAa,YAAa,CAAA,CAAA,EAEpE3nC,EAAGymP,SAAW,CAAA,C,KAvLLg9I,IAAYzC,EACrB16V,EAAOtmC,EAAGqhY,cACDoC,IAAYxC,EAjjBrB36V,EAAOtmC,EAAAshY,cACCmC,IAAQvC,IAClB56V,EAAItmC,EAAMuhY,cACRqC,EAAa,YAmjBN5jY,EAAGwkM,OAAOouK,mBA9iBd5yW,EAAAglM,iBAAA,EACHs+L,IA8iBII,EAAWD,CAAA,EACXjB,IA/iBJ,C,GAsjBEl8V,IA1JYA,EAvZJA,EAzJdjqB,EAAU,SAAKrJ,EAAAtF,GAkjBT44B,EAAKC,QACPvmC,EAAGwkM,OAAOwvK,UAAYh0W,EAAG4hY,YAAYngX,OAAO,SAAU0hX,GAhjB5D,OAASnjY,EAAAqiY,gBAAuBc,GAAc1zX,Q,GAojBxCpQ,EAAI09B,QAAQ8oO,UAAUtlQ,OAhjB5BP,EAASwkM,OACH,SAAQ5jM,EAAayF,EAAGvF,IACjBA,IAAYrB,EAAAsB,aAChBf,EAAAwkM,OAAAU,SAAAtkM,EAAAskM,SACFlyL,IAmjBKhU,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,EAClGgM,IApjBL,C,IAOPA,EAAA,C,GAuIgB3I,KAAU6+X,CAAA,IAqjBtBF,EAljBQD,CAAA,C,CA8VVzjY,EAAGynH,UAjjBYnmG,OAAAwkC,KAAQmoD,CAAA,EAAAzsF,IAAA,SAAApC,GAkjBrB,MAjjBE,CACA8G,KAAA9G,EACA9B,KAAM2wF,EAAQ7uF,GACd6oB,OAAA0qU,EAAkCvzV,E,oVAwX1CnhB,QAhjBEC,OAAG,UAAA,EACHK,WAAG,iCAAsBsiY,CAAA,EACzBriY,UAAG,uBAojBL,WAhjBE,MAAG,CACHC,SAAG,IACDC,MAAA,CAkjBEsnQ,OAAQ,KACR1hE,qBAAsB,KACtB8wK,YAAa,KACbpwK,iBAAkB,I,EAEpBzmM,WAAY,iCACZK,aAAc,KAhjBhBC,YAAU,SAAAuG,EAAA2sB,GACRqjV,EAAWrjV,EAAAqjV,aAAA,IACX,MAAA,wCAAUA,EAAA,6BAAAA,EAAA,O,GAhBgB,C,IAkmChC,CAAA,WACE,aAOA,SAnjBI0uB,EAAO3kY,EACGH,EACcK,EACT4pW,EACKviW,EAojBWivO,EAljBnB9P,EACE+P,EACSvvH,EACG5mH,EACjBouB,EAojBsBqI,EACA32B,GAEjC,IAAIS,EAAKC,KACTD,EAAG6tB,cAAgBA,EAljBrB7tB,EAAA+jY,OAAS19Q,GAAAA,EAA+B3+G,MAAA,CAAA2+G,EAAA3+G,OAAA,GAojBtC1H,EAAGgkY,GAAK,GACRhkY,EAAGikY,IAAM,GACTjkY,EAAG21O,aAAeA,EAClB31O,EAAG6lO,aAAeA,EAClB7lO,EAAGk5V,QAAU,GACbl5V,EAAG6iB,QAAU,GACb7iB,EAAG4mL,QAAU,CAAA,EACb5mL,EAAG41O,YAAcA,GAAe/nN,EAnjBM0rE,QAsjBtCv5F,EAAG0J,KAniBH,WACAvK,EAAIuK,KAAA,C,EAmiBJ1J,EAAG2B,OAhiBH,WACAxC,EAAIwC,OAAA,C,EAgiBJ3B,EAAG8H,UA7hBH,WACA9H,EAAI4mL,QAAA,CAAA,EACJvnL,EAAGgB,YAAc6c,SAAAlW,KACd,CACAxG,GAAA6lH,EAAA7lH,GAojBGujY,OAAQ/jY,EAAG+jY,OACXC,GAAIhkY,EAAGgkY,GAljBVC,IAAAjkY,EAASikY,IACT/qC,QAAAl5V,EAAAk5V,QACAr2U,QAAA7iB,EAAc6iB,QACdniB,OAAO,aACPulO,cAAWJ,EACXq+J,YAAQx9X,EAAAlG,E,EAER,SAAAI,EAAWyF,EAAAvF,GAEX,GADAd,EAAA4mL,QAAe,CAAA,EACf9lL,IAAgBrB,EAAAsB,YAAA,CAChB,IACA/B,EAAgBuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,oBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,CAChB,MAAAm9B,IAEA1/B,EAAAuK,KAAA,C,MAED,IACA1K,EAAAuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,CACA,MAAAm9B,I,EAIA,WACA7+B,EAAA4mL,QAAA,CAAA,C,IAggBF5mL,EAAGmkY,cA3fH,WACA,GAAGnkY,EAAA8H,WAGc,OAAd9H,EAAA+jY,QAAc,KAAA/jY,EAAA+jY,OAAjB,CAGE,IAAAA,EAAA,GAEA/jY,EAAA+jY,OAAAnwW,SAAqB,GAAA,EAGrBmwW,EAAA/jY,EAAA+jY,OAAqBlwW,MAAA,GAAA,EAFrBkwW,EAAAxzX,KAAAvQ,EAAA+jY,MAAA,EAKF,IAAG,IAAArwV,EAAA,EAAAA,EAAkBqwV,EAAA12X,OAAAqmC,CAAA,GAAA,CAojBjB,IAAIhsC,EAAQq8X,EAAOrwV,GAljBpB,GAAA,CAAAxd,EAAY6jU,cAAAryV,CAAA,EACT,MAAA,CAAA,C,EAsjBJ,MAnjBE,CAAA,C,EAueJ1H,EAAGokY,iBA+EH,WAljBE/kY,EAAI24B,QAAAC,GAAA9wB,WAAAC,SAAAY,MAAA,CACFxH,GAAAkG,EAAOlG,E,IAueTyoW,EAA8BE,iBAnjBMnpW,EAAA41O,YAAA51O,EAAA21O,aAAAtvH,CAAA,EAojBjCthH,KAAK,SAASmH,GACblM,EAAGk5V,QAAUhtV,EAAOgtV,QACpBl5V,EAAG6iB,QAAU3W,EAAO2W,O,iMA5C5B5kB,QACGC,OAAO,UAAA,EAljBVK,WAAS,4BAAuBulY,CAAA,C,IA8qBlC,CAAA,WACE,aAsBA,SAnjBKO,EACHjmY,EACAmB,EACAme,EAojBAwY,EACAp2B,EAljBAT,EAojBA6e,EACAze,EAljBAT,EAojBAG,GAGA,IAnjBIa,EAAAC,KAujBAke,GAHJne,EAAGtB,MAnjBCN,EAojBJ4B,EAAGoe,QAnjBUhgB,EAAOggB,QAEJ,KA+oBhB,SAnjBOC,IAojBLre,EAnjBEc,OAAG8R,MAAA5S,EAAcse,QAAAC,UAAAvX,KAAA,EAojBnBwX,aAnjBKC,QAAc3e,EAAAga,QAAAtZ,GAAA,+BAAAke,KAAAC,UAAA3e,EAAAc,MAAA,CAAA,C,CAsjBrB,SAAS8d,EAA0BC,EAAOC,EAAcC,GACtD,GAnjBE/e,EAAIc,OAAQ8R,MAAAoM,QAAU,CAojBtB,IAnjBEC,EAAAjf,EAAAc,OAAA8R,MAAAoM,QAAA3Z,KAAA,SAAA4Z,GAojBA,OAnjBMA,EAAG3B,OAAOuB,C,GAqjBlB,GAAI,CAACE,GAAcE,EAljBjB,OAAAA,EAAUC,O,CAsjBd,OAAOJ,C,CAYT,SAASK,EAnjBUJ,GAojBjB,IAoISK,EApILC,EACF,iZAmIF,IAASD,KA7HTnhB,QAAQqhB,OAAOtf,EAAGgf,QAAS,CACzB1B,KAAM,CACJiC,YAAahgB,EAAQ,WAAA,EAAa,0BAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,0BAAA,EACpCsf,MAAO,gBAljBbY,WAAS,CAAA,EACJP,QAAUN,EAAsB,gBAAA,CAAA,EAAAG,CAAA,EACjCW,UAAY,eACVC,cAAc,CAAA,EACdC,WAAQ,CAAA,EAojBRC,aAnjBW,CAAA,C,EAqjBbC,SAnjBO,CAojBLP,YAnjBKhgB,EAAA,WAAA,EAAqB,+BAAA,EAojB1BigB,cAnjBYjgB,EAAU,WAAA,EAAA,+BAAA,EAojBtBsf,MAnjBK,0BAojBLY,WAnjBS,CAAA,EAojBTP,QAnjBIN,EAA+B,WAAA,CAAA,EAAAG,CAAA,EAojBnCW,UAnjBI,0BAojBJK,aAnjBc,mE,EAqjBhBC,SAnjBM,CAojBJT,YAAahgB,EAAQ,WAAA,EAAa,8BAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,8BAAA,EACpCsf,MAAO,WAljBRY,WAAA,CAAA,EAojBCP,QAASN,EAA0B,WAAY,CAAA,EAAMG,CAAA,EACrDW,UAAW,0BAljBjBK,aAAS,oD,EAEPukX,iCAAU,CAojBN/kX,YAAahgB,EAAQ,WAAA,EAAa,yDAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,yDAAA,EAljB1Csf,MAAS,sCAojBHY,WAAY,CAAA,EACZP,QAASN,EAA0B,mCAAoC,CAAA,EAAMG,CAAA,EAljBjFW,UAAe,0BACXK,aAAA,iFAojBAS,cAAe,CAAA,C,EAEjBP,eAAgB,CAljBpBV,YAAShgB,EAAgB,WAAA,EAAQ,8BAAA,EAojB3BigB,cAAejgB,EAAQ,WAAA,EAAa,8BAAA,EAljBxCsf,MAAS,gCAojBLY,WAAY,CAAA,EAljBhBP,QAAUN,EAAK,iBAAyC,CAAA,EAAOG,CAAA,EAojB3DgB,aACE,wW,EAOJI,MAnjBO,CACLZ,YAAGhgB,EAAc,WAAA,EAAQ,2BAAA,EAojBzBigB,cAnjBKjgB,EAAA,WAAA,EAAA,2BAAA,EACLsf,MAAG,QAojBHY,WAAY,CAAA,EACZP,QAASN,EAA0B,QAAS,CAAA,EAAMG,CAAA,EAClDW,UAAW,0BAljBXK,aAAa,+C,EAqjBfK,WAnjBQ,CAojBNb,YAAahgB,EAAQ,WAAA,EAAa,iCAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,iCAAA,EAljBtCsf,MAAG,cACHY,WAAA,CAAA,EAojBEP,QAASN,EAA0B,aAAc,CAAA,EAAMG,CAAA,EACvDW,UAAW,0BAljBXK,aAAQ,2G,EAEVM,aAAI,CACFd,YAAWhgB,EAAA,WAAA,EAAA,oCAAA,EAojBXigB,cAAejgB,EAAQ,WAAA,EAAa,oCAAA,EACpCsf,MAAO,+BAljBTY,WAAI,CAAA,EACFP,QAAAN,EAA0B,eAAA,CAAA,EAAAG,CAAA,EAojB1BW,UAnjBS,0BACTK,aAAU,wE,EAqjBZO,kBAnjBY,CAojBVf,YAnjBShgB,EAAY,WAAA,EAAa,0CAAA,EAClCigB,cAAUjgB,EAAA,WAAA,EAAA,0CAAA,EACVsf,MAAA,qCAojBAY,WAnjBU,CAAA,EAojBVP,QAnjBIN,EAAW,oBAAA,CAAA,EAAAG,CAAA,EAojBfW,UAnjBI,0BAojBJK,aAnjBS,oI,EAqjBXQ,WAnjBM,CAojBJhB,YAAahgB,EAAQ,WAAA,EAAa,iCAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,iCAAA,EACpCsf,MAAO,cAljBTY,WAAU,CAAA,EACRP,QAAAN,EAAsB,QAAA,CAAA,EAAAG,CAAA,EAojBtByB,cAAe,CAAA,EACfC,YAnjBG,CAAA,EACLd,cAAW,CAAA,EAojBTI,aACE,4kB,EAOJxc,MAnjBK,CACHgc,YAAUhgB,EAAA,WAAA,EAAA,gDAAA,EAojBVigB,cAAejgB,EAAQ,WAAA,EAAa,gDAAA,EAljBpCsf,MAAG,QACLY,WAAO,CAAA,EAojBLP,QAnjBON,EAAwB,QAAA,CAAA,EAAAG,CAAA,EACjCgB,aAAUV,EAojBRqB,qBAAsBrB,EACtBmB,cAAe,CAAA,EAljBnBC,YAAO,CAAA,EAojBHd,cAAe,CAAA,EACfgB,eAAgB,CAAA,EAljBtBC,sBAAS,CAAA,EACHC,iBAAiB,CAAA,C,IAwjBL7gB,EAAGgf,QAljBfhf,EAAGgf,QAAAI,GAAAK,YACLzf,EAAA8gB,YAAOC,WAAAxQ,KAAAvQ,EAAAgf,QAAAI,EAAA,C,CAwjBX,SAnjBS4B,IAojBP,IAAIC,EAAI,GAyBR,OAzkBAA,EAAAC,KAAOlhB,EAAAc,OAAYogB,KAojBnBD,EAnjBEE,SAAWnhB,EAAAc,OAAOqgB,SAsjBpBF,EAnjBExS,QAAQzO,EAAAc,OAAAsgB,SAsjBVH,EAnjBElI,OAAQ/Y,EAAAc,OAAAiY,OAsjBVkI,EAnjBEI,cAAWC,OAAAC,OAAcvhB,EAAAgf,OAAA,EAAAwC,IAAA,SAAAvC,GAojBzB,GAAIA,EAAOC,SAA4B,oBAAjBD,EAAOJ,OAAgD,gBAAjBI,EAAOJ,OAA4C,UAAjBI,EAAOJ,MAljBvG,OAAOI,EAAAM,W,GAqjBJkC,OAAOC,OAAA,EAjjBVT,EAAAU,eAAUL,OAAYC,OAAAvhB,EAAAgf,OAAA,EAAAwC,IAAA,SAAAvC,GACpB,GAAGA,EAAAC,SAA0B,oBAA1BD,EAA0BJ,OAAA,gBAAAI,EAAAJ,OAAA,UAAAI,EAAAJ,MAC7B,OAAOI,EAAAJ,K,GAqjBN4C,OAAOC,OAAA,EAjjBPT,C,CAyRLjhB,EAAG8Z,QAAUha,EAAQga,QACrB9Z,EAAGugB,WAAa,GAChBvgB,EAAG4hB,UAnjBQ,CAAA,EAsjBX5hB,EAAGgf,QAnjBM,GAojBThf,EAAGse,QAnjBS,KAojBZte,EAAG6hB,kBAnjBC,CAAA,EAojBJ7hB,EAAGc,OAAS,CACV8R,MAAO,GAljBPwO,SAAG,GAojBHrI,OAnjBE,GAojBF+I,QAnjBI,CAojBFC,WAnjBQ,GAojBRE,QAnjBE,GAojBFC,OAAQ,GACRC,WAAY,GACZC,cAAe,E,EAjjBnBlB,KAAA,EACEC,SAAGjD,EAAoBmE,iB,EAujBzBriB,EAAGsiB,YAAcA,EACjBtiB,EAAG8oN,yBAgUH,SAnjBiB/gM,GAojBf1oB,EAAIgB,YAnjBI0hB,WAAA/a,KAAA,CAojBNxG,GAAIunB,EACJrnB,OAAQ,4B,EACP,SAnjBQE,EAASyF,EAAAvF,GAojBdA,IAnjBKrB,EAAUsB,aAojBjB4hB,EAAA,EACA3jB,EAnjBOuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,2CAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,GAqjBP1C,EAnjBIuC,KAAAvC,EAAmBwC,OAAA,EAAAC,YAAalC,EAAY,WAAA,EAAS,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,IA2O/D1B,EAAG8iB,YA8VH,WACE,IAKIvY,EAxjBAvK,EAAA4hB,YAsjBJ5hB,EAAG4hB,UAnjBM,CAAA,EAqjBLrX,EAAMlL,EAnjBCmL,KAAAnK,YAAA0hB,WAAArX,QAAA,OAAA,EAAA,EAAAA,QAAA,UAAA,uCAAA,EAojBXqY,MAnjBMxY,EAAG,IAAA,IAAayY,gBAAAhC,EAAA,CAAA,EAAwB,CAojB5CiC,OAAQ,MAAOC,QAAS,CAljBtBC,cAAc,SAAArjB,EAAAsjB,MAAAC,eAAA,kB,EAojBbC,OAAQ/kB,EAAW+kB,M,GAErBve,KAAK,SAAUnE,GACd,OAAOA,EAAS2iB,KAAA,C,GAEjBxe,KAAK,SAAUgE,GACO,CAAA,IAAjBA,EAAK0D,QAljBPtN,EAAAoC,KACVpC,EAAAyJ,MAAA,EAojBe/D,oBAAoB,CAAA,CAAA,EACpBM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAnjB/C/B,MAAArF,EAAA,WAAA,EAAA,2BAAA,CAAA,EACU2H,YAAA3H,EAAA,WAAA,EAAA,oCAAA,CAAAmI,MAAA5H,EAAA4I,KAAAhB,KAAA,CAAA,CAAA,EACI5C,GAAAvF,EAAA,WAAA,EAAA,eAAA,CAAA,C,EAGLP,EAAAuC,KAAAvC,EAAAwC,OAAA,EAA0BC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAsjB3B1B,EAAG4hB,UAAY,CAAA,C,KA36BrB5hB,EAAA8gB,YAAS5C,EAAgBsF,eAAA,CACvBC,cAikBF,SAAwBnF,GAljBtBte,EAAAse,QAAOA,EAqjBPte,EAAGse,QAAQoF,KAAKC,GAAGC,wBAAwBxlB,EAAQ,SAAUylB,GAljB/D7jB,EAAAgf,QAAS6E,EAAgBC,OAAAjF,OAAAK,QAAA2E,EAAAC,OAAA5E,QAElB2E,EAAUC,OAAY5E,SACtBlf,EAAA6L,UACH6R,EAAO/b,OAAA3B,EAAA6L,OAAA,EAojBH7L,EAAG6L,QAAU,MAGb7L,EAAG6hB,mBAljBXxD,EAAA,C,GAujBEre,EAnjBEse,QAAOyF,WAAGJ,GAAAK,kBAAA5lB,EAAA,SAAA6lB,EAAA9C,GAojBNnhB,EAAG6hB,oBACL7hB,EAAGc,OAAOogB,KAAO+C,EACjBjkB,EAAGc,OAAOqgB,SAAWA,EAljB3B9C,EAAA,EACEiE,EAAU,CAAA,CAAA,E,GAujBVtiB,EAAGse,QAAQoF,KAAKC,GAAGO,YAAY9lB,EAAQ,SAAU+lB,EAAMC,GACjDpkB,EAAG6hB,oBAljBL7hB,EAAAc,OAAIsgB,SAAQlD,EAAUmG,cAAAF,EAAAC,CAAA,EAojBtB/F,EAAA,EACAiE,EAnjBY,CAAA,CAAA,E,GAujBhBtiB,EAAGse,QAAQgG,aAnjBIX,GAAAY,kBAAAnmB,EAAA,SAAA0lB,EAAAU,GAojBTxkB,EAAG6hB,mBACLxD,EAAA,C,GAIJc,EAAA,EAEAzB,EAAS,WACP4E,EAAY,CAAA,CAAA,C,EACX,GAAA,C,EAzDHmC,oBAnjBS,CAojBP,CAljBE7f,MAAGrF,EAAU,WAAA,EAAY,0BAAA,EAC3BmN,OAAO,SAAAgY,GA+nBT1kB,EAAGgf,QAnjBU,GAojBbhf,EAAG8gB,YAnjBUC,WAAA,GAojBb5B,EAnjBU,CAAA,CAAA,EAojBVd,EAAA,EACAiE,EAAY,CAAA,CAAA,C,EAhoBV/e,MAAO,C,GAsjBTohB,sBAAuB,CAAA,C,GAsPzB,IAnjBEpmB,EAAG,IAAAqmB,gBAqjBL,SAnjBOtC,EAAAuC,EAAoCC,GAChCC,KAAAA,IAAPD,IAojBAA,EAnjBK,CAAA,GAqjBH9kB,EAAGoe,UACL7f,EAnjBCymB,MAAA,EAojBDzmB,EAAa,IAAIqmB,iBAhjBnB5kB,EAAAoe,QAAa,CAAA,EAqjBb,IAAI7T,EAAMlL,EAAImL,KAAKnK,YAAY0hB,WAAWrX,QAAQ,OAAQ,EAAA,EAAIA,QAAQ,UAAW,sBAAA,EAjjBjFqY,MAAIxY,EAAG,CACL0Y,OAAO,OAojBPC,QAAS,CAljBPC,cAAU,SAAArjB,EAA0BsjB,MACtCC,eAAO,kB,EAET1c,KAAO+X,KAAAC,UAAOqC,EAAA,CAAA,EACZsC,OAAO/kB,EAAA+kB,M,GAETve,KAAO,SAAOnE,GACZ,OAAOA,EAAA2iB,KAAA,C,GAETxe,KAAO,SAAAgE,GAojBH/I,EAAGoe,QAAU,CAAA,EACbpe,EAAG6hB,kBAAoB,CAAA,EAljB7B7hB,EAAS8gB,YAAA/X,KAAgBA,EAAMA,KAE3B/I,EAAI8gB,YAAAmE,WAAyBlc,EAAAnB,aACxBid,GAAO,CAAA9b,EAAAA,KAAAsE,QACVjP,EAAG2f,gBAAA,EAEAhV,EAAAA,KAAOsE,SACZrN,EAAO8d,mBAAU,CAAA,EAojBb9d,EAnjBCklB,gBAAgB,GACjBnc,EAAAA,KAAA5H,QAAkB,SAAUkc,GAC3Brd,EAAOklB,gBAAA7H,EAAA8H,oBACPnlB,EAAAklB,gBAAO7H,EAAA8H,kBAAA,IAEZnlB,EAAOklB,gBAAU7H,EAAU8H,kBAAA9H,EAAA+H,sBAAA/H,EAAAgI,4B,GAE3B1C,EAAA,EAojBI3iB,EAAGse,QAAQoF,KAAK4B,mBAAA,GAElBlnB,EAAOmnB,OAAA,EACHT,GAAkB,CAAC/b,EAAKA,KAAKsE,QAljBvCqQ,EAAS,WACA4E,EAAO,CAAA,EAAOwC,CAAA,C,EAChB3G,CAAA,C,GAsjBF5Q,MAnjBC,SAAUC,GACV,MAAAA,C,GAqkBN,SAASmV,IACP,IAAIZ,EAnjBO,GAojBX/hB,EAAG8gB,YAnjBQ/X,KAAA5H,QAAY,SAAAkc,GAojBrB0E,EAnjBSxR,KAAA8M,EAAS+H,oBAAA,C,GAqjBpB/lB,EAAIgB,YAAY0hB,WAAW/a,KACzB,CAljBEtG,OAAG,uCAojBHyvE,cAAepuD,C,EACd,SAAUnhB,EAAUyF,EAAIvF,GACrBA,IAAWrB,EAAYsB,cACzBf,EAAGugB,WAAa3f,EAASmI,K,2HAzZnC9K,QACGC,OAAO,UAAA,EACPK,WAnjBK,iCAAA8lY,CAAA,EAojBL7lY,UAnjBU,yBAsjBb,WACE,MAnjBI,CAojBFC,SAAU,IACVI,YAAa,uEACbH,MAAO,CACLof,mBAAoB,KAljBrBC,gBAAgB,I,EAEnBxf,WAAG,iCACHK,aAAG,I,EAZQ,C,IAk/Bf,CAAA,WACE,aAEAX,QACGC,OAAO,UAAA,EAnjBRM,UAAS,sBAujBX,WAnjBE,MAAG,CACHkM,QAAG,CAAA,EACHjM,SAAG,IACHI,YAAa,iEACbN,WAAa,CAAA,SAAA,UAAA,WAAA,UAAA,YAAA,MAAA,UAAA,gBAAA,cACV,SACAH,EAqjBGgB,EACAJ,EAnjBHO,EACAJ,EACAE,EACAS,EACA45O,EAqjBGj6O,GAjjBNrB,EAASitO,WAAa,CAAA,EACpBjtO,EAAAmmY,UAAA,CAAA,EACGnmY,EAAKomY,iBAAiB,KACrBpmY,EAAGqmY,KAAU,KAsjBT3kY,EAAQga,UACV1b,EAAOorW,YAAc1pW,EAAQga,QAAQwD,KACrClf,EAAOsmY,UAAY5kY,EAAQga,QAAQtZ,GAnjBlCV,EAAO4I,OACd5I,EAAU4I,KAAAkoW,UAqjBF9wW,EAAQga,QAAQ6lL,OAAS+5C,EAAcirJ,MACnB,eAApBtlY,EAAIulY,cAoCNxmY,EAAOitO,WAAa,CAAA,EACpBhsO,EAAI09B,QAAQ8nW,cAAc7jY,IAAI,GAC5B,SAASJ,EAAUyF,EAAIvF,GACjBA,IAAWrB,EAAYsB,cAnjB9B3C,EAAAomY,iBAAgB5jY,EAAA6tX,mB,IAlCpBrwX,EAAAi7G,gBAIC,SAAWrgG,GACX,IAAIrS,EAAG1I,QAAAmH,QAAAhG,EAAAsH,SAAAC,IAAA,EACFisC,EAAG30C,QAAAmH,QAAA,aAAA,EACRwtC,EAASC,IAAG,CAAAnxC,SAAA,QAAAoxC,QAAA,GAAA,CAAA,EACZF,EAASG,IAAG/5B,CAAA,EACZrS,EAAAqsC,OAAQJ,CAAA,EACRA,EAAA,GAAA3M,OAAA,EACA,IAqjBI,IAAIgN,EAAavsC,SAASwsC,YAAY,MAAA,EAnjB5C,GAASD,CAAAA,EASD,MAAAA,EARHj0C,EAAUuC,KACTvC,EACEwC,OAAA,EACFC,YAAclC,EAAS,WAAA,EAAS,gBAAA,CAAA,EACzBmC,SAAG,WAAA,EAqjBHiL,UAAU,GAAA,C,EA/iBjB,MAAOwmC,IAsjBTP,EAASQ,OAAA,C,EA7kBXh1C,EAAA0mY,YAsCF,SAAOl2X,GAqjBCxQ,EAAO2mY,cAAgB3mY,EAAOqmY,OAhjBtCrmY,EAAO2mY,aAAQ,CAAA,EAqjBX1lY,EApjBC09B,QAAAioW,kBAAA57V,KACL,SAAYxoC,EAAayF,EAAAvF,GAqjBjB1C,EAAO2mY,aAAe,CAAA,EACtB3mY,EAAOqmY,KAAO7jY,EAASwF,O,KAlmB/BhI,EAAA6mY,UAkDE,SAAOC,GAqjBDv8X,EAASxJ,EAAUyJ,MAAA,EACpB/D,oBAAoB,CAAA,CAAA,EAnjBtBM,OAAAlH,QAAAmH,QAAAsB,SAAAC,IAAA,CAAA,EAqjBE/B,MAAMrF,EAAQ,YAAA,EAAc2lY,EAAIx8X,IAAA,CAAA,EAChCxB,YAAYg+X,EAAIriY,KAAA,EAnjBlBiC,GAAAvF,EAAA,WAAA,EAAmB,eAAA,CAAA,EAEpBJ,EAASoC,KAAAoH,CAAA,C,KAlGR,C,IA6pBb,CAAA,WAnjBC,aA4jBC,SAASw8X,EAAoB/mY,EAAQsf,EAAUle,EAAYN,EAAWC,EAAWH,EAAUiS,EAAS1R,EAAS8c,EAChFhd,EAAKS,EAASL,EAAaonP,EAAuB3wN,EApjBtEvB,EAAyBgrJ,EAAA2rF,EACzBr7F,EAAAm1N,EAAAC,EAAA1/X,EAAAwwB,EACKC,EAAAC,GAujBZ,IArjBEr2B,EAAOC,KAwrBHqlY,GAlINtlY,EAAGulY,SArjBC,SAwjBJvlY,EArjBEwlY,YAAY,KAsjBdxlY,EArjBEqrQ,QAAA,KAujBFrrQ,EAAGylY,uBAAyB,GAE5BzlY,EAAGuqW,kBAAoB/rV,aAAagM,QAAQ1qB,EAAQga,QAAQtZ,GAAK,mBAAA,EApjBnER,EAAA0lY,oBAASlnX,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,uBAAA,EACPR,EAAA2lY,kBAAAnnX,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,qBAAA,EACAR,EAAAkrQ,aAAA,GACAlrQ,EAAA4lY,gBAAA,KACA5lY,EAAA6lY,gBAAA,CAAA,EAEA7lY,EAAA8lY,UAAA,KACA9lY,EAAA+lY,aAAApnH,GAAAoI,QACA/mR,EAAAgmY,mBAAA,CACAx6G,UAAA,EACAC,QAAA,EACArf,MAAA,C,EAEApsQ,EAAAurQ,OAAS,CACT10J,SAAW,WACX05J,QAAG,UAsjBDC,OAAQ,SApjBVnB,sBAAuB,wBAsjBrBoB,wBAAyB,0BApjB3BC,yBAAqB,2BACrBhF,MAAG,QACHiF,oBAAe,sBAujBbC,QAAS,UApjBXC,OAAG,SACHrF,MAAG,O,EAEHxrQ,EAAGimY,aAAS,CACVpvR,SAAO,CACP9sF,QAAU,oE,EAEVwmP,QAAS,CACPxmP,QAAA,0E,EAujBFymP,OArjBE,CACAzmP,QAAA,0E,EAujBFslP,sBAAuB,CApjBvBtlP,QAAM,yE,EAujBN0mP,wBAAyB,CACvB1mP,QAAS,yE,EAnjBb2mP,yBAAiB,CACd3mP,QAAA,yE,EAujBD2hP,MAAO,CApjBN3hP,QAAA,0E,EAED4mP,oBAAqB,CACnB5mP,QAAA,2E,EAujBF6mP,QArjBI,CAsjBF7mP,QArjBI,oE,EAujBN8mP,OArjBI,CAsjBF9mP,QAAS,oE,EAnjBXyhP,MAAA,CAsjBEzhP,QAAS,0E,GAljBb/pB,EAAAo2B,cAAS,CACP8vW,GAAG,KAsjBHC,OAAQ,SApjBRC,SAAG,U,EAujBLpmY,EAAG4S,MAAQ5S,EAAGurQ,OAAO10J,SAGrB72G,EAAG8wQ,gBArjBcA,EAsjBjB9wQ,EAAGqmY,sBArjBkBA,EAsjBrBrmY,EAAGsmY,oBAo0BH,SAtjBa13X,GAujBXA,EAtjBI06B,gBAAA,EAujBJi9V,EAtjBavmY,EAAAo2B,cAAoB8vW,EAAA,EAujBjCM,EAAA,C,EAt0BFxmY,EAAGymY,2BAy0BH,SAtjBiC73X,GAujB/BA,EAtjBK06B,gBAAA,EAujBLi9V,EAtjBKvmY,EAAAo2B,cAAkB+vW,MAAA,C,EApRzBnmY,EAAG0mY,0BA60BH,SAtjBI93X,GAujBFA,EAtjBE06B,gBAAA,EAujBFi9V,EAAkBvmY,EAAGo2B,cAAcgwW,QAAA,C,EA90BrCpmY,EAAG2mY,sBAw7BH,WArjBA,MAAS,oDAA6BhoH,GAAAoI,QAAA,YAAApI,GAAAoI,QAAA,M,EAlYtC/mR,EAAG4mY,kBA27BH,WACE,MAtjBM,oDAASjoH,GAAAoI,QAAA,YAAApI,GAAAoI,QAAA,M,EArYjB/mR,EAAG6mY,oBA87BH,WACE,MAtjBI,oDAAsBloH,GAAAoI,QAAA,YAAApI,GAAAoI,QAAA,M,EAxY5B/mR,EAAG8mY,gBAAkBA,EACrB9mY,EArjBE+mY,oBAAsBA,EAsjBxB/mY,EAAGgnY,qBArjBQA,EAsjBXhnY,EAAGinY,oBA4+BH,WACE,IAtjBInsW,EAAA6kJ,EAAyC7kJ,gBAujB7C,OAAOA,EAAkBA,EAAgBkxO,WAAa,E,EA7+BxDhsQ,EAAGknY,uBArjBwB57H,EAAA2F,kBAsjB3BjxQ,EAAGogQ,qBArjBGvZ,EAAAuZ,qBAsjBNpgQ,EAAGwgQ,sBArjBe3Z,EAAA2Z,sBAsjBlBxgQ,EAAGkgQ,qBAAuBrZ,EAAsBqZ,qBAs4BhD,WArjBE,IAAAh0P,EAAYsS,aAAOgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,0BAAA,EAwjBnB,GAtjBE,CAAA0L,EAAQ,CAujBR,GA3kBEsS,aAAgBgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,sBAAA,EAuBjB,OADD2mY,EAAWnnY,EAAAo2B,cAAA8vW,EAAA,EACJlmY,EAAAo2B,cAAe8vW,GAujBf,GAVgF,SAAlF1nX,aAAagM,QAAQ1qB,EAAQga,QAAQtZ,GAAK,kCAAA,EA1iB/C,OAqjBE2mY,EAAwBnnY,EAAGo2B,cAAcgwW,QAAA,EArjBnCpmY,EAAAo2B,cAAKgwW,SACb,GAilBwF,SAAnF5nX,aAAagM,QAAQ1qB,EAAQga,QAAQtZ,GAAK,mCAAA,EAzB7C,OADA2mY,EAAwBnnY,EAAGo2B,cAAc+vW,MAAA,EAClCnmY,EAAGo2B,cAAc+vW,M,CAG5B,OAAOj6X,C,EAj3BiB,GA/iB1B,SAASk7X,IACJN,EAAA,EACHnnN,EAAeW,mBAAA,EAAav7K,KAAA,SAAA+1B,GAC5BA,EACAusW,EAAA,EAujBM1nN,EAAuBa,uBAAA,EAAyBz7K,KAAK,SAAU+1B,GACzDA,EApjBLusW,EAAA,EAELC,EAAAtnY,EAAAurQ,OAAAC,KAAA,C,KA0jBSu7H,EAAA,EApjBXO,EAAQtnY,EAAAurQ,OAAUG,KAAA,EACVs7H,EAAA,GAsjBN17H,EArjBewF,gBAAA,C,CAyjBnB,SArjBMu2H,IAimBJ1oH,GAAGmP,SArjBGiK,sBAAA,SAAA/kR,EAAAtF,GAsjBJ8yC,EAAEP,KArjBE,qDAAA,EAAAl7C,KAAAiO,EAAAtF,CAAA,C,GAwjBNixQ,GArjBEmP,SAAOmK,oBAAA,SAAA/G,GAsjBP,OArjBE,SAAal+Q,EAAQtF,GACrB8yC,EAAAP,KAAA5gD,EAAAmL,KAAewiR,YAAQ,QAAakE,CAAA,EAAAnsR,KAAAiO,EAAAtF,CAAA,C,IAqgBxCojQ,EArjBI9wQ,EAAegmY,kBAAA,C,CAknBrB,SArjBMl1H,EAAWv+P,GACXu0X,EAAA,EAsjBGnoH,GAAGkM,UAAUhjD,SAAA,EA3iBlBt1N,GACEksE,QAAAgU,KAAa,8DAAA,EACbksL,GAAAkM,UAAe6J,WAAA,EAAQ3vR,KAAA,WACvB+rQ,EAAOv+P,CAAA,C,GACPhF,MAAAg6X,CAAA,IAyjBE9oT,QAAQgU,KAAK,mFAAA,EApjBjB60S,EAAYtnY,EAAAurQ,OAAAiF,MAAA,EACVg3H,EAAA,EACAC,EAAA,EACAnnN,EAAA,IArBFgnN,EAAAtnY,EAAcurQ,OAAAgF,OAAA,EAEZoO,GAAAkM,UAAA3qK,QAAe3tG,CAAA,EAAQxN,KAAA,WACvBuiY,EAAOtnY,EAAAurQ,OAAAiF,MAAA,EACPg3H,EAAA,EACAC,EAAA,EACAnnN,EAAA,C,GACA/yK,MAAAg6X,CAAA,GAukBFD,EArjBEtnY,EAAAurQ,OAAa10J,QAAA,C,CA+jBnB,SArjBI6wR,IAsjBF,OArjBIrrX,EAAA,SAAarJ,EAAQtF,GACrBixQ,GAAAkM,UAAehjD,SAAA,EACf70N,EAAA,EAGA2rQ,GAAAkM,UAAA3qK,QAAA,EAAcn7G,KAAAiO,EAAA,WAEd7J,OAAA0D,SAAekpH,OAAA,WAAA,EACf4oJ,GAAAkM,UAAa3qK,QAAA,CAAAurK,QAAA,EAAArf,MAAA,CAAA,CAAA,EAAArnQ,KAAAiO,EAAAtF,CAAA,C,KAskBnB,SArjBM85X,IAsjBJxnY,EAAGkrQ,aAAe,GAClByT,GAAGiQ,SAASvpR,KAAA,EAAON,KAAK,SAAUgE,GApjBhC/I,EAAAkrQ,aAAiBniQ,C,GAyjBrB,SArjBI4+X,EAAoBxgI,EAAA1hQ,GAsjBtB,IAGMg7F,EACAC,EAJFqmS,EAAA,GAGEtmS,EAAe,6FAFHh7F,EAAQk7F,IAEsG,QAC1HD,EAAcv3F,OAAOC,KAAK,GAAI,SAAU,6FAAA,GApjB5C1C,SAAgB83B,MAAO,iHAAyCiiE,EAAA,SAAA,EAChEC,EAAWh6F,SAAAg4B,MAAA,GAujBXigP,GAAG32Q,MAAMhI,EAAG4lY,gBAAiB,CAAC,CAACrgY,KAAM,QAAS89C,OAAQ,MAAOquO,OAAQ,SAAU3oR,KAAMtD,EAAQk7F,GAAA,EAAA,EApjB5FpzF,MAAO,SAAAsxB,GAsjBJ4/C,QAAQjxE,MAAMqxB,CAAA,C,GAKtB,SArjBK4oW,IAsjBH9oH,GAAGt/Q,IAAIqtR,WAAA,EAAa3nR,KAAK,SAAUgE,GApjBnC/I,EAAA8lY,UAAO/8X,EAsjBL3K,EAAOmnB,OAAA,C,GACNhY,MAAMq6X,CAAA,C,CAljBX,SAAStnN,IAELtgL,EAAA0lY,oBAsjBAmC,EAAA,GAnjBAppT,QAAAgU,KAAW,qEAAA,EACXzyF,EAAAuqW,mBAsjBE+8B,EAAStnY,EAAGurQ,OAAOkF,uBAAA,EACnBpxQ,EAAI21B,MAAMkR,UAAUllC,IApjBrB,CAsjBKR,GAAIR,EAAGuqW,kBApjBX72V,WAAe,0B,EAEb,SAAKtN,EAAAC,EAAAvF,GACDA,IAAArB,EAAAsB,cA2lBoB+5B,EA1lBnB10B,GAsCQ0hY,cAyjBjBrpT,QAAQgU,KAAK,YAAc33D,EAAgBgtW,aAAe,0BAAA,EApjB9DtpX,aAASC,QAAA3e,EAAAga,QAAyBtZ,GAAA,wBAAcs6B,EAAAgtW,YAAA,EAC9C9nY,EAAI0lY,oBAAuB5qW,EAAKgtW,aAC9BD,IA+iBAppT,QArjBQgU,KAAA,IAAA33D,EAAA5U,KAAA,kEAAA,EAsjBR6hX,IAhjBA,EA3CET,EAAAtnY,EAAgBurQ,OAAAC,KAAA,C,KAKjB87H,EAAKtnY,EAAAurQ,OAAUmF,wBAAA,EA6jBlBvxQ,EArjBOoC,KAAA,CAsjBLhD,WArjBM,wCAsjBNK,aArjBW,KAsjBXC,YAAa,6FACbsG,OArjBMlH,QAAUmH,QAAQlG,EAAAmG,KAAA,MAAA,CAAA,EAsjBxBR,oBArjBO,CAAA,EAsjBPmO,QArjBO,CAsjBLgf,cAAA,CAAA,cArjBY,SAAQ5e,GAsjBlB,OArjBOA,EAAGJ,QAAgB,uBAAwB,CAAAU,WAAA,0BAAA,CAAA,C,MAwjBrD3O,KArjBK,SAAG+1B,GAsjBTtc,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,oBAAqBs6B,EAAgBt6B,EAAA,EAC/ER,EAAGuqW,kBArjBCzvU,EAAAt6B,GAsjBJR,EAAG86B,gBArjBiBA,EAsjBpBssW,EAAA,C,EACC,WACDY,EAAA,EACAV,EArjBItnY,EAAAurQ,OAAS10J,QAAA,C,KAykBjB,SAASkxR,IACP/nY,EAAGkrQ,aAAe,GAClByT,GAAGiQ,SAASvpR,KAAA,EAAON,KAAK,SAAUgE,GAChC01E,QAAQgU,KAAK,uBAAyB1pF,EAAKoL,KAAK,IAAA,EAAQ,yCAAA,EAnjB1DnU,EAAIkrQ,aAAaniQ,EACjB5J,EAAGoC,KAAY,CACbhD,WAAW,uCAsjBTK,aAAc,KApjBdC,YAAY,2FACdsG,OAAAlH,QAAAmH,QAAAlG,EAAAmG,KAAA,oBAAA,CAAA,EACER,oBAAQ,CAAA,EACRgC,OAAA,CACCqkQ,aAAUlrQ,EAAAkrQ,Y,IAujBVnmQ,KArjBI,SAAA2gY,GAsjBLW,EAAsBX,CAAA,C,EACrB,WAEDsC,EAAA,C,KAljBJz6X,MAAOq6X,CAAA,C,CAwjBT,SArjBKvB,EAAYX,GAsjBfjnT,QAAQgU,KAAK,YAAcizS,EAAsB,4CAAA,EApjBjDlnX,aAAUC,QAAS3e,EAAAga,QAAYtZ,GAAW,wBAAoBklY,CAAA,EAC9D1lY,EAAA0lY,oBAAsBA,EAujBtBrmY,EArjBI21B,MAAAkR,UAAA3lC,OAsjBF,CACEC,GAAIm/K,EAAuB7kJ,gBAAgBt6B,GApjB5CE,OAAK,cACJonY,aAAOpC,C,EAujBT,SArjBMt/X,EAAUC,EAAMvF,GAChBA,IAAKrB,EAAkBsB,YACzB8mY,EAAA,EAujBAppT,QArjBKjxE,MAAA,mCAAA,C,GA0jBb,SAASq6X,IACPppT,QAAQgU,KArjBG,oBAAAzyF,EAAA0lY,mBAAA,EAujBX4B,EAAStnY,EAAGurQ,OAAO8D,qBAAA,EACnBsP,GAAGiQ,SArjBIvpR,KAAArF,EAAY0lY,mBAAA,EAAA3gY,KAAA,SAAAgE,GAsjBjB01E,QAAQgU,KAAKzyF,EAAG0lY,oBAAsB,sBAAA,EAab,OAAvB1lY,EAAG4lY,kBApjBX5lY,EAAS4lY,gBAAAjnH,GAAA4W,QAAsB1nL,OAAA,CAAAyiL,SAAAtwR,EAAAulY,QAAA,CAAA,GAE3BvlY,EAAA4lY,gBAASrzX,OAAA+9Q,SAAAtwR,EAAAulY,SACTvlY,EAAA4lY,gBAAUrzX,OAAAi9Q,QAAA,OACVxvR,EAAA4lY,gBAAa5xG,WAAAt9P,CAAA,EACb4wW,EAAAtnY,EAAYurQ,OAACG,KAAA,EA4jBb,IADA,IArjBI8a,EAAAxmR,EAAAylY,uBAAAp4X,OACAqmC,EAAA,EAAAA,EAAA8yO,EAAA,EAAA9yO,EAsjBFu0V,EArjBEjoY,EAAAylY,uBAAAl6W,IAAA,CAAA,EA+iBJkzD,QArjBIgU,KAAA,4BAAA,C,GAmiBDllF,MAAM,SAAU4lC,GAljBxBsrC,QAAWgU,KAAA,2BAAAzyF,EAAA0lY,oBAAA,2BAAA,EACVqC,EAAA,C,GAolBE,SArjBQE,EAAOzhQ,EAAc/gI,GAsjB3B,IAEM8E,EAvjBO4rB,EAAoB8H,qBAAQ,2BAAA,GACvBx4B,GAAAA,EAAA0sB,UAAA,EAAA1sB,EAAA0sB,SAAAsE,mBAAAppB,QAsjBZ9C,EArjBElL,EAAQmL,KAAKrD,WAAAuvB,QAAAhsB,QAAA,UAAA,oBAAA,EAsjBfd,EArjBE,CAsjBJ+sB,sBArjBQlxB,EAAgB0sB,SAAAsE,mBAAAjV,IAAA,SAAAoV,GAAA,OAAAA,EAAAp2B,EAAA,CAAA,EAsjBxBq2B,cArjBIpxB,EAAA0sB,SAAA3xB,GAsjBJs2B,aArjBIV,EAAAg7O,gBAsjBJ9pP,UAAW+O,EAAW6xW,eACtBjxW,YAAaxxB,EAAQivB,SAAWjvB,EAAQivB,SAASl0B,GAAK,I,EAExDmF,EArjBE3E,IAAOuJ,EAAA,CAAAX,OAAAA,CAAA,CAAA,EAAkB7E,KAAA,SAAAnE,GACzBkmY,EAAA,EACAY,EAAA,EAAmB3iY,KAAA,WAAA,OAAA45Q,GAAA32Q,MAAAhI,EAAA4lY,gBAAAhlY,EAAAmI,IAAA,CAAA,CAAA,EAAAwE,MAAA,SAAA4lC,GAAAy0V,EAAAz0V,CAAA,EAAAsrC,QAAAjxE,MAAA2lC,CAAA,CAAA,CAAA,GAEnBnzC,EAAAylY,uBAAyBl1X,KAAO3P,EAAAmI,IAAA,EAC9B/J,EAAIuC,KAAOvC,EAAQwC,OAAA,EAAQC,YAAiBlC,EAAA,WAAA,EAAA,0CAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAC5CymY,EAAenoY,EAAAo2B,cAAgB8vW,EAAA,EAC/BM,EAAA,E,GAujBDj5X,MArjBM,SAAOC,GAsjBdxO,EArjBEuC,KAAYvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,IAGV8kI,EAsjBFsgQ,EAAA,EACE9mY,EAAG4S,QArjBC5S,EAAAurQ,OAAAG,OAAA1rQ,EAAA4S,QAAA5S,EAAAurQ,OAAAoF,oBAsjBN+2H,EAAA,EArjBS3iY,KAAA,WAAA45Q,GAAA32Q,MAAAhI,EAAA4lY,gBAAAp/P,CAAA,EAAAj5H,MAAAq6X,CAAA,CAAA,CAAA,EAAA7iY,KAAA,YAAA,EAAAwI,MAAA,SAAA66X,GAAAR,EAAAQ,CAAA,EAAA3pT,QAAAjxE,MAAA46X,CAAA,CAAA,CAAA,EAujBTppY,EArjBSuC,KAAAvC,EAASwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,2CAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,GAwjBpB1B,EAAGylY,uBArjBQl1X,KAAAi2H,CAAA,EAsjBXxnI,EArjBMuC,KAAMvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,0CAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAujBZymY,EArjBWnoY,EAAKo2B,cAAA8vW,EAAA,EAsjBhBM,EAAA,GAGFxnY,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,CAQtG,SAAS2mY,EAAgB5iY,GACvB,IAphBJ6iY,EAiHWC,EAmaYpyW,EAAmB8H,qBAAqB,2BAAA,GACvCx4B,GAAWA,EAAQ0sB,UAAyD,EAA7C1sB,EAAQ0sB,SAASsE,mBAAmBppB,QApjBnF9C,EAAAlL,EAASmL,KAAArD,WAAmBuvB,QAAAhsB,QAAA,UAAA,oBAAA,EAC1Bd,EAAI,CAsjBN+sB,sBArjBIlxB,EAAA0sB,SAAAsE,mBAAAjV,IAAA,SAAAoV,GAAA,OAAAA,EAAAp2B,EAAA,CAAA,EAsjBJq2B,cAAepxB,EAAQ0sB,SAAS3xB,GAChCs2B,aAAcV,EAAcoyW,kBAC5BlhX,UArjBS+O,EAAA6xW,eAsjBTjxW,YArjBMxxB,EAAQivB,SAAkBjvB,EAAAivB,SAAAl0B,GAAA,KAsjBhC62B,eArjBa5xB,EAAU40B,WAsjBvB/C,gCArjB4B,CAAA,IAAA7xB,EAAA40B,WAAA50B,EAAA0sB,SAAAoF,2BAAAxS,KAAAA,C,EAujB9Bpf,EAAM3E,IAAIuJ,EAAK,CAAEX,OAAQA,CAAA,CAAA,EAAU7E,KAAK,SAASnE,GAC/C,IAAI6nY,EAAa7nY,EAASmI,KAnjB1Bs+P,EAAS3gQ,SAAU4C,cAAK,QAAA,EAsjBxB+9P,EArjBMz/J,MAAAwqD,QAAS,OAsjBf1rJ,SArjBKC,KAAAyE,YAAoBi8P,CAAA,EAsjBzBA,EArjBKqhI,gBAAet/X,KAAA,EAsjBpBi+P,EArjBKqhI,gBAAclqW,MAAAiqW,CAAA,EAsjBnBphI,EArjBKqhI,gBAAgBhqW,MAAA,EAujBrBhhB,EAAS,WApjBP2pP,EAAAC,cAAet/P,MAAA,C,EAsjBd,GAAA,C,GAEFuF,MAAM,SAASC,GAChBxO,EAASuC,KAAKvC,EAASwC,OAAA,EACpBC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EACjCmC,SAAS,WAAA,CAAA,C,KAjjBpB4mY,EAAA,KACU7iY,EAAA0sB,SAAAg5K,kBAAA,CAAA1lM,EAAA0sB,SAAAyP,gBACP0mW,EAAkC7iY,EAAA0sB,SAAAg5K,kBAAA1lM,EAAA0sB,SAAAg5K,iBAAA/vL,WAAA3V,EAAA0sB,SAAAkD,KAAA,IAwjB1B5vB,EAAQ0sB,SAASnlB,OAAUvH,EAAQ40B,aACtC50B,EAAQ0sB,SAASnlB,MAAQ,GArjBjCvH,EAAS0sB,SAAAoF,2BAAsCp2B,QAAY,SAAW64B,GAujBvDv0B,EAAQ0sB,SAtjBMnlB,MAAKgtB,EAAsB/pB,OAujB5CxK,EAAQ0sB,SAtjBSnlB,MAAAgtB,EAAqB/pB,KAAA,IAwjBxCxK,EAAQ0sB,SAASnlB,MAtjBEgtB,EAA2B/pB,KAAAM,KAAAypB,CAAA,C,IA0jBlDh6B,EAAG2oY,WAAa,CACdtuW,WAAY50B,EAAQ40B,WArjBvBuuW,iBAAcnjY,EAAAmjY,kBAAA,CAAA,EACd9uX,QAAUha,EAAAga,QAujBP3X,KAAMsD,EAAQ0sB,SArjBjBuC,SAAAjvB,EAAAivB,SAujBG8S,UAAW/hC,EAAQivB,SAAS8S,UArjB/By6N,oBAAoBx8P,EAAAivB,SAAqB8S,UAAQ82N,4BACjDpuO,kBAAsB3wB,EAAA,mBAAA,EAA6BkG,EAAQ0sB,SAAKtY,QAAA,EAChEsxL,iBAAyDpmL,KAAAA,IAArCtf,EAAA0sB,SAAag5K,kBAA6B,OAAA1lM,EAAA0sB,SAAAg5K,iBAAA1lM,EAAA0sB,SAAAg5K,iBAAA,KAC9D+xK,uBAAen4V,KAAAA,IAAAtf,EAAA0sB,SAAAg5K,kBAAA,OAAA1lM,EAAA0sB,SAAAg5K,iBAAA/vL,WAAA3V,EAAA0sB,SAAAg5K,gBAAA,EAAA/vL,WAAA3V,EAAA0sB,SAAAkD,KAAA,EAAA,KACfwzW,+BAAkBP,GAAA,EAClBl3L,aAAA,SAAkBp3K,EAAA8uW,GAujBb,OAAI9uW,EAAuBE,uBAAyBF,EAAuBG,sBArjBhFH,EAAYE,sBAAAF,EAAApqB,eACGoqB,EAAGE,sBAERF,EAAApqB,eACFoqB,EAAA5pB,UAAA,CAAA04X,EACF9uW,EAAAjf,wBAEGif,EAAApqB,c,EAGVs1M,UAAQ,SAAAlrL,GACR,OAAAA,EAAuBhR,OAAAgR,EAAAqnO,e,EAEvB79N,SAAAqjN,EAA0BrjN,SAC1BgzK,mBAAOqwC,EAAArwC,mBACPoB,eAAA,SAAqBz1M,GAujBf,OAAwC,EAAjCmf,OAAOwkC,KAAK3jD,EAAK6K,KAAA,EAAOK,M,EApjBrCgzB,2BAAQ,SAAAl+B,EAAA4mY,GACR,OAAO5mY,EAAAo1B,2BAAA9V,OAAA,SAAA6e,GAujBC,MAAO,CAACA,EAAKK,oBAAsB,CAACL,EAAKQ,mBAAsBR,EAAKQ,mBAAqB,CAACR,EAAKS,4B,IAnjBrGP,qBAAS,SAAAr+B,GAujBL,OAAIA,EAAKs+B,wBArjBNt+B,EAAAu+B,iBAwjBIv+B,EAAKo1B,2BAA2B9V,OAAO,SAAU6e,GArjBtD,OAAAA,EAAAK,kB,IAGRC,oBAAuB,SAAAz+B,GACrB,OAAAA,EAAS0+B,kCAujBI,CAAC1+B,EAAKw7B,2BApjBVx7B,EAAAo1B,2BAAA9V,OAAA,SAAA6e,GAujBH,OAAOA,EAAKQ,mBAAqBR,EAAKS,4B,IAG1Cq0O,iBAAkB,WArjBtB,OAAOp1Q,EAAA2oY,WAAA1mI,oBAAA9C,iBAAAlvF,EAAAmvF,MACI,GAEX,E,EAwjBImpI,uBAAwB,KArjB5BS,kBAAS,I,EAIPhpY,EAAA2oY,WAASC,iBAmBVnjY,EAAA0sB,SAAAwL,2BAAwBl4B,EAAA0sB,SAAA0O,mCACxB7gC,EAAA2oY,WAAAK,kBAAoBvjY,EAAA0sB,SAAAwL,0BACpBjgB,EAAA,WACA1d,EAAA2oY,WAAkB1mI,oBAAA9C,gBAClB9zF,UAAA,oBAAsB5lK,EAAA0sB,SAAAwL,0BAAAxX,QAAA,CACtBk9B,OAAA,WACAgQ,OAAArzD,EAAA2oY,WAAsBvzH,iBAAA,EACtBrvP,MAAA,IACAmlJ,UAAA,OACAH,KAAA,Y,GAyjBK9sK,QAAQmH,QAAQ,aAAA,EAAeq5B,KAAK/3B,SAASo5B,eAAe,0BAAA,EAA4By/K,SAAA,EArjBhGp2M,OAAAnB,MAAA,C,EAujBS,GAAA,IApjBAugY,EAAa9iY,EAAA0sB,SAAAoF,2BAAA9V,OAAA,SAAA6e,GACpB,OAAAA,EAAAQ,mBAAAR,EAAAS,4B,GAwjBI/gC,EAAG2oY,WAAWJ,uBAAyBA,EAAuB,GApjB/D9iY,EAAA0sB,SAAAwL,0BAAwC3U,OAGxChpB,EAAA2oY,WAAAJ,uBAAoClzW,MAAA5vB,EAAA0sB,SAAAwL,0BAAiC3U,OAFrEhpB,EAAA2oY,WAAAJ,uBAAoClzW,MAAA5vB,EAAA0sB,SAA4BwL,0BAAA,GAAA3U,OAK3B,IAArCu/W,EAAsBl7X,QACtBqQ,EAAA,WACA1d,EAAA2oY,WAAA1mI,oBAAA9C,gBACA9zF,UAAA,oBAAsCrrK,EAAA2oY,WAAIJ,uBAAuBtnW,eAAA,CAujBxDoiB,OAAQ,WArjBTgQ,OAAArzD,EAAY2oY,WAAAvzH,iBAAA,EAClBrvP,MAAA,IACAmlJ,UAAA,OACAH,KAAA,Y,GAGA9sK,QAAAmH,QAAA,aAAA,EAAAq5B,KAAA/3B,SAAAo5B,eAAA,0BAAA,EAAAy/K,SAAA,EACAp2M,OAAAnB,MAAA,C,EACA,GAAA,GA4fD0V,EAAS,WArjBN1d,EAAA2oY,WAAA1mI,oBAAA9C,gBACL9zF,UAAS,YAAA5lK,EAAA0sB,SAAAhM,QAAA,CAujBDk9B,OAAQ,WACRgQ,OAAQrzD,EAAG2oY,WAAWvzH,iBAAA,EArjB/BrvP,MAAgB,IACbmlJ,UAAA,OACIH,KAAA,Y,GA0jBF9sK,QAAQmH,QAAQ,aAAA,EAAeq5B,KAAK/3B,SAASo5B,eAAe,gBAAA,EAAkBy/K,SAAA,EAC9Ep2M,OAAOnB,MAAA,C,EApjBZ,GAAA,E,CAqoBH,SAtjBEg5P,EAAApyP,EAAAnJ,GAwjBAA,EAAQ0sB,SAAS1vB,WAAa,IAAI0hD,KAAK1+C,EAAQ0sB,SAAS1vB,UAAA,EApjB1DgD,EAAS40B,YACPl7B,EAAIoC,KAAA,CACAuM,SAAC,CAAA,EACHvP,WAAA,gCAujBEK,aAtjBG,KACLC,YAAA,+EAujBEsG,OAAQlH,QAAQmH,QAAQsB,SAASC,IAAA,EACjC9B,oBAAqB,CAAA,EACrBgC,OAAQ,CArjBdkT,SAAStU,EAAA0sB,SAAqBoF,2BACxByH,MAAA,CAAA,C,IAECj6B,KAAA,SAAAmH,GACHzG,EAAG0sB,SAAQoF,2BAAkCrrB,EAC3C66X,EAAA,EAujBEsB,EAtjBC5iY,CAAA,EACOuhY,EAAA,EAujBR17H,EAAoBz7D,gBAAgBpqM,CAAA,EAEpCwiY,EAAWphJ,EAAsBma,cAAcv7P,EAAQ0sB,SAAU1sB,EAAQivB,SAAUjvB,EAAQg1B,WAAY,CAAA,EAAMh1B,EAAQ+0B,IAAA,EAAO/0B,CAAA,C,GAK7HA,EAAQi1B,oBArjBVqsW,EAAA,GACHthY,EAAYmjY,iBAAO,CAAA,EAujBfP,EAAgB5iY,CAAA,GArjBTuhY,EAAA,EACT17H,EAAsBtK,cAAAv7P,CAAA,EAwjBpBwiY,EAtjBKphJ,EAAAma,cAAAv7P,EAAA0sB,SAAA1sB,EAAAivB,SAAAjvB,EAAAg1B,WAAA,CAAA,EAAAh1B,EAAA+0B,IAAA,EAAA/0B,CAAA,E,CA2jBX,SAASsiC,EAAmBn5B,EAAOnJ,GAC7BuhY,EAAA,GArjBN17H,EAASvjO,mBAA6BtiC,CAAA,EAwjBpCwiY,EAtjBSphJ,EAAA9+M,mBAAAtiC,EAAAivB,QAAA,CAAA,C,CAyjBX,SAtjBKowL,EAASl2M,EAAAnJ,GAujBZ,IAtjBEmrM,EAAO,IAAUy0L,EAAS5/X,EAAQmrM,QAAA,EAujBpCjxB,EAtjBoBW,mBAAA,EAAwBv7K,KAAA,SAAa+1B,GAujBnDA,GACEpG,EAAW,IAAI0wW,EAAStqW,CAAA,EAC5BmuW,GAAer4L,EAAUl8K,CAAA,GApjB/BirJ,EAAoBa,uBAAA,EAAAz7K,KAAA,SAAA+1B,GACVA,GACCpG,EAAS,IAAO0wW,EAAAtqW,CAAA,EAujBjBmuW,GAAer4L,EAAUl8K,CAAA,GAEzB4yW,EAAStnY,EAAGurQ,OAAOC,KAAA,C,KAO7B,SAASy9H,GAAer4L,EAAUl8K,GAChC,IA1iBWk8K,EAAAl8K,EAujBPutO,EAnkBA8kI,EAAA,GAYOn2L,EAXOA,EAkkBdqxD,GAvjBOvtO,EAXcA,GAkkBU8S,UAAUy6N,oBAC7CjiQ,EAAG2oY,WAAa,CACd/3L,SAtjBIA,EAujBJppK,UAtjBI9S,EAAY8S,UAujBhBy6N,oBAtjBIA,EAujBJpoP,SAtjBIta,EAAA,mBAAA,EAAAm1B,EAAA7a,QAAA,C,EAwjBN6D,EAAS,WACHukP,EAAoBM,eACtBl3F,UAtjBG,oBAAAulC,EAAAzqL,QAAA,CACLk9B,OAAY,WAujBRgQ,OAAQ4uM,EAAoBmT,iBAAA,EAC5BrvP,MAAO,IACPmlJ,UAAW,OACXH,KAAM,Y,GAGV9sK,QAAQmH,QAAQ,aAAA,EAAeq5B,KAAK/3B,SAASo5B,eAAe,oBAAA,EAAsBy/K,SAAA,EAClFp2M,OAAOnB,MAAA,C,EACN,GAAA,GAplBGg/X,EAAA,EA0jBJ17H,EAtjBOxmD,cAAAlU,EAAAl8K,EAHH,CAujBFiJ,0BAtjBEizK,C,CAEG,EAwjBPq3L,EAtjBIphJ,EAAa/hC,cAAAlU,EAAAl8K,CAAA,EAAA,EAAA,C,CAilBrB,SAtjBQgJ,GAAa9uB,EAAYnJ,GAyjB/B,IAQIk4B,EATJl4B,EAAQ0sB,SAtjBC1vB,WAAA,IAAA0hD,KAAA1+C,EAAA0sB,SAAA1vB,UAAA,EAujBLskY,EAAA,GACFthY,EAtjBKmjY,iBAAoB,CAAA,EAujBzBP,EAAgB5iY,CAAA,GArjBZuhY,EAAA,GAujBJvhY,EAtjBOmjY,iBAAmB,CAAA,EAwjBtBjrW,EAA4B,MA/iB9BA,EAgjBEmxF,MAAM1vB,QAAQ35F,EAAQ0sB,SAASwL,yBAAA,EACLl4B,EAAQ0sB,SAASwL,0BAA0Bl4B,EAAQ0sB,SAASwL,0BAA0BtwB,OAAS,GApjBxG5H,EAAA0sB,SAAAwL,6BAInBl4B,EAAAk4B,0BAAmBA,GAwjBrB2tO,EAtjBK5tO,oBAAAj4B,CAAA,GAwjBLwiY,EAAWphJ,EAAsBnpN,oBAAoBj4B,EAAQ0sB,SAAU1sB,EAAQivB,SAAUjvB,EAAQ+0B,IAAA,CAAA,C,CAIrG,SAtjBKo8K,GAAehoM,EAAAnJ,GACfshY,EAAA,IAwjBQC,EAAA,EACT17H,EAAoB10D,eAAenxM,CAAA,EApjBvCwiY,EAASphJ,EAAoBjwC,eAAkBnxM,EAAAivB,QAAA,CAAA,E,CA0jB/C,SAtjBQw0W,GAAet6X,GACnBo4X,EAAA,GACA17H,EAAYyF,eAAA,C,CA0jBhB,SAtjBOvO,GAAmB5zP,EAAAnJ,GAujBpBshY,EAAA,GA1KJ/mY,EAAGmpY,4BAA8B,CAC/BrvX,QAASha,EAAQga,QACjBwqB,mBAyKiC7+B,EAzKL6+B,mBArjBhCoF,iBA8tBqCjkC,EA9tB5BikC,iBACPlC,UA6tBmC/hC,EA7tB/BikC,iBAAmBhV,SAAA8S,UACrBy6N,oBA4tBiCx8P,EA5tBVikC,iBAAqBhV,SAAK8S,UAAU82N,4BAujB3DpuO,kBAtjBM3wB,EAAiB,mBAAA,EAAAO,EAAAga,QAAAD,QAAA,EAujBvB8a,oBAtjBIA,C,EAyjBN30B,EAAGmpY,4BAtjB0Bz/V,iBAAAE,sBAAA5pC,EAAAmpY,4BAAAz/V,iBAAAE,sBAAA6L,KAAA,SAAApsC,EAAAssD,GAujB3B,OAAOtsD,EAtjBCi8B,eAAAqwB,EAAArwB,c,GA0jBV5nB,EAAS,WACP,IACI0rX,EAAgB1iY,SAASo5B,eAAe,4BAAA,EAA8By/K,UACtE8pL,EAtjBKlgY,OAAAC,KAAuB,GAAA,SAAA,4FAAA,EAChCigY,EAAY3iY,SAAO0C,KAAA,EAEnBigY,EAAA3iY,SAAoB83B,MAAA,oDAAA4qW,EAAA,SAAA,EAujBpBC,EAAc3iY,SAASg4B,MAAA,C,EACtB,GAAA,GAqJQsoW,EAAA,EACT17H,EAAoB9I,6BAA6B/8P,CAAA,EApjBrDwiY,EAASphJ,EAAc2b,6BAAA/8P,EAAAikC,iBAAAjkC,EAAA6+B,kBAAA,CAAA,C,CA0jBvB,SAtjBK8+N,GAAMx0P,EAAAnJ,GAujBLuhY,EAAA,EACF17H,EAAoBlI,yCAAyC39P,CAAA,EAE7DwiY,EAAWphJ,EAAsBuc,yCAAyC39P,EAAQikC,iBAAkBjkC,EAAQwrE,uBAAA,CAAA,C,CAKhH,SAtjBQs2T,EAAsBp0V,GAujB5Bm0V,EAtjBItnY,EAAAurQ,OAAYC,KAAA,EACFzmP,KAAAA,IAAVouB,EAAInoC,OACF,GAAAmoC,EAAAnoC,OAAA2jS,WAujBFi5F,EAtjBW,kCAAA,GAwjBXA,EAAa,oDAAA,EACbnpT,QAtjBEjxE,MAAU2lC,CAAA,GA2jBV2zV,EAAA,GAAqB,CAAC9mY,EAAG6lY,kBAC3B7lY,EAAG6lY,gBAAkB,CAAA,EA9qBpBlnH,GAAGkM,UAAUhjD,SAAA,IApjBhB1+N,OAAA0D,SAAYkpH,OAAA,WAAA,EAujBZ+6I,EArjBE9wQ,EAAegmY,kBAAA,G,CAwuCrB,SAAS4B,EAAaz0V,GArjBtBvqC,MAAAuqC,CAAA,C,CAwmBA,SAtjBMqzV,IACAM,EAAA,EAujBFh2H,EAtjBU9wQ,EAAAgmY,kBAAA,GAwjBVgC,EAAA,EAhrBErpH,GAAGkM,UAAUhjD,SAAA,GACf82C,GAAGkM,UAAU6J,WAAA,EAAa3vR,KAAK,WApjBjCijY,EAAA,EACEV,EAAOtnY,EAAAurQ,OAAa10J,QAAA,C,GAClBtpG,MAAGg6X,CAAA,E,CAoxCT,SAASJ,EAAwB3B,GArjB5BA,EACHhnX,aAAGC,QAAgB3e,EAAOga,QAAUtZ,GAAA,2BAAAglY,CAAA,EAEpChnX,aAAYi7C,WAAO35D,EAAAga,QAAAtZ,GAAA,0BAAA,C,CAolBrB,SAtjBI8mY,EAAU10X,GAujBZ5S,EAAG4S,MAtjBKA,EAujBJ5S,EAtjBEspY,cAujBJ5rX,EAtjBS/b,OAAA3B,EAAAspY,YAAA,EAwjBXtpY,EAAGspY,aAtjBY5rX,EAAK,WAwjBlBtf,EAtjBImnB,OAAA,C,EAujBH,GAAA,C,CAGL,SAASgkX,GAAqB36X,EAAOgE,GACnC00X,EAAS10X,CAAA,C,CAGX,SAtjBMk0X,IAujBJ,OAtjBM9mY,EAAAwlY,cAAkBxlY,EAAKo2B,cAAc8vW,E,CAyjB7C,SAASa,IACP,OAAO/mY,EAtjBEwlY,cAAAxlY,EAAAo2B,cAAA+vW,M,CAyjBX,SAASa,IACP,OAtjBIhnY,EAAAwlY,cAAkBxlY,EAAAo2B,cAAcgwW,Q,CAyjBtC,SAtjBS4B,IAujBPG,EAtjBW,IAAA,EAujBXb,EAAStnY,EAAGurQ,OAAO10J,QAAA,C,CAGrB,SAASsxR,EAAe3C,GAEtB2B,EADAnnY,EAAGwlY,YAAcA,CACO,C,CAG1B,SAtjBMe,EAAeiD,IACfxpY,EAAAwlY,cAAgBgE,EAClBxB,GAwjBAG,EAtjBEqB,CAAA,EAujBFpC,IAzjBA,C,CAtYE9B,GApjBJ6C,EAAO7C,CAAA,EAuhBP8B,EAAA,EAljBApnY,EAAGypY,uBAAwBjqY,EAAAmP,IAAA,iCAA4Cg5X,CAAA,EAsjBvE3nY,EArjBE0pY,mBAAOlqY,EAAmBmP,IAAA,2BAAAqyP,CAAA,EAsjB5BhhQ,EAAG2pY,sBArjBCnqY,EAAAmP,IAAA,8BAAAu6X,EAAA,EAsjBJlpY,EAAG+nC,mBAAqBvoC,EAAWmP,IAAI,gCAAiCo5B,CAAA,EACxE/nC,EAAG4pY,yBAA2BpqY,EAAWmP,IAAI,iCAAkC+uB,EAAA,EAC/E19B,EAAG6pY,mBAAqBrqY,EAAWmP,IAAI,2BAA4Bm2M,CAAA,EApjBnE9kN,EAAA8pY,oBAAAtqY,EAAAmP,IAAA,4BAAAioM,EAAA,EAsjBA52M,EAAG+pY,kCAAoCvqY,EAAWmP,IAAI,0CAA2C6zP,EAAA,EApjBjGxiQ,EAAAgqY,8CAAqBxqY,EAAAmP,IAAA,sDAAAy0P,EAAA,EAsjBrBpjQ,EArjBEiqY,yBAAYzqY,EAAAmP,IAAA,sBAAA46X,EAAA,EAujBdnrY,EAAOuQ,IAAI,WAAY,WACrB3O,EAAGypY,uBAAA,EApjBPzpY,EAAA0pY,mBAAA,EACE1pY,EAAG2pY,sBAAA,EACH3pY,EAAA+nC,mBAAA,EAsjBE/nC,EAAG4pY,yBAAA,EACH5pY,EAAG8pY,oBAAA,EApjBP9pY,EAAA+pY,kCAAA,EACE/pY,EAAIgqY,8CAAA,EACFhqY,EAAAiqY,yBAAA,C,sVA2aNhsY,QACGC,OAAO,UAAA,EApjBVK,WAAA,sBAAA4mY,CAAA,EACG3mY,UAAO,YA4oDV,WACE,MAtjBM,CAujBJC,SAtjBI,IAujBJC,MAtjBI,GAujBJH,WAtjBW,sBAujBXK,aAAc,KACdC,YAtjBa,yCAujBbizB,KAtjBM,SAAOpzB,EAAA0G,EAAc2sB,I,EA7lCrB,C,IA6pDZ,CAAA,WACE,aA0BA,SAtjBQm4W,EAAwB7qY,EACK62B,EACE9iB,EACKtT,EAujBKqqY,EArjBP30W,EACEx2B,EACFI,EACzBD,EACyBI,EAujBOnB,EACAqB,GAC/C,IAAIO,EAtjBEC,KAwnBN,SAASmqY,EAtjBUvrB,GAujBjBA,EAtjBqBlvW,eAAA,EAujBjBkvW,EAtjBY5uW,KAAA4uW,EAAA5uW,IAAAm9D,gBAujBdyxS,EAAuBlvW,eACrBkvW,EAAuBjvW,gBAAkB,EAAKivW,EAAuB5uW,IAAIm9D,cAAgB,MAE7Fi9T,EAAA,C,CAGF,SAtjBMA,IAujBArqY,EAtjBEuD,MAAOu+D,SAAK1jE,EAAA4F,QAyjBlB5F,EAAOy3O,YAAA,C,CAmET,SAtjBM/oC,IAujBJ9sM,EAAG+sM,iBAtjBa,CAAA,EAujBhB5tM,EAtjBMuK,KAAA,C,CAoaR1J,EAAGuD,MAAQnF,EAAOmF,MAClBvD,EAAGi/F,gBAtjBa7gG,EAAA6gG,gBAujBhBj/F,EAAGgN,MAtjBG5O,EAAA4O,MA0jBNhN,EAAGsqY,YAcH,WACMtqY,EAAGuD,MAtjBCu+D,SA0jBJ9hE,EAAGi/F,gBAAgB5xF,QACrBhO,EAAIgB,YAAYkqY,wBAAwBvjY,KArjBtC,CACEsnO,gBAAOtuO,EAAWi/F,gBAAA,GAAoBz+F,GAujBtC+rO,qBAtjBSvsO,EAAAi/F,gBAAA,GAAA3hF,KAujBT1N,eAAgB5P,EAAGi/F,gBAAgB,GAAGrvF,eArjBtCw4G,UAAOpoH,EAAAuD,MAAA/C,E,EAET,SAAAI,EAAAC,EAAwBC,GACxBA,IAAArB,EAAmB6H,mBAujBftH,EAAGuD,MAAM+oO,2BAA2B/7N,KAAK3P,CAAA,EACzCypY,EAAA,E,IA7BVrqY,EAAGqqY,eAtjBiBA,EAujBpBrqY,EAAGwqY,eAiFH,SAtjBsB3rB,GAujBpB7+W,EAAGuD,MAAM+oO,2BAtjBUtnM,OAAAhlC,EAAAuD,MAAA+oO,2BAAAxpM,UAAA,SAAA2nW,GAujBjB,OAAOA,EAtjBGjqY,KAAAq+W,EAAWr+W,E,GAujBnB,CAAA,EAEJ6pY,EAAA,C,EArFFrqY,EAAG0qY,eAwFH,SAtjBW7rB,GAujBT7+W,EAAGi/F,gBAAgB99F,QAAQ,SAAUqzV,GAC/BA,EAAGh0V,KAAOq+W,EAAuBvwI,kBACnCuwI,EAAuBjvW,eAAiB4kV,EAAG5kV,eAC3Cy6X,EAAA,E,IA3FNrqY,EAAG2qY,sBAqHH,SAtjB2BtrS,EAAM54F,GAwjB/BzG,EAtjBG4qY,uBAAAvrS,EAwjBHlgG,EAAUoC,KAAK,CArjBjB01E,eAAS,yCAujBL9xE,OAAQlH,QAAQmH,QAAQsB,SAASo5B,eAAep5B,SAASC,IAAA,CAAA,EArjB3DC,YAAQH,EAujBN5B,oBAAqB,CAAA,EArjBvBm4D,WAAY,CAAA,C,GACVj4D,KAAA,SAAemH,GAujBf4gM,EAAA,C,EACC,WACDA,EAAA,C,IAjIJ9sM,EAAG6qY,gCA+FH,SAtjBmCxrS,GAujBjChgG,EAtjBEgB,YAASkqY,wBAAQhqY,OACjB8+F,EACA,SAAAnzF,GACAmzF,EAAmBnzF,EAEnB3B,EADAlL,EAAAmL,KAAqBnK,YAAQyqY,2BAA0BpgY,QAAU,MAAA1K,EAAAuD,MAAA/C,EAAA,EACjE,iCAAgD6+F,EAAgB7+F,GAChEV,EAAAq+B,eAAA,EAujBE/+B,EAAQgK,KAAKmB,CAAA,C,IAtGnBvK,EAAG+qY,mBA4GH,SAA4B3kX,GArjB1B,IAAA7b,EAASlL,EAAAmL,KAAAnK,YAAY2qY,4BAAAtgY,QAAA,MAAA1K,EAAAuD,MAAA/C,EAAA,EAujBrB+J,GAtjBM,SAAS6b,EAujBftmB,EAtjBMq+B,eAAA,EAujBN/+B,EAtjBMgK,KAAAmB,CAAA,C,EAucRvK,EAAG8sM,UAtjBOA,EAujBV9sM,EAAGirY,sBAkEH,SAtjBapsB,GAujBX,IAAIx/Q,EAtjBgBr/F,EAAAi/F,gBAAA55F,KAAuB,SAAQmvV,GAujBjD,OAAOA,EAAGh0V,KAAOq+W,EAAuBvwI,e,GAE1CuwI,EAtjBQjvW,eAAuByvF,EAAcA,EAAAzvF,eAAA,KAujB7CivW,EAtjBetyI,qBAAYltI,EAAAA,EAAA/hF,KAAA,KAujB3B8sX,EAtjB0BvrB,CAAA,C,EA+e5B7+W,EAAGoqY,yCAtjBiBA,EAujBpBpqY,EAAGkrY,gCA2BH,SAtjBkCrsB,GAujBhC,IAAI5uW,EAtjBMjQ,EAAAgN,MAAO3H,KAAA,SAAA4K,GAujBf,OAAOA,EAtjBCzP,KAAAq+W,EAAW5uW,IAAAzP,E,GAwjBrBq+W,EAAuB5mG,SAAWhoQ,EAAMA,EAAIqN,KAAO,KACnDuhW,EAAuBxjW,kBAAoBpL,EAAMA,EAAIm9D,cAAgB,KACrEg9T,EAAyCvrB,CAAA,C,EAhC3C7+W,EAAGmrY,QAmCH,SAAiBtsB,GACXA,EAtjBG5uW,KAAA4uW,EAAA5uW,IAAAzP,KAujBLq+W,EAAuB5uW,IAAMjQ,EAAGgN,MAAM3H,KAAK,SAAU4K,GACnD,OAtjBGA,EAAAzP,KAAAq+W,EAAA5uW,IAAAzP,E,GAGuC,IAA1Cq+W,EAAc5uW,IAAAm9D,gBACdg9T,EAAqBvrB,CAAA,C,0JAqd7B5gX,QACGC,OAAO,UAAA,EACPK,WAtjBQ,0CAAmC2rY,CAAA,EAujB3C1rY,UAtjBK,gCAyjBR,WACE,MAAO,CACLC,SAtjBM,IAujBNI,YAAa,yFACbH,MAAO,CACL6E,MAAO,IArjBPS,OAAG,IAujBHi7F,gBAtjBc,IAujBdjyF,MAtjBE,IAujBF6oO,YAtjBW,G,EAwjBbj3O,aAtjBc,KAujBdL,WAtjBI,yC,EAfyB,C,IAgvBnC,CAAA,WACE,aAsBA,SAtjBM6sY,EAujBJhtY,EACAmB,EACAF,EACAS,EArjBAL,EAujBA6vE,EACAE,EACAD,EACAE,GAEA,IAhiBI47T,EAgiBArrY,EAAKC,KA6BT,SAtjBIqrY,IA6jBFtrY,EAAGurY,kBAtjBW,CAAA,EAujBdlsY,EAAIgB,YAtjBUo3B,UAAA2R,KAAA,CAujBZ5oC,GAtjBIR,EAAAmyB,SAAQ3xB,GAujBZE,OAtjBI,+B,EAujBH,SAtjBG0F,EAAWC,EAAAvF,GACXA,IAAMrB,EAAAsB,cAujBRf,EAAG2qI,UAAYvkI,GApjBjBpG,EAAAurY,kBAAgB,CAAA,EAChBC,EAAA,C,GA2jBFxrY,EAAGyrY,kBAAoB,CAAA,EArjBvBpsY,EAAAgB,YAAQo3B,UAAS2R,KAAa,CAC9B5oC,GAAIR,EAAAmyB,SAAA3xB,GACFE,OAAQ,+B,EACR,SAAA0F,EAAgBC,EAAAvF,GAujBZA,IAtjBKrB,EAAAsB,cACTf,EAAAklD,UAAQ9+C,GAERpG,EAAAyrY,kBAAI,CAAA,EACJD,EAAA,C,GA0jBJ,SAASA,IACPxrY,EAAG0rY,SAAiC,EAAtB1rY,EAAG2qI,UAAUt9H,QAAoC,EAAtBrN,EAAGklD,UAAU73C,M,CA9DxDrN,EAAGsvE,6BAtjB0BA,EAujB7BtvE,EAAGwvE,6BAtjB0BA,EAwjB7BxvE,EAAG0rY,SAAW,CAAA,EACd1rY,EAAGmyB,SAtjBO/zB,EAAS+zB,SAujBnBnyB,EAAG2qI,UAAY,GACf3qI,EAAGurY,kBAAoB,CAAA,EACvBvrY,EAAGklD,UAAY,GACfllD,EAAGyrY,kBAAoB,CAAA,EAnjBvBzrY,EAAAukH,uBA4mBA,SAAgCzjH,GAC9B,OAtjBEvB,EAAA,WAAA,EAAoB,aAAoBgwE,EAAAzuE,EAAA,C,EAggB5Cd,EAtjBEwkH,uBA+mBF,SAAgC1jH,GAC9B,OAAOvB,EAAQ,WAAA,EAAa,aAAekwE,EAAwB3uE,EAAA,C,EApDnEwqY,EAAA,EApjBED,EAAiCjtY,EAAAuQ,IAAc,8BAAqB28X,CAAA,EAwjBtEltY,EAAOuQ,IAAI,WAAY,WACrB08X,EAAA,C,kLAxDNptY,QACGC,OAtjBO,UAAA,EAujBPK,WAAW,uCAAwC6sY,CAAA,EACnD5sY,UAAU,6BAGb,WACE,MAtjBI,CAujBFC,SAtjBI,IAujBJI,YAtjBI,mFAujBJH,MAAO,CACLyzB,SAtjBE,G,EAwjBJvzB,aAtjBI,KAujBJL,WAAY,sC,EAX2B,C,IA0G7C,CAAA,WACE,aA0BA,SAASotY,EAAyCtsY,EACA62B,EACA9iB,EACAtT,EArjBZd,EACfI,EACWD,EACII,EACjBnB,EACRyhN,GAujBX,IAAI7/M,EAtjBEC,KAklBN,SAASy/W,IACP,OAAO1/W,EAAGuD,MAAMjB,UArjBlBtC,EAAAuD,MAAS68M,kBAAAP,EAAkCu0B,iC,CA8jB3C,SAAS1pJ,EAAcpqD,GACrB,IArjBFyE,EAqjBsB,IAAhBzE,EAAKtX,QAAgB/qB,CAAAA,QAAQq6C,YAAYhY,EAAKtX,MAAA,IArjBpD+b,EAAS/kC,EAAAuD,MAAAg0B,2BAAyBuL,UAAA,SAAAytD,GAChC,OAAQA,EAAA/vF,KAAA8/B,EAAA9/B,E,GAENR,EAAAuD,MAAYi3B,MAAAx6B,EAAAuD,MAAAi3B,KAAAh6B,GACZ8/B,EAAAtX,OAAchpB,EAAA4rY,gCAAA7mW,GAAA/b,OAEdhpB,EAAAuD,MAAQg0B,2BAA0ByN,OAAKD,EAAA,CAAA,GAyjBzC3mC,EAtjBIy3O,YAAA,C,CAwgBN71O,EAAGuD,MAtjBMnF,EAAAmF,MAujBTvD,EAAG0nC,eAAiBtpC,EAAOspC,eAC3B1nC,EAAG+hB,WAAa3jB,EAAO2jB,WACvB/hB,EAAG4rY,gCAtjB8B3tY,QAAAye,KAAiB1c,EAAAuD,MAAAg0B,0BAAA,EAyjBlDv3B,EAAG6rY,SAtjBQ,CAAA,EA0jBX7rY,EAAG0/W,8BAAgCA,EACnC1/W,EAAG8rY,sCAmBH,SAA+CxrW,GAC7C,MAAO,CAACA,EAAKpG,uBArjBfoG,EAAStX,QAAA02V,EAAA,C,EApBT1/W,EAAA0qF,cAASA,EAujBT1qF,EAtjBE+rY,iBA0lBF,SAtjBIjrB,GAujBF,CAAA,IACM/7U,EADN,GAtjBG/kC,EAAAuD,MAAUi3B,MAAQx6B,EAAAuD,MAAAi3B,KAAAh6B,GAKvB,OAkjBQukC,EAAQ/kC,EAAGuD,MAAMg0B,2BAA2BuL,UAAU,SAAUytD,GAClE,OAAOA,EAAE/vF,KAAOsgX,C,GAnjBb9gX,EAAA4rY,gCAAsB7mW,GAAA/b,M,GA6gB/BhpB,EAAGssM,6BA8CH,SAtjBgChsK,GAujB1BA,EAAKtX,OAAS,EAChBsX,EAAKtX,QAAU,EApjBjBsX,EAAAA,EAAItX,OAwjBJ0hE,EAtjBOpqD,CAAA,C,EAmgBTtgC,EAAG21M,kBAsDH,SAA2BjxL,GAEL,KAAhB9V,MAAMgnM,OACKlxL,EAAO1Z,OArjBf6qM,KAAA,C,EAzDT71M,EAAAknE,UAmnBA,SAtjBiB5mC,EAAA75B,GAujBf2M,EAAYJ,QAAQ,2BAA4B,CAC9CxS,GAAM8/B,EAAKtmB,QACXtG,WAAc,wB,GACb3O,KAAK,SAAUnE,GArjBpBZ,EAAAgtM,qBAA0BpsM,EACxBZ,EAAA22J,uBAA4Br2H,EAAA+U,gBAujB1Br1C,EAAG+sM,iBAAmB,CAAA,EAEtB5tM,EAAUoC,KAAK,CArjBnB01E,eAAS,6BACH9xE,OAAOlH,QAAAmH,QAAAsB,SAAAo5B,eAAAp5B,SAAAC,IAAA,CAAA,EACTC,YAAaH,EAujBX5B,oBAtjBG,CAAA,EACLm4D,WAAa,CAAA,C,GAujBVj4D,KAAK,SAAUmH,GAChB/M,EAAUuK,KAAA,C,EACT,WACDvK,EAAUuK,KAAA,C,MA9EhB1J,EAtjBEgsY,gBAmFF,WACE7sY,EAAIuK,KAAA,C,EAmeN1J,EAAGo3M,aA4FH,SAtjBe92K,GACTtgC,EAAAuD,MAAAm8W,8BAAA,IAujBFp/U,EAtjBE0yK,aAAU,CAAA,E,EAydhBhzM,EAAG+yM,yBAiGH,SAAkCzyK,GAChCA,EAAK0yK,aAAe,CAAA,EArjBtB1yK,EAAAgkV,sBAAShkV,EAAwBpG,qBAAA,EAC/B97B,EAAIy3O,YAAA,C,EAmdN71O,EAAGisY,sBAsGH,SAtjB4B3rW,GAujB1BA,EAAK6wI,YAAY7wI,EAAKlwB,QAAA,EACtBhS,EAAOy3O,YAAA,C,EA7pBT71O,EAAAksY,gBA2oBA,SAtjBgB5rW,GAujBd,OAAOtgC,EAtjBEuD,MAAIm8W,8BAAA,GAA8B,CAAA1/W,EAAAuD,MAAAs9W,gBAAAvgV,EAAA9/B,EAAA,GAAA8/B,EAAA89U,a,sIAsa/CngX,QACGC,OAAO,UAAA,EACPK,WAAW,2CAA4CotY,CAAA,EArjBxDntY,UAAS,iCAyjBX,WACE,MAAO,CACLC,SAAU,IArjBZI,YAAS,2FACPH,MAAI,CACF6E,MAAA,IAujBAS,OAtjBK,IACL+d,WAAA,IAujBA8zN,YAtjBK,IACLZ,eAAW,G,EAwjBbr2O,aAAc,KACdL,WAAY,0C,EArkBmB,C,IAytBrC,CAAA,WACE,aA4BA,SAAS4tY,EACP9sY,EACA62B,EACA9iB,EACAtT,EArjBAd,EAujBAI,EACAD,EACAI,EArjBAnB,EAujBAa,EACA09W,GApjBA,IAAA38W,EAASC,KA4FT,SAAGuvI,IACAxvI,EAAAuD,MAAAu+D,SAAkB1jE,EAAO4F,SA2jB1BhE,EAAGuD,MAAMi+B,0BAA0BrgC,QAAQ,SAAUukC,GAtjBpDA,EAAA2mK,eACA3mK,EAAA2mK,aAAiB,E,GAGpBjuM,EAAGy3O,YAAA,E,CAmdH71O,EAAGuD,MAAQnF,EAAOmF,MArjBlBvD,EAAA0nC,eAAStpC,EAAAspC,eA2jBT1nC,EAtjBE+6C,WAokBF,WACM/6C,EAAGuD,MAAMu+D,SAAwC,IAA7B9hE,EAAG0nC,eAAer6B,SAMtCrN,EAAGuD,MAAMmxB,UACP10B,EAAGuD,MAAMwzO,yBACX53O,EACGoC,KAAK,CArjBPhD,WAAY,mCACZK,aAAA,KACLC,YACO,qGACPsG,OAAYlH,QAAAmH,QAAAsB,SAAAC,IAAA,EACZ9B,oBAAc,CAAA,C,GAERE,KAujBE,SAAU8+G,GACRxkH,EAAIgB,YAAYw5I,uBAAuB7yI,KACrC,CACEs+B,eAAgBtlC,EAAG0nC,eAAe,GAAGlnC,GACrCqgN,oBAAqB7gN,EAAG0nC,eAAe,GAAGpqB,KAC1C0L,OAAQ,EACRo/F,UAAWpoH,EAAGuD,MAAM/C,GACpBo/B,kBAAmBikF,C,EApjB1B,SAAAjjH,EAAAC,EAAAC,GACX,MAAAA,GAujBoBd,EAAGuD,MAAMi+B,0BAA0BjxB,KACjC,IAAIosW,EAAsB/7W,CAAA,C,KAMpC,Y,EAgBNZ,EAAGuD,MAAMi+B,0BAA0BjxB,KACjC,IAAIosW,EAAsB,CACxBr3U,eAAgBtlC,EAAG0nC,eAAe,GAAGlnC,GAtjBtCqgN,oBAAA7gN,EAAA0nC,eAAwC,GAAApqB,KAwjBvC0L,OAAQ,EACRqjL,aAAc,EACdjkF,UAAWpoH,EAAGuD,MAAM/C,E,MAxE5BR,EAtjBEwvI,cAAYA,EAujBdxvI,EAAGs7C,cAxdH,SAAek0J,GACZxvM,EAAAuD,MAAAu+D,UAGH9hE,EAAGuD,MAAAi+B,0BAAUwD,OAwjBThlC,EAAGuD,MAAMi+B,0BAA0BsB,UAAU,SAAU4C,GACrD,OAAgB3gB,KAAAA,IAAZ2gB,EAAKllC,IAAiDukB,KAAAA,IAA7ByqL,EAAsBhvM,GAtjBhDklC,EAAA0mW,YAAc58L,EAAA48L,UAEnB1mW,EAAAllC,KAAAgvM,EAAAhvM,E,GAyjBA,C,EAGFgvI,EAAA,E,EA5GFxvI,EAAGqsY,cA+GH,SAvjBQjoW,GAwjBN,IAAIkoW,EAvjBatsY,EAAGuD,MAAM2hC,qBAAA,EAwjBO,IAA7B9pB,WAAWkxX,CAAA,IACbloW,EAvjBYioK,aAAUjxL,WAAkB8a,EAAAoL,YAwjBtClmB,WAvjBMkxX,CAAA,EAAWloW,EAAYioK,Y,IA0jBjC78D,EAAA,C,EA3qBFxvI,EAAAusY,qBA8qBA,WACE,MAAA,EACIvsY,EAAGuD,MAAMi+B,2BAtjBfxhC,EAASuD,MAAAi+B,0BAAgCn0B,QACnCrN,EAAAuD,MAASm9B,kBAAqB1gC,EAAAuD,MAAKm9B,iBAAArzB,QACrCrN,EAAAuD,MAAOo6B,0B,EA2bX39B,EAtjBEwsY,gBA2jBF,WACEpuY,EAtjBEy3O,YAAA,C,EAijBJ71O,EAtjBE22M,qBAqrBF,SAvjBE81L,GAwjBAxtY,EAAOiD,GAAG,4BAA6B,CAAE1B,GAAIisY,CAAA,CAAA,C,EA/H/CzsY,EAAG0sY,6BAkIH,SAvjBoChnW,GAwjBlC,OAvjBEtnC,EAAA4F,QAAuB0hC,EAAAg4U,mBAAoBh4U,EAAUg4U,kBAAKrwW,QAAAq4B,EAAAhE,yBAAAgE,EAAAhE,wBAAAC,e,yIA6XhE1jC,QACGC,OAAO,UAAA,EACPK,WACC,yCArjBF4tY,C,EAwjBC3tY,UAAU,+BAGb,WACE,MAAO,CACLC,SAAU,IArjBZI,YACE,uFAujBAH,MAAO,CACL6E,MAAO,IArjBXmkC,eAAS,IACP1jC,OAAO,IAujBL6xO,YAAa,G,EApjBjBj3O,aAAS,KACPL,WAAW,wC,EAuiB8B,C,IAyL/C,CAAA,WACE,aAoCA,SAASouY,EAAoCttY,EAtjBnB62B,EACmB9iB,EACFtT,EACZd,EACvBI,EAwjBqCD,EACAI,EACAnB,EACAu3E,EAtjBF12E,EACCoV,EACtCnV,EACkByG,EACC+X,EACcowE,EACnBh4D,EACJilE,EACKvlE,EAwjBwBqqL,EACA7pL,EACAo1B,EACA3rD,EACAmmB,EAtjBTqQ,EACDilE,EACbF,EACVgpB,GAwjBV,IAvjBEhkH,EAAAC,KAwtBF,SAzjBEw8F,EAAc+C,EAAAC,GACd,IA8jBIE,EA9jBJ3/F,EAAA4/F,sBA6jBA5/F,EAAG4/F,oBAAsB,CAAA,EACrBD,EAAgB3/F,EAAGo8F,mBAAqBp8F,EAAGo8F,mBAAmB57F,GAAK,KAxjB3Ei/F,IA0jBME,EAAgBF,EAAYj/F,IAG9BnB,EAAIgB,YAAYw8F,wCAzjB8B71F,KA0jB5C,IAAI+zF,EAA+B,CACjC8E,aAAcF,EACdjH,cAAe,I,GACb,SAAS+G,EAAap5F,EAAIvF,GAC5Bd,EAAG4/F,oBAAsB,CAAA,EAxjBtB9+F,IAAArB,EAAA6H,mBA0jBDtH,EAAG0kH,YAAYkjQ,kCAAkCnoR,CAAA,EAC7CD,KAxjBTx/F,EAAQ0kH,YAAOynH,qDAAA,EAAAhrO,QAAA,SAAA+vE,GACf,CAAAA,EAAiB81S,oCAAO91S,EAAAk7J,eACxBl7J,EAAa81S,mCAAOvnR,EAAAj/F,G,GA2oChBR,EAAG67F,2BAxjBN77F,EAAA0kH,YAAA8jQ,mBAAA,GA4jBAokB,EA3jBY5sY,EAAA0kH,WAAA,C,IAuChB,SAASxtD,EAAQwtD,GAxjBjB,GAAmC,WAAnCA,EAASygQ,gBAA0B,kBAAAzgQ,EAAAygQ,eAAA,CA0jB/B,GAAI,CAACzgQ,EAAY2gQ,oBAvjBjB,MAAI,EADF3gQ,EAAM4gQ,yBAAc,CAAA,GA4jBtB,GAAkD,IAA9C5gQ,EAAYiiQ,4BAAA,EAEd,MAAO,EADPjiQ,EAAYmoR,oBAAsB,CAAA,E,CAItC,MAzjBE,CAAA,C,CA6tBJ,SAASC,EA1jBe57T,GA2jBtBlxE,EAAG+sY,cAAgB,CAAA,EACnB77T,EAAMwZ,cAAA,C,CAOR,SA1jBQsiT,EAAQtoR,EAAA7jH,GA2jBd,IAOIshP,EAqBAzmN,EA5BC17B,EA1jBCuD,MAAAqoO,uBAAA,GA6jBD10K,EAAQwtD,CAAA,IAITy9H,EAAU,CACZ3hP,GAAIR,EAAGuD,MAAM/C,GACbkkH,YAAaA,EAAYlkH,GACzBysY,YAAavoR,EAAYmiQ,uBAAA,EACzBqmB,kBAAmBxoR,EAAYuiQ,2BAAA,EAzjBnCkmB,sBAAyBzoR,EAAA2gQ,oBACvB34W,OAAO1M,EAAMotY,UAAW,OAAO1oR,EAAQygQ,eA4jBrCxgQ,wBAAyB3kH,EAAGotY,UAAY,KAAO1oR,EAAYC,wBAC3D7jB,aAAc9gG,EAAGotY,UAzjBnBC,YAASrtY,EAAAotY,UAAA1oR,EAA0BoiQ,sBAAA,EAAwB,KACzDwmB,kBAAUttY,EAAAotY,UAAc1oR,EAAAqiQ,2BAAA,EAAA,KA2jBxBhmR,6BA1jBsB/gG,EAAA27F,gCA2jBtBsF,kBAAmBjhG,EAAGkhG,iBACtBC,iBAAkBnhG,EAAG87F,4B,GAEnB4oB,EAAYyjQ,mBAAA,GAAwBzjQ,EAAY2jQ,qBAAA,KAClDlmI,EAAQ0iI,uCAAyCngQ,EAAYY,iDAG/DtlH,EA1jBEgE,OAAA,CAAA,EA2jBE03B,EAAWr8B,EAAIgB,YAAYwiH,qBAzjB5B7iH,EAAAotY,YACD1xW,EAASr8B,EAAAgB,YAAAwrO,oBA2jBTsW,EA1jBM3hP,GAAKkkH,EAAOlkH,IA6jBpBk7B,EA1jBIn7B,OAAY4hP,EAAOthP,CAAA,E,CAupBzB,SAAS4mX,IACP,OAAOznX,EAAGotY,WAAaptY,EAAG0kH,YAAY+iQ,qBAAA,C,CAkJxC,SAASmlB,EAAkBloR,GACpB1kH,EAAGotY,WAGHptY,EAAG27F,iCAIRqxS,EACEtoR,EACA,SAAU9jH,EAAUyF,EAAIvF,GAxjBxB,GAFJd,EAASohG,wBAAsB,CAAA,EACzBphG,EAAGgE,OAAA,CAAA,EACLlD,IAAarB,EAAgBsB,YAAa,CA8jBtC,IADA,IAaM2/F,EAbFC,EAAM,GACDjtD,EAAI,EAAmB3uB,KAAAA,IAAhBnkB,EAAS8yC,GAAkBA,CAAA,GA1jB1CitD,GAAA//F,EAAA8yC,GAGF1zC,EAAA67F,yBA4jBGz9F,EAAOm8B,MAAM,iCAAkC,CAC7ComE,IAAKA,C,IAKHF,EAAe,6FAA+FE,EAAM,QACpHD,EAAcv3F,OAAOC,KAAK,GAAI,SAAU,6FAAA,GA1jBjD1C,SAAsB83B,MAAA,iHAAAiiE,EAAA,gBAAA,EACrBC,EAAgBh6F,SAAGg4B,MAAA,GA8jBjBtgC,EAAOm8B,MAAM,sDAAA,EACbl7B,EAAIgB,YAAYo3B,UAAUz2B,IA1jB5B,CACER,GAAAR,EAAAuD,MAAA/C,E,EAEF,SAAA4F,EAAeC,EAAAvF,GACbA,IAASrB,EAAiBsB,cACzBf,EAAAuD,MAAA+d,OAAsBy0G,OAAA/1H,EAAAuD,MAAA,IAAAiyB,EAAApvB,CAAA,CAAA,E,OAGnB,CA4jBJ,IAGMo1B,EAhjBD+xW,EAdHzsY,IAAGrB,EAAYmjB,sBAAAhiB,EAAA4M,QAAAoY,EAA+D4nX,wCA4jB9ExuY,EA3jBOuC,KAAMvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAsC,WAAA,EAAM,+CAAA,CAAA,EAAcmC,SAAA,WAAA,CAAA,EACnEd,EAAM46B,QA4jBNA,EAAS,GACb56B,EAAS46B,OAAOr6B,QA1jBhB,SAAAqM,GA4jBI,IAAIu0F,EAAY,UAAYv0F,EACxB2yF,EAAkB5gG,EAAQ,WAAA,EAAawiG,CAAA,EAC3CvmE,GAAUumE,IAAc5B,EAAkB3yF,EAAQ2yF,C,GAxjBvDnhG,EAAAuC,KAAAvC,EAAkBwC,OAAA,EAAAC,YAAA+5B,CAAA,EAAgC95B,SAAA,WAAA,EAAAiL,UAAA,GAAA,CAAA,GAEvD/L,EAAA+3B,OACS40W,EAAa7uX,KAAQ6L,MAAA3pB,EAAA+3B,MAAA3b,UAAApc,EAAA+3B,MAAAogB,QAAA,GAAA,CAAA,CAAA,EACxB/5C,EAAWuC,KAAAvC,EAAYwC,OAAA,EAAAC,YAAa8rY,EAAA//X,MAAAqV,OAAA,EAAAnhB,SAAA,WAAA,CAAA,GA6jBlC1C,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,IAuM9G,SAASmvO,EAAehvI,GACtBxiG,EAAI04G,gBAAgBlW,0BAA0BnnF,OAC5C,CA1jBJla,GAASqhG,EAAyBrhG,E,EAE9B,SAAAI,EAAAyF,EAAAvF,GA4jBMA,IAAWrB,EAAYkb,qBA1jB3B3a,EAAA0kH,YAAYhsB,cAAA,KACd14F,EAAA0kH,YAAYqgQ,6BAAkB/kX,EAAA0kH,YAAAqgQ,6BAAAtjW,OAAA,SAAAgsX,GAC9B,OAAYA,EAAAjtY,KAAAqhG,EAAiBrhG,E,GA6jBzBxB,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,mCAAA,CAAA,EAAsCmC,SAAS,WAAA,CAAA,GAzjBxH1C,EAASuC,KAAAvC,EAAmBwC,OAAA,EAAAC,YAAalC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAErC1B,EAAAk8F,aAAA,CAAA,C,GAh9BJl8F,EAAAuD,MAASnF,EAAAmF,MAwjBTvD,EAAG0kH,YAActmH,EAAOsmH,YACxB1kH,EAvjBE0nC,eAAGtpC,EAAAspC,eAwjBL1nC,EAAG+hB,WAAa3jB,EAAO2jB,WACvB/hB,EAvjBEy7F,cAAer9F,EAAAq9F,cAwjBjBz7F,EAAG0tY,kBAvjBiBtvY,EAAAsvY,kBAwjBpB1tY,EAAG2tY,sBAvjBiBvvY,EAAQuvY,sBAyjB5B3tY,EAAGotY,UAvjBChvY,EAAAgvY,UAwjBJptY,EAAG4tY,2BAvjBa,GAwjBhB5tY,EAAG6tY,sBAvjBiB,GAwjBpB7tY,EAAGg8F,qBAvjBC,GAwjBJh8F,EAAG27F,gCAvjBc,KAwjBjB37F,EAAG8tY,oBAvjBC,KAyjBJ9tY,EAAGo8F,mBA7WoB,IAAjBp8F,EAAAy7F,cAAiBpuF,OA4jBW,IAA5BrN,EAAGy7F,cAAcpuF,QAGdrN,EAAGo8F,oBAFDp8F,EAAGy7F,cAAc,GA5jBjB,KA6WXz7F,EAAG+tY,+BAAiC,GAtjBpC/tY,EAAA+rC,eAAS,GAwjBT/rC,EAvjBE0lX,YAAG,GAwjBL1lX,EAvjBE+sY,cAAU,CAAA,EAwjBZ/sY,EAAGguY,qBAAuB,CAAA,EAC1BhuY,EAAGgtM,qBAAuB,KAC1BhtM,EAAG+sM,iBAAmB,CAAA,EACtB/sM,EAAGiuY,aAAe,oDAtjBrBjuY,EAAAk2W,gBAAWp2W,EAAAga,QAAAw8I,iBAAAx9G,YAAA,EACV94C,EAAAkuY,WAAApuY,EAAAga,QAAA05C,YAAA1a,YAAA,EAwjBE94C,EAAG4/F,oBAAsB,CAAA,EACzB5/F,EAAGohG,wBAA0B,CAAA,EAvjB/BphG,EAAAivO,gCAAAnvO,EAAAga,QAAAwiF,uBAAArmE,EAAAsmE,SAAA,EAyjBEv8F,EAxjBCmuY,+BAAO,CAAA,CAAA/vY,EAAAs9F,yBAyjBR17F,EAxjBCouY,gCAAW,CAAA,EAyjBZpuY,EAxjBCk8F,aAAU,CAAA,EAIXl8F,EAAAquY,oBAoTA,SAAA3pR,GACA1kH,EAAAuD,MAAAqoO,uBAAA,GAGAlnH,EAAAshQ,cAAA,IACIthQ,EAAKwgQ,gBAAA,CAAA,EA2jBLxgQ,EAAYygQ,eAAiB,W,EA3TjCnlX,EAxjBEsuY,gBAu3BF,SAAyB5pR,GAClB1kH,EAAGuD,MAAMqoO,uBAAA,IAvjBblnH,EAAaonH,UAAA,GAAApnH,EAAA0hQ,qBACb1hQ,EAAAwnH,oBAAA,C,EAuPHlsO,EAxjBEuuY,yBAqUF,SAAqB7pR,GACrB1kH,EAAGsuY,gBAAA5pR,CAAA,EACAA,EAAAwgQ,kBA2jBCxgQ,EAAYsnH,oBAAsB,CAAA,E,EAzUtChsO,EAxjBEwuY,kBAs4BF,SAA2B9pR,GAzjB3B1kH,EAASuD,MAAAqoO,uBAAA,IA6jBHlnH,EAAYuhQ,YAAA,GAAiBvhQ,EAAY2hQ,oBAAA,IAC3C3hQ,EAAY0jQ,sBAAA,C,EAlVhBpoX,EAAGyuY,kBAsVH,SA1jBiB/pR,GACX1kH,EAAAuD,MAAAqoO,uBAAA,IA6jBAlnH,EA1jBI85P,YAAA,GAAc95P,EAAA6hQ,oBAAA,KA2jBpB7hQ,EA1jBMwgQ,gBAAA,CAAA,EA2jBNxgQ,EA1jBQygQ,eAAA,SA4jBRzgQ,EA1jBMY,gDAAqBnkH,QAAA,SAAA+vE,GA2jBzBA,EAAMk7J,aAAe,EACrBl7J,EA1jBG04S,YAAA,C,GA4jBL5pX,EAAG+sY,cA1jBS,CAAA,E,EAyNhB/sY,EAAG0uY,yBAqWH,SA1jBwBhqR,GA2jBjB1kH,EAAGuD,MA1jBMqoO,uBAAA,GA6jBVlnH,EA1jBQ+5P,mBAAA,IA2jBV/5P,EA1jBYwgQ,gBAAe,CAAA,EA2jB3BxgQ,EAAYygQ,eA1jBW,iB,EAgN3BnlX,EAxjBE2uY,uBAg7BF,SA1jB6BjqR,GA2jB3B,OAAOA,EA1jBCqhQ,YAAA,GAAwBrhQ,EAAek6P,YAAA,GAAGl6P,EAAAohQ,qBAAA,C,EAkMpD9lX,EAxjBE4uY,kBAkxBF,SAzjBOlqR,GACA1kH,EAAAuD,MAAAqoO,uBAAA,GAGHlnH,EAAUqhQ,YAAA,IA0jBVrhQ,EAzjBEygQ,eAAgB,SA0jBlBzgQ,EAzjBUwgQ,gBAAgB,CAAA,EA2jB1BxgQ,EAzjBEY,gDAAqBnkH,QAAA,SAAA+vE,GACrBA,EAAAk7J,aAAY,EA0jBZl7J,EAzjBM04S,YAAA,C,GA2jBR5pX,EAzjBG+sY,cAAY,CAAA,E,EAoVnB/sY,EAAG6uY,kBAyOH,SAA2BnqR,GACpB1kH,EAAGuD,MAAMqoO,uBAAA,GAGVlnH,EAAYk6P,YAAA,IACdl6P,EAAYwgQ,gBAAkB,CAAA,EAC9BxgQ,EAAYygQ,eAAiB,S,EA9OjCnlX,EAAG8uY,2BAkPH,SAAoCpqR,GAC7B1kH,EAAGuD,MAAMqoO,uBAAA,GAtjBZlnH,EAAK25P,qBAAA,GAAer+W,EAAAuD,MAAA86W,qBAAA,IA0jBpB35P,EAAYwgQ,gBAAkB,CAAA,EAC9BxgQ,EAAYygQ,eAAiB,gB,EAvPjCnlX,EAAG+uY,cA2PH,SAzjBOrqR,GACL,IAIA//G,EAJA3E,EAAOgE,SAIPW,EAAKxF,EAAiBwF,QAAA,EACtBC,MAAOrF,EAAA,WAAA,EAAA,8BAAA,CAAA,EA0jBJkC,YAAYlC,EAAQ,WAAA,EAAa,sCAAA,CAAA,EACjCuF,GAAGvF,EAAQ,WAAA,EAAa,eAAA,CAAA,EACxBoC,OAAOpC,EAAQ,WAAA,EAAa,gBAAA,CAAA,EAvjBpCJ,EAAYoC,KAAAoD,CAAA,EAAAI,KAAA,WACX/E,EAAAgE,OAAA,CAAA,EA2jBM0Z,EAAS,WAzjBf1d,EAAAgE,QAII3E,EAAAgB,YAAAwrO,oBAAAkjK,cA2jBM,CAAEvuY,GAAIkkH,EAAYlkH,EAAA,EAzjBzB,SAAU4F,EAAAC,EAAAvF,GA2jBDd,EAAGgE,OAAS,CAAA,EACRlD,IAAWrB,EAAYsB,YAzjB9B/B,EAAAuC,KAAAvC,EAAAwC,OAAA,EACAC,YAAAlC,EAAA,WAAA,EAAA,wCAAA,CAAA,EACKmN,OAAAnN,EAAA,WAAA,EAAA,iBAAA,CAAA,EACVoN,UAAA,GAAA,EACEC,gBAAA,CAAA,CAAA,EACKlL,SAAA,WAAA,CAAA,EAAAqD,KAAA,SAAAnE,GACE,OAAAA,GACPiM,SAAgBC,OAAA,C,GA6jBY,MAAXhM,GAAkBsF,GAAWA,EAAQoH,MAzjBxDxO,EAAcuC,KAAAvC,EAAAwC,OAAA,EACFC,YAAAlC,EAAA,WAAA,EAAA,UAAA6G,EAAAoH,KAAA,CAAA,EA2jBC9L,SAAS,WAAA,CAAA,EAEZ1C,EAASuC,KAAKvC,EAASwC,OAAA,EACpBC,YAAY,UAAYlC,EAAQ,WAAA,EAAa,uCAAA,CAAA,EAzjBrDmC,SAAA,WAAA,CAAA,C,IAIP,GAAA,C,KAoRA1B,EAAGgvY,mBAwWH,SAA4BtqR,GACrB1kH,EAAGuD,MAAMqoO,uBAAA,GAGVlnH,EAAY4hQ,mBAAA,IACd5hQ,EAAYwgQ,gBAAkB,CAAA,EAC9BxgQ,EAAYygQ,eAAiB,U,EAr6BnCnlX,EAAAivY,kBA4qCE,SA3jBWvqR,GA4jBTsoR,EACEtoR,EACA,SAAUt+G,EAASC,EAAIvF,GACjBA,IAAWrB,EAAYsB,YACzBf,EAAGuD,MAAQ+d,OAAOy0G,OAAO/1H,EAAGuD,MAAO,IAAIiyB,EAASpvB,CAAA,CAAA,EA1jBnDtF,IAAsBrB,EAASy4B,4BAC7Bl5B,EAAAuC,KAAAvC,EAAAwC,OAAA,EAA2BC,YAAYlC,EAAW,WAAA,EAAA,gCAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAClDZ,IAAArB,EAAsBmjB,sBAAkBxc,EAAAoH,QAAAoY,EAAA4nX,wCA4jBvCxuY,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,+CAAA,CAAA,EAAkDmC,SAAS,WAAA,CAAA,EACnHZ,IAAWrB,EAAYkE,kBA1jBnCyC,EAAAoH,QACIixE,QAAI5F,IAAAzyE,CAAA,EACTk2B,EAAel2B,EAAAoH,MA4jBLmsU,EAAuBvzU,EAAQuzU,sBAAwB,KAC3Dx6U,EAAUoC,KAAKpC,EAAUyJ,MAAA,EA1jB1B/D,oBAAA,CAAA,CAAA,EACFM,OAAYlH,QAAAmH,QAAAsB,SAAAC,IAAA,CAAA,EACf/B,MAAArF,EAAkB,WAAA,EAAA,UAAA+8B,CAAA,GAAAq9S,EAAA,KAAAA,EAAA,IAAA,GAAA,EA4jBXzyU,YAAY3H,EAAQ,WAAA,EAAa,UAAY+8B,EAAa,OAAA,CAAA,EACxDx3B,GAAGvF,EAAQ,WAAA,EAAa,eAAA,CAAA,CAAA,GAxjB/BP,EAAAuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA6jBA1B,EAAGgE,OAAS,CAAA,C,IApsClBhE,EAAA8sY,kBAAAA,EACA9sY,EAAAkvY,0BAg7BA,SA1jBah+T,GA2jBXA,EA1jBI44S,sBAAI54S,EAAsB01S,kBAAA,C,EAtXhC5mX,EAAAk3D,QAAAA,EACAl3D,EAAAmvY,gBAw9BA,SAAyBzqR,GACvB1kH,EAAG8tY,oBAA8D,OAAxCppR,EAAYC,wBAAmCD,EAAYC,wBAA0B3kH,EAAGuD,MAAMihC,iBAAiBhkC,GAzjBxIR,EAAAuD,MAAAqoO,uBAAA,IAGFlnH,EAASwgQ,gBAAc,CAAA,EACrBxgQ,EAAIygQ,eAAwB,mB,EAna9BnlX,EAAAknE,UAg+BA,SA1jBiB5mC,EAAA75B,GA2jBf2M,EAAYJ,QAAQ,2BAA4B,CAC9CxS,GAAM8/B,EAAKtmB,QAzjBbtG,WAAA,wB,GA2jBG3O,KAAK,SAAUnE,GAChBZ,EAAGgtM,qBAAuBpsM,EAzjB9BZ,EAAA22J,uBAAgCr2H,EAAA+U,gBAC9Br1C,EAAA+sM,iBAAA,CAAA,EA4jBE5tM,EA1jBMoC,KAAM,CACVhD,WAAS,mCACVK,aAAS,KA2jBRC,YAAa,0EACbsG,OAAQlH,QAAQmH,QAAQlG,EAAUmG,KAAK,MAAA,CAAA,EACvCR,oBAAqB,CAAA,EAzjB3BkI,YAAS,CAAA,EACPlG,OAAU,CA2jBJ+C,OAAQ,CACNojM,qBAAsBhtM,EAAGgtM,qBAzjB1Br2C,uBAAA32J,EAAA22J,uBACAo2C,iBAAkB/sM,EAAA+sM,iBA2jBjBhrL,WAAY/hB,EAAG+hB,U,QAp/BzB/hB,EAAAovY,mBAicF,SAAA1qR,GACG,OAAOA,EAAAqnH,sCAAArnH,EAAAsnH,sBAAAhsO,EAAAivO,+B,EAjcRjvO,EAAA2B,OA+/BA,SAAgB+iH,GACV1kH,EAAGotY,YA1jBXhvY,EAASm8B,MAAA,sDAAA,EACPv6B,EAAOotY,UAAA,CAAA,GAELptY,EAAA0tY,kBAAa,CAAA,EACbhpR,EAAOyiQ,qBAAA,EA4jBPziQ,EA3jBSsnH,oBAAA,CAAA,EAEE,OAAThsO,EAAA8tY,qBAASppR,EAAAC,0BAAA3kH,EAAA8tY,sBACTppR,EAAYC,wBAAA3kH,EAAA8tY,oB,EA7chB9tY,EAAAkO,cAohCA,SAAuBw2G,GA1jBrB1kH,EAAAqvY,eAAc,CAAA,EACdhwY,EAAAgB,YAAYwrO,oBAAA7qO,IA4jBV,CACER,GAAIkkH,EAAYlkH,GAChBkM,OAAQ,c,EAEV,SAAU9L,EAAUyF,EAAIvF,GAEtB,IA5jBR,IAkkBcwgN,EAlkBL3gH,EAAA,GA4jBQjtD,EAAI,EAAmB3uB,KAAAA,IAAhBnkB,EAAS8yC,GA3jBYA,CAAA,GA4jBnCitD,GAAO//F,EAAS8yC,GAEd5yC,IAAWrB,EAAYsB,cACzBf,EAAGqvY,eAAiB,CAAA,EAChB9vK,EAAYrkI,EA3jBmBskI,oBAAA7+H,CAAA,EA4jB/B2gH,EAAWthN,EAAGuD,MAAMjB,SA3jBW,IAAAoiH,EAAA1Q,OA4jBnC9Y,EAAuBukI,cA3jBYne,EAAAie,CAAA,E,IAxe3Cv/N,EAAAgzI,wBA2gCA,SA3jB8BtuB,GAC1BA,EAAAhsB,cACAz5F,EAAAiD,GAAA,uDAAuB,CAAA1B,GAAAkkH,EAAAhsB,aAAA,CAAA,EACvBgsB,EAAAnuB,eACAt3F,EAAAiD,GAAA,8CAAkB,CAAA1B,GAAAkkH,EAAAnuB,cAAAmuB,EAAAnuB,cAAAlpF,OAAA,EAAA,CAAA,C,EAndtBrN,EAAAiiC,0BAkuBA,SAzjBgCivC,GA0jB9BA,EAzjBM00C,mCAAiB1jF,WAA2B,CAAAgvC,EAAU00C,mCAAa1jF,WA0jBzE1jB,aAzjBaC,QAAO3e,EAAAga,QAAAtZ,GAAA,IAAAV,EAAA4I,KAAAlI,GAAA,eAAAke,KAAAC,UAAAuyD,EAAA00C,mCAAA1jF,UAAA,CAAA,C,EA1KtBliC,EAAA8jX,aAsuBA,SAzjBcxjV,GA0jBZ,OAAIA,EAAKupC,kBAEEvpC,EAAK1oB,aACP,qCAxjBF0oB,EAAA6B,UACE,2EAEF,4C,EAoYTniC,EAAGsvY,kBA8eH,WACE,OAAOtvY,EAAGotY,WAAaptY,EAAGy7F,cAAcpuF,M,EAtiC1CrN,EAAGynX,qBAAAA,EACHznX,EAAGuvY,qBA+fH,WACA,MAAG,CAAA9nB,EAAA,GA4jBCznX,EAAG0kH,YAAYY,gDAAgD/lF,KAAK,SAAU2xC,GA1jB/E,MAAA,CAAA,CAAYA,EAAA81S,oCAAO91S,EAAA3d,M,IAuDtBvzD,EAAGwvY,mBAnDH,SAAGt+T,GACH,OAAGlxE,EAAAgE,QAAA,CAAAhE,EAAsBotY,WAAAl8T,EAAA3d,M,EArgBzBvzD,EAAG0nX,uBA0iCH,WACE,OAAO1nX,EAAGotY,WACRptY,EAAG0kH,YAAYgjQ,uBAAA,GACftpX,EAAOs9F,0BA1jBgC,EA2jBvCt9F,EAAOs9F,yBAAyBruF,M,EA7iCpCrN,EAAGyvY,eAgjCH,WACE,OAAQzvY,EAAGotY,WAAa,CAACptY,EAAGkhG,kBA1jB3B,CAAAlhG,EAAAotY,WAAeptY,EAAA0kH,YAAAY,gDAAA/lF,KAAA,SAAA2xC,GACf,OAAAA,EAAc3d,M,IAvfjBvzD,EAAGy8F,kBAAYA,EACfz8F,EAAG0vY,kBAyHH,SAAGC,GACHtwY,EAAGgB,YAAAuvY,iCAAgBrvY,OAChBovY,EACA,SAAAvpY,EAAAC,EAAAvF,GACAA,IAAArB,EAAoBsB,aACpBf,EAAA0kH,YAAYsjQ,qCAAA5hX,CAAA,C,IA7HfpG,EAAG08F,kBAkIH,SAAqBC,GA0jBfA,EAAMC,WArjBVD,EAAAC,SAAgB,CAAA,EA0jBhBv9F,EAzjBEgB,YAASuvY,iCAAoBl1X,OA0jB7B,CACEla,GAAIm8F,EAAMn8F,E,EAvjBd,SAAQ4F,EAAKC,EAAAvF,GACNA,IAAUrB,EAAAkb,sBA0jBXgiF,EAAMC,SAAW,CAAA,EACjB58F,EAAG0kH,YAAYmjQ,qCAAqClrR,EAAMn8F,EAAA,E,KAvsBlER,EAAG6vY,+CAwgBH,SAA0B3+T,GAC1B,MAAG,CACA4+T,kBAAe5+T,EAAAloD,OAAA,EACf+mX,yBAAmD,IAAzB7+T,EAAQy4S,uBAAiB3pX,EAAA0kH,YAAA0iQ,uBAAA,EACnD4oB,OAAAhwY,EAAa0tY,mBAAgBx8T,EAAYloD,SAAAkoD,EAAAk7J,Y,GA6C5CpsO,EAAGiwY,cAulBH,SA3jBsB/+T,GA4jBpB,OAAKA,GAAUA,EAAM1d,YAGb,GAAK0d,EAAM1d,YA7jBb1zD,EAAUga,QAAO05C,aA6jBS1a,YAAA,C,EA1lBlC94C,EAAG49F,wBA1CH,SAAGz3E,GACH,IAOG+pX,EACAC,EARA/xY,EAAAirD,wBA+jBGrpD,EAAG4tY,2BAA2BznX,GA1jBjCs2E,EAAA,CAAA,EAAsBz8F,EAAA4tY,2BAAAznX,EAAA,GAEtB+pX,EAAA,CAAA,EACAC,EAAoBnwY,EAAA0kH,YAAAynH,qDAAA,EAAAjgK,MAAA,SAAAgF,GACpB,GAAAA,EAAA00C,mCAAoBz/F,UAAAA,EAAA,CACpB,GAAA+qD,EAAA64S,oBAA2B74S,EAAAk7J,aAAA,CAAA,EAG3B,OAFAl7J,EAAAk7J,cAAyB,EACzB0gK,EAAoB57T,CAAA,EACpB,CAAA,EAEAg/T,EAAgB,CAAA,C,CAGhB,MAAA,CAAA,C,GAEAA,EACA9xY,EAAUm8B,MAAA,6DAAA,CACVpU,QAAAA,EACAq/F,cAAYxlH,EAAA0kH,YAAAlkH,E,GAEH2vY,GACT/xY,EAAAm8B,MAAgB,uDAAA,CAChBpU,QAAAA,EACAq/F,cAAAxlH,EAAA0kH,YAA4BlkH,E,MA1iB/BR,EAAGqpC,eAgjBH,WACAnqC,EAAGmG,KAAA,uCAAA,EAAiBse,GAAA,UAAA,SAAAkb,GACjBA,EAAAyK,gBAAA,C,IAjjBHtpC,EAAG09F,oBAgoBH,WACM19F,EAAG27F,iCAxjBXn9E,aAASC,QAAA3e,EAAAga,QAAiCtZ,GAAA,yEAAAR,EAAA27F,+BAAA,C,EAgfxC37F,EAAGowY,eAAH,SAAoBl/T,GACpB,OAAGlxE,EAAA0kH,YAAAugQ,6CAA0B53W,QAC1B6jE,EAAA81S,kC,EADHhnX,EAAGqwY,wBALH,WACA,OAAGrwY,EAAAynX,qBAAA,GAA0BznX,EAAAuvY,qBAAA,GAAAvvY,EAAAyvY,eAAA,C,EAnjB7BzvY,EAAAm2W,oBA2jBA,SAAyBx5Q,EAAA2zS,GACzB,GAAG3zS,EAAAkD,cAAmB7/F,EAAA6tY,sBAAAlxS,EAAAkD,cAEnB,OADAqB,EAAAlhG,EAAA6tY,sBAAgClxS,EAAAkD,cAAAs2Q,oBAAA,GAEhCm6B,EAAwB/wY,EAAA,QAAA,EAAA2hG,EAAA,CAAA,EAAAA,EAGxBovS,EAAoB,GAAA,C,EATvBtwY,EAAGsoX,cAaH,SAAAgoB,GA4jBE,IAAIC,EAAavwY,EAAG0kH,YAAY4jQ,cAAA,EA1jBlC,GAAAioB,EACE,OAAGD,EAAA/wY,EAA2B,QAAA,EAAAgxY,EAAqB,CAAA,EAAAA,EAEnD,OAAGD,EAAA,GAAmB,C,EAzkBxBtwY,EAAA4sY,kBAAgBA,EAyjBhB5sY,EAxjBEwwY,oBAuvCF,WACE,OA3jBMxwY,EAAG0kH,YAAYmhQ,YAAA,GA4jBnB,CAAC7lX,EAAGotY,WACJptY,EAAGivO,iCAAmC,CAACjvO,EAAG0kH,YAAYqgQ,6BAA6B13W,M,EAjsBvFrN,EAAGywY,iBAqvBH,WA3mBAryY,EAASq9F,eAAAr9F,EAAwBq9F,cAAApuF,QA8jB/BhO,EAAIgB,YAAYo7F,cAAcryD,KA1jB9B,GACE,SAAUhjC,EAAAC,EAAAvF,GA4jBJA,IAAWrB,EAAYsB,cA1jB/B3C,EAAUq9F,cAAAr1F,EAAyBA,Q,GAikBnCpG,EAAGmuY,+BAAiC,CAAA,EAChC/vY,EAAOs9F,0BAA4Bt9F,EAAOs9F,yBAAyBruF,OA1jBzErN,EAAAmuY,+BAA4B,CAAA,GA+jB1BnuY,EA3jBEouY,gCAAO,CAAA,EA6jBT/uY,EA3jBEgB,YAAOwrO,oBAAAziM,KA4jBP,CA1jBA5oC,GAAAR,EAAO0kH,YAAAlkH,GA4jBLkM,OAAQ,gC,EACP,SAAU9L,EAAUyF,EAAIvF,GACrBA,IAAWrB,EAAYsB,aACzBH,EAASsrE,MAAM,SAAUmzB,GA1jBxB,OAAAA,EAAQ7+F,KAAaw6F,EAAAsE,6BACxBD,EAAY/hF,KAAA/d,EAAmB,WAAA,EAAY,eAAYy7F,EAAoCqE,EAAA7+F,GAAA,EACxF,CAAA,E,GAIDI,EAAAstC,QAAY,CACd1tC,GAAAw6F,EAAkCqnB,gCAClC/kG,KAAO/d,EAAA,WAAA,EAAA,eAAAy7F,EAAAA,EAAAqnB,gCAAA,C,GA6jBLjkH,EAAOs9F,yBAA2B96F,EA1jBxCZ,EAAOouY,gCAAA,CAAA,EA4jBDpuY,EAAGmuY,+BAAiC,CAAA,GAzjB5CnvY,EAASuC,KAAAvC,EAAkBwC,OAAA,EAAaC,YAAAlC,EAAA,WAAA,EAAA,mDAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,IAokBtC1B,EAAG0tY,kBA3jBO,CAAA,EA4jBVtvY,EA3jBIirD,sBAAM,CAAA,EA4jBVrpD,EAAGotY,UAAY,CAAA,EACfptY,EA3jBE0kH,YAAGY,gDAAgBnkH,QAAA,SAAA+vE,GA4jBnBA,EAAMk7J,aAAe,C,GAEvBpsO,EAAG0kH,YAAYwgQ,gBAAkB,CAAA,EA1jBnCllX,EAAA0kH,YAASygQ,eAAkB,M,EAnM3BnlX,EAxjBE0wY,8BAyzCF,WA1jBElyX,aAAIC,QAAY3e,EAAAga,QAAetZ,GAAA,kDAAAR,EAAA67F,yBAAA/nE,SAAA,CAAA,C,EAtMjC9zB,EAAGmjH,kCAowBH,WACE3kG,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,sDAAuDR,EAAG87F,6BAA6BhoE,SAAA,CAAA,C,EApwBnI9zB,EAxjBEgiH,sBA+zCF,WACExjG,aA3jBEC,QAAA3e,EAAAga,QAAAtZ,GAAA,0CAAAR,EAAAkhG,iBAAAptE,SAAA,CAAA,C,EA5MJ9zB,EAAG0wO,WA0wBH,SA3jBgB+8J,GA4jBd,IA3jBE7oY,EAAArF,EAAY,WAAA,EAAiB,4BAAA,CAAAm1B,SAAA10B,EAAAuD,MAAAjB,QAAA,CAAA,EA4jB3BugB,EAAUtjB,EAAQ,WAAA,EAAa,gCAAiC,CAACm1B,SAAU10B,EAAGuD,MAAMjB,QAAA,CAAA,EACpFo8F,EAAWn/F,EAAQ,WAAA,EAAa,kCAAA,EACpCo/F,CAGF,SA3jBI99F,EAAA+D,EAAAie,EAAA/d,EAAA2oY,GA4jBE9oY,EAAUxF,EAAUwF,QAAA,EACrBC,MAAMA,CAAA,EA1jBTsC,YAAc2b,CAAA,EACX/d,GAAAA,GAAMF,CAAA,EACNjD,OAAApC,EAAY,WAAA,EAAQ,eAAA,CAAA,EA4jBvBJ,EA3jBMoC,KAAQoD,CAAA,EAAAI,KAAa,WA4jBzB/E,EA3jBCk8F,aAAe,CAAA,EA4jBhBr7F,EAAS4sY,CAAA,C,EA1jBX,Y,GA+iBiB58J,EAAgBjsO,EAAOie,EAAS67E,EAAU+uS,CAAA,C,EA7wB7DztY,EAAGwpL,SA6xBH,SA3jBcuiD,GA4jBZ,IAAI1K,EA3jBE,CAAA0K,EAAA4kK,qBA6jBF5nY,GADJ/I,EAAGohG,wBAA0B,CAAA,EAClB,CACT5gG,GA3jBER,EAAI0kH,YAAYhsB,cA4jBlBh4F,OA3jBM,qB,GA6jBJ2gO,IACFt4N,EAAKw4N,qBA3jBgBF,EAAyBltN,KAAA,GAAA,GA6jBhD9U,EAAIgB,YA3jBSwgG,4BAAoB7/F,IA4jB/B+H,EACA,SAAUnI,EA3jBCyF,EAAUvF,GA6jBnB,IADA,IAQM4/F,EARFC,EA3jBK,GACAjtD,EAAA,EAAuB3uB,KAAAA,IAAvBnkB,EAAS8yC,GAAmBA,CAAA,GA4jBnCitD,GA3jBM//F,EAAI8yC,GA6jBR5yC,IAAWrB,EAAYsB,aAxjBrB0/F,EAAc,6FAyjBFE,EAzjBW,QA4jBvBD,EA3jBGv3F,OAAYC,KAAQ,GAAA,SAAa,6FAAA,GACjC1C,SAAS83B,MAAA,iHAAAiiE,EAAA,SAAA,EA4jBhBC,EA3jBSh6F,SAAAg4B,MAAA,EA4jBT1+B,EAAGohG,wBA3jBwB,CAAA,IA6jB3BphG,EAAGohG,wBA3jBa,CAAA,EA4jBhBpiG,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,E,IAvzB1G1B,EAAG4wY,kBA6zBH,SAA2B3wW,GA1jB3B,OAA6B,IAApBA,EAAA5yB,M,EAlQTrN,EAAGy1J,eAg0BH,SAAwBj1J,GA1jBlBR,EAAA28M,eA+jBJ38M,EAAG28M,aAAe,CAAA,EAzjBpBx9M,EACEoC,KAAQ,CACNhD,WAAA,+BA4jBEK,aAAc,KA1jBdC,YAAY,2FACdsG,OAAAlH,QAAYmH,QAAAsB,SAAAC,IAAA,EA4jBV9B,oBAAqB,CAAA,EACrBiJ,SAAU,CAAA,EACVjH,OAAQ,CA1jBd8uB,mBAAS,I,EAEH3iB,QAAA,CACFuiB,aAAA,CAAA,cAAY,SAAAniB,GA4jBN,OAAOA,EAAYJ,QAAQ,4BAA6B,CACtDxS,GAAIA,EACJkT,WAAY,mC,QAKnB3O,KA1jBC,SAAA80B,GACF75B,EAAA28M,aAAY,CAAA,EA4jBJ9iL,IACE75B,EAAG+vB,cAAgB/vB,EAAGmoH,gBACxBnoH,EAAGggN,iBAAiBr/J,UAAUG,KAAA,EAzjBhC9gD,EAAA+vB,cAAM/vB,EAAAo8M,kCA6jBJp8M,EAAG6wY,mBAAmBlwV,UAAUG,KAAA,E,EAItC,WA1jBF9gD,EAAA28M,aAAY,CAAA,C,KAr2BhB38M,EAAA8wY,0BA2mBA,WACiD,OAA3C9wY,EAAG0kH,YAAYC,0BAxjBvB3kH,EAAA0kH,YAAAC,wBAAA3kH,EAAA+rC,eAAA/rC,EAAAuD,MAAAihC,kBAAAhkC,G,EAygBIR,EAAG67F,yBAA4H,SAAjGr9E,aAAagM,QAAQ1qB,EAAQga,QAAQtZ,GAAK,iDAAA,EAvjB1ER,EAAA87F,6BAAwB,SAAAt9E,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,qDAAA,EACtBR,EAAGkhG,iBAAoB,SAApB1iF,aAAoBgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,yCAAA,EA0jBvBR,EAxjBE+hB,WAAO5gB,QAAS,SAAAqmC,IAChBxnC,EAAA+rC,eAAQvE,EAAAhnC,IAAAgnC,GAEJhnC,KAAWR,EAAAuD,MAAYihC,kBACzBxkC,EAAG+tY,+BAAYx9X,KAAAi3B,EAAAhnC,EAAA,C,GA4jBnBR,EAAGuD,MAAMg0B,2BAA2Bp2B,QAAQ,SAAS64B,GAC/CA,EAAuBmI,YACzBnI,EAAuBkI,WAAaxjB,KAAK6L,MAAM/L,aAAagM,QAAQ1qB,EAAQga,QAAQtZ,GAAK,IAAMV,EAAQ4I,KAAKlI,GAAK,cAAA,CAAA,E,GAIrHR,EAxjBEy7F,cAAOt6F,QAAS,SAAAs+F,GAChBz/F,EAAA4tY,2BAAQnuS,EAAAt5E,SAAAs5E,EAyjBRz/F,EAxjBC6tY,sBAAsBpuS,EAAQj/F,IAAAi/F,C,GA2jBjCz/F,EAAGqvF,0BAA4BvB,EAAewB,iBAAiBtvF,EAAG49F,uBAAA,EAClEx/F,EAxjBKuQ,IAAA,WAAA,WACHm/E,EAAAyB,mBAAAvvF,EAAAqvF,yBAAA,C,GA2jBErvF,EAAG2tY,uBAAyB3tY,EAAGy7F,cAAcpuF,QAvjB/B,IAApBrN,EAAA0kH,YAASsgQ,qCAAW33W,QAClBovF,EAAiB,CAAA,CAAA,EAGnBz8F,EAAA+wY,qBAAS3yY,EAAuBmwC,OAAQ,2BAAA,SAAAkV,EAAAC,GAilBxC,IAxjBIstV,EAxByC,OAA3ChxY,EAAO27F,kCAwBLq1S,EAAOxyX,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,wEAAA,KAEPR,EAAA27F,gCAAY,CAAAq1S,E,GAmiBd5yY,EAAOuQ,IAAI,WAAY,WACrB3O,EAAG+wY,qBAAA,C,GAq1BD/wY,EAAG0kH,aACLV,EAAgBuzH,+BAA+Bv3O,EAAG0kH,WAAA,C,ucA5hCxDzmH,QACGC,OAAO,UAAA,EAtjBRK,WAAS,sCAAyCouY,CAAA,EAwjBjDnuY,UAvjBC,4BA0jBJ,WACE,MAAO,CAtjBLC,SAAA,IAwjBAI,YAAa,+EACbH,MAAO,CAtjBT6E,MAAS,IACPmhH,YAAa,IACXgiQ,QAAA,IAwjBA3kW,WAAY,IAtjBd2lB,eAAO,IAyjBL+zD,cAAe,KAtjBnBC,yBAAS,KACPgyS,kBAAqB,KACnBrkV,sBAAiB,KAwjBjBskV,sBAAuB,KAtjBzBzsS,iBAAA,KACAksS,UAAA,KACAvxS,yBAAA,KAwjBEC,6BAA8B,I,EArjBlCl9F,aAAS,KACPL,WAAS,qC,EAzBc,C,IAulD7B,CAAA,WACE,aAOA,SA3jBS0yY,EAAS7yY,EAA0BiB,EAAAF,EAAAM,EAAAmK,GA4jB1C,IA3jBI5J,EAAAC,KA+jBJD,EAAG2B,OA3hBH,WACExC,EAAGwC,OAAA,C,EA2hBL3B,EAAGgtM,qBAAuBpjM,EAAOojM,qBACjChtM,EA3jBE22J,uBAAc/sJ,EAAA+sJ,uBA4jBhB32J,EAAG+sM,iBA3jBcnjM,EAAAmjM,iBA4jBjB/sM,EAAG+hB,WA3jBCnY,EAAamY,WAEb/hB,EAAAgtM,sBA4jBF3tM,EA3jBEgB,YAAA0Z,SAAuB/Y,IACvB,CA4jBE0S,WAAY,yBA1jBdlT,GAAAoJ,EAAAozU,iB,EAEA,SAAA52U,EAAgBC,EAAAvF,GAChBA,IAAArB,EAAsBsB,cACtBf,EAAAgtM,qBAA8B5mM,E,GAikB7BpG,EAAG+hB,YACN1iB,EAAIgB,YAAY0hB,WAAWqnB,KA1jB3B,GAAG,SAAShjC,EAAAC,EAAAvF,GACRA,IAAerB,EAAYsB,cAC3Bf,EAAG+hB,WAAW3b,EAAAA,Q,iEAyhBtBnI,QACGC,OA3jBO,UAAA,EA4jBPK,WAAW,mCAAoC0yY,CAAA,C,IA+CpD,CAAA,WACE,aAwBA,SAASC,EAAgC7xY,EAAK62B,EAAO9iB,EAAatT,EAASZ,EAAWF,EAAUI,EAASD,EAAWI,EAASnB,EAAQqB,EAAawuG,GAChJ,IAAIjuG,EAAKC,KAGTD,EAAGynH,UAAYxZ,EAzjBfjuG,EAAAuD,MAASnF,EAAAmF,MA4jBTvD,EA3jBEmxY,UAAQ/yY,EAAYmF,MAAA4zB,SA4jBtBn3B,EAAG0nC,eAAiBtpC,EAAOspC,eAC3B1nC,EAAGoxY,kBAAoBhzY,EAAOmF,MAAM8rI,iBA1jBpCrvI,EAAAqxY,iBAAgBjzY,EAAamF,MAAA4rI,gBA4jB7BnvI,EA3jBEsxY,mBAAkBlzY,EAAAkzY,mBA6jBpBtxY,EAAGmO,QA3jBI,KA4jBPnO,EAAGuxY,cAAgB,CAAA,EACnBvxY,EA3jBEwxY,gBAAG,CAAA,EA4jBLxxY,EA3jBEyxY,gBAAY,KA4jBdzxY,EA3jBE0xY,wBAAY,CAAA,EA4jBd1xY,EAAG2xY,eAAiB,KACpB3xY,EA3jBE4xY,uBAAO,CAAA,EA8jBT5xY,EAAG6xY,cA6CH,WACO7xY,EAAG2/W,iBAvjBJ3/W,EAAAmO,UA4jBFnO,EAAGmO,QAAU,KACbnO,EAAGyxY,gBAAkB,KACrBzxY,EAAG2xY,eAAiB,MAzjBtB3xY,EAAAuxY,cAAQ,CAAA,EA4jBR17J,EAAA,E,EAvDF71O,EAAG8xY,gBA0DH,SAAyBljY,GACvB5O,EAAGuxY,cAAgB,CAAA,EA1jBrBvxY,EAASmO,QACP/P,EAAO+yY,UAAcnxY,EAAGmO,QAAA3N,GA6jBtBpC,EAAO+yY,UAAY,KAzjBvBt7J,EAAA,C,EAhEA71O,EAAA+xY,kBA8nBA,SAA2BtrY,GA1jB3BzG,EAAAgyY,wBA8jBEhyY,EA3jBEgyY,sBAAA,CAAA,EA4jBF7yY,EA3jBEoC,KAAa,CA4jBbhD,WAAY,0BACZK,aAAc,KACdC,YAAa,4EA1jBjBsG,OAASlH,QAAAmH,QAAAlG,EAAwBmG,KAAS,MAAA,CAAA,EACxCuB,YAAYH,EACV5B,oBAAA,CAAA,EA4jBAgC,OAAQ,CACNu2B,cAAe,CAAA,EAAOC,uBAAwB,CAAA,C,EAzjBhDrqB,QAAA,CA4jBE2E,aAAA,CAAA,cA3jBG,SAAAvE,GACD,OAAAA,EAAiBJ,QAAA,2BAAA,CAAAxS,GAAAR,EAAAmO,QAAA3N,EAAA,CAAA,C,GACjBoT,iBAAA,CAAA,cAAmB,SAAAR,GACrB,OAAIA,EAAMJ,QAAA,8BAAA,C,GACRoF,mBAAA,CAAA,cAAU,SAAoBhF,GA4jB9B,OA3jBEA,EAAMJ,QAAgB,+BAAA,C,MA8jB3BjO,KAAK,SA3jBKoJ,GA6jBXnO,EAAGmO,QAAUA,EACbnO,EAAGuD,MAAMkE,kBAAoBzH,EAAGmO,QAChC0nO,EAAA,EACA71O,EAAGgyY,sBAAwB,CAAA,C,EA1jB3B,WA4jBAhyY,EA3jBEgyY,sBAAa,CAAA,C,KA0dnBhyY,EA3jBEiyY,sBAgqBF,WA1jBMjyY,EAAA2/W,iBA8jBJ3/W,EAAGyxY,gBAAkB,K,EAxGvBzxY,EAAGkyY,qBA2GH,WACOlyY,EAAG2/W,iBAGR3/W,EA3jBE2xY,eAAE,K,EA6cN3xY,EAAGk1O,uBAiHH,WA1jBAl1O,EAAS2/W,gBA8jBP9pI,EAAA,C,EApHF71O,EAAGm1O,sBAuHH,WACOn1O,EAAG2/W,gBAxjBR9pI,EAAA,C,EAicF71O,EAAGmyY,qBA6HH,SA3jB2BvjY,EAAQk3E,GA4jBjC9lF,EAAGoyY,YAActsT,EACjB9lF,EAAGgnH,eAAiB,CA1jBlBjrF,QAAOj8B,EAAAga,QAAciiB,QAAK5tB,QAAAnO,EAAAmO,QAAA3N,E,EA8jB5BrB,EAAUoC,KAAK,CA1jBjB01E,eAAS,sBACP9xE,OAAIlH,QAAamH,QAAGsB,SAAYo5B,eAAAp5B,SAAAC,IAAA,CAAA,EAChCC,YAAIgI,EACF/J,oBAAqB,CAAA,C,GAEvBE,KAAO,SAAAsiM,KA6jBF,Y,GA1IPrnM,EAAG4rC,YA+IH,WACEzsC,EAAUwC,OAAA,C,EA/IZ3B,EAAGgrH,YAkJH,WACE3rH,EA3jBEgB,YAAA4mH,gBAAAjgH,KAAAhH,EAAAgnH,eAAA,SAAA96G,EAAA7F,EAAAvF,GACAA,IAAUrB,EAAa6H,kBACrBtH,EAAAA,EAAIoyY,aAAWlmY,EA4jBflM,EA3jBEmO,QAAGwtB,iBAAsBprB,KAAGvQ,EAAAA,EAAOoyY,YAAA,EA4jBrCjzY,EA3jBOuK,KAAA,GA6jBP1K,EA3jBOuC,KAAIvC,EAAWwC,OAAA,EAAAC,YAAYlC,EAAA,WAAA,EAAwB,qBAAA,CAAA,EAA8BmC,SAAA,WAAA,CAAA,C,IAxJ9F1B,EAAA61O,YAASA,EAikBH71O,EAAGmxY,YA+JWkB,EAztBN,CAAA,EA0tBZryY,EAAGwxY,gBA3jBQa,EA4jBXhzY,EAAIgB,YA3jBW6c,SAAKlc,IAAS,CAAAR,GAAAR,EAAAmxY,UAASx8X,WAAoB,CAAA,CAAA,EAAA,SAAazI,EAAA7F,EAAAvF,GA4jBjEA,IAAWrB,EAAYsB,aA1jBzBf,EAAGmO,QAASjC,EA4jBZlM,EAAGuD,MAAMkE,kBAAoBzH,EAAGmO,SAEhCnP,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,2BAAA,CAAA,EAA8BmC,SAAS,WAAA,CAAA,EAzjB5G1B,EAAKwxY,gBAAc,CAAA,C,IA0iBrB,SAAS37J,IACPz3O,EAAOmF,MA3jBK4zB,SAAAn3B,EAAAmO,QAAuBnO,EAAAmO,QAAQ3N,GAAA,KA4jB3CpC,EAAOmF,MA3jBCkE,kBAAyBzH,EAAAmO,QA4jBjC/P,EAAOmF,MA3jBI8rI,iBAAoBrvI,EAAAyxY,gBAAAzxY,EAAAyxY,gBAAAjxY,GAAA,KA4jB/BpC,EAAOmF,MA3jBI4rI,gBAAenvI,EAAQ2xY,eAAS3xY,EAAA2xY,eAAAnxY,GAAA,KA4jB3CpC,EAAOy3O,YAAA,C,CAxJH71O,EA3jBEoxY,oBA4jBJpxY,EAAG0xY,wBAA0B,CAAA,EAC7BryY,EA3jBEgB,YAAI4mH,gBAAuBjmH,IAAA,CAAAR,GAAAR,EAAaoxY,iBAAA,EAAA,SAAAllY,EAAA7F,EAAAvF,GACtCA,IAAGrB,EAAiBsB,YACpBf,EAAAyxY,gBAAgBvlY,EAEhBlN,EAAAuC,KAAAvC,EAAuBwC,OAAA,EAAAC,YAAclC,EAAU,WAAA,EAAA,kCAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA6jBjD1B,EAAG0xY,wBAA0B,CAAA,C,IAG7B1xY,EAAGqxY,kBAAoB,CAACrxY,EAAGsxY,qBA1jBjCtxY,EAAA4xY,uBAA6B,CAAA,EAC3BvyY,EAAAgB,YAAU4mH,gBAAgBjmH,IAAA,CAAAR,GAAcR,EAAAqxY,gBAAA,EAAA,SAAAnlY,EAAA7F,EAAAvF,GA4jBhCA,IAAWrB,EAAYsB,YACzBf,EAAG2xY,eAAiBzlY,EAzjB1BlN,EAAUuC,KAAAvC,EAAgBwC,OAAA,EAAYC,YAAAlC,EAAA,WAAA,EAAA,iCAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA6jBlC1B,EAAG4xY,uBAAyB,CAAA,C,IAGhC5xY,EA3jBE2/W,eAAe3/W,EAAAuD,MAAAo8W,eAAA,C,kJAqerB1hX,QACGC,OA3jBG,UAAA,EA4jBHK,WA3jBG,kCAAc2yY,CAAA,EA4jBjB1yY,UA3jBS,wBA8jBZ,WACE,MAAO,CACLC,SA3jBE,IAAUI,YAAK,uEA4jBjBH,MA3jBI,CA4jBF6E,MA3jBE,IA4jBFS,OA3jBE,IA4jBF6xO,YA3jBU,IA4jBVy7J,mBA3jBE,G,EA6jBJ1yY,aA3jBY,KA4jBZL,WA3jBM,iC,EAbsB,C,IAkyBlC,CAAA,WACE,aAQA,SAAS+zY,EACPl0Y,EACAmB,EACAJ,EACAH,EACAC,EACAQ,EACAJ,EACAw1X,EACA/0X,GAGA,IAAIE,EAAKC,KAuBH0/L,GAtBN3/L,EAAG2/L,KA3jBO,IAAAk1L,EAAAz2X,EAAYuhM,IAAA,EA4jBtB3/L,EAAGuyY,cA3jBO,CAAA,EA4jBVvyY,EAAGwyY,UAAY,CAAA,EACfxyY,EAAGykW,OAAS,GACZzkW,EAAGyyY,qBA3jBkB,GA4jBrBzyY,EAAG2pJ,SA3jBS,CAAA,EA4jBZ3pJ,EAAG0yY,iBAnbI,CACHn/M,UAAS,wEA4jBTo/M,uBA3jBa,2DA4jBbC,aAAgB,kEAChBC,SAAY,kEACZC,UAAa,wEA1jBjBC,QAAS,yD,EAgbT/yY,EAAGirX,gBAqCH,WACE,CAAA,IA1jBF+nB,EA0jBE,OAAIhzY,EAAGuyY,eA1jBTS,EAAShzY,EAAA2/L,KAAAsrL,gBAAsB7sX,EAAAugM,MAAA,EAC7B3+L,EAAAykW,OAAUhjV,OAAA,SAAY8+K,GACnB,OAAGA,EAAA/sG,O,GACDryF,QAAA,SAAAo/L,GA4jBDyyM,GAAazyM,EAAM0qL,gBAAgB7sX,EAAOugM,MAAA,C,GAzjBvCq0M,GAELhzY,EAAA2/L,KAAAsrL,gBAAA7sX,EAAAugM,MAAA,C,GA6gBJ3+L,EAAGizY,cAkDH,SA3jBuB1yM,EAAI3xL,GA4jBzBA,EA3jBI06B,gBAAA,EA4jBJnqC,EA3jBMoC,KAAOpC,EAAAyJ,MAAA,EA4jBV/D,oBAAoB,CAAA,CAAA,EACpBM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAChC/B,MAAMrF,EAAQ,WAAA,EAAa,gBAAkBghM,EAAMxkL,QAAQmK,KAAO,OAAA,CAAA,EAClEhf,YAAY3H,EAAQ,WAAA,EAAa,gBAAkBghM,EAAMxkL,QAAQmK,KAAO,cAAA,CAAA,EA1jB7EphB,GAAAvF,EAAS,WAAA,EAAA,eAAA,CAAA,CAAA,C,EAmgBTS,EAAGkzY,sBA2DH,WACE,OA3jBElzY,EAAAuyY,gBAAAn0Y,EAAAugM,SAAA3+L,EAAAgrX,oBA8jBJ,WACE,IAAImoB,EAAqB,GAOzB,OAjkBAnzY,EAAAykW,OAAIhjV,OAAY,SAAA8+K,GACd,OAAAA,EAAA/sG,O,GA4jBCryF,QA3jBQ,SAAAo/L,GA4jBT4yM,EA3jBU5yM,EAAA//L,IAAA,CAAA,C,GAGNke,KAAAC,UAAew0X,CAAA,IAAUz0X,KAAgBC,UAAA3e,EAAAyyY,oBAAA,C,EAX7C,E,EAggBJzyY,EAAGozY,WAsFH,WACEj0Y,EAAUuK,KAAA,C,EAtFZ1J,EAAGqzY,WAwEH,WACEl0Y,EAAUoC,KAAK,CACb01E,eA3jBa,yBAAAj3E,EAAA2/L,KAAAn/L,GA4jBb2E,OAAQlH,QAAQmH,QAAQsB,SAASo5B,eAAep5B,SAASC,IAAA,CAAA,EACzD9B,oBA3jBqB,CAAA,EA4jBrBm4D,WA3jBU,CAAA,C,GA4jBTj4D,KA3jBK,SAAMmH,KA6jBX,Y,GA/ELlM,EAAGszY,WAwFH,WA1jBA,IAIEC,EAJFn1Y,EAASurJ,WAIP4pP,EAAOvzY,EAAAykW,OAAAhjV,OAAwB,SAAA8+K,GAC/B,OAAGA,EAAY/sG,O,GACZhyE,IAAA,SAAY++K,GACb,OAAMA,EAAA//L,E,GAGRpC,EAAGurJ,SAAY,CAAA,EA4jBftqJ,EAAI09B,QAAQ+vG,aAAa9lI,KAAK,CAC1B8xF,IAAKy6S,EA1jBX7yY,OAAS,WACPi+L,OAAAvgM,EAAaugM,M,EA6jBX,SAASv4L,EAASC,EAAIvF,GA1jBjBA,IAAArB,EAAAsB,YACPoI,OAAa0D,SAAQtD,KAAQtK,EAAAsK,KAAQtK,EAAK8kE,QAAAzmD,KAAA,CAAA1B,QAAA,CAAA,CAAA,EAAA,CAAAmxH,SAAA,CAAA,CAAA,CAAA,GA6jBpC3uI,EAAOurJ,SAAW,CAAA,EA1jB1B3qJ,EAASuC,KACPvC,EAAawC,OAAA,EA4jBFC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EACjCmC,SAAS,WAAA,EA1jBbiL,UAAW,GAAA,C,OA0cpB3M,EAAGwzY,oBAuHH,WA1jBA,MAAS,UAATxzY,EAAS2/L,KAAAz5K,KAGJ,CAAA,YAAY,yBAAA,eAAA,WAAA,YAAA,WAFX,CAAA,YAAU,yBAAU,WAAA,U,EAycbpmB,EA3jBKga,QAAAslL,aAAkBkzK,QAAQtyW,EAAA2/L,KAAan/L,EAAA,GA4jBnDm/L,IACF3/L,EAAGuyY,cAAgB,CAAA,EACnBvyY,EAAG2/L,KAAOA,EACV3/L,EAAGgrX,mBA3jBiBlrX,EAASga,QAASslL,aAAY6yK,oBA4jBlD3wV,OAAOwkC,KACLhmD,EA3jBQy+L,gB,EA4jBRp9L,QA3jBM,SAAIgb,GA4jBVnc,EAAGyyY,qBA3jBiB3yY,EAASy+L,iBAASpiL,GAAY3b,IAAa,CAAA,C,IAkkBnER,EAAGykW,OAASzkW,EAAG2/L,KAAKurL,UAAA,EACpBlrX,EAAGwyY,UAA+B,EAAnBxyY,EAAGykW,OAAOp3V,OA1jB3BrN,EAASuyY,eACPvyY,EAAKykW,OAAGtjW,QAAA,SAAAo/L,GACNA,EAAA/sG,QAAA1zF,EAAAy4D,SAAAgoI,EAAAxkL,QAAAupO,YAAA,EAAA,C,uGA+fNrnP,QACGC,OA3jBK,UAAA,EA4jBLK,WA3jBQ,qBAAS+zY,CAAA,EA4jBjB9zY,UA3jBS,aAquBZ,WACE,MA3jBM,CA4jBJC,SA3jBO,IA4jBPC,MAAO,CA1jBPihM,KAAI,IACFhB,OAAA,IACAh1C,SAAU,G,EA6jBZprJ,WA3jBS,qBA4jBTK,aA3jBa,KA4jBbC,YAAa,6CACbizB,KA3jBI,SAAIpzB,EAAW0G,EAAY2sB,I,EArLZ,C,IAuvBzB,CAAA,WACE,aAEA9zB,QAAQC,OA3jBE,UAAA,EAAcM,UAAS,gBA8jBjC,WACE,MAAO,CACLkM,QAAS,CAAA,EA1jBXjM,SAAS,IACPssB,SA4jBE,wGACFrsB,MAAO,CA1jBTk3D,SAAS,G,EA6jBPr3D,WA3jBE,CA4jBA,SACA,SAAUH,GA1jBTA,EAAAq1Y,YAAe,WA4jBZ,MAAO,6BAA+Br1Y,EAAOw3D,SAAW,M,KA3kBZ,C,IAmlBxD,CAAA,WACE,aAEA33D,QACGC,OA3jBK,UAAA,EA4jBLM,UA3jBO,0BA8jBV,WACE,MAAO,CACLkM,QAAS,CAAA,EACTjM,SAAU,IACVI,YAAa,yEACbN,WA3jBG,CA4jBD,SACA,OACA,aACA,MACA,UACA,YACA,UACA,cACA,SA3jBQH,EAAGu3E,EAAAl2B,EAAmBpgD,EAAUS,EAAAX,EAAAI,EAAAE,GA8jBtCrB,EAAOgJ,SAAW,GA1jBlBhJ,EAAAs1Y,WAAY,GA4jBZt1Y,EA3jBKu1Y,UAAA7zY,EAAe4I,KAAAk3V,QAAA,GAAA9/V,EAAA4I,KAAA8uE,aAAA,EA8jBpBp5E,EAAOw1Y,mBA6BP,WACMx1Y,EAAOu1Y,WA1jBVx0Y,EAAAoC,KAAA,CACXhD,WAAA,kCA4jBcK,aAAc,KACdC,YAAa,6EA3jB3BqG,cAAA,CAAA,EACUL,oBAAA,CAAA,EACIkI,YAAA,CAAA,EA6jBAlG,OAAQ,CACN+C,OAAQ,CA3jBfxC,SAAAhJ,EAAAgJ,Q,MA0hBC/H,EAAI09B,QAAQ82W,gBAAgB7yY,IAAI,SAASJ,EAAUyF,EAAIvF,GA1jBjDA,IAAUrB,EAAYsB,cAC1B3C,EAAAgJ,SAAWxG,EAAYwG,SAOF,IAAvBhJ,EAASgJ,SAAKiG,UA8jBVjP,EAAOu1Y,UACsB,IAA3Bv1Y,EAAOgJ,SAASiG,OAClBjP,EAAOs1Y,WAAan0Y,EAAQ,WAAA,EAAa,kDAAA,EAzjB5CnB,EAAAs1Y,WAAAn0Y,EAAA,WAAA,EAA4C,kDAAA,CAAA+1H,EAAAl3H,EAAAgJ,SAAAiG,MAAA,CAAA,EA8jB3CjP,EAAOs1Y,WAAan0Y,EAAQ,WAAA,EAAa,uDAAA,E,MA7mB7B,C,IAwoB1B,CAAA,WACE,aA4BA,SAASu0Y,EAAwB11Y,EACAY,EACAS,EA3jBtBJ,EACXS,EA6jBiCw+F,EACA+nQ,EA5jBjC3qB,EACUn8U,EACIC,GA8jBZ,IA7jBCQ,EAAAC,KA4CD,SAAG8zY,EAAAjzY,EAAwBF,GACxBE,IAAArB,EAAuB6H,iBACE,YAAzBlJ,EAAAoH,YAAyBxF,EAAAg0Y,0BAjB5B51Y,EAAGoH,WAAmB,UAmBI,YAAvBpH,EAAAoH,WACAhG,EAAc4M,WAAA,mCAAA,CAAA8uU,WAAAt6U,CAAA,CAAA,EACA,YAAdxC,EAAcoH,YAAAxF,EAAAg0Y,4BACdx0Y,EAAc4M,WAAA,kCAAAxL,CAAA,EA8jBXpB,EAAW4M,WAAW,mCAAoCxL,CAAA,GAG5Dy7U,EAAav7U,EAAQF,CAAA,C,CAmDzB,SAASy7U,EAAav7U,EAAQF,GA5jB5B,IA8jBM6Q,EA9jBN3Q,IAAArB,EAAAkE,mBA8jBM8N,EAAe,UAAY7Q,EAAS4M,MACxCxO,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAakS,EAAc,CAAE3Q,OAAQF,EAAS8Q,YAAA,CAAA,CAAA,EAAiBhQ,SAAS,WAAA,CAAA,GA5jBvHZ,IAAArB,EAAsB0M,oBAC7BnN,EAAMuC,KAAAvC,EAAAwC,OAAA,EAAsBC,YAAAlC,EAAA,WAAA,EAAA,qCAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAC1BlC,EAAA4M,WAAA,mCAAA,CAAA8uU,WAAAt6U,CAAA,CAAA,GAqkBF5B,EA7jBEuC,KAAAvC,EAAawC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAyjBf48F,EA7jBEC,eAAA,C,CA2cJngG,EAAOoH,WAAa,KA5jBtBxF,EAAA6Q,SAAS,CAAA,EACP7Q,EAAAi8U,sBAAOP,EA8jBP17U,EA7jBEg0Y,0BAA4B,CAAA,EA+jB9Bh0Y,EAAGi0Y,iCAoHH,WACEz1X,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,8BAA+BR,EAAGg0Y,yBAAA,C,EApH9Eh0Y,EAAGk0Y,yBAjiBH,WACA,OAAGp0Y,EAAA8B,cAAiB,oBAAA,C,EAiiBpB5B,EAAGg8U,eA+BH,WA5jBA,OAAGh8U,EAAAi8U,sBAAgBpkS,eAAAz5C,EAAAmH,IAAA,C,EA+hBnBvF,EAAGm0Y,4BAgDH,SAAqChuX,GAC/BnmB,EAAG6Q,SA5jBPxR,EAAIgB,YAAGurJ,YAAmB5kJ,KAAA,CACxBtG,OAAG,OACHylB,QAAIA,GAAY,KACdrW,SAAI1R,EAAWmF,MAAA/C,GA8jBfuP,WA7jBK3R,EAAAmH,KA8jBLmO,WA7jBO,0B,EA8jBN,SA7jBC9S,EAAcyF,EAAAvF,GA8jBhBizY,EAAejzY,EAAQF,CAAA,C,GAGzBy7U,EAAa58U,EAAYkE,kBAAmB,CA5jB1C6J,MAAG,kCACLkE,aAAGtT,EAAAmF,MAAyBzC,M,IAggBhCd,EA7jBE49F,wBA+nBF,SA7jB+Bz3E,GA8jB7B,GAAI,CAACnmB,EAAG6Q,SACN,OA7jBKwrU,EAAA58U,EAAyBkE,kBAAA,CA8jB5B6J,MAAO,kCACPkE,aAActT,EAAOmF,MAAMzC,M,GAzjBjC1C,EAAS0hJ,uBAAgB,CAAA,CAAA35H,EACvBkgV,EAAQn4U,IAAA,SAAgBlb,EAAAtF,GACtBrO,EAAAgB,YAAAwP,cAAA7I,KAAA,CA8jBEgT,QAAS,KACTmM,QAASA,GAAW,KA5jBpBrW,SAAG1R,EAASmF,MAAA/C,GACduP,WAAa3R,EAAAmH,KACbouC,uBAAqB,GACrBjgC,WAAG,0B,EA8jBA,SAAS9S,EAAUwzY,EAAKtzY,GA5jB1BkS,EAAA,CAAAlS,OAAgBA,EAAAF,SAAAA,CAAA,CAAA,C,EACnB,SAAAyzY,GA8jBI3mY,EAAO2mY,CAAA,C,IA3jBbluX,CAAA,EAASphB,KAAA,SAAgBmH,GACvB6nY,EAAG7nY,EAAgBpL,OAAAoL,EAAAtL,QAAA,C,IAserBZ,EAAGs0Y,iBAAmBl2Y,EAAOuQ,IAAI,4BA3iBjC,WACAvQ,EAAGoH,WAAgB,c,CA0iB2C,EAG9DpH,EAAOuQ,IAAI,WAAY,WACrB3O,EAAGs0Y,iBAAA,C,GAMHl2Y,EAAOoH,WAAa,U,4IA5DxBvH,QACGC,OAAO,UAAA,EACPK,WA5jBG,0BAA+Bu1Y,CAAA,EA6jBlCt1Y,UA5jBS,gBA+jBZ,WACE,MAAO,CACLC,SAAU,IACVI,YAAa,oDA3jBfH,MAAQ,CACN6E,MAAI,IACFkC,QAAI,IA6jBJF,KA5jBM,IA6jBNy6E,WA5jBO,IA6jBPu7P,WAAY,IACZxqU,aAAc,IACd/D,MAAO,G,EAETzO,WAAY,0BACZK,aAAc,I,EA7kBK,C,IA+tBzB,CAAA,WACE,aAEAX,QACGC,OA7jBI,UAAA,EA8jBJM,UAAU,kBAGb,WACE,MA7jBO,CA8jBLkM,QA7jBG,CAAA,EA8jBHjM,SA7jBK,IA8jBLI,YAAa,uDACbN,WAAY,CAAC,SAAU,aAAc,UAAW,SAAUH,EAAQoB,EAAYJ,GAC5EhB,EAAOm2Y,OAASn1Y,EAAQ6/M,UAAUs1L,OA3jBpCn1Y,EAAQkvC,iBAAgB,SAAA,WACtBlwC,EAAAm2Y,OAAA,CAAA,EA8jBE/0Y,EAAWg1Y,QAAA,C,EA5jBZ,CAAA,CAAA,EA+jBDp1Y,EAAQkvC,iBAAiB,UAAW,WA5jBxClwC,EAASm2Y,OAAA,CAAA,EACH/0Y,EAAIg1Y,QAAA,C,EACN,CAAA,CAAA,C,IA0iB0B,C,IAyBlC,CAAA,WACE,aAQA,SAASC,EAA0Bp4X,EAAIrd,EAAUK,EAAKG,EAAYpB,EAAQqB,EAAai1Y,EAAoBC,EAAyBz+W,EAAO0+W,EAAM90Y,EAASP,EAASg7G,EAAW50G,EAAO85C,GACnL,IA7jBEz/C,EAAAC,KA0rBF,SA9jBM40Y,EAAwBC,EAAeC,EAAoBhgY,GAgkB/D,IADA,IAAIigY,EAAS,GACJthW,EAAI,EAAGA,EAAIohW,EAAkBznY,OAAQqmC,CAAA,GACvC1zC,EAAGi1Y,iBAAiBH,EAAkBphW,GAAGlzC,MAC5CR,EAAGi1Y,iBAAiBH,EAAkBphW,GAAGlzC,IAAM,CA7jBrDuI,KAAS+rY,EAAkBphW,GACrBgkP,KAAGo9G,EAAephW,GAAAgkP,I,EAGlBs9G,EAAOzkY,KAAAukY,EAAMphW,EAAA,EACZqhW,GACD/0Y,EAAAk1T,OAAA4/E,EAAmBphW,EAAA,GAkkBvB3+B,EA9jBEgxC,cAAeivV,EAAA5nW,OAAgBr4B,EAAAgxC,aAAA,EA+jBjCmvV,EAAmBngY,EAAIgxC,aAAA,EACvBovV,EAAoBpgY,EAAIgxC,aAAA,C,CAG1B,SA9jBQovV,EAAApvV,GACN,IAAAqvV,EAAe,GA+jBfrvV,EA9jBG5kD,QAAA,SAAoBk0Y,GA+jBrB,IAQMC,EAtkB2B,KAAA,IAAzBD,EAAgB9zY,MAAS,CAAA,IAAA8zY,EAAA9zY,QAChCg0Y,EAAch2Y,EAAa,cAAA,EAAA81Y,EAAwB5yY,UAAA,KAC/B2yY,GACjBA,EAAQG,EA+jBRF,EAAaE,aAAeA,GA5jBpCF,EAASE,aAAwB,KAgkBvBD,EAAaZ,EAAmBW,EAAa9vY,MA5jBvD8vY,EAASG,WAAaH,EAAAzwY,OAAArF,EAAA,WAAA,EAAA,iBAAA+1Y,EAAA,QAAA,EAChBD,EAAAI,UAAqBJ,EAAA1uY,MAAApH,EAAA,WAAA,EAAA,iBAAA+1Y,EAAA,QAAAD,EAAAlgX,OAAA,EAEhBkgX,EAAMK,kBACZL,EAAQK,gBAouBb,SA9jB4BnwY,GAgkBtB+vY,EAAaZ,EAAmBnvY,GACpC,MA9jB4B,CAAA,EAFpB,CAAA,sBAAA,gBAAA,kBAESwzC,QAAWu8V,CAAA,EACpB,8BAgkBC,E,EA1uBkBD,EAAA9vY,IAAA,GAikBU,KAAA,IAAtB8vY,EAAa9zY,OA7jB5B8zY,EAAY9zY,KAAU,CAAA,G,GAstBxB,SA9jBM2zY,EAAgBJ,GA+jBpBA,EA9jBkBr/V,KAAA,SAAApsC,EAAgBssD,GA+jB5BggV,EA9jBM,IAAAxxV,KAAW96C,EAAA5G,UAAA,EA+jBjBmzY,EA9jBI,IAAOzxV,KAAAwR,EAAAlzD,UAAA,EA+jBf,OA9jBQmzY,EA8jBJD,EA9jBI,CAAA,EA+jBJA,EAAQC,EAAc,EACd,C,GArhBnB,SAAWC,IACV71Y,EAAA81Y,oBAAA,CAAA,C,CA1WE91Y,EAAAi1Y,iBAAS,GA8jBTj1Y,EA7jBE81Y,oBAAiB,CAAA,EA8jBnB91Y,EA7jBE+1Y,iBAAoB,CA8jBpBx6K,IA7jBE,CA8jBA32N,MAAO,GACPmhD,cAAe,GA5jBjBpZ,KAAA,KACEqpW,QAAA,CAAA,EACA53X,QAAQ,CAAA,C,EA+jBVunC,SA7jBE,CA8jBA/gD,MAAO,GACPmhD,cA7jBM,GA8jBNpZ,KAAM,KACNqpW,QA7jBG,CAAA,EA8jBH53X,QAAS,CAAA,C,GAKbpe,EA7jBEi2Y,kBAkpBF,WAME,IA9jBI,IAAGlhY,KAyjBP1V,EA9jBE09B,QAAUgpB,cAAA/kD,IACV,CAAAN,OAAG,cAAA,EAAqB,SAAQE,GAChCZ,EAAA81Y,oBAAOl1Y,EAAAmI,I,GAGF/I,EAAA+1Y,iBA+jBoC,CAAC,IAAtC/1Y,EAAG+1Y,iBAAiBhhY,GAAKihY,SAC3B32Y,EAAI09B,QAAQgpB,cAAc3c,KA7jB9B,CAAA7jC,KAAAwP,CAAA,EAAA,SAAAnU,GA+jBQZ,EAAG+1Y,iBAAiB91Y,MAAM0sC,KAAO/rC,EAAS+rC,KAC1CkoW,EAAsBj0Y,EAASwF,QAAS,CAAA,EAAOpG,EAAG+1Y,iBAAiB91Y,KAAA,C,EA7jBpE6rF,KAAA/2E,CAAA,CAAA,C,EA8dT/U,EAAG61Y,wBAA0BA,EAC7B71Y,EAAGk2Y,uBAmMH,WACE,OAAOl2Y,EAAG81Y,mB,EAhwBZ91Y,EAAAm2Y,oBAmwBA,SAA6Bd,GA7jB7B,IAAAtwW,EAAS/kC,EAAA+1Y,iBAAqB,IAAAhwV,cAAAhN,QAAAs8V,CAAA,EAC5Be,EAAOn4Y,QAAAye,KAAA24X,CAAA,EACL,CAAA,EAAAtwW,GACA1lC,EAAA09B,QAAAgpB,cAA0B/+C,KAAA,CAC1BxG,GAAA60Y,EAAgB70Y,GAChBE,OAAA,S,EACA,SAAAE,EAAayF,EAAAvF,GACbA,IAAWrB,EAAAsB,eA+jBHs1Y,EAAmBr2Y,EAAG+1Y,iBAAiB,IAAOhwV,eACjChhB,GAAOxjC,KAAO,CAAA,EAC3BwjC,EAAM,EAAIsxW,EAAiBhpY,SACxBgpY,EAAiBtxW,EAAM,GAAGwwW,eAC7Bc,EAAiBtxW,EAAM,GAAGwwW,aAAec,EAAiBtxW,GAAOwwW,eA3jBjEe,EAAAt2Y,EAAA+1Y,iBAAA,SAAAhwV,cACVqwV,EAAOzwV,SAAA,CAAA,EACL2wV,EAAM/lY,KAAA6lY,CAAA,EACNlB,EAAQoB,CAAA,EACRnB,EAAUmB,CAAA,E,IAqWdt2Y,EA7jBEu2Y,uBAyzBF,SAAgClB,GACgB,CAAC,GAA3Cr1Y,EAAGw2Y,cAAcz9V,QAAQs8V,CAAA,GAC3Br1Y,EAAGw2Y,cAAcjmY,KAAK8kY,CAAA,C,EA7P1Br1Y,EAAGy2Y,uBA8NH,WACEp3Y,EAAI09B,QAAQgpB,cAAc/+C,KAAK,CAC7BtG,OAAQ,W,EACP,SAASE,GAEV,IAAK,IAAImU,KADT/U,EAAGi1Y,iBAAmB,GACNj1Y,EAAG+1Y,iBA7jB1B/1Y,EAAY+1Y,iBAAAhhY,GAAAgxC,cAAA,GACX/lD,EAAA+1Y,iBAAAhhY,GAAA2hY,oBAAA,GA+jBQ12Y,EAAG+1Y,iBAAiBhhY,GAAKihY,QAAU,CAAC,EA7jBpCh2Y,EAAA+1Y,iBAAmBhhY,GAAA43B,KAAU,KA+jB7B3sC,EAAG+1Y,iBAAiBhhY,GAAKqJ,QAAU,CAAA,C,IAvOzCpe,EAAG22Y,0BA4OH,WA7jBEt3Y,EAAA09B,QAAAgpB,cAAA/+C,KAAA,CACEtG,OAAA,U,EACF,SAAOE,EAAAyF,EAAAvF,GACL,GAAAA,IAAUrB,EAAAsB,YAAA,CA+jBR,IAAK,IAAIP,KAAMR,EAAGi1Y,iBA7jBtBj1Y,EAAAi1Y,iBAAYz0Y,GAAAk3R,KAAA,CAAA,EACV13R,EAAAi1Y,iBAAAz0Y,GAAAuI,KAAA2uR,KAAA,CAAA,EAEE13R,EAAA81Y,oBAAqB,CAAA,C,KA0U3B91Y,EAAG42Y,0BA+PH,WA7jBF,GAAAp2V,EAAA,qBAAA,EAAA,CACG,IAAOq2V,EAAAr2V,EAAA,qBAAA,EAAAqjF,OAAA,EAAAvK,IACPw9Q,EAAUt2V,EAAA,qBAAA,EAA2B6S,OAAA,EA+jBlC,GAAKwjV,EAAL,CA5jBN,IAEaE,EAFJC,EAAAH,EAA0BC,EAAA,GAE/B,IAASC,KAAA/2Y,EAAAi1Y,iBAAA,CACT,IAAUz0Y,EAAA,iBAAAu2Y,EAAAjjX,SAAA,EACVmjX,EAAaz2V,EAAAhgD,CAAA,EAAAqjI,OAAA,EAAAvK,IACb49Q,EAAY12V,EAAAhgD,CAAA,EAAA6yD,OAAA,EACV4jV,GAEAA,EAAAC,GAEAF,GACA,CAAAh3Y,EAAAi1Y,iBAAA8B,GAAAr/G,OACA13R,EAAAi1Y,iBAAA8B,GAAAr/G,KAAA,CAAA,EACA13R,EAAAi1Y,iBAAA8B,GAAAI,OAAA,IAAAhzV,K,CA+iBoB,C,GAlQxBnkD,EAAGo3Y,qBAuRH,SA9jByB/B,GA+jBvB,MAAO,e,EAvRTr1Y,EAAGk1T,OA4IH,SA9jBYmgF,GA+jBV,IApjBAgC,EAVEr3Y,EAAAuyC,eAAA,IAmkBI,iBAAkBppC,QAzjBxBkuY,EAAU,WA+jBM,IAAIC,aAAajC,EAAazwY,MAAO,CACjD+B,KAAM0uY,EAAa1uY,KA7jBzBy+C,IAASiwV,EAAa70Y,GAChBspB,KAAA8qX,EAAO2C,WACTzxX,MAAA8uX,EAAA2C,WA+jBEC,MAAO5C,EAAK2C,U,GA3jBPE,QAAM,SAAA7oY,GACZA,EAAIirN,eAAA,EACL1wN,OAAOC,KAAMisY,EAAAvjX,KAAA,QAAA,C,GAUgB,YAA3BwlX,aAAI73X,WAgkBN43X,EAAA,EA1jB6B,WA8jBtBC,aA9jBE73X,YA+jBT63X,aA9jBSI,kBAAS,SAAAj4X,GAgkBG,YAAfA,GACF43X,EAAA,C,IAnCJzuY,MAAM,oDAAA,E,EAlJV5I,EAAGuyC,eAyRH,WACE,OA9jBIzyC,EAAA4I,MAAA5I,EAAA4I,KAAAmjI,iB,EAqSN7rI,EAAGitC,SAgTH,SA9jBiBl4B,GA+jBXA,EAAIqJ,UAIRrJ,EAAIqJ,QA9jBM,CAAA,EAgkBVzY,EAAM,CACJsd,OA9jBQ,MA+jBR1Y,IAAKwK,EA9jBG43B,I,GA+jBP5nC,KAAK,SA9jBiBnE,GA+jBvBmU,EAAI43B,KA9jBI/rC,EAAAmI,KAAA4jC,KA+jBRkoW,EA9jBqBj0Y,EAAAmI,KAAA3C,QAAA,CAAA,EAAA2O,CAAA,EA+jBrBA,EAAIqJ,QA9jBI,CAAA,C,EA+jBP,SA9jBiBxd,GA+jBlBmU,EAAIqJ,QA9jBQ,CAAA,C,KAgQhBpe,EAAG23Y,kBAkUH,SAA2B5iY,GACzB,MAAe,QAARA,C,EAlUT/U,EAAG43Y,SAqUH,SAAkBvC,GAChB96R,EAAU/oE,KAAK6jW,EAAavjX,IAAA,C,EAj4B9BmtL,UAASwkJ,cAAc7nR,MAAA72E,KAAA,SAAA8yY,GACrB54L,UAAOwkJ,cAAiBl8E,UAAG,SAAa34Q,GACxCxQ,EAAOmnB,OAAM,WACbswX,EAAA,C,MAskBAp2V,EA7jBO8hJ,QAAU,WA8jBfvhM,EA7jBE+1Y,iBAASx6K,IAAA32N,MAAoBrF,EAAG,WAAA,EAAA,mBAAA,EA8jBlCS,EAAG+1Y,iBA7jBIpwV,SAAA/gD,MAAArF,EAAA,WAAA,EAAA,wBAAA,C,GAgkBTS,EA7jBE83Y,cAAG15Y,EAAkBuQ,IAAA,cAAA,WAgkBrBy/B,WAAW,WACTpuC,EAAG42Y,0BAAA,C,EACF,GAAA,C,GAGL52Y,EAAG+3Y,eAAiB35Y,EAAOuQ,IAAI,eAAgB,WAC7C,IAAK,IAAIyQ,KAAOpf,EAAGi1Y,iBAAkB,CA7jB3C/7C,EAAAl5V,EAAAi1Y,iBAAA71X,GACU85U,EAAAnwV,KAAA2uR,OAAAwhE,EAAAxhE,OAikBFwhE,EAAQnwV,KAAK2uR,KAAOwhE,EAAQxhE,KAC5BwhE,EAAQnwV,KAAKivY,QAAU9+C,EAAQi+C,OA3jBrC93Y,EAAA09B,QAAAgpB,cAAAxlD,OACA24V,EAAAnwV,KACA,SAAA3C,EAAAC,EAAAvF,GACAA,IAAArB,EAAAsB,aACA1B,EAAA09B,QAAAgpB,cAAA/kD,IACA,CAAAN,OAAA,cAAA,EAAA,SAAAE,GACAZ,EAAA81Y,oBAAA,EAAAl1Y,EAAAmI,I,MAMG/I,EAAAi4Y,uBAAgB,E,GAInBj4Y,EAAGi2Y,kBAAA,EAgkBD73Y,EAAOuQ,IAAI,WAAY,WACrB3O,EAAG83Y,cAAA,EA7jBJ93Y,EAAA+3Y,eAAA,C,GAGH95Y,QAAGmH,QAAasB,QAAA,EAAAk1E,MAAA,WACbp7B,EAAA,oCAAA,EAAan7C,KAAA,aAAA,EAAAslQ,KAAA,WACbnqN,EAAAvgD,IAAA,EAAAoyJ,KAAa,wBAAA,uBAAA,C,GAikBZ7xG,EAAE,+BAAA,EAAiC78B,GAAG,SAAU,WA7jBpD3jB,EAAA42Y,0BAAA,C,8LAidF34Y,QACGC,OAAO,UAAA,EACPK,WAAW,4BAA6Bk2Y,CAAA,EA5jBzCj2Y,UAAS,kBAo7BX,WACE,MA/jBC,CAgkBCC,SAAU,IACVC,MAAO,GA9jBXH,WAAS,4BACPK,aAAO,KACLC,YAAU,qDACVizB,KAAA,SAAapzB,EAAA0G,EAAA2sB,I,EA5XN,C,IAk8Bb,CAAA,WACE,aAOA,SAASmmX,EAAU14Y,EAAYN,EAAWF,EAAUO,GAClD,MAAO,CA9jBTuyB,KAAS,SAAApzB,EAAA0G,GAgkBHA,EAAQue,GAAG,UAAW,SA/jBK/U,GAgkBzB,MAAA,EA/jByB,CAAA,EA+jBrB,CAAC,GAAI,IAAK,IAAK,KAAKmqC,QA/jBCnqC,EAAAgnM,KAAA,IAikBvB52M,EAASuC,KAAKvC,EA/jBSwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,8BAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAgkBvBkN,EAAMirN,eAAA,EACC,G,+DAbjB57N,QACGC,OA/jBC,UAAA,EAgkBDM,UAAU,YAAa05Y,CAAA,C,IAqB5B,CAAA,WACE,aAKAj6Y,QA/jBKC,OAAA,OAAA,CAEH,cAgkBA,UACA,2BA9jBA,oBAkkBA,WA5jBA,iBAkkBA,cAGA,kBA5jBA,oBAkkBA,oBA9jBA,uBAgkBA,uBACA,uBACA,qBA9jBA,2BAgkBA,iCACA,gCACA,+BA9jBA,6BAgkBA,uBACA,uBACA,4BACA,wBACA,6BACA,qBACA,wCACA,uBACA,wBACA,wBACA,6BACA,0BACA,uCAGA,uCACA,iDACA,+CACA,4BACA,oCACA,kCACA,qBACA,oBACA,0BACA,+BACA,wBACA,iBACA,kBACA,qBACA,6BACA,mCACA,0BACA,qBA9jBA,kBAgkBA,qBACA,kBACA,8BACA,gCACA,uBACA,sCACA,2BACA,8BACA,kCACA,wCACA,wBACA,4BACA,6BACA,0BACA,kDACA,uCACA,gDACA,uCACA,mDACA,mCACA,0DACA,8BACA,sCACA,6BACA,uBACA,uBACA,yBA9jBA,gCAgkBA,wBACA,qBACA,0BACA,iCACA,2BACA,mCACA,4BACA,4CACA,6BACA,uBACA,qBACA,qBA9jBA,2BAgkBA,uBACA,0BACA,uCA9jBA,+BAgkBA,8BACA,8BACA,mDACA,mCACA,4BACA,2BA9jBH,mCACC,kCAgkBE,wDA9jBF,8CAgkBE,iDACA,mCAEA,uDA9jBF,0DAikBE,0CACA,gCAGA,+CAGA,oBACA,wBACA,6BACA,iCACA,0BACA,oBACA,gBACA,0BACA,iCACA,gCAGA,cA9jBH,iBACC,gBAgkBE,eACA,gBA/jBF,gBAikBE,kBACA,eACA,WACA,gBACA,cA/jBF,uB,KAokBF,CAAA,WACE,aAEAD,QACGC,OAhkBG,MAAA,EAkkBHi6Y,SAhkBS,mCAAA,CAikBRC,uBAhkBY,CACVxzY,MAAA,4CAikBA+B,KAAM,2CA/jBR0xY,eAAU,IAAAl0V,KAAA,YAAA,EACRm0V,WAAO,E,EAkkBTC,eAhkBQ,CACN3zY,MAAA,oCACA+B,KAAA,mCAikBA0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAAY,E,EAEdE,kCAAqC,CA/jBpC5zY,MAAA,uDACA+B,KAAA,sDACA0xY,eAAA,IAAAl0V,KAAyB,YAAA,EACzBm0V,WAAA,E,EAEHG,aAAG,CACA7zY,MAAA,4BACA+B,KAAA,iCACA0xY,eAAA,IAAAl0V,KAAuB,YAAA,EACvBm0V,WAAS,GACTI,WAAA,+F,EAEHC,YAAG,CACA/zY,MAAA,2BAikBC+B,KAAM,gCA/jBV0xY,eAAU,IAAcl0V,KAAA,YAAA,EACtBm0V,WAAU,GACVI,WAAc,+F,EAkkBdE,aAAgB,CACdh0Y,MAAO,4BACP+B,KAAM,iCACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EA/jB7Bm0V,WAAA,GAikBII,WAAY,+F,EA9jBhBG,kBAAsB,CACpBj0Y,MAAA,iCACE+B,KAAG,sCACH0xY,eAAG,IAAiBl0V,KAAA,YAAA,EAikBpBm0V,WAAY,GACZI,WAAY,+F,EAEdI,gBAAmB,CACjBl0Y,MAAO,+BA/jBP+B,KAAA,oCAikBA0xY,eAhkBK,IAAAl0V,KAAA,YAAA,EAikBLm0V,WAhkBG,GAikBHI,WAAY,+F,EA9jBdK,iBAAoB,CAClBn0Y,MAAK,gCAikBL+B,KAhkBM,qCAikBN0xY,eAhkBc,IAAKl0V,KAAA,YAAA,EAikBnBm0V,WAhkBI,E,EAkkBNU,yBAhkBwB,CAikBtBp0Y,MAhkBE,yCAikBF+B,KAAM,8CACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAhkBM,E,EAkkBRW,mBAhkBe,CAikBbr0Y,MAhkBM,kCAikBN+B,KAAM,uCACN0xY,eAhkBW,IAAQl0V,KAAA,YAAA,EAikBnBm0V,WAhkBY,E,EAkkBdY,2BAA8B,CAC5Bt0Y,MAAO,0CACP+B,KAAM,+CACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EA/jBzBm0V,WAAG,E,EAkkBLa,aAAgB,CACdv0Y,MAAO,4BA/jBT+B,KAAG,iCAikBD0xY,eAAgB,IAAIl0V,KAAK,YAAA,EA/jB3Bm0V,WAAW,E,EAkkBXc,gCAhkBK,CAikBHx0Y,MAAO,+CACP+B,KAAM,oDA/jBR0xY,eAAgB,IAAAl0V,KAAU,YAAA,EACxBm0V,WAAE,E,EAkkBJe,oBAAuB,CACrBz0Y,MAAO,wCA/jBP+B,KAAE,wCAikBF0xY,eAhkBK,IAAAl0V,KAAA,YAAA,EAikBLm0V,WAAY,E,EAEdgB,0BAA6B,CAC3B10Y,MAAO,8CACP+B,KAAM,8CA/jBV0xY,eAAS,IAAAl0V,KAAoB,YAAA,EAC3Bm0V,WAAY,E,EAkkBZiB,kBAhkBO,CAikBL30Y,MAAO,sCACP+B,KAAM,sCA/jBR0xY,eAAgB,IAAGl0V,KAAA,YAAA,EACjBm0V,WAAO,E,EAkkBTkB,qBAhkBoB,CAikBlB50Y,MAhkBM,yCAikBN+B,KAhkBM,yCAikBN0xY,eAhkBY,IAAAl0V,KAAA,YAAA,EAikBZm0V,WAAY,E,EAEdmB,4BAA+B,CAC7B70Y,MAAO,gDA/jBX+B,KAAS,gDACP0xY,eAAa,IAAAl0V,KAAA,YAAA,EACbm0V,WAAa,E,EAkkBboB,mBAhkBO,CAikBL90Y,MAhkBI,uCAikBJ+B,KAhkBI,uCAikBJ0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAAY,E,EAEdqB,cAhkBQ,CAikBN/0Y,MAhkBO,kCAikBP+B,KAAM,kCACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAAY,GA/jBdI,WAAI,qE,EAEJkB,kBAAoB,CAikBlBh1Y,MAAO,sCACP+B,KAAM,sCA/jBV0xY,eAAS,IAAAl0V,KAAoB,YAAA,EAC3Bm0V,WAAI,GACJI,WAAc,4E,EAkkBdmB,gBAhkBQ,CAikBNj1Y,MAhkBM,oCAikBN+B,KAhkBI,oCAikBJ0xY,eAhkBI,IAAal0V,KAAA,YAAA,EAikBjBm0V,WAhkBS,E,EAkkBXwB,mBAAsB,CACpBl1Y,MAhkBM,uCAikBN+B,KAAM,uCACN0xY,eAhkBe,IAAAl0V,KAAA,YAAA,EAikBfm0V,WAhkBE,E,EAkkBJyB,oBAhkBsB,CAikBpBn1Y,MAhkBI,wCAikBJ+B,KAAM,wCACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAhkBM,E,EAkkBR0B,kBAAqB,CACnBp1Y,MAAO,sCACP+B,KAAM,sCACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAAY,GA/jBhBI,WAAgB,4F,EAkkBduB,gCAhkBE,CAikBAr1Y,MAAO,oDACP+B,KAAM,oDACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EA/jB3Bm0V,WAAM,GACJI,WAAM,yH,EAkkBRwB,sBAAyB,CACvBt1Y,MAAO,0CA/jBT+B,KAAI,0CACF0xY,eAAc,IAAIl0V,KAAA,YAAA,EAikBlBm0V,WAhkBQ,E,EAkkBV6B,UAhkBU,CAikBRv1Y,MAhkBE,8BAikBF+B,KAhkBE,8BAikBF0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAAY,GA/jBZI,WAAQ,+F,EAkkBV0B,sBAhkBgB,CAikBdx1Y,MAAO,sCACP+B,KAAM,sCACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EACzBm0V,WAAY,E,EAEd+B,oBAAuB,CACrBz1Y,MAAO,oCACP+B,KAAM,oCACN0xY,eAAgB,IAAIl0V,KAAK,YAAA,EA/jB3Bm0V,WAAI,E,OAqkBV,CAAA,WACE,aAEAr6Y,QACGC,OAhkBK,UAAA,EAikBLM,UAhkBO,oBAmkBV,WACE,MAAO,CACLkM,QAAS,CAAA,EA/jBXjM,SAAS,IACPC,MAAO,CAikBL8B,GAAI,IACJ85Y,aAAc,KA/jBlBC,aAAS,KACPtjS,OAAI,KACJujS,SAAI,I,EAkkBJ37Y,YAhkBM,6DAikBNN,WAhkBQ,CAAA,SAAa,UAAA,mCAAA,SAAAH,EAAAgB,EAAAq7Y,GAikBnBn5X,OAhkBEy0G,OAAQ33H,EAAAq8Y,EAAAr8Y,EAAAoC,GAAA,EAERpC,EAAIk6Y,aAikBJl6Y,EAhkBMk6Y,WAAA,IAmkBRl6Y,EAhkBM8gB,QAAK,WAikBT,MAhkBuE,SAgkBnE9f,EAhkBEof,aAAiBgM,QAASpsB,EAAAoC,GAAA,yBAAA,GAG9B,EAAA,IAAI2jD,KAAA,IAAAA,KAAA/lD,EAA2Bi6Y,cAAA,IAG/B,EAAA,IAAAl0V,KAAA,IAAmBA,KAAA/lD,EAAAi6Y,cAAA,EAAA,GAAAj6Y,EAAAk6Y,WAAA,GAAA,GAAA,MAmkBdl6Y,EAAOoC,IAAOpC,EAAOwG,OAASxG,EAAOuI,MAAQvI,EAAOi6Y,gBAAkBj6Y,EAAOk6Y,U,EAGtFl6Y,EAAOs8Y,QAAU,WA/jBrBt7Y,EAASof,aAAAC,QAAyBrgB,EAAAoC,GAAA,0BAAA,MAAA,C,KApC1B,C,IA2mBZ,CAAA,WACE,aAsBA,SAhkBQm6Y,EAAyBv8Y,EAAAu0B,GAikB/Bv0B,EAhkBO+/I,QAkkBP,WACE,GAAI//I,EAAOmH,OAASotB,EAAgBovH,UA/jBtC,MAAS,2DAkkBP,GAhkBE3jJ,EAAMmH,OAAAotB,EAAkBC,MACxB,MAAM,8D,yCAoiBZ30B,QACGC,OAAO,UAAA,EACPK,WAAW,4BAA6Bo8Y,CAAA,EACxCn8Y,UAAU,kBAGb,WACE,MAhkBI,CAikBFC,SAhkBG,IAikBHssB,SAhkBM,2EAikBNxsB,WAhkBS,4BAikBTmM,QAhkBS,CAAA,EAikBThM,MAhkBM,CAikBJ6G,KAAM,G,GAVoB,C,IA+BlC,CAAA,WACE,aAkBA,SAASq1Y,EAAuBx8Y,EAAQe,EAAWE,EAAKI,EAAaT,EAAUO,EAASg2W,EAAYl5V,GAkBlG,IA/jBIw+X,EAikBEC,EAEAz7J,EAiEN,SAjkBQ07J,EAAS9vX,GAkkBf7sB,EAjkBMsrG,aAAMz+E,C,CA4Bd,SAAAk+K,EAAA/qM,EAAAe,EAAAiqM,GAkkBEhrM,EAAOgrM,QAAUA,EACjBhrM,EAAOwtC,YAAc,WAhkBvBzsC,EAAAuK,KAAA,C,6CA6cAtL,EAAO48Y,YAAc,GACrB58Y,EAAO68Y,gBAAkB,GA/jBzB78Y,EAAA4nQ,OAAS,KAikBT5nQ,EAhkBEw9E,MAAA,CAAA,EAikBFx9E,EAhkBImvJ,UAAY,EAikBhBnvJ,EAhkBI88Y,gBAAqB,KAikBzB98Y,EAhkBIsrG,aAAY,KAikBhBtrG,EAhkBIggB,QAAY,CAAA,EAmkBhBhgB,EAAO28Y,WAAaA,EACpB38Y,EAAOg0F,WA6EP,SAjkBe3rF,EAAA2iM,GAkkBbjqM,EAAUoC,KAAK,CACbhD,WAAY4qM,EACZp+K,SACE,qRAOFlkB,OAAQ,CACNuiM,QAASA,C,EA/jBjBjkM,OAAQlH,QAAOmH,QAAQsB,SAAAC,IAAA,EAkkBjBC,YAAaH,EAhkBjB5B,oBAAA,CAAA,C,GAEAE,KAAA,SAAAsiM,KAmkBO,Y,GA5pBHwzM,EAAOx+X,EAAAS,MAAA,EAikBLg+X,EAhkBGz+X,EAAAS,MAAA,EAkkBHuiO,EAAW,CAACw7J,EAAe19X,QAAS29X,EAAW39X,SACnD9d,EAAI09B,QAAQi+W,YAAY5xW,KAAK,KAAM,SAAUxoC,EAAUC,EAAUC,GAC3DA,GAAUrB,EAAYsB,aA/jB9B85Y,EAAkB7nY,QAAK,CAAA,CAAA,EACjBhU,EAAIuC,KAASvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,IAIHd,EAAAwF,QAymBFqb,OAAO,SAAUwJ,GA/jBlC,MAAY,CAAAA,EAAAkwX,W,GACX1lW,KAAA,SAAApsC,EAAAssD,GAikBM,OAAOtsD,EAAE3H,SAAWi0D,EAAEj0D,Q,GACrBP,QAAQ,SAAU8pB,EAAM8Z,GAhkB/B9Z,EAAA+oF,OAAAjvE,EAAA,EACUq2W,EAAA,IAAA7lC,EAAAtqV,CAAA,EACP7sB,EAAU68Y,gBAAahwX,EAAAzqB,IAAA46Y,EAkkBpBh9Y,EAAO48Y,YAAYzqY,KAAK6qY,CAAA,C,GA9jB5Bh9Y,EAAO48Y,YAAA3tY,QACL0tY,EAAM38Y,EAAU48Y,YAAgB,EAAA,EA6gB9BH,EAAe7nY,QAAQ,CAAA,CAAA,E,GAGzB3T,EAhkBE09B,QAASC,MAAAoM,KAAA,CAikBT1oC,OAhkBM,Q,EACN,SAAWE,EAASC,EAAKC,GACzBA,GAAArB,EAAsBsB,aACtB+5Y,EAAI9nY,QAAU,CAAA,CAAA,EACbhU,EAASuC,KAAAvC,EAAcwC,OAAA,EAAUC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,IAokBlCtD,EAAO4nQ,OAASplQ,EA/jBpBk6Y,EAAS9nY,QAAA,CAAA,CAAA,E,GAmkBPqJ,EAAGvE,IAAIunO,CAAA,EAAUt6O,KAAK,WA/jBxB,IAAAi3J,EAAkB,CAAA,EAChBqjF,EAAUl+O,QAAK,SAAa+K,GAikBxB8vJ,GAAW9vJ,EAAOmvY,QAAQriY,K,GA7jB9B5a,EAAG4nQ,OAAAs1I,YAAsBl9Y,EAAA4nQ,OAAAs1I,WAAAn6Y,QAAA,SAAA8pB,GAikBjBA,EAAKkwX,YACP/8Y,EAAO68Y,gBAAgBhwX,EAAKkwX,aAAaplC,oBAAoB9qV,EAAKzqB,EAAA,EAElEpC,EAAO68Y,gBAAgBhwX,EAAKzqB,IAAIm1W,KAAO,CAAA,C,GA5jB7Cv3W,EAAO48Y,YAAA75Y,QAAA,SAAA8pB,GACP7sB,EAAAmvJ,WAAYtiI,EAAAsiI,UAAA,EAAA,EAAA,C,GAGZnvJ,EAAMw9E,MAASogF,EAikBb59J,EAAOggB,QAAU,CAAA,C,+FAlFvBngB,QACGC,OAAO,UAAA,EACPK,WAhkBW,yBAAgBq8Y,CAAA,EAikB3Bp8Y,UAAU,eAGb,WACE,MAAO,CACLC,SAAU,IACVI,YAAa,oDACbN,WAAY,wB,EAPa,C,IA2I/B,CAAA,WACE,aAqBA,SAjkBEg9Y,EAAAn9Y,EAAAu0B,GAokBAv0B,EAAOioB,MAAQ,GACfjoB,EAAOkf,KAAO,GA7jBdyH,KAAAA,IAAA3mB,EAAAmH,OAGAnH,EAAAmH,OAAAotB,EAAAovH,WACA3jJ,EAAAkf,KAAA,sBACAlf,EAAAioB,MAAA,SACAjoB,EAAAmH,OAAAotB,EAAAC,QACAx0B,EAAAioB,MAAA,OACAjoB,EAAAkf,KAAA,mB,wCA8hBFrf,QAhkBEC,OAAA,UAAA,EACAK,WAAA,6BAAAg9Y,CAAA,EACA/8Y,UAAA,mBAokBF,WAhkBE,MAAA,CACAC,SAAA,IACAssB,SAAA,gLACAxsB,WAAA,6BACAG,MAAA,CACA6G,KAAA,G,GATA,C,IAumBJ,CAAA,WACE,aAsBA,SAjkBEi2Y,EACAr8Y,EACAwG,EACArG,EACAN,EACAZ,EACAmB,EACAH,EACAC,EACAwkP,EACA/jP,EACAo2B,EACAy+E,EACA/uF,EACAnmB,EACAyrI,EACAsmI,GAIA,IAAAxxQ,EAAAC,KAstBA,SAASknC,EAASvmC,GAhkBhB,IAAA66Y,EACE76Y,EAAOE,SAAArB,EAAAsB,aACP/B,EAAMuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,0CAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EACN+5Y,EAAA,IAAgB9mS,EAAS/zG,EAAAmI,IAAA,EACzB9K,QAAAqhB,OAAYlhB,EAAAs9Y,wBAAAD,CAAA,EAkkBZz7Y,EAAG07Y,wBAA0Bt9Y,EAAOs9Y,wBAhkBtC17Y,EAAA27Y,oBAAA,CAAA,EACE37Y,EAAA47Y,wBAAO,CAAA,GACDh7Y,EAAAE,SAAArB,EAAA6H,kBACNm0Y,EAAA,IAAgB9mS,EAAS/zG,EAAAmI,IAAA,EACzB9K,QAAAqhB,OAAYlhB,EAAAs9Y,wBAAAD,CAAA,EAkkBZz7Y,EAAG07Y,wBAA0Bt9Y,EAAOs9Y,wBAhkBtC17Y,EAAA27Y,oBAAqB,CAAA,EACnB37Y,EAAA47Y,wBAAO,CAAA,GACDh7Y,EAAAE,SAAArB,EAAAkE,mBAAA/C,EAAAmI,KAAAyE,MACN5M,EAAoBmI,KAAKyE,QAykBToY,EAAYi2X,uCAhkB9Bz9Y,EAAA09Y,qCAA+Bt/P,cAAA70G,aAAA,SAAA,CAAA,CAAA,EAC7BvpC,EAAO09Y,qCAAAt/P,cAAA2iP,YAAA,EACP/gY,EAAM09Y,qCAAAt/P,cAAAosB,UAAA,GAwjBN5pK,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,EAEpG1B,EAjkBEgE,OAAO,CAAA,C,CAyqBX,SAjkBQ+3Y,IAkkBN,MAjkBE/7Y,CAAAA,EAAAgE,QAGAhE,CAAAA,CAAAA,EAAA07Y,wBAAU3oI,mBAAA,C,CApRd/yQ,EAAA07Y,wBAAAt9Y,EAAAs9Y,yBAAA,GACA17Y,EAAA80G,gBAAA12G,EAAA02G,iBAAA,GACA90G,EAAA27Y,oBAAA,CAAA,EACA37Y,EAAA47Y,wBAAA,CAAA,EACA57Y,EAAAgE,OAAA,CAAA,EACAhE,EAAA0sB,cAAA,CACAC,UAAA,WACAC,gBAAA,EACAC,oBAAA,EACA4mD,WAAA,CAAA,EACA1mD,WAAA,CAAA,EACAC,0BAAA,IACAgvX,kBAAA,U,EAEAh8Y,EAAAwsB,OAAA,CAkkBEC,KAAM,E,EA/jBRzsB,EAAAi8Y,0BAAA,CAkkBEtvX,UAAW,WAhkBbC,gBAAA,EACAC,oBAAA,EAkkBE4mD,WAAY,CAAA,EACZ1mD,WAAY,CAAA,EAhkBdC,0BAAA,IAkkBEgvX,kBAAmB,e,EA/jBrBh8Y,EAAAk8Y,mBAAA,CACAzvX,KAAA,E,EAIAzsB,EAAAylJ,qBAkmBA,WACMrnJ,EAAO09Y,sCAhkBX19Y,EAAA09Y,qCAAkBt/P,eAChBp+I,EAAO09Y,qCAAAt/P,cAAA70G,aAAA,SAAA,CAAA,CAAA,C,EAnCX3nC,EAAAm8Y,sBAwmBA,WAhkBE98Y,EAAA04G,gBAAAm7D,iCAAqClyK,IAAA,CACnCR,GAAAR,EAAO07Y,wBAAAl7Y,GACPE,OAAM,wB,EACN,SAAAE,EAAoByF,EAAAvF,GACpB,IAuGoBF,EA6BpBgI,EApIA9H,IAAYrB,EAAAsB,YAkkBVm1B,EAAMkpI,aAAa,gDAAiD,kBAAmBlpI,EAAMwjU,iBAAiB94V,CAAA,CAAA,EAhkBlHA,EAAgB4M,SAqGM5M,EApGbA,GAqGA4M,QAAAoY,EAAAw2X,qCACPxzY,EAAMzJ,EAAAyJ,MAAA,EACNhE,MAAArF,EAAgB,WAAA,EAAS,sDAAA,CAAA,EACzB2H,YAAY3H,EAAA,WAAA,EAAA,2DAAA,CAkkBRiqW,YAAa1pW,EAAQga,QAAQ8kP,U,IA/jBjC95P,GAAAvF,EAAO,WAAA,EAAA,eAAA,CAAA,EACPJ,EAAMoC,KAAAqH,CAAA,GACNhI,EAAgB4M,QAASoY,EAAAy2X,0CACzB13Y,EAAYxF,EAAAwF,QAAA,EACZC,MAAArF,EAAY,WAAA,EAAA,0DAAA,CAAA,EAkkBT2H,YAAY3H,EAAQ,WAAA,EAAa,+DAAgE,CAhkBtGmsI,SAAA9qI,EAAqB8qI,Q,IAEnB5mI,GAAMvF,EAAA,WAAA,EAAA,6BAAA,CAAA,EACNoC,OAAApC,EAAgB,WAAA,EAAS,eAAA,CAAA,EACzBJ,EAAAoC,KAAYoD,CAAA,EAAAI,KAAA,WAqlBhB,IAAwBu+P,EAAAA,EAplBR1iQ,EAAA6+V,QAoBd3/V,EAAA8B,cAAqB,sBAAA,GAokBrBzC,EAjkBEoC,KAAA,CACAhD,WAAY,uBACZK,aAAY,KAkkBZC,YAAa,kEAhkBfgG,oBAAA,CAAA,EACEiJ,SAAO,CAAA,EACPkF,QAAM,CACNi4H,SAAA,CAAA,cAAA,SAAoB73H,GACpB,OAAAA,EAAYJ,QAAA,oBAAA,CAAAxS,GAAA8iQ,CAAA,CAAA,C,GAmkBV3vP,eAAA,CAAA,cAAgB,SAASP,GAhkB7B,OAAAA,EAAyBJ,QAAA,8BAAA,CACvBU,WAAO,2B,GACD3O,KAAA,SAAAnE,GACN,OAAAA,EAAoBwF,O,KAGtBoO,oBAAA,CAAA,cAAa,SAAApB,GACX,OAAOA,EAAAJ,QAAA,4BAAA,EAAAjO,KAAA,SAAAnE,GACD,OAAAA,EAAAwF,O,KAGNuV,UAAA,CAAA,cAAY,SAAAvI,GAkkBR,OAAOA,EAAYJ,QAAQ,oBAAA,EAAsBjO,KAAK,SAASnE,GAhkBrE,OAAAA,EAAAwF,QAAyBqb,OAAA,SAAAmqH,GAChB,OAAAA,EAAAprI,KAAA0qI,EAAA05G,mB,GACDpjO,IAAA,SAAAoqH,GACN,OAAA,IAAgBi4G,EAAIj4G,CAAA,C,QAKpB/kI,OAAM,CACN+C,OAAA,CACAyiI,WAAY,CAAA,C,KAokBXh/F,QAAQ,Y,GA3DN,Y,GA9jBGzsC,EAAA4M,QAAAoY,EAAA02X,4CACN1zY,EAAAzJ,EAAoByJ,MAAA,EACpBhE,MAAArF,EAAY,WAAA,EAAA,4DAAA,CAAA,EAkkBT2H,YAAY3H,EAAQ,WAAA,EAAa,iEAAkE,CAAE+d,KAAM1c,EAASg+P,UAAA,CAAA,CAAA,EAhkBzH95P,GAAAvF,EAAA,WAAA,EAAsB,eAAA,CAAA,EACpBJ,EAAOoC,KAAAqH,CAAA,GACDhI,EAAA4M,QAAAoY,EAAA22X,oDACN3zY,EAAAzJ,EAAoByJ,MAAA,EACpBhE,MAAArF,EAAY,WAAA,EAAA,mEAAA,CAAA,EAkkBT2H,YAAY3H,EAAQ,WAAA,EAAa,wEAAyE,CAAE+d,KAAM1c,EAASg+P,UAAA,CAAA,CAAA,EAhkBhI95P,GAAAvF,EAAA,WAAA,EAAuB,eAAA,CAAA,EACrBJ,EAAOoC,KAAAqH,CAAA,G,IAnLX5I,EAAAmtB,UAonBA,SAAmBtkB,GAhkBjB7I,EAAAwsB,OAAAC,KAAeW,MAAA7c,KAAA1H,CAAA,EAkkBf7I,EAjkBE27Y,oBAAO,CAAA,EAkkBT37Y,EAjkBE07Y,wBAAM/pI,SAAA9oQ,EAAAA,I,EArDV7I,EAAAw8Y,sBAynBA,SAjkBgB3zY,GAkkBd7I,EAAGk8Y,mBAAmBzvX,KAAKW,MAAM7c,KAAK1H,CAAA,EAhkBtC7I,EAAA47Y,wBAAgB,CAAA,EAkkBhB57Y,EAjkBE07Y,wBAAOhqI,cAAA7oQ,EAAAA,I,EA1DX7I,EAAAgH,KA8nBA,WACE,IA7jBEy1Y,EAQAC,EAOAC,EAGFz5X,EAtBE64X,EAAA,IAokBF/7Y,EAjkBEgE,OAAO,CAAA,EACPy4Y,EAAM,IAAAG,SAEN58Y,EAAA07Y,wBAAY/pI,UAAA3xQ,EAAA27Y,qBACZc,EAAAzpW,OAAY,WAAAhzC,EAAA07Y,wBAAA/pI,QAAA,EAEd3xQ,EAAA07Y,wBAAmBhqI,eAAA1xQ,EAAA47Y,yBACjBa,EAAOzpW,OAAA,gBAAAhzC,EAAA07Y,wBAAAhqI,aAAA,EAEPgrI,EAAA18Y,EAAgB07Y,wBAASn5S,OAAA,EAkkB3BjhF,OAjkBEwkC,KAAA42V,CAAA,EAAYv7Y,QAAA,SAAAie,GACA,MAAZs9X,EAAYt9X,IAkkBVq9X,EAASzpW,OAAO5zB,EAAKs9X,EAAWt9X,EAAA,C,GA7jBlCu9X,EAAAt9Y,EAAgBmL,KAAIutG,gBAAKm7D,iCACzBxoK,QAAA,WAAY,EAAA,EAEdwY,EAAA,CACEA,QAAO,CACPG,eAAM0B,KAAAA,EACN5B,cAAgB,SAASrjB,EAAAsjB,K,EAmkBzBy5X,iBAAkB5+Y,QAAQ6+Y,Q,EA9jB1B98Y,EAAA07Y,wBAAMl7Y,IACNm8Y,EAAAA,EAAoBjyY,QAAK,MAAA1K,EAAA07Y,wBAAAl7Y,EAAA,EACzBmF,EAAAmgI,IAAA62Q,EAAYF,EAAAv5X,CAAA,EAAAne,KAkkBV,SAASnE,GAhkBbumC,EAAAvmC,CAAA,C,EACE,SAAO4M,GACPxO,EAAMuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EACN1B,EAAAgE,OAAgB,CAAA,C,KAGlB24Y,EAAAA,EAAgBjyY,QAAA,OAAA,EAAA,EACd/E,EAAAgF,KAAOgyY,EAAAF,EAAAv5X,CAAA,EAAAne,KACP,SAAMnE,GACNumC,EAAAvmC,CAAA,C,EACA,SAAY4M,EAAA1M,GAkkBR9B,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,EAhkBxG1B,EAAAgE,OAAA,CAAA,C,MAsdFhE,EAAG+8Y,6BA/VL,WACG,OAAA/8Y,EAAO07Y,wBAAA9pI,mBAAAJ,EAAAiB,6BAokBFzyQ,EAAG07Y,wBAAwB9pI,mBAAqBJ,EAA2BsB,6BA9jB/E,OAFK,UAHI,O,EA8VX9yQ,EAAG+7Y,cAAgBA,EAhkBnB/7Y,EAAAg9Y,yBAqzBA,WAEE,IAAIr4Y,EAAUxF,EAAUwF,QAAA,EACrBC,MAAMrF,EAAQ,WAAA,EAAa,4BAAA,CAAA,EAhkB5B2H,YAAO3H,EAAU,WAAA,EAAW,oCAAA,CAAA,EAkkB3BuF,GAjkBCvF,EAAI,WAAA,EAAQ,oCAAA,CAAA,EAkkBboC,OAjkBGpC,EAAO,WAAA,EAAA,gBAAA,CAAA,EAkkBbJ,EAAUoC,KAAKoD,CAAA,EAASI,KAAK,WAQxB/E,EAAG07Y,wBAAwBzoI,kBAAA,GA9jB5BnzQ,EAAQ4I,KAAA8uE,aAAA,IAokBZx3E,EAAGgE,OAAS,CAAA,EACZ3E,EAAI04G,gBAAgBm7D,iCAAiC3yK,OAAO,CAC1DC,GAAIR,EAAG07Y,wBAAwBl7Y,GAC/BE,OAAQ,Q,EAhkBf,SAAWE,EAAAyF,EAAAvF,GACVA,IAAArB,EAAAsB,aAkkBY06Y,EAAc,IAAI9mS,EAAiC/zG,CAAA,EACvD3C,QAAQqhB,OAAOlhB,EAAOs9Y,wBAAyBD,CAAA,EAjkBvDz8Y,EAAAuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,0CAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EACGtC,EAAOyN,SAAAC,OAAA,GAEP9N,EAAUuC,KAAAvC,EAAAwC,OAAA,EAAmBC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EAokB1B1B,EAAGgE,OAAS,CAAA,C,KAzBX,Y,GA7zBLhE,EAAAi9Y,6BA01BA,WAjkBE,MAAA,CAAA,CAAAj9Y,EAAY07Y,wBAAAl7Y,IAAAR,EAAA07Y,wBAAA7wP,WAAA,C,EAxRd7qJ,EAAAk9Y,6BA61BA,WACE,OAAOl9Y,EAAG07Y,wBAAwB1oI,UAAA,GAAehzQ,EAAG07Y,wBAAwBvoI,kBAAA,C,EA71B9EnzQ,EAAAm9Y,+BAg2BA,WACE,OAAOn9Y,EAAGgE,QAAU,CAAChE,EAAG07Y,wBAAwBxoI,kBAAA,C,EArRhD90Q,EAAOmwC,OAAO,0BAA2B,SAASC,GAhkB5CA,IACVxuC,EAAA07Y,wBAAAltW,E,EAEA,CAAA,CAAA,EACGpwC,EAAOmwC,OAAA,kBAAA,SAAAC,GAkkBAA,IAhkBPxuC,EAAA80G,gBAAStmE,E,+NA6dZvwC,QAhkBEC,OAAA,UAAA,EACAK,WAAA,mDAAAi9Y,CAAA,EACAh9Y,UAAA,yCAokBF,WAhkBE,MAAA,CACAC,SAAA,IACAC,MAAA,CACAg9Y,wBAAA,KACA5mS,gBAAA,I,EAEAv2G,WAAA,mDACAK,aAAA,KACAC,YAAA,6G,EAZA,C,IAq7BJ,CAAA,WACE,aA/iBA,SAASu+Y,EAAeh/Y,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAAx2E,EAAAD,EAAAG,EAAAS,EAAAorI,GAskBtB,IAnkBElrI,EAAAC,KAokBFD,EAnkBEuK,IAAAlL,EAAAmL,KAAYuyB,QAAAC,MAAAtyB,QAAA,QAAA,EAAA,EAokBd1K,EAAGgf,QAAU,KACbhf,EAAGc,OAAS1C,EAAO0C,OACnBd,EAAGg1F,aAAe,qCAClBh1F,EAAGq9Y,mBAAqB,GACxBr9Y,EAAGwrI,kCAAoC,CAAC1rI,EAAQw4D,iBAAmBx4D,EAAQy4D,SAAS,4DAAA,EAGpFn6D,EAAOk/Y,cAiGP,SApkBMv0Y,GAqkBJ,IApkBIuiI,EAAA,GAkBJ,OAmjBAviI,EApkBIyY,IAAA,SAAA+7X,GAqkBF,IApkBE3xQ,EAAAV,EAAAqyQ,GACF3xQ,EAglBEN,GAAS,6CAA+C/rI,EAAQ,WAAA,EAAa,SAAWqsI,CAAA,EAAQ,UA/kBhGxtI,EAASktI,MAAAiyQ,IAqkBPjyQ,GAAS,6CAnkBLltI,EAAAktI,MAAQiyQ,GAAQ55U,cACxB2nE,GAAa,8BAAAltI,EAAAktI,MAAAiyQ,GAAA55U,YAAA,iBAGZ2nE,EAmkBGA,EAASltI,EAAOktI,MAAMiyQ,GAAOjgY,KAnkB3B,WAEHguH,GAAA,oD,GAME31D,EAAAoC,YAAUuzD,CAAA,C,EAidnBltI,EAAOo/Y,mBAsHP,SAA4Bz0Y,GAC1B,IAAIgZ,EAAa,GAIjB,OAHAhZ,EAAKyY,IAAI,SAAS20C,GAChBp0C,GAAc,yCAA2Co0C,EAAiB,S,GAErEwf,EAAKoC,YAAYh2D,CAAA,C,EA9rB1B3jB,EAAOq/Y,wBAisBP,SAAiC10Y,GAC/B,IAAI20Y,EAAmB,GAjkBxB,OAHH30Y,EAAAyY,IAAA,SAAAm8X,GACGD,GAAO,yCAAAC,EAAA,S,GAEPhoU,EAAUoC,YAAA2lU,CAAA,C,EA2cT19Y,EAAGgf,QAAU,CACXzB,WAAY,CAnkBhBgC,YAAOhgB,EAAa,WAAA,EAAA,cAAA,EACpBsf,MAAO,aAqkBDY,WAAY,CAAA,EAnkBlBP,QAAA,CAAA,EAqkBMgB,SAAU,IAnkBhB6F,MAAS,IACHpG,cAAA,CAAA,EACAC,WAAA,CAAA,EAqkBAC,aAAc,CAAA,EAnkBdH,UAAW,eACXK,aAAQ,qT,EACV2rH,SAAI,CACFnsH,YAAAhgB,EAAe,WAAA,EAAQ,gBAAA,EACvBigB,cAAcjgB,EAAS,WAAA,EAAS,gBAAA,EAChCsf,MAAA,WAqkBAY,WAAY,CAAA,EACZP,QAAS,CAAA,EAnkBXgB,SAAA,IACA6F,MAAA,IAqkBEpG,cAAe,CAAA,EACfC,WAAY,CAAA,EAnkBZC,aAAc,CAAA,EAChBE,aAAQ,qL,EACPrY,MAAA,CACD6X,YAAchgB,EAAA,WAAA,EAAY,aAAA,EACxBsf,MAAA,QACAY,WAAS,CAAA,EACTP,QAAA,CAAA,EAqkBAgB,SAAU,IACV6F,MAAO,IAnkBTpG,cAAgB,CAAA,EAChBC,WAAW,CAAA,EAqkBTC,aAAc,CAAA,EACdE,aAAc,4D,EAnkBfyd,MAAI,CACLje,YAAchgB,EAAA,WAAA,EAAA,aAAA,EACdsf,MAAS,QACPY,WAAW,CAAA,EAqkBXP,QAAS,CAAA,EACTgB,SAAU,IAnkBZ6F,MAAO,IACLpG,cAAS,CAAA,EAqkBTC,WApkBS,CAAA,EAqkBTC,aApkBO,CAAA,EAqkBPE,aApkBS,4D,EAqkBRurH,MAAO,CACR/rH,YAAahgB,EAAQ,WAAA,EAAa,aAAA,EAClCsf,MAAO,QAnkBTY,WAAO,CAAA,EACLP,QAAO,CAAA,EAqkBPgB,SAAU,IACV6F,MAAO,IAnkBTpG,cAAe,CAAA,EACfa,cAAiB,CAAA,EAqkBfZ,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,sG,EAnkBpB69X,iBAAS,CACPr+X,YAAYhgB,EAAO,WAAA,EAAgB,uBAAA,EACjCsf,MAAQ,mBACPY,WAAK,CAAA,EACNP,QAAS,CAAA,EACRgB,SAAQ,IACT6F,MAAK,IACLpG,cAAiB,CAAA,EACjBa,cAAO,CAAA,EACPZ,WAAO,CAAA,EAqkBLC,aAAc,CAAA,EACdE,aAAc,sH,EAnkBd89X,uBAAmB,CACrBt+X,YAAWhgB,EAAO,WAAA,EAAY,wBAAA,EAqkB5Bsf,MAAO,yBACPY,WAAYzf,EAAGwrI,kCACftsH,QAAS,CAAA,EAnkBfgB,SAAS,IACP6F,MAAO,IAqkBHpG,cAAe,CAAA,EACfa,cAAe,CAAA,EAnkBrBZ,WAAS,CAAA,EACPC,aAAe,CAAA,EACbE,aAAY,iI,sHA0clB9hB,QACGC,OAlkBK,UAAA,EAmkBLK,WAlkBU,wBAAA6+Y,CAAA,EAmkBV5+Y,UAAU,cAGb,WACE,MAAO,CAjkBVC,SAAY,IACXC,MAAA,CAmkBMoC,OAAQ,IAAKwqI,MAAO,G,EAjkB1B/sI,WAAA,wBACGK,aAAO,KACPC,YAAW,iD,EAwjBc,C,IAqK9B,CAAA,WACE,aAsBA,SArkBMi/Y,EAAe1/Y,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAA09C,EAAAv9C,EAAAS,EACUL,EAAgBye,EAAOqxD,EAAAD,EACjCtgC,GAwkBnB,IAAIhvC,EAAKC,KACTD,EAAGuK,IAAMlL,EAAImL,KAAKnK,YAAYowC,eAAe/lC,QAAQ,QAAS,EAAA,EAC9D1K,EAAGgf,QAAU,KACbhf,EAAGc,OAAS1C,EAAO0C,OApkBtBd,EAAAg1F,aAAW52F,EAAA42F,cAAA,uCAwkBR52F,EAAO2/Y,eA4FP,SAAwBj9Y,GArkBxB,OAAS60E,EAAAoC,YAAA,6BAAoBzI,EAAAxuE,GAAA,KAAAvB,EAAA,WAAA,EAAA,aAAAgwE,EAAAzuE,EAAA,EAAA,SAAA,C,EArF7Bd,EAAAgf,QAAO,CACL1c,SAAU,CACVid,YAAOhgB,EAAA,WAAA,EAAA,yBAAA,EACLsf,MAAA,WACAY,WAAA,CAAA,EAukBEP,QAAS,CAAA,EArkBbgB,SAAY,IACZP,cAAc,CAAA,EACdC,WAAa,CAAA,EAukBTC,aAAc,CAAA,EACdE,aAAc,0Z,EAnkBbjf,OAAA,CACPye,YAAAhgB,EAAA,WAAA,EAAA,kBAAA,EACAigB,cAAAjgB,EAAA,WAAA,EAAA,kBAAA,EACAsf,MAAA,SACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EACAgB,SAAA,IACA6F,MAAA,IACApG,cAAA,CAAA,EACAC,WAAA,CAAA,EACAC,aAAA,CAAA,EACAE,aAAA,wG,EACAi+X,uBAAA,CACAz+X,YAAAhgB,EAAA,WAAA,EAAA,4BAAA,EACAigB,cAAAjgB,EAAA,WAAA,EAAA,4BAAA,EACAsf,MAAA,yBACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EAukBMgB,SAAU,IACVH,aAAc,8E,EArkBhBk+X,uBAAK,CACN1+X,YAAAhgB,EAAA,WAAA,EAAiC,4BAAA,EACjCigB,cAAkBjgB,EAAO,WAAA,EAAA,4BAAA,EACzBsf,MAAA,yBACAY,WAAA,CAAA,EACAP,QAAS,CAAA,EACTgB,SAAA,IACDH,aAAkB,8E,EAClBtd,WAAiB,CACjB8c,YAAAhgB,EAAqB,WAAA,EAAA,yBAAA,EACrBigB,cAAYjgB,EAAA,WAAA,EAAA,yBAAA,EACZsf,MAAA,aACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EAukBIgB,SAAU,IArkBbP,cAAS,CAAA,EACVC,WAAM,CAAA,EAukBFC,aAAc,CAAA,EArkBjBE,aAAA,0F,EACDnd,YAAkB,CAClB2c,YAAiBhgB,EAAA,WAAA,EAAA,yBAAA,EACjBigB,cAAAjgB,EAAqB,WAAA,EAAA,yBAAA,EACrBsf,MAAA,cACAY,WAAY,CAAA,EACZP,QAAA,CAAA,EACAgB,SAAA,IAukBIP,cAAe,CAAA,EArkBlBC,WAAA,CAAA,EACDC,aAAM,CAAA,EAukBFE,aAAc,uF,EACbiJ,OAAQ,CACTzJ,YAAahgB,EAAQ,WAAA,EAAa,iBAAA,EArkBrCigB,cAAAjgB,EAAuB,WAAA,EAAA,gBAAA,EACvBsf,MAAA,SACAY,WAAY,CAAA,EACZe,cAAA,CAAA,EACAtB,QAAO,CAAA,EACPgB,SAAA,IACAH,aAAgB,sD,EAChBld,MAAA,CACA0c,YAAAhgB,EAAA,WAAA,EAA+B,iBAAA,EAC/BigB,cAAAjgB,EAAA,WAAA,EAA+B,iBAAA,EAC/Bsf,MAAA,QAukBGY,WAAY,CAAA,EACZP,QAAS,CAAA,EArkBfgB,SAAA,IAukBMH,aAAc,qD,iPAvHtB9hB,QACGC,OAAO,UAAA,EACPK,WAAW,4BAA6Bu/Y,CAAA,EACxCt/Y,UAAU,kBAGb,WApkBA,MAAS,CAskBLC,SAAU,IACVC,MAAO,CApkBToC,OAAO,IACPk0F,aAAc,I,EAukBZz2F,WAAY,4BApkBdK,aAAgB,KACdC,YAAW,yD,EAyjBiB,C,IAiIlC,CAAA,WACE,aAuBA,SAASq/Y,EAAmC9/Y,EAAQsf,EAAUle,EAAYD,EAASo2E,EAAM32E,EAAUqd,EAAInd,EAAW09C,EAAUv9C,EAAKS,EAC9FL,EAAaye,EAAeqxD,EAAyBD,EArkB7DtgC,GAykBzB,IAtkBEhvC,EAAGC,KAukBLD,EAAGuK,IAAMlL,EAAImL,KAAKnK,YAAYqvC,wBAAwBhlC,QAAQ,QAAS,EAAA,EACvE1K,EAAGgf,QAAU,KArkBbhf,EAAAc,OAAS1C,EAAA0C,OAukBTd,EAtkBEg1F,aAAG52F,EAAmB42F,cAAgB,gDAykBxC52F,EAAO2/Y,eAyFP,SAtkBmBj9Y,GAukBjB,OAtkBM60E,EAAAoC,YAAa,6BAAgBzI,EAAAxuE,GAAA,KAAAvB,EAAA,WAAA,EAAA,aAAAgwE,EAAAzuE,EAAA,EAAA,SAAA,C,EAofnCd,EAAGgf,QAAU,CArkBbm/X,yBAAO,CACL5+X,YAAShgB,EAAO,WAAA,EAAe,0BAAA,EAukB7Bsf,MAAO,2BArkBPY,WAAG,CAAA,EACLP,QAAS,CAAA,EAukBPgB,SAAU,IArkBVP,cAAa,CAAA,EACjBC,WAAY,CAAA,EACVC,aAAe,CAAA,EACbE,aAAS,iJ,EAukBRzd,SAAU,CACXid,YAAahgB,EAAQ,WAAA,EAAa,yBAAA,EAClCsf,MAAO,WArkBPY,WAAY,CAAA,EACbP,QAAQ,CAAA,EAukBPgB,SAAU,IArkBVP,cAAU,CAAA,EACZC,WAAS,CAAA,EACPC,aAAA,CAAA,EACAE,aAAA,wI,EAukBCq+X,uBAAwB,CArkB3B7+X,YAAAhgB,EAAkB,WAAA,EAAQ,kBAAA,EAukBxBigB,cAAejgB,EAAQ,WAAA,EAAa,kBAAA,EACpCsf,MAAO,yBArkBPY,WAAG,CAAA,EACLP,QAAA,CAAA,EACAgB,SAAU,IACR6F,MAAA,IAukBApG,cAtkBW,CAAA,EAukBXC,WAtkBY,CAAA,EAukBZC,aAtkBW,CAAA,EAukBXE,aAtkBc,iH,EAukBbs+X,uCAAwC,CACzC9+X,YAtkBGhgB,EAAA,WAAA,EAAA,4BAAA,EACLigB,cAAYjgB,EAAU,WAAA,EAAgB,4BAAA,EACtCsf,MAAM,yCACJY,WAAS,CAAA,EAukBTP,QAtkBE,CAAA,EAukBFgB,SAtkBG,IAukBHH,aAtkBW,8E,EAukBVu+X,uCAtkBa,CAukBd/+X,YAAahgB,EAAQ,WAAA,EAAa,4BAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,4BAAA,EACpCsf,MAAO,yCACPY,WAAY,CAAA,EArkBlBP,QAAS,CAAA,EACHgB,SAAA,IACAH,aAAS,8E,EACXw+X,2BAAuB,CACvBh/X,YAAchgB,EAAI,WAAA,EAAA,yBAAA,EAClBigB,cAAejgB,EAAO,WAAA,EAAA,yBAAA,EACtBsf,MAAG,6BACHY,WAAG,CAAA,EACHP,QAAG,CAAA,EAukBDgB,SAtkBO,IACTP,cAAc,CAAA,EACdC,WAAQ,CAAA,EACRC,aAAG,CAAA,EACHE,aAAG,mG,EACAiJ,OAAA,CAukBDzJ,YAtkBOhgB,EAAS,WAAA,EAAW,iBAAA,EAC7BigB,cAAejgB,EAAS,WAAA,EAAK,gBAAA,EAukB3Bsf,MAtkBG,SACLY,WAAc,CAAA,EAukBZe,cAAe,CAAA,EArkBhBtB,QAAS,CAAA,EAukBRgB,SAAU,IACVH,aAAc,sD,EArkBpBy+X,sBAAwB,CAClBj/X,YAAAhgB,EAAc,WAAA,EAAY,iBAAA,EAC5BigB,cAAOjgB,EAAA,WAAA,EAAA,iBAAA,EACPsf,MAAO,wBACPY,WAAO,CAAA,EAukBLP,QAAS,CAAA,EACTgB,SAAU,IACVH,aAAc,8D,iPArHtB9hB,QACGC,OAAO,UAAA,EACPK,WAAW,qCAAsC2/Y,CAAA,EArkBlD1/Y,UAAS,2BAykBX,WACE,MAAO,CACLC,SAAU,IACVC,MAAO,CArkBToC,OAAS,IACPk0F,aAAI,KACFvlF,SAAO,I,EAwkBTlR,WAtkBY,qCAukBZK,aAtkBM,KAukBNC,YAtkBU,6E,EAboB,C,IAkuBpC,CAAA,WACE,aAkBA,SAAS4/Y,EAtkBmBrgZ,EAAAe,EAAAD,EAAAK,EAAAO,GAwkB1B,MAAM4+Y,EAAqB,qBArkBrBC,EAAA,qBAukBAC,EAtkBS,WAukBTC,EAtkBW,aAukBXC,EAtkBoC,oCAukBpCC,EAtkBW,kBAukBXrqN,EAtkBa,gBAukBbsqN,EAAY,YACZC,EAAY,YACZ1rN,EAAY,YACZ2rN,EAAW,WArkBbC,EAAQ,0CACNC,EAAQ,aAukBRC,EAtkBE,WAqlBR,SAtkBSC,EAAA56X,GAukBP,IAAI/f,EAAUxF,EAAUwF,QAAA,EACrBC,MAAMrF,EAAQ,WAAA,EAAa,+BAAA,CAAA,EArkBhC2H,YAAS3H,EAAgB,WAAA,EAAA,qCAAA,CAAA,EACvBsF,oBAAe,CAAA,CAAA,EACbM,OAAOlH,QAAAmH,QAAAsB,SAAAC,IAAA,CAAA,EAukBN7B,GAAGvF,EAAQ,WAAA,EAAa,oCAAA,CAAA,EArkB3BoC,OAAQpC,EAAA,WAAA,EAAA,gBAAA,CAAA,EAwkBRJ,EAAUoC,KAAKoD,CAAA,EAASI,KAAK,WArkB7Bw6Y,EAAO76X,CAAA,C,GA2kBT,SAtkBM66X,EAAU94Y,GACX+4Y,EAAM,CAukBPjhZ,WAtkBC,0BAukBDK,aAtkBY,KAukBZC,YAtkBQ,4EACVsG,OAAUlH,QAAKmH,QAASlG,EAAKmG,KAAW,MAAA,CAAA,EACtCuB,YAAAH,EAukBAvB,cAtkBY,CAAA,EAukBZ2B,OAAQ,CACNqlQ,eAAgB,EAChBzmQ,QAAS,CACP,CAACjF,GAAIk+Y,EAAoB1lY,MAAOzZ,EAAQ,WAAA,EAAa,0BAAA,CAAA,EArkB7D,CAASiB,GAAAm+Y,EAAiB3lY,MAAAzZ,EAAA,WAAA,EAAA,0BAAA,CAAA,EACnB,CAAAiB,GAAGo+Y,EAAA5lY,MAAAzZ,EAAwB,WAAA,EAAA,gBAAA,CAAA,EAC9B,CAAAiB,GAAAq+Y,EAAA7lY,MAAAzZ,EAAA,WAAA,EAAA,kBAAA,CAAA,EAukBI,CAACiB,GAAIs+Y,EAAmC9lY,MAAOzZ,EAAQ,WAAA,EAAa,yCAAA,CAAA,EArkBtE,CAAAiB,GAAAu+Y,EAAa/lY,MAAezZ,EAAA,WAAA,EAAA,uBAAA,CAAA,EAC9B,CAAAiB,GAAAk0L,EAAA17K,MAAAzZ,EAAA,WAAA,EAAA,qBAAA,CAAA,EAukBI,CAACiB,GAAIw+Y,EAAWhmY,MAAOzZ,EAAQ,WAAA,EAAa,iBAAA,CAAA,EArkB/C,CAAAiB,GAAAy+Y,EAASjmY,MAAAzZ,EAAA,WAAA,EAAA,iBAAA,CAAA,EACR,CAAAiB,GAAA+yL,EAAgBv6K,MAAAzZ,EAAA,WAAA,EAAA,iBAAA,CAAA,EACd,CAAAiB,GAAG0+Y,EAAAlmY,MAAAzZ,EAAwB,WAAA,EAAA,gBAAA,CAAA,EAC/B,CAAAiB,GAAQ2+Y,EAAAnmY,MAAAzZ,EAAA,WAAA,EAAA,+CAAA,CAAA,EACP,CAAAiB,GAAA4+Y,EAAmBpmY,MAAIzZ,EAAQ,WAAA,EAAA,kBAAA,CAAA,EAC5B,CAAAiB,GAAA6+Y,EAAWrmY,MAAAzZ,EAAY,WAAA,EAAa,gBAAA,CAAA,E,GA2kB1CJ,EAtkBSoC,KAAAi+Y,CAAA,C,CA8gBXphZ,EAtkBKq8D,WA0kBL,SAAoB/1C,IArkBpB5kB,EAAS4I,KAAA8uE,aAAA,EACP8nU,EAwkBEC,GAxkBK76X,CAAA,C,EAikBTtmB,EAAOmhZ,gBAAkBA,EACzBnhZ,EAAOkhZ,oBAAsBA,C,kEApC/BrhZ,QACGC,OAtkBG,UAAA,EAukBHK,WAtkBG,wBAAUkgZ,CAAA,EAukBbjgZ,UAtkBG,cAykBN,WACE,MAtkBM,CAukBJC,SAtkBM,IAukBNI,YAtkBQ,kDAukBRN,WAtkBS,uB,EAPE,C,IAmqBjB,CAAA,WACE,aAEAN,QACGC,OAAO,MAAA,EArkBRM,UAAS,qBAwkBX,WACE,MAAO,CArkBPC,SAAS,IACPC,MAAO,CAukBLsa,MAAO,KACPqvB,QAAS,KACTh7B,OAAQ,KACR46B,OAAQ,KArkBfE,OAAW,KACV69G,aAAA,I,EAwkBIj7H,SAAU,CAtkBd,iDACG,mJACA,qCACA,UAwkBG5W,KAAK,EAAA,EACP5V,WAAY,CAAC,SAAU,mBAAoB,SAASH,EAAQ4oC,GAtkBhE5oC,EAASo8Y,SAAc,WACrB,MAAOp8Y,EAAAA,CAAAA,EAAA4a,OAAA5a,CAAAA,EAAA4a,MAAAktI,gBAGH9nJ,CAAAA,CAAAA,EAAa4nJ,Y,EA6kBb5nJ,EAAOqhZ,SAAW,WAChB,OAAIrhZ,EAAO4a,MAtkBV,IAAAguB,EAAsB5oC,EAAQ4a,KAAA,EAykBxB,IAAIguB,EAAiB,CAtkB9BqB,QAAKjqC,EAAAiqC,QACNE,eAAenqC,EAAQiP,OACvB46B,OAAU7pC,EAAA6pC,OACVE,OAAS/pC,EAAO+pC,M,IAN4BM,WAAA,C,KA/BtC,C,IAonBb,CAAA,WACE,aAEAxqC,QACGC,OAAO,MAAA,EACPM,UAAU,yBAEb,WACE,MAvkBK,CAwkBHC,SAvkBE,IAwkBFC,MAvkBI,CAwkBFsa,MAvkBE,G,EAykBJ+R,SAvkBI,CAwkBF,iDACA,2CACA,gEACA,UACA5W,KAvkBE,EAAA,EAwkBJ5V,WAvkBI,CAAA,SAAW,mBAAA,SAAAH,EAAA4oC,K,EAyjBoB,C,IAoBzC,CAAA,WACE,aAsBA,SAvkBQ04W,EAASthZ,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAAG,EAAAS,EACCL,EAAAye,EAAArY,EAAAs7C,EAAAtzB,GA0kBhB,IAAI7tB,EAvkBEC,KAwkBND,EAAGuK,IAvkBGlL,EAAAmL,KAAAnK,YAAcyF,WAAA4E,QAAA,QAAA,EAAA,EAwkBpB1K,EAAGgf,QAvkBG,KAwkBNhf,EAAGc,OAvkBI1C,EAAO0C,OAwkBdd,EAAGg1F,aAvkBG52F,EAAa42F,cAAqB,mCA4kBxC52F,EAvkBM2/Y,eAiuBN,SAxkBqBj9Y,GAykBnB,OAxkBI60E,EAAOoC,YAAA,6BAAA52B,EAAArgD,GAAA,KAAAvB,EAAA,WAAA,EAAA,SAAAsG,EAAA/E,EAAA,EAAA,SAAA,C,EA8ab1C,EAvkBMuhZ,sBAouBN,SAxkBgB9hW,GA0kBd,IAAI0hH,EAxkBC,mDACDqgP,EAAa,EACbC,EAAA,EACAC,EAAO,EAykBRjiW,EAxkBCz2C,UAykBFy2C,EAxkBEz2C,SAASjG,QAAA,SAAAkc,GACTA,EAAA9X,OAAUsoB,EAAA6rE,SACVkmT,CAAA,GACAviY,EAAY9X,OAAAsoB,EAAA8rE,MACZkmT,CAAA,GACAxiY,EAAc9X,OAAAsoB,EAAA0rE,SACbumT,CAAA,E,GAKQ,EAATD,IAykBFtgP,GAxkBE,SAAUhgK,EAAA,WAAA,EAAA,aAAA,EAAA,KAAAsgZ,EAAA,YAEE,EAAZD,IAykBFrgP,GAxkBE,SAAchgK,EAAA,WAAA,EAAA,gBAAA,EAAA,KAAAqgZ,EAAA,YAEL,EAwkBTE,IACFvgP,GAxkBE,SAAahgK,EAAQ,WAAA,EAAa,eAAA,EAAA,KAAAugZ,EAAA,YA2kBtC,OADAvgP,GAxkBI,SACA5pF,EAAAoC,YAAYwnF,CAAA,C,EA2ZhBv/J,EAAGgf,QAvkBC,CAwkBF1c,SAvkBE,CACAid,YAAYhgB,EAAA,WAAA,EAAA,qBAAA,EACZsf,MAAA,WACAY,WAAA,CAAA,EAwkBAP,QAvkBC,CAAA,EACDgB,SAAA,IACAP,cAAO,CAAA,EACPC,WAAY,CAAA,EACZC,aAAS,CAAA,EACTE,aAAU,gG,EACVjf,OAAO,CACPye,YAAAhgB,EAAe,WAAA,EAAA,aAAA,EACfigB,cAAejgB,EAAA,WAAA,EAAA,aAAA,EACfsf,MAAA,SACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EAwkBAgB,SAAU,IACV6F,MAAO,IACPpG,cAAe,CAAA,EACfC,WAAY,CAAA,EAtkBlBC,aAAS,CAAA,EACHE,aAAQ,wG,EACPk+X,uBAAoB,CACvB1+X,YAAWhgB,EAAW,WAAA,EAAA,4BAAA,EACtBigB,cAAWjgB,EAAA,WAAA,EAAA,4BAAA,EACTsf,MAAI,yBAwkBJY,WAvkBW,CAAA,EAwkBXP,QAvkBM,CAAA,EAwkBNgB,SAvkBI,IAwkBJH,aAAc,8E,EACbi+X,uBAvkBuB,CAwkBxBz+X,YAvkBWhgB,EAAA,WAAA,EAAA,4BAAA,EAwkBXigB,cAvkBOjgB,EAAA,WAAA,EAAA,4BAAA,EAwkBPsf,MAvkBE,yBAwkBFY,WAAY,CAAA,EACZP,QAvkBK,CAAA,EACLgB,SAAS,IAwkBTH,aAAc,8E,EACbggY,wBAAyB,CAtkB9BxgY,YAAYhgB,EAAY,WAAA,EAAA,mBAAA,EAwkBpBigB,cAAejgB,EAAQ,WAAA,EAAa,mBAAA,EACpCsf,MAAO,0BAtkBbY,WAAS,CAAA,EACHP,QAAA,CAAA,EACJgB,SAAS,IACPH,aAAc,yE,EAwkBXigY,aAAc,CAtkBnBzgY,YAAYhgB,EAAY,WAAA,EAAA,cAAA,EAwkBpBigB,cAAejgB,EAAQ,WAAA,EAAa,cAAA,EACpCsf,MAAO,eAtkBbY,WAAS,CAAA,EACHP,QAAA,CAAA,EACJgB,SAAS,IACPH,aAAA,oE,EAwkBGkgY,iBAAkB,CAtkBvB1gY,YAAYhgB,EAAY,WAAA,EAAA,iBAAA,EAwkBpBigB,cAAejgB,EAAQ,WAAA,EAAa,iBAAA,EACpCsf,MAAO,mBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IAtkBnBH,aAAW,wE,EACVmgY,eAAA,CAwkBQ3gY,YAAahgB,EAAQ,WAAA,EAAa,cAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,cAAA,EAvkB5Csf,MAAA,iBACGY,WAAO,CAAA,EACPP,QAAW,CAAA,EACXgB,SAAU,IAykBLM,cAAe,CAAA,EACfT,aAAc,sE,EAvkBbtd,WAAA,CACP8c,YAAOhgB,EAAA,WAAA,EAAA,yBAAA,EACLigB,cAAUjgB,EAAA,WAAA,EAAA,yBAAA,EACVsf,MAAO,aACLY,WAAQ,CAAA,EACRP,QAAA,CAAA,EAykBEgB,SAAU,IAvkBdP,cAAY,CAAA,EACZC,WAAc,CAAA,EACdC,aAAa,CAAA,EAykBTE,aAAc,0F,EACbiJ,OAAQ,CACTzJ,YAAahgB,EAAQ,WAAA,EAAa,aAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,aAAA,EAvkB5Csf,MAAS,SAykBDY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAe,CAAA,EAvkBjBa,cAAK,CAAA,EACNZ,WAAe,CAAA,EACfC,aAAU,CAAA,EACVE,aAAgB,sD,EAChB0jB,SAAA,CAykBGlkB,YAAahgB,EAAQ,WAAA,EAAa,gBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,gBAAA,EAvkB1Csf,MAAO,WAykBDY,WAAY,CAAA,EACZP,QAAS,CAAA,EAvkBfgB,SAAA,IAykBMP,cAAe,CAAA,EACfC,WAAY,CAAA,EAvkBlBC,aAAS,CAAA,EAykBHE,aAAc,mH,EAvkBf0oG,eAAU,CACXlpG,YAAUhgB,EAAA,WAAA,EAAA,aAAA,EACRigB,cAAajgB,EAAQ,WAAA,EAAa,aAAA,EAClCsf,MAAO,iBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,yH,EAykBbogY,oBAxkBC,CAykBF5gY,YAxkBEhgB,EAAA,WAAA,EAAA,2BAAA,EAykBFigB,cAxkBSjgB,EAAA,WAAA,EAAA,2BAAA,EACTsf,MAAA,sBACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAP,cAAS,CAAA,EACTa,cAAU,CAAA,EACVZ,WAAO,CAAA,EACPC,aAAA,CAAA,EACAE,aAAY,wG,EACZld,MAAA,CACA0c,YAAAhgB,EAAc,WAAA,EAAA,iBAAA,EAykBdigB,cAxkBCjgB,EAAA,WAAA,EAAwB,iBAAA,EACzBsf,MAAA,QACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAH,aAAS,qD,4MAkZjB9hB,QACGC,OAvkBK,UAAA,EAwkBLK,WAvkBK,wBAAYmhZ,CAAA,EAwkBjBlhZ,UAvkBK,cA0kBR,WACE,MAvkBM,CAwkBJC,SAvkBI,IAwkBJC,MAvkBI,CAwkBFoC,OAvkBE,IAwkBFk0F,aAvkBS,I,EAykBXz2F,WAvkBI,wBAwkBJK,aAvkBI,KAwkBJC,YAvkBI,iD,EAZc,C,IAqyBxB,CAAA,WACE,aAuBA,SAzkBGuhZ,EAAOhiZ,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAA09C,EAAAv9C,EAAAS,EACIL,EAAAye,EAAsCte,EAAA40I,EACvC70I,GAGb,IAAAK,EAASC,KACPD,EAAAuK,IAAOlL,EAAAmL,KAAAnK,YAAAC,oBAAAoK,QAAA,QAAA,EAAA,EA0kBP1K,EAzkBEgf,QAAU,KA0kBZhf,EAzkBEc,OAAO1C,EAAA0C,OA0kBTd,EAAGg1F,aAzkBS52F,EAAA42F,cAAA,4CA4kBZ52F,EAAO2/Y,eAkIP,SAzkBkBj9Y,GA0kBhB,OAzkBE60E,EAAAoC,YAAa,6BAAAy8D,EAAA1zI,GAAA,KAAAvB,EAAA,WAAA,EAAA,QAAAK,EAAAkB,EAAA,EAAA,SAAA,C,EA3HnBd,EAAAgf,QAAS,CA0kBHqhY,qBAAsB,CACpB9gY,YAAahgB,EAAQ,WAAA,EAzkBM,iBAAA,EA0kB3Bsf,MAAO,uBACPY,WAAY,CAAA,EAxkBdP,QAAK,CAAA,EACNgB,SAAU,IACVP,cAAU,CAAA,EACVC,WAAS,CAAA,EACTC,aAAe,CAAA,EA0kBZE,aAAc,iI,EACbzd,SAAU,CAxkBjBid,YAAOhgB,EAAiB,WAAA,EAAA,oBAAA,EA0kBlBsf,MAAO,WACPY,WAAY,CAAA,EAxkBlBP,QAAA,CAAA,EA0kBMgB,SAAU,IACVP,cAAe,CAAA,EAxkBrBC,WAAS,CAAA,EA0kBHC,aAAc,CAAA,EAxkBfE,aAAU,4H,EACXjf,OAAA,CACEye,YAAahgB,EAAQ,WAAA,EAAa,aAAA,EAClCigB,cAAOjgB,EAAA,WAAA,EAAA,aAAA,EACPsf,MAAA,SACAY,WAAS,CAAA,EACTP,QAAA,CAAA,EACAgB,SAAA,IACA6F,MAAA,IACApG,cAAc,CAAA,EACdC,WAAA,CAAA,EA0kBAC,aAzkBW,CAAA,EACXE,aAAa,wG,EACbi+X,uBAAO,CACPz+X,YAAYhgB,EAAA,WAAA,EAAA,uBAAA,EACZigB,cAASjgB,EAAA,WAAA,EAAA,uBAAA,EACTsf,MAAA,yBACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EACAgB,SAAA,IACAH,aAAc,8E,EACbmgY,eAAA,CACD3gY,YAAahgB,EAAQ,WAAA,EAAa,eAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,eAAA,EACpCsf,MAAO,iBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVH,aAAO,sE,EACPugY,uBAAe,CACf/gY,YAAYhgB,EAAA,WAAA,EAAA,oBAAA,EACZigB,cAAcjgB,EAAA,WAAA,EAAA,oBAAA,EACdsf,MAAA,yBA0kBAY,WAzkBC,CAAA,EACDP,QAAA,CAAA,EACAgB,SAAA,IACAP,cAAO,CAAA,EACPC,WAAY,CAAA,EACZC,aAAS,CAAA,EACTE,aAAU,+F,EACVhd,YAAc,CA0kBdwc,YAzkBChgB,EAAA,WAAA,EAAA,kBAAA,EACDigB,cAAajgB,EAAQ,WAAA,EAAa,kBAAA,EAClCsf,MAAA,cACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACAgB,SAAS,IACTP,cAAU,CAAA,EACVC,WAAA,CAAA,EA0kBAC,aAzkBC,CAAA,EACDE,aAAa,2F,EACb7c,WAAA,CACAqc,YAAOhgB,EAAA,WAAA,EAAA,iBAAA,EACPigB,cAAYjgB,EAAA,WAAA,EAAA,iBAAA,EACZsf,MAAA,aACAY,WAAU,CAAA,EACVP,QAAA,CAAA,EACAgB,SAAA,IACAP,cAAc,CAAA,EACdC,WAAA,CAAA,EA0kBAC,aAzkBS,CAAA,EACTE,aAAa,0F,EACb1c,YAAA,CACAkc,YAAOhgB,EAAA,WAAA,EAAA,kBAAA,EACPigB,cAAYjgB,EAAA,WAAA,EAAA,kBAAA,EACZsf,MAAA,cACAY,WAAS,CAAA,EACTP,QAAA,CAAA,EACAgB,SAAA,IA0kBAP,cAzkBC,CAAA,EACDC,WAAA,CAAA,EACAC,aAAA,CAAA,EACAE,aAAO,2F,EACPiJ,OAAA,CACAzJ,YAAShgB,EAAA,WAAA,EAAA,aAAA,EACTigB,cAAUjgB,EAAA,WAAA,EAAA,aAAA,EACVsf,MAAA,SA0kBAY,WAAY,CAAA,EACZe,cAAe,CAAA,EACftB,QAAS,CAAA,EACTgB,SAAU,IAxkBhBH,aAAS,sD,EACPld,MAAY,CA0kBR0c,YAAahgB,EAAQ,WAAA,EAAa,YAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,YAAA,EACpCsf,MAAO,QACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IAxkBnBH,aAAY,qD,EACTjd,cAAA,CA0kBMyc,YAAahgB,EAAQ,WAAA,EAAa,oBAAA,EAxkBxCigB,cAAAjgB,EAAA,WAAA,EAAA,oBAAA,EACGsf,MAAO,gBA0kBJY,WAAY,CAAA,EAxkBfP,QAAU,CAAA,EA0kBPgB,SAAU,IACVH,aAAc,6D,6OA9JtB9hB,QACGC,OAxkBK,UAAA,EAykBLK,WAxkBK,iCAAU6hZ,CAAA,EAykBf5hZ,UAxkBK,uBA2kBR,WACE,MAAO,CAvkBPC,SAAS,IACPC,MAAO,CAykBLoC,OAAQ,IACRk0F,aAAc,KACdvlF,SAAU,I,EAEZlR,WAAY,iCACZK,aAAc,KAvkBnBC,YAAW,qE,EAbY,C,IAgvBxB,CAAA,WACE,aAsBA,SAAS0hZ,EAA0BniZ,EAAQsf,EAAUle,EAAYD,EAASo2E,EAAM32E,EAAUqd,EAAInd,EAAWG,EAAKS,EAC3EL,EAAaye,EAAeuxD,EAAyBD,EACrDynJ,GAvkBnC,IAAAj3N,EAASC,KA2kBPD,EAAGuK,IAAMlL,EAAImL,KAAKnK,YAAYyR,eAAepH,QAAQ,QAAS,EAAA,EAzkB9D1K,EAAAgf,QAAM,KACNhf,EAAAc,OAAM1C,EAAA0C,OACNd,EAAAg1F,aAAiB52F,EAAA42F,cAAA,uCACjBh1F,EAAAwgZ,uBAAmB,GAGnBpiZ,EAAM2/Y,eAmIN,SAAOj9Y,GACL,OAAA60E,EAAUoC,YAAA,6BAAAvI,EAAA1uE,GAAA,KAAAvB,EAAA,WAAA,EAAA,aAAAkwE,EAAA3uE,EAAA,EAAA,SAAA,C,EA1HZd,EAAAgf,QAAO,CACP1c,SAAO,CACPid,YAAOhgB,EAAA,WAAA,EAAsB,yBAAA,EA2kBvBsf,MAAO,WAzkBbY,WAAS,CAAA,EACHP,QAAQ,CAAA,EACVgB,SAAA,IA2kBEP,cA1kBG,CAAA,EACLC,WAAA,CAAA,EA2kBEC,aAAc,CAAA,EACdE,aAAc,wG,EACbtd,WAAY,CAzkBnB8c,YAAShgB,EAAA,WAAA,EAA4B,yBAAA,EAC/BigB,cAAUjgB,EAAU,WAAA,EAAA,yBAAA,EACrBsf,MAAM,aACNY,WAAY,CAAA,EACZP,QAAA,CAAA,EACAgB,SAAO,IACPP,cAAW,CAAA,EACXC,WAAO,CAAA,EA2kBNC,aAAc,CAAA,EAzkBlBE,aAAe,0F,EACbjf,OAAA,CA2kBEye,YAAahgB,EAAQ,WAAA,EAAa,kBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,kBAAA,EACpCsf,MAAO,SACPY,WAAY,CAAA,EAzkBlBP,QAAS,CAAA,EACHgB,SAAA,IACF6F,MAAA,IACApG,cAAc,CAAA,EACdC,WAAa,CAAA,EACbC,aAAgB,CAAA,EAChBE,aAAa,wG,EACb0gY,cAAe,CACflhY,YAAQhgB,EAAA,WAAA,EAAA,oBAAA,EACNigB,cAAAjgB,EAAgB,WAAA,EAAA,oBAAA,EAChBsf,MAAA,gBA2kBAY,WA1kBO,CAAA,EA2kBPP,QA1kBO,CAAA,EA2kBPgB,SA1kBO,IA2kBPH,aA1kBO,qE,EA2kBNk+X,uBA1kBM,CA2kBP1+X,YA1kBOhgB,EAAA,WAAA,EAAwB,4BAAA,EA2kB/BigB,cA1kBOjgB,EAAe,WAAA,EAAO,4BAAA,EA2kB7Bsf,MA1kBO,yBA2kBPY,WA1kBO,CAAA,EA2kBPP,QA1kBO,CAAA,EA2kBPgB,SA1kBO,IA2kBPH,aA1kBO,8E,EA2kBN2gY,cA1kBM,CA2kBPnhY,YA1kBOhgB,EAAU,WAAA,EAAe,+BAAA,EA2kBhCigB,cAAejgB,EAAQ,WAAA,EAAa,+BAAA,EACpCsf,MAAO,gBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EAzkBbgB,SAAU,IA2kBNP,cAAe,CAAA,EACfa,cAAe,CAAA,EACfZ,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,yF,EAzkBvBigY,aAAW,CACVzgY,YAAAhgB,EAAA,WAAA,EAAA,kBAAA,EA2kBQigB,cAAejgB,EAAQ,WAAA,EAAa,kBAAA,EAzkB5Csf,MAAA,eACGY,WAAO,CAAA,EACPP,QAAU,CAAA,EA2kBLgB,SAAU,IAzkBlBH,aAAS,oE,EACA4gY,cAAA,CACLphY,YAAUhgB,EAAA,WAAA,EAAA,yBAAA,EACVigB,cAAOjgB,EAAA,WAAA,EAAA,yBAAA,EACLsf,MAAO,gBACPY,WAAS,CAAA,EACTP,QAAQ,CAAA,EACRgB,SAAQ,IACRP,cAAQ,CAAA,EACRa,cAAc,CAAA,EA2kBZZ,WAAY,CAAA,EAzkBhBC,aAAU,CAAA,EACRE,aAAA,yF,EACAsV,MAAA,CACA9V,YAAAhgB,EAAA,WAAA,EAAA,eAAA,EACAigB,cAAAjgB,EAAA,WAAA,EAAA,eAAA,EACAsf,MAAK,QACPY,WAAa,CAAA,EACXe,cAAO,CAAA,EACLtB,QAAI,CAAA,EA2kBJgB,SA1kBS,IA2kBTH,aAAc,gH,EAzkBdiJ,OAAI,CA2kBJzJ,YA1kBShgB,EAAA,WAAA,EAAA,gBAAA,EA2kBTigB,cAAejgB,EAAQ,WAAA,EAAa,gBAAA,EAzkBpCsf,MAAO,SA2kBPY,WAAY,CAAA,EACZe,cAAe,CAAA,EAzkBjBtB,QAAO,CAAA,EACLgB,SAAI,IA2kBJH,aA1kBa,sD,EA2kBZld,MAAO,CAzkBR0c,YAAWhgB,EAAA,WAAA,EAAiB,iBAAA,EA2kB5BigB,cA1kBWjgB,EAAO,WAAA,EAAA,iBAAA,EA2kBlBsf,MA1kBE,QA2kBFY,WA1kBU,CAAA,EA2kBVP,QA1kBE,CAAA,EA2kBFgB,SA1kBG,IA2kBHH,aAAc,qD,mOAtJtB9hB,QACGC,OAAO,UAAA,EACPK,WAAW,4BAA6BgiZ,CAAA,EACxC/hZ,UAAU,kBAtkBb,WA0kBE,MAAO,CACLC,SAAU,IAzkBdC,MAAA,CACGoC,OAAO,IACPk0F,aAAW,I,EA4kBVz2F,WAAY,4BACZK,aAAc,KAzkBlBC,YAAS,yD,EA8jBuB,C,IA2LlC,CAAA,WA1kBE,aAsmBA,SA3kBS+hZ,EAAiBxiZ,EAAAoB,EAAAD,EAAAJ,EAAAD,EAAAG,EAAAgd,EAAAvc,EAAAL,EAAAwd,GAwuBxB,SAAS4jY,EAAkB9uY,GA1kB3B3T,EAAS0mE,gBAAAn1D,eAA4BoC,EAAApC,eA4kB/B1R,QAAQw0C,UAAUr0C,EAAOyC,QAAA,GA1kB7BzC,EAAIyC,SAAO,CACPmZ,QAAA5b,EAAA0mE,gBACAnrD,eAAcvb,EAAA0iZ,6BAAA1iZ,EAAAsqD,cAAAtqD,EAAAwqD,c,GA+kBlBzpD,EA3kBQuK,KAAA,EA4kBRtL,EA3kBM0mE,gBAAA,KA4kBN1mE,EAAOwqB,UA3kBQ,KA4kBfxqB,EA3kBMqqE,gBAAA,KA4kBNrqE,EAAOsqD,aA3kBa,KA4kBpBtqD,EA3kBMwqD,cAAA,I,CAmaRxqD,EAAO6e,kBAAoBA,EAG3B7e,EAAO8xB,kBAAoB3wB,EAAQ,mBAAA,EAAqBO,EAAQga,QAAQD,QAAA,EA1kBxEzb,EAAAq+B,4BAynBA,SA3kB2BzjB,GA4kBzBxZ,EA3kBIk9B,yBAAuB1jB,C,EA6hB7B5a,EAAOqqE,gBAAkB,KACzBrqE,EAAOwqB,UAAY,KACnBxqB,EAAO0mE,gBAAkB,KACzB1mE,EAAO4mD,OAAS,GAChB5mD,EAAO2mD,MAAQ,GACf3mD,EA3kBK2iZ,WAAU,GA4kBf3iZ,EA3kBI0iZ,6BAAU,GA4kBd1iZ,EA3kBMw9E,MAAA,CAAA,EA4kBNx9E,EA3kBMwqD,cAAO,KA4kBbxqD,EA3kBMsqD,aAAY,KA8kBlBtqD,EA3kBMwe,YAilBN,WAEE,IA3kBIC,EAAAR,EAAYS,MAAA,EAEZ/T,GA0kBJ3K,EA3kBIy8C,WAASz8C,EAAAy8C,WAAA79B,UAAA,EAAA5e,EAAA6e,iBAAA,EACT,CA4kBFlE,OA3kBE3a,EAAOy8C,WA4kBTnnC,WA3kBE,6BA4kBF+hM,mBA3kBcx3M,QAAAw0C,UAAAr0C,EAAA4iZ,iBAAA,EAAA5iZ,EAAA4iZ,kBAAA,KA4kBdxmX,KA3kBEp8B,EAAA26E,OA4kBFrkD,SA3kBEt2B,EAAcy5B,U,GAGdz5B,EAAA6iZ,eA4kBFl4Y,EA3kBE,OAAO,CAAA,GAslBX,OARA1J,EA3kBIgB,YAAU0Z,SAAA/Y,IAAA+H,EAAA,SAAA3C,GACVA,EAAAA,QA4kBAyW,EA3kBC7J,QAAA5M,EAAwBA,OAAA,EAEzByW,EAAA7J,QAAe,EAAA,C,GAIf6J,EAAUM,O,EA8iBhB/e,EA3kBMm9C,WA+mBN,SA3kBevhC,GACTA,IA4kBF5b,EA3kBE0iZ,6BAAc,GA4kBhB1iZ,EA3kBG4mD,OAAA,GA4kBH5mD,EA3kBE2mD,MAAa,GA4kBf3mD,EA3kBE2iZ,WAAe,GA6kBjB3iZ,EA3kBE0mE,gBAAY9qD,EA4kBd5b,EA3kBE2mD,MAAS,GA4kBX3mD,EA3kBE4mD,OAAU,GA6kBZ5mD,EA3kBGw9E,MAAA,CAAA,EA4kBHz8E,EA3kBEoC,KAAa,CACb01E,eAAe,qBACf9xE,OAAOlH,QAAAmH,QAAAlG,EAAAmG,KAAA,MAAA,CAAA,EACPR,oBAAY,CAAA,C,GA+kBdxF,EA3kBGgB,YAAA8Z,gBAAgBnZ,IAAA,CACjB6V,WAAamD,EAAQxZ,GACrBkT,WAAA,0B,EACA,SAAOtN,EAAAC,EAAAvF,GACPA,IAAYrB,EAAAsB,cACZ3C,EAAS2mD,MAAA,GACT3mD,EAAU4mD,OAAA,GACV5mD,EAAA2iZ,WAAe,GACf3iZ,EAAA0iZ,6BAAc,GACb16Y,EAAAA,QAAYjF,QAAA,SAAAwY,GACb1b,QAAaq6C,YAAQl6C,EAAa0iZ,6BAAAnnY,EAAAyM,KAAA,IAClChoB,EAAe0iZ,6BAAqBnnY,EAAAyM,MAAA,GAC7BhoB,EAAA2mD,MAAAx0C,KAAA,CAAA/P,GAAAmZ,EAAAyM,KAAA9I,KAAA3D,EAAAm0B,SAAA,CAAA,GAEE7vC,QAAAq6C,YAAAl6C,EAAA2iZ,WAAApnY,EAAA0M,MAAA,IACTjoB,EAAU2iZ,WAAApnY,EAAA0M,OAAA1M,EAAAo0B,WACV3vC,EAAe4mD,OAAAz0C,KAAA,CAAA/P,GAAAmZ,EAAA0M,MAAA/I,KAAA3D,EAAAo0B,UAAA,CAAA,GAEf3vC,EAAA0iZ,6BAAcnnY,EAAAyM,MAAAzM,EAAA0M,OAAA1M,C,GAGoB,IAAlCvT,EAAaA,QAAQiH,SACrBjP,EAAe6iZ,cAaR7iZ,EAAAsqD,aAAAtiD,EAAAA,QAAA,GAAAggB,KACPhoB,EAAYwqD,cAAAxiD,EAAAA,QAAA,GAAAigB,MACH,IAAAjoB,EAAA0mE,gBAAA9S,cAAA3kD,SACCwzY,EAAAziZ,EAAA0mE,gBAAA9S,cAAA,EAAA,EACV7yD,EAAeuK,KAAA,KAhBRzL,QAAAw0C,UAAAr0C,EAAAyC,QAAA,IACPzC,EAAYyC,SAAA,CACHmZ,QAAA5b,EAAA0mE,gBACCnrD,eAAAvT,EAAAA,QAAA,E,GAGVhI,EAAY0mE,gBAAA,KACZ1mE,EAAcwqB,UAAA,KACdxqB,EAAcqqE,gBAAA,MAEdtpE,EAAauK,KAAA,IAUZtL,EAAAw9E,MAAgB,CAAA,E,GAglBnBx9E,EA3kBEy8C,WAAS,KA4kBXz8C,EA3kBEqqE,gBAAU,K,EAoehBrqE,EA3kBMi/D,WAurBN,SA3kBOj3C,GA4kBLhoB,EA3kBIsqD,aAAatiC,EACbhoB,EAAA6iZ,aAcY,GAAZ7iZ,EAAA0mE,gBAAY9S,cAAA3kD,QACZwzY,EAASziZ,EAAA0mE,gBAAA9S,cAAA,EAAA,GAdT/zD,QAAOw0C,UAAAr0C,EAAAyC,QAAA,GACPzC,EAAAyC,SAAY,CACZmZ,QAAS5b,EAAA0mE,gBACTnrD,eAAUvb,EAAA0iZ,6BAAA1iZ,EAAAsqD,cAAAtqD,EAAAwqD,c,GA8kBZzpD,EA3kBEuK,KAAA,EA4kBFtL,EA3kBE0mE,gBAAc,KA4kBhB1mE,EA3kBEwqB,UAAc,KA4kBhBxqB,EA3kBGqqE,gBAAO,KA4kBVrqE,EA3kBEsqD,aAAa,KA4kBftqD,EA3kBEwqD,cAAe,K,EAkdrBxqD,EA3kBMk/D,YA6sBN,SAAqBj3C,GA1kBrBjoB,EAASwqD,cAAeviC,C,EAycxBjoB,EA3kBOyiZ,kBAAQA,C,4HA0hBjB5iZ,QACGC,OA3kBC,UAAA,EA4kBDK,WA3kBW,uBAAAqiZ,CAAA,EA4kBXpiZ,UA3kBG,aA8kBN,WACE,MA3kBE,CA4kBAC,SAAU,IACVI,YAAa,8CACbH,MAAO,CACLq6E,OAAQ,KA1kBdlhD,WAAS,KA4kBHh3B,SAAU,IACVmgZ,kBAAmB,KACnBC,aAAc,IA1kBdC,YAAK,KACNC,QAAU,I,EAEb5iZ,WAAY,sB,EAhBM,C,IAmxBtB,CAAA,WACE,aArjBA,SAAS6iZ,EAAuBhjZ,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAA09C,EAAAv9C,EAAAS,EACvBL,EAAAye,EAAAte,EAAA40I,EACK9oI,GA+kBZ,IA5kBI1L,EAAAC,KA6kBJD,EAAGuK,IA5kBClL,EAAAmL,KAAUnK,YAAAyL,wBAAApB,QAAA,QAAA,EAAA,EA6kBd1K,EAAGgf,QAAU,KACbhf,EA5kBEc,OAAA1C,EAAY0C,OA6kBdd,EA5kBEg1F,aAAc52F,EAAA42F,cAAA,gDA+kBhB52F,EAAO2/Y,eAkMP,SAAwBj9Y,GA5kBxB,OAAA60E,EAAAoC,YAAA,6BAAAy8D,EAAA1zI,GAAA,KAAAvB,EAAA,WAAA,EAAA,YAAAK,EAAAkB,EAAA,EAAA,SAAA,C,EA1LAd,EAAIgf,QAAK,CACNqiY,yBAA2B,CAC3B9hY,YAAUhgB,EAAA,WAAA,EAAA,mBAAA,EACVsf,MAAS,2BACTY,WAAe,CAAA,EA6kBZP,QAAS,CAAA,EACTgB,SAAU,IA3kBhBP,cAAO,CAAA,EA6kBDC,WAAY,CAAA,EACZC,aAAc,CAAA,EA3kBpBE,aAAA,kM,EA6kBOzd,SAAU,CACXid,YAAahgB,EAAQ,WAAA,EAAa,wBAAA,EA3kBxCsf,MAAS,WA6kBHY,WAAY,CAAA,EA3kBbP,QAAU,CAAA,EACXgB,SAAA,IACEP,cAAa,CAAA,EACbC,WAAO,CAAA,EACPC,aAAY,CAAA,EACZE,aAAS,mL,EACT2yC,YAAU,CACVnzC,YAAAhgB,EAAe,WAAA,EAAA,sBAAA,EACfsf,MAAA,cACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EA6kBAgB,SA5kBC,IACDP,cAAa,CAAA,EACbC,WAAO,CAAA,EACPC,aAAY,CAAA,EACZE,aAAS,oE,EACTjf,OAAA,CACAye,YAAAhgB,EAAe,WAAA,EAAA,iBAAA,EACfigB,cAAYjgB,EAAA,WAAA,EAAA,iBAAA,EACZsf,MAAA,SACAY,WAAA,CAAA,EA6kBAP,QA5kBS,CAAA,EACTgB,SAAA,IACA6F,MAAA,IACApG,cAAO,CAAA,EACPC,WAAY,CAAA,EACZC,aAAS,CAAA,EACTE,aAAU,wG,EACVuhY,uCAAO,CACP/hY,YAAAhgB,EAAe,WAAA,EAAA,4BAAA,EACfigB,cAAYjgB,EAAA,WAAA,EAAA,4BAAA,EACZsf,MAAA,yCACAY,WAAA,CAAA,EA6kBAP,QA5kBC,CAAA,EACDgB,SAAA,IACAH,aAAA,8E,EACAwhY,8BAAO,CACPhiY,YAAYhgB,EAAA,WAAA,EAAA,2BAAA,EACZigB,cAASjgB,EAAA,WAAA,EAAA,2BAAA,EACTsf,MAAA,gCACAY,WAAA,CAAA,EA6kBAP,QA5kBC,CAAA,EACDgB,SAAA,IACAH,aAAA,+E,EACA8vB,oBAAO,CACPtwB,YAAYhgB,EAAA,WAAA,EAAA,qBAAA,EACZigB,cAASjgB,EAAA,WAAA,EAAA,qBAAA,EACTsf,MAAA,sBACAY,WAAA,CAAA,EA6kBAP,QA5kBC,CAAA,EACDgB,SAAA,IACAP,cAAe,CAAA,EACfC,WAAO,CAAA,EACPC,aAAY,CAAA,EACZE,aAAS,qO,EAITtd,WAAA,CACA8c,YAAAhgB,EAAc,WAAA,EAAA,qBAAA,EA6kBdigB,cA5kBcjgB,EAAA,WAAA,EAAA,qBAAA,EACdsf,MAAA,aACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAP,cAAS,CAAA,EACTC,WAAU,CAAA,EACVC,aAAA,CAAA,EACAE,aAAY,0F,EACZ7c,WAAA,CACAqc,YAAAhgB,EAAc,WAAA,EAAA,wBAAA,EA6kBdigB,cA5kBajgB,EAAA,WAAA,EAAA,wBAAA,EACbsf,MAAA,aACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAP,cAAS,CAAA,EACTC,WAAU,CAAA,EACVC,aAAA,CAAA,EACAE,aAAY,0F,EACZnd,YAAc,CACd2c,YAAAhgB,EAAc,WAAA,EAAA,wBAAA,EA6kBdigB,cA5kBcjgB,EAAA,WAAA,EAAA,wBAAA,EACdsf,MAAA,cACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAP,cAAS,CAAA,EACTC,WAAU,CAAA,EACVC,aAAA,CAAA,EACAE,aAAY,2F,EACZ1c,YAAc,CACdkc,YAAAhgB,EAAc,WAAA,EAAA,sBAAA,EA6kBdigB,cA5kBSjgB,EAAA,WAAA,EAAA,sBAAA,EACTsf,MAAA,cACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAP,cAAe,CAAA,EACfC,WAAS,CAAA,EACTC,aAAU,CAAA,EACVE,aAAc,2F,EACbiwB,qBAAO,CACRzwB,YAAahgB,EAAQ,WAAA,EAAa,sBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,sBAAA,EACpCsf,MAAO,uBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAc,CAAA,EA6kBdC,WA5kBC,CAAA,EACDC,aAAa,CAAA,EACbE,aAAe,uO,EAIfsiE,MAAA,CACA9iE,YAAAhgB,EAAc,WAAA,EAAA,gBAAA,EA6kBdigB,cAAejgB,EAAQ,WAAA,EAAa,gBAAA,EACpCsf,MAAO,QACPY,WAAY,CAAA,EACZe,cAAe,CAAA,EA3kBrBtB,QAAS,CAAA,EACPgB,SAAY,IA6kBRH,aAAc,qD,EAEhB6W,QAAS,CACPrX,YAAahgB,EAAQ,WAAA,EAAa,0BAAA,EAClCsf,MAAO,UACPY,WAAY,CAAA,EA3kBrBe,cAAW,CAAA,EACVtB,QAAA,CAAA,EA6kBQgB,SAAU,IACVH,aA5kBR,yiC,iPA+YA9hB,QACGC,OA3kBK,UAAA,EA4kBLK,WA3kBW,qCAAgC6iZ,CAAA,EA4kB3C5iZ,UAAU,2BAGb,WACE,MAAO,CACLC,SAAU,IACVC,MAAO,CACLoC,OAAQ,IA1kBfk0F,aAAW,KACVvlF,SAAA,I,EA6kBIlR,WAAY,qCA3kBhBK,aAAA,KACGC,YAAO,6E,EA+jB+B,C,IAwO3C,CAAA,WACE,aAOA,SA7kBQ2iZ,EA8kBNtiZ,EACAK,EACAJ,EACAH,EACA0e,EACAze,EACAI,EACAI,EACAwd,EACAnd,EACA8F,EACAswB,EACAtsB,GAGA,IAAI5J,EA7kBEC,KA4oBN,SA7kBMyJ,IA8kBJvK,EA7kBIuK,KAAA,C,CAghBN1J,EAAGid,kBA7kBUA,EAglBbjd,EAAGsxC,eA7kBiB,CAAA,EA8kBpBtxC,EAAG+H,QA7kBG6B,EAAcpC,SA8kBpBxH,EAAGyO,QA7kBI7E,EAAA6E,SAAe,eA8kBtBzO,EAAGoO,gBA7kBgBxE,EAAQwE,iBAAa,KA8kBxCpO,EAAG6rB,UA7kBG7rB,EAAAoO,gBAAuB,WAAa,WA8kB1CpO,EAAGqO,cA7kBUzE,EAAAyE,eAAA,KA8kBbrO,EAAGsO,oBA7kBe1E,EAAA0E,oBA8kBlBtO,EAAGuO,wBA7kBY3E,EAAA2E,wBA8kBfvO,EAAGwO,wBA7kBa5E,EAAA4E,wBAglBhBxO,EAAG6rB,UA7kBG,WA8kBN7rB,EAAG8rB,YA7kBG,CAAA,EA8kBN9rB,EAAGyhZ,UA7kBU,CAAA,EA8kBbzhZ,EAAG8H,UA7kBG,CAAA,EA8kBN9H,EAAGgsB,UA7kBY,CAAA,EA8kBfhsB,EAAGisB,WA7kBa,CAAA,EA8kBhBjsB,EAAGksB,gBA7kBiB,CAAA,EA8kBpBlsB,EAAGmsB,eA7kBI,CAAA,EAglBPnsB,EAAG0J,KA7kBGA,EA8kBN1J,EAAG2B,OAuCH,WACExC,EA7kBIwC,OAAA,C,EAsiBN3B,EAAG0hZ,kBAoBH,WACE,IA7kBIC,EAAU,CA8kBZ91X,UA7kBE7rB,EAAA6rB,UA8kBFC,YA7kBE9rB,EAAA8rB,YA8kBF21X,UA7kBEzhZ,EAAYyhZ,UA8kBd35Y,UA7kBE9H,EAAA8H,UA8kBFkkB,UA7kBEhsB,EAAAgsB,UA8kBFC,WA7kBUjsB,EAAAisB,WA8kBVC,gBA7kBelsB,EAAAksB,gBA8kBfC,eA7kBEnsB,EAAemsB,c,EA+kBnB3N,aA7kBIC,QAAY3e,EAAAga,QAAAtZ,GAAA,sDAAAke,KAAAC,UAAAgjY,CAAA,CAAA,C,EA+iBlB3hZ,EAAG4hZ,mBAmOH,WACK5hZ,EAAGsO,oBACJuzY,EAAA,EACQ7hZ,EAAGuO,wBACXuzY,EAAA,EACQ9hZ,EA9kBEwO,yBA+kBVuzY,EAAA,EAEFr4Y,EAAA,C,EA1OF1J,EAAGmkY,cA0MH,WACE,GAAKnkY,EA9kBG8H,WAGW,OA8kBf9H,EAAG+H,SA9kBY,KAAA/H,EAAA+H,QA8kBnB,CAGA,IAAIg8X,EA9kBM,GAglBL/jY,EAAG+H,QA9kBI6rB,SAAO,GAAA,EAilBjBmwW,EAAS/jY,EAAG+H,QAAQ8rB,MAAM,GAAA,EAF1BkwW,EAAOxzX,KAAKvQ,EAAG+H,OAAA,EAKjB,IAAK,IAAI2rC,EA9kBC,EAAKA,EAAAqwV,EAAO12X,OAAAqmC,CAAA,GAAc,CA+kBlC,IAAIhsC,EA9kBMq8X,EAAIrwV,GA+kBd,GAAI,CAACxd,EAAM6jU,cA9kBQryV,CAAA,EA+kBjB,MAAO,CAAA,C,EAGX,MAAO,CAAA,C,GA1NHs6Y,EA7kBetjY,KAAA6L,MAAA/L,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,qDAAA,CAAA,KA+kBjBR,EA7kBE6rB,UAAAm2X,EAAuBn2X,WAAa,WA8kBtC7rB,EA7kBE8rB,YAAOk2X,EAAAl2X,YA8kBT9rB,EA7kBEyhZ,UAAYO,EAAAP,UA8kBdzhZ,EA7kBE8H,UAASk6Y,EAAAl6Y,UA8kBX9H,EA7kBEgsB,UAAUg2X,EAAAh2X,UA8kBZhsB,EA7kBEisB,WAAc+1X,EAAA/1X,WA8kBhBjsB,EA7kBGksB,gBAAe81X,EAAA91X,gBA8kBlBlsB,EA7kBEmsB,eAAa61X,EAAqB71X,gBAumBxC,IAAI01X,EA7kBW,WA8kBb,IA7kBIl6Y,EAAA3H,EAAU4H,aAAAhC,EAAAq8Y,qBAAAjiZ,EAAA8H,UA8kBdzI,EA7kBIgB,YAAAC,oBAAcU,IA8kBhB,CA5kBER,GAAAR,EAAAqO,cAAqB7N,GACrBE,OAAA,QACAsH,MAAOhI,EAAA6rB,UACP5jB,OAAAjI,EAAA8rB,YACA4xT,KAAA19U,EAASyhZ,UACT95Y,KAAAA,EACAD,MAAA1H,EAAA+H,QA8kBA0G,QAASzO,EAAGyO,QACZpG,MAAOrI,EAAGgsB,UACV1jB,QAAStI,EAAGisB,WACZ1jB,YAAavI,EAAGksB,gBAChB1jB,WAAYxI,EAAGmsB,c,EAEjB,SAASvrB,EAAUyF,EAAIvF,GACjBA,IAAWrB,EAAYsB,YACrB4G,GACEc,EAAUlJ,EAAQ,WAAA,EAAa,wCAAyC,CAAEmI,MAAO5H,EAAQ4I,KAAKhB,KAAA,CAAA,EAC9F1H,EAAG+H,UACLU,EAAUlJ,EAAQ,WAAA,EAAa,iDAAkD,CAAEmI,MAAO1H,EAAG+H,OAAA,CAAA,GA3kBhGY,EAAAxJ,EAAuByJ,MAAA,EACvB/D,oBAAiB,CAAA,CAAA,EA8kBbM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAChC/B,MAAMrF,EAAQ,WAAA,EAAa,+BAAA,CAAA,EAC3B2H,YAAYuB,CAAA,EACZ3D,GAAGvF,EAAQ,WAAA,EAAa,eAAA,CAAA,EAE3BJ,EAAUoC,KAAKoH,CAAA,IAEXE,EAAO,IAAIC,KAAK,CAAClI,EAASmI,MAAO,CAAExD,KAAM,iBAAA,CAAA,EACzCyD,EAAUC,IAAIC,gBAAgBL,CAAA,EAClCM,OAAOC,KAAKJ,CAAA,EAEThJ,EAAGqO,cAAc/L,YACd+G,EAAI3C,SAAS4C,cAAc,GAAA,GAC7BC,KAAOP,EACTK,EAAEG,SAAWxJ,EAAGqO,cAAc/L,SAAW,OACzC+G,EAAEI,MAAA,IAINzK,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,IAvkB5GqgZ,EAAA,WA8kBI,IAAIp6Y,EAAO3H,EAAG4H,aAAehC,EAAqBs8Y,yBAA2BliZ,EAAG8H,UAChFzI,EAAIgB,YAAYyL,wBAAwB9K,IA7kB5C,CACGR,GAAOR,EAAAqO,cAAA7N,GACPE,OAAW,QACXsH,MAAUhI,EAAA6rB,UA+kBL5jB,OAAQjI,EAAG8rB,YACXnkB,KAAMA,EA7kBd+1U,KAAS19U,EAAAyhZ,UACP/5Y,MAAO1H,EAAA+H,QACL0G,QAAUzO,EAAAyO,QACVpG,MAAArI,EAAagsB,UACb1jB,QAAOtI,EAAAisB,WACL1jB,YAAQvI,EAAAksB,gBACR1jB,WAAYxI,EAAAmsB,c,EAEZ,SAAAvrB,EAAmByF,EAAAvF,GACnBA,IAAcrB,EAAAsB,YACd4G,GACSc,EAAAlJ,EAAA,WAAA,EAAA,4CAAA,CAAAmI,MAAA5H,EAAA4I,KAAAhB,KAAA,CAAA,EA+kBC1H,EAAG+H,UA7kBfU,EAAYlJ,EAAA,WAAA,EAAA,qDAAA,CAAAmI,MAAA1H,EAAA+H,OAAA,CAAA,GAglBAY,EAASxJ,EAAUyJ,MAAA,EACpB/D,oBAAoB,CAAA,CAAA,EACpBM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EAChC/B,MAAMrF,EAAQ,WAAA,EAAa,mCAAA,CAAA,EA7kBjC2H,YAAAuB,CAAA,EA+kBM3D,GAAGvF,EAAQ,WAAA,EAAa,eAAA,CAAA,EAC3BJ,EAAUoC,KAAKoH,CAAA,IAEXE,EAAO,IAAIC,KAAK,CAAClI,EAASmI,MAAO,CAAExD,KAAM,iBAAA,CAAA,EACzCyD,EAAUC,IAAIC,gBAAgBL,CAAA,EA7kBrCM,OAAAC,KAAAJ,CAAA,EAEAhJ,EAAAqO,cAAkB/L,YAClB+G,EAAY3C,SAAA4C,cAAA,GAAA,GACZC,KAAAP,EACAK,EAAAG,SAASxJ,EAAAqO,cAAA/L,SAAA,OACT+G,EAAAI,MAAA,IAIAzK,EAAAuC,KAAAvC,EAAgBwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,IAMvBogZ,EAAoB,WACpB,IAAAn6Y,EAAO3H,EAAA4H,aAAchC,EAAAs8Y,yBAAAliZ,EAAA8H,UACrBH,EA+kBItI,EAAIgB,YAAYqvC,wBAAwB1uC,IA7kB5C,CA+kBQR,GAAIR,EAAGqO,cAAc7N,GA7kBvBE,OAAA,QACJsH,MAAOhI,EAAA6rB,UACH5jB,OAAOjI,EAAA8rB,YACT4xT,KAAQ19U,EAAAyhZ,UACR95Y,KAAAA,EACAD,MAAA1H,EAAA+H,QACAo6Y,cAAaniZ,EAAAsxC,eAAA,OAAA,MACb7iC,QAAUzO,EAAAyO,QA+kBNpG,MAAOrI,EAAGgsB,UACV1jB,QAAStI,EAAGisB,WA7kBd1jB,YAAOvI,EAAAksB,gBACT1jB,WAAKxI,EAAYmsB,c,EAglBf,SAASvrB,EAAUyF,EAAIvF,GA7kBvBA,IAAYrB,EAAasB,aACvB0H,EAAQlJ,EAAS,WAAA,EAAA,6CAAA,CAAAmI,MAAA5H,EAAA4I,KAAAhB,KAAA,CAAA,EACnB1H,EAAS+H,UACJU,EAAAlJ,EAAA,WAAA,EAAA,sDAAA,CAAAmI,MAAA1H,EAAA+H,OAAA,CAAA,GAglBGY,EAASxJ,EAAUyJ,MAAA,EACpB/D,oBAAoB,CAAA,CAAA,EACpBM,OAAOlH,QAAQmH,QAAQsB,SAASC,IAAA,CAAA,EA7kBpC/B,MAASrF,EAAA,WAAA,EAAA,oCAAA,CAAA,EA+kBL2H,YAAYuB,CAAA,EACZ3D,GAAGvF,EAAQ,WAAA,EAAa,eAAA,CAAA,EA7kB5BJ,EAAAoC,KAAAoH,CAAA,GAglBC3J,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,IAxkBxG0gZ,EAAe,IAAAp/X,gBAAA,CACftiB,OAAO,QA+kBLsH,MAAOhI,EAAG6rB,UA7kBZ5jB,OAAOjI,EAAA8rB,YACP4xT,KAAO19U,EAAAyhZ,UACP95Y,KAAOA,EA+kBLD,MAAO1H,EAAG+H,QA7kBZo6Y,cAAeniZ,EAAAsxC,eAAA,OAAA,MACf7iC,QAAUzO,EAAAyO,QACRpG,MAAArI,EAAAgsB,UACA1jB,QAAQtI,EAAAisB,WACR1jB,YAAAvI,EAAAksB,gBA+kBA1jB,WAAYxI,EAAGmsB,c,GA3kBb5hB,EAAAlL,EAAAmL,KAAYnK,YAAAgiZ,6BAAoB33Y,QAAA,MAAA1K,EAAAqO,cAAA7N,EAAA,EAAA,IAAA4hZ,EAAAtuX,SAAA,EA+kBpCh0B,EA9kBIq+B,eAAA,EA+kBJh1B,OA9kBIC,KAAAmB,CAAA,EA+kBJpL,EA9kBKuK,KAAA,E,yKAoVXzL,QACGC,OA7kBK,UAAA,EA8kBLK,WA7kBK,qCAAeijZ,CAAA,C,IA+2BzB,CAAA,WACE,aAwBA,SA9kBMc,EAA2BlkZ,EAAcc,EAAaC,EAAAE,EAAAI,GAilB1D,IAAIO,EAAKC,KAETD,EAAGqO,cAAgB,KACnBrO,EAAGwH,SAAW,KAGdxH,EAAGy6D,WAoCH,WACEt7D,EA/kBUoC,KAAA,CACRhD,WAAA,qCACAK,aAAU,KAglBVC,YAAa,iFA9kBfsG,OAAAlH,QAAYmH,QAAAlG,EAAAmG,KAAA,MAAA,CAAA,EACZR,oBAAc,CAAA,EACdkI,YAAa,CAAA,EAglBXlG,OAAQ,CACN+C,OAAQ,CACNpC,SAAUxH,EAAGwH,SACb4G,gBAAiBpO,EAAGoO,gBA9kBrBC,cAAArO,EAAAqO,cAglBCC,oBAAqB,CAAC,CAAClQ,EA/kBEqC,kBAglBzB8N,wBA/kByB,CAAA,CAAAnQ,EAAAmxC,sBAglBzB/gC,wBAAyB,CAAC,CAACpQ,EAAO2N,qB,MA1CxC/L,EAAGuiZ,aAAe,CAAC,CAACnkZ,EAAOmkZ,aACvBnkZ,EAAOqC,kBA7kBXT,EAAAqO,cAAUjQ,EAAAqC,kBACHrC,EAAAmxC,uBACPvvC,EAAAqO,cAAmBjQ,EAAAmxC,sBACnBvvC,EAAAwH,SAAOpJ,EAAAmxC,sBAAkBphC,QAAA/P,EAAAmxC,sBAAAphC,QAAAzG,MAAA,IAClBtJ,EAAA2N,wBACP/L,EAAAqO,cAAOjQ,EAAgB2N,sBA+kBrB/L,EAAGwH,SAAWpJ,EAAO2N,sBAAsBoC,QAAU/P,EAAO2N,sBAAsBoC,QAAQzG,MAAQ,IAGhG1H,EAAGqO,cAAcq0C,YACnBrjD,EAAIgB,YAAYyF,WAAW9E,IACzB,CA7kBER,GAAAR,EAAAqO,cAAAq0C,U,EAglBF,SAAS9hD,EAAUyF,EAAIvF,GACjBA,IAAWrB,EAAYsB,aA9kBrCH,EAAA6G,oBACUzH,EAAAwH,SAAA5G,EAAA6G,kBAAAC,M,oEAohBVzJ,QACGC,OA9kBG,UAAA,EA+kBHK,WAAW,uCAAwC+jZ,CAAA,EACnD9jZ,UAAU,6BAGb,WACE,MA9kBE,CACAC,SAAK,IA+kBLC,MA9kBM,CA+kBJ6jZ,aA9kBS,KA+kBT9hZ,kBA9kBa,KA+kBb8uC,sBA9kBoB,KA+kBpBxjC,sBAAuB,I,EAEzBxN,WA9kBY,uCA+kBZK,aA9kBS,KA+kBTC,YA9kBS,mF,EAgkB8B,C,IAuF7C,CAAA,WACE,aAqBA,SA/kBQ2jZ,EAAOpkZ,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAAG,EAAAS,EAAAX,EAAAM,EAAAye,EAAA6X,EAAAC,EAAAnI,GAklBb,IAAI7tB,EA/kBEC,KAglBND,EAAGuK,IA/kBGlL,EAAAmL,KAAAnK,YAAeo3B,UAAA/sB,QAAA,QAAA,EAAA,EAglBrB1K,EAAGgf,QA/kBG,KAglBNhf,EAAGc,OA/kBG1C,EAAA0C,OAglBNd,EAAGm1B,QA/kBG/2B,EAAc+2B,QAglBpBn1B,EAAGg1F,aA/kBI52F,EAAa42F,cAAA,uCAglBpBh1F,EAAGy8M,uBA/kBwB,GAglB3Bz8M,EAAGyiZ,mBA/kBU,GAglBbziZ,EAAGw5B,eA/kBe,GAklBlBp7B,EA/kBMskZ,YAmvBN,SAAqB7kW,GAEnB,IAAI3xC,EAAS,iDAGbA,GAhlBJA,GAAA,kDAglBc,+BAAiC2xC,EAAKv7C,SAAW,MAAQu7C,EAAKv7C,SAAW,OAAS/C,EAAQ,WAAA,EAAa,mBAAA,GAAwB,UA9kB7Is+C,EAAAplB,YACGvsB,GAAO,IAmlBF2xC,EAAKqjK,cA/kBJrjK,EAAAm/T,YACP9wW,GAAA,qCAAA3M,EAAA,WAAA,EAAA,uBAAA,EAAA,IAAAs+C,EAAAm/T,YAAA,WAEA9wW,GAAA,qCAAA3M,EAAA,WAAA,EAAA,uBAAA,EAAA,IAAAs+C,EAAAqjK,YAAA,YAQA,OAFAh1M,GAFAA,GAAA,UAEA,0B,EAwZA9N,EA/kBMq3J,eAsMN,SAAoBr9H,GAEjBp4B,EAAA28M,eAIH38M,EAAG28M,aAAA,CAAA,EAklBDx9M,EA/kBCoC,KAAA,CACAhD,WAAc,+BACdK,aAAY,KACZC,YAAY,2FACZsG,OAAAlH,QAAYmH,QAAAsB,SAAAC,IAAA,EACZ9B,oBAAa,CAAA,EACbiJ,SAAA,CAAA,EACAjH,OAAA,CAilBK8uB,mBAAoB,I,EA9kBzB3iB,QAAO,CACPuiB,aAAA,CAAA,cAAS,SAAAniB,GACT,OAAApT,EAAA+vB,cAAoB/vB,EAAAmoH,gBACpB/0G,EAAqBJ,QAAA,4BAAA,CACrBxS,GAAA43B,EAAgB53B,GAilBLkT,WAAY,mC,GA7kBjBN,EAAaJ,QAAA,4BAAA,CAChBxS,GAAA43B,EAAAgwF,UACA10G,WAAkB,mC,QAKpB3O,KACA,SAAG80B,GACA75B,EAAA28M,aAAkB,CAAA,EAClB9iL,IAilBO75B,EAAG+vB,cAAgB/vB,EAAGmoH,gBACxBnoH,EAAGggN,iBAAiBr/J,UAAUG,KAAA,EA9kBjC9gD,EAAA+vB,cAAoB/vB,EAAAo8M,kCAEzBp8M,EAAW6wY,mBAAGlwV,UAAAG,KAAA,E,EAId,WACA9gD,EAAA28M,aAAe,CAAA,C,KA0VnBv+M,EA/kBMukZ,aA00BN,SAAsB9kW,GACpB,IAAI3xC,EAAS,GA/kBf2xC,EAASwqE,YAAO,EAAAxqE,EAAAwqE,aACdn8G,GAAU,oCAAA2xC,EAAAwqE,WAAA,WAklBNxqE,EAAKsjK,sBA9kBTj1M,GADFA,GAAS,wFACG,4BAAA2xC,EAAAsjK,oBAAA,WAklBNtjK,EAAKyqE,iBA9kBTp8G,GADEA,GAAA,wFACS,kCAAkB2xC,EAAqByqE,eAAA,WAklBlD,OAhlBE3yC,EAAAoC,YAAA7rE,CAAA,C,EAyUJ9N,EA/kBMwkZ,iBAy1BN,SAhlBgB9hZ,GAilBd,OAhlBI60E,EAAQoC,YAAG,gBAAAhiD,EAAAj1B,GAAA,KAAAvB,EAAA,WAAA,EAAA,SAAAy2B,EAAAl1B,EAAA,EAAA,SAAA,C,EAsUjB1C,EA/kBO07B,SA41BP,SAhlBgB+jB,GAilBd,IAhlBI3xC,EAAS,GACC,OAAV2xC,EAAAxoB,OAAUtQ,KAAAA,IAAA84B,EAAAxoB,QAilBZnpB,GAhlBE,IAAY3M,EAAA,OAAA,EAAAs+C,EAAAxoB,KAAA,EAAA91B,EAAA,mBAAA,EAAAs+C,EAAAhkC,QAAA,GAEZgkC,EAAAv7C,WAilBF4J,GAAU,SAEZ,OAhlBIA,C,EA4TN9N,EA/kBMykZ,SAywBN,SAAkB1+X,EAAM84B,EAAK4kC,EAAKu4P,EAAgBC,GA/kBlD,CAAA,GAAIp9R,EAAKvzB,OAAAkR,eAAAqiB,EAAAvzB,OAAAV,OAAA,EAilBL,MAAO,gCACF,GAAIi0B,EAAIvzB,OAAOo4C,QA/kBrB,MAAA,0B,CAklBD,MAAO,E,EAxLP9hE,EAAGgf,QA/kBC,CAglBF1c,SA/kBE,CACAid,YAAAhgB,EAAc,WAAA,EAAA,uBAAA,EAglBdsf,MA/kBC,WACDY,WAAA,CAAA,EACAP,QAAA,CAAA,EACA6G,MAAO,IACP7F,SAAA,IACAP,cAAS,CAAA,EACTC,WAAU,CAAA,EACVC,aAAc,CAAA,EAglBdH,UA/kBCthB,EAAAykZ,SACD9iY,aAAa,sU,EAqlBftd,WA/kBE,CAglBA8c,YA/kBChgB,EAAA,WAAA,EAAqB,sBAAA,EACtBigB,cAAajgB,EAAQ,WAAA,EAAa,sBAAA,EAClCsf,MAAA,aACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACA6G,MAAA,IACA7F,SAAU,IACVP,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAAthB,EAAeykZ,SAglBf9iY,aA/kBI,0F,EAilBNrd,WA/kBI,CAglBF6c,YA/kBahgB,EAAA,WAAA,EAAA,sBAAA,EACbsf,MAAA,aACAY,WAAA,CAAA,EACAP,QAAO,CAAA,EACP6G,MAAA,IACA7F,SAAS,IACTP,cAAU,CAAA,EACVC,WAAA,CAAA,EACAC,aAAY,CAAA,EACZH,UAAAthB,EAAcykZ,SACd9iY,aAAc,iO,EAolBhBi+X,uBA/kBc,CACZz+X,YAAShgB,EAAA,WAAA,EAAA,gBAAA,EACTsf,MAAA,yBACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EACA6G,MAAA,IACA7F,SAAA,IAglBAP,cA/kBc,CAAA,EACda,cAAa,CAAA,EACbZ,WAAA,CAAA,EACAC,aAAO,CAAA,EACPH,UAAAthB,EAAYykZ,SACZ9iY,aAAS,iS,EAqlBXsoG,WA/kBG,CACD9oG,YAAahgB,EAAQ,WAAA,EAAa,sBAAA,EAClCsf,MAAA,aACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACA6G,MAAA,IACA7F,SAAU,IACVP,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdW,cAAc,CAAA,EAglBdd,UA/kBCthB,EAAAykZ,SACD9iY,aAAa,sH,EAilBfsV,MA/kBE,CACA9V,YAAYhgB,EAAA,WAAA,EAAA,iBAAA,EACZsf,MAAA,QACAY,WAAU,CAAA,EACVP,QAAA,CAAA,EACA6G,MAAA,IACA7F,SAAA,IACAP,cAAe,CAAA,EAglBfC,WA/kBI,CAAA,EAglBJC,aA/kBI,CAAA,EAglBJH,UA/kBEthB,EAAAykZ,SAglBF9iY,aA/kBQ,iH,EAilBV46H,eA/kBE,CACAp7H,YAAOhgB,EAAA,WAAA,EAAA,eAAA,EACPsf,MAAA,iBACAY,WAAA,CAAA,EACAP,QAAS,CAAA,EACT6G,MAAA,IACA7F,SAAA,IAglBAP,cAAe,CAAA,EA9kBjBC,WAAS,CAAA,EACPC,aAAa,CAAA,EACbH,UAAOthB,EAAAykZ,SACP9iY,aAAY,yI,EAilBdopB,gBA/kBW,CACT5pB,YAAUhgB,EAAA,WAAA,EAAA,iCAAA,EACVsf,MAAA,kBAglBAY,WA/kBE,CAAA,EAglBFP,QA/kBI,CAAA,EAglBJ6G,MAAO,IACP7F,SA/kBI,IAglBJP,cA/kBM,CAAA,EAglBNC,WA/kBQ,CAAA,EAglBRC,aA/kBU,CAAA,EAglBVW,cA/kBQ,CAAA,EAglBRd,UA/kBMthB,EAAAykZ,SAglBN9iY,aA/kBI,iL,EAmlBN+iY,qBA/kBU,CAglBRvjY,YA/kBMhgB,EAAA,WAAA,EAAA,oBAAA,EAglBNsf,MA/kBM,uBAglBNY,WA/kBQ,CAAA,EAglBRP,QAAS,CAAA,EACT6G,MAAO,IACP7F,SA/kBM,IAglBNP,cA/kBI,CAAA,EAglBJC,WAAY,CAAA,EACZC,aA/kBI,CAAA,EAglBJH,UA/kBMthB,EAAAykZ,SAglBN9iY,aA/kBQ,6D,EAilBVld,MAAO,CACL0c,YA/kBQhgB,EAAA,WAAA,EAAA,iBAAA,EAglBRsf,MAAO,QACPY,WA/kBQ,CAAA,EAglBRP,QA/kBM,CAAA,EAglBN6G,MA/kBI,IAglBJ7F,SA/kBE,IAglBFP,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAWthB,EAAOykZ,SA9kBxB9iY,aAAS,qD,wOA+YX9hB,QA9kBEC,OAAA,UAAA,EAglBCK,WAAW,4BAA6BikZ,CAAA,EACxChkZ,UAAU,kBAGb,WACE,MA/kBI,CAglBFC,SA/kBI,IAglBJC,MA/kBI,CAglBFoC,OA/kBE,IAAA2O,SAAY,KAAAulF,aAAA,KAAA7/D,QAAA,I,EAilBhB52B,WA/kBI,4BAglBJK,aA/kBI,KAglBJC,YA/kBI,2D,EAokBwB,C,IA8TlC,CAAA,WACE,aAqBA,SAASkkZ,EACP3kZ,EACAsf,EACAle,EA/kBAD,EAilBAo2E,EACA32E,EACAqd,EACAnd,EACAD,EACAE,EACAE,EACAS,GAIA,IAAIE,EAhlBEC,KAilBND,EAAGuK,IAhlBGlL,EAAAmL,KAAYnK,YAAA4wE,wBAAAvmE,QAAA,QAAA,EAAA,EAilBlB1K,EAAGgf,QAhlBG,KAilBNhf,EAAGc,OAhlBG1C,EAAY0C,OAilBlBd,EAAGg1F,aAAe,qDAClBh1F,EAAGy8M,uBAhlBwB,GAilB3Bz8M,EAAGkwB,kBAhlBkB3wB,EAAA,mBAAA,EAAyBO,EAAAga,QAAAD,QAAA,EAmlB9Czb,EAAOykZ,SA/cT,SAAA1+X,EAAA84B,EAAA4kC,EAAAu4P,EAAAC,GAilBI,CAAA,GAAIp9R,EAAIvzB,OAAOV,OAAS,EACtB,MAAO,gCAhlBb,GAAAi0B,EAAAvzB,OAAAo4C,QACG,MAAO,0B,CAEP,MAAA,E,EA2cD9hE,EAAGy1J,eAxcL,SAASr9H,GAELp4B,EAAA28M,eAqlBA38M,EAjlBE28M,aAAA,CAAA,EAmlBFx9M,EAhlBAoC,KAAA,CACAhD,WAAc,+BACdK,aAAa,KAklBTC,YACE,2FACFsG,OAAQlH,QAAQmH,QAAQsB,SAASC,IAAA,EACjC9B,oBAAqB,CAAA,EAhlB7BiJ,SAAS,CAAA,EAklBDjH,OAAQ,CACN8uB,mBAAoB,I,EAEtB3iB,QAAS,CAhlBZuiB,aAAA,CAAA,cAAgB,SAAAniB,GAOnB,OANcpT,EAAA+vB,YAAA/vB,EAAAmoH,gBAMd/0G,EAAAJ,QAAA,4BAAA,CAklBYxS,GAAI43B,EAAOgwF,UACX10G,WAAY,mC,QA5kBtB3O,KACE,SAAG80B,GAklBC75B,EAjlBC28M,aAAW,CAAA,EACb9iL,IACA75B,EAAA+vB,cAAkB/vB,EAAAmoH,gBAChBnoH,EAAIggN,iBAAOr/J,UAAAG,KAAA,EAEb9gD,EAAA+vB,cAAkB/vB,EAAAo8M,kCAmlBbp8M,EAAG6wY,mBAAmBlwV,UAAUG,KAAA,E,EAItC,WACE9gD,EAAG28M,aAAe,CAAA,C,KAzL1B38M,EAAG0iZ,YA8LH,SAAqB7kW,GACnB,IAAI3xC,EAAS,iDAGbA,GADAA,GAAU,kDACA,+BAAiC2xC,EAAKv7C,SAAW,MAAQu7C,EAAKv7C,SAAW,OAAS/C,EAAQ,WAAA,EAAa,mBAAA,GAAwB,UAErIs+C,EAAKqjK,cAhlBXrjK,EAASm/T,YACP9wW,GAAU,qCAAK3M,EAAA,WAAA,EAAA,uBAAA,EAAA,IAAAs+C,EAAAm/T,YAAA,WAEb9wW,GAAA,qCAAc3M,EAAA,WAAA,EAAA,uBAAA,EAAA,IAAAs+C,EAAAqjK,YAAA,YAwlBhB,OAFAh1M,GAFAA,GAjlBE,UAEQ,0B,EAqYZlM,EAAG+6B,YAiNH,SAjlBQnS,GAklBN3pB,EAjlBMiD,GAAA,0CAAkC,CAAA1B,GAAAooB,EAAA3T,cAAAhW,EAAA8kE,QAAAzmD,IAAA,CAAA,C,EA1M3Bre,EAAA8kE,QAAAzmD,KAilBbtd,EAAGgf,QAhlBS,CAilBV1c,SAhlBU,CAilBRid,YAhlBWhgB,EAAK,WAAA,EAAA,uBAAA,EAilBhBsf,MAAO,WACPY,WAhlBU,CAAA,EAilBVP,QAhlBM,CAAA,EAilBN6G,MAhlBM,IAilBN7F,SAhlBQ,IAilBRP,cAhlBQ,CAAA,EAilBRC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAhlBOthB,EAAAykZ,SAilBP9iY,aAhlBW,4U,EAqlBV8tB,aAAc,CA/kBjBtuB,YAAAhgB,EAAA,WAAA,EAA6B,iBAAA,EAC3Bsf,MAAO,eACPY,WAAM,CAAA,EACRP,QAAI,CAAA,EACFgB,SAAA,IAilBAP,cAhlBS,CAAA,EAilBTC,WAhlBU,CAAA,EAilBVC,aAhlBY,CAAA,EAilBZH,UAhlBUthB,EAAGykZ,SAilBb9iY,aAhlBW,yI,EAilBV+wI,qBAhlBO,CAilBRvxI,YAhlBYhgB,EAAA,WAAA,EAAA,mBAAA,EAilBZsf,MAhlBE,uBAilBFY,WAhlBW,CAAA,EAilBXP,QAhlBS,CAAA,EAilBTgB,SAhlBE,IAilBFP,cAhlBe,CAAA,EAilBfC,WAhlBE,CAAA,EAilBFC,aAAc,CAAA,EA/kBdH,UAASthB,EAAAykZ,Q,EAmlBRpgZ,WAhlBU,CAilBX8c,YAhlBMhgB,EAAU,WAAA,EAAQ,sBAAA,EAilBxBigB,cAAejgB,EAAQ,WAAA,EAAa,sBAAA,EACpCsf,MAhlBI,aAilBJY,WAhlBO,CAAA,EAilBPP,QAhlBO,CAAA,EAilBPgB,SAhlBO,IAilBPP,cAhlBO,CAAA,EAilBPC,WAhlBU,CAAA,EAilBVC,aAhlBc,CAAA,EAilBdH,UAhlBSthB,EAAAykZ,SAilBT9iY,aAhlBa,0F,EAilBZijY,wBAAyB,CAC1BzjY,YAAahgB,EAAQ,WAAA,EAAa,gBAAA,EAClCsf,MAAO,0BACPY,WAhlBE,CAAA,EAilBFP,QAAS,CAAA,EA/kBXgB,SAAI,IACFP,cAAQ,CAAA,EACRC,WAAU,CAAA,EACVC,aAAW,CAAA,EACXH,UAASthB,EAAAykZ,SACT9iY,aAAM,qE,EACNnQ,eAAU,CACV2P,YAAAhgB,EAAkB,WAAA,EAAA,sBAAA,EAClBsf,MAAA,iBACAY,WAAU,CAAA,EACVP,QAAS,CAAA,EACTgB,SAAA,IACAP,cAAe,CAAA,EAilBfC,WAAY,CAAA,EACZC,aAAc,CAAA,EA/kBhBH,UAAUthB,EAASykZ,SACnB9iY,aAAQ,gb,EAqlBLiJ,OAAQ,CA/kBfzJ,YAAShgB,EAAgB,WAAA,EAAA,kBAAA,EACnBsf,MAAI,SACNY,WAAO,CAAA,EAilBLP,QAAS,CAAA,EA/kBTgB,SAAG,IACLP,cAAO,CAAA,EAilBLC,WAAY,CAAA,EA/kBZC,aAAS,CAAA,EAilBTH,UAAWthB,EAAOykZ,SA/kBlB9iY,aAAY,yQ,EAolBXsV,MAAO,CACR9V,YAAahgB,EAAQ,WAAA,EAAa,iBAAA,EA/kBtCsf,MAAS,QACPY,WAAY,CAAA,EACZP,QAAW,CAAA,EACTgB,SAAO,IAilBPP,cAAe,CAAA,EACfC,WAAY,CAAA,EA/kBhBC,aAAO,CAAA,EAilBHH,UAAWthB,EAAOykZ,SAClB9iY,aAAc,2E,EA/kBpB+iY,qBAAS,CACJvjY,YAAGhgB,EAAA,WAAA,EAAoB,oBAAA,EACxBsf,MAAA,uBAilBEY,WAhlBS,CAAA,EACXP,QAAA,CAAA,EAilBEgB,SAhlBS,IACXP,cAAA,CAAA,EAilBEC,WAAY,CAAA,EA/kBhBC,aAAA,CAAA,EAilBIH,UAAWthB,EAAOykZ,SAClB9iY,aAAc,6D,kIAxKtB9hB,QACGC,OAAO,UAAA,EACPK,WAAW,0CAA2CwkZ,CAAA,EACtDvkZ,UAhlBS,gCAmlBZ,WACE,MAAO,CACLC,SAAU,IACVC,MAAO,CACLoC,OAhlBQ,G,EAklBVvC,WAhlBY,0CAilBZK,aAhlBY,KAilBZC,YAAa,2F,EA3lBU,C,IAq1B7B,CAAA,WACE,aAuBA,SAASokZ,EAAqC7kZ,EAAQsf,EAAUle,EAAYD,EAASo2E,EAAM32E,EAAUqd,EAAInd,EAAW09C,EAAUv9C,EAAKS,EAjlBhGL,EAAQye,EAAUqxD,EAA2BD,EAmlB7CtgC,GA/kBjC,IAAGhvC,EAAMC,KACTD,EAAGuK,IAAAlL,EAAUmL,KAAAnK,YAAAmwO,qBACbxwO,EAAGgf,QAAS,KACZhf,EAAGc,OAAA1C,EAAU0C,OACbd,EAAGg1F,aAAe52F,EAAO42F,cAAqC,kDAG9D52F,EAAG2/Y,eAirBH,SAAwBj9Y,GACtB,OAllBE60E,EAAOoC,YAAA,6BAAAzI,EAAAxuE,GAAA,KAAAvB,EAAA,WAAA,EAAA,aAAAgwE,EAAAzuE,EAAA,EAAA,SAAA,C,EAxFXd,EAAAgf,QAAO,CAmlBHoyD,mBAAoB,CAClB7xD,YAAahgB,EAAQ,WAAA,EAAa,cAAA,EAjlBxCsf,MAAA,qBAmlBMY,WAAY,CAAA,EACZP,QAAS,CAAA,EAjlBfgB,SAAS,IAmlBHP,cAAe,CAAA,EAjlBhBC,WAAU,CAAA,EACXC,aAAU,CAAA,EACRE,aAAa,yQ,EAIbvf,GAAA,CACA+e,YAAUhgB,EAAA,WAAA,EAAA,mBAAA,EACVsf,MAAA,KACAY,WAAY,CAAA,EACZP,QAAA,CAAA,EACAgB,SAAA,IACAP,cAAc,CAAA,EAmlBdC,WAllBI,CAAA,EAmlBJC,aAllBS,CAAA,EAmlBTE,aAllBI,+R,iPA/DZ9hB,QAklBGC,OAAO,UAAA,EACPK,WAAW,uCAAwC0kZ,CAAA,EAjlBtDzkZ,UAAA,6BAqlBA,WACE,MAAO,CACLC,SAAU,IAjlBdC,MAAS,CACPoC,OAAO,IACLk0F,aAAU,KACVvlF,SAAO,I,EAolBPlR,WAAY,uCAjlBZK,aAAY,KACZC,YAAA,mF,EAbJ,C,IAutBF,CAAA,WACE,aAsBA,SAllBQqkZ,EAmlBN9kZ,EACAiB,EACAE,EACAE,EACAT,EACAi8F,EACAn7F,EACAm2B,EACAklE,EACA/oB,EACAlnB,GAIA,IAAIlrD,EAllBEC,KAg9BN,SAASkjZ,EAAmBlmW,EAAKmmW,EAAkBx0Y,GAC7CA,GACFA,EAnlBE06B,gBAAA,EAqlBA85W,GACFpjZ,EAAG8hG,oCAAoC7kD,CAAA,EACvCm1B,EAAU1oE,KAAA,GAhlBZrK,EAAIgB,YAASi9F,0CAAAx1B,MAAA,CAolBXtnE,GAAIy8C,EAAIz8C,GAllBVy8F,2BAAUhgD,EAAAggD,0B,EACV,SAAUr8F,EAAAyF,EAAAvF,GAolBRm8C,EAAIwkL,sBAAwB,CAAA,EAllB1B3gO,IAAKrB,EAAasB,aAslBlB/B,EAnlBKuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,GAwlBX,SAnlBE87F,IACAn+F,EAAAgB,YAAUm4F,aAAAx3F,IAolBR,CAllBFR,GAAOpC,EAAAo6F,aAAAh4F,E,EAqlBL,SAAUI,EAAUyF,EAAIvF,GAllBnBA,IAAYrB,EAAWsB,cAC9B3C,EAAUo6F,aAAA,IAAAyC,EAAAr6F,CAAA,E,GAyLZZ,EAAGw4F,aAllBYp6F,EAAAo6F,aAmlBfx4F,EAAGuK,IAllBGlL,EAAOmL,KAAAnK,YAAAi9F,0CAmlBbt9F,EAAGgf,QAllBG,KAmlBNhf,EAAGc,OAllBG1C,EAAA0C,OAmlBNd,EAAGc,OAllBGq7F,mBAAY,CAmlBhB3D,aAllBIx4F,EAAAw4F,aAAch4F,E,EAolBpBR,EAAGg1F,aAllBG,6CAmlBNh1F,EAAGo7F,YAAcD,EACjBn7F,EAAGkrD,uBAllBQA,EAolBXlrD,EAAGw9F,mBAllBUA,EAmlBbx9F,EAAGqC,cAoUH,SAAuB46C,GAllBrB,IAIGiiL,EAJCjiL,EAAGwkL,wBAslBPxkL,EAAIwkL,sBAAwB,CAAA,EAhlB5BvC,GAFGA,EAAAjiL,EAAekgD,UAolBCn9F,EAAGo7F,YAAYioT,QAllBlCrjZ,EAAAo7F,YAAA4C,OAEIh+F,EAAYo7F,YAAAioT,QAslBhBhkZ,EAAIgB,YAnlBEi9F,0CAAAx1B,MAAA,CAolBJtnE,GAnlBEy8C,EAAAz8C,GAolBF28F,OAnlBE+hI,C,EAolBD,SAnlBCt+N,EAAUyF,EAAAvF,GAolBZm8C,EAnlBEwkL,sBAAQ,CAAA,EACN3gO,IAAArB,EAAoBsB,aAolBtBk8C,EAAIkgD,OAAS+hI,EAllBbt+N,GAAS3C,QAAAw0C,UAAA7xC,EAAAq8F,0BAAA,IACPhgD,EAAAggD,2BAAcr8F,EAASq8F,4BAqlBrB7+F,EAnlBEo6F,aAAO0F,gBAAA,GAolBXV,EAAA,GAGFx+F,EAASuC,KAAKvC,EAASwC,OAAA,EAASC,YAAYlC,EAAQ,WAAA,EAAa,qBAAA,CAAA,EAAwBmC,SAAS,WAAA,CAAA,C,KA7VxG1B,EAAGsjZ,cAkWH,SAAuBrmW,GACrB59C,EAAIgB,YAAYi9F,0CAA0Cx1B,MAAM,CAC9DtnE,GAAIy8C,EAAIz8C,GACR+yD,OAnlBCtW,EAAAsW,M,EAolBA,SAnlBU3yD,EAASyF,EAAAvF,GAolBpBm8C,EAnlBIwkL,sBAAkB,CAAA,EAClB3gO,IAAIrB,EAASsB,aAslBf/B,EAASuC,KAnlBEvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,C,IAyOjB1B,EAAGmjZ,mBAllBUA,EAmlBbnjZ,EAAG2hO,oBAiZH,WAllBH,OAAW7hO,EAAAga,QAAAwiF,uBAAArmE,EAAAsmE,SAAA,C,EAkMRv8F,EAAGqpC,eAoBH,SAllBwBz6B,GAmlBtBA,EAllBM06B,gBAAA,C,EA8jBRtpC,EAAG8hG,oCAUH,SAllBep4E,GAmlBbtrB,EAAOm8B,MAAM,6DAA8D7Q,CAAA,C,EAc3E1pB,EAAGgf,QAAU,CACX6qD,gBAAiB,CAjlBnBtqD,YAAU,GACVV,MAAU,kBACVY,WAAU,CAAA,EAmlBNP,QAAS,CAAA,EAjlBbgB,SAAO,GAmlBH6F,MAAO,GACPpG,cAAe,CAAA,EACfC,WAAY,CAAA,EAjlBlBC,aAAkB,CAAA,EACZE,aAAW,uOAolBXL,UAllBW,c,EAolBb6jY,UAAW,CAjlBbhkY,YAAOhgB,EAAA,WAAA,EAAA,kBAAA,EAmlBHigB,cAAejgB,EAAQ,WAAA,EAAa,kBAAA,EACpCsf,MAAO,YAjlBbY,WAAS,CAAA,EAmlBHP,QAAS,CAAA,EAjlBTgB,SAAG,IACLP,cAAA,CAAA,EAmlBEC,WAAY,CAAA,EACZC,aAAc,CAAA,EAjlBfE,aAAe,sjBAQdL,UAAA,c,EAolBF8jY,kBAllBU,CAmlBRjkY,YAllBEhgB,EAAA,WAAA,EAAoB,4BAAA,EAmlBtBigB,cAAejgB,EAAQ,WAAA,EAAa,4BAAA,EAjlBpCsf,MAAA,oBAmlBAY,WAllBE,CAAA,EAmlBFP,QAllBQ,CAAA,EAmlBRgB,SAllBM,IAmlBNP,cAllBY,CAAA,EAmlBZC,WAllBQ,CAAA,EAmlBRC,aAAc,CAAA,EACdE,aAAc,8kBA1kBfL,UAAA,c,EAolBDgzC,YAllBO,CAmlBLnzC,YAllBMhgB,EAAS,WAAA,EAAA,qBAAA,EAmlBfigB,cAllBWjgB,EAAA,WAAA,EAAmB,qBAAA,EAmlB9Bsf,MAllBM,cAmlBNY,WAllBW,CAAA,EAmlBXP,QAllBS,CAAA,EAmlBTW,aAllBM,CAAA,EAmlBNgB,iBAllBS,CAAA,EAmlBTX,SAAU,IACVP,cAAe,CAAA,EACfC,WAAY,CAAA,EAjlBZG,aAAY,+CAmlBZL,UAllBK,c,EAolBPuG,IAAK,CACH1G,YAAahgB,EAAQ,WAAA,EAAa,aAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,aAAA,EAjlB1Csf,MAAS,MACHY,WAAS,CAAA,EACTP,QAAK,CAAA,EACPgB,SAAU,IAmlBRP,cAAe,CAAA,EAjlBfC,WAAK,CAAA,EACPC,aAAU,CAAA,EACVH,UAAU,c,EAEZyG,QAAS,CACP5G,YAAUhgB,EAAA,WAAA,EAAA,iBAAA,EACVigB,cAAUjgB,EAAA,WAAA,EAAA,iBAAA,EAmlBRsf,MAAO,UAjlBXY,WAAY,CAAA,EAmlBRP,QAAS,CAAA,EACTgB,SAAU,IAjlBhBP,cAAS,CAAA,EACPC,WAAY,CAAA,EAmlBRC,aAAc,CAAA,EACdH,UAAW,c,EAhlBfpC,KAAI,CACAiC,YAAKhgB,EAAU,WAAA,EAAa,cAAA,EAC9BigB,cAAgBjgB,EAAQ,WAAA,EAAc,cAAA,EAmlBpCsf,MAAO,OAjlBPY,WAAM,CAAA,EACRP,QAAU,CAAA,EAmlBRgB,SAAU,IAjlBdP,cAAO,CAAA,EAmlBHC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAW,c,EAEbrX,MAAO,CACLkX,YAAahgB,EAAQ,WAAA,EAAa,eAAA,EAjlB3CigB,cAAWjgB,EAAA,WAAA,EAAA,eAAA,EACVsf,MAAA,QAmlBQY,WAAY,CAAA,EACZP,QAAS,CAAA,EAllBjBgB,SAAA,IACGP,cAAO,CAAA,EACPC,WAAW,CAAA,EACXC,aAAU,CAAA,EAolBLH,UAAW,c,EAjlBnB8G,OAAS,CACPjH,YAAOhgB,EAAA,WAAA,EAAA,gBAAA,EACLigB,cAAUjgB,EAAA,WAAA,EAAA,gBAAA,EACVsf,MAAO,SACLY,WAAQ,CAAA,EAolBNP,QAAS,CAAA,EAllBbgB,SAAY,IACZP,cAAc,CAAA,EACdC,WAAa,CAAA,EAolBTC,aAAc,CAAA,EACdH,UAAW,c,EAEb2qC,WAAY,CAllBlB9qC,YAAShgB,EAAA,WAAA,EAAA,wBAAA,EACPigB,cAAAjgB,EAAA,WAAA,EAAA,wBAAA,EACAsf,MAAA,aACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EACAgB,SAAA,IACAP,cAAA,CAAA,EACAC,WAAA,CAAA,EACAC,aAAA,CAAA,EACAH,UAAA,c,EAEA4G,SAAA,CACA/G,YAAAhgB,EAAA,WAAA,EAAA,kBAAA,EACAigB,cAAAjgB,EAAA,WAAA,EAAA,kBAAA,EAolBMsf,MAAO,WACPY,WAAY,CAAA,EAllBdP,QAAK,CAAA,EACNgB,SAAU,IACVP,cAAU,CAAA,EACVC,WAAS,CAAA,EACTC,aAAe,CAAA,EACfH,UAAA,c,EAqlBC6G,YAAa,CACXhH,YAAahgB,EAAQ,WAAA,EAAa,qBAAA,EAllBxCigB,cAAkBjgB,EAAA,WAAA,EAAA,qBAAA,EACfsf,MAAA,cACAY,WAAc,CAAA,EACdP,QAAA,CAAA,EAolBGgB,SAAU,IACVP,cAAe,CAAA,EAllBrBC,WAAA,CAAA,EAolBMC,aAAc,CAAA,EACdH,UAAW,c,EAjlBfk+M,UAAI,CACDr+M,YAAUhgB,EAAA,WAAA,EAAA,mBAAA,EACXigB,cAAUjgB,EAAA,WAAA,EAAA,mBAAA,EACRsf,MAAA,YACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACAgB,SAAS,IACTP,cAAO,CAAA,EACPC,WAAU,CAAA,EACVC,aAAA,CAAA,EACAH,UAAA,c,EAqlBFm+M,UAnlBE,CACAt+M,YAAAhgB,EAAc,WAAA,EAAA,mBAAA,EAolBdigB,cAnlBEjgB,EAAA,WAAA,EAAA,mBAAA,EAolBFsf,MAnlBE,YAolBFY,WAnlBE,CAAA,EAolBFP,QAnlBE,CAAA,EAolBFgB,SAnlBC,IACDP,cAAa,CAAA,EACbC,WAAO,CAAA,EACPC,aAAY,CAAA,EACZH,UAAS,c,EAqlBX+9M,IAnlBE,CACAl+M,YAAYhgB,EAAA,WAAA,EAAA,aAAA,EACZigB,cAAcjgB,EAAA,WAAA,EAAA,aAAA,EACdsf,MAAA,MACAY,WAAA,CAAA,EAolBAP,QAnlBC,CAAA,EACDgB,SAAA,IACAP,cAAO,CAAA,EACPC,WAAY,CAAA,EACZC,aAAS,CAAA,EACTH,UAAU,c,EAqlBZ+jY,QAnlBE,CACAlkY,YAAAhgB,EAAc,WAAA,EAAA,iBAAA,EACdigB,cAAWjgB,EAAO,WAAA,EAAA,iBAAA,EAolBlBsf,MAAO,UACPY,WAAY,CAAA,EACZP,QAnlBClf,EAAA2hO,oBAAA,EACDzhN,SAAA,IACAP,cAAe,CAAA,EACfC,WAAO,CAAA,EACPC,aAAY,CAAA,EACZE,aAAS,qiCAcTL,UAAA,c,EAqlBF6zC,OAnlBE,CACAh0C,YAAAhgB,EAAc,WAAA,EAAA,gBAAA,EAolBdigB,cAnlBCjgB,EAAgB,WAAA,EAAA,gBAAA,EACjBsf,MAAA,SACAY,WAAO,CAAA,EACPP,QAAAlf,EAAY2hO,oBAAA,EACZzhN,SAAS,IACTP,cAAU,CAAA,EACVC,WAAA,CAAA,EACAC,aAAY,CAAA,EACZc,eAAc,CAAA,EACdC,sBAAkB,CAAA,EAClBb,aAAc,gtBAOdW,qBAAO,ktBAOPhB,UAAW,c,EAqlBb5e,OAnlBI,CAolBFye,YAnlBEhgB,EAAA,WAAA,EAAA,cAAA,EAolBFigB,cAnlBEjgB,EAAA,WAAA,EAAA,cAAA,EAolBFkrN,mBAnlBQ,sOACR5rM,MAAA,SACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACAgB,SAAS,IACTP,cAAU,CAAA,EACVc,YAAA,CAAA,EACAZ,aAAY,CAAA,EACZE,aACA,u8C,GAmTN3hB,EAAOmwC,OAAO,gBAAiB,SAASC,EAAQC,GAC1CD,IAAWC,GAAUzuC,EAAGc,QAC1B1C,EAAOgO,WAAW,wBAAA,C,GAQtBpM,EAAG0jZ,wBAA0BtlZ,EAAOuQ,IAAI,gDAAiD,SAAUC,EAAO7F,GAjlBxGo6Y,EAASp6Y,EAAW,CAAA,CAAA,C,4KA8gBxB9K,QACGC,OAllBK,UAAA,EAmlBLK,WAAW,kCAAmC2kZ,CAAA,EAC9C1kZ,UAllBG,wBAqlBN,WACE,MAllBM,CAmlBJC,SAllBI,IAmlBJC,MAllBI,CAmlBFoC,OAllBE,IAmlBF03F,aAllBc,G,EAolBhBj6F,WAllBI,kCAmlBJK,aAllBI,KAmlBJC,YAAa,uE,EA9lBK,C,IA4hCxB,CAAA,WACE,aAqBA,SAplBM8kZ,EAAKvlZ,EAAAsf,EAAAle,EAAAP,EAAAM,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAAG,EAAAS,EAAA21B,EAAAh2B,EAAAye,EAAAo/D,EAAA25I,EAAAppM,GAGT,IAAG7tB,EAAAC,KACHD,EAAGuK,IAAAlL,EAAAmL,KAAerD,WAAOC,SAAAsD,QAAe,QAAO,EAAA,EAqlB/C1K,EAAGgf,QAAU,KACbhf,EAAGc,OAAS1C,EAAO0C,OAnlBnBd,EAAAg1F,aAAO52F,EAAiBmH,MAAAsoB,EAAA0rE,QAAA,uCAAAn7F,EAAAmH,MAAAsoB,EAAA6rE,SAAA,uCAAA,qCAqlBxB15F,EAAG4jZ,sBAAwB,GAG3BxlZ,EAAOylZ,sBAiGP,SAA+BlpQ,GAC7B,OAAuB,KAAnBA,EAnlBGhlE,EAAAoC,YAAA,gCAAAx4E,EAAA,WAAA,EAAA,iBAAA,EAAA,SAAA,EAslBEo2E,EAAKoC,YAAY,kCAAoCx4E,EAAQ,WAAA,EAAa,cAAA,EAAkB,SAAA,C,EApGvGnB,EAAO0lZ,UAwGP,SArlBY3pS,GACX,IAID64O,EAJC,OAAA74O,GAAU,IAAAA,EAAA9sG,QAIX2lV,EAAO74O,EAAA34F,IAAA,SAAAzY,EAAAg8B,GACL,IAAAx7B,EAAU,GAaZuoB,GAZE/oB,EAAOxD,OAAA+3E,EAAAymU,UACLx6Y,EAAQtK,EAAAsK,KAAA,2BAAA,CAAA/I,GAAAuI,EAAAvI,EAAA,CAAA,EACRuI,EAAcxD,OAAA+3E,EAAAz1E,WAslBZ0B,EAAOtK,EAAOsK,KAAK,oCAAqC,CAAE/I,GAAIuI,EAAKvI,EAAA,CAAA,EAplB3DuI,EAAAxD,OAAA+3E,EAAAzrE,eACZtI,EAAAtK,EAAcsK,KAAA,4CAAA,CAAA/I,GAAAuI,EAAAvI,EAAA,CAAA,EACDuI,EAAAxD,OAAA+3E,EAAAG,eAslBTl0E,EAAOtK,EAAOsK,KAAK,4CAA6C,CAAE/I,GAAIuI,EAAKvI,EAAA,CAAA,EACpD,qBAAduI,EAAKxD,OACdgE,EAAOtK,EAAOsK,KAAK,4BAA6B,CAAE/I,GAAIuI,EAAKvI,EAAA,CAAA,GAllBjE,YAAA+I,EAAA,KAAAR,EAAAzG,SAAA,QAMA,OAJAyiC,IAAAo1E,EAAA9sG,OAAA,IACAykB,GAAA,MAGAA,C,GAGA6jD,EAAAoC,YAAAi7Q,EAAA7+U,KAAA,EAAA,CAAA,GA2jBW,G,EA7rBX/V,EAAA0jC,gBAyIA,SAAkB2gB,GAClBpjD,EAAG24B,QAAUC,GAAA9wB,WAAAC,SAAAY,MAAA,CACVxH,GAAAiiD,C,IA0cHrkD,EAAO4lZ,eAqIP,SAAwBptX,GACtB,OAAOnB,EAAQw8V,YAAYr7V,EAAQt0B,QAAA,C,EA9HnCtC,EAAGgf,QAplBC,CAqlBF1c,SAplBE,CACAid,YAAAhgB,EAAc,WAAA,EAAA,6BAAA,EACdsf,MAAA,WAqlBAY,WAplBE,CAAA,EAqlBFP,QAplBE,CAAA,EACFgB,SAAA,IAqlBAP,cAplBK,CAAA,EACLC,WAAA,CAAA,EACAC,aAAO,CAAA,EACPE,aAAY,uDACH8N,EAAA0rE,QAET,iPAAe1rE,EAAA6rE,SAEf,mPAAc7rE,EAAA8rE,MACd,uN,EAqlBCkjD,QAplBC,CAqlBFt9H,YAplBEhgB,EAAA,WAAA,EAAA,iBAAA,EACFigB,cAAAjgB,EAAA,WAAA,EAAA,iBAAA,EAqlBAsf,MAAO,WACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVH,aAAc,gE,EACbg/N,aAAc,CACfx/N,YAAahgB,EAAQ,WAAA,EAAa,uBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,uBAAA,EACpCsf,MAAO,eACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,wF,EACb46H,eAAgB,CACjBp7H,YAAahgB,EAAQ,WAAA,EAAa,kBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,kBAAA,EACpCsf,MAAO,iBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdE,aAAc,sI,EACb0oG,eAAgB,CACjBlpG,YAAahgB,EAAQ,WAAA,EAAa,eAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,eAAA,EACpCsf,MAAO,iBACPY,WAAY,CAAA,EACZe,cAAe,CAAA,EACftB,QAAS,CAAA,EACTgB,SAAU,IACVH,aAAc,sF,EACbqyW,eAAgB,CACjB7yW,YAAahgB,EAAQ,WAAA,EAAa,iBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,iBAAA,EACpCsf,MAAO,iBACPY,WAAY,CAAA,EACZe,cAAe,CAAA,EACftB,QAAS,CAAA,EACTgB,SAAU,IACVH,aAAc,2G,EACboX,SAAU,CACX5X,YAAahgB,EAAQ,WAAA,EAAa,mBAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,mBAAA,EACpCsf,MAAO,WACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVM,cAAe,CAAA,EACfT,aAAc,iE,EACbkkY,SAAU,CACX1kY,YAAahgB,EAAQ,WAAA,EAAa,eAAA,EAClCigB,cAAejgB,EAAQ,WAAA,EAAa,eAAA,EACpCsf,MAAO,WACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EAnlBfgB,SAAS,IACPH,aAAY,mR,+NA0dhB9hB,QACGC,OAplBC,UAAA,EAqlBDK,WAplBQ,2BAAAolZ,CAAA,EAqlBRnlZ,UAplBG,iBAulBN,WACE,MAplBE,CACAC,SAAA,IACAC,MAAA,CAqlBEoC,OAAQ,IAAKyE,KAAM,IAAKkK,SAAU,G,EAEpClR,WAAY,2BACZK,aAAc,KAnlBlBC,YAAS,uD,EAXK,C,IAowBhB,CAAA,WACE,aAEAZ,QAplBEC,OAAG,MAAA,EACHM,UAAG,oBAulBL,WACE,MAAO,CAplBPC,SAAA,IAslBEC,MAAO,CAplBTk4B,QAAO,I,EAulBL7L,SArlBS,CAslBP,iDACA,oEACA,4FAplBJ,uLACE,UAslBE,8HACA,8CAplBD,0DACD,qLAslBE,iCACA,UACA,IAplBJ,UACE,0FAslBE,oNACA,UACA,kIAplBJ,gDACE,8DACE,2LAslBA,iCACA,UACA,IACA,UACA,UACA5W,KArlBE,EAAA,EAslBJ5V,WArlBI,CAAA,SAAe,gBAAA,UAAA,SAAAH,EAAAyvB,EAAAtuB,GAulBjBnB,EArlBE8lZ,UAAc,WACd,GAAA9lZ,EAAAw4B,SAAcx4B,EAAAw4B,QAAArxB,KACZ,OAAAnH,EAAAw4B,QAAArxB,MACF,KAAAsoB,EAAW0rE,QAslBL,MAAO,kBAplBf,KAAW1rE,EAAA8rE,MACT,MAAa,gBACb,KAAA9rE,EAAuB6rE,SACvB,MAAO,mBACP,QACA,MAAS,S,CAGT,MAAA,E,EAwlBFt7F,EArlBI+lZ,gBAAA,WACA/lZ,EAAAw4B,QAAAyrN,gBACAjkP,EAAAgmZ,gBAAA,kCACAhmZ,EAAAimZ,sBAAA,CAAA7jZ,GAAApC,EAAAw4B,QAAAyrN,cAAA7hP,EAAA,E,EAylBJpC,EArlBEkmZ,eAAW,WAslBPlmZ,EAAOw4B,QAAQm4V,cAAqD,EAArC3wX,EAAOw4B,QAAQm4V,aAAa1hX,SAplBjEjP,EAAAmmZ,kBAAmB,GACjBnmZ,EAAAomZ,uBAAkC,GAClCpmZ,EAAAw4B,QAAem4V,aAAQ5tX,QAAa,SAAAsjZ,GACpCrmZ,EAAOmmZ,kBAAAh0Y,KAAA,iCAAA,EACPnS,EAAAomZ,uBAAYj0Y,KAAA,CAAA/P,GAAAikZ,EAAAjkZ,EAAA,CAAA,C,KA0lBdpC,EArlBEsmZ,cAAc,WACdtmZ,EAAAw4B,QAAco4V,cACZ5wX,EAAAumZ,gBAAA,kCACAvmZ,EAAAwmZ,sBAAA,CAAApkZ,GAAApC,EAAAw4B,QAAAo4V,YAAAxuX,EAAA,E,EAylBJpC,EArlBIymZ,iBAAA,WACAzmZ,EAAAw4B,QAAAq4V,gBAAA,EAAA7wX,EAAAw4B,QAAAq4V,eAAA5hX,SACFjP,EAAA0mZ,oBAAW,GAslBT1mZ,EAAO2mZ,yBAA2B,GAplBtC3mZ,EAAAw4B,QAAaq4V,eAAA9tX,QAAA,SAAA6jZ,GACX5mZ,EAAA0mZ,oBAAqBv0Y,KAAa,iCAAA,EAClCnS,EAAA2mZ,yBAAoCx0Y,KAAA,CAAA/P,GAAAwkZ,EAAAxkZ,EAAA,CAAA,C,KA0lBtCpC,EArlBE0jP,mBAAkB,WAClB,OAAA1jP,EAAUw4B,QAAAkrN,mBAAA,C,EAwlBZ1jP,EArlBEmjD,OAAcnjD,EAAA8lZ,UAAA,EAslBhB9lZ,EArlBE+lZ,gBAAA,EAslBF/lZ,EAAOkmZ,eAAA,EAplBPlmZ,EAAKsmZ,cAAA,EAslBLtmZ,EArlBEymZ,iBAAA,C,IAjGmB,C,IA6rB7B,CAAA,WACE,aA2BA,SArlBMI,EAAO7mZ,EAAAsf,EAAAk/B,EAAAp9C,EAAAD,EAAAP,EAAAqd,EAAAnd,EAAAG,EAAAS,EAAAL,EAAA+c,EAAA0B,EAAA+vF,GAwlBX,IAAIjuG,EArlBEC,KAitBN,SArlBMilZ,EAAY5mY,GAmLlB,IACGgM,EACA66X,EAiaDnlZ,EAAGse,QArlBCA,EAulBJte,EAAGolZ,YArlBahnZ,EAAAuQ,IAAA,sBAAA,WAslBd3O,EArlBEse,QAAAoF,KAAc4B,mBAAA,C,GAulBlBlnB,EArlBIuQ,IAAA,WAAA,WAslBF3O,EArlBEolZ,YAAA,C,GAwlBJplZ,EAAGse,QArlBGoF,KAAAC,GAAAC,wBAAAxlB,EAAA,SAAAylB,GAslBJ7jB,EAAGgf,QArlBC6E,EAAAC,OAAAjF,OAAAK,QAAA2E,EAAAC,OAAA5E,QAEA2E,EAAAC,OAAA5E,SACFlf,EAAA6L,UACE6R,EAAA/b,OAAA3B,EAAA6L,OAAA,EACA7L,EAAA6L,QAAA,MAGA7L,EAAA6hB,oBAslBFxD,EAAA,EAplBAre,EAAA6L,QAAW6R,EAAA,WAslBT1d,EAAG6L,QAAU,KAplBjByW,EAAA,C,EACE,GAAA,E,GAylBJtiB,EAAGse,QArlBCoF,KAAYC,GAAA6xB,aAAAp3C,EAAA,WAslBd,IArlBE+lB,EAASlkB,KAAAkkB,KACToqE,EAAU,CAAA,EAslBZpqE,EArlBEw9B,KAAAxgD,QAAe,SAAAqtF,EAAAzpD,EAAA0pD,GACfzuF,EAAAmuF,mBAAav6D,SAAA66D,EAAA1pD,GAAArb,OAAAlpB,EAAA,EACbiuF,EAAA1pD,GAAcijD,WAAA,CAAA,EACduG,EAAAA,GACE,CAAA,C,GAIAA,IAslBFpqE,EArlBEuqE,UAAAhtC,UAAA,CAAA,E,GAylBN1hD,EAAGse,QArlBGowE,UAAA/qE,GAAAgrE,oBAAAvwF,EAAA,SAAA6+C,GAslBJ2xC,EArlBI3xC,CAAA,C,GAwlBNj9C,EAAGse,QArlBGoF,KAAAC,GAAAO,YAAA9lB,EAAA,SAAA+lB,EAAAC,GACApkB,EAAA6hB,oBAslBF7hB,EArlBEc,OAAAsgB,SAAAlD,EAAAmG,cAAAF,EAAAC,CAAA,EAslBF/F,EAAA,EACAiE,EAAA,E,GAIJtiB,EAAGse,QArlBGyF,WAAAJ,GAAAK,kBAAA5lB,EAAA,SAAA6lB,EAAA9C,GACAnhB,EAAA6hB,oBAslBF7hB,EAAGc,OAAOsxC,WAAanuB,GAAW,EAClCjkB,EAAGc,OAAOqgB,SAAWA,EACrB9C,EAAA,EACAiE,EAAA,E,GAIJtiB,EAAGse,QAAQowE,UAAU/qE,GAAGkrE,yBAAyBzwF,EAAQ,WAplBrD4B,EAAAse,QAAAowE,UAAAI,kBAAA,EACA7uF,KAAAkkB,KAAAw9B,KAAangC,IAAI,SAAAy7B,GAEH,CAAA,IADdj9C,EAAemuF,mBAAep1C,QAASkE,EAAAvzB,OAAAlpB,EAAA,GAEpCR,EAAAmuF,mBAAA59E,KAAA0sC,EAAAvzB,OAAAlpB,EAAA,C,GAIHP,KAAAkkB,KAAAw9B,KAAYngC,IAAA,SAAAy7B,GACV2xC,EAAI3xC,CAAA,C,GAGR7+C,EAAIm8B,MAAA,8BAAwBv6B,EAAAmuF,kBAAA,C,GAwlB9BnuF,EAAGse,QArlBK0L,QAAArG,GAAYsG,aAAQ7rB,EAAU,SAAS0lB,GACzC9jB,EAAA6hB,mBAslBFxD,EAAA,C,GAIJre,EAAGse,QArlBM4L,WAAAvG,GAAAwG,sBAAA/rB,EAAA,SAAAgsB,EAAAC,GACLrqB,EAAA6hB,mBAslBAxD,EAAA,C,GAjlBNre,EAAAse,QAASgG,aAAcX,GAAKY,kBAAAnmB,EAAA,SAAA0lB,EAAAU,GACtBxkB,EAAA6hB,mBACFxD,EAAA,C,GAqFDiM,EAAe5L,KAAO6L,MAAA/L,aAAQgM,QAAc1qB,EAAUga,QAAAtZ,GAAA,KAAApC,EAAA42F,YAAA,CAAA,EACtDmwT,EAAAnlZ,EAAAc,OAAwBiY,OAulBrBuR,GACE66X,IArlBR76X,EAAOvR,OAAAosY,GAEkB,OAAlB76X,EAAA8nB,YAAkBrtB,KAAAA,IAAAuF,EAAA8nB,aACzB9nB,EAAO8nB,WAAiB,GAwlBpBn0C,QAAQqhB,OAAOtf,EAAGc,OAAQwpB,CAAA,EArlB9BtqB,EAAAse,UAulBUte,EAAGc,OAAO8R,OAAS5S,EAAGc,OAAO8R,MAAM,UAAe5S,EAAGc,OAAO8R,MAAM,SAAY,mBAChF,OAAO5S,EAAGc,OAAO8R,MAAM,SAAY,kBAErC5S,EAAGse,QAAQC,UAAUkM,QAAQrsB,EAAQ4B,EAAGc,OAAO8R,KAAA,EArlBhDpT,EAAU4M,WAAA,sBAAA,IAylBXpM,EAtlBEc,OAAOsxC,WAAA,EAmfXjzB,EAAA,EACAmD,EAAA,EACAlkB,EArlBIm8B,MAAS,qBAAcjc,CAAA,C,CAylB7B,SAASa,EAAeJ,GAMtB,GAzlBA/e,EAAAgf,QAAW,GAslBXhf,EArlBE8gB,YAAMC,WAAA,GAslBR9iB,QAAQye,KAAKte,EAAO4gB,QAAShf,EAAGgf,OAAA,EAnlB9B,CAAGD,GAAA/e,EAAAc,OAAA8R,OAAA5S,EAAoCc,OAAA8R,MAAAoM,QAAA,CACvC,IAAAgxM,EAAU,GACVhwN,EAAAc,OAAA8R,MAAAoM,QAAA7d,QAAA,SAAA8d,GAslBE+wM,EAAU/wM,EAAO3B,MAAQ2B,C,GAnlB3Bjf,EAAAc,OAAQ8R,MAAAoM,QAAA7d,QAAA,SAAA8uN,GACR,IAAAo1L,EAAAp1L,EAA4B3yM,KAC3Btd,EAAAgf,QAAU64B,eAAcwtW,CAAA,GAAQrlZ,EAAAgf,QAAAqmY,GAAA5lY,aAC7BuwM,EAAAq1L,IACApnZ,QAAAqhB,OAAWtf,EAAAgf,QAAYqmY,GAAar1L,EAAAq1L,EAAA,GAEjCxjU,EAAA7hF,EAAAgf,QAAAqmY,IACLl7L,4BAAgC,CAAA,EAslB9BtoI,EAAIquI,yBAA2B,CAAA,EAC/BlwN,EAAG8gB,YAAYC,WAAWxQ,KAAKsxE,CAAA,E,QAjlBrC,IAAI,IAAAziE,KAAYpf,EAAAgf,QACdhf,EAAAgf,QAAA64B,eAAAz4B,CAAA,GAAApf,EAAAgf,QAAAI,GAAAK,cACMoiE,EAAO7hF,EAAAgf,QAAAI,IAslBL+qM,4BAA8B,CAAA,EAplBtCtoI,EAAAquI,yBAAgC,CAAA,EAC9BlwN,EAAI8gB,YAAWC,WAAYxQ,KAAAsxE,CAAA,E,CAmBnC,SAAA+M,EAAAY,GACG,IAAA7hD,EAAO3tC,EAAAmuF,mBAAAp1C,QAAAy2C,EAAA9lE,OAAAlpB,EAAA,EACI,CAAA,EAAXmtC,EACA3tC,EAAAmuF,mBAAUnpD,OAAkB2I,EAAA,CAAA,EAwlBzB3tC,EAAGmuF,mBAAmB59E,KAAKi/E,EAAY9lE,OAAOlpB,EAAA,EAplBlDpC,EAAOm8B,MAAA,8BAAAv6B,EAAAmuF,kBAAA,C,CAylBP,SAtlBI9vE,IAulBF,IAAIinY,EAAyBrnZ,QAAQye,KAAK1c,EAAGc,OAAOq7F,kBAAA,EArlBpD,OAAAn8F,EAAAc,OAAYq7F,mBACZ,OAAAn8F,EAAAc,OAAcqjJ,eACdnkJ,EAAAc,OAAA8R,MAAa5S,EAAAse,QAAAC,UAAAvX,KAAA,EAulBRhH,EAAGsyH,gBACN,OAAOtyH,EAAGc,OAAO8R,MAAMmR,WAEI,OAAzB/jB,EAAGc,OAAOsxC,YAAgDrtB,KAAAA,IAAzB/kB,EAAGc,OAAOsxC,aArlBnDpyC,EAASc,OAAAsxC,WAAA,GAwlBL5zB,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,KAAOpC,EAAO42F,aAAct2E,KAAKC,UAAU3e,EAAGc,MAAA,CAAA,EArlB1Fd,EAAIc,OAAKq7F,mBAAAmpT,C,CAunBT,SAtlBQj8X,IAulBNhL,EAAA,EACAiE,EAAA,C,CAGF,SAtlBMijY,IAulBJ,IAyFIv3T,EArlBAl2E,EA1FAmJ,EAAA,CAulBJ8C,WAtlBI,WADA,EAMAquB,GAklBJnxB,EAAE5T,OAtlBErN,EAASc,OAAAqgB,SACC,OAAVnhB,EAAAc,OAAUsxC,YAAArtB,KAAAA,IAAA/kB,EAAAc,OAAAsxC,aAulBZpyC,EAtlBEc,OAAAsxC,WAAc,GAEDpyC,EAAAc,OAAQsxC,YA0HzBxoC,GA6dAqX,EAAEirB,MAtlBElsC,EAAAc,OAAeqgB,UAAQixB,EAAa,GAulBxCnxB,EAAEG,SAtlBSphB,EAAAc,OAAAsgB,SAulBXH,EAAE+sE,QAgFEA,EAtlBS,MACTl2E,EAAA,CAAA,EAwlBOwJ,OAAOwkC,KAAK9lD,EAAGgf,OAAA,EArlBbwC,IAAA,SAAc0sE,GAulBzB,OAAOluF,EAAGgf,QAAQkvE,E,GAGZ/sF,QAAQ,SAAS8d,GAClBA,EAAOC,QAGV8uE,GAAU/uE,EAAOJ,MAAQ,IAxlB3B/G,EAAO,CAAA,C,GAMXA,EACS,KAwlBEk2E,GAlGT/sE,EAAElI,OAtlBE/Y,EAASc,OAAAiY,OAulBbkI,EAAEkU,QAtlBEn1B,EAAUm1B,QAulBdlU,EAAEC,KAtlBEkxB,EACApyC,EAAA0T,aAulBFuN,EAtlBEvN,WAAA1T,EAAc0T,YAwlBd1T,EAtlBCmhV,eAulBHlgU,EAtlBEukY,cAAaxlZ,EAAAmhV,cA+GV,IACLr/T,EAAS,CAAA9hB,EAAAc,OAAAghB,SA2eX,OA4GG9hB,EAAGc,OAAOq7F,oBArlBbr6E,EAAUvR,KAAAvQ,EAAAc,OAAAq7F,kBAAA,EAwlBVr6E,EAtlBE3gB,QAAA,SAAAsgB,GAgyBA,IAgBMgkY,EAtlBAC,EAxNNjkY,EAAA5K,aACAjN,EAAAiN,WAAA4K,EAAA5K,YAEA4K,EAAAS,QAAAT,EAAAS,OAAA7U,SACAzD,EAAAsY,OAAAT,EAAAS,OAAA/N,KAAA,GAAA,GAEAsN,EAAAojC,cAAApjC,EAAAojC,aAAAx3C,SACAzD,EAAAi7C,aAAApjC,EAAAojC,aAAA1wC,KAAA,GAAA,GAEAsN,EAAAU,YAAAV,EAAAU,WAAA9U,SACAzD,EAAAuY,WAAAV,EAAAU,WAAAhO,KAAA,GAAA,GAEAsN,EAAAW,eAAAX,EAAAW,cAAA/U,SACAzD,EAAAwY,cAAAX,EAAAW,cAAAjO,KAAA,GAAA,GAEAsN,EAAAQ,SAAAR,EAAAQ,QAAA5U,SACAzD,EAAAqY,QAAAR,EAAAQ,QAAA9N,KAAA,GAAA,GAEAsN,EAAAgjD,UAAAhjD,EAAAgjD,SAAAp3D,SACAzD,EAAA66D,SAAAhjD,EAAAgjD,SAAAtwD,KAAA,GAAA,GAEAsN,EAAA3gB,SACA8I,EAAK9I,OAAA2gB,EAAA3gB,QAwlBD2gB,EAAOM,aArlBXnY,EAAOmY,WAAYN,EAAAM,YAEfN,EAAA+2E,eAulBF5uF,EAtlBI8uF,cAAmBj3E,EAAA+2E,cAwlBrB/2E,EAtlBOwiI,QAulBTr6I,EAtlBMq6I,MAAOxiI,EAAAwiI,OAwlBXxiI,EAtlBI0oH,kBAAO1oH,EAAA0oH,iBAAA98H,SAulBbzD,EAtlBI+7Y,kBAAAlkY,EAAA0oH,iBAAAh2H,KAAA,GAAA,GAwlBFsN,EAAOyoH,kBAAoBzoH,EAAOyoH,iBAAiB78H,SACrDzD,EAAOonE,kBAAoBvvD,EAAOyoH,iBAAiB/1H,KAAK,GAAA,GAEtDsN,EAAOg5M,oBACT7wN,EAAOg8Y,mBAAqBnkY,EAAOg5M,mBAplBnCh5M,EAAIi5M,cAulBJ9wN,EAtlBEi8Y,aAAOpkY,EAAkBi5M,aAwlBzBj5M,EAAOk5M,YAAcl5M,EAAOk5M,WAAWttN,SACzCzD,EAAOk8Y,YAAcrkY,EAAOk5M,WAAWxmN,KAAK,GAAA,GAplB9CsN,EAAOsG,eACLne,EAAIme,aAAetG,EAAAsG,cAEjBtG,EAAOqjC,OAAArjC,EAAAqjC,MAAAz3C,SAulBTzD,EAtlBEk7C,MAAOrjC,EAAQqjC,MAAA3wC,KAAa,GAAA,GAwlB5BsN,EAtlBE0E,UAulBJvc,EAAOq8C,eAAiBxkC,EAAO0E,SAE7B1E,EAAOwE,MACTrc,EAAOs8C,WAAazkC,EAAOwE,KAplB3BxE,EAAIsjC,OAAOtjC,EAAQsjC,MAAA13C,SAulBnBzD,EAtlBEwc,KAAO4/B,EAAkBvkC,EAAAsjC,KAAA,GAwlBzBtjC,EAAOujC,QAAUvjC,EAAOujC,OAAO33C,SACjCzD,EAAOyc,MAAQ2/B,EAAevkC,EAAOujC,MAAA,GAplBvCvjC,EAAOwjC,eAAmBxjC,EAAAwjC,cAAW53C,SACnCzD,EAAIu8C,aAAeH,EAAkBvkC,EAAOwjC,aAAA,GAE1CxjC,EAAO6pH,OAAA7pH,EAAA6pH,MAAAj+H,SAulBTzD,EAtlBE0hI,MAAO7pH,EAAQ6pH,MAAAn3H,KAAe,GAAA,GAwlB9BsN,EAtlBEO,WAAOP,EAAAO,UAAyB3U,SAulBpCzD,EAAOoY,UAAYgkC,EAAevkC,EAAOO,SAAA,GAEvCP,EAAOob,WAAapb,EAAOob,UAAUxvB,SACvCzD,EAAOizB,UAAYmpB,EAAevkC,EAAOob,SAAA,GAplBzCpb,EAAOq/J,aAAer/J,EAAAq/J,YAAAzzK,SAulBtBzD,EAAOyjL,aAAernI,EAAevkC,EAAOq/J,WAAA,GAplB9Cr/J,EAAOyjC,WAAgBzjC,EAAAyjC,UAAA73C,SACvBzD,EAAOs7C,UAAAc,EAAAvkC,EAAAyjC,SAAA,GAEPzjC,EAAOmjC,aAAAnjC,EAAAmjC,YAAAv3C,SACPzD,EAAOg7C,YAAAoB,EAAAvkC,EAAAmjC,WAAA,GAwlBHnjC,EAAOub,OAASvb,EAAOub,MAAM3vB,SAC/BzD,EAAOozB,MAAQvb,EAAOub,MAAM7oB,KAAK,GAAA,GAE/BsN,EAAOykB,WAAazkB,EAAOykB,UAAU74B,SACvCzD,EAAOs8B,UAAYzkB,EAAOykB,UAAU/xB,KAAK,GAAA,GAplBjDsN,EAAA+jK,QAAA/jK,EAAA+jK,OAAAn4K,SAulBQzD,EAAO47K,OAASx/H,EAAevkC,EAAO+jK,MAAA,GArlB9C/jK,EAAAmmB,mBAAAnmB,EAAAmmB,kBAAAv6B,SACGzD,EAAOm8Y,oBAAA//V,EAAAvkC,EAAAmmB,iBAAA,GAEPnmB,EAAU0nB,iBAAU1nB,EAAA0nB,gBAAA97B,SAwlB0B,UAArC,OAAOoU,EAAO0nB,gBAAgB,GAChCv/B,EAAOu/B,gBAAkB6c,EAAevkC,EAAO0nB,eAAA,EArlBhDv/B,EAAAu/B,gBAAA1nB,EAAA0nB,gBAAAh1B,KAAA,GAAA,GAGHsN,EAAQ8lG,cAAA9lG,EAAA8lG,aAAAl6G,SACRzD,EAASo8Y,cAAAvkY,EAAA8lG,aAAApzG,KAAA,GAAA,GAETsN,EAAAy/J,kBAAcz/J,EAAAy/J,iBAAA7zK,SACdzD,EAAAs3K,iBAAUz/J,EAAAy/J,iBAAA/sK,KAAA,GAAA,GAEVsN,EAAAxJ,OAAgBwJ,EAAAxJ,MAAA5K,SAChBzD,EAAAqO,MAAYwJ,EAAAxJ,MAAA9D,KAAA,GAAA,GAEZsN,EAAA0jC,QACCv7C,EAAAu7C,MAAY1jC,EAAA0jC,OAylBT1jC,EAAO2jC,MACTx7C,EAAOw7C,IAAM3jC,EAAO2jC,KArlBnB3jC,EAAAtB,QAwlBDvW,EAAOw8C,uBAAyB3kC,EAAOtB,OArlBzCsB,EAAK4jC,qBACNz7C,EAAUy8C,mCAAA5kC,EAAA4jC,oBAEV5jC,EAAUxV,iBACVrC,EAAUqC,eAAAwV,EAAAxV,gBAEVwV,EAAAyV,cACAttB,EAAUstB,YAAOzV,EAAAyV,aAEjBzV,EAAAkW,aACA/tB,EAAU+tB,WAAAlW,EAAAkW,YAEVlW,EAAA6jC,gBACA17C,EAAA08C,yBAA4B7kC,EAAW6jC,eAEvC7jC,EAAA8jC,oBAwlBG37C,EAAO28C,oBAAsB,CAAA,GArlBhC9kC,EAAAykG,aAwlBGt8G,EAAOs8G,WAAa,CAAA,GArlB1BzkG,EAAA+jC,iBAwlBM57C,EAAO48C,gBAAkB,CAAA,GArlB/B/kC,EAAS0V,WACJvtB,EAAAutB,SAAc1V,EAAA0V,UAEf1V,EAAAtT,UACAvE,EAAAuE,QAAesT,EAAAtT,SAEfsT,EAAAqgD,UACEl4D,EAAIk4D,QAAa,CAAA,GAEjBrgD,EAAQgkC,qBAwlBR77C,EAvlBM68C,WAAI,CAAA,GAylBRhlC,EAAOikC,SACT97C,EAvlBE88C,QAAc,CAAA,GAylBdjlC,EAAOuiI,sBAtlBTp6I,EAAIo6I,oBAAc,CAAA,GAEhBviI,EAAIkkC,WAwlBN/7C,EAvlBI+7C,SAAY,CAAA,GAEdlkC,EAAImkC,oBAwlBNh8C,EAvlBI+8C,mBAAiBllC,EAAQmkC,mBAE3BnkC,EAAOokC,gBAwlBTj8C,EAAOg9C,eAAiBnlC,EAAOokC,eArlB/BpkC,EAAQlc,OAwlBRqE,EAvlBMrE,KAAAkc,EAAalc,MAEjBkc,EAAIgX,YAwlBN7uB,EAAO6uB,UAAYhX,EAAOgX,WAGxBhX,EAvlBEo4G,YACAp4G,EAAAo4G,qBAA4B11E,OAwlB9B1iC,EAAOo4G,UAAY,IAAI11E,KAAK1iC,EAAOo4G,SAAA,GAErCjwH,EAvlBEuF,WAASlR,QAAAye,KAAoB+E,EAAAo4G,SAAA,EAwlB/BjwH,EAvlBIuF,WAAK+uG,SAAiB,CAAA,EAwlB1Bt0G,EAvlBIuF,WAAYvF,EAAAuF,WAAAi1C,YAAA,GAylBd3iC,EAvlBMs8F,UACFt8F,EAAMs8F,mBAAe55D,OAwlBzB1iC,EAAOs8F,QAAU,IAAI55D,KAAK1iC,EAAOs8F,OAAA,GAEnCn0G,EAvlBMs4M,SAAWjkN,QAAAye,KAAA+E,EAAes8F,OAAA,EAwlBhCn0G,EAAOs4M,SAAShkG,SAAS,CAAA,EACzBt0G,EAvlBIs4M,SAAOhkG,SAAWt0G,EAAAs4M,SAAApa,SAAA,EAAA,EAAA,EAwlBtBl+L,EAAOs4M,SAAWt4M,EAAOs4M,SAAS99J,YAAA,GAGhC3iC,EAAOu/J,YAtlBHv/J,EAAAu/J,qBAAc78H,OAwlBlB1iC,EAvlBEu/J,UAAS,IAAW78H,KAAA1iC,EAAAu/J,SAAA,GA0lBpBilO,GAxlBAC,EAAc,IAAA/hW,MACM+5D,SAAAz8F,EAAAu/J,UAAA8mB,SAAA,EAAArmL,EAAAu/J,UAAAngE,WAAA,CAAA,EAAA,IAwlBpBslS,EAAkBD,EAAahoS,SAAS,GAAI,EAAA,EAAM,IACtDt0G,EAAOw8Y,iBAvlBOH,EAwlBdr8Y,EAvlBIy8Y,eAASF,GA0lBX1kY,EAvlBIw/J,UAwlBAx/J,EAAOw/J,mBAAmB98H,OAC9B1iC,EAvlBOw/J,QAAI,IAAA98H,KAAc1iC,EAAOw/J,OAAA,GA0lB9BwkO,GADAa,EAvlBW,IAAAniW,MAwlBkB+5D,SAAS,EAAG,CAAA,EAAK,IAtlB9CwnS,EAAeY,EAAApoS,SAAoBz8F,EAAAw/J,QAAA6mB,SAAA,EAAArmL,EAAAw/J,QAAApgE,WAAA,CAAA,EAAA,IAwlBvCj3G,EAvlBI28Y,eAAcd,EAwlBlB77Y,EAvlBM48Y,aAASd,GAylBbjkY,EAAO4iC,0BACTz6C,EAAOi9C,2BAA6B5oD,QAAQye,KAAK+E,EAAO4iC,uBAAA,EACxDz6C,EAvlBEi9C,2BAAiBq3D,SAAA,CAAA,EAwlBnBt0G,EAAOi9C,2BAA6Bj9C,EAAOuF,WAAWi1C,YAAA,GArlBtD3iC,EAAO6iC,wBAwlBP16C,EAAOk9C,yBAA2B7oD,QAAQye,KAAK+E,EAAO6iC,qBAAA,EAtlBxD16C,EAAAk9C,yBAAsBo3D,SAAA,CAAA,EACpBt0G,EAAOk9C,yBAAqBo3D,SAAAt0G,EAAAs4M,SAA4Bpa,SAAA,EAAQ,EAAA,EAwlBhEl+L,EAvlBEk9C,yBAAAl9C,EAAAs4M,SAAA99J,YAAA,GAylBA3iC,EAAO8iC,0BACT36C,EAAOm9C,2BAA6B9oD,QAAQye,KAAK+E,EAAO8iC,uBAAA,EACxD36C,EAAOm9C,2BAA2Bm3D,SAAS,CAAA,EAtlB5Ct0G,EAAAm9C,2BAAmCn9C,EAAAuF,WAAAi1C,YAAA,GAEpC3iC,EAAS+iC,wBACP56C,EAAAo9C,yBAAA/oD,QAAAye,KAAA+E,EAAA+iC,qBAAA,EAwlBA56C,EAvlBCo9C,yBAAAk3D,SAAA,CAAA,EAwlBDt0G,EAAOo9C,yBAAyBk3D,SAASt0G,EAAOs4M,SAASpa,SAAA,EAAa,EAAA,EAtlB1El+L,EAAWo9C,yBAAuBp9C,EAAAs4M,SAAA99J,YAAA,GAE7B3iC,EAAAgjC,+BAwlBD76C,EAAOq9C,iCAAmChpD,QAAQye,KAAK+E,EAAOgjC,4BAAA,EAC9D76C,EAAOq9C,iCAAiCi3D,SAAS,CAAA,EACjDt0G,EAAOq9C,iCAAmCr9C,EAAOuF,WAAWi1C,YAAA,GArlBlE3iC,EAASijC,6BACJ96C,EAAAs9C,+BAAUjpD,QAAAye,KAAA+E,EAAAijC,0BAAA,EAwlBT96C,EAAOs9C,+BAA+Bg3D,SAAS,CAAA,EAtlBhDt0G,EAAAs9C,+BAAyBg3D,SAAuBt0G,EAAAs4M,SAAWpa,SAAA,EAAA,EAAA,EAC5Dl+L,EAAGs9C,+BAAat9C,EAAAs4M,SAAA99J,YAAA,GAElB3iC,EAAWglY,qBACT78Y,EAAG68Y,mBAAAhlY,EAAAglY,oBAylBChlY,EAAO2oH,oCAtlBVxgI,EAAQwgI,kCAAgC3oH,EAAQ2oH,mCAylB7C3oH,EAAO4oH,4BAtlBXzgI,EAAIygI,0BAA8B5oH,EAAA4oH,0B,GA4lBpC/oH,OAAOwkC,KAAK9lD,EAAGc,OAAOqmD,aAAA,EAAehmD,QAAQ,SAASie,GAtlBpD,OAAOpf,EAAAc,OAAAqmD,cAAmB/nC,E,GAylB5BnhB,QAvlBOqhB,OAAAtf,EAAUc,OAAAqmD,cAAoBv9C,CAAA,EAuNrC3L,QAtlBIqhB,OAAA2B,EAAYjhB,EAAAc,OAAAqmD,aAAA,EAEZlmC,C,CAylBN,SAtlBM+kC,EAAc5c,GAulBlB,OAtlBIA,GAAAA,EAAc/7B,OAGd+7B,EAAA5nB,IAAA,SAAenE,GAulBjB,OAtlBEA,EAAO7c,E,GAulBR2T,KAAA,EA1lBE,I,CAwOPnU,EAAGoe,QArlBG,CAAA,EAslBNpe,EAAGgE,OArlBG,CAAA,EAslBNhE,EAAG6L,QArlBG,KAslBN7L,EAAGgf,QArlBG,GAslBNhf,EAAGc,OArlBG1C,EAAY0C,OAslBlBd,EAAG0mZ,WArlBGtoZ,EAAcsoZ,YAAA,qBAslBpB1mZ,EAAGm1B,QArlBG/2B,EAAW+2B,QAslBjBn1B,EAAG0T,WAAatV,EAAOsV,YAAc,KACrC1T,EAAGmhV,aArlBS/iV,EAAA+iV,cAAA,KAslBZnhV,EAAGse,QArlBG,KAslBNte,EAAG8gB,YArlBG,KAslBN9gB,EAAG6hB,kBArlBU,CAAA,EAslBb7hB,EAAGmuF,mBArlBe/vF,EAAAqR,UAAA,GAslBlBzP,EAAG2mZ,eArlBYvoZ,EAAAuoZ,gBAAA,CAAA,EAslBf3mZ,EAAGsyH,eArlBar0H,CAAAA,QAAAw0C,UAAAr0C,EAAAk0H,cAAA,GAAAl0H,EAAAk0H,eAwlBhBtyH,EAAGqtN,oBAqTH,SAtlBqBC,EAAAzuM,GACf22E,EAAY83H,EAAAjoN,KAAA,SAAAkoN,GACZ,OAAAA,EAAA1rI,IAAchjE,QAAAA,C,GAwlBhB,OAtlBI22E,EAAAA,EAAAG,SAAgC,I,EAoStC31F,EAAG8gB,YArlBa5C,EAAAsF,eAAA,CAslBdmzB,UArlBW,GAslBXu3K,gBArlBY,GAslBZzqM,cArlBEyhY,EAslBFtgM,oBArlBcrlN,EAAA,WAAA,EAAA,gBAAA,EAAA,OAslBdu4N,sBArlBgB,SAAA3zM,EAAA84B,EAAA4kC,EAAA7oE,GACd,IAqBA4tY,EAiCA/5Y,EAtDA6c,EAAWuzB,EAAAvzB,QAAA,GAEb,MAAU,gBAAVm4D,EAAUhjE,MACRo+B,EAAAk9R,aAAqBl9R,EAAA4pW,UAAa5pW,EAAA4pW,SAAA9kU,UAAA9kC,EAAA4pW,SAAA9kU,SAAA,GAClC9kC,EAAe4pW,SAAQ9kU,SAAA,GAAa9kC,IAAAvzB,OAAAgpC,aAAA,GAEpChpC,EAAYgpC,aAAA,GAGG,cAAfmvB,EAAAhjE,OACA2oB,EAAY9d,EAAA8d,WAEZA,EADAyV,EAAAk9R,aAAcl9R,EAAA4pW,UAAA5pW,EAAA4pW,SAAA9kU,UAAA9kC,EAAA4pW,SAAA9kU,SAAA,GACH9kC,EAAA4pW,SAAA9kU,SAAA,GAAA9kC,IAAAvzB,OAAA8d,UAEbA,IAAa,UAAA,OAAAA,EACXA,EAAqBlqB,MAAA,GAEdkqB,GAAA,IAGG,uBAAVq6C,EAAAhjE,OACA+nY,EAAel9X,EAAA2rE,mBACf/6C,EAAY5wB,EAAA3Z,WACZ+2Y,EAAcp9X,EAAA4sH,cAulBRr5F,EAAIk9R,aAAel9R,EAAI4pW,UAAY5pW,EAAI4pW,SAAS9kU,UAAY9kC,EAAI4pW,SAAS9kU,SAAS,KAplB1F6kU,EAAW3pW,EAAA4pW,SAAA9kU,SAAA,GAAA9kC,IAAAvzB,OAAA2rE,mBACT/6C,EAAa2C,EAAA4pW,SAAQ9kU,SAAa,GAAA9kC,IAAAvzB,OAAA3Z,WAClC+2Y,EAAe7pW,EAAQ4pW,SAAA9kU,SAAa,GAAA9kC,IAAAvzB,OAAA4sH,eAgBpCpqI,EAAU,GAEE,0BAAZouC,GAAYssW,GAAAA,EAAAtpY,MACZpR,EAAA06Y,EAActpY,MAulBNzQ,EAtlBGk6Y,EAAAH,CAAA,KAER16Y,GAAA,MAAAW,IAEoB,sBAAvBytC,GAAoC,wBAAAA,GAAAwsW,CAAAA,EAMxBF,GAAA,UAAA,OAAAA,IACZA,EAActpY,OACdpR,EAAW06Y,EAAAtpY,MAGXzQ,EADOk6Y,EAAAH,CAAA,KAEP16Y,EAAeA,EAAQA,EAAA,MAAaW,EAAAA,IAXpCX,EAAO46Y,GAEPj6Y,EADYk6Y,EAAAH,CAAA,KAEZ16Y,GAAU,MAAAW,IAYVX,GAAU,IAGV8M,EAxCA,SAAS+tY,EAAAl6Y,GACT,IACA8hH,EADA,OAAA9hH,GACA8hH,EAAe,GACf9hH,EAAYgvB,WAAA8yF,EAAAp+G,KAAA1D,EAAAgvB,SAAA,GACZhvB,EAAcmvB,KAAAnvB,EAAAivB,OACd6yF,EAAWp+G,MAAA1D,EAAAmvB,KAAA,IAAA,KAAAnvB,EAAAivB,MAAA,GAAA,EAEbjvB,EAAWkvB,SAAAkyE,EAAAphG,EAAAkvB,UACT4yF,EAAAp+G,KAAa09F,EAAQphG,EAAakvB,QAAA,EAE3B4yF,EAAAx6G,KAAA,IAAA,GATG,E,GA8nBZsQ,oBArlBI,CAAA,CAslBF7f,MArlBErF,EAAA,WAAA,EAAA,yBAAA,EAAAmN,OAAA,SAAAgY,GAkKN1kB,EAAAgf,QAAO,GAslBPhf,EAAG8gB,YAAYC,WAAa,GAC5B/gB,EAAGc,OAAOsgB,SAAW,KAErBjC,EAAe,CAAA,CAAA,EACfmD,EAAA,EAEA5E,EAAS,WAplBdW,EAAA,C,EACC,GAAA,C,EAzKU9a,MAAA,C,KAylBNvD,EAAGgnZ,sBArlBG5oZ,EAAAuQ,IAAA,yBAAA0a,CAAA,EAslBNrpB,EAAGinZ,yBArlBG7oZ,EAAAuQ,IAAA,6BAAA,WAslBJ+O,EArlBI,WAslBFyB,EAAA,C,EACC,GAAA,C,GAEL/gB,EArlBIuQ,IAAA,WAAW,WAslBb3O,EAAGgnZ,sBAAA,EAplBHhnZ,EAAAinZ,yBAAA,C,GAo1BJ,IAAI1oZ,EAtlBY,IAAAqmB,gBAgmBhB,SAtlBMtC,IAulBAtiB,EAtlBCoe,UAulBH7f,EAtlBEymB,MAAA,EAulBFzmB,EAtlBE,IAAeqmB,iBAylBnBsiY,EAtlBI,CAAA,CAAA,EAulBJ,IAtlBIt9Y,EAAA,IAAUoZ,gBAAAuiY,EAAA,CAAA,EAAAzxX,SAAA,EACVvpB,EAAAnM,EAAAmM,IAAe,IAAAX,EAwlBnBmZ,MAtlBKxY,EAAA,CAulBH0Y,OAtlBE,MAAaC,QAAQ,CACrBC,cAAe,SAAQrjB,EAAasjB,MAAAC,eAAA,kB,EACpCC,OAAO/kB,EAAA+kB,M,GAwlBRve,KAtlBC,SAASnE,GACT,OAAAA,EAAU2iB,KAAA,C,GAwlBXxe,KAAK,SAASgE,GACbm+Y,EAAW,CAAA,CAAA,EACXlnZ,EAAG6hB,kBAAoB,CAAA,EACvB7hB,EAAG8gB,YAAY/X,KAAOA,EAAKA,KArlBjC/I,EAAS8gB,YAAAmE,WAAsBlc,EAAAnB,aACzB+qH,EAAAv+F,KAAmBkiG,KAAIvtH,EAAAnB,aAAA5H,EAAAc,OAAAqgB,QAAA,EACzBnhB,EAAOc,OAAKsxC,WAAYugF,GAAA,EAAAA,GAulBpB3yH,EAtlBCc,OAAAsxC,WAAA,EACL/zB,EAAA,EAulBIiE,EAAA,IAnlBRlkB,EAASmnB,OAAA,EACH7H,EAAC,WACH1d,EAAOse,QAAAoF,KAAA4B,mBAAA,C,MAGT/X,MAAI,SAAQC,GAEV,GADA05Y,EAAW,CAAA,CAAA,EACP15Y,CAAAA,GAAc,eAATA,EAAS8P,KAGhB,MAAA9P,C,GAy5BN,SAvlBS05Y,EAAAluY,GAwlBPhZ,EAAGoe,QAAUpF,EACb0E,EAAS,WACP,CAtlBC,sDACD,yDACA,qDACA,qDACE,6DAwlBA,+EACAvc,QAvlBO,SAAIgmZ,GACT/hZ,EAAAlG,EAAc,GAAA+8B,cAAAkrX,CAAA,EAwlBZ/hZ,IACFA,EAAQigC,SAAWrlC,EAAGoe,Q,KAhY9BhgB,EAtlBOuQ,IAAA,WAAgB,WAulBrB,IACEpQ,EAtlBEymB,MAAA,C,CAulBF,MAtlBE6Z,I,GA+pBNzgC,EAAO6mN,aAAe,SAAS/pK,GAC7B,OAAO37C,EAAQ,MAAA,EAAQ27C,EAAM,UAAA,C,EAG/B98C,EAAOgpZ,iBAAmB,SAASlsW,GACjC,OAAO37C,EAAQ,MAAA,EAAQ27C,EAAM,gBAAA,C,EAG/B98C,EAAOolC,SAAW,SAASxqB,EAAOia,EAAUpZ,GArlB9C,OAAAb,EACUzZ,EAAA,QAAA,EAAA,CAAAyZ,EAAAia,GAAA,CAAA,EAAA,IAAAzW,EAAA3C,GAAA/Z,EAAAga,QAAAD,UAwlBC,G,4KA5eX5b,QACGC,OArlBG,UAAA,EAslBHK,WArlBK,mBAAqB0mZ,CAAA,EAslB1BzmZ,UArlBK,SAwlBR,WACE,MArlBM,CAslBJC,SArlBI,IAAAC,MAAe,CAslBjB6L,IArlBE,IAslBFzJ,OArlBE,IAslBFq0B,QArlBE,IAslBFnW,QAAS,IAplBTg2E,aAAM,IAslBNvlF,SArlBE,KAslBFk3Y,eArlBE,KAslBFr0R,eArlBS,KAslBT5+G,WArlBE,KAslBFytU,aArlBW,KAslBXulE,WArlBY,I,EAslBXnoZ,WArlBC,mBAAeK,aAAA,KAAAC,YAAA,qC,EAjBA,C,IA+2CzB,CAAA,WACE,aAEAZ,QACGC,OAvlBK,UAAA,EAwlBLM,UAvlBK,uBA0lBR,WACE,MAAO,CAtlBLkM,QAAG,CAAA,EAwlBHjM,SAvlBS,IAwlBTssB,SAvlBO,+DAwlBPrsB,MAvlBO,CAwlBL6G,KAvlBE,G,EAylBJhH,WAAY,CAAC,SAAU,yBAA0B,SAAUH,EACA6uO,GACzD7uO,EAAOipZ,QAAU,WAtlBhB,MAAQ,SAAUp6K,EAAG7uO,EAAyBmH,K,EA0lB/CnH,EAvlBIwxV,SAAa,WAwlBf,OAvlBM3iH,EAAY7uO,EAAAmH,K,KAlBlB,C,IAgnBV,CAAA,WACE,aAsBA,SAvlBI+hZ,EAAAlpZ,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAAt2E,EAAAqnH,EAAAzY,GA0lBF,IAvlBEjuG,EAAOC,KAwlBTD,EAAGiuG,eAAiBA,EACpBjuG,EAAGuK,IAAMlL,EAAImL,KAAKnK,YAAY6c,SAASxS,QAAQ,eAAgB,EAAA,EAC/D1K,EAAGgf,QAAU,KAtlBbhf,EAAAc,OAAS1C,EAAA0C,OAwlBTd,EAAGwmE,KAAOpoE,EAAOooE,KACjBxmE,EAvlBEg1F,aAAa,cAAAh1F,EAAAwmE,KAAA,kCAAA,sCAwlBfxmE,EAvlBEunZ,sBAAe,GAwlBjBvnZ,EAvlBEwnZ,UAAa,KA0lBfppZ,EAvlBIqpZ,aAuiCJ,SAvlBeliZ,GAwlBb,OAvlBIowE,EAAOoC,YAAA,SAAAx4E,EAA2B,WAAA,EAAa,YAAOmnH,EAAAnhH,EAAA,EAAA,SAAA,C,EAuI5DnH,EAvlBOspZ,eA0iCP,SAvlBa3rX,GAwlBX,OAAO/7B,EAAGiuG,eAAelyE,E,EAnd3B/7B,EAAG2nZ,gBAocH,WACE3nZ,EAAGwnZ,UAvlBK9lY,QAAA1hB,EAAgBc,QAAWd,EAAAc,OAASiY,QAA0C,EAAnC/Y,EAAQc,OAAAiY,OAAY85C,KAAA,EAAOxlD,MAAQ,C,EAmJxFrN,EAAG4nZ,cAucH,WAtlBI5nZ,EAAIgf,SAwlBJ5gB,EAvlBEgO,WAAO,4BAAA,C,EA0JXpM,EAAG2nZ,gBAAA,EAEH3nZ,EAvlBEgf,QAAS,CAwlBTzZ,KAvlBM,CAwlBJga,YAvlBYhgB,EAAG,WAAA,EAAQ,eAAA,EAwlBvBigB,cAvlBMjgB,EAAA,WAAA,EAA8B,eAAA,EAwlBpCsf,MAvlBM,OAwlBNY,WAvlBiB,aAAZzf,EAAAwmE,KAwlBLtnD,QAAS,CAAA,EACTgB,SAAU,IACV6F,MAAO,IACPpG,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EAtlBpBE,aAAS,oG,EACJxC,WAAU,CACVgC,YAAYhgB,EAAA,WAAA,EAAa,yBAAA,EACzBsf,MAAO,aAwlBNY,WAAY,CAAA,EAtlBhBP,QAAA,CAAA,EACAgB,SAAA,IAwlBI6F,MAAO,IAtlBXpG,cAAS,CAAA,EACPC,WAAA,CAAA,EACCC,aAAA,CAAA,EAwlBCW,oBAAsB,OAAOxgB,EAAGwnZ,SAAA,EAChCznY,aAAc,mK,EAtlBpBrY,MAAS,CACH6X,YAAShgB,EAAA,WAAA,EAAmB,gBAAA,EAC5Bsf,MAAO,QACTY,WAAG,CAAA,EAwlBDP,QAvlBG,CAAA,EACLgB,SAAG,IAwlBD6F,MAAO,IAtlBXpG,cAAa,CAAA,EAwlBTC,WAAY,CAAA,EACZC,aAAc,CAAA,EAtlBpBW,oBAAsB,OAAAxgB,EAAAwnZ,SAAA,EAChBznY,aAAA,4D,EACJzC,KAAU,CACViC,YAAiBhgB,EAAA,WAAA,EAAA,qBAAA,EACdsf,MAAO,OACNY,WAAI,CAAA,EACNP,QAAuB,aAAblf,EAAAwmE,KAwlBRtmD,SAAU,IAtlBV6F,MAAG,IACLpG,cAAU,CAAA,EAwlBRC,WAAY,CAAA,EAtlBhBC,aAAa,CAAA,EACVW,oBAAO,OAAqBxgB,EAAAwnZ,SAAA,EAwlB3BznY,aAAc,sH,EACb6b,IAAK,CAtlBZrc,YAAShgB,EAAa,WAAA,EAAA,cAAA,EAChBsf,MAAA,MACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EACFgB,SAAI,IACF6F,MAAA,IAwlBApG,cAAe,CAAA,EAtlBjBC,WAAI,CAAA,EACFC,aAAa,CAAA,EAwlBbW,oBAAsB,OAAOxgB,EAAGwnZ,SAAA,EAtlBlCznY,aAAe,0D,EACf8nY,gBAAgB,CACdtoY,YAAOhgB,EAAO,WAAA,EAAmB,0BAAA,EAwlBjCsf,MAvlBE,kBAwlBFY,WAAY,CAAA,EAtlBZP,QAAG,CAAA,EACHgB,SAAA,IAwlBA6F,MAAO,IACPpG,cAvlBG,CAAA,EACLC,WAAU,CAAA,EAwlBRC,aAAc,CAAA,EACdE,aAAc,iI,EACbyd,MAAO,CAtlBdje,YAAShgB,EAAA,WAAA,EAAoB,gBAAA,EACzBsf,MAAI,QACFY,WAAW,CAAA,EAwlBXP,QAAS,CAAA,EAtlBXgB,SAAO,IAwlBL6F,MAAO,IACPpG,cAAe,CAAA,EAtlBrBC,WAAS,CAAA,EACPC,aAAA,CAAA,EACAW,oBAAA,OAAAxgB,EAAAwnZ,SAAA,EAwlBIznY,aAAc,4D,EACb+nY,aAAc,CAtlBrBvoY,YAAShgB,EAAA,WAAA,EAAsB,8BAAA,EACzBsf,MAAI,eACNY,WAAa,CAAA,EACbP,QAAS,CAAA,EACPgB,SAAU,IACZ6F,MAAG,IAwlBDpG,cAAe,CAAA,EAtlBfC,WAAA,CAAA,EACFC,aAAW,CAAA,EACXW,oBAAqB,OAAAxgB,EAAAwnZ,SAAA,EACrBznY,aAAS,mE,EACTmG,KAAS,CACT3G,YAAahgB,EAAA,WAAA,EAAA,eAAA,EACbsf,MAAO,OACLY,WAAG,CAAA,EACHP,QAAA,CAAA,EAwlBAgB,SAAU,IAtlBV6F,MAAG,IACHpG,cAAA,CAAA,EAwlBAC,WAAY,CAAA,EAtlBhBC,aAAA,CAAA,EACAE,aAAkB,2D,EAwlBb0qG,SAAU,CAtlBflrG,YAAOhgB,EAAA,WAAA,EAAA,mBAAA,EAwlBHsf,MAAO,WACPY,WAAY,CAAA,EAtlBlBP,QAAS,CAAA,EACHgB,SAAU,IACZ6F,MAAO,IAwlBLpG,cAAe,CAAA,EAtlBnBC,WAAgB,CAAA,EACdC,aAAY,CAAA,EACXW,cAAA,CAAA,EAwlBCT,aAAc,+D,EACblG,SAAU,CAtlBb0F,YAAahgB,EAAI,WAAA,EAAA,mBAAA,EAwlBfsf,MAAO,WAtlBbY,WAAW,CAAA,EACLP,QAAA,CAAA,EACFgB,SAAW,GACX6F,MAAO,IAwlBLpG,cAAe,CAAA,EACfC,WAAY,CAAA,EACZC,aAAc,CAAA,EACdH,UAAW,gBAtlBjBK,aAAS,+D,EACH6rC,KAAG,CACLrsC,YAAWhgB,EAAA,WAAA,EAAA,eAAA,EACXsf,MAAA,OAwlBEY,WAAY,CAAA,EACZP,QAAS,CAAA,EAtlBbgB,SAAW,IACP6F,MAAA,IACApG,cAAa,CAAA,EAwlBbC,WAAY,CAAA,EAtlBhBC,aAAW,CAAA,EACTE,aAAe,qH,EACbwtL,QAAA,CAwlBAhuL,YAvlBShgB,EAAW,WAAA,EAAA,kBAAA,EAwlBpBsf,MAAO,UAtlBRY,WAAK,CAAA,EACJP,QAAgB,cAATlf,EAAAwmE,KAwlBPtmD,SAAU,IAtlBX6F,MAAK,IACJpG,cAAW,CAAA,EACXC,WAAG,CAAA,EACHC,aAAG,CAAA,EACHH,UAAG,aACHK,aAAI,+E,EACJgoY,eAAc,CAwlBdxoY,YAvlBYhgB,EAAA,WAAA,EAAa,gBAAA,EAwlBzBsf,MAvlBE,iBAwlBFY,WAvlBE,CAAA,EAwlBFP,QAvlBE,CAAA,EAwlBFgB,SAAU,IAtlBV6F,MAAO,IACPpG,cAAS,CAAA,EAwlBTC,WAvlBK,CAAA,EAwlBLC,aAAc,CAAA,EACdH,UAAW,gBAtlBZK,aAAe,qE,EACdioY,OAAA,CACAzoY,YAAahgB,EAAM,WAAA,EAAS,iBAAA,EAwlB5Bsf,MAvlBE,SAwlBFY,WAAY,CAAA,EAtlBZP,QAAM,CAAA,EAwlBNgB,SAAU,IACV6F,MAAO,IACPpG,cAAe,CAAA,EAtlBrBC,WAAS,CAAA,EACHC,aAAS,CAAA,EACTW,oBAAM,OAAAxgB,EAAAwnZ,SAAA,EAwlBNznY,aAAc,+P,EAKbuqG,YAAa,CAtlBlB/qG,YAAgBhgB,EAAS,WAAA,EAAQ,sBAAA,EAC/Bsf,MAAK,cACHY,WAAM,CAAA,EAwlBNP,QAvlBK,CAAA,EACLgB,SAAU,IAwlBV6F,MAAO,IACPpG,cAAe,CAAA,EACfC,WAAY,CAAA,EAtlBZC,aAAK,CAAA,EACPE,aAAO,2N,EA2lBJld,MAAO,CACR0c,YAAahgB,EAAQ,WAAA,EAAa,gBAAA,EAtlBxCsf,MAAO,QACLY,WAAe,CAAA,EAwlBXP,QAAS,CAAA,EACTgB,SAAU,IAtlBhB6F,MAAO,IACLpG,cAAe,CAAA,EAwlBXC,WAAY,CAAA,EACZC,aAAc,CAAA,EAtlBpBE,aAAkB,4D,EACZkoY,QAAO,CACT1oY,YAAehgB,EAAA,WAAA,EAAkB,kBAAA,EAwlB/Bsf,MAAO,UAtlBXY,WAAO,CAAA,EAwlBHP,QAAS,CAAA,EACTgB,SAAU,IAtlBhB6F,MAAS,IACHpG,cAAS,CAAA,EACTC,WAAW,CAAA,EACZC,aAAU,CAAA,EACXE,aAAgB,mH,EAwlBbmoY,KAAM,CAtlBX3oY,YAAgBhgB,EAAS,WAAA,EAAQ,eAAA,EAwlB7Bsf,MAAO,OAtlBTY,WAAW,CAAA,EACTP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTE,aAAO,2D,EAwlBNooY,MAAO,CAtlBV5oY,YAAWhgB,EAAA,WAAA,EAAqB,gBAAA,EAC9Bsf,MAAO,QAwlBPY,WAAY,CAAA,EAtlBdP,QAAW,CAAA,EACTgB,SAAO,IAwlBP6F,MAAO,IAtlBTpG,cAAW,CAAA,EACTC,WAAO,CAAA,EAwlBPC,aAAc,CAAA,EAtlBhBE,aAAW,4D,EACTiqG,QAAO,CAwlBPzqG,YAAahgB,EAAQ,WAAA,EAAa,kBAAA,EAtlBpCsf,MAAI,UACFY,WAAO,CAAA,EAwlBPP,QAAS,CAAA,EAtlBXgB,SAAW,IACT6F,MAAO,IAwlBPpG,cAAe,CAAA,EAtlBjBC,WAAW,CAAA,EACTC,aAAO,CAAA,EAwlBPE,aAAc,2J,EAtlBhB4b,iBAAkB,CAChBpc,YAAOhgB,EAAQ,WAAA,EAAO,eAAA,EAwlBtBsf,MAAO,mBAtlBTY,WAAW,CAAA,EACTP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTW,oBAAO,OAAqBxgB,EAAAwnZ,SAAA,EAwlB5BznY,aAAc,6L,EAtlBhBgc,QAAW,CACTxc,YAAOhgB,EAAA,WAAA,EAAsB,kBAAA,EAwlB7Bsf,MAAO,UAtlBTY,WAAW,CAAA,EACTP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTW,oBAAsB,OAAMxgB,EAAAwnZ,SAAA,EAwlB5BznY,aAAc,qU,EArlBdgxH,aAAO,CAwlBPxxH,YAAahgB,EAAQ,WAAA,EAAa,uBAAA,EAtlBpCsf,MAAI,eACFY,WAAO,CAAA,EAwlBPP,QAAS,CAAA,EAtlBXgB,SAAW,IACT6F,MAAO,IAwlBPpG,cAAe,CAAA,EAtlBjBC,WAAW,CAAA,EACTC,aAAO,CAAA,EAwlBPE,aAAc,+V,EAllBdixH,cAAe,CAwlBfzxH,YAAahgB,EAAQ,WAAA,EAAa,wBAAA,EAtlBpCsf,MAAI,gBACFY,WAAO,CAAA,EAwlBPP,QAAS,CAAA,EAtlBXgB,SAAW,IACT6F,MAAO,IAwlBPpG,cAAe,CAAA,EAtlBjBC,WAAW,CAAA,EACTC,aAAO,CAAA,EAwlBPH,UAAW,gBAtlBbK,aAAW,6K,EACTkxH,UAAO,CAwlBP1xH,YAAahgB,EAAQ,WAAA,EAAa,oBAAA,EAtlBpCsf,MAAI,YACFY,WAAO,CAAA,EAwlBPP,QAAS,CAAA,EAtlBXgB,SAAW,IACT6F,MAAO,IAwlBPpG,cAAe,CAAA,EAtlBjBC,WAAW,CAAA,EACTC,aAAO,CAAA,EAwlBPH,UAAW,gBAtlBbK,aAAW,qK,EACT3P,SAAO,CAwlBPmP,YAAahgB,EAAQ,WAAA,EAAa,mBAAA,EAtlBpCsf,MAAI,WACFY,WAAO,CAAA,EAwlBPP,QAAS,CAAA,EAtlBXgB,SAAW,IACT6F,MAAI,IAwlBJpG,cAvlBS,CAAA,EAwlBTC,WAvlBO,CAAA,EAwlBPC,aAvlBS,CAAA,EAwlBTH,UAAW,gBACXK,aAAc,gE,EAtlBhBmxH,uBAA2B,CACzB3xH,YAAOhgB,EAAA,WAAA,EAAuB,iCAAA,EAwlB9Bsf,MAAO,yBAtlBTY,WAAW,CAAA,EACTP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAe,CAAA,EAwlBfC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTH,UAAO,gBAwlBPK,aAAc,8E,EAtlBhB+lK,cAAgB,CACdvmK,YAAahgB,EAAO,WAAA,EAAA,wBAAA,EAwlBpBsf,MAAO,gBAtlBTY,WAAW,CAAA,EACTP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTE,aAAO,qH,EAwlBNtd,WAAY,CAtlBf8c,YAAUhgB,EAAY,WAAA,EAAA,qBAAA,EACpBigB,cAAOjgB,EAAc,WAAA,EAAO,qBAAA,EAwlB5Bsf,MAAO,aAtlBTY,WAAU,CAAA,EACRP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTE,aAAO,sF,EAwlBNi9K,WAAY,CAtlBfz9K,YAAWhgB,EAAW,WAAA,EAAA,oBAAA,EACpBigB,cAAOjgB,EAAa,WAAA,EAAA,oBAAA,EAwlBpBsf,MAAO,aAtlBTY,WAAW,CAAA,EACTP,QAAO,CAAA,EAwlBPgB,SAAU,IAtlBZ6F,MAAI,IACFpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EAtlBdC,aAAW,CAAA,EACTE,aAAO,sF,EAwlBNqoY,WAAY,CAtlBf7oY,YAAWhgB,EAAS,WAAA,EAAA,sBAAA,EAClBigB,cAAOjgB,EAAU,WAAA,EAAA,sBAAA,EAwlBjBsf,MAAO,aAtlBTY,WAAW,CAAA,EACTP,QAAoB,cAAblf,EAAAwmE,KAwlBPtmD,SAAU,IAtlBZP,cAAW,CAAA,EACTC,WAAO,CAAA,EAwlBPC,aAAc,CAAA,EAtlBhBE,aAAW,sF,EACTsoY,iBAAO,CAwlBP9oY,YAAahgB,EAAQ,WAAA,EAAa,mBAAA,EAtlBpCigB,cAAWjgB,EAAU,WAAA,EAAA,mBAAA,EACnBsf,MAAO,mBAwlBPY,WAAY,CAAA,EAtlBdP,QAAW,cAAAlf,EAAAwmE,KACTtmD,SAAO,IAwlBP6F,MAAO,IAtlBTpG,cAAW,CAAA,EACTC,WAAO,CAAA,EAwlBPF,UAAW,gBAtlBbG,aAAW,CAAA,C,EACTyoY,yBAAqB,CAwlBrB/oY,YAAahgB,EAAQ,WAAA,EAAa,mBAAA,EAtlBpCigB,cAAWjgB,EAAW,WAAA,EAAA,mBAAA,EACpBsf,MAAO,2BAwlBPY,WAAY,CAAA,EACZP,QAAqB,cAAZlf,EAAGwmE,KAtlBdtmD,SAAW,IACT6F,MAAM,IAwlBNpG,cAvlBS,CAAA,EAwlBTC,WAAY,CAAA,EAtlBZF,UAAO,gBACPG,aAAO,CAAA,C,EACP0oY,0BAA2B,CAwlB3BhpY,YAAahgB,EAAQ,WAAA,EAAa,qBAAA,EAtlBpCigB,cAAWjgB,EAAS,WAAA,EAAA,qBAAA,EAClBsf,MAAM,4BAwlBNY,WAvlBS,CAAA,EAwlBTP,QAAqB,cAAZlf,EAAGwmE,KAtlBZtmD,SAAO,IACP6F,MAAO,IACPpG,cAAO,CAAA,EACPC,WAAO,CAAA,EAwlBPF,UAAW,gBACXG,aAAc,CAAA,C,EAtlBhB2oY,4BAAsB,CACpBjpY,YAAahgB,EAAA,WAAA,EAAqB,uBAAA,EAwlBlCigB,cAvlBSjgB,EAAY,WAAA,EAAS,uBAAA,EAwlB9Bsf,MAAO,8BAtlBPY,WAAI,CAAA,EACJP,QAAI,cAAAlf,EAAAwmE,KACJtmD,SAAI,IACJ6F,MAAO,IACPpG,cAAO,CAAA,EAwlBPC,WAAY,CAAA,EACZF,UAAW,gBAtlBbG,aAAW,CAAA,C,GA8JfzhB,EAAOmwC,OAvlBG,gBAAkB,WAwlB1BvuC,EAAG2nZ,gBAAA,EACH3nZ,EAAG4nZ,cAAA,C,wGA5CP3pZ,QACGC,OAAO,UAAA,EACPK,WAvlBI,2BAAgC+oZ,CAAA,EAwlBpC9oZ,UAvlBU,iBA0lBb,WACE,MAAO,CAtlBLC,SAAG,IAwlBHC,MAvlBM,CAwlBJoC,OAvlBE,IAwlBF0lE,KAAM,G,EAERjoE,WAAY,2BAtlBZK,aAAW,KAwlBXC,YAvlBS,uD,EAZA,C,IAklCf,CAAA,WACE,aA6BA,SAAS4pZ,EAAqBrqZ,EAAQsf,EAAUre,EAAKgd,EAAI9c,EAASJ,EAAWD,EAAW+d,GAGtF7e,EAAO6e,kBAAoBA,EAtlB3B7e,EAAAsqZ,cAAoB,CAAA,EA0lBpBtqZ,EAvlBIwe,YAqmBJ,WAEE,IAAIC,EAAWR,EAAGS,MAAA,EAvkBlB,OAwkBA1e,EAAOy8C,WAAaz8C,EAAOy8C,WAAW79B,UAAU,EAAG5e,EAAO6e,iBAAA,EArlB/D5d,EAAAgB,YAAY6c,SAAAlc,IACX,CAwlBQ+X,OAAQ3a,EAAOy8C,U,EArlBpB,SAAOz0C,GAylBEA,EAAQA,QACVyW,EAAS7J,QAAQ5M,EAAQA,OAAA,EArlB1ByW,EAAA7J,QAAA,EAAA,C,GAIE6J,EAAAM,O,EAwjBT/e,EAvlBMm9C,WAynBN,SAvlBel+B,GAwlBO,UAAhB,OAAOA,EAtlBTA,GAAOA,EAAU7c,KAAA6c,EAAYC,MAAAD,EAAAE,cAylBvBnf,CAAAA,EAAOuqZ,kBAAoBvqZ,EAAO+yY,YAAc9zX,EAAK7c,KACvDpC,EAAOwqZ,gBAAkBvrY,EAtlB7Bjf,EAAO+yY,UAAW9zX,EAAA7c,GAylBdkd,EAAS,WACHzf,QAAQw0C,UAAUr0C,EAAOyqZ,eAAA,GAC3BzqZ,EAAOyqZ,gBAAA,C,EAER,GAAA,IAKHzqZ,EAAO+yY,YAvlBjB/yY,EAAAwqZ,gBAAA,KACGxqZ,EAAO+yY,UAAA,KAEPzzX,EAAU,WAylBCzf,QAAQw0C,UAAUr0C,EAAOyqZ,eAAA,GAC3BzqZ,EAAOyqZ,gBAAA,C,EAtlBV,GAAA,E,EA8hBPzqZ,EAvlBMo9C,gBAspBN,SAAyBxiC,GAvlBvB,OAAAA,EAAYsE,MAAAtE,EAAAuE,WAAA,IAAAvE,EAAAszD,S,EAyhBdluE,EAvlBMk8X,eA0lBN,WACE,OAAGl8X,EAvlBC8kE,YACI3jE,EAAA,WAAA,EAAoBnB,EAAG8kE,WAAA,EAEzB3jE,EAAQ,WAAA,EAAc,kBAAA,C,EAilB9BnB,EAvlBM0qZ,cAwpBN,WAKO1qZ,EAAOsqZ,gBAplBXtqZ,EAAMsqZ,cAAS,CAAA,EAEfvpZ,EAASoC,KAAO,CAChBhD,WAAc,0BACdK,aAAe,KACfC,YAAA,4EACAsG,OAAAlH,QAAYmH,QAAAlG,EAAAmG,KAAA,MAAA,CAAA,EAylBTR,oBAAqB,CAAA,EACrBiJ,SAAU,CAAA,EAvlBhBjH,OAAO,CACAu2B,cAAA,CAAA,EACJC,uBAAkB,CAAA,C,EA0lBfrqB,QAAS,CACP2E,aAAA,CAAA,cAAc,SAASvE,GAvlB/B,MAAAhV,EAAAA,CAAAA,EAAAwqZ,iBAAAxqZ,CAAAA,EAAAwqZ,gBAAApoZ,KAylBkB4S,EAAYJ,QAAQ,2BAA4B,CAAExS,GAAGpC,EAAOwqZ,gBAAgBpoZ,EAAA,CAAA,C,GAItFoT,iBAAA,CAAA,cAAkB,SAASR,GACzB,OAAOA,EAAYJ,QAAQ,+BAAA,C,GAtlBrCoF,mBAAA,CAAA,cAAsB,SAAAhF,GACjB,OAAAA,EAAAJ,QAAA,+BAAA,C,MAGDjO,KAAM,SAAAoJ,GACJ/P,EAAAwqZ,gBAAqBz6Y,EACrB/P,EAAAsqZ,cAAuB,CAAA,C,EACvB,WACAtqZ,EAAAsqZ,cAAe,CAAA,C,sGAycvBzqZ,QACGC,OAAO,UAAA,EACPK,WAvlBO,uBAAOkqZ,CAAA,EAwlBdjqZ,UAvlBK,aA0lBR,WACE,MAvlBI,CAwlBFC,SAvlBI,IAwlBJI,YAvlBW,8CAwlBXH,MAvlBI,CAwlBFkqZ,gBAvlBS,IAwlBTzX,UAAW,IAtlBX0X,gBAAW,IAwlBXE,WAvlBS,IAwlBT5H,QAAS,KAtlBTj+U,YAAW,IAwlBXylV,iBAvlBS,KAwlBTK,aAAc,KAtlBdpnU,SAAI,G,EAylBNrjF,WAAY,sB,EAzmBD,C,IAyuBjB,CAAA,WACE,aAqBA,SAxlBQ0qZ,EAAY7qZ,EAAAsf,EAAAle,EAAAD,EAAAo2E,EAAA32E,EAAAqd,EAAAnd,EAAAG,EAAAS,EACEL,EAAAye,EAAA64J,EAAAyB,GA2lBpB,IAAIx4K,EAxlBGC,KAylBPD,EAAGgf,QAxlBG,KAylBNhf,EAAGc,OAxlBG1C,EAAO0C,OAylBbd,EAAGg1F,aAxlBe,yCA6lBlB52F,EAxlBM2/Y,eAkvBN,SAxlBkBj9Y,GAylBhB,OAxlBI60E,EAAAoC,YAAS,6BAAAygG,EAAA13K,GAAA,KAAAvB,EAAA,WAAA,EAAA,eAAAw3K,EAAAj2K,EAAA,EAAA,SAAA,C,EAqcbd,EAAGy9C,UAxlBU,CAylBbZ,gBAxlBca,UAAA,UAAA,EAAAC,UAAAp+C,EAAA,WAAA,EAAA,2BAAA,CAAA,EAylBXq+C,WAxlBQ,SAAA70C,EAAAxD,EAAAs4C,GACP,MAAA,iEAAeA,EAAAr9C,GAAA,OAAAuI,EAAA,M,GA0lBnB8zC,gBAxlBIa,UAAc,QAAA,EAylBfC,UAxlBKp+C,EAAa,WAAA,EAAY,kBAAA,CAAA,EAylB9Bq+C,WAxlBC,SAAc70C,EAAAxD,EAAAs4C,GAylBd,MAxlBC,6BAAiB79C,EAAAqhD,kBAAAt4C,GAAA,KAAAxJ,EAAA,WAAA,EAAA,eAAAw3K,EAAAhuK,EAAA,EAAA,S,GA0lBtB8zC,gBAxlBWa,UAAA,wBAAA,EAylBRC,UAxlBCp+C,EAAY,WAAA,EAAA,8BAAA,CAAA,EAylBbq+C,WAxlBU,SAAA70C,EAAAxD,EAAAs4C,GAET,OAAOA,EAAA0zB,qB,GA0lBT10B,gBAxlBca,UAAA,YAAA,EAylBbC,UAxlBCp+C,EAAc,WAAA,EAAA,2BAAA,CAAA,EAylBfq+C,WAxlBC,SAAc70C,EAAAxD,EAAAs4C,GAylBd,OAxlBCt+C,EAAO,MAAA,EAAAwJ,EAAA,YAAA,C,GA0lBV8zC,gBAxlBSa,UAAA,YAAA,EAylBRC,UAxlBCp+C,EAAY,WAAA,EAAA,kBAAA,CAAA,EAylBbq+C,WAxlBU,SAAA70C,EAAAxD,EAAAs4C,GACT,OAAAA,EAAUhO,mB,GA0lBdgN,gBAxlBIa,UAAe,QAAA,EAAAC,UAAAp+C,EAAA,WAAA,EAAA,oBAAA,CAAA,EAAAq+C,WAAA,SAAA70C,EAAAxD,EAAAs4C,GAylBjB,OAxlBEt+C,EAAY,WAAA,EAAA,cAAAS,EAAA+4K,QAAAhwK,EAAA,C,GA0lBhB8zC,gBAxlBQa,UAAkB,WAAA,EAAUC,UAAAp+C,EAAA,WAAA,EAAA,uBAAA,CAAA,EAAAq+C,WAAA,SAAA70C,EAAAxD,EAAAs4C,GAylBlC,OAxlBE,GAAA90C,EACC,sDAEM,sD,GA2lBX8zC,gBAxlBca,UAAA,QAAA,EAAAC,UAAAp+C,EAAA,WAAA,EAAA,mBAAA,CAAA,GA2lBdS,EAAGgf,QAxlBC,CAylBF1c,SAxlBE,CACAid,YAAIhgB,EAAgB,WAAA,EAAY,2BAAA,EAChCsf,MAAA,WAylBAY,WAxlBO,CAAA,EACPP,QAAA,CAAA,EACAgB,SAAO,IACPP,cAAY,CAAA,EACZC,WAAS,CAAA,EACTC,aAAU,CAAA,EACVE,aAAO,4G,EACPtd,WAAA,CACA8c,YAAYhgB,EAAA,WAAA,EAAA,2BAAA,EACZigB,cAAcjgB,EAAA,WAAA,EAAA,2BAAA,EACdsf,MAAA,aAylBAY,WAxlBW,CAAA,EACXP,QAAA,CAAA,EACAgB,SAAO,IACPP,cAAY,CAAA,EACZC,WAAS,CAAA,EACTC,aAAU,CAAA,EACVE,aAAO,sF,EACPjf,OAAA,CACAye,YAAYhgB,EAAA,WAAA,EAAA,oBAAA,EACZigB,cAAcjgB,EAAA,WAAA,EAAA,oBAAA,EACdsf,MAAA,SACAY,WAAA,CAAA,EAylBAP,QAxlBC,CAAA,EACDgB,SAAA,IACAP,cAAO,CAAA,EACPC,WAAY,CAAA,EACZC,aAAS,CAAA,EACTE,aAAU,wG,EACVuwD,aAAO,CACP/wD,YAAAhgB,EAAe,WAAA,EAAA,sBAAA,EACfigB,cAAYjgB,EAAA,WAAA,EAAA,sBAAA,EACZsf,MAAA,eACAY,WAAW,CAAA,EACXP,QAAA,CAAA,EAylBAgB,SAxlBO,IACPH,aAAa,qE,EACbsI,iBAAO,CACP9I,YAAYhgB,EAAA,WAAA,EAAA,8BAAA,EACZigB,cAASjgB,EAAA,WAAA,EAAA,8BAAA,EACTsf,MAAA,mBACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACAgB,SAAA,IACAH,aAAc,8E,EACd2gY,cAAc,CAylBdnhY,YAxlBUhgB,EAAA,WAAA,EAAA,iCAAA,EACVigB,cAAajgB,EAAQ,WAAA,EAAa,iCAAA,EAClCsf,MAAO,gBACPY,WAAY,CAAA,EACZP,QAAS,CAAA,EACTgB,SAAU,IACVP,cAAO,CAAA,EACPC,WAAA,CAAA,EACAC,aAAY,CAAA,EACZE,aAAc,yF,EACd85B,YAAW,CACXt6B,YAAAhgB,EAAc,WAAA,EAAA,oBAAA,EAylBdigB,cAxlBCjgB,EAAgB,WAAA,EAAA,oBAAA,EACjBsf,MAAA,cACAY,WAAO,CAAA,EACPP,QAAA,CAAA,EACAgB,SAAS,IACTH,aAAU,oE,EACV4gY,cAAO,CACPphY,YAAAhgB,EAAe,WAAA,EAAA,yBAAA,EACfigB,cAAYjgB,EAAA,WAAA,EAAA,yBAAA,EACZsf,MAAA,gBACAY,WAAW,CAAA,EACXP,QAAA,CAAA,EAylBAgB,SAxlBS,IACTP,cAAa,CAAA,EACbC,WAAO,CAAA,EACPC,aAAY,CAAA,EACZE,aAAS,yF,EACTsV,MAAA,CACA9V,YAAOhgB,EAAA,WAAA,EAAA,eAAA,EACPigB,cAAejgB,EAAA,WAAA,EAAA,eAAA,EACfsf,MAAA,QACAY,WAAA,CAAA,EACAP,QAAI,CAAA,EACJgB,SAAA,IAylBAH,aAxlBE,6E,EAylBDsiE,MAxlBC,CAylBF9iE,YAxlBEhgB,EAAA,WAAA,EAAA,kBAAA,EACFigB,cAAAjgB,EAAA,WAAA,EAAA,kBAAA,EAylBAsf,MAxlBC,QACDY,WAAA,CAAA,EACAP,QAAO,CAAA,EACPgB,SAAA,IACAH,aAAS,qD,EACTld,MAAA,CACA0c,YAAOhgB,EAAA,WAAA,EAAA,mBAAA,EACPigB,cAAejgB,EAAA,WAAA,EAAA,mBAAA,EACfsf,MAAA,QACAY,WAAA,CAAA,EACAP,QAAA,CAAA,EAylBAgB,SAxlBE,IAylBFH,aAxlBE,qD,wMAoaV9hB,QACGC,OAxlBK,UAAA,EAylBLK,WAxlBK,8BAAY0qZ,CAAA,EAylBjBzqZ,UAxlBK,oBA2lBR,WACE,MAxlBM,CAylBJC,SAxlBI,IAylBJC,MAxlBI,CAylBFoC,OAxlBE,G,EA0lBJvC,WAxlBI,8BAylBJK,aAxlBW,KAylBXC,YAxlBI,6D,EAXS,C,IAsxBnB,CAAA,WACE,aAqBA,SAxlBSqqZ,EAAO9qZ,EAAAiB,EAAAgd,EAAAY,GA2lBd7e,EAxlBM6e,kBAAYA,EA2lBlB7e,EAxlBMwe,YA0lBN,WAEE,IAxlBIC,EAAAR,EAAcS,MAAA,EAumBlB,OAdA1e,EAxlBKy8C,WAASz8C,EAAAy8C,WAAA79B,UAAA,EAAA5e,EAAA6e,iBAAA,EA0lBd5d,EAxlBIgB,YAAO6c,SAAAlc,IAylBT,CAvlBE+X,OAAA3a,EAASy8C,U,EA0lBX,SAxlBSz0C,GACPA,EAAAA,QACAyW,EAAA7J,QAAY5M,EAAAA,OAAA,EAEZyW,EAAA7J,QAAc,EAAA,C,GAId6J,EAAYM,O,sDA4iBpBlf,QACGC,OAxlBK,UAAA,EAylBLK,WAxlBK,2BAAU2qZ,CAAA,EAylBf1qZ,UAxlBK,iBA2lBR,WACE,MAxlBM,CAylBJC,SAxlBK,IAylBLI,YAxlBI,sDAylBJH,MAxlBI,CAylBF06B,aAxlBc,G,EA0lBhB76B,WAxlBI,0B,EAVO,C,IAwpBjB,CAAA,WACE,aAOA,SAxlBQ4qZ,EAAArpZ,GAylBN,MAxlBM,CAylBJrB,SAxlBM,IAylBN8rQ,WAxlBM,CAAA,EAylBN1rQ,YAxlBM,gCAylBNH,MAxlBI,CAylBFkU,MAxlBG,IAylBHk9U,YAxlBE,KAylBF9kV,OAxlBE,KAylBF2hG,SAxlBE,I,EA0lBJpuG,WAxlBI,CAAA,SAAU,UAAA,SAAA,YAAA,SAAAH,EAAA0B,EAAAb,EAAAs7G,GAylBZn8G,EAxlBE0B,QAAOA,EAylBT1B,EAxlBE0xV,YAAe1xV,EAAA0xV,aAAA,GA0lBjB1xV,EAxlBEgrZ,SAAc,SAAA1kY,GACdtmB,EAAWuuG,WACXjoF,EAAAm1M,eAAA,EACC56N,EAAAiD,GAAW9D,EAAAwU,MAAAxU,EAAA0xV,WAAA,EAAA/qV,KAAA,WACZw1G,EAAaojK,KAAAv/Q,EAAQuuG,QAAA,C,OA6lBzB76E,KAxlBI,SAAOpzB,EAAAS,I,wBA2jBflB,QACGC,OAxlBK,UAAA,EAylBLM,UAxlBK,MAAO2qZ,CAAA,C,IA0nBjB,CAAA,WACI,aAOA,SAxlBME,EAAcjrZ,EAAAe,EAAAE,EAAAuK,GA0lBlB,IAxlBI5J,EAAAC,KAylBJD,EAAG2G,KAxlBEiD,EAAAjD,KAylBL3G,EAAG4E,MAxlBCgF,EAAahF,MAylBjB5E,EAAGy8D,eAxlBQ7yD,EAAA6yD,eAylBXz8D,EAAGqwO,cAxlBazmO,EAAAymO,cA0lBhBrwO,EAAGyF,QAxlBCmE,EAAUnE,QA2lBdzF,EAAG2B,OAGH,WACExC,EAxlBGwC,OAAA,EACD3B,EAAAy8D,gBACAz8D,EAAAy8D,eAAA,C,kDAkkBNx+D,QACGC,OAxlBG,UAAA,EAylBHK,WAxlBU,8BAAA8qZ,CAAA,C,IAonBjB,CAAA,WACE,aAOA,SAxlBQC,EAAO3zU,EAAAz2E,EAAAye,GAylBb,MAxlBM,CAylBJlf,SAxlBI,IAylBJI,YAxlBI,yDAylBJH,MAxlBI,GA0lBJH,WAxlBI,CAAA,SAAa,SAAQH,MA4lBzB0zB,KAxlBI,SAASpzB,EAAAS,I,8CAykBjBlB,QACCC,OAxlBO,UAAA,EAylBPM,UAxlBO,mBAAY8qZ,CAAA,C,IA4mBtB,CAAA,WACE,aAwBA,SAxlBQC,EAylBNnrZ,EACAw+C,EACAr9C,EACAs9C,EACAx9C,EACAS,EACAd,EACAS,GAEA,IAAIO,EAxlBGC,KAkyBP,SAASupZ,EAAcj/Y,EAAKmJ,GAxlB/B,MAAW,CACVusC,KAAA,CA0lBQC,QAAS,OACT31C,IAAKA,GAAO,GAzlBpBhF,KAAA,MACG2d,QAAO,CACPC,cAAW,SAAArjB,EAA+BsjB,K,EA4lBrCra,KAAM,SAAUkY,GACdA,EAAE8C,WAAa,YAzlBhB9C,EAAAvN,WAAAA,GAAoB,E,GAGzB4qC,MAAO,KACLC,IAAA,mEA2lBAC,UAAW,CAAA,EAzlBbxB,WAAYA,EACZyB,WAAc,eACdC,WAAa,CAAA,GAAA,GAAA,GAAA,KA2lBXC,WAAY,GACZG,WAAY,CAAA,EACZ7wB,WAAY,CAAA,EACZ8wB,YAAa,IAzlBnBC,UAAS,CAAA,C,EA0tBP,SA1lBMyqW,EAAqBh7T,GA2lBzB,OA1lBIA,EAAAA,GAIUA,EAAAppF,KAAA,SAAAygF,GA2lBZ,OA1lBiB,IAAfA,EAAe9sE,K,IAId8sE,EAAOA,UARR,I,CAumBN,SA1lBM4jU,EAAS5jU,IA2lBb9lF,EAAG2pZ,yBA1lBW7jU,KAETv7E,EAAOlL,EAAAmL,KAAAnK,YAAA0Z,SACRrP,QAAA,OAAa,EAAA,EACbA,QAAA,WAAe,GAAA,EAAQo7E,EACvB9lF,EAAA4pZ,2BAIA5pZ,EAAA6pZ,kBAAc5pW,KAAA11C,IAAAA,GAHdvK,EAAA4pZ,2BAAY,CAAA,EACZ5pZ,EAAA6pZ,kBAASL,EAAAj/Y,CAAA,G,CAimBf,SA1lBMu/Y,EAAYhkU,IA2lBhB9lF,EAAG+pZ,gCA1lBUjkU,KAETv7E,EAAAlL,EAAAmL,KAAcnK,YAAA8Z,gBA2lBbzP,QAAQ,OAAQ,EAAA,EAChBA,QAAQ,WAAY,GAAA,EAAOo7E,EACzB9lF,EAAGgqZ,kCAINhqZ,EAAGiqZ,yBAAyBhqW,KAAK11C,IAAMA,GAHvCvK,EAAGgqZ,kCAAoC,CAAA,EAzlB7ChqZ,EAASiqZ,yBAAuBT,EAAAj/Y,EAAA,8BAAA,G,CAimBhC,SAAS2/Y,EAAmBpkU,IAzlB/B9lF,EAAAmqZ,uBAAYrkU,KA4lBDv7E,EAAMlL,EAAImL,KAAKnK,YAAYq2D,OAC5BhsD,QAAQ,OAAQ,EAAA,EA1lBzBA,QAAA,WAAA,GAAA,EAAAo7E,EACU9lF,EAAAoqZ,wBA+lBFpqZ,EAAGqqZ,gBAAgBpqW,KAAK11C,IAAMA,GA9lBnCvK,EAAAoqZ,wBAAW,CAAA,EACXpqZ,EAAAqqZ,gBAAUb,EAAkBj/Y,EAAA,qBAAA,G,CAkmB7B,SA3lBS+/Y,EAAAxkU,IA4lBP9lF,EA3lBEuqZ,wBAAczkU,KAEhBv7E,EAAYlL,EAAAmL,KAAAnK,YAAA4hB,QA4lBPvX,QAAQ,OAAQ,EAAA,EAChBA,QAAQ,WAAY,GAAA,EAAOo7E,EACzB9lF,EAAGwqZ,yBAINxqZ,EAAGyqZ,iBAAiBxqW,KAAK11C,IAAMA,GAH/BvK,EAAGwqZ,yBAA2B,CAAA,EAC9BxqZ,EAAGyqZ,iBAAmBjB,EAAcj/Y,EAAK,sBAAA,G,CAplB/C,SAAOmgZ,IA4lBA1qZ,EAAG2pZ,2BA1lBV3pZ,EAAA2pZ,yBAAuBF,EAAAzpZ,EAAA2qZ,mBAAA,EA4lBf3qZ,EAAG2pZ,0BA1lBLD,EAAc1pZ,EAAA2pZ,wBAAA,E,CAgmBpB,SA3lBMiB,IA4lBC5qZ,EAAG+pZ,kCA1lBN/pZ,EAAA+pZ,gCAAmBN,EAAAzpZ,EAAA6qZ,yBAAA,EACjB7qZ,EAAI+pZ,iCA4lBJD,EA3lB2B9pZ,EAAA+pZ,+BAAA,E,CAgmBjC,SAASe,IA1lBP9qZ,EAAOmqZ,yBA4lBLnqZ,EAAGmqZ,uBAAyBV,EAAuBzpZ,EAAG+qZ,gBAAA,EAClD/qZ,EAAGmqZ,wBACLD,EAAmBlqZ,EAAGmqZ,sBAAA,E,CAK5B,SAASa,IACFhrZ,EAAGuqZ,0BACNvqZ,EAAGuqZ,wBAA0Bd,EAAuBzpZ,EAAGirZ,iBAAA,EACnDjrZ,EAAGuqZ,yBACLD,EAAoBtqZ,EAAGuqZ,uBAAA,E,CAK7B,SAASvtW,EAAWC,EAAKl0C,EAAMm0C,GAC7BN,EAAS3+C,QAAQmH,QAAQ63C,CAAA,EAAKE,SAAA,CAAA,EAAY/+C,CAAA,C,CA9c5C4B,EAAGkrZ,kBAxlBe,IAAA9+N,IAylBlBpsL,EAAGmrZ,cAxlBe,EA0lBlBnrZ,EAAGorZ,gBAxlBU,CAAA,EAylBbprZ,EAAGqrZ,aAxlBGjtZ,EAAeitZ,aAylBrBrrZ,EAAGsrZ,mBAxlBe,KAylBlBtrZ,EAAG2qZ,oBAxlBc,KAylBjB3qZ,EAAG2pZ,yBAxlBiB,GA0lBpB3pZ,EAAGurZ,uBAxlBwB,CAAA,EAylB3BvrZ,EAAGwrZ,oBAxlBkBptZ,EAAQotZ,oBAylB7BxrZ,EAAGyrZ,0BAxlBU,KAylBbzrZ,EAAG6qZ,0BAxlBe,KAylBlB7qZ,EAAG+pZ,gCAxlBwB,GA0lB3B/pZ,EAAG0rZ,aAxlBU,CAAA,EAylBb1rZ,EAAG+2C,WAxlBG34C,EAAe24C,WAylBrB/2C,EAAG2rZ,iBAxlBe,KAylBlB3rZ,EAAG+qZ,iBAxlBc,KAylBjB/qZ,EAAGmqZ,uBAxlBiB,GA0lBpBnqZ,EAAG4rZ,cAAgB,CAAA,EACnB5rZ,EAAG6rZ,YAAcztZ,EAAOytZ,YACxB7rZ,EAAG8rZ,kBAAoB,KAvlBvB9rZ,EAAAirZ,kBAAS,KAylBTjrZ,EAxlBEuqZ,wBAA0B,GA0lB5BvqZ,EAAG+rZ,mBAAqB,GAvlBxB/rZ,EAAA6pZ,kBAAS,GAylBT7pZ,EAxlBEgsZ,kBAAgB,CAylBhBnvW,EACGa,UAAU,OAAA,EACVC,UAAUp+C,EAAQ,WAAA,EAAa,eAAA,CAAA,EAC/B4+C,WAAW,YAAa,aAAA,EAvlB7BA,WAAS,QAAa,MAAA,EACpBP,WAAY,SAAY70C,EAAAxD,EAAWs4C,GAylB/B,OAAI5/C,QAAQq6C,YAAYuF,EAAKgsB,eAAA,EACpB,KAtlBNhsB,EAAGgsB,gBAylBG,kCAAoChsB,EAAKgsB,gBAAkB,KAE7D,wF,GAEXhtB,EACGa,UAAU,MAAA,EAvlBlBS,WAAY,QAAA,KAAA,EACXR,UAAAp+C,EAAA,WAAA,EAAA,cAAA,CAAA,EAylBOq+C,WAAW,SAAU70C,EAAMxD,EAAMs4C,GAChC,IAAIjhB,EAAOihB,EAAK33B,MAAQ3mB,EAAQ,WAAA,EAAa,2BAAA,EAxlBrD,MAAA,2DAAAs+C,EAAAr9C,GAAA,uBAAAo8B,EAAA,M,GAEGigB,EAAWa,UAAA,MAAA,EACXC,UAAUp+C,EAAA,WAAA,EAAc,cAAA,CAAA,GAG3BS,EAAAisZ,0BAAsB,GACpBjsZ,EAAAiqZ,yBAAO,GA0lBPjqZ,EAzlBEksZ,yBAAU,CACVrvW,EACAa,UAAO,OAAA,EACLC,UAAAp+C,EAAiB,WAAA,EAAA,eAAA,CAAA,EACjB4+C,WAAW,YAAA,aAAA,EACXA,WAAA,QAAiB,MAAA,EACjBP,WAAY,SAAA70C,EAAAxD,EAAAs4C,GACZ,MAAA,CAAAA,EAAS7jC,SAAA/b,QAAAq6C,YAAAuF,EAAA7jC,QAAA6vD,eAAA,EACT,KAEAhsB,EAAA7jC,QAAc6vD,gBACJ,kCAAAhsB,EAAA7jC,QAAA6vD,gBAAA,KAEZ,wF,GA2lBAhtB,EACGa,UAAU,MAAA,EACVS,WAAW,QAAS,KAAA,EACpBR,UAAUp+C,EAAQ,WAAA,EAAa,cAAA,CAAA,EAxlBtCq+C,WAAS,SAAA70C,EAAqBxD,EAAQs4C,GA0lB9B,IAAIjhB,EAAOihB,EAAK7jC,QAAQkM,MAAQ3mB,EAAQ,WAAA,EAAa,2BAAA,EACrD,MAAO,2DAA6Ds+C,EAAKhnC,WAAa,uBAAyB+lB,EAAO,M,GAvlB5HigB,EAAOa,UAAgB,MAAA,EA0lBlBC,UAAUp+C,EAAQ,WAAA,EAAa,cAAA,CAAA,EAC/Bq+C,WAAW,SAAU70C,EAAMxD,EAAMs4C,GAxlBtC,OAAOA,EAAA7jC,QAAcsD,MAAA/d,EAAA,WAAA,EAAA,2BAAA,C,GAErBs9C,EAAOa,UAAkB,KAAA,EACzBC,UAAOp+C,EAAA,WAAA,EAAiB,aAAA,CAAA,EACxBq+C,WAAO,SAAgB70C,EAAAxD,EAAAs4C,GA0lBjB,OAAOA,EAAK53B,KAAO1mB,EAAQ,WAAA,EAAa,0BAAA,C,GAvlB5Cs9C,EAAUa,UAAY,SAAA,EACpBC,UAAOp+C,EAAQ,WAAA,EAAa,iBAAA,CAAA,EA0lB3Bq+C,WAzlBE,SAAA70C,EAAAxD,EAAAs4C,GACH,OAAOA,EAAA13B,SAAQ5mB,EAAa,WAAA,EAAA,8BAAA,C,IAIhCS,EAAAmsZ,iBAAS,GA0lBTnsZ,EAAGqqZ,gBAAkB,GACrBrqZ,EAzlBEosZ,gBAAkB,CAClBvvW,EA0lBGa,UAAU,yCAAA,EAxlBbC,UAAIp+C,EAAY,WAAA,EAAS,eAAA,CAAA,EACvB4+C,WAAA,YAAA,aAAA,EA0lBCA,WAzlBS,QAAO,MAAA,EA0lBhBP,WAAW,SAAU70C,EAAMxD,EAAMs4C,GAxlBlC,OAAA5/C,QAAUq6C,YAASvvC,CAAA,EA0lBR,KAvlBPA,EACK,kCAAAA,EAAA,KA2lBA,wF,GAEX8zC,EAxlBAa,UAAO,8BAAA,EA0lBJC,UAAUp+C,EAAQ,WAAA,EAAa,cAAA,CAAA,EAC/Bq+C,WAAW,SAAU70C,EAAMxD,EAAMs4C,GAxlB7BjhB,EAAA7zB,GAAWxJ,EAAM,WAAA,EAAA,2BAAA,EACpB,MAAO,wDAAmBs+C,EAAAxI,gBAAAr7B,QAAAxZ,GAAA,uBAAAo8B,EAAA,M,GA2lB9BigB,EACGa,UAzlBK,8BAAA,EA0lBLC,UAzlBUp+C,EAAA,WAAA,EAAkB,cAAA,CAAA,EA0lB5Bq+C,WAzlBU,SAAA70C,EAAiBxD,EAAAs4C,GA0lB1B,OAAO90C,GAAQxJ,EAAQ,WAAA,EAAa,2BAAA,C,GAExCs9C,EACGa,UAzlBO,qBAAA,EA0lBPC,UAAUp+C,EAAQ,WAAA,EAAa,aAAA,CAAA,EAC/Bq+C,WAzlBM,SAAA70C,EAAAxD,EAAAs4C,GA0lBL,OAAO90C,GAAQxJ,EAAQ,WAAA,EAAa,0BAAA,C,GAExCs9C,EACGa,UAAU,yBAAA,EAxlBXC,UAAWp+C,EAAA,WAAA,EAAW,iBAAA,CAAA,EA0lBrBq+C,WAzlBQ,SAAA70C,EAAkBxD,EAAAs4C,GACzB,OAAO90C,GAAAxJ,EAAY,WAAA,EAAA,8BAAA,C,GA2lBvBs9C,EACGa,UAzlBO,OAAA,EA0lBPS,WAzlBK,QAAO,IAAA,EA0lBZR,UAAUp+C,EAAQ,WAAA,EAAa,kBAAA,CAAA,EAC/Bq+C,WAzlBI,SAAA70C,EAAAxD,EAAAs4C,GA0lBH,MAAO,wBAAyB90C,GAAQxJ,EAAQ,WAAA,EAAa,+BAAA,EAAmC,S,GAEpGs9C,EACGa,UAAU,gBAAA,EAxlBfC,UAASp+C,EAAA,WAAA,EAAuB,iBAAA,CAAA,EAC9Bq+C,WAAa,SAAO70C,EAAMxD,EAAQs4C,GA0lB9B,OAAO90C,GAAQxJ,EAAQ,WAAA,EAAa,+BAAA,C,IAI1CS,EAAGqsZ,kBAAoB,GACvBrsZ,EAAGyqZ,iBAAmB,GACtBzqZ,EAAGssZ,iBAAmB,CACpBzvW,EACGa,UAzlBC,MAAA,EA0lBDC,UAAUp+C,EAAQ,WAAA,EAAa,cAAA,CAAA,EAC/Bq+C,WAAW,SAAU70C,EAAMxD,EAAMs4C,GAEhC,MAAO,qEA1lBFA,EAAA33B,MAAgB3mB,EAAA,WAAA,EAAA,2BAAA,GA0lB+D,M,GAExFs9C,EAzlBgBa,UAAA,MAAA,EA0lBbC,UAzlBCp+C,EAAc,WAAA,EAAA,cAAA,CAAA,GA8lBpBS,EAAG0pZ,qBAzlBWA,EA0lBd1pZ,EAAG8pZ,4BAzlBoBA,EA0lBvB9pZ,EAAGkqZ,mBAzlBKA,EA0lBRlqZ,EAAGsqZ,oBAAsBA,EACzBtqZ,EAAG0qZ,sBAzlBYA,EA0lBf1qZ,EAAG4qZ,6BAzlBKA,EA0lBR5qZ,EAAG8qZ,oBAzlBkBA,EA0lBrB9qZ,EAAGgrZ,qBAzlBeA,EA+lBZhrZ,EAAGqrZ,cA/iBNrrZ,CAAAA,EAAAorZ,kBA6lBDprZ,EAAGorZ,gBAAkB,CAAA,EACrB/rZ,EAAIgB,YAAY0Z,SAAS/Y,IAAI,CAC3BN,OAAQ,c,EACP,SAAUE,EAAUC,EAAUC,GAzlB5BA,IAAArB,EAAiBsB,aA2lBlBH,EAAS2rZ,kBAAkBprZ,QAAQnB,EAAGkrZ,kBAAkBvkX,IAAK3mC,EAAGkrZ,iBAAA,EAChElrZ,EAAGmrZ,cAAgBvqZ,EAAS4rZ,oBAzlBlCxsZ,EAAA2qZ,oBAAArpY,OAAAwkC,KAAAllD,EAAA6rZ,YAAA,EAAAjrY,IAAA,SAAAnE,GA2lBQ,MAAO,CACLyoE,UAAWzoE,EAzlBZymD,YAAa,gBAAAzmD,EAAAqkE,YAAA,EA2lBZ1oE,MAAOpY,EAAS6rZ,aAAapvY,E,IAtlBjCrd,EAAAsrZ,mBAAO,EA2lBPtrZ,EAAG2qZ,oBAAoBxpZ,QAAQ,SAAUkc,GAzlB7Crd,EAAAsrZ,oBAA0BjuY,EAAArE,K,GAGtB0xY,EAAA,GAEJ1rZ,EAAAuC,KAAgBvC,EAAUwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA4lBxB1B,EA1lBCorZ,gBAAW,CAAA,C,IAuhBVprZ,EAAGwrZ,qBAlhBJxrZ,CAAAA,EAAAurZ,yBA6lBHvrZ,EAAGurZ,uBAAyB,CAAA,EAC5BlsZ,EA1lBEgB,YAAA8Z,gBAA0BnZ,IAAA,CA2lB1BN,OA1lBC,c,EACA,SAAAE,EAAWC,EAAgBC,GAC1BA,IAAYrB,EAAAsB,aA2lBZH,EAAS2rZ,kBAAkBprZ,QAAQnB,EAAGkrZ,kBAAkBvkX,IAAK3mC,EAAGkrZ,iBAAA,EAzlBpElrZ,EAAA6qZ,0BAA0BvpY,OAAUwkC,KAAUllD,EAAQ6rZ,YAAA,EAAajrY,IAAA,SAAAnE,GACjE,MAAO,CA2lBDyoE,UAAWzoE,EAzlBnBymD,YAAgB,gBAAuBzmD,EAAAqkE,YAAA,EAClC1oE,MAAUpY,EAAA6rZ,aAAApvY,E,IA8lBXrd,EAAGyrZ,0BAA4B,EAC/BzrZ,EAAG6qZ,0BAA0B1pZ,QAAQ,SAAUkc,GAzlBnDrd,EAAAyrZ,2BAAoCpuY,EAAArE,K,GAGjC4xY,EAAA,GAEC5rZ,EAAAuC,KAAavC,EAAQwC,OAAA,EAAAC,YAAalC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA4lBpC1B,EA1lBEurZ,uBAAY,CAAA,C,IA9FZvrZ,EAAA+2C,YAmGA/2C,CAAAA,EAAA0rZ,eA6lBJ1rZ,EAAG0rZ,aA1lBc,CAAA,EA2lBjBrsZ,EA1lBIgB,YAAAq2D,OAAe11D,IAAQ,CA2lBzBN,OA1lBE,c,EA2lBD,SA1lBCE,EAAYC,EAAAC,GA2lBdF,EA1lBE2rZ,kBAASprZ,QAAAnB,EAAAkrZ,kBAAAvkX,IAAA3mC,EAAAkrZ,iBAAA,EACTpqZ,IAAUrB,EAAAsB,aACVf,EAAA+qZ,iBAAezpY,OAAAwkC,KAAAllD,EAAA6rZ,YAAA,EAAAjrY,IAAA,SAAAnE,GACf,MAAA,CACAyoE,UAAczoE,EACdymD,YAAc,gBAAAzmD,EAAAqkE,YAAA,EACb1oE,MAAQpY,EAAA6rZ,aAAApvY,E,IAITrd,EAAA2rZ,iBAAY,EACZ3rZ,EAAA+qZ,iBAAS5pZ,QAAA,SAAAkc,GACTrd,EAAA2rZ,kBAAUtuY,EAAArE,K,GAGV8xY,EAAA,GA4lBA9rZ,EA1lBCuC,KAAAvC,EAAcwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA4lBjB1B,EA1lBE0vE,cAAe,CAAA,C,IA1Hf1vE,EAAA6rZ,aA+HA7rZ,CAAAA,EAAA4rZ,gBA6lBJ5rZ,EAAG4rZ,cA1lBgB,CAAA,EA2lBnBvsZ,EA1lBIgB,YAAO4hB,QAAAjhB,IAAA,CA2lBTN,OA1lBE,c,EA2lBD,SA1lBUE,EAAAC,EAAAC,GACTA,IAAUrB,EAAAsB,aACVf,EAAAirZ,kBAAc3pY,OAAAwkC,KAAAllD,EAAA6rZ,YAAA,EAAAjrY,IAAA,SAAAnE,GACb,MAAA,CACDyoE,UAAazoE,EACbymD,YAAe,gBAAQzmD,EAAaqkE,YAAA,EACpC1oE,MAAOpY,EAAA6rZ,aAAApvY,E,IAIPrd,EAAA8rZ,kBAAe,EACf9rZ,EAAAirZ,kBAAY9pZ,QAAA,SAAAkc,GACZrd,EAAA8rZ,mBAAczuY,EAAArE,K,GAGdgyY,EAAA,GAEAhsZ,EAAOuC,KAAAvC,EAAAwC,OAAA,EAAAC,YAAAlC,EAAA,WAAA,EAAA,qBAAA,CAAA,EAAAmC,SAAA,WAAA,CAAA,EA4lBT1B,EA1lBE0sZ,eAAS,CAAA,C,yGA4NjBzuZ,QACGC,OAxlBK,UAAA,EAylBLK,WAxlBK,gCAAqBgrZ,CAAA,EAylB1B/qZ,UAxlBK,sBA2lBR,WACE,MAxlBM,CAylBJC,SAxlBK,IAylBLI,YAxlBI,0DAylBJH,MAxlBI,CAylBF2sZ,aAxlBS,KAylBTG,oBAxlBc,KAylBdz0W,WAxlBW,KAylBX80W,YAxlBY,I,EA0lBdttZ,WAxlBI,qC,EAbU,C,IAifpB,CAAA,WACE,aAmnBA,SA5lBQqD,EAAW9B,GA6lBjB,MAAO,CACLgyB,KA5lBM,SAAUpzB,EAAOm7M,EAAA9nL,GA6lBrB,IAGMuzN,EA1lBFqnK,EAulBA56X,EA5lBE,gBA+lBAuzN,EAAcvzN,EAAM,cAAiBrnB,QAAQ,KAAM,EAAA,EAAImpB,MAAM,GAAA,EA1lB/D84X,EAAgB,WA6lBhB,IAAK,IAAIj5W,EAAI,EAAGA,EAAI4xM,EAAYj4O,OAAQ,EAAEqmC,EACxC,GAAI5zC,EAAQ8B,cAAc0jP,EAAY5xM,EAAA,EAEpC,OADAmmK,KAAAA,EAAKt4M,KAAA,EAxlBpBs4M,EAAYnwM,KAAA,C,EAGThL,EAAA6vC,OAAA,WACG,OAAOzuC,EAAAwlP,W,EACP,SAAW7hM,EAAAC,GA8lBFD,IAAaC,GACfipW,EAAA,C,EAED,CAAA,CAAA,EA3lBJA,EAAA,E,GAmmBP,SAASC,EAAiB9sZ,GACxB,MAAO,CA5lBLgyB,KAAG,SAASpzB,EAAAm7M,EAAA9nL,GA8lBV,IA1lBAuzN,EACIunK,EAylBA96X,EAAM,mBA1lBVuzN,EAAUvzN,EAAA,iBAAArnB,QAAA,KAAA,EAAA,EAAAmpB,MAAA,GAAA,EACNg5X,EAAmB,WACrB,IAAG,IAAAn5W,EAAA,EAAAA,EAAA4xM,EAAAj4O,OAAA,EAAAqmC,EA8lBC,GAAI5zC,EAAQ8B,cAAc0jP,EAAY5xM,EAAA,EAEpC,OADAmmK,KAAAA,EAAKnwM,KAAA,EAITmwM,EAAKt4M,KAAA,C,EA1lBf7C,EAAA6vC,OAAA,WA8lBU,OAAOzuC,EAAQwlP,W,EACd,SAAU7hM,EAAUC,GA7lB/BD,IAAAC,GACQmpW,EAAA,C,EAgmBG,CAAA,CAAA,EA3lBTA,EAAA,E,GA6mBF,SAASC,EAAyBhtZ,GA7lBnC,MAAA,CACCgyB,KAAA,SAAApzB,EAAAm7M,EAAA9nL,GA+lBM,IA5lBIuzN,EACPynK,EA2lBOlzM,GAAQA,EAAK,IAAM9nL,EAAM,2BA5lBzBuzN,EAAAvzN,EAAA,yBAAArnB,QAAA,KAAA,EAAA,EAAAmpB,MAAA,GAAA,EACPk5X,EAAW,WACX,IAAU,IAAAr5W,EAAA,EAAAA,EAAA4xM,EAAuBj4O,OAAA,EAAAqmC,EAgmBxB,GAAI5zC,EAAQ8B,cAAc0jP,EAAY5xM,EAAA,EA7lBzC,OA8lBKmmK,KAAAA,EAAK,GAAGx0K,SAAW,CAAA,GA3lB7BtT,GAAa,aAAAA,EAAAxsB,KAEXwsB,EAAAi7X,KAAc,WAAA,UAAA,EAGdnzM,EAAA,GAAax0K,SAAA,CAAA,C,EAomBX3mC,EAAM6vC,OAAO,WACX,OAAOzuC,EAAQwlP,W,EACd,SAAU7hM,EAAUC,GA9lBtBD,IAAAC,GACPqpW,EAAA,C,EAEA,CAAA,CAAA,EAGAA,EAAA,E,qEA8dF9uZ,QA3lBAC,OAAA,UAAA,EACGM,UAAO,gBAAAoD,CAAA,EA8lBV3D,QACGC,OAAO,UAAA,EA3lBVM,UAAa,mBAASouZ,CAAA,EA8lBtB3uZ,QACGC,OA5lBC,UAAA,EA6lBDM,UA5lBC,2BAAasuZ,CAAA,C,IA2tBnB,CAAA,WACE,aAeA,SA/lBKG,EAAoBntZ,GACvB,MAAG,CACHgyB,KAAG,SAAApzB,EAAmBm7M,EAAA9nL,GACnB,IAEAm7X,EA2BEC,EA7BFp7X,EAAAk7X,0BAEAC,EAAgB,WAGhB,IAFA,IAAAE,EAAqBr7X,EAAAk7X,wBAAAviZ,QAAA,KAAA,EAAA,EAAAmpB,MAAA,GAAA,EACrBw5X,EAAoB,CAAA,EACpB35W,EAAA,EAAoBA,EAAA05W,EAAA//Y,OAAA,EAAAqmC,EACpB,GAAA5zC,EAAA8B,cAA0BwrZ,EAAA15W,EAAA,EAG1B,GA6lBS25W,EAAiB,CAAA,EA9lB1BxzM,EAAAt4M,KAAA,EACAzB,EAAoBw4D,gBAAA,CACpB,GAAAx4D,CAAAA,EAAoBkqE,WAAAojV,EAAA15W,EAAA,GAER5zC,CAAAA,EAAAy4D,SAAA60V,EAAA15W,EAAA,EAIC,OADAmmK,KAAAA,EAAAjxI,SAAS,iBAAA,EAFVixI,EAAAjxI,SAAQ,cAAA,C,MAqmBTixI,EAAKjxI,SAAS,sBAAA,EA3lBfykV,GAgmBHxzM,EAAKnwM,KAAA,C,EA1lBVyjZ,EAAWzuZ,EAAU6vC,OAAM,WAC1B,OAAIzuC,EAAYwlP,W,EAChB,SAAO7hM,EAAAC,GAgmBDD,IAAaC,GA9lBvBwpW,EAAA,C,EAimBO,CAAA,CAAA,EA7lBNxuZ,EAAAiQ,IAAA,WAAA,WACAw+Y,GACAA,EAAA,C,GAKED,EAAA,E,yBAmiBPjvZ,QA9lBEC,OAAG,UAAA,EACHM,UAAG,0BAAqByuZ,CAAA,C,IAmqB5B,CAAA,WACE,aAaA,SA/lBOl8P,EAAkBjxJ,GAgmBvB,MA/lBK,CAgmBHgyB,KA/lBI,SAAOpzB,EAAKm7M,EAAO9nL,GAgmBjBA,EAAMg/H,oBA9lBZjxJ,CAAAA,EAAgBw4D,iBACbx4D,EAAUixJ,kBAAqBh/H,EAAAg/H,iBAAA,GAElBjxJ,EAAAy4D,SAAWxmC,EAAQg/H,iBAAA,EAMlC8oD,EAAAt4M,KAAA,EA4lBOs4M,EAAKnwM,KAAA,E,yBArBjBzL,QACGC,OA/lBI,UAAA,EAgmBJM,UA/lBS,oBAAoBuyJ,CAAA,C,IA8nBlC,CAAA,WACE,aAEA9yJ,QACGC,OA/lBK,UAAA,EAgmBLM,UAAU,sBAGb,WACE,MA/lBK,CAgmBHkM,QA/lBQ,CAAA,EAgmBRjM,SA/lBI,IAgmBJI,YAAa,iEA9lBbN,WAAA,CAgmBE,aACA,SACA,OACA,aACA,SA9lBF,MAgmBE,UACA,SA9lBCiB,EACCpB,EAgmBAu3E,EA9lBJl2B,EACGxgD,EACAI,EACAS,GAuBA,SAAUwtZ,IACVjuZ,EAAAglV,QAAWkpE,aAAgBvsZ,IACtB,CACJwsZ,UAAO,CAAA,C,EAEX,SAAgB5sZ,EAAUyF,EAAAvF,GACL,MAARA,IAgmBD1C,EAAOw7O,QAAUh5O,EAASwF,QAC1BqnZ,EAAA,E,GAzlBX,SAAAA,IACArvZ,EAAAsvZ,cAAwB,KACxB,IAAA,IAAAh6W,EAAA,EAAAA,EAAAt1C,EAA+Bw7O,QAAAvsO,OAAAqmC,CAAA,GAC/B,GAAA,CAOG,SAAiBi6W,GACnBjvU,EAAAlgE,aAAAgM,QAAA1qB,EAAAga,QAAAtZ,GAAA,0BAAAmtZ,EAAAntZ,EAAA,EAgmBI,OAAKk+E,IAGE,IAAIv6B,MAAO/0C,QAAA,EAAY,CAACsvE,C,EA3mBdtgF,EAAAw7O,QAAAlmM,EAAA,EAimBb,OAhmBTt1C,KAAAA,EAAAsvZ,cAAuBtvZ,EAAAw7O,QAAAlmM,G,CArCrBt1C,EAAAsvZ,cAAU,KACVtvZ,EAAAw7O,QAAW,GAGVx7O,EAAOs8Y,QA8oBP,WA9lBA,CAAA,IACFkT,EADKxvZ,EAAAsvZ,iBACLE,EAAA,IAAAzpW,MAgmBmBmzE,QAAQs2R,EAAa75R,QAAA,EAAY31H,EAAOsvZ,cAAcG,YAAA,EACnErvY,aAAaC,QAAQ3e,EAAQga,QAAQtZ,GAAK,0BAA4BpC,EAAOsvZ,cAAcltZ,GAAIotZ,EAAax+Y,QAAA,CAAA,EAC5Gq+Y,EAAA,E,GAnDJrvZ,EAAOgL,KAxiBP,WACKhL,EAAOsvZ,gBACNtvZ,EAAAsvZ,cAAA57X,KACN3oB,OAASC,KAAAhL,EAAAsvZ,cAAA57X,KAAA,QAAA,EACP1zB,EAAiBsvZ,eAAmB5tZ,EAAA8B,cAAAxD,EAAAsvZ,cAAA3zK,UAAA,GAgmBhC96O,EAAOiD,GAAG9D,EAAOsvZ,cAAc3zK,UAAA,E,EA1pBzC37O,EAAAu9X,QA+pBI,WA9lBF,GAAOv9X,EAAAsvZ,cACF,OAAA/3U,EAAAoC,YAAA35E,EAAAsvZ,cAAAI,YAAAruW,EAAAuB,IAAA,EAAA,C,EAhEJxhD,EAAUmP,IAAA,0DAAqB,WAC/B2+Y,EAAA,C,GAOFA,EAAA,C,IAojB+B,C,IA4GtC,CAAA,WACE,aAEArvZ,QA9lBEC,OAAA,UAAA,EAgmBCM,UA/lBQ,mBAkmBX,WACE,MA/lBM,CAgmBJkM,QA/lBE,CAAA,EAgmBFjM,SA/lBG,IAgmBHI,YA/lBM,yDAgmBNN,WA/lBI,CAAS,SAAA,SAAkB,aAAW,UAAA,WAA0B,UAgmBlE,SA/lBKH,EAAAa,EAAgBO,EAASJ,EAAAm0B,EAAAzzB,GAimB5B1B,EA/lBEmrW,SAAO,GAgmBTnrW,EA/lBI2vZ,cAAW,GAgmBf3vZ,EA/lBI2nW,mBAAa,GAimBjB3nW,EAAO4vZ,mBAaP,WACE5vZ,EAAO2nW,mBAAqB,CAAA,C,EAb9B3nW,EAAO6vZ,mBA/kBP,WACF,EAAA7vZ,EAAA2vZ,gBAAAx6X,EAAA,IAAA,GAAAA,EAAA,IAAA,IAgmBMt0B,EAAOiD,GAAG,kCAAA,C,EAbRpC,EAAQimW,mBAAA,IACV3nW,EAAOmrW,SAAWzpW,EAAQ4I,KAAK6U,WA9lBnCnf,EAAA2vZ,cAAAjuZ,EAAAga,QAAAorV,qBAgmBI9mW,EA/lBC2nW,mBAAA,CAAA,E,IAxBe,C,IAyoB9B,CAAA,WACE,aAOA,SA/lBQmoD,EAAGxwY,GAgmBT,MAAO,CACLhf,MAAO,CAAC65H,QAAS,UAAA,EACjBzmG,KAAM,SAAUpzB,EAAO0G,GACrB1G,EA/lBE6vC,OAAA,UAAA,SAAAv1B,GACK,SA+lBDA,GA9lBJ0E,EAAS,WAgmBLtY,EAAQ,GAAGu5B,MAAA,C,8BAZvB1gC,QACGC,OAAO,UAAA,EACPM,UAAU,UAAW0vZ,CAAA,C,IAmB1B,CAAA,WACE,aAEAjwZ,QA/lBOC,OAAA,UAAA,EAAoBM,UAAU,kBAkmBrC,WACE,MAAO,CACLkM,QA/lBQ,CAAA,EAgmBRjM,SA/lBQ,IAgmBRssB,SACE,gHACFrsB,MAAO,CACLk3D,SAAU,IACVu4V,SA/lBK,G,EAimBP5vZ,WA/lBS,CAgmBP,SACA,sBACA,SA/lBEH,GAgmBAA,EA/lBK+vZ,SAAA/vZ,EAAA+vZ,UAAA,OAimBL/vZ,EAAOgwZ,iBAAmB,WA9lBzB,OAAAhwZ,EAAA+vZ,Q,EAkmBD/vZ,EAAOq1Y,YAAc,WA9lB3B,MAAS,6BAAcr1Y,EAAAw3D,SAAA,M,KAxBoB,C,IA+nB/C,CAAA,WACE,aAOA,SAASy4V,EAAanvZ,EAAWqlV,EAAgBllV,EAAKL,EAAUG,EAAWC,GACzE,MA/lBM,CAgmBJX,SA/lBO,IAgmBPI,YA/lBS,8CAgmBTH,MAAO,CACL64H,IAAK,KACLlyF,SA/lBE,I,EAimBJ9mC,WA/lBI,CAAS,SAAK,SAASH,MAkmB3B0zB,KAAM,SAASpzB,I,kFAhBnBT,QACGC,OAAO,UAAA,EACPM,UA/lBS,eAAgB6vZ,CAAA,C,IAmnB9B,CAAA,WACE,aAQA,SA/lBIC,EAAOlwZ,GAimBT,IAAI4B,EAAKC,KA9lBTD,EAAAmd,QAAS,KAgmBTnd,EA/lBE4E,MAAG,GAgmBL5E,EA/lBE2G,KAAI,GAsmBJ3G,EAAGmd,QA/lBM/e,EAAAmwC,OAAA,sBAAA,SAAAkV,EAAAC,GACLD,GAAGA,EAAkB6xU,uBAgmBrBt1X,EAAG4E,MAAQ6+C,EAAS6xU,qBAAA,EACpBt1X,EAAG2G,KAAO88C,EAAS8xU,oBAAA,E,EAEpB,CAAA,CAAA,EA7lBHn3X,EAAGuQ,IAAA,WAAA,WACH3O,EAAImd,QAAA,C,wBAqkBRlf,QACGC,OAAO,UAAA,EACPK,WAAW,0CAA2C+vZ,CAAA,EACtD9vZ,UA/lBK,gCA4nBR,WACE,MAAO,CACLC,SA/lBO,IAgmBPC,MAAO,CACLwoC,oBAAqB,G,EAEvB3oC,WAAY,0CA9lBdK,aAAS,KACPC,YAAG,yFACHizB,KAAI,SAAWpzB,EAAA0G,EAAA2sB,I,EAtCA,C,IA4oBrB,CAAA,WACE,aAEA9zB,QACGC,OAAO,UAAA,EACPM,UAAU,cAGb,WACE,MA/lBI,CAgmBFszB,KA/lBK,SAAQpzB,EAAQ0G,EAAA2sB,GAgmBnB3sB,EA/lBG0mF,KAAQ,WAAY,SAAOl9E,GACtB,KAAHA,EAAGgnM,QACNxwM,EAAGywM,KAAA,EACHjnM,EAAGirN,eAAA,E,KAslBiB,C,IAiB9B,CAAA,WACE,aAOA,SA/lBE00L,EAAS/uZ,EAA+BsuF,GAgmBxC,MA/lBO,CAgmBLh8D,KA/lBK,SAAApzB,EAAA0G,GAimBHA,EA/lBE0mF,KAAA,QAAA,WAgmBAtsF,EAAWk9B,yBAA2B,CAAA,EACtCoxD,EAAeoqI,WAAW,CAAA,CAAA,C,GA5lBhC9yN,EAAS0mF,KAAA,OAAA,WACHtsF,EAAIk9B,yBAAwB,CAAA,EAC9BoxD,EAAGoqI,WAAyB,CAAA,CAAA,C,GAkmB5Bx5N,EAAMiQ,IAAI,WAAY,WACpBvJ,EAAQokC,OAAO,OAAA,EACfpkC,EAAQokC,OAAO,MAAA,C,+CArBvBvrC,QACGC,OAAO,UAAA,EACPM,UAAU,yBAA0B+vZ,CAAA,C,IA0BzC,CAAA,WACE,aAOA,SAASC,EAAsBhvZ,EAAYN,EAAWwe,GAKpD,MAAO,CACLoU,KAAM,SAAU1zB,EAAQgH,GACtBhH,EAAOqwZ,YAAc,GAhmBxBrpZ,EAAO0mF,KAAA,WAAA,SAAAjtD,GAomBFA,EAAEg7L,eAAA,EAhmBAz7N,EAAAyN,SACP6R,EAAU/b,OAAAvD,EAAoByN,OAAA,EAmmBvBzN,EAAO4a,MAAQ,OAIZ,CAAC5a,EAAO4a,OAAS5T,EAAQ,GAAG4T,QAC7B5a,EAAO4a,MAAQ5T,EAAQ,GAAG4T,OAG5B5a,EAAO4a,MAAQ5a,EAAO4a,MAAQ5a,EAAO4a,MAAQub,OAAOmqL,aAAa7/K,EAAE+2K,KAAA,EAASrhL,OAAOmqL,aAAa7/K,EAAE+2K,KAAA,GAGpGx3M,EAAOyN,QAAU6R,EAAS,WACJ,OAAjBtf,EAAO4a,OAAmC+L,KAAAA,IAAjB3mB,EAAO4a,QACjC5T,EAAQ,GAAG4T,MAAQ/a,QAAQye,KAAKte,EAAO4a,KAAA,GAhmB1C5a,EAAA4a,MAAc,KACd5a,EAAAyN,QAAA,I,EACCzN,EAAAqwZ,WAAA,C,GAumBJrwZ,EAAOuQ,IAAI,WAAY,WAjmBrBvJ,EAAIokC,OAAA,UAAA,C,qDAujBZvrC,QA9lBEC,OAAA,UAAA,EAgmBCM,UA/lBU,wBAAqBgwZ,CAAA,C,IAgpBpC,CAAA,WACE,aAOA,SAASE,EACPxvZ,EACAwe,EACAle,EACAD,EACA4rW,EACAC,GACA,MAAO,CACL3sW,SAAU,IAjmBdssB,SAAS,GACPrsB,MAAO,CACL2mC,SAAM,KACJspX,qBAAU,KAmmBVC,0BAA2B,KAC3B/tZ,SAAU,KACVguZ,YAlmBM,KAmmBN13M,iBAlmBM,KAmmBNt0K,uBAlmBwB,KAmmBxBisX,oBAlmBkB,KAmmBlBhvL,sBAlmBa,I,EAomBfvhO,WAAA,CAAA,SAAA,UAAA,MAAY,SAASH,EAAQmB,EAASF,GACpCjB,EAAO4a,MAAQ,GACf5a,EAlmBIqwZ,YAAKrwZ,EAAAwwZ,2BAAA,GAmmBTxwZ,EAAOitW,WAAa,EACpBjtW,EAAOwgW,MAAQ,CAACv/V,EAAIqrW,aAAA,C,GAEtB54U,KAlmBM,SAAO1zB,GAmpBX,SAlmBKytW,IAmmBHE,EAAA,EAqBO3tW,EAAO4a,MAAMgE,UAAU,EAAG,CAAA,EAAG87B,YAAA,IAAmBqyT,EAAoByB,yBAA2B,IAnBpGmiD,EAAa,kBAAA,EAuBR3wZ,EAAO4a,MAAMgE,UAAU,EAAG,CAAA,EAAG87B,YAAA,IAAmBqyT,EAAoB0B,+BAAiC,IArB1GkiD,EAAa,wBAAA,EAyBR3wZ,EAAO4a,MAAMgE,UAAU,EAAG,CAAA,EAAG87B,YAAA,IAAmBqyT,EAAoB2B,2BAA6B,IAznBxGiiD,EAAA,qBAAA,EA0BE3jD,EAAgBoB,gBAAapuW,EAAA4a,KAAA,EA0kB7B+1Y,EAAa,uBAAA,EACJ3wZ,EAAO4a,OAChB+1Y,EAAa,WAAY,aAAA,C,CA9lBpC,SAAWhjD,IACV3tW,EAAAyN,SAmmBU6R,EAAS/b,OAAOvD,EAAOyN,OAAA,C,CA0B3B,SAnmBQkjZ,EAAKluZ,EAAAguZ,GAomBX,IAQI3iD,EARC9tW,CAAAA,EAnmBKyC,IAumBNzC,EAnmBM4a,MAAK3L,OAASjP,EAAAitW,WAgmBtBjtW,EAnmBM4a,MAAI,IA0mBRkzV,EAjnBEjuW,QAAAye,KAAAte,EAAwB4a,KAAA,EACxB65C,KAAA,EAinBNz0D,EAAO4a,MAnmBM,GAomBTkzV,IACFrzR,EAAI,MAAO,aAAeqzR,EAAiB,GAAA,EACvC1sW,EAAWwvZ,6BACb5wZ,EAAOywZ,GAAa,CAAE1oY,QAAS+lV,CAAA,CAAA,EAjmB/B9tW,EAAKyC,GAAA,CAAAslB,QAAA+lV,CAAA,CAAA,G,CAwmBX,SAnmBMrzR,EAAAo2U,EAAgBpsY,GAClBzkB,EAAOwgW,OAomBPngR,QAnmBCwwU,GAAS,sBAAoBpsY,CAAA,C,CAiflCrjB,EAlmBKk9B,yBAA8B,CAAA,EAmmBnCl9B,EAlmBQwvZ,6BAAuB,CAAA,EAmmB/B9vZ,EAlmBM4sF,KAAA,4BAwmBN,SAAmBjtD,GACC,KAAdA,EAAE80E,SACJk4P,EAAA,C,CA1mBE,EAmmBN3sW,EAAU4sF,KAAK,6BAWf,SAAoBjtD,GAClB,IAyBI8tU,EAzBCntW,EAAWk9B,2BAGhBqvU,EAAA,EAhlBe,KAsmBXY,GAnmBK9tU,EA8kBAA,GAqBO80E,SAEdv1G,EAAO4a,OAAS6lB,EAAEzf,IAElBy5D,EAAI,OAAQ,kCAAoC8zR,EAAU,aAAA,EAxB5DvuW,EAAOyN,QAAU6R,EAASmuV,EAAWztW,EAAOqwZ,WAAA,E,CAjBD,EAC7CrwZ,EAlmBKuQ,IAAA,WAmBT,WACEzP,EAAMsqC,OAAU,2BAAA,EACdtqC,EAAYsqC,OAAK,4BAAA,EAmmBVprC,EAAOuwZ,uBACVnvZ,EAAWk9B,yBAA2B,CAAA,EAjmBxCl9B,EAAIwvZ,6BAAoB,CAAA,GAEtB5wZ,EAAS8wZ,wBAmmBT9wZ,EAlmBM8wZ,uBAAA,C,CA3BL,EAmmBL9wZ,EAAO8wZ,uBAAyB1vZ,EAAWmP,IAAI,oCAiH/C,WACEvQ,EAAO4a,MAAQ7P,OAAO0tM,OAAOt3M,EAAQ,WAAA,EAAa,yBAAA,CAAA,EAlmBlDnB,EAAU4a,OACR6yV,EAAA,C,CA+egF,C,mGAtC1F5tW,QACGC,OAlmBO,UAAA,EAmmBPM,UAlmBQ,oBAAoBkwZ,CAAA,C,IAkwBjC,CAAA,WACE,aA5lBD,SAAAS,EAAWv0V,EAAA67F,EAAA24P,GACV,IAsrBM1rP,EApmBE,CAqmBJ2rP,sBAsBF,WAGE,OAAOD,EAAWE,Q,EAxBlBC,oBAgCF,WACE,OAAOH,EAAWI,M,EAhClBtiP,eAwCF,SAAwBC,GAlmBlBlvK,QAAAq6C,YAAgBorH,EAAAkJ,OAAAxjI,KAAA+jI,EAAA,EAsmBdlvK,QApmBMq6C,YAAOorH,EAAckJ,OAAMxjI,KAAA0jC,OAAA,EAqmBnC2pF,EAAKjpJ,MApmBC,kDAAA,GAwmBRipJ,EAAK6zH,KAAK,cAAgBn9G,EAAY,wDAAA,EAGtCzJ,EApmBEkJ,OAASn0F,OAAUn7D,KAAA,UAqmBrBomJ,EApmBQkJ,OAAOn0F,OAAAg3U,MAAe/rP,EAAAkJ,OAAAxjI,KAAA0jC,QAqmB9BlS,EApmBMkrE,IAAO,gBAAiB49B,EAAOkJ,OAAAn0F,OAAcn7D,IAAA,IAymBrDomJ,EAAQkJ,OAAOn0F,OAAOn7D,KAAO6vJ,EAC7BzJ,EAAQkJ,OAAOn0F,OAAOg3U,MAAQ/rP,EAAQkJ,OAAOxjI,KAAK+jI,GAClDvyG,EAASkrE,IAAI,gBAAiBqnC,CAAA,E,EA5D9BuiP,cAoEF,SAAuBC,GACrBjsP,EAAQkJ,OAAOxjI,KAAOumX,C,EApEtB/iP,OApmBM,CAqmBJxjI,KApmBM,GAqmBNqvC,OApmBQ,CAqmBNn7D,KAAQ,GACRmyY,MApmBI,E,IAymBV,OAAO/rP,C,4CAvGTzlK,QACGC,OAAO,UAAA,EACPwlK,QAAQ,cAAeyrP,CAAA,C,IAqK5B,CAAA,WACE,aAOA,SApmBQ58Y,EAAOq9Y,EAAqBl/R,EAAAm/R,GA+mBlC5xZ,QAAQqyV,SAAS,CAAC,YAAA,EAAckV,OAAO,CACrC,WAAY,SAAUsqD,GACpBl1V,EApmBWk1V,C,IAimBf,IAAIl1V,EAQAm1V,EApmBQn1V,EAAOo1V,UAAgB,aAAA,EAqmB9BD,IAEDF,EAAW,OAAYE,GAG3BH,EAAmBK,iBAAiB,CAAA,CAAA,EAjmBvChyZ,QAAAkD,QAAYuvH,EAAA,SAAAklO,GAsmBLg6D,EAAmBM,cAAct6D,EAAQt4U,KAAMs4U,EAAQnwV,OAAA,C,GAI3DxH,QArmBCkD,QAAU0uZ,EAAW,SAAAJ,EAAAtiP,GAumBlByiP,EAAmBH,MAAMtiP,CAAA,EApmBtBgjP,eAAQV,EAAUW,QAAA9yY,KAAAmyY,EAAAW,QAAAv6D,IAAA,EAClBw6D,cAAAZ,EAAAa,OAAAhzY,KAAAmyY,EAAAa,OAAAz6D,IAAA,EACE06D,YAAUd,EAAAnlI,KAAAhtQ,KAAAmyY,EAAAnlI,KAAAurE,IAAA,EACX26D,kBAAiBf,EAAAgB,WAASnzY,KAAAmyY,EAAAgB,WAAA56D,IAAA,C,gEAyjBpC53V,QACGC,OApmBK,UAAA,EAqmBLqU,OApmBKA,CAAA,C,IAopBV,CAAA,WAEI,aAqCAtU,QACKC,OAAO,UAAA,EACPi6Y,SAAS,aArCG,CACfrrU,QAAW,CACTsjV,QAAY,CApmBnB9yY,KAAY,gBACXu4U,KAAA,CAsmBU/oR,QAAW,MApmBb4jV,QAAO,MAsmBLC,QAAW,MACXC,QAAW,K,GAlmBjBN,OAAS,CACThzY,KAAU,eACVu4U,KAAA,CACE/oR,QAAA,OACF4jV,QAAO,OACLC,QAAU,OACVC,QAAU,M,GAGVtmI,KAAA,CACAhtQ,KAAA,K,EAumBAmzY,WArmBS,CAsmBPnzY,KAAM,OApmBNu4U,KAAA,CACE/oR,QAAO,OAsmBP4jV,QAAW,OACXC,QAAW,MApmBbC,QAAO,K,IA6mBe,C,IAGhC,CAAA,WACI,aAiDA3yZ,QAtmBKC,OAAA,UAAA,EAwmBAi6Y,SAAS,eAvpBN,CACP,CAumBG76X,KAAM,gBACN7X,QAAS,CArmBfmrP,GAAS,UACPkD,IAAO,UACLoG,IAAU,UACV22J,IAAA,UACAC,IAAO,UACLC,IAAK,UACLC,IAAA,UAumBEC,IAAO,UArmBXC,IAAA,UAumBIC,IAAO,UACPC,KAAQ,UArmBZC,KAAM,UAumBFC,KAAQ,UACRC,KAAQ,UACRC,qBAAwB,QACxBC,mBAAsB,kBACtBC,0BAA6B,S,GAGjC,CACEp0Y,KAAM,eAtmBZ7X,QAAA,CACGmrP,GAAO,UACPkD,IAAW,UACXoG,IAAU,UAwmBL22J,IAAO,UACPC,IAAO,UAtmBfC,IAAS,UAwmBDC,IAAO,UAtmBTC,IAAK,UACNC,IAAU,UACVC,IAAQ,UACRC,KAAO,UAwmBJC,KAAQ,UACRC,KAAQ,UAtmBdC,KAAA,UAwmBMC,qBAAwB,OACxBC,mBAAsB,kBAtmB5BC,0BAAgB,S,GA8mBc,C,IAGlC,CAAA,WAEI,aAOA,SAvmBIC,EAAqB/2V,EAAA67F,EAAAiW,GAGvB,IAAAE,EAAc,GA8mBZ,MA5mBa,CAwmBT7hC,SAYJ,WAnmBF,IAAO6mR,EAAiB3zZ,QAASye,KAAOgwJ,EAAA6iP,oBAAA,CAAA,EAC9BsC,EAAiB5zZ,QAAUye,KAAOgwJ,EAAA2iP,sBAAA,CAAA,EA6pBlCyC,GAhDJ7zZ,QAAQkD,QAAQywZ,EAAkB,SAAUG,GAExCnlP,EAAOmlP,EAAgBz0Y,MAAQ,GApmBlCrf,QAAAkD,QAAA4wZ,EAAA/sW,OAAA,SAAAsqO,EAAA0iI,GAymBOplP,EAAOmlP,EAAgBz0Y,MAAM00Y,GAAiB,CAC1C10Y,KAAUgyQ,EAAUhyQ,KAvmB1C20Y,OAAA,CACUnlV,QAAA,CACGzmD,MAA0BgwU,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA/oR,SAAA9zD,KAAA,EAymBTk5Y,UAAa77D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK/oR,SAAS0pR,SAAU,CAAA,EACvF27D,UAAa97D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK/oR,SAAS0pR,SAAU,CAAA,EAvmB5G47D,UAAuB/7D,EAAYw7D,EAAgBviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA/oR,SAAA0pR,SAAA,CAAA,EACnD67D,UAAAh8D,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA/oR,SAAA0pR,SAAA,CAAA,C,EA0mBiB87D,KAAW,CAvmBTjsY,MAAUgwU,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA,UAAA78U,KAAA,EACnBk5Y,UAAA77D,EAA2Bw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA,UAAAW,SAAA,CAAA,EACvB27D,UAAW97D,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA,UAAAW,SAAA,CAAA,EAymBJ47D,UAAa/7D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,EACxF67D,UAAah8D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,C,EAtmBnG+7D,KAAA,CACIlsY,MAAWgwU,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA,UAAA78U,KAAA,EAymBJk5Y,UAAa77D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,EACxF27D,UAAa97D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,EAvmB1F47D,UAAY/7D,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA,UAAAW,SAAA,CAAA,EACjB67D,UAAAh8D,EAAAw7D,EAAAviI,EAAAhyQ,MAAAgyQ,EAAAumE,KAAA,UAAAW,SAAA,CAAA,C,EA0mBGg8D,KAAW,CACPnsY,MAAagwU,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAU78U,KAAA,EAC9Ek5Y,UAAa77D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,EACxF27D,UAAa97D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,EACxF47D,UAAa/7D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,EACxF67D,UAAah8D,EAAKw7D,EAAmBviI,EAAUhyQ,MAAMgyQ,EAAUumE,KAAK,UAAUW,SAAU,CAAA,C,QA8ChH,SAA+Bi8D,GAKzB7lP,EAAS3uK,QAAQye,KAAK+1Y,CAAA,EAGxBx0Z,QAAQkD,QAAQyrK,EAAQ,SAAU6iP,GAtmB5CxxZ,QAAAkD,QAAAsuZ,EAAA,SAAAngI,EAAA0iI,GA2mBkBvC,EAAMuC,GAAiB1iI,EAAU2iI,OAzmBnDxC,EAAAuC,GAAA3rY,MAAAipQ,EAAA2iI,OAAAnlV,QAAAzmD,MACUopY,EAAAuC,GAAAE,UAAA5iI,EAAA2iI,OAAAnlV,QAAAolV,UACGzC,EAAAuC,GAAqBG,UAAA7iI,EAAA2iI,OAAAnlV,QAAAqlV,UA2mBhB1C,EAAMuC,GAAeI,UAAY9iI,EAAU2iI,OAAOnlV,QAAQslV,UAC1D3C,EAAMuC,GAAeK,UAAY/iI,EAAU2iI,OAAOnlV,QAAQulV,UAzmBnE,OAAA5C,EAAAuC,GAAAllV,O,KAKP4/F,EAAAgjP,cAAA9iP,CAAA,EAGY8lP,EAAA93V,EAAA55D,IAAA,eAAA,EAEH0xZ,EAELhmP,EAAAQ,eAAsBwlP,CAAA,EAItBhmP,EAAkBQ,eAAA,SAAA,C,EAiiBQN,CAAA,EAIN,IAEhB3uK,QAAQkD,QAAQyrK,EAAQ,SAAU6iP,EAAOtiP,GA6E7C,IAAgB2kP,EA/lBRa,GArFJb,EAAU,IACP,cAAc3kP,EA4mBblvK,QAAQkD,QAAQsuZ,EAAO,SAAUmD,EAAYZ,GAtmB/C/zZ,QAAOkD,QAASyxZ,EAAAX,OAAA,SAAAjtW,EAAA6tW,GA4mBN50Z,QAAQkD,QAAQ6jD,EAAQ,SAAU3+B,EAAO6xB,GAErC45W,EAAU,IAAME,EAAgBc,EAAQD,CAAA,EAAkBC,EAAQ56W,CAAA,GAAc7xB,C,OA+DpFyrY,EAnqBLA,EA6DX9tG,EAAe,IAAA95C,OAAA5oP,OAAAwkC,KAAAgsW,CAAA,EAA6B39Y,KAAA,GAAA,EAAA,IAAA,EAC5C0+B,EAFW,s4ZAEInoC,QAAAs5S,EAAA,SAA8B+uG,GAEtC,OAAAjB,EAAAiB,E,GAGPC,EAAS/0Z,QAAamH,QAAA,MAAA,GACdutZ,EAAA10Z,QAAgBmH,QAAA,iCAAA,GACpBq5B,KAAAoU,CAAA,EA2mBAmgX,EAAOhgX,OAAO2/W,CAAA,C,IAlKdt8D,KAAUA,C,EA6Kd,SAASA,EAAKhwU,EAAO4sY,GAxmBnBC,EAAiBD,GAAA,CAAA,EAkBf,OAZS,IAAP5sY,EAAOhZ,QAAwB,MAAxBgZ,EAAwB,IAAA,MAAAA,EAAA,IAAA,MAAAA,EAAA,IA4mB7BA,EAAM2e,OAAO,EAAG,CAAA,EAhmBF,KAsmBd3e,EA5mBC6sY,EAooBT,SAAuB7sY,EAAO6sY,GAxmB5B,IAAIC,EAAgB,CAClBC,MAAS,CA2mBDxgV,EAAK,IACLC,EAAK,MACLC,EAAK,MAzmBRC,EAAA,M,EA4mBDsgV,MAAS,CACLzgV,EAAK,OAzmBRC,EAAA,OACAC,EAAO,OA2mBJC,EAAK,M,GAKK,MAAb1sD,EAAM,IAA2B,MAAbA,EAAM,IAA2B,MAAbA,EAAM,GAxmBrDA,EAAO,GAAA8sY,EAAcC,MAAgBF,GAG9B,IAAA7sY,EAAA,IAAmB,IAAAA,EAAA,IAAA,IAAAA,EAAA,KAE1BA,EAAS,GAAO8sY,EAAAE,MAAAH,IA6mBd,OAAO7sY,C,EApDmBA,EAAO6sY,CAAA,EAtmBjC7sY,GAAOhZ,OAEH,OAAQgZ,EAAAlS,KAAA,GAAA,EAAA,IA4mBe,IAAjBkS,EAAMhZ,OAxmBX,QAAYgZ,EAAAlS,KAAA,GAAA,EAAA,IA8mBbsiJ,KAAAA,EA1mBKjpJ,MAAA,4DAA2B6Y,EAAAhZ,OAAA,sCAAA,C,CAspBxC,SA1mBMylZ,EAAOhsH,GAET,OAAAA,EAAAhzL,OAAA,CAAA,EAAApyB,YAAA,EAAAolN,EAAA9tP,MAAA,CAAA,C,8CAqWR/6C,QAtmBFC,OAAS,UAAA,EACP4mQ,QAAO,gBAAA6sJ,CAAA,C,IAg3BX,CAAA,WAEI,aAQA,SA1mBQ2B,EAAiB14V,EAAA8xG,GA4mBrB,IAAI1sK,EAAKC,KAGTD,EA1mBE4sK,OAAOF,EAAeE,OA4mBxB5sK,EAAG6sK,YA1mBC,CA2mBA,CACIlhD,MAAO,QACP3yG,MAAO,O,EAEX,CACI2yG,MAAO,OACP3yG,MAAO,M,GAGfhZ,EAAG8sK,aAAe,CACd,CA1mBVnhD,MAAA,sBACU3yG,MAAA,qBACC+zJ,OAAA,+C,EA6mBD,CA1mBDphD,MAAA,6CACH3yG,MAAe,qCACX+zJ,OAAA,iE,EAEJ,CACMphD,MAAK,+CACL3yG,MAAK,sCACL+zJ,OAAK,mE,EAEX,CACMphD,MAAK,wBACL3yG,MAAK,uBACL+zJ,OAAK,iD,EAEX,CACOphD,MAAK,uBACL3yG,MAAK,qBA4mBJ+zJ,OAAQ,uD,EAzmBZ,CACEphD,MAAK,eACL3yG,MAAK,cACL+zJ,OAAK,+C,GAIX/sK,EAAAgtK,WAAW,OACXhtK,EAAAitK,YAAWryG,EAAW55D,IAAQ,aAAA,GAAe,qBAG7ChB,EAAAktK,eAYA,SAAsBC,GAEtBT,EAAWQ,eAAmBC,CAAA,C,EAb9BntK,EAAAotK,eAqBA,WAEA,OAAWV,EAAWE,OAAQn0F,M,EAtB9Bz4E,EAAAqtK,iBA4BA,WAEYpvK,QAAWmH,QAAQ,MAAA,EA8mBpBkoK,YAAY,QAA4B,UAAlBttK,EAAGgtK,UAAe,C,EAhCnDhtK,EAAGutK,kBArkBH,WAGA3yG,EAAWkrE,IAAA,cAAmB9lI,EAAKitK,WAAA,EAGnCpgK,SAAYC,OAAA,C,EAgnBhB,SAASymZ,EAAe51Y,GAzmBpB,MAAA,CACFlf,SAAA,IACAC,MAAA,GACAH,WAAgB,iCAChBM,YAAe,4CACf2mV,QAAQ,SAAAC,GAIJ,OAFMA,EAAA78Q,SAAA,kBAAA,EAEG,SAAAlqE,GAunBCA,EAAM80Z,qBAlnBf,WA8mBa71Y,EAAW,oBAAA,EAAsBoiC,OAAA,C,mEAnIrD9hD,QACKC,OAAO,UAAA,EACPK,WAAW,2BAA4B+0Z,CAAA,EACvC90Z,UAAU,iBAAkB+0Z,CAAA,C,IA0IrC,CAAC,WAEG,aAOA,SAAS9sS,EAAQrnH,GAGb,IAAIq0Z,EAAe,IAAIC,aAAat0Z,EAAQ6/M,UAAUqtE,SAAA,EAClDqnI,EAAc,KAUlB,MARc,CA1mBlBh0W,OA6nBI,SAAgBtiC,EAAM+rB,GAzmBxB,MAA8B,CAAA,EAAtBA,EAAO2P,QAAO17B,CAAA,C,EAwlBhBu2Y,cA9kBN,WA8mBM,IAlfFC,EAqCNC,EACY/sI,EACPgtI,EAaD,OA8bSJ,IAKDK,EAAc,CA3mB5B,CACUltH,OAAA1nS,EAAA6/M,UAAAqtE,UACA2nI,UAAA,OA6mBQC,cAAe,OACfpX,SAAe,M,EAEnB,CACIh2G,OAAW1nS,EAAQ6/M,UAAUqtE,UAC7B2nI,UAAW,SACXnX,SAAW,Q,EAEf,CACIh2G,OAAe1nS,EAAQ6/M,UAAUqtE,UACjC2nI,UAAe,UACfC,cAAe,WA3mB3BpX,SAAA,S,EAEF,CACah2G,OAAA1nS,EAAA6/M,UAAAk1M,OA6mBCF,UAAe,QACfC,cAAe,UACfpX,SAAe,Q,EA1mB3B,CACC96E,KAAA5iU,EAAAgrU,MACL0yE,SAAA,O,EA8mBY,CACIh2G,OAAW1nS,EAAQ6/M,UAAUk1M,OA3mB7CF,UAAmB,OA6mBHnX,SAAW,M,EA1mBnB,CACRh2G,OAAA1nS,EAAA6/M,UAAAk1M,OACIF,UAAmB,MA6mBPnX,SAAW,W,EAEf,CA3mBIh2G,OAAA1nS,EAAY6/M,UAAiBqtE,UAC7C2nI,UAAA,UACInX,SAAmB,S,EAEd,CACAh2G,OAAkB1nS,EAAK6/M,UAAYk1M,OACnCF,UAAkB,SA6mBXnX,SAAW,Q,EAEf,CACIh2G,OAAW1nS,EAAQ6/M,UAAUqtE,UAC7B2nI,UAAW,WA3mB9BnX,SAAA,U,EAEG,CA6mBgBh2G,OAAe1nS,EAAQ6/M,UAAUqtE,UA3mB7C2nI,UAAa,OACJnX,SAAA,WACGoX,cAAA,M,EAEJ,CACJptH,OAAW1nS,EAAA6/M,UAAAqtE,UACX2nI,UAAW,YACXnX,SAAW,WACXoX,cAAW,I,EA8mBP,CA3mBIptH,OAAA1nS,EAAA6/M,UAAAqtE,UACJ2nI,UAAA,QACAnX,SAAA,UACJoX,cAAW,I,EAEX,CACAptH,OAAW1nS,EAAA6/M,UAAAqtE,UA6mBH2nI,UAAe,UACfnX,SAAe,WA3mBfoX,cAAA,S,GAIJE,EAAA,CACA,CACJttH,OAAW1nS,EAAA6/M,UAAArpJ,SACXq+V,UAAW,MACXnX,SAAW,S,EA8mBP,CACIh2G,OAAW1nS,EAAQ6/M,UAAUrpJ,SAC7Bq+V,UAAW,MACXnX,SAAW,K,EA1mB3B,CACYh2G,OAAA1nS,EAAA6/M,UAAArpJ,SACEq+V,UAAA,QA6mBEnX,SAAW,O,EA1mBlB,CACTh2G,OAAA1nS,EAAA6/M,UAAArpJ,SA6mBgBq+V,UAAW,SA3mBvBnX,SAAe,Q,EAET,CACGh2G,OAAA1nS,EAAA6/M,UAAArpJ,SACDq+V,UAAA,OACCnX,SAAA,M,EAEP,CACOh2G,OAAA1nS,EAAA6/M,UAAArpJ,SACAq+V,UAAA,OACAnX,SAAA,M,EAEP,CACOh2G,OAAA1nS,EAAA6/M,UAAArpJ,SACCq+V,UAAA,UACAnX,SAAA,S,GAIR+W,EAAsB,GAqC5BC,EAAAO,EAAAL,CAAA,GAAA,kBACYjtI,EAAAutI,EAAAl1Z,EAAA6/M,UAAAqtE,SAAA,GAAAgoI,EAAAl1Z,EAAA6/M,UAAAs1M,UAAA,GAAA,kBACPR,EAAQM,EAAiBD,CAAA,GAAA,aAG9BN,EAASA,EAAAh7W,YAAA,EACTiuO,EAAA+sI,EAAA,IAAA/sI,EA8mBQgtI,EAAKA,EAAGj7W,YAAA,EAER66W,EAAc,CA5mBdG,QAAUA,EACV/sI,QAAUA,EACVgtI,GAAUA,C,GAGPJ,EA0jBH,SAASU,EAAatrZ,GA1mB5B,IAAA,IAAA2qC,EAAA,EAAAA,EAAA3qC,EAAAsE,OAAAqmC,CAAA,GACQ,CACG,IAAA8gX,EAAAzrZ,EAAA2qC,GAAAozP,OACD2tH,EAAA1rZ,EAAA2qC,GAAAsuR,KAIC,GAFA6xF,EAAA9qZ,EAAA2qC,GAAAwgX,eAAAnrZ,EAAA2qC,GAAAopW,SAEA0X,GAEA,GAAA,CAAA,IAAAA,EAAAz7W,QAAAhwC,EAAA2qC,GAAAugX,SAAA,EAEA,OAAAlrZ,EAAA2qC,GAAAopW,Q,MAIC,GAAA2X,EAER,OAAA1rZ,EAAwB2qC,GAAAopW,Q,EAinBtB,SAASwX,EAAcE,GA1mB/B,IAAAzvX,EAAAyvX,EAAAz7W,QAAA86W,CAAA,EAEK,GAAS,CAAA,IAAA9uX,EAKd,OAAAoqC,SAAAqlV,EAAAx3Y,UAAA+nB,EAAA8uX,EAAAxmZ,OAAA,CAAA,CAAA,C,GA3LMqnZ,cAoNF,WA+mBa,SAALx/E,IA3mBA,OAA2B,OAA3B,EAAA9gT,KAAmBg8O,OAAA,IAAa,GAAYt8O,SAAA,EAAA,EAAA9W,UAAA,CAAA,C,CA+mBhD,OAAQk4T,EAAA,EAAOA,EAAA,EAAOA,EAAA,EAAOA,EAAA,EAAOA,EAAA,EAAOA,EAAA,C,EA3N3C2X,SAkOJ,WAEI,OAAO4mE,EAAakB,OAAA,C,EA90BpB9sS,cAu1BJ,SAAuBxqG,EA7mBCoxE,GAEA,CAAA,IA6mBfA,EAAM11C,QAAQ17B,CAAA,EAEfoxE,EAAMl+E,KAAK8M,CAAA,EAIXoxE,EAAMzpD,OAAOypD,EA7mBG11C,QAAA17B,CAAA,EAAkB,CAAA,C,yBAyW9Cpf,QACKC,OAAO,UAAA,EACP4mQ,QAAQ,UAAWr+I,CAAA,C,IAuQ5B,CAAA,WAEI,aAEAxoH,QACKC,OAAO,UAAA,EACPsf,SAAS,QAGd,WAKI,IAGIi5I,EAAOx4J,QAAQqyV,SAAS,CAAC,KAAA,EAAOtvV,IAAI,MAAA,EAGpC0wF,EAAU,GACVryF,EAAM,GAeV,SAASu1Z,EA7mBOrqZ,GA+mBZmnF,EAAUnnF,C,CAQd,SAASsqZ,IAEL,OAAOnjU,C,CAmBX,SA7mBQh9D,EAAQtV,EAAAwvG,GA+mBN3wH,QA7mBQsyV,SAAAnxU,CAAA,EAmnBRnhB,QA7mBEmhG,QAAawvB,CAAA,EAonBrBvvH,EAAI+f,GAAO,CA5mBP7U,IAAAmnF,GAAyBk9B,EAAI,IAAA,IA8mB7BkmS,cAAelmS,EAAS,IAAM,GA5mBlCgrJ,QAAKhrJ,EAAA,IAAA,GACLnpH,QAAAmpH,EAAA,IAAA,E,EAomBI6nC,EAAKjpJ,MAAM,qEAAA,EANXipJ,EA7mBIjpJ,MAAM,mDAAA,C,CAojBHvN,KAnmBX20Z,WAAgBA,EAmmBL30Z,KAlmBX40Z,WAAAA,EAkmBW50Z,KAjmBP80Z,aA8BR,WA+mBI,OAAO11Z,C,EA5CIY,KAhmBPy0B,SAAUA,EA+qBlBz0B,KAAK6tV,KAAA,CAAA,OAAA,KAAA,YAAA,aAAO,SAAUr3L,EAAMp6I,EAAImoU,EAAWhlV,GAhmBvC,MAqmBc,CACVo1Z,WAAYA,EACZC,WAAYA,EA5mBpBngY,SAAgBA,EAChB1hB,QA4nBI,SAAiBtG,EAAQorD,GAGrBt4D,EAAW4M,WAAW,qBAAA,EAEtB,IAAI4oZ,EAActoZ,EAAOmnB,MAAM,GAAA,EAC3B+6F,EAAWomS,EAAY,GACvB/xY,EAAS+xY,EAAY,GA5mBxBprZ,EAAYkuD,GAAA,GAEb,GAAA,CAAA82D,GAAgB,CAAA3rG,EAgnBZ,OADAwzI,EAAKjpJ,MAAM,2EAAA,EACJ,CAAA,EAzmBf,IAAAqP,EAAAR,EAAAS,MAAA,EAgnBQm4Y,EAAY51Z,EAAIuvH,GA3mBnBqmS,EAQqBzwE,EAAYywE,EAAA1qZ,IAAA0qZ,EAAAH,cAAAG,EAAAr7I,QAAAq7I,EAAAxvZ,OAAA,EAGtCwd,GAAArZ,EAgnBY,SAAUhJ,GA3mBPic,EAAA7J,QAAApS,CAAA,EAgnBCpB,EAAW4M,WAAW,uBAAA,C,EAI1B,SAAUxL,GAENic,EAASnP,OAAO9M,CAAA,EA1mB5BpB,EAAiB4M,WAAA,qBAAA,C,IA1BjBqqJ,EAAQjpJ,MAAA,aAAqBohH,EAAA,sCAAA,EA8mBzB/xG,EAASnP,OAAO,aAAekhH,EAAW,sCAAA,GA+B9C,OAAO/xG,EAASM,O,EAtEhB43K,QAmFJ,SAAiBroL,EAAQorD,EAAYrrD,EAASe,GA1mB9ChO,EAAA4M,WAAA,qBAAA,EA+mBI,IAAI4oZ,EAActoZ,EAAOmnB,MAAM,GAAA,EAC3B+6F,EAAWomS,EAAY,GA5mBxB/xY,EAAA+xY,EAAA,GA8mBCprZ,EAASkuD,GAAc,GAE3B,GAAK,CAAC82D,GAAY,CAAC3rG,EA1mBlB,OA4mBGwzI,EAAKjpJ,MAAM,2EAAA,EA5mBN,CAAA,EAinBT,IAAIqP,EAAWR,EAAGS,MAAA,EAGdm4Y,EAAY51Z,EAAIuvH,GA3mBpCqmS,EAMqCzwE,EAAAywE,EAAA1qZ,IAAA0qZ,EAAAH,cAAAG,EAAAr7I,QAAAq7I,EAAAxvZ,OAAA,EAGxBwd,GAAyBrZ,EAknBd,SAAUhJ,GAGNpB,EAAW4M,WAAW,uBAAA,EA5mB3ByQ,EAAA7J,QAAApS,CAAA,EAGX3C,QAAAw0C,UAAAhmC,CAAA,GAAAxO,QAAAmwO,WAAA3hO,CAAA,GAEWA,EAAA7L,CAAA,C,EAKC,SAAAA,GAknBIpB,EAAW4M,WAAW,qBAAA,EA5mB1ByQ,EAAAnP,OAAA9M,CAAA,EAGZ3C,QAAAw0C,UAAAjlC,CAAA,GAAAvP,QAAAmwO,WAAA5gO,CAAA,GAEYA,EAAA5M,CAAA,C,IAwkBJ61J,EAAKjpJ,MAAM,aAAeohH,EAAW,sCAAA,EACrC/xG,EAASnP,OAAO,aAAekhH,EAAW,sCAAA,GA6C9C,OAAO/xG,EAASM,O,KA1PL,C,IA+P3B,CAAC,WAEG,aAEAlf,QACKC,OAAO,UAAA,EACP4mQ,QAAQ,yBAGb,WAOI,MALc,CA9mBXtlC,oBA6nBH,SA/mBgB6/B,GAonBZ,IAHA,IAAIk6F,EAAepwV,OAAOm2J,KAAK+/F,CAAA,EAC3B61J,EAAY37D,EAAalsV,OACzBmzF,EAAQ,IAAIo0N,WAAWsgG,CAAA,EAClBxhX,EAAI,EAAGA,EAAIwhX,EAAWxhX,CAAA,GAAK,CACjC,IAAIyhX,EAAQ57D,EAAajvK,WAAW52I,CAAA,EACpC8sD,EAAM9sD,GAAKyhX,C,CA7mBlB,OAAA30T,C,EAtBGi/H,cA+oBH,SAAuB21L,EAAYC,GAC/B,IAAIpqZ,EAAO,IAAInC,KAAK,CAACusZ,GAAO,CAAC9vZ,KAAM,iBAAA,CAAA,EA9mBnCusB,EAAOprB,SAAY4C,cAAa,GAAA,EAinB5Bg4M,GADJxvL,EAAKvoB,KAAOJ,OAAOF,IAAIC,gBAAgB+B,CAAA,EACxBmqZ,GACftjY,EAAKtoB,SAAW83M,EAChBxvL,EAAKroB,MAAA,C,GA7C0B,C,IAoD3C,CAAA,WAEI,aAOA,SA/mBQ6rZ,EAAaj5Y,EAAAo6I,EAAAp3J,GAqnBjB,MAnnBI,CACA2T,QA0nBJ,SA/mBYtG,EAAAorD,GAinBR,IAAIk9V,EA/mBQtoZ,EAAWmnB,MAAA,GAAA,EAgnBnB+6F,EAAWomS,EAAY,GACvB/xY,EAAS+xY,EAAY,GACrBprZ,EAASkuD,GAAc,GAE3B,GAAK,CAAC82D,GAAY,CAAC3rG,EAGf,OADAwzI,EAAKjpJ,MAAM,iFAAA,EACJ,CAAA,EA3mBnB,IAAAqP,EAAAR,EAAAS,MAAA,EAEAm4Y,EAmpBI,SAAsBrmS,GAxmBtB,IA2mBI,IAAI2mS,EAAgB3mS,EAAS/6F,MAAM,GAAA,EAC/BohY,EAAY51Z,EA5mBpBugR,EAAA,EAAAA,EAAA21I,EAAAloZ,OAAAuyQ,CAAA,GAinBI,CA/mBA,GAAK3hR,QAAAq6C,YAAA28W,EAAAM,EAAA31I,GAAA,EACL,CACInpH,EAAOjpJ,MAAA,kBAAA+nZ,EAAA31I,GAAA,mBAAA,EAinBHq1I,EAAY,CAAA,EACZ,K,CAGJA,EAhnBIA,EAAeM,EAAQ31I,G,CAmnB/B,OAAMq1I,GA9mBF,CAAA,C,EAzDZrmS,CAAA,EAEaqmS,EAOLA,EAAchyY,GAAArZ,EAGd,SAAehJ,GAEfic,EAAe7J,QAAApS,CAAA,C,EAonBP,SAAUA,GAENic,EAASnP,OAAO9M,CAAA,C,IAhBxB61J,EAAKjpJ,MAAM,aAAeohH,EAAW,sCAAA,EA/mBxC/xG,EAAQnP,OAAA,aAAAkhH,EAAA,sCAAA,GAqoBT,OAAO/xG,EAASM,O,iCA9DxBlf,QACKC,OAAO,UAAA,EA9mBZ4mQ,QAAS,cAAewwJ,CAAA,C,IAktB5B,CAAA,WAEI,aAEAr3Z,QACKC,OAAO,UAAA,EACPujB,OAAO,eAIZ,WAEI,OAAO,SAAU4gE,EAAOz2B,GAEpB,IAKIg8N,EALJ,OAhnBmB,IAgnBdvlM,EAhnBGh1E,QAA6B,IAAVu+C,EAAAv+C,OAEnBg1E,GAmnBJulM,EAhnBI,GAknBRvlM,EAAMlhF,QAhnBE,SAAWkc,GAEfuuC,EAAAsgB,MAAA,SAAA9mB,GAEI,IAAAowW,EAAW,CAAA,EAWX,OAumBAn4Y,EAAKuuC,KAAKzqD,QAAQ,SAAUs0Z,GA9mB5BA,EAAWn4Y,OAAQ8nC,EAAU9nC,OAE7Bk4Y,EAAW,CAAA,E,GAKXA,C,IAKA5tI,EAAAr3Q,KAAA8M,CAAA,C,GAonBDuqQ,E,EAvpBC,EAinBXnmQ,OAAO,qBA2CZ,WAEI,OAAO,SAhnBKi0Y,EAAe9pW,GAknBvB,IAtmBIg8N,EAsmBJ,GAhnBuB,IAgnBlB8tI,EAhnBGroZ,QAAe,IAAAu+C,EAAAv+C,OAqnBvB,OAAKqoZ,EAhnBGroZ,OAAeu+C,EAAAv+C,OAknBZ,IA7mBPu6Q,EAAS,GAELh8N,EAAAsgB,MAAW,SAAQ9mB,GAknBvB,IAhnBIowW,EAAW,CAAA,EA2nBf,OAznBAE,EAAAv0Z,QAAA,SAAAs0Z,GAEIA,EAAWn4Y,OAAA8nC,EAAA9nC,OAknBPk4Y,EAAY,CAAA,E,GAKbA,C,IAKP5tI,EAASr3Q,KAAKmlZ,CAAA,EAGX9tI,E,EAhsBgB,C,IAqsBnC,CAAA,WAEI,aAEA3pR,QACKC,OAAO,UAAA,EACPujB,OAAO,kBAGZ,WAEI,OAAO,SAAU4gE,EAAOszU,EAAW78T,GA9mB/B,GAAA,IAAAzW,EAAAh1E,QAAA,CAAAyrF,GAAA,IAAAA,EAAAzrF,OAEI,OAAAg1E,EAqnBJ,IAFA,IAAIulM,EAAW,GAELl0O,EAAI,EAAGA,EAAI2uC,EAAMh1E,OAAQqmC,CAAA,GACnC,CAII,IAHA,IAhnBIr2B,EAAAglE,EAAA3uC,GAinBAqgE,EAhnBI,CAAA,EAknBEjgE,EAhnBE,EAAAA,EAAOglD,EAAKzrF,OAAGymC,CAAA,GAinB3B,CACI,IAAItzC,EAAKs4F,EAAIhlD,GACb,GAAmC,CAAC,EAA/Bz2B,EAAKs4Y,GAAW58W,QAAQv4C,CAAA,EAC7B,CA/mBAuzG,EAAA,CAAA,EACI,K,EAonBHA,GA9mBT6zK,EAAAr3Q,KAAA8M,CAAA,C,CAqnBA,OAAOuqQ,C,EAppBY,C,IA0pB/B,CAAA,WAEI,aAEA3pR,QACKC,OAhnBG,UAAA,EAinBHujB,OAhnBG,cAmnBR,WAEI,OAAO,SAhnBU4gE,EAAAyW,GAmnBb,GAAsB,IAAjBzW,EAAMh1E,QAAgB,CAACyrF,EAExB,OAAOzW,EAGX,GAAoB,IAAfyW,EAAIzrF,OAEL,MAAO,GA3mBX,IAFJ,IAAAu6Q,EAAA,GAEIl0O,EAAA,EAAAA,EAAA2uC,EAAAh1E,OAAAqmC,CAAA,GAinBA,CAII,IAHA,IAAIr2B,EAAOglE,EAAM3uC,GA/mBbqgE,EAAO,CAAA,EAknBDjgE,EAAI,EAAGA,EAAIglD,EAAIzrF,OAAQymC,CAAA,GACjC,CACI,IAAItzC,EAAKs4F,EAAIhlD,GACb,GAAKz2B,EAAK7c,KAAOA,EACjB,CA/mBHuzG,EAAA,CAAA,EACT,K,EAonBaA,GAED6zK,EAASr3Q,KAAK8M,CAAA,C,CA3mB1B,OAAAuqQ,C,EA1Cc,C,IAgqBtB,CAAA,WAEI,aAUA,SAhnBKguI,EAAkBjgV,GAknBnB,OAAO,SAAU38D,GA9mBrB,OAAA28D,EAAAoC,YAAA/+D,CAAA,C,qBAomBA/a,QACKC,OAAO,UAAA,EA/mBfujB,OAAA,YAAAm0Y,CAAA,EACDn0Y,OAAA,kBA8nBI,WA9mBI,OAAI,SAAOmb,GAknBP,OAAOrI,OAAOqI,CAAA,EAAMlyB,QAAQ,YAAa,EAAA,C,EAloBrD,EACI+W,OAAA,UAsoBA,WA9mBI,OAAA,SAASzI,GAknBL,OAASA,EAAcA,EAAMtO,QAAQ,KAAM,EAAA,EAAzB,E,EA1oB1B,EAinBK+W,OAAO,cA8BZ,WAEI,OAAO,SAAUsqT,GA9mBjB,GAAAA,EAonBI,MAAkB,cAAbA,EAAIxmU,KAEEwmU,EAAIzuT,KAAK5S,QAAQ,WAAY,SAAUukS,GAE1C,MAAO,IAAMA,EAAGn2P,YAAA,C,GA7mBjBizR,EAAApgN,OAAAogN,EAAAzuT,I,EAmkBY,C,IAkD/B,CAAA,WAEI,aAEArf,QACKC,OAhnBG,UAAA,EAinBHujB,OAAO,UAGZ,WAEI,OAAO,SAAUzI,GAEb,IAAIw+G,EAAOrzE,KAAKwgF,IAAA,EAAQ,IAAIxgF,KAAKnrC,CAAA,EAMjC,OAhnBIw+G,EAAA,KAknBOl0E,OAAOtqC,CAAA,EAAO68Y,QAAA,EAMfr+R,EAAA,MA9mBCl0E,OAAAtqC,CAAA,EAAAqqC,OAAA,OAAA,EAsnBDm0E,EAAA,OAECl0E,OAAOtqC,CAAA,EAAOqqC,OAAO,MAAA,EAxmB5BC,OAAUtqC,CAAA,EAAAoqM,SAAA,C,EAykBC,C,IA8C3B,CAAA,WACI,aAOA,SAAS0yM,EAAcp4Y,EAAUrB,EAAI05Y,GACjC,MAAO,CACHt3Z,SAAU,IACV+mV,QAAU,SAAUpgV,EAASitJ,GA/mB7B,IAAAnsI,EAunBI,OALKmsI,EAAKnsI,OA/mBVA,EAAW9gB,EAAAq5B,KAAA,EAinBPr5B,EAAQ6gU,MAAA,GA7mBR,SAASvnU,EAAA0G,EAAYitJ,GAknBjBA,EAAKnsI,OA9mBbA,EAAAxnB,EAAA2tV,MAAAh6L,EAAAnsI,IAAA,GAEI,IAAA8vY,EAAOt3Z,EAAA2tV,MAAAh6L,EAAA2jQ,iBAAA,EAknBP35Y,EAAGo2U,KAAKvsU,CAAA,EAAMnhB,KAAK,SAAUmhB,GACzB,IA5mBQ+vY,EA4mBJ/vY,IA/mBG8vY,IAinBC9vY,EAAO6vY,EAAa7vY,CAAA,EAAMxnB,CAAA,GA9mB1Bu3Z,EAAIh4Z,QAAAmH,QAinBJ,4D,EA9mBhBA,EAAA4tC,OAAAijX,CAAA,EAEIv4Y,EAAgB,WAsnBhB,IAAgBy/B,EAAUh4C,EAWlB+wZ,EACAC,EAZQh5W,EALGj3B,EAzmBnBkwY,GA8mB0BjxZ,EALD8wZ,GAzmBF5wZ,KAAA,MAAA,EAinBfgxZ,EAAQl5W,EAAStpB,MAAM,IAAA,EAQvBqiY,GArnBJG,EAAAA,EAAA50Y,OAAA,SAAAk9N,GACI,OAAAA,EAAS9rL,KAAA,EAAQxlD,M,IAonBW,GAAG0mG,MAAM,MAAA,EAAQ,GAC7CoiT,EAA0B,IAAIjsJ,OAAO,IAAMgsJ,CAAA,EAC/CG,EAAQA,EAAM70Y,IAAI,SAAUm9N,GA/mB5B,OAAUA,EACVj0O,QAAAyrZ,EAAA,EAAA,EACIzrZ,QAAS,OAAO,EAAA,C,IAGhB4rZ,EAAWC,KAAWC,UAAAnkQ,EAAAtxG,UAAAsxG,EAAAzuF,KAAAyyV,EAAAliZ,KAAA,IAAA,EAAA,CAAA,CAAA,GAinBV6E,MAAQs9Y,EAAgBt9Y,MACnCtO,QAAQ,yCAA0C,EAAA,EAClDA,QAAQ,SAAU,EAAA,EAClBA,QAAQ,UAAW,EAAA,EACxB0rZ,EAAYpjX,OAAOsjX,EAAgBt9Y,KAAA,EAAO4vD,SAAS,WAAA,C,EA5B5C,GAAI,CAAA,CAAA,E,iDApC/B3qE,QACKC,OAAO,UAAA,EACPM,UAAU,OAAQs3Z,CAAA,C,IAqE3B,CAAA,WAEI,aAEA73Z,QACKC,OAAO,UAAA,EACPsf,SAAS,aAGd,WAGI,IAAIi5Y,EAhnBQ,CAinBRC,wBAhnB+B,CAAA,EAinB/BC,2BAhnB6B,CAAA,EAinB7BC,gCAhnB+B,CAAA,C,EAonBnC32Z,KAAKsS,OASL,SAAgBquJ,GAEZ61P,EAhnBIx4Z,QAAAqhB,OAAA,GAAAm3Y,EAAA71P,CAAA,C,EAsnBR3gK,KAAK6tV,KAAO,WAOR,MALc,CACVlB,UAWJ,SAAmBiqE,GAEf,GAAK54Z,QAhnBOq6C,YAAam+W,EAAUI,EAAA,EAknB/B,MAAO,CAAA,EAGX,OAAOJ,EAAkBI,E,EAjBzBhxH,UA0BJ,SAAmBgxH,EAAYC,GAE3BL,EAhnBiBI,GAAQC,C,IAkjBT,C,IAoEhC,CAAA,WAEI,aAzmBJ,SAAAvkZ,EAAAE,EAAAD,GAknBQC,EAAgCgH,QAAQ,aAAA,C,gEAP5Cxb,QACKC,OAAO,cAAe,EAAA,EACtBqU,OAAOA,CAAA,C,IAShB,CAAA,WACE,aAOA,SAASwkZ,EAAkB13Z,EAAKjB,EAAQgB,EAASI,EAAY6c,EAAIpd,EAAQye,EAAUzM,EAAS0M,EAAY8hC,EAAYzgD,EAAU47D,EA/mBjH4vI,EAAA1qM,EAAA49J,EAAAud,EAAAqvB,EAAA0sN,EAAA5wX,EAAAnpB,EAAAk7U,EAinBcqI,EAASrhW,EAAWD,EAAW4uF,GAExD,IAAI9tF,EAAKC,KAzNT,SAAAg3Z,IACInpU,EAAiB0F,QACjBh0F,EAAA4M,WAAA,gCAAA,EAonBA5M,EAAW4M,WAAW,mCAAA,C,CA1Z1BpM,EAAGid,kBAAoBA,EACvBjd,EAAGm4V,iBAAmBA,EACtBn4V,EAAGk3Z,cAAgB,CAAElvS,GAAM,KAAMF,GAAM,KAAMG,GAAM,KAAMC,GAAM,IAAA,EAC/DloH,EAAGm3Z,YAAc,iCAGjB33Z,EAhnBQ06H,OAAI,CAinBVnhH,OAhnBM,E,EAmnBRvZ,EAhnBWmP,IAAI,0BAAqB,SAAWC,EAAA7F,GAinB7C/I,EAAG04Y,WAhnBY14Y,EAAAm3Z,YAAK,IAAAn3Z,EAAAk3Z,cAAAz3W,EAAAuB,IAAA,E,GAmnBtBhhD,EAAG04Y,WAAa14Y,EAAGm3Z,YACnBn3Z,EAAGo3Z,WAAa,CAAC,CAACt3Z,EAAQga,QAC1B9Z,EAAGq3Z,eAAiB,KACpBr3Z,EAAGi4M,OAASh6M,QAAQmH,QAAQ,MAAA,EAC5BpF,EAAG+mR,QAAU9rG,EAAQyxG,WAAA,EACrB1sR,EAAGs3Z,UAAY,GACft3Z,EAAGg9B,MAAQl9B,EAAQ07I,UAAA,EACnBx7I,EAAG6oQ,UAAYrpQ,EACfQ,EAAGkxW,UAAY,GACflxW,EAAGy/C,WAhnBUA,EAinBbz/C,EAAGu3Z,YAhnBS,KAinBZv3Z,EAAGwpW,YAhnBS,GAinBZxpW,EAAGw3Z,sBAhnBwB,CAAA,EAinB3Bx3Z,EAAGy3Z,gBAhnBS,KAinBZz3Z,EAAG03Z,eAhnBU,KAinBb13Z,EAAG23Z,oBAhnBU,KAinBb33Z,EAAG43Z,mBAAqB,GACxB53Z,EAAG63Z,aAAe/3Z,EAAQwpQ,qBAAA,EAC1BtpQ,EAAG83Z,eAAiB,CAAA,EAEhBh4Z,EAAQimW,mBAAA,GAAwB,CAAC/lW,EAAG63Z,cACtC73Z,EAAGs3Z,UAAU/mZ,KAAK,CA/mBvB3L,MAAA,qBACDk/D,YAAA,mCACIi0V,QAAA,4DAinBInlZ,MAAO,mCACP4yO,MAAO,iB,GAIP1lP,EAAQ8B,cAAc,aAAA,GAAkB9B,EAAQ8B,cAAc,mBAAA,GAChE5B,EAAGs3Z,UAAU/mZ,KAAK,CAhnBpB3L,MAAS,QACTk/D,YAAA,gBACIi0V,QAAI,0EAknBJnlZ,MAjnBI,oBAknBJyyB,SAAUrlC,EAAG63Z,Y,GAIb/3Z,EAAQ8B,cAAc,6BAAA,GACxB5B,EAAGs3Z,UAAU/mZ,KAAK,CAChB3L,MAAO,gBACPk/D,YAAa,wBACbi0V,QAAS,6DACTnlZ,MAAO,sCAhnBPyyB,SAASrlC,EAAA63Z,Y,GAqnBT/3Z,EAjnBQ8B,cAAS,0BAAA,GAAY,CAAA9B,EAAAga,QAAAklL,SAknB/Bh/L,EAAGs3Z,UAjnBO/mZ,KAAA,CAknBR3L,MAAO,eACPk/D,YAjnBU,uBAknBVh6C,KAjnBI,mBAknBJlX,MAAO,2BACPyyB,SAjnBQrlC,EAAA63Z,Y,GAqnBR/3Z,EAjnBQ8B,cAAc,yBAAA,GAknBxB5B,EAAGs3Z,UAAU/mZ,KAAK,CAChB3L,MAAO,cACPk/D,YAjnBQ,sBAknBRh6C,KAAM,mBACNlX,MAjnBI,0BAknBJyyB,SAjnBIrlC,EAAA63Z,Y,GAqnBR73Z,EAAGwjE,UAAY,CACbskD,GAAI,CACFljH,MAAO,UACPk/D,YAAa,kBACb59C,KAAM,KACNmjD,KAAM,KACN0+C,OAAQ,O,EAEVC,GAAI,CACFpjH,MAAO,UACPk/D,YAAa,kBACb59C,KAAM,KACNmjD,KAAM,KACN0+C,OAAQ,O,EAEVE,GAAI,CACFrjH,MAAO,UACPk/D,YAAa,kBACb59C,KAAM,KACNmjD,KAjnBI,KAknBJ0+C,OAAQ,O,EAEVG,GAAI,CACFtjH,MAAO,WACPk/D,YAAa,iBACb59C,KAAM,KACNmjD,KAAM,KACN0+C,OAAQ,O,GAKZ/nH,EAAGmvF,cA2GH,SAAuBC,GACrBzxE,EAjnBWyxE,CAAA,EAAArvC,OAAA,C,EAsgBb//C,EAAGgvW,OA5fN,WACDlvW,EAAA8kW,yBAAA,EACI9kW,EAAAqsI,WAAArsI,EAAA4I,KAAAgjI,QAAA,EAknBE5rI,EAAQosU,QAAA,EAhnBVjtU,EAAAiD,GAAA,yBAAA,C,EAyfAlC,EAAG+7X,eAnfH,SAAAn4T,GAmnBEnkB,EAjnBEuB,IAAA4iB,EAAA19C,IAAA,EAmnBF7mB,EAAI09B,QAjnBEC,MAAAh2B,KAAA,CAknBJtG,OAjnBQ,cAknBRkjE,KAAMA,EAAK19C,KACX1lB,GAAIV,EAAQ4I,KAAKlI,E,EAChB,SAjnBOI,EAAWC,EAAAC,I,GA4evBd,EAAGmuV,2BA6IH,WACEnuV,EAAGi4M,OAAO3qC,YAjnBQ,6CAAA,C,EAoepBttK,EAAGg4Z,yBAmJH,WACExtN,EAAoB2N,aAAA,C,EAnJtBn4M,EAAG+Y,OA4JH,SAAgByU,GAQd,IAPA,IAAI6rP,EAAa,GACfoxE,EAAiBjgJ,EAAoBkgJ,kBAAA,EACrC7tU,EAAWR,EAAGS,MAAA,EAKP63G,EAAI,EAAGA,EAAI81N,EAAep9U,OAAQsnH,CAAA,GAhnB7C81N,EAAA91N,GAAAg2N,QACKtxE,EAAO9oQ,KAAAk6U,EAAA91N,EAAA,EAynBNnnG,IACF6rP,EAjnBSA,EAAM53P,OAAgB,SAACpE,GAknB9B,GAjnBE,CAAA,EAAApf,QAAA+2D,UAAA33C,EAAAzY,KAAA,EAAAmU,OAAA9a,QAAA+2D,UAAAxnC,CAAA,CAAA,EAknBA,MAjnBI,CAAA,C,IA2nBV,OAJA9P,EAAS,WACPb,EAAS7J,QAAQqmQ,CAAA,C,EAChB,GAAA,EA/mBGx8P,EAAUM,O,EAublBnd,EAAGi4Z,kBAkMH,SAjnB0B56Y,GAmnBpBA,EAAKstU,SAGHttU,EAAKyyU,YACP7wV,EAAOiD,GAAGmb,EAAKzK,MAAOyK,EAAKyyU,WAAA,EAE3B7wV,EAjnBMiD,GAAAmb,EAAAzK,KAAA,E,EAwaZ5S,EAAGk4Z,KA8MH,SAAcC,GACZl5Z,EAjnBMiD,GAAAi2Z,CAAA,C,EAmaRn4Z,EAAGulW,WAiNH,SAAoB78V,GAClB4hM,EAAYi7J,WAAW78V,CAAA,C,EAjNzB1I,EAAGo4Z,eAoFH,SAjnBQ1zB,GAknBNrlY,EAAI09B,QAjnBMjjB,QAAI9S,KAAA,CAknBZxG,GAAIkkY,EACJhkY,OAjnBQ,kB,EAknBP,SAjnBOE,EAAAC,EAAAC,GAknBR1B,EAAQyN,SAjnBSC,OAAA,C,IAyhBrB9M,EAAGogW,YAqGH,WACEI,EAAQJ,YAAA,C,EArGVpgW,EAAGq4Z,cA/ZP,WAmnBMlvZ,OAAO0D,SAAStD,KAAOtK,EAAOsK,KAAK,wBAAA,C,EAnNrCvJ,EAAGs4Z,kBAsNH,WACE,MAlnBG,CAAAt4Z,EAAO63Z,cAAa,CAAA,CAAA73Z,EAAAq3Z,gBAAA,CAAA,CAAAr3Z,EAAA+mR,SAAA/mR,EAAAq3Z,iBAAAr3Z,EAAA+mR,O,EA4ZzB/mR,EAAG65B,QAyNH,WACEhtB,SAASC,OAAA,C,EAzNX9M,EAAGu4Z,SAtZH,WACIz4Z,EAAO+lW,WAAA,IACP7lW,EAAAg9B,MAAAl9B,EAAA07I,UAAA,GAqnBF,OAAOx7I,EAAGg9B,K,EAhOZh9B,EAAGw4Z,qBA/YH,WACA,IAAAz/Y,EAAA/Y,EAAAwpW,YAAA1wT,YAAA,EAAAw5D,UAAA,KAAA,EAAA5nG,QAAA,mBAAA,EAAA,EAmnBE,OAlnBE1K,EAAOkxW,UAAUzvV,OAAA,SAAA3H,GACjB,MAAA,CAAA,IAAAA,EAAAwD,KAAAw7B,YAAA,EAAAw5D,UAAA,KAAA,EAAA5nG,QAAA,mBAAA,EAAA,EAAAquC,QAAAhgC,CAAA,C,IA6YJ/Y,EAAGy4Z,cAsDH,WACE,IAAI57Y,EAjnBSR,EAAAS,MAAA,EA+nBb,OAbA9c,EAAGwpW,YAAcxpW,EAAGwpW,YAAYxsV,UAAU,EAAGhd,EAAGid,iBAAA,EAChD5d,EAAI09B,QAAQjjB,QAAQ9Y,IAClB,CACE+X,OAAQ/Y,EAAGwpW,W,EA/mBjB,SAAApjW,GACIA,EAAOA,QACPyW,EAAA7J,QAAA5M,EAAAA,OAAA,EAEIyW,EAAA7J,QAAA,EAAA,C,GAIA6J,EAAKM,O,EA6iBbnd,EAAG04Z,oBAuEH,SAA6B1/Y,GAC3B,OAAOA,EAAMsE,I,EAvEftd,EAAG24Z,qBAuOH,WACM34Z,EAAG83Z,gBAjnBTn6Y,EAAS,aAAA,EAAA+gB,MAAA,EACT8hU,EAAAN,WAAA,GAEIjhW,EAAAiD,GAAA,2BAAA,CAmnBE8Z,OAlnBE,kB,IAsYRhc,EAAG44Z,iBAjYH,WACA,MAAA94Z,CAAAA,EAAAsiW,gBAAA,GAEItiW,EAAA4I,KAAAqoW,e,EA+XJ/wW,EAAG64Z,aAsPH,SAlnBYpyZ,GAmnBL3G,EAAQsiW,gBAAA,GAEb/iW,EAAI09B,QAlnBE8oO,UAAA7kQ,IAAA,CAmnBJoiB,MAAOtjB,EAlnBQ4I,KAAIsoW,Y,EAmnBlB,SAlnBO9kW,EAAArL,EAAAC,GAmnBR3B,EAAUoC,KAlnBE,CAmnBVhD,WAAY,oCACZK,aAAc,KACdC,YAlnBa,uFAmnBbsG,OAAQlH,QAAQmH,QAAQlG,EAAUmG,KAAK,MAAA,CAAA,EACvCuB,YAAaH,EACb5B,oBAAqB,CAAA,EACrBK,cAAe,CAAA,EAjnBxB2B,OAAA,CACDm9L,gBAAA93L,EACI+3L,gBAAAnjM,C,IAEAiE,KAAA,SAAAnE,GACKd,EAAO4I,KAAAqoW,gBAAAnwW,EAAAqkM,c,MA0WZjlM,EAAGi3Z,eAjnBYA,EAknBfj3Z,EAAG84Z,yBAoRH,WACE94Z,EAAG6oQ,UAlnBQmmJ,6BAAkB,CAAAhvZ,EAAA6oQ,UAAAmmJ,6BAmnB7BlhU,EAlnBM6gR,WAAA7gR,EAAAw9Q,cAAAC,QAAAz9Q,EAAAw9Q,cAAAE,GAAA,C,EA/QRnsW,EAAA05Z,QAAAhyI,QAAA/lR,IAAA,SAAAJ,GAknBIZ,EAAGq3Z,eAAiBz2Z,EAASmmR,O,GA9mB5BjnR,EAAO4I,OAmnBR+2C,EAAWuB,IAAIlhD,EAAQ4I,KAAKk7D,KAAO5jE,EAAGwjE,UAAU1jE,EAAQ4I,KAAKk7D,MAAM19C,KAAO,IAAA,EA/mB9EpmB,EAAS4I,KAAAkoW,UACT5wW,EAAAw3Z,sBAAA,CAAA,EACIpxX,EAAOO,IAAA,CACPC,MAAA,aACI/lC,SAAK,SAAM+N,GACX9O,EAAA4I,KAAAkoW,WACI5wW,EAAA03Z,eAAA,EAknBAh6Y,EAAS,WACP1d,EAAG23Z,oBAAA,C,EAhnBL,GAAA,E,IAqnBNvxX,EAjnBMO,IAAI,CAknBRC,MAjnBI,aAknBJ/lC,SAjnBQ,SAAI+N,GAknBVqoZ,EAAA,C,KAGKn3Z,EAjnBK4I,KAAKuoW,yBAknBnBjxW,EAAGw3Z,sBAjnBW,CAAA,EAknBdn4Z,EAAI09B,QAAQjjB,QAjnBM9Y,IAAA,SAAYJ,EAAAC,EAAAC,GAknB5Bd,EAAGkxW,UAAYtwW,EAjnBCwF,O,KAsnBlBtG,EAAQga,UACV9Z,EAAG43Z,mBAAqB93Z,EAAQga,QAAQwD,KAAO,IAAMxd,EAAQga,QAAQtZ,IAGvER,EAAG83Z,eAjnBW,CAAAh4Z,EAAcw4D,iBAAAx4D,EAAAkqE,WAAA,kBAAA,C,mUA8ahC/rE,QACGC,OAhnBO,aAAA,EAinBPK,WAhnBO,oBAAAw4Z,CAAA,C,IAgiCZ,CAAA,WAEI,aASA,SAASxkZ,EAlnBGE,EAA4BC,GAqnBpCD,EAAgCgH,QAAQ,iBAAA,C,+DAV5Cxb,QACKC,OAAO,kBAAmB,CACvB,uB,EAEHqU,OAAOA,CAAA,C,IAUhB,CAAA,WACE,aA3mBD,SAAAymZ,EAAYhsJ,EACTrvP,EAmnB4Bvf,EACAgB,EAlnB5Bse,EACY/X,EACW1G,EAonBKO,EACA04V,EAlnBLC,EACZl7U,EACOnd,GAonBlB,IAAIE,EAnnBIC,KAqnBR7B,EAAO+5V,iBAAmBA,EAC1B/5V,EAAOa,OAnnBSA,EAsnBhBe,EAAGid,kBAAoBA,EAGvBjd,EAAGk7C,KAAO,IAAIiJ,KACdnkD,EAAGy5X,eAnnBiBvhC,EAonBpBl4V,EAAGiyF,SAAW,CACZijO,OAAQ,CAAA,EACR+jG,MAAO,CAAA,EACPC,MAAO,CAAA,C,EAETl5Z,EAAGm5Z,MAAQ,GACXn5Z,EAAGo5Z,aAAe,GAClBp5Z,EAAGq5Z,YAAc,GACjBr5Z,EAAGkvG,cAAgB,EACnBlvG,EAAGs5Z,uBAAyB,CAAA,EAG5Bt5Z,EAAGu5Z,gBAiCH,WACE57Y,EAAW,aAAA,EAAe+gB,MAAA,C,EAjC5B1+B,EAAG00H,OAaH,SAAgBx5E,GACd,OAAO,IAAIiJ,KAAKjJ,CAAA,C,EAblBl7C,EAAGksC,MAgBH,WACElsC,EAAGy5X,eAAevtV,MAAMjuC,QAAQye,KAAK1c,EAAG6C,KAAA,CAAA,EACxC7C,EAAG6C,MAAQ,I,EAjBb7C,EAAGu4V,MAoBH,WACEv4V,EAAGy5X,eAAelhC,MAAMt6V,QAnnBGye,KAAQ1c,EAAA6C,KAAA,CAAA,EAonBnC7C,EAAG6C,MAAQ,I,EArBb7C,EAAGw6F,OAwBH,WACEx6F,EAAGy5X,eAnnBej/R,OAAAv8F,QAAAye,KAAgB1c,EAAA6C,KAAA,CAAA,EAonBlC7C,EAAG6C,MAAQ,I,EApBX7C,EAAGs5Z,uBAAyB,CAACx5Z,EAAQw4D,iBAAmBx4D,EAAQkqE,WAAW,kCAAA,C,gKAlD/E/rE,QACGC,OAAO,iBAAA,EACPK,WAAW,uBAAwBy6Z,CAAA,C,IA6ExC,CAAA,WAjnBA,aAqnBI/6Z,QAlnBAC,OAAA,iBAAA,EAAA,EACKqU,OAsnBL,YAtnBY,C,IA4nBhB,CAAA,WACE,aAOA,SAASinZ,EAA2Bp7Z,EAAQosM,GAE1C,IAAIxqM,EAAKC,KAGTD,EAAGi4M,OAASh6M,QAAQmH,QAAQ,MAAA,EAC5BpF,EAAGquV,OAnnBC,CAAA,EAonBJruV,EAAGy5Z,gBAnnBC,CAonBFhsE,gBAnnBM,CAAA,C,EAsnBRztV,EAAG05Z,QAAU,aAGb15Z,EAAGg4Z,yBAOH,WACEh4Z,EAAGquV,OAAS,CAACruV,EAAGquV,M,EAIlBjwV,EAAOuQ,IAAI,sBAAuB,WAChC3O,EAAGi4M,OAAO7vI,YAAY,6CAAA,C,GAOxBoiI,EAAoBq9D,SAAS,QAAS,CACpCjjQ,MAAO,mBACP2uD,OAAQ,EACR3gD,MAAO,sBACPmX,QAAS,6D,GAQXygL,EAnnBYq9D,SAAA,YAAkB,CAonB5BjjQ,MAAO,8BACPklB,KAAM,iBACNypC,OAAQ,EACRiyL,MAAO,W,GAhnBbh7C,EAAAq9D,SAAA,6BAAA,CACIjjQ,MAAA,sBAonBEgO,MAAO,yC,GAIT43L,EApnBYq9D,SAAA,gCAAA,CAqnBVjjQ,MAAO,yBACPgO,MAAO,4C,GAIT43L,EAAoBq9D,SAAS,gCAAiC,CAC5DjjQ,MAAO,yBACPgO,MAAO,0C,GAGT43L,EAAoBq9D,SAAS,mBAAoB,CAC/CtsB,UAAW,kBApnBf32O,MAAA,UACGgO,MAAO,sB,GAQR43L,EAASq9D,SAAA,WAAA,CAsnBPjjQ,MAAO,sBAnnBT2uD,OAAG,EACH3gD,MAAG,eACHkX,KAAG,uBACH07N,MAAG,U,GAOHh7C,EAAeq9D,SAAA,YAA2B,CACxCjjQ,MAAG,8BAsnBHklB,KAAM,8BACN07N,MAAO,W,GAlnBTh7C,EAAoBq9D,SAAA,wBAAA,CACpBtsB,UAAY,yBACZ32O,MAAG,cACHgO,MAAG,2B,GAGH43L,EAAeq9D,SAAA,qBAAA,CACftsB,UAAG,sBACH32O,MAAG,WACHgO,MAAG,wB,GAGH43L,EAAoBq9D,SAAA,qBAAA,CACpBtsB,UAAG,sBACH32O,MAAG,WACHgO,MAAG,wB,GA8nBH43L,EArnBWq9D,SAAA,mBAAA,CAsnBTtsB,UAAW,oBACX32O,MAAO,SACPgO,MAAO,sB,GAGT43L,EArnBWq9D,SAAA,yBAAA,CAsnBTtsB,UArnBE,0BAsnBF32O,MArnBE,eAsnBFgO,MArnBE,4B,GAwnBJ43L,EAAoBq9D,SAAS,sBAAuB,CAClDtsB,UAAW,uBApnBb32O,MAAI,YACFgO,MAAG,yB,GAwnBL43L,EArnBaq9D,SAAA,sBAAA,CAsnBXtsB,UArnBS,uBAsnBT32O,MArnBE,YAsnBFgO,MAAO,yB,GAlnBT43L,EAAYq9D,SAAc,wBAAA,CACxBtsB,UAAG,yBAsnBH32O,MArnBE,cAsnBFgO,MArnBE,2B,GA8nBJ43L,EArnBWq9D,SAAA,uBAAA,CAsnBTtsB,UArnBE,uBAsnBF32O,MArnBE,aAsnBFgO,MArnBE,0B,GAkoBJ43L,EArnBMq9D,SAAA,cAAA,CAsnBJjjQ,MArnBE,gCAunBF2uD,OArnBQ,EAsnBRzpC,KArnBE,eAsnBF07N,MArnBE,a,GAwnBJh7C,EArnBWq9D,SAAA,0BAAA,CAsnBTtsB,UArnBE,yBAsnBF32O,MArnBE,cAsnBFgO,MArnBE,6B,GAwnBJ43L,EArnBMq9D,SAAA,wBAAA,CAsnBJtsB,UArnBS,uBAsnBT32O,MArnBE,YAsnBFgO,MArnBE,2B,GAwnBJ43L,EAAoBq9D,SAAS,0BAA2B,CACtDtsB,UAAW,yBACX32O,MAAO,cACPgO,MAAO,6B,GA9mBT43L,EAAGq9D,SAAoB,YAAA,CACvBjjQ,MAAG,8BAEH2uD,OAAG,EACHxpC,QAAG,2DACHy7N,MAAG,W,GAGHh7C,EAAcq9D,SAAA,kBAAA,CACdtsB,UAAG,mBACH32O,MAAG,QACHgO,MAAG,qB,GAGH43L,EAAkBq9D,SAAA,uBAAA,CAClBtsB,UAAG,wBACH32O,MAAG,aAsnBDgO,MAAO,0B,GAGT43L,EAAoBq9D,SAAS,0BAA2B,CApnBxDtsB,UAAS,2BACP32O,MAAI,gBAsnBJgO,MArnBK,6B,GA4nBP43L,EArnBgBq9D,SAAK,OAAU,CAsnB7BjjQ,MArnBO,2BAunBP2uD,OArnBM,EAsnBNxpC,QArnBM,+DAsnBNy7N,MAAO,M,GAGTh7C,EArnBiBq9D,SAAA,YAAA,CAsnBftsB,UAAW,kBACX32O,MAAO,OACPgO,MAAO,e,GAGT43L,EArnBeq9D,SAAA,iBAAA,CAsnBbtsB,UArnBM,uBAsnBN32O,MAAO,YACPgO,MAAO,oB,GAST43L,EAAoBq9D,SAAS,yBAA0B,CApnBrDtsB,UAAI,+BAsnBJ32O,MArnBK,oBAsnBLgO,MAAO,4B,GAGT43L,EAAoBq9D,SAAS,iBAAkB,CAC7CtsB,UAAW,uBApnBb32O,MAAS,kBACPgO,MAAI,oB,GAwnBN43L,EArnBIq9D,SAAA,aAAA,CAsnBFtsB,UArnBI,mBAsnBJ32O,MAAO,QACPgO,MArnBE,gB,GAwnBJ43L,EArnBaq9D,SAAA,kBAAA,CAsnBXtsB,UArnBM,wBAsnBN32O,MAAO,aACPgO,MAAO,qB,GAGT43L,EAAoBq9D,SAAS,kBAAmB,CAC9CtsB,UAAW,wBApnBb32O,MAAS,aACPgO,MAAO,qB,GA6nBT43L,EArnBcq9D,SAAU,YAAkB,CAsnBxCjjQ,MArnBE,8BAunBF2uD,OAAQ,EACRzpC,KAAM,cACN07N,MAAO,W,GAGTh7C,EAAoBq9D,SAAS,kBAAmB,CAC9CtsB,UAAW,sBApnBb32O,MAAS,WACPgO,MAAA,qB,GAGF43L,EAASq9D,SAAc,mBAAA,CACrBtsB,UAAQ,oBAsnBR32O,MAAO,SACPgO,MAAO,sB,GAGT43L,EAAoBq9D,SAAS,oBAAqB,CApnBlDtsB,UAAS,qBACP32O,MAAA,UACAgO,MAAA,uB,GA4nBF43L,EAAoBq9D,SAAS,aAAc,CApnB3CjjQ,MAAS,+BAEP2uD,OAAA,EAsnBAxpC,QAAS,uEApnBTy7N,MAAI,Y,GAwnBNh7C,EArnBgBq9D,SAAK,sBAAA,CAsnBnBtsB,UArnBG,sBAsnBH32O,MAAO,WACPgO,MAAO,yB,GAGT43L,EAAoBq9D,SAAS,uBAAwB,CACnDtsB,UAAW,uBACX32O,MAAO,WApnBTgO,MAAS,0B,GAwnBT43L,EAAoBq9D,SAAS,oBAAqB,CAChDtsB,UAAW,oBACX32O,MAAO,WACPgO,MAAO,uB,GAGT43L,EAAoBq9D,SAAS,sBAAuB,CAClDtsB,UAAW,sBACX32O,MAAO,WACPgO,MAAO,yB,GAMR43L,EArnBkBq9D,SAAA,OAAA,CAsnBjBtsB,UArnBE,kBAsnBF32O,MArnBE,OAunBF2uD,OAAQ,EACR3gD,MAAO,4BACP6M,WAAY,uBApnBZsK,QAAS,4DAsnBTy7N,MArnBM,Y,8CA8PVvnP,QACGC,OAAO,gBAAA,EACPK,WAnnBQ,6BAASi7Z,CAAA,C,IA++BtB,CAAA,WACE,aAOA,SAASG,EAAqBv7Z,EAAQ0B,EAAS0qM,EAAqBjrM,GAElE,IAAIS,EAAKC,KAGTD,EAAGi4M,OArnBEh6M,QAAAmH,QAAA,MAAA,EAsnBLpF,EAAGquV,OAAS,CAAA,EACZruV,EArnBEy5Z,gBAAgB,CAsnBhBhsE,gBAAiB,CAAA,C,EAInBztV,EAAGg4Z,yBAOH,WACEh4Z,EArnBEquV,OAAS,CAAAruV,EAAAquV,M,EAynBbjwV,EAAOuQ,IAAI,sBAAuB,WAChC3O,EAAGi4M,OAAO7vI,YAAY,6CAAA,C,GAejBtoE,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,qBAAA,GAA2BlqE,EAAQga,QAAQk8W,+BApnBhGxrL,EAASq9D,SAAoB,QAAA,CAC3BjjQ,MAAW,mBAsnBP2uD,OAAQ,EACR3gD,MAAO,sBApnBb6M,WAAS,sBACPsK,QAAS,6D,GA2nBJjqB,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkmW,cAAc,CACpD,uBApnBF,mCAsnBE,sBACA,0CApnBJ,6CACE,uB,GACOlmW,EAAGga,QAAUk8W,+BAClBxrL,EAAoBq9D,SAAA,YAAc,CAsnBhCjjQ,MAAO,8BACP6a,WAAY,gBACZqK,KAAM,iBApnBZypC,OAAS,EACHiyL,MAAG,W,GAwnBF1lP,EArnBEw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,sBAAA,GAAAlqE,EAAAga,QAAAk8W,+BACLxrL,EAAUq9D,SAAA,mBAA4B,CACpCjjQ,MAAA,oBAsnBAgO,MAAO,uBACP6M,WAAY,sB,GAlnBlB3f,EAASw4D,iBAAmBx4D,CAAAA,EAAAkqE,WAAA,kCAAA,GAAAlqE,EAAAga,QAAAk8W,+BAC1BxrL,EAAaq9D,SAAA,sBAA0B,CAsnBnCjjQ,MAAO,yBApnBXgO,MAAO,mCAsnBH6M,WAAY,kC,GAlnBX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAAkqE,WAAA,qBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAsnB9BxrL,EAAoBq9D,SAAS,kBAAmB,CApnB9CjjQ,MAAA,4BACFgO,MAAO,sBACN6M,WAAS,sBACVm6Y,gBAAe,uB,GAGb95Z,EAAAw4D,iBAAax4D,CAAAA,EAAAkqE,WAAA,wBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAsnBfxrL,EArnBkBq9D,SAAQ,qBAAe,CACvCjjQ,MAAA,sBACAgO,MAAA,yBACA6M,WAAA,yBACAm6Y,gBAAQ,0B,GAwnBP95Z,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,yCAAA,GAA+ClqE,EAAQga,QAAQk8W,+BAChHxrL,EArnBiBq9D,SAAU,6BAAA,CACzBjjQ,MAAA,sBAsnBAgO,MAAO,0CACP6M,WAAY,yC,GAlnBlB3f,EAASw4D,iBAAiBx4D,CAAAA,EAAAkqE,WAAA,4CAAA,GAAAlqE,EAAAga,QAAAk8W,+BACxBxrL,EAAmBq9D,SAAS,gCAAA,CAC1BjjQ,MAAA,yBAsnBEgO,MArnBG,6CACL6M,WAAW,4C,GAwnBR3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,sBAAA,GAA4BlqE,EAAQga,QAAQk8W,+BApnBjGxrL,EAASq9D,SAAA,mBAA2B,CAC/BtsB,UAAU,kBACb32O,MAAA,UAsnBIgO,MAAO,uBACP6M,WAAY,sB,GA/mBlB3f,EAAAw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,cAAA,GAAAlqE,EAAAga,QAAAk8W,+BAsnBIxrL,EAAoBq9D,SAAS,WAAY,CACvCjjQ,MAAO,sBApnBR2uD,OAAO,EAunBN9zC,WAtnBE,eAunBF7M,MAAO,eArnBRkX,KAAO,uBAunBN07N,MAAO,U,GAMN1lP,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkmW,cAAc,CACpD,4BACA,yBArnBP,yBACC,gCAunBM,4BACA,kC,GAtnBNlmW,EAAAga,QAAAk8W,+BACGxrL,EAAOq9D,SAAA,UAAA,CACPjjQ,MAAW,qBAwnBN6a,WAAY,gBACZqK,KAAM,wBAtnBd07N,MAAS,S,GA0nBA1lP,EAAQw4D,iBAvnBax4D,CAAAA,EAAAkqE,WAAA,2BAAA,GAAAlqE,EAAAga,QAAAk8W,+BAwnBxBxrL,EAAoBq9D,SAvnBI,sBAAA,CAwnBtBtsB,UAAW,yBACX32O,MAAO,cACPgO,MAAO,4BACP6M,WAAY,2B,GAGX3f,EAAQw4D,iBAvnBax4D,CAAAA,EAASkqE,WAAA,wBAAA,GAAAlqE,EAAAga,QAAAk8W,+BACjCxrL,EAAKq9D,SAAA,mBAAA,CAwnBHtsB,UAAW,sBAtnBjB32O,MAAO,WACPgO,MAAO,yBAwnBD6M,WAAY,wB,GAGX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,wBAAA,GAA8BlqE,EAAQga,QAAQk8W,+BAC/FxrL,EAAoBq9D,SAAS,mBAAoB,CAtnBlDtsB,UAAW,sBACX32O,MAAA,WACAgO,MAAA,yBACD6M,WAAQ,wB,GA0nBH3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,+BAAA,GAAqClqE,EAAQga,QAAQk8W,+BAtnBvGxrL,EAAQq9D,SAAA,0BAAA,CACRtsB,UAAA,6BACA32O,MAAA,kBACAgO,MAAA,gCACA6M,WAAA,+B,GAGA3f,EAAAw4D,iBAAkBx4D,CAAAA,EAAAkqE,WAAA,2BAAA,GAAAlqE,EAAAga,QAAAk8W,+BAClBxrL,EAASq9D,SAAA,oBAAA,CACTtsB,UAAQ,uBACR32O,MAAQ,YACRgO,MAAS,4BAwnBN6M,WAAY,2B,GAGX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,iCAAA,GAAuClqE,EAAQga,QAAQk8W,+BAtnB5GxrL,EAAgBq9D,SAAA,4BAAA,CACXtsB,UAAA,+BAwnBC32O,MAAO,YACPgO,MAAO,kCACP6M,WAAY,kCAtnBlBm6Y,gBAAsB,uB,GAMjB95Z,EAAQw4D,iBAAAx4D,CAAAA,EAAAkmW,cAAA,CAwnBT,2BACA,uBAtnBJ,qBACE,6BACA,8BAwnBE,0BACA,0BAtnBJ,4BACE,yB,GACGlmW,EAAQga,QAAAk8W,+BAwnBTxrL,EAAoBq9D,SAAS,YAAa,CACxCjjQ,MAAO,8BAtnBb6a,WAAS,gBACPqK,KAAA,8BAwnBI07N,MAAO,W,GAGN1lP,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,0BAAA,GAAgClqE,EAAQga,QAAQk8W,+BAtnBxGxrL,EAAAq9D,SAAA,uBAAA,CACDtsB,UAAA,uBACI32O,MAAA,aAwnBMgO,MAAO,2BAtnBb6M,WAAA,2BACKm6Y,gBAAO,qB,GA0nBL95Z,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,sBAAA,GAA4BlqE,EAAQga,QAAQk8W,+BAtnBjGxrL,EAASq9D,SAAA,mBAAA,CACTtsB,UAAA,oBAwnBM32O,MAAO,SACPgO,MAAO,uBACP6M,WAAY,sB,GApnBpB3f,EAAAw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,oBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAwnBMxrL,EAAoBq9D,SAAS,iBAAkB,CAC7CtsB,UAAW,kBAvnBnB32O,MAAA,OACGgO,MAAO,qBACP6M,WAAW,oB,GAGL3f,EAAAw4D,iBAA2Bx4D,CAAAA,EAAQkqE,WAAA,4BAAA,GAAqBlqE,EAAAga,QAAAk8W,+BAynB3DxrL,EAAoBq9D,SAAS,yBAA0B,CAvnBvDtsB,UAAK,0BAynBH32O,MAAO,eACPgO,MAAO,6BAvnBV6M,WAAS,4B,GAGV3f,EAAAw4D,iBAAiBx4D,CAAAA,EAAAkqE,WAAA,6BAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBfxrL,EAAoBq9D,SAAS,wBAAyB,CACpDtsB,UAAW,yBAvnBd32O,MAAU,cAynBPgO,MAAO,8BACP6M,WAAY,6B,GAGX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,yBAAA,GAA+BlqE,EAAQga,QAAQk8W,+BAChGxrL,EAAoBq9D,SAAS,sBAAuB,CAClDtsB,UAAW,uBACX32O,MAAO,YACPgO,MAAO,0BAvnBb6M,WAAS,yB,GA2nBF3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,yBAAA,GAA+BlqE,EAAQga,QAAQk8W,+BAChGxrL,EAAoBq9D,SAAS,sBAAuB,CAvnBxDtsB,UAAW,uBACN32O,MAAO,YAynBNgO,MAAO,0BACP6M,WAAY,yB,GAGX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,2BAAA,GAAiClqE,EAAQga,QAAQk8W,+BAClGxrL,EAAoBq9D,SAAS,wBAAyB,CAvnB1DtsB,UAAA,yBACE32O,MAAO,cACPgO,MAAQ,4BACR6M,WAAO,2B,GA2nBF3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,+BAAA,GAAqClqE,EAAQga,QAAQk8W,+BACtGxrL,EAAoBq9D,SAAS,6BAA8B,CACzDtsB,UAAW,6BACX32O,MAAO,kBACPgO,MAAO,gCACP6M,WAAY,wB,GAMZ3f,EAAQga,QAAQqpN,0BAClB34B,EAAoBq9D,SAAS,WAAY,CAvnB7CjjQ,MAAA,6BAEE2uD,OAAO,EAynBH9zC,WAAY,eACZsK,QAAS,gFACTy7N,MAAO,U,GAtnBJ1lP,EAAAw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,4BAAA,GAAAlqE,EAAAga,QAAAk8W,+BACPxrL,EAAOq9D,SAAA,yBAAA,CAynBDtsB,UAAW,2BACX32O,MAAO,gBACPgO,MAAO,6BAvnBf6M,WAAoB,4B,GA2nBX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,sBAAA,GAA4BlqE,EAAQga,QAAQk8W,+BAC7FxrL,EAAoBq9D,SAAS,mBAAoB,CAvnBvDtsB,UAAA,qBACE32O,MAAW,UACXgO,MAAO,uBACP6M,WAAO,sB,GA2nBL+qL,EAAoBq9D,SAAS,uBAAwB,CACnDtsB,UAAW,yBACX32O,MAAO,cACPgO,MAAO,2BACPyyB,SAAU,CAAA,C,GAGZmlK,EAAoBq9D,SAAS,kBAAmB,CAvnBlDtsB,UAAQ,oBACR32O,MAAO,SACPgO,MAAM,sBACNyyB,SAAO,CAAA,C,IAOTvlC,EAAAw4D,iBAA6Bx4D,CAAAA,EAAakmW,cAAA,CACxC,yBACA,sBACA,2BAynBE,+B,GACKlmW,EAAQga,QAAQk8W,+BAvnBzBxrL,EAAoBq9D,SAAS,YAAA,CAC3BjjQ,MAAW,8BAEX2uD,OAAO,EAynBH9zC,WAAY,gBACZsK,QAAS,2DAvnBfy7N,MAAA,W,GAGE1lP,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,wBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,qBAAsB,CACjDtsB,UAAW,sBAvnBjB32O,MAAA,WACEgO,MAAW,yBACX6M,WAAO,wB,GA2nBF3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,qBAAA,GAA2BlqE,EAAQga,QAAQk8W,+BAC5FxrL,EAAoBq9D,SAAS,kBAAmB,CAC9CtsB,UAAW,mBACX32O,MAAO,QACPgO,MAAO,sBACP6M,WAAY,sBACZm6Y,gBAAiB,W,GArnBrB95Z,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,0BAAA,GAAAlqE,EAAAga,QAAAk8W,+BACPxrL,EAAOq9D,SAAA,uBAAA,CAynBHtsB,UAAW,wBACX32O,MAAO,aAvnBbgO,MAAA,2BACE6M,WAAW,0B,GA2nBN3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,8BAAA,GAAoClqE,EAAQga,QAAQk8W,+BACrGxrL,EAAoBq9D,SAAS,2BAA4B,CAvnB7DtsB,UAAA,4BACE32O,MAAW,iBACXgO,MAAO,+BACP6M,WAAO,8B,GAMP3f,EAAOw4D,iBAAAx4D,CAAAA,EAAAkmW,cAAA,CAynBL,gBACA,qBAvnBJ,6BACE,qBACA,iBACA,sBAynBE,sB,GACKlmW,EAAQga,QAAQk8W,+BACrBxrL,EAAoBq9D,SAAS,OAAQ,CACnCjjQ,MAAO,2BAEP2uD,OAAQ,EACR9zC,WAAY,WACZsK,QAAS,+DAvnBfy7N,MAAA,M,GAGE1lP,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,eAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,YAAa,CACxCtsB,UAAW,kBACX32O,MAAO,OACPgO,MAAO,gBACP6M,WAAY,e,GAGX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,oBAAA,GAA0BlqE,EAAQga,QAAQk8W,+BAC3FxrL,EAAoBq9D,SAAS,iBAAkB,CAC7CtsB,UAAW,uBACX32O,MAAO,YACPgO,MAAO,qBAvnBb6M,WAAA,oB,GAGE3f,EAAQw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,4BAAA,GAAAlqE,EAAAga,QAAAk8W,+BACRxrL,EAAMq9D,SAAA,yBAAA,CACNtsB,UAAO,+BAynBH32O,MAAO,oBACPgO,MAAO,6BAvnBb6M,WAAA,4B,GAGE3f,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,oBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,iBAAkB,CAC7CtsB,UAAW,uBAvnBjB32O,MAAA,kBACEgO,MAAW,qBACX6M,WAAO,oB,GA2nBF3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,gBAAA,GAAsBlqE,EAAQga,QAAQk8W,+BAvnB3FxrL,EAAoBq9D,SAAS,aAAA,CAC3BtsB,UAAW,mBACX32O,MAAO,QACPgO,MAAO,iBAynBH6M,WAAY,gB,GAGX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,qBAAA,GAA2BlqE,EAAQga,QAAQk8W,+BAC5FxrL,EAAoBq9D,SAAS,kBAAmB,CAC9CtsB,UAAW,wBAvnBjB32O,MAAA,aACEgO,MAAO,sBAynBH6M,WAAY,qB,GArnBhB3f,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,qBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,kBAAmB,CAC9CtsB,UAAW,wBAvnBjB32O,MAAA,aACEgO,MAAW,sBACX6M,WAAO,qB,GAMP3f,EAAOw4D,iBAAAx4D,CAAAA,EAAAkmW,cAAA,CACP,sBAynBE,uBACA,wBAvnBJ,4B,GACElmW,EAAWga,QAAAk8W,+BACXxrL,EAAOq9D,SAAA,YAAA,CACPjjQ,MAAO,8BA0nBH2uD,OAAQ,EACR9zC,WAAY,gBACZqK,KAAM,cACN07N,MAAO,W,GArnBX1lP,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,qBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,kBAAmB,CAvnBlDtsB,UAAQ,sBACR32O,MAAS,WACTgO,MAAO,sBAynBH6M,WAAY,qB,GArnBhB3f,EAAWw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,sBAAA,GAAAlqE,EAAAga,QAAAk8W,+BACXxrL,EAAOq9D,SAAA,mBAAA,CACPtsB,UAAO,oBAynBH32O,MAAO,SACPgO,MAAO,uBAvnBb6M,WAAA,sB,GAGE3f,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,uBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,oBAAqB,CAChDtsB,UAAW,qBACX32O,MAAO,UACPgO,MAAO,wBACP6M,WAAY,uB,GApnBlB3f,EAAAw4D,iBAA6Bx4D,CAAAA,EAAAkqE,WAAA,2BAAA,GAA0BlqE,EAAAga,QAAAk8W,+BACrDxrL,EAAWq9D,SAAA,wBAAA,CACXtsB,UAAO,yBACP32O,MAAO,YAynBHgO,MAAO,4BACP6M,WAAY,2B,GAMX3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkmW,cAAc,CAvnBxD,0BACE,2BACA,wBACA,0BAynBE,uB,GACKlmW,EAAQga,QAAQk8W,+BAvnBzBxrL,EAAoBq9D,SAAS,aAAA,CAC3BjjQ,MAAW,+BAEX2uD,OAAO,EAynBH9zC,WAAY,iBACZsK,QAAS,uEAvnBfy7N,MAAA,Y,GAGE1lP,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,yBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAynBLxrL,EAAoBq9D,SAAS,sBAAuB,CAClDtsB,UAAW,sBACX32O,MAAO,WACPgO,MAAO,0BACP6M,WAAY,yB,GArnBlB3f,EAAAw4D,iBAA6Bx4D,CAAAA,EAAakqE,WAAA,0BAAA,GAAAlqE,EAAAga,QAAAk8W,+BACxCxrL,EAAOq9D,SAAA,uBAAA,CAynBHtsB,UAAW,uBAvnBf32O,MAAQ,WACRgO,MAAM,2BACN6M,WAAO,0B,GAGT3f,EAAAw4D,iBAA6Bx4D,CAAAA,EAAAkqE,WAAmB,uBAAA,GAAAlqE,EAAAga,QAAAk8W,+BAC9CxrL,EAAWq9D,SAAA,oBAAA,CACXtsB,UAAO,oBACP32O,MAAO,WAynBHgO,MAAO,wBACP6M,WAAY,uB,GArnBhB3f,EAAOw4D,iBAAAx4D,CAAAA,EAAAkqE,WAAA,yBAAA,GAAAlqE,EAAAga,QAAAk8W,+BACPxrL,EAAOq9D,SAAA,sBAAA,CAynBHtsB,UAAW,sBACX32O,MAAO,WAvnBbgO,MAAA,0BACE6M,WAAW,yB,GA4nBN3f,EAAQw4D,iBAAmBx4D,CAAAA,EAAQkqE,WAAW,2BAAA,GAAiClqE,EAAQga,QAAQk8W,+BAClGxrL,EAAoBq9D,SAAS,mBAAoB,CAC/CtsB,UAAW,kBACX32O,MAAO,OACP2uD,OAAQ,EAvnBd3gD,MAAA,4BACE6M,WAAO,uBAynBHsK,QAAS,4DAvnBby7N,MAAQ,kB,kEAkDZvnP,QACGC,OArnBK,gBAAA,EAsnBLK,WArnBO,uBAAOo7Z,CAAA,C,IAisCnB,CAAA,WACE,aAOA,SAASE,EAAuBl8Y,EAAYne,GAE1C,IAxnBEQ,EAAAC,KAynBFD,EAxnBEoe,QAAO,CAAA,EAynBTpe,EAxnBEwoE,QAAO,GAynBTxoE,EAAG85Z,gBAAkB,GACrB95Z,EAAG4J,OAAS,GASVpK,EAAWmP,IAAI,qBAAsB,SAASC,EAAOhF,GAvnBtD5J,EAAAoe,QAAA,CAAA,EACCpe,EAAAwoE,QAAW5+D,EAAA4+D,QACXxoE,EAAA85Z,gBAAO,8BAAAlwZ,EAAA4+D,QAAA,IAAA5+D,EAAA4+D,QAAA,QAynBLxoE,EAAG4J,OAASA,EAAOA,OAvnBrB+T,EAAQ,eAAA,EAAAsnT,QAAA,WACRjlU,EAAOoe,QAAA,CAAA,EACPpe,EAAAwoE,QAAY,GACZxoE,EAAS85Z,gBAAA,GACT95Z,EAAO4J,OAAA,GAynBDpK,EAAW4M,WAAW,qBAAA,C,GAE1BuR,EAAW,eAAA,EAAiBvU,KAAA,C,GAG9B5J,EAAWmP,IAAI,uBAAwB,SAASC,EAAOhF,GAvnB5D5J,EAAAoe,QAAW,CAAA,C,yCAolBVngB,QACGC,OAxnBC,mBAAA,EAynBDK,WAxnBQ,yBAAAs7Z,CAAA,C,IAiqBb,CAAA,WACE,aAOA,SAznBKE,EAAS37Z,EAAAoB,EAAAJ,EAAAU,GA6nBZ1B,EAAOmrW,SAAW,GAClBnrW,EAAO2vZ,cAAgB,GAxnBvB3vZ,EAAG2nW,mBAAA,GA2nBH3nW,EAAO4vZ,mBAhmBP,WACE5vZ,EAAK2nW,mBAAQ,CAAA,C,EAsmBb3nW,EAAOuQ,IAAI,6BAA8B,SAAUC,GAC7CA,EAAMorZ,YAAYC,MAAQ77Z,EAAO67Z,KACnCz6Z,EAAW4M,WAAW,wBAAA,C,GAItBtM,EAAQimW,mBAAA,IAxnBd3nW,EAAAmrW,SAAAzpW,EAAA4I,KAAA6U,WACAnf,EAAA2vZ,cAAAjuZ,EAAAga,QAAAorV,qBACA9mW,EAAA2nW,mBAAA,CAAA,GAGA3nW,EAAA2vZ,a,uDAylBF9vZ,QAxnBEC,OAAI,MAAA,EA0nBHK,WAAW,iBAAkBw7Z,CAAA,C,IA0ClC,CAAA,WAEI,aAOA,SAznBIG,EAAAzzS,EAAAivO,EAAA/I,GAMA+I,EAAA3qN,SAAA,EA+nBK4hN,EAAWC,UAAU,4BAAA,GAAiCnmO,EAAQomO,SAAA,GAvnBxD5uV,QAAAmH,QAAmB,MAAA,EAC9BitJ,KAAA,YAA6B,CAAA,CAAA,EAM1B5rC,EAAQomO,SAAA,GAET5uV,QAAOmH,QAAA,MAAA,EAAAwjE,SAAA,WAAA,EAMT+qV,EAAAltS,EAAoBmtS,cAAA,EAClBD,IAEAwG,EAAYxG,EAAAG,QAAA,IAAAH,EAAA5sI,QAAA,IAAA4sI,EAAAI,GACZ91Z,QAAAmH,QAAiB,MAAA,EAAAwjE,SAAAuxV,CAAA,E,oDAmlBvBl8Z,QACKC,OAAO,UAAA,EAxnBZgwB,IAASgsY,CAAA,C,IAiqBb,CAAA,WAEI,aAOA,SAznBM3nZ,EAAO6nZ,EAAAC,EAAAC,EAAAC,GA4nBTF,EAAaG,aAAa,CAAA,CAAA,EAK1BJ,EAznBS7nZ,OAAA,CACPkoZ,SAAY,CAAA,C,GAIdF,EAAAhoZ,OAAoB,CAClBmkZ,wBAAW,CAAA,EACXE,gCAAO,CAAA,EACPD,2BAAO,CAAA,C,GA6nBT2D,EAAuB/nZ,OAAO,CAC1B46U,iBAAkB,CAAA,C,4FA1B1BlvV,QACKC,OAAO,UAAA,EACPqU,OAAOA,CAAA,C,IA+BhB,CAAA,WACE,aAKA,SAAS2nZ,EAAS16Z,EAAYke,EAAUze,EAAQs7G,EAAWh7G,EAASJ,EAAWy7D,EAAU96D,EAASsT,EAAasnZ,EAAgBz/O,EAAS57K,EAAKI,EAAaihW,EAAgBnjK,EAAgBzvG,GAvnBxLtuF,EAASiR,QAAA3Q,EA0nBTN,EAznBOsuF,eAAQA,EA0nBftuF,EAznBIoT,MAAA3T,EA4nBJ,IAznBI07Z,EACAnoE,EACAooE,EAyBGC,EAimBHC,EAznBqB,CAAA,EA6nBzBJ,EAznBY5tV,QAAAiuV,UAAA,wLA0nBZL,EAznBa5tV,QAAAkuV,UAAA,mLAioBXl7Z,EAznBIskW,gBAAA,EAGoC,IAApC7pP,EAAS/oE,KAAA,EAAAuH,QAAA,MAAA,IACXj5C,EAAAsiW,gBAAA,IACEtiW,EAAAqsI,WAAWrsI,EAAA4I,KAAAgjI,QAAA,EACX5rI,EAAOosU,QAAA,GAEP9oT,EAAAm3F,EAAYxhG,OAAA,EAAA,KA2nBR4rH,EAAM,IAAIxgF,MAxnBb02W,EAAQ,IAAA12W,KAAAwgF,CAAA,GACXrN,QAAoBqN,EAAA5Q,QAAA,EAAS,CAAA,EAC3Bn5D,EAAAkrE,IAAW,gBAAA1iH,EAAA,CACXwiV,QAAOi1D,EACP3kW,OAAO72D,EAAA47Z,gB,IAKTn7Z,EAAAsiW,gBAAA,EAgBAtiW,EAAAukW,eAAoBjxV,CAAA,EAASrO,KAAA,WAkC3BjF,EAAAsiW,gBAAA,EA2nB4B,MAArB7nP,EAAU2gT,OACfp7Z,EAAQwpQ,qBAAA,EAxnBVrqQ,EAACiD,GAAQ,yBAAA,EAETq4G,EAAA/oE,KAAW,kBAAA,EAGX1xC,EAAAwpQ,qBAAA,EA0nBArqQ,EAAOiD,GAAG,yBAAA,EAvnBVq4G,EAAS/oE,KAAA+oE,EAAA/oE,KAAA,CAAA,EA8mBX+oE,EAznBE/oE,KAAA,QAAA,EAgHN1xC,EAASwiW,WAAA,GACP64D,EAAA,C,GAnKe,IAAX5gT,EAAW/oE,KAAA,EAAAuH,QAAA,mBAAA,GAAA,IAAAwhE,EAAA/oE,KAAA,EAAAuH,QAAA,kBAAA,GAAA,IAAAwhE,EAAA/oE,KAAA,EAAAuH,QAAA,mBAAA,EACJ,IAAPwhE,EAAO/oE,KAAA,EAAAuH,QAAA,mBAAA,GACPwhE,EAAO/oE,KAAA,kBAAA,EA2nBuB,aAArB+oE,EAAU/oE,KAAA,GAA8C,iBAArB+oE,EAAU/oE,KAAA,GAA+E,IAAlD+oE,EAAU/oE,KAAA,EAAOuH,QAAQ,mBAAA,GAAoF,IAAtDwhE,EAAU/oE,KAAA,EAAOuH,QAAQ,uBAAA,GAAkF,IAAhDwhE,EAAU/oE,KAAA,EAAOuH,QAAQ,iBAAA,GAAiE,IAArCwhE,EAAU/oE,KAAA,EAAOuH,QAAQ,MAAA,IAtnBjQ,MAApBwhE,EAAA/oE,KAAA,GAAkD,WAArB+oE,EAAA/oE,KAAA,EAC3Bu4B,eAAWtrD,QAAA,gBAAA87F,EAAA/oE,KAAA,CAAA,EAEXu4B,eAAOtQ,WAAA,eAAA,EA2nBP8gD,EAAU/oE,KAAK,QAAA,GASnBmpX,EAAwBn7Z,EAAWmP,IAAI,oBAAqBysZ,CAAA,EAC5D5oE,EAA0BhzV,EAAWmP,IAAI,sBAAuB0sZ,CAAA,EAEhE77Z,EAAWmP,IAAI,WAAYu9T,CAAA,EAxnB7B0uF,EAASp7Z,EAAyBmP,IAAA,yCAAAwsZ,CAAA,EAChCP,EAAap7Z,EAAmBmP,IAAA,kCAAsB6zV,CAAA,EA2nBtD,IAxnBE,eAAAnjW,EAAAulY,aACA02B,WAAAp8W,KAAA,CACAq8W,YAAA,QACAC,UAAA,oCACA52B,YAAAvlY,EAAAulY,YACA62B,wBAAA,CAAA,YAAA,UAAA,QAAA,iBAAA,Q,GAGA,MAAAjuZ,GA0nBAixE,QAznBEjxE,MAAO,oBAAA,C,CAspBb,SAAS4tZ,EAAiBxsZ,EAAO8sZ,EAAS7lS,EAAU8lS,EAAWC,GAC7D,IAxnBAz8Z,EAAKuK,KAAA,C,CACH,MAAA8D,IA8nBFhO,EAAWq8Z,gBAAkB,CAAA,EAvnBzBj6Z,EAsoBN,SAznBkBgN,EAAAwzJ,GA0nBhB,IAAI05P,EAAgB,KAChB33Q,EAAiB,GAxnBjBloI,EAAS,KAETrN,GAAAA,EAAWorZ,aAAAprZ,EAAAorZ,YAAApnZ,QA0nBbqJ,EAznBSrN,EAAAorZ,YAAApnZ,MAAAhJ,QAEP9J,EAAAwpQ,qBAAA,GAAY,4BAAAlnG,GA0nBd3jF,QAAQ6rM,KAAKloH,EAAU,6BAAA,EACvB05P,EAAgB,2BAxnBbh8Z,EAAQ8B,cAAmBwgK,CAAA,EAC9BtiK,EAAAw4D,iBACEx4D,CAAAA,EAAWkqE,WAAAo4F,CAAA,IACXtiK,EAAOqmW,QAAA/jM,CAAA,EACAtiK,EAAAy4D,SAAA6pG,CAAA,IACP3jF,QAAY6rM,KAAAloH,EAAA,8BAAA,EA0nBN05P,EAAgB,2BAChB33Q,EAAiB,CAxnBtBnoI,OAAQomJ,EACXnmJ,kBAA6BA,EAC3BC,QAAWpc,EAAAsmW,SAAAhkM,CAAA,EAAA5hK,GACJ2b,UAAArc,EAAAsmW,SAAAhkM,CAAA,EAAAl8I,KACAnK,QAAAwhL,EAAAusK,eAAA1nM,CAAA,C,IA6nBH3jF,QAAQ6rM,KAAKloH,EAAU,+BAAA,EACvB05P,EAAgB,2BAxnBjB33Q,EAAA,CACHnoI,OAAQomJ,EAAQnmJ,kBAAyBA,EAAAF,QAAAwhL,EAAAusK,eAAA1nM,CAAA,C,KA+nB3C3jF,QAznBE6rM,KAASloH,EAAA,mCAAA,EA0nBX05P,EAWJ,WACE,CAAA,GAAIh8Z,EAznBE8B,cAAW,yCAAA,EA0nBf,MAznBI,0CACA,GAAA9B,EAAO8B,cAAA,UAAA,EA0nBX,MAznBI,gBA0nBC,GAAI9B,EAAQ8B,cAAc,eAAA,EAC/B,MAAO,sBAxnBP,GAAA9B,EAAA8B,cAA6B,iBAAA,EA0nB7B,MAznBE,6B,CA2nBJ,OAznBI,I,EArBO,GA4nBX,GAznBIk6Z,GAAAA,IAA6B15P,EA4nB/B,OAFAxzJ,EAznBIirN,eAAA,EA0nBJ56N,EAznBIiD,GAAA45Z,EAAO33Q,CAAA,EACP,CAAA,EA2nBN,MAAO,CAAA,C,EAnrBiCv1I,EAAA8sZ,EAAWp+Y,IAAA,EA0nBnDojV,EAznBEjC,MAAAi9D,EAAoBp+Y,KAAS,CA0nB7BsiW,eAznBah+W,C,GA6nBjB,SAASy5Z,IAvnBP39Y,EAAK,WACHle,EAAAq8Z,gBAA6B,CAAA,C,GA0rBjC,SAAS3vF,IAxnBLyuF,GA0nBAA,EAAA,EAvnBEnoE,GA0nBFA,EAAA,EAEFooE,EAAA,C,CASF,SAznBIO,IA0nBGL,IAxnBHA,EAAoB,CAAA,EA0nBpB37Z,EACGoC,KAAK,CAxnBNhD,WAAQw9Z,EACRn9Z,aAAY,KACZC,YAAS,kFACTsG,OAAOlH,QAAAmH,QAAAsB,SAAAC,IAAA,EA0nBL9B,oBAAqB,CAAA,EACrBK,cAAe,CAAA,EAxnBhB4I,SAAQ,CAAA,C,GAET/I,KAAA,WACA+1Z,EAAO,CAAA,C,EACP,WACAA,EAAY,CAAA,C,IA8nBlB,SAznBMt4D,IA0nBJnjW,EAznBI09B,QAAOC,MAAAh8B,IAAA,CA0nBTR,GAznBEV,EAAO4I,KAAAlI,GAAAE,OAAA,0B,EA0nBR,SAznBCE,EAAYyF,EAAAvF,GACZA,IAAArB,EAAiBsB,aA0nBbH,EAASsL,QAQjB/M,EACGoC,KAAK,CAxnBJhD,WAASy9Z,EACXp9Z,aAAA,KACEC,YAAW,8EACXsG,OAAOlH,QAAAmH,QAAAsB,SAAAC,IAAA,EACP9B,oBAAO,CAAA,EACPK,cAAY,CAAA,EA0nBZ4I,SAAU,CAAA,C,GAEX/I,KAAK,aACH,Y,IA3KL27V,EAznBW/B,aAAA,kCAAA,EA0nBXjhV,EAAS,WACPgjV,EAAejC,MAAMx/V,EAAO8kE,QAAQzmD,IAAA,C,EAxnBtC,GAAA,C,CAuyBJ,SAznBMy+Y,EAAA58Z,EAAAH,EAAAO,EAAAN,EAAAI,EAAAI,EAAAK,GA0nBJ,IAznBIE,EAAAC,KA4nBJD,EAAG0I,KAznBM5I,EAAQ4I,KA0nBjB1I,EAAGy8X,kBAznBC,sEA4nBJz8X,EAAGgH,KAIH,WACE3H,EAAI09B,QAAQC,MAAMh2B,KAAK,CAxnBvBxG,GAAKR,EAAA0I,KAAQlI,GAAAE,OAAA,gB,EACX,SAAAE,EAAoByF,EAAAvF,GAClBA,IAAWrB,EAAAsB,aACXjB,EAAOgmW,sBAAA,CAAA,CAAA,EACP3mW,EAAOuK,KAAA,IA2nBP1K,EAASuC,KAAKvC,EACXwC,OAAA,EAxnBFC,YAAQlC,EAAA,WAAA,EAA2B,qBAAA,CAAA,EACtCmC,SAAA,WAAA,EACEiL,UAAW,GAAA,CAAA,EACX7M,EAAOgmW,sBAAA,CAAA,CAAA,E,IAymBb9lW,EAAGgvW,OAqBH,WACElvW,EAznBE8kW,yBAAA,EA0nBF9kW,EAznBIqsI,WAAWrsI,EAAA4I,KAAAgjI,QAAA,EA0nBf5rI,EAznBIosU,QAAA,EA0nBJjtU,EAznBIiD,GAAA,yBAAA,EA0nBJ/C,EAznBIwC,OAAA,C,EA6nBR,SAznBMq6Z,EAA6B78Z,EAAkBH,EAAAO,EAAAN,EAAAI,EAAAI,EAAAK,GA0nBnD,IAAIE,EAznBEC,KA4nBND,EAAG0I,KAznBG5I,EAAY4I,KA0nBlB1I,EAAGi8Z,cAAgB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAC/Cj8Z,EAAGklY,IAAM,KACTllY,EAznBE6C,MAAK,KA4nBP7C,EAAGgH,KAGH,WAvnBE7H,EAAKuK,KAAA,EA0nBL1K,EAznBEuC,KAAAvC,EA0nBCwC,OAAA,EACAC,YAznBQlC,EAAA,WAAA,EAAA,qDAAA,CAAA,EA0nBRmC,SAznBQ,WAAA,CAAA,EA0nBXrC,EAznBI09B,QAAAC,MAAYh2B,KAAA,CA0nBdxG,GAAIV,EAAQ4I,KAAKlI,GAAIE,OAAQ,0BAA2B+tX,mBAAoBzuX,EAAGklY,IAAKriY,MAAO7C,EAAG6C,K,EAC7F,SAASjC,EAAUyF,EAAIvF,I,GAX5Bd,EAAGk8Z,KAgBH,WACE/8Z,EAznBIuK,KAAA,EA0nBJrK,EAAI09B,QAAQC,MAAMh2B,KAAK,CACrBxG,GAAIV,EAAQ4I,KAAKlI,GAAIE,OAAQ,0BAA2B+tX,mBAAoB,KAAM5rX,MAAO7C,EAAG6C,K,EAC3F,SAASjC,EAAUyF,EAAIvF,I,+XA/U9B7C,QAznBQC,OAAO,MAAA,EAAAgwB,IAAAgsY,CAAA,C,IA+8BjB,CAAA,WACE,aAOA,SAznBQiC,EAAO3pZ,EAAA4pZ,EAAAC,GA0nBbA,EAAkBC,UAAU,CAAA,CAAA,EAgB5Br+Z,QAAQqyV,SAAS,CAAC,YAAA,EAAckV,OAAO,CACrC,WAAY,SAAUsqD,GAxnBtBl1V,C,IAqnBF,IAUIqyG,EAAc,sCAEdsvP,EAAU,CAxnBZC,mBAAa,CACXC,KAAA,4CA0nBAC,QAznBE,uDA0nBFrjJ,WAznBS,4D,EA2nBXsjJ,mCAznBgB,CA0nBdF,KAAM,8DACNC,QAAS,yEACTrjJ,WAAY,4D,EAvnBhBujJ,oCAAmC,CACjCH,KAAK,gEACHC,QAAA,2EACArjJ,WAAA,gF,EA2nBFwjJ,qBAznBE,CACAJ,KAAA,8CA0nBAC,QAznBK,yDACLrjJ,WAAA,8D,EA2nBFyjJ,YAAa,CACXL,KAznBE,qCA0nBFC,QAznBE,GA0nBFrjJ,WAznBW,E,EA2nBb0jJ,mBAAoB,CAClBN,KAAM,6CAxnBRC,QAAK,wDACHrjJ,WAAA,E,GA+nBJ+iJ,EAAmB3pE,KAAK,aAAc,qBAAA,EACtC2pE,EAznBe3pE,KAAA,cAAmB,qBAAA,EA0nBlC2pE,EAznBI3pE,KAAoB,eAAS,0BAAA,EA0nBjC2pE,EAznBiB3pE,KAAA,gBAAA,0BAAA,EA0nBjB2pE,EAznBa3pE,KAAA,aAAA,kBAAA,EA0nBb2pE,EAznBa3pE,KAAA,cAAA,kBAAA,EA0nBb2pE,EAznBkB3pE,KAAA,aAAA,uCAAA,EA0nBlB2pE,EAAmB3pE,KAAK,cAAe,uCAAA,EACvC2pE,EAAmB3pE,KAAK,+BAAgC,uCAAA,EACxD2pE,EAznBe3pE,KAAA,+BAAsC,uCAAA,EA0nBrD2pE,EAznBI3pE,KAAoB,kCAA8B,uCAAA,EA0nBtD2pE,EAznBiB3pE,KAAA,kCAAA,uCAAA,EA0nBjB2pE,EAznBa3pE,KAAA,kCAAA,uCAAA,EA0nBb2pE,EAznBa3pE,KAAA,kCAAA,uCAAA,EA0nBb2pE,EAznBkB3pE,KAAA,QAAA,YAAA,EA0nBlB2pE,EAAmB3pE,KAAK,SAAU,YAAA,EAClC2pE,EAAmB3pE,KAAK,aAAc,kBAAA,EACtC2pE,EAznBe3pE,KAAA,cAAmB,kBAAA,EA4nBlCjgV,EACGI,MAznBG,MAAO,CA0nBTC,SAznBE,CAAA,EA0nBFC,MAAO,CACLuf,QAAS,CACPxzB,YAAa09Z,EAAQtvP,GAAawvP,KAxnBnCl+Z,WAAQ,sB,EAETy+Z,cAAW,CACXn+Z,YAAO09Z,EAAAtvP,GAAAyvP,QACPn+Z,WAAQ,yB,EAER0+Z,iBAAY,CACZp+Z,YAAS09Z,EAAAtvP,GAAAosG,WACT96Q,WAAO,4B,EA2nBP2+Z,iBAAkB,CAChBr+Z,YAAa,mCACbN,WAAY,4B,EAEb4+Z,mBAAoB,CACnBt+Z,YAAa,uCAxnBxBN,WAAY,8B,GA4nBLyU,QAAS,CAznBflT,QAAA,CAAA,UAAA,SAAAA,GACU,OAAAA,EAAAqlW,WAAA,C,MA+nBR3yV,EAznBAI,MAAS,SAAA,CACNC,SAAU,CAAA,EACVC,MAAA,CACAuf,QAAA,CACAxzB,YAAS,2CA2nBJN,WAAY,sB,EAEd6+Z,iBAAkB,CAChBv+Z,YAAa,2EAznBrBN,WAAA,yB,EA4nBM8+Z,oBAAqB,CAznB3Bx+Z,YAAqB,iFACnBN,WAAe,kC,KA+nBjBiU,EACGI,MA1nBK,YAAa,CA2nBjBC,SA1nBO,CAAA,EA2nBPC,MA1nBO,CA2nBLuf,QA1nBK,CACHxzB,YAAW,2CA2nBXN,WAAY,sB,EAEd++Z,oBAAqB,CACnBz+Z,YAAa,2EAznBnBN,WAAe,yB,EA4nBXg/Z,uBAAwB,CACtB1+Z,YAAa,iFACbN,WAAY,kC,2EAxJtBN,QACGC,OAAO,MAAA,EACPqU,OAznBK4pZ,CAAA,C,IAwxBV,CAAA,WACE,aAEAl+Z,QA1nBAC,OAAS,MAAA,EA4nBNujB,OAAO,oBAAA,CAAA,aAAqB,SAASjF,GACpC,OAAO,SAASqkC,GACd,OAAOrkC,EAAWqkC,E,KAIrBp/B,OAAO,mBAAA,CAAA,mBAAoB,SAASulB,GA1nBrC,OAAO,SAAAmvD,GA4nBH,OAAO,IAAInvD,EAAiBmvD,CAAA,EAAkB1tD,WAAA,C,KAIjDhnB,OAAO,eAAgB,WACtB,OAAO,SAASo/B,GA1nBhB,MAAW,QAAXA,EAAW,oBACC,QAANA,GAA0B,QAARA,EAAoB,oBAA1C,KAAA,C,IA+nBHp/B,OAAO,UAAW,WA1nBjB,OAAI,SAAQy5B,GACV,OAAOoI,OAAApI,CAAA,EAAW26W,QAAA,C,IA+nBrBp0Y,OAAO,SAAU,WA1nBhB,OAAI,SAAOo/B,GA4nBT,OAAO,IAAIsD,KAAKtD,CAAA,C,IAInBp/B,OAAO,cAAe,WA1nBvB,OAAS,SAAAy5B,GACP,OAAOoI,OAAApI,CAAA,EAAAmI,OAAqB,KAAA,C,IA+nB7B5hC,OAAO,wBAAA,CAAA,UAAyB,SAASliB,GA1nB7C,OAAA,SAAA27C,GACDhvC,EAAA3M,EAAA,QAAA,EAAA27C,CAAA,EACI,OAAA37C,EAAA,aAAA,EAAA2M,CAAA,C,KA+nBCuV,OA5nBI,eAAA,CAAA,UAAO,SAAAliB,GA6nBV,OA5nBO,SAAA8iV,GA6nBL,IAAI5zP,EAAQ4zP,EAAUxuT,MAAM,GAAA,EACxB3nB,EAAS,GAIb,OA/nBJuiF,EAASttF,QAAS,SAAS4gV,GAC3B71U,EAAAqE,KAAAhR,EAAA,WAAA,EAAA,aAAAwiV,CAAA,CAAA,C,GA8nBW71U,EAAOiI,KAAK,IAAA,C,KAItBsN,OAAO,QAAA,CAAA,UAAS,SAASliB,GACxB,OAAO,SAAS+P,GACd,OAAO/P,EAAQ,QAAA,EAAU+P,EAAO,CAAA,C,KAInCmS,OA5nBG,cAAA,CAAA,UAAA,SAAAliB,GA6nBF,OA5nBM,SAAI+P,GA8nBR,MAA0C,SAAtCA,EA7nBO/P,EAAK,QAAA,EAAa+P,EAAA,CAAA,GA6nBnB0N,UAAU1N,EAAMjC,OAAS,CAAA,EAC1BiC,EAAM0N,UAAU,EAAG1N,EAAMjC,OAAS,CAAA,EAEpCiC,C,KAIVmS,OA5nBO,aAAA,CAAA,UAAQ,SAAQliB,GA6nBtB,OAAO,SAAS+P,GACd,OAAO/P,EAAQ,QAAA,EAAU+P,EAAO,CAAA,EAAK,G,KAIxCmS,OA5nBO,WAAA,WA6nBN,OA5nBO,SAAAzI,GACL,GAAAA,EAAA,CA6nBE,GA5nBEA,EAAIkN,MAAYlN,EAAAsE,KAAY,OAAAtE,EAAUkN,KAAM,MAAYlN,EAAAsE,KA6nB1D,GA5nBEtE,EAAQkN,KAAA,OAAQlN,EAAQkN,KA6nB1B,GAAIlN,EAAMsE,KAAM,OAAOA,I,CAEzB,MAAO,E,IAIVmE,OAAO,aAAc,WACpB,OAAO,SAASkoG,GA5nBlB,IAAAz9G,EAAA,GAsoBI,OAroBCy9G,GAAOA,EAAApsG,WACPrR,GAAOy9G,EAAApsG,WAAA,IA8nBGosG,GAAUA,EAAOrsG,OAC1BpR,GAAUy9G,EAAOrsG,KAAO,KA3nB9BqsG,GAAAA,EAAAr9C,YA8nBMpgE,GAAUy9G,EAAOr9C,WAEZpgE,C,IAIVuV,OA7nBG,WAAc,WA8nBhB,OA7nBM,SAAU5U,GA8nBd,IAAIX,EAAS,GAKb,OAJKW,KACDA,EAASgvB,WAAahvB,EAASq6G,WAASh7G,IAAWW,EAASgvB,WAAahvB,EAASq6G,SAAW,MA5nBjGr6G,EAAAmvB,MAAA9vB,GAA0B,IAAAW,EAAAmvB,KACtBnvB,EAAAivB,QAAA5vB,GAAA,IAAAW,EAAmCivB,MACnC5vB,C,IAioBPuV,OAAO,gBAAA,CAAA,iBAAiB,SAASwsF,GAChC,OA7nBE,SAAAphG,GA8nBA,IACI8hH,EADJ,OA7nBI9hH,GA8nBA8hH,EAAQ,GACR9hH,EAASgvB,WAAW8yF,EAAMp+G,KAAK1D,EAASgvB,SAAA,GACxChvB,EAASmvB,KAAOnvB,EAASivB,OAC3B6yF,EAAMp+G,MAAM1D,EAASmvB,KAAO,IAAM,KAAOnvB,EAASivB,MAAQ,GAAA,EAExDjvB,EAASkvB,SAAWkyE,EAAephG,EAASkvB,UA5nBvD4yF,EAAWp+G,KAAA09F,EAAAphG,EAAAkvB,QAAA,EA+nBG4yF,EAAMx6G,KAAK,IAAA,GAtoBI,E,KAU5BsN,OAAQ,cAAe,WAioBnB,OAAO,SAAS+7Y,GACd,OAAIA,EA/nBoB,GAArBA,EAASnwZ,OAAsBmwZ,EAAQxgZ,UAAW,EAAS,CAAA,EAAA,IAAWwgZ,EAAUxgZ,UAAS,EAAA,CAAA,EAAA,IAAawgZ,EAAgBxgZ,UAAS,EAAK,CAAA,EAAA,IAAAwgZ,EAAaxgZ,UAAgB,CAAA,EAioB3JwgZ,EA9nBF,E,IAKX/7Y,OAAI,eAAA,CAAA,QAAA,UAAA,SAAAyU,EAAA32B,GACJ,OAAI,SAAAguF,GACA,OAAAA,GAmoBAA,EAAW,IAAIppC,KAAKopC,CAAA,EA/nBxBr3D,EAAA2jU,YAAuBtsQ,CAAA,EACvBhuF,EAAe,WAAA,EAAQ,qBAAA,EAkoBf22B,EAAM4jU,gBAAgBvsQ,CAAA,EA/nB9BhuF,EAAA,WAAA,EAAA,yBAAA,EAGgB,CAAAA,EAAA,WAAA,EAAA,gBAAA,EAAAA,EAAA,WAAA,EAAA,gBAAA,EAAAA,EAAA,WAAA,EAAA,iBAAA,EAAAA,EAAA,WAAA,EAAA,mBAAA,EAAAA,EAAA,WAAA,EAAA,kBAAA,EAAAA,EAAA,WAAA,EAAA,gBAAA,EAAAA,EAAA,WAAA,EAAA,kBAAA,GAioBIguF,EAASqmC,OAAA,GAAY,KAAOrmC,EAASwmC,QAAA,EAAY,KAAOxmC,EAASumC,SAAA,EAAa,GAAK,IAAMvmC,EAASsmC,YAAA,GAXzG,E,KAeZpyG,OAhoBK,cAAA,CAAA,QAAA,UAAiB,SAAQyU,EAAA32B,GAioB7B,OAhoBM,SAAQguF,GAioBZA,EAhoBU,IAAAppC,KAAAopC,CAAA,EAkoBV,IA3mBMkwU,EAlBJx6B,EA6nBgB,IAAI9+U,KA7nBNopC,EACdmwU,EAAiBtpY,KAAI46C,MAAKi0T,EAFjB06B,IAEiB,EAC1BC,EAAmBxpY,KAAI46C,MAAAi0T,EAJb,GAIyB,EAioBrC,OAhoBE/sW,EAAA2jU,YAAatsQ,CAAA,EACA,IAAXmwU,GACAD,EAAcl+Z,EAAA,WAAA,EAAA,uBAAA,EAioBS,IAAnBq+Z,IACFH,EAAgBl+Z,EAAQ,WAAA,EAAa,sBAAA,GAEhCA,EAAQ,WAAA,EAAa,2BAA4B,CAAEm/E,KAAQk/U,EAAiB,IAAMH,CAAA,CAAA,IA9nBzFI,EAAiBt+Z,EAAQ,WAAA,EAAA,qBAAA,EACN,IAAjBm+Z,IACFG,EAAet+Z,EAAA,WAAA,EAAA,oBAAA,GAERA,EAAA,WAAA,EAAqB,2BAAwB,CAAAm/E,KAAWg/U,EAAkB,IAAAG,CAAA,CAAA,IAG/EJ,GAAUlwU,EAAWszB,WAAA,EAAiB,GAAA,IAAW,IAAAtzB,EAAUszB,WAAA,EAC7DtzB,EAAAu6G,SAAA,EAAuB,IAAA21N,E,KAooB9Bh8Y,OAhoBK,gBAAe,WAioBnB,OAAO,SAASo/B,GACd,OAhoBKzsB,KAAAoO,IAAAqe,CAAA,C,IAooBRp/B,OAAO,yBAA0B,WAChC,OAAO,SAAS4gE,EAAOzQ,GACrB,OAAKyQ,EAGUA,EAAM5gE,OAAO,SAASpE,GA/nBvC,OAAe,OAAJA,EAAI9X,MAAY8X,EAAA9X,OAAAqsE,C,GAmoBTn8B,KAAK,SAASpsC,EAAGssD,GA/nB/B,OAAA,OAAAtsD,EAAA9D,MAAA,OAAAowD,EAAApwD,KACM,EAES,OAAb8D,EAAA9D,MAAa,OAAAowD,EAAApwD,KACb,CAAA,EAEA,C,GAbN,E,OAmpBN,CAAA,WAEI,aAOA,SAhoBOu4Z,EAAQpxP,EAAmBltK,EAAAgrM,EAAA1qM,EAAA49J,GAEzBz9J,KAmoBJ2sK,OAhoBMF,EAAAE,M,sFAsnBX3uK,QACKC,OAAO,MAAA,EACPK,WAAW,kBAAmBu/Z,CAAA,C,IAgBvC,CAAA,WACE,aAEA7/Z,QACGC,OAAO,MAAA,EAEPi6Y,SAhoBK,cAAA,CAioBJ5uI,aAhoBY,qBAioBZR,YAhoBS,oBAioBTg1J,cAAe,sBACfC,eAAgB,uBAChBC,iBAAkB,yBAClBC,cAAe,qB,GAEhB/lB,SAAS,sBAAuB,CA/nB/Bx/B,uBAAoB,EACpBI,mBAAqB,EAioBrBI,yBAhoBkB,EAioBlBV,qBAAwB,EACxBG,mBAAsB,IACtBI,eAAkB,IA/nBpBz+L,oBAAS,IAioBPC,uBAA0B,IA/nB1BC,0BAAoB,IAioBpBC,uBAhoBa,IAioBb0+L,uBAA0B,IAE1BxmS,EAAG,yBA/nBLC,EAAA,qBACEC,EAAA,2BACAC,EAAA,uBACAghL,IAAI,qBAioBJC,IAAK,iBA/nBLC,IAAI,sBAioBJC,IAhoBE,yBAioBFC,IAAK,4BA/nBLC,IAAI,yBAioBJC,IAhoBE,wB,GAmoBH8jJ,SAhoBO,0BAAyB,CAioB/B9+B,mBAhoBiB,KAioBjBC,4BAhoB0B,MAioB1BT,eAhoBa,KAioBbU,+BAhoBiC,MAioBjCC,sBAhoBU,KAioBVV,mBAhoBU,MAioBVG,oBAhoBoB,KAioBpBC,kBAhoBY,KAkoBZilD,GAAM,qBACNC,IAAO,8BACPC,GAAM,iBACNC,IAAO,iCACPC,GAAM,wBACNC,IAAO,qBACPC,GAAM,sBACNC,GAAM,mB,GAGPvmB,SAAS,oBAAqB,CAC7BtgC,YAAe,EACfN,gBAAmB,EACnBQ,kBAhoBO,EAkoBPnlS,EAhoBE,cAioBFC,EAAG,kBACHC,EAAG,mB,GAGJqlU,SAhoBG,oCAAyB,CAioB3Bx1B,yBAhoBS,GAioBTg8C,yBAA4B,GA/nB5BC,wBAAO,GAkoBPxwK,GAAI,2BA/nBNU,GAAA,2BACEU,GAAI,yB,GAmoBL2oJ,SAhoBG,mCAAO,CAioBT0mB,kBAhoBmB,GAioBnBp8C,kBAhoBS,GAkoBTr0H,GAhoBE,oBAioBFU,GAAI,mB,GAGLqpJ,SAAS,qBAAsB,CA/nBhCvlU,EAAA,sBACEC,EAAA,gBAioBAC,EAhoBE,iBAioBFC,EAAG,MA/nBHg7K,EAAA,YAioBAC,EAhoBE,mBAioBFC,EAAG,0CA/nBHC,EAAA,2CAGF4wK,oBAAS,EACPC,cAAY,EAioBZC,eAhoBE,EAioBFC,IAAO,EACPC,UAAa,EACbC,iBAAoB,C,GAGrBhnB,SAhoBG,0BAAwB,CAioB1BinB,OAhoBE,EAioBFC,QAhoBU,EAioBVC,MAhoBM,EAkoBN1sV,EAAG,SACHC,EAAG,UACHC,EAAG,O,GAGJqlU,SAAS,uBAAwB,CAChCj0D,+BAhoBqB,GAioBrBC,2BAhoBM,GAioBNC,4BAhoBkB,GAkoBlBh2F,GAAI,iCACJU,GAAI,6BACJU,GAAI,6B,GAIL2oJ,SAhoBO,kBAAiB,CAioBvB/vS,KAhoBG,EAioBHM,YAhoBM,EAioBNE,WAhoBQ,EAioBRC,oBAhoBM,EAioBNC,gBAAmB,EACnBH,SAAY,EAEZ/1B,EAAG,OACHC,EAAG,cA/nBLC,EAAA,aACEC,EAAA,sBAioBAg7K,EAhoBG,kBAioBHC,EAAG,U,GAGJmqJ,SAhoBK,OAAQ,CAioBZZ,WAhoBI,0F,GAmoBLY,SAAS,gCAAiC,CACzCvmO,2BAhoBmB,GAioBnBC,sCAhoBgB,E,GAmoBjBsmO,SAAS,sBAAuB,CAC/BnmO,2BAA8B,EAC9BC,kCAAqC,GA/nBzCC,2CAA4C,GAC1CC,kCAAS,GAioBPC,2CAA8C,GAC9CC,8BAAiC,GA/nBnCC,uCAAkB,GAClBC,6BAAuB,GAioBrBC,wCAA2C,GAC3CC,oCAAuC,GA/nBzCC,oCAAU,GACVC,qCAAY,GAioBVC,iCAAoC,GACpCz7E,iCAAoC,GA/nBtCy6E,2BAAgB,GACdE,oCAAuB,GAioBvBC,yBAhoB0B,GAioB1BF,sCAhoBkC,E,GAmoBnCsmO,SAhoBK,8BAAU,CAioBdvlU,EAAG,6BACHw7K,GAhoBI,oCAioBJC,GAAI,6CACJS,GAAI,oCACJC,GAAI,6CACJS,GAAI,gCACJC,GAhoBI,yCAioBJS,GAAI,+BACJC,GAAI,0CACJS,GAAI,sCACJU,GAAI,sCA/nBNU,GAAA,uCACEU,GAAA,mCACAC,GAAA,mCACAS,GAAA,6BACAC,GAAA,sCACAC,GAAA,2BAioBAC,GAAI,uC,GA7nBR4kJ,SAAS,sCAAiC,CACxCp7R,yCAAS,EAioBPE,8DAAiE,EACjEC,kEAAqE,EA/nBvEC,6EAAkB,C,GAGlBg7R,SAAG,6CAAQ,CAioBTonB,2CAA8C,EA9nBhDj7S,qEAAU,EACV2vH,4BAAU,C,GAmoBTkkK,SAAS,wCAAyC,CA/nBjD96R,6CAAU,EACVC,qDAAc,C,GAmoBf66R,SAhoBI,2BAAS,CACZqnB,8BAAuB,EAioBvBz2C,gCAhoB+B,C,GAmoBhCovB,SAAS,4BAA6B,CACrCtkB,uBAA0B,KAC1BG,2BAA8B,MA/nBhCC,8BAAgB,KACdC,2BAAU,KACVC,uCAAuB,MAioBvBC,oCAhoB+B,MAkoB/BiqC,GAAM,yBACNG,IAAO,6BACPD,GAAM,gCACNJ,GAAM,6BACNG,IAAO,yCACPF,IAAO,qC,GAGRjmB,SAAS,yBAA0B,CAClCpkB,eAAkB,KAhoBtBH,iBAAA,OACG6rC,gBAAO,MACPC,kBAAO,QAkoBNC,mBAAsB,SACtBC,oBAAuB,UA/nBzBC,GAAA,iBAkoBE3kX,KAAQ,mBACR4kX,IAAO,kBACPC,MAAS,oBACTj5H,OAAU,qBACVk5H,QAAW,qB,GAGZ7nB,SAAS,gBAAiB,CACzBvqO,iBAAoB,IACpBC,iBAAoB,IACpBC,iBAAoB,IACpBC,mBAAsB,IA/nBxBC,cAAI,IAkoBFC,cAAiB,IAhoBnBC,cAAkB,IAChBC,eAAY,IAmoBZK,gBAAmB,IACnBC,gBAAmB,IACnBC,gBAAmB,IACnBC,iBAAoB,IACpBC,sBAAyB,IAEzBC,kBAAqB,IA/nBrBC,uBAAoB,IAkoBpBC,uBAjoBQ,IAkoBRC,uBAjoBW,IAkoBXC,wBAjoBc,IAEdC,wBAAA,IAkoBAC,kBAjoBQ,IAmoBRC,8BAjoBc,IAkoBdC,8BAAiC,IAEjCjB,mBAjoBQ,IAkoBRC,mBAjoBW,IAkoBXC,mBAjoBc,IAkoBdC,oBAAuB,IAEvBe,8BAjoBQ,IAkoBRC,uCAjoBW,IAkoBXC,wCAjoBc,IAEdukF,IAAA,mBAkoBAC,IAjoBE,mBAkoBFC,IAjoBE,mBAkoBFC,IAjoBE,qBAEFiG,IAAA,gBAkoBAC,IAjoBE,gBAkoBFC,IAjoBE,gBAkoBFC,IAjoBE,iBAmoBF2lK,IAAK,kBACLC,IAAK,kBACLC,IAAK,kBACLC,IAAK,mBAhoBPC,IAAA,wBACAC,IAAA,oBAEAC,IAAA,yBACAC,IAAA,yBACAC,IAAA,yBACAC,IAAA,0BAEAC,IAAA,0BACAC,IAAA,oBAEAC,IAAA,gCACAC,IAAA,gCAEAC,IAAA,qBACAC,IAAA,qBACAC,IAAA,qBACAC,IAAA,sBAmoBEC,IAAK,gCAhoBPC,IAAA,yCAkoBEC,IAjoBC,yC,GAqoBFlpB,SAjoBO,yBAAqB,CAkoB3BmpB,qBAjoBkB,EAkoBlBC,uBAA0B,EAC1BC,qBAjoBmB,C,GAooBpBrpB,SAAS,0BAA2B,CACnCspB,gBAjoBI,EAkoBJvqC,qBAjoBmB,GAkoBnBwqC,kBAjoBkB,GAkoBlBC,sBAAyB,E,GAG1BxpB,SAjoBO,gBAAY,CAkoBlBz+S,SAAY,GACZC,MAjoBK,GAkoBLJ,QAjoBM,E,GAooBP4+S,SAAS,iBAAkB,CAC1B5+S,QAjoBW,GAkoBXqoU,kBAjoBI,GAkoBJ5wC,iBAjoBa,E,GAooBdmnB,SAAS,yBAA0B,CAClC/pJ,GAAI,UAhoBNU,GAAA,oBAkoBEU,GAjoBC,kB,GAooBF2oJ,SAjoBK,wBAAS,CAkoBb/pJ,GAAI,WACJU,GAAI,QACJU,GAAI,S,GAGL2oJ,SAjoBO,2BAAY,CAkoBlB0pB,sBAAyB,GACzBC,4BAjoByB,E,GAooB1B3pB,SAAS,wBAAyB,CACjCrjY,aAAgB,GAChBitZ,aAAgB,E,GAGjB5pB,SAjoBQ,uBAAa,CAkoBpBhiS,OAjoBE,SAkoBFE,QAjoBS,UAkoBT9Z,UAjoBI,YAkoBJmc,WAjoBM,aAkoBNlC,SAjoBM,WAkoBNjC,UAAW,W,GAGZ4jS,SAjoBO,mCAAY,CAkoBlBthS,SAAY,EACZD,QAjoBI,EAkoBJk3I,EAAG,WACHl7K,EAAG,S,GAGJulU,SAAS,mCAAoC,CAC5CnhS,cAAiB,EACjBE,KAAQ,EACRW,UAAa,EACbi2I,EAAG,gBACHl7K,EAAG,OAhoBRC,EAAA,W,GAGCslU,SAAA,sBAAA,CACGj2U,+BAAO,GACPrM,8BAAO,GACN6iB,2BAAuB,GAkoBvB3B,uBAjoBoB,GAkoBpBoC,8BAAiC,GACjCnD,2BAA8B,GAC9BqD,8BAAiC,GAhoBlCgiC,2BAAO,GACNkF,0BAAgB,GAkoBhBjF,+BAjoB8B,IAkoB9BC,sCAAyC,IACzCuE,kCAAqC,IACrCtE,gCAAmC,IAhoBpCthC,6BAAuB,IAmoBtBk0K,GAjoBE,iCAkoBFU,GAjoBE,gCAkoBFU,GAAI,6BACJU,GAAI,yBACJU,GAAI,gCAhoBLU,GAAA,6BACCU,GAAA,gCAkoBAU,GAjoBE,6BAkoBFU,GAAI,4BACJU,IAAK,iCACLU,IAAK,wCAhoBN0F,IAAA,oCACC22J,IAAA,kCAkoBAC,IAjoBE,8B,GAooBH3Y,SAAS,oBAAqB,CAhoB9B6pB,kBAAsB,IACrBC,aAAgB,IAkoBhBC,iBAjoBgB,IAmoBhB/B,IAAK,oBACLF,IAAK,eAhoBNC,IAAA,kB,GAooBA/nB,SAjoBG,4BAA8B,CAkoBhCj2U,+BAAkC,aAClCrM,8BAAiC,aACjC6iB,2BAA8B,UA/nB9BS,8BAA2B,aAkoB3BnD,2BAjoB8B,UAkoB9BqD,8BAjoBe,aAmoBfiiC,+BAjoBwB,YAkoBxBC,sCAAyC,mBACzCuE,kCAjoBqB,eAkoBrBtE,gCAAmC,2BACnCthC,6BAAgC,S,GAGjCi+T,SAjoBQ,yBAAgB,CAkoBvB,iCACA,wCACA,oCACA,4B,EAGDA,SAjoBO,sBAAgB,CAkoBtBlwV,uBAjoBsB,EAkoBtBC,2BAjoB8B,EAkoB9B0qB,EAAG,yBACHC,EAjoBE,4B,GAooBHslU,SAAS,qCAAsC,CAhoB/C/vV,mCAAqB,EACpBC,uCAAuB,EAkoBvBuqB,EAjoBE,qCAkoBFC,EAAG,wC,GAIJslU,SAjoBQ,yBAAgB,CAkoBvB78N,uBAjoBa,EAkoBbC,2BAjoB4B,EAkoB5B3oG,EAAG,yBACHC,EAAG,4B,GAGJslU,SAAS,+BAAgC,CACxC5vV,kCAAqC,EACrCC,qCAAwC,EAhoBzCoqB,EAAA,oCACCC,EAAA,sC,GAooBDslU,SAjoBK,qBAAiB,CAkoBrBgqB,oBAjoBuB,EAkoBvBC,sBAjoBqB,EAkoBrBxvV,EAAG,sBACHC,EAjoBE,uB,GAooBHslU,SAjoBG,4BAAO,CAkoBTkqB,qBAAwB,EACxB3zP,gBAAmB,EACnB4zP,wBAA2B,EAhoB5BC,kBAAmB,EAClBC,yBAA0B,EAkoB1BC,wBAjoBe,EAkoBfC,gBAjoBiB,EAmoBjB50K,EAjoBE,uBAkoBFl7K,EAjoBE,kBAkoBFC,EAjoBE,0BAkoBFC,EAAG,oBACHC,EAAG,2BACHg7K,EAAG,0BAhoBJC,EAAA,iB,GAqoBAmqJ,SAjoBO,yBAA0B,CAkoBhCwqB,oBAjoBsB,EAkoBtBC,sBAjoByB,EAkoBzBC,sBAAyB,EACzBC,uBAjoB0B,EAkoB1BC,sBAjoBe,EAkoBfC,kBAAqB,EACrBl1K,EAjoBE,sBAkoBFl7K,EAAG,wBACHC,EAAG,wBACHC,EAAG,yBAhoBJC,EAAA,wBACCg7K,EAAA,mB,GAooBDoqJ,SAjoBK,kCAAO,CAmoBX39V,sCAjoBS,GAkoBTC,mCAAsC,GACtC2zM,GAAI,wCACJU,GAAI,oC,GAGLqpJ,SAjoBQ,yCAAmB,CAkoB1B/pJ,GAjoBE,cAkoBFU,GAjoBI,kB,GAooBLqpJ,SAjoBO,2BAA6B,CAkoBnC+J,wBAjoBmB,wBAkoBnB+gB,wBAAyB,wBACzBhhB,oBAjoBY,oBAkoBZihB,sBAjoBmB,wBAkoBnBC,sBAAyB,wBACzBC,kBAAqB,mB,GAGtBjrB,SAAS,kBAAmB,CAC3BtmY,eAAgB,gBAChB4rE,eAAgB,gBAhoBjB51E,WAAO,YACNw7Z,kBAAgB,cAkoBhBtf,UAjoBE,WAkoBFuf,iBAAkB,iB,GAGnBnrB,SAjoBS,cAAW,CAkoBnBvlU,EAjoBE,iBAkoBFC,EAjoBE,aAkoBFhhE,eAjoBM,iBAkoBNhK,WAjoBY,Y,GAooBbswY,SAjoBO,6BAA0B,CAmoBhC77L,iCAAoC,EACpCC,8BAjoBqB,EAkoBrBC,gCAjoBW,EAkoBX03B,gCAjoB+B,EAkoB/BqvL,kCAjoB8B,EAkoB9B3wV,EAAG,mCACHC,EAAG,gCACHC,EAAG,kCACHC,EAAG,kCACHg7K,EAAG,mC,GAGJoqJ,SAAS,oCAAqC,CAC7CvlU,EAAG,8BACHC,EAAG,+BAhoBJC,EAAA,gCACCC,EAAA,6BAkoBAg7K,EAjoBE,+B,GAooBHoqJ,SAAS,8BAA+B,CAhoBxC/jK,kCAAiC,GAChCC,oCAAmC,GAkoBnCE,kCAjoBc,GAkoBdD,oCAjoBW,GAkoBXkvL,mCAAsC,GACtC1sL,oCAjoBuC,GAkoBvC2sL,4CAjoBuC,GAkoBvCC,iCAAoC,GACpCC,4CAA+C,GAC/Cv1K,GAjoBE,oCAkoBFU,GAjoBI,sCAkoBJU,GAAI,oCACJU,GAAI,sCACJU,GAjoBI,qCAkoBJU,GAAI,sCACJU,GAAI,8CACJU,GAjoBI,mCAkoBJU,GAAI,6C,GAGL+kJ,SAAS,qCAAsC,CAC9C/pJ,GAAI,cAhoBTU,GAAA,kBACDU,GAAA,mBACIU,GAAA,kBAkoBEU,GAAI,oBACJU,GAAI,iBAjoBNU,GAAA,oBAmoBEU,GAloBG,oBAmoBHU,GAloBG,uB,GAGL+kJ,SAAS,yBAAgB,CACzBtqK,2BAAA,GACEC,6BAAS,GAmoBTC,2BAA8B,GAC9BC,6BAAgC,GAjoBhCC,4BAAwB,GAmoBxBE,6BAAgC,GAChCD,qCAAwC,GACxCkgB,GAAI,6BACJU,GAAI,+BACJU,GAAI,6BACJU,GAAI,+BACJU,GAAI,8BAjoBTU,GAAA,+BACCU,GAAA,sC,GAGGmmJ,SAAO,eAAA,CAmoBNyrB,eAAgB,KAjoBjBC,cAAS,IACRC,eAAc,KACdC,iBAAa,QACbC,gBAAe,M,GAqoBhB7rB,SAloBC,yBAAe,CAmoBf8rB,GAAM,KAjoBP1tF,EAAA,IACC2tF,GAAA,KACAC,QAAA,QACAC,OAAA,M,GAqoBDjsB,SAloBC,mBAAkB,CAClB9/C,YAAA,EACAgsE,QAAA,EACAC,OAAA,EACAC,SAAA,C,GAqoBDpsB,SAloBI,yBAAA,CACHqsB,uBAAG,EACHC,wBAAG,EACHC,uBAAG,EACHC,uBAAK,EACLC,wBAAK,EACLC,uBAAK,C,GAqoBN1sB,SAloBM,uBAAA,CACLvlU,EAAA,8BAmoBAC,EAAG,qCACHC,EAAG,2BAhoBHgyV,4BAAsB,EACtBC,mCAA+B,EAC/BC,yBAAkB,C,GAqoBnB7sB,SAloBC,gBAAsB,CACtB3lU,QAAA,EACAC,eAAA,EAmoBAC,UAAa,EAjoBbC,aAAM,EAENC,EAAA,UACAC,EAAA,iBACAC,EAAA,YACAC,EAAA,c,GAqoBDolU,SAAS,gBAAiB,CACzBvlU,EAAK,kBAjoBNE,EAAA,qBACCC,EAAA,kB,GAqoBDolU,SAAS,qBAAsB,CAjoB9BvlU,EAAG,8BACHC,EAAG,2BACHC,EAAG,0B,GAGJqlU,SAAS,YAAA,CACRnwR,GAAA,UACAF,GAAA,UACAG,GAAA,SAmoBAC,GAAM,U,GAGPiwR,SAloBK,0BAAA,CAmoBJ8sB,8BAAiC,EACjCC,oCAAuC,EAjoBxCC,iCAAS,C,GAqoBThtB,SAAS,mBAAoB,CAjoB5BitB,yBAAI,YACJC,yBAAI,YAmoBJC,wBAA2B,WAC3BC,sBAAyB,SAjoB1BC,yBAAS,YACRC,6BAAG,gBACHC,yBAAG,YACHC,yBAAG,W,GAqoBJxtB,SAloBI,uBAAA,CACHytB,SAAG,EACHC,aAAG,EAmoBHC,cAAiB,EACjBC,oBAAuB,EAjoBvBC,iBAAA,EACAC,4BAAiB,EACjBC,iBAAkB,EAClBC,2BAAO,EACPC,4BAAa,EACbC,mBAAoB,GAmoBpBC,oBAAuB,E,GAGxBnuB,SAloBC,+BAAU,CACVvlU,EAAA,WACAC,EAAA,eAmoBAC,EAAG,gBAjoBHC,EAAG,sBACHg7K,EAAG,mBACHC,EAAG,8BAmoBHC,EAAG,mBACHC,EAAG,6BAjoBJC,EAAA,8BACCC,GAAA,qBACAC,GAAA,qB,GAqoBD8pJ,SAloBK,yBAAA,CACJvlU,EAAI,iBACJC,EAAI,iB,GAqoBLslU,SAAS,yBAA0B,CAjoBnCvlU,EAAA,cACCC,EAAA,c,GAqoBDslU,SAloBC,iBAAuB,CACvBx7R,wBAAmB,EACnBC,mBAAY,EAmoBZC,kBAAqB,C,GAGtBs7R,SAloBI,sBAAA,CACHpjX,0BAAG,EACH8/J,yBAAG,EACHi5D,EAAG,4BAmoBHl7K,EAAK,0B,GAGNulU,SAloBC,oBAAc,EAAA,EAooBfA,SAAS,iCAAkC,EAAA,EAE3CA,SAloBC,aAAA,CACAhqJ,EAAA,8BAmoBAD,EAAG,8BACHD,EAAG,6BAjoBJD,EAAA,8BACCD,EAAA,2BACAh7K,EAAA,sBACAD,EAAA,4BACAD,EAAA,0BACAD,EAAA,kBAEA2zV,4BAAA,EACAC,4BAAA,EACAj6R,2BAAA,EACAC,4BAAA,EACAy3G,yBAAA,EACAW,oBAAA,EACAV,0BAAA,EACAF,wBAAA,EACAG,gBAAA,C,GAqoBDg0J,SAloBC,gBAAA,CAooBAplU,EAAK,6BAjoBNF,EAAA,wBACCC,EAAG,2BACHk7K,EAAI,wBACJD,EAAI,2B,GAuoBLoqJ,SAloBK,wBAAA,CACJsuB,oBAAI,IACJ7tL,sBAAI,IACJ8tL,yBAAI,IACJr8S,2BAAI,IACJn1C,0BAAI,IACJprB,sBAAI,IACJ68W,mBAAI,IACJC,yBAAI,G,GAqoBLzuB,SAAS,sBAAuB,CAC/BvrC,yBAA0B,MAjoB3BC,+BAAS,MACRC,2BAAA,K,GAqoBDqrC,SAloBC,4BAAA,CAmoBAr5U,UAAa,CACX54C,KAAM,YAjoBT1lB,GAAA,EACC6M,OAAA,GAmoBEw5Z,wBAAyB,K,EAhoB3BhoW,WAAA,CAmoBE34C,KAAM,aACN1lB,GAAI,EAjoBP6M,OAAS,GACRw5Z,wBAAA,K,EAooBApjQ,UAAa,CACXv9I,KAAM,YAjoBT1lB,GAAA,EACC6M,OAAA,EACAw5Z,wBAAA,K,EAooBA3zV,aAAgB,CAjoBjBhtD,KAAS,eACR1lB,GAAA,GACA6M,OAAA,KACAw5Z,wBAAA,K,IAsoBD1uB,SAAS,yBAA0B,CAjoBlCvlU,EAAA,CACApyE,GAAA,EACA8c,KAAM,M,EAENu1D,EAAA,CACAryE,GAAA,EAmoBE8c,KAAM,M,EAhoBTw1D,EAAA,CACCtyE,GAAA,EACA8c,KAAA,M,IAsoBD66X,SAloBC,0BAAuB,CAmoBvBvlU,EAAK,CAjoBL1sD,KAAM,YACN1lB,GAAA,EACA6M,OAAO,GACPw5Z,wBAAS,K,EAETh0V,EAAA,CAmoBE3sD,KAAM,aACN1lB,GAAI,EAjoBP6M,OAAS,GACRw5Z,wBAAoB,K,EAEpB9zV,EAAA,CACA7sD,KAAA,YAmoBE1lB,GAAI,EAjoBN6M,OAAA,EACAw5Z,wBAAiB,K,EAEjBr4K,GAAA,CAmoBEtoO,KAAM,eAjoBR1lB,GAAA,GACA6M,OAAA,KACAw5Z,wBAAmB,U,IAsoBpB1uB,SAloBC,oBAAqB,CAmoBrBvlU,EAAG,0BAjoBHC,EAAA,0BACAC,EAAA,2BACAC,EAAA,wBAooBA+zV,wBAA2B,EAjoB3BC,wBAA2B,EAC3Bj3D,yBAAqB,EAmoBrBC,sBAAyB,C,GAG1BooC,SAAS,cAAe,CAjoBvB6uB,kBAAA,IACAC,6BAAsB,IACtBlma,YAAA,IACAuG,iBAAA,IAmoBA0W,kBAAqB,IAjoBrBkpZ,uCAAiC,IACjCvsZ,oBAAA,IACAwsZ,uBAAA,IAmoBAC,yBAA4B,IAjoB5BC,sBAAK,IACLC,0BAAK,IACLC,2BAAK,IACLC,eAAK,IAmoBLC,mBAAsB,IAjoBtBC,sBAAK,IACLC,mBAAK,IACLC,kBAAK,IACLC,4BAAK,IAmoBLjlZ,qBAAwB,IAjoBxBklZ,sBAAK,IACLC,0BAAK,IACLlgW,mBAAK,IACL17D,mBAAK,IACL+rB,4BAAK,IACLw4H,wBAAK,IAmoBLs3Q,uCAA0C,IAjoB1CC,yBAAK,IACLtka,kBAAK,IACLuka,cAAK,IACLC,yBAAK,IAmoBLC,6BAAgC,IAjoBhCC,kCAAK,IACLC,8BAAK,IAmoBLC,gCAAmC,IAjoBnCC,yCAAK,IACLC,4BAAK,IAmoBLC,8BAAiC,IAjoBjCC,gBAAK,IACLC,2BAAK,IACLC,+BAAK,IACLlhK,2BAAK,IAmoBLmhK,yCAA4C,IAjoB5CC,uCAAK,IACLxsY,+BAAK,IACLysY,yBAAK,IAmoBLC,qBAAwB,IACxBC,6BAAgC,IAChCC,yBAA4B,IAjoB7BC,oCAAmC,IAClCC,8BAAwB,IACxBC,yCAA0B,G,GAqoB3BnxB,SAAS,cAAe,CAhoBvBlZ,qCAAmB,uCACnBG,sCAAwB,wCACxBz6L,0BAAqB,4BACrBC,4BAAyB,8BAmoBzBC,oCAAqC,sCACrCC,2CAA4C,6CAjoB7CykO,0CAA0B,4CACzBC,8CAAY,gDACZC,wCAAS,0CACTpkO,wCAAW,0CAmoBXN,mCAAoC,qCACpCwL,sCAAuC,wCAjoBxCm5N,yCAA2B,2CAC1BnoL,gFAAW,kFACX5B,0DAAqB,4DACrBtvC,0DAAoB,4DAmoBpBC,wEAAyE,0EACzEE,gFAAiF,kFAMjF3vI,8BAA+B,gCA/nB/BotI,0BAAI,4BACJqpC,4BAAI,8BAmoBJj8M,wDAAyD,0DACzDsuY,mCAAoC,qCAjoBrCC,mCAAqC,qCACpCC,gCAAyB,kCACzBC,qCAA+B,uCAmoB/BrjY,oCAAqC,sCACrCsjY,oCAAqC,sCAjoBtCC,yCAAkC,2CACjCv5N,qCAAgB,uCAChBw5N,oCAAgB,sCAmoBhBC,4CAA6C,8CAC7CC,gCAAiC,kCAjoBlCC,0CAAiC,4CAChC58B,wCAAQ,0CACR68B,qEAAS,uEACTC,yDAAW,2DACXC,mDAAY,qDACZC,oDAAU,sDACVhgR,uDAAW,yDAmoBXC,kEAAmE,oEACnEh+D,8BAA+B,gCAjoBhCC,uCAAS,yCACR+9U,0CAAY,4CACZC,mDAAW,qDACXC,mCAAG,qCACHv6M,sDAAG,wDAmoBHw6M,sCAAuC,wCACvCtjY,uDAAwD,yDAjoBzD4mK,4BAAS,8BACRU,8BAAiB,gCACjBC,gCAAQ,kCACRwhB,qCAAa,uCACbw6M,gDAAG,kDACHC,8BAAG,gCACHC,6DAAG,+DAmoBHC,2DAA4D,6DAC5Dr2P,qCAAsC,uCAjoBvCs2P,4CAAgC,8CAO/BC,2CAAiC,6CAGjCC,mDAAkC,qDAClCC,iDAAyC,mDACzCC,mDAAqC,qDACrCC,oCAAmC,sCAGnCC,yCAAI,2CACJhpT,qCAAI,uCACJC,sCAAI,wCACJvK,uDAAI,yDACJwK,kDAAI,oDACJC,wDAAI,0DACJC,mCAAI,qCACJthB,6CAAI,+CAGJzoE,2CAAK,6CACL4yY,gDAAK,kDACL3vB,qCAAK,uCACLO,oCAAK,sCAmoBLC,yCAA0C,2CAC1CC,2CAA4C,6CAjoB7CC,kDAA8B,oDAC7BkvB,2DAAqB,6DACrBC,kFAAgB,oFAChBC,iDAAoB,mDAmoBpBC,4DAA6D,8DA/nB7D9jN,6DAAK,+DAmoBLC,2EAA4E,6EAC5EC,6EAA8E,+EAjoB/EC,0DAAsC,4DACrCC,oDAAkC,sDAClCC,4DAAiC,8DACjCC,sDAA8B,wDAG9ByjN,uDAA8B,yDAG9BvoO,qCAAkC,sC,GAqoBnC60M,SAloBC,iBAAA,CACA2zB,iCAAgC,mCAmoBhCC,yBAA0B,2BAC1BC,2BAA4B,6BAjoB7BC,6BAAS,+BACRC,2BAAA,6BACAC,iCAAA,mCACAC,yCAAA,0C,GAqoBDj0B,SAAS,sBAAuB,CAjoBhCrkJ,IAAA,6BACCoB,IAAA,4B,GAsoBDijJ,SAAS,cAAe,CACvB/pJ,GAAI,4BAjoBLU,GAAA,2BACCU,GAAA,4BACAU,GAAA,0BACAU,GAAG,kCACHU,GAAG,2BAmoBHU,GAAI,iDACJU,GAAI,iDACJU,GAAI,iDAjoBLU,IAAA,yBACCU,IAAA,0BACAU,IAAA,wB,GAqoBDijJ,SAAS,uBAAwB,CAChCtmY,eAAkB,GAjoBnBqwY,wBAAS,GACRzkU,eAAA,GACAwlV,wBAAA,GACAp7Z,WAAG,GACHo6Y,oBAAG,E,GAGJ9J,SAAS,gBAAA,CACRk0B,KAAA,EACAC,OAAA,EACA1tC,MAAG,C,GAqoBJuZ,SAAS,0BAA2B,CAjoBpCvlU,EAAA,QACCC,EAAA,WACAC,EAAA,UACAC,EAAA,kBACAg7K,EAAA,U,GAqoBDoqJ,SAloBC,uBAAmB,CAmoBnBtlQ,MAAO,EAjoBPyW,QAAG,EACH12E,EAAG,QACHC,EAAG,S,GAqoBJslU,SAloBI,oBAAA,CACHo0B,MAAG,EAmoBHC,QAAS,EACT55V,EAAG,QACHC,EAAG,S,GAGJslU,SAloBC,4BAAyB,CACzBvlU,EAAA,iBACAC,EAAA,iB,GAqoBDslU,SAloBI,2BAAA,CACHhvP,eAAG,EACH6B,kBAAG,C,GAqoBJmtP,SAloBI,kCAAA,CAmoBHtlQ,MAAS,EACTC,SAAY,EAjoBb6xH,QAAS,EAmoBR8nK,gBAAmB,EAjoBnBC,SAAA,C,GAqoBDv0B,SAloBK,+BAAA,CAmoBJvlU,EAAK,iBACLC,EAAK,mBAjoBNC,EAAA,mBACCC,EAAI,iBACJg7K,EAAI,iB,GAGLoqJ,SAAS,oCAA4B,CACpCvlU,EAAA,iBACAC,EAAA,mBACAC,EAAA,kBACAC,EAAA,mBACAg7K,EAAA,gB,GAqoBDoqJ,SAAS,+BAAgC,CAjoBzC/pJ,GAAA,UACCU,GAAA,OACAU,GAAA,S,GAqoBD2oJ,SAloBC,0BAAW,CACXrqJ,EAAA,uCAmoBAl7K,EAAK,8BACLC,EAAK,gCAjoBNo7K,EAAA,2CACCC,EAAG,gC,GAsoBJiqJ,SAAS,kCAAmC,CAC3CnpL,qCAAwC,EAjoBzCF,4BAAS,EAmoBR69M,8BAAiC,EAjoBjCC,yCAAoC,EACpCC,+BAAiC,C,GAsoBlC10B,SAloBI,+BAAA,CACHrqJ,EAAG,iBACHl7K,EAAG,iBACHC,EAAG,mBACHo7K,EAAG,iBAmoBHC,EAAK,kBACLE,GAAM,e,GAGP+pJ,SAloBI,4BAAA,CACH/pJ,GAAG,gCACHU,GAAG,kCACHU,GAAG,mCAmoBHU,GAAM,kC,GAGPioJ,SAloBC,oCAAqC,CACrCl3P,8BAAA,GACA6rR,gCAAA,GACAC,iCAAA,GACAC,iCAAA,E,GAqoBD70B,SAloBC,iCAAoC,CACpC/pJ,GAAA,iBACAU,GAAI,mBACJU,GAAI,kBACJU,GAAI,e,GAqoBLioJ,SAloBK,sBAAA,CACJvlU,EAAI,0BACJC,EAAI,uCACJC,EAAI,uCAmoBJC,EAAK,6BACLg7K,EAAK,sCAjoBNC,EAAA,4BACCC,EAAI,uCACJC,EAAI,uCACJC,EAAI,6BACJC,GAAI,6BACJC,GAAI,8BACJC,GAAI,+B,GAqoBL6pJ,SAloBK,8BAAA,CAmoBJn2Y,wBAA2B,EAC3Bira,qCAAwC,EAjoBzChoa,qCAAmC,EAClChD,2BAA8B,EAC9Bira,oCAAgC,EAChC9qa,0BAAA,EACA+qa,qCAAgC,EAChCC,qCAA+B,EAC/Bt4R,2BAAA,EACAC,2BAAA,GACAs4R,4BAAI,GACJC,8BAAI,E,GAqoBLn1B,SAloBK,2BAAA,CACJvlU,EAAI,iBACJC,EAAI,mBAmoBJC,EAAK,mBACLC,EAAK,iBAjoBNg7K,EAAA,iBACCC,EAAA,kBACAC,EAAA,iBACAC,EAAA,iBACAC,EAAA,kBACAC,GAAA,gBAmoBAC,GAAM,iBACNC,GAAM,kB,GAGP6pJ,SAloBM,0BAAA,CACLrqJ,EAAA,uCACAl7K,EAAA,8BACAC,EAAA,2CAmoBAE,EAAK,kCACLi7K,EAAK,gCAjoBNC,EAAA,wCACCC,EAAA,gC,GAqoBDiqJ,SAloBC,kCAAU,CAmoBVpvL,qCAAwC,IACxCqE,4BAA+B,IAjoBhCmgN,yCAAmC,IAClCC,gCAAwB,IACxBC,+BAAyB,IACzBC,8BAAwB,IACxBC,sCAAwB,IACxBC,+BAAyB,G,GAqoB1Bz1B,SAAS,+BAAgC,CAjoBzCrqJ,EAAA,iBACCl7K,EAAG,iBACHC,EAAG,iBACHC,EAAG,mBAmoBHC,EAAK,mBAjoBLg7K,EAAA,kBACAC,EAAA,mBACAC,EAAA,iBAmoBAC,EAAK,kBACLE,GAAM,e,GAGP+pJ,SAloBC,4BAAkB,CAClBvlU,EAAA,gCACAC,EAAA,kC,GAqoBDslU,SAloBI,oCAAA,CACHvgO,8BAAG,IACHi2P,iCAAG,G,GAGJ11B,SAAS,iCAAiB,CACzBvlU,EAAK,iBACLC,EAAK,iB,GAqoBNslU,SAAS,uBAAwB,CAjoBjCvlU,EAAA,sBACCC,EAAK,uB,GAqoBNslU,SAAS,uBAAwB,CAChCvlU,EAAK,sBAjoBNC,EAAA,uB,GAqoBAslU,SAloBO,+BAAA,CACN5tR,oBAAM,IAmoBNujT,sBAAyB,G,GAG1B31B,SAloBC,2BAAiC,CACjCvlU,EAAA,QACAC,EAAA,SAmoBAC,EAAK,YACLC,EAAK,YAjoBNs7K,GAAA,SACCU,GAAA,O,GAqoBDopJ,SAloBC,mCAAyB,CACzB41B,MAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IAmoBAC,OAAU,KACVvvC,MAAS,I,GAGVuZ,SAloBC,8BAAgB,CAChBvlU,EAAA,WACAC,EAAA,U,GAqoBDslU,SAloBC,sCAAoB,CACpBi2B,SAAA,IACAC,SAAA,G,GAqoBDl2B,SAAS,qBAAsB,CAC9BvlU,EAAK,kCA7nBLo7K,EAAG,0BAgBHgB,GAAK,4B,GAqoBNmpJ,SAAS,aAAc,CAjoBvBm2B,IAAA,IACCC,IAAA,MACAC,IAAA,IACAC,IAAA,IAmoBAC,IAAK,KACLC,IAAK,IAjoBNC,IAAA,IACCC,IAAA,IACAC,IAAA,IACAC,IAAK,IACLC,IAAK,IAmoBLC,IAAK,IACLC,IAAK,MAjoBNC,IAAA,KAmoBCC,IAAK,IAjoBNC,IAAA,IAmoBCC,IAAK,IAjoBNC,IAAA,KACCC,IAAG,IACHC,IAAG,MACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IAmoBHC,IAAK,IAjoBLC,IAAA,IACAC,IAAA,MACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KAmoBAC,IAAK,KACLC,IAAK,KAjoBNC,IAAA,KAmoBCC,IAAK,KAjoBLC,IAAK,KACLC,IAAK,MACLC,IAAK,KACLC,IAAK,KACLC,IAAK,IAmoBLC,IAAK,MACLzpS,IAAK,IACL0pS,IAAK,IACLC,IAAK,MAjoBNC,IAAA,OACCC,IAAA,MACAC,IAAA,MACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,MACAC,IAAA,OACAC,IAAA,IAmoBAC,IAAK,KACLC,IAAK,IAjoBNC,IAAA,IACCC,IAAA,IACAC,IAAA,IACAC,IAAA,IAmoBAC,IAAK,IACLC,IAAK,IAjoBNC,IAAA,IACCC,IAAA,IAmoBAC,IAloBE,IAmoBFC,IAloBE,KAmoBFC,IAloBE,MAmoBFC,IAloBE,IAmoBFC,IAAK,IAjoBLC,IAAA,KAmoBAC,IAloBE,IAmoBFC,IAloBE,MAmoBFC,IAloBE,IAmoBFC,IAloBE,IAmoBFC,IAAK,IAjoBLC,IAAA,IAmoBAC,IAloBE,IAmoBFC,IAloBE,KAmoBFC,IAloBE,KAmoBFC,IAloBE,IAmoBFC,IAAK,KAjoBLC,IAAA,KAmoBAC,IAloBE,IAmoBFC,IAloBE,MAmoBFC,IAloBE,IAmoBFC,IAloBE,OAmoBFC,IAAK,MACLC,IAAK,KACLC,IAAK,KAjoBNC,IAAA,MACCC,IAAG,IAmoBHC,IAloBE,MAmoBFC,IAloBE,IAmoBFC,IAAK,KAjoBLC,IAAG,IAmoBHC,IAloBE,MAmoBFC,IAloBE,KAmoBFC,IAAK,MAjoBLC,IAAG,IAmoBHC,IAloBE,IAmoBFC,IAloBE,MAmoBFC,IAAK,KACLC,IAAK,IACLC,IAAK,MAjoBNC,IAAA,KACCC,IAAK,IAmoBLC,IAloBE,IAmoBFC,IAloBE,MAmoBFC,IAloBE,KAmoBFC,IAloBE,IAmoBFC,IAAK,KAjoBLC,IAAK,IAmoBLC,IAloBE,IAmoBFC,IAloBE,OAmoBFC,IAloBE,MAmoBFC,IAloBE,MAmoBFC,IAAK,KAjoBLC,IAAK,IAmoBLC,IAloBE,G,GAsoBH79B,SAAS,kBAAmB,CAjoB3B,SAmoBA,QACA,OACA,UACA,UACA,QACA,YACA,OAjoBD,YACC,O,EAqoBDA,SAloBI,iBAAA,CAAA,CAmoBHjyX,KAAQ,OAjoBR+vZ,eAAA,C,EACA,CACA/vZ,KAAA,SACA+vZ,eAAA,C,IAGD99B,SAAS,UAAA,CACR+9B,kBAAqB,uDACrBC,kBAAA,qEACAC,oBAAe,iF,GAqoBhBj+B,SAloBC,+BAAA,CACAnhS,cAAA,EACAq/T,QAAA,EACAC,YAAA,C,GAqoBDn+B,SAloBC,yBAA8B,CAC9BvtT,+BAAkB,GAClBC,6BAAsB,GACtBC,8BAAyB,GACzBY,4BAAsB,GACtBX,6BAAqB,GACrBG,2BAAA,GACAC,iCAAwB,GACxBF,mCAAyB,GACzBG,iCAA6B,GAC7BC,oCAAsB,IACtBC,4CAAsB,IACtBC,oCAA+B,IAC/BP,6BAA2B,IAC3BS,iCAAA,IACAD,4CAA4B,IAE5B4iK,GAAA,iCACAU,GAAA,+BACAU,GAAA,gCACAU,GAAA,8BACAU,GAAA,+BACAU,GAAA,6BACAU,GAAA,mCACAU,GAAA,qCACAU,GAAA,mCACAU,IAAA,sCACAU,IAAA,8CACAU,IAAA,sCACAU,IAAA,+BACAU,IAAA,mCACAU,IAAA,6C,GAqoBDmhJ,SAloBC,uBAAwB,CACxB9pJ,GAAA,6CACAC,GAAA,0DACAC,GAAA,+CACAC,GAAA,yDACAC,GAAA,qCAmoBAC,GAAI,uCACJK,GAAI,iDAjoBLC,GAAA,8DAmoBCC,GAAI,iDAjoBJC,GAAA,4DACAC,GAAA,yCACAC,GAAA,2CACAK,GAAA,gCACAC,GAAA,wCACAC,GAAA,2CACAC,GAAA,4DACAC,GAAA,8DACAC,GAAA,4DACAC,GAAA,8DACAC,GAAA,8DACAC,GAAA,6DACAsmL,IAAA,yDACAC,IAAA,wDACAC,IAAA,6DACAC,IAAA,2DACAC,IAAA,6DACAC,IAAA,kEAmoBAC,IAAK,sEACLC,IAAK,qEACLC,IAAK,4DACLC,IAAK,8DACLC,IAAK,qEAjoBLC,IAAA,4CAmoBAC,IAAK,+EACLC,IAAK,iFAjoBLC,IAAA,uFACAC,IAAA,iFACAC,IAAA,6CACApnL,GAAA,iDACAC,GAAA,4DACAC,GAAA,iDACAQ,GAAA,mCACAC,GAAA,qCACAC,GAAA,wCACAC,GAAA,sCACAC,GAAA,qCACAC,GAAA,2CACAK,GAAA,kCACAC,GAAA,4CACAQ,GAAA,0CACAC,GAAA,2CACAS,GAAA,4CACAC,GAAA,kDACAS,GAAA,0CACAC,GAAA,2CACAU,IAAA,kCACAC,IAAA,mCACAC,IAAA,kCACAC,IAAA,sCACAC,IAAA,mCACAC,IAAA,mCACAI,IAAA,yCACAC,IAAA,2CACAC,IAAA,wDACAC,IAAA,sDACAC,IAAA,wDAEA5hG,2CAAiC,GACjCC,wDAAsC,GACtCC,6CAAA,GACAC,uDAA+B,GAC/BE,mCAAA,GACAC,qCAAA,GAEAZ,+CAA6C,GAmoB7CC,4DAA+D,GAC/DC,+CAAkD,GAClDC,0DAA6D,GAC7DC,uCAA0C,GAC1CC,yCAA4C,GAhoB5Ca,8BAAA,GAmoBAC,sCAAyC,GACzCC,yCAA4C,GAjoB5CC,0DAAoD,GACpDC,4DAAkD,GAClDC,0DAAoD,GACpDC,4DAAqC,GAmoBrCC,4DAA+D,GAC/DC,2DAA8D,GAjoB9DC,uDAA0C,IAC1CC,sDAAsC,IACtCC,2DAAuC,IACvCC,yDAAwD,IACxDC,2DAAmD,IACnDC,gEAAyD,IACzDK,oEAAoC,IACpCC,mEAA8C,IAmoB9CC,0DAA6D,IAC7DC,4DAA+D,IAjoB/DC,mEAA4C,IAC5CqiR,0CAAA,IACA7iR,6EAAsC,IACtCC,+EAAqC,IACrCC,qFAA0C,IAC1CC,+EAA4C,IAC5C2iR,2CAAA,IACAlkR,+CAAA,GACAC,0DAAA,GACAC,+CAAkD,GAClDxB,iCAAA,GAmoBAylR,mCAAsC,GACtCC,sCAAyC,GAjoBzCC,oCAAA,GACAC,mCAAA,GACArlR,gCAAA,GACAC,0CAAA,GACAqlR,wCAAA,GACAC,yCAAA,GACAC,0CAAA,GAmoBAC,gDAAmD,GACnDvkR,wCAA2C,GAjoB3CC,yCAAA,GAmoBAukR,gCAAmC,IACnCC,iCAAoC,IAjoBpCC,gCAAA,IAmoBAC,oCAAuC,IACvCC,iCAAoC,IAjoBrCC,iCAA2B,IAC1BC,uCAAkC,IAClCC,yCAA0B,IAC1BrjR,sDAA4B,IAC5BC,oDAA8B,IAC9BC,sDAA4B,G,GAqoB7B6iP,SAAS,cAAe,CACvBugC,IAAO,CAjoBRC,QAAS,CACRC,MAAK,mB,EAooBHC,WAAc,CACZ5lP,SAAY,0BACZ6lP,UAAa,2BAjoBlBC,OAAS,uB,EAER15B,SAAI,CACAA,SAAA,c,EAEJ25B,YAAI,CACAC,YAAA,6B,EAEJ1lP,UAAI,CACA2lP,cAAA,CACCjxQ,QAAA,qC,EAELkxQ,OAAK,uBAmoBDn6B,UAAa,0BACbK,SAAY,eAjoBjB+5B,MAAS,sBACRx6B,SAAA,yBACAy6B,QAAA,yBACAC,UAAA,0BACAr6B,UAAA,0BACAs6B,OAAc,uBACdn6B,WAAA,CAmoBMo6B,KAAQ,0B,GA/nBdC,QAAQ,CACRxmP,SAAU,yB,EAooBRymP,KAAQ,CACNC,KAAQ,gBAjoBbC,iBAAS,4BACRhoP,kBAAK,6BACLioP,UAAK,qBACLC,UAAK,qBACLC,gBAAK,2BACLC,UAAK,oB,EAooBH9a,UAAa,CAjoBhB+a,MAAS,qB,EAERC,SAAS,CACNt7B,SAAA,sB,GAqoBHrrN,UAAa,CAjoBdxxC,UAAS,CACRo4R,OAAO,4B,EAEP3nW,QAAG,CACA4nW,OAAA,2BAmoBCD,OAAU,2BACVE,OAAU,0B,EAhoBdz7B,SAAK,CACL07B,YAAK,gC,EAooBHj7B,SAAY,CAjoBf+6B,OAAS,4BACRZ,KAAA,yB,GAqoBAE,KAAQ,CAjoBTC,KAAS,CACRY,cAAS,0BACTC,eAAY,2BACZC,gBAAW,4BACXC,SAAA,qBACAC,YAAY,uB,EAooBVC,SAAY,CAjoBfC,eAAS,+BACRrB,KAAK,qBACLW,OAAK,uBACLE,OAAK,sB,EAELP,UAAK,CAmoBDM,OAAU,uB,EAhoBfP,UAAS,CACRiB,iBAAK,iC,EAELf,gBAAK,CACLW,SAAK,gCACLC,YAAK,kC,EAooBHX,UAAa,CAjoBhBI,OAAS,wBACJI,eAAA,gCACAD,cAAA,+BACAF,OAAA,uB,KAwoBLliC,SAloBM,sBAAA,CAAA,CACLjyX,KAAK,UACLG,MAAK,Q,EAmoBJ,CACDH,KAAQ,UACRG,MAAS,Q,EAjoBV,CACCH,KAAA,UACAG,MAAA,Q,EACA,CACAH,KAAA,UACAG,MAAA,Q,EAqoBA,CAjoBDH,KAAS,WACRG,MAAK,Q,EACL,CACAH,KAAK,WACLG,MAAK,Q,EACL,CACAH,KAAM,WAmoBJG,MAAS,Q,EACR,CAjoBJH,KAAS,WACRG,MAAM,Q,EAGN,CAmoBEH,KAAQ,aACRG,MAAS,Q,EAjoBZ,CACCH,KAAA,aACAG,MAAA,Q,EACA,CACAH,KAAA,aAmoBEG,MAAS,Q,EACR,CAjoBJH,KAAS,aACRG,MAAM,Q,EAGN,CAmoBEH,KAAQ,aACRG,MAAS,Q,EAjoBZ,CACCH,KAAK,aACLG,MAAK,Q,EACL,CACAH,KAAK,aACLG,MAAK,Q,EACL,CACAH,KAAK,aACLG,MAAK,Q,EAGL,CACAH,KAAM,WAmoBJG,MAAS,Q,EACR,CAjoBJH,KAAS,WACRG,MAAA,Q,EACA,CACAH,KAAA,WACAG,MAAA,Q,EACA,CACAH,KAAA,WACAG,MAAA,Q,EAGA,CACAH,KAAA,WACAG,MAAA,Q,EAmoBG,CACDH,KAAQ,WAjoBXG,MAAS,Q,EACR,CACAH,KAAK,WACLG,MAAK,Q,EACL,CACAH,KAAK,WACLG,MAAK,Q,EAGL,CACAH,KAAM,WACNG,MAAM,Q,EACN,CAmoBEH,KAAQ,WACRG,MAAS,Q,EAjoBZ,CACCH,KAAK,WACLG,MAAK,Q,EACL,CACAH,KAAK,WACLG,MAAK,Q,EAqoBL,CACEH,KAAQ,YAjoBXG,MAAS,Q,EACR,CACAH,KAAA,YACAG,MAAA,Q,EACA,CACAH,KAAA,YACAG,MAAA,Q,EACA,CACAH,KAAA,YAmoBEG,MAAS,Q,EA/nBX,CACAH,KAAK,WACLG,MAAK,Q,EACL,CACAH,KAAK,WACLG,MAAK,Q,EACL,CACAH,KAAK,WACLG,MAAK,Q,EACL,CAmoBEH,KAAQ,WACRG,MAAS,Q,EA/nBX,CAmoBEH,KAAQ,aACRG,MAAS,Q,EAjoBZ,CACCH,KAAA,aACAG,MAAA,Q,EAmoBG,CACDH,KAAQ,aAjoBXG,MAAS,Q,EACR,CACAH,KAAK,aAmoBHG,MAAS,Q,EA/nBX,CACAH,KAAK,kBAmoBHG,MAAS,Q,EACR,CAjoBJH,KAAS,kBACRG,MAAK,Q,EACL,CAmoBEH,KAAQ,kBACRG,MAAS,Q,EAjoBZ,CACCH,KAAA,kBACAG,MAAA,Q,EAGD,CACCH,KAAK,YACLG,MAAK,Q,EACL,CACAH,KAAK,YACLG,MAAM,Q,EACN,CAmoBEH,KAAQ,YACRG,MAAS,Q,EAjoBZ,CACCH,KAAS,YACTG,MAAU,Q,EAGV,CACAH,KAAS,gBAmoBPG,MAAS,Q,EACR,CAjoBJH,KAAS,gBACRG,MAAK,Q,EACL,CAmoBEH,KAAQ,gBACRG,MAAS,Q,EAjoBZ,CACCH,KAAA,gBACAG,MAAA,Q,EAGD,CACCH,KAAK,WAmoBHG,MAAS,Q,EACR,CACDH,KAAQ,WACRG,MAAS,Q,EAjoBX,CAmoBEH,KAAQ,WACRG,MAAS,Q,EACR,CACDH,KAAQ,WACRG,MAAS,Q,IAIZ8xX,SAAS,4BAA6B,CACrC,CACEjyX,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,sB,EAjoBV,CAmoBE4I,KAAQ,KACR5I,KAAQ,a,EAjoBX,CACC4I,KAAK,KACL5I,KAAK,qB,EACL,CACA4I,KAAK,KACL5I,KAAK,U,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,qB,EACL,CACA4I,KAAK,KACL5I,KAAK,Y,EACL,CACA4I,KAAK,KACL5I,KAAK,W,EACL,CACA4I,KAAK,KACL5I,KAAK,gB,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,W,EACL,CACA4I,KAAK,KACL5I,KAAK,O,EACL,CACA4I,KAAK,KACL5I,KAAK,e,EACL,CACA4I,KAAK,KACL5I,KAAK,Y,EACL,CACA4I,KAAK,KACL5I,KAAK,wB,EACL,CACA4I,KAAK,KACL5I,KAAK,U,EACL,CACA4I,KAAK,KACL5I,KAAK,Y,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,c,EACL,CACA4I,KAAK,KACL5I,KAAK,U,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,O,EACL,CACA4I,KAAK,KACL5I,KAAK,kB,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,mB,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,mC,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,e,EACL,CACA4I,KAAK,KACL5I,KAAK,U,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,yB,EACL,CACA4I,KAAK,KACL5I,KAAK,uC,EACL,CACA4I,KAAK,KACL5I,KAAK,0B,EACL,CACA4I,KAAK,KACL5I,KAAK,O,EACL,CACA4I,KAAK,KACL5I,KAAK,a,EACL,CACA4I,KAAK,KAmoBH5I,KAAQ,c,EACP,CACD4I,KAAQ,KAjoBX5I,KAAS,c,EACR,CACA4I,KAAA,KACA5I,KAAA,O,EACA,CACA4I,KAAA,KACA5I,KAAA,U,EACA,CACA4I,KAAA,KACA5I,KAAA,O,EACA,CAmoBE4I,KAAQ,KACR5I,KAAQ,U,EAjoBX,CACC4I,KAAQ,KACR5I,KAAA,Y,EACC,CACD4I,KAAQ,KACR5I,KAAA,M,EAmoBG,CACD4I,KAAQ,KAjoBX5I,KAAS,Y,EACR,CACA4I,KAAA,KACA5I,KAAA,S,EAmoBG,CACD4I,KAAQ,KAjoBX5I,KAAS,kB,EACR,CACA4I,KAAA,KACA5I,KAAA,Q,EAmoBG,CACD4I,KAAQ,KAjoBX5I,KAAS,gB,EACR,CACA4I,KAAA,KACA5I,KAAA,S,EACA,CACA4I,KAAA,KACA5I,KAAA,U,EACA,CACA4I,KAAA,KACA5I,KAAA,S,EACA,CACA4I,KAAA,KACA5I,KAAA,U,EACA,CACA4I,KAAA,KACA5I,KAAA,oB,EAmoBG,CAjoBH4I,KAAI,KACJ5I,KAAI,S,EACJ,CACA4I,KAAI,KACJ5I,KAAI,S,EACJ,CACA4I,KAAI,KACJ5I,KAAI,S,EACJ,CACA4I,KAAK,KACL5I,KAAK,O,EACL,CACA4I,KAAK,KACL5I,KAAK,gB,EACL,CAmoBE4I,KAAQ,KACR5I,KAAQ,S,EAjoBX,CACC4I,KAAI,KACJ5I,KAAI,O,EACJ,CACA4I,KAAI,KACJ5I,KAAI,U,EACJ,CACA4I,KAAI,KACJ5I,KAAI,Q,EACJ,CACA4I,KAAI,KACJ5I,KAAI,S,EACJ,CACA4I,KAAI,KACJ5I,KAAI,M,EACJ,CACA4I,KAAI,KACJ5I,KAAI,6B,EACJ,CACA4I,KAAI,KACJ5I,KAAI,iC,EACJ,CACA4I,KAAK,KACL5I,KAAK,e,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,O,EACL,CACA4I,KAAK,KACL5I,KAAK,gB,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAK,KACL5I,KAAK,S,EACL,CACA4I,KAAI,KACJ5I,KAAI,e,EACJ,CACA4I,KAAI,KACJ5I,KAAI,U,EACJ,CACA4I,KAAI,KACJ5I,KAAI,O,EACJ,CACA4I,KAAI,KACJ5I,KAAI,W,EACJ,CACA4I,KAAI,KACJ5I,KAAI,W,EACJ,CACA4I,KAAI,KACJ5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,Q,EACL,CACA4I,KAAK,KACL5I,KAAK,Y,EACL,CACA4I,KAAK,KACL5I,KAAK,mB,EACL,CAmoBE4I,KAAQ,KAjoBV5I,KAAA,Q,EACA,CACA4I,KAAA,KACA5I,KAAA,8C,EACA,CACA4I,KAAA,KAmoBE5I,KAAQ,W,EAjoBV,CACA4I,KAAA,KACA5I,KAAA,M,EACA,CACA4I,KAAA,KACA5I,KAAA,e,EAmoBG,CAjoBH4I,KAAA,KACA5I,KAAA,Q,EACA,CACA4I,KAAA,KACA5I,KAAA,W,EACA,CACA4I,KAAA,KACA5I,KAAA,mC,EACA,CACA4I,KAAA,KACA5I,KAAA,U,EACA,CACA4I,KAAA,KACA5I,KAAA,S,EACA,CACA4I,KAAA,KACA5I,KAAA,O,EACA,CACA4I,KAAA,KACA5I,KAAA,S,EACA,CACA4I,KAAA,KACA5I,KAAA,W,EACA,CACA4I,KAAA,KACA5I,KAAA,S,EACA,CACA4I,KAAA,KACA5I,KAAA,Q,EACA,CACA4I,KAAA,KACA5I,KAAA,a,EACA,CACA4I,KAAA,KACA5I,KAAA,O,EACA,CACA4I,KAAA,KACA5I,KAAA,gC,EACA,CACA4I,KAAA,KACA5I,KAAA,M,EACA,CACA4I,KAAA,KACA5I,KAAA,2B,EACA,CACA4I,KAAA,KACA5I,KAAA,S,EACA,CACA4I,KAAA,KACA5I,KAAA,O,EACA,CACA4I,KAAA,KACA5I,KAAA,Q,EAmoBG,CACD4I,KAAQ,KAjoBX5I,KAAS,S,EACR,CACE4I,KAAA,KAmoBA5I,KAloBE,Q,EAmoBD,CAjoBD4I,KAAA,KAmoBA5I,KAloBE,O,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAAQ,O,EAjoBR,CAmoBA4I,KAloBE,KAmoBF5I,KAAQ,Y,EAjoBR,CAmoBA4I,KAloBE,KAmoBF5I,KAAQ,U,EAjoBR,CAmoBA4I,KAloBE,KAmoBF5I,KAloBI,U,EAmoBH,CACD4I,KAloBE,KAmoBF5I,KAloBE,S,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAloBE,uB,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAloBE,uC,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAloBI,oB,EAmoBH,CACD4I,KAAQ,KAjoBR5I,KAAA,Q,EAmoBC,CACD4I,KAAQ,KAjoBR5I,KAAQ,gB,EAmoBP,CACD4I,KAloBE,KAmoBF5I,KAloBE,Y,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAloBE,iC,EAmoBD,CACD4I,KAAQ,KAjoBR5I,KAAA,S,EAmoBC,CACD4I,KAAQ,KAjoBR5I,KAAA,a,EAmoBC,CACD4I,KAAQ,KACR5I,KAAQ,e,EAjoBV,CACE4I,KAAA,KAmoBA5I,KAloBE,W,EAmoBD,CAjoBD4I,KAAA,KAmoBA5I,KAloBE,S,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAAQ,S,EAjoBR,CAmoBA4I,KAloBE,KAmoBF5I,KAAQ,W,EAjoBR,CAmoBA4I,KAloBE,KAmoBF5I,KAloBE,Y,EAmoBD,CACD4I,KAAQ,KAjoBV5I,KAAQ,Q,EACN,CAmoBA4I,KAloBE,KAmoBF5I,KAloBE,wB,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAloBE,S,EAmoBD,CAjoBD4I,KAAA,KAmoBA5I,KAloBE,Q,EAmoBD,CACD4I,KAloBE,KAmoBF5I,KAloBE,sB,EAmoBD,CAjoBD4I,KAAA,KAmoBA5I,KAloBE,Y,EAmoBD,CAjoBD4I,KAAA,KAmoBA5I,KAloBE,c,EAmoBD,CAjoBD4I,KAAA,KAmoBA5I,KAloBE,Y,EAmoBD,CACD4I,KAAQ,KAjoBR5I,KAAA,kB,EAmoBC,CACD4I,KAloBE,KAmoBF5I,KAloBE,W,EAmoBD,CACD4I,KAAQ,KACR5I,KAAQ,M,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EAjoBX,CACC4I,KAAQ,KACR5I,KAAS,U,EACR,CACD4I,KAAQ,KACR5I,KAAS,O,EACR,CACD4I,KAAQ,KACR5I,KAAS,0B,EACR,CACD4I,KAAQ,KACR5I,KAAS,Y,EAmoBN,CACD4I,KAAQ,KAjoBV5I,KAAA,Y,EACE,CACA4I,KAAA,KAmoBA5I,KAloBC,Y,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,O,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,W,EACD,CACA4I,KAAA,KAmoBA5I,KAAQ,U,EACP,CAjoBH4I,KAAA,KACE5I,KAAQ,Q,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,Q,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,U,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,Y,EACR,CAmoBA4I,KAAQ,KACR5I,KAAQ,S,EAjoBV,CACE4I,KAAQ,KACR5I,KAAA,e,EACC,CACD4I,KAAQ,KACR5I,KAAA,O,EACC,CACD4I,KAAQ,KACR5I,KAAA,gB,EACC,CACD4I,KAAQ,KACR5I,KAAA,S,EAmoBC,CACD4I,KAAQ,KAjoBV5I,KAAA,W,EACE,CACA4I,KAAA,KAmoBA5I,KAloBC,a,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,Q,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,O,EACD,CACA4I,KAAA,KAmoBA5I,KAAQ,O,EACP,CAjoBH4I,KAAA,KACE5I,KAAQ,M,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,a,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,M,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,Q,EACR,CAmoBA4I,KAAQ,KACR5I,KAAQ,M,EAjoBV,CACE4I,KAAQ,KACR5I,KAAA,kB,EACC,CACD4I,KAAQ,KACR5I,KAAA,kB,EACC,CACD4I,KAAQ,KACR5I,KAAA,a,EACC,CACD4I,KAAQ,KACR5I,KAAA,U,EAmoBC,CACD4I,KAAQ,KAjoBV5I,KAAA,Q,EACE,CACA4I,KAAA,KAmoBA5I,KAloBC,2B,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,U,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,a,EACD,CACA4I,KAAA,KAmoBA5I,KAAQ,uB,EACP,CAjoBH4I,KAAA,KACE5I,KAAQ,U,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,O,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,U,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,O,EACR,CAmoBA4I,KAAQ,KACR5I,KAAQ,S,EAjoBV,CACE4I,KAAQ,KACR5I,KAAA,S,EACC,CACD4I,KAAQ,KACR5I,KAAA,Q,EACC,CACD4I,KAAQ,KACR5I,KAAA,oB,EACC,CACD4I,KAAQ,KACR5I,KAAA,Q,EAmoBC,CACD4I,KAAQ,KAjoBV5I,KAAA,c,EACE,CACA4I,KAAA,KAmoBA5I,KAloBC,iB,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,Y,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,O,EACD,CACA4I,KAAA,KAmoBA5I,KAAQ,Q,EACP,CAjoBH4I,KAAA,KACE5I,KAAQ,W,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,c,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,U,EACR,CAmoBA4I,KAloBC,KACD5I,KAAQ,wB,EACR,CAmoBA4I,KAAQ,KACR5I,KAAQ,U,EAjoBV,CACE4I,KAAQ,KACR5I,KAAA,c,EACC,CACD4I,KAAQ,KACR5I,KAAA,Y,EACC,CACD4I,KAAQ,KACR5I,KAAA,S,EACC,CACD4I,KAAQ,KACR5I,KAAA,S,EAmoBC,CACD4I,KAAQ,KAjoBV5I,KAAA,U,EACE,CACA4I,KAAA,KAmoBA5I,KAloBC,a,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,uB,EACD,CACA4I,KAAA,KAmoBA5I,KAloBC,a,EACD,CACA4I,KAAA,KAmoBA5I,KAAQ,c,EACP,CACD4I,KAAQ,KAjoBX5I,KAAS,sB,EACR,CACE4I,KAAQ,KACR5I,KAAQ,W,EACP,CACD4I,KAAQ,KACR5I,KAAQ,0B,EACP,CACD4I,KAAQ,KACR5I,KAAQ,M,EACP,CACD4I,KAAQ,KACR5I,KAAQ,6B,EACP,CACD4I,KAAQ,KACR5I,KAAQ,M,EACP,CACD4I,KAAQ,KACR5I,KAAQ,U,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Y,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,a,EACP,CACD4I,KAAQ,KACR5I,KAAQ,c,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,O,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Q,EACP,CACD4I,KAAQ,KACR5I,KAAQ,qB,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Q,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Q,EACP,CACD4I,KAAQ,KACR5I,KAAQ,8B,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Q,EACP,CACD4I,KAAQ,KACR5I,KAAQ,sC,EACP,CACD4I,KAAQ,KACR5I,KAAQ,e,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Y,EACP,CACD4I,KAAQ,KACR5I,KAAQ,+B,EACP,CACD4I,KAAQ,KACR5I,KAAQ,kC,EACP,CACD4I,KAAQ,KACR5I,KAAQ,W,EACP,CACD4I,KAAQ,KACR5I,KAAQ,yB,EACP,CACD4I,KAAQ,KACR5I,KAAQ,sB,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,mB,EACP,CACD4I,KAAQ,KACR5I,KAAQ,O,EACP,CACD4I,KAAQ,KACR5I,KAAQ,O,EACP,CACD4I,KAAQ,KACR5I,KAAQ,S,EACP,CACD4I,KAAQ,KACR5I,KAAQ,c,EACP,CACD4I,KAAQ,KACR5I,KAAQ,Q,EACP,CACD4I,KAAQ,KACR5I,KAAQ,U,IAsoBX66X,SAloBI,8BAAA,CAmoBH4iC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,OAmoBFC,GAloBG,SAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,MAmoBFx1L,GAloBG,MAmoBHy1L,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,KAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,MAmoBFC,GAloBG,MAmoBHC,GAloBE,MAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,GAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,SAmoBFC,GAloBG,OAmoBHC,GAloBE,QAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,SAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,MAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,SAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBFC,GAloBE,KAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBF/d,GAloBE,OAmoBFge,GAloBG,OAmoBHC,GAloBE,OAmoBFhe,GAloBE,OAmoBFie,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,MAmoBFC,GAloBG,MAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,mBAmoBHC,GAloBE,QAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,GAmoBFC,GAloBE,KAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,SAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,SAmoBFl+G,GAloBG,OAmoBHm+G,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,MAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,SAmoBFC,GAloBE,GAmoBFC,GAloBG,OAmoBHC,GAloBE,MAmoBFC,GAloBE,OAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,MAmoBFC,GAloBG,KAmoBHC,GAloBE,KAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,MAmoBHC,GAloBE,MAmoBFC,GAloBE,SAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,OAmoBHC,GAloBE,GAmoBFC,GAloBE,GAmoBFC,GAloBG,OAmoBHC,GAloBE,OAmoBFC,GAloBE,OAmoBFC,GAloBG,M,GAqoBJ7xC,SAloBI,iBAAA,CAmoBH4iC,GAloBE,cAmoBFgP,GAloBE,gBAmoBF/O,GAloBG,UAmoBHC,GAloBE,UAmoBFC,GAloBE,iBAmoBFC,GAloBG,UAmoBHC,GAloBE,SAmoBFC,GAloBE,WAmoBFC,GAloBG,aAmoBHC,GAloBE,sBAmoBFC,GAloBE,YAmoBFC,GAloBG,UAmoBHC,GAloBE,QAmoBFuO,GAloBE,sBAmoBFtO,GAloBG,YAmoBHC,GAloBE,UAmoBFC,GAloBE,aAmoBFC,GAloBG,UAmoBHC,GAloBE,UAmoBFC,GAloBE,aAmoBFC,GAloBG,WAmoBHC,GAloBE,UAmoBFC,GAloBE,UAmoBFC,GAloBG,SAmoBHC,GAloBE,QAmoBFC,GAloBE,UAmoBFC,GAloBG,SAmoBHC,GAloBE,UAmoBFwN,GAloBE,oCAmoBFvN,GAloBG,yBAmoBHC,GAloBE,WAmoBFC,GAloBE,gBAmoBFx1L,GAloBG,SAmoBHy1L,GAloBE,iCAmoBFC,GAloBE,oBAmoBFC,GAloBG,WAmoBHC,GAloBE,eAmoBFC,GAloBE,UAmoBFC,GAloBG,WAmoBHC,GAloBE,WAmoBFC,GAloBE,SAmoBFC,GAloBG,aAmoBHC,GAloBE,iBAmoBFC,GAloBE,2BAmoBFC,GAloBG,OAmoBHC,GAloBE,QAmoBFC,GAloBE,QAmoBFC,GAloBG,mBAmoBHC,GAloBE,0BAmoBFC,GAloBE,WAmoBFC,GAloBG,UAmoBHE,GAloBE,QAmoBFD,GAloBE,wCAmoBFE,GAloBG,eAmoBHC,GAloBE,aAmoBFC,GAloBE,eAmoBFC,GAloBG,UAmoBHC,GAloBE,OAmoBF8L,GAloBE,UAmoBF7L,GAloBG,SAmoBHC,GAloBE,iBAmoBFE,GAloBE,UAmoBFC,GAloBG,WAmoBHC,GAloBE,WAmoBFC,GAloBE,qBAmoBFE,GAloBG,UAmoBHC,GAloBE,QAmoBFC,GAloBE,cAmoBFC,GAloBG,oBAmoBHC,GAloBE,UAmoBFC,GAloBE,UAmoBFC,GAloBG,WAmoBHgL,GAloBE,SAmoBF/K,GAloBE,8BAmoBFC,GAloBG,gBAmoBHC,GAloBE,OAmoBFC,GAloBE,UAmoBFC,GAloBG,SAmoBHC,GAloBE,gBAmoBFC,GAloBE,mBAmoBFC,GAloBG,8BAmoBHC,GAloBE,QAmoBFC,GAloBE,SAmoBFC,GAloBG,UAmoBHC,GAloBE,UAmoBFC,GAloBE,QAmoBFC,GAloBG,YAmoBHC,GAloBE,SAmoBFC,GAloBE,YAmoBFC,GAloBG,UAmoBHC,GAloBE,aAmoBFC,GAloBE,OAmoBFC,GAloBG,YAmoBH6J,GAloBE,WAmoBF5J,GAloBE,SAmoBFC,GAloBG,gBAmoBHC,GAloBE,SAmoBFC,GAloBE,QAmoBFC,GAloBG,oCAmoBHuI,GAloBE,gCAmoBFtI,GAloBE,WAmoBFC,GAloBG,YAmoBHC,GAloBE,UAmoBFC,GAloBE,UAmoBFC,GAloBG,QAmoBHC,GAloBE,YAmoBFC,GAloBE,4BAmoBFC,GAloBG,OAmoBHC,GAloBE,UAmoBFgJ,GAloBE,cAmoBF/I,GAloBG,SAmoBHC,GAloBE,QAmoBFC,GAloBE,UAmoBFC,GAloBG,QAmoBH6I,GAloBE,SAmoBF5I,GAloBE,SAmoBFC,GAloBG,aAmoBHC,GAloBE,QAmoBFC,GAloBE,WAmoBFC,GAloBG,wCAmoBHC,GAloBE,qBAmoBFC,GAloBE,SAmoBF/d,GAloBG,aAmoBHge,GAloBE,kCAmoBFC,GAloBE,SAmoBFhe,GAloBG,UAmoBHie,GAloBE,UAmoBFC,GAloBE,UAmoBFC,GAloBG,yBAmoBHC,GAloBE,gBAmoBFC,GAloBE,YAmoBFC,GAloBG,aAmoBHC,GAloBE,QAmoBFC,GAloBE,YAmoBFC,GAloBG,aAmoBHC,GAloBE,SAmoBFC,GAloBE,WAmoBFC,GAloBG,WAmoBHC,GAloBE,OAmoBFC,GAloBE,QAmoBFC,GAloBG,mBAmoBHC,GAloBE,aAmoBFC,GAloBE,aAmoBFC,GAloBG,YAmoBHC,GAloBE,UAmoBFC,GAloBE,SAmoBFC,GAloBG,kCAmoBHC,GAloBE,uBAmoBFC,GAloBE,SAmoBFC,GAloBG,WAmoBH6G,GAloBE,aAmoBF5G,GAloBE,aAmoBFC,GAloBG,UAmoBHC,GAloBE,aAmoBFC,GAloBE,UAmoBFC,GAloBG,UAmoBHC,GAloBE,QAmoBFC,GAloBE,QAmoBFC,GAloBG,cAmoBHE,GAloBE,gBAmoBFC,GAloBE,cAmoBFC,GAloBG,YAmoBHC,GAloBE,QAmoBFC,GAloBE,UAmoBFC,GAloBG,OAmoBHC,GAloBE,iBAmoBFC,GAloBE,2BAmoBFC,GAloBG,SAmoBHC,GAloBE,OAmoBFC,GAloBE,WAmoBFC,GAloBG,QAmoBHC,GAloBE,wBAmoBFC,GAloBE,SAmoBFC,GAloBG,mBAmoBHC,GAloBE,WAmoBFC,GAloBE,OAmoBFC,GAloBG,cAmoBHC,GAloBE,WAmoBFC,GAloBE,SAmoBFC,GAloBG,WAmoBHC,GAloBE,cAmoBFC,GAloBE,QAmoBFC,GAloBG,UAmoBHC,GAloBE,UAmoBFE,GAloBE,qBAmoBFC,GAloBG,SAmoBHyE,GAloBE,mBAmoBFxE,GAloBE,eAmoBFC,GAloBG,wBAmoBHC,GAloBE,cAmoBFuE,GAloBE,eAmoBFtE,GAloBG,4BAmoBHC,GAloBE,mCAmoBFl+G,GAloBE,QAmoBFm+G,GAloBG,aAmoBHC,GAloBE,wBAmoBFC,GAloBE,eAmoBFE,GAloBG,UAmoBHD,GAloBE,SAmoBFE,GAloBE,aAmoBFC,GAloBG,eAmoBHC,GAloBE,YAmoBF8D,GAloBE,eAmoBF7D,GAloBG,WAmoBHC,GAloBE,WAmoBFC,GAloBE,kBAmoBFC,GAloBG,UAmoBHC,GAloBE,eAmoBFC,GAloBE,+CAmoBFyD,GAloBG,cAmoBHxD,GAloBE,QAmoBFC,GAloBE,YAmoBFC,GAloBG,QAmoBHC,GAloBE,WAmoBFC,GAloBE,yBAmoBFC,GAloBG,YAmoBHC,GAloBE,SAmoBFC,GAloBE,cAmoBFC,GAloBG,uBAmoBHC,GAloBE,SAmoBFC,GAloBE,aAmoBFC,GAloBG,+BAmoBHC,GAloBE,WAmoBF6C,GAloBE,cAmoBF5C,GAloBG,OAmoBHC,GAloBE,UAmoBFC,GAloBE,QAmoBFC,GAloBG,sBAmoBHE,GAloBE,UAmoBFC,GAloBE,SAmoBFC,GAloBG,eAmoBHC,GAloBE,2BAmoBFC,GAloBE,SAmoBFC,GAloBG,SAmoBHC,GAloBE,UAmoBFC,GAloBE,uBAmoBFC,GAloBG,iBAmoBHC,GAloBE,gBAmoBFC,GAloBE,uCAmoBFC,GAloBG,UAmoBHC,GAloBE,aAmoBFC,GAloBE,UAmoBFE,GAloBG,YAmoBHC,GAloBE,UAmoBFwB,GAloBE,0BAmoBFvB,GAloBG,uBAmoBHE,GAloBE,oBAmoBFC,GAloBE,iBAmoBFC,GAloBG,QAmoBHG,GAloBE,SAmoBFC,GAloBE,U,GAqoBH3xC,SAloBG,gBAAQ,CAmoBV39J,SAloBG,EAmoBHq4J,SAloBU,EAmoBVlO,KAloBE,GAmoBFmmD,QAloBG,E,GAqoBJ3yC,SAloBI,kBAAA,CAmoBHvlU,EAloBE,uBAmoBFC,EAloBE,sBAmoBFC,EAloBG,4BAmoBHC,EAloBE,kBAmoBFg7K,EAloBE,aAmoBFC,EAloBG,kBAmoBHC,EAloBE,qBAmoBFC,EAloBE,kCAmoBFC,EAloBG,YAmoBHC,GAloBE,YAmoBFC,GAloBE,gCAmoBFC,GAloBG,iBAmoBHC,GAloBE,oBAooBFE,GAloBG,eAmoBHC,GAloBE,uBAmoBFC,GAloBE,iBAmoBFC,GAloBG,oBAmoBHC,GAloBE,YAmoBFC,GAloBE,SAmoBFC,GAloBG,YAmoBHC,GAloBE,uBAmoBFC,GAloBE,sCAmoBFC,GAloBG,kBAmoBHC,GAloBE,sBAmoBFC,GAloBE,qBAmoBFC,GAloBG,WAmoBHC,GAloBE,UAmoBFC,GAloBE,qBAmoBFC,GAloBG,kBAmoBHC,GAloBE,YAmoBFC,GAloBE,YAmoBFC,GAloBG,uBAmoBHC,GAloBE,8BAmoBFC,GAloBE,4BAmoBFC,GAloBG,iBAmoBHC,GAloBE,8BAmoBFC,GAloBE,mBAmoBFC,GAloBG,OAmoBHC,GAloBE,2BAmoBFC,GAloBE,cAmoBFC,GAloBG,oBAmoBHC,GAloBE,wBAmoBFC,GAloBE,yBAmoBFC,GAloBG,sCAmoBHC,GAloBE,sCAmoBFC,GAloBE,eAmoBFC,GAloBG,6BAmoBHC,GAloBE,YAmoBFC,GAloBE,6BAmoBFC,GAloBG,2BAmoBHC,GAloBE,YAmoBFC,GAloBE,wBAmoBFC,GAloBG,kBAmoBHC,GAloBE,4BAmoBFC,GAloBE,uCAmoBFC,GAloBG,mBAmoBHC,GAloBE,kBAmoBFC,GAloBE,mBAmoBFC,GAloBG,2BAmoBHC,GAloBE,QAmoBFC,GAloBE,aAmoBFC,GAloBG,qCAmoBHC,GAloBE,iBAmoBFC,GAloBE,eAmoBFC,GAloBG,2BAmoBHC,GAloBE,OAmoBFC,GAloBE,kBAmoBFC,GAloBG,cAmoBHC,GAloBE,aAmoBFC,GAloBE,cAmoBFC,GAloBG,cAmoBHC,GAloBE,SAmoBFC,GAloBE,iBAmoBFC,GAloBG,SAmoBHC,GAloBE,eAmoBFC,GAloBE,qBAmoBFC,GAloBG,WAmoBHC,GAloBE,UAmoBFC,GAloBE,OAmoBFC,GAloBG,kCAmoBHC,GAloBE,SAmoBFC,GAloBE,YAmoBFC,GAloBG,cAmoBHC,GAloBE,YAmoBFC,GAloBE,mBAmoBFC,GAloBG,QAmoBHC,GAloBE,0BAmoBFC,GAloBE,sBAmoBFC,GAloBG,UAmoBHC,GAloBE,0BAmoBFC,GAloBE,gBAmoBFG,GAloBG,qBAmoBHC,GAloBE,yBAmoBFC,GAloBE,iCAmoBFC,GAloBG,WAmoBHC,GAloBE,iCAmoBFC,IAloBE,WAmoBFC,IAloBG,cAmoBHC,IAloBE,YAmoBFC,IAloBE,WAooBF82L,qBAloBU,EAmoBVC,oBAloBU,EAmoBVC,0BAloBG,EAmoBHjtD,gBAloBU,EAmoBVktD,WAloBU,EAmoBVC,gBAloBG,EAmoBHC,mBAloBU,EAmoBVC,gCAloBU,EAmoBVC,UAloBG,EAmoBH1uD,UAloBU,GAmoBV2uD,8BAloBU,GAmoBVptD,eAloBG,GAmoBHC,kBAloBU,GAooBVotD,aAloBG,GAmoBHttD,qBAloBU,GAmoBVutD,eAloBU,GAmoBVC,kBAloBG,GAmoBHzuD,UAloBU,GAmoBV0uD,OAloBU,GAmoBVzsB,UAloBG,GAmoBH0sB,qBAloBU,GAmoBVC,oCAloBU,GAmoBVC,gBAloBG,GAmoBHC,oBAloBU,GAmoBVC,mBAloBU,GAmoBVC,SAAY,GACZtuD,QAAW,GACXc,mBAAsB,GAjoBvBytD,gBAAS,GACRxvD,UAAM,GACNY,UAAM,GACN6uD,qBAAM,GACNzuD,4BAAM,GACN0uD,0BAAM,GACNC,eAAM,GACNlvD,4BAAM,GACNmvD,iBAAM,GACNjvD,KAAM,GACNkvD,yBAAM,GACNC,YAAM,GACNC,kBAAM,GACNC,sBAAM,GACNC,uBAAM,GACNC,oCAAM,GACNC,oCAAM,GACNC,aAAM,GACNC,2BAAM,GACNhvD,UAAM,GACNivD,2BAAM,GACNrwD,yBAAM,GACN2B,UAAM,GACN2uD,sBAAM,GACNC,gBAAM,GACNC,0BAAM,GACNC,qCAAM,GACNC,iBAAM,GACNhvD,gBAAM,GACNivD,iBAAM,GACNC,yBAAM,GACN3vD,MAAM,GACN4vD,WAAM,GACNC,mCAAM,GACNC,eAAM,GACNC,aAAM,GACNC,yBAAM,GACN3vD,KAAM,GACN4vD,gBAAM,GACNhwD,YAAM,GACNiwD,WAAM,GACNC,YAAM,GACNC,YAAM,GACNC,OAAM,GACNC,eAAM,GACNnxD,OAAM,GACNyB,aAAM,GACN2vD,mBAAM,GACNC,SAAM,GACNC,QAAM,GACNrxD,KAAM,GACNsxD,gCAAM,GACNC,OAAM,GACN5vD,UAAM,GACN6vD,YAAM,GACNC,UAAM,GACN/vD,iBAAM,GACNE,MAAM,GACNrrB,wBAAM,GACNm7E,oBAAM,GACNC,QAAM,GACNvxD,wBAAM,GACNF,cAAM,GACN0xD,mBAAM,GACNC,uBAAM,GACN/xD,+BAAM,GACND,SAAM,GACNiB,+BAAM,GACNP,SAAM,IACNC,YAAM,IACNC,UAAM,IACNc,SAAM,G,GAqoBP4Z,SAloBO,gBAAA,CACNnd,OAAM,uBACN8zD,QAAM,2I,GAqoBP32C,SAloBO,uBAAA,CACNtW,qBAAM,EACNC,0DAAM,EACNC,wCAAM,EACNC,4CAAM,EACNC,mCAAM,EACNC,QAAM,EACNC,yBAAM,EACNC,iBAAM,EACNxD,MAAM,EAEN9wI,EAAA,uBACAl7K,EAAA,4DACAC,EAAA,0CACAC,EAAA,8CACAC,EAAA,qCACAg7K,EAAA,UACAC,EAAA,2BACAC,EAAA,mBACAC,EAAA,O,GAqoBDiqJ,SAloBO,wCAAA,CACN42C,iCAAM,EACNC,4BAAM,EACNC,oCAAM,EACNC,8BAAM,EACNC,2CAAM,EAENrhM,EAAA,mCACAl7K,EAAA,8BACAC,EAAA,sCACAC,EAAA,gCACAC,EAAA,4C,GAqoBDolU,SAloBO,2BAAA,CACNi3C,6BAAM,EACNC,+BAAM,EACNC,+BAAM,EACNC,gCAAM,EACNC,mCAAM,EAEN1hM,EAAA,+BACAl7K,EAAA,iCACAC,EAAA,iCACAE,EAAA,oC,GAqoBDolU,SAloBO,2BAAA,CACNs3C,gBAAM,EACNC,gBAAM,EACNC,qBAAM,EACNC,qBAAM,EAEN9hM,EAAA,kBACAl7K,EAAA,kBACAC,EAAA,uBACAC,EAAA,sB,GAqoBDqlU,SAloBO,2BAAA,CACN03C,0BAAM,EACNC,eAAM,EACNC,YAAM,EAENjiM,EAAA,4BACAl7K,EAAA,iBACAC,EAAA,a,GAqoBDslU,SAloBO,+BAAA,CACN63C,SAAM,EACNC,qBAAM,EAENniM,EAAA,WACAl7K,EAAA,sB,GAqoBDulU,SAloBO,uBAAA,CACN43C,YAAM,EACN3wL,MAAM,EACNggK,OAAM,EAENtxK,EAAA,cACAl7K,EAAA,QACAC,EAAA,Q,GAqoBDslU,SAloBO,qBAAA,CACNinB,OAAM,EACN8wB,IAAM,EAENpiM,EAAA,SACAl7K,EAAA,K,GAqoBDulU,SAloBO,mCAAA,CACN51M,eAAM,EACNizL,eAAM,EACN5iT,EAAA,iBACAC,EAAA,gB,GAqoBDslU,SAloBO,mBAAA,CACNlkY,yBAAM,2BACNC,gBAAM,kBACNkwO,WAAM,aACNpwO,mBAAM,qBACNkxI,eAAM,iBACNlX,oBAAM,sBACNmiT,yBAAM,2BACN12U,gBAAM,kBACNC,yBAAM,2BACNC,kBAAM,oBACNC,UAAM,YACNC,UAAM,YACNk0B,oBAAM,sBACN33B,uBAAM,yBACNE,wBAAM,0BACNC,0BAAM,4BACN65U,2BAAM,6BACN35U,yBAAM,2BACN45U,0BAAM,4BACNlnR,2BAAM,6BACNmnR,sBAAM,wBACNC,wBAAM,0BACNC,sBAAM,wBACNC,mBAAM,oB,GAqoBPt4C,SAloBO,sBAAA,CACN/5K,qBAAM,EACNE,YAAM,EAEN1rJ,EAAA,uBACAC,EAAA,a,GAqoBDslU,SAloBO,iBAAA,CACN17K,gBAAM,EACN/zH,YAAM,EACNi3H,OAAM,EAEN/sJ,EAAA,kBACAC,EAAA,cACAC,EAAA,Q,GAqoBDqlU,SAloBO,8BAAA,CACNvlU,EAAA,iBACAC,EAAA,iBACAC,EAAA,c,GAqoBDqlU,SAloBO,iBAAA,CACN56S,gBAAM,EACNmL,YAAM,EACN+7J,gBAAM,EACNE,QAAM,EAEN/xL,EAAA,kBACAC,EAAA,cACAC,EAAA,kBACAC,EAAA,S,GAqoBDolU,SAloBO,sBAAA,CAmoBNkL,QAAW,EACXrlT,OAAU,EAhoBVprB,EAAA,UACAC,EAAA,Q,GAqoBDslU,SAloBO,8BAAA,CACNvlU,EAAA,iBACAC,EAAA,mBACAC,EAAA,iBACAC,EAAA,iB,GAqoBDolU,SAloBO,wBAAA,CACNvlU,EAAA,gCACAC,EAAA,oCACAC,EAAA,6BACAC,EAAA,gCACAg7K,EAAA,+BACAC,EAAA,gCAEAn4J,8BAAM,EACN0B,kCAAM,EACNI,2BAAM,EACNM,8BAAM,EACNE,6BAAM,EACNlD,8BAAM,C,GAqoBPkjT,SAloBO,2BAAA,CACN/rO,oBAAM,EACNC,iBAAM,EACN2J,KAAM,EACNC,UAAM,EACNv3J,KAAM,EACNw3J,IAAM,EACNC,QAAM,EAENvjG,EAAA,sBACAC,EAAA,mBACAC,EAAA,OACAC,EAAA,YACAg7K,EAAA,OACAC,EAAA,MACAC,EAAA,S,GAqoBDkqJ,SAloBO,sBAAA,CACNv5M,QAAM,EACNW,OAAM,EAEN3sH,EAAA,UACAC,EAAA,Q,GAqoBDslU,SAloBO,mCAAA,CACN51M,eAAM,EACNizL,eAAM,EAEN5iT,EAAA,iBACAC,EAAA,gB,GAqoBDslU,SAloBO,wBAAA,CACN12M,QAAM,EACNivP,OAAM,EACN99W,EAAA,Q,GAqoBDulU,SAloBO,0BAAA,CACN99L,MAAM,GACN5gE,SAAM,GACNE,KAAM,GAENy0G,GAAA,QACAU,GAAA,WACAU,GAAA,M,GAsoBD2oJ,SAloBO,gBAAA,CACNw4C,oBAAM,qB,GAqoBPx4C,SAloBO,mCAAA,CACNy4C,0CAAM,GACNC,iDAAM,GACNziM,GAAA,4CACAU,GAAA,kD,GAsoBDqpJ,SAloBO,uBAAA,CACN24C,eAAM,WACNC,eAAM,WACNC,kBAAM,cACNC,iBAAM,aACNC,oBAAM,gBACNC,SAAM,iBACNC,SAAM,iBACNC,YAAM,oBACNC,WAAM,mBACNC,cAAM,qB,GAqoBPp5C,SAloBO,6BAAA,CACN91R,gCAAM,CAAA,EACN/iB,2BAAM,EAEN4uJ,EAAA,6BACAsjM,KAAM,iC,GAqoBPr5C,SAloBO,+BAAA,CACNxxL,aAAM,eACNC,aAAM,eACN6qO,iBAAM,mBACN5qO,SAAM,U,GAqoBPsxL,SAloBO,+CAAA,CACN/vP,4BAAM,6B,GAqoBP+vP,SAloBO,kBAAA,CACNp2P,UAAM,EACNnvH,MAAM,EACNk7N,EAAA,YACAl7K,EAAA,O,GAqoBDulU,SAloBO,gBAAA,CACN/mI,gBAAM,GACNsgL,mBAAM,GACN36Z,iBAAM,GACNyxW,kBAAM,E,GAqoBP2P,SAloBO,aAAA,CACNw5C,aAAM,GACN36Z,aAAM,GACN46Z,aAAM,GACN1pD,eAAM,E,GAqoBPiQ,SAloBO,uCAAA,CACN7/H,uBAAM,EACNu5K,yCAAM,EACNC,yCAAM,EACNC,mBAAM,EACNC,qBAAM,EACNC,oBAAM,EACNnkM,EAAA,yBACAl7K,EAAA,2CACAC,EAAA,2CACAC,EAAA,qBACAC,EAAA,uBACAg7K,EAAA,qB,GAqoBDoqJ,SAloBO,6BAAA,CACNtmI,sCAAM,EACNe,sCAAM,EACNs/K,iCAAM,EACNz/K,6BAAM,EACNK,6BAAM,EACNlgM,EAAA,wCACAC,EAAA,wCACAC,EAAA,mCACAC,EAAA,+BACAg7K,EAAA,8B,GAqoBDoqJ,SAloBO,+BAAA,CACN/lI,wBAAM,C,GAqoBP+lI,SAloBO,2BAAA,CACN3nB,uBAAM,GACN2hE,oBAAM,GACN/jM,GAAA,yBACAU,GAAA,qB,MAwoBN,CAAA,WACE,aAOA,SAloBIv8O,EAAM6/a,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAn4B,EAAAo4B,EAAAC,GAGA,CAAA,EAAN3zO,UAAMrpJ,SAAA7c,QAAA,KAAA,GACNwhX,EAAMhoZ,OAAA,CAAAmkZ,wBAAA,CAAA,CAAA,CAAA,EAsoBRk8B,EAloBQC,2BAAA,CAAA,CAAA,EAyoBRT,EAloBQU,UAAA,0BAAA,CACNC,YAAM,4BAAA3+Z,KAAA46C,MAAA,IAAA56C,KAAAg8O,OAAA,CAAA,EAAA,I,GAooBRgiL,EAloBQY,kBAAA,IAAA,EAmoBRZ,EAloBQa,yBAAA,UAAA,EAooBRZ,EAloBQa,aAAA3ib,KAAA4ib,CAAA,EAmoBRd,EAloBQa,aAAA3ib,KAAA6ib,CAAA,EAqoBRb,EAloBQruY,WAAA,SAAAhJ,GACN,OAAMA,EAAAoI,OAAApI,CAAA,EAAAmI,OAAA,YAAA,EAAA,E,EAqoBRkvY,EAloBQc,UAAA,SAAAC,GACN,IAAAj5T,EAAM/2E,OAAAgwY,EAAA,aAAA,CAAA,CAAA,EACN,OAAMA,EAAAj5T,EAAAnjE,QAAA,EAAAmjE,EAAA3F,OAAA,EAAA,IAAAvwE,KAAAovY,GAAA,EAAA,E,EAsoBRjB,EAloBQkB,UAAA,YAAA,CACN,YAAM,SAAAC,GAgBN,OAfAA,EAAM/2B,QAAA,CACN,CAAA,OAAM,UAAA,YAAA,KAAA,KAAA,UAGN+2B,EAAM/tT,QAAA,CACNguT,SAAM,WACNh3B,QAAM,aACNi3B,aAAM,WACNC,cAAM,YACNC,oBAAM,SACNxuZ,SAAM,GACNyuZ,WAAM,eACNC,WAAM,c,EAGAN,C,IAuoBRnB,EAASkB,UAAU,UAAW,CAC5B,YAAa,SAAUQ,GAsBrB,OAvpBHA,EAASt0H,MAAAu0H,UAAiB,oBACzBD,EAAA9tV,KAAY+tV,UAAA,mBACZD,EAAAE,QAAYD,UAAA,qBACZD,EAAQ5tV,UAAA6tV,UAAA,wBACRD,EAAAG,cAAWF,UAAA,4BAmoBTD,EAAQzzI,GAAG0zI,UAAY,4BACvBD,EAAQI,GAAGH,UAAY,2BAjoB1BD,EAASK,KAAAJ,UAAmB,YAC3BD,EAAGM,KAAAL,UAAA,YACHD,EAAG7zS,MAAA8zS,UAAA,4BACHD,EAAGO,YAAAN,UAAA,yBACHD,EAAGQ,cAAAP,UAAA,2BACHD,EAAGS,aAAAR,UAAA,0BACHD,EAAGU,YAAAT,UAAA,4BACHD,EAAG/0H,OAAAg1H,UAAA,8BACHD,EAAGW,QAAAV,UAAA,8BACHD,EAAGv1Z,KAAAw1Z,UAAA,iBACHD,EAAIY,YAAAX,UAAA,sBACJD,EAAIa,WAAAZ,UAAA,YACJD,EAAIc,YAAAb,UAAA,iBAooBKD,C,IAkBXxB,EAloBMuC,WAAA,CACJC,QAAI,iBACJC,WAAI,CAAA,C,GAooBNzC,EAloBM0C,WAAA,CAAA,CAAA,EAqoBNzC,EAloBM0C,gBAAA,EAooBNxC,EAloBMyC,qBAAA,CAEJ,OACA,yBACA,6BACA,8BACA,wC,EAyoBJ,SAloBQjC,EAAArzb,GAmoBN,MAloBM,CACJi1L,QAAI,SAAAxiL,GAKJ,OAJIzS,EAAAsiW,gBAAA,IACA7vV,EAAA2Q,QAAA,cAAA,SAAApjB,EAAAsjB,OAEJ7Q,EAAI1G,QAAA,KACA0G,C,EAEJ8ib,cAAI,SAAA9ib,GACJ,OAAIA,C,GAwoBR,SAloBQ6gb,EAAA5zb,GAooBN,IAloBE81b,EAAI,KAooBN,MAloBM,CACJ10b,SAAI,SAAA2R,GACJ,IAAIoyH,EAAA,IAAAxgF,KAUJ,OATI,CAAAmxY,GANA,IAMA3wT,EAAA2wT,IACA/ib,EAAA2Q,QAAA,4BAAA,IAEA1jB,EAAA+6B,MAAA,yCACAhoB,EAAA2Q,QAAA,4BAAA,CAAA,EAEAoya,EAAA3wT,GAGApyH,C,gQAoeRtU,QACGC,OAloBO,MAAA,EAmoBPqU,OAloBOA,CAAA,C,IAqyBZ,CAAA,WACI,aAOA,SAloBOgjb,EAmoBL/wG,EAjoBAtuT,EACAs/Z,EACAz6V,EACA85R,EACAniW,EACAiiF,EACAktC,GAwKA,IAmCG4zS,EAnCAp2b,EAAA,GAmqFH,MA9pFwC,CAAA,IAAzC8J,OAAS0D,SAAAtD,KAAAwvC,QAAA,WAAA,GACR15C,EAAAkL,IAAY,yBACZlL,EAAAqmW,WAAA,YAmoBErmW,EAAI47Z,iBAAmB,YAjoBzB57Z,EAAGqyF,QAAAryF,EAAAkL,IAAA,UACHlL,EAAGq2b,UAAAr2b,EAAAkL,IAAA,UAmoBDlL,EAAIulY,YAAc,eACyC,CAAC,IAAnDz7X,OAAO0D,SAAStD,KAAKwvC,QAAQ,eAAA,GAjoBzC15C,EAAAkL,IAAS,6BACRlL,EAAAqmW,WAAe,gBACfrmW,EAAA47Z,iBAAS,gBACT57Z,EAAAqyF,QAAUryF,EAAAkL,IAAA,UAmoBRlL,EAAIulY,YAAc,eAjoBjB,CAAA,IAAAz7X,OAAA0D,SAAAtD,KAAAwvC,QAAA,6BAAA,GACH15C,EAAGkL,IAAA,qCACHlL,EAAGkL,IAAA,qCAmoBDlL,EAAIqmW,WAAa,iBACjBrmW,EAAI47Z,iBAAmB,iBAjoB1B57Z,EAAAqyF,QAASryF,EAAAkL,IAAA,UACRlL,EAAAq2b,UAAUr2b,EAAAkL,IAAA,UACVlL,EAAAulY,YAAO,cAmoBiD,CAAC,IAA9Cz7X,OAAO0D,SAAStD,KAAKwvC,QAAQ,UAAA,GAjoBrC48Y,EAAAxsb,OAAA0D,SAAAtD,KAAAosI,OAAAxsI,OAAA0D,SAAAtD,KAAAwvC,QAAA,IAAA,EAAA,CAAA,EAAAllB,MAAA,GAAA,EAAA,GACHx0B,EAAGkL,IAAA,WAAAorb,EAAA,yBAmoBDt2b,EAAIqmW,WAAa,aACjBrmW,EAAI47Z,iBAAmB,iBAjoB1B57Z,EAAAqyF,QAASryF,EAAAkL,IAAA,UACRlL,EAAAq2b,UAAkBr2b,EAAAkL,IAAA,UAClBlL,EAAAulY,YAAkB,MACf,CAAA,IAAAz7X,OAAA0D,SAAAtD,KAAAwvC,QAAA,SAAA,GACA08Y,EAAAtsb,OAAA0D,SAAAtD,KAAAsqB,MAAA,IAAA,EAAA,GAAAA,MAAA,GAAA,EAAA,GAmoBDx0B,EAAIqmW,WAAa+vF,EACjBp2b,EAAI47Z,iBAAmBw6B,EAjoB1Bp2b,EAAAkL,IAAS,UAAAkrb,EAAoB,SAC5Bp2b,EAAAqyF,QAAAryF,EAAAkL,IAAA,UACAlL,EAAAq2b,UAAAr2b,EAAmBkL,IAAA,UACnBlL,EAAAulY,YAAc,eACQ,CAAA,IAAtBz7X,OAAA0D,SAAsBtD,KAAAwvC,QAAA,sBAAA,IACtB15C,EAAAkL,IAAA,8BACAlL,EAAAkL,IAAA,8BACAlL,EAAAqmW,WAAA,iBACArmW,EAAA47Z,iBAAmB,iBACnB57Z,EAAAqyF,QAAAryF,EAAAkL,IAAA,UACAlL,EAAAq2b,UAAAr2b,EAAqBkL,IAAA,UACrBlL,EAAAulY,YAAa,cAGbvlY,EAAAu2b,WAAA,GAKAv2b,EAAAglV,QAAA,CACAp7I,OAAAu7I,EAAAnlV,EAAAqyF,QAA8B,UAAA,GAAA,CAC9BtoD,KAAA,CAAAnmB,OAAA,MAAyBm8E,QAAA,CAAA,CAAA,C,GAEzB6qG,WAAAu6I,EAAAnlV,EAAyBqyF,QAAA,cAAA,GAAA,CACzBtoD,KAAA,CAAAnmB,OAAsB,KAAA,C,GAooBpBsqY,aAAc/oE,EAAUnlV,EAAIqyF,QAAU,iBAAkB,GAAI,CAjoB/DtoD,KAAS,CAAAnmB,OAAA,KAAA,C,GAER4gU,eAAeW,EAAAnlV,EAAAqyF,QAAA,mBAAA,GAAA,CAmoBXtoD,KAAQ,CAAEnmB,OAAQ,KAAA,C,IA3nBtB5jB,EAAA09B,QAAA,CACAqsO,MAAAo7E,EAAUnlV,EAAAqyF,QAAA,iBAAA,EAmoBRs0K,OAAQw+E,EAAUnlV,EAAIqyF,QAAU,QAAA,EAjoBlCm0K,UAAG2+E,EAAAnlV,EAAAqyF,QAAA,qCAAA,CACAlxF,GAAA,MACAE,OAAA,UAmoBCi/X,WAAY,a,EACX,CAjoBN3+X,IAAS,CAAAiiB,OAAA,KAAA,EACRjc,KAAK,CAAAic,OAAA,MAAA,EACL1iB,OAAK,CAAA0iB,OAAA,KAAA,C,GAooBHmsV,kBAAmB5qB,EAAUnlV,EAAIqyF,QAAU,qBAAA,EAC3C42K,cAAek8E,EAAUnlV,EAAIqyF,QAAU,6BAA8B,CAAEn8C,IAAK,OAAQnyB,MAAO,QAAA,CAAA,EAjoB9FqlP,sBAAS+7E,EAAkBnlV,EAAAqyF,QAAA,0BAAA,GAAA,CAC1B5pB,MAAA,CAAA7kD,OAAmB,OAAA,C,GAEnBva,KAAA87U,EAAAnlV,EAAmBqyF,QAAA,UAAA,EACnB4mQ,QAAW9T,EAAAnlV,EAAAqyF,QAAA,wBAAA,CAAAhxF,OAAA,SAAA,CAAA,EAmoBTs8B,MAAOwnT,EAAUnlV,EAAIqyF,QAAU,oBAAqB,CAAElxF,GAAI,MAAOE,OAAQ,SAAA,EAAa,CAjoBrF0oC,KAAA,CAAAnmB,OAAA,KAAA,EACAjc,KAAA,CAAAic,OAAA,MAAA,EACA1iB,OAAA,CAAA0iB,OAAA,KAAA,EACAvI,OAAA,CAAAuI,OAAA,QAAA,EAmoBCjiB,IAAO,CAAEiiB,OAAQ,KAAA,C,GAhoBtBqoH,MAASk5M,EAAAnlV,EAAAqyF,QAAuB,YAAA,CAAAlxF,GAAA,KAAA,EAAA,CAC/B4oC,KAAW,CAAAnmB,OAAA,KAAA,EACXjc,KAAU,CAAAic,OAAA,MAAA,EAmoBN1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAjoBrBvI,OAAA,CAAAuI,OAAA,QAAA,C,GAooBDqiO,YAAak/F,EAAUnlV,EAAIqyF,QAAU,cAAe,GAAI,CACtDtoD,KAAQ,CAAEnmB,OAAQ,KAAA,C,GAhoBtB4ya,UAAKrxG,EAAAnlV,EAAAqyF,QAAA,cAAA,EACLmzS,cAAKrgD,EAAAnlV,EAAAqyF,QAAA,kBAAA,EACLokW,cAAKtxG,EAAAnlV,EAAAqyF,QAAA,0BAAA,EACLmiT,gBAAKrvD,EAAAnlV,EAAAqyF,QAAA,4BAAA,EAmoBH53E,QAAS0qU,EAAUnlV,EAAIqyF,QAAU,wBAAyB,CAAElxF,GAAI,MAAOE,OAAQ,SAAA,EAAa,CAC1FM,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAjoBtC7+F,OAAS,CAAA0iB,OAAA,KAAA,EACLjc,KAAA,CAAAic,OAAA,MAAA,C,GAEHu5H,cAAGgoM,EAAAnlV,EAAAqyF,QAAA,iCAAA,CAAAlxF,GAAA,KAAA,EAAA,CACA4oC,KAAA,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACAp+F,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACAp4F,KAAA,CAAAic,OAAA,MAAA,EAmoBC1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAjoBxBvI,OAAA,CAAAuI,OAAA,QAAA,C,GAEA8iC,cAAAy+R,EAAAnlV,EAA8BqyF,QAAA,sCAC9B,CACAlxF,GAAA,MACAE,OAAA,S,EAmoBO,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAjoBzCp+F,IAAS,CAAAiiB,OAAA,MAAAm8E,QAA4B,CAAA,CAAA,EACpCp4F,KAAA,CAAAic,OAAuB,MAAA,EACvB1iB,OAAA,CAAA0iB,OAAoB,KAAA,EACpBvI,OAAQ,CAAAuI,OAAA,QAAA,C,GAERyoV,cAAQlnB,EAAAnlV,EAAAqyF,QAAA,4BAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACRM,IAAO,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACP7+F,OAAW,CAAA0iB,OAAA,KAAA,C,GAEXm8K,aAAGolJ,EAAAnlV,EAAAqyF,QAAA,qCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACAM,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACA7+F,OAAA,CAAA0iB,OAAA,KAAA,EACAjc,KAAA,CAAAic,OAAA,MAAA,C,GAEHu6F,qBAAGgnO,EAAAnlV,EAAAqyF,QAAA,oDAAA,CAAAlxF,GAAA,KAAA,EAAA,CACAQ,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAmoBCh2D,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp4F,KAAQ,CAAEic,OAAQ,MAAA,C,GAhoBtBo7K,MAAAmmJ,EAAWnlV,EAAAqyF,QAAA,mCAAA,CAAAlxF,GAAA,KAAA,EAAA,CACXQ,IAAU,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAmoBNh2D,KAAQ,CAjoBTnmB,OAAA,MACAm8E,QAAA,CAAA,EAmoBG22V,YAAa,CACXn1b,SAAU,SAASA,GA5nBxB,OALKA,EAAAmI,MAAAnI,EAAAmI,KAAoC3C,UAC5CxF,EAAkBmI,KAAA3C,QAAAxF,EAAAmI,KAAA3C,QAAAob,IAAA,SAAAnE,GAClB,OAAkB,IAAAw3W,EAAAx3W,CAAA,C,IAGfzc,EAAAmI,I,MAKH+jI,aAAU03M,EAAAnlV,EAAAqyF,QAAA,mDAAA,CACPlxF,GAAA,MAmoBCE,OAAQ,S,EACP,CAjoBNM,IAAS,CAAAiiB,OAAA,MAAAm8E,QAA2B,CAAA,CAAA,EACnCh2D,KAAS,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAET47S,YAAQx2D,EAAAnlV,EAAAqyF,QAAA,wBAAA,KAAA,CAmoBJtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAhoBtC4lS,kBAAIxgD,EAAAnlV,EAAAqyF,QAAA,sBAAA,GAAA,CACAtoD,KAAA,CAmoBEnmB,OAAQ,MACRm8E,QAAS,CAAA,EACT22V,YAAa,CAjoBXn1b,SAAA,SAAiBA,GAMzB,OALAA,EAAuBmI,MAAAnI,EAAAmI,KAAA3C,UAmoBXxF,EAASmI,KAAK3C,QAAUxF,EAASmI,KAAK3C,QAAQob,IAAI,SAASnE,GACzD,OAAO,IAAIm4a,EAAiBn4a,CAAA,C,IA/nB1Czc,EAAAmI,I,MAuoBEigK,eAAgB,CAjoBnBC,oBAASu7K,EAAwBnlV,EAAAqyF,QAAA,sCAAA,CAChClxF,GAAA,K,EACA,CACAQ,IAAA,CAAAiiB,OAAqB,MAAAm8E,QAAA,CAAA,CAAA,EACrB7+F,OAAA,CAAA0iB,OAAoB,KAAA,C,KA0oBpB5jB,EAAI8H,WAAa,CA/nBjB6ub,gBAAAxxG,EAAAnlV,EAA8BqyF,QAAA,sCAAA,CAAAhxF,OAAA,SAAA,EAAA,CAmoB1BM,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAhoBrCpkD,SAAMwpS,EAAAnlV,EAAAqyF,QAAA,0BAAA,CAAAlxF,GAAA,KAAA,EAAA,CAmoBF4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAjoBtCp4F,KAAS,CAAAic,OAAA,MAAA,EACR1iB,OAAc,CAAA0iB,OAAA,KAAA,EACdvI,OAAc,CAAAuI,OAAA,QAAA,C,GAEdjW,MAAAw3U,EAAUnlV,EAAAqyF,QAAA,uBAAA,CAAAlxF,GAAA,KAAA,EAAA,CAmoBN4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAjoBtCp4F,KAAS,CAAAic,OAAA,MAAA,EACR1iB,OAAA,CAAA0iB,OAAA,KAAA,EAmoBIvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAhoBzBmoB,MAASo5S,EAAAnlV,EAAAqyF,QAAmB,uBAAA,CAAAlxF,GAAA,KAAA,EAAA,CAC3B4oC,KAAW,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACXp+F,IAAO,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAA,CAAAic,OAAA,MAAA,EACA1iB,OAAA,CAAA0iB,OAAA,KAAA,EAmoBCvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAhoBzB7b,SAASo9U,EAAAnlV,EAAiBqyF,QAAA,kCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACzB0oC,KAAA,CAAAnmB,OAAiB,MAAAm8E,QAAA,CAAA,CAAA,EACjBp+F,IAAA,CAAAiiB,OAAoB,MAAAm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAAic,OAAkB,MAAA,EAClB1iB,OAAA,CAAA0iB,OAAmB,KAAA,EAmoBfvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAhoBzBykB,eAAS88S,EAAcnlV,EAAAqyF,QAAA,iCAAA,CAAAlxF,GAAA,KAAA,EAAA,CACtB4oC,KAAA,CAAcnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACdp+F,IAAA,CAAAiiB,OAAc,MAAAm8E,QAAA,CAAA,CAAA,EACdp4F,KAAA,CAAcic,OAAA,MAAA,EACd1iB,OAAA,CAAgB0iB,OAAA,KAAA,EAmoBZvI,OAAU,CAAEuI,OAAQ,QAAA,C,IA3nBxB5jB,EAAAgB,YAAA,CACAk1E,uBAAqBivQ,EAAAnlV,EAAAqyF,QAAA,kDAAA,CAClBlxF,GAAA,MACAE,OAAA,S,EACA,CACAM,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACAp4F,KAAA,CAAAic,OAAA,MAAA,EACA1iB,OAAA,CAAA0iB,OAAA,KAAA,EAmoBC6kD,MAAS,CAAE7kD,OAAQ,OAAA,EACnBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAhoBxBd,WAAAqiU,EAAAnlV,EAAAqyF,QAAA,qCAAuC,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACvC0oC,KAAA,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACAp+F,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAkC,CAAA,CAAA,EAClCp4F,KAAA,CAAAic,OAAA,MAAA,EACA1iB,OAAA,CAAA0iB,OAAA,KAAA,EACGvI,OAAA,CAAAuI,OAAA,QAAA,C,GAEHgza,UAAGzxG,EAAAnlV,EAAAqyF,QAAA,wBAAA,CACA1wF,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAooBDh9E,cAAeoiU,EAAUnlV,EAAIqyF,QAAU,gCAAiC,CAAElxF,GAAI,KAAA,EAAS,CACrF4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAjoBvCp+F,IAAS,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACRp4F,KAAA,CAAAic,OAAA,MAAA,EAmoBI1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAhoBxB4hC,aAAA2/R,EAAwBnlV,EAAAqyF,QAAA,+BAAA,CAAAlxF,GAAA,KAAA,EAAA,CACxB4oC,KAAA,CAAAnmB,OAAqB,MAAAm8E,QAAA,CAAA,CAAA,EACjBp+F,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACAp4F,KAAA,CAAAic,OAAA,MAAA,EAmoBA1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBiza,YAAa1xG,EAAUnlV,EAAIqyF,QAAU,+BAAgC,CAAElxF,GAAI,KAAA,EAAS,CAClF4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAjoB3Cp+F,IAAY,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACXp4F,KAAA,CAAAic,OAAA,MAAA,EAmoBQ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBkza,gBAAiB3xG,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CApoB1FlxF,GAAA,MACGyqB,KAAO,O,EACP,CAsoBKjkB,KAAQ,CAAEic,OAAQ,MAAA,C,GAnoB1Bmza,eAAgB5xG,EAAAnlV,EAAoBqyF,QAAA,kCAAyB,CAAAlxF,GAAA,KAAA,EAAA,CAsoBrD4oC,KAroBQ,CAAAnmB,OAAA,MAAAm8E,QAAmB,CAAA,CAAA,EAsoB3Bp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EApoBnB1iB,OAAU,CAAA0iB,OAAS,KAAA,EACtBvI,OAAA,CAAAuI,OAAmB,QAAA,C,GAuoBjB8pF,mBAAoBy3O,EAAUnlV,EAAIqyF,QAAU,6CAA8C,CACxFlxF,GAAI,MApoBVyqB,KAAW,O,EAsoBJ,CACDjkB,KAAQ,CAAEic,OAAQ,MAAA,C,GAEpB4pF,wBAAyB23O,EAAUnlV,EAAIqyF,QAAU,mDAAoD,CACnGlxF,GAAI,MACJyqB,KAAM,O,EApoBZ,CACEjkB,KAAA,CAAaic,OAAA,MAAA,C,GAEff,OAAAsiU,EAAmBnlV,EAAAqyF,QAAA,yBAAkB,CAAAlxF,GAAA,KAAA,EAAA,CACrC4oC,KAAA,CAAAnmB,OAAmB,MAAAm8E,QAAA,CAAA,CAAA,EAsoBbp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EApoBvCp4F,KAAc,CAAAic,OAAA,MAAA,EACd1iB,OAAc,CAAA0iB,OAAA,KAAA,EAsoBRvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAnoB1BhB,QAAAuiU,EAAsBnlV,EAAAqyF,QAAa,kCAAgB,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACjD0oC,KAAO,CAAOnmB,OAAO,MAAMm8E,QAAO,CAAA,CAAA,EAsoB9Bp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EApoBxB1iB,OAAA,CAAA0iB,OAAsB,KAAA,EAChBvI,OAAI,CAAOuI,OAAA,QAAA,C,GAuoBbo8B,aAAcmlS,EAAUnlV,EAAIqyF,QAAU,wCAAyC,CAC7ElxF,GAAI,MACJE,OAAQ,S,EApoBd,CACE0oC,KAAA,CAAanmB,OAAA,MAAUm8E,QAAW,CAAA,CAAA,EAChCp+F,IAAA,CAAUiiB,OAAA,MAAUm8E,QAAA,CAAA,CAAA,EAClBp4F,KAAC,CAAQic,OAAA,MAAA,EAsoBT1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBonD,sBAroBYm6Q,EAAAnlV,EAAAqyF,QAAA,iDAAA,CACVlxF,GAAA,MACAE,OAAA,S,EACA,CACA0oC,KAAA,CAAAnmB,OAAA,MAAqBm8E,QAAA,CAAA,CAAA,EACrBp+F,IAAA,CAAAiiB,OAAU,MAAAm8E,QAAA,CAAA,CAAA,EACVp4F,KAAA,CAAAic,OAAY,MAAA,EACZ1iB,OAAA,CAAY0iB,OAAA,KAAA,EAsoBZvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAnoBtBoza,6BAAO7xG,EAAAnlV,EAAAqyF,QAAA,yDAAA,CAsoBLlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EApoBxCp+F,IAAS,CAAAiiB,OAAU,MAAWm8E,QAAA,CAAA,CAAA,EAC5Bp4F,KAAA,CAAaic,OAAA,MAAA,EACX1iB,OAAQ,CAAM0iB,OAAA,KAAA,EACdvI,OAAQ,CAAKuI,OAAA,QAAA,C,GAEbkqC,cAAQq3R,EAAUnlV,EAAAqyF,QAAY,iCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAC9B4oC,KAAQ,CAAAnmB,OAAA,MAAcm8E,QAAY,CAAA,CAAA,EAClCp+F,IAAQ,CAAGiiB,OAAA,MAAYm8E,QAAA,CAAA,CAAA,EACvBp4F,KAAQ,CAAGic,OAAA,MAAA,EACX1iB,OAAQ,CAAK0iB,OAAA,KAAA,EACbvI,OAAQ,CAAKuI,OAAA,QAAA,C,GAEbygD,oBAAoB8gR,EAAAnlV,EAAYqyF,QAAA,uCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAChC4oC,KAAQ,CAAAnmB,OAAA,MAAcm8E,QAAY,CAAA,CAAA,EAClCp+F,IAAQ,CAAAiiB,OAAA,MAAam8E,QAAY,CAAA,CAAA,EACjCp4F,KAAQ,CAAAic,OAAY,MAAA,EACpB1iB,OAAQ,CAAA0iB,OAAO,KAAA,EACfvI,OAAQ,CAAAuI,OAAQ,QAAA,C,GAEhBo3C,kBAAQmqR,EAAYnlV,EAAYqyF,QAAA,qCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAChC4oC,KAAQ,CAAAnmB,OAAW,MAAAm8E,QAAY,CAAA,CAAA,EAC/Bp+F,IAAQ,CAAAiiB,OAAA,MAAYm8E,QAAY,CAAA,CAAA,EAsoB9Bp4F,KAAQ,CAAEic,OAAQ,MAAA,EApoBpB1iB,OAAO,CAAA0iB,OAAA,KAAA,EAsoBLvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBymC,SAAU86R,EAAUnlV,EAAIqyF,QAAU,mCAAoC,CACpElxF,GAAI,MACJE,OAAQ,UACR4lB,SAAU,YACVo5I,GAAI,K,EACH,CACDt2H,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBlJ,SAAUyqU,EAAUnlV,EAAIqyF,QAAU,mCAAoC,CAAElxF,GAAI,MAAOE,OAAQ,SAAA,EAAa,CACtG0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EApoBvCp4F,KAAA,CAAAic,OAAkB,MAAA,EAChB1iB,OAAS,CAAA0iB,OAAA,KAAA,EACTvI,OAAY,CAAAuI,OAAA,QAAA,C,GAEdoxD,eAAkBmwQ,EAAWnlV,EAAAqyF,QAAA,0CAAA,CAsoBvBlxF,GAAI,MACJE,OAAQ,S,EApoBd,CAsoBM0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EApoBxCp+F,IAAA,CAAAiiB,OAAqB,MAAAm8E,QAAA,CAAA,CAAA,EAsoBfp4F,KAAQ,CAAEic,OAAQ,MAAA,EApoBtB1iB,OAAA,CAAA0iB,OAAA,KAAA,EACAvI,OAAA,CAAAuI,OAAA,QAAA,C,GAEAoxE,cAAAmwP,EAAAnlV,EAAAqyF,QAAA,yCAAA,CACAlxF,GAAA,MAsoBIE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EApoB5BvI,OAAS,CAAAuI,OAAY,QAAA,C,GAEjBk3I,oBAAmBqqL,EAAQnlV,EAAAqyF,QAAA,gDAAA,CACzBlxF,GAAI,MACFE,OAAO,S,EAsoBN,CApoBH0oC,KAAO,CAAAnmB,OAAU,MAASm8E,QAAA,CAAA,CAAA,EAC1Bp+F,IAAO,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAsoBLp4F,KAAQ,CAAEic,OAAQ,MAAA,EApoBtB1iB,OAAA,CAAe0iB,OAAA,KAAA,EACbvI,OAAO,CAAAuI,OAAA,QAAA,C,GAuoBP4gE,mCAAoC2gQ,EAAUnlV,EAAIqyF,QAAU,iEAAkE,CAC5HlxF,GAAI,MACJE,OAAQ,S,EACP,CApoBT0oC,KAAS,CAAAnmB,OAAA,MAAsBm8E,QAAA,CAAA,CAAA,EACvBp+F,IAAA,CAAAiiB,OAAU,MAAAm8E,QAAA,CAAA,CAAA,EACZp4F,KAAA,CAAAic,OAAa,MAAA,EAsoBX1iB,OAAU,CAAE0iB,OAAQ,KAAA,EApoB1BvI,OAAO,CAAAuI,OAAA,QAAA,C,GAEH9I,gBAAgBqqU,EAAAnlV,EAAAqyF,QAAA,2CAAA,CAChBlxF,GAAM,MAsoBJE,OAroBE,S,EAsoBD,CApoBD0oC,KAAA,CAAAnmB,OAAiB,MAAAm8E,QAAA,CAAA,CAAA,EAsoBjBp+F,IAAO,CAAEiiB,OAAQ,MAroBCm8E,QAAe,CAAA,CAAA,EAsoBjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EApoBlB1iB,OAAA,CAAA0iB,OAAa,KAAA,EAsoBbvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAnoBtBxI,qBAAO+pU,EAAAnlV,EAAAqyF,QAAA,0CAAA,CAAAlxF,GAAA,KAAA,EAAA,CAsoBL4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAnoB7BlB,WAAWyiU,EAAAnlV,EAAAqyF,QAAA,qCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACR0oC,KAAA,CAsoBQnmB,OAAQ,MACRm8E,QAAS,CAAA,EAroBjB22V,YAAA,CACUn1b,SAAA,SAAAA,GAMR,OALSA,EAAOmI,MAAAnI,EAAAmI,KAAA3C,UAuoBJxF,EAASmI,KAAK3C,QAAUxF,EAASmI,KAAK3C,QAAQob,IAAI,SAASnE,GACzD,OAAO,IAAIwkI,EAAUxkI,CAAA,C,IAnoBnCzc,EAAAmI,I,IAIA/H,IAAA,CACAiiB,OAAA,MACAm8E,QAAA,CAAA,EACA22V,YAAA,CAuoBQn1b,SAAU,SAASA,GAUjB,OATIA,EAASmI,OACPnI,EAASmI,KAAKvI,GAChBI,EAASmI,KAAO,IAAI84I,EAAUjhJ,EAASmI,IAAA,EAC9B+lH,MAAM1vB,QAAQx+F,EAASmI,KAAK3C,OAAA,IACrCxF,EAASmI,KAAK3C,QAAUxF,EAASmI,KAAK3C,QAAQob,IAAI,SAASnE,GACzD,OAAO,IAAIwkI,EAAUxkI,CAAA,C,KAIpBzc,EAASmI,I,IAItB/B,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtByzC,OAAQ8tR,EAAUnlV,EAAIqyF,QAAU,iCAAkC,CAChElxF,GAAI,MACJE,OAAQ,UACR8mC,UAAW,aACX8uZ,yBAA0B,2B,EACzB,CACDltZ,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClBsza,KAAQ,CAAEtza,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,KAAA,EACpB6kD,MAAS,CAAE7kD,OAAQ,QAASm8E,QAAS,CAAA,CAAA,EACrC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBslI,aAAci8L,EAAUnlV,EAAIqyF,QAAU,+CAAgD,CACpFlxF,GAAI,MACJE,OAAQ,UACRgM,OAAQ,S,EACP,CACD08B,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBswB,mCAAoCixS,EAAUnlV,EAAIqyF,QAAU,iEAAkE,CAC5HlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBknI,2BAA4Bq6L,EAAUnlV,EAAIqyF,QAAU,uDAAwD,CAC1GlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB2lI,yBAA0B47L,EAAUnlV,EAAIqyF,QAAU,qDAAsD,CACtGlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACpC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB2nI,gCAAiC45L,EAAUnlV,EAAIqyF,QAAU,6DAA8D,CACrHlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACpC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBumI,mBAAoBg7L,EAAUnlV,EAAIqyF,QAAU,uCAAwC,CAAElxF,GAAI,KAAA,EAAS,CACjG4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACpC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB+kD,eAAgBw8Q,EAAUnlV,EAAIqyF,QAAU,mCAAoC,CAC1ElxF,GAAI,MACJqW,WAAY,a,EACX,CACDuyB,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClC7+F,OAAU,CAAE0iB,OAAQ,KAAA,C,GAEtBsmE,UAAWi7P,EAAUnlV,EAAIqyF,QAAU,qCAAsC,CACvElxF,GAAI,MACJE,OAAQ,UACRmW,WAAY,a,EACX,CACDuyB,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBwwM,cAAe+wH,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CAChFlxF,GAAI,MACJE,OAAQ,UACRmW,WAAY,a,EACX,CACDuyB,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAEnC3yD,eAAgB+3S,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CACjFlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,EACpBvG,KAAQ,CAAEuG,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAEpCliF,SAAUsnU,EAAUnlV,EAAIqyF,QAAU,mCAAoC,CACpElxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB6kD,MAAS,CAAE7kD,OAAQ,QAASm8E,QAAS,CAAA,CAAA,EACrC7+F,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB8hK,cAAey/J,EAAUnlV,EAAIqyF,QAAU,kCAAmC,CAAElxF,GAAI,KAAA,EAAS,CACvF4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB4nG,eAAgB25N,EAAUnlV,EAAIqyF,QAAU,+BAAgC,CAAE8kW,QAAS,UAAA,EAAc,CAC/Fxvb,KAAQ,CAAEic,OAAQ,MAAA,C,GAEpB+mG,QAASw6N,EAAUnlV,EAAIqyF,QAAU,2BAA4B,CAAElxF,GAAI,KAAA,EAAS,CAC1EwG,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBgkG,gBAAiBu9N,EAAUnlV,EAAIqyF,QAAU,oCAAqC,CAAElxF,GAAI,KAAA,EAAS,CAC3FQ,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBnR,eAAgB0yU,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CACjFlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBlB1iB,OAAM,CAAA0iB,OAAA,KAAA,EAuoBNvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB7R,oBAAqBozU,EAAUnlV,EAAIqyF,QAAU,iDAAkD,CAC7FlxF,GAAI,MAroBJE,OAAO,S,EACT,CACA0oC,KAAI,CAAAnmB,OAAa,MAAAm8E,QAAA,CAAA,CAAA,EACjBp+F,IAAI,CAAAiiB,OAAA,MAAmBm8E,QAAA,CAAA,CAAA,EACvBp4F,KAAI,CAAAic,OAAc,MAAA,EAClB1iB,OAAI,CAAA0iB,OAAgB,KAAA,EACpBvI,OAAI,CAAAuI,OAAc,QAAA,C,GAElBhU,sBAAUu1U,EAAAnlV,EAAAqyF,QAAA,kDAAA,CACVlxF,GAAI,MACJE,OAAI,S,EACJ,CACA0oC,KAAI,CAAAnmB,OAAc,MAAAm8E,QAAA,CAAA,CAAA,EAuoBhBp+F,IAtoBO,CAAAiiB,OAAO,MAASm8E,QAAK,CAAA,CAAA,EAC9Bp4F,KAAU,CAAAic,OAAA,OAAAm8E,QAAA,CAAA,CAAA,EACV7+F,OAAU,CAAA0iB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACV1kF,OAAI,CAAAuI,OAAa,QAAA,C,GAGjBitD,6BAA0Bs0Q,EAAAnlV,EAAAqyF,QAAA,mDAAA,CAAAlxF,GAAA,KAAA,EAAA,CAC1B4oC,KAAI,CAAAnmB,OAAc,MAAAm8E,QAAA,CAAA,CAAA,EAuoBhBp+F,IAtoBO,CAAAiiB,OAAO,MAASm8E,QAAK,CAAA,CAAA,EAC9Bp4F,KAAI,CAAAic,OAAgB,OAAAm8E,QAAc,CAAA,CAAA,EAClC7+F,OAAU,CAAA0iB,OAAA,MAAam8E,QAAS,CAAA,CAAA,EAChC1kF,OAAI,CAAAuI,OAAa,QAAA,C,GAEjBwza,kCAAwBjyG,EAAAnlV,EAAAqyF,QAAA,yDAAA,CAAAlxF,GAAA,KAAA,EAAA,CACxB4oC,KAAI,CAAAnmB,OAAgB,MAAMm8E,QAAA,CAAA,CAAA,EAC1Bp+F,IAAI,CAAAiiB,OAAc,MAAAm8E,QAAA,CAAA,CAAA,EAuoBhBp4F,KAtoBO,CAAAic,OAAO,OAASm8E,QAAK,CAAA,CAAA,EAC9B7+F,OAAI,CAAU0iB,OAAO,MAAAm8E,QAAc,CAAA,CAAA,EACnC1kF,OAAI,CAAAuI,OAAa,QAAA,C,GAEjByza,yCAAgClyG,EAAAnlV,EAAAqyF,QAAA,iEAAA,CAAAlxF,GAAA,KAAA,EAAA,CAChC4oC,KAAI,CAAAnmB,OAAc,MAAMm8E,QAAA,CAAA,CAAA,EACxBp+F,IAAI,CAAAiiB,OAAY,MAAUm8E,QAAA,CAAA,CAAA,EAC1Bp4F,KAAI,CAAAic,OAAc,OAAAm8E,QAAA,CAAA,CAAA,EAuoBhB7+F,OAtoBO,CAAA0iB,OAAO,MAASm8E,QAAa,CAAA,CAAA,EACtC1kF,OAAU,CAAAuI,OAAA,QAAA,C,GAEVnX,wBAAiB04U,EAAAnlV,EAAAqyF,QAAA,oDAAA,CACjBlxF,GAAI,MACJE,OAAI,S,EACJ,CACA0oC,KAAI,CAAAnmB,OAAc,MAAAm8E,QAAA,CAAA,CAAA,EAuoBhBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBlB1iB,OAAA,CAAA0iB,OAAa,KAAA,EAuoBbqsI,cAAiB,CAAErsI,OAAQ,OAAA,EAC3BvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB0za,0BAA2BnyG,EAAUnlV,EAAIqyF,QAAU,uDAAwD,CAroBzGlxF,GAAA,MACFE,OAAQ,S,EACN,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAY,MAAcm8E,QAAA,CAAA,CAAA,EACxBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAuoBlB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBtBvI,OAAA,CAAcuI,OAAA,QAAA,C,GAwoBd68B,sCAAuC0kS,EAAUnlV,EAAIqyF,QAAU,gDAAiD,CAroBhHhxF,OAAA,S,EACE,CAuoBAH,OAAU,CAAE0iB,OAAQ,KAAA,C,GAEtB+qI,sBAAuBw2L,EAAUnlV,EAAIqyF,QAAU,kDAAmD,CAChGlxF,GAAI,MACJE,OAAQ,S,EACP,CAroBD0oC,KAAA,CAAUnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACZp+F,IAAO,CAAAiiB,OAAU,MAAIm8E,QAAU,CAAA,CAAA,EAC/Bp4F,KAAQ,CAAAic,OAAU,MAAA,EAClB1iB,OAAW,CAAA0iB,OAAU,KAAA,EACnBqsI,cAAI,CAAArsI,OAAA,OAAA,EACJvI,OAAQ,CAAAuI,OAAA,QAAA,C,GAwoBV2za,qCAtoBGpyG,EAAAnlV,EAAAqyF,QAAA,mEAAA,CACDlxF,GAAA,MACAE,OAAQ,S,EACR,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAmB,MAAAm8E,QAAc,CAAA,CAAA,EACjCp4F,KAAA,CAAAic,OAAe,OAAUm8E,QAAI,CAAA,CAAA,EAC7B7+F,OAAA,CAAA0iB,OAAA,MAAuBm8E,QAAc,CAAA,CAAA,EACnC1kF,OAAS,CAAEuI,OAAQ,QAAA,C,GAErBkvH,uBAAoBqyM,EAAUnlV,EAAAqyF,QAAA,6CAAA,CAAAlxF,GAAA,KAAA,EAAA,CAC9B4oC,KAAS,CAAAnmB,OAAU,MAAIm8E,QAAU,CAAA,CAAA,EACjCp+F,IAAO,CAAAiiB,OAAU,MAAIm8E,QAAU,CAAA,CAAA,EAC7Bp4F,KAAQ,CAAEic,OAAQ,OAAAm8E,QAAA,CAAA,CAAA,EAClB7+F,OAAU,CAAA0iB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClB1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtB4sI,2BAtoBmB20L,EAAAnlV,EAAAqyF,QAAA,iDAAA,CAAAlxF,GAAA,KAAA,EAAA,CAuoBjB4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAO,CAAAiiB,OAAU,MAAIm8E,QAAU,CAAA,CAAA,EAC7Bp4F,KAAQ,CAAEic,OAAQ,OAAAm8E,QAAA,CAAA,CAAA,EAClB7+F,OAAU,CAAA0iB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClB1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtB1W,8BAA+Bi4U,EAAUnlV,EAAIqyF,QAAU,2DAA4D,CAroBnHlxF,GAAA,MACEE,OAAQ,S,EAuoBP,CAroBH0oC,KAAA,CAAWnmB,OAAA,MAAcm8E,QAAU,CAAA,CAAA,EACnCp+F,IAAA,CAAAiiB,OAAe,MAAUm8E,QAAI,CAAA,CAAA,EAC7Bp4F,KAAA,CAAAic,OAAe,MAAA,EACf1iB,OAAA,CAAA0iB,OAAiB,KAAA,EACjBvI,OAAS,CAAAuI,OAAU,QAAA,C,GAwoBnB4za,0BAtoBsBryG,EAAAnlV,EAAAqyF,QAAA,gDAAA,CACpBlxF,GAAA,K,EAuoBC,CAroBH4oC,KAAA,CAAAnmB,OAAe,MAAUm8E,QAAI,CAAA,CAAA,EAC3Bp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,C,GAwoB3BlyF,gCAtoBoBs3U,EAAAnlV,EAAAqyF,QAAA,qDAAA,CAClBlxF,GAAA,MACAE,OAAA,S,EAuoBC,CAroBHsG,KAAA,CAAAic,OAAe,MAAA,C,GAwoBf2kB,kBAtoBQ48S,EAAAnlV,EAAAqyF,QAAA,8CAAA,CAuoBNlxF,GAtoBE,MAuoBFE,OAtoBG,S,EAuoBF,CACD0oC,KAtoBE,CAAOnmB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EAuoB1Bp+F,IAtoBE,CAAAiiB,OAAU,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAtoBE,CAAAic,OAAY,MAAA,EAuoBd1iB,OAtoBE,CAAU0iB,OAAE,KAAA,EAuoBdvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBnd,WAtoBW0+U,EAAQnlV,EAAOqyF,QAAS,sCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACjC0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAc,MAAA,EACZ1iB,OAAS,CAAA0iB,OAAQ,KAAA,EACjBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtByjL,gBAAiB89I,EAAUnlV,EAAIqyF,QAAU,6CAA8C,CAroBvFlxF,GAAA,MACEE,OAAO,S,EACP,CACA0oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAuoBlBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAO,CAAAic,OAAU,MAAA,EACf1iB,OAAS,CAAA0iB,OAAQ,KAAA,EACjBvI,OAAQ,CAAAuI,OAAA,QAAA,C,GAwoBV6za,kBAtoBatyG,EAAAnlV,EAAAqyF,QAAA,uCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAuoBX4oC,KAtoBE,CAAAnmB,OAAa,MAAAm8E,QAAA,CAAA,CAAA,EAuoBfp+F,IAtoBI,CAAAiiB,OAAU,MAASm8E,QAAU,CAAA,CAAA,EAuoBjCp4F,KAtoBM,CAAIic,OAAA,OAASm8E,QAAQ,CAAA,CAAA,EAuoB3B7+F,OAtoBQ,CAAA0iB,OAAS,MAAKm8E,QAAU,CAAA,CAAA,EAuoBhC1kF,OAtoBU,CAAAuI,OAAO,QAAA,C,GAwoBnBwtD,yBAA0B+zQ,EAAUnlV,EAAIqyF,QAAU,+CAAgD,CAAElxF,GAAI,KAAA,EAAS,CAC/G4oC,KAtoBM,CAAAnmB,OAAO,MAASm8E,QAAA,CAAA,CAAA,EAuoBtBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EACnC7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACpC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB3iB,oBAtoBMkkV,EAAAnlV,EAAAqyF,QAAA,gDAAA,CACJlxF,GAAA,MAuoBAE,OAtoBC,S,EACD,CACA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAuoBlCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAa,MAAA,EACX1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAuoBlBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB8za,iCAtoBUvyG,EAAAnlV,EAAAqyF,QAAA,+DAAA,CAuoBRlxF,GAtoBE,MAuoBFE,OAtoBE,S,EAuoBD,CACD0oC,KAtoBI,CAAAnmB,OAAU,MAASm8E,QAAU,CAAA,CAAA,EAuoBjCp+F,IAtoBM,CAAAiiB,OAAI,MAASm8E,QAAQ,CAAA,CAAA,EAuoB3Bp4F,KAtoBQ,CAAAic,OAAS,OAAKm8E,QAAU,CAAA,CAAA,EAuoBhC7+F,OAtoBU,CAAA0iB,OAAO,MAAIm8E,QAAA,CAAA,CAAA,EAuoBrB1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB+za,0BAtoBwBxyG,EAAAnlV,EAAAqyF,QAAA,uDAAA,CAuoBtBlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAgB,MAAAm8E,QAAA,CAAA,CAAA,EACdp4F,KAAA,CAAAic,OAAA,MAAA,EAuoBA1iB,OAtoBM,CAAA0iB,OAAA,KAAA,EAuoBNvI,OAtoBG,CAAAuI,OAAA,QAAA,C,GAwoBLsjK,cAtoBci+J,EAAUnlV,EAAAqyF,QAAA,yCAAA,CAuoBtBlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBpBvI,OAAA,CAAAuI,OAAa,QAAA,C,GAwoBfwtB,eAAgB+zS,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CAroBnFlxF,GAAA,MACEE,OAAO,S,EAuoBN,CAroBH0oC,KAAU,CAAAnmB,OAAU,MAAIm8E,QAAU,CAAA,CAAA,EAChCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EACzBp4F,KAAO,CAAEic,OAAQ,MAAA,EACjB1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtB+tB,oBAAqBwzS,EAAUnlV,EAAIqyF,QAAU,iDAAkD,CAroB/FlxF,GAAA,MACEE,OAAQ,S,EACR,CACA0oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAUic,OAAE,MAAA,EAuoBZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBtBvI,OAAO,CAAAuI,OAAc,QAAA,C,GAwoBrBikI,sBAtoBmBs9L,EAAOnlV,EAASqyF,QAAA,kDAAA,CACjClxF,GAAA,MACAE,OAAA,S,EACA,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAUiiB,OAAA,MAAcm8E,QAAU,CAAA,CAAA,EAChCp4F,KAAQ,CAAEic,OAAQ,OAAOm8E,QAAS,CAAA,CAAA,EAClC7+F,OAAS,CAAA0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjC1kF,OAAU,CAAAuI,OAAQ,QAAA,C,GAwoBpBuhD,6BAtoBsBggR,EAAAnlV,EAAAqyF,QAAA,mDAAA,CAAAlxF,GAAA,KAAA,EAAA,CAuoBpB4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAgB,MAAUm8E,QAAI,CAAA,CAAA,EAC5Bp4F,KAAQ,CAAEic,OAAQ,OAAOm8E,QAAS,CAAA,CAAA,EAClC7+F,OAAS,CAAA0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjC1kF,OAAU,CAAAuI,OAAQ,QAAA,C,GAwoBpBysB,wBAtoBsB80S,EAAAnlV,EAAAqyF,QAAA,oDAAA,CAuoBpBlxF,GAAI,MACJE,OAAQ,S,EACP,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBlB1iB,OAAA,CAAA0iB,OAAc,KAAA,EAChBvI,OAAA,CAAAuI,OAAA,QAAA,C,GAwoBAg0a,qCAtoBUzyG,EAAAnlV,EAAAqyF,QAAA,4DAAA,CAAAlxF,GAAA,KAAA,EAAA,CAuoBR4oC,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,OAAAm8E,QAAA,CAAA,CAAA,EAClB7+F,OAAU,CAAE0iB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EACpB1kF,OAAS,CAAEuI,OAAQ,QAAA,C,GAwoBrBwsB,8BAA+B+0S,EAAUnlV,EAAIqyF,QAAU,2DAA4D,CAroBnHlxF,GAAA,MACEE,OAAQ,S,EACR,CACA0oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAUic,OAAE,MAAA,EAuoBZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBtBvI,OAAW,CAAAuI,OAAU,QAAA,C,GAwoBrBm0J,iBAAkBotK,EAAUnlV,EAAIqyF,QAAU,4CAA6C,CAroBvFlxF,GAAA,MACEE,OAAQ,S,EACR,CACA0oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAUic,OAAE,MAAA,EAuoBZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBtBvI,OAAA,CAAcuI,OAAA,QAAA,C,GAwoBdy0J,sBAtoBmB8sK,EAAOnlV,EAASqyF,QAAA,mDAAA,CACjClxF,GAAA,MACAE,OAAA,S,EACA,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAa,MAAUm8E,QAAI,CAAA,CAAA,EACzBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAS,CAAA0iB,OAAQ,KAAA,EACjBvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAwoBpBs0J,wBAtoBsBitK,EAAAnlV,EAAAqyF,QAAA,oDAAA,CAuoBpBlxF,GAAI,MAroBNE,OAAA,S,EACE,CACA0oC,KAAM,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBNp+F,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp4F,KAAQ,CAAEic,OAAQ,OAAAm8E,QAAA,CAAA,CAAA,EAuoBlB7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBtC1kF,OAAA,CAAAuI,OAAgB,QAAA,C,GAwoBhB80J,+BAtoB0BysK,EAASnlV,EAAAqyF,QAAA,qDAAA,CAAAlxF,GAAA,KAAA,EAAA,CACjC4oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,EAuoBpB7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBtC1kF,OAAA,CAAAuI,OAAoB,QAAA,C,GAwoBpBguD,wBAtoBQuzQ,EAAAnlV,EAAAqyF,QAAA,qDAAA,CAuoBNlxF,GAtoBC,MACDE,OAAQ,S,EAuoBP,CAroBH0oC,KAAA,CAAAnmB,OAAA,MAAyBm8E,QAAU,CAAA,CAAA,EACjCp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAM,CAAAic,OAAA,MAAA,EAuoBN1iB,OAtoBC,CAAA0iB,OAAA,KAAA,EACDvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAEpBwU,UAAQ+sT,EAAUnlV,EAAIqyF,QAAU,qCAAyC,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACvE0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB4/F,qBAAmB2hO,EAAInlV,EAAUqyF,QAAA,+DAAqE,CACpGlxF,GAAA,MACAkkH,YAAS,eACTh4G,OAAQ,S,EACR,CAIAnM,OAAI,CAAA0iB,OAAA,KAAA,C,GAyoBN4oN,oBAtoBoB24G,EAAOnlV,EAAAqyF,QAAS,gDAAA,CAClClxF,GAAA,MACAkM,OAAQ,S,EACR,CACA1L,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBh2D,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpC7+F,OAAA,CAAA0iB,OAAA,KAAA,EACEjc,KAAI,CAAAic,OAAA,MAAA,EACJ8rX,cAAQ,CAAA9rX,OAAA,OAAArZ,OAAA,CAAA8C,OAAA,gBAAA,CAAA,C,GAwoBV69X,wBAtoBoB/lD,EAAOnlV,EAASqyF,QAAA,qDAAA,CAClClxF,GAAA,MACAE,OAAQ,S,EACR,CACA0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAA,MAAA,EACE1iB,OAAI,CAAA0iB,OAAA,KAAA,EACJvI,OAAQ,CAAAuI,OAAA,QAAA,C,GAwoBV42H,uBAtoBoB2qM,EAAOnlV,EAASqyF,QAAA,oDAAA,CAClClxF,GAAA,MACAE,OAAQ,S,EACR,CACA0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAe,MAAA,EACb1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAS,CAAAuI,OAAQ,QAAA,C,GAyoBnBo1E,eAtoBcmsP,EAAQnlV,EAAAqyF,QAAA,0CAAA,CAuoBpBlxF,GAAI,MAroBNE,OAAA,S,EACE,CACAM,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCh2D,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,C,GAyoBpBrK,6BAA8ByvP,EAAUnlV,EAAIqyF,QAAU,0DAA2D,CAroBjHlxF,GAAA,MACEE,OAAQ,S,EACR,CACAM,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAClBh2D,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,C,GAGtBruB,mCAAkCyzQ,EAAAnlV,EAAAqyF,QAAA,kEAAoC,CACpElxF,GAAI,MACJE,OAAQ,S,EACR,CACA0oC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBJp+F,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACD7+F,OAAU,CAAA0iB,OAAQ,KAAA,C,GAyoBpBi0a,eAtoBc1yG,EAAQnlV,EAAAqyF,QAAA,sFAAA,CACpBylW,QAAA,WAuoBA32b,GAAI,MAroBNkM,OAAU,S,EACR,CACA08B,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAClBp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,OAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAGtBm0a,SAtoBU5yG,EAAAnlV,EAAAqyF,QAAA,mCAAA,CAuoBRlxF,GAtoBC,MACDE,OAAQ,S,EACR,GAAA,CACAM,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAClBp4F,KAAA,CAAUic,OAAE,MAAA,C,GAwoBd49E,4BAA6B2jP,EAAUnlV,EAAIqyF,QAAU,yDAA0D,CAroB/GlxF,GAAA,MACEE,OAAI,S,EACJ,CAuoBA0oC,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAS,CAAA0iB,OAAQ,KAAA,C,GAwoBnBq6E,0CAtoBsBknP,EAAAnlV,EAAAqyF,QAAA,yEAAA,CACpBlxF,GAAA,MAuoBAE,OAAQ,S,EAroBV,CACE0oC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJ7+F,OAAQ,CAAA0iB,OAAA,KAAA,EAuoBR6kD,MAtoBC,CAAA7kD,OAAA,OAAA,C,GAwoBH45E,wCAtoBmC2nP,EAAAnlV,EAAAqyF,QAAA,uEAAA,CACjClxF,GAAA,MACAE,OAAA,S,EACA,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpC7+F,OAAA,CAAA0iB,OAAA,KAAA,EACE6kD,MAAI,CAAA7kD,OAAA,OAAA,C,GAwoBNg8E,gBAtoBGulP,EAAAnlV,EAAAqyF,QAAA,2CAAA,CACDlxF,GAAA,MACAE,OAAO,S,EACP,CACA0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EACpBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBpB1iB,OAAA,CAAA0iB,OAAiB,KAAA,EACfvI,OAAI,CAAAuI,OAAA,QAAA,C,GAwoBNw4E,cAtoBG+oP,EAAAnlV,EAAAqyF,QAAA,iCAAA,CAAAlxF,GAAA,KAAA,EAAA,CACD4oC,KAAQ,CACRnmB,OAAS,MACTm8E,QAAU,CAAA,EACV22V,YAAY,CACZn1b,SAAY,SAAQA,GAMpB,OAioBUA,EAASmI,MAAQnI,EAASmI,KAAK3C,UAroB3CxF,EAAAmI,KAAsB3C,QAAUxF,EAAImI,KAAU3C,QAAAob,IAAA,SAAAnE,GAClC,OAAA,IAAQqV,EAAOrV,CAAA,C,IAGbzc,EAAQmI,I,IAIpB/H,IAAA,CACEiiB,OAAQ,MACRm8E,QAAS,CAAA,EACT22V,YAAa,CACXn1b,SAAU,SAASA,GAMjB,OALIA,EAASmI,MAAQnI,EAASmI,KAAK3C,UACjCxF,EAASmI,KAAK3C,QAAUxF,EAASmI,KAAK3C,QAAQob,IAAI,SAASnE,GACzD,OAAO,IAAIqV,EAAUrV,CAAA,C,IAGlBzc,EAASmI,I,IAItB/B,KAAO,CAAAic,OAAA,MAAA,EAuoBP1iB,OAtoBU,CAAA0iB,OAAA,KAAA,EAuoBVvI,OAtoBE,CAASuI,OAAA,QAAA,C,GAwoBb2sX,iCAtoByBprD,EAAUnlV,EAAAqyF,QAAA,uDAAA,CAAAlxF,GAAA,KAAA,EAAA,CAuoBjC4oC,KAtoBM,CAuoBJnmB,OAtoBM,MAuoBNm8E,QAtoBQ,CAAA,EAuoBR22V,YAtoBa,CAuoBXn1b,SAtoBM,SAASA,GA4oBb,OALIA,EAtoBSmI,MAAInI,EAAUmI,KAAA3C,UAuoBzBxF,EAASmI,KAAK3C,QAAUxF,EAASmI,KAAK3C,QAAQob,IAAI,SAASnE,GACzD,OAAO,IAAI09E,EAA+B19E,CAAA,C,IAGvCzc,EAASmI,I,IAloBtB/H,IAAA,CACAiiB,OAAU,MAuoBRm8E,QAAS,CAAA,EAroBb22V,YAAQ,CACFn1b,SAAA,SAAAA,GAMJ,OALQA,EAAAmI,MAAAnI,EAAAmI,KAAA3C,UACRxF,EAAWmI,KAAA3C,QAAAxF,EAAAmI,KAAA3C,QAAAob,IAAA,SAAAnE,GACX,OAAA,IAAA09E,EAA0B19E,CAAA,C,IAGjBzc,EAAQmI,I,IAIjB/B,KAAA,CACAic,OAAU,OAuoBR8ya,YAAa,CAroBjBn1b,SAAc,SAAUA,GAIrB,OAHG,MAAAA,EAAAE,SACIF,EAAAmI,KAAA,IAAAgyF,EAAAn6F,EAAAmI,IAAA,GAEPnI,EAAAmI,I,IAIDxI,OAAU,CACV0iB,OAAU,MAuoBR8ya,YAAa,CAroBjBn1b,SAAA,SAAAA,GAIE,OAHI,MAAAA,EAAAE,SACIF,EAAAmI,KAAA,IAAAgyF,EAAAn6F,EAAAmI,IAAA,GAEEnI,EAAQmI,I,IAIlB2R,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBqhE,oBAAAkgQ,EAA4BnlV,EAAAqyF,QAAc,uCAAU,CAAAlxF,GAAA,KAAA,EAAA,CAClD4oC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp4F,KAtoBC,CAAAic,OAAA,MAAA,EACD1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAS,CAAAuI,OAAQ,QAAA,C,GAwoBnB2hE,wBAtoBsB4/P,EAAAnlV,EAAAqyF,QAAA,qDAAA,CACpBlxF,GAAA,MAuoBAiF,QAAS,U,EAroBX,CACE2jC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp4F,KAtoBC,CAAAic,OAAA,MAAA,EACD1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAS,CAAAuI,OAAQ,QAAA,C,GAwoBnBza,WAtoBYg8U,EAAUnlV,EAAAqyF,QAAO,6BAAS,CAAAlxF,GAAA,KAAA,EAAA,CACpC4oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAA,MAAA,EACE1iB,OAAI,CAAA0iB,OAAA,KAAA,EACJvI,OAAQ,CAAAuI,OAAA,QAAA,C,GAwoBVg7I,SAtoBUumL,EAAUnlV,EAAAqyF,QAAO,2BAAS,CAAAlxF,GAAA,KAAA,EAAA,CAClC4oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAQ,CAAA,CAAA,EAC1Bp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB4gF,oBAtoBoB2gP,EAAOnlV,EAAAqyF,QAAS,wCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAClC4oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAQ,CAAA,CAAA,EAC1Bp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB1f,MAtoBMihV,EAAAnlV,EAAAqyF,QAAA,gCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACJM,IAAA,CAAAiiB,OAAY,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBdwsD,YAtoBY44L,EAAQnlV,EAAOqyF,QAAS,uCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CAClC0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAAQ,CAAEic,OAAQ,OAAQm8E,QAAS,CAAA,CAAA,EAroBrC7+F,OAAW,CAAA0iB,OAAU,MAAIm8E,QAAU,CAAA,CAAA,EACjC1kF,OAAI,CAAAuI,OAAA,QAAA,C,GAwoBN2sV,UAtoBEprB,EAAYnlV,EAAAqyF,QAAA,oCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CAuoBZM,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBH+7O,UAtoBWqJ,EAAQnlV,EAAAqyF,QAAgB,yBAAA,GAAA,CACjCtoD,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAQ,CAAA,CAAA,C,GAwoB5BvvF,cAtoBc20U,EAAQnlV,EAAAqyF,QAAA,yCAAA,CAuoBpBlxF,GAAI,MAroBNE,OAAA,S,EACE,CACA0oC,KAAQ,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACRp+F,IAAA,CAAAiiB,OAAY,MAAAm8E,QAAA,CAAA,CAAA,EAuoBZt3B,MAtoBC,CAAA7kD,OAAA,QAAAm8E,QAAA,CAAA,CAAA,EACDp4F,KAAQ,CAAEic,OAAQ,OAAOm8E,QAAS,CAAA,CAAA,EAClC7+F,OAAS,CAAA0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAuoBjC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB25T,qBAtoBM4H,EAAAnlV,EAAAqyF,QAAA,iDAAA,CACJlxF,GAAA,MAuoBAE,OAtoBC,S,EACD,CACA0oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAClBt3B,MAAA,CAAU7kD,OAAE,QAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,EACpB7+F,OAAU,CAAA0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAuoBlC1kF,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtBizE,aAtoBMsuP,EAAAnlV,EAAAqyF,QAAA,yCAAA,CACJlxF,GAAA,MAuoBAE,OAtoBC,S,EACD,CACAM,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAS,CAAE0iB,OAAQ,KAAA,EACnBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtB87M,gBAAiBylH,EAAUnlV,EAAIqyF,QAAU,mCAAoC,CAAElxF,GAAI,KAAA,EAAS,CAroB5FQ,IAAA,CAAAiiB,OAAe,MAAUm8E,QAAI,CAAA,CAAA,EAC3B7+F,OAAU,CAAA0iB,OAAQ,KAAA,C,GAwoBpBu1E,aAtoBYgsP,EAAQnlV,EAAAqyF,QAAA,yCAAA,CAClBlxF,GAAA,MACAE,OAAA,S,EAuoBC,CAroBH0oC,KAAA,CAAAnmB,OAAgB,MAAUm8E,QAAI,CAAA,CAAA,EAC5Bp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBlBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBpB1iB,OAAS,CAAA0iB,OAAU,KAAA,EACjBvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAyoBpB0zE,2BAA4B6tP,EAAUnlV,EAAIqyF,QAAU,yDAA0D,CAroB9GlxF,GAAA,MACEE,OAAO,S,EACP,CACA0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EACpBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBpB1iB,OAAA,CAAA0iB,OAAgB,KAAA,EACdvI,OAAI,CAAAuI,OAAA,QAAA,C,GAyoBNq/E,gBAtoBYkiP,EAAenlV,EAAAqyF,QAAS,mCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAClCQ,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjC7+F,OAAU,CAAA0iB,OAAQ,KAAA,C,GAwoBpB83J,aAtoBcypK,EAAQnlV,EAAAqyF,QAAA,gCAAA,CAAAlxF,GAAA,KAAA,EAAA,CAuoBpB4oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAqBm8E,QAAc,CAAA,CAAA,EACjCp4F,KAAI,CAAAic,OAAA,MAAA,EACJvI,OAAQ,CAAAuI,OAAA,QAAA,C,IA6oBZ5jB,EAAI02D,UAAY,CAroBd9F,cAAAu0R,EAAuBnlV,EAAAqyF,QAAc,gCAAU,CAAAlxF,GAAA,KAAA,EAAA,CAC7C4oC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp4F,KAtoBC,CAAAic,OAAA,MAAA,EACD1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAS,CAAAuI,OAAQ,QAAA,C,GAwoBnBoyH,SAtoBEmvM,EAAYnlV,EAAQqyF,QAAO,iCAAS,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACpC0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBpB1iB,OAAA,CAAA0iB,OAAA,KAAA,EACEvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAwoBpBld,UAtoBUy+U,EAAUnlV,EAAAqyF,QAAQ,oCAAS,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACnC0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EAC3Bp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBpB1iB,OAAA,CAAA0iB,OAAA,KAAA,EACEvI,OAAU,CAAAuI,OAAQ,QAAA,C,IA6oBtB5jB,EAtoBI8qD,aAAU,CAuoBZvF,YAtoBW4/R,EAAQnlV,EAAOqyF,QAAS,uCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACjC0oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAQ,CAAA,CAAA,EAC1Bp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAO,CAAA,CAAA,EAC3Bp4F,KAAA,CAAUic,OAAE,MAAA,EAuoBZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBtBvI,OAAA,CAAAuI,OAAA,QAAA,C,GAwoBAo0a,iBAtoBU7yG,EAAAnlV,EAAAqyF,QAAA,6CAAA,CAuoBRlxF,GAtoBC,MACDE,OAAQ,S,EACR,CACA0oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAAic,OAAiB,MAAA,EACjB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB4zI,6BAtoBM2tL,EAAAnlV,EAAAqyF,QAAA,0DAAA,CACJlxF,GAAA,MAuoBAE,OAtoBC,S,EACD,CACA0oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAClBp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB20I,wBAtoBU4sL,EAAAnlV,EAAAqyF,QAAA,oDAAA,CAuoBRlxF,GAtoBC,MACDE,OAAA,S,EAuoBC,CAroBH0oC,KAAA,CAAAnmB,OAAA,MAAuBm8E,QAAU,CAAA,CAAA,EAC/Bp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAQ,CAAAic,OAAA,MAAA,EAuoBR1iB,OAtoBC,CAAA0iB,OAAA,KAAA,EACDvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAwoBpBu8H,iBAtoBYglM,EAAQnlV,EAAAqyF,QAAA,6CAAA,CAClBlxF,GAAA,MACAE,OAAA,S,EACA,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACEp4F,KAAI,CAAAic,OAAA,MAAA,EACJ1iB,OAAQ,CAAA0iB,OAAA,KAAA,EAuoBRvI,OAtoBC,CAAAuI,OAAA,QAAA,C,GAwoBH28H,wBAtoBmB4kM,EAAgBnlV,EAAAqyF,QAAA,8CAAA,CAAAlxF,GAAA,KAAA,EAAA,CACjC4oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAQ,CAAA,CAAA,EAC1Bp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAO,CAAA,CAAA,EAC3Bp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,EAuoBpB7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBtC1kF,OAAA,CAAAuI,OAAA,QAAA,C,GAwoBA+9H,+BAtoB0BwjM,EAASnlV,EAAAqyF,QAAA,sDAAA,CAAAlxF,GAAA,KAAA,EAAA,CACjC4oC,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAQ,CAAA,CAAA,EAC1Bp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAO,CAAA,CAAA,EAC3Bp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,EAuoBpB7+F,OAAU,CAAE0iB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBtC1kF,OAAA,CAAAuI,OAAA,QAAA,C,GAwoBAm9H,sBAtoBmBokM,EAAOnlV,EAASqyF,QAAA,oDAAA,CACjClxF,GAAA,MACAE,OAAA,S,EACA,CAuoBA0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAAm8E,QAA+B,CAAA,CAAA,EAC7Bp4F,KAAI,CAAAic,OAAA,MAAA,EACJ1iB,OAAQ,CAAA0iB,OAAA,KAAA,EAuoBRvI,OAtoBC,CAAAuI,OAAA,QAAA,C,IA6oBL5jB,EAtoBE21B,MAAA,CAuoBAkR,UAtoBMs+S,EAAAnlV,EAAAqyF,QAAA,8BAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CAuoBJ0oC,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EACzBp4F,KAAO,CAAEic,OAAQ,MAAA,EAuoBjB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAroBtBvI,OAAA,CAAAuI,OAAA,QAAA,C,GAwoBAkvL,uBAtoBUqyI,EAAAnlV,EAAAqyF,QAAA,4CAAA,CAuoBRlxF,GAtoBC,MACDE,OAAQ,S,EAuoBP,CAroBHsG,KAAA,CAAAic,OAAmB,MAAA,C,GAyoBnBgS,eAtoBGuvT,EAAAnlV,EAAAqyF,QAAA,mCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACD0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,EACpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAyoBtB6nB,oBAtoBoB05S,EAAOnlV,EAAAqyF,QAAS,wCAAA,CAClClxF,GAAA,MACAE,OAAQ,S,EACR,CACA0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAiB,MAAA,EACf1iB,OAAI,CAAA0iB,OAAA,KAAA,EACJvI,OAAQ,CAAAuI,OAAA,QAAA,C,GAwoBVgpB,WAtoBYu4S,EAAQnlV,EAAAqyF,QAAgB,uBAAA,CAAAlxF,GAAA,KAAA,EAAA,CAClC4oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAClBp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB4Z,UAtoBU2nT,EAAUnlV,EAAAqyF,QAAO,sBAAS,CAAAlxF,GAAA,KAAA,EAAA,CAClC4oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAQ,CAAA,CAAA,EAC1Bp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB8f,gBAtoBYyhT,EAAenlV,EAAAqyF,QAAS,6BAAA,CAAAlxF,GAAA,KAAA,EAAA,CAClC4oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAQ,CAAA,CAAA,EAC1Bp4F,KAAA,CAAUic,OAAE,MAAA,EACZ1iB,OAAU,CAAE0iB,OAAQ,KAAA,EAuoBpBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAEtB+d,UAtoBMwjT,EAAAnlV,EAAAqyF,QAAA,uBAAA,CAAAlxF,GAAA,KAAA,EAAA,CACJ4oC,KAAQ,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp+F,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAS,CAAA0iB,OAAQ,KAAA,EACjBvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAyoBpB69F,qBAAsB0jO,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CAroBzFlxF,GAAA,MACEE,OAAI,S,EACJ,CAuoBA0oC,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EACzBp4F,KAAO,CAAEic,OAAQ,MAAA,EACjB1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtBsoL,WAAYi5I,EAAUnlV,EAAIqyF,QAAU,+BAAgC,CAAElxF,GAAI,MAAOE,OAAQ,SAAA,EAAa,CAroBtG0oC,KAAA,CAAAnmB,OAAA,MAA2Bm8E,QAAA,CAAA,CAAA,EACzBp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAQ,CAAAic,OAAA,MAAA,EAuoBR1iB,OAtoBC,CAAA0iB,OAAA,KAAA,EACDvI,OAAU,CAAAuI,OAAQ,QAAA,C,IA6oBtB5jB,EAtoBIkrD,UAAI,CAuoBNpoC,WAtoBUqiU,EAAAnlV,EAAAqyF,QAAA,mCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CAuoBR0oC,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EACzBp4F,KAAO,CAAEic,OAAQ,MAAA,EACjB1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAU,CAAEuI,OAAQ,QAAA,C,GAwoBtBs8J,qBAAsBilK,EAAUnlV,EAAIqyF,QAAU,0CAA2C,CAAElxF,GAAI,KAAA,EAAS,CAroBxG4oC,KAAA,CAAAnmB,OAAgB,MAAUm8E,QAAI,CAAA,CAAA,EAC5Bp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAQ,CAAAic,OAAA,MAAA,EAuoBR1iB,OAtoBC,CAAA0iB,OAAA,KAAA,EACDvI,OAAU,CAAAuI,OAAQ,QAAA,C,GAwoBpB6hC,MAtoBE0/R,EAAUnlV,EAAQqyF,QAAA,8BAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CAClB0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EACpBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAAQ,CAAEic,OAAQ,MAAA,EAroBpB1iB,OAAA,CAAA0iB,OAAqB,KAAA,EACnBvI,OAAI,CAAAuI,OAAA,QAAA,C,GAwoBN89D,WAtoBGyjQ,EAAAnlV,EAAAqyF,QAAA,oCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACDM,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,EACzBp4F,KAAO,CAAEic,OAAQ,MAAA,C,GAwoBnBu1N,aAtoBcgsG,EAAQnlV,EAAAqyF,QAAA,+BAAA,CACpB1wF,IAAA,CAAAiiB,OAAY,KAAA,C,GAEdmzD,aAAAouQ,EAAuBnlV,EAAAqyF,QAAc,sCAAU,CAAAlxF,GAAA,MAAAE,OAAmD,SAAA,EAAA,CAChG0oC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp4F,KAtoBC,CAAAic,OAAA,MAAA,EACD1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAS,CAAAuI,OAAQ,QAAA,C,GAwoBnBk3F,OAtoBEqqO,EAAYnlV,EAAQqyF,QAAO,+BAAS,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACpC0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBnCp4F,KAAA,CAAAic,OAAA,MAAA,EACE1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAS,CAAAuI,OAAQ,QAAA,C,GAwoBnBouN,aAtoBcmzG,EAAQnlV,EAAAqyF,QAAgB,qCAAA,CAAAlxF,GAAA,MAAAE,OAAA,SAAA,EAAA,CACpC0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp4F,KAAQ,CAAEic,OAAQ,MAAA,C,GAEpBq0a,eAtoBM9yG,EAAAnlV,EAAAqyF,QAAA,gCAAA,CAAAlxF,GAAA,KAAA,EAAA,CACJ4oC,KAAQ,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp+F,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp4F,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAS,CAAA0iB,OAAQ,KAAA,EACjBvI,OAAU,CAAAuI,OAAQ,QAAA,C,IA6oBtB5jB,EAtoBIk+H,UAAU,CAuoBZy9G,mBAtoBcwpG,EAAenlV,EAAAqyF,QAAS,kBAAA,GAAA,CACpCtoD,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,C,GAEtBy8I,sBAAA2oG,EAA+BnlV,EAAAqyF,QAAc,qBAAU,GAAA,CACrDtoD,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBNmiC,eAtoBGijN,EAAAnlV,EAAAqyF,QAAA,yCAAA,CACDlxF,GAAA,MACAE,OAAO,S,EACP,CACA0oC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EACpBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,C,GAEtBm4V,eAAA/yG,EAAkBnlV,EAAUqyF,QAAI,4BAAU,GAAA,CACxCtoD,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBVo4V,gBAtoBYhzG,EAAenlV,EAAAqyF,QAAS,6BAAA,GAAA,CAClCtoD,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,C,GAwoBpBqpF,mBAtoBc+7J,EAAQnlV,EAAAqyF,QAAA,gCAAA,GAAA,CAuoBpBtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAuBm8E,QAAU,CAAA,CAAA,C,GAwoBjC0rG,cAtoBU05I,EAAAnlV,EAAAqyF,QAAA,2BAAA,GAAA,CAuoBRtoD,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,C,GAwoB3Bo+B,OAtoBEgnN,EAAUnlV,EAAQqyF,QAAA,4BAAA,CAAAhxF,OAAA,SAAA,EAAA,CAClBM,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,EACpBp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,C,GAEtB++B,YAAAqmN,EAAAnlV,EAAyBqyF,QAAU,iCAAc,CAAAhxF,OAAA,SAAA,EAAA,CAC/CM,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAQ,CAAAic,OAAA,OAAAm8E,QAAA,CAAA,CAAA,C,GAwoBVs5F,UAtoBU8rJ,EAAUnlV,EAAAqyF,QAAO,8BAAS,CAAAhxF,OAAA,SAAA,EAAA,CAClC0oC,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAQ,CAAA,CAAA,EAC1Bp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAO,CAAA,CAAA,C,GAwoB7B4rF,aAAcw5J,EAAUnlV,EAAIqyF,QAAU,0BAA2B,GAAI,CAroBrE1wF,IAAA,CAAAiiB,OAAA,MAAAm8E,QAAgC,CAAA,CAAA,EAC9Bp4F,KAAQ,CAAEic,OAAQ,OAAOm8E,QAAS,CAAA,CAAA,C,GAwoBpCyrG,YAtoBY25I,EAAQnlV,EAAAqyF,QAAiB,iCAAA,CAAAhxF,OAAA,SAAA,EAAA,CACnCM,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAO,CAAA,CAAA,EAC3Bp4F,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,C,GAEtB4+B,QAAAwmN,EAAAnlV,EAAAqyF,QAAyB,6BAAwB,CAAAhxF,OAAA,SAAA,EAAA,CAC/CM,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp4F,KAAQ,CAAAic,OAAA,OAAAm8E,QAAA,CAAA,CAAA,C,IA0oBZ//F,EAtoBIytL,QAAU,CAuoBZqB,eAtoBcq2J,EAAQnlV,EAAAqyF,QAAA,0BAAA,GAAA,CACpBtoD,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EAuoBpBp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAEnC40F,gBAtoBYwwJ,EAAenlV,EAAAqyF,QAAS,4BAAA,GAAA,CAClCtoD,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,C,GAwoBpBo1F,cAtoBcgwJ,EAAQnlV,EAAAqyF,QAAA,0BAAA,GAAA,CAuoBpBtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAsBm8E,QAAU,CAAA,CAAA,C,GAwoBhCi0F,eAtoBemxJ,EAAAnlV,EAAAqyF,QAAA,0BAAA,GAAA,CACbtoD,KAAQ,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp+F,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBHgwF,cAAeo1J,EAAUnlV,EAAIqyF,QAAU,yBAA0B,GAAI,CACnE1wF,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAEnC61F,mBAAoBuvJ,EAAUnlV,EAAIqyF,QAAU,+BAAgC,GAAI,CAC9EtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAqBm8E,QAAc,CAAA,CAAA,C,GAwoBnCqzF,oBAtoBU+xJ,EAAAnlV,EAAAqyF,QAAA,iCAAA,GAAA,CAuoBRtoD,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAwoBnCuwF,yBAtoBsB60J,EAAAnlV,EAAAqyF,QAAA,qCAAA,GAAA,CACpBtoD,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAiB,MAAEm8E,QAAQ,CAAA,CAAA,C,GAE7ByyF,uBAAA2yJ,EAAyBnlV,EAAUqyF,QAAI,mCAAU,GAAA,CAC/CtoD,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBViyF,kBAtoBYmzJ,EAAenlV,EAAAqyF,QAAS,8BAAA,GAAA,CAClCtoD,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,C,GAwoBpBi1F,oBAtoBcmwJ,EAAQnlV,EAAAqyF,QAAA,gCAAA,GAAA,CAuoBpBtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAA,MAAwBm8E,QAAU,CAAA,CAAA,C,GAwoBlCkxF,yBAtoBUk0J,EAAAnlV,EAAAqyF,QAAA,qCAAA,GAAA,CAuoBRtoD,KAtoBC,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACDp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,C,GAwoB3B2zF,eAtoBYyxJ,EAAQnlV,EAAAqyF,QAAA,0BAAA,GAAA,CAClBtoD,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,CAAA,EACpBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,C,GAwoBtB4yF,qBAAsBwyJ,EAAUnlV,EAAIqyF,QAAU,iCAAkC,GAAI,CAroBpFtoD,KAAA,CAAAnmB,OAAgB,MAAUm8E,QAAI,CAAA,CAAA,EAC5Bp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBN4vF,qBAtoBGw1J,EAAAnlV,EAAAqyF,QAAA,iCAAA,GAAA,CACDtoD,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,C,GAwoB3ByxF,yBAA0B2zJ,EAAUnlV,EAAIqyF,QAAU,qCAAsC,GAAI,CAroB5FtoD,KAAA,CAAAnmB,OAAA,MAAAm8E,QAA8B,CAAA,CAAA,EAC5Bp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBN4uF,6BAtoBGw2J,EAAAnlV,EAAAqyF,QAAA,0CAAA,GAAA,CACDtoD,KAAO,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EACjCp+F,IAAA,CAAQiiB,OAAE,MAAQm8E,QAAO,CAAA,CAAA,C,GAwoB3BkuF,4BAA6Bk3J,EAAUnlV,EAAIqyF,QAAU,wCAAyC,GAAI,CAroBlGtoD,KAAA,CAAAnmB,OAAA,MAAAm8E,QAAoC,CAAA,CAAA,EAClCp+F,IAAI,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBNsuF,qBAtoBG82J,EAAAnlV,EAAAqyF,QAAA,iCAAA,GAAA,CACDtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAClCp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,GAwoBnCyuF,4BAA6B22J,EAAUnlV,EAAIqyF,QAAU,yCAA0C,GAAI,CACjGtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAAiiB,OAAgB,MAAUm8E,QAAI,CAAA,CAAA,C,GAwoB9B2tF,eAtoBMy3J,EAAAnlV,EAAAqyF,QAAA,0BAAA,GAAA,CACJtoD,KAAQ,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp+F,IAtoBC,CAAAiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBH8wF,qBAtoBmBs0J,EAAOnlV,EAASqyF,QAAA,iCAAA,GAAA,CACjCtoD,KAAQ,CAAEnmB,OAAQ,MAAAm8E,QAAA,CAAA,CAAA,EAClBp+F,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,CAAA,C,GAwoBtBsvF,eAAgB81J,EAAUnlV,EAAIqyF,QAAU,2BAA4B,GAAI,CACtEtoD,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBpCp+F,IAAA,CAAUiiB,OAAA,MAAcm8E,QAAU,CAAA,CAAA,C,GAwoBlCyvF,wBAtoBU21J,EAAAnlV,EAAAqyF,QAAA,qCAAA,GAAA,CAuoBRtoD,KAtoBK,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACLp+F,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,C,IA0oBrC//F,EAtoBI0pG,SAAI,CAuoBNuH,SAtoBUk0O,EAAAnlV,EAAAqyF,QAAA,oBAAA,GAAA,CAuoBR1qF,KAtoBC,CAAAic,OAAA,OAAAm8E,QAAA,CAAA,CAAA,C,GAwoBHoR,OAtoBEg0O,EAAUnlV,EAAQqyF,QAAA,kBAAA,GAAA,CAClB1qF,KAAA,CAAUic,OAAE,OAAQm8E,QAAA,CAAA,CAAA,C,GAEtBrlF,SAAAyqU,EAAAnlV,EAAAqyF,QAAA,wBAAyD,CAAAlxF,GAAA,KAAA,EAAU,CACjE4oC,KAAI,CAAAnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EACJp+F,IAAA,CAAQiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,EAuoBRp4F,KAtoBC,CAAAic,OAAA,MAAA,EACD1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBvI,OAAU,CAAEuI,OAAQ,QAAA,C,IA0oBxB5jB,EAtoBIugM,IAAI,CAuoBNx4L,SAtoBUo9U,EAAAnlV,EAAAqyF,QAAA,qCAAA,CAuoBRlxF,GAtoBC,MACDiF,QAAQ,WACRF,KAAA,E,EACA,CAuoBA6jC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,EAAOooK,gBAAiB,CAAA,CAAA,EAroB5DxmQ,IAAA,CAAAiiB,OAAiB,MAAAm8E,QAAc,CAAA,EAAUooK,gBAAA,CAAA,CAAA,C,GAwoBzCiwL,UAtoBUjzG,EAAAnlV,EAAAqyF,QAAA,qCAAA,CAuoBRlxF,GAtoBC,MACDiF,QAAQ,WACRF,KAAA,E,EACA,CACA6jC,KAAA,CAAUnmB,OAAE,MAAQm8E,QAAA,CAAA,EAAAooK,gBAAA,CAAA,CAAA,EACpBxmQ,IAAA,CAAAiiB,OAAY,MAAQm8E,QAAA,CAAA,EAAAooK,gBAAA,CAAA,CAAA,C,GAEtBkwL,OAAAlzG,EAAenlV,EAAAqyF,QAAc,qCAAU,CACrClxF,GAAA,MAuoBAiF,QAtoBE,WAuoBFF,KAtoBE,E,EAuoBD,CACD6jC,KAtoBI,CAAAnmB,OAAU,MAASm8E,QAAU,CAAA,EAAAooK,gBAAA,CAAA,CAAA,EAuoBjCxmQ,IAtoBM,CAAAiiB,OAAI,MAASm8E,QAAQ,CAAA,EAASooK,gBAAc,CAAA,CAAA,C,GAwoBpDmwL,SAAUnzG,EAtoBSnlV,EAAIqyF,QAAA,qCAAY,CAAAlxF,GAAA,MAAAiF,QAAA,UAAA,EAAA,CAuoBjC2jC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,EAAOooK,gBAAiB,CAAA,CAAA,EAC1DxmQ,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,EAAOooK,gBAAiB,CAAA,CAAA,EACzDx/P,MAtoBM,CAuoBJib,OAAQ,MACRm8E,QAAS,CAAA,EACTooK,gBAAiB,CAAA,EAroBnB58P,aAAO,cACLhB,OAAQ,CAAAnE,QAAA,OAAA,C,IAyoBZyX,SAtoBMsnU,EAAUnlV,EAAAqyF,QAAS,4BAAU,CAAAlxF,GAAA,KAAA,EAAA,CAuoBjC4oC,KAtoBM,CAAInmB,OAAA,MAASm8E,QAAQ,CAAA,EAAcooK,gBAAS,CAAA,CAAA,EAuoBlDxmQ,IAAO,CAtoBCiiB,OAAS,MAAKm8E,QAAU,CAAA,EAAAooK,gBAAsB,CAAA,CAAA,EAuoBtDxgQ,KAAQ,CAtoBEic,OAAO,MAAIm8E,QAAY,CAAA,EAAAooK,gBAAA,CAAA,CAAA,C,IA0oBrCnoQ,EAAI04G,gBAAkB,CACpBC,KAAMwsO,EAAUnlV,EAAIqyF,QAAU,+BAAgC,CAAElxF,GAAI,MAAOE,OAAQ,SAAA,EAAa,CAC9F0oC,KAAQ,CAAEnmB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBlCp4F,KAAQ,CAAEic,OAAQ,OAAAm8E,QAAA,CAAA,CAAA,C,GAwoBpBga,gCAtoBsBorO,EAAAnlV,EAAAqyF,QAAA,iDAAA,CAuoBpBlxF,GAAI,MAroBNE,OAAA,S,EACE,CAuoBA0oC,KAtoBE,CAAQnmB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,GAwoBZyC,0BAtoBiB2iP,EAAAnlV,EAAAqyF,QAAA,mCAAA,CAuoBflxF,GAtoBI,MAuoBJE,OAtoBM,S,EAuoBL,CACDga,OAtoBU,CAAAuI,OAAO,SAAIm8E,QAAA,CAAA,CAAA,C,GAwoBvB8zE,iCAAkCsxK,EAAUnlV,EAAIqyF,QAAU,mDAAoD,CAC5GlxF,GAAI,MACJE,OAAQ,S,EACP,CACDM,IAAO,CAAEiiB,OAAQ,MAAOm8E,QAAS,CAAA,CAAA,EAroBjCh2D,KAAO,CACLnmB,OAAQ,MACRm8E,QAAS,CAAA,EACT22V,YAAa,CACXn1b,SAAU,SAASA,GAMjB,OALIA,EAASmI,MAAQnI,EAASmI,KAAK3C,UACjCxF,EAASmI,KAAK3C,QAAUxF,EAASmI,KAAK3C,QAAQob,IAAI,SAASnE,GACzD,OAAO,IAAIs3F,EAA+Bt3F,CAAA,C,IAGvCzc,EAASmI,I,IAItB/B,KAAQ,CAAAic,OAAA,OAAAm8E,QAAA,CAAA,CAAA,EAuoBR7+F,OAtoBU,CAAA0iB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,IA0oBd//F,EAAIo5V,MAtoBQ,CAuoBVm/F,YAAapzG,EAAUnlV,EAAIqyF,QAAU,sBAAuB,GAAI,CAC9D1wF,IAtoBM,CAAAiiB,OAAO,MAASm8E,QAAA,CAAA,CAAA,C,IA6oB1B//F,EAAI05Z,QAtoBI,CAuoBNhyI,QAtoBQy9D,EAAInlV,EAASqyF,QAAW,UAAK,CAuoBnC1wF,IAAO,CAtoBCiiB,OAAS,MAAOm8E,QAAI,CAAA,CAAA,C,IA6oBhC//F,EAAI2mQ,OAASw+E,EAAUnlV,EAAIqyF,QAAU,wBAAyB,CAAEhxF,OAAQ,UAAW0iB,MAAO,QAAA,EAAY,CAroBpGpiB,IAAA,CAAAiiB,OAAA,KAAA,EAuoBAjc,KAtoBE,CAAQic,OAAE,MAAA,C,GA4oBd5jB,EAtoBE+uB,YAAA,CAuoBAC,OAtoBMm2T,EAAAnlV,EAAAqyF,QAAA,qBAAA,GAAA,CACJ1wF,IAAA,CAASiiB,OAAA,MAAAm8E,QAAA,CAAA,CAAA,C,IA4oBb//F,EAtoBImL,KAAA,CAuoBFuyB,QAAS,CAroBTC,MAAA39B,EAAYqyF,QAAU,aACpB53E,QAAQza,EAAEqyF,QAAQ,wBAClBojB,gBAAiBz1G,EAAAqyF,QAAO,iC,EAwoB1BvqF,WAtoBY,CACV6F,MAAA3N,EAAUqyF,QAAU,wBAuoBpBtqF,SAAU/H,EAAIqyF,QAAU,2BAroB1BgzF,oBAAoBrlL,EAAIqyF,QAAU,mCAChChqD,eAAUroC,EAAQqyF,QAAO,kCACzB12C,SAAS37C,EAAAqyF,QAAe,2BACxBskW,gBAAU32b,EAAQqyF,QAAA,sCAClBh7D,QAAAr3B,EAAYqyF,QAAQ,4B,EAwoBtBrxF,YAAa,CAroBbikF,oBAAqBjlF,EAAAqyF,QAAc,wCACjClpF,WAAUnJ,EAAAqyF,QAAe,8BACzBr3B,kBAAiBh7D,EAAAqyF,QAAgB,sCACjChoC,SAAUrqD,EAAAqyF,QAAQ,4BAClBvvE,WAAY9iB,EAAAqyF,QAAQ,qCACpBtvE,cAAY/iB,EAAAqyF,QAAQ,iCAuoBpBzvE,QAAS5iB,EAAIqyF,QAAU,kCAroBzBxvE,OAAO7iB,EAAAqyF,QAAc,0BACnB7sC,aAASxlD,EAAQqyF,QAAO,gCAuoBxBkxF,oBAAqBvjL,EAAIqyF,QAAU,yCAroBrCm5B,eAAaxrH,EAAAqyF,QAAc,8BACzBs4B,QAAQ3qH,EAAEqyF,QAAQ,2BAClB33E,SAAU1a,EAAAqyF,QAAQ,mCAClBrd,eAAYh1E,EAAQqyF,QAAO,0CAC3Bv3E,gBAAY9a,EAAQqyF,QAAA,2CAuoBpBj3E,qBAAsBpb,EAAIqyF,QAAU,0CAroBtC3vE,WAAW1iB,EAAAqyF,QAAc,qCACvBykW,gBAAiB92b,EAAAqyF,QAAO,4CAuoBxBmb,wBAAyBxtG,EAAIqyF,QAAU,qDAroBzCqb,mBAAqB1tG,EAAIqyF,QAAU,+CACjC2C,cAAUh1F,EAAQqyF,QAAO,kCAuoBzByoE,oBAAqB96J,EAAIqyF,QAAU,yCAroBrC7N,mCAA6BxkF,EAAUqyF,QAAA,0DACrC2G,eAAIh5F,EAAAqyF,QAAA,sCACJqD,6BAAQ11F,EAAAqyF,QAAA,sDAuoBRmP,4BAtoBCxhG,EAAAqyF,QAAA,yDACD4L,0CAAkCj+F,EAAAqyF,QAAA,6DAClCmL,wCAAiCx9F,EAAAqyF,QAAA,2DACjC0lW,SAAS/3b,EAAEqyF,QAAQ,+BACnBx0E,SAAU7d,EAAAqyF,QAAQ,mCAClBqzF,cAAY1lL,EAAAqyF,QAAe,yCAC3B5/E,eAAYzS,EAAQqyF,QAAA,mCAuoBpB1vC,4BAA6B3iD,EAAIqyF,QAAU,qCAroB7CnkE,wBAAsBluB,EAAAqyF,QAAc,iCAClC//C,4BAAItyC,EAAAqyF,QAAA,qCACJmmW,oBAAQx4b,EAAAqyF,QAAA,wCAuoBRomW,2BAtoBCz4b,EAAAqyF,QAAA,gDACDziF,sBAAkB5P,EAAOqyF,QAAS,2CAClC5lF,wBAAwBzM,EAAAqyF,QAAS,6CACjC5xC,sCAAqCzgD,EAAAqyF,QAAA,gDACrCs8D,sBAAkB3uJ,EAAQqyF,QAAS,2CACnCm+D,2BAA2BxwJ,EAAAqyF,QAAS,iDACpCygD,uBAAoB9yI,EAAAqyF,QAAA,6CAuoBpBqmW,uCAAwC14b,EAAIqyF,QAAU,8DAroBxDilW,0BAA4Bt3b,EAAAqyF,QAAU,+CACpC9pD,kBAAIvoC,EAAAqyF,QAAA,uCACJ5rF,WAAQzG,EAAAqyF,QAAA,+BAuoBRsmW,uBAtoBC34b,EAAAqyF,QAAA,4CACD5mF,yBAAwBzL,EAAAqyF,QAAS,8CACjCjnF,wBAAkBpL,EAAAqyF,QAAA,6CAClBolW,kBAAYz3b,EAAQqyF,QAAA,uCACpBpxF,oBAAoBjB,EAAAqyF,QAAA,yCAuoBpBumW,mCAAoC54b,EAAIqyF,QAAU,0DAroBpD1pB,eAAiB3oE,EAAAqyF,QAAc,mCAC7Bh7B,OAAOr3D,EAAEqyF,QAAQ,iCACjBnI,UAAUlqF,EAAEqyF,QAAQ,8BAuoBpB+hI,cAAep0N,EAAIqyF,QAAU,mCAroB/B62D,aAAclpJ,EAAAqyF,QAAc,gCAC1BjlD,eAAIptC,EAAAqyF,QAAA,mCACJn+C,mCAAQl0C,EAAAqyF,QAAA,iEAuoBRy4D,2BAtoBC9qJ,EAAAqyF,QAAA,uDACDk3D,yBAAyBvpJ,EAAAqyF,QAAS,qDAClCjhD,eAASpxC,EAAQqyF,QAAO,mCACxB9/C,oCAAkBvyC,EAAAqyF,QAAA,+CAClBngD,oBAAoBlyC,EAAAqyF,QAAA,wCACpBhiD,wBAAoBrwC,EAAAqyF,QAAA,6CAuoBpB2wT,6BAA8BhjZ,EAAIqyF,QAAU,kDAC5Cw1D,sBAAuB7nJ,EAAIqyF,QAAU,2CAroBvC0lF,iBAAA/3K,EAAAqyF,QAA4B,qCAC1BumF,sBAAI54K,EAAAqyF,QAAA,0CACJ6lF,wBAAQl4K,EAAAqyF,QAAA,6CAuoBRj6D,UAtoBCp4B,EAAAqyF,QAAA,8BACDwmW,iBAAkB74b,EAAAqyF,QAAO,qCACzBzgB,wBAAwB5xE,EAAAqyF,QAAS,8CACjCxzD,kBAAkB7+B,EAAAqyF,QAAA,uCAClBs5S,4BAAoB3rY,EAAAqyF,QAAA,4CACpBo5S,2BAAoBzrY,EAAAqyF,QAAA,gDAuoBpB+uH,wBAAyBphN,EAAIqyF,QAAU,wCACvCpzD,mBAAoBj/B,EAAIqyF,QAAU,wCAroBpCymW,iBAAiB94b,EAAAqyF,QAAc,sCAC7B+kJ,gCAAiCp3O,EAAAqyF,QAAA,sDACjCryC,aAAYhgD,EAAAqyF,QAAQ,wCAuoBpBuN,gBAAiB5/F,EAAIqyF,QAAU,oCAroBjC+J,cAAcp8F,EAAAqyF,QAAc,kCAC1BusE,SAAU5+J,EAAAqyF,QAAQ,4BAClB8+I,qBAAiBnxO,EAAOqyF,QAAS,oCACjC3gB,mCAAkB1xE,EAAAqyF,QAAA,kEAClBnuF,MAAAlE,EAAUqyF,QAAU,oBAuoBpB7hF,cAAexQ,EAAIqyF,QAAU,yCAC7BkrP,qBAAsBv9U,EAAIqyF,QAAU,iDACpCypP,UAAW97U,EAAIqyF,QAAU,yBACzBk6D,YAAavsJ,EAAIqyF,QAAU,uCAC3Bk+Q,UAAWvwW,EAAIqyF,QAAU,mC,EApoB7BvnC,aAAgB,CACdvF,YAAevlD,EAAAqyF,QAAc,gCAC3B0mW,wBAAyB/4b,EAAAqyF,QAAS,6CAClCklF,qBAAiBv3K,EAAOqyF,QAAS,0CACjC2lW,iBAAkBh4b,EAAAqyF,QAAA,sCAClB8tD,iBAAYngJ,EAAQqyF,QAAA,sCACpBkuD,wBAAoBvgJ,EAAAqyF,QAAA,6C,EAEtB37B,UAAU,CACRs/E,SAAUh2I,EAAAqyF,QAAQ,0BAClB2mW,YAASh5b,EAAQqyF,QAAO,oCACxB4lD,YAAUj4I,EAAAqyF,QAAQ,oCAClBzhC,cAAY5wD,EAAAqyF,QAAQ,+B,EAwoBtB18D,MAAO,CAroBPkR,UAAW7mC,EAAAqyF,QAAc,uBACvBz8D,eAAU51B,EAAQqyF,QAAO,4BACzB+xB,mBAAiBpkH,EAAOqyF,QAAS,iCACjCusH,0BAAkB5+M,EAAAqyF,QAAA,wCAClBovB,qBAAoBzhH,EAAAqyF,QAAA,mCACpB3uD,gBAAY1jC,EAAQqyF,QAAA,8BAuoBpB1wD,UAAW3hC,EAAIqyF,QAAU,wBACzB65G,WAAYlsM,EAAIqyF,QAAU,uB,EAE5Bo7F,QAAS,CACPuH,oBAAqBh1L,EAAIqyF,QAAU,gCACnCsiG,gBAAiB30L,EAAIqyF,QAAU,2BAroB/BtqF,SAAA/H,EAAAqyF,QAAe,mBACjB2hG,eAAah0L,EAAAqyF,QAAc,0BACzB5/E,eAAUzS,EAAQqyF,QAAO,0BACzBsgG,qBAAiB3yL,EAAOqyF,QAAS,iCACjCjhD,eAAUpxC,EAAQqyF,QAAA,0BAClBs9F,qBAAoB3vL,EAAAqyF,QAAA,iCACpB4mW,iBAAYj5b,EAAQqyF,QAAA,6BAuoBpB6mW,YAAal5b,EAAIqyF,QAAU,uBAroB7B8mW,QAAAn5b,EAAAqyF,QAAkB,kBAChB09F,cAAI/vL,EAAAqyF,QAAA,yBACJ+mW,iBAAQp5b,EAAAqyF,QAAA,4BAuoBRmgG,uBAtoBCxyL,EAAAqyF,QAAA,mCACD2/F,kBAAkBhyL,EAAAqyF,QAAO,8BACzBqhG,eAAS1zL,EAAQqyF,QAAO,0BACxB4+F,yBAAkBjxL,EAAAqyF,QAAA,qCAClBgnW,mBAAoBr5b,EAAAqyF,QAAA,8BACpBm/F,yBAAoBxxL,EAAAqyF,QAAA,qCAuoBpB47F,4BAA6BjuL,EAAIqyF,QAAU,wCAroB7CinW,uBAAAt5b,EAA8BqyF,QAAU,mCACtCs8F,6BAAI3uL,EAAAqyF,QAAA,0CACJknW,SAAQv5b,EAAAqyF,QAAA,mBAuoBRq7F,eAtoBC1tL,EAAAqyF,QAAA,0BACDmnW,gBAAUx5b,EAAQqyF,QAAO,2BACzBonW,sBAAiBz5b,EAAOqyF,QAAS,kCACjCqnW,mBAAkB15b,EAAAqyF,QAAA,8BAClBsnW,yBAAoB35b,EAAAqyF,QAAA,oC,EAwoBtBs7L,YAAa3tR,EAAIkL,IAAM,cAroBvBggD,UAAA,CACEzF,MAAIzlD,EAAAqyF,QAAA,sBACJyoB,OAAQ96G,EAAAqyF,QAAA,+BAuoBR2/I,aAtoBChyO,EAAAqyF,QAAA,yBACDwqB,YAAU78G,EAAAkL,IAAQ,uB,EAwoBpBgzH,UAtoBU,CACRgE,eAAYliI,EAAQqyF,QAAA,6BACpBunW,WAAY55b,EAAAqyF,QAAQ,wBAuoBpBwnW,SAAU75b,EAAIqyF,QAAU,qB,EAE1BqX,SAtoBM,CACJ8E,OAAQxuG,EAAAqyF,QAAA,0BAuoBR33E,SAtoBC1a,EAAAqyF,QAAA,oBACDke,cAAUvwG,EAAQqyF,QAAO,8B,EAwoB3BtjE,YAtoBY,CACVy5U,YAAYxoW,EAAAqyF,QAAQ,wBACpBloF,SAAUnK,EAAEqyF,QAAQ,wBAuoBpBhkE,OAAQruB,EAAIqyF,QAAU,uB,EAExBqmB,gBAtoBY,CACVm7D,iCAAiC7zK,EAAAqyF,QAAA,kD,EAwoBnCkuG,IAtoBE,CACAx4L,SAAU/H,EAAEqyF,QAAQ,qCAuoBpB+lW,UAAWp4b,EAAIqyF,QAAU,qCAroB3BgmW,OAAAr4b,EAAAqyF,QAAA,qCACEimW,SAAUt4b,EAAAqyF,QAAQ,qCAClBx0E,SAAS7d,EAAAqyF,QAAe,2B,GA0oB5BryF,EAAIqrW,aAAe,WAroBjB,MAAuB,eAAvBrrW,EAAAulY,W,EAyoBFvlY,EAAI24B,QAtoBC,CAuoBHC,GAtoBE,CACA53B,YAAS,CACTo3B,UAAU+sT,EAAQnlV,EAAAq2b,UAAA,qCAAA,CAClBl1b,GAAA,MACAE,OAAY,S,EAuoBP,CACDsG,KAAQ,CAAEic,OAAQ,MAAA,EAClB1iB,OAAU,CAAE0iB,OAAQ,KAAA,C,IAloBxB9b,WAAQ,CACVC,SAAWo9U,EAAUnlV,EAAIq2b,UAAU,kCAAqC,CAAAl1b,GAAO,MAAQE,OAAA,SAAA,EAAa,CAClGM,IAAU,CAAAiiB,OAAQ,KAAA,EAClBjc,KAAS,CAAAic,OAAQ,MAAA,EACjB1iB,OAAU,CAAA0iB,OAAQ,KAAA,EAClBjb,MAAY,CACZib,OAAY,MAuoBNrZ,OAAQ,CAAElJ,OAAQ,OAAA,EAroB1B0+F,QAAA,CAAA,EACM22V,YAAA7/Z,EAAAmmU,uB,KA2oBJ7xV,KAAM,CAroBRnK,YAAgB,CACdo3B,UAAUp4B,EAAQq2b,UAAO,oC,EAEzBvub,WAAU,CACVC,SAAY/H,EAAAq2b,UAAQ,iC,KAQpBr2b,C,yJAhlDNpB,QAjoBEC,OAAI,MAAA,EACJ4mQ,QAAK,MAAAywL,CAAA,C,IA81FXt3b,QAAQC,OAtoBE,MAAA,EAASgwB,IAAQ,CAAA,iBAAgB,SAAAira,GAAAA,EAAArzT,IAAA,uCAAA,8VAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,mCAAU,49BAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,qCAAoB,oLAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,6CAAoB,wgBAAA,EAuoB9BqzT,EAAerzT,IAAI,8CAA8C,+tBAAA,EACjEqzT,EAtoBQrzT,IAAW,2CAAwB,kuBAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,gEAA0B,6mCAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,8DAAwB,svBAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,4CAAU,sqBAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,4CAAoB,k4DAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,yFAAoB,+YAAA,EAuoB9BqzT,EAAerzT,IAAI,8CAA8C,6kBAAA,EACjEqzT,EAtoBQrzT,IAAA,yDAAyC,mwCAAA,EAuoBjDqzT,EAtoBUrzT,IAAQ,iEAA0B,+VAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,0DAAwB,4xOAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,yDAAU,qGAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,8DAAoB,gkBAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,gCAAoB,8RAAA,EAuoB9BqzT,EAAerzT,IAAI,8DAA8D,6NAAA,EACjFqzT,EAtoBQrzT,IAAW,sDAAsD,yiBAAA,EAuoBzEqzT,EAtoBUrzT,IAAQ,8CAA0B,yjDAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,wDAAwB,uOAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,sCAAU,+wBAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,wDAAoB,6PAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,wEAAoB,8KAAA,EAuoB9BqzT,EAAerzT,IAAI,oFAAoF,2QAAA,EACvGqzT,EAAerzT,IAAI,4FAA4F,2PAAA,EAC/GqzT,EAtoBQrzT,IAAA,4DAA8C,oRAAA,EAuoBtDqzT,EAtoBcrzT,IAAA,oFAAA,yVAAA,EAuoBdqzT,EAtoBUrzT,IAAQ,iFAAA,y5EAAA,EAuoBlBqzT,EAtoBWrzT,IAAA,8CAAA,y4GAAA,EAuoBXqzT,EAtoBUrzT,IAAQ,8EAA0B,wQAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,0DAAwB,wOAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,sEAAU,oQAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,kDAAoB,oOAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,kDAAoB,4gBAAA,EAuoB9BqzT,EAAerzT,IAAI,sDAAsD,mUAAA,EACzEqzT,EAtoBQrzT,IAAA,8EAAyF,wQAAA,EAuoBjGqzT,EAtoBUrzT,IAAQ,0DAA0B,wOAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,kDAAwB,uOAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,8GAAU,23NAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,oDAAoB,i0EAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,6DAAoB,gpCAAA,EAuoB9BqzT,EAAerzT,IAAI,qDAAqD,61GAAA,EACxEqzT,EAAerzT,IAAI,uDAAuD,sJAAA,EAC1EqzT,EAAerzT,IAAI,oDAAoD,w+DAAA,EACvEqzT,EAAerzT,IAAI,yEAAyE,8RAAA,EAC5FqzT,EAAerzT,IAAI,6CAA6C,miHAAA,EAChEqzT,EAAerzT,IAAI,uEAAuE,mgMAAA,EAC1FqzT,EAtoBUrzT,IAAA,0EAAY,+uBAAA,EAuoBtBqzT,EAtoBQrzT,IAAA,+EAAqF,q/wBAAA,EAuoB7FqzT,EAtoBUrzT,IAAQ,uFAA0B,2kPAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,2FAAwB,wgLAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,yFAAU,2iSAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,mFAAoB,82CAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,uDAAoB,o4EAAA,EAuoB9BqzT,EAAerzT,IAAI,yCAAyC,+sJAAA,EAC5DqzT,EAtoBQrzT,IAAA,iEAA8C,swCAAA,EAuoBtDqzT,EAtoBUrzT,IAAQ,uEAA0B,0hDAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,0DAAwB,8pEAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,qDAAU,m7bAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,mDAAoB,wuBAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,mDAAoB,85DAAA,EAuoB9BqzT,EAAerzT,IAAI,4DAA4D,quBAAA,EAC/EqzT,EAtoBerzT,IAAA,2FAAyF,yrCAAA,EAuoBxGqzT,EAtoBUrzT,IAAQ,6DAA0B,4tBAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,iDAAwB,kxCAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,qEAAU,8TAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,mDAAoB,uOAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,qEAAoB,6/GAAA,EAuoB9BqzT,EAAerzT,IAAI,mDAAmD,2SAAA,EACtEqzT,EAtoBQrzT,IAAA,6EAAsF,ikEAAA,EAuoB9FqzT,EAtoBUrzT,IAAS,uDAAwB,y2DAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,qDAAU,qyGAAA,EAuoB5BqzT,EAAerzT,IAAI,iEAAiE,u1FAAA,EACpFqzT,EAtoBQrzT,IAAA,sFAAsE,ssDAAA,EAuoB9EqzT,EAtoBUrzT,IAAS,gEAAQ,g5CAAA,EAuoB3BqzT,EAAerzT,IAAI,mDAAmD,6jEAAA,EACtEqzT,EAtoBQrzT,IAAA,qDAAsC,8lEAAA,EAuoB9CqzT,EAtoBUrzT,IAAQ,yDAA0B,i1JAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,4GAAwB,mOAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,8GAAU,0KAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,yFAAoB,s+BAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,+EAAoB,+/BAAA,EAuoB9BqzT,EAAerzT,IAAI,6EAA6E,giDAAA,EAChGqzT,EAtoBQrzT,IAAQ,mHAA0F,w/EAAA,EAuoB1GqzT,EAtoBUrzT,IAAQ,2FAA0B,iZAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,iEAAwB,gkSAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,6EAAU,mbAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,2EAAoB,8hCAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,+FAAoB,g/BAAA,EAuoB9BqzT,EAAerzT,IAAI,6EAA6E,uvDAAA,EAChGqzT,EAtoBQrzT,IAAA,8DAAsC,05CAAA,EAuoB9CqzT,EAtoBUrzT,IAAQ,wDAA0B,2gDAAA,EAuoB5CqzT,EAtoBUrzT,IAAQ,wDAAU,21SAAA,EAuoB5BqzT,EAAerzT,IAAI,gEAAgE,4wLAAA,EACnFqzT,EAtoBQrzT,IAAA,yEAA+E,4iUAAA,EAuoBvFqzT,EAtoBUrzT,IAAQ,yEAA0B,2kSAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,yEAAwB,m9MAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,yEAAU,s9RAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,0DAAoB,orBAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,iFAAoB,sGAAA,EAuoB9BqzT,EAAerzT,IAAI,+DAA+D,2GAAA,EAClFqzT,EAAerzT,IAAI,6DAA6D,+pBAAA,EAChFqzT,EAAerzT,IAAI,qDAAqD,4qFAAA,EACxEqzT,EAAerzT,IAAI,+DAA+D,ueAAA,EAClFqzT,EAAerzT,IAAI,2DAA2D,g8BAAA,EAC9EqzT,EAAerzT,IAAI,uCAAuC,mpBAAA,EAC1DqzT,EAtoBUrzT,IAAA,mDAAY,+aAAA,EAuoBtBqzT,EAtoBQrzT,IAAA,iEAAmE,8rEAAA,EAuoB3EqzT,EAtoBUrzT,IAAQ,qDAA0B,mUAAA,EAuoB5CqzT,EAAerzT,IAAI,qCAAqC,gPAAA,EACxDqzT,EAtoBQrzT,IAAA,2CAA+C,+PAAA,EAuoBvDqzT,EAtoBUrzT,IAAQ,8BAA0B,qlDAAA,EAuoB5CqzT,EAAerzT,IAAI,8CAA8C,ifAAA,EACjEqzT,EAtoBQrzT,IAAA,sCAAwC,ooCAAA,EAuoBhDqzT,EAtoBcrzT,IAAA,kDAAA,2MAAA,EAuoBdqzT,EAtoBUrzT,IAAQ,sFAAA,0jIAAA,EAuoBlBqzT,EAtoBWrzT,IAAA,4CAAA,yUAAA,EAuoBXqzT,EAtoBUrzT,IAAQ,4CAA0B,gyDAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,wDAAwB,+iGAAA,EAuoB3CqzT,EAAerzT,IAAI,yDAAyD,imGAAA,EAC5EqzT,EAtoBQrzT,IAAA,uDAAwC,k6NAAA,EAuoBhDqzT,EAtoBUrzT,IAAQ,yEAA0B,knGAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,2EAAwB,80WAAA,EAuoB3CqzT,EAAerzT,IAAI,8DAA8D,gwEAAA,EACjFqzT,EAtoBQrzT,IAAA,4DAAuE,g2GAAA,EAuoB/EqzT,EAtoBUrzT,IAAQ,4EAA0B,09EAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,+EAAwB,+xFAAA,EAuoB3CqzT,EAAerzT,IAAI,2FAA2F,81BAAA,EAC9GqzT,EAtoBQrzT,IAAA,6FAAiF,o7BAAA,EAuoBzFqzT,EAtoBUrzT,IAAQ,yDAA0B,mPAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,2DAAwB,21DAAA,EAuoB3CqzT,EAAerzT,IAAI,qCAAqC,g0DAAA,EACxDqzT,EAtoBQrzT,IAAA,uCAAuC,40FAAA,EAuoB/CqzT,EAtoBUrzT,IAAQ,6CAA0B,gwFAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,6CAAwB,wxGAAA,EAuoB3CqzT,EAAerzT,IAAI,6CAA6C,wxGAAA,EAChEqzT,EAtoBQrzT,IAAQ,mDAAqD,i0HAAA,EAuoBrEqzT,EAtoBUrzT,IAAS,yDAAwB,mxGAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,2CAA2B,qtBAAA,EAuoB7CqzT,EAAerzT,IAAI,2CAA2C,kiBAAA,EAC9DqzT,EAtoBQrzT,IAAA,4CAAqC,g5DAAA,EAuoB7CqzT,EAtoBUrzT,IAAS,8CAAwB,6lDAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,8CAA2B,yMAAA,EAuoB7CqzT,EAAerzT,IAAI,sDAAsD,kqBAAA,EACzEqzT,EAtoBQrzT,IAAW,kEAAiE,2/GAAA,EAuoBpFqzT,EAtoBUrzT,IAAQ,wEAA0B,+MAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,gEAAwB,qpFAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,+EAA2B,wgDAAA,EAuoB7CqzT,EAAerzT,IAAI,uEAAuE,4/EAAA,EAC1FqzT,EAtoBQrzT,IAAA,kFAAqE,inCAAA,EAuoB7EqzT,EAtoBUrzT,IAAS,8EAAwB,wmCAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,mEAA2B,iaAAA,EAuoB7CqzT,EAAerzT,IAAI,qEAAqE,kdAAA,EACxFqzT,EAtoBQrzT,IAAA,mEAAyE,0kBAAA,EAuoBjFqzT,EAtoBUrzT,IAAS,mEAAwB,8hBAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,mEAA2B,6UAAA,EAuoB7CqzT,EAAerzT,IAAI,mEAAmE,uYAAA,EACtFqzT,EAtoBQrzT,IAAS,mEAAgE,86BAAA,EAuoBjFqzT,EAtoBUrzT,IAAS,mEAAwB,sRAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,mEAA2B,ojBAAA,EAuoB7CqzT,EAAerzT,IAAI,mEAAmE,23BAAA,EACtFqzT,EAAerzT,IAAI,sEAAsE,8kEAAA,EACzFqzT,EAAerzT,IAAI,kEAAkE,yIAAA,EACrFqzT,EAtoBUrzT,IAAA,+CAAU,8qHAAA,EAuoBpBqzT,EAtoBQrzT,IAAA,+CAAwC,wyIAAA,EAuoBhDqzT,EAtoBUrzT,IAAQ,sDAA0B,6mjCAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,wDAAwB,wqHAAA,EAuoB3CqzT,EAAerzT,IAAI,wDAAwD,q6CAAA,EAC3EqzT,EAtoBQrzT,IAAA,mDAAyC,2mBAAA,EAuoBjDqzT,EAtoBUrzT,IAAQ,yDAA0B,2nCAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,yEAAwB,ubAAA,EAuoB3CqzT,EAAerzT,IAAI,mDAAmD,k7JAAA,EACtEqzT,EAtoBQrzT,IAAA,uEAAsE,4oJAAA,EAuoB9EqzT,EAtoBUrzT,IAAQ,mEAA0B,yYAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,6EAAwB,gjEAAA,EAuoB3CqzT,EAAerzT,IAAI,iDAAiD,qrFAAA,EACpEqzT,EAtoBQrzT,IAAA,oDAAwC,w5LAAA,EAuoBhDqzT,EAtoBUrzT,IAAQ,sDAA0B,w+FAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,uDAAwB,gxBAAA,EAuoB3CqzT,EAAerzT,IAAI,mDAAmD,2lKAAA,EACtEqzT,EAtoBQrzT,IAAA,iDAAuC,45aAAA,EAuoB/CqzT,EAtoBUrzT,IAAS,6DAAwB,8nJAAA,EAuoB3CqzT,EAAerzT,IAAI,+CAA+C,8lOAAA,EAClEqzT,EAtoBQrzT,IAAA,iDAA4C,+6EAAA,EAuoBpDqzT,EAtoBUrzT,IAAQ,qDAA0B,07KAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,gEAAwB,g1CAAA,EAuoB3CqzT,EAAerzT,IAAI,sDAAsD,+fAAA,EACzEqzT,EAtoBQrzT,IAAA,2DAA6C,0sHAAA,EAuoBrDqzT,EAtoBUrzT,IAAQ,6DAA0B,yxEAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,2DAAwB,+jDAAA,EAuoB3CqzT,EAAerzT,IAAI,iEAAiE,2pFAAA,EACpFqzT,EAtoBQrzT,IAAA,uEAAkD,2nPAAA,EAuoB1DqzT,EAtoBUrzT,IAAQ,6DAA0B,67JAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,qDAAwB,q6HAAA,EAuoB3CqzT,EAAerzT,IAAI,qDAAqD,wmRAAA,EACxEqzT,EAtoBQrzT,IAAA,qEAAgD,+4OAAA,EAuoBxDqzT,EAtoBUrzT,IAAQ,yDAA0B,60DAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,qDAAwB,kkFAAA,EAuoB3CqzT,EAAerzT,IAAI,qDAAqD,wkNAAA,EACxEqzT,EAtoBQrzT,IAAA,6DAA2C,4vEAAA,EAuoBnDqzT,EAtoBUrzT,IAAQ,yEAA0B,omFAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,uDAAwB,68JAAA,EAuoB3CqzT,EAAerzT,IAAI,uDAAuD,ooJAAA,EAC1EqzT,EAtoBQrzT,IAAA,yDAA6C,ynHAAA,EAuoBrDqzT,EAtoBUrzT,IAAQ,2EAA0B,60fAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,mDAAwB,4oFAAA,EAuoB3CqzT,EAAerzT,IAAI,6DAA6D,wzFAAA,EAChFqzT,EAtoBQrzT,IAAA,+DAAkD,0yEAAA,EAuoB1DqzT,EAtoBUrzT,IAAQ,uDAA0B,8qJAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,yDAAwB,86HAAA,EAuoB3CqzT,EAAerzT,IAAI,+CAA+C,m6BAAA,EAClEqzT,EAtoBQrzT,IAAA,yDAAmE,slGAAA,EAuoB3EqzT,EAtoBUrzT,IAAQ,2DAA0B,yoFAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,6DAAwB,mnEAAA,EAuoB3CqzT,EAAerzT,IAAI,+DAA+D,kzEAAA,EAClFqzT,EAtoBQrzT,IAAA,oDAA8C,kybAAA,EAuoBtDqzT,EAtoBUrzT,IAAQ,kEAA0B,kVAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,gEAAwB,4kTAAA,EAuoB3CqzT,EAAerzT,IAAI,oDAAoD,g8EAAA,EACvEqzT,EAtoBQrzT,IAAA,gDAA8C,g9IAAA,EAuoBtDqzT,EAtoBUrzT,IAAQ,sDAA0B,21FAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,4CAAwB,s/DAAA,EAuoB3CqzT,EAAerzT,IAAI,oDAAoD,6/XAAA,EACvEqzT,EAtoBQrzT,IAAA,sDAAkD,oxCAAA,EAuoB1DqzT,EAtoBUrzT,IAAQ,kEAA0B,ytQAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,oEAAwB,+rEAAA,EAuoB3CqzT,EAAerzT,IAAI,oDAAoD,6kHAAA,EACvEqzT,EAtoBQrzT,IAAA,oDAAsD,q9GAAA,EAuoB9DqzT,EAtoBUrzT,IAAQ,0CAA0B,sqjDAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,yDAAwB,6sDAAA,EAuoB3CqzT,EAAerzT,IAAI,2DAA2D,q+CAAA,EAC9EqzT,EAtoBQrzT,IAAA,6EAAqD,oPAAA,EAuoB7DqzT,EAtoBUrzT,IAAQ,iDAA0B,0+DAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,iEAAwB,8xsBAAA,EAuoB3CqzT,EAAerzT,IAAI,mEAAmE,oyDAAA,EACtFqzT,EAtoBQrzT,IAAA,2DAA8C,ynFAAA,EAuoBtDqzT,EAtoBUrzT,IAAQ,qDAA0B,uoEAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,uDAAwB,o0EAAA,EAuoB3CqzT,EAAerzT,IAAI,+CAA+C,w6KAAA,EAClEqzT,EAtoBQrzT,IAAA,iDAAqD,qsIAAA,EAuoB7DqzT,EAtoBUrzT,IAAQ,uFAA0B,yxCAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,4EAAwB,g/DAAA,EAuoB3CqzT,EAAerzT,IAAI,2EAA2E,isFAAA,EAC9FqzT,EAtoBQrzT,IAAA,2EAAuE,+0ZAAA,EAuoB/EqzT,EAtoBUrzT,IAAQ,iGAA0B,ssGAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,sEAAwB,g5OAAA,EAuoB3CqzT,EAAerzT,IAAI,iEAAiE,woBAAA,EACpFqzT,EAtoBQrzT,IAAA,iEAA8C,00ZAAA,EAuoBtDqzT,EAtoBUrzT,IAAQ,8DAA0B,4uRAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,6DAAwB,uqgBAAA,EAuoB3CqzT,EAAerzT,IAAI,iEAAiE,o1BAAA,EACpFqzT,EAtoBQrzT,IAAA,+DAAwE,kRAAA,EAuoBhFqzT,EAtoBUrzT,IAAQ,yDAA0B,kVAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,gEAAwB,kPAAA,EAuoB3CqzT,EAAerzT,IAAI,2DAA2D,4TAAA,EAC9EqzT,EAtoBQrzT,IAAA,0DAAiD,2TAAA,EAuoBzDqzT,EAtoBUrzT,IAAQ,0DAA0B,8RAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,4DAAwB,yDAAA,EAuoB3CqzT,EAAerzT,IAAI,gEAAgE,iUAAA,EACnFqzT,EAAerzT,IAAI,iEAAiE,kUAAA,EACpFqzT,EAAerzT,IAAI,mEAAmE,sPAAA,EACtFqzT,EAtoBUrzT,IAAA,kEAAW,qRAAA,EAuoBrBqzT,EAtoBQrzT,IAAU,6DAAiD,goIAAA,EAuoBnEqzT,EAtoBUrzT,IAAQ,8DAA2B,iPAAA,EAuoB7CqzT,EAAerzT,IAAI,qEAAqE,wRAAA,EACxFqzT,EAtoBQrzT,IAAQ,qEAA+C,ySAAA,EAuoB/DqzT,EAtoBUrzT,IAAQ,iEAA2B,qSAAA,EAuoB7CqzT,EAAerzT,IAAI,qEAAqE,wWAAA,EACxFqzT,EAtoBQrzT,IAAU,yDAAuD,4OAAA,EAuoBzEqzT,EAtoBUrzT,IAAQ,iEAA0B,iUAAA,EAuoB5CqzT,EAtoBUrzT,IAAS,qEAAwB,ySAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,2DAAU,uTAAA,EAuoB5BqzT,EAtoBUrzT,IAAA,qEAAoB,wRAAA,EAuoB9BqzT,EAtoBUrzT,IAAA,0EAAoB,gSAAA,EAuoB9BqzT,EAAerzT,IAAI,yEAAyE,4RAAA,EAC5FqzT,EAAerzT,IAAI,iEAAiE,oRAAA,EACpFqzT,EAAerzT,IAAI,wEAAwE,8RAAA,EAC3FqzT,EAtoBUrzT,IAAM,0DAAA,gRAAA,EAuoBhBqzT,EAtoBQrzT,IAAU,sEAA8D,87KAAA,EAuoBhFqzT,EAtoBcrzT,IAAA,uEAAA,ipIAAA,EAuoBdqzT,EAtoBUrzT,IAAS,oEAAA,k+GAAA,EAuoBnBqzT,EAtoBUrzT,IAAM,oEAAA,gzJAAA,EAuoBhBqzT,EAtoBWrzT,IAAA,uEAAA,6+HAAA,EAuoBXqzT,EAtoBUrzT,IAAQ,2DAAkD,2xCAAA,EAuoBpEqzT,EAtoBUrzT,IAAS,+DAAgD,iuIAAA,EAuoBnEqzT,EAAerzT,IAAI,yDAAyD,o4MAAA,EAC5EqzT,EAtoBQrzT,IAAW,yDAAwB,qzVAAA,EAuoB3CqzT,EAtoBcrzT,IAAA,0DAAA,wtEAAA,EAuoBdqzT,EAtoBUrzT,IAAS,yDAAA,6mLAAA,EAuoBnBqzT,EAtoBUrzT,IAAM,0DAAA,oxHAAA,EAuoBhBqzT,EAtoBWrzT,IAAA,yDAAA,w+KAAA,EAuoBXqzT,EAtoBUrzT,IAAQ,2DAAkD,gyBAAA,EAuoBpEqzT,EAtoBUrzT,IAAS,8DAAgD,q1BAAA,EAuoBnEqzT,EAAerzT,IAAI,iEAAiE,oyBAAA,EACpFqzT,EAtoBQrzT,IAAQ,0DAAwB,whDAAA,EAuoBxCqzT,EAtoBcrzT,IAAA,kEAAA,q6CAAA,EAuoBdqzT,EAtoBUrzT,IAAS,qEAAA,i+ZAAA,EAuoBnBqzT,EAtoBUrzT,IAAM,6DAAA,igJAAA,EAuoBhBqzT,EAtoBWrzT,IAAA,sEAAA,s3BAAA,EAuoBXqzT,EAtoBUrzT,IAAQ,0GAAkD,+zFAAA,EAuoBpEqzT,EAtoBUrzT,IAAS,oFAAgD,i5CAAA,EAuoBnEqzT,EAAerzT,IAAI,4EAA4E,uwFAAA,EAC/FqzT,EAtoBQrzT,IAAU,0EAA2E,qrCAAA,EAuoB7FqzT,EAtoBUrzT,IAAQ,kEAAkD,m3BAAA,EAuoBpEqzT,EAtoBUrzT,IAAS,0DAAgD,0rMAAA,EAuoBnEqzT,EAtoBUrzT,IAAS,uDAAA,s0ZAAA,EAuoBnBqzT,EAtoBYrzT,IAAA,wDAAQ,o7HAAA,EAuoBpBqzT,EAtoBYrzT,IAAA,6DAAS,4sNAAA,EAuoBrBqzT,EAtoBYrzT,IAAA,6DAAiB,mgJAAA,EAuoB7BqzT,EAtoBYrzT,IAAA,8DAAc,i8EAAA,EAuoB1BqzT,EAtoBYrzT,IAAA,uEAAmB,2sCAAA,EAuoB/BqzT,EAAerzT,IAAI,0EAA0E,0sBAAA,EAC7FqzT,EAAerzT,IAAI,6DAA6D,+lLAAA,EAChFqzT,EAtoBQrzT,IAAU,8DAA2D,i0BAAA,EAuoB7EqzT,EAtoBUrzT,IAAQ,qFAAkD,slCAAA,EAuoBpEqzT,EAtoBUrzT,IAAS,4EAAgD,spGAAA,EAuoBnEqzT,EAtoBUrzT,IAAQ,wEAAkD,8xDAAA,EAuoBpEqzT,EAAerzT,IAAI,2EAA2E,opHAAA,EAC9FqzT,EAAerzT,IAAI,8EAA8E,m7DAAA,EACjGqzT,EAAerzT,IAAI,sFAAsF,y7CAAA,EACzGqzT,EAtoBUrzT,IAAA,mFAAkB,0mGAAA,EAuoB5BqzT,EAtoBcrzT,IAAA,iFAA6E,opNAAA,EAuoB3FqzT,EAtoBUrzT,IAAQ,iFAA0B,ktGAAA,EAuoB5CqzT,EAtoBUrzT,IAAQ,+EAA2B,w3HAAA,EAuoB7CqzT,EAAerzT,IAAI,yEAAyE,g7FAAA,EAC5FqzT,EAtoBQrzT,IAAA,qFAAyD,ikOAAA,EAuoBjEqzT,EAtoBcrzT,IAAA,6FAAA,+oCAAA,EAuoBdqzT,EAtoBUrzT,IAAQ,+EAAA,29FAAA,EAuoBlBqzT,EAtoBWrzT,IAAA,kFAAA,4lDAAA,EAuoBXqzT,EAtoBUrzT,IAAQ,sEAA0B,wwFAAA,EAuoB5CqzT,EAAerzT,IAAI,wEAAwE,63CAAA,EAC3FqzT,EAtoBQrzT,IAAA,kFAAuF,04TAAA,EAuoB/FqzT,EAtoBcrzT,IAAA,mFAAA,iiJAAA,EAuoBdqzT,EAtoBUrzT,IAAQ,0EAAA,szFAAA,EAuoBlBqzT,EAtoBWrzT,IAAA,mEAAA,0gFAAA,EAuoBXqzT,EAtoBUrzT,IAAA,mEAAuC,+xCAAA,EAuoBjDqzT,EAAerzT,IAAI,iEAAiE,6rJAAA,EACpFqzT,EAtoBQrzT,IAAA,+DAA0D,gxBAAA,EAuoBlEqzT,EAtoBcrzT,IAAA,mEAAA,giDAAA,EAuoBdqzT,EAtoBUrzT,IAAQ,gEAAA,kwQAAA,EAuoBlBqzT,EAtoBWrzT,IAAA,qEAAA,sxBAAA,EAuoBXqzT,EAtoBUrzT,IAAS,+EAAwB,kmkBAAA,EAuoB3CqzT,EAtoBUrzT,IAAQ,kEAAA,y6FAAA,EAuoBlBqzT,EAtoBYrzT,IAAA,8DAAQ,81HAAA,EAuoBpBqzT,EAtoBYrzT,IAAA,gEAAS,wuKAAA,EAuoBrBqzT,EAtoBYrzT,IAAA,uEAAa,wkHAAA,EAuoBzBqzT,EAtoBcrzT,IAAA,wEAA6B,yxBAAA,EAuoB3CqzT,EAAerzT,IAtoBC,sEAA4C,sxBAAA,EAuoB5DqzT,EAAerzT,IAtoBG,gEAAiE,ixBAAA,EAuoBnFqzT,EAAerzT,IAAI,4EAtoB6C,yyBAAA,EAuoBhEqzT,EAAerzT,IAAI,uEAAuE,wxBAAA,EAC1FqzT,EAAerzT,IAAI,yEAAyE,0xBAAA,EAC5FqzT,EAAerzT,IAtoBC,4EAAgB,mmMAAA,EAuoBhCqzT,EAAerzT,IAAI,6DAA6D,m2BAAA,EAChFqzT,EAAerzT,IAAI,8DAA8D,+wBAAA,EACjFqzT,EAAerzT,IAAI,yEAAyE,0xBAAA,EAC5FqzT,EAtoBUrzT,IAAQ,iEAA2B,kmDAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,iEAAoC,i0BAAA,EAuoB9CqzT,EAAerzT,IAAI,6EAA6E,m/FAAA,EAChGqzT,EAAerzT,IAAI,kFAAkF,otBAAA,EACrGqzT,EAAerzT,IAAI,4EAA4E,uxBAAA,EAC/FqzT,EAtoBUrzT,IAAQ,sGAAA,0+CAAA,EAuoBlBqzT,EAtoBQrzT,IAAA,0DAAgE,kGAAA,EAuoBxEqzT,EAtoBUrzT,IAAS,0DAAwB,ugMAAA,EAuoB3CqzT,EAAerzT,IAAI,4DAA4D,8LAAA,EAC/EqzT,EAAerzT,IAAI,yDAAyD,iiSAAA,EAC5EqzT,EAAerzT,IAAI,gEAAgE,o8UAAA,EACnFqzT,EAAerzT,IAAI,2DAA2D,qvaAAA,EAC9EqzT,EAAerzT,IAAI,gEAAgE,iaAAA,EACnFqzT,EAAerzT,IAAI,mEAAmE,+XAAA,EACtFqzT,EAtoBUrzT,IAAA,kEAAU,u1DAAA,EAuoBpBqzT,EAtoBQrzT,IAAS,kEAAmC,86IAAA,EAuoBpDqzT,EAtoBUrzT,IAAS,wDAAwB,gnGAAA,EAuoB3CqzT,EAAerzT,IAAI,+DAA+D,2VAAA,EAClFqzT,EAAerzT,IAAI,6DAA6D,q4KAAA,EAChFqzT,EAAerzT,IAAI,wEAAwE,yqGAAA,EAC3FqzT,EAAerzT,IAAI,8DAA8D,4sCAAA,EACjFqzT,EAAerzT,IAAI,4DAA4D,o2VAAA,EAC/EqzT,EAAerzT,IAAI,2DAA2D,i/WAAA,EAC9EqzT,EAtoBUrzT,IAAS,4DAA2D,gkDAAA,EAuoB9EqzT,EAtoBerzT,IAAE,4DAAQ,2gEAAA,EAuoBzBqzT,EAtoBQrzT,IAAU,4DAAQ,6PAAA,EAuoB1BqzT,EAAerzT,IAAI,qEAAqE,kgGAAA,EACxFqzT,EAAerzT,IAAI,8EAA8E,86DAAA,EACjGqzT,EAAerzT,IAAI,8DAA8D,gqQAAA,EACjFqzT,EAAerzT,IAAI,+DAA+D,40NAAA,EAClFqzT,EAAerzT,IAAI,wEAAwE,koCAAA,EAC3FqzT,EAtoBUrzT,IAAA,8DAAc,8mGAAA,EAuoBxBqzT,EAtoBQrzT,IAAQ,2DAAkD,+1RAAA,EAuoBlEqzT,EAtoBUrzT,IAAS,4DAAwB,oxBAAA,EAuoB3CqzT,EAAerzT,IAAI,qEAAqE,+rEAAA,EACxFqzT,EAAerzT,IAAI,gEAAgE,8nBAAA,EACnFqzT,EAAerzT,IAAI,4DAA4D,8hmBAAA,EAC/EqzT,EAAerzT,IAAI,8DAA8D,08CAAA,EACjFqzT,EAAerzT,IAAI,oEAAoE,ynEAAA,EACvFqzT,EAtoBUrzT,IAAO,0DAAA,usLAAA,EAuoBjBqzT,EAtoBQrzT,IAAS,oEAAA,8mDAAA,EAuoBjBqzT,EAtoBUrzT,IAAO,yEAAc,y+HAAA,EAuoB/BqzT,EAtoBUrzT,IAAS,+DAAc,yqLAAA,EAuoBjCqzT,EAtoBUrzT,IAAA,iEAA+B,yhDAAA,EAuoBzCqzT,EAAerzT,IAAI,gEAAgE,8gHAAA,EACnFqzT,EAtoBQrzT,IAAA,gHAAY,shCAAA,EAuoBpBqzT,EAtoBUrzT,IAAO,yEAAc,swCAAA,EAuoB/BqzT,EAtoBUrzT,IAAA,+EAAwB,u4CAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,2EAAmC,+vEAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,gFAA8B,+6CAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,uEAAwB,oyCAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,6EAA+B,4XAAA,EAuoBzCqzT,EAtoBUrzT,IAAS,iFAAc,utFAAA,EAuoBjCqzT,EAAerzT,IAAI,gFAAgF,wlFAAA,EACnGqzT,EAtoBQrzT,IAAA,sEAAa,o9BAAA,EAuoBrBqzT,EAtoBUrzT,IAAA,mEAAmC,ujFAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,sEAA0B,wZAAA,EAuoBpCqzT,EAtoBUrzT,IAAA,6EAAiC,02BAAA,EAuoB3CqzT,EAtoBUrzT,IAAA,2EAAwB,u6CAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,qEAA0B,6vDAAA,EAuoBpCqzT,EAtoBUrzT,IAAA,kEAA6B,2jbAAA,EAuoBvCqzT,EAtoBUrzT,IAAS,qEAAc,ukCAAA,EAuoBjCqzT,EAtoBUrzT,IAAQ,sDAAc,ilOAAA,EAuoBhCqzT,EAtoBUrzT,IAAA,sEAA4B,6hFAAA,EAuoBtCqzT,EAtoBUrzT,IAAA,oEAAmC,8qBAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,0DAA8B,0jUAAA,EAuoBxCqzT,EAtoBUrzT,IAAS,4DAAc,03CAAA,EAuoBjCqzT,EAtoBUrzT,IAAA,2DAAwB,2lCAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,4DAA8B,yuBAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,kEAA+B,40KAAA,EAuoBzCqzT,EAtoBUrzT,IAAA,0DAAoC,u7BAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,wDAA0B,+gaAAA,EAuoBpCqzT,EAtoBUrzT,IAAA,uDAA+B,skbAAA,EAuoBzCqzT,EAtoBUrzT,IAAA,yDAAuC,6yNAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,wDAAkC,+OAAA,EAuoB5CqzT,EAtoBUrzT,IAAA,iEAA6B,66KAAA,EAuoBvCqzT,EAtoBUrzT,IAAA,yEAAmC,glGAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,6FAAkD,60BAAA,EAuoB5DqzT,EAtoBUrzT,IAAA,kEAA8B,6jUAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,0FAA4C,mwRAAA,EAuoBtDqzT,EAtoBUrzT,IAAA,iHAA2C,+jCAAA,EAuoBrDqzT,EAtoBUrzT,IAAA,gJAAyD,yiBAAA,EAuoBnEqzT,EAtoBUrzT,IAAA,2FAAuD,q6BAAA,EAuoBjEqzT,EAtoBUrzT,IAAA,0EAAwB,u7CAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,0EAAwB,4HAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,yFAA6B,q4NAAA,EAuoBvCqzT,EAtoBUrzT,IAAA,qIAA8B,21UAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,2HAA2C,qjFAAA,EAuoBrDqzT,EAtoBUrzT,IAAA,yHAAuC,q7UAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,iGAA2C,2+QAAA,EAuoBrDqzT,EAtoBUrzT,IAAA,yFAAmC,6gOAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,uFAA0C,isPAAA,EAuoBpDqzT,EAtoBUrzT,IAAA,qGAAqC,ghBAAA,EAuoB/CqzT,EAtoBUrzT,IAAA,gGAAuC,urCAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,gGAAqD,o3MAAA,EAuoB/DqzT,EAtoBUrzT,IAAA,yFAAqC,8vDAAA,EAuoB/CqzT,EAtoBUrzT,IAAA,sHAA0C,6yPAAA,EAuoBpDqzT,EAtoBUrzT,IAAA,oFAAsC,oxIAAA,EAuoBhDqzT,EAtoBUrzT,IAAA,4EAAsD,0xKAAA,EAuoBhEqzT,EAtoBUrzT,IAAA,mEAAyC,ssEAAA,EAuoBnDqzT,EAtoBUrzT,IAAA,wEAAiC,+9BAAA,EAuoB3CqzT,EAtoBUrzT,IAAA,yHAA0B,28GAAA,EAuoBpCqzT,EAtoBUrzT,IAAA,6FAAsC,q4CAAA,EAuoBhDqzT,EAtoBUrzT,IAAA,uFAAwC,imCAAA,EAuoBlDqzT,EAtoBUrzT,IAAA,qGAAuC,2tLAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,qGAAiC,o0BAAA,EAuoB3CqzT,EAtoBUrzT,IAAA,qFAAmC,6qgCAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,4FAAkD,wvCAAA,EAuoB5DqzT,EAtoBUrzT,IAAA,wEAA8B,6sFAAA,EAuoBxCqzT,EAtoBUrzT,IAAQ,2EAAc,g5CAAA,EAuoBhCqzT,EAtoBUrzT,IAAA,0EAAyB,8KAAA,EAuoBnCqzT,EAtoBUrzT,IAAA,sEAA6B,62CAAA,EAuoBvCqzT,EAtoBUrzT,IAAA,uEAA4B,8gBAAA,EAuoBtCqzT,EAtoBUrzT,IAAA,uEAA8B,muCAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,yEAAkD,s/CAAA,EAuoB5DqzT,EAtoBUrzT,IAAA,yEAA0C,8KAAA,EAuoBpDqzT,EAtoBUrzT,IAAA,qGAAwC,4vCAAA,EAuoBlDqzT,EAtoBUrzT,IAAA,oGAA8B,0vDAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,wGAAmD,yjFAAA,EAuoB7DqzT,EAtoBUrzT,IAAA,wGAAmC,yzEAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,8FAAuC,u5CAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,0HAA4C,qgCAAA,EAuoBtDqzT,EAtoBUrzT,IAAA,iGAAqC,wzWAAA,EAuoB/CqzT,EAtoBUrzT,IAAA,uEAAgC,yn8BAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,+FAAqC,ivCAAA,EAuoB/CqzT,EAtoBUrzT,IAAA,2EAAuC,y2BAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,2HAAyB,ixuBAAA,EAuoBnCqzT,EAtoBUrzT,IAAA,6GAAgC,yuBAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,qFAAuC,w8BAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,+IAAiC,4tBAAA,EAuoB3CqzT,EAtoBUrzT,IAAA,6GAA2C,2tBAAA,EAuoBrDqzT,EAtoBUrzT,IAAA,kEAA0C,u9GAAA,EAuoBpDqzT,EAtoBUrzT,IAAA,oEAAuC,qtUAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,+HAAkC,s0CAAA,EAuoB5CqzT,EAtoBUrzT,IAAA,sHAAgC,qtDAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,6EAA+C,4IAAA,EAuoBzDqzT,EAtoBUrzT,IAAA,+EAA4B,4IAAA,EAuoBtCqzT,EAtoBUrzT,IAAA,+EAA+B,4IAAA,EAuoBzCqzT,EAtoBUrzT,IAAA,6EAA6B,4IAAA,EAuoBvCqzT,EAtoBUrzT,IAAA,+EAAwB,4IAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,qFAAoC,mHAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,wEAAkD,oyBAAA,EAuoB5DqzT,EAtoBUrzT,IAAO,kFAAc,uiCAAA,EAuoB/BqzT,EAtoBUrzT,IAAA,wEAA6B,87IAAA,EAuoBvCqzT,EAtoBUrzT,IAAA,sFAAoC,q8BAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,4GAAyB,00DAAA,EAuoBnCqzT,EAtoBUrzT,IAAA,+FAA2B,wrFAAA,EAuoBrCqzT,EAtoBUrzT,IAAA,mFAAyB,0tHAAA,EAuoBnCqzT,EAAerzT,IAAI,iHAAiH,i9EAAA,EACpIqzT,EAtoBQrzT,IAAA,mFAAc,+zCAAA,EAuoBtBqzT,EAtoBUrzT,IAAA,wFAA2B,gnCAAA,EAuoBrCqzT,EAtoBUrzT,IAAA,iFAAuC,y3BAAA,EAuoBjDqzT,EAtoBUrzT,IAAA,uEAAoC,q1CAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,+EAAgC,olJAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,6EAAgC,upFAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,gGAAuC,yqFAAA,EAuoBjDqzT,EAAerzT,IAAI,gHAAgH,8hGAAA,EACnIqzT,EAtoBQrzT,IAAW,8FAAA,kqHAAA,EAuoBnBqzT,EAtoBUrzT,IAAA,8GAAwB,2sFAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,0FAA2B,wjNAAA,EAuoBrCqzT,EAtoBUrzT,IAAA,4GAA2B,6nSAAA,EAuoBrCqzT,EAtoBUrzT,IAAA,0FAA6B,8oUAAA,EAuoBvCqzT,EAAerzT,IAAI,0GAA0G,8iLAAA,EAC7HqzT,EAtoBerzT,IAAA,wGAAA,0nCAAA,EAuoBfqzT,EAtoBUrzT,IAAA,kGAAyB,4ldAAA,EAuoBnCqzT,EAtoBUrzT,IAAA,gHAA8B,yqoBAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,4FAAkC,q1NAAA,EAuoB5CqzT,EAtoBUrzT,IAAA,0GAAyC,gkTAAA,EAuoBnDqzT,EAtoBUrzT,IAAA,4GAAoC,uqPAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,gGAA+B,EAAA,EAuoBzCqzT,EAtoBUrzT,IAAA,2GAAyB,EAAA,EAuoBnCqzT,EAtoBUrzT,IAAA,wGAA0B,EAAA,EAuoBpCqzT,EAAerzT,IAAI,oGAAoG,yibAAA,EACvHqzT,EAtoBQrzT,IAAS,4HAAA,g2UAAA,EAuoBjBqzT,EAtoBUrzT,IAAA,wGAAmC,k9CAAA,EAuoB7CqzT,EAtoBUrzT,IAAA,gGAA+B,slMAAA,EAuoBzCqzT,EAtoBUrzT,IAAA,wHAAwB,o0aAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,wHAA8B,qRAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,qHAA8B,0qVAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,4FAAoC,24EAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,4EAA8B,ogBAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,yFAAoC,qsiCAAA,EAuoB9CqzT,EAtoBUrzT,IAAA,iGAAgC,sxsBAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,kGAA2B,w+CAAA,EAuoBrCqzT,EAtoBUrzT,IAAS,sFAAc,ogCAAA,EAuoBjCqzT,EAtoBUrzT,IAAA,wEAA6B,g6BAAA,EAuoBvCqzT,EAtoBUrzT,IAAA,oEAAgC,4iEAAA,EAuoB1CqzT,EAtoBUrzT,IAAA,6IAAsC,i0EAAA,EAuoBhDqzT,EAtoBUrzT,IAAA,4FAAiC,snCAAA,EAuoB3CqzT,EAtoBUrzT,IAAA,0FAA8B,4lDAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,kEAAwC,o4EAAA,EAuoBlDqzT,EAtoBUrzT,IAAA,kFAAkC,kzCAAA,EAuoB5CqzT,EAtoBUrzT,IAAA,6FAAwC,khFAAA,EAuoBlDqzT,EAtoBUrzT,IAAA,6FAA2C,6qNAAA,EAuoBrDqzT,EAtoBUrzT,IAAA,+GAAsC,6wLAAA,EAuoBhDqzT,EAtoBUrzT,IAAA,mGAA4C,+uFAAA,EAuoBtDqzT,EAtoBUrzT,IAAA,4GAAwB,8hDAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,sHAA8B,40HAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,+GAA+B,umBAAA,EAuoBzCqzT,EAtoBUrzT,IAAA,8HAAqC,m3DAAA,EAuoB/CqzT,EAtoBUrzT,IAAA,oEAAkC,+jEAAA,EAuoB5CqzT,EAtoBUrzT,IAAA,8EAAwC,qRAAA,EAuoBlDqzT,EAAerzT,IAAI,kEAAkE,6nCAAA,EACrFqzT,EAtoBQrzT,IAAA,0GAAuB,09NAAA,EAuoB/BqzT,EAtoBQrzT,IAAW,4HAAA,yuJAAA,EAuoBnBqzT,EAtoBUrzT,IAAO,gGAAc,ggBAAA,EAuoB/BqzT,EAtoBUrzT,IAAQ,mGAAc,ssEAAA,EAuoBhCqzT,EAtoBUrzT,IAAA,iHAA4B,kpFAAA,EAuoBtCqzT,EAtoBUrzT,IAAA,yFAAuB,mgCAAA,EAuoBjCqzT,EAAerzT,IAAI,qFAAqF,qwEAAA,EACxGqzT,EAtoBQrzT,IAAW,mFAAA,umDAAA,EAuoBnBqzT,EAtoBUrzT,IAAA,uFAA8B,80GAAA,EAuoBxCqzT,EAtoBUrzT,IAAA,mFAA0B,+5OAAA,EAuoBpCqzT,EAtoBUrzT,IAAA,qFAAwB,+hDAAA,EAuoBlCqzT,EAAerzT,IAAI,yFAAyF,u0CAAA,EAC5GqzT,EAtoBQrzT,IAAU,6FAAA,4xDAAA,EAuoBlBqzT,EAtoBUrzT,IAAQ,0EAAc,kuLAAA,EAuoBhCqzT,EAtoBUrzT,IAAA,2FAAwB,mj0BAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,qEAA6B,kyJAAA,EAuoBvCqzT,EAAerzT,IAAI,gFAAgF,s6FAAA,EACnGqzT,EAtoBQrzT,IAAA,0EAAa,ujCAAA,EAuoBrBqzT,EAtoBUrzT,IAAA,sFAA2B,21GAAA,EAuoBrCqzT,EAtoBUrzT,IAAA,8EAAwB,oqDAAA,EAuoBlCqzT,EAtoBUrzT,IAAQ,oFAAc,oiDAAA,EAuoBhCqzT,EAAerzT,IAAI,oFAAoF,sqCAAA,EACvGqzT,EAtoBQrzT,IAAA,8EAAiB,oiCAAA,EAuoBzBqzT,EAtoBUrzT,IAAA,yEAAgD,y4BAAA,EAuoB1DqzT,EAAerzT,IAAI,oEAAoE,g6BAAA,EACvFqzT,EAtoBarzT,IAAA,8DAAA,g3DAAA,EAuoBbqzT,EAtoBUrzT,IAAA,gEAAwB,kgEAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,+EAAyB,8rDAAA,EAuoBnCqzT,EAtoBUrzT,IAAQ,4EAAc,ijIAAA,EAuoBhCqzT,EAtoBUrzT,IAAA,0EAAwB,mmHAAA,EAuoBlCqzT,EAtoBUrzT,IAAA,8EAAwB,k6LAAA,EAuoBlCqzT,EAAerzT,IAAI,2EAA2E,8OAAA,EAC9FqzT,EAAerzT,IAAI,0EAA0E,igIAAA,EAC7FqzT,EAAerzT,IAAI,4EAA4E,qNAAA,EAC/FqzT,EAtoBUrzT,IAAA,6GAA0B,g9BAAA,EAuoBpCqzT,EAtoBerzT,IAAI,gGAAgB,ymDAAA,EAuoBnCqzT,EAAerzT,IAAI,8FAA8F,iyQAAA,EACjHqzT,EAAerzT,IAAI,4GAA4G,8WAAA,EAC/HqzT,EAtoBUrzT,IAAA,wHAAU,q+HAAA,EAuoBpBqzT,EAtoBYrzT,IAAA,6HAAA,mzGAAA,EAuoBZqzT,EAtoBUrzT,IAAA,iIAAa,+/BAAA,EAuoBvBqzT,EAtoBYrzT,IAAA,wIAA2E,6lHAAA,EAuoBvFqzT,EAtoBcrzT,IAAI,qHAAA,wvRAAA,EAuoBlBqzT,EAtoBcrzT,IAAA,mHAAQ,mjOAAA,EAuoBtBqzT,EAtoBerzT,IAAA,qIAAA,wkGAAA,EAuoBfqzT,EAtoBcrzT,IAAA,6IAAkB,kmKAAA,EAuoBhCqzT,EAtoBcrzT,IAAA,2HAAoB,4mCAAA,EAuoBlCqzT,EAAerzT,IAAI,gHAAgH,kgCAAA,EACnIqzT,EAAerzT,IAAI,6JAA6J,yzFAAA,EAChLqzT,EAAerzT,IAAI,yJAAyJ,ivFAAA,EAC5KqzT,EAtoBUrzT,IAAA,qIAAY,0uCAAA,EAuoBtBqzT,EAtoBYrzT,IAAA,8IAAyG,yxCAAA,EAuoBrHqzT,EAtoBcrzT,IAAA,sIAAiB,y6BAAA,EAuoB/BqzT,EAtoBcrzT,IAAA,+HAAkB,65BAAA,CAAA,EAAA","file":"scripts/app-c8ba9cb807.e4fdf386.js","sourcesContent":["(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core',\n            [\n                'ngAnimate',\n                'ngAria',\n                'ngCookies',\n                'ngMessages',\n                'ngResource',\n                'ngSanitize',\n                'ngMaterial',\n                'pascalprecht.translate',\n                'ui.router',\n                'flow'\n            ]);\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStocktakingHistoricItemController', ndStocktakingHistoricItemController)\n    .directive('ndStocktakingHistoricItem', ndStocktakingHistoricItem);\n\n  /** @ngInject */\n  function ndStocktakingHistoricItem() {\n    return {\n      restrict: 'E',\n      scope: {\n        stocktakingChange: '=',\n      },\n      controller: 'ndStocktakingHistoricItemController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-historic/directives/nd-stocktaking-historic-item/nd-stocktaking-historic-item.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStocktakingHistoricItemController($scope, STOCKTAKING_CHANGE_TYPES, STOCKTAKING_PRODUCT_NOT_FOUND_REASONS) {\n    // Data\n    $scope.STOCKTAKING_CHANGE_TYPES = STOCKTAKING_CHANGE_TYPES;\n    $scope.STOCKTAKING_PRODUCT_NOT_FOUND_REASONS = STOCKTAKING_PRODUCT_NOT_FOUND_REASONS;\n\n    // Methods\n\n    // Functions\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStocktakingHistoricHeaderController', ndStocktakingHistoricHeaderController)\n    .directive('ndStocktakingHistoricHeader', ndStocktakingHistoricHeader);\n\n  /** @ngInject */\n  function ndStocktakingHistoricHeader() {\n    return {\n      restrict: 'E',\n      scope: {\n        stocktakingChange: '=',\n      },\n      controller: 'ndStocktakingHistoricHeaderController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-historic/directives/nd-stocktaking-historic-header/nd-stocktaking-historic-header.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStocktakingHistoricHeaderController($scope, STOCKTAKING_CHANGE_TYPES, STOCKTAKING_PRODUCT_NOT_FOUND_REASONS) {\n    // Data\n    $scope.STOCKTAKING_CHANGE_TYPES = STOCKTAKING_CHANGE_TYPES;\n    $scope.STOCKTAKING_PRODUCT_NOT_FOUND_REASONS = STOCKTAKING_PRODUCT_NOT_FOUND_REASONS;\n\n    // Methods\n\n    // Functions\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSaleOrderDeliveryActionsController', ndSaleOrderDeliveryActionsController)\n    .directive('ndSaleOrderDeliveryActions', ndSaleOrderDeliveryActions);\n\n  /** @ngInject */\n  function ndSaleOrderDeliveryActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        currentTab: '=',\n        options: '='\n      },\n      controller: 'ndSaleOrderDeliveryActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-order-actions/sale-order-delivery-actions/nd-sale-order-delivery-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSaleOrderDeliveryActionsController($scope,\n                                                $mdToast,\n                                                $state,\n                                                $document,\n                                                $mdDialog,\n                                                $window,\n                                                api,\n                                                $interval,\n                                                $filter,\n                                                $rootScope,\n                                                HTTP_STATUS,\n                                                ORDER_DELIVERY_STATUSES_REVERSE,\n                                                SALE_ORDER_STATUSES_REVERSE,\n                                                ORDER_DELIVERY_STATUSES,\n                                                SALE_ORDER_DELIVERY_STATUS_COLORS,\n                                                Session,\n                                                OrderActionsService) {\n\n    var vm = this;\n    vm.saleOrderDelivery = $scope.order;\n    vm.ORDER_DELIVERY_STATUSES_REVERSE = ORDER_DELIVERY_STATUSES_REVERSE;\n    vm.SALE_ORDER_STATUSES_REVERSE = SALE_ORDER_STATUSES_REVERSE;\n\n    vm.printing = false;\n    vm.shippingAddresses = [];\n    vm.changingStatus = false;\n    vm.generatingInvoice = false;\n    vm.saving = false;\n    vm.changed = false;\n    vm.endpoints = {\n      checkStatus: 'inventories.saleOrderDeliveries',\n      changeStatus: 'inventories.saleOrderDeliveriesStatus'\n    };\n\n    vm.gotoSales = gotoSales;\n    vm.prepare = prepare;\n    vm.ship = ship;\n    vm.receive = receive;\n    vm.cancel = cancel;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.autocomplete = autocomplete;\n    vm.showCancelDeliveryDialog = showCancelDeliveryDialog;\n\n    initialize();\n\n    function initialize() {\n      OrderActionsService.initialize(\n        vm,\n        vm.saleOrderDelivery,\n        vm.endpoints,\n        statusChanged,\n        statusNotChanged\n      );\n    }\n\n    function autocomplete() {\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('SALE.AUTOCOMPLETE_TITLE'))\n        .textContent($filter('translate')('SALE.AUTOCOMPLETE_MSG'))\n        .clickOutsideToClose(true)\n        .ok($filter('translate')('SALE.USE_AVAILABLE_STOCK'))\n        .cancel($filter('translate')('SALE.COMPLETE_MISSING_STOCK'));\n\n      $mdDialog.show(confirm).then(function() {\n        executeAutocomplete(true);\n      }, function() {\n        executeAutocomplete(false);\n      });\n    }\n\n\n    function executeAutocomplete(onlyStockAvailable) {\n      if (vm.changingStatus) {\n        return;\n      }\n      vm.changingStatus = true;\n      api.inventories.saleOrderDeliveries.update({\n        id: vm.saleOrderDelivery.id,\n        option: 'autocomplete',\n        only_stock_available: onlyStockAvailable\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          api.inventories.saleOrderDeliveries.get({\n            id: vm.saleOrderDelivery.id\n          }, function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.saleOrderDelivery = response;\n              vm.orderDeliveryProductVariantsByOrderProductVariantIds = [];\n              vm.saleOrderDelivery.order_delivery_product_variants.forEach(function(sale_order_delivery_product_variant) {\n                vm.orderDeliveryProductVariantsByOrderProductVariantIds[sale_order_delivery_product_variant.order_product_variant] = sale_order_delivery_product_variant;\n              });\n              OrderActionsService.sendReloadTableEvent();\n            }\n          });\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('SALE.' + ORDER_DELIVERY_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return SALE_ORDER_DELIVERY_STATUS_COLORS[status];\n    }\n\n\n    function prepare() {\n      if (Session.hasPermission('wholesale.sales.sale.delivery.prepare')) {\n        OrderActionsService.showProgressBar('SALE.PREPARING_DELIVERY_PROGRESS_BAR');\n        OrderActionsService.changeStatus('prepare');\n      }\n    }\n\n    function ship() {\n      if (Session.hasPermission('wholesale.sales.sale.delivery.ship')) {\n        OrderActionsService.showProgressBar('SALE.SHIPPING_DELIVERY_PROGRESS_BAR');\n        OrderActionsService.changeStatus('ship');\n      }\n    }\n\n    function receive() {\n      if (Session.hasPermission('wholesale.sales.sale.delivery.ship')) {\n        OrderActionsService.showProgressBar('SALE.RECEIVING_DELIVERY_PROGRESS_BAR');\n        OrderActionsService.changeStatus('receive');\n      }\n    }\n\n    function cancel() {\n      if (Session.hasPermission('wholesale.sales.sale.delivery.ship')) {\n        OrderActionsService.showProgressBar('SALE.CANCEL_DELIVERY_PROGRESS_BAR');\n        OrderActionsService.changeStatus('cancel');\n      }\n    }\n\n    function gotoSales() {\n      $state.go('app.wholesale.sales');\n    }\n\n    function statusNotChanged() {\n      if (\n        vm.saleOrderDelivery.status ===\n        SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_DRAFT ||\n        vm.saleOrderDelivery.status ===\n        SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_PREPARED\n      ) {\n        $state.go('app.wholesale.sales.sale.deliveries');\n      } else if (\n        vm.sale.status === SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_SHIPPED\n      ) {\n        $state.go('app.wholesale.sales.sale.products', { id: vm.sale.id });\n      }\n    }\n\n    function statusChanged(option) {\n      api.inventories.saleOrderDeliveries.get({ id: vm.saleOrderDelivery.id },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.changingStatus = false;\n            vm.saleOrderDelivery.autocode = response.autocode;\n            vm.saleOrderDelivery.canceled_at = response.canceled_at;\n            vm.saleOrderDelivery.canceled_by = response.canceled_by;\n            vm.saleOrderDelivery.created_at = response.created_at;\n            vm.saleOrderDelivery.created_by = response.created_by;\n            vm.saleOrderDelivery.created_by_fullname = response.created_by_fullname;\n            vm.saleOrderDelivery.expected_at = response.expected_at;\n            vm.saleOrderDelivery.notes = response.notes;\n            vm.saleOrderDelivery.private_notes = response.private_notes;\n            vm.saleOrderDelivery.prepared_at = response.prepared_at;\n            vm.saleOrderDelivery.prepared_by = response.prepared_by;\n            vm.saleOrderDelivery.prepared_by_fullname = response.prepared_by_fullname;\n            vm.saleOrderDelivery.shipped_at = response.shipped_at;\n            vm.saleOrderDelivery.shipped_by = response.shipped_by;\n            vm.saleOrderDelivery.shipped_by_fullname = response.shipped_by_fullname;\n            vm.saleOrderDelivery.received_at = response.received_at;\n            vm.saleOrderDelivery.received_by_fullname = response.received_by_fullname;\n            vm.saleOrderDelivery.status = response.status;\n            $scope.order.status = response.status;\n            $scope.order.is_editable = response.is_editable;\n\n            OrderActionsService.sendChangeStatusEvent(response.sale_order_status);\n\n            if (option === 'prepare') {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('SALE.DELIVERY_PREPARED'))\n                .position('top right'));\n            } else if (option === 'ship') {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('SALE.DELIVERY_SHIPPED'))\n                .position('top right'));\n            } else if (option === 'receive') {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('SALE.DELIVERY_RECEIVED'))\n                .position('top right'));\n            }\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              OrderActionsService.showReloadToast();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        });\n    }\n\n    function showCancelDeliveryDialog() {\n      if (vm.saleOrderDelivery.status !== vm.SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_PARTIALLY_PREPARED) {\n        cancel();\n        return;\n      }\n\n      $mdDialog.show({\n        controller: 'DeliveryPurchaseController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/delivery/delivery.html',\n        clickOutsideToClose: true,\n        escapeToClose: true,\n        parent: angular.element($document.find('body'))\n      }).then(function() {\n        cancel();\n      });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSaleOrderActionsController', ndSaleOrderActionsController)\n    .directive('ndSaleOrderActions', ndSaleOrderActions);\n\n  /** @ngInject */\n  function ndSaleOrderActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        currentTab: '=',\n        options: '='\n      },\n      controller: 'ndSaleOrderActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-order-actions/sale-order-actions/nd-sale-order-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSaleOrderActionsController($scope,\n                                        $mdToast,\n                                        $state,\n                                        $document,\n                                        $mdDialog,\n                                        $http,\n                                        api,\n                                        $interval,\n                                        $filter,\n                                        $rootScope,\n                                        HTTP_STATUS,\n                                        MAX_PRODUCTS_PER_PDF,\n                                        SALE_ORDER_STATUSES,\n                                        SALE_ORDER_STATUSES_REVERSE,\n                                        Session,\n                                        OrderActionsService) {\n\n    var vm = this;\n    vm.saleOrder = $scope.order;\n    vm.changingStatus = false;\n    vm.saving = false;\n    vm.changed = false;\n    vm.SALE_ORDER_STATUSES = SALE_ORDER_STATUSES;\n    vm.SALE_ORDER_STATUSES_REVERSE = SALE_ORDER_STATUSES_REVERSE;\n\n    vm.endpoints = {\n      checkStatus: 'inventories.saleOrders',\n      changeStatus: 'inventories.saleOrderStatus'\n    };\n\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.cancel = cancel;\n    vm.partialDelivery = partialDelivery;\n    vm.importProductsDialog = importProductsDialog;\n    vm.updatePrices = updatePrices;\n    vm.createProforma = createProforma;\n    vm.printOrder = printOrder;\n    vm.printCatalog = printCatalog;\n    vm.downloadExcel = downloadExcel;\n    vm.downloadImages = downloadImages;\n    vm.fillAll = fillAll;\n    vm.onAutoUpdateProductsChange = onAutoUpdateProductsChange;\n\n    initialize();\n\n    function initialize() {\n      OrderActionsService.initialize(\n        vm,\n        vm.saleOrder,\n        vm.endpoints,\n        statusChanged\n      );\n    }\n\n    function fillAll() {\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('SALE.FILL_ALL_STOCK'))\n        .htmlContent($filter('translate')('SALE.FILL_ALL_STOCK_MSG'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.CONTINUE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n\n        if (vm.fetching) {\n          return;\n        }\n\n        if (vm.saleOrder.status === 1) {\n          vm.fetching = true;\n          api.inventories.saleOrders.update({\n            id: vm.saleOrder.id,\n            option: 'fill-all-stock'\n          }, function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              OrderActionsService.sendReloadTableEvent();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n          });\n        }\n\n      }, function() {\n\n      });\n    }\n\n    function printOrder(ev) {\n      $mdDialog.show({\n        controller: 'SalePrintDialogController as vm',\n        templateUrl: 'app/main/apps/wholesale/views/sale/dialogs/print/print.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          defEmail: vm.saleOrder.customer_instance ? vm.saleOrder.customer_instance.email : null\n        }\n      }).then(function(response) {\n        if (response) {\n          var send = vm.recordsTotal > MAX_PRODUCTS_PER_PDF.SALE_ORDER || response.sendEmail;\n          var email = response.emailTo;\n          api.inventories.saleOrders.get(\n            {\n              id: vm.saleOrder.id,\n              option: 'print',\n              print: response.print,\n              prices: response.prices,\n              pricing_tier: response.pricing_tier,\n              origin_codes: response.origin_codes,\n              images: response.images,\n              send: send,\n              email: email,\n              brand: response.brand,\n              hs_code: response.hs_code,\n              composition: response.composition,\n              attributes: response.attributes\n            },\n            function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                if (send) {\n                  var content = $filter('translate')('PURCHASE.SALE_ORDER_MESSAGE', { email: Session.user.email });\n                  if (email) {\n                    content = $filter('translate')('PURCHASE.SALE_ORDER_MESSAGE_EXTERNAL', { email: email });\n                  }\n                  var dialog = $mdDialog.alert()\n                    .clickOutsideToClose(true)\n                    .parent(angular.element(document.body))\n                    .title($filter('translate')('PURCHASE.SALE_ORDER'))\n                    .htmlContent(content)\n                    .ok($filter('translate')('GENERAL.CLOSE'));\n                  $mdDialog.show(dialog);\n                } else {\n                  var file = new Blob([response.data], { type: 'application/pdf' });\n                  var fileURL = URL.createObjectURL(file);\n                  window.open(fileURL);\n\n                  if(vm.saleOrder.autocode){\n                    var a = document.createElement('a');\n                    a.href = fileURL;\n                    a.download = vm.saleOrder.autocode + '.pdf';\n                    a.click();\n                  }\n                }\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                $mdDialog.hide();\n              }\n              vm.printing = false;\n            }\n          );\n        }\n      });\n    }\n\n    function downloadExcel() {\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n\n      var url = api.urls.inventories.saleOrdersDownloadExcel.replace(':id', vm.saleOrder.id);\n      var data = {};\n      var config = {};\n\n      $http.post(url, data, { responseType: 'arraybuffer' }).then(\n        function(response, fn, status) {\n          if (response['status'] === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('SALE.GENERATING_EXCEL'))\n              .htmlContent($filter('translate')('SALE.GENERATING_EXCEL_MESSAGE', { email: Session.user.email }))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.saving = false;\n        },\n        function(response) {\n          vm.saving = false;\n        }\n      );\n    }\n\n    function downloadImages() {\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n\n      var url = api.urls.inventories.saleOrdersDownloadImages.replace(':id', vm.saleOrder.id);\n      var data = {};\n      var config = {};\n\n      $http.post(url, data, { responseType: 'arraybuffer' }).then(\n        function(response) {\n\n          if (response.status == 200) {\n            // create a download anchor tag\n            var downloadLink = document.createElement('a');\n            downloadLink.target = '_blank';\n            downloadLink.download = vm.saleOrder.autocode + '_PRODUCT_IMAGES.zip';\n\n            // convert downloaded data to a Blob\n            var blob = new Blob([response.data], { type: 'application/octet-stream' });\n\n            // create an object URL from the Blob\n            var URL = window.URL || window.webkitURL;\n            var downloadUrl = URL.createObjectURL(blob);\n\n            // set object URL as the anchor's href\n            downloadLink.href = downloadUrl;\n\n            // append the anchor to document body\n            document.body.appendChild(downloadLink);\n\n            // fire a click event on the anchor\n            downloadLink.click();\n\n            // cleanup: remove element and revoke object URL\n            document.body.removeChild(downloadLink);\n            URL.revokeObjectURL(downloadUrl);\n          }\n\n          vm.saving = false;\n        },\n        function(response) {\n          vm.saving = false;\n        }\n      );\n    }\n\n    function printCatalog() {\n      $mdDialog.show({\n        controller: 'PurchasePrintCatalogDialogController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/print-catalog/print-catalog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        params: {\n          isSaleOrder: true\n        }\n      }).then(function(data) {\n        api.inventories.saleOrders.get(\n          {\n            id: vm.saleOrder.id,\n            option: 'print-catalog',\n            show_origin_code: data.showOriginCode,\n            show_totals: data.showTotals,\n            show_product_description: data.showProductDescription,\n            products_per_page: data.productsPerPage\n          },\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('SALE.SALE_CATALOG'))\n                .htmlContent($filter('translate')('SALE.SALE_CATALOG_MESSAGE', { email: Session.user.email }))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n              $mdDialog.show(dialog);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      }, function() {\n        // Cancel button clicked\n      });\n\n    }\n\n    function createProforma() {\n\n      if (vm.printing)\n        return;\n\n      vm.printing = true;\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('SALE.CREATE_PROFORMA_INVOICE'))\n        .htmlContent($filter('translate')('SALE.CREATE_PROFORMA_INVOICE_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.CREATE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n\n        api.accounting.invoices.save({\n            option: 'generate-sale-order-proforma-invoice',\n            sale_order_id: vm.saleOrder.id\n            //serial_number_type_id: vm.invoiceSerialNumberTypeId\n          }, function(response, callback, status) {\n            if (status == HTTP_STATUS.HTTP_201_CREATED) {\n              $state.go('app.accounting.proformas.proforma', { id: response.id });\n            }\n            vm.printing = false;\n          }\n        );\n\n      }, function() {\n        vm.printing = false;\n      });\n\n    }\n\n    function statusChanged(option) {\n      api.inventories.saleOrders.get({ id: vm.saleOrder.id },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.saleOrder.status = response.status;\n            $scope.order.status = response.status;\n            $scope.order.is_editable = response.is_editable;\n            vm.saleOrder.is_editable = response.is_editable;\n            $scope.order.changing_status = response.changing_status;\n            $scope.order.pending_to_change_status = response.pending_to_change_status;\n\n            vm.changingStatus = false;\n            OrderActionsService.sendChangeStatusEvent(response.status);\n\n            if (option === 'order') {\n              $state.go('app.wholesale.sales.sale.deliveries', { id: vm.saleOrder.id });\n            }\n          }\n\n        });\n    }\n\n    function onAutoUpdateProductsChange() {\n      api.inventories.saleOrders.update(vm.saleOrder,\n        function(response, fn, status) {\n          if (status !== HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n\n          vm.saleOrder = response;\n          vm.updatePrices();\n        });\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('wholesale.sales.sale.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportSaleProductsDialogController as vm',\n          templateUrl: 'app/main/apps/wholesale/views/sale/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            saleId: vm.saleOrder.id\n          }\n        }).then(function(response) {\n          OrderActionsService.sendReloadTableEvent();\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function partialDelivery(allocate) {\n      OrderActionsService.showProgressBar('SALE.CONFIRM_PROGRESS_BAR');\n      if(allocate){\n        OrderActionsService.changeStatus('allocate');\n      }else{\n        OrderActionsService.changeStatus('order');\n      }\n    }\n\n    function cancel() {\n      OrderActionsService.showProgressBar('SALE.CANCEL_PROGRESS_BAR');\n      OrderActionsService.changeStatus('cancel');\n    }\n\n    function updatePrices() {\n\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n      vm.changed = true;\n      api.inventories.saleOrders.save(\n        {\n          id: vm.saleOrder.id,\n          option: 'update-products'\n        },\n        function(response) {\n          vm.saving = false;\n          vm.changed = false;\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('SALE.PRICES_UPDATED'))\n            .position('top right'));\n          OrderActionsService.sendReloadTableEvent();\n\n        });\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.saleOrders.get({\n        id: vm.saleOrder.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            saleOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPurchaseOrderDeliveryActionsController', ndPurchaseOrderDeliveryActionsController)\n    .directive('ndPurchaseOrderDeliveryActions', ndPurchaseOrderDeliveryActions);\n\n  /** @ngInject */\n  function ndPurchaseOrderDeliveryActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        currentTab: '=',\n        options: '='\n      },\n      controller: 'ndPurchaseOrderDeliveryActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-order-actions/purchase-order-delivery-actions/nd-purchase-order-delivery-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPurchaseOrderDeliveryActionsController($scope,\n                                                    $mdToast,\n                                                    $state,\n                                                    $document,\n                                                    $mdDialog,\n                                                    $window,\n                                                    api,\n                                                    $interval,\n                                                    $filter,\n                                                    $rootScope,\n                                                    HTTP_STATUS,\n                                                    PURCHASE_ORDER_STATUSES_REVERSE,\n                                                    ORDER_DELIVERY_STATUSES_REVERSE,\n                                                    Session) {\n\n    var PULLING_FREQUENCE = 2 * 1000;\n    var vm = this;\n    vm.purchaseOrderDelivery = $scope.order;\n    vm.changingStatus = false;\n\n    vm.taxes = [];\n    vm.ORDER_DELIVERY_STATUSES_REVERSE = ORDER_DELIVERY_STATUSES_REVERSE;\n\n    vm.showCancelDeliveryDialog = showCancelDeliveryDialog;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.cancel = cancel;\n    vm.transfer = transfer;\n    vm.confirm = confirm;\n    vm.autocomplete = autocomplete;\n    vm.importProductsDialog = importProductsDialog;\n    vm.openDialogSetTaxToAllPurchaseOrderProducts = openDialogSetTaxToAllPurchaseOrderProducts;\n    vm.openDialogSetDiscountToAllPurchaseOrderProducts = openDialogSetDiscountToAllPurchaseOrderProducts;\n    vm.printDelivery = printDelivery;\n\n    initialize();\n\n    function initialize() {\n      vm.startPullingEvent = $scope.$on('ndPurchaseOrderDeliveryActionsController::startPulling', function(event, args) {\n        showProgressBar('PURCHASE.DELIVERY_CONFIRM_PROGRESS_BAR');\n        vm.changingStatus = true;\n        startPulling('confirm');\n      });\n\n      vm.changingStatus = vm.purchaseOrderDelivery.changing_status || vm.purchaseOrderDelivery.pending_to_change_status;\n      if (vm.changingStatus) {\n        startPulling();\n      }\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n    }\n\n    function sendReloadTaxesEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n\n    function startPulling(option) {\n      vm.timeout = $interval(function() {\n        api.inventories.purchaseOrderDeliveries.get({\n          id: vm.purchaseOrderDelivery.id,\n          purchase_order_id: vm.purchaseOrderDelivery.purchase_order,\n          option: 'check-status'\n        }, function(result, callback, status) {\n          if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n            $mdDialog.hide();\n            $interval.cancel(vm.timeout);\n            $rootScope.$broadcast('changeOrderStatus::orderType', { status: result.purchase_order_status });\n            $state.go('app.inventory.purchases.purchase.deliveries', { id: vm.purchaseOrderDelivery.purchase_order });\n          } else if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (!result.pending_to_change_status && !result.changing_status) {\n              $mdDialog.hide();\n              $interval.cancel(vm.timeout);\n              statusChanged(option);\n            }\n          }\n\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function statusChanged(option) {\n      api.inventories.purchaseOrderDeliveries.get({ id: vm.purchaseOrderDelivery.id },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.purchaseOrderDelivery.status = response.status;\n            $scope.order.status = response.status;\n            $scope.order.is_editable = response.is_editable;\n            $scope.order.changing_status = response.changing_status;\n            $scope.order.pending_to_change_status = response.pending_to_change_status;\n\n            vm.changingStatus = false;\n            sendChangeStatusEvent(response.purchase_order_status);\n\n            if (option === 'confirm') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.DELIVERY_CONFIRMED'))\n                  .position('top right'));\n            }\n\n            if (option === 'cancel') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.DELIVERY_CANCELLED'))\n                  .position('top right'));\n            }\n          }\n\n        });\n    }\n\n    function changeStatus(option, calculatePurchaseDdpCostPrice) {\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n      api.inventories.purchaseOrderDeliveriesStatus.update(\n        {\n          id: vm.purchaseOrderDelivery.id,\n          option: option,\n          calculate_purchase_ddp_cost_price: calculatePurchaseDdpCostPrice\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || response.success) {\n            startPulling(option);\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast();\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.changingStatus = false;\n          }\n        }\n      );\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'PURCHASE.PROCESSING_PURCHASE';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'PURCHASE.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function confirm() {\n      showDdpPricesDialog();\n    }\n\n    function cancel() {\n      showProgressBar('PURCHASE.DELIVERY_CANCEL_PROGRESS_BAR');\n      changeStatus('cancel');\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_DELIVERY_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function openDialogSetDiscountToAllPurchaseOrderProducts() {\n      $mdDialog.show({\n        controller: 'SetDiscountToPurchaseProductsController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/set-discount-to-purchase-products.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          purchaseId: vm.purchaseOrderDelivery.purchase_order\n        }\n      }).then(function(response) {\n        sendReloadTableEvent();\n      });\n    }\n\n    function openDialogSetTaxToAllPurchaseOrderProducts() {\n      $mdDialog.show({\n        controller: 'TaxSelectorController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/tax-selector.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          purchase: vm.purchaseOrderDelivery.purchase_order\n        }\n      }).then(function(response) {\n        sendReloadTaxesEvent(response);\n      });\n    }\n\n    function importProductsDialog(isUid) {\n      if (Session.hasPermission('inventory.purchases.purchase.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportPurchaseOrderDeliveryProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/import-purchase-order-delivery-products/import-purchase-order-delivery-products-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          locals: {\n            deliveryId: vm.purchaseOrderDelivery.id,\n            isUid: isUid\n          }\n        }).then(function(response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', { email: Session.user.email }))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function showDdpPricesDialog() {\n      api.inventories.purchaseOrderDeliveries.update(\n        {\n          id: vm.purchaseOrderDelivery.id,\n          option: 'calculate-delivery-new-cost-prices'\n        },\n        function(response) {\n          if (response.new_cost_product_prices.length > 0) {\n            $mdDialog.show({\n              controller: 'CostPricesDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/show-ddp-prices/show-ddp-prices-dialog.html',\n              parent: angular.element($document.find('body')),\n              locals: {\n                costProductPrices: response\n              },\n              clickOutsideToClose: false,\n              escapeToClose: false\n            }).then(function(result) {\n              $mdDialog.hide();\n              showProgressBar('PURCHASE.DELIVERY_CONFIRM_PROGRESS_BAR');\n              changeStatus('confirm', true);\n            }).catch(function() {\n              showProgressBar('PURCHASE.DELIVERY_CONFIRM_PROGRESS_BAR');\n              changeStatus('confirm', false);\n            });\n          } else {\n            showProgressBar('PURCHASE.DELIVERY_CONFIRM_PROGRESS_BAR');\n            vm.changingStatus = true;\n            startPulling('confirm');\n          }\n        },\n        function(error) {\n          return wrapped.reject(error);\n        }\n      );\n    }\n\n    function autocomplete() {\n      if (vm.changingStatus)\n        return;\n      vm.changingStatus = true;\n      api.inventories.purchaseOrderDeliveries.update({\n          id: vm.purchaseOrderDelivery.id,\n          option: 'autocomplete'\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $window.location.reload();\n          }\n          vm.changingStatus = false;\n        }\n      );\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.purchaseOrderDeliveries.get({\n        id: vm.purchaseOrderDelivery.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            purchaseOrderDelivery: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function showCancelDeliveryDialog() {\n      $mdDialog.show({\n        controller: 'DeliveryPurchaseController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/delivery/delivery.html',\n        clickOutsideToClose: true,\n        escapeToClose: true,\n        parent: angular.element($document.find('body'))\n      }).then(function() {\n        cancel();\n      });\n    }\n\n    function transfer() {\n      if (Session.hasPermission('inventory.purchases.purchase.delivery.transfer')) {\n        if (vm.changingStatus) {\n          return;\n        }\n        vm.changingStatus = true;\n        api.inventories.purchaseOrderDeliveriesTransfer.save(\n          vm.purchaseOrderDelivery,\n          function(response) {\n            vm.changingStatus = false;\n            $state.go('app.inventory.transfers.transfer.details', { id: response.transfer_order });\n          }\n        );\n      }\n    }\n\n    function printDelivery() {\n\n      var defEmail = vm.purchaseOrderDelivery.contact ? vm.purchaseOrderDelivery.contact.email : '';\n\n      $mdDialog.show({\n        controller: 'PrintOrderDeliveryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/nd-print-order-delivery-button/print-order-delivery-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          params: {\n            defEmail: defEmail,\n            customDdpPrices: null,\n            orderDelivery: vm.purchaseOrderDelivery,\n            isSaleOrderDelivery: false,\n            isTransferOrderDelivery: false,\n            isPurchaseOrderDelivery: true,\n            orderBy: vm.orderBy\n          }\n        }\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndOrderProductPriceActionsController', ndOrderProductPriceActionsController)\n    .directive('ndOrderProductPriceActions', ndOrderProductPriceActions);\n\n  /** @ngInject */\n  function ndOrderProductPriceActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        showTaxes: '&',\n        editable: '=',\n        orderProduct: '=',\n        taxes: '=',\n        showPriceTaxes: '=',\n        disableTaxes: '=',\n        reloadCallback: '&',\n        order: '=',\n        options: '=',\n        type: '='\n      },\n      controller: 'ndOrderProductPriceActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-order-actions/nd-order-product-price-actions/nd-order-product-price-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndOrderProductPriceActionsController($scope,\n                                                HTTP_STATUS,\n                                                api,\n                                                $rootScope,\n                                                $mdDialog,\n                                                $mdToast,\n                                                $document,\n                                                Session,\n                                                $filter) {\n\n    $scope.openDatepicker = openDatepicker;\n    $scope.changePurchaseOrderProductDate = changePurchaseOrderProductDate;\n    $scope.createOrUpdateOrderProductPrice = createOrUpdateOrderProductPrice;\n    $scope.createOrUpdateOrderProductDiscount = createOrUpdateOrderProductDiscount;\n    $scope.openTaxDialog = openTaxDialog;\n    $scope.session = Session;\n    $scope.open = false;\n    $scope.productDiscountOriginal = null;\n\n    var vm = this;\n    vm.taxSearchText = '';\n\n    initialize();\n\n    function initialize() {\n      $scope.getShowTaxesEvent = $scope.$on('reload-totals::showTaxesEvent', function(event, showTaxes) {\n        $scope.showTaxes = showTaxes;\n      });\n    }\n\n    function changePurchaseOrderProductDate() {\n      api.inventories.purchaseOrderProducts.update({\n        id: $scope.orderProduct.id,\n        start_date: $scope.orderProduct.start_date ? $scope.orderProduct.start_date.getTime() : null\n      });\n    }\n\n    function createOrUpdateOrderProductDiscount() {\n      if (isNaN($scope.orderProduct.discount)) {\n        return;\n      }\n\n      if (($scope.type === 'PurchaseOrder' || $scope.type === 'PurchaseOrderDelivery') && $scope.productDiscountOriginal === $scope.orderProduct.discount) {\n        return;\n      }\n\n      api.inventories.orderProducts.save({\n        id: $scope.orderProduct.id,\n        order_id: $scope.order.id,\n        order_type: $scope.type,\n        discount: $scope.orderProduct.discount,\n        option: 'set-discount'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED || status === HTTP_STATUS.HTTP_200_OK) {\n          reloadCallback(response);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function createOrUpdateOrderProductPrice() {\n      var price = null;\n      if ($scope.options.productOptions.show_prices_incl_tax.selected) {\n        if (isNaN($scope.orderProduct.price_excl_tax)) {\n          return;\n        }\n        price = $scope.orderProduct.price_incl_tax;\n      } else {\n        if (isNaN($scope.orderProduct.price_excl_tax)) {\n          return;\n        }\n        price = $scope.orderProduct.price_excl_tax;\n      }\n\n      api.inventories.orderProducts.save({\n        id: $scope.orderProduct.id,\n        price: price,\n        order_id: $scope.order.id,\n        order_type: $scope.type,\n        incl_tax: $scope.options.productOptions.show_prices_incl_tax.selected,\n        tax: $scope.orderProduct.tax,\n        option: 'set-price'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED || status === HTTP_STATUS.HTTP_200_OK) {\n          reloadCallback(response);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n\n    }\n\n    function openTaxDialog() {\n      $mdDialog.show({\n        controller: 'ConfigurationTaxDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/tax-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          tax: {}\n        }\n      }).then(function(result) {\n        $scope.taxes.push(result);\n        $scope.orderProduct.provider_price.tax = result.id;\n      });\n    }\n\n    function reloadCallback(response) {\n      $scope.reloadCallback({ response: response });\n    }\n\n    function openDatepicker() {\n      if (!$scope.open) {\n        $scope.open = true;\n      }\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPurchaseActionsController', ndPurchaseActionsController)\n    .directive('ndPurchaseActions', ndPurchaseActions);\n\n  /** @ngInject */\n  function ndPurchaseActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        options: '='\n      },\n      controller: 'ndPurchaseActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-order-actions/purchase-order-actions/nd-purchase-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPurchaseActionsController($scope,\n                                       HTTP_STATUS,\n                                       api,\n                                       $mdDialog,\n                                       $mdMenu,\n                                       $state,\n                                       $rootScope,\n                                       Session,\n                                       MAX_PRODUCTS_PER_PDF,\n                                       $document,\n                                       PURCHASE_ORDER_STATUSES_REVERSE,\n                                       $mdToast,\n                                       $filter) {\n\n    var vm = this;\n    vm.purchaseOrder = $scope.order;\n    vm.changed = false;\n    vm.changingStatus = false;\n    vm.saving = false;\n    vm.fetching = false;\n    vm.PURCHASE_ORDER_STATUSES_REVERSE = PURCHASE_ORDER_STATUSES_REVERSE;\n\n    vm.order = order;\n    vm.partiallyReceive = partiallyReceive;\n    vm.receive = receive;\n    vm.cancel = cancel;\n    vm.printOrder = printOrder;\n    vm.printCatalog = printCatalog;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.updatePrices = updatePrices;\n    vm.produce = produce;\n    vm.importProductsDialog = importProductsDialog;\n    vm.importSaleOrdersDialog = importSaleOrdersDialog;\n    vm.downloadExcel = downloadExcel;\n    vm.duplicate = duplicate;\n    vm.openDialogSetTaxToAllPurchaseOrderProducts = openDialogSetTaxToAllPurchaseOrderProducts;\n    vm.openDialogSetDiscountToAllPurchaseOrderProducts = openDialogSetDiscountToAllPurchaseOrderProducts;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function order() {\n      changeStatus('order');\n    }\n\n    function partiallyReceive() {\n      changeStatus('partiallyreceive');\n    }\n\n    function receive() {\n      changeStatus('receive');\n    }\n\n    function receiveAndConfirm(calculatePurchaseDdpCostPrice) {\n      changeStatus('receiveandconfirm', calculatePurchaseDdpCostPrice);\n    }\n\n    function cancel() {\n      changeStatus('cancel');\n    }\n\n    function calculateNewDdpCostPrice(purchaseOrderDeliveryId) {\n      api.inventories.purchaseOrderDeliveries.update(\n        {\n          id: purchaseOrderDeliveryId,\n          option: 'calculate-delivery-new-cost-prices'\n        },\n        function(response) {\n          if (response.new_cost_product_prices.length > 0) {\n            $mdDialog.show({\n              controller: 'CostPricesDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/show-ddp-prices/show-ddp-prices-dialog.html',\n              clickOutsideToClose: false,\n              escapeToClose: false,\n              parent: angular.element($document.find('body')),\n              locals: {\n                costProductPrices: response\n              }\n            }).then(function(result) {\n              vm.changingStatus = false;\n              receiveAndConfirm(true);\n            }).catch(function() {\n              vm.changingStatus = false;\n              receiveAndConfirm(false);\n            });\n          } else {\n            vm.changingStatus = false;\n            receiveAndConfirm(false);\n          }\n        },\n        function(error) {\n          return wrapped.reject(error);\n        }\n      );\n    }\n\n    function showUpdatePricesToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('PURCHASE.ERROR_VARIANTS_DELETED'))\n        .action($filter('translate')('SALE.UPDATE_PRODUCTS'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          vm.updatePrices();\n        }\n      });\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n\n    function sendReloadAllEvent(response) {\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n      sendReloadTableEvent(response);\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function changeStatus(option, calculatePurchaseDdpCostPrice) {\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n\n      api.inventories.purchaseOrderStatus.update(\n        {\n          id: vm.purchaseOrder.id,\n          option: option,\n          calculate_purchase_ddp_cost_price: calculatePurchaseDdpCostPrice\n        },\n        function(response, callback, status) {\n          if (response.success) {\n            vm.purchaseOrder.status = response.purchase_order.status;\n            $scope.order.status = response.purchase_order.status;\n            $scope.order.is_editable = response.purchase_order.is_editable;\n            sendChangeStatusEvent($scope.order.status);\n\n            if (option === 'order') {\n              vm.changingStatus = false;\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.PURCHASE_ORDERED'))\n                  .position('top right'));\n            }\n            if (option === 'receive') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.PURCHASE_RECEIVED'))\n                  .position('top right'));\n              if (response.purchase_order.purchase_order_deliveries_id) {\n                calculateNewDdpCostPrice(response.purchase_order.purchase_order_deliveries_id[0]);\n              }\n            }\n            if (option === 'receiveandconfirm') {\n              vm.changingStatus = false;\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.PURCHASE_ORDERED'))\n                  .position('top right'));\n              $state.go('app.inventory.purchases.purchase.deliveries.delivery', {\n                id: vm.purchaseOrder.id,\n                orderDeliveryId: response.purchase_order.purchase_order_deliveries_id[0]\n              });\n            }\n            if (option === 'partiallyreceive') {\n              vm.changingStatus = false;\n              $state.go('app.inventory.purchases.purchase.deliveries', { id: vm.purchaseOrder.id });\n            }\n\n            if (option === 'cancel') {\n              vm.changingStatus = false;\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.PURCHASE_CANCELLED'))\n                  .position('top right'));\n            }\n\n            $scope.$broadcast('initialize-purchase', { purchase: vm.purchaseOrder });\n\n          } else {\n            vm.changingStatus = false;\n            if (response.error) {\n              var errorMessage = 'ERRORS.' + response.error;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage, { status: response.order_status })).position('top right'));\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast();\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              showUpdatePricesToast();\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right'));\n            }\n          }\n        }\n      );\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function printOrder(ev) {\n      $mdDialog.show({\n        controller: 'PurchasePrintDialogController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/print/print.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          defEmail: vm.purchaseOrder.contact_instance ? vm.purchaseOrder.contact_instance.email : null\n        }\n      }).then(function(response) {\n        if (response) {\n          var send = vm.recordsTotal > MAX_PRODUCTS_PER_PDF.PURCHASE_ORDER || response.sendEmail;\n          var email = response.emailTo;\n          api.inventories.purchaseOrders.get(\n            {\n              id: vm.purchaseOrder.id,\n              option: 'print',\n              print: response.print,\n              prices: response.prices,\n              pricing_tier: response.pricingTier,\n              origin_codes: response.originCodes,\n              images: response.images,\n              send: send,\n              email: email,\n              brand: response.brand,\n              hs_code: response.hs_code,\n              composition: response.composition,\n              attributes: response.attributes\n            }, function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                if (send) {\n                  var content = $filter('translate')('PURCHASE.PURCHASE_ORDER_MESSAGE', { email: Session.user.email });\n                  if (email) {\n                    content = $filter('translate')('PURCHASE.PURCHASE_ORDER_MESSAGE_EXTERNAL', { email: email });\n                  }\n                  var dialog = $mdDialog.alert()\n                    .clickOutsideToClose(true)\n                    .parent(angular.element(document.body))\n                    .title($filter('translate')('PURCHASE.PURCHASE_ORDER'))\n                    .htmlContent(content)\n                    .ok($filter('translate')('GENERAL.CLOSE'));\n                  $mdDialog.show(dialog);\n                } else {\n                  var file = new Blob([response.data], { type: 'application/pdf' });\n                  var fileURL = URL.createObjectURL(file);\n                  window.open(fileURL);\n\n                  if (vm.purchaseOrder.autocode) {\n                    var a = document.createElement('a');\n                    a.href = fileURL;\n                    a.download = vm.purchaseOrder.autocode + '.pdf';\n                    a.click();\n                  }\n\n                }\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                $mdDialog.hide();\n              }\n            });\n        }\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function printCatalog(ev) {\n      $mdDialog.show({\n        controller: 'PurchasePrintCatalogDialogController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/print-catalog/print-catalog.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: false,\n        params: {\n          isSaleOrder: false\n        }\n      }).then(function(data) {\n        api.inventories.purchaseOrders.get(\n          {\n            id: vm.purchaseOrder.id,\n            option: 'print-catalog',\n            show_prices: data.showPrice,\n            show_origin_code: data.showOriginCode,\n            show_totals: data.showTotals,\n            show_product_description: data.showProductDescription,\n            products_per_page: data.productsPerPage\n          },\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('PURCHASE.PURCHASE_CATALOG'))\n                .htmlContent($filter('translate')('PURCHASE.PURCHASE_CATALOG_MESSAGE', { email: Session.user.email }))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n              $mdDialog.show(dialog);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      }, function() {\n        // Cancel button clicked\n      });\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.purchaseOrders.get({\n        id: vm.purchaseOrder.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            purchaseOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function updatePrices() {\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n      vm.changed = true;\n      api.inventories.purchaseOrders.save(\n        {\n          id: vm.purchaseOrder.id,\n          option: 'update-prices'\n        },\n        function(response) {\n          vm.saving = false;\n          vm.changed = false;\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('SALE.PRICES_UPDATED'))\n            .position('top right'));\n          sendReloadAllEvent(response);\n        });\n    }\n\n    function produce() {\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n      vm.changed = true;\n      api.inventories.purchaseOrders.save(\n        {\n          id: vm.purchaseOrder.id,\n          option: 'produce'\n        },\n        function(response, callback, status) {\n          vm.saving = false;\n          vm.changed = false;\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            $state.go('app.manufacture.productions.production.products', { id: response.id });\n          }\n        });\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('inventory.purchases.purchase.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportPurchaseProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            purchaseId: vm.purchaseOrder.id\n          }\n        }).then(function(response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', { email: Session.user.email }))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n          sendReloadAllEvent(response);\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function importSaleOrdersDialog(ev) {\n      if (Session.hasPermission('inventory.purchases.purchase.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportSaleOrdersDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/import-sale-orders/import-sale-orders.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {}\n        }).then(function(response) {\n\n          if (vm.changingStatus)\n            return;\n\n          vm.changingStatus = true;\n\n          api.inventories.purchaseOrders.save({\n            id: vm.purchaseOrder.id,\n            order_ids: response,\n            option: 'fill-from-orders'\n          }, function(response, callback, status) {\n\n            // Getting the total order product variants\n            vm.changingStatus = false;\n            sendReloadAllEvent(response);\n          });\n\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function downloadExcel() {\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n\n      api.inventories.purchaseOrders.save(\n        {\n          id: vm.purchaseOrder.id,\n          option: 'download-excel'\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('PURCHASE.GENERATING_EXCEL'))\n              .htmlContent($filter('translate')('PURCHASE.GENERATING_EXCEL_MESSAGE', { email: Session.user.email }))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n            vm.saving = false;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        });\n    }\n\n    function duplicate() {\n      if (Session.hasPermission('inventory.purchases.create')) {\n        if (vm.changingStatus) {\n          return;\n        }\n\n        vm.changingStatus = true;\n\n        api.inventories.purchaseOrders.save(\n          {\n            id: vm.purchaseOrder.id,\n            option: 'duplicate'\n          }, function(response) {\n            vm.changingStatus = false;\n            $state.go('app.inventory.purchases.purchase.details', { id: response.id });\n          }\n        );\n      }\n    }\n\n    function openDialogSetDiscountToAllPurchaseOrderProducts() {\n      $mdDialog.show({\n        controller: 'SetDiscountToPurchaseProductsController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/set-discount-to-purchase-products.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          purchaseId: vm.purchaseOrder.id\n        }\n      }).then(function(response) {\n        sendReloadAllEvent(response);\n      });\n    }\n\n    function openDialogSetTaxToAllPurchaseOrderProducts() {\n      $mdDialog.show({\n        controller: 'TaxSelectorController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/tax-selector.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          purchase: vm.purchaseOrder.id\n        }\n      }).then(function(response) {\n        sendReloadAllEvent(response);\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'xeditable',\n        'app.services.session',\n        'wipImageZoom',\n        'ui.tree',\n        'dndLists',\n        'mm.iban',\n        'ngSanitize',\n        'ngMaterialDateRangePicker',\n        'ui.grid',\n        'ui.grid.resizeColumns',\n        'ui.grid.pagination',\n        'ui.grid.moveColumns',\n        'ui.grid.selection',\n        'ui.grid.cellNav',\n        'ui.grid.moveColumns',\n        'ui.grid.pinning',\n        'ui.grid.saveState',\n        //'ui.grid.edit',\n        //'ui-grid-rowEdit'\n        'ui.grid.exporter'\n      ]\n    )\n    .config(config);\n\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.inventory', {\n        abstract: true,\n        url: '/inventory'\n      })\n\n      /**\n       * CONFIGURATION BASE\n       */\n\n      .state('app.inventory.configuration', {\n        url: '/configuration',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/configuration.html',\n            controller: 'ConfigurationController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'configuration'\n      })\n\n      /**\n       * CONFIUGRATION COMPANY\n       */\n\n      .state('app.inventory.configuration.company', {\n        url: '/company',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/company.html',\n            controller: 'ConfigurationCompanyController as vm'\n          }\n        },\n        resolve: {\n          AccountData: function(apiResolver) {\n            return apiResolver.resolve('account.myCompany@get');\n          }\n        },\n        bodyClass: 'company'\n      })\n\n      /**\n       * CONFIUGRATION BARCODES\n       */\n\n      .state('app.inventory.configuration.email', {\n        url: '/email',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/email.html',\n            controller: 'ConfigurationEmailController as vm'\n          }\n        },\n        resolve: {\n          AccountData: function(apiResolver) {\n            return apiResolver.resolve('account.myCompany@get');\n          }\n        },\n        bodyClass: 'email'\n      })\n\n      /**\n       * CONFIGURATION DOCUMENTS\n       */\n\n      .state('app.inventory.configuration.documents', {\n        url: '/documents',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/documents.html',\n            controller: 'DocumentsController as vm'\n          }\n        },\n        resolve: {\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'documents'\n      })\n\n      /**\n       * CONFIUGRATION TAXES\n       */\n\n      .state('app.inventory.configuration.taxes', {\n        url: '/taxes',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/taxes.html',\n            controller: 'ConfigurationTaxController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'taxes'\n      })\n\n      /**\n       * CONFIUGRATION PAYMENT METHODS\n       */\n\n      .state('app.inventory.configuration.payment_methods', {\n        url: '/payment-methods',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/payment-methods.html',\n            controller: 'ConfigurationPaymentMethodsController as vm'\n          }\n        }\n      })\n\n      /**\n       * CONFIUGRATION SHIPPING METHODS\n       */\n\n      .state('app.inventory.configuration.shipping_methods', {\n        url: '/shipping-methods',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/shipping-methods.html',\n            controller: 'ConfigurationShippingMethodsController as vm'\n          }\n        }\n      })\n\n      /**\n       * CONFIUGRATION SHIPPING BOXES\n       */\n\n      .state('app.inventory.configuration.shipping_boxes', {\n        url: '/shipping-boxes',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/shipping-boxes.html',\n            controller: 'ConfigurationShippingBoxesController as vm'\n          }\n        }\n      })\n\n      /**\n       * CONFIUGRATION TAGS\n       */\n\n      .state('app.inventory.configuration.tags', {\n        url: '/tags',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/tags.html',\n            controller: 'ConfigurationTagsController as vm'\n          }\n        },\n        resolve: {\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        }\n      })\n\n      /**\n       * CONFIUGRATION APPEARANCE\n       */\n\n      .state('app.inventory.configuration.appearance', {\n        url: '/appearance',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/appearance.html',\n            controller: 'ConfigurationAppearanceController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'account-appearance'\n      })\n\n\n      /**\n       * CONFIUGRATION BRANDS\n       */\n\n      .state('app.inventory.configuration.brands', {\n        url: '/brands',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/brands.html',\n            controller: 'ConfigurationBrandsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'variants'\n      })\n\n      /**\n       * CONFIUGRATION CATEGORIES\n       */\n\n      .state('app.inventory.configuration.categories', {\n        url: '/categories',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/categories.html',\n            controller: 'ConfigurationCategoriesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'categories'\n      })\n\n      /**\n       * CONFIUGRATION ATTRIBUTES\n       */\n\n      .state('app.inventory.configuration.attributes', {\n        url: '/attributes',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/attributes.html',\n            controller: 'ConfigurationAttributesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'attributes'\n      })\n\n      /**\n       * CONFIUGRATION COMPOSITIONS\n       */\n\n      .state('app.inventory.configuration.compositions', {\n        url: '/compositions',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/compositions.html',\n            controller: 'ConfigurationCompositionsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'compositions'\n      })\n\n      /**\n       * CONFIUGRATION PRICING-TIERS\n       */\n\n      .state('app.inventory.configuration.pricing_tiers', {\n        url: '/pricing-tiers',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/pricing-tiers.html',\n            controller: 'ConfigurationPricingTiersController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'pricing-tiers'\n      })\n\n      /**\n       * CONFIUGRATION SEASONS\n       */\n\n      .state('app.inventory.configuration.seasons', {\n        url: '/seasons',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/seasons.html',\n            controller: 'ConfigurationSeasonsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'variants'\n      })\n\n      /**\n       * CONFIUGRATION VARIANTS\n       */\n\n      .state('app.inventory.configuration.variants', {\n        url: '/variants',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/variants.html',\n            controller: 'ConfigurationVariantsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'variants'\n      })\n\n      /**\n       * CONFIUGRATION BARCODES\n       */\n\n      .state('app.inventory.configuration.barcodes', {\n        url: '/barcodes',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/barcodes.html',\n            controller: 'ConfigurationBarcodesController as vm'\n          }\n        },\n        resolve: {\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'barcodes'\n      })\n\n      /**\n       * CONFIUGRATION AUTO IDS\n       */\n\n      .state('app.inventory.configuration.default_serial_numbers', {\n        url: '/default-serial-numbers',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/default-serial-numbers.html',\n            controller: 'ConfigurationDefaultSerialNumbersController as vm'\n          }\n        },\n        resolve: {\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          }\n        },\n        bodyClass: 'default-serial-numbers'\n      })\n\n      /**\n       * CONFIUGRATION REFERENCES\n       */\n\n      .state('app.inventory.configuration.serial_number_types', {\n        url: '/serial-number-types',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/serial-number-types.html',\n            controller: 'ConfigurationSerialNumberTypesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'serial-number-types'\n      })\n\n\n      /**\n       * CONFIUGRATION TICKETS\n       */\n\n      .state('app.inventory.configuration.ticket_templates', {\n        url: '/ticket-templates',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/ticket-templates.html',\n            controller: 'TicketTemplatesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'ticket-templates'\n      })\n\n      /**\n       * CONFIUGRATION MAIL\n       */\n\n      .state('app.inventory.configuration.mail_templates', {\n        url: '/mail-templates',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/mail-templates.html',\n            controller: 'MailTemplatesController as vm'\n          }\n        },\n        resolve: {\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          AccountData: function(apiResolver) {\n            return apiResolver.resolve('account.myCompany@get');\n          }\n        },\n        bodyClass: 'mail-templates'\n      })\n\n      /**\n       * LOYALTY CONFIGURATION\n       */\n\n      .state('app.inventory.configuration.loyalty', {\n        url: '/loyalty',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/loyalty.html',\n            controller: 'ConfigurationLoyaltyController as vm'\n          }\n        },\n        resolve: {\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          AccountData: function(apiResolver) {\n            return apiResolver.resolve('account.myCompany@get');\n          }\n        },\n        bodyClass: 'balance'\n      })\n\n      /**\n       * CONFIUGRATION ECOMMERCE CATEGORIES\n       */\n      .state('app.inventory.configuration.ecommerce_categories', {\n        url: '/ecommerce-categories',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/ecommerce-categories.html',\n            controller: 'ConfigurationEcommerceCategoriesController as vm'\n          }\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.categories@get');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              'serializer': 'SiteListSerializer'\n            });\n          }\n        },\n        bodyClass: 'ecommerce-categories'\n      })\n\n      /**\n       * CONFIUGRATION WEBHOOKS\n       */\n\n      .state('app.inventory.configuration.webhooks', {\n        url: '/webhooks',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/webhooks.html',\n            controller: 'ConfigurationWebhooksController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'variants'\n      })\n\n      /**\n       * STOCKS OPTIMIZATION\n       */\n\n      .state('app.inventory.configuration.stocks_optimization', {\n        url: '/stocks_optimization',\n        views: {\n          'subcontent@app.inventory.configuration': {\n            templateUrl: 'app/main/apps/inventory/views/configuration/tabs/stocks-optimization.html',\n            controller: 'ConfigurationStocksOptimizationController as vm'\n          }\n        },\n        resolve: {\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          }\n        },\n        bodyClass: 'company'\n      })\n\n      /**\n       * WAREHOUSES\n       */\n\n      .state('app.inventory.warehouses', {\n        url: '/warehouses',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/warehouses/warehouses.html',\n            controller: 'WarehousesController as vm'\n          }\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseLocationSerializer'\n            });\n          },\n          ContractedPlanLimitData: function(apiResolver, PLAN_LIMIT_CODES) {\n            return apiResolver.resolve('account.contractedPlanLimits@list', {\n              codes: [\n                PLAN_LIMIT_CODES.RETAIL_STORE_LIMIT,\n                PLAN_LIMIT_CODES.STORE_AND_SHOWROOM_LIMIT,\n                PLAN_LIMIT_CODES.WAREHOUSE_LIMIT\n              ].join(',')\n            });\n          }\n        },\n        bodyClass: 'warehouses'\n      })\n\n      /**\n       * WAREHOUSE BASE\n       */\n\n      .state('app.inventory.warehouses.warehouse', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/warehouse/warehouse.html',\n            controller: 'WarehouseController as vm'\n          }\n        },\n        resolve: {\n          WarehouseData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.warehouses@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-warehouse'\n      })\n\n      /**\n       * WAREHOUSE DETAILS\n       */\n\n      .state('app.inventory.warehouses.warehouse.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.warehouses.warehouse': {\n            templateUrl: 'app/main/apps/inventory/views/warehouse/tabs/details.html',\n            controller: 'WarehouseDetailsController as vm'\n          }\n        },\n        resolve: {\n          WarehouseData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.warehouses@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          TicketConfigurationsData: function(apiResolver) {\n            return apiResolver.resolve('sales.ticketConfigurations@list');\n          },\n          FiscalAddressesData: function(apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list');\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-warehouse-details'\n      })\n\n      /**\n       * WAREHOUSE PRODUCTS\n       */\n\n      .state('app.inventory.warehouses.warehouse.stock', {\n        url: '/stock',\n        views: {\n          'subcontent@app.inventory.warehouses.warehouse': {\n            templateUrl: 'app/main/apps/inventory/views/warehouse/tabs/stock.html',\n            controller: 'InventoryWarehouseStockController as vm'\n          }\n        },\n        resolve: {\n          WarehouseData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@get', { 'id': $stateParams.id });\n          },\n          WarehouseStocksData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@get', { 'id': $stateParams.id, 'option': 'stock' });\n          }\n        },\n        bodyClass: 'inventory-warehouse-stock'\n      })\n\n      /**\n       * WAREHOUSE REGISTERS\n       */\n\n      .state('app.inventory.warehouses.warehouse.registers', {\n        url: '/registers',\n        views: {\n          'subcontent@app.inventory.warehouses.warehouse': {\n            templateUrl: 'app/main/apps/inventory/views/warehouse/tabs/registers.html',\n            controller: 'WarehouseRegistersController as vm'\n          }\n        },\n        resolve: {\n          WarehouseData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.warehouses@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-warehouse-details'\n      })\n\n      /**\n       * WAREHOUSE REGISTERS\n       */\n\n      .state('app.inventory.warehouses.warehouse.stock-locations', {\n        url: '/stock-locations',\n        views: {\n          'subcontent@app.inventory.warehouses.warehouse': {\n            templateUrl: 'app/main/apps/inventory/views/warehouse/tabs/stock-locations.html',\n            controller: 'WarehouseStockLocationsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-warehouse-stock-locations'\n      })\n\n\n      /**\n       *  PICKING AND PACKING BASE\n       */\n\n      .state('app.inventory.picking_packing', {\n        url: '/picking-packing',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/picking-packing/picking-packing.html',\n            controller: 'PickingPackingController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              'serializer': 'WarehouseSimpleSerializer',\n              'restricted': true\n            });\n          },\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@list', {serializer: 'SiteListSerializer'});\n          },\n          PickingPackingType: function(PICKING_PACKING_TYPES) {\n            return PICKING_PACKING_TYPES.PICKING_TYPE;\n          }\n        },\n        params: {\n          tab: null\n        },\n        bodyClass: 'inventory-picking'\n      })\n\n\n      /**\n       * PICKING ORDER LIST\n       **\n       */\n\n      .state('app.inventory.pickings.picking_orders', {\n        url: '/orders',\n        views: {\n          'subcontent@app.inventory.pickings': {\n            templateUrl: 'app/main/apps/inventory/views/pickings/tabs/picking-orders.html',\n            controller: 'InventoryPickingOrdersController as vm'\n          }\n        }\n      })\n\n      /*\n      *  PICKING ORDER\n      */\n\n      .state('app.inventory.picking_packing.picking_order', {\n        url: '/picking/:id',\n        // abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/picking/picking.html',\n            controller: 'PìckingController as vm'\n          }\n        },\n        params: {\n          id: null,\n          previousState: null\n        },\n        resolve: {\n          PickingOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.pickingOrder@get', { id: $stateParams.id });\n          },\n          UsersData: function(apiResolver) {\n            return apiResolver.resolve('account.users@list');\n          },\n          UserCreatePicking: function(apiResolver, PickingOrderData) {\n            return apiResolver.resolve('account.users@get', {\n              id: PickingOrderData.created_by,\n              serializer: 'UserNameSerializer'\n            });\n          }\n        },\n        bodyClass: 'inventory-picking'\n      })\n\n      /*\n      *  PACKING ORDER\n      */\n      .state('app.inventory.picking_packing.packing_order', {\n        url: '/packing/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/packing/packing.html',\n            controller: 'PackingController as vm'\n          }\n        },\n        resolve: {\n          PackingOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.packingOrder@get', { id: $stateParams.id });\n          },\n          UsersData: function(apiResolver) {\n            return apiResolver.resolve('account.users@list');\n          }\n        },\n        bodyClass: 'inventory-picking'\n      })\n\n\n      /*\n      *  PACKING ORDER DETAILS\n      */\n\n      .state('app.inventory.picking_packing.packing_order.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.picking_packing.packing_order': {\n            templateUrl: 'app/main/apps/inventory/views/packing/tabs/details/details.html',\n            controller: 'PackingDetailsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'packing-details'\n      })\n\n      /*\n      *  PACKING ORDER PRODUCTS\n      */\n\n      .state('app.inventory.picking_packing.packing_order.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.inventory.picking_packing.packing_order': {\n            templateUrl: 'app/main/apps/inventory/views/packing/tabs/products/products.html',\n            controller: 'PackingProductsController as vm'\n          }\n        },\n        resolve: {\n          ShippingBoxesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingBoxes@list', {});\n          },\n          ShippingMethodsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingMethods@list', {});\n          },\n        },\n        bodyClass: 'packing-products'\n      })\n\n      /**\n       * LOW STOCK\n       */\n\n      .state('app.inventory.low_stock', {\n        url: '/low-stock',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/low-stock.html',\n            controller: 'LowStockController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-low-stock'\n      })\n\n      .state('app.inventory.low_stock.purchases', {\n        url: '/purchases',\n        views: {\n          'subcontent@app.inventory.low_stock': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/purchases/purchases.html',\n            controller: 'LowStockPurchasesController as vm'\n          }\n        },\n        resolve: {\n          TableType: function() {\n            return 1;\n          }\n        },\n        bodyClass: 'inventory-low-stock-purchases'\n      })\n\n      .state('app.inventory.low_stock.purchases.by_product', {\n        url: '/by-product',\n        views: {\n          'subcontent@app.inventory.low_stock.purchases': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/purchases/by_product/purchases_by_product.html',\n            controller: 'LowStockPurchasesByProductController as vm'\n          }\n        },\n        resolve: {\n          TableType: function() {\n            return 1;\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@get');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          ProvidersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.contacts@list', { 'type': '6' });\n          },\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get', {\n              'serializer': 'OptimizationConfigurationSerializer'\n            });\n          }\n        },\n        bodyClass: 'inventory-low-stock-purchases-by-product'\n      })\n\n      .state('app.inventory.low_stock.purchases.by_provider', {\n        url: '/by-provider',\n        views: {\n          'subcontent@app.inventory.low_stock.purchases': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/purchases/by_provider/purchases_by_provider.html',\n            controller: 'LowStockPurchasesByProviderController as vm'\n          }\n        },\n        resolve: {\n          TableType: function() {\n            return 1;\n          }\n        },\n        bodyClass: 'inventory-low-stock-purchases-by-provider'\n      })\n\n      .state('app.inventory.low_stock.replenishments', {\n        url: '/replenishments',\n        views: {\n          'subcontent@app.inventory.low_stock': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/replenishments/replenishments.html',\n            controller: 'LowStockReplenishmentsController as vm'\n          }\n        },\n        resolve: {\n          TableType: function() {\n            return 1;\n          },\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-low-stock-replenishments'\n      })\n\n      .state('app.inventory.low_stock.replenishments.by_product', {\n        url: '/by-product',\n        views: {\n          'subcontent@app.inventory.low_stock.replenishments': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/replenishments/by_product/replenishments_by_product.html',\n            controller: 'ReplenishmentsByProductController as vm'\n          }\n        },\n        resolve: {\n          TableType: function() {\n            return 1;\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@get');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get', {\n              'serializer': 'OptimizationConfigurationSerializer'\n            });\n          }\n        },\n        bodyClass: 'inventory-low-stock-replenishments-by-product'\n      })\n\n      .state('app.inventory.low_stock.replenishments.by_warehouse', {\n        url: '/by-warehouse',\n        views: {\n          'subcontent@app.inventory.low_stock.replenishments': {\n            templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/replenishments/by_warehouse/replenishments_by_warehouse.html',\n            controller: 'ReplenishmentsByWarehouseController as vm'\n          }\n        },\n        resolve: {\n          TableType: function() {\n            return 1;\n          }\n        },\n        bodyClass: 'inventory-low-stock-replenishments-by-warehouse'\n      })\n\n      /**\n       * COLLECTIONS LIST\n       */\n\n      .state('app.inventory.collections', {\n        url: '/collections',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/collections/collections.html',\n            controller: 'InventoryCollectionsController as vm'\n          }\n        },\n        resolve: {\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          }\n        },\n        bodyClass: 'inventory-collections'\n      })\n\n      /**\n       * COLLECTION BASE\n       */\n\n      .state('app.inventory.collections.collection', {\n        url: '/:idCollection',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/collection/collection.html',\n            controller: 'InventoryCollectionController as vm'\n          }\n        },\n        resolve: {\n          CollectionData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.collections@get', { id: $stateParams.idCollection });\n          }\n        },\n        bodyClass: 'inventory-collection'\n      })\n\n      /**\n       * COLLECTION DETAILS\n       */\n\n      .state('app.inventory.collections.collection.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.collections.collection': {\n            templateUrl: 'app/main/apps/inventory/views/collection/tabs/details.html',\n            controller: 'InventoryCollectionDetailsController as vm'\n          }\n        },\n        resolve: {\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }\n        },\n        bodyClass: 'inventory-collection-details'\n      })\n\n      /**\n       * COLLECTION PRODUCTS\n       */\n\n      .state('app.inventory.collections.collection.products', {\n        url: '/styles',\n        views: {\n          'subcontent@app.inventory.collections.collection': {\n            templateUrl: 'app/main/apps/inventory/views/collection/tabs/products.html',\n            controller: 'InventoryCollectionProductsController as vm'\n          }\n        },\n        params: {\n          loadTableState: null,\n          reload: null\n        },\n        resolve: {\n          CompositionsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.compositions@list');\n          },\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          }\n        },\n        bodyClass: 'inventory-collection-products'\n      })\n\n      /**\n       * PRICING\n       */\n\n      .state('app.inventory.pricing', {\n        url: '/pricing',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/pricing/pricing.html',\n            controller: 'InventoryPricingController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get');\n          },\n          TableType: function() {\n            return 1;\n          },\n          WarehousesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          }\n        },\n        bodyClass: 'pricing'\n      })\n\n      /**\n       * PRODUCTS LIST\n       */\n\n      .state('app.inventory.products', {\n        url: '/products',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          TableType: function() {\n            return 'p';\n          }\n        },\n        bodyClass: 'inventory'\n      })\n\n      /**\n       * PRODUCT BUNDLES LIST\n       */\n      .state('app.inventory.product_bundles', {\n        url: '/product-bundles',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          isBundle: true,\n          reload: null\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          ConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get');\n          },\n          TableType: function() {\n            return 'b';\n          }\n        },\n        bodyClass: 'inventory'\n      })\n\n      /**\n       * VARIANTS LIST\n       */\n\n      .state('app.inventory.variants', {\n        url: '/variants',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          TableType: function() {\n            return 'v';\n          }\n        },\n        bodyClass: 'inventory'\n      })\n\n      /**\n       * PRODUCT BASE\n       */\n\n      .state('app.inventory.products.product', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/product/product.html',\n            controller: 'InventoryProductController as vm'\n          }\n        },\n        resolve: {},\n        params: {\n          previousState: null\n        },\n        bodyClass: 'inventory-product'\n      })\n\n      /**\n       * PRODUCT OVERVIEW\n       */\n\n      .state('app.inventory.products.product.overview', {\n        url: '/overview',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/overview.html',\n            controller: 'InventoryProductOverviewController as vm'\n          }\n        },\n        params: {\n          previousState: null\n        },\n        resolve: {\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductOverviewSerializer'\n              });\n            } else {\n              return null;\n            }\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          }\n        },\n        bodyClass: 'inventory-product-overview'\n      })\n\n      /**\n       * PRODUCT STOCK\n       */\n\n      .state('app.inventory.products.product.stock', {\n        url: '/stock',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/stock.html',\n            controller: 'InventoryProductStockController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              'serializer': 'WarehouseSimpleSerializer',\n              'filter_stock_by_warehouse': 'true'\n            });\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductStockSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-stock'\n      })\n\n      /**\n       * PRODUCT BUNDLES\n       */\n\n      .state('app.inventory.products.product.bundles', {\n        url: '/bundles',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/bundles.html',\n            controller: 'InventoryProductBundlesController as vm'\n          }\n        },\n        resolve: {\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductOverviewSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-bundles'\n      })\n\n\n\n      /**\n       * PRODUCT STOCK MOVEMENTS\n       */\n\n      .state('app.inventory.products.product.stock-movements', {\n        url: '/stock-movements/:option',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/stock-movements.html',\n            controller: 'InventoryProductStockMovementsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductStockSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-stock-takes'\n      })\n\n      /**\n       * PRODUCT UID STOCKS\n       */\n\n      .state('app.inventory.products.product.uid-stocks', {\n        url: '/uid-stocks',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/uid-stocks.html',\n            controller: 'InventoryProductUidStocksController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductFullSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-uid-stocks'\n      })\n\n      /**\n       * PRODUCT DETAILS\n       */\n\n      .state('app.inventory.products.product.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/details.html',\n            controller: 'InventoryProductDetailsController as vm'\n          }\n        },\n        resolve: {\n          CollectionsData: function(apiResolver) {\n            return apiResolver.resolve('manufactures.collections@list');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              'serializer': 'CompanyPlatformsSerializer'\n            });\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          },\n          ProductTranslationsData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.productTranslations@get', { 'product_id': $stateParams.id });\n            } else {\n              return null;\n            }\n          },\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-product-details'\n      })\n\n      /**\n       * PRODUCT PRICING TIERS\n       */\n\n      .state('app.inventory.products.product.pricing-tiers', {\n        url: '/pricing-tiers',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/pricing-tiers.html',\n            controller: 'InventoryProductPricingTiersController as vm'\n          }\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          ProductProviderPricesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.productProviderPrices@list', { 'product_id': $stateParams.id });\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductFullSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-pricing-tiers'\n      })\n\n      /**\n       * PRODUCT PRODUCT VARIANTS\n       */\n\n      .state('app.inventory.products.product.product-variants', {\n        url: '/product-variants',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/product-variants.html',\n            controller: 'InventoryProductProductVariantsController as vm'\n          }\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          VariantCategoriesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.variantCategories@list', { 'include_deleted': true });\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductFullSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-product-variants'\n      })\n\n      /**\n       * PRODUCT TRANSLATIONS\n       */\n\n      .state('app.inventory.products.product.translations', {\n        url: '/translations',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/translations.html',\n            controller: 'InventoryProductTranslationsController as vm'\n          }\n        },\n        resolve: {\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          },\n          ProductTranslationsData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.productTranslations@get', { 'product_id': $stateParams.id });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-translations'\n      })\n\n      /**\n       * PRODUCT ECOMMERCE\n       */\n\n      .state('app.inventory.products.product.ecommerce', {\n        url: '/ecommerce',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/ecommerce.html',\n            controller: 'InventoryProductEcommerceController as vm'\n          }\n        },\n        resolve: {\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          },\n          SitesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get');\n          },\n          SiteProductsData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.siteProducts@get', { 'product_id': $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-product-ecommerce'\n      })\n\n      /**\n       * PRODUCT IMAGES\n       */\n\n      .state('app.inventory.products.product.images', {\n        url: '/images',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/images.html',\n            controller: 'InventoryProductImagesController as vm'\n          }\n        },\n        resolve: {\n          ImagesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.productImages@list', { product_id: $stateParams.id });\n          },\n          BundleImagesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.productBundleImages@list', { product_id: $stateParams.id });\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductOverviewSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-images'\n      })\n\n      /**\n       * PRODUCT MANUFACTURING\n       */\n\n      .state('app.inventory.products.product.manufacturing', {\n        url: '/manufacturing',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/manufacturing.html',\n            controller: 'InventoryProductManufacturingController as vm'\n          }\n        },\n        resolve: {\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-manufacturing'\n      })\n\n      /**\n       * STOCK LOCATIONS\n       */\n\n      .state('app.inventory.products.product.stock-locations', {\n        url: '/stock-locations',\n        views: {\n          'subcontent@app.inventory.products.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/stock-locations.html',\n            controller: 'InventoryProductStockLocationsController as vm'\n          }\n        },\n        resolve: {\n          StockLocations: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.stockLocations@get', {\n                'serializer': 'StockLocationSimpleSerializer',\n                'product_variants__product_id': $stateParams.id });\n            }\n            return null;\n          },\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', { 'id': $stateParams.id });\n            } else {\n              return null;\n            }\n          },\n          WarehouseData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.warehouses@get', {\n                serializer: 'WarehouseSimpleSerializer'\n              });\n            } else {\n              return null;\n            }\n          }\n        },\n        bodyClass: 'inventory-product-stock-locations'\n      })\n\n      /**\n       * NEW PRODUCT\n       */\n      .state('app.inventory.products.new-product', {\n        url: '/add',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/new-product/new-product.html',\n            controller: 'NewInventoryProductController as vm'\n          }\n        },\n        resolve: {\n          Categories: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubCategories: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          },\n          Compositions: function(apiResolver) {\n            return apiResolver.resolve('inventories.compositions@get');\n          },\n          Brands: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          Seasons: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          VariantCategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.variantCategories@list');\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          },\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          ContactsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.contacts@list', {\n              type: '5,6',\n              serializer: 'ContactSimpleSerializer'\n            });\n          },\n          CollectionsData: function(apiResolver) {\n            return apiResolver.resolve('manufactures.collections@list');\n          }\n        },\n        params: {\n          is_gift_card: false,\n          isBundle: false,\n          isRawMaterial: false,\n        },\n        bodyClass: 'new-inventory-product'\n      })\n\n      /**\n       * STOCKS LIST\n       */\n\n      .state('app.inventory.stocks', {\n        url: '/stocks/:view',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/stocks/stocks.html',\n            controller: 'InventoryStocksController as vm'\n          }\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get');\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer',\n              filter_stock_by_warehouse: 'true'\n            });\n          }\n        },\n        bodyClass: 'inventory'\n      })\n\n      /**\n       * PURCHASES\n       */\n      .state('app.inventory.purchases', {\n        url: '/purchases',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/purchases/purchases.html',\n            controller: 'PurchasesController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer',\n              all: true\n            });\n          },\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          }\n        },\n        bodyClass: 'purchases'\n      })\n\n      /**\n       * PURCHASES CALENDAR\n       */\n      .state('app.inventory.purchases.calendar', {\n        url: '/calendar',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/purchases-calendar/purchases-calendar.html',\n            controller: 'PurchasesCalendarController as vm'\n          }\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          }\n        },\n        bodyClass: 'purchases'\n      })\n\n      /**\n       * PURCHASE BASE NEW\n       */\n\n      .state('app.inventory.purchases.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/purchase.html',\n            controller: 'InventoryPurchaseController as vm'\n          }\n        },\n        resolve: {\n          PurchaseData: function(apiResolver, $stateParams) {\n            return null;\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          }\n        },\n        bodyClass: 'inventory-purchase-new'\n      })\n\n      /**\n       * NEW PURCHASE\n       */\n\n      .state('app.inventory.purchases.new.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.purchases.new': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/details.html',\n            controller: 'InventoryPurchaseDetailsController as vm'\n          }\n        },\n        resolve: {\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '10,11' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-purchase-new-details'\n      })\n\n      /**\n       * PURCHASE  BASE\n       */\n\n      .state('app.inventory.purchases.purchase', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/purchase.html',\n            controller: 'InventoryPurchaseController as vm'\n          }\n        },\n        params: {\n          idCollection: null\n        },\n        resolve: {},\n        bodyClass: 'inventory-purchase'\n      })\n\n      /**\n       * PURCHASE DETAILS\n       */\n\n      .state('app.inventory.purchases.purchase.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/details.html',\n            controller: 'InventoryPurchaseDetailsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list', {});\n          },\n          PurchaseData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrders@get', { id: $stateParams.id });\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '10,11' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return null;\n          }\n        },\n        bodyClass: 'inventory-purchase-details'\n      })\n\n      /**\n       * PURCHASE PRODUCTS\n       */\n\n      .state('app.inventory.purchases.purchase.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/products.html',\n            controller: 'InventoryPurchaseProductsController as vm'\n          }\n        },\n        resolve: {\n          PurchaseOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrders@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          }\n        },\n        bodyClass: 'inventory-purchase-products'\n      })\n\n      /**\n       * PURCHASE PAYMENTS\n       */\n\n      .state('app.inventory.purchases.purchase.payments', {\n        url: '/payments',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/payments.html',\n            controller: 'InventoryPurchasePaymentsController as vm'\n          }\n        },\n        resolve: {\n          PurchaseOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrders@get', {\n              id: $stateParams.id,\n              serializer: 'PurchaseOrderPaymentsSerializer'\n            });\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          }\n        },\n        bodyClass: 'inventory-purchase-payments'\n      })\n\n      /**\n       * PURCHASE INVOICES\n       */\n      .state('app.inventory.purchases.purchase.invoices', {\n        url: '/invoices',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/invoices.html',\n            controller: 'InventoryPurchaseInvoiceController as vm'\n          }\n        },\n        resolve: {\n          PurchaseOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrders@get', {\n              id: $stateParams.id,\n              serializer: 'PurchaseOrderPaymentsSerializer'\n            });\n          }\n        },\n        bodyClass: 'inventory-purchase-invoices'\n      })\n\n      /**\n       * PURCHASE DELIVERIES\n       */\n\n      .state('app.inventory.purchases.purchase.deliveries', {\n        url: '/deliveries',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/deliveries.html',\n            controller: 'InventoryPurchaseDeliveriesController as vm'\n          }\n        },\n        resolve: {\n          PurchaseOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrders@get', { id: $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-purchase-deliveries'\n      })\n\n      /**\n       * PURCHASE DELIVERY DETAILS\n       */\n\n      .state('app.inventory.purchases.purchase.deliveries.delivery', {\n        url: '/:orderDeliveryId',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/delivery.html',\n            controller: 'InventoryPurchaseDeliveryController as vm'\n          }\n        },\n        resolve: {\n          PurchaseOrderDeliveryData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrderDeliveries@get', { id: $stateParams.orderDeliveryId });\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          }\n        },\n        bodyClass: 'inventory-purchase-deliveries'\n      })\n\n      /**\n       * PURCHASE DELIVERY\n       */\n\n      .state('app.inventory.purchases.purchase.delivery', {\n        url: '/delivery',\n        views: {\n          'subcontent@app.inventory.purchases.purchase': {\n            templateUrl: 'app/main/apps/inventory/views/purchase/tabs/delivery.html',\n            controller: 'InventoryPurchaseDeliveryController as vm'\n          }\n        },\n        resolve: {\n          PurchaseOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrders@get', { id: $stateParams.id });\n          },\n          PurchaseOrderDeliveryData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.purchaseOrderDeliveries@get', {\n              id: 'latest',\n              purchase_order: $stateParams.id\n            });\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          }\n        },\n        bodyClass: 'inventory-purchase-delivery'\n      })\n\n      /**\n       * STOCKTAKINGS\n       */\n      .state('app.inventory.stocktakings', {\n        url: '/stocktakings',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/stocktakings/stocktakings.html',\n            controller: 'StocktakingsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          }\n        },\n        bodyClass: 'stocktakings'\n      })\n\n      /**\n       * STOCKTAKING BASE NEW\n       */\n\n      .state('app.inventory.stocktakings.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/stocktaking/stocktaking.html',\n            controller: 'InventoryStocktakingController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-stocktaking'\n      })\n\n      /**\n       * STOCKTAKING DETAILS NEW\n       */\n\n      .state('app.inventory.stocktakings.new.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.stocktakings.new': {\n            templateUrl: 'app/main/apps/inventory/views/stocktaking/tabs/details.html',\n            controller: 'InventoryStocktakingDetailsController as vm'\n          }\n        },\n        resolve: {\n          StocktakingData: function(apiResolver, $stateParams) {\n            return null;\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '70' });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-stocktaking-details'\n      })\n\n      /**\n       * STOCKTAKING  BASE\n       */\n\n      .state('app.inventory.stocktakings.stocktaking', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/stocktaking/stocktaking.html',\n            controller: 'InventoryStocktakingController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-stocktaking'\n      })\n\n      /**\n       * STOCKTAKING DETAILS\n       */\n\n      .state('app.inventory.stocktakings.stocktaking.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.stocktakings.stocktaking': {\n            templateUrl: 'app/main/apps/inventory/views/stocktaking/tabs/details.html',\n            controller: 'InventoryStocktakingDetailsController as vm'\n          }\n        },\n        resolve: {\n          StocktakingData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.stocktakings@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '70' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-stocktaking-details'\n      })\n\n      /**\n       * STOCKTAKING PRODUCTS\n       */\n\n      .state('app.inventory.stocktakings.stocktaking.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.inventory.stocktakings.stocktaking': {\n            templateUrl: 'app/main/apps/inventory/views/stocktaking/tabs/products.html',\n            controller: 'InventoryStocktakingProductsController as vm'\n          }\n        },\n        resolve: {\n          StocktakingData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.stocktakings@get', { id: $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-stocktaking-products'\n      })\n\n      /**\n       * UIDS\n       */\n      .state('app.inventory.uids', {\n        url: '/uids',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/uids/uids.html',\n            controller: 'UIDsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          }\n        },\n        bodyClass: 'uids'\n      })\n\n      /**\n       * TRANSFERS\n       */\n      .state('app.inventory.transfers', {\n        url: '/transfers',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/transfers/transfers.html',\n            controller: 'TransfersController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer'\n            });\n          }\n        },\n        bodyClass: 'transfers'\n      })\n\n      /**\n       * TRANSFER BASE NEW\n       */\n\n      .state('app.inventory.transfers.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/transfer.html',\n            controller: 'InventoryTransferController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-transfer'\n      })\n\n      /**\n       * TRANSFER DETAILS NEW\n       */\n\n      .state('app.inventory.transfers.new.details', {\n        url: '/details/:type',\n        views: {\n          'subcontent@app.inventory.transfers.new': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/tabs/details.html',\n            controller: 'InventoryTransferDetailsController as vm'\n          }\n        },\n        resolve: {\n          TransferData: function(apiResolver, $stateParams) {\n            return null;\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '20,21' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-transfer-details'\n      })\n\n      /**\n       * TRANSFER  BASE\n       */\n\n      .state('app.inventory.transfers.transfer', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/transfer.html',\n            controller: 'InventoryTransferController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-transfer'\n      })\n\n      /**\n       * TRANSFER DETAILS\n       */\n\n      .state('app.inventory.transfers.transfer.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.transfers.transfer': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/tabs/details.html',\n            controller: 'InventoryTransferDetailsController as vm'\n          }\n        },\n        resolve: {\n          TransferData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrders@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '20,21' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return null;\n          }\n        },\n        bodyClass: 'inventory-transfer-details'\n      })\n\n      /**\n       * TRANSFER PRODUCTS\n       */\n\n      .state('app.inventory.transfers.transfer.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.inventory.transfers.transfer': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/tabs/products.html',\n            controller: 'InventoryTransferProductsController as vm'\n          }\n        },\n        resolve: {\n          TransferOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrders@get', { id: $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-transfer-products'\n      })\n\n      /**\n       * TRANSFER DELIVERIES\n       */\n\n      .state('app.inventory.transfers.transfer.deliveries', {\n        url: '/deliveries',\n        views: {\n          'subcontent@app.inventory.transfers.transfer': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/tabs/deliveries.html',\n            controller: 'InventoryTransferDeliveriesController as vm'\n          }\n        },\n        resolve: {\n          TransferOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrders@get', { id: $stateParams.id });\n          },\n          TransferOrderDeliveriesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrderDeliveries@list', { transfer_order: $stateParams.id });\n          },\n          TransferOrderDeliveryData: function(apiResolver, $stateParams) {\n            return null;\n          }\n        },\n        bodyClass: 'inventory-transfer-deliveries'\n      })\n\n      /**\n       * TRANSFER DELIVERY DETAILS\n       */\n\n      .state('app.inventory.transfers.transfer.deliveries.delivery', {\n        url: '/:orderDeliveryId',\n        views: {\n          'subcontent@app.inventory.transfers.transfer': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/tabs/deliveries.html',\n            controller: 'InventoryTransferDeliveriesController as vm'\n          }\n        },\n        resolve: {\n          TransferOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrders@get', { id: $stateParams.id });\n          },\n          TransferOrderDeliveriesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrderDeliveries@list', { transfer_order: $stateParams.id });\n          },\n          TransferOrderDeliveryData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrderDeliveries@get', { id: $stateParams.orderDeliveryId });\n          }\n        },\n        bodyClass: 'inventory-transfer-deliveries'\n      })\n\n      /**\n       * TRANSFER DELIVERY\n       */\n\n      .state('app.inventory.transfers.transfer.delivery', {\n        url: '/delivery',\n        params: {\n          search: { value: null, squash: true }\n        },\n        views: {\n          'subcontent@app.inventory.transfers.transfer': {\n            templateUrl: 'app/main/apps/inventory/views/transfer/tabs/deliveries.html',\n            controller: 'InventoryTransferDeliveriesController as vm'\n          }\n        },\n        resolve: {\n          TransferOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrders@get', { id: $stateParams.id });\n          },\n          TransferOrderDeliveriesData: function(apiResolver, $stateParams) {\n            return null;\n          },\n          TransferOrderDeliveryData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.transferOrderDeliveries@get', {\n              id: 'latest',\n              transfer_order: $stateParams.id\n            });\n          }\n        },\n        bodyClass: 'inventory-transfer-deliveries'\n      })\n\n      /**\n       * TRANSFERS EDITOR\n       */\n      .state('app.inventory.transfers-editor', {\n        url: '/transfers-editor',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/transfers-editor/transfers-editor.html',\n            controller: 'InventoryTransfersEditorController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'transfers-editor'\n      })\n\n      /**\n       * ADJUSTMENTS\n       */\n      .state('app.inventory.adjustments', {\n        url: '/adjustments',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/adjustments/adjustments.html',\n            controller: 'AdjustmentsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer'\n            });\n          }\n        },\n        bodyClass: 'adjustments'\n      })\n\n      /**\n       * ADJUSTMENT BASE NEW\n       */\n\n      .state('app.inventory.adjustments.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/adjustment/adjustment.html',\n            controller: 'InventoryAdjustmentController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-adjustment'\n      })\n\n      /**\n       * ADJUSTMENT DETAILS NEW\n       */\n\n      .state('app.inventory.adjustments.new.details', {\n        url: '/details/:type',\n        views: {\n          'subcontent@app.inventory.adjustments.new': {\n            templateUrl: 'app/main/apps/inventory/views/adjustment/tabs/details.html',\n            controller: 'InventoryAdjustmentDetailsController as vm'\n          }\n        },\n        resolve: {\n          AdjustmentData: function(apiResolver, $stateParams) {\n            return null;\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '50' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-adjustment-details'\n      })\n\n      /**\n       * ADJUSTMENT  BASE\n       */\n\n      .state('app.inventory.adjustments.adjustment', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/adjustment/adjustment.html',\n            controller: 'InventoryAdjustmentController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-adjustment'\n      })\n\n      /**\n       * ADJUSTMENT DETAILS\n       */\n\n      .state('app.inventory.adjustments.adjustment.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.inventory.adjustments.adjustment': {\n            templateUrl: 'app/main/apps/inventory/views/adjustment/tabs/details.html',\n            controller: 'InventoryAdjustmentDetailsController as vm'\n          }\n        },\n        resolve: {\n          AdjustmentData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.adjustmentOrders@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', { types: '50' });\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return null;\n          }\n        },\n        bodyClass: 'inventory-adjustment-details'\n      })\n\n      /**\n       * ADJUSTMENT PRODUCTS\n       */\n\n      .state('app.inventory.adjustments.adjustment.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.inventory.adjustments.adjustment': {\n            templateUrl: 'app/main/apps/inventory/views/adjustment/tabs/products.html',\n            controller: 'InventoryAdjustmentProductsController as vm'\n          }\n        },\n        resolve: {\n          AdjustmentOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.adjustmentOrders@get', { id: $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-adjustment-products'\n      })\n\n      /**\n       * IMPORT  BASE\n       * /\n\n       .state('app.inventory.import', {\n       url: '/import',\n       views: {\n       'content@app': {\n       templateUrl: 'app/main/apps/inventory/views/import/import.html',\n       controller: 'InventoryImportController as vm'\n       }\n       },\n       resolve: {\n       ProductImportData: function (apiResolver, $stateParams) {\n       return apiResolver.resolve('inventories.productImports@get', {id: 'latest'});\n       },\n       PricingTiersData: function (apiResolver) {\n       return apiResolver.resolve('inventories.pricingTiers@get');\n       },\n       WarehousesData: function (apiResolver) {\n       return apiResolver.resolve('inventories.warehouses@list', {});\n       },\n       TaxesData: function (apiResolver) {\n       return apiResolver.resolve('accounting.taxes@list');\n       },\n       SitesData: function (apiResolver) {\n       return apiResolver.resolve('ecommerce.sites@list', {serializer: 'SiteListSerializer'});\n       }\n       },\n       bodyClass: 'inventory-import'\n       })\n\n       /**\n       * IMPORT PRODUCTS\n       * /\n\n       .state('app.inventory.import.details', {\n       url: '/:id',\n       views: {\n       'content@app': {\n       templateUrl: 'app/main/apps/inventory/views/import/import.html',\n       controller: 'InventoryImportController as vm'\n       }\n       },\n       resolve: {\n       DataImportData: function (apiResolver, $stateParams) {\n       return apiResolver.resolve('inventories.dataImports@get', {id: $stateParams.id});\n       },\n       PricingTiersData: function (apiResolver) {\n       return apiResolver.resolve('inventories.pricingTiers@get');\n       },\n       WarehousesData: function (apiResolver) {\n       return apiResolver.resolve('inventories.warehouses@list', {});\n       },\n       },\n       bodyClass: 'inventory-import'\n       })\n\n       /**\n       * IMPORT_v2 PRODUCTS\n       */\n\n      .state('app.inventory.import', {\n        abstract: true,\n        url: '/import'\n      })\n\n      .state('app.inventory.import.products', {\n        url: '/products',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/import/views/products/import-products.html',\n            controller: 'ImportProductsController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      .state('app.inventory.import.images', {\n        url: '/images',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/import/views/images/import-images.html',\n            controller: 'InventoryImportImagesController as vm'\n          }\n        },\n        resolve: {\n          ProductImportData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.productImports@get', { id: 'latest' });\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@list', { serializer: 'SiteListSerializer' });\n          }\n        }\n      })\n\n      /**\n       * LABEL GENERATOR\n       */\n\n      .state('app.inventory.labels-generator', {\n        url: '/labels-generator',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/labels-generator/labels-generator.html',\n            controller: 'LabelsGeneratorController as vm'\n          }\n        },\n        resolve: {\n          ProductLabelDesignData: function(apiResolver) {\n            return apiResolver.resolve('inventories.productLabelDesigns@get');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }\n        },\n        bodyClass: 'labels-generator',\n        params: {\n          transferOrder: null,\n          purchaseOrder: null,\n          saleOrder: null,\n          purchaseOrderDelivery: null\n        }\n      })\n\n      /**\n       * PRODUCT LOCATIONS\n       */\n\n      .state('app.inventory.product-locations', {\n        url: '/product-locations',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/product-locations/product-locations.html',\n            controller: 'ProductLocationsController as vm'\n          }\n        },\n        resolve: {\n          WarehouseData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.warehouses@get', {\n              serializer: 'WarehouseSimpleSerializer',\n              restricted: true,\n            });\n          }\n        },\n        bodyClass: 'product-locations',\n        params: {}\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/inventory');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ProductVariantUnitCostDialogController', ProductVariantUnitCostDialogController);\n\n  /** @ngInject */\n  function ProductVariantUnitCostDialogController($mdDialog, $mdToast, $filter, api, productVariant, Session,\n                                                  HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.productVariant = productVariant;\n    vm.updateAllProducts = false;\n    vm.currency = $filter('currencyCharacter')(Session.company.currency);\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    //Functions\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if (vm.updateAllProducts) {\n        updateAll();\n      }\n      else {\n        update();\n      }\n    }\n\n    function updateAll() {\n      api.inventories.products.update(\n        {\n          id: vm.productVariant.product,\n          option: 'ddp_price',\n          ddp_price: vm.productVariant.ddp_price\n        },\n        function (response, fn, status) {\n          if (status == HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog.hide({updateAllUnitCosts: true});\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.UNIT_COST_UPDATED')).position('top right'));\n          }\n          else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function update() {\n      api.inventories.productVariants.update(\n        vm.productVariant,\n        function (response, fn, status) {\n          if (status == HTTP_STATUS.HTTP_200_OK) {\n            vm.productVariant.ddp_price = response.ddp_price;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.UNIT_COST_UPDATED')).position('top right'));\n            $mdDialog.hide();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.MODIFIED_FILED_NOT_VALID')).position('top right'));\n          }\n        });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ProductVariantPriceDialogController', ProductVariantPriceDialogController);\n\n  /** @ngInject */\n  function ProductVariantPriceDialogController($mdDialog, $mdToast, $filter, api, productVariantPrice, Session,\n                                               HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.productVariantPrice = productVariantPrice;\n    vm.currency = $filter('currencyCharacter')(Session.company.currency);\n    vm.fetching = false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.delete = _delete;\n    vm.priceExclTaxChanged = priceExclTaxChanged;\n    vm.priceInclTaxChanged = priceInclTaxChanged;\n    vm.offerPercentValueChanged = offerPercentValueChanged;\n    vm.offerPriceExclTaxChanged = offerPriceExclTaxChanged;\n    vm.offerPriceInclTaxChanged = offerPriceInclTaxChanged;\n\n    //Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if (vm.productVariantPrice.id) {\n        if (vm.productVariantPrice.price_excl_tax === null &&\n          vm.productVariantPrice.price_incl_tax === null &&\n          vm.productVariantPrice.discount === null &&\n          vm.productVariantPrice.discount_price_excl_tax === null &&\n          vm.productVariantPrice.discount_price_incl_tax === null) {\n          _delete();\n        } else {\n          update();\n        }\n      } else {\n        create();\n      }\n    }\n\n    function create() {\n      vm.fetching = true;\n      api.inventories.productVariantPrices.save(\n        vm.productVariantPrice,\n        function(response) {\n          vm.fetching = false;\n          $mdDialog.hide(response);\n        }\n      );\n    }\n\n    function update() {\n      vm.fetching = true;\n      api.inventories.productVariantPrices.update(\n        vm.productVariantPrice,\n        function(response) {\n          vm.fetching = false;\n          $mdDialog.hide(response);\n        }\n      );\n    }\n\n    function _delete() {\n      if (vm.productVariantPrice.id) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.DELETE_PRICE'))\n          .textContent($filter('translate')('PRODUCT.DELETE_PRICE_MSG'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        confirm._options.multiple = true;\n\n        $mdDialog.show(confirm).then(function() {\n          vm.deleting = true;\n          api.inventories.productVariantPrices.delete(\n            vm.productVariantPrice,\n            function(response, fn, status) {\n              vm.deleting = false;\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdDialog.hide();\n              }\n            }\n          );\n        }, function() {\n          // Do not remove\n        });\n      }\n    }\n\n    /**\n     * Updates the price including tax accordding to excl tax and tax percent value\n     */\n    function priceExclTaxChanged() {\n      if (vm.productVariantPrice.price_excl_tax || vm.productVariantPrice.price_excl_tax === 0) {\n        vm.productVariantPrice.price_incl_tax = parseFloat((vm.productVariantPrice.price_excl_tax + vm.productVariantPrice.price_excl_tax * (vm.productVariantPrice.tax_percent_value / 100.0)).toFixed(6));\n      } else {\n        clearPriceFields();\n      }\n    }\n\n    /**\n     * Updates the price excluding tax accordding to incl tax and tax percent value\n     */\n    function priceInclTaxChanged() {\n      if (vm.productVariantPrice.price_incl_tax || vm.productVariantPrice.price_incl_tax === 0) {\n        vm.productVariantPrice.price_excl_tax = parseFloat((vm.productVariantPrice.price_incl_tax / (1 + vm.productVariantPrice.tax_percent_value / 100.0)).toFixed(6));\n      } else {\n        clearPriceFields();\n      }\n    }\n\n    function clearPriceFields() {\n      vm.productVariantPrice.price_excl_tax = null;\n      vm.productVariantPrice.price_incl_tax = null;\n    }\n\n    function clearDiscountPriceFields() {\n      vm.productVariantPrice.discount = null;\n      vm.productVariantPrice.discount_price_excl_tax = null;\n      vm.productVariantPrice.discount_price_incl_tax = null;\n    }\n\n    function initPriceFields() {\n      vm.productVariantPrice.price_excl_tax = vm.productVariantPrice.temp_price_excl_tax;\n      vm.productVariantPrice.price_incl_tax = vm.productVariantPrice.temp_price_incl_tax;\n    }\n\n    function offerPercentValueChanged() {\n      if (vm.productVariantPrice.price_excl_tax === null) {\n        initPriceFields();\n      }\n      if (vm.productVariantPrice.discount) {\n        vm.productVariantPrice.discount_price_excl_tax = parseFloat((vm.productVariantPrice.price_excl_tax * (1 - vm.productVariantPrice.discount / 100)).toFixed(6));\n        vm.productVariantPrice.discount_price_incl_tax = parseFloat((vm.productVariantPrice.price_incl_tax * (1 - vm.productVariantPrice.discount / 100)).toFixed(6));\n      } else {\n        clearDiscountPriceFields();\n      }\n    }\n\n    function offerPriceExclTaxChanged() {\n      if (vm.productVariantPrice.price_excl_tax === null) {\n        initPriceFields();\n      }\n      if (vm.productVariantPrice.discount_price_excl_tax || vm.productVariantPrice.discount_price_excl_tax === 0) {\n        vm.productVariantPrice.discount = parseFloat(((1 - vm.productVariantPrice.discount_price_excl_tax / vm.productVariantPrice.price_excl_tax) * 100).toFixed(6));\n        vm.productVariantPrice.discount_price_incl_tax = parseFloat((vm.productVariantPrice.price_incl_tax * (1 - vm.productVariantPrice.discount / 100)).toFixed(6));\n      } else {\n        clearDiscountPriceFields();\n      }\n    }\n\n    function offerPriceInclTaxChanged() {\n      if (vm.productVariantPrice.price_excl_tax === null) {\n        initPriceFields();\n      }\n      if (vm.productVariantPrice.discount_price_incl_tax || vm.productVariantPrice.discount_price_incl_tax === 0) {\n        vm.productVariantPrice.discount = parseFloat(((1 - vm.productVariantPrice.discount_price_incl_tax / vm.productVariantPrice.price_incl_tax) * 100).toFixed(6));\n        vm.productVariantPrice.discount_price_excl_tax = parseFloat((vm.productVariantPrice.price_excl_tax * (1 - vm.productVariantPrice.discount / 100)).toFixed(6));\n      } else {\n        clearDiscountPriceFields();\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account', [\n      // 3rd Party Dependencies\n      'ngSanitize'\n    ])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider) {\n    // State\n    $stateProvider\n      .state('app.account', {\n        abstract: true,\n        url: '/account'\n      })\n\n      /**\n       * USERS\n       */\n      .state('app.account.users', {\n        url: '/users',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/account/views/users/users.html',\n            controller: 'UsersController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list');\n          },\n          RolesData: function(apiResolver) {\n            return apiResolver.resolve('account.roles@list');\n          },\n          FiscalAddressesData: function(apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list');\n          },\n        }\n      })\n\n      /**\n       * ROLES\n       */\n      .state('app.account.roles', {\n        url: '/roles',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/account/views/roles/roles.html',\n            controller: 'RolesController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * SUBSCRIPTION\n       */\n      .state('app.account.subscription', {\n        url: '/subscription?updated',\n        params: {\n          updated: null\n        },\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/account/views/subscriptions/subscription/subscription.html',\n            controller: 'SubscriptionController as vm'\n          }\n        },\n        resolve: {\n          PlansData: function(apiResolver) {\n            return apiResolver.resolve('account.plans@list');\n          },\n          BillingPortalData: function(apiResolver) {\n            return apiResolver.resolve('account.billingPortal@get');\n          }\n        }\n      })\n\n      /**\n       * UPGRADE BASE\n       */\n      .state('app.account.upgrade_plan', {\n        url: '/upgrade-plan?feature',\n        params: {\n          feature: null,\n          source: null,\n          sourceStateParams: null,\n          addOnId: null,\n          addOnCode: null\n        },\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/account/views/subscriptions/upgrade-plan/upgrade-plan.html',\n            controller: 'UpgradePlanController as vm'\n          }\n        }\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/account');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ProductProviderPriceDialogController', ProductProviderPriceDialogController);\n\n  /** @ngInject */\n  function ProductProviderPriceDialogController($q, $mdDialog, $mdToast, $filter, $scope, productProviderPrice, api,\n                                                PROVIDER_PRICE_TYPES, taxes, CURRENCIES, Session) {\n    var vm = this;\n\n    // Data\n    vm.session = Session;\n    vm.productProviderPrice = productProviderPrice;\n    vm.PROVIDER_PRICE_TYPES = PROVIDER_PRICE_TYPES;\n    vm.CURRENCIES = CURRENCIES;\n    vm.taxes = taxes;\n    vm.providerCopy = angular.copy(vm.productProviderPrice.provider_instance);\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.querySearch = querySearch;\n    vm.selectContact = selectContact;\n\n    //Functions\n    function cancel() {\n      if (vm.productProviderPrice.provider_instance == null) {\n        vm.productProviderPrice.provider_instance = vm.providerCopy;\n      }\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      $mdDialog.hide(vm.productProviderPrice);\n    }\n\n    function querySearch() {\n      var deferred = $q.defer();\n      vm.searchContact = vm.searchContact.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get({\n        search: vm.searchContact\n      }, function (results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function selectContact(item) {\n      if (typeof item === 'object') {\n        if (item && item.id && (item.name || item.first_name)) {\n          vm.productProviderPrice.provider = item.id;\n        }\n      }\n    }\n\n\n  }\n})();\n\n/*jshint esversion: 7 */\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ReplenishmentsByWarehouseController', ReplenishmentsByWarehouseController);\n\n  /** @ngInject */\n  function ReplenishmentsByWarehouseController(\n    $scope,\n    $mdToast,\n    $timeout,\n    $mdSidenav,\n    $filter,\n    api,\n    Session,\n    HTTP_STATUS\n  ) {\n\n    $scope.$parent.vm.currentNavItem = 'by_warehouse';\n    var vm = this;\n    vm.performingAnalysis = false;\n\n\n    // Methods\n    vm.performAnalysis = performAnalysis;\n\n    function performAnalysis() {\n      if (vm.performingAnalysis) {\n        return;\n      }\n      vm.performingAnalysis = true;\n      api.inventories.productVariants.save({\n        option: 'perform-low-stock-analysis'\n      }, function(response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_202_ACCEPTED) {\n          vm.performingAnalysis = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockPurchasesByProviderController', LowStockPurchasesByProviderController);\n\n  /** @ngInject */\n  function LowStockPurchasesByProviderController(\n    $scope,\n    Session,\n    $timeout,\n    $filter,\n    UiGridService,\n    api,\n    $mdToast,\n    HTTP_STATUS,\n    $mdDialog\n  ) {\n    // Data\n    $scope.$parent.vm.currentNavItem = 'purchases_by_provider';\n\n    var vm = this;\n    vm.scope = $scope;\n    vm.loading = $scope.loading;\n\n    var PULLING_DELAY_MS = 5000;\n\n    vm.company = Session.company;\n    vm.totalDraft = {};\n    vm.exporting = false;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        warehouses: [],\n        providers: [],\n        seasons: [],\n        brands: [],\n        categories: [],\n        subcategories: []\n      },\n      page: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    //Methods\n    vm.getGridPage = getGridPage;\n    vm.createPurchaseDraft = createPurchaseDraft;\n    vm.downloadCSV = downloadCSV;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeGrid,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ],\n      useExternalPagination: true\n    });\n\n\n    function initializeGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.page = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridPage(false);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridPage(false);\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function () {\n        getGridPage(true);\n      }, 200);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridPurchaseByProviderController', JSON.stringify(vm.status));\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setGridColumns(true);\n      saveStatus();\n      getGridPage(false);\n    }\n\n    function setGridColumns(avoidState) {\n      var orderCellHtml =\n        '<md-button class=\"md-button md-primary\" ng-click=\"grid.appScope.vm.createPurchaseDraft(row.entity.provider_external_id, row.entity.location_external_id)\">' +\n        '<div layout=\"row\" layout-align=\"center center\">' +\n        '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n        '<span translate=\"LOW_STOCK.CREATE_PURCHASE_DRAFT\"></span>' +\n        '</md-button>';\n\n      angular.extend(vm.columns, {\n        name: {\n          displayName: $filter('translate')('LOW_STOCK.PROVIDER'),\n          headerTooltip: $filter('translate')('LOW_STOCK.PROVIDER'),\n          field: 'provider_name',\n          permission: true,\n          visible: getColumnStatusVisibility('provider_name', true, avoidState),\n          cellClass: 'cell-padding',\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false\n        },\n        leadTime: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_stockout_losses_date',\n          permission: true,\n          visible: getColumnStatusVisibility('leadTime', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_lead_time | number: 0 }}</span>'\n        },\n        rotation: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          field: 'rotation',\n          permission: true,\n          visible: getColumnStatusVisibility('rotation', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.rotation | number: 0 }}</span>'\n        },\n        stockoutLosses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          permission: true,\n          visible: getColumnStatusVisibility('stockoutLosses', true, avoidState),\n          minWidth: 100,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.replenishment_stockout_losses_date | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        stock: {\n          displayName: $filter('translate')('LOW_STOCK.STOCK'),\n          headerTooltip: $filter('translate')('LOW_STOCK.STOCK'),\n          field: 'stock',\n          permission: true,\n          visible: getColumnStatusVisibility('stock', true, avoidState),\n          minWidth: 75,\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock | number: 0}}</span>'\n        },\n        stockValue: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          field: 'stock_value',\n          permission: true,\n          visible: getColumnStatusVisibility('stockValue', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock_value | price}} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        stockToOrder: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrder', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n        },\n        stockToOrderValue: {\n          displayName: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          headerTooltip: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          field: 'replenishment_stock_to_order_value',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrderValue', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order_value | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        totalDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\"total\"]  }}</span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/purchases/{{grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraft[row.entity.provider_external_id][row.entity.location_external_id][\"purchase_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>'\n        },\n        order: {\n          displayName: $filter('translate')('LOW_STOCK.CREATE_PURCHASE_DRAFT'),\n          headerTooltip: $filter('translate')('LOW_STOCK.CREATE_PURCHASE_DRAFT'),\n          field: 'order',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          enableColumnMenu: false,\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridPostBody() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.status.page;\n      d.pageSize = vm.status.pageSize;\n\n      // Ordering\n      d.orderBy = vm.status.ordering;\n\n      // Search\n      d.search = vm.status.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      return d;\n    }\n\n    var controller = new AbortController();\n\n    function getGridPage(performAnalysisIfEmpty, pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.warehouses.replace(':id/', '').replace(':option', 'purchase_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBody()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n\n          vm.gridOptions.totalItems = data.recordsTotal;\n          if (performAnalysisIfEmpty && !data.data.length) {\n            $scope.performAnalysis();\n          }\n          if (data.data.length) {\n            vm.performingAnalysis = false;\n            vm.orderQuantities = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n            });\n            updateTotalDraft();\n            vm.gridApi.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getGridPage(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          throw error;\n        });\n    }\n\n    function createPurchaseDraft(providerId, replenishmentWarehouseId) {\n      api.inventories.warehouses.save({\n        id: replenishmentWarehouseId,\n        provider_id: providerId,\n        option: 'create_purchase_draft'\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          updateTotalDraft();\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PURCHASE_CREATED')).position('top right'));\n        } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.message === 'Provider is required') {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PROVIDER_REQUIRED')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function updateTotalDraft() {\n      var providersIdsWithWarehousesIdsDict = [];\n      vm.gridOptions.data.forEach(function (item) {\n        providersIdsWithWarehousesIdsDict.push([item.provider_external_id, item.location_external_id]);\n      });\n      api.inventories.warehouses.save(\n        {\n          option: 'ai_purchase_draft_orders_totals',\n          provider_ids_with_warehouses_ids_dict: providersIdsWithWarehousesIdsDict\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraft = response.data;\n          }\n        }\n      );\n    }\n\n    function downloadCSV() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.warehouses.replace('/:id', '').replace(':option', 'store-purchases-by-provider-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBody()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n  }\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockPurchasesByProductController', LowStockPurchasesByProductController);\n\n  /** @ngInject */\n  function LowStockPurchasesByProductController(\n    $scope,\n    Session,\n    $timeout,\n    $filter,\n    UiGridService,\n    BrandsData,\n    SeasonsData,\n    CategoriesData,\n    SubcategoriesData,\n    ProvidersData,\n    api,\n    $mdToast,\n    HTTP_STATUS,\n    $state,\n    InventoryConfiguration,\n    $mdDialog,\n    $document,\n    ERROR_CODES\n  ) {\n    // Data\n    $scope.$parent.vm.currentNavItem = 'purchases_by_product';\n    var PULLING_DELAY_MS = 5000;\n    var vm = this;\n\n    // Methods\n    vm.purchaseProductVariant = purchaseProductVariant;\n    vm.toggleFilterVisibility = toggleFilterVisibility;\n    vm.filterChanged = filterChanged;\n    vm.getGridProductsVariantsReplenishmentsPage = getGridProductsVariantsReplenishmentsPage;\n    vm.getCoverage = getCoverage;\n    vm.downloadCSV = downloadCSV;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        providers: [],\n        warehouses: [],\n        seasons: [],\n        brands: [],\n        categories: [],\n        subcategories: []\n      },\n      dynamicFilters: {\n        providers: {\n          icon: 'icon-store',\n          title: 'LOW_STOCK.PROVIDER',\n          visible: false\n        },\n        availabilityStatuses: {\n          svgIcon: 'assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg',\n          title: 'INVENTORY_DASHBOARD.AVAILABILITY_STATUS',\n          visible: false\n        },\n        abcCategories: {\n          svgIcon: 'assets/images/custom-material-design-icons/abc.3172f407.svg',\n          title: 'INVENTORY_DASHBOARD.ABC_CATEGORY',\n          visible: false\n        },\n        brands: {\n          icon: 'icon-tag-outline',\n          title: 'INVENTORY_DASHBOARD.BRAND',\n          visible: false\n        },\n        categories: {\n          icon: 'icon-folder-multiple-outline',\n          title: 'INVENTORY_DASHBOARD.CATEGORY',\n          visible: false\n        },\n        subcategories: {\n          icon: 'icon-folder-outline',\n          title: 'INVENTORY_DASHBOARD.SUBCATEGORY',\n          visible: false\n        },\n        seasons: {\n          icon: 'icon-weather-sunny',\n          title: 'INVENTORY_DASHBOARD.SEASON',\n          visible: false\n        }\n      },\n      page: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.seasons = SeasonsData.results;\n    vm.brands = BrandsData.results;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.providers = ProvidersData.results;\n    vm.orderQuantities = {};\n    vm.totalDraft = {};\n    vm.company = Session.company;\n    vm.configurationData = angular.copy(InventoryConfiguration.results[0]);\n\n    vm.abcCategories = ['A', 'B', 'C'];\n    vm.availabilityStatuses = [\n      'OUT_OF_STOCK',\n      'URGENT_ORDER',\n      'NON_URGENT_ORDER',\n      'IN_STOCK'\n    ];\n    vm.performingAnalysis = false;\n    vm.exporting = false;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeProductVariantGrid,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ],\n      minimumColumnSize: 170\n    });\n\n    function initializeProductVariantGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        if (vm.columns[changedColumn.colDef.field]) {\n          vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n        }\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.page = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getProductVariantsGridPage(false);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          resetPagination();\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getProductVariantsGridPage(false);\n        }\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function (colDef) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function (oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      setProductVariantGridColumns();\n\n      $timeout(function () {\n        loadStatus();\n        getProductVariantsGridPage(true);\n      }, 200);\n\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setProductVariantGridColumns(true);\n      saveStatus();\n      getProductVariantsGridPage(false);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridPurchaseByProductController', JSON.stringify(vm.status));\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridPurchaseByProductController'));\n      if (loadedStatus) {\n        angular.extend(vm.status, loadedStatus);\n        if (vm.gridApi) {\n          vm.gridApi.saveState.restore($scope, vm.status.state);\n        }\n      }\n    }\n\n\n    function setProductVariantGridColumns(avoidState) {\n      var orderCellHtml =\n        '<div class=\"cell-middle pv-0\" layout=\"row\" layout-align=\"center center\" flex>' +\n        '<div flex>' +\n        '<input type=\"number\"' +\n        'ng-model=\"grid.appScope.vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id]\"' +\n        'class=\"nd-input text-right\">' +\n        '</div>' +\n        '<md-button class=\"md-icon-button no-margin\"' +\n        'ng-click=\"grid.appScope.vm.purchaseProductVariant(row.entity.item_external_id, row.entity.location_external_id, row.entity.provider_external_id, row.entity.replenishment_stock_to_order)\">' +\n        '<md-tooltip> {{\"LOW_STOCK.CREATE_PURCHASE_DRAFT\" | translate }}</md-tooltip>' +\n        '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n        '</md-button>' +\n        '</div>';\n\n      angular.extend(vm.columns, {\n        image: {\n          displayName: '',\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY_STATUS'),\n          field: 'cover_thumbnail',\n          permission: true,\n          pinnedLeft: true,\n          enableColumnMenu: false,\n          enableHiding: true,\n          minWidth: 50,\n          width: 50,\n          maxWidth: 50,\n          cellClass: '',\n          cellTemplate:\n            '<div layout=\"row\" layout-align=\"start center\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' +\n            '<div ng-if=\"!row.entity.cover_thumbnail\" layout=\"row\" layout-align=\"center center\" class=\"w-48\">' +\n            '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '</div>' +\n            '<img ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>' +\n            '</a>' +\n            '</div>',\n          enableSorting: false\n        },\n        sku: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n          field: 'item_sku',\n          permission: true,\n          visible: getColumnStatusVisibility('sku', true, avoidState),\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_sku || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          field: 'item_name',\n          permission: true,\n          visible: getColumnStatusVisibility('item_name', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_name || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        code: {\n          displayName: $filter('translate')('PRODUCT.CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE'),\n          field: 'item_code',\n          permission: true,\n          visible: getColumnStatusVisibility('item_code', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_code || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'item_barcode',\n          permission: true,\n          visible: getColumnStatusVisibility('item_barcode', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_barcode || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        size: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n          field: 'size',\n          permission: true,\n          visible: getColumnStatusVisibility('size', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.size || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        color: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n          field: 'color',\n          permission: true,\n          visible: getColumnStatusVisibility('color', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.color || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        brand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n          field: 'brand_name',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.brand_name || \\'-\\'}}</div>'\n        },\n        category: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.category || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        subcategory: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n          field: 'subcategory',\n          permission: true,\n          visible: getColumnStatusVisibility('subcategory', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.subcategory || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        season: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n          field: 'season_name',\n          permission: true,\n          visible: getColumnStatusVisibility('season', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season_name || \\'-\\'}}</div>'\n        },\n        provider: {\n          displayName: $filter('translate')('LOW_STOCK.PROVIDER'),\n          headerTooltip: $filter('translate')('LOW_STOCK.PROVIDER'),\n          field: 'item_provider',\n          permission: true,\n          visible: getColumnStatusVisibility('provider', true, avoidState),\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.provider_name || \\'-\\'}}</div>'\n        },\n        availabilityStatus: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY'),\n          field: 'availability_status',\n          permission: true,\n          pinnedLeft: false,\n          enableColumnMenu: false,\n          enableHiding: true,\n          cellClass: 'cell-padding',\n          width: 50,\n          cellTemplate:\n            '<div layout=\"row\" layout-align=\"start center\">' +\n            '<div class=\"replenishment-stock-status {{row.entity.availability_status}} ml-8\">' +\n            '<md-tooltip>' +\n            '{{\\'INVENTORY_DASHBOARD.\\' + row.entity.availability_status | translate}}</md-tooltip>' +\n            '</div>' +\n            '</div>',\n          enableSorting: false\n        },\n        abcCategory: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n          field: 'item_abc_category',\n          permission: true,\n          visible: getColumnStatusVisibility('abcCategory', false, avoidState),\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"abc-box type-{{row.entity.item_abc_category}}\">{{row.entity.item_abc_category}}</span>'\n        },\n        stock_in_transit: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          field: 'stock_in_transit',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_in_transit', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false\n        },\n        stock_on_hand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_HANDS'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_HANDS'),\n          field: 'stock_on_hand',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_on_hand', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false,\n          enableCellEdit: true\n        },\n        globalStock: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          field: 'global_stock',\n          permission: true,\n          visible: getColumnStatusVisibility('global_stock', true, avoidState),\n          cellClass: 'cell-right cell-padding'\n        },\n        totalUnitsSold: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n          field: 'total_units_sold',\n          permission: true,\n          visible: getColumnStatusVisibility('total_units_sold', false, avoidState),\n          cellClass: 'cell-right cell-padding'\n        },\n        averageDailySales: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n          field: 'avg_daily_total_units_sold',\n          permission: true,\n          visible: getColumnStatusVisibility('averageDailySales', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{row.entity.avg_daily_total_units_sold | number: 2 }}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{row.entity.avg_daily_total_units_sold * 7 | number: 0 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.PER_WEEK\\' | translate}}' +\n            '</small></div>'\n        },\n        leadTime: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_lead_time',\n          permission: true,\n          visible: getColumnStatusVisibility('leadTime', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span\">{{ row.entity.replenishment_lead_time | number: 0 }}</span>'\n        },\n        rop: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n          field: 'replenishment_rop',\n          permission: true,\n          visible: getColumnStatusVisibility('rop', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_rop | number:  0 }}</span>'\n        },\n        stockoutLosses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          permission: true,\n          visible: getColumnStatusVisibility('stockoutLosses', true, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.replenishment_stockout_losses_date | date: \"dd/MM\"}}' +\n            '</small></div>'\n        },\n        expectedDemand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n          field: 'expected_demand',\n          permission: true,\n          visible: getColumnStatusVisibility('expected_demand', true, avoidState),\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.expected_demand | number: 0 }}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.expected_demand_date | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        expectedSales: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n          field: 'expected_sales',\n          permission: true,\n          visible: getColumnStatusVisibility('expected_sales', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.expected_sales | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        stockTurnDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n          field: 'stock_turn',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_turn', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.global_stock / row.entity.avg_daily_total_units_sold | number: 0 }}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{ row.entity.global_stock / row.entity.avg_daily_total_units_sold / 7 | number: 2 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.WEEKS\\' | translate}}' +\n            '</small></div>'\n        },\n        stockToOrder: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrder', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n        },\n        ddp: {\n          displayName: $filter('translate')('LOW_STOCK.DDP'),\n          headerTooltip: $filter('translate')('LOW_STOCK.DDP'),\n          field: 'unit_price',\n          permission: true,\n          visible: getColumnStatusVisibility('unit_price', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.unit_price | number: 2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        demand_value: {\n          displayName: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          headerTooltip: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n          field: 'demand_value',\n          permission: true,\n          visible: getColumnStatusVisibility('demand_value', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.demand_value | number: 2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        totalDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          cellTemplate:\n            '<div flex class=\"cell-middle\" layout=\"column\">' +\n            '<div layout=\"row\" layout-align=\"end center\" flex>' +\n            '<span class=\"mr-4\">{{ grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\"total\"] }} </span>' +\n            '<span class=\"mr-4\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_autocode\\']\">| </span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/purchases/{{grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\"purchase_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{ grid.appScope.vm.getCoverage(row.entity) | number: 0 }}' +\n            ' {{\\'INVENTORY_DASHBOARD.DAYS_COVERAGE\\' | translate}}' +\n            '</small>' +\n            '</div>'\n        },\n        order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n          field: 'order',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          cellClass: 'cell-centered cell-padding'\n        },\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getCoverage(entity) {\n      var quantity = entity.global_stock + vm.orderQuantities[entity.item_external_id][entity.location_external_id];\n      return quantity / entity.avg_daily_total_units_sold;\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function getGridPostBody() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.status.page;\n      d.page_size = vm.status.pageSize;\n\n      // Ordering\n      d.order_by = vm.status.ordering;\n\n      // Search\n      d.search = vm.status.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      //Filters\n      vm.status.filters.providers && vm.status.filters.providers.length ? d.providers = vm.status.filters.providers : null;\n      vm.status.filters.seasons && vm.status.filters.seasons.length ? d.seasons = vm.status.filters.seasons : null;\n      vm.status.filters.brands && vm.status.filters.brands.length ? d.brands = vm.status.filters.brands : null;\n      vm.status.filters.categories && vm.status.filters.categories.length ? d.categories = vm.status.filters.categories : null;\n      vm.status.filters.subcategories && vm.status.filters.subcategories.length ? d.subcategories = vm.status.filters.subcategories : null;\n      vm.status.filters.abcCategories && vm.status.filters.abcCategories.length ? d.abc_categories = vm.status.filters.abcCategories : null;\n      vm.status.filters.availabilityStatuses && vm.status.filters.availabilityStatuses.length ? d.availability_statuses = vm.status.filters.availabilityStatuses : null;\n\n      return d;\n    }\n\n\n    function performAnalysis() {\n      if (vm.performingAnalysis) {\n        return;\n      }\n      vm.performingAnalysis = true;\n      api.inventories.productVariants.save({\n        option: 'perform-item-low-stock-analysis'\n      }, function (response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_202_ACCEPTED) {\n          vm.performingAnalysis = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function purchaseProductVariant(productVariantId, targetWarehouseId, providerId, replenishmentStockToOrder, quantity) {\n      if (typeof quantity === 'undefined') {\n        quantity = vm.orderQuantities[productVariantId][targetWarehouseId];\n      }\n      if (typeof quantity !== 'undefined') {\n        api.inventories.productVariants.save({\n          id: productVariantId,\n          option: 'purchase',\n          target_warehouse: targetWarehouseId,\n          provider_id: providerId,\n          quantity: quantity,\n          configuration_data: vm.configurationData,\n          replenishment_stock_to_order: replenishmentStockToOrder\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            updateTotalOnOrder();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PURCHASE_CREATED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.message === 'Provider is required') {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PROVIDER_REQUIRED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT &&\n            response.error === ERROR_CODES.ERROR_11001_OPTIMIZATION_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11002_OPTIMIZATION_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11003_OPTIMIZATION_CONFIGURATION_MINIMUM_STOCK_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11005_OPTIMIZATION_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY) {\n            $mdDialog.show({\n              controller: 'PurchasesByProductDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/inventory/views/low-stock/tabs/purchases/by_product/purchases-by-product-dialog.html',\n              parent: angular.element($document.find('body')),\n              clickOutsideToClose: true,\n              focusOnOpen: false,\n              locals: {\n                params: {\n                  configurationData: vm.configurationData,\n                  replenishmentStockToOrder: replenishmentStockToOrder,\n                  message: response.error,\n                  quantity: response.value,\n                  productId: response.product_id,\n                  limitMinQty: response.limit_min_qty || null,\n                  percentage: response.percentage || null,\n                  amount: response.amount || null,\n                  minStock: response.min_stock || null,\n                }\n              }\n            });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n    }\n\n    function updateTotalOnOrder() {\n      var located_product_variants = [];\n      vm.gridOptions.data.forEach(function (item) {\n        located_product_variants.push({\n          product_variant_id: item.item_external_id,\n          warehouse_id: item.location_external_id,\n          provider_id: item.provider_external_id\n        });\n      });\n      api.inventories.productVariants.save(\n        {\n          option: 'total-draft-on-ai-purchase-orders',\n          located_product_variants: located_product_variants\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraft = response.data;\n          }\n        }\n      );\n    }\n\n    var controller = new AbortController();\n\n    function getProductVariantsGridPage(performAnalysisIfEmpty, pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.productVariants.replace(':id/', '').replace(':option', 'purchase_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBody()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n\n          vm.gridOptions.totalItems = data.recordsTotal;\n          if (performAnalysisIfEmpty && !data.data.length) {\n            performAnalysis();\n          }\n          if (data.data.length) {\n            vm.performingAnalysis = false;\n            vm.orderQuantities = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n            });\n            updateTotalOnOrder();\n            vm.gridApi.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getProductVariantsGridPage(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          $mdToast.show(\n            $mdToast.simple()\n              .textContent($filter('translate')('ERRORS.ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION'))\n              .action($filter('translate')('APPS.SETTING'))\n              .highlightAction(true)\n              .hideDelay(7500)\n              .position('top right')).then(function (response) {\n            if (response === 'ok') {\n              $state.go('app.inventory.configuration.stocks_optimization');\n            }\n          });\n          throw error;\n        });\n    }\n\n    function toggleFilterVisibility(property, filter) {\n      filter.visible = !filter.visible;\n      if (!filter.visible && vm.status.filters[property].length) {\n        vm.status.filters[property] = [];\n        vm.filterChanged();\n      }\n      saveStatus();\n    }\n\n    function filterChanged() {\n      resetPagination();\n      saveStatus();\n      getProductVariantsGridPage();\n    }\n\n    function getGridProductsVariantsReplenishmentsPage(performAnalysisIfEmpty) {\n      resetPagination();\n      getProductVariantsGridPage(performAnalysisIfEmpty);\n    }\n\n    function resetPagination() {\n      vm.gridApi.grid.options.paginationCurrentPage = 1;\n    }\n\n    function downloadCSV() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.productVariants.replace('/:id', '').replace(':option', 'store-purchases-by-product-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBody()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ImportEditWizardDialogController', ImportEditWizardDialogController);\n\n  /** @ngInject */\n  function ImportEditWizardDialogController($mdDialog, IMPORTER_STATUS, Session, api, $scope) {\n    var vm = this;\n\n    vm.wizard = {\n      step: {\n        title: 'IMPORTER.STEP_IMPORT_OR_EDIT',\n        template: 'import-edit'\n      },\n      history: ['import-edit']\n    };\n\n    vm.dtInstance = {};\n\n    vm.setStep = setStep;\n    vm.selectOption = selectOption;\n    vm.nextStep = nextStep;\n    vm.prevStep = prevStep;\n    vm.cancel = cancel;\n    vm.showBackOption = showBackOption;\n    vm.getTemplateUrl = getTemplateUrl;\n    vm.showImportationDialog = showImportationDialog;\n\n    function showImportationDialog(importerType) {\n      $mdDialog.hide(importerType);\n    }\n\n    function setStep(title, template) {\n      vm.wizard.step = {\n        title: title,\n        template: template,\n      };\n    }\n\n    function selectOption(option) {\n      if (option === 'import-edit') {\n        setStep(\n          'IMPORTER.STEP_IMPORT_OR_EDIT',\n          'import-edit'\n        );\n      } else if (option === 'products-or-series') {\n        setStep(\n          'IMPORTER.IMPORT_NEW_PRODUCTS',\n          'to-wizard-templates/import'\n        );\n      } else if (option === 'edit-existing-products') {\n        setStep(\n          'IMPORTER.STEP_EDIT_EXISTING_PRODUCTS',\n          'edit-existing-products'\n        );\n      } else if (option === 'edit-products') {\n        setStep(\n          'IMPORTER.STEP_EDIT_PRODUCTS',\n          'to-wizard-templates/edit-products'\n        );\n      } else if (option === 'edit-product-variants') {\n        setStep(\n          'IMPORTER.STEP_EDIT_PRODUCT_VARIANTS',\n          'to-wizard-templates/edit-product-variants'\n        );\n      } else if (option === 'edit-bundles') {\n        setStep(\n          'IMPORTER.STEP_EDIT_BUNDLES',\n          'to-wizard-templates/edit-bundles'\n        );\n      }\n    }\n\n    function nextStep(option) {\n      selectOption(option);\n      vm.wizard.history.push(option);\n    }\n\n    function prevStep() {\n      if (vm.wizard.history.length > 1) {\n        vm.wizard.history.pop();  // Remove the last element\n        vm.wizard.action = vm.wizard.history[vm.wizard.history.length - 1];  // Set action to the new last element\n        selectOption(vm.wizard.action);\n      }\n    }\n\n    function showBackOption() {\n      return vm.wizard.history.length > 1;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getTemplateUrl(template) {\n      return 'app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/' + template + '.html';\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('SalePrintDialogController', SalePrintDialogController);\n\n  /** @ngInject */\n  function SalePrintDialogController($mdDialog, $mdToast, $filter, $document, api, Session, defEmail) {\n\n    // TODO unify this dialog with the same for purchases\n    var vm = this;\n\n    // Data\n    vm.printType = 'products';\n    vm.printPrices = false;\n    vm.printImages = false;\n    vm.sendEmail = false;\n    vm.emailTo = defEmail;\n\n    //Header Product Options\n    vm.showBrand = false;\n    vm.showHsCode = false;\n    vm.showComposition = false;\n    vm.showAttributes = false;\n\n    // Functions\n    vm.print = print;\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.changePrintType = changePrintType;\n\n    initialize();\n\n    function initialize() {\n      var savedPrintType = localStorage.getItem(Session.company.id + '::printTypeSalePrintDialogController');\n      if (savedPrintType) {\n        vm.printType = savedPrintType;\n      }\n    }\n\n    function changePrintType() {\n      localStorage.setItem(Session.company.id + '::printTypeSalePrintDialogController', vm.printType);\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function print() {\n      $mdDialog.hide({\n        print: vm.printType,\n        prices: vm.printPrices,\n        images: vm.printImages,\n        sendEmail: vm.sendEmail,\n        emailTo: vm.sendEmail ? vm.emailTo : null,\n        brand: vm.showBrand,\n        hs_code: vm.showHsCode,\n        composition: vm.showComposition,\n        attributes: vm.showAttributes\n      });\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportSaleProductsDialogController', ImportSaleProductsDialogController);\n\n  /** @ngInject */\n  function ImportSaleProductsDialogController($mdDialog, $mdToast, $filter, $document, api, Session, saleId) {\n\n    var vm = this;\n\n    // Data\n    vm.fileLoaded = false;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      allowDuplicateUploads: true,\n      //singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.sale_order_products = [];\n    vm.filename = null;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n\n    // Functions\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n      vm.filename = file.name;\n      //vm.fileCopy = new File([file], file.name, { type: file.type });\n    }\n\n    function uploadFile(save) {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      vm.ngFlow.flow.opts.target = api.urls.inventories.saleOrderProductsImport;\n      vm.ngFlow.flow.opts.query = {sale: saleId};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.loading = true;\n      vm.ngFlow.flow.upload();\n      //}\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.loading = false;\n      $mdDialog.hide(response);\n      //vm.sale_order_products = JSON.parse(response).sale_order_products;\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DeliverySaleController', DeliverySaleController);\n\n  /** @ngInject */\n  function DeliverySaleController($scope, $state, HTTP_STATUS, INVOICE_TYPES, $mdToast, $mdDialog) {\n\n    var vm = this;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    function save() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support',\n      [\n        // 3rd Party Dependencies\n        'ngYoutubeEmbed',\n        'app.services.session'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.support', {\n        abstract: true,\n        url: '/support'\n      })\n\n      /**\n       * Videos\n       */\n      .state('app.support.videos', {\n        url: '/videos',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/videos/videos.html',\n            controller: 'SupportVideosController as vm'\n          }\n        },\n        resolve: {\n          VideosData: function (apiResolver) {\n            return apiResolver.resolve('support.videos@list', {});\n          },\n        },\n        bodyClass: 'videos'\n      })\n\n      /**\n       * Changelog\n       */\n      .state('app.support.changelogs', {\n        url: '/changelogs',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/changelogs/changelogs.html',\n            controller: 'SupportChangelogsController as vm'\n          }\n        },\n        resolve: {\n          ChangelogsData: function (apiResolver) {\n            return apiResolver.resolve('support.changelogs@list', {});\n          },\n        },\n        bodyClass: 'changelogs'\n      })\n\n      /**\n       * Trial status details\n       */\n      .state('app.support.trial_status_details', {\n        url: '/trial-status',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/trial-status-details/trial-status-details.html',\n            controller: 'TrialStatusDetailsController as vm'\n          }\n        },\n      })\n\n      .state('app.support.performance', {\n        url: '/performance',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/support/views/performance/performance.html',\n            controller: 'PerformanceController as vm'\n          }\n        },\n        bodyClass: 'performance'\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/support');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('ndServerController', ndServerController)\n    .directive('ndServer', ndServer);\n\n  /** @ngInject */\n  function ndServer() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/support/views/performance/directives/nd-server/nd-server.html',\n      scope: {\n        triggerEventName: \"=?\",\n        startEventName: \"=?\",\n        endEventName: \"=?\",\n        badBound: \"=\",\n        regularBound: \"=\",\n      },\n      controller: 'ndServerController'\n    };\n  }\n\n  /** @ngInject */\n  function ndServerController($scope, $rootScope, $mdToast, $filter, api, HTTP_STATUS) {\n\n    // data\n    $scope.processing = false;\n\n    // methods\n    $scope.run = run;\n    $scope.result = {};\n    $scope.getIconName = getIconName;\n    $scope.getSvgIcon = getSvgIcon;\n    $scope.getVeredictTitle = getVeredictTitle;\n    $scope.getCustomClass = getCustomClass;\n\n    initialize();\n\n    // functions\n    function initialize() {\n      $scope.cancelPerformanceEventListener = $scope.$on($scope.triggerEventName, $scope.run);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelPerformanceEventListener();\n      });\n    }\n\n    function run() {\n      $rootScope.$broadcast($scope.startEventName);\n      $scope.processing = true;\n\n      api.performance.server.get({}, function (response, fn, status) {\n        $scope.processing = false;\n        $rootScope.$broadcast($scope.endEventName);\n\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $scope.result = response;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          $scope.result = {};\n        }\n      });\n    }\n\n    function getCustomClass(withBackground) {\n      if (!$scope.result.average) return '';\n      if ($scope.result.average < $scope.regularBound) return 'green-fg' + (withBackground? ' green-50-bg' : '');\n      if ($scope.result.average >= $scope.regularBound && $scope.result.average < $scope.badBound) return 'yellow-fg' + (withBackground? ' yellow-50-bg' : '');\n      if ($scope.result.average >= $scope.badBound) return 'red-fg' + (withBackground? ' red-50-bg' : '');\n    }\n\n    function getIconName() {\n      if (!$scope.result.average) return null;\n      if ($scope.result.average < $scope.regularBound) return 'icon-check-circle';\n      if ($scope.result.average >= $scope.regularBound && $scope.result.average < $scope.badBound) return 'icon-alert-circle';\n      if ($scope.result.average >= $scope.badBound) return 'icon-close-circle-outline';\n    }\n\n    function getSvgIcon(){\n      if (!$scope.result.average) return 'assets/images/custom-material-design-icons/help-circle-outline.b9d43905.svg';\n    }\n\n    function getVeredictTitle() {\n      if (!$scope.result.average) return $filter('translate')(\"PERFORMANCE.UNKNOWN_PERFORMANCE\");\n      if ($scope.result.average < $scope.regularBound) return $filter('translate')(\"PERFORMANCE.GOOD_PERFORMANCE\");\n      if ($scope.result.average >= $scope.regularBound && $scope.result.average < $scope.badBound) return $filter('translate')(\"PERFORMANCE.REGULAR_PERFORMANCE\");\n      if ($scope.result.average >= $scope.badBound) return $filter('translate')(\"PERFORMANCE.BAD_PERFORMANCE\");\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('ndBenchmarkController', ndBenchmarkController)\n    .directive('ndBenchmark', ndBenchmark);\n\n  /** @ngInject */\n  function ndBenchmark() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/support/views/performance/directives/nd-benchmark/nd-benchmark.html',\n      scope: {\n        triggerEventName: \"=?\",\n        startEventName: \"=?\",\n        endEventName: \"=?\",\n        badBound: \"=\",\n        regularBound: \"=\",\n      },\n      controller: 'ndBenchmarkController'\n    };\n  }\n\n  /** @ngInject */\n  function ndBenchmarkController($scope, $filter, $rootScope, Performance) {\n\n    // data\n    $scope.processing = false;\n\n    // methods\n    $scope.run = run;\n    $scope.result = {};\n    $scope.getIconName = getIconName;\n    $scope.getSvgIcon = getSvgIcon;\n    $scope.getVeredictTitle = getVeredictTitle;\n    $scope.getCustomClass = getCustomClass;\n\n    initialize();\n\n    // functions\n    function initialize() {\n      $scope.cancelPerformanceEventListener = $scope.$on($scope.triggerEventName, $scope.run);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelPerformanceEventListener();\n      });\n    }\n\n    function run() {\n      $rootScope.$broadcast($scope.startEventName);\n      $scope.processing = true;\n\n      Performance.benchmark()\n      .then(function (result) {\n        $scope.result = result;\n      })\n      .then(function(){\n        $scope.processing = false;\n        $rootScope.$broadcast($scope.endEventName);\n      });\n    }\n\n    function getCustomClass(withBackground) {\n      if (!$scope.result.ratio) return '';\n      if ($scope.result.ratio > $scope.regularBound) return 'green-fg' + (withBackground? ' green-50-bg' : '');\n      if ($scope.result.ratio <= $scope.regularBound && $scope.result.ratio > $scope.badBound) return 'yellow-fg' + (withBackground? ' yellow-50-bg' : '');\n      if ($scope.result.ratio <= $scope.badBound) return 'red-fg' + (withBackground? ' red-50-bg' : '');\n    }\n\n    function getIconName() {\n      if (!$scope.result.ratio) return null;\n      if ($scope.result.ratio > $scope.regularBound) return 'icon-check-circle';\n      if ($scope.result.ratio <= $scope.regularBound && $scope.result.ratio > $scope.badBound) return 'icon-alert-circle';\n      if ($scope.result.ratio <= $scope.badBound) return 'icon-close-circle-outline';\n    }\n\n    function getSvgIcon(){\n      if (!$scope.result.ratio) return 'assets/images/custom-material-design-icons/help-circle-outline.b9d43905.svg';\n    }\n\n    function getVeredictTitle() {\n      if (!$scope.result.ratio) return $filter('translate')(\"PERFORMANCE.UNKNOWN_PERFORMANCE\");\n      if ($scope.result.ratio > $scope.regularBound) return $filter('translate')(\"PERFORMANCE.GOOD_PERFORMANCE\");\n      if ($scope.result.ratio <= $scope.regularBound && $scope.result.ratio > $scope.badBound) return $filter('translate')(\"PERFORMANCE.REGULAR_PERFORMANCE\");\n      if ($scope.result.ratio <= $scope.badBound) return $filter('translate')(\"PERFORMANCE.BAD_PERFORMANCE\");\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('ndBandwidthController', ndBandwidthController)\n    .directive('ndBandwidth', ndBandwidth);\n\n  /** @ngInject */\n  function ndBandwidth() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/support/views/performance/directives/nd-bandwidth/nd-bandwidth.html',\n      scope: {\n        triggerEventName: \"=?\",\n        startEventName: \"=?\",\n        endEventName: \"=?\",\n        minUpload: \"=\",\n        minDownload: \"=\",\n      },\n      controller: 'ndBandwidthController'\n    };\n  }\n\n  /** @ngInject */\n  function ndBandwidthController($scope, $rootScope, $mdToast, $filter, Performance) {\n\n    // data\n    $scope.processing = false;\n\n    // methods\n    $scope.run = run;\n    $scope.result = {};\n    $scope.getColor = getColor;\n\n    initialize();\n\n    // functions\n    function initialize() {\n      $scope.cancelPerformanceEventListener = $scope.$on($scope.triggerEventName, $scope.run);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelPerformanceEventListener();\n      });\n    }\n\n    function run() {\n      $rootScope.$broadcast($scope.startEventName);\n      $scope.processing = true;\n\n      Performance.avgBandwidth(3)\n      .then(function (result) {\n        $scope.result = result;\n      },\n      function(error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        $scope.result = {};\n      })\n      .then(function(){\n        $scope.processing = false;\n        $rootScope.$broadcast($scope.endEventName);\n      });\n    }\n\n    function getColor(upload) {\n      if (upload) {\n        if ($scope.result.uploadSpeed < $scope.minUpload) return 'red-fg';\n        if ($scope.result.uploadSpeed >= $scope.minUpload) return 'green-fg';\n      }\n\n      if ($scope.result.downloadSpeed < $scope.minDownload) return 'red-fg';\n      if ($scope.result.downloadSpeed >= $scope.minDownload) return 'green-fg';\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('NdSellMatrixController', NdSellMatrixController)\n    .directive('ndSellMatrix', ndSellMatrix);\n\n  /** @ngInject */\n  function ndSellMatrix() {\n    return {\n      restrict: 'E',\n      scope: {\n        sellMatrixData: '=',\n        productSelected: '&',\n        warehouseId: '=',\n        registerConfiguration: '=?'\n      },\n      controller: 'NdSellMatrixController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/sale/views/sell/directives/nd-sell-matrix/nd-sell-matrix.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function NdSellMatrixController($scope, $rootScope, $q, $filter, api, HTTP_STATUS, Session) {\n    var vm = this;\n\n    // Const\n    vm.VIEW_CATEGORIES = 1;\n    vm.VIEW_PRODUCTS = 2;\n\n    // Data\n    vm.currentView = vm.VIEW_CATEGORIES;\n    vm.sellMatrixData = $scope.sellMatrixData;\n    vm.selectedCategory = null;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    vm.registerConfiguration = $scope.registerConfiguration;\n    vm.showProductImages = vm.registerConfiguration ? vm.registerConfiguration.touch_ui_show_product_images : true;\n    vm.showProductPrice = vm.registerConfiguration ? vm.registerConfiguration.touch_ui_show_price : true;\n    vm.mdGridColsSm = vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_sm : 4;\n    vm.mdGridColsMd = vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_md : 4;\n    vm.mdGridColsGtMd = vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_gt_md : 6;\n    vm.mdGridColsGtLg = vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_gt_lg : 8;\n\n    // Methods\n    vm.back = back;\n    vm.nextPage = nextPage;\n    vm.categoryClicked = categoryClicked;\n    vm.productClicked = productClicked;\n    vm.getColsSm = getColsSm;\n    vm.getColsMd = getColsMd;\n    vm.getColsGtMd = getColsGtMd;\n    vm.getColsGtLg = getColsGtLg;\n\n    // Functions\n    function back() {\n      if (vm.sellMatrixData.previousPageUrl) {\n        vm.sellMatrixData.getPreviousPage();\n      } else {\n        vm.currentView = vm.VIEW_CATEGORIES;\n        vm.sellMatrixData.products = [];\n      }\n    }\n\n    function nextPage() {\n      vm.sellMatrixData.getNextPage();\n    }\n\n    function categoryClicked(category) {\n      vm.selectedCategory = category;\n      vm.currentView = vm.VIEW_PRODUCTS;\n      vm.sellMatrixData.getProductsByCategory(category);\n    }\n\n    function productClicked(product) {\n      $scope.productSelected({params: {product: angular.copy(product)}});\n      vm.sellMatrixData.products = [];\n      vm.currentView = vm.VIEW_CATEGORIES;\n    }\n\n    function getColsSm() {\n      return vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_sm : 4;\n    }\n\n    function getColsMd() {\n      return vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_md : 4;\n    }\n\n    function getColsGtMd() {\n      return vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_gt_md : 6;\n    }\n\n    function getColsGtLg() {\n      return vm.registerConfiguration ? vm.registerConfiguration.touch_ui_cols_gt_lg : 8;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'app.services.session',\n        'dndLists',\n        'ui.calendar',\n        'app.services.feature-flag'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.sale', {\n        abstract: true,\n        url: '/sale'\n      })\n\n      /**\n       * SALE\n       */\n\n      .state('app.sale.sell', {\n        url: '/sell',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/sell/sell.html',\n            controller: 'SellSaleController as vm'\n          }\n        },\n        resolve: {\n          RegistersData: function (apiResolver) {\n            return apiResolver.resolve('sales.registers@list', {\n              restricted: true\n            });\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          InventoryConfiguration: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          /*CategoriesData: function (apiResolver)\n          {\n            return apiResolver.resolve('inventories.categories@list', {serializer: 'category_and_subcategories'});\n          },*/\n          PaymentMethods: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', {is_retail_method: true});\n          }\n        },\n        params: {\n          // hidden url parameter\n          posOrder: undefined,\n          isDevolution: false\n        },\n        bodyClass: 'sale'\n      })\n\n      /**\n       * SCREEN\n       */\n\n      .state('app.sale.display', {\n        url: '/display',\n        views: {\n          'main@': {\n            templateUrl: 'app/core/layouts/content-only.html',\n            controller: 'MainController as vm'\n          },\n          'content@app.sale.display': {\n            templateUrl: 'app/main/apps/sale/views/display/display.html',\n            controller: 'SellDisplayController as vm'\n          }\n        },\n        resolve: {},\n        params: {},\n        bodyClass: 'sale'\n      })\n\n      /**\n       * REGISTERS LIST\n       */\n\n      .state('app.sale.registers', {\n        url: '/registers',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/registers/registers.html',\n            controller: 'SaleRegistersController as vm'\n          }\n        },\n        resolve: {\n          RegistersData: function (apiResolver) {\n            return apiResolver.resolve('sales.registers@list');\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          }\n        },\n        bodyClass: 'registers'\n      })\n\n      /**\n       * REGISTER CLOSURE\n       */\n\n      .state('app.sale.register_closure', {\n        url: '/register-closures/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/register-closure/register-closure.html',\n            controller: 'SaleRegisterClosureController as vm'\n          }\n        },\n        resolve: {\n          RegisterActivityData: function (apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('sales.register_activities@get', {\n                'id': $stateParams.id,\n                'serializer': 'RegisterActivityFullSerializer'\n              });\n            } else {\n              return null;\n            }\n          },\n          PaymentMethods: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', {});\n          }\n        }\n      })\n\n\n      /**\n       * REGISTER CLOSURES\n       */\n\n      .state('app.sale.register_closures', {\n        url: '/register-closures',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/register-closures/register-closures.html',\n            controller: 'SaleRegisterClosuresController as vm'\n          }\n        },\n        resolve: {\n          RegistersData: function (apiResolver) {\n            return apiResolver.resolve('sales.registers@list', {serializer: 'RegisterSimpleSerializer', all: true});\n          },\n          UsersData: function (apiResolver) {\n            return apiResolver.resolve('account.users@list');\n          }\n        }\n      })\n\n      /**\n       * GIFT CARDS\n       */\n\n      .state('app.sale.gift-cards', {\n        url: '/gift-cards',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/gift-cards/gift-cards.html',\n            controller: 'SaleGiftCardsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'sale-gift-cards'\n      })\n\n      /**\n       * CUSTOMERS\n       */\n\n      .state('app.sale.customers', {\n        url: '/customers',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/contacts/views/contacts/contacts.html',\n            controller: 'ContactsController as vm'\n          }\n        },\n        resolve: {\n          ContactGroupsData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.contactGroups@list', {});\n          }\n        }\n      })\n\n      /**\n       * SALES LOG LIST\n       */\n\n      .state('app.sale.sales_log', {\n        url: '/sales-log',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/sales-log/sales-log.html',\n            controller: 'SaleSalesLogController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          RegistersData: function (apiResolver) {\n            return apiResolver.resolve('sales.registers@list', {serializer: 'RegisterSimpleSerializer'});\n          },\n          SitesData: function (apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@list', {\n              include_deleted: true\n            });\n          },\n          UsersData: function (apiResolver) {\n            return apiResolver.resolve('account.users@list', {serializer: 'UserNameSerializer'});\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', {serializer: 'PaymentMethodSerializer'});\n          }\n        },\n        bodyClass: 'sales-log'\n      })\n\n      /**\n       * ORDER\n       */\n      .state('app.sale.sales_log.order', {\n        url: '/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/order/order.html',\n            controller: 'EcommerceOrderController as vm'\n          }\n        },\n        resolve: {\n          OrderData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: $stateParams.id\n            });\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SitesData: function (apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@list', {\n              include_deleted: true\n            });\n          },\n          ShippingMethodsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.shippingMethods@list', {});\n          },\n          TaxesData: function (apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list', {});\n          },\n          PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', {});\n          },\n          ShippingBoxesData: function (apiResolver, ShippingBox) {\n            return apiResolver.resolve('inventories.shippingBoxes@list', {});\n          }\n        },\n        bodyClass: 'ecommerce-order'\n      })\n\n      /**\n       * GOALS\n       */\n\n      .state('app.sale.goals', {\n        url: '/goals',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/goals/goals.html',\n            controller: 'GoalsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver, WAREHOUSE_TYPES) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              type: WAREHOUSE_TYPES.STORE,\n              serializer: 'WarehouseSimpleSerializer'\n            });\n          },\n          SalesGoalsData: function (apiResolver) {\n            return apiResolver.resolve('sales.salesGoals@list', {pagination: 'calendar'});\n          }\n        },\n        bodyClass: 'goals'\n      })\n\n      /**\n       * PROMOTIONS\n       */\n\n      .state('app.sale.promotions', {\n        url: '/promotions',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/promotions/promotions.html',\n            controller: 'SalePromotionsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'goals'\n      })\n\n      /**\n       * PROMOTION\n       */\n\n      .state('app.sale.promotions.promotion', {\n        url: '/promotions/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/sale/views/promotion/promotion.html',\n            controller: 'SalePromotionController as vm'\n          }\n        },\n        resolve: {\n          PromotionData: function (apiResolver, $stateParams) {\n            if ($stateParams.id == 'add') {\n              return null;\n            } else {\n              return apiResolver.resolve('sales.promotions@list', {id: $stateParams.id});\n            }\n\n          },\n          CategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {serializer: 'WarehouseSimpleSerializer'});\n          }\n        },\n        bodyClass: 'sale-promotion'\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/sale');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SetNumberDialogController', SetNumberDialogController);\n\n  /** @ngInject */\n  function SetNumberDialogController(\n    $mdDialog,\n    params\n  ) {\n    var vm = this;\n\n    // Data\n    vm.value = params.value;\n    vm.options = params.options.map(function(option) {\n      return +option;\n    });\n    vm.decimals = params.decimals || 0;\n    vm.unit = params.unit || '';\n\n    // Methods\n    vm.cancel = cancel;\n    vm.apply = apply;\n    vm.minusClicked = minusClicked;\n    vm.plusClicked = plusClicked;\n    vm.setValue = setValue;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function apply() {\n      $mdDialog.hide(vm.value);\n    }\n\n    function minusClicked() {\n      vm.value--;\n    }\n\n    function plusClicked() {\n      vm.value++;\n    }\n\n    function setValue(value) {\n      vm.value = value;\n      apply();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('NumericKeywordController', NumericKeywordController)\n    .directive('ndNumericKeyword', ndNumericKeyword);\n\n  /** @ngInject */\n  function ndNumericKeyword() {\n    return {\n      restrict: 'E',\n      scope: {\n        value: '=', stringValue: '=', totalValue: '=', decimalPlaces: '=?'\n      },\n      controller: 'NumericKeywordController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/sale/views/sell/directives/nd-numeric-keyword/nd-numeric-keyword.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function NumericKeywordController($mdMedia, $scope, Session) {\n\n    var vm = this;\n    vm.insertValue = insertValue;\n    vm.returnValue = returnValue;\n    vm.removeValue = removeValue;\n    vm.clearValue = clearValue;\n    vm.fillValue = fillValue;\n    vm.decimalPlaces = $scope.decimalPlaces || 2;\n\n    function returnValue() {\n      parseFloat($scope.value.replace(',', '.'));\n    }\n\n    function updateFloat(recentDecimal) {\n\n      if (recentDecimal) {\n        $scope.value = parseFloat($scope.stringValue + '0');\n      } else {\n        $scope.value = parseFloat($scope.stringValue);\n      }\n\n      if (!$scope.value) {\n        $scope.value = 0.0;\n      }\n    }\n\n    function insertValue(value) {\n\n      if (!$scope.stringValue) {\n        $scope.stringValue = '';\n      }\n\n      if (value === ',' || value === '.') {\n        if (!$scope.stringValue.includes('.')) {\n          $scope.stringValue += '.';\n          updateFloat(true);\n        }\n      } else {\n        if ($scope.stringValue.includes('.') && $scope.stringValue.split('.')[1].length >= (vm.decimalPlaces)) {\n          return;\n        }\n        $scope.stringValue += value.toString();\n        updateFloat(false);\n      }\n    }\n\n    function removeValue(value) {\n\n      if (!$scope.stringValue) {\n        $scope.stringValue = '';\n      }\n\n      if ($scope.stringValue.length == 0) {\n        return;\n      }\n      $scope.stringValue = $scope.stringValue.substring(0, $scope.stringValue.length - 1);\n      updateFloat($scope.stringValue.endsWith('.'));\n    }\n\n    function clearValue(value) {\n\n      if (!$scope.stringValue) {\n        $scope.stringValue = '';\n      }\n\n      $scope.value = 0.0;\n      $scope.stringValue = '';\n    }\n\n    function fillValue() {\n\n      if (!$scope.stringValue) {\n        $scope.stringValue = '';\n      }\n      if ($scope.value !== '') {\n        $scope.value += Math.round(parseFloat(($scope.totalValue * 100).toFixed(11))) / 100;\n      } else {\n        $scope.value = Math.round(parseFloat(($scope.totalValue * 100).toFixed(11))) / 100;\n      }\n      $scope.stringValue = String($scope.value);\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('CashMovementDialogController', CashMovementDialogController);\n\n  /** @ngInject */\n  function CashMovementDialogController($mdDialog, $mdToast, $filter, register, type, api, CASH_MOVEMENT_TYPES) {\n    var vm = this;\n\n    // Data\n    vm.type = type;\n    vm.movement = {\n      register: register.id,\n      used_for_purchase: false\n    };\n    vm.CASH_MOVEMENT_TYPES = CASH_MOVEMENT_TYPES;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.saveMovement = saveMovement;\n    vm.openCashCounter = openCashCounter;\n\n    //Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function saveMovement() {\n      var movement = angular.copy(vm.movement);\n      if (vm.type === vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_OUTPUT){\n        movement.amount *= -1;\n      }\n      api.sales.cash_movements.save(\n        movement,\n        function (response) {\n          if (response.id) {\n            $mdDialog.hide(response);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function openCashCounter() {\n      $mdDialog.show({\n        controller: 'CashCounterDialogController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/sale/views/registers/dialogs/cash-counter/cash-counter-dialog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        locals: {\n          context: vm.cashCounterContex\n        }\n      }).then(function (result) {\n        vm.cashCounterContex = result.context;\n        vm.movement.amount = result.total;\n      }, function () {\n        // Nothing to do\n      });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SalePosOrderDialogController', SalePosOrderDialogController);\n\n  /** @ngInject */\n  function SalePosOrderDialogController($mdDialog, $rootScope, $q, $document, $http, $mdToast, $filter, $window,\n                                        api, PosOrderData, PosOrder, Invoice, HTTP_STATUS,\n                                        Session, SALES_STATUS_COLORS_FG, previousPosOrderId,\n                                        $state, SALES_STATUS_COLORS_BG, $scope, ERROR_CODES, $mdBottomSheet,\n                                        apiResolver,\n                                        PosOrderProductVariant,\n                                        POS_ORDER_PAYMENT_STATUSES_COLORS,\n                                        POS_ORDER_PAYMENT_STATUSES,\n                                        INTEGRATION_APP_TYPE,\n                                        SEARCH_MAX_LENGTH,\n                                        Utils, FeatureFlagService,\n                                        PRINTER_TYPES, PAGE_SIZES) {\n    var vm = this;\n    $scope.Session = Session;\n\n    // Consts\n    vm.SALES_STATUS_COLORS_BG = SALES_STATUS_COLORS_BG;\n    vm.MIN_QUERY_LENGTH = 3;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.AUTOCOMPLETE_MS_TIMEOUT = 300;\n    vm.POS_ORDER_PAYMENT_STATUSES = POS_ORDER_PAYMENT_STATUSES;\n    vm.POS_ORDER_PAYMENT_STATUSES_COLORS = POS_ORDER_PAYMENT_STATUSES_COLORS;\n    vm.INTEGRATION_APP_TYPE = INTEGRATION_APP_TYPE;\n\n    // Data\n    // PosOrder could be an object or an array of PosOrders that only contains one object\n    vm.posOrder = PosOrderData.results ? angular.copy(PosOrderData.results[0]) : angular.copy(PosOrderData);\n    vm.posOrder = new PosOrder(vm.posOrder);\n    vm.posOrderInvoices = vm.posOrder.pos_order_invoices || [];\n    vm.currencyCharacter = $filter('currencyCharacter')(vm.posOrder.currency);\n    vm.showDeleteAction = false;\n    vm.deletting = false;\n    vm.generatingInvoice = false;\n\n    vm.customerAutocomplete = {\n      selectedItem: vm.posOrder.customer ? vm.posOrder.customer : null\n    };\n    vm.selectedCustomerId = null;\n    vm.assignCustomerError = false;\n    vm.customerSearchText = '';\n    vm.userSearchText = '';\n    vm.printing = false;\n    vm.fetching = false;\n\n    vm.notesChanged = false;\n    vm.createdByChanged = false;\n    vm.customerChanged = false;\n    vm.refreshAtClose = false;\n\n    // Edit payment data\n    vm.paymentMethodEdited = false;\n\n    vm.giftCardKinds = {\n      CONSUMED: 1,\n      CREATED: 2\n    };\n\n\n    // Methods\n    vm.hide = hide;\n    vm.getTotal = getTotal;\n    vm.getTaxAmount = getTaxAmount;\n    vm.getTotalByProduct = getTotalByProduct;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.print = print;\n    vm.continueSale = continueSale;\n    vm.createDevolution = createDevolution;\n    vm.goToProduct = goToProduct;\n    vm.deletePosOrder = deletePosOrder;\n    vm.generateInvoice = generateInvoice;\n    vm.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n\n    vm.customersQuerySearch = customersQuerySearch;\n    vm.userQuerySearch = userQuerySearch;\n    vm.createCustomer = createCustomer;\n    vm.getCustomerText = getCustomerText;\n    vm.getUserText = getUserText;\n    vm.printDevolutionCard = printDevolutionCard;\n    vm.autocompleteDisabled = autocompleteDisabled;\n    vm.showAssignCustomer = showAssignCustomer;\n    vm.showChangeVendor = showChangeVendor;\n    vm.printPdf = printPdf;\n    vm.printHtml = printHtml;\n    vm.sendPdf = sendPdf;\n    vm.notesHasChanged = notesHasChanged;\n    vm.createByHasChanged = createByHasChanged;\n    vm.customerHasChanged = customerHasChanged;\n    vm.isAllowedToCreateDevolution = isAllowedToCreateDevolution;\n\n    vm.cancelChanges = cancelChanges;\n    vm.saveChanges = saveChanges;\n\n    vm.showEditPayment = showEditPayment;\n    vm.editPayment = editPayment;\n\n    vm.isReturned = isReturned;\n    vm.goToPosOrder = goToPosOrder;\n\n    vm.getPosOrderProductVariants = getPosOrderProductVariants;\n    vm.getConsumedGiftCards = getConsumedGiftCards;\n    vm.getChargedGiftCards = getChargedGiftCards;\n    vm.getGiftCardsKind = getGiftCardsKind;\n\n    vm.markAsIncidence = markAsIncidence;\n    vm.getSubtotal = getSubtotal;\n\n    vm.isDevolutionWithPaymentGateway = isDevolutionWithPaymentGateway;\n    vm.openInvoice = openInvoice;\n    vm.downloadInvoice = downloadInvoice;\n    vm.openSubstitutiveInvoice = openSubstitutiveInvoice;\n    vm.showAndHideBundleVariants = showAndHideBundleVariants;\n    vm.hasEposItalyActive = hasEposItalyActive;\n\n    init();\n\n    function init() {\n      vm.posOrder.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n        if (posOrderProductVariant.is_bundle) {\n          posOrderProductVariant.showBundle = JSON.parse(localStorage.getItem(Session.company.id + '_' + Session.user.id + '::showBundle'));\n        }\n      });\n    }\n\n    function hasEposItalyActive() {\n      return vm.posOrder.hasEposItalyActive();\n    }\n\n    function showAndHideBundleVariants(posOrderProductVariant) {\n      posOrderProductVariant.showBundle = !posOrderProductVariant.showBundle;\n      localStorage.setItem(Session.company.id + '_' + Session.user.id + '::showBundle', JSON.stringify(posOrderProductVariant.showBundle));\n    }\n\n    //Functions\n    function printPdf() {\n      var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n      if (flag_enabled && vm.posOrder && vm.posOrder.pos_order_invoices.length > 0) {\n        var url = api.urls.accounting.printer.replace(':option', 'pos-order-invoices');\n\n        var params = {\n          pos_order_invoice_ids: vm.posOrder.pos_order_invoices.map(function(invoice) {\n            return invoice.id;\n          }),\n          pos_order_ids: vm.posOrder.id,\n          printer_type: PRINTER_TYPES.PRINTER_TYPE_PDF,\n          page_size: PAGE_SIZES.PAGE_SIZE_A4,\n          register_id: vm.posOrder.register ? vm.posOrder.register.id : null\n        };\n        $http.get(url, { params: params }).then(function(response) {\n          var file = new Blob([response.data], { type: 'application/pdf' });\n          var fileURL = URL.createObjectURL(file);\n          window.open(fileURL, '_blank');\n        });\n      }\n      else {\n        var url = api.urls.inventories.posOrdersPrintPdf.replace(':id', vm.posOrder.id);\n        $http.get(url).then(function(response) {\n          if (response.status === HTTP_STATUS.HTTP_200_OK) {\n            Session.setTokenCookie();\n            window.open(url);\n          } else {\n            var content = 'WAREHOUSE.TICKET_CONFIGURATION_TOAST_ERROR_MESSAGE';\n            if (vm.posOrder.site && vm.posOrder.site.id && response.data.site_id) {\n              content = 'SITE.TICKET_CONFIGURATION_TOAST_ERROR_MESSAGE';\n            }\n            if (response.status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')(content))\n                .action($filter('translate')('WAREHOUSE.TICKET_CONFIGURATION_BUTTON'))\n                .hideDelay(5000)\n                .highlightAction(true)\n                .position('top right')).then(function(toast_response) {\n                if (toast_response === 'ok') {\n                  if (!vm.posOrder.site && response.data.warehouse_id) {\n                    $mdDialog.hide();\n                    $state.go('app.inventory.warehouses.warehouse.details', { id: response.data.warehouse_id });\n                  } else if (vm.posOrder.site && vm.posOrder.site.id && response.data.site_id) {\n                    $mdDialog.hide();\n                    $state.go('app.ecommerce.sites.site.details', { id: response.data.site_id });\n                  }\n                }\n              });\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n                  .hideDelay(3000)\n              );\n            }\n          }\n        });\n      }\n    }\n\n    function printHtml() {\n      if (vm.printing)\n        return;\n      vm.printing = true;\n      var url = api.urls.inventories.posOrdersPrintHtml.replace(':id', vm.posOrder.id);\n      $http.get(url).then(function(response) {\n        if (response.status == 200) {\n          var printWindow = window.open('', 'PRINT', 'height=auto,width=200px');\n          printWindow.document.write(response.data.html);\n          printWindow.document.close(); // necessary for IE >= 10\n          printWindow.focus(); // necessary for IE >= 10*/\n          printWindow.onload = function(e) {\n            printWindow.print();\n            printWindow.close();\n          };\n          vm.printing = false;\n        }\n      });\n    }\n\n    function sendPdf(isGift) {\n\n      if (vm.fetching) {\n        return;\n      }\n\n      if (!vm.posOrder.customer) {\n        vm.assignCustomerError = true;\n        return;\n      }\n\n      var tempSale = angular.copy(vm.posOrder);\n      tempSale.option = 'send_pdf';\n\n      var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n\n      if (isGift) {\n        $mdDialog.show({\n          controller: 'EscPosPrinterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/services/dialogs/esc-pos-printer-dialog/esc-pos-printer-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: false,\n          multiple: true,\n          locals: {\n            products: tempSale.pos_order_product_variants,\n            isEco: true\n          }\n        }).then(function(result) {\n          tempSale.is_gift = true;\n\n          if (flag_enabled && vm.posOrder && vm.posOrder.pos_order_invoices.length > 0) {\n            vm.posOrder.pos_order_product_variants = result;\n          } else {\n            tempSale.gift_amounts = result.map(function(posOrderProductVariant) {\n              return {\n                id: posOrderProductVariant.id,\n                amount: posOrderProductVariant.selected ? posOrderProductVariant.gift_amount : 0\n              };\n            });\n          }\n\n          sendPdfRequest(tempSale, flag_enabled);\n        });\n      } else {\n        sendPdfRequest(tempSale, flag_enabled);\n      }\n    }\n\n    function sendPdfRequest(tempSale, flag_enabled) {\n      vm.fetching = true;\n\n      if (flag_enabled && vm.posOrder && vm.posOrder.pos_order_invoices.length > 0) {\n        sendPdfWithNewEndpoint(tempSale);\n      } else {\n        sendPdfWithLegacyEndpoint(tempSale);\n      }\n    }\n\n    function sendPdfWithNewEndpoint(tempSale) {\n      var url = api.urls.accounting.printer.replace(':option', 'send-pdf');\n      var params = buildPdfParams(tempSale);\n\n      $http.post(url, params).then(function(response) {\n        handleSendPdfResponse(response.data, response.status);\n      });\n    }\n\n    function sendPdfWithLegacyEndpoint(tempSale) {\n      api.inventories.posOrders.update(\n        tempSale,\n        function(response, callback, status) {\n          handleSendPdfResponse(response, status);\n        }\n      );\n    }\n\n    function buildPdfParams(tempSale) {\n      var params = {\n        pos_order_invoice_ids: vm.posOrder.pos_order_invoices.map(function(invoice) {\n          return invoice.id;\n        }),\n        pos_order_ids: vm.posOrder.id,\n        printer_type: PRINTER_TYPES.PRINTER_TYPE_PDF,\n        page_size: PAGE_SIZES.PAGE_SIZE_A4,\n        register_id: vm.posOrder.register ? vm.posOrder.register.id : null,\n        customer_id: vm.posOrder.customer.id\n      };\n\n      if (tempSale.is_gift) {\n        params.is_gift_ticket = true;\n        params.gift_pos_order_product_variants = vm.posOrder.pos_order_product_variants;\n      }\n\n      return params;\n    }\n\n    function handleSendPdfResponse(response, status) {\n      if (response.success) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.TICKET_SENT')).position('top right'));\n      } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('SALES.CONTACT_EMAIL_HAS_NOT_BEEN_PROVIDED_TOAST'))\n          .action($filter('translate')('SALES.CONTACT_EMAIL_HAS_NOT_BEEN_PROVIDED_TOAST_ACTION'))\n          .hideDelay(5000)\n          .highlightAction(true)\n          .position('top right')).then(function(toast_response) {\n          if (toast_response === 'ok') {\n            if (response.contact_id && Session.hasPermission('contacts.contacts.update')) {\n              $state.go('app.contacts.contact.details', { id: response.contact_id });\n            }\n          }\n        });\n      } else {\n        if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.error === 'ERROR_TICKET_CONFIG_WAREHOUSE') {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TICKET_CONFIG_WAREHOUSE')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      }\n      vm.fetching = false;\n    }\n\n\n    function hide(refresh) {\n      $mdDialog.hide(refresh || vm.refreshAtClose || vm.paymentMethodEdited);\n    }\n\n    function getTotalByProduct(posOrderProductVariant) {\n      return posOrderProductVariant.getTotal(false);\n    }\n\n    function getSubtotal(ignoreDiscount) {\n      var result = 0;\n      vm.posOrder.pos_order_product_variants.forEach(function(popv) {\n        result += popv.getSubtotal(false);\n      });\n\n      if (!ignoreDiscount) {\n        result -= vm.posOrder.discount_excl_tax;\n      }\n      return Utils.twoDecimals(result);\n    }\n\n    function getTotal() {\n      return parseFloat(vm.posOrder.total);\n    }\n\n    function getTaxAmount(posOrderProductVariant, customPrice) {\n      if (customPrice)\n        return parseFloat(posOrderProductVariant.custom_price_incl_tax) - parseFloat(posOrderProductVariant.custom_price_excl_tax);\n      return parseFloat(posOrderProductVariant.price_incl_tax) - parseFloat(posOrderProductVariant.price_excl_tax);\n    }\n\n    function getStatusColorClass(status) {\n      return SALES_STATUS_COLORS_FG[status];\n    }\n\n    function continueSale() {\n      vm.hide();\n      $state.go('app.sale.sell', {\n        posOrder: vm.posOrder,\n        isDevolution: !!vm.posOrder.devolution_of\n      });\n    }\n\n    function createDevolution() {\n\n      // Check if browser's localStorage has defaultRegister\n      var defaultRegister = localStorage.getItem(Session.company.id + '::defaultRegister');\n\n      if (defaultRegister) {\n        // If exists, start a devolution\n        createDevolutionByRegister(defaultRegister);\n      } else {\n        // Otherwise, show register selector dialog\n        $mdDialog.show({\n          controller: 'SelectRegisterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/registers/dialogs/select-register/select-register-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: false,\n          resolve: {\n            RegistersData: function(apiResolver) {\n              return apiResolver.resolve('sales.registers@list');\n            }\n          },\n          locals: {\n            message: 'SELECT_REGISTER.SELECT_REGISTER_MSG'\n          }\n        }).then(function(result) {\n          // Start a devolution again\n          createDevolutionByRegister(result.id);\n        }, function() {\n          // Nothing to do\n        });\n      }\n    }\n\n    function createDevolutionByRegister(registerId) {\n      var devolution = angular.extend(vm.posOrder, {\n        option: 'create-devolution-draft',\n        register: registerId\n      });\n\n      var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n      apiToUse.update(\n        devolution,\n        function(results, fn, status) {\n          if (status == HTTP_STATUS.HTTP_200_OK || status == HTTP_STATUS.HTTP_201_CREATED) {\n            vm.hide();\n            $state.go('app.sale.sell', { posOrder: results, isDevolution: true });\n          } else if (status === HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n            // If 405, register it's closed\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.DEVOLUTION_REGISTER_CLOSED_ERROR')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function goToProduct(productId) {\n      vm.hide();\n      $state.go('app.inventory.products.product.overview', { id: productId });\n    }\n\n    function deletePosOrder(createNegativePaymentMethods, registerId) {\n      if (Session.hasPermission('sale.sales_log.delete')) {\n\n        vm.deletting = true;\n        var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n        apiToUse.delete(\n          {\n            id: vm.posOrder.id,\n            force: !!vm.getGiftCardsKind(),\n            create_negative_payment_methods: createNegativePaymentMethods,\n            register_id: registerId\n          },\n          function(results, fn, status) {\n            if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              vm.hide(true);\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.POS_ORDER_DELETED')).position('top right'));\n            } else {\n              if (results.Error === ERROR_CODES.ERROR_04003_DELETING_POS_ORDER_REGISTER_ACTIVITY_CLOSED) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('SALES_LOG.ERROR_DELETE_ACTIVITY_CLOSED'))\n                  .hideDelay(10000)\n                  .position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n            vm.deletting = false;\n          }\n        );\n      }\n    }\n\n    function generateInvoice(ev, send) {\n      if (Session.hasPermission('sale.sales_log.generate_invoice')) {\n\n        if (!vm.posOrder.customer) {\n          vm.assignCustomerError = true;\n          return;\n        }\n\n        var customer = vm.posOrder.customer;\n        var postal_address = customer.postal_addresses.length ? customer.postal_addresses[0] : {};\n        var errors = [];\n\n        if (!customer.vat)\n          errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_VAT'));\n        if (!customer.name)\n          errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_COMPANY_NAME'));\n        if (!postal_address.address_1)\n          errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_ADDRESS'));\n        if (!postal_address.city)\n          errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_CITY'));\n        if (!postal_address.country)\n          errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_COUNTRY'));\n        if (!postal_address.zip)\n          errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_ZIP'));\n\n        if (errors.length) {\n\n          var error_text = '<ul>';\n          errors.forEach(function(error) {\n            error_text += '<li class=\"red-500-fg\">' + error + '</li>';\n          });\n          error_text += '</ul>';\n\n          $mdDialog.show(\n            $mdDialog.alert()\n              .parent(angular.element(document.querySelector('#dialogContent_pos-order-dialog')))\n              .clickOutsideToClose(true)\n              .title($filter('translate')('SALES_LOG.ERROR_MISSING_CUSTOMER_INFORMATION'))\n              .htmlContent(error_text)\n              .multiple(true)\n              .ariaLabel($filter('translate')('SALES_LOG.ERROR_MISSING_CUSTOMER_INFORMATION'))\n              .ok($filter('translate')('SALES_LOG.UNDERSTOOD'))\n              .targetEvent(ev)\n          );\n        } else {\n\n          vm.assignCustomerError = false;\n\n          if (vm.generatingInvoice)\n            return;\n\n          vm.generatingInvoice = true;\n\n          var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n          var params = {\n            id: vm.posOrder.id\n          };\n\n          if (apiToUse === api.private.v2.inventories.posOrders) {\n            params.option = 'create-replacement-invoice';\n            params.pos_order_invoice_ids = vm.posOrder.pos_order_invoices.map(function(pos_order_invoice) {\n              return pos_order_invoice.id;\n            });\n          } else {\n            params.option = 'invoice';\n            params.send_invoice = send;\n          }\n\n          apiToUse.save(\n            params,\n            function(results, fn, status) {\n\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                if (params.option === 'create-replacement-invoice') {\n                  vm.posOrder.substitutive_invoices = vm.posOrder.substitutive_invoices || [];\n                  vm.posOrder.substitutive_invoices.push(new Invoice(results.invoice));\n                } else {\n                  vm.posOrder.invoice = new Invoice(results.invoice);\n                }\n                if (send && apiToUse !== api.private.v2.inventories.posOrders) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.INVOICE_SENT')).position('top right'));\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.INVOICE_GENERATED_SUCCESSFULLY')).position('top right'));\n                }\n              } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n                $mdToast.show(\n                  $mdToast.simple()\n                    .textContent($filter('translate')('SALES_LOG.' + results.error_code))\n                    .position('top right')\n                );\n              } else if (status === HTTP_STATUS.HTTP_500_INTERNAL_SERVER_ERROR) {\n                var message = results.detail || $filter('translate')('GENERAL.ERROR_TOAST');\n                $mdToast.show(\n                  $mdToast.simple()\n                    .textContent(message)\n                    .position('top right')\n                );\n              } else {\n                $mdToast.show(\n                  $mdToast.simple()\n                    .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                    .position('top right')\n                );\n              }\n\n              vm.generatingInvoice = false;\n\n            }\n          );\n        }\n      }\n    }\n\n    /**\n     * Retrieves the customers from the server according to the input test\n     * @param text\n     * @returns {*}\n     */\n    function customersQuerySearch(text) {\n\n      var deferred = $q.defer();\n      text = text.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.sales.customers.get(\n        {\n          search: text\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    /**\n     * Shows the new customer dialog\n     * @param customerAutocomplete\n     */\n    function createCustomer(customerAutocomplete) {\n      // Hiding the mdAutocomplete content:\n\n      angular.element('.customer-autocomplete input').scope().$mdAutocompleteCtrl.hidden = true;\n\n      $mdDialog.show({\n        controller: 'ContactDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          forceCustomer: true,\n          forceNaturalPersonType: true\n        },\n        resolve: {\n          ContactsData: function(apiResolver) {\n            return false;\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          }\n        }\n      }).then(function() {\n        vm.dtInstance.rerender();\n      });\n    }\n\n    /**\n     * Returns the formated string for a given customer\n     * @param customer\n     * @returns {*}\n     */\n    function getCustomerText(customer) {\n      vm.assignCustomerError = false;\n\n      var result = $filter('personname')(customer);\n      if (customer.email)\n        result += ' - ' + customer.email;\n      if (customer.phone)\n        result += ' - ' + customer.phone;\n      return result;\n    }\n\n    function getUserText(user) {\n      return $filter('personname')(user);\n    }\n\n    /**\n     * Returns true if the original PosOrder already have a customer\n     * @returns {*}\n     */\n    function autocompleteDisabled() {\n      return vm.posOrder.invoice;\n    }\n\n    function showAssignCustomer() {\n      var originalPosOrder = PosOrder.results ? PosOrder.results[0] : PosOrder;\n\n      if (originalPosOrder.customer === vm.posOrder.customer)\n        return false;\n\n      if (!originalPosOrder.customer && vm.posOrder.customer)\n        return true;\n\n      if (originalPosOrder.customer && !vm.posOrder.customer)\n        return true;\n\n      if (originalPosOrder.customer.id !== vm.posOrder.customer.id)\n        return true;\n\n      return false;\n    }\n\n    function showChangeVendor() {\n      var originalPosOrder = PosOrder.results ? PosOrder.results[0] : PosOrder;\n\n      if (vm.posOrder && vm.posOrder.created_by) {\n        return originalPosOrder.created_by.id !== vm.posOrder.created_by.id;\n      }\n      return false;\n    }\n\n\n    function printDevolutionCard() {\n      if (vm.posOrder.generated_devolution_card) {\n        $scope.$emit('ndPrinter::printDevolutionCard', {\n          posOrder: vm.posOrder,\n          register: vm.posOrder.register\n        });\n      }\n    }\n\n    function print(giftTicket) {\n      if (giftTicket && vm.posOrder.hasEposItalyActive()) {\n        return;\n      }\n\n      $scope.$emit('ndPrinter::printPosOrder', {\n        posOrder: vm.posOrder,\n        register: vm.posOrder.register,\n        site: vm.posOrder.site,\n        openDrawer: false,\n        giftTicket: giftTicket,\n        avoidNormalTicket: giftTicket\n      });\n    }\n\n    /**\n     * Retrieves the customers from the server according to the input test\n     * @param text\n     * @returns {*}\n     */\n    function customersQuerySearch(text) {\n      var deferred = $q.defer();\n      text = text.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.sales.customers.get(\n        {\n          search: text\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function userQuerySearch(text) {\n      var deferred = $q.defer();\n      text = text.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.users.get(\n        {\n          search: text\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function notesHasChanged() {\n      vm.notesChanged = true;\n    }\n\n\n    function createByHasChanged() {\n      var originalPosOrder = PosOrder.results ? angular.copy(PosOrder.results[0]) : angular.copy(PosOrder);\n      if (!!vm.posOrder.created_by === !!originalPosOrder.created_by) {\n        if (vm.posOrder.created_by) {\n          vm.createdByChanged = vm.posOrder.created_by.id !== originalPosOrder.created_by.id;\n        }\n      } else {\n        vm.createdByChanged = true;\n      }\n    }\n\n    function setNdBarcodeListenerEnabled(value) {\n      $rootScope.ndBarcodeListenerEnabled = value;\n    }\n\n    function customerHasChanged() {\n      var originalPosOrder = PosOrder.results ? angular.copy(PosOrder.results[0]) : angular.copy(PosOrder);\n      if (!!vm.posOrder.customer === !!originalPosOrder.customer) {\n        if (vm.posOrder.customer) {\n          vm.customerChanged = vm.posOrder.customer.id !== originalPosOrder.customer.id;\n        }\n      } else {\n        vm.customerChanged = true;\n      }\n    }\n\n    function cancelChanges() {\n      var originalPosOrder = PosOrder.results ? PosOrder.results[0] : PosOrder;\n\n      vm.posOrder.notes = originalPosOrder.notes;\n      vm.posOrder.customer = originalPosOrder.customer;\n      vm.posOrder.created_by = originalPosOrder.created_by;\n      vm.notesChanged = false;\n      vm.customerChanged = false;\n      vm.createdByChanged = false;\n    }\n\n    function saveChanges() {\n\n      var object = {\n        id: vm.posOrder.id,\n        option: 'patch'\n      };\n      if (vm.notesChanged) {\n        object.notes = vm.posOrder.notes;\n      }\n      if (vm.customerChanged && vm.posOrder.customer && Session.hasPermission('sale.sales_log.update_customer')) {\n        object.customer_id = vm.posOrder.customer.id;\n      }\n      if (vm.createdByChanged && vm.posOrder.created_by && Session.hasPermission('sale.sales_log.update_created_by')) {\n        object.created_by = vm.posOrder.created_by.id;\n      }\n      if (vm.incidenceChanged && Session.hasPermission('sale.sales_log.update_sale')) {\n        object.incidence = vm.posOrder.incidence;\n      }\n\n      api.inventories.posOrders.save(\n        object,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.notesChanged = false;\n            vm.customerChanged = false;\n            vm.createdByChanged = false;\n            vm.incidenceChanged = false;\n            afterSave();\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (results.Error === ERROR_CODES.ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER) {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('ORDER.ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER'))\n                  .position('top right')\n              );\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n              );\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.fetching = false;\n        }\n      );\n\n    }\n\n    function saveChangesOld2() {\n      var arrayQueries = [];\n      if (vm.notesChanged) {\n        var a = $q.defer();\n        api.inventories.posOrders.save(\n          {\n            id: vm.posOrder.id,\n            notes: vm.posOrder.notes,\n            option: 'patch-notes'\n          },\n          function(results, fn, status) {\n            a.resolve({\n              results: results,\n              fn: fn,\n              status: status\n            });\n          });\n\n        arrayQueries.push(a.promise);\n      }\n      if (vm.customerChanged) {\n        var b = $q.defer();\n        api.inventories.posOrders.save(\n          {\n            id: vm.posOrder.id,\n            customer_id: vm.posOrder.customer ? vm.posOrder.customer.id : null,\n            option: 'assign-customer'\n          },\n          function(results, fn, status) {\n            b.resolve({\n              results: results,\n              fn: fn,\n              status: status\n            });\n          });\n\n        arrayQueries.push(b.promise);\n      }\n      if (vm.createdByChanged) {\n        var c = $q.defer();\n        api.inventories.posOrders.save(\n          {\n            id: vm.posOrder.id,\n            created_by: vm.posOrder.created_by ? vm.posOrder.created_by.id : null,\n            option: 'change-created-by'\n          },\n          function(results, fn, status) {\n            c.resolve({\n              results: results,\n              fn: fn,\n              status: status\n            });\n          });\n\n        arrayQueries.push(c.promise);\n      }\n\n      if (arrayQueries.length > 0) {\n        vm.fetching = true;\n      }\n\n      $q.all(arrayQueries).then(function(data) {\n        if (vm.notesChanged) {\n          vm.notesChanged = false;\n          data.splice(0, 1);\n        }\n        if (vm.customerChanged) {\n          if (data[0].status === HTTP_STATUS.HTTP_200_OK) {\n            vm.posOrder.customer = data[0].results.customer;\n            vm.customerChanged = false;\n          }\n          data.splice(0, 1);\n        }\n        if (vm.createdByChanged) {\n          if (data[0].status === HTTP_STATUS.HTTP_200_OK) {\n            vm.posOrder.created_by = data[0].results.created_by;\n            vm.createdByChanged = false;\n          }\n        }\n\n        afterSave();\n      }, function(error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n    }\n\n    function saveChangesOld() {\n      var arrayQueries = [];\n      if (vm.notesChanged) {\n        vm.fetching = true;\n        api.inventories.posOrders.save(\n          {\n            id: vm.posOrder.id,\n            notes: vm.posOrder.notes,\n            option: 'patch-notes'\n          },\n          function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.notesChanged = false;\n              afterSave();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n          }\n        );\n      }\n      if (vm.customerChanged) {\n        vm.fetching = true;\n        api.inventories.posOrders.save(\n          {\n            id: vm.posOrder.id,\n            customer_id: vm.posOrder.customer ? vm.posOrder.customer.id : null,\n            option: 'assign-customer'\n          },\n          function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.posOrder.customer = results.customer;\n              vm.customerChanged = false;\n              afterSave();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n      if (vm.createdByChanged) {\n        vm.fetching = true;\n        api.inventories.posOrders.save(\n          {\n            id: vm.posOrder.id,\n            created_by: vm.posOrder.created_by ? vm.posOrder.created_by.id : null,\n            option: 'change-created-by'\n          },\n          function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.posOrder.created_by = results.created_by;\n              vm.createdByChanged = false;\n              afterSave();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function afterSave() {\n      // Backing up the result posOrder\n      if (PosOrder.results) {\n        PosOrder.results[0] = angular.copy(vm.posOrder);\n      } else {\n        PosOrder = angular.copy(vm.posOrder);\n      }\n\n      vm.fetching = false;\n      vm.refreshAtClose = true;\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n    }\n\n    function editPayment() {\n      $mdBottomSheet.show({\n        parent: angular.element(document.getElementById('pos-order-dialog')),\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/edit-payments.html',\n        controller: 'EditPaymentsController',\n        controllerAs: 'vm',\n        clickOutsideToClose: false,\n        escapeToClose: true,\n        resolve: {\n          PaymentMethods: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', { is_retail_method: true });\n          }\n        },\n        locals: {\n          posOrder: angular.copy(vm.posOrder)\n        }\n      }).then(function(modifiedPosOrder) {\n        // Override the posOrder if the modification of the payment method has been completed\n        if (modifiedPosOrder) {\n          vm.posOrder = modifiedPosOrder;\n          vm.paymentMethodEdited = true;\n\n          // PosOrder could be an object or an array of PosOrders that only contains one object\n          if (PosOrder.results) {\n            PosOrder.results[0] = modifiedPosOrder;\n          } else {\n            PosOrder = modifiedPosOrder;\n          }\n        }\n      }, function(error) {\n        // Nothing to do\n      });\n    }\n\n    /**\n     * Only the posOrders with the same register activity and with the register opened can be modified\n     * @returns {boolean|[]|*}\n     */\n    function showEditPayment() {\n      return vm.posOrder.autocode &&\n        !vm.posOrder.invoice &&\n        // vm.posOrder.pos_order_payment_methods &&\n        // vm.posOrder.pos_order_payment_methods.length > 0 &&\n        vm.posOrder.register &&\n        !vm.posOrder.register.is_closed &&\n        vm.posOrder.register.current_activity &&\n        vm.posOrder.register_activity === vm.posOrder.register.current_activity.id;\n    }\n\n    function isAllowedToCreateDevolution() {\n      if (vm.posOrder) {\n        if (!vm.posOrder.autocode) {\n          return false;\n        }\n        if (!vm.posOrder.pos_order_product_variants || vm.posOrder.pos_order_product_variants.length === 0) {\n          return false;\n        }\n        return vm.posOrder.pos_order_product_variants.some(function(posOrderProductVariant) {\n          return posOrderProductVariant.amount > 0;\n        });\n      }\n      return false;\n    }\n\n    /**\n     * Returns the devolution PosOrder if posOrderProductVariant is returned\n     * @param posOrderProductVariant\n     */\n    function isReturned(posOrderProductVariant) {\n      return posOrderProductVariant.devolutions_of.length !== 0;\n    }\n\n    function goToPosOrder(posOrderId) {\n      // To avoid open the same dialog twice, it posOrderId is the same of previousPosOrderId\n      // we close the dialog instead of open the same of one already opened\n      if (previousPosOrderId === posOrderId) {\n        $mdDialog.hide();\n        return;\n      }\n\n      $mdDialog.show({\n        controller: 'SalePosOrderDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        hasBackdrop: false,\n        locals: {\n          previousPosOrderId: vm.posOrder.id\n        },\n        resolve: {\n          PosOrderData: function(apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: posOrderId,\n              serializer: 'PosOrderWithDevolutionsSerializer'\n            });\n          }\n        }\n      });\n    }\n\n    function getPosOrderProductVariants() {\n      return vm.posOrder.pos_order_product_variants.filter(function(popv) {\n        return !popv.hide_from_lists;\n      });\n    }\n\n\n    function getConsumedGiftCards() {\n      if (vm.posOrder.is_old_devolution_cards) {\n        return vm.posOrder.devolution_cards;\n      }\n      return vm.posOrder.pos_order_product_variants.filter(function(popv) {\n        return popv.consumed_gift_card;\n      });\n    }\n\n    function getChargedGiftCards() {\n      if (vm.posOrder.is_old_generated_devolution_cards) {\n        return [vm.posOrder.generated_devolution_card];\n      }\n      return vm.posOrder.pos_order_product_variants.filter(function(popv) {\n        return popv.charged_gift_card && popv.charged_gift_card_is_voucher;\n      });\n    }\n\n    function getGiftCardsKind() {\n      var giftCards = vm.posOrder.pos_order_product_variants.filter(function(popv) {\n        return popv.gift_card_code;\n      });\n\n      if (!giftCards.length) {\n        return;\n      }\n\n      return giftCards.filter(function(popv) {\n        return popv.total < 0;\n      }).length ? vm.giftCardKinds.CONSUMED : vm.giftCardKinds.CREATED;\n    }\n\n    function markAsIncidence() {\n      vm.incidenceChanged = true;\n      vm.posOrder.incidence = !!!vm.posOrder.incidence;\n      saveChanges();\n    }\n\n    function isDevolutionWithPaymentGateway() {\n      var has_gateway = vm.posOrder.pos_order_payment_methods.filter(function(pm) {\n        return pm.payment_method_instance.payment_gateway;\n      });\n      return has_gateway.length !== 0 && vm.posOrder.is_devolution;\n    }\n\n    function openInvoice() {\n      if (vm.posOrder.invoice) {\n        var url = $state.href('app.accounting.invoices.invoice', { id: vm.posOrder.invoice.id });\n        $window.open(url, '_blank');\n        $mdDialog.hide();\n      }\n    }\n\n    function openSubstitutiveInvoice() {\n      if (vm.posOrder.substitutive_invoice) {\n        $mdDialog.hide();\n        $state.go('app.accounting.invoices.invoice', { id: vm.posOrder.substitutive_invoice });\n      }\n    }\n\n    function downloadInvoice(id) {\n      api.private.v2.accounting.invoices.print({\n        id: id\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('EditPaymentsController', EditPaymentsController);\n\n  /** @ngInject */\n  function EditPaymentsController($mdBottomSheet,\n                                  $filter,\n                                  $mdDialog,\n                                  $mdToast,\n                                  $document,\n                                  posOrder,\n                                  api,\n                                  PaymentMethods,\n                                  Session,\n                                  HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.paying = false;\n    vm.posOrder = posOrder;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.paymentMethodsDict = {};\n\n    // Public methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.assignAllToPaymentMethod = assignAllToPaymentMethod;\n    vm.openDevolutionCardFinder = openDevolutionCardFinder;\n    vm.deleteDevolutionCard = deleteDevolutionCard;\n    vm.isNormalPayingWorkflow = isNormalPayingWorkflow;\n    vm.getBalance = getBalance;\n    vm.isDevolution = isDevolution;\n    vm.getTotalAssigned = getTotalAssigned;\n    vm.getPendingToAssigned = getPendingToAssigned;\n    vm.refundByCash = refundByCash;\n    vm.refundByCard = refundByCard;\n    vm.refundByNewDevolutionCard = refundByNewDevolutionCard;\n    vm.devolutionCardCallback = devolutionCardCallback;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      PaymentMethods.results.forEach(function (paymentMethod) {\n        vm.paymentMethodsDict[paymentMethod.id] = paymentMethod;\n      });\n\n      // Create new methods and override amounts\n      var tempPosOrderPaymentMethods = newPosOrderPaymentMethods();\n      vm.posOrder.pos_order_payment_methods.forEach(function (popm) {\n        tempPosOrderPaymentMethods.forEach(function (newPopm) {\n          if (popm.payment_method === newPopm.payment_method) {\n            newPopm.amount = popm.amount;\n\n            // Add output_amount to simulate given amount\n            if (vm.paymentMethodsDict[popm.payment_method].is_default_cash) {\n              newPopm.amount += vm.posOrder.output_amount;\n            }\n          }\n        });\n      });\n\n      vm.posOrder.pos_order_payment_methods = tempPosOrderPaymentMethods;\n    }\n\n    function cancel() {\n      $mdBottomSheet.cancel();\n    }\n\n    function save() {\n      vm.paying = true;\n\n      var tempPosOrder = angular.copy(vm.posOrder);\n      tempPosOrder.register = tempPosOrder.register.id;\n      tempPosOrder.customer = tempPosOrder.customer ? tempPosOrder.customer.id : null;\n      tempPosOrder.source_warehouse = tempPosOrder.source_warehouse.id;\n\n      // Step 1: Update the sale\n      api.inventories.posOrders.update(\n        tempPosOrder,\n        function (results, fn, status) {\n          postCreateOrUpdatePosOrder(results, fn, status)\n        }\n      );\n    }\n\n    /**\n     * Step 2: Pays the already created PosOrder\n     * @param results\n     * @param fn\n     * @param status\n     */\n    function postCreateOrUpdatePosOrder(results, fn, status) {\n      if (status === HTTP_STATUS.HTTP_201_CREATED || status === HTTP_STATUS.HTTP_200_OK) {\n\n        angular.extend(vm.posOrder, results);\n\n        // Save temporally sale because the cash payment method is going to change\n        var tempSale = angular.copy(vm.posOrder);\n        angular.extend(tempSale, {\n          option: 'pay',\n          avoid_devolution_card: !!tempSale.refundByPaymentMethod,\n          output_amount: getBalance(vm.posOrder)\n        });\n\n        if (tempSale.generateDevolutionCard || tempSale.refundByPaymentMethodCash || tempSale.refundByPaymentMethodCard) {\n          tempSale.output_amount = 0;\n        }\n\n        api.inventories.posOrders.update(\n          tempSale,\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              angular.extend(vm.posOrder, results);\n              vm.posOrder.successfullyPaid = true;\n              vm.paying = false;\n              $mdBottomSheet.hide(vm.posOrder);\n            } else if (status === HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.EDIT_PAYMENT_NOT_ALLOWED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.ERROR_PAY_SALE')).position('top right'));\n            }\n          }\n        );\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.ERROR_CREATE_SALE')).position('top right'));\n        vm.paying = false;\n      }\n    }\n\n    function newPosOrderPaymentMethods() {\n      return PaymentMethods.results.map(function (paymentMethod) {\n        return {\n          disabled: false,\n          amount: 0.0,\n          payment_method: paymentMethod.id\n        };\n      });\n    }\n\n    function twoDecimals(value) {\n      var isNegative = value < 0;\n      var roundedValue = Math.round((Math.abs(value) + Number.EPSILON) * 100) / 100;\n      return isNegative ? -roundedValue : roundedValue;\n    }\n\n    function assignAllToPaymentMethod(sale, paymentMethod) {\n      sale.pos_order_payment_methods.forEach(function (paymentMethod) {\n        paymentMethod.amount = 0;\n      });\n\n      paymentMethod.amount = twoDecimals(sale.total + getTotalDevolutionCardAmount(sale));\n    }\n\n    function getTotalDevolutionCardAmount(sale) {\n      var result = 0.0;\n\n      sale.devolution_cards.forEach(function (devolutionCard) {\n        result += devolutionCard.amount;\n      });\n\n      return twoDecimals(result);\n    }\n\n    function openDevolutionCardFinder() {\n      $mdDialog.show({\n        controller: 'SalesSearchDevolutionCardDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sell/dialogs/search-devolution-card-dialog.html',\n        //parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          params: {}\n        }\n      }).then(function (result) {\n        devolutionCardCallback(result);\n      }, function () {\n        // Nothing to do\n      });\n    }\n\n    /**\n     * Function that's executed when a devolutionCard barcode has been listened\n     * @param barcode\n     */\n    function devolutionCardCallback(barcode) {\n\n      var index = vm.posOrder.devolution_cards.findIndex(function (devolutionCard) {\n        return devolutionCard.barcode === barcode;\n      });\n\n      // If the barcode is already in the current sale\n      if (index !== -1) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.VOUCHER_ALREADY_USED')).position('top right'));\n        return;\n      }\n\n      api.sales.devolutionCards.get(\n        {\n          barcode: barcode\n        },\n        function (results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (results.results.length === 0) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.VOUCHER_NOT_FOUND')).position('top right'));\n            }\n            // If the devolution card it's already used\n            else if (results.results[0].target_pos_order) {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('SALES.VOUCHER_USED'))\n                .action($filter('translate')('SALES.VIEW_POS_ORDER'))\n                .hideDelay(5000)\n                .highlightAction(true)\n                .position('top right')).then(function (response) {\n                if (response === 'ok') {\n                  showSaleDialogById(results.results[0].target_pos_order);\n                }\n              });\n            } else if (!results.results[0].is_valid) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.NOT_VALID')).position('top right'));\n            } else {\n              vm.posOrder.devolution_cards.push(results.results[0]);\n              updateSale(vm.posOrder);\n            }\n          } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.VOUCHER_NOT_FOUND')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function showSaleDialogById(posOrderId) {\n      $mdDialog.show({\n        controller: 'SalePosOrderDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          previousPosOrderId: null\n        },\n        resolve: {\n          PosOrderData: function (apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: posOrderId,\n              serializer: 'PosOrderWithDevolutionsSerializer'\n            });\n          }\n        }\n      })\n        .then(function (refresh) {\n          // Nothing to do\n        }, function () {\n          // Nothing to do\n        });\n    }\n\n    /**\n     * Change the view to pay by cash view\n     * @param posOrder\n     */\n    function refundByNewDevolutionCard(posOrder) {\n      posOrder.pos_order_payment_methods = [];\n\n      // flags\n      posOrder.generateDevolutionCard = true;\n      posOrder.refundByPaymentMethod = false;\n      posOrder.refundByPaymentMethodCard = false;\n      posOrder.refundByPaymentMethodCash = false;\n\n      posOrder.currentView = vm.PAY_VIEW;\n    }\n\n    /**\n     * Recalculates Total and Subtotal of the given sale. If getPromotions gets promotions, this function is called\n     * again once the promotions have been applied\n     * @param posOrder\n     */\n    function updateSale(posOrder) {\n      posOrder.pos_order_product_variants.forEach(function (posOrderProductVariant) {\n        updatePosOrderProductVariantDiscountPrices(posOrderProductVariant);\n      });\n\n      // Recalculate totals\n      posOrder.total = getTotal(posOrder);\n      posOrder.subtotal = getSubtotal(posOrder);\n      posOrder.total_taxes = getTotalTaxes(posOrder);\n\n      // Force flags\n      if (posOrder.total > 0) {\n        posOrder.generateDevolutionCard = false;\n        posOrder.refundByPaymentMethod = false;\n        posOrder.refundByPaymentMethodCash = false;\n        posOrder.refundByPaymentMethodCard = false;\n      }\n    }\n\n    /**\n     * Recalculates the prices applying the discount and the amount\n     * @param posOrderProductVariant\n     */\n    function updatePosOrderProductVariantDiscountPrices(posOrderProductVariant) {\n\n      // Promotion.fixed_discount is more important than posOrderProductVariant.discount\n      if (posOrderProductVariant.promotion && posOrderProductVariant.promotion_discount) {\n        posOrderProductVariant.discount = posOrderProductVariant.promotion_fixed_discount;\n\n        posOrderProductVariant.discount_price_excl_tax = twoDecimals(posOrderProductVariant.price_excl_tax * (1.0 - parseFloat(posOrderProductVariant.discount) / 100.0));\n        posOrderProductVariant.discount_price_incl_tax = twoDecimals(posOrderProductVariant.price_incl_tax * (1.0 - parseFloat(posOrderProductVariant.discount) / 100.0));\n\n      } else if (posOrderProductVariant.discount) {\n        posOrderProductVariant.discount = Math.max(posOrderProductVariant.discount, 0);\n        posOrderProductVariant.discount = Math.min(posOrderProductVariant.discount, 100);\n\n        posOrderProductVariant.discount_price_excl_tax = posOrderProductVariant.price_excl_tax * (1.0 - parseFloat(posOrderProductVariant.discount) / 100.0);\n        posOrderProductVariant.discount_price_incl_tax = posOrderProductVariant.price_incl_tax * (1.0 - parseFloat(posOrderProductVariant.discount) / 100.0);\n\n        posOrderProductVariant.discount_price_excl_tax = Math.round(posOrderProductVariant.discount_price_excl_tax * 100) / 100;\n        posOrderProductVariant.discount_price_incl_tax = Math.round(posOrderProductVariant.discount_price_incl_tax * 100) / 100;\n      }\n    }\n\n    /**\n     * Returns the total of the given sale\n     * @param posOrder\n     * @returns {number}\n     */\n    function getTotal(posOrder) {\n\n      var result = 0;\n      posOrder.pos_order_product_variants.forEach(function (item) {\n        result += getPrice(item, true);\n      });\n\n      return twoDecimals(result);\n    }\n\n    /**\n     * Returns the prices applying the custom price, the discount and the amount\n     * @param posOrderProductVariant\n     * @param inclTax\n     */\n    function getPrice(posOrderProductVariant, inclTax) {\n      if (posOrderProductVariant.custom_price_incl_tax && posOrderProductVariant.custom_price_excl_tax) {\n        if (inclTax) {\n          return posOrderProductVariant.amount * posOrderProductVariant.custom_price_incl_tax;\n        } else {\n          return posOrderProductVariant.amount * posOrderProductVariant.custom_price_excl_tax;\n        }\n      } else if (posOrderProductVariant.discount) {\n        if (inclTax) {\n          return posOrderProductVariant.amount * posOrderProductVariant.discount_price_incl_tax;\n        } else {\n          return posOrderProductVariant.amount * posOrderProductVariant.discount_price_excl_tax;\n        }\n      } else {\n        if (inclTax) {\n          return posOrderProductVariant.amount * posOrderProductVariant.price_incl_tax;\n        } else {\n          return posOrderProductVariant.amount * posOrderProductVariant.price_excl_tax;\n        }\n      }\n    }\n\n    /**\n     * Returns the sub-total of the given sale\n     * @param posOrder\n     * @returns {number}\n     */\n    function getSubtotal(posOrder) {\n\n      var result = 0;\n      posOrder.pos_order_product_variants.forEach(function (item) {\n        result += getPrice(item, false);\n      });\n\n      return twoDecimals(result);\n    }\n\n    /**\n     * Returns the total taxes of the given sale\n     * @param posOrder\n     * @returns {number}\n     */\n    function getTotalTaxes(posOrder) {\n\n      var result = 0;\n      posOrder.pos_order_product_variants.forEach(function (item) {\n        result += getPrice(item, true) - getPrice(item, false);\n      });\n\n      return twoDecimals(result);\n    }\n\n    /**\n     * Deletes the devolution card on the given sale on the given index\n     * @param posOrder\n     * @param index\n     */\n    function deleteDevolutionCard(posOrder, index) {\n      posOrder.devolution_cards.splice(index, 1);\n      updateSale(posOrder);\n    }\n\n    /**\n     * Returs true if the system doesn't have to generate any devolution card\n     * @param posOrder\n     */\n    function isNormalPayingWorkflow(posOrder) {\n      return posOrder.total >= 0 && !isRegenerateDevolutionCardPayingWorkflow(posOrder);\n    }\n\n    /**\n     * Returns true when is not a devolution and one or more voucher has been used and total of them is higher that\n     * total of the sale\n     * @param posOrder\n     */\n    function isRegenerateDevolutionCardPayingWorkflow(posOrder) {\n      return posOrder.devolution_cards && posOrder.devolution_cards.length > 0 && posOrder.total < getTotalDevolutionCardAmount(posOrder) * -1;\n    }\n\n    function getBalance(posOrder) {\n      return twoDecimals(Math.max(getTotalAssigned(posOrder) - posOrder.total, 0));\n    }\n\n    function getTotalAssigned(posOrder, ignoreDevolutionCards) {\n      var result = 0.00;\n\n      posOrder.pos_order_payment_methods.forEach(function (paymentMethod) {\n        result += paymentMethod.amount;\n      });\n\n      if (!ignoreDevolutionCards) {\n        posOrder.devolution_cards.forEach(function (devolutionCard) {\n          result += devolutionCard.amount * -1;\n        });\n      }\n\n      return twoDecimals(result);\n    }\n\n    function getPendingToAssigned(sale) {\n      return twoDecimals(Math.max(sale.total - getTotalAssigned(sale), 0));\n    }\n\n    /**\n     * Returns true if the given sale is a devolution\n     * @param posOrder\n     * @returns {boolean|*}\n     */\n    function isDevolution(posOrder) {\n      return isDevolutionPayingWorkflow(posOrder) || isRegenerateDevolutionCardPayingWorkflow(posOrder);\n    }\n\n    /**\n     * Returns true when the total of the sale is less than 0\n     * @param posOrder\n     * @returns {boolean}\n     */\n    function isDevolutionPayingWorkflow(posOrder) {\n      return posOrder.total < 0 && (posOrder.generateDevolutionCard || posOrder.refundByPaymentMethod);\n    }\n\n    /**\n     * Change the view to refund money view\n     */\n    function refundByCash() {\n      PaymentMethods.results.forEach(function (paymentMethod) {\n        if (paymentMethod.is_default_cash) {\n          vm.posOrder.pos_order_payment_methods = [{\n            disabled: false,\n            amount: twoDecimals(vm.posOrder.total + getTotalDevolutionCardAmount(vm.posOrder)),\n            payment_method: paymentMethod.id\n          }];\n        }\n      });\n\n      vm.posOrder.refundByPaymentMethod = true;\n      vm.posOrder.refundByPaymentMethodCard = false;\n      vm.posOrder.refundByPaymentMethodCash = true;\n      vm.posOrder.generateDevolutionCard = false;\n    }\n\n    /**\n     * Change the view to refund money view\n     */\n    function refundByCard() {\n      PaymentMethods.results.forEach(function (paymentMethod) {\n        if (paymentMethod.is_default_card) {\n          vm.posOrder.pos_order_payment_methods = [{\n            disabled: false,\n            amount: twoDecimals(vm.posOrder.total + getTotalDevolutionCardAmount(vm.posOrder)),\n            payment_method: paymentMethod.id\n          }];\n        }\n      });\n\n      // flags\n      vm.posOrder.generateDevolutionCard = false;\n      vm.posOrder.refundByPaymentMethod = true;\n      vm.posOrder.refundByPaymentMethodCard = true;\n      vm.posOrder.refundByPaymentMethodCash = false;\n    }\n\n\n    /**\n     * Change the view to pay by cash view\n     * @param sale\n     */\n    function refundByNewDevolutionCard() {\n      vm.posOrder.pos_order_payment_methods = [];\n\n      // flags\n      vm.posOrder.generateDevolutionCard = true;\n      vm.posOrder.refundByPaymentMethod = false;\n      vm.posOrder.refundByPaymentMethodCard = false;\n      vm.posOrder.refundByPaymentMethodCash = false;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('GenerateInvoicesDialogController', GenerateInvoicesDialogController);\n\n  /** @ngInject */\n  function GenerateInvoicesDialogController(invoices, errors, $mdDialog) {\n\n    // Data\n    var vm = this;\n    vm.invoices = invoices;\n    vm.alreadyInvoicedDict = {};\n    vm.errors = [];\n\n    // Public methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.getFilename = getFilename;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      errors.filter(function(error){\n        return error.error === 'ALREADY_INVOICED';\n      }).forEach(function(error){\n        vm.alreadyInvoicedDict[error.invoice_id] = true;\n      });\n\n      vm.errors = errors.filter(function(error){\n        return error.error === 'MISSING_CUSTOMER';\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n    }\n\n    function getFilename(url){\n      if (url){\n        var filename = url.split('/')\n        return filename[filename.length - 1].split('?')[0]\n      }\n      return \"\";\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SelectRegisterDialogController', SelectRegisterDialogController);\n\n  /** @ngInject */\n  function SelectRegisterDialogController($mdDialog, $mdToast, $document, $filter, RegistersData,\n                                          message) {\n    var vm = this;\n\n    // Data\n    vm.message = message;\n    vm.register = {};\n    vm.registers = RegistersData.results;\n\n    // Methods\n    vm.select = select;\n    vm.cancel = cancel;\n    vm.select = select;\n\n    //Functions\n    function select(){\n      $mdDialog.hide(vm.register);\n    }\n\n    function cancel(){\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('OpenRegisterDialogController', OpenRegisterDialogController);\n\n  /** @ngInject */\n  function OpenRegisterDialogController($scope,\n                                        $mdDialog,\n                                        $mdToast,\n                                        $filter,\n                                        $window,\n                                        register,\n                                        api,\n                                        hotkeys,\n                                        HTTP_STATUS,\n                                        ERROR_CODES,\n                                        $rootScope) {\n    var vm = this;\n\n    // Data\n    vm.register = register;\n    vm.selectFilter = '';\n    vm.opening = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.saveOpening = saveOpening;\n    vm.openCashCounter = openCashCounter;\n    vm.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        saveOpening();\n      }\n    });\n\n    //init\n    init();\n\n    //Functions\n    function init() {\n      setNdBarcodeListenerEnabled(false);\n    }\n\n    function hide() {\n      $mdDialog.hide(vm.register);\n      setNdBarcodeListenerEnabled(true);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n      setNdBarcodeListenerEnabled(true);\n    }\n\n    function saveOpening() {\n      if ($scope.form && $scope.form.$valid && !vm.opening) {\n        vm.opening = true;\n        api.sales.registers.update(\n          {\n            id: register.id,\n            option: 'open',\n            amount: parseFloat(vm.amount),\n            notes: vm.notes\n          },\n          function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              angular.extend(vm.register, response);\n              $scope.$emit('ndPrinter::openCashDrawer', {\n                register: vm.register\n              });\n              hide();\n            } else if(status === HTTP_STATUS.HTTP_400_BAD_REQUEST &&\n              response.Error === ERROR_CODES.ERROR_04008_REGISTER_ALREADY_OPENED){\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')('REGISTERS.REGISTER_ALREADY_OPENED'))\n                  .action($filter('translate')('REGISTERS.RELOAD'))\n                  .highlightAction(true)\n                  .hideDelay(7500)\n                  .position('top right')).then(function(response) {\n                if ( response === 'ok' ) {\n                  $window.location.reload();\n                }\n              });\n            } else {\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right'));\n            }\n            register.opening = false;\n            vm.opening = false;\n          }\n        );\n      }\n    }\n\n    function openCashCounter() {\n      $mdDialog.show({\n        controller: 'CashCounterDialogController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/sale/views/registers/dialogs/cash-counter/cash-counter-dialog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        locals: {\n          context: vm.cashCounterContex\n        }\n      }).then(function (result) {\n        vm.cashCounterContex = result.context;\n        vm.amount = result.total;\n      }, function () {\n        // Nothing to do\n      });\n    }\n\n    function setNdBarcodeListenerEnabled(value) {\n      $rootScope.ndBarcodeListenerEnabled = value;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('NewRegisterDialogController', NewRegisterDialogController);\n\n  /** @ngInject */\n  function NewRegisterDialogController($scope,\n                                       $mdDialog,\n                                       $mdToast,\n                                       $document,\n                                       $filter,\n                                       $state,\n                                       WarehouseData,\n                                       RegisterData,\n                                       api,\n                                       Session,\n                                       SerialNumberTypesData,\n                                       SerialNumberType,\n                                       ERROR_CODES,\n                                       HTTP_STATUS,\n                                       SERIAL_NUMBER_TYPES,\n                                       contractedPlanLimit\n  ) {\n    var vm = this;\n\n    // Data\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n    vm.register = RegisterData || {};\n    vm.selectFilter = '';\n    vm.warehouse = WarehouseData;\n    vm.serialNumberTypes = SerialNumberTypesData ? SerialNumberTypesData.results : null;\n    vm.saving = false;\n    vm.paymentMethods = [];\n    vm.contractedPlanLimit = contractedPlanLimit;\n\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.saveRegister = saveRegister;\n    vm.printWidthDiscover = printWidthDiscover;\n    vm.openDrawer = openDrawer;\n    vm.getSerialNumberTypePreview = getSerialNumberTypePreview;\n    vm.getSerialNumberTypeDevolutionPreview = getSerialNumberTypeDevolutionPreview;\n    vm.setPaymentMethodAlreadyLinkedValidity = setPaymentMethodAlreadyLinkedValidity;\n    vm.createNewSerialNumberType = createNewSerialNumberType;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      if (!vm.register.id) {\n        vm.register.printer_characters_per_line = 48;\n        vm.register.open_drawer_pin = null;\n        vm.register.pos_order_counter = 1;\n        vm.register.pos_order_counter_length = 5;\n        vm.register.pos_order_devolution_counter = 1;\n        vm.register.pos_order_devolution_counter_length = 5;\n        vm.register.warehouse = vm.warehouse.id;\n        vm.showPassword = false;\n      }\n\n      if (vm.register.payment_methods) {\n        vm.register.payment_methods = vm.register.payment_methods.map(function(paymentMethod) {\n          return paymentMethod.id;\n        });\n      }\n\n      api.accounting.paymentMethods.list({\n        is_retail_method: true\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.paymentMethods = response.results;\n        }\n      });\n    }\n\n    function hide() {\n      $mdDialog.hide(vm.register);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function saveRegister() {\n      if (!isValid()) {\n        return;\n      }\n\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n\n      var register = window.angular.copy(vm.register);\n      register.default_card_method = register.default_card_method ? register.default_card_method.id : null;\n\n      if (!vm.register.id) {\n        api.sales.registers.save(\n          register,\n          function(response, fn, status) {\n            postSave(response, status);\n          }\n        );\n      } else {\n        register.warehouse = register.warehouse.id;\n        api.sales.registers.update(\n          register,\n          function(response, fn, status) {\n            postSave(response, status);\n          }\n        );\n      }\n    }\n\n    function postSave(response, status) {\n      if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n        setPaymentMethodAlreadyLinkedValidity(true);\n        vm.register = response;\n        var toastMessage = status === HTTP_STATUS.HTTP_201_CREATED ? 'REGISTERS.REGISTER_CREATED' : 'REGISTERS.REGISTER_UPDATED';\n        $mdToast.show($mdToast.simple().textContent($filter('translate')(toastMessage)).position('top right'));\n        vm.hide(vm.register);\n      } else if (status === HTTP_STATUS.HTTP_409_CONFLICT &&\n        response.error_code === ERROR_CODES.ERROR_04039_PAYMENT_METHOD_LINKED_TO_ANOTHER_WAREHOUSE) {\n        vm.paymentMethodErrorData = {\n          warehouse: response.warehouse,\n          paymentMethod: response.payment_method\n        };\n        setPaymentMethodAlreadyLinkedValidity(false);\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n      vm.saving = false;\n    }\n\n    function setPaymentMethodAlreadyLinkedValidity(value) {\n      $scope.registerForm.paymentMethods.$setValidity('PaymentMethodAlreadyLinked', value);\n    }\n\n    function isValid() {\n      return $scope.registerForm.$valid;\n    }\n\n    function printWidthDiscover() {\n      $scope.$emit('ndPrinter::printWidthDiscover', {\n        register: vm.register\n      });\n    }\n\n    function openDrawer() {\n      $scope.$emit('ndPrinter::openCashDrawer', {\n        register: vm.register\n      });\n    }\n\n    /**\n     * On configuration selector open\n     */\n    vm.onSelectorOpen = function() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    };\n\n    vm.onSelectorClose = function() {\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    };\n\n    function getSerialNumberTypePreview() {\n      return new SerialNumberType({\n        prefix: vm.register.pos_order_prefix || '',\n        suffix: vm.register.pos_order_suffix || '',\n        counter: vm.register.pos_order_counter || 0,\n        counter_length: vm.register.pos_order_counter_length || 0\n      }).getCurrent();\n    }\n\n    function getSerialNumberTypeDevolutionPreview() {\n      return new SerialNumberType({\n        prefix: vm.register.pos_order_devolution_prefix || '',\n        suffix: vm.register.pos_order_devolution_suffix || '',\n        counter: vm.register.pos_order_devolution_counter || 0,\n        counter_length: vm.register.pos_order_devolution_counter_length || 0\n      }).getCurrent();\n    }\n\n    function createNewSerialNumberType() {\n      if (Session.hasPermission('inventory.configuration.serial_number_types.create')) {\n        $state.go('app.inventory.configuration.serial_number_types');\n        cancel();\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('CloseRegisterDialogController', CloseRegisterDialogController);\n\n  /** @ngInject */\n  function CloseRegisterDialogController($scope, $mdDialog, $mdToast, $filter, $state, registerActivity, api, Session,\n                                         paymentMethods, CASH_MOVEMENT_TYPES, HTTP_STATUS, $rootScope,\n                                         Utils) {\n    var vm = this;\n\n    // Consts\n    vm.CASH_MOVEMENT_TYPES = CASH_MOVEMENT_TYPES;\n    // Data\n    vm.registerActivity = registerActivity;\n    vm.paymentMethodsDict = {};\n    vm.saving = false;\n    vm.totalCashMovements = 0;\n    vm.currencyCharacter = $filter('currencyCharacter')(vm.registerActivity.currency);\n    vm.cashFund = null;\n    vm.cashToRemove = null;\n    vm.balancePosted = null;\n    vm.balancePostedExpected = null;\n    vm.closureNotes = '';\n    vm.totalPaymentAmounts = 0;\n    vm.hideCashMovementColumns = true;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.openCashCounter = openCashCounter;\n    vm.getOpeningCashMovement = getOpeningCashMovement;\n    vm.closeRegister = closeRegister;\n    vm.balancePostedChanged = balancePostedChanged;\n    vm.cashFundChanged = cashFundChanged;\n    vm.openCashCounter = openCashCounter;\n    vm.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n\n    init();\n\n    // Initialize\n    function init() {\n      paymentMethods.forEach(function(paymentMethod) {\n        vm.paymentMethodsDict[paymentMethod.id] = paymentMethod;\n      });\n      vm.registerActivity.total_payment_amounts.forEach(function (tpa) {\n          vm.totalPaymentAmounts += tpa.total;\n        });\n\n      vm.totalCashMovements = getTotalCashMovements();\n      vm.cashFund = getOpeningCashMovement();\n      vm.cashToRemove = getDefaultCashPaymentMethod() + vm.totalCashMovements - vm.cashFund;\n\n      vm.balancePosted = angular.copy(vm.cashFund);\n      vm.balancePostedExpected = angular.copy(vm.balancePosted);\n\n      $scope.$emit('ndPrinter::openCashDrawer', {\n        register: vm.registerActivity.register\n      });\n    }\n\n    //Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getDefaultCashPaymentMethod() {\n      var result = 0;\n\n      vm.registerActivity.total_payment_amounts.forEach(function(totalPaymentAmount) {\n        if (vm.paymentMethodsDict[totalPaymentAmount.payment_method].is_default_cash) {\n          result = totalPaymentAmount.total;\n          return;\n        }\n      });\n\n      return result;\n    }\n\n    function getTotalCashMovements() {\n      var result = 0;\n      vm.registerActivity.cash_movements.forEach(function(cashMovement) {\n        result += cashMovement.amount;\n      });\n      return result;\n    }\n\n    function getOpeningCashMovement() {\n      var opening = vm.registerActivity.cash_movements.find(function(cashMovement) {\n        return cashMovement.is_opening;\n      });\n      return opening ? opening.amount : 0;\n    }\n\n    function closeRegister() {\n      vm.saving = true;\n\n      var body = {\n        id: vm.registerActivity.id,\n        unbalance: vm.registerActivity.unbalance,\n        option: 'close',\n        closure_cash_movement_amount: Utils.twoDecimals(vm.cashToRemove),\n        closure_notes: vm.closureNotes\n      };\n\n      api.sales.register_activities.update(\n        body,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            postClose(results);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function openCashCounter() {\n      $mdDialog.show({\n        controller: 'CashCounterDialogController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/sale/views/registers/dialogs/cash-counter/cash-counter-dialog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        locals: {\n          context: vm.cashCounterContex\n        }\n      }).then(function(result) {\n        vm.cashCounterContex = result.context;\n        vm.balancePosted = result.total;\n        balancePostedChanged();\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function balancePostedChanged() {\n      vm.registerActivity.unbalance = vm.balancePosted - vm.balancePostedExpected;\n    }\n\n    function cashFundChanged() {\n      vm.cashToRemove = getDefaultCashPaymentMethod() + vm.totalCashMovements - vm.cashFund;\n\n      vm.balancePosted = angular.copy(vm.cashFund);\n      vm.balancePostedExpected = angular.copy(vm.balancePosted);\n    }\n\n    function postClose(results) {\n      // Assign results\n      angular.extend(vm.registerActivity, results);\n\n      // Print the result\n      $scope.$emit('ndPrinter::printRegisterActivitySummary', {\n        registerActivity: vm.registerActivity,\n        paymentMethodsDict: vm.paymentMethodsDict\n      });\n\n      // Show toast with the link to the activity\n      var toast = $mdToast.simple()\n        .textContent($filter('translate')('REGISTERS.REGISTER_CLOSED'))\n        .action($filter('translate')('REGISTER_CLOSURES.VIEW_CLOSURE'))\n        .highlightAction(true)\n        .position('top right');\n\n      $mdToast.show(toast).then(function(clicked) {\n        if (clicked === 'ok') {\n          $state.go('app.sale.register_closure', { id: vm.registerActivity.id });\n        }\n      });\n\n      $mdDialog.hide(vm.registerActivity);\n    }\n\n    function setNdBarcodeListenerEnabled(value) {\n      // no-nd-mute-barcode-callbacks is not working properly. Do it manually:\n      $rootScope.ndBarcodeListenerEnabled = value;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('CashCounterDialogController', CashCounterDialogController);\n\n  /**\n   *\n   * @ngInject\n   * @param $scope\n   * @param $mdDialog\n   * @param $filter\n   * @param Session\n   * @param context {bills: [], coins: []}\n   * @constructor\n   */\n  function CashCounterDialogController($scope, $mdDialog, $filter, Session, context) {\n\n    // Data\n    var vm = this;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    // FIXME is only valid for EUR\n    vm.bills = context && context.bills ? context.bills : [\n      {value: 500, amount: null, image: '/assets/images/currencies/EUR/500.0a782cb3.png'},\n      {value: 200, amount: null, image: '/assets/images/currencies/EUR/200.b57d2b97.png'},\n      {value: 100, amount: null, image: '/assets/images/currencies/EUR/100.c3a87416.png'},\n      {value: 50, amount: null, image: '/assets/images/currencies/EUR/50.c9e72266.png'},\n      {value: 20, amount: null, image: '/assets/images/currencies/EUR/20.aa59992e.png'},\n      {value: 10, amount: null, image: '/assets/images/currencies/EUR/10.a9bac1c9.png'},\n      {value: 5, amount: null, image: '/assets/images/currencies/EUR/5.b197b6f2.png'}\n    ];\n\n    vm.coins = context && context.coins ? context.coins : [\n      {value: 2, amount: null, image: '/assets/images/currencies/EUR/200cent.8e8ffcbf.png'},\n      {value: 1, amount: null, image: '/assets/images/currencies/EUR/100cent.1c32d669.png'},\n      {value: 0.5, amount: null, image: '/assets/images/currencies/EUR/50cent.334498e0.png'},\n      {value: 0.2, amount: null, image: '/assets/images/currencies/EUR/20cent.7bc12103.png'},\n      {value: 0.1, amount: null, image: '/assets/images/currencies/EUR/10cent.59be2f5e.png'},\n      {value: 0.05, amount: null, image: '/assets/images/currencies/EUR/5cent.6e7d552f.png'},\n      {value: 0.02, amount: null, image: '/assets/images/currencies/EUR/2cent.586bfc78.png'},\n      {value: 0.01, amount: null, image: '/assets/images/currencies/EUR/1cent.57fdeaaf.png'}\n    ];\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.getTotal = getTotal;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      $mdDialog.hide({\n        total: getTotal(),\n        context: {\n          bills: angular.copy(vm.bills),\n          coins: angular.copy(vm.coins)\n        }\n      });\n    }\n\n    function getTotal() {\n      var total = 0;\n\n      vm.bills.forEach(function (bill) {\n        total += bill.amount * bill.value;\n      });\n\n      vm.coins.forEach(function (coin) {\n        total += coin.amount * coin.value;\n      });\n\n      return Number.parseFloat(Number.parseFloat(total).toFixed(2));\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular.module('app.sale')\n        .controller('SalesGoalDetailDialogController', SalesGoalDetailDialogController);\n\n    /** @ngInject */\n    function SalesGoalDetailDialogController($mdDialog, salesGoal, showSalesGoalFormDialog, event)\n    {\n        var vm = this;\n\n        // Data\n        vm.salesGoal = salesGoal;\n\n        // Methods\n        vm.editSalesGoal = editSalesGoal;\n        vm.closeDialog = closeDialog;\n\n        //////////\n\n        /**\n         * Close the dialog\n         */\n        function closeDialog()\n        {\n            $mdDialog.hide();\n        }\n\n        /**\n         * Edit the sales goal\n         *\n         * @param salesGoal\n         */\n        function editSalesGoal(salesGoal)\n        {\n            showSalesGoalFormDialog('edit', salesGoal, false, false, event);\n        }\n    }\n})();\n\n(function () {\n  'use strict';\n\n  angular.module('app.sale')\n    .controller('SalesGoalFormDialogController', SalesGoalFormDialogController);\n\n  /** @ngInject */\n  function SalesGoalFormDialogController(api, $filter, $mdDialog, $scope, type, warehouses,\n                                         Session, salesGoal, SalesGoal) {\n    var vm = this;\n    $scope.Session = Session;\n\n    // Data\n    vm.type = type;\n    vm.salesGoal = null;\n    vm.saving = false;\n    vm.warehouses = warehouses;\n    vm.warehousesDict = {};\n\n    // Methods\n    vm.saveSalesGoal = saveSalesGoal;\n    vm.removeSalesGoal = removeSalesGoal;\n    vm.closeDialog = closeDialog;\n    vm.getCurrency = getCurrency;\n\n    init();\n\n    // Functions\n\n    /**\n     * Initialize\n     */\n    function init() {\n      vm.salesGoal = angular.copy(salesGoal);\n      vm.warehouses.forEach(function (w) {\n        vm.warehousesDict[w.id] = w;\n      });\n\n      // Figure out the title\n      switch (vm.type) {\n        case 'add' :\n          vm.dialogTitle = $filter('translate')('GOALS.ADD_GOAL');\n          if (vm.warehouses && vm.warehouses.length === 1) {\n            vm.salesGoal.warehouse = vm.warehouses[0].id;\n          }\n          break;\n\n        case 'edit' :\n          vm.dialogTitle = $filter('translate')('GOALS.EDIT_GOAL');\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    /**\n     * Save the sales goal\n     */\n    function saveSalesGoal() {\n\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n\n      // Update\n      if (vm.salesGoal.id) {\n        api.sales.salesGoals.update(\n          vm.salesGoal,\n          function (response, callback, status) {\n            if (status === 200) {\n              var result = new SalesGoal(response);\n              $mdDialog.hide({\n                type: vm.type,\n                salesGoal: result,\n                start: result.start\n              });\n            }\n            vm.saving = false;\n          }\n        );\n\n        // Add\n      } else {\n        api.sales.salesGoals.save(\n          vm.salesGoal,\n          function (response, callback, status) {\n            if (status === 201) {\n              var result = new SalesGoal(response);\n              $mdDialog.hide({\n                type: vm.type,\n                salesGoal: result,\n                start: result.start\n              });\n            }\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n    /**\n     * Remove the sales goal\n     */\n    function removeSalesGoal() {\n\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n\n      api.sales.salesGoals.delete(\n        vm.salesGoal,\n        function (results, callback, status) {\n          if (status === 204) {\n            var response = {\n              type: 'remove',\n              salesGoal: vm.salesGoal\n            };\n            $mdDialog.hide(response);\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function closeDialog() {\n      $mdDialog.cancel();\n    }\n\n    function getCurrency() {\n      if (vm.salesGoal.warehouse) {\n        return vm.warehousesDict[vm.salesGoal.warehouse].currency;\n      }\n      return Session.company.currency;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('StockLocationSearchDialogController', StockLocationSearchDialogController);\n\n  /** @ngInject */\n  function StockLocationSearchDialogController($scope, $mdDialog, $mdToast, warehouseId, $document, $filter, api, HTTP_STATUS, Session, productVariant) {\n    var vm = this;\n\n    // Data\n    vm.loading = true;\n    vm.search = '';\n    vm.loadingMoreData = false;\n    vm.stockLocations = [];\n    vm.filteredCategories = [];\n    vm.nextPageUrl = null;\n    vm.productVariant = angular.copy(productVariant);\n\n    // Methods\n    vm.close = close;\n    vm.loadMore = loadMore;\n    vm.isLocationSelected = isLocationSelected;\n    vm.toggleLocation = toggleLocation;\n    vm.getProductVariantName = getProductVariantName;\n    vm.save = save;\n    vm.stockLocationDialog = stockLocationDialog;\n    vm.removeStockLocation = removeStockLocation;\n\n    initialize();\n\n    function fetchStockLocations() {\n      api.inventories.stockLocations.list({\n        warehouse_id: warehouseId,\n        search: vm.search,\n        serializer: 'StockLocationSimpleSerializer',\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.stockLocations = response.results;\n          vm.nextPageUrl = response.next;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n\n    $scope.$watch(function () {\n      return vm.search;\n    }, function (newVal, oldVal) {\n      if (newVal !== oldVal) {\n        fetchStockLocations();\n      }\n    });\n\n    function initialize() {\n      fetchStockLocations();\n      setTimeout(function () {\n        var container = document.querySelector('.stock-location-dialog-scroll');\n        if (container) {\n          container.addEventListener('scroll', onScroll);\n        }\n      }, 0);\n    }\n\n    function close() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      api.inventories.productVariants.update({\n        id: vm.productVariant.id,\n        stock_locations: vm.productVariant.stock_locations.map(function (sl) {\n          return sl.id;\n        }),\n        warehouse_id: warehouseId,\n        option: 'add-stock-locations'\n      }, function (response) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n        $mdDialog.hide(vm.productVariant.stock_locations);\n      }, function (error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n    }\n\n    function loadMore() {\n      if (!vm.nextPageUrl || vm.loadingMoreData) return;\n      vm.loadingMoreData = true;\n      fetch(vm.nextPageUrl, {\n        method: 'GET',\n        headers: {'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'}\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (response) {\n          vm.stockLocations = vm.stockLocations.concat(response.results);\n          vm.nextPageUrl = response.next;\n        })\n        .catch(function () {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        })\n        .finally(function () {\n          vm.loadingMoreData = false;\n          $scope.$applyAsync();\n        });\n    }\n\n    function isLocationSelected(location) {\n      if (!vm.productVariant.stock_locations) return false;\n      return vm.productVariant.stock_locations.some(function (sl) {\n        return sl.id === location.id;\n      });\n    }\n\n    function toggleLocation(location) {\n      var idx = vm.productVariant.stock_locations.findIndex(function (sl) {\n        return sl.id === location.id;\n      });\n      if (idx === -1) {\n        vm.productVariant.stock_locations.push({\n          id: location.id,\n          location: location.location\n        });\n      } else {\n        vm.productVariant.stock_locations.splice(idx, 1);\n      }\n    }\n\n    function onScroll(e) {\n      var el = e.target;\n      if (el.scrollTop + el.clientHeight >= el.scrollHeight - 50) { // 50px del final\n        $scope.$apply(function () {\n          vm.loadMore();\n        });\n      }\n    }\n\n    function getProductVariantName() {\n      return vm.productVariant.product_name + '(' + vm.productVariant.size_name + '/' + vm.productVariant.color_name + ')';\n    }\n\n    function stockLocationDialog(stockLocation) {\n      $mdDialog.show({\n        controller: 'StockLocationDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/stock-location-dialog/stock-location-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          stockLocation: stockLocation,\n          warehouseId: warehouseId\n        }\n      }).then(function (result) {\n        if (result) {\n          vm.stockLocations.unshift(result);\n        }\n      }, function () {\n      });\n    }\n\n    function removeStockLocation(stockLocation) {\n      var idx = vm.productVariant.stock_locations.findIndex(function (sl) {\n        return sl.id === stockLocation.id;\n      });\n      if (idx !== -1) {\n        vm.productVariant.stock_locations.splice(idx, 1);\n      }\n    }\n\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('StockLocationDialogController', StockLocationDialogController);\n\n  /** @ngInject */\n  function StockLocationDialogController($mdDialog, $mdToast, $filter, HTTP_STATUS, $scope, stockLocation, warehouseId, api, Session, hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.stockLocation = stockLocation;\n    vm.warehouseId = warehouseId;\n    vm.isSaving = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.deleteLocation = deleteLocation;\n    vm.postSave = postSave;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.stockLocation);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function deleteLocation() {\n      if (!Session.hasPermission('app.inventory.warehouses.warehouse.stock-locations')) {\n        return;\n      }\n      api.inventories.stockLocations.delete(\n        {id: vm.stockLocation.id},\n        function (response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_DELETED')).position('top right'));\n            vm.stockLocation = null;\n            hide();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function save() {\n      vm.isSaving = true\n      if (warehouseId) {\n        vm.stockLocation.warehouse = warehouseId;\n      }\n      if ($scope.stockLocationForm.$valid) {\n        if (vm.stockLocation.id) {\n          if (Session.hasPermission('app.inventory.warehouses.warehouse.stock-locations')) {\n            api.inventories.stockLocations.update(\n              vm.stockLocation.id,\n              vm.stockLocation,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('app.inventory.warehouses.warehouse.stock-locations')) {\n            api.inventories.stockLocations.save(\n              vm.stockLocation,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        }\n      }\n    }\n\n    function postSave(response) {\n      vm.isSaving = false;\n      if (response.id) {\n        if (stockLocation && stockLocation.id) {\n          vm.stockLocation.location = response.location;\n          vm.stockLocation.position = response.position;\n          vm.stockLocation.barcode = response.barcode;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSE.STOCK_LOCATION_UPDATED')).position('top right'));\n        } else {\n          angular.extend(vm.stockLocation, response);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSE.STOCK_LOCATION_SAVED')).position('top right'));\n        }\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DeleteWarehouseDialogController', DeleteWarehouseDialogController);\n\n  /** @ngInject */\n  function DeleteWarehouseDialogController($scope, $mdDialog) {\n\n    var vm = this;\n\n    // Methods\n    vm.confirm = confirm;\n    vm.closeDialog = closeDialog;\n\n    function closeDialog() {\n      $mdDialog.cancel();\n    }\n\n    function confirm() {\n      $mdDialog.hide();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTransferOrderDeliveryActionsController', ndTransferOrderDeliveryActionsController)\n    .directive('ndTransferOrderDeliveryActions', ndTransferOrderDeliveryActions);\n\n  /** @ngInject */\n  function ndTransferOrderDeliveryActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        options: '='\n      },\n      controller: 'ndTransferOrderDeliveryActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/transfer/directives/transfer-order-delivery-actions/nd-transfer-order-delivery-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndTransferOrderDeliveryActionsController($scope,\n                                                    HTTP_STATUS,\n                                                    api,\n                                                    $mdDialog,\n                                                    $mdMenu,\n                                                    $mdToast,\n                                                    $interval,\n                                                    $document,\n                                                    $state,\n                                                    Session,\n                                                    $filter,\n                                                    $rootScope,\n                                                    $q,\n                                                    $mdMedia,\n                                                    SEARCH_MAX_LENGTH,\n                                                    TRANSFER_ORDER_STATUSES_REVERSE,\n                                                    OrderActionsService\n  ) {\n    var PULLING_FREQUENCE = 2 * 1000;\n\n    var vm = this;\n    vm.transferOrderDelivery = $scope.order;\n    vm.transferOrderId = vm.transferOrderDelivery.transfer_order;\n    vm.transfer = null;\n    vm.changingStatus = false;\n    vm.fetching = false;\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.endpoints = {\n      checkStatus: 'inventories.transferOrderDeliveries',\n      changeStatus: 'inventories.transferOrderDeliveriesStatus'\n    };\n    vm.receivedActionStoredValue = null;\n\n    vm.prepare = prepare;\n    vm.ship = ship;\n    vm.receive = receive;\n    vm.confirm = confirm;\n    vm.cancel = cancel;\n    vm.showProgressBar = showProgressBar;\n    vm.duplicate = duplicate;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.importProductsDialog = importProductsDialog;\n    vm.printDelivery = printDelivery;\n    vm.isReplenishment = isReplenishment;\n    vm.downloadExcel = downloadExcel;\n    vm.receiveWithEmptyDeliveryOption = receiveWithEmptyDeliveryOption;\n    vm.getReceivedWithMainOptionText = getReceivedWithMainOptionText;\n    vm.getReceivedWithSecondaryOptionText = getReceivedWithSecondaryOptionText;\n\n    initialize();\n\n    function initialize() {\n      OrderActionsService.initialize(\n        vm,\n        vm.transferOrderDelivery,\n        vm.endpoints,\n        deliveryStatusChanged,\n        null\n      );\n\n      var createEmptyDeliveryOnReceive = localStorage.getItem(Session.company.id + 'ndTransferOrderDeliveryActionsController::createEmptyDeliveryOnReceive');\n      if (createEmptyDeliveryOnReceive) {\n        vm.createEmptyDeliveryOnReceive = JSON.parse(createEmptyDeliveryOnReceive);\n      } else {\n        vm.createEmptyDeliveryOnReceive = false;\n      }\n    }\n\n    function prepare() {\n      showProgressBar('TRANSFER.PREPARING_TRANSFER');\n      changeDeliveryStatus('prepare');\n    }\n\n    function ship() {\n      showProgressBar('TRANSFER.SHIPPING_TRANSFER');\n      changeDeliveryStatus('ship');\n    }\n\n    function getReceivedWithMainOptionText() {\n      if (vm.createEmptyDeliveryOnReceive) {\n        return 'TRANSFERS.RECEIVE_EMPTY';\n      } else {\n        return 'TRANSFERS.RECEIVE_PRE_FILLED';\n      }\n    }\n\n    function getReceivedWithSecondaryOptionText() {\n      if (vm.createEmptyDeliveryOnReceive) {\n        return 'TRANSFERS.RECEIVE_PRE_FILLED';\n      } else {\n        return 'TRANSFERS.RECEIVE_EMPTY';\n      }\n    }\n\n    function receiveWithEmptyDeliveryOption(isMainOption) {\n      if (isMainOption) {\n        manageReceiveOption(vm.createEmptyDeliveryOnReceive);\n      } else {\n        manageReceiveOption(!vm.createEmptyDeliveryOnReceive);\n      }\n    }\n\n    function manageReceiveOption(condition) {\n      if (condition) {\n        receive(true);\n      } else {\n        receive(false);\n      }\n    }\n\n    function receive(createEmpty) {\n      showProgressBar('TRANSFER.RECEIVING_TRANSFER');\n      localStorage.setItem(Session.company.id + 'ndTransferOrderDeliveryActionsController::createEmptyDeliveryOnReceive', JSON.stringify(createEmpty));\n      changeDeliveryStatus('receive', {\n        create_empty: createEmpty\n      });\n    }\n\n    function confirm() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeDeliveryStatus('confirm');\n    }\n\n    function cancel() {\n      showProgressBar('TRANSFER.CANCELLING_TRANSFER');\n      changeDeliveryStatus('cancel');\n    }\n\n    function isReplenishment() {\n      return vm.transferOrderDelivery.is_replenishment;\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'TRANSFER.PROCESSING_TRANSFER';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'TRANSFER.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function duplicate() {\n      if (Session.hasPermission('inventory.transfers.create')) {\n        if (vm.changingStatus) {\n          return;\n        }\n        vm.changingStatus = true;\n\n        api.inventories.transferOrderDeliveries.save(\n          {\n            id: vm.transferOrderDelivery.id,\n            option: 'duplicate'\n          }, function(response, fn, status) {\n            vm.changingStatus = false;\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              $state.go('app.inventory.transfers.transfer.delivery', { id: response.transfer_order });\n            }\n          }\n        );\n      }\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.transferOrderDeliveries.get({\n        id: vm.transferOrderDelivery.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            transferOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function changeDeliveryStatus(option, extraParams) {\n      // FIXME check permission acordding to the status parameter\n      if (!Session.hasPermission('inventory.transfers.transfer.delivery.prepare')) {\n        return;\n      }\n      if (vm.changingStatus) {\n        return;\n      }\n      vm.changingStatus = true;\n      var params = {\n        id: vm.transferOrderDelivery.id,\n        option: option\n      };\n      if (extraParams) {\n        angular.extend(params, {\n          extra_parameters: extraParams\n        });\n      }\n      api.inventories.transferOrderDeliveriesStatus.update(\n        params,\n        function(result, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || result.success) {\n            startDeliveryPulling(option);\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast();\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.changingStatus = false;\n          }\n        }\n      );\n\n    }\n\n    function startDeliveryPulling(option) {\n      vm.timeout = $interval(function() {\n        api.inventories.transferOrderDeliveries.get({\n          id: vm.transferOrderDelivery.id,\n          option: 'check-status'\n        }, function(result, callback, status) {\n          if (!result.pending_to_change_status && !result.changing_status) {\n            $interval.cancel(vm.timeout);\n            $mdDialog.hide();\n            deliveryStatusChanged(option);\n            sendChangeStatusEvent(result.transfer_order_status);\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function deliveryStatusChanged(option) {\n      api.inventories.transferOrderDeliveries.get({\n        id: vm.transferOrderDelivery.id\n      }, function(result, callback, status) {\n        setTransferOrderDeliveryData(result);\n\n        var toasMessage = '';\n        if (option === 'prepare') {\n          toasMessage = 'DELIVERY_PREPARED';\n        } else if (option === 'ship') {\n          toasMessage = 'DELIVERY_SHIPPED';\n        } else if (option === 'receive') {\n          toasMessage = 'DELIVERY_RECEIVED';\n        } else if (option === 'confirm') {\n          toasMessage = 'DELIVERY_CONFIRMED';\n        }\n        sendReloadTableEvent();\n\n        if (toasMessage) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('TRANSFER.' + toasMessage))\n            .position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n    function setTransferOrderDeliveryData(data) {\n      vm.transferOrderDelivery.autocode = data.autocode;\n      vm.transferOrderDelivery.canceled_at = data.canceled_at;\n      vm.transferOrderDelivery.canceled_by = data.canceled_by;\n      vm.transferOrderDelivery.created_at = data.created_at;\n      vm.transferOrderDelivery.created_by = data.created_by;\n      vm.transferOrderDelivery.created_by_username = data.created_by_username;\n      vm.transferOrderDelivery.expected_at = data.expected_at;\n      vm.transferOrderDelivery.notes = data.notes;\n      vm.transferOrderDelivery.prepared_at = data.prepared_at;\n      vm.transferOrderDelivery.prepared_by = data.prepared_by;\n      vm.transferOrderDelivery.prepared_by_username = data.prepared_by_username;\n      vm.transferOrderDelivery.prepared_by_fullname = data.prepared_by_fullname;\n      vm.transferOrderDelivery.received_at = data.received_at;\n      vm.transferOrderDelivery.received_by = data.received_by;\n      vm.transferOrderDelivery.received_by_username = data.received_by_username;\n      vm.transferOrderDelivery.shipped_at = data.shipped_at;\n      vm.transferOrderDelivery.shipped_by = data.shipped_by;\n      vm.transferOrderDelivery.shipped_by_username = data.shipped_by_username;\n      vm.transferOrderDelivery.status = data.status;\n      vm.transferOrderDelivery.is_editable = data.is_editable;\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('inventory.transfers.transfer.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportTransferProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            transferId: vm.transferOrderDelivery.id,\n            isDelivery: true\n          }\n        }).then(function(response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', { email: Session.user.email }))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n          sendReloadTableEvent(response);\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n    }\n\n    function printDelivery() {\n\n      var defEmail = vm.transferOrderDelivery.contact ? vm.transferOrderDelivery.contact.email : '';\n\n      $mdDialog.show({\n        controller: 'PrintOrderDeliveryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/nd-print-order-delivery-button/print-order-delivery-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          params: {\n            defEmail: defEmail,\n            customDdpPrices: null,\n            orderDelivery: vm.transferOrderDelivery,\n            isSaleOrderDelivery: false,\n            isTransferOrderDelivery: true,\n            isPurchaseOrderDelivery: false\n          }\n        }\n      });\n    }\n\n    function downloadExcel() {\n      vm.fetching = true;\n      api.inventories.transferOrders.save(\n        {\n          id: vm.transferOrderId,\n          option: 'download-excel'\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.fetching = false;\n            var dialog = $mdDialog\n              .alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent(\n                $filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {\n                  email: Session.user.email\n                })\n              )\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            vm.fetching = false;\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        }\n      );\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTransferOrderActionsController', ndTransferOrderActionsController)\n    .directive('ndTransferOrderActions', ndTransferOrderActions);\n\n  /** @ngInject */\n  function ndTransferOrderActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        options: '='\n      },\n      controller: 'ndTransferOrderActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/transfer/directives/transfer-order-actions/nd-transfer-order-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndTransferOrderActionsController($scope,\n                                            HTTP_STATUS,\n                                            api,\n                                            $mdDialog,\n                                            $mdMenu,\n                                            $mdToast,\n                                            $interval,\n                                            $document,\n                                            $state,\n                                            Session,\n                                            $filter,\n                                            $rootScope,\n                                            SEARCH_MAX_LENGTH,\n                                            $mdMedia,\n                                            TRANSFER_ORDER_STATUSES_REVERSE\n  ) {\n\n    var PULLING_FREQUENCE = 2 * 1000;\n    var vm = this;\n    vm.transfer = $scope.order;\n    vm.changingStatus = false;\n    vm.fetching = false;\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.orderBy = '-created_at';\n\n\n    // Methods\n    vm.order = order;\n    vm.allocate = allocate;\n    vm.cancel = cancel;\n    vm.prepareAndShip = prepareAndShip;\n    vm.partiallyPrepare = partiallyPrepare;\n    vm.ship = ship;\n    vm.receive = receive;\n    vm.printOrder = printOrder;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.screenIsBig = screenIsBig;\n    vm.importProductsDialog = importProductsDialog;\n    vm.duplicate = duplicate;\n\n    initialize();\n\n    function initialize() {\n      vm.changingStatus = vm.transfer.changing_status || vm.transfer.pending_to_change_status;\n      if (vm.changingStatus) {\n        startPulling();\n      }\n    }\n\n    function printOrder() {\n      $mdDialog.show({\n        controller: 'TransferPrintDialogController as vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/print/print.html',\n        parent: angular.element(document.body),\n        //targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          transferId: vm.transfer.id,\n          orderBy: vm.orderBy\n        }\n      }).then(function(response) {\n\n      });\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.transferOrders.get({\n        id: vm.transfer.id,\n        option: 'labels'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            transferOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function cancel() {\n      showProgressBar('TRANSFER.CANCELLING_TRANSFER');\n      changeStatus('cancel');\n    }\n\n    function order() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeStatus('order');\n    }\n\n    function allocate() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeStatus('allocate');\n    }\n\n    function prepareAndShip() {\n      showProgressBar('TRANSFER.PROCESSING_TRANSFER');\n      changeStatus('ship');\n    }\n\n    function partiallyPrepare() {\n      showProgressBar('TRANSFER.PREPARING_TRANSFER');\n      changeStatus('partiallyprepare');\n    }\n\n    function ship() {\n      showProgressBar('TRANSFER.SHIPPING_TRANSFER');\n      changeStatus('ship');\n    }\n\n    function receive() {\n      showProgressBar('TRANSFER.RECEIVING_TRANSFER');\n      changeStatus('receive');\n    }\n\n    function changeStatus(option) {\n\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n      api.inventories.transferOrderStatus.update(\n        {\n          id: vm.transfer.id,\n          option: option\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || response.success) {\n            startPulling(option);\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast();\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.changingStatus = false;\n          }\n        }\n      );\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function startPulling(option) {\n      vm.timeout = $interval(function() {\n        api.inventories.transferOrders.get({\n          id: vm.transfer.id,\n          option: 'check-status'\n        }, function(result, callback, status) {\n          if (!result.pending_to_change_status && !result.changing_status) {\n            $mdDialog.hide();\n            $interval.cancel(vm.timeout);\n            statusChanged(option);\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function statusChanged(option) {\n      api.inventories.transferOrders.get({ id: vm.transfer.id },\n        function(response, callback, status) {\n          vm.transfer.status = response.status;\n          $scope.order.status = response.status;\n          $scope.order.is_editable = response.is_editable;\n          vm.changingStatus = false;\n          sendChangeStatusEvent($scope.order.status);\n\n          if (option === 'order') {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('TRANSFER.TRANSFER_CONFIRMED'))\n                .position('top right'));\n            if (vm.transfer.is_replenishment) {\n              $state.go('app.inventory.transfers.transfer.delivery', { id: vm.transfer.id });\n            }\n          }\n\n          if (option === 'cancel') {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('TRANSFER.TRANSFER_CANCELLED'))\n                .position('top right'));\n          }\n\n          $scope.$broadcast('initialize-transfer', { transfer: vm.transfer });\n        });\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'TRANSFER.PROCESSING_TRANSFER';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'TRANSFER.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function screenIsBig() {\n      return $mdMedia('gt-sm');\n    }\n\n    function duplicate() {\n      if (Session.hasPermission('inventory.transfers.create')) {\n        if (vm.changingStatus) {\n          return;\n        }\n        vm.changingStatus = true;\n        api.inventories.transferOrders.save(\n          {\n            id: vm.transfer.id,\n            option: 'duplicate'\n          }, function(response) {\n            vm.changingStatus = false;\n            $state.go('app.inventory.transfers.transfer.details', { id: response.id });\n          }\n        );\n      }\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('inventory.transfers.transfer.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportTransferProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            transferId: vm.transfer.id,\n            isDelivery: false\n          }\n        }).then(function(response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', { email: Session.user.email }))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n          sendReloadAllEvent(response);\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function sendReloadAllEvent(response) {\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n      sendReloadTableEvent(response);\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('TransferPrintDialogController', TransferPrintDialogController);\n\n  /** @ngInject */\n  function TransferPrintDialogController($mdDialog, $mdToast, $filter, $document, api, Session, transferId, orderBy) {\n\n    var vm = this;\n\n    // Data\n    vm.printPrices = false;\n    vm.printOriginCodes = false;\n    vm.printImages = false;\n    vm.thermalPrinter = false;\n    vm.orderBy = orderBy;\n\n    //Header Product Options\n    vm.showBrand = false;\n    vm.showHsCode = false;\n    vm.showComposition = false;\n    vm.showAttributes = false;\n\n    // Functions\n    vm.print = print;\n    vm.hide = hide;\n    vm.cancel = cancel;\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function print() {\n      var url = api.urls.inventories.transferOrdersPrint.replace(':id', transferId);\n      if (vm.printPrices || vm.printOriginCodes || vm.printImages || vm.thermalPrinter || vm.orderBy ||\n      vm.showBrand || vm.showHsCode || vm.showAttributes || vm.showComposition) {\n        var path = '?';\n        if (vm.printPrices) {\n          path += 'prices=true';\n        }\n        if (vm.printOriginCodes) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'origin-codes=true';\n        }\n\n        if (vm.showBrand) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'brand=true';\n        }\n\n        if (vm.showHsCode) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'hs_code=true';\n        }\n\n        if (vm.showAttributes) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'attributes=true';\n        }\n\n        if (vm.showComposition) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'composition=true';\n        }\n\n        if (vm.printImages) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'images=true';\n        }\n        if (vm.thermalPrinter) {\n          if (path.length > 1) {\n            path += '&';\n          }\n          path += 'output_format=html';\n        }\n        if (path.length > 1) {\n          path += '&';\n        }\n        path += 'orderBy=' + vm.orderBy;\n\n        url += path;\n      }\n\n      Session.setTokenCookie();\n      window.open(url);\n      $mdDialog.hide();\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportTransferProductsDialogController', ImportTransferProductsDialogController);\n\n  /** @ngInject */\n  function ImportTransferProductsDialogController($mdDialog, $mdToast, $filter, $document, api, Session, transferId, isDelivery) {\n\n    var vm = this;\n\n    // Data\n    vm.fileLoaded = false;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      allowDuplicateUploads: true,\n      //singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.transfer_order_products = [];\n    vm.filename = null;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n\n    // Functions\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n      vm.filename = file.name;\n      //vm.fileCopy = new File([file], file.name, { type: file.type });\n    }\n\n    function uploadFile(save) {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      vm.ngFlow.flow.opts.target = api.urls.inventories.transferOrderProductsImport;\n      if (isDelivery === true) {\n        vm.ngFlow.flow.opts.target = api.urls.inventories.transferOrderDeliveryProductsImport;\n      }\n\n      vm.ngFlow.flow.opts.query = {transfer: transferId};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.loading = true;\n      vm.ngFlow.flow.upload();\n      //}\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.loading = false;\n      $mdDialog.hide(response);\n      //vm.transfer_order_products = JSON.parse(response).transfer_order_products;\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LoadingBarDialogController', LoadingBarDialogController);\n\n  /** @ngInject */\n  function LoadingBarDialogController($mdDialog, title, body) {\n\n    var vm = this;\n\n    // Data\n    vm.title = title;\n    vm.body = body;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStocktakingOrderProductUidController', ndStocktakingOrderProductUidController)\n    .directive('ndStocktakingOrderProductUid', ndStocktakingOrderProductUid);\n\n  /** @ngInject */\n  function ndStocktakingOrderProductUid() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        onSave: '=',\n        deleteOrderProduct: '=',\n        validateOrderProduct: '=',\n        isEditable: '&',\n        changed: '=?',\n        showStocks: '=?',\n        sourceWarehouse: '=?',\n        updateAmountPermission: '=?', // permission to allow edit amounts\n        deletePermission: '=?'       // permission to show 'Delete' button\n      },\n      controller: 'ndStocktakingOrderProductUidController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-order-product-uid/nd-stocktaking-order-product-uid.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStocktakingOrderProductUidController($scope, $filter, Session, $rootScope, $document, $mdDialog,\n                                                  $timeout, UiGridService, HTTP_STATUS, UidStock, $mdToast,\n                                                  StocktakingOrderProductVariantLot, api) {\n    var vm = this;\n    vm.orderProduct = $scope.orderProduct;\n    vm.totalAmount = null;\n    vm.MIN_GRID_HEIGHT = 92;\n    vm.gridHeight = vm.MIN_GRID_HEIGHT;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.loading = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: 5\n    };\n\n\n    // Methods\n    vm.getGridDetailPage = getGridDetailPage;\n    vm.deleteOrderProductWrapper = deleteOrderProductWrapper;\n    vm.copyFieldInClipboard = copyFieldInClipboard;\n    vm.updateNewAmount = updateNewAmount;\n    vm.addLot = addLot;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableRowHeaderSelection: false,\n      enableColumnMenus: false,\n      enableGridMenu: false,\n      paginationPageSize: 5,\n      minRowsToShow: 5,\n      enableHorizontalScrollbar: 0,\n      enableVerticalScrollbar: 0,\n      enablePaginationControls: true\n    });\n\n    // Initialization\n    initialize();\n\n    function calculateTableHeight() {\n      vm.gridHeight = vm.gridOptions.data.length * UiGridService.defaultGridOptions.rowHeight + vm.MIN_GRID_HEIGHT;\n    }\n\n    // Functions\n    function initialize() {\n      for (var i = 0; i < vm.orderProduct.order_product_variants.length; i++) {\n        for (var j = 0; j < vm.orderProduct.order_product_variants[i].stocktaking_order_product_variant_lots.length; j++) {\n          var stocktakingOrderProductVariantLot = new StocktakingOrderProductVariantLot(vm.orderProduct.order_product_variants[i].stocktaking_order_product_variant_lots[j]);\n          vm.gridOptions.data.push(stocktakingOrderProductVariantLot);\n        }\n        vm.gridOptions.totalItems += vm.orderProduct.order_product_variants[i].stocktaking_order_product_variant_lots.total_stocktaking_order_product_variant_lots;\n      }\n\n      vm.uiGridInitialized = true;\n      calculateTableHeight();\n\n      if (vm.orderProduct.total_amount || vm.orderProduct.total_amount === 0) {\n        updateTotalAmount(vm.orderProduct.total_amount);\n      }\n    }\n\n    function updateTotalAmount(amount) {\n      vm.totalAmount = amount;\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.handleWindowResize();\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridDetailPage();\n        }\n      });\n\n      $timeout(function() {\n        vm.gridApi.core.on.rowsRendered($scope, function() {\n          vm.gridApi.core.handleWindowResize();\n        });\n      });\n\n      setGridColumns();\n    }\n\n    function getGridDetailPage() {\n      api.inventories.stocktakingOrderProductVariantLots.get({\n          order_product_id: vm.orderProduct.id,\n          pagination: 'datatable',\n          length: vm.status.pageSize,\n          page: vm.status.pageNumber,\n          start: vm.status.pageSize * (vm.status.pageNumber - 1)\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.uiGridInitialized = true;\n            vm.gridOptions.data = [];\n\n            for (var i = 0; i < response.data.length; i++) {\n              var stocktakingOrderProductVariantLot = new StocktakingOrderProductVariantLot(response.data[i]);\n              vm.gridOptions.data.push(stocktakingOrderProductVariantLot);\n            }\n            calculateTableHeight();\n          } else {\n            showErrorToast();\n          }\n        }\n      );\n    }\n\n    function setGridColumns(avoidState) {\n      angular.extend(vm.columns, {\n        product_variant: {\n          displayName: $filter('translate')('PRODUCT.PRODUCT_VARIANT'),\n          field: 'product_variant',\n          permission: true,\n          visible: true,\n          sort: { priority: 0, direction: 'desc' },\n          enableSorting: false,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableColumnMenu: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div>' +\n            '<div>{{row.entity.product_variant_name}}</div>' +\n            '<span>{{row.entity.sku}} </span>' +\n            '<span class=\"uid-text\">{{row.entity.barcode}}</span></div>'\n        },\n        identifier: {\n          displayName: $filter('translate')('PRODUCT.LOT'),\n          field: 'identifier',\n          permission: true,\n          visible: true,\n          enableColumnMenu: false,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate:\n            '<div class=\"stock-detail-identifier\" layout=\"row\" layout-align=\"start center\">' +\n            '<span class=\"uid-text mr-5\">{{row.entity.uid}}</span>' +\n            '<div class=\"show-stock-button\">' +\n            '<md-icon class=\"cursor-pointer copy-uid-icon-format\" ng-click=\"grid.appScope.vm.copyFieldInClipboard(row.entity.uid)\" md-font-icon=\"icon-content-copy\">' +\n            '<md-tooltip>{{\"GENERAL.COPY\" | translate }}</md-tooltip></md-icon>' +\n            '</div>' +\n            '</div>'\n        },\n        expiration_date: {\n          displayName: $filter('translate')('PRODUCT.EXPIRATION_DATE'),\n          field: 'expiration_date',\n          permission: true,\n          enableColumnMenu: false,\n          visible: true,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<span>{{row.entity.expiration_date | date:\\'dd/MM/yyyy\\'}}</span>'\n        }\n      });\n      if (Session.hasPermissions('inventory.stocktakings.stocktaking.products.show_previous_amount')) {\n        angular.extend(vm.columns, {\n          amount: {\n            displayName: $filter('translate')('PRODUCT.PREVIOUS_AMOUNT'),\n            field: 'amount',\n            permission: true,\n            visible: true,\n            enableColumnMenu: false,\n            enablePinning: false,\n            enableSorting: false,\n            pinnedLeft: false,\n            enableHiding: false,\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span >{{row.entity.amount}}</span>'\n          }\n        });\n      }\n\n      var newAmountTemplate = '';\n      if ($scope.isEditable() && Session.hasPermissions('inventory.stocktakings.stocktaking.products.update_amount')) {\n        newAmountTemplate = '<input class=\"nd-input text-right\" type=\\'number\\' nd-mute-barcode-callbacks ng-blur=\"grid.appScope.vm.updateNewAmount(row.entity.id, row.entity.new_amount)\" ng-model=\"row.entity.new_amount\"/>';\n      } else {\n        newAmountTemplate = '<span>{{row.entity.new_amount}}</span>';\n      }\n\n      angular.extend(vm.columns, {\n        newAmount: {\n          displayName: $filter('translate')('PRODUCT.NEW_AMOUNT'),\n          field: 'new_amount',\n          permission: true,\n          visible: true,\n          enableColumnMenu: false,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: newAmountTemplate\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function addLot()   {\n      if (!$scope.isEditable()) {\n        return;\n      }\n\n      $mdDialog.show({\n        controller: 'EditUidDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-edit/edit-uid-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          uidStock: null,\n          manageLots: true,\n          warehouses: [\n            {\n              id: $scope.sourceWarehouse.id,\n              name: $scope.sourceWarehouse.name\n            }\n          ],\n          productVariants: vm.orderProduct.product.product_variants,\n          received: false,\n          hideNotes: true,\n          hideMovementReason: true,\n          disableWarehouseSelector: true,\n          disableVariantSelector: false,\n          createMovement: false\n        }\n      }).then(function(lot) {\n        createNewStocktakingOrderProductVariantLot(new UidStock(lot));\n      });\n    }\n\n    function createNewStocktakingOrderProductVariantLot(lot) {\n      api.inventories.stocktakingOrderProductVariantLots.save(\n        {\n          amount: lot.amount,\n          stocktaking_id: vm.orderProduct.stocktaking_order,\n          order_product_id: vm.orderProduct.id,\n          expiration_date: lot.expiration_date,\n          product_variant_id: lot.product_variant,\n          uid_stock_id: lot.id,\n          uid: lot.uid,\n          option: 'create-from-product-variant'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            updateTotalAmount(response.total_product_amount);\n            getGridDetailPage();\n          } else {\n            showErrorToast();\n          }\n        });\n    }\n\n    function updateNewAmount(lotId, amount) {\n\n      if (!lotId || (!amount && amount !== 0)) {\n        return;\n      }\n\n      api.inventories.stocktakingOrderProductVariantLots.save(\n        {\n          id: lotId,\n          option: 'update-amount',\n          new_amount: amount\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var targetVariant = null;\n            for (var i = 0; i < vm.orderProduct.order_product_variants.length; i++) {\n              if (vm.orderProduct.order_product_variants[i].id === response.stocktaking_order_product_variant) {\n                targetVariant = vm.orderProduct.order_product_variants[i];\n                break;\n              }\n            }\n\n            if (targetVariant) {\n              var targetLot = null;\n              for (var j = 0; j < targetVariant.stocktaking_order_product_variant_lots.length; j++) {\n                if (targetVariant.stocktaking_order_product_variant_lots[j].id === response.id) {\n                  targetLot = targetVariant.stocktaking_order_product_variant_lots[j];\n                  break;\n                }\n              }\n\n              if (targetLot) {\n                targetLot.new_amount = response.new_amount;\n                targetLot.total_product_amount = response.total_product_amount;\n              }\n            }\n\n            updateTotalAmount(response.total_product_amount);\n            $rootScope.$broadcast('InventoryStocktakingProductsController::getTotals', response.total_stocktaking_order_products_amount);\n          } else {\n            showErrorToast();\n          }\n        }\n      );\n    }\n\n    function copyFieldInClipboard(value) {\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({ position: 'fixed', opacity: '0' });\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n    function deleteOrderProductWrapper(orderProduct) {\n      if (Session.hasPermissions('inventory.stocktakings.stocktaking.products.remove_product')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('STOCKTAKING.DELETE_PRODUCT'))\n          .htmlContent($filter('translate')('STOCKTAKING.DELETE_PRODUCT_MESSAGE', {\n            product: vm.orderProduct.product_code + ' · ' + vm.orderProduct.product_name\n          }))\n          .parent(angular.element(document.body))\n          .clickOutsideToClose(true)\n          .ok($filter('translate')('STOCKTAKING.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function(result) {\n          if (angular.isDefined($scope.deleteOrderProduct)) {\n            vm.changed = true;\n            $scope.deleteOrderProduct(vm.orderProduct);\n          }\n        });\n      }\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStocktakingOrderProductController', ndStocktakingOrderProductController)\n    .directive('ndStocktakingOrderProduct', ndStocktakingOrderProduct);\n\n  /** @ngInject */\n  function ndStocktakingOrderProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        onSave: '=',\n        deleteOrderProduct: '=',\n        validateOrderProduct: '=',\n        isEditable: '&',\n        changed: '=?',\n        showStocks: '=?',\n        sourceWarehouse: '=?',\n        updateAmountPermission: '=?', // permission to allow edit amounts\n        deletePermission: '=?'       // permission to show 'Delete' button\n      },\n      controller: 'ndStocktakingOrderProductController',\n      templateUrl: 'app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-order-product/nd-stocktaking-order-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStocktakingOrderProductController($rootScope, $scope, $filter, Session, $mdDialog, api) {\n\n    // Data\n    $scope.orderProductVariantByColorAndSize = {};\n    $scope.session = Session;\n\n    // Methods\n    $scope.saveOrderProductVariant = saveOrderProductVariant;\n    $scope.deleteOrderProductWrapper = deleteOrderProductWrapper;\n    $scope.getTotalByColor = getTotalByColor;\n    $scope.getOrderProductVariantByColorAndSize = getOrderProductVariantByColorAndSize;\n    $scope.getTooltip = getTooltip;\n    $scope.showUidsDialog = showUidsDialog;\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      initOrderProductVariantByColorAndSizeDict();\n\n      // Event listeners\n      $scope.initDictEvent = $rootScope.$on('InventoryStocktakingProductsController::stocktakingOrderProductVariantsCreated', initOrderProductVariantByColorAndSizeDict);\n\n      // Unregister Events\n      $scope.$on('$destroy', function() {\n        $scope.initDictEvent();\n      });\n    }\n\n    function getOrderProductVariantByColorAndSize(colorId, sizeId, colorName, sizeName) {\n      if (!$scope.orderProductVariantByColorAndSize[colorId]) {\n        $scope.orderProductVariantByColorAndSize[colorId] = {};\n        $scope.orderProductVariantByColorAndSize[colorId]['total'] = 0;\n      }\n      if (!$scope.orderProductVariantByColorAndSize[colorId][sizeId]) {\n        $scope.orderProductVariantByColorAndSize[colorId][sizeId] = {\n          amount: null,\n          product_variant: null,\n          orderProduct: $scope.orderProduct,\n          color: colorId,\n          size: sizeId,\n          color_name: colorName,\n          size_name: sizeName\n        };\n      }\n      return $scope.orderProductVariantByColorAndSize[colorId][sizeId];\n    }\n\n    function initOrderProductVariantByColorAndSizeDict() {\n      var tempTotalPrevious = 0;\n      var tempTotal = 0;\n      $scope.orderProductVariantByColorAndSize = {};\n\n      if ($scope.orderProduct) {\n        $scope.orderProduct.order_product_variants.forEach(function(orderProductVariant) {\n          $scope.orderProductVariantByColorAndSize['total'] = 0;\n          if (!$scope.orderProductVariantByColorAndSize[orderProductVariant.color]) {\n            $scope.orderProductVariantByColorAndSize[orderProductVariant.color] = {};\n            $scope.orderProductVariantByColorAndSize[orderProductVariant.color]['total'] = 0;\n            $scope.orderProductVariantByColorAndSize[orderProductVariant.color]['totalPrevious'] = 0;\n          }\n          $scope.orderProductVariantByColorAndSize[orderProductVariant.color][orderProductVariant.size] = orderProductVariant;\n          $scope.orderProductVariantByColorAndSize[orderProductVariant.color]['total'] += orderProductVariant.amount;\n          $scope.orderProductVariantByColorAndSize[orderProductVariant.color]['totalPrevious'] += orderProductVariant.previous_amount;\n          tempTotal += orderProductVariant.amount;\n        });\n\n      }\n      $scope.orderProductVariantByColorAndSize['total'] = tempTotal;\n    }\n\n    function updateTotals() {\n      var total = 0;\n      var previous = 0;\n      for (var key in $scope.orderProductVariantByColorAndSize) {\n        if (key !== 'total' && key !== 'totalPrevious') {\n          total += $scope.orderProductVariantByColorAndSize[key].total;\n          if ($scope.orderProductVariantByColorAndSize[key].hasOwnProperty('totalPrevious')) {\n            previous += $scope.orderProductVariantByColorAndSize[key].totalPrevious;\n          }\n        }\n      }\n      $scope.orderProductVariantByColorAndSize.total = total;\n    }\n\n    function updateTotalsByColor(colorId) {\n      var pv = $scope.orderProductVariantByColorAndSize[colorId];\n      var total = 0;\n      var previousTotal = 0;\n      for (var key in pv) {\n        if (key !== 'total' && key !== 'totalPrevious' && pv[key].hasOwnProperty('previous_amount')) {\n          previousTotal += pv[key].previous_amount;\n          total += pv[key].amount;\n        }\n      }\n      if ($scope.orderProductVariantByColorAndSize.hasOwnProperty(colorId)) {\n        $scope.orderProductVariantByColorAndSize[colorId].totalPrevious = previousTotal;\n        $scope.orderProductVariantByColorAndSize[colorId].total = total;\n      }\n\n    }\n\n    function getTooltip(color, size) {\n      if ($scope.orderProductVariantByColorAndSize\n        && $scope.orderProductVariantByColorAndSize[color.id]\n        && $scope.orderProductVariantByColorAndSize[color.id][size.id]) {\n        var previousAmount = $scope.orderProductVariantByColorAndSize[color.id][size.id].previous_amount;\n        if (!angular.isUndefined(previousAmount)) {\n          return $scope.sourceWarehouse.name + ': ' + previousAmount + ' ' + $filter('translate')('PRODUCT.IN_STOCK');\n        }\n      }\n      return '';\n\n    }\n\n    function getTotalByColor(orderProductVariantByColorAndSize) {\n      var total = 0;\n      for (var key in orderProductVariantByColorAndSize) {\n        if (key != 'total' && key != 'totalPrevious') {\n          total += orderProductVariantByColorAndSize[key].amount;\n        }\n      }\n      return total;\n    }\n\n    function saveOrderProductVariant(orderProductVariant, colorId) {\n      $scope.changed = true;\n\n      // TODO: Fix this with the autodetection for barcode scanner\n      if (orderProductVariant.amount == null || String(orderProductVariant.amount).length > 6) {\n        orderProductVariant.amount = 0;\n      }\n\n      // Recalculating the totals\n      updateTotalsByColor(colorId);\n      updateTotals();\n\n      // Executing save function given by param\n      if (angular.isDefined($scope.onSave)) {\n        // We pass the orderProduct to be able to add the new order product variant at order_product_variants array if the order product variant is new\n        orderProductVariant.orderProduct = $scope.orderProduct;\n        $scope.onSave(orderProductVariant);\n      }\n    }\n\n    function deleteOrderProductWrapper(orderProduct) {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('STOCKTAKING.DELETE_PRODUCT'))\n        .htmlContent($filter('translate')('STOCKTAKING.DELETE_PRODUCT_MESSAGE', {\n          product: orderProduct.product_code + ' · ' + orderProduct.product_name\n        }))\n        .parent(angular.element(document.body))\n        .clickOutsideToClose(true)\n        .ok($filter('translate')('STOCKTAKING.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n      $mdDialog.show(confirm).then(function(result) {\n        if (angular.isDefined($scope.deleteOrderProduct)) {\n          $scope.changed = true;\n          $scope.deleteOrderProduct(orderProduct);\n        }\n      });\n    }\n\n    function sendEventOpenUidDialog(orderProductVariant) {\n      $rootScope.$broadcast('InventoryStocktakingProductsController::openSearchUidDialog',\n        {\n          orderProductVariant: orderProductVariant,\n          orderProduct: $scope.orderProduct\n        }\n      );\n    }\n\n    function showUidsDialog(orderProductVariant) {\n      if (!$scope.isEditable()) {\n        return;\n      }\n\n      if (angular.isDefined($scope.onSave) && !orderProductVariant.id) {\n        $scope.onSave(orderProductVariant).then(function(results) {\n          sendEventOpenUidDialog(orderProductVariant);\n\n        });\n      } else {\n        sendEventOpenUidDialog(orderProductVariant);\n      }\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStocktakingHistoricController', ndStocktakingHistoricController)\n    .directive('ndStocktakingHistoric', ndStocktakingHistoric);\n\n  /** @ngInject */\n  function ndStocktakingHistoric() {\n    return {\n      restrict: 'E',\n      scope: {\n        stocktakingHistoricArray: '=',\n        stocktakingHistoricNext: '=',\n        show: '=',\n        showHeader: '='\n      },\n      controller: 'ndStocktakingHistoricController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-historic/nd-stocktaking-historic.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStocktakingHistoricController($scope, $filter, $rootScope, $mdDialog, Session, api, SEARCH_MAX_LENGTH, STOCKTAKING_PRODUCT_NOT_FOUND_REASONS, $http, $mdToast) {\n    // Data\n    $scope.STOCKTAKING_PRODUCT_NOT_FOUND_REASONS = STOCKTAKING_PRODUCT_NOT_FOUND_REASONS;\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    $scope.stocktakingHistoricSearch = '';\n    $scope.loading = false;\n\n    // Methods\n    $scope.getPreviousStocktakingChanges = getPreviousStocktakingChanges;\n    $scope.getLastStocktakingChange = getLastStocktakingChange;\n    $scope.loadMore = loadMore;\n\n    // Functions\n    function getPreviousStocktakingChanges(filterString) {\n      if (filterString) {\n        return $scope.stocktakingHistoricArray.filter(function(item) {\n          return item.product_name.toLowerCase().indexOf(filterString.toLowerCase()) > -1 ||\n            item.product_code.toLowerCase().indexOf(filterString.toLowerCase()) > -1;\n        });\n      }\n\n      return $scope.stocktakingHistoricArray.slice(1);\n    }\n\n    function getLastStocktakingChange() {\n      return $scope.stocktakingHistoricArray[0];\n    }\n\n    function loadMore() {\n      if ($scope.loading) {\n        return;\n      }\n\n      $scope.loading = true;\n\n      $http({\n        method: 'GET',\n        url: $scope.stocktakingHistoricNext\n      }).then(function successCallback(response) {\n        $scope.stocktakingHistoricArray = $scope.stocktakingHistoricArray.concat(response.data.results);\n        $scope.stocktakingHistoricNext = response.data.next;\n        $scope.loading = false;\n      }, function errorCallback(response) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        $scope.loading = false;\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('StocktakingSummaryDialogController', StocktakingSummaryDialogController);\n\n  /** @ngInject */\n  function StocktakingSummaryDialogController($mdDialog,\n                                              stocktakingSummaryData) {\n    var vm = this;\n\n    // Data\n    vm.resetStock = false;\n    vm.stocktakingSummaryData = stocktakingSummaryData;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.getStocktakingInformation = getStocktakingInformation;\n\n    //Functions\n    initialize();\n\n    function initialize() {\n    }\n\n    function getStocktakingInformation() {\n      var autocode = vm.stocktakingSummaryData.stocktaking.autocode != '' ? vm.stocktakingSummaryData.stocktaking.autocode : '';\n      var brand_name = vm.stocktakingSummaryData.stocktaking.brand_instance != null ? \" · \" + vm.stocktakingSummaryData.stocktaking.brand_instance.name : '';\n      var category_name = vm.stocktakingSummaryData.stocktaking.category_instance != null ? \" · \" + vm.stocktakingSummaryData.stocktaking.category_instance.name : '';\n      var season_name = vm.stocktakingSummaryData.stocktaking.season_instance != null ? \" · \" + vm.stocktakingSummaryData.stocktaking.season_instance.name : '';\n\n      return autocode + brand_name + category_name + season_name;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      $mdDialog.hide(vm.resetStock);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('StocktakingCloneSuccessDialogController', StocktakingCloneSuccessDialogController);\n\n  /** @ngInject */\n  function StocktakingCloneSuccessDialogController($mdDialog, $state, lastClone) {\n    var vm = this;\n\n    // Data\n    vm.lastClone = lastClone;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.goToClonedStocktaking = goToClonedStocktaking;\n\n    //Functions\n    initialize();\n\n    function initialize() {\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function goToClonedStocktaking() {\n      $mdDialog.hide();\n      $state.go('app.inventory.stocktakings.stocktaking.products', {id: lastClone.id});\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPurchaseOrderPaymentsController', ndPurchaseOrderPaymentsController)\n    .directive('ndPurchaseOrderPayments', ndPurchaseOrderPayments);\n\n  /** @ngInject */\n  function ndPurchaseOrderPayments() {\n    return {\n      restrict: 'E',\n      scope: {\n        purchaseOrder: '=',\n        saleOrder: '=',\n        onSave: '=',\n        editable: '=',\n        paymentMethods: '=',\n        deletePermission: '=?'        // permission to show 'Delete' button\n      },\n      controller: 'ndPurchaseOrderPaymentsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-purchase-order-payments/nd-purchase-order-payments.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPurchaseOrderPaymentsController($scope, ORDER_TYPES, HTTP_STATUS, SEARCH_MAX_LENGTH, $q, $timeout, $mdToast, $mdDialog, $filter, Session, api, PURCHASE_ORDER_PAYMENT_STATUSES, PURCHASE_ORDER_PAYMENT_STATUSES_COLORS) {\n\n    var vm = this;\n\n    // Data\n    vm.session = Session;\n    vm.order = $scope.purchaseOrder ? angular.copy($scope.purchaseOrder) : angular.copy($scope.saleOrder);\n    vm.orderType = $scope.purchaseOrder ? ORDER_TYPES.PURCHASE_ORDER : ORDER_TYPES.SALE_ORDER;\n\n    vm.paymentMethods = angular.copy($scope.paymentMethods);\n    vm.purchaseOrderPaymentStatuses = [\n      PURCHASE_ORDER_PAYMENT_STATUSES.PURCHASE_ORDER_PAYMENT_STATUS_PENDING,\n      PURCHASE_ORDER_PAYMENT_STATUSES.PURCHASE_ORDER_PAYMENT_STATUS_PAID\n    ];\n    vm.orderTypesDict = [\n      ORDER_TYPES.PURCHASE_ORDER,\n      ORDER_TYPES.SALE_ORDER\n    ];\n    vm.PURCHASE_ORDER_PAYMENT_STATUSES = PURCHASE_ORDER_PAYMENT_STATUSES;\n    vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS = PURCHASE_ORDER_PAYMENT_STATUSES_COLORS;\n    vm.showAddPaymentMethodRow = false;\n    vm.temporalPayment = {};\n    vm.searchText = '';\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.newPayment = false;\n    vm.saving = false;\n\n    // Methods\n    vm.addPayment = addPayment;\n    vm.savePayment = savePayment;\n    vm.editPayment = editPayment;\n    vm.deletePayment = deletePayment;\n    vm.selectItem = selectItem;\n    vm.displayFunction = displayFunction;\n    vm.querySearch = querySearch;\n    vm.updateOrderKPIs = updateOrderKPIs;\n    vm.setOrderPendingAmount = setOrderPendingAmount;\n    vm.getTooltip = getTooltip;\n    vm.checkFormPayment = checkFormPayment;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n    }\n\n    function getTooltip() {\n      return $filter('translate')('PURCHASE.AUTOCOMPLETE_PENDING_AMOUNT', {\n        amount: $filter('price')(vm.order.pending_amount),\n        currency: $filter('currencyCharacter')(vm.session.company.currency)\n      });\n    }\n\n    function checkFormPayment(payment) {\n      return payment.payment_method && payment.date && payment.amount && payment.status;\n    }\n\n    function querySearch() {\n      var deferred = $q.defer();\n      vm.searchText = vm.searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.accounting.invoices.get(\n        {\n          search: vm.searchText\n        }, function(response, callback, status) {\n          if (status === 200) {\n            if (response.results) {\n              deferred.resolve(response.results);\n            } else {\n              deferred.resolve([]);\n            }\n          }\n        });\n    }\n\n    function setOrderPendingAmount(payment) {\n      payment.amount = vm.order.pending_amount;\n    }\n\n    function selectItem(invoice) {\n      if (typeof invoice === 'object') {\n        if (invoice && invoice.id && invoice.autocode) {\n          //vm.temporalPayment.invoice = invoice;\n        }\n      }\n    }\n\n    function displayFunction(invoice) {\n      return invoice.autocode && invoice.expiration_date ? invoice.autocode + ' · ' + $filter('translate')('INVOICE.EXPIRATION') + ': ' + invoice.expiration_date : invoice.autocode;\n    }\n\n    function editPayment(payment) {\n      if (vm.newPayment) {\n        vm.newPayment = false;\n        vm.order.payments.pop();\n      }\n      payment.editing = true;\n    }\n\n    function updateOrderKPIs(payment) {\n      $scope.order.total_amount = payment.purchase_order_total_amount;\n      $scope.order.pending_amount = payment.purchase_order_pending_amount;\n      $scope.order.pending_payments = payment.purchase_order_pending_payments;\n      $scope.order.paid_payments = payment.purchase_order_paid_payments;\n\n      vm.order.total_amount = payment.purchase_order_total_amount;\n      vm.order.pending_amount = payment.purchase_order_pending_amount;\n      vm.order.pending_payments = payment.purchase_order_pending_payments;\n      vm.order.paid_payments = payment.purchase_order_paid_payments;\n    }\n\n    //if (Session.hasPermission('app.inventory.purchases.purchase.payments.create')) {\n    function savePayment(payment) {\n      vm.saving = true;\n      vm.temporalPayment = angular.copy(payment);\n      vm.temporalPayment.invoice = vm.temporalPayment.invoice.id;\n      var orderType = ORDER_TYPES[vm.orderType];\n      vm.temporalPayment[orderType] = vm.order.id;\n\n      if (payment.id && Session.hasPermission('app.inventory.purchases.purchase.payments.update')) {\n        api.accounting.payments.update(\n          vm.temporalPayment,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              for (var i = 0; i < vm.order.payments.length; i++) {\n                if (vm.order.payments[i].id === vm.temporalPayment.id) {\n                  vm.order.payments[i] = response;\n                  break;\n                }\n              }\n              if (orderType == ORDER_TYPES.PURCHASE_ORDER) {\n                vm.updateOrderKPIs(response);\n              }\n\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n            } else {\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n      if (!payment.id && Session.hasPermission('app.inventory.purchases.purchase.payments.create')) {\n        api.accounting.payments.save(\n          vm.temporalPayment,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              vm.order.payments.pop();\n              vm.order.payments.push(response);\n\n              if (orderType == ORDER_TYPES.PURCHASE_ORDER) {\n                vm.updateOrderKPIs(response);\n              }\n              payment.editing = false;\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n            } else {\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function addPayment() {\n      if (vm.order.payments) {\n        for (var i = 0; i < vm.order.payments.length; i++) {\n          vm.order.payments[i].editing = false;\n        }\n      } else {\n        vm.order.payments = [];\n      }\n      vm.newPayment = true;\n      vm.order.payments.push(newPayment());\n    }\n\n    function newPayment() {\n      return {\n        id: null,\n        payment_method: null,\n        amount: null,\n        date: null,\n        invoice: null,\n        status: null,\n        order: vm.order.id,\n        editing: true\n      };\n    }\n\n    function deletePayment(payment) {\n      if (Session.hasPermission('app.inventory.purchases.purchase.payments.delete')) {\n        var orderType = ORDER_TYPES[vm.orderType];\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PURCHASES.DELETE_PAYMENT_TITLE'))\n          .htmlContent($filter('translate')('PURCHASES.DELETE_PAYMENT_MESSAGE', {\n            payment_method: payment.payment_method_instance.name,\n            amount: $filter('price')(payment.amount),\n            currency: $filter('currencyCharacter')(vm.session.company.currency)\n          }))\n          .parent(angular.element(document.body))\n          .clickOutsideToClose(true)\n          .ok($filter('translate')('STOCKTAKING.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          api.accounting.payments.delete(\n            { id: payment.id },\n            function(response, callback, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                for (var i = 0; i < vm.order.payments.length; i++) {\n                  if (vm.order.payments[i].id === payment.id) {\n                    vm.order.payments.splice(i, 1);\n                    break;\n                  }\n                }\n\n                if (orderType == ORDER_TYPES.PURCHASE_ORDER) {\n                  vm.updateOrderKPIs(response);\n                }\n                vm.saving = false;\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                vm.saving = false;\n              }\n            }\n          );\n        }, function() {\n          vm.saving = false;\n        });\n      }\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndOrderPaymentsController', ndOrderPaymentsController)\n    .directive('ndOrderPayments', ndOrderPayments);\n\n  /** @ngInject */\n  function ndOrderPayments() {\n    return {\n      restrict: 'E',\n      scope: {\n        purchaseOrder: '=',\n        saleOrder: '=',\n        paymentMethods: '=',\n        showPendingAmountButton: '=',\n\n      },\n      controller: 'ndOrderPaymentsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/purchase/directives/nd-order-payments/nd-order-payments.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndOrderPaymentsController($scope, $document, ORDER_TYPES, HTTP_STATUS, SEARCH_MAX_LENGTH, $q, $timeout, $mdToast, $mdDialog, $filter, Session, api, PURCHASE_ORDER_PAYMENT_STATUSES, PURCHASE_ORDER_PAYMENT_STATUSES_COLORS) {\n\n    var vm = this;\n\n    // Data\n    vm.session = Session;\n    vm.order = $scope.purchaseOrder ? angular.copy($scope.purchaseOrder) : angular.copy($scope.saleOrder);\n    vm.orderType = $scope.purchaseOrder ? ORDER_TYPES.PURCHASE_ORDER : ORDER_TYPES.SALE_ORDER;\n    vm.showPendingAmountButton = $scope.showPendingAmountButton ? $scope.showPendingAmountButton : false;\n\n    vm.paymentMethods = angular.copy($scope.paymentMethods);\n    vm.currency = $scope.saleOrder ? $scope.saleOrder.currency : Session.company.currency;\n    vm.purchaseOrderPaymentStatuses = [\n      PURCHASE_ORDER_PAYMENT_STATUSES.PURCHASE_ORDER_PAYMENT_STATUS_PENDING,\n      PURCHASE_ORDER_PAYMENT_STATUSES.PURCHASE_ORDER_PAYMENT_STATUS_PAID\n    ];\n    vm.orderTypesDict = [\n      ORDER_TYPES.PURCHASE_ORDER,\n      ORDER_TYPES.SALE_ORDER\n    ];\n    vm.PURCHASE_ORDER_PAYMENT_STATUSES = PURCHASE_ORDER_PAYMENT_STATUSES;\n    vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS = PURCHASE_ORDER_PAYMENT_STATUSES_COLORS;\n    vm.showAddPaymentMethodRow = false;\n    vm.temporalPayment = {};\n    vm.searchText = '';\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.newPayment = false;\n    vm.saving = false;\n    vm.globalEditMode = false;\n\n    // Methods\n    vm.addPayment = addPayment;\n    vm.savePayment = savePayment;\n    vm.editPayment = editPayment;\n    vm.deletePayment = deletePayment;\n    vm.displayFunction = displayFunction;\n    vm.querySearch = querySearch;\n    vm.updateOrderKPIs = updateOrderKPIs;\n    vm.setOrderPendingAmount = setOrderPendingAmount;\n    vm.getTooltip = getTooltip;\n    vm.checkFormPayment = checkFormPayment;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.clearFilter = clearFilter;\n    vm.cancelPayment = cancelPayment;\n    vm.getCancelEditModeText = getCancelEditModeText;\n    vm.checkValidAmount = checkValidAmount;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function checkValidAmount(amount) {\n      if (amount || amount === null)\n        return false;\n      return true;\n\n\n    }\n\n    function getCancelEditModeText() {\n      if (vm.newPayment) {\n        return $filter('translate')('PURCHASE.CANCEL_PAYMENT');\n      }\n      return $filter('translate')('PURCHASE.CANCEL_EDIT_PAYMENT');\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function clearFilter(payment) {\n      payment.invoice = null;\n      vm.searchText = '';\n    }\n\n    function onSelectorClose() {\n      vm.searchText = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function getTooltip() {\n      return $filter('translate')('PURCHASE.AUTOCOMPLETE_PENDING_AMOUNT', {\n        amount: $filter('price')(vm.order.pending_amount),\n        currency: $filter('currencyCharacter')(vm.session.company.currency)\n      });\n    }\n\n    function checkFormPayment(payment) {\n      return payment.payment_method && payment.amount;\n    }\n\n    function querySearch() {\n      var deferred = $q.defer();\n      vm.searchText = vm.searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.accounting.invoices.get(\n        {\n          search: vm.searchText\n        }, function(response, callback, status) {\n          if (status === 200) {\n            if (response.results) {\n              deferred.resolve(response.results);\n            } else {\n              deferred.resolve([]);\n            }\n          }\n        });\n      return deferred.promise;\n    }\n\n    function setOrderPendingAmount(payment) {\n      payment.amount = vm.order.pending_amount;\n    }\n\n    function displayFunction(invoice) {\n      return invoice.autocode && invoice.expiration_date ? invoice.autocode + ' · ' + $filter('translate')('INVOICE.EXPIRATION_SHORT') + ': ' + $filter('date')(invoice.expiration_date, 'dd-MM-yyyy') : invoice.autocode;\n    }\n\n    function cancelAllPaymentsEditing() {\n      if (vm.order.payments) {\n        for (var i = 0; i < vm.order.payments.length; i++) {\n          vm.order.payments[i].editing = false;\n        }\n      } else {\n        vm.order.payments = [];\n      }\n      if (vm.newPayment) {\n        vm.newPayment = false;\n        vm.order.payments.pop();\n      }\n\n    }\n\n    function editPayment(payment) {\n      cancelAllPaymentsEditing();\n\n      payment.editing = true;\n      vm.globalEditMode = true;\n    }\n\n    function updateOrderKPIs(payment) {\n      $scope.purchaseOrder.total_amount = payment.purchase_order_total_amount;\n      $scope.purchaseOrder.pending_amount = payment.purchase_order_pending_amount;\n      $scope.purchaseOrder.pending_payments = payment.purchase_order_pending_payments;\n      $scope.purchaseOrder.paid_payments = payment.purchase_order_paid_payments;\n\n      vm.order.total_amount = payment.purchase_order_total_amount;\n      vm.order.pending_amount = payment.purchase_order_pending_amount;\n      vm.order.pending_payments = payment.purchase_order_pending_payments;\n      vm.order.paid_payments = payment.purchase_order_paid_payments;\n    }\n\n    //if (Session.hasPermission('app.inventory.purchases.purchase.payments.create')) {\n    function savePayment(payment) {\n      vm.globalEditMode = false;\n      vm.saving = true;\n      vm.temporalPayment = angular.copy(payment);\n\n      if (vm.temporalPayment.status == null) {\n        vm.temporalPayment.status = PURCHASE_ORDER_PAYMENT_STATUSES.PURCHASE_ORDER_PAYMENT_STATUS_PENDING;\n      }\n\n      vm.temporalPayment[vm.orderType] = vm.order.id;\n\n      if (payment.id && Session.hasPermission('app.inventory.purchases.purchase.payments.update')) {\n        api.accounting.payments.update(\n          vm.temporalPayment,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              for (var i = 0; i < vm.order.payments.length; i++) {\n                if (vm.order.payments[i].id === vm.temporalPayment.id) {\n                  vm.order.payments[i] = response;\n                  break;\n                }\n              }\n              if (vm.orderType == ORDER_TYPES.PURCHASE_ORDER) {\n                vm.updateOrderKPIs(response);\n              }\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n            } else {\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n      if (!payment.id && Session.hasPermission('app.inventory.purchases.purchase.payments.create')) {\n        api.accounting.payments.save(\n          vm.temporalPayment,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              vm.order.payments.pop();\n              vm.order.payments.push(response);\n\n              if (vm.orderType == ORDER_TYPES.PURCHASE_ORDER) {\n                vm.updateOrderKPIs(response);\n              }\n              payment.editing = false;\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n            } else {\n              vm.saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n      vm.newPayment = false;\n    }\n\n    function cancelPayment() {\n      vm.globalEditMode = false;\n      cancelAllPaymentsEditing();\n    }\n\n    function addPayment() {\n      cancelAllPaymentsEditing();\n      vm.newPayment = true;\n      vm.globalEditMode = true;\n      vm.order.payments.push(newPayment());\n    }\n\n    function newPayment() {\n      vm.searchText = \"\";\n      return {\n        id: null,\n        payment_method: null,\n        amount: null,\n        date: null,\n        invoice_instance: null,\n        status: null,\n        order: vm.order.id,\n        editing: true\n      };\n    }\n\n    function deletePayment(payment) {\n      if (Session.hasPermission('app.inventory.purchases.purchase.payments.delete')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PURCHASES.DELETE_PAYMENT_TITLE'))\n          .htmlContent($filter('translate')('PURCHASES.DELETE_PAYMENT_MESSAGE', {\n            payment_method: payment.payment_method_instance.name,\n            amount: $filter('price')(payment.amount),\n            currency: $filter('currencyCharacter')(vm.session.company.currency)\n          }))\n          .parent(angular.element(document.body))\n          .clickOutsideToClose(true)\n          .ok($filter('translate')('STOCKTAKING.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          api.accounting.payments.delete(\n            { id: payment.id },\n            function(response, callback, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                for (var i = 0; i < vm.order.payments.length; i++) {\n                  if (vm.order.payments[i].id === payment.id) {\n                    vm.order.payments.splice(i, 1);\n                    break;\n                  }\n                }\n\n                if (vm.orderType == ORDER_TYPES.PURCHASE_ORDER) {\n                  vm.updateOrderKPIs(response);\n                }\n                vm.saving = false;\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                vm.saving = false;\n              }\n            }\n          );\n        }, function() {\n          vm.saving = false;\n        });\n      }\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('CostPricesDialogController', CostPricesDialogController);\n\n  /** @ngInject */\n  function CostPricesDialogController($scope,\n                                      $mdDialog,\n                                      $mdToast,\n                                      $filter,\n                                      $window,\n                                      $compile,\n                                      $timeout,\n                                      api,\n                                      HTTP_STATUS,\n                                      costProductPrices,\n                                      DTColumnBuilder,\n                                      Session,\n                                      $document) {\n    var vm = this;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n\n    // Data\n    vm.ddp_price_table = {};\n    vm.costProductPrices = costProductPrices.new_cost_product_prices;\n    vm.session = Session;\n    var currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    var unitString = $filter('translate')('PURCHASE.UNITS');\n\n    vm.datatableReady = false;\n    vm.purchaseOrderDelivery = costProductPrices.delivery_id;\n    vm.showConfirmAction = false;\n    vm.showCancelAction = false;\n    vm.dtOptions = {};\n    vm.dtInstance = {};\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('product_code').withTitle($filter('translate')('PRODUCT.PRODUCT'))\n        .renderWith(function(data, type, full) {\n          var result = '';\n          result += '<div layout=\"row\">';\n          result += '<div layout=\"row\">';\n          if (full.product_cover_thumbnail) {\n            result += '<img class=\"thumbnail-40 mr-5\" src=\"' + full.product_cover_thumbnail + '\">';\n          }\n          result += '</div>';\n          result += '<div layout=\"row\" layout-align=\"start center\">';\n          result += '<div layout=\"column\" layout-align=\"start start\">';\n          result += '<div layout=\"row\" layout-align=\"start start\">';\n          result += '<a ui-sref=\"app.inventory.products.product.overview({id:' + full.product_id + '})\" target=\"_blank\">';\n          result += '<span>' + data;\n          result += '<md-tooltip>{{\"PURCHASE.NEW_WINDOW_PRODUCT_TOOLTIP\" | translate }}</md-tooltip>';\n          result += '<md-icon md-font-icon=\"icon-open-in-new\" class=\"s16 ml-5 mb-5 md-primary\">';\n          result += '</md-icon>';\n          result += '</span>';\n          result += '</a>';\n          result += '<span class=\"text-name mr-10\">' + '· ' + full.product_name + ' </span>';\n          result += '</div>';\n          result += '<div layout=\"row\" layout-align=\"start start\">';\n          result += '<small>' + full.brand_name + ' ' + full.category_name + ' ' + full.subcategory_name + '</small>';\n          result += '</div>';\n          result += '</div>';\n          result += '</div>';\n          result += '</div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('product_code').withTitle($filter('translate')('PURCHASE.ACTUAL_STOCK'))\n        .renderWith(function(data, type, full) {\n          var result = '';\n          result += '<div layout=\"column\" layout-align=\"start start\">';\n          result += '<span>' + full.current_stock + ' {{ \"PURCHASE.UNITS\" | translate }}</span>';\n          if (full.current_cost_price) {\n            result += '<span>' + $filter('number')(full.current_cost_price, 6) + ' ' + currencyCharacter + '</span>';\n          } else {\n            result += '<div layout=\"row\" layout-align=\"start center\">';\n            result += '<md-icon md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\" class=\"yellow-fg s16\"></md-icon>';\n            result += '<md-tooltip md-direction=\"bottom\">{{ \"PURCHASE.WITHOUT_COST_TOOLTIP\" | translate }}</md-tooltip>';\n            result += '<em class=\"alert-text\">{{ \"PURCHASE.WITHOUT_COST\" | translate }}</em>';\n            result += '</div>';\n          }\n          result += '</div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('purchased_stock').withTitle($filter('translate')('PURCHASE.PURCHASE_STOCK'))\n        .renderWith(function(data, type, full) {\n          var result = '';\n          result += '<div layout=\"column\" layout-align=\"start start\">';\n          result += '<span>' + data + ' ' + unitString + '</span>';\n          result += '<span>' + $filter('number')(full.purchased_cost_price, 6) + ' ' + currencyCharacter + '</span>';\n          result += '</div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('').withOption('sortable', false)\n        .renderWith(function(data, type, full) {\n          var result = '<md-icon md-font-icon=\"icon-arrow-right\"></md-icon>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('product_code').withTitle($filter('translate')('PURCHASE.WEIGHTED_AVERAGE_PRICE'))\n        .renderWith(function(data, type, full) {\n          var result = '';\n          result += '<div layout=\"column\" layout-align=\"start start\">';\n          result += '<span>' + full.new_stock + ' ' + unitString + '</span>';\n          result += '<span>' + $filter('number')(full.new_cost_price, 6) + ' ' + currencyCharacter + '</span>';\n          result += '</div>';\n          return result;\n        })\n    ];\n\n    $scope.data = vm.costProductPrices;\n\n    //init\n    init();\n\n    //Functions\n    function init() {\n      $timeout(function() {\n        // Init the local paginated datatable in a timeout to avoid layout errors during the opening of the dialog\n        initDatatableOptions();\n      }, 500);\n    }\n\n    function initDatatableOptions() {\n      vm.dtOptions = {\n        data: vm.costProductPrices,\n        rowId: 'id',\n        dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n        autoWidth: false,\n        createdRow: createdRow,\n        pagingType: 'full_numbers',\n        lengthMenu: [1, 10, 25, 50, 100],\n        pageLength: 10,\n        scrollY: 'true',\n        responsive: false,\n        serverSide: false,\n        processing: true,\n        searchDelay: 750,\n        stateSave: false\n      };\n      vm.datatableReady = true;\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if (vm.saving) {\n        return;\n      }\n      vm.saving = true;\n      $mdDialog.hide();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PurchasePrintCatalogDialogController', PurchasePrintCatalogDialogController);\n\n  /** @ngInject */\n  function PurchasePrintCatalogDialogController($mdDialog, $mdToast, $filter, $document, api, Session, params, HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.data = {};\n    vm.productsPerPageOptions = [1,2,3,4,5];\n    vm.isSaleOrder = angular.isDefined(params.isSaleOrder) ? params.isSaleOrder : false;\n\n    // Functions\n    vm.print = print;\n    vm.cancel = cancel;\n    vm.init = init;\n\n    // Initialization\n    init();\n\n    function init(){\n      if (localStorage.getItem(Session.company.id + '::' + Session.user.id + '::filtersPurchaseOrderPrintCatalogController')){\n        vm.data = JSON.parse(localStorage.getItem(Session.company.id + '::' + Session.user.id + '::filtersPurchaseOrderPrintCatalogController'));\n      }\n      else{\n        vm.data ={\n          showPrice: false,\n          showOriginCode: false,\n          showTotals: false,\n          showProductDescription: false,\n          productsPerPage: 2\n        }\n      }\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function print() {\n      $mdDialog.hide(vm.data);\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PurchasePrintDialogController', PurchasePrintDialogController);\n\n  /** @ngInject */\n  function PurchasePrintDialogController($mdDialog, $mdToast, $filter, $document, api, Session, HTTP_STATUS, defEmail) {\n\n    // TODO unify this dialog with the same for sales\n    var vm = this;\n\n    // Data\n    vm.printType = 'products';\n    vm.printPrices = false;\n    vm.printOriginCodes = false;\n    vm.printImages = false;\n    vm.pricingTiers = [];\n    vm.pricingTier = null;\n    vm.sendEmail = false;\n    vm.emailTo = defEmail;\n\n    //Header Product Options\n    vm.showBrand = false;\n    vm.showHsCode = false;\n    vm.showComposition = false;\n    vm.showAttributes = false;\n\n    // Functions\n    vm.print = print;\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.changePrintType = changePrintType;\n    vm.printSalePricesChanged = printSalePricesChanged;\n\n    // Initialization\n    initialize();\n\n    function initialize() {\n      api.inventories.pricingTiers.get(function(response) {\n        vm.pricingTiers = response.results;\n      });\n      var savedPrintType = localStorage.getItem(Session.company.id + '::printTypePurchasePrintDialogController');\n      if (savedPrintType) {\n        vm.printType = savedPrintType;\n      }\n    }\n\n    function changePrintType() {\n      localStorage.setItem(Session.company.id + '::printTypePurchasePrintDialogController', vm.printType);\n    }\n\n    function printSalePricesChanged() {\n      if (vm.printSalePrices) {\n        vm.printPrices = true;\n      }\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function print() {\n      $mdDialog.hide({\n        print: vm.printType,\n        prices: vm.printPrices,\n        pricingTier: vm.pricingTier,\n        originCodes: vm.printOriginCodes,\n        images: vm.printImages,\n        sendEmail: vm.sendEmail,\n        emailTo: vm.sendEmail ? vm.emailTo : null,\n        brand: vm.showBrand,\n        hs_code: vm.showHsCode,\n        composition: vm.showComposition,\n        attributes: vm.showAttributes\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LinkWithInvoiceController', LinkWithInvoiceController);\n\n  /** @ngInject */\n  function LinkWithInvoiceController($scope, $state, HTTP_STATUS, INVOICE_TYPES, $mdToast, $mdDialog, $q, $timeout, $compile, api, SEARCH_MAX_LENGTH,\n                                     $translate, Session, DTColumnBuilder, $filter, url, deliveries, purchaseOrder) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Methods\n    vm.linkOrCreateInvoice = linkOrCreateInvoice;\n    vm.cancel = cancel;\n    vm.toggle = toggle;\n    vm.exists = exists;\n\n    vm.search = \"\";\n    vm.selectedDelivery = null;\n    vm.invoice = '';\n    vm.dtInstance = {};\n    vm.deliveries = deliveries;\n    vm.purchaseOrder = purchaseOrder;\n    vm.url = url;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: url,\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          if (purchaseOrder) {\n            d.purchase_order = vm.purchaseOrder.id;\n          }\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 5,\n      // scrollY: true,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = createDtColumns();\n\n    function createDtColumns() {\n      var dtColumns = [];\n      dtColumns = [\n        DTColumnBuilder.newColumn('select')\n          .withTitle('').notSortable().withOption('className', 'checkbox').withOption('searchable', false).withOption('orderable', false)\n          .withOption('sortable', false).withOption('width', '20px').renderWith(function(data, type, full) {\n          var checked = exists(full.id);\n          if (checked) {\n            return '<input type=\"radio\" class=\"m-0 md-checked\" ng-model=\"vm.invoice\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></input>';\n          }\n          return '<input type=\"radio\" class=\"m-0\" ng-model=\"vm.invoice\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></input>';\n        }),\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('INVOICE.REFERENCE'))\n          .renderWith(function(data, type, full) {\n            return data ? data : '-';\n          }),\n        DTColumnBuilder.newColumn('total_incl_tax').withTitle($filter('translate')('PURCHASE.TOTAL'))\n          .renderWith(function(data, type, full) {\n            return data ? data + ' ' + $filter('currencyCharacter')(Session.company.currency) : '-';\n          }),\n        DTColumnBuilder.newColumn('expiration_date').withTitle($filter('translate')('PURCHASE.PAYMENT_EXPIRATION'))\n          .renderWith(function(data, type, full) {\n            return data ? $filter('date')(data, 'dd-MM-yyyy') + '<md-tooltip md-direction=\"bottom\">' + $filter('translate')('PURCHASE.INVOICE_PAYMENT_EXPIRATION_DATE') + '</md-tooltip>' : '-';\n          })\n      ];\n\n      return dtColumns;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      return nRow;\n    }\n\n    function initComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#invoice-search-input');\n\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.columns.adjust();\n\n        // Bind an external input as a table wide search box\n        if (searchBox.length > 0) {\n          searchBox.on('keyup', function(event) {\n            if ($scope.timeout) {\n              $timeout.cancel($scope.timeout);\n            }\n            $scope.timeout = $timeout(function() {\n              var input = event.target.value;\n              var regex = false;\n              var smart = false;\n              var caseInsen = true;\n              api.search(input, regex, smart, caseInsen).draw();\n            }, 500);\n          });\n        }\n      }\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function linkOrCreateInvoice(invoice) {\n      var requestData = {\n        purchase_order: vm.purchaseOrder.id,\n        deliveries: vm.deliveries,\n        option: 'link-or-create-invoice'\n      };\n\n      if (invoice) {\n        requestData.invoice = invoice;\n      }\n\n      if (Session.hasPermission('app.inventory.purchases.purchase.invoices.create')) {\n        api.inventories.purchaseOrderDeliveriesLinkToInvoices.update(requestData,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdDialog.hide(response);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      } else {\n        $mdDialog.hide();\n      }\n\n    }\n\n    function exists(item) {\n      return vm.invoice == item;\n    }\n\n    function toggle(item) {\n      vm.invoice = vm.invoice == item ? '' : item;\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportSaleOrdersDialogController', ImportSaleOrdersDialogController);\n\n  /** @ngInject */\n  function ImportSaleOrdersDialogController($scope, $mdDialog, $compile, $mdToast, $filter, $translate,\n      DTColumnBuilder, $document, $timeout, api, Session, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.selected = [];\n    vm.orderStatuses = SALE_ORDER_STATUSES;\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.dtInstance = {};\n    vm.search = '';\n\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.inventories.saleOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      headerCallback: headerCallback,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [10, 25, 50, 100],\n      pageLength  : 25,\n      //scrollY     : 'auto',\n      autoWidth : false,\n      responsive: true,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n        DTColumnBuilder.newColumn('select')\n          .withOption('className', 'checkbox')\n          .renderWith(function (data, type, full) {\n            return '<md-checkbox class=\"m-0\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></md-checkbox>';\n        }),\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('SALE.SERIAL_NUMBER')),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('SALE.STATUS')).renderWith(function (data, type, full) {\n          return '<span class=\"status ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('SALES.' + SALE_ORDER_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('customer_name').withTitle($filter('translate')('SALE.CONTACT')),\n        DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('SALE.CREATION_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        /*DTColumnBuilder.newColumn('start_date').withTitle($filter('translate')('SALE.START_SHIPPING_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('cancel_date').withTitle($filter('translate')('SALE.CANCEL_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),*/\n        DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('SALES.ITEMS')),\n        DTColumnBuilder.newColumn('subtotal').withTitle($filter('translate')('SALES.SUBTOTAL'))\n      ];\n\n    // Methods\n    vm.accept = accept;\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.toggle = toggle;\n    vm.exists = exists;\n    vm.selectAll = selectAll;\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n\n    function initialize(){\n\n    }\n\n    // Functions\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function headerCallback(header) {\n      if (!vm.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        vm.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      return nRow;\n    }\n\n    function initComplete()\n    {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#sale-order-search-input');\n\n      // Bind an external input as a table wide search box\n      if ( searchBox.length > 0 )\n      {\n        searchBox.on('keyup', function (event)\n        {\n          var vm = $scope.vm;\n\n          if(vm.timeout){\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function(){\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggle(item) {\n      var idx = vm.selected.indexOf(item);\n      if (idx > -1) {\n        vm.selected.splice(idx, 1);\n      }\n      else {\n        vm.selected.push(item);\n      }\n    }\n\n    function exists(item) {\n      return vm.selected.indexOf(item) > -1;\n    }\n\n    function selectAll() {\n      if (vm.selected.length) {\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      } else {\n        vm.dtInstance.DataTable.rows().data().map(function (preorder) {\n          vm.selected.push(preorder.id);\n        });\n      }\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function accept() {\n      $mdDialog.hide(vm.selected);\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportPurchaseOrderDeliveryProductsDialogController', ImportPurchaseOrderDeliveryProductsDialogController);\n\n  /** @ngInject */\n  function ImportPurchaseOrderDeliveryProductsDialogController(\n    $mdDialog,\n    $mdToast,\n    $filter,\n    $document,\n    api,\n    Session,\n    deliveryId,\n    isUid\n  ) {\n\n    var vm = this;\n\n    // Data\n    vm.fileLoaded = false;\n    vm.ngFlow = { flow: {} };\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      allowDuplicateUploads: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.purchase_order_products = [];\n    vm.filename = null;\n    vm.isUid = isUid;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n\n    // Functions\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n      vm.filename = file.name;\n    }\n\n    function uploadFile(save) {\n      var url = api.urls.inventories.purchaseOrderDeliveries;\n      url = url.replace(':id', deliveryId) + 'import';\n      if (isUid) {\n        url = url + '-uids';\n      }\n\n      vm.ngFlow.flow.opts.headers = { 'Authorization': 'Token ' + Session.token };\n      vm.ngFlow.flow.opts.target = url;\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.loading = true;\n      vm.ngFlow.flow.upload();\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.loading = false;\n      $mdDialog.hide(response);\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportPurchaseProductsDialogController', ImportPurchaseProductsDialogController);\n\n  /** @ngInject */\n  function ImportPurchaseProductsDialogController($mdDialog, $mdToast, $filter, $document, api, Session, purchaseId) {\n\n    var vm = this;\n\n    // Data\n    vm.fileLoaded = false;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      allowDuplicateUploads: true,\n      //singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.purchase_order_products = [];\n    vm.filename = null;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n\n    // Functions\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n      vm.filename = file.name;\n      //vm.fileCopy = new File([file], file.name, { type: file.type });\n    }\n\n    function uploadFile(save) {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      vm.ngFlow.flow.opts.target = api.urls.inventories.purchaseOrderProductsImport;\n      vm.ngFlow.flow.opts.query = {purchase: purchaseId};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.loading = true;\n      vm.ngFlow.flow.upload();\n      //}\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.loading = false;\n      $mdDialog.hide(response);\n      //vm.purchase_order_products = JSON.parse(response).purchase_order_products;\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ChangeProviderController', ChangeProviderController);\n\n  /** @ngInject */\n  function ChangeProviderController($scope, $state, HTTP_STATUS, INVOICE_TYPES, $mdToast, $mdDialog, $q, $timeout, $compile, api, SEARCH_MAX_LENGTH,\n                                     $translate, Session, DTColumnBuilder, $filter, purchaseOrder, provider_id) {\n\n    var vm = this;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n\n\n    function save(overWriteNewProviderPrices) {\n      api.inventories.purchaseOrders.save({\n            option: 'change-purchase-order-provider-prices',\n            id: purchaseOrder.id,\n            overwrite_new_provider_prices: overWriteNewProviderPrices,\n            provider_id: provider_id\n      },function (results, fn, status) {\n        var toastText = '';\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          toastText = 'GENERAL.ERROR_TOAST';\n        } else {\n          toastText = 'SALE.PRICES_UPDATED';\n        }\n        $mdToast.show($mdToast.simple().textContent($filter('translate')(toastText)).position('top right'));\n        $mdDialog.hide();\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DeliveryPurchaseController', DeliveryPurchaseController);\n\n  /** @ngInject */\n  function DeliveryPurchaseController($scope, $state, HTTP_STATUS, INVOICE_TYPES, $mdToast, $mdDialog) {\n\n    var vm = this;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    function save() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('BindInvoiceToOrderController', BindInvoiceToOrderController);\n\n  /** @ngInject */\n  function BindInvoiceToOrderController($scope,\n                                        $state,\n                                        HTTP_STATUS,\n                                        INVOICE_TYPES,\n                                        $mdToast,\n                                        $mdDialog,\n                                        $q,\n                                        $timeout,\n                                        $compile,\n                                        api,\n                                        SEARCH_MAX_LENGTH,\n                                        $translate,\n                                        Session,\n                                        DTColumnBuilder,\n                                        $filter,\n                                        url,\n                                        order,\n                                        order_type,\n                                        hasInvoices,\n                                        orderId) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Methods\n    vm.linkOrCreateInvoice = linkOrCreateInvoice;\n    vm.cancel = cancel;\n    vm.toggle = toggle;\n    vm.exists = exists;\n\n    vm.search = '';\n    vm.selectedDelivery = null;\n    vm.invoice = '';\n    vm.dtInstance = {};\n    vm.order = order;\n    vm.order_type = order_type;\n    vm.url = url;\n    vm.orderId = orderId;\n    vm.hasInvoices = !!hasInvoices;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: url,\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          if (vm.order_type === 'PurchaseOrder') {\n            d.purchase_order = vm.order.id;\n          } else if (vm.order_type === 'SaleOrderDelivery') {\n            d.sale_order = vm.orderId;\n          }\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 5,\n      // scrollY: true,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = createDtColumns();\n\n    function createDtColumns() {\n      var dtColumns = [];\n      dtColumns = [\n        DTColumnBuilder.newColumn('select')\n          .withTitle('').notSortable().withOption('className', 'checkbox').withOption('searchable', false).withOption('orderable', false)\n          .withOption('sortable', false).withOption('width', '20px').renderWith(function(data, type, full) {\n          var checked = exists(full.id);\n          if (checked) {\n            return '<input type=\"radio\" class=\"m-0 md-checked\" ng-model=\"vm.invoice\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></input>';\n          }\n          return '<input type=\"radio\" class=\"m-0\" ng-model=\"vm.invoice\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></input>';\n        }),\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('INVOICE.REFERENCE'))\n          .renderWith(function(data, type, full) {\n            return data ? data : '-';\n          }),\n        DTColumnBuilder.newColumn('total_incl_tax').withTitle($filter('translate')('PURCHASE.TOTAL'))\n          .renderWith(function(data, type, full) {\n            return data ? data + ' ' + $filter('currencyCharacter')(Session.company.currency) : '-';\n          }),\n        DTColumnBuilder.newColumn('expiration_date').withTitle($filter('translate')('PURCHASE.PAYMENT_EXPIRATION'))\n          .renderWith(function(data, type, full) {\n            return data ? $filter('date')(data, 'dd-MM-yyyy') + '<md-tooltip md-direction=\"bottom\">' + $filter('translate')('PURCHASE.INVOICE_PAYMENT_EXPIRATION_DATE') + '</md-tooltip>' : '-';\n          })\n      ];\n\n      return dtColumns;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      return nRow;\n    }\n\n    function initComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#invoice-search-input');\n\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.columns.adjust();\n\n        // Bind an external input as a table wide search box\n        if (searchBox.length > 0) {\n          searchBox.on('keyup', function(event) {\n            if ($scope.timeout) {\n              $timeout.cancel($scope.timeout);\n            }\n            $scope.timeout = $timeout(function() {\n              var input = event.target.value;\n              var regex = false;\n              var smart = false;\n              var caseInsen = true;\n              api.search(input, regex, smart, caseInsen).draw();\n            }, 500);\n          });\n        }\n      }\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function linkOrCreateInvoice(invoiceId) {\n      var requestData = {\n        order_id: vm.order.id,\n        order_type: vm.order_type,\n        option: 'bind-or-create-invoice-to-order-delivery'\n      };\n\n      if (invoiceId) {\n        requestData.invoice_id = invoiceId;\n      }\n\n      if (Session.hasPermission('app.inventory.purchases.purchase.invoices.create')) {\n        api.inventories.order.save(requestData,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdDialog.hide(response);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      } else {\n        $mdDialog.hide();\n      }\n\n    }\n\n    function exists(item) {\n      return vm.invoice == item;\n    }\n\n    function toggle(item) {\n      vm.invoice = vm.invoice == item ? '' : item;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductsFiltersController', ndProductsFiltersController)\n    .directive('ndProductsFilters', ndProductsFilters);\n\n  /** @ngInject */\n  function ndProductsFilters() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        onFiltersChange: '&'\n      },\n      controller: 'ndProductsFiltersController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/products/directives/nd-products-filters/nd-products-filters.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndProductsFiltersController($scope, $timeout, $rootScope, $filter, $mdToast, $q, $document, api, HTTP_STATUS, STOCK_FILTER_STATES, VISIBLE_IN_ECOMMERCE_FILTER_STATES, DISCOUNT_PRICE_FILTER_STATES, CONTACT_TYPES_REVERSE, UiGridService, Utils) {\n\n    // Data\n    var vm = this;\n\n    vm.brands = [];\n    vm.categories = [];\n    vm.subcategories = [];\n    vm.seasons = [];\n    vm.compositions = [];\n    vm.sites = [];\n    vm.TYPE_SIZE = 'size';\n    vm.TYPE_COLOR = 'color';\n    vm.WEB_CATEGORY = 'webCategory';\n    vm.TYPE_PROVIDER = 'provider';\n    vm.TYPE_PURCHASE = 'purchase';\n    vm.TYPE_COLLECTION = 'collection';\n    vm.WITH_BARCODE_FILTER = '1';\n    vm.WITHOUT_BARCODE_FILTER = '2';\n    vm.WITH_SKU_FILTER = '1';\n    vm.WITHOUT_SKU_FILTER = '2';\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n\n    vm.stockDict = {\n      ONLY_PRODUCTS_IN_STOCK: STOCK_FILTER_STATES.ONLY_PRODUCTS_IN_STOCK,\n      ONLY_PRODUCTS_NOT_IN_STOCK: STOCK_FILTER_STATES.ONLY_PRODUCTS_NOT_IN_STOCK\n    };\n    vm.visibleInEcommerceDict = {\n      ONLY_PRODUCTS_VISIBLE_IN_ECOMMERCE: VISIBLE_IN_ECOMMERCE_FILTER_STATES.ONLY_PRODUCTS_VISIBLE_IN_ECOMMERCE,\n      ONLY_PRODUCTS_NOT_VISIBLE_IN_ECOMMERCE: VISIBLE_IN_ECOMMERCE_FILTER_STATES.ONLY_PRODUCTS_NOT_VISIBLE_IN_ECOMMERCE\n    };\n    vm.discountPriceDict = {\n      ONLY_PRODUCTS_WITH_DISCOUNT_PRICE: DISCOUNT_PRICE_FILTER_STATES.ONLY_PRODUCTS_WITH_DISCOUNT_PRICE,\n      ONLY_PRODUCTS_WITH_NO_DISCOUNT_PRICE: DISCOUNT_PRICE_FILTER_STATES.ONLY_PRODUCTS_WITH_NO_DISCOUNT_PRICE\n    };\n\n    vm.sizeSearchText = '';\n    vm.selectedSize = null;\n    vm.colorSearchText = '';\n    vm.selectedColor = null;\n    vm.webCategorySearchText = '';\n    vm.selectedWebCategory = null;\n    vm.providerSearchText = '';\n    vm.purchaseSearchText = '';\n    vm.collectionSearchText = '';\n    vm.selectedProvider = null;\n    vm.selectedPurchase = null;\n    vm.selectedCollection = null;\n    vm.productCreatedDateRange = null;\n    vm.productUpdatedDateRange = null;\n    vm.productPriceUpdatedDateRange = null;\n\n    // Methods\n    vm.filtersChanged = filtersChanged;\n    vm.enableBarcodeListener = enableBarcodeListener;\n    vm.disableBarcodeListener = disableBarcodeListener;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.updateMultiselectFilters = updateMultiselectFilters;\n    vm.filterCategory = filterCategory;\n    vm.variantQuerySearch = variantQuerySearch;\n    vm.providerQuerySearch = providerQuerySearch;\n    vm.purchaseQuerySearch = purchaseQuerySearch;\n    vm.collectionQuerySearch = collectionQuerySearch;\n    vm.webCategoryQuerySearch = webCategoryQuerySearch;\n    vm.setDateRangeFilters = setDateRangeFilters;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      initializeDateRanges();\n\n      $scope.updateFiltersWatcher = $scope.$on('ndProductsFilters::updateFilters', updateFilterNotifications);\n      $scope.$on('$destroy', function() {\n        $scope.updateFiltersWatcher();\n      });\n\n      $scope.clearFiltersWatcher = $scope.$on('ndProductsFilters::clearFilters', clearFilter);\n      $scope.$on('$destroy', function() {\n        $scope.clearFiltersWatcher();\n      });\n\n      vm.statusLoadedWatcher = $scope.$on('ndGrid::statusLoaded', loadStatus);\n      $scope.$on('$destroy', function() {\n        vm.statusLoadedWatcher();\n      });\n\n      api.inventories.seasons.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.seasons = results.results;\n        }\n      });\n\n      api.inventories.brands.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.brands = results.results;\n        }\n      });\n\n      api.inventories.compositions.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.compositions = results.results;\n        }\n      });\n\n      api.inventories.categories.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.categories = results.results;\n        }\n      });\n\n      api.inventories.subcategories.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.subcategories = results.results;\n        }\n      });\n\n      api.ecommerce.sites.list({}, function(results, fn, status, message) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.sites = results.results;\n        }\n      });\n\n      updateFilterNotifications();\n      updateFiltersParam();\n    }\n\n    function initializeDateRanges() {\n      vm.productCreatedDateRange = {\n        dateStart: null,\n        dateEnd: null,\n        showClear: true,\n        format: function(dateStart, dateEnd) {\n          if (dateStart && dateEnd) {\n            return moment(dateStart).format('DD/MM/YYYY') + ' - ' + moment(dateEnd).format('DD/MM/YYYY');\n          }\n          return $filter('translate')('PRODUCT.FILTER_BY_CREATION_DATE');\n        }\n      };\n      vm.productUpdatedDateRange = {\n        dateStart: null,\n        dateEnd: null,\n        showClear: true,\n        format: function(dateStart, dateEnd) {\n          if (dateStart && dateEnd) {\n            return moment(dateStart).format('DD/MM/YYYY') + ' - ' + moment(dateEnd).format('DD/MM/YYYY');\n          }\n          return $filter('translate')('PRODUCT.FILTER_BY_UPDATE_DATE');\n        }\n      };\n      vm.productPriceUpdatedDateRange = {\n        dateStart: null,\n        dateEnd: null,\n        showClear: true,\n        format: function(dateStart, dateEnd) {\n          if (dateStart && dateEnd) {\n            return moment(dateStart).format('DD/MM/YYYY') + ' - ' + moment(dateEnd).format('DD/MM/YYYY');\n          }\n          return $filter('translate')('PRODUCT.FILTER_BY_PRICE_UPDATE_DATE');\n        }\n      };\n\n      $scope.$watch('vm.productCreatedDateRange.dateStart', function(newValue, oldValue) {\n        if (newValue === null && vm.filtersStatusInitialized) {\n          setDateRangeFilters();\n        }\n      });\n      $scope.$watch('vm.productUpdatedDateRange.dateStart', function(newValue, oldValue) {\n        if (newValue === null && vm.filtersStatusInitialized) {\n          setDateRangeFilters();\n        }\n      });\n      $scope.$watch('vm.productPriceUpdatedDateRange.dateStart', function(newValue, oldValue) {\n        if (newValue === null && vm.filtersStatusInitialized) {\n          setDateRangeFilters();\n        }\n      });\n    }\n\n    function filtersChanged() {\n      if (!vm.filtersStatusInitialized) {\n        return;\n      }\n      updateFilterNotifications();\n      updateFiltersParam();\n      if (vm.onFiltersChangeDebounceTimer) {\n        $timeout.cancel(vm.onFiltersChangeDebounceTimer);\n      }\n      vm.onFiltersChangeDebounceTimer = $timeout(function() {\n        $scope.onFiltersChange();\n      }, 1000);\n    }\n\n    function enableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = true;\n    }\n\n    function disableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = false;\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function updateMultiselectFilters(filter) {\n      if (filter === vm.TYPE_SIZE && vm.selectedSize) {\n        $scope.status.filters.sizes.push(angular.copy(vm.selectedSize));\n        vm.selectedSize = null;\n        vm.sizeSearchText = '';\n      } else if (filter === vm.TYPE_COLOR && vm.selectedColor) {\n        $scope.status.filters.colors.push(angular.copy(vm.selectedColor));\n        vm.selectedColor = null;\n        vm.colorSearchText = '';\n      } else if (filter === vm.WEB_CATEGORY && vm.selectedWebCategory) {\n        $scope.status.filters.webCategories.push(angular.copy(vm.selectedWebCategory));\n        vm.selectedColor = null;\n        vm.webCategorySearchText = '';\n      } else if (filter === vm.TYPE_PROVIDER && vm.selectedProvider) {\n        $scope.status.filters.providers.push(angular.copy(vm.selectedProvider));\n        vm.selectedProvider = null;\n        vm.providerSearchText = '';\n      } else if (filter === vm.TYPE_PURCHASE && vm.selectedPurchase) {\n        $scope.status.filters.purchases.push(angular.copy(vm.selectedPurchase));\n        vm.selectedPurchase = null;\n        vm.purchaseSearchText = '';\n      } else if (filter === vm.TYPE_COLLECTION && vm.selectedCollection) {\n        $scope.status.filters.collections.push(angular.copy(vm.selectedCollection));\n        vm.selectedCollection = null;\n        vm.collectionSearchText = '';\n      }\n\n      vm.filtersChanged();\n    }\n\n    function filterCategory(params) {\n      if ($scope.status.filters.categories.length === 0) {\n        return true;\n      }\n      for (var i = 0; i < $scope.status.filters.categories.length; i++) {\n        if (params.category.id === $scope.status.filters.categories[i]) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    function variantQuerySearch(type) {\n      var deferred = $q.defer();\n      var searchText = '';\n      if (type === vm.TYPE_SIZE) {\n        searchText = vm.sizeSearchText;\n      } else if (type === vm.TYPE_COLOR) {\n        searchText = vm.colorSearchText;\n      }\n\n      searchText = searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.variants.get({\n        autocomplete: type, search: searchText, 'serializer': 'VariantFullSerializer'\n      }, function(results) {\n        if (results.results) {\n          var variants = type === vm.TYPE_SIZE ? $scope.status.filters.sizes : $scope.status.filters.colors;\n          var variantIds = variants.map(function(variant) {\n            return variant.id;\n          });\n          deferred.resolve(results.results.filter(function(variant) {\n            return variantIds.indexOf(variant.id) === -1;\n          }));\n        } else {\n          deferred.resolve([]);\n        }\n      });\n      return deferred.promise;\n    }\n\n    function providerQuerySearch() {\n      var deferred = $q.defer();\n      vm.providerSearchText = vm.providerSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get({\n        search: vm.providerSearchText, type: CONTACT_TYPES_REVERSE.CONTACT_TYPE_PROVIDER\n      }, function(results) {\n        if (results.results) {\n          var providerIds = $scope.status.filters.providers.map(function(provider) {\n            return provider.id;\n          });\n          deferred.resolve(results.results.filter(function(provider) {\n            return providerIds.indexOf(provider.id) === -1;\n          }));\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function purchaseQuerySearch() {\n      var deferred = $q.defer();\n      vm.purchaseSearchText = vm.purchaseSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.purchaseOrders.get({\n        search: vm.purchaseSearchText,\n        pagination: 'pagination'\n      }, function(results) {\n\n        if (results.results) {\n          if (angular.isUndefined($scope.status.filters.purchases)) {\n            $scope.status.filters.purchases = [];\n          }\n          var purchaseIds = $scope.status.filters.purchases.map(function(purchase) {\n            return purchase.id;\n          });\n          deferred.resolve(results.results.filter(function(purchase) {\n            return purchaseIds.indexOf(purchase.id) === -1;\n          }));\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function collectionQuerySearch() {\n      var deferred = $q.defer();\n      vm.collectionSearchText = vm.collectionSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.manufactures.collections.list({\n        search: vm.collectionSearchText,\n        pagination: 'pagination'\n      }, function(results) {\n\n        if (results.results) {\n          if (angular.isUndefined($scope.status.filters.collections)) {\n            $scope.status.filters.collections = [];\n          }\n          var collectionIds = $scope.status.filters.collections.map(function(collection) {\n            return collection.id;\n          });\n          deferred.resolve(results.results.filter(function(collection) {\n            return collectionIds.indexOf(collection.id) === -1;\n          }));\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function webCategoryQuerySearch() {\n      var deferred = $q.defer();\n      vm.webCategorySearchText = vm.webCategorySearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.ecommerce.categories.get({\n        search: vm.webCategorySearchText, show_all: true, serializer: 'CategorySimpleSerializer'\n      }, function(results) {\n        if (results.results) {\n          var webCategoriesIds = $scope.status.filters.webCategories.map(function(webCategory) {\n            return webCategory.id;\n          });\n          deferred.resolve(results.results.filter(function(webCategory) {\n            return webCategoriesIds.indexOf(webCategory.id) === -1;\n          }));\n        } else {\n          deferred.resolve([]);\n        }\n      });\n      return deferred.promise;\n    }\n\n    function setDateRangeFilters() {\n      function formatDate(date) {\n        return (date instanceof Date && !isNaN(date)) ? date.toISOString() : null;\n      }\n\n      $scope.status.filters.productCreatedStartDate = formatDate(vm.productCreatedDateRange.dateStart);\n      $scope.status.filters.productCreatedEndDate = formatDate(vm.productCreatedDateRange.dateEnd);\n      $scope.status.filters.productUpdatedStartDate = formatDate(vm.productUpdatedDateRange.dateStart);\n      $scope.status.filters.productUpdatedEndDate = formatDate(vm.productUpdatedDateRange.dateEnd);\n      $scope.status.filters.productPriceUpdatedStartDate = formatDate(vm.productPriceUpdatedDateRange.dateStart);\n      $scope.status.filters.productPriceUpdatedEndDate = formatDate(vm.productPriceUpdatedDateRange.dateEnd);\n      filtersChanged();\n    }\n\n    function loadStatus() {\n      if ($scope.status.filters && $scope.status.filters.productCreatedStartDate && $scope.status.filters.productCreatedStartDate !== '' &&\n        $scope.status.filters.productCreatedEndDate && $scope.status.filters.productCreatedEndDate !== '') {\n        vm.productCreatedDateRange.dateStart = $scope.status.filters.productCreatedStartDate ? new Date($scope.status.filters.productCreatedStartDate) : null;\n        vm.productCreatedDateRange.dateEnd = $scope.status.filters.productCreatedEndDate ? new Date($scope.status.filters.productCreatedEndDate) : null;\n      }\n      if ($scope.status.filters && $scope.status.filters.productUpdatedStartDate && $scope.status.filters.productUpdatedStartDate !== '' &&\n        $scope.status.filters.productUpdatedEndDate && $scope.status.filters.productUpdatedEndDate !== '') {\n        vm.productUpdatedDateRange.dateStart = $scope.status.filters.productUpdatedStartDate ? new Date($scope.status.filters.productUpdatedStartDate) : null;\n        vm.productUpdatedDateRange.dateEnd = $scope.status.filters.productUpdatedEndDate ? new Date($scope.status.filters.productUpdatedEndDate) : null;\n      }\n      if ($scope.status.filters && $scope.status.filters.productPriceUpdatedStartDate && $scope.status.filters.productPriceUpdatedStartDate !== '' &&\n        $scope.status.filters.productPriceUpdatedEndDate && $scope.status.filters.productPriceUpdatedEndDate !== '') {\n        vm.productPriceUpdatedDateRange.dateStart = $scope.status.filters.productPriceUpdatedStartDate ? new Date($scope.status.filters.productPriceUpdatedStartDate) : null;\n        vm.productPriceUpdatedDateRange.dateEnd = $scope.status.filters.productPriceUpdatedEndDate ? new Date($scope.status.filters.productPriceUpdatedEndDate) : null;\n      }\n      updateFilterNotifications();\n      updateFiltersParam();\n      $timeout(function() {\n        vm.filtersStatusInitialized = true;\n      }, 500);\n    }\n\n    function clearFilter() {\n      $scope.status.filters.brands = [];\n      $scope.status.filters.categories = [];\n      $scope.status.filters.subcategories = [];\n      $scope.status.filters.collections = [];\n      $scope.status.filters.seasons = [];\n      $scope.status.filters.compositions = [];\n      $scope.status.filters.status = [];\n      $scope.status.filters.sites = [];\n      $scope.status.filters.barcode = '';\n      $scope.status.filters.sku = '';\n      $scope.status.filters.sizes = [];\n      $scope.status.filters.colors = [];\n      $scope.status.filters.webCategories = [];\n      $scope.status.filters.providers = [];\n      $scope.status.filters.purchases = [];\n      $scope.status.filters.cover = '';\n      $scope.status.filters.tag = '';\n      $scope.status.filters.stock = '';\n      $scope.status.filters.visibleInEcommerce = '';\n      $scope.status.filters.discountPrice = '';\n      $scope.status.filters.stockBelowMinimum = false;\n      $scope.status.filters.discountActive = false;\n      $scope.status.filters.duplicatedProducts = false;\n      $scope.status.filters.isNoos = false;\n      $scope.status.filters.archived = false;\n      $scope.status.filters.duplicatedBarcode = false;\n      $scope.status.filters.duplicatedSku = false;\n      $scope.status.filters.productCreatedStartDate = null;\n      $scope.status.filters.productCreatedEndDate = null;\n      $scope.status.filters.productUpdatedStartDate = null;\n      $scope.status.filters.productUpdatedEndDate = null;\n      $scope.status.filters.productPriceUpdatedStartDate = null;\n      $scope.status.filters.productPriceUpdatedEndDate = null;\n      initializeDateRanges();\n      filtersChanged();\n    }\n\n    function updateFilterNotifications() {\n      var result = 0;\n      Object.keys($scope.status.filters).forEach(function(filter) {\n        if (typeof $scope.status.filters[filter] === 'string') {\n          if (filter !== 'productCreatedEndDate' && filter !== 'productUpdatedEndDate' && filter !== 'productPriceUpdatedEndDate') {\n            result += $scope.status.filters[filter] === '' ? 0 : 1;\n          }\n        } else if (typeof $scope.status.filters[filter] === 'boolean') {\n          result += $scope.status.filters[filter] ? 1 : 0;\n        } else if (typeof $scope.status.filters[filter] === 'number') {\n          result += $scope.status.filters[filter] ? 1 : 0;\n        } else if (typeof $scope.status.filters[filter] === 'object' && $scope.status.filters[filter] instanceof Date) {\n          if (filter !== 'productCreatedEndDate' && filter !== 'productUpdatedEndDate' && filter !== 'productPriceUpdatedEndDate') {\n            result += 1;\n          }\n        } else if (typeof $scope.status.filters[filter] === 'object') {\n          result += $scope.status.filters[filter] && $scope.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      result += $scope.status.search.length > 0 ? 1 : 0;\n      $scope.status.notifications = result;\n    }\n\n    function mapAndJoinList(list) {\n      if (!list || !list.length) {\n        return null;\n      }\n      return list.map(function(item) {\n        return item.id;\n      }).join();\n    }\n\n    function updateFiltersParam() {\n\n      var params = {};\n\n      if ($scope.status.filters.brands && $scope.status.filters.brands.length) {\n        params.brands = $scope.status.filters.brands.join(',');\n      }\n      if ($scope.status.filters.categories && $scope.status.filters.categories.length) {\n        params.categories = $scope.status.filters.categories.join(',');\n      }\n      if ($scope.status.filters.subcategories && $scope.status.filters.subcategories.length) {\n        params.subcategories = $scope.status.filters.subcategories.join(',');\n      }\n      if ($scope.status.filters.seasons && $scope.status.filters.seasons.length) {\n        params.seasons = $scope.status.filters.seasons.join(',');\n      }\n      if ($scope.status.filters.compositions && $scope.status.filters.compositions.length) {\n        params.compositions = $scope.status.filters.compositions.join(',');\n      }\n      if ($scope.status.filters.sites && $scope.status.filters.sites.length) {\n        params.sites = $scope.status.filters.sites.join(',');\n      }\n      if ($scope.status.filters.barcode) {\n        params.filter_barcode = $scope.status.filters.barcode;\n      }\n      if ($scope.status.filters.sku) {\n        params.filter_sku = $scope.status.filters.sku;\n      }\n      if ($scope.status.filters.sizes) {\n        params.size = mapAndJoinList($scope.status.filters.sizes);\n      }\n      if ($scope.status.filters.colors) {\n        params.color = mapAndJoinList($scope.status.filters.colors);\n      }\n      if ($scope.status.filters.webCategories) {\n        params.web_category = mapAndJoinList($scope.status.filters.webCategories);\n      }\n      if ($scope.status.filters.providers) {\n        params.providers = mapAndJoinList($scope.status.filters.providers);\n      }\n      if ($scope.status.filters.purchases) {\n        params.purchases = mapAndJoinList($scope.status.filters.purchases);\n      }\n      if ($scope.status.filters.collections) {\n        params.collections = mapAndJoinList($scope.status.filters.collections);\n      }\n      if ($scope.status.filters.cover) {\n        params.cover = $scope.status.filters.cover;\n      }\n      if ($scope.status.filters.tag) {\n        params.tag = $scope.status.filters.tag;\n      }\n      if ($scope.status.filters.stock) {\n        params.only_in_stock_products = $scope.status.filters.stock;\n      }\n      if ($scope.status.filters.visibleInEcommerce) {\n        params.only_products_visible_in_ecommerce = $scope.status.filters.visibleInEcommerce;\n      }\n      if ($scope.status.filters.discountPrice) {\n        params.only_with_discount_price = $scope.status.filters.discountPrice;\n      }\n      if ($scope.status.filters.stockBelowMinimum) {\n        params.stock_below_minimum = true;\n      }\n      if ($scope.status.filters.discountActive) {\n        params.discount_active = true;\n      }\n      if ($scope.status.filters.duplicatedProducts) {\n        params.duplicated = true;\n      }\n      if ($scope.status.filters.isNoos) {\n        params.is_noos = true;\n      }\n      if ($scope.status.filters.archived) {\n        params.archived = true;\n      }\n      if ($scope.status.filters.duplicatedBarcode) {\n        params.duplicated_barcode = $scope.status.filters.duplicatedBarcode;\n      }\n      if ($scope.status.filters.duplicatedSku) {\n        params.duplicated_sku = $scope.status.filters.duplicatedSku;\n      }\n      if ($scope.status.filters.productCreatedStartDate) {\n        params.product_created_start_date = $scope.status.filters.productCreatedStartDate;\n      }\n      if ($scope.status.filters.productCreatedEndDate) {\n        params.product_created_end_date = $scope.status.filters.productCreatedEndDate;\n      }\n      if ($scope.status.filters.productUpdatedStartDate) {\n        params.product_updated_start_date = $scope.status.filters.productUpdatedStartDate;\n      }\n      if ($scope.status.filters.productUpdatedEndDate) {\n        params.product_updated_end_date = $scope.status.filters.productUpdatedEndDate;\n      }\n      if ($scope.status.filters.productPriceUpdatedStartDate) {\n        params.product_price_updated_start_date = $scope.status.filters.productPriceUpdatedStartDate;\n      }\n      if ($scope.status.filters.productPriceUpdatedEndDate) {\n        params.product_price_updated_end_date = $scope.status.filters.productPriceUpdatedEndDate;\n      }\n      Object.keys($scope.status.filtersParams).forEach(function(key) {\n        delete $scope.status.filtersParams[key];\n      });\n      angular.extend($scope.status.filtersParams, params);\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ProductsEditDialogController', ProductsEditDialogController);\n\n  /** @ngInject */\n  function ProductsEditDialogController(\n    $mdDialog,\n    $window,\n    $document,\n    api,\n    $mdToast,\n    $filter,\n    $q,\n    $rootScope,\n    Selected,\n    Session,\n    GS1_BARCODE_TYPES_BY_ID,\n    CURRENCIES,\n    WEIGHT_UNITS,\n    WEIGHT_UNITS_FORMATTED,\n    SEARCH_MAX_LENGTH,\n    HTTP_STATUS,\n    ROUNDING_PRICE_TYPES,\n    ECOMMERCE_PLATFORMS\n  ) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.ROUNDING_PRICE_TYPES = ROUNDING_PRICE_TYPES;\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n\n    // DATA\n    vm.taToolbar = [\n      [\n        'h1',\n        'h2',\n        'h3',\n        'h4',\n        'h5',\n        'h6',\n        'p',\n        'pre',\n        'quote',\n        'bold',\n        'italics',\n        'underline',\n        'strikeThrough',\n        'ul',\n        'ol',\n        'redo',\n        'undo',\n        'clear'\n      ],\n      [\n        'justifyLeft',\n        'justifyCenter',\n        'justifyRight',\n        'justifyFull',\n        'indent',\n        'outdent',\n        'html',\n        'insertImage',\n        'insertLink',\n        'wordcount',\n        'charcount'\n      ]\n    ];\n    vm.showSaveMessage = false;\n    vm.currencies = CURRENCIES;\n    vm.barcode_types = GS1_BARCODE_TYPES_BY_ID;\n    vm.WEIGHT_UNITS = WEIGHT_UNITS;\n    vm.WEIGHT_UNITS_FORMATTED = WEIGHT_UNITS_FORMATTED;\n    vm.FIXED = 'fixed';\n    vm.PURCHASE_RELATED = 'purchaseRelated';\n    vm.SALES_RELATED = 'salesRelated';\n    vm.categories = [];\n    vm.subcategories = [];\n    vm.brands = [];\n    vm.seasons = [];\n    vm.tags = [];\n    vm.compositions = [];\n    vm.contacts = [];\n    vm.ecommerceCategories = null;\n    vm.webCategoriesToAdd = [];\n    vm.webCategoriesToRemove = [];\n    vm.loadingWebCategories = true;\n    vm.webSites = null;\n    vm.webSitesHasPrestashop = false;\n    vm.webSitesToAdd = [];\n    vm.webSitesToRemove = [];\n    vm.visibleOnSites = [];\n    vm.notVisibleOnSites = [];\n    vm.loadingWebSites = true;\n    vm.selectedProductsIds = Selected;\n    vm.selectedCategoryId = null;\n    vm.selectedSubcategoryId = null;\n    vm.selectedAddTags = [];\n    vm.selectedRemoveTags = [];\n    vm.selectedSizes = [];\n    vm.selectedColors = [];\n    vm.selectedColorCategoryName = null;\n    vm.selectedSizeCategoryName = null;\n    vm.generateBarcodes = false;\n    vm.generateCodes = false;\n    vm.productPrices = { id: null, prices: [] };\n    vm.taxes = [];\n    vm.pricingTiers = [];\n\n    vm.selectedItemAdd = null;\n    vm.selectedItemRemove = null;\n    vm.searchTextAdd = null;\n    vm.searchTextRemove = null;\n    vm.session = Session;\n    vm.web_availability = null;\n    vm.discountActive = null;\n    vm.discountInactive = null;\n    vm.isRawMaterial = null;\n    vm.isNotRawMaterial = null;\n    vm.isNoos = null;\n    vm.isNotNoos = null;\n    vm.catalog = null;\n    vm.notCatalog = null;\n    vm.notAllowB2bPreSales = null;\n    vm.allowB2bPreSales = null;\n    vm.selectedCode = null;\n    vm.selectedOriginCode = null;\n    vm.selectedGroupCode = null;\n    vm.selectedName = null;\n    vm.selectedShortDescription = null;\n    vm.selectedLongDescription = null;\n    vm.selectedBrandId = null;\n    vm.selectedSeasonId = null;\n    vm.selectedCompositionId = null;\n    vm.selectedProviderId = null;\n    vm.selectedDefaultBarcodeType = null;\n    vm.selectedWidth = null;\n    vm.selectedHeight = null;\n    vm.selectedDepth = null;\n    vm.selectedWeight = null;\n    vm.selectedWeightUnit = null;\n    vm.selectedFOBPrice = null;\n    vm.selectedFOBPriceCurrency = null;\n    vm.selectedDDPPrice = null;\n    vm.backordersAllowed = null;\n    vm.notBackordersAllowed = null;\n    vm.manageUids = false;\n    vm.unmanageUids = false;\n    vm.manageLots = false;\n    vm.unmanageLots = false;\n    vm.archive = false;\n    vm.unarchive = false;\n    vm.syncEcommerceProducts = null;\n    vm.syncEcommerceStocks = null;\n    vm.syncEcommercePrices = null;\n    vm.saving = false;\n    vm.forceSiteProductVariants = false;\n    vm.doNotForceSiteProductVariants = false;\n    vm.generateSkus = false;\n    vm.loadingEcommerces = true;\n    vm.b2bEcommerces = [];\n    vm.ecommercesToAdd = [];\n    vm.ecommercesToRemove = [];\n    vm.selectFilter = '';\n    vm.setPriceMethod = vm.FIXED;\n\n    // METHODS\n    vm.closeDialog = closeDialog;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.newCategoryAdded = newCategoryAdded;\n    vm.newSubcategoryAdded = newSubcategoryAdded;\n    vm.exists = exists;\n    vm.toggle = toggle;\n    vm.save = save;\n    vm.hide = hide;\n\n    vm.querySearch = querySearch;\n    vm.querySearchCategories = querySearchCategories;\n    vm.siteCategorySelected = siteCategorySelected;\n    vm.openAdvancedCategorySearch = openAdvancedCategorySearch;\n\n    vm.setDefaultRoundType = setDefaultRoundType;\n    vm.resetPricingTiers = resetPricingTiers;\n\n    initialize();\n\n    // FUNCTIONS\n    function initialize() {\n\n      api.inventories.seasons.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.seasons = results.results;\n        }\n      });\n\n      api.inventories.brands.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.brands = results.results;\n        }\n      });\n\n      api.inventories.categories.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.categories = results.results;\n        }\n      });\n\n      api.inventories.subcategories.list({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.subcategories = results.results;\n        }\n      });\n\n      api.inventories.pricingTiers.get(function(response) {\n        angular.merge(vm.pricingTiers, response.results);\n      });\n\n      /*api.accounting.taxes.get(function(response){\n        angular.merge(vm.taxes, response.results);\n      });*/\n\n      vm.addCategoriesDict = {};\n      vm.removeCategoriesDict = {};\n\n      if (Session.hasPermission('app.ecommerce')) {\n        api.ecommerce.categories.get(function(response) {\n          vm.ecommerceCategories = response.results;\n          vm.loadingWebCategories = false;\n        });\n\n        api.ecommerce.sites.get(function(response) {\n          vm.webSites = response.results.sort(function(a, b) {\n            return a.id - b.id;\n          });\n          vm.loadingWebSites = false;\n\n          vm.webSites.forEach(function(site) {\n            vm.addCategoriesDict[site.id] = { selectedCategories: [] };\n            vm.removeCategoriesDict[site.id] = { selectedCategories: [] };\n            if (site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP){\n              vm.webSitesHasPrestashop = true;\n            }\n          });\n        });\n      }\n\n      api.inventories.compositions.get(function(response) {\n        vm.compositions = response.results;\n      });\n\n      api.inventories.contacts.get(\n        { type: '5,6', serializer: 'ContactSimpleSerializer' },\n        function(response) {\n          vm.contacts = response.results;\n        }\n      );\n\n      if (Session.hasMultipleB2B()) {\n        api.wholesale.b2bEcommerces.list(function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.data) {\n            vm.b2bEcommerces = response.data;\n            for (var i = 0; i < vm.b2bEcommerces.length; i++) {\n              vm.selectedEcommerces.push({\n                id: vm.b2bEcommerces[i].id,\n                slug: vm.b2bEcommerces[i].slug,\n                selected: false,\n                url: vm.b2bEcommerces[i].domain,\n                warehouse: vm.b2bEcommerces[i].warehouse_name\n              });\n            }\n          }\n        });\n\n        vm.loadingEcommerces = false;\n      } else {\n        vm.defaultB2b = Session.getDefaultB2B();\n        api.wholesale.b2bEcommerces.list(function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.data) {\n            vm.b2bEcommerces = response.data;\n            for (var i = 0; i < vm.b2bEcommerces.length; i++) {\n              if (vm.b2bEcommerces[i].id == vm.defaultB2b) {\n                vm.selectedEcommerces.push({\n                  id: vm.b2bEcommerces[i].id,\n                  slug: vm.b2bEcommerces[i].slug,\n                  selected: false,\n                  url: vm.b2bEcommerces[i].domain,\n                  warehouse: vm.b2bEcommerces[i].warehouse_name\n                });\n              }\n            }\n          }\n        });\n        vm.loadingEcommerces = false;\n      }\n    }\n\n    function closeDialog() {\n      $mdDialog.hide();\n    }\n\n    function onSelectorOpen() {\n      $document\n        .find('md-select-header input[type=\"search\"]')\n        .on('keydown', function(e) {\n          e.stopPropagation();\n        });\n    }\n\n    function onSelectorClose() {\n      vm.selectFilter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function newCategoryAdded(newObject) {\n      vm.selectedCategoryId = newObject.id;\n    }\n\n    function newSubcategoryAdded(newObject) {\n      vm.selectedSubcategoryId = newObject.id;\n    }\n\n    function save() {\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n\n      var tempPricingTiers = [];\n\n      vm.pricingTiers.forEach(function(pricingTier) {\n        if (\n          pricingTier.price_incl_tax ||\n          pricingTier.price_excl_tax ||\n          pricingTier.discount ||\n          pricingTier.discount_price_excl_tax ||\n          pricingTier.discount_price_incl_tax ||\n          pricingTier.price_incl_tax == 0 ||\n          pricingTier.price_excl_tax == 0 ||\n          pricingTier.discount == 0 ||\n          pricingTier.discount_price_excl_tax == 0 ||\n          pricingTier.discount_price_incl_tax == 0 ||\n          (\n            (pricingTier.relative_cost_price_incl_tax != null ||\n              pricingTier.relative_cost_price_excl_tax != null)\n            && pricingTier.round_type\n          ) ||\n          (\n            (pricingTier.relative_sale_price_incl_tax != null ||\n              pricingTier.relative_sale_price_excl_tax != null)\n            && pricingTier.round_type)\n        ) {\n          tempPricingTiers.push(pricingTier);\n        }\n      });\n\n      var addCategories = {};\n      Object.keys(vm.addCategoriesDict).forEach(function(key) {\n        var value = vm.addCategoriesDict[key];\n        if (value.selectedCategories.length > 0)\n          addCategories[key] = angular.copy(value.selectedCategories);\n      });\n\n      var removeCategories = {};\n      Object.keys(vm.removeCategoriesDict).forEach(function(key) {\n        var value = vm.removeCategoriesDict[key];\n        if (value.selectedCategories.length > 0)\n          removeCategories[key] = angular.copy(value.selectedCategories);\n      });\n\n      api.inventories.products.save(\n        {\n          option: 'bulk-edit',\n          products_ids: vm.selectedProductsIds,\n          add_tags: vm.selectedAddTags,\n          remove_tags: vm.selectedRemoveTags,\n          sizes: vm.selectedSizes,\n          colors: vm.selectedColors,\n          color_category_name: vm.selectedColorCategoryName,\n          size_category_name: vm.selectedSizeCategoryName,\n          web_availability: vm.web_availability,\n          web_categories_to_add: addCategories,\n          web_categories_to_remove: removeCategories,\n          web_sites_to_add: vm.webSitesToAdd,\n          web_sites_to_remove: vm.webSitesToRemove,\n          visible_on_sites: vm.visibleOnSites,\n          not_visible_on_sites: vm.notVisibleOnSites,\n          generate_barcodes: vm.generateBarcodes,\n          generate_codes: vm.generateCodes,\n          pricing_tiers: tempPricingTiers,\n          discount_active: vm.discountActive,\n          discount_inactive: vm.discountInactive,\n          backorders_allowed: vm.backordersAllowed,\n          backorders_not_allowed: vm.notBackordersAllowed,\n          is_raw_material: vm.isRawMaterial,\n          is_not_raw_material: vm.isNotRawMaterial,\n          is_noos: vm.isNoos,\n          is_not_noos: vm.isNotNoos,\n          catalog: vm.catalog,\n          not_catalog: vm.notCatalog,\n          allow_b2b_pre_sales: vm.allowB2bPreSales,\n          not_allow_b2b_pre_sales: vm.notAllowB2bPreSales,\n          code: vm.selectedCode,\n          origin_code: vm.selectedOriginCode,\n          group_code: vm.selectedGroupCode,\n          name: vm.selectedName,\n          short_description: vm.selectedShortDescription.trim(),\n          long_description: vm.selectedLongDescription.trim(),\n          brand_id: vm.selectedBrandId,\n          season_id: vm.selectedSeasonId,\n          category_id: vm.selectedCategoryId,\n          subcategory_id: vm.selectedSubcategoryId,\n          composition_id: vm.selectedCompositionId,\n          provider_id: vm.selectedProviderId,\n          default_barcode_type: vm.selectedDefaultBarcodeType,\n          width: vm.selectedWidth,\n          height: vm.selectedHeight,\n          depth: vm.selectedDepth,\n          weight: vm.selectedWeight,\n          weight_unit: vm.selectedWeightUnit,\n          fob_price: vm.selectedFOBPrice,\n          fob_price_currency: vm.selectedFOBPriceCurrency,\n          ddp_price: vm.selectedDDPPrice,\n          sync_ecommerce_products: vm.syncEcommerceProducts,\n          sync_ecommerce_stocks: vm.syncEcommerceStocks,\n          sync_ecommerce_prices: vm.syncEcommercePrices,\n          manage_uids: vm.manageUids,\n          unmanage_uids: vm.unmanageUids,\n          manage_lots: vm.manageLots,\n          unmanage_lots: vm.unmanageLots,\n          archive: vm.archive,\n          unarchive: vm.unarchive,\n          force_site_product_size_variations: vm.forceSiteProductSizeVariations,\n          force_site_product_color_variations: vm.forceSiteProductColorVariations,\n          do_not_force_site_product_size_variations: vm.doNotForceSiteProductSizeVariations,\n          do_not_force_site_product_color_variations: vm.doNotForceSiteProductColorVariations,\n          set_product_variant_prices: vm.setProductVariantPrices,\n          generate_skus: vm.generateSkus,\n          ecommerces_to_add: vm.ecommercesToAdd,\n          ecommerces_to_remove: vm.ecommercesToRemove\n        },\n        function(response) {\n          vm.saving = false;\n          vm.showSaveMessage = true;\n        }\n      );\n    }\n\n    function hide() {\n      $mdDialog.hide(false);\n    }\n\n    function querySearch(query) {\n      query = query.substring(0, vm.SEARCH_MAX_LENGTH);\n      var results = query ? vm.tags.filter(createFilterFor(query)) : [];\n      return results;\n    }\n\n    function createFilterFor(query) {\n      var lowercaseQuery = angular.lowercase(query);\n      return function filterFn(tag) {\n        return tag.toLowerCase().indexOf(lowercaseQuery) === 0;\n      };\n    }\n\n    function exists(item, list) {\n      return list.indexOf(item) > -1;\n    }\n\n    function toggle(item, list) {\n      var idx = list.indexOf(item);\n      if (idx > -1) {\n        list.splice(idx, 1);\n      } else {\n        list.push(item);\n      }\n    }\n\n    function querySearchCategories(site, dict) {\n      var deferred = $q.defer();\n      var data = {\n        search: dict[site.id].searchText.substring(0, vm.SEARCH_MAX_LENGTH),\n        category_group_id: site.category_group,\n        show_all: true,\n        serializer: 'CategorySimpleSerializer'\n      };\n\n      api.ecommerce.categories.get(data, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function siteCategorySelected(site, dict) {\n      var selectedItem = dict[site.id].selectedItem;\n      if (selectedItem) {\n        dict[site.id].selectedCategories.push(selectedItem);\n      }\n      dict[site.id].selectedItem = null;\n    }\n\n    function openAdvancedCategorySearch(site, dict) {\n      if (!dict[site.id].selectedCategories) {\n        dict[site.id].selectedCategories = [];\n      }\n      $mdDialog.show({\n        multiple: true,\n        controller: 'EcommerceCategoryTreeDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/ecommerce-category-tree/ecommerce-category-tree-dialog.html',\n        locals: {\n          site: site,\n          selectedCategories: dict[site.id].selectedCategories\n        }\n      }).then(function(result) {\n\n      });\n\n    }\n\n    function setDefaultRoundType(pricingTier, roundType) {\n      if (!roundType) {\n        pricingTier.round_type = 'no_round';\n      }\n    }\n\n    function resetPricingTiers(){\n      vm.pricingTiers.forEach(function(pricingTier) {\n        pricingTier.price_incl_tax = null;\n        pricingTier.price_excl_tax = null;\n        pricingTier.discount = null;\n        pricingTier.discount_price_excl_tax = null;\n        pricingTier.discount_price_incl_tax = null;\n        pricingTier.relative_cost_price_incl_tax = null;\n        pricingTier.relative_cost_price_excl_tax = null;\n        pricingTier.relative_sale_price_incl_tax = null;\n        pricingTier.relative_sale_price_excl_tax = null;\n        pricingTier.round_type = null;\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStockOverviewController', ndStockOverviewController)\n    .directive('ndStockOverview', ndStockOverview);\n\n  /** @ngInject */\n  function ndStockOverview() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        warehouses: '=',\n        header: '=?'\n      },\n      controller: 'ndStockOverviewController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-stock-overview/nd-stock-overview.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStockOverviewController($scope, $filter, $mdToast, api, Session) {\n\n    // Data\n    var vm = this;\n    vm.product = $scope.product;\n    vm.warehouses = $scope.warehouses;\n    vm.header = $scope.header;\n    vm.session = Session;\n\n    // Methods\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.product.totalsByColor = [];\n\n      var stockByWarehouseAndProductVariantId = {}\n      vm.product.stocks.forEach(function(stock){\n        if(angular.isUndefined(stockByWarehouseAndProductVariantId[stock.warehouse]))\n        stockByWarehouseAndProductVariantId[stock.warehouse] = {};\n        stockByWarehouseAndProductVariantId[stock.warehouse][stock.product_variant] = stock;\n      });\n\n      var colorIdByProductVariantById = {};\n      vm.product.product_variants.forEach(function (productVariant) {\n        colorIdByProductVariantById[productVariant.id] = productVariant.color;\n      });\n\n\n      vm.product.color_variants.forEach(function (color) {\n\n        var total = 0;\n        var totalsByWarehouseId = {};\n\n        vm.warehouses.forEach(function(warehouse){\n\n          totalsByWarehouseId[warehouse.id] = {\n            totalInWarehouse:0,\n            totalInTransit:0\n          }\n\n          for(var productVariantId in stockByWarehouseAndProductVariantId[warehouse.id]){\n            if(colorIdByProductVariantById[productVariantId] == color.id){\n              var stock = stockByWarehouseAndProductVariantId[warehouse.id][productVariantId]\n              totalsByWarehouseId[warehouse.id].totalInWarehouse += stock.stock;\n              totalsByWarehouseId[warehouse.id].totalInTransit += stock.transferred_pending_to_receive;\n              total = total + stock.stock + stock.transferred_pending_to_receive;\n            }\n          }\n\n        });\n\n        vm.product.totalsByColor.push({\n          color: color,\n          position: color.position,\n          totalsByWarehouseId: totalsByWarehouseId,\n          total: total\n        });\n\n      });\n\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('QuickProductCreatorDialogController', QuickProductCreatorDialogController);\n\n  /** @ngInject */\n  function QuickProductCreatorDialogController($q,\n                                               $document,\n                                               $filter,\n                                               $mdDialog,\n                                               $mdToast,\n                                               $timeout,\n                                               $state,\n                                               api,\n                                               HTTP_STATUS,\n                                               SEARCH_MAX_LENGTH,\n                                               Session,\n                                               params) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.AUTOCOMPLETE_PAGE = 10;\n\n    // Data\n    vm.sizeVariantCategories = [];\n    vm.colorVariantCategories = [];\n    vm.sizeVariants = [];\n    vm.colorVariants = [];\n    vm.pricingTiers = [];\n    vm.taxes = [];\n    vm.codeAlreadyExists = 0;\n    vm.product = {\n      code: null,\n      name: null,\n      category: null,\n      subcategory: null,\n      brand: null,\n      season: null,\n      has_variants: false,\n      size_category: null,\n      size_variants: [],\n      color_category: null,\n      color_variants: [],\n      ddp_price: null,\n      set_price: false,\n      pricing_tier: null,\n      tax: null,\n      price_incl_tax: null,\n      is_raw_material: params.isRawMaterial || false\n    };\n    vm.selectFilter = {};\n    vm.currency = Session.company.currency;\n    vm.saving = false;\n    vm.hasProductBundlesFeature = !Session.hasSubscription || Session.hasAddOn('app.inventory.products.product.bundles');\n    vm.isBundle = params.isBundle || false;\n    vm.isRawMaterial = params.isRawMaterial || false;\n    vm.productType = params.productType || 'p';\n\n    // Methods\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.checkCodeUnique = checkCodeUnique;\n    vm.autogenerateChanged = autogenerateChanged;\n    vm.pricingTierChanged = pricingTierChanged;\n    vm.taxChanged = taxChanged;\n    vm.hasVariantsChanged = hasVariantsChanged;\n    vm.setPriceChanged = setPriceChanged;\n    vm.sizeVariantCategoryChanged = sizeVariantCategoryChanged;\n    vm.colorVariantCategoryChanged = colorVariantCategoryChanged;\n    vm.isValid = isValid;\n    vm.goToNewProductPage = goToNewProductPage;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.codeNameFormatter = codeNameFormatter;\n    vm.categoryQuerySearch = categoryQuerySearch;\n    vm.categoryChanged = categoryChanged;\n    vm.subcategoryChanged = subcategoryChanged;\n    vm.subcategoryQuerySearch = subcategoryQuerySearch;\n    vm.seasonQuerySearch = seasonQuerySearch;\n    vm.seasonChanged = seasonChanged;\n    vm.brandQuerySearch = brandQuerySearch;\n    vm.brandChanged = brandChanged;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::category::v2')) {\n        var defaultCategory = JSON.parse(localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::category::v2'));\n        vm.product.category_instance = defaultCategory;\n        vm.product.category = defaultCategory.id;\n      }\n      if (localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::season::v2')) {\n        var defaultSeason = JSON.parse(localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::season::v2'));\n        vm.product.season_instance = defaultSeason;\n        vm.product.season = defaultSeason.id;\n      }\n      if (localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::brand::v2')) {\n        var defaultBrand = JSON.parse(localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::brand::v2'));\n        vm.product.brand_instance = defaultBrand;\n        vm.product.brand = defaultBrand.id;\n      }\n\n      api.inventories.variantCategories.list(function(response, fn, status) {\n        if (response && response.results) {\n\n          var variantCategories = response.results.sort(function(a, b) {\n            return a.position - b.position;\n          });\n\n          vm.sizeVariantCategories = variantCategories.filter(function(vc) {\n            return vc.is_principal;\n          });\n          vm.colorVariantCategories = variantCategories.filter(function(vc) {\n            return !vc.is_principal;\n          });\n        }\n      });\n\n      api.inventories.pricingTiers.list(function(response, fn, status) {\n        vm.pricingTiers = response.results.sort(function(a, b) {\n          return a.position - b.position;\n        });\n\n        if (localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::pricingTier')) {\n          vm.product.pricing_tier = +localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::pricingTier');\n        }\n      });\n\n      api.accounting.taxes.list(function(response, fn, status) {\n        vm.taxes = response.results.sort(function(a, b) {\n          return a.position - b.position;\n        });\n\n        if (localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::tax')) {\n          vm.product.tax = +localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::tax');\n        }\n      });\n\n      if (localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::autogenerate')) {\n        vm.product.autogenerate = localStorage.getItem(Session.company.id + '::QuickProductCreatorDialogController::autogenerate') === 'true';\n        autogenerateCode();\n      }\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      vm.selectFilter[filter] = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function autogenerateChanged() {\n      localStorage.setItem(Session.company.id + '::QuickProductCreatorDialogController::autogenerate', vm.product.autogenerate);\n      autogenerateCode();\n    }\n\n    function pricingTierChanged() {\n      if (vm.product.pricing_tier) {\n        localStorage.setItem(Session.company.id + '::QuickProductCreatorDialogController::pricingTier', vm.product.pricing_tier);\n      }\n    }\n\n    function taxChanged() {\n      if (vm.product.tax) {\n        localStorage.setItem(Session.company.id + '::QuickProductCreatorDialogController::tax', vm.product.tax);\n      }\n    }\n\n    function hasVariantsChanged() {\n      if (!vm.product.has_variants) {\n        vm.product.size_category = null;\n        vm.product.size_variants = [];\n        vm.product.color_category = null;\n        vm.product.color_variants = [];\n      }\n    }\n\n    function setPriceChanged() {\n      if (!vm.product.set_price) {\n        vm.product.pricing_tier = null;\n        vm.product.tax = null;\n        vm.product.price_incl_tax = null;\n      }\n    }\n\n    function sizeVariantCategoryChanged() {\n      if (vm.product.size_category) {\n        api.inventories.variants.list({\n          category_id: vm.product.size_category\n        }, function(response, fn, status) {\n          if (response && response.results) {\n            vm.sizeVariants = response.results;\n          }\n        });\n      }\n    }\n\n    function colorVariantCategoryChanged() {\n      if (vm.product.color_category) {\n        api.inventories.variants.list({\n          category_id: vm.product.color_category\n        }, function(response, fn, status) {\n          if (response && response.results) {\n            vm.colorVariants = response.results;\n          }\n        });\n      }\n    }\n\n    function checkCodeUnique() {\n      vm.product.autogenerate = false;\n\n      if (vm.checkCodeUniqueTimeout) {\n        $timeout.cancel(vm.checkCodeUniqueTimeout);\n      }\n\n      vm.checkCodeUniqueTimeout = $timeout(function() {\n        api.inventories.products.get({\n          option: 'check-code-unique',\n          current_id: null,\n          code: vm.product.code\n        }, function(response, callback, status) {\n          if (status === 200) {\n            vm.codeAlreadyExists = 0;\n          } else if (status === 302) {\n            vm.codeAlreadyExists = response.counter;\n          }\n          vm.checkCodeUniqueTimeout = null;\n        });\n      }, 1000);\n    }\n\n    function isValid() {\n      var valid = vm.product.code &&\n        vm.product.name &&\n        vm.product.category &&\n        vm.product.brand &&\n        vm.product.season;\n\n      if (vm.product.has_variants) {\n        return valid &&\n          vm.product.size_category &&\n          vm.product.size_variants.length &&\n          vm.product.color_category &&\n          vm.product.color_variants.length;\n      }\n      if (vm.product.set_price) {\n        return valid &&\n          vm.product.pricing_tier &&\n          vm.product.tax &&\n          vm.product.price_incl_tax !== null;\n      }\n      return valid;\n    }\n\n    function save() {\n      if (isValid()) {\n        vm.saving = true;\n        var message = angular.extend(vm.product);\n        message.option = 'quick-create';\n        api.inventories.products.save(vm.product, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('PRODUCT.PRODUCT_CREATED'))\n              .position('top right')\n              .action($filter('translate')('PRODUCT.GO_TO_DETAILS'))\n              .hideDelay(5000)\n              .highlightAction(true)\n              .highlightClass('md-accent')).then(function(result) {\n              if (result === 'ok') {\n                $state.go('app.inventory.products.product.details', { id: response.id });\n              }\n            });\n            $mdDialog.hide(response);\n          } else {\n            vm.saving = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function goToNewProductPage() {\n      $mdDialog.cancel();\n      $state.go('app.inventory.products.new-product', { isBundle: vm.isBundle, isRawMaterial: vm.isRawMaterial });\n    }\n\n    function autogenerateCode() {\n      if (!vm.product.autogenerate || vm.gettingCode) {\n        return;\n      }\n\n      // $scope.productForm.code.$setValidity('uniqueCodeError', true);\n      // $scope.codeAlreadyExists = null;\n\n      vm.gettingCode = true;\n      api.inventories.products.get({\n        option: 'next-code',\n        brand: vm.product.brand,\n        season: vm.product.season,\n        category: vm.product.category,\n        subcategory: vm.product.subcategory\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.product.code = response.next_code;\n        }\n        vm.gettingCode = false;\n      });\n    }\n\n    function codeNameFormatter(item) {\n      return $filter('codename')(item);\n    }\n\n    function querySearch(endpoint, parameters) {\n      var deferred = $q.defer();\n      endpoint.get(\n        window.angular.extend(parameters, {\n          page_size: vm.AUTOCOMPLETE_PAGE\n        }),\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function categoryQuerySearch() {\n      return querySearch(api.inventories.categories, {\n        search: vm.categorySearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function categoryChanged(item) {\n      if (item && item.id) {\n        localStorage.setItem(Session.company.id + '::QuickProductCreatorDialogController::category::v2', JSON.stringify(item));\n        vm.product.category = item.id;\n      } else {\n        localStorage.removeItem(Session.company.id + '::QuickProductCreatorDialogController::category::v2');\n        vm.product.category = null;\n      }\n      vm.product.subcategory = null;\n    }\n\n    function subcategoryQuerySearch() {\n      return querySearch(api.inventories.subcategories, {\n        search: vm.subcategorySearchText.substring(0, SEARCH_MAX_LENGTH),\n        category_id: vm.product.category\n      });\n    }\n\n    function subcategoryChanged(item) {\n      if (item && item.id) {\n        vm.product.subcategory = item.id;\n      } else {\n        vm.product.subcategory = null;\n      }\n    }\n\n    function seasonQuerySearch() {\n      return querySearch(api.inventories.seasons, {\n        search: vm.seasonSearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function seasonChanged(season) {\n      if (season && season.id) {\n        localStorage.setItem(Session.company.id + '::QuickProductCreatorDialogController::season::v2', JSON.stringify(season));\n        vm.product.season = season.id;\n      } else {\n        localStorage.removeItem(Session.company.id + '::QuickProductCreatorDialogController::season::v2');\n        vm.product.season = null;\n      }\n    }\n\n    function brandQuerySearch() {\n      return querySearch(api.inventories.brands, {\n        search: vm.brandSearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function brandChanged(brand) {\n      if (brand && brand.id) {\n        localStorage.setItem(Session.company.id + '::QuickProductCreatorDialogController::brand::v2', JSON.stringify(brand));\n        vm.product.brand = brand.id;\n      } else {\n        localStorage.removeItem(Session.company.id + '::QuickProductCreatorDialogController::brand::v2');\n        vm.product.brand = null;\n      }\n    }\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndQuickProductCreatorButtonController', ndQuickProductCreatorButtonController)\n    .directive('ndQuickProductCreatorButton', ndQuickProductCreatorButton);\n\n  /** @ngInject */\n  function ndQuickProductCreatorButton() {\n    return {\n      restrict: 'E',\n      scope: {\n        saveCallback: '&'\n      },\n      controller: 'ndQuickProductCreatorButtonController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-quick-product-creator-button/nd-quick-product-creator-button.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndQuickProductCreatorButtonController($scope,\n                                                 $document,\n                                                 $mdDialog) {\n\n    // Data\n    var vm = this;\n\n    // Methods\n    vm.openDialog = openDialog;\n\n    // Initialize\n\n    // Functions\n\n    function openDialog() {\n      $mdDialog.show({\n        controller: 'QuickProductCreatorDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/directives/nd-quick-product-creator-button/quick-product-creator-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          params: {}\n        }\n      }).then(function (result) {\n        $scope.saveCallback({product: result});\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductVariantsController', ndProductVariantsController)\n    .directive('ndProductVariants', ndProductVariants);\n\n\n  /** @ngInject */\n  function ndProductVariants() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        variantCategories: '=',\n        saveCallback: '&?',\n        cancelCallback: '&?',\n        showButtons: '=?',\n        hideToasts: '=?',\n        isNew: '=?',\n        collapse: '=?'\n      },\n      controller: 'ndProductVariantsController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-variants/nd-product-variants.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndProductVariantsController($scope, $filter, $mdDialog, $document, $mdToast, $cookies, api, Session, SEARCH_MAX_LENGTH) {\n    // Parameters\n    $scope.product;\n    $scope.variantCategories;\n    $scope.collapse;\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    \n    // Data\n    $scope.selectedVariantCategories = [];\n    $scope.selectedVariantCategoryToAdd = {};\n\n    // new custom feature data\n    $scope.categoriesById = {};\n    $scope.variantsById = {};\n    $scope.categoryIdByVariantId = {};\n    $scope.firstOption = {\n      collapsed: false,\n      currentCategory: null,\n      categoriesFilter: null,\n      selectedCategories: [],\n      optionsFilter: \"\",\n      selectAll: {},\n    };\n    $scope.secondOption = {\n      collapsed: false,\n      currentCategory: null,\n      categoriesFilter: null,\n      selectedCategories: [],\n      optionsFilter: \"\",\n      selectAll: {},\n    };\n\n    // Methods\n    $scope.cancelProductVariants = cancelProductVariants;\n    $scope.saveProductVariants = saveProductVariants;\n    $scope.setAllColorVariants = setAllColorVariants;\n    $scope.setAllSizeVariants = setAllSizeVariants;\n    $scope.createNewVariant = createNewVariant;\n    $scope.preSaveProductVariants = preSaveProductVariants;\n    $scope.selectSize = selectSize;\n    $scope.selectColor = selectColor;\n    $scope.onSelectorOpen = onSelectorOpen;\n\n    // new custom feature methods\n    $scope.categoryIsSelected = categoryIsSelected;\n    $scope.setSelection = setSelection;\n    $scope.setSelectionForAllVariants = setSelectionForAllVariants;\n    $scope.toggleCollapse = toggleCollapse;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize() {\n      $scope.sizeCategories = [];\n      $scope.sizeCategoriesById = {};\n      $scope.colorCategories = [];\n      $scope.colorCategoriesById = {};\n\n      if ($scope.collapse) {\n        $scope.firstOption.collapsed = localStorage.getItem(Session.company.id + '::collapseFirstOption') === 'true';\n        $scope.secondOption.collapsed = localStorage.getItem(Session.company.id + '::collapseSecondOption') === 'true';\n      }\n\n      $scope.variantCategories.forEach(function(category){\n        $scope.categoriesById[category.id] = category;\n\n        category.variants.forEach(function(variant) {\n          $scope.variantsById[variant.id] = variant;\n          $scope.categoryIdByVariantId[variant.id] = category.id;\n        })\n      })\n\n      // get all variantCategories that has selected variants for the first option\n      $scope.product.color_variants.forEach(function(variantId){\n        $scope.variantsById[variantId].selected = true;\n\n        var categoryId = $scope.categoryIdByVariantId[variantId];\n        if ($scope.firstOption.selectedCategories.indexOf(categoryId) === -1) {\n          $scope.firstOption.selectedCategories.push(categoryId);\n          \n          if ($scope.firstOption.currentCategory === null)\n            $scope.firstOption.currentCategory = categoryId;\n        }\n      })\n\n      // get all variantCategories that has selected variants for the second option\n      $scope.product.size_variants.forEach(function(variantId){\n        $scope.variantsById[variantId].selected = true;\n        \n        var categoryId = $scope.categoryIdByVariantId[variantId];\n        if ($scope.secondOption.selectedCategories.indexOf(categoryId) === -1) {\n          $scope.secondOption.selectedCategories.push(categoryId);\n\n          if ($scope.secondOption.currentCategory === null)\n            $scope.secondOption.currentCategory = categoryId;\n        }\n      })\n\n      $scope.product.product_variants.forEach(function(variant) {\n        if (variant.total_stock > 0) {\n          $scope.variantsById[variant.color].hasStock = true;\n          $scope.variantsById[variant.color].selected = true;\n\n          $scope.variantsById[variant.size].hasStock = true;\n          $scope.variantsById[variant.size].selected = true;\n        }\n      })\n\n      if (!$scope.saveProductVariantsListener) {\n        $scope.saveProductVariantsListener = $scope.$on('saveProductVariants', function (event, data) {\n          saveProductVariants(data)\n        });\n\n        $scope.$on('$destroy', function () {\n          $scope.saveProductVariantsListener();\n        });\n      }\n\n    }\n\n    function selectSize(variant) {\n      var idx = $scope.product.size_variants.indexOf(variant.id);\n      if (idx > -1) {\n        $scope.product.size_variants.splice(idx, 1);\n      }else {\n        $scope.product.size_variants.push(variant.id);\n      }\n    }\n\n    function selectColor(variant) {\n      var idx = $scope.product.color_variants.indexOf(variant.id);\n      if (idx > -1) {\n        $scope.product.color_variants.splice(idx, 1);\n      }else {\n        $scope.product.color_variants.push(variant.id);\n      }\n    }\n\n    function setAllColorVariants(value) {\n      /*value = !!!value;\n      $scope.product.color_variants = angular.copy($scope.colorsWithStock);\n      if(value){\n        $scope.colorCategoriesById[$scope.product.color_category].variants.forEach(function(variant){\n          $scope.product.color_variants.push(variant.id);\n        });\n      }*/\n\n      value = !value;\n      if($scope.colorCategoriesById[$scope.product.color_category] && $scope.colorCategoriesById[$scope.product.color_category].variants){\n        $scope.colorCategoriesById[$scope.product.color_category].variants.forEach(function (size){\n          if(!size.hasStock){\n            size.selected = value;\n            var idx = $scope.product.size_variants.indexOf(size.id);\n            if (idx > -1) {\n              $scope.product.size_variants.splice(idx, 1);\n            }else {\n              $scope.product.size_variants.push(size.id);\n            }\n          }\n        });\n      }\n    }\n\n    function setAllSizeVariants(value) {\n      /*value = !!!value;\n      $scope.product.size_variants = angular.copy($scope.sizesWithStock);\n      if(value){\n        $scope.sizeCategoriesById[$scope.product.size_category].variants.forEach(function(variant){\n          $scope.product.size_variants.push(variant.id);\n        });\n      }*/\n\n      value = !value;\n      if($scope.sizeCategoriesById[$scope.product.size_category] && $scope.sizeCategoriesById[$scope.product.size_category].variants){\n        $scope.sizeCategoriesById[$scope.product.size_category].variants.forEach(function (size){\n          if(!size.hasStock){\n            size.selected = value;\n            var idx = $scope.product.size_variants.indexOf(size.id);\n            if (idx > -1) {\n              $scope.product.size_variants.splice(idx, 1);\n            }else {\n              $scope.product.size_variants.push(size.id);\n            }\n          }\n        });\n      }\n    }\n\n    function createNewVariant(ev, type) {\n\n      var variantCategory = null;\n\n      if (type === 'color'){\n        variantCategory = $scope.colorCategoriesById[$scope.product.color_category];\n      }else{\n        variantCategory = $scope.sizeCategoriesById[$scope.product.size_category];\n      }\n\n      $mdDialog.show({\n        controller: 'VariantCategoryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        fullscreen: $scope.customFullscreen,\n        resolve: {\n          object: function () {\n            return {};\n          },\n          isCategory: function () {\n            return false;\n          },\n          categories: function () {\n            return null;\n          },\n          specificCategory: function () {\n            return variantCategory;\n          }\n        }\n      })\n        .then(function (object) {\n          // Save buton clicked\n          api.inventories.variants.save(\n            object,\n            function (response, callback, status) {\n              if (status === 201) {\n                $mdToast.show($mdToast.simple().textContent('Variant Created!').position('top right'));\n                variantCategory.variants.unshift(response);\n                if (type == 'color'){\n                  $scope.product.color_variants.push(response.id);\n                }else{\n                  $scope.product.size_variants.push(response.id);\n                }\n              }\n            }\n          );\n        });\n    }\n\n    function cancelProductVariants() {\n      if ($scope.cancelCallback)\n        $scope.cancelCallback();\n      initialize();\n      $scope.variantsForm.$setPristine();\n    }\n\n    function preSaveProductVariants() {\n      // If the barcode pollicy has been configured\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.GENERATE_BARCODES_TITLE'))\n        .htmlContent('<p class=\"w-400\">' + $filter('translate')('PRODUCT.GENERATE_BARCODES_MSG') + '</p>')\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.YES'))\n        .cancel($filter('translate')('GENERAL.NO'));\n\n      $mdDialog.show(confirm).then(function () {\n        saveProductVariants({'generate_barcodes': true});\n      }, function () {\n        saveProductVariants({'generate_barcodes': false});\n      });\n    }\n\n    function saveProductVariants(data) {\n\n      if ($scope.firstOption.selectedCategories.length ||\n          $scope.secondOption.selectedCategories.length) {\n        $scope.product.has_variants = true;\n      } else {\n        $scope.product.has_variants = false;\n      }\n\n      var color_variants = [];\n      $scope.firstOption.selectedCategories.forEach(function(categoryId){\n        var category = $scope.categoriesById[categoryId];\n        category.variants.forEach(function(variant) {\n          if (variant.selected) color_variants.push({id:variant.id});\n        })\n      });\n\n      var size_variants = [];\n      $scope.secondOption.selectedCategories.forEach(function(categoryId){\n        var category = $scope.categoriesById[categoryId];\n        category.variants.forEach(function(variant) {\n          if (variant.selected) size_variants.push({id:variant.id});\n        })\n      });\n\n      api.inventories.products.save(\n        {\n          id: $scope.product.id,\n          option: 'variants',\n          generate_barcodes: data ? data.generate_barcodes : false,\n          size_category_id: $scope.product.size_category,\n          size_variants: size_variants,\n          color_category_id: $scope.product.color_category,\n          color_variants: color_variants\n        },\n        function (response) {\n\n          if (angular.isDefined(response.product_variants)) {\n            $scope.product.product_variants = angular.copy(response.product_variants);\n            if (!$scope.hideToasts)\n              $mdToast.show($mdToast.simple().textContent('Variants Updated!').position('top right'));\n          } else {\n            if (!$scope.hideToasts)\n              $mdToast.show($mdToast.simple().textContent('Problem Updating!').position('top right'));\n          }\n          if ($scope.saveCallback)\n            $scope.saveCallback();\n        }\n      );\n    }\n\n    function onSelectorOpen()\n    {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e)\n      {\n        e.stopPropagation();\n      });\n    }\n\n    ///////////////// NEW CUSTOM FEATURE IMPLEMENTATIONS ////////////////////\n    function categoryIsSelected(categoryId, option) {\n      return option.selectedCategories.indexOf(categoryId) !== -1;\n    }\n\n    function updateProductVariantsArray(option) {\n      var allVariantsIds = []\n      option.selectedCategories.forEach(function(categoryId) {\n        $scope.categoriesById[categoryId].variants.forEach(function(variant) {\n          if (variant.selected) allVariantsIds.push(variant.id);\n        })\n      })\n\n      if (option == $scope.secondOption) {\n        $scope.product.size_variants = allVariantsIds;\n      } else {\n        $scope.product.color_variants = allVariantsIds;\n      }\n    }\n\n    function setSelection(variant, option){\n      variant.selected = !variant.selected;\n\n      var categoryId = $scope.categoryIdByVariantId[variant.id];\n      var indexOfCategory = option.selectedCategories.indexOf(categoryId);\n      if (variant.selected && indexOfCategory === -1) {\n        option.selectedCategories.push(categoryId);\n      } else if (!variant.selected && indexOfCategory !== -1) {\n        var hasSelectedVariants = $scope.categoriesById[categoryId].variants.filter(function(variant) {\n          return variant.selected;\n        }).length;\n\n        if (!hasSelectedVariants) {\n          option.selectedCategories.splice(indexOfCategory, 1);\n        }\n      }\n\n      updateProductVariantsArray(option);\n    }\n\n    function setSelectionForAllVariants(categoryId, option) {\n      // this function is called before the checkbox model gets changed\n      $scope.categoriesById[categoryId].variants.forEach(function(variant) {\n        variant.selected = !option.selectAll[categoryId] || variant.hasStock;\n      });\n\n      var indexOfCategory = option.selectedCategories.indexOf(categoryId);\n      if (option.selectAll[categoryId] && indexOfCategory !== -1) {\n        option.selectedCategories.splice(indexOfCategory, 1);\n      } else if (!option.selectAll[categoryId] && indexOfCategory === -1) {\n        option.selectedCategories.push(categoryId);\n      }\n\n      updateProductVariantsArray(option);\n    }\n\n    function toggleCollapse(option) {\n      option.collapsed = !option.collapsed;\n      var tag = option == $scope.secondOption? '::collapseSecondOption' : '::collapseFirstOption';\n      localStorage.setItem(Session.company.id + tag, option.collapsed);\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductVariantsInformationController', ndProductVariantsInformationController)\n    .directive('ndProductVariantsInformation', ndProductVariantsInformation);\n\n  /** @ngInject */\n  function ndProductVariantsInformation() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        variantCategories: '=',\n        pricingTiers: '=',\n        company: '=',\n        editable: '=',\n        showDeleted: '=?'\n      },\n      controller: 'ndProductVariantsInformationController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-variants-information/nd-product-variants-information.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndProductVariantsInformationController($rootScope, $interval, $scope, $mdDialog, $mdToast, $filter, $document, api,\n                                                  GS1_BARCODE_TYPES_BY_ID, GS1_BARCODE_TYPES_BY_NAME, NdBarcodeService,\n                                                  HTTP_STATUS, ECOMMERCE_PLATFORMS, Session, ERROR_CODES) {\n\n    var vm = this;\n\n    // Data\n    vm.product = $scope.product;\n    vm.variantCategories = $scope.variantCategories;\n    vm.pricingTiers = $scope.pricingTiers;\n    vm.company = $scope.company;\n    vm.editable = $scope.editable;\n\n    vm.variantsById = {};\n    vm.variantCategoriesById = {};\n    vm.pricingTiersById = {};\n    vm.pricesByPricingTierDict = {};\n    vm.productVariantPricesMatrix = {};\n    vm.GS1_BARCODE_TYPES_BY_ID = GS1_BARCODE_TYPES_BY_ID;\n    vm.currency = $filter('currencyCharacter')(vm.company.currency);\n    vm.fetchingProductVariantPrices = true;\n    vm.productVariantsWithInvalidBarcode = [];\n    vm.backupCode = '';\n\n    vm.showPriceInclTax = localStorage.getItem(Session.company.id + '::showPriceInclTax') === 'true';\n    vm.showDeletedVariants = angular.isDefined($scope.showDeleted) ? $scope.showDeleted : localStorage.getItem(Session.company.id + '::showDeletedVariants') === 'true';\n\n    // new custom feature data\n    vm.categoryIdByVariantId = {};\n    vm.productVariantsById = {};\n    vm.checkedVariants = 0;\n    vm.showWooCommerceBanner = false;\n    vm.productVariantPricesAbortController = null;\n\n\n    // Methods\n    vm.editUnitCostPrice = editUnitCostPrice;\n    vm.updateProductVariant = updateProductVariant;\n    vm.getProductVariantPricingTierPrice = getProductVariantPricingTierPrice;\n    vm.updateVariantPrice = updateVariantPrice;\n    vm.editProductVariantPrice = editProductVariantPrice;\n    vm.getLength = getLength;\n    vm.updateBarcode = updateBarcode;\n    vm.generateCode = generateCode;\n    vm.backupBarcode = backupBarcode;\n    vm.generateAllBarcodes = generateAllBarcodes;\n    vm.enableDiscounts = enableDiscounts;\n    vm.isCase1 = isCase1;\n    vm.isCase2 = isCase2;\n    vm.isCase3 = isCase3;\n    vm.isCase4 = isCase4;\n    vm.isCase5 = isCase5;\n    vm.isCase6 = isCase6;\n    vm.checkBarcodeUnique = checkBarcodeUnique;\n    vm.onShowPriceInclTaxChange = onShowPriceInclTaxChange;\n    vm.deleteProductVariant = deleteProductVariant;\n    vm.onShowDeletedVariantsClick = onShowDeletedVariantsClick;\n    vm.hasInvalidSku = hasInvalidSku;\n    vm.getInvalidSkuTooltip = getInvalidSkuTooltip;\n\n    // new custom feature methods\n    vm.getVariantTag = getVariantTag;\n    vm.onCheckChanged = onCheckChanged;\n    vm.restore = restore;\n\n    vm.isCheckedSomeDeletableVariant = isCheckedSomeDeletableVariant;\n    vm.preExchangeProductVariant = preExchangeProductVariant;\n    vm.hasProductVariants = hasProductVariants;\n    vm.getDynamicHeader = getDynamicHeader;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      getProductVariantPrices();\n\n      vm.pricingTiers.map(function(pricingTier) {\n        vm.pricingTiersById[pricingTier.id] = pricingTier;\n      });\n\n      // Dictionary that it is used to know the variant code at the pricing list\n      vm.product.size_variants_instances.forEach(function(variant) {\n        vm.variantsById[variant.id] = variant;\n      });\n      vm.product.color_variants_instances.forEach(function(variant) {\n        vm.variantsById[variant.id] = variant;\n      });\n\n      vm.product.prices.forEach(function(price) {\n        // Show only the pricing tiers where the user have permission\n        if (angular.isDefined(vm.pricingTiersById[price.pricing_tier])) {\n          vm.pricesByPricingTierDict[price.pricing_tier] = price;\n        }\n      });\n\n      if (vm.variantCategories) {\n        vm.variantCategories.forEach(function(category) {\n          vm.variantCategoriesById[category.id] = category;\n\n          category.variants.forEach(function(variant) {\n            vm.variantsById[variant.id] = variant;\n            vm.categoryIdByVariantId[variant.id] = category.id;\n          });\n        });\n      }\n\n      vm.product.product_variants.forEach(function(variant) {\n        variant.hasStock = variant.total_stock > 0;\n        vm.productVariantsById[variant.id] = variant;\n      });\n\n      vm.product.product_variants.forEach(function(productVariant) {\n        checkBarcodeInvalid(productVariant);\n      });\n\n      vm.product.product_variants = vm.product.product_variants.sort(function(a, b) {\n        if (angular.isUndefined(vm.variantsById[a.size]) || angular.isUndefined(vm.variantsById[b.size]) || angular.isUndefined(vm.variantsById[a.color]) || angular.isUndefined(vm.variantsById[b.color])) {\n          if (angular.isUndefined(vm.variantsById[a.color])) {\n            return 1;\n          }\n          if (angular.isUndefined(vm.variantsById[b.color])) {\n            return -1;\n          }\n          if (angular.isUndefined(vm.variantsById[a.size])) {\n            return 1;\n          }\n          if (angular.isUndefined(vm.variantsById[b.size])) {\n            return -1;\n          }\n        }\n\n        if (!vm.variantsById[a.color] || !vm.variantsById[b.color]) {\n          return 0;\n        }\n        if (vm.variantsById[a.color].position < vm.variantsById[b.color].position) {\n          return -1;\n        }\n        if (vm.variantsById[b.color].position < vm.variantsById[a.color].position) {\n          return 1;\n        }\n        if (vm.variantsById[a.size].position < vm.variantsById[b.size].position) {\n          return -1;\n        }\n        if (vm.variantsById[b.size].position < vm.variantsById[a.size].position) {\n          return 1;\n        }\n        return 0;\n      });\n\n      if ($scope.variantsHasBeenUpdatedListener) {\n        $scope.variantsHasBeenUpdatedListener();\n      }\n\n      $scope.variantsHasBeenUpdatedListener = $rootScope.$on('onUpdateSelectedVariants', function() {\n        initialize();\n      });\n\n      $scope.$on('productUpdated', function(event, updatedProduct) {\n        ;\n        vm.product = updatedProduct;\n      });\n\n      $scope.$on('$destroy', function() {\n        $scope.variantsHasBeenUpdatedListener();\n      });\n    }\n\n    function checkBarcodeUnique(productVariant) {\n      productVariant.barcodeAlreadyExists = -1;\n      api.inventories.productVariants.get({\n        option: 'check-barcode-unique',\n        current_id: productVariant.id,\n        barcode: productVariant.barcode\n      }, function(response, callback, status) {\n        if (status == 200) {\n          productVariant.barcodeAlreadyExists = 0;\n        } else if (status == 302) {\n          productVariant.barcodeAlreadyExists = response.counter;\n        }\n        productVariant.checkBarcodeUniqueTimeout = null;\n      });\n    }\n\n    function hasInvalidSku(sku) {\n      if (!sku) {\n        return;\n      }\n\n      if (sku.includes('%') && vm.product.site_platforms.includes(ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE)) {\n        vm.showWooCommerceBanner = true;\n        return true;\n      }\n      return false;\n    }\n\n    function getInvalidSkuTooltip(sku) {\n      if (!vm.product.site_platforms.includes(ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE)) {\n        return $filter('translate')('PRODUCT.INVALID_SKU_DEFAULT_MESSAGE');\n      }\n      if (!sku.includes('%')) {\n        return $filter('translate')('PRODUCT.INVALID_SKU_DEFAULT_MESSAGE');\n      }\n      var indexof = sku.indexOf('%');\n      return $filter('translate')('PRODUCT.INVALID_SKU_WOOCOMMERCE_PERCENTAGE_MESSAGE', { sku: sku.replace(sku.substring(indexof, indexof + 3), '') });\n\n    }\n\n    function getProductVariantPrices(next) {\n      vm.fetchingProductVariantPrices = true;\n      if (vm.productVariantPricesAbortController) {\n        try {\n          vm.productVariantPricesAbortController.abort();\n        } catch (e) {\n        }\n      }\n      vm.productVariantPricesAbortController = new window.AbortController();\n      var url = api.urls.inventories.productVariantPrices.replace('/:id/', '') + '?product_id=' + vm.product.id;\n      if (next) {\n        url = next;\n      }\n\n      fetch(url, {\n        method: 'GET',\n        headers: { 'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json' },\n        signal: vm.productVariantPricesAbortController.signal\n      })\n        .then(function(response) {\n          return response.json();\n        }).then(function(response) {\n            processProductVariantPricesPage(response);\n            if (response.next) {\n              getProductVariantPrices(response.next);\n            } else {\n              vm.fetchingProductVariantPrices = false;\n              $scope.$applyAsync();\n            }\n          })\n            .catch(function(err) {\n              if (err && err.name === 'AbortError') {\n                return;\n              }\n              vm.fetchingProductVariantPrices = false;\n              $scope.$applyAsync();\n            });\n        }\n\n      function processProductVariantPricesPage(response) {\n        response.results.forEach(function(productVariantPrice) {\n          if (!vm.productVariantPricesMatrix[productVariantPrice.product_variant]) {\n            vm.productVariantPricesMatrix[productVariantPrice.product_variant] = {};\n          }\n          vm.productVariantPricesMatrix[productVariantPrice.product_variant][productVariantPrice.product_price] = productVariantPrice;\n        });\n      }\n\n\n    function editUnitCostPrice(productVariant) {\n\n      $mdDialog.show({\n        controller: 'ProductVariantUnitCostDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-variants-information/dialogs/product-variant-unit-cost-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          productVariant: productVariant\n        }\n      }).then(\n        function(result) {\n          if (result && result.updateAllUnitCosts) {\n            vm.product.product_variants.map(function(pV) {\n              return pV.ddp_price = productVariant.ddp_price;\n            });\n          }\n        }, function() {\n          // Nothing to do\n        });\n    }\n\n    function checkBarcodeInvalid(productVariant) {\n      if (!productVariant.barcode) {\n        productVariant.barcodeInvalid = false;\n      } else if (vm.product.default_barcode_type) {\n        productVariant.barcodeInvalid = !NdBarcodeService.isValid(productVariant.barcode, vm.product.default_barcode_type);\n      } else {\n        var validEan13 = productVariant.barcodeInvalid = NdBarcodeService.isValid(productVariant.barcode, GS1_BARCODE_TYPES_BY_NAME.GS1_EAN_13.id);\n        var validUpcA = productVariant.barcodeInvalid = NdBarcodeService.isValid(productVariant.barcode, GS1_BARCODE_TYPES_BY_NAME.GS1_UPC_A.id);\n        productVariant.barcodeInvalid = !(validEan13 || validUpcA);\n      }\n    }\n\n    function updateBarcode(productVariant) {\n      /**\n       * Note, if productVariant.barcode is null it may be due\n       * to the barcode does not reach the minimum characters\n       */\n\n      // If bar barcode is empty, ignore valid check and save\n      if (!productVariant.barcode && !!vm.backupCode) {\n        updateProductVariant(productVariant);\n        return;\n      }\n\n      checkBarcodeInvalid(productVariant);\n      if (productVariant.barcodeInvalid) {\n        vm.productVariantsWithInvalidBarcode.push(productVariant);\n        if (vm.isBarcodeInvalidDialogOpen) {\n          return;\n        }\n\n        vm.isBarcodeInvalidDialogOpen = true;\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.BARCODE_NOT_VALID'))\n          .htmlContent($filter('translate')('PRODUCT.BARCODE_NOT_VALID_MSN'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('PRODUCT.BARCODE_NOT_VALID_SAVE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          vm.productVariantsWithInvalidBarcode.map(function(pv) {\n            updateProductVariant(pv);\n          });\n\n          vm.productVariantsWithInvalidBarcode = [];\n          vm.isBarcodeInvalidDialogOpen = false;\n        }, function() {\n          vm.productVariantsWithInvalidBarcode.map(function(pv) {\n            checkBarcodeInvalid(pv);\n          });\n\n          vm.productVariantsWithInvalidBarcode = [];\n          vm.isBarcodeInvalidDialogOpen = false;\n        });\n      } else {\n        updateProductVariant(productVariant);\n      }\n    }\n\n    function updateProductVariant(productVariant) {\n      api.inventories.productVariants.update(\n        productVariant,\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            productVariant.barcode = response.barcode;\n            productVariant.sku = response.sku;\n            productVariant.ddp_price = response.ddp_price;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_VARIANT_UPDATED')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.MODIFIED_FILED_NOT_VALID')).position('top right'));\n          }\n        }\n      );\n      vm.showWooCommerceBanner = false;\n      checkBarcodeUnique(productVariant);\n    }\n\n\n    // Return the price if it exists\n    function getProductVariantPricingTierPrice(productPrice, productVariant) {\n      for (var i = 0; i < productVariant.prices.length; i++) {\n        if (productVariant.prices[i].product_price == productPrice.id) {\n          return productVariant.prices[i];\n        }\n      }\n    }\n\n\n    /**\n     * Updates the price of the productVariant\n     * @param productPrice\n     * @param data\n     */\n    function updateVariantPrice(productPrice, productVariant) {\n\n      var index = -1;\n\n      for (var i = 0; i < productVariant.prices.length; i++) {\n        if (productVariant.prices[i].product_price == productPrice.id) {\n          index = i;\n          break;\n        }\n      }\n\n      if (productVariant.prices[i].id) {\n        api.inventories.productVariantPrices.update(\n          productVariant.prices[i],\n          function(response) {\n            if (response.id) {\n              delete response.$promise;\n              delete response.$resolved;\n              productVariant.prices[index] = response;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRICE_UPDATED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STRING_ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      } else {\n        api.inventories.productVariantPrices.save(\n          productVariant.prices[i],\n          function(response) {\n            if (response.id) {\n              delete response.$promise;\n              delete response.$resolved;\n              productVariant.prices[index] = response;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRICE_UPDATED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STRING_ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function editProductVariantPrice(productVariant, productPrice) {\n      var buttonId = '#edit-button-' + productVariant.id + '-' + productPrice.id;\n      var productVariantPrice = {\n        product_price: productPrice.id,\n        product_variant: productVariant.id,\n        tax: vm.pricesByPricingTierDict[productPrice.pricing_tier].tax,\n        tax_percent_value: vm.pricesByPricingTierDict[productPrice.pricing_tier].tax_percent_value,\n        temp_price_excl_tax: vm.pricesByPricingTierDict[productPrice.pricing_tier].price_excl_tax,\n        temp_price_incl_tax: vm.pricesByPricingTierDict[productPrice.pricing_tier].price_incl_tax,\n        price_excl_tax: null,\n        price_incl_tax: null,\n        discount: null,\n        discount_price_excl_tax: null,\n        discount_price_incl_tax: null\n      };\n\n      if (vm.productVariantPricesMatrix[productVariant.id] &&\n        vm.productVariantPricesMatrix[productVariant.id][productPrice.id]) {\n        productVariantPrice = angular.extend(productVariantPrice, vm.productVariantPricesMatrix[productVariant.id][productPrice.id]);\n      }\n\n      $mdDialog.show({\n        controller: 'ProductVariantPriceDialogController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-variants-information/dialogs/product-variant-price-dialog.html',\n        clickOutsideToClose: true,\n        openFrom: buttonId,\n        closeTo: buttonId,\n        locals: {\n          productVariantPrice: productVariantPrice\n        }\n      }).then(\n        function(result) {\n          if (!result) {\n            vm.productVariantPricesMatrix[productVariant.id][productPrice.id] = null;\n          } else {\n            if (!vm.productVariantPricesMatrix[productVariant.id]) {\n              vm.productVariantPricesMatrix[productVariant.id] = {};\n            }\n            if (!vm.productVariantPricesMatrix[productVariant.id]) {\n              vm.productVariantPricesMatrix[productVariant.id] = {};\n            }\n            vm.productVariantPricesMatrix[productVariant.id][productPrice.id] = result;\n          }\n        }, function() {\n          // Nothing to do\n        });\n    }\n\n    function getLength(value) {\n      return toString(value).length;\n    }\n\n    function generateCode(productVariant, type) {\n      if (!vm.editable) {\n        return;\n      }\n\n      if (type === 'barcode') {\n        var dialogTitle = 'GENERATE_BARCODE';\n        var dialogContent = 'GENERATE_BARCODE_MSN';\n        var option = 'generate-barcode';\n      } else {\n        var dialogTitle = 'GENERATE_SKU';\n        var dialogContent = 'GENERATE_SKU_MSN';\n        var option = 'generate-sku';\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.' + dialogTitle))\n        .htmlContent($filter('translate')('PRODUCT.' + dialogContent))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('PRODUCT.' + dialogTitle))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (type == 'barcode') {\n          productVariant.generatingBarcode = true;\n        } else {\n          productVariant.generatingSku = true;\n        }\n\n        api.inventories.productVariants.get(\n          {\n            id: productVariant.id,\n            option: option\n          },\n          function(result, fn, status) {\n            productVariant.generatingBarcode = false;\n\n            if (result.Error === ERROR_CODES.ERROR_03_001_BARCODE_OVERFLOW) {\n              $mdDialog.show($mdDialog.alert()\n                .clickOutsideToClose(true)\n                .title($filter('translate')('CONFIGURATION.ERROR_BARCODE_OVERFLOW_TITLE'))\n                .textContent($filter('translate')('CONFIGURATION.ERROR_BARCODE_OVERFLOW_BODY'))\n                .ok('Aceptar')\n              );\n              return;\n            } else if (status != HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              return;\n            }\n\n            if (type == 'barcode') {\n              productVariant.barcode = result.barcode;\n              productVariant.barcodeInvalid = false;\n            } else {\n              productVariant.sku = result.sku;\n              productVariant.generatingSku = false;\n            }\n\n            var toastMsg = type == 'barcode' ? 'BARCODE_UPDATED' : 'SKU_UPDATED';\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.' + toastMsg)).position('top right'));\n          }\n        );\n      }, function() {\n        // Nothing to do. Do not remove.\n      });\n    }\n\n    function backupBarcode(barcode) {\n      if (barcode) {\n        vm.backupCode = angular.copy(barcode);\n      }\n    }\n\n    /**\n     * Returns true if the price is't only at product_price\n     * @param productVariant\n     * @param productPrice\n     */\n    function isCase1(productVariant, productPrice) {\n      // If it has productVariantPrice\n      if (vm.productVariantPricesMatrix[productVariant.id] && vm.productVariantPricesMatrix[productVariant.id][productPrice.id])\n        return false;\n\n      // If it has offer\n      if (vm.pricesByPricingTierDict[productPrice.pricing_tier] && vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax)\n        return false;\n\n      return true;\n    }\n\n    /**\n     * Returns true if the price is't only at product_price but with offer\n     * @param productVariant\n     * @param productPrice\n     */\n    function isCase2(productVariant, productPrice) {\n      // If it has productVariantPrice\n      if (vm.productVariantPricesMatrix[productVariant.id] && vm.productVariantPricesMatrix[productVariant.id][productPrice.id])\n        return false;\n\n      // If it doen't have offer\n      if (vm.pricesByPricingTierDict[productPrice.pricing_tier] && !vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax)\n        return false;\n\n      return true;\n    }\n\n    /**\n     * Returns true if the price is at product_variant_price\n     * @param productVariant\n     * @param productPrice\n     */\n    function isCase3(productVariant, productPrice) {\n      // If it has offer\n      if (vm.pricesByPricingTierDict[productPrice.pricing_tier] && vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax)\n        return false;\n\n      // If it doesn't have productVariantPrice\n      if (!vm.productVariantPricesMatrix[productVariant.id] || !vm.productVariantPricesMatrix[productVariant.id][productPrice.id])\n        return false;\n\n      // If it has productVariantPrice offer\n      if (vm.productVariantPricesMatrix[productVariant.id][productPrice.id] && vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_incl_tax)\n        return false;\n\n      return true;\n    }\n\n    /**\n     * Returns true if the price is at product_variant_price and product_price has offer\n     * @param productVariant\n     * @param productPrice\n     */\n    function isCase4(productVariant, productPrice) {\n      // If it doesn't_have offer\n      if (vm.pricesByPricingTierDict[productPrice.pricing_tier] && !vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax)\n        return false;\n\n      // If it doesn't have productVariantPrice\n      if (!vm.productVariantPricesMatrix[productVariant.id] || !vm.productVariantPricesMatrix[productVariant.id][productPrice.id])\n        return false;\n\n      // If it has productVariantPrice offer\n      if (vm.productVariantPricesMatrix[productVariant.id][productPrice.id] && vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_incl_tax)\n        return false;\n\n      return true;\n    }\n\n    /**\n     * Returns true if the price is at product_variant_price with offer and product_price doen't have offer\n     * @param productVariant\n     * @param productPrice\n     */\n    function isCase5(productVariant, productPrice) {\n      // If it has offer\n      if (vm.pricesByPricingTierDict[productPrice.pricing_tier] && vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax)\n        return false;\n\n      // If it doesn't have productVariantPrice\n      if (!vm.productVariantPricesMatrix[productVariant.id] || !vm.productVariantPricesMatrix[productVariant.id][productPrice.id])\n        return false;\n\n      // If it doesn't have productVariantPrice offer\n      if (vm.productVariantPricesMatrix[productVariant.id][productPrice.id] && !vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_incl_tax)\n        return false;\n\n      return true;\n    }\n\n    /**\n     * Returns Returns true if the price is at product_variant_price with offer and product_price has offer too\n     * @param productVariant\n     * @param productPrice\n     */\n    function isCase6(productVariant, productPrice) {\n      // If it doesn't_have offer\n      if (vm.pricesByPricingTierDict[productPrice.pricing_tier] && !vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax)\n        return false;\n\n      // If it doesn't have productVariantPrice\n      if (!vm.productVariantPricesMatrix[productVariant.id] || !vm.productVariantPricesMatrix[productVariant.id][productPrice.id])\n        return false;\n\n      // If it doesn't have productVariantPrice offer\n      if (vm.productVariantPricesMatrix[productVariant.id][productPrice.id] && !vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_incl_tax)\n        return false;\n\n      return true;\n    }\n\n    function generateAllBarcodes() {\n      if (!vm.editable)\n        return;\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.GENERATE_ALL_BARCODES'))\n        .htmlContent($filter('translate')('PRODUCT.GENERATE_ALL_BARCODES_MSN'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('PRODUCT.GENERATE_BARCODES'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        generateBarcodeRecursive(0);\n      }, function() {\n        // Nothing to do. Do not remove.\n      });\n    }\n\n    /**\n     * Calls recursively the API's generate-barcode method for the product_variant at the position i\n     * @param i\n     */\n    function generateBarcodeRecursive(i) {\n      if (i < vm.product.product_variants.length) {\n        if (vm.product.product_variants && vm.product.product_variants[i]) {\n          if (!vm.product.product_variants[i].barcode) {\n            vm.product.product_variants[i].generatingBarcode = true;\n            api.inventories.productVariants.get(\n              {\n                id: vm.product.product_variants[i].id,\n                option: 'generate-barcode'\n              },\n              function(result, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n\n                  vm.product.product_variants[i].barcode = result.barcode;\n                  vm.product.product_variants[i].barcodeInvalid = false;\n                  vm.product.product_variants[i].generatingBarcode = false;\n                  generateBarcodeRecursive(++i);\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                    .position('top right'));\n                  vm.product.product_variants[i].generatingBarcode = false;\n                }\n              }\n            );\n          } else {\n            generateBarcodeRecursive(++i);\n          }\n        }\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.BARCODE_UPDATED'))\n          .position('top right'));\n      }\n    }\n\n    function enableDiscounts() {\n      vm.saving = true;\n\n      api.inventories.products.update(\n        {\n          id: vm.product.id,\n          discount_active: true\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.product.discount_active = true;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      );\n\n    }\n\n    function onShowPriceInclTaxChange() {\n      localStorage.setItem(Session.company.id + '::showPriceInclTax', vm.showPriceInclTax);\n    }\n\n    function onShowDeletedVariantsClick() {\n      vm.showDeletedVariants = !vm.showDeletedVariants;\n      localStorage.setItem(Session.company.id + '::showDeletedVariants', vm.showDeletedVariants);\n    }\n\n    function deleteProductVariant(event) {\n      var dialogContent = '';\n      var selectedVariants = [];\n      var someHasStock = false;\n\n      vm.product.product_variants.forEach(function(variant) {\n        someHasStock |= variant.selected && variant.hasStock;\n\n        if (variant.selected && !variant.hasStock) {\n          selectedVariants.push(variant);\n          dialogContent += vm.product.name + ' <b>' + vm.getVariantTag(variant.color) + ' - ' + vm.getVariantTag(variant.size) + '</b>' + '<br>';\n        }\n      });\n\n      if (someHasStock) {\n        dialogContent += '<br><small> * ' + $filter('translate')('PRODUCT.SOME_NOT_DELETABLE_BECAUSE_HAS_STOCK') + '</small><br>';\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.DELETE_PRODUCT_VARIANT_WARN'))\n        .htmlContent(dialogContent)\n        .ariaLabel('delete product variant')\n        .targetEvent(event)\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (Session.hasPermission('inventory.products.product.details.delete')) {\n          selectedVariants.forEach(function(productVariant) {\n            api.inventories.productVariants.delete({\n              id: productVariant.id\n            }, function(result, fn, status) {\n              if (status !== HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                return;\n              }\n\n              productVariant.deleted = true;\n              productVariant.selected = false;\n              $rootScope.$broadcast('onUpdateProductVariants');\n\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n            });\n          });\n        }\n      });\n    }\n\n    function getVariantTag(variantId) {\n      var variant = vm.variantsById[variantId];\n      if (!variant) {\n        return '';\n      }\n      var categoryId = vm.categoryIdByVariantId[variantId];\n      if (categoryId == null) {\n        // just in case...\n        return variant.name;\n      }\n\n      var category = vm.variantCategoriesById[categoryId];\n      return variant.name + ' (' + category.name + ')';\n    }\n\n    function onCheckChanged(productVariant) {\n      vm.checkedVariants += productVariant.selected ? -1 : 1;\n    }\n\n    function restore(productVariant) {\n      productVariant.restoring = true;\n      api.inventories.productVariants.update({\n        id: productVariant.id,\n        option: 'restore'\n      }, function(result, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          productVariant.restoring = false;\n          return;\n        }\n\n        productVariant.deleted = false;\n        productVariant.selected = false;\n        $rootScope.$broadcast('onUpdateProductVariants');\n\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.RECOVERED_SUCCESSFULLY')).position('top right'));\n        productVariant.restoring = false;\n      });\n\n    }\n\n    function isCheckedSomeDeletableVariant() {\n      var someDeletable = false;\n      vm.product.product_variants.forEach(function(variant) {\n        someDeletable |= variant.selected && !variant.hasStock;\n      });\n\n      return someDeletable;\n    }\n\n    function showVariantMergeProgress() {\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: false,\n        escapeToClose: false,\n        locals: {\n          title: 'CONFIGURATION.WORK_IN_PROGRESS',\n          body: 'CONFIGURATION.PLEASE_WAIT'\n        }\n      });\n    }\n\n    function exchangeProductVariants(target, subjects) {\n      showVariantMergeProgress();\n\n      var subjectsIds = subjects.map(function(variant) {\n        return variant.id;\n      });\n\n      target.is_merging = true;\n      subjects.map(function(productVariant) {\n        productVariant.is_merging = true;\n      });\n\n      api.inventories.products.update({\n        id: vm.product.id,\n        option: 'merge',\n        target: target.id,\n        subjects: subjectsIds\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.WORK_IN_PROGRESS')).position('top right'));\n          startPulling(target, subjects);\n        } else if (status === HTTP_STATUS.HTTP_409_CONFLICT && results.error) {\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PRODUCT.VARIANT_MERGE_COLLISION'))\n            .htmlContent($filter('translate')('ERRORS.' + results.error))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          $mdDialog.hide();\n        }\n      });\n    }\n\n    function startPulling(target, subjects) {\n      var intervalPromise = $interval(function() {\n        api.inventories.products.get({\n          option: 'check-merge-status',\n          id: vm.product.id\n        }, function(result, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && result.is_merging === false) {\n            $interval.cancel(intervalPromise);\n            $mdDialog.hide();\n\n            api.inventories.productVariants.list(\n              {\n                product_id: vm.product.id,\n                serializer: 'ProductVariantSerializer',\n                deleted: true\n              }, function(product_variants, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  vm.product.product_variants = product_variants.results;\n                  $rootScope.$broadcast('onUpdateProductVariants');\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.EXCHANGE_COMPLETED')).position('top right'));\n                  subjects.map(function(productVariant) {\n                    productVariant.selected = false;\n                  });\n                  target.selected = false;\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              });\n          } else if (status === HTTP_STATUS.HTTP_500_INTERNAL_SERVER_ERROR) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            $mdDialog.hide();\n            $interval.cancel(intervalPromise);\n          }\n        });\n      }, 2000);\n    }\n\n    function preExchangeProductVariant(event) {\n      var selectedProductVariants = vm.product.product_variants.filter(function(variant) {\n        return variant.selected;\n      });\n\n      $mdDialog.show({\n        controller: 'ExchangeProductVariantsDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/exchange/exchange-product-variants-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          variants: selectedProductVariants,\n          product: vm.product\n        }\n      }).then(function(target) {\n        var subjects = selectedProductVariants.filter(function(variant) {\n          return variant.id !== target.id;\n        });\n        var targetVariant = selectedProductVariants.find(function(variant) {\n          return variant.id === target.id;\n        });\n\n        exchangeProductVariants(targetVariant, subjects);\n      }, function(error) {\n        // Do not remove\n      });\n    }\n\n    function hasProductVariants() {\n      return !!vm.product.product_variants.find(function(variant) {\n        return variant.deleted === false;\n      });\n    }\n\n    function getDynamicHeader(isFirstOption) {\n      var header = isFirstOption ? vm.product.color_category_name : vm.product.size_category_name;\n      if (header) return header;\n\n      var variant = isFirstOption ? vm.product.color_variants : vm.product.size_variants;\n      var placeholder = $filter('translate')('PRODUCT.' + isFirstOption ? 'COLOR' : 'SIZE');\n\n      return variant && variant.length ?\n        vm.variantCategoriesById[vm.variantsById[variant[0]].category].name : placeholder;\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n  .module('app.core')\n  .controller('ndProductTranslationsController', ndProductTranslationsController)\n  .directive('ndProductTranslations', ndProductTranslations);\n\n  /** @ngInject */\n  function ndProductTranslationsController($scope, $document, $mdToast, $filter, api, Session)\n  {\n    // Data\n    var vm = $scope;\n    vm.taToolbar = [\n      ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'],\n      ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent', 'html', 'insertImage', 'insertLink', 'wordcount', 'charcount']\n    ];\n    vm.languages = [{\n      name: 'Spanish',\n      code: 'es'\n    }];\n\n    // Methods\n    vm.addTranslation = addTranslation;\n    vm.deleteTranslation = deleteTranslation;\n    vm.cancelTranslation = cancelTranslation;\n    vm.saveTranslation = saveTranslation;\n\n    // Initialization\n    init();\n\n    // Functions\n\n    function init(){\n\n\n    }\n\n    function addTranslation(){\n      vm.productTranslations.push({\n        name: vm.product.name,\n        description: vm.product.description,\n        lang: vm.languages[0].code,\n        product: vm.product.id\n      })\n    }\n\n    function deleteTranslation(translation){\n      if(!!!translation.id){\n        for(var i=0; i<vm.productTranslations.length; i++){\n          var current = vm.productTranslations[i];\n          if(current.name == translation.name && current.description == translation.description && current.lang == translation.lang){\n            vm.productTranslations.splice(i, 1);\n            return;\n          }\n        }\n      }else{\n        if(vm.saving)\n          return;\n\n        vm.saving = true;\n        api.inventories.productTranslations.delete(\n          translation,\n          function (response, callback, status) {\n            if(status==204){\n              for(var i=0; i<vm.productTranslations.length; i++){\n                var current = vm.productTranslations[i];\n                if(current.id == translation.id){\n                  vm.productTranslations.splice(i, 1);\n                  return;\n                }\n              }\n            }\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n    function cancelTranslation(){\n\n    }\n\n    function saveTranslation(translation){\n      if(vm.saving)\n        return;\n\n      vm.saving = true;\n      if(!!!translation.id){\n        api.inventories.productTranslations.save(\n          translation,\n          function (response, callback, status) {\n            if(status==201){\n              angular.extend(translation, response);\n            }\n            vm.saving = false;\n          }\n        );\n      }else{\n         api.inventories.productTranslations.update(\n          translation,\n          function (response, callback, status) {\n            if(status==200){\n              angular.extend(translation, response);\n            }\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n  }\n\n  /** @ngInject */\n  function ndProductTranslations()\n  {\n    return {\n      restrict   : 'E',\n      scope      : {\n        product: '=',\n        productTranslations: '='\n      },\n      controller : 'ndProductTranslationsController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-translations/nd-product-translations.html',\n      link : function (scope, element, attrs)\n      {\n\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductStockKpisController', ndProductStockKpisController)\n    .directive('ndProductStockKpis', ndProductStockKpis);\n\n  /** @ngInject */\n  function ndProductStockKpis() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        productVariant: '=?',\n        warehouses: '=',\n        showInfo: '=',\n        editType: '=',\n        viewType: '=?',\n        edit: '=?',\n        allowEdition: '=?',\n        hideAggregates: '=?'\n      },\n      controller: 'ndProductStockKpisController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-stock-kpis/nd-product-stock-kpis.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndProductStockKpisController($scope,\n                                        $filter,\n                                        $timeout,\n                                        $mdToast,\n                                        $state,\n                                        $mdMenu,\n                                        $rootScope,\n                                        $mdSidenav,\n                                        $mdDialog,\n                                        api,\n                                        Session,\n                                        HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.view = 'available_on_hand';\n    vm.loading = false;\n    vm.aggregatedData = [];\n    vm.aggregatedDict = {};\n    vm.aggregatedDictBackup = {};\n    vm.productVariantKpis = null;\n    vm.productVariantKpisDict = {};\n    vm.productVariantKpisTotals = {};\n    vm.productVariantKpisColorTotals = {};\n    vm.productVariantKpisColorSizeTotals = {};\n    vm.productVariantByVariantsIds = {};\n    vm.transferOrderProductVariants = {};\n    vm.previsualizeTransferDraft = false;\n    vm.loadingTransferOrderProductVariantDrafts = false;\n    vm.product = $scope.product;\n    vm.productVariant = $scope.productVariant;\n    vm.warehouses = $scope.warehouses;\n    vm.edit = $scope.edit;\n    vm.showAggregates = !$scope.hideAggregates;\n    vm.editTransfer = false;\n    vm.stocksByProductVariantIdAndWarehouseId = {};\n    vm.session = Session;\n    vm.viewStock = true;\n    vm.hasMinStockFeature = false;\n    vm.hasTransferOrderFeature = false;\n    vm.hasPurchaseOrderFeature = false;\n    vm.selectedProduct = vm.product;\n    vm.colorVariants = vm.product.color_variants;\n    vm.sizeVariants = vm.product.size_variants;\n\n    // Methods\n    vm.updateStock = updateStock;\n    vm.showToast = showToast;\n    vm.previewProductVariantTransfers = previewProductVariantTransfers;\n    vm.getTransferOrderProductVariants = getTransferOrderProductVariants;\n    vm.showEditButton = showEditButton;\n    vm.showEditTransfersButton = showEditTransfersButton;\n    vm.toggleEdition = toggleEdition;\n    vm.toggleEditTransfers = toggleEditTransfers;\n    vm.togglePrevisualizeTransferDrafts = togglePrevisualizeTransferDrafts;\n    vm.paintUnderMinimumBg = paintUnderMinimumBg;\n    vm.setView = setView;\n    vm.viewSelectChanged = viewSelectChanged;\n    vm.upgradePlan = upgradePlan;\n    vm.changeSelectedProduct = changeSelectedProduct;\n    vm.isProductBundleVariantSelected = isProductBundleVariantSelected;\n    vm.showStockColumn = showStockColumn;\n    vm.showAllocatedColumn = showExtraColumns;\n    vm.showTransferredInTransitColumn = showExtraColumns;\n    vm.showPurchasedInTransitColumn = showExtraColumns;\n    vm.showSoldColumn = showSoldColumn;\n    vm.getCover = getCover;\n\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      if (!$scope.viewType) {\n        $scope.viewType = 'stock';\n      }\n\n      reloadTable();\n\n      if (!vm.warehouses) {\n        var sessionWarehousesId = Session.company.id + '::' + Session.user.id + '::ndProductStockKpis::warehouses';\n        var sessionWarehouses = sessionStorage.getItem(sessionWarehousesId);\n        if (sessionWarehouses) {\n          vm.warehouses = JSON.parse(sessionWarehouses);\n        } else {\n          api.inventories.warehouses.get({\n            serializer: 'WarehouseSimpleSerializer',\n            filter_stock_by_warehouse: 'true'\n          }, function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.warehouses = results.results;\n              sessionStorage.setItem(sessionWarehousesId, JSON.stringify(vm.warehouses));\n            }\n          });\n        }\n      }\n\n      vm.product.product_variants.forEach(function(productVariant) {\n        if (productVariant.size === null || productVariant.color === null) {\n          return\n        }\n\n        if (angular.isUndefined(vm.productVariantByVariantsIds[productVariant.size.id])) {\n          vm.productVariantByVariantsIds[productVariant.size.id] = {};\n        }\n        vm.productVariantByVariantsIds[productVariant.size.id][productVariant.color.id] = productVariant;\n      });\n\n      $scope.$on('previewPanel::close', function(event, params) {\n        getTransferOrderProductVariants();\n      });\n\n      vm.hasMinStockFeature = !Session.hasSubscription || Session.hasFeature('inventory.products.product.stock.min_stock');\n      vm.hasTransferOrderFeature = !Session.hasSubscription || Session.hasFeature('app.inventory.transfers');\n      vm.hasPurchaseOrderFeature = !Session.hasSubscription || Session.hasFeature('app.inventory.purchases');\n    }\n\n    function getTransferOrderProductVariants() {\n\n      if (!vm.previsualizeTransferDraft) {\n        vm.transferOrderProductVariants = {};\n        return;\n      }\n\n      if (vm.loadingTransferOrderProductVariantDrafts) {\n        return;\n      }\n\n      vm.loadingTransferOrderProductVariantDrafts = true;\n\n      api.inventories.transferOrderProductVariants.list({\n        product_id: vm.product.id,\n        statuses: [1].join(',')\n      }, function(response) {\n        vm.transferOrderProductVariants = response.results;\n        response.results.forEach(function(topv) {\n          if (angular.isUndefined(vm.transferOrderProductVariants[topv.color])) {\n            vm.transferOrderProductVariants[topv.color] = {};\n          }\n          if (angular.isUndefined(vm.transferOrderProductVariants[topv.color][topv.size])) {\n            vm.transferOrderProductVariants[topv.color][topv.size] = {};\n          }\n          if (angular.isUndefined(vm.transferOrderProductVariants[topv.color][topv.size][topv.source_warehouse_id])) {\n            vm.transferOrderProductVariants[topv.color][topv.size][topv.source_warehouse_id] = 0;\n          }\n          if (angular.isUndefined(vm.transferOrderProductVariants[topv.color][topv.size][topv.target_warehouse_id])) {\n            vm.transferOrderProductVariants[topv.color][topv.size][topv.target_warehouse_id] = 0;\n          }\n          vm.transferOrderProductVariants[topv.color][topv.size][topv.source_warehouse_id] -= topv.amount;\n          vm.transferOrderProductVariants[topv.color][topv.size][topv.target_warehouse_id] += topv.amount;\n        });\n        vm.loadingTransferOrderProductVariantDrafts = false;\n      });\n    }\n\n    function reloadTable() {\n      var productId = vm.selectedProduct.id;\n      var productVariantId = null;\n      if (isProductBundleVariantSelected()) {\n        productId = vm.selectedProduct.product;\n        productVariantId = vm.selectedProduct.id;\n      }\n      vm.loading = true;\n      api.inventories.stocks.list({\n        option: 'aggregate',\n        product_id: productId,\n        product_variant_id: productVariantId\n      }, function(response) {\n        vm.aggregatedData = response;\n        vm.loading = false;\n        renderTable();\n      });\n    }\n\n    function showToast(movement, sizeName, colorName) {\n      if (!movement || !sizeName || !colorName) {\n        $mdToast\n          .show($mdToast.simple()\n            .textContent($filter('translate')('PRODUCT.STOCK_SAVED'))\n            .position('top right'));\n\n        return;\n      }\n\n      var message = $filter('translate')('MOVEMENTS.TOAST_INFO');\n      message = message.replace('$size', sizeName);\n      message = message.replace('$color', colorName);\n\n      $mdToast\n        .show($mdToast.simple()\n          .textContent(message)\n          .action($filter('translate')('MOVEMENTS.ADD_REASON'))\n          .highlightAction(true)\n          .hideDelay(5000)\n          .position('top right'))\n        .then(function(response) {\n          if (response === 'ok') {\n            $mdDialog.show({\n              controller: 'StockMovementDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/inventory/views/product/dialogs/stock-movement/stock-movement.html',\n              clickOutsideToClose: true,\n              multiple: true,\n              locals: {\n                movement: movement,\n                readonly: false,\n                callback: function(movement) {\n                  api.inventories.stockMovements.update(\n                    movement, function(response) {\n                      $mdToast\n                        .show($mdToast.simple()\n                          .textContent($filter('translate')('PRODUCT.STOCK_SAVED'))\n                          .position('top right'));\n                    });\n                }\n              }\n            });\n          }\n        });\n    }\n\n    function restoreCurrentStockBackup(size, color, warehouseId) {\n      vm.aggregatedDict[color.id][warehouseId][size.id] = angular.copy(\n        vm.aggregatedDictBackup[color.id][warehouseId][size.id]\n      );\n    }\n\n    function setCurrentStockBackup(size, color, warehouseId) {\n      if (!vm.aggregatedDictBackup[color.id]) {\n        vm.aggregatedDictBackup[color.id] = {};\n      }\n      if (!vm.aggregatedDictBackup[color.id][warehouseId]) {\n        vm.aggregatedDictBackup[color.id][warehouseId] = {};\n      }\n      vm.aggregatedDictBackup[color.id][warehouseId][size.id] = angular.copy(\n        vm.aggregatedDict[color.id][warehouseId][size.id]\n      );\n    }\n\n    function updateStock(color, warehouse, size) {\n      var stockId = null;\n      var stock = null;\n\n      if (vm.aggregatedDict[color.id][warehouse.id][size.id].available_on_hand) {\n        stockId = vm.aggregatedDict[color.id][warehouse.id][size.id].available_on_hand.stock_id;\n        stock = vm.aggregatedDict[color.id][warehouse.id][size.id].available_on_hand.stock;\n      }\n\n      var minimumStock = null;\n      if (vm.aggregatedDict[color.id][warehouse.id][size.id].minimum_stock) {\n        minimumStock = vm.aggregatedDict[color.id][warehouse.id][size.id].minimum_stock.stock;\n      }\n\n      if (!stock) {\n        stock = 0;\n      }\n      if (!minimumStock) {\n        minimumStock = 0;\n      }\n\n      if (!stockId || angular.isUndefined(stockId)) {\n        _postStock(stock, minimumStock, size, color, warehouse);\n      } else {\n        if (vm.view === 'available_on_hand') {\n          _putStock(stockId, stock, minimumStock, size, color, warehouse);\n        } else if (vm.view === 'minimum_stock') {\n          _patchMinStock(stockId, stock, minimumStock, size, color, warehouse);\n        }\n      }\n    }\n\n    function _postStock(stock, minimumStock, size, color, warehouse) {\n      api.inventories.stocks.save({\n        stock: stock,\n        minimum_stock: minimumStock,\n        product_variant: vm.productVariantByVariantsIds[size.id][color.id].id,\n        warehouse: warehouse.id,\n        // TODO this parameter is to ensure the retro compatibility. Removed after its deployed\n        return_stock_and_movement: true\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          if (vm.aggregatedDict[color.id][warehouse.id][size.id].available_on_hand) {\n            vm.aggregatedDict[color.id][warehouse.id][size.id].available_on_hand.stock_id = response.stock.id;\n          }\n\n          if (vm.aggregatedDict[color.id][warehouse.id][size.id].minimum_stock) {\n            vm.aggregatedDict[color.id][warehouse.id][size.id].minimum_stock.stock_id = response.stock.id;\n          }\n          setCurrentStockBackup(size, color, warehouse.id);\n\n          if (stock === 0 && minimumStock !== 0) {\n            showStockMinimumToast();\n          } else {\n            vm.showToast(response.stock_movement, size.name, color.name);\n          }\n\n        } else if (status === HTTP_STATUS.HTTP_403_FORBIDDEN) {\n          restoreCurrentStockBackup(size, color, warehouse.id);\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('PRODUCT.WITHOUT_STOCK_PERMISSIONS'))\n              .position('top right')\n          );\n        } else {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right')\n          );\n        }\n      });\n    }\n\n    function _putStock(stockId, stock, minimumStock, size, color, warehouse) {\n      api.inventories.stocks.update({\n        id: stockId,\n        stock: stock,\n        minimum_stock: minimumStock,\n        // TODO this parameter is to ensure the retro compatibility. Removed after its deployed\n        return_stock_and_movement: true\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          setCurrentStockBackup(size, color, warehouse.id);\n          vm.showToast(response.stock_movement, size.name, color.name);\n        } else if (status === HTTP_STATUS.HTTP_403_FORBIDDEN) {\n          restoreCurrentStockBackup(size, color, warehouse.id);\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('PRODUCT.WITHOUT_STOCK_PERMISSIONS'))\n              .position('top right'));\n        } else {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right')\n          );\n        }\n      });\n    }\n\n    function showStockMinimumToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('PRODUCT.MIN_STOCK_SAVED'))\n        .position('top right'));\n    }\n\n    function _patchMinStock(stockId, stock, minimumStock, size, color, warehouse) {\n      api.inventories.stocks.patch({\n        option: 'minimum-stock',\n        id: stockId,\n        params: {\n          minimum_stock: minimumStock\n        }\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          setCurrentStockBackup(size, color, warehouse.id);\n          showStockMinimumToast();\n        } else if (status === HTTP_STATUS.HTTP_403_FORBIDDEN) {\n          restoreCurrentStockBackup(size, color, warehouse.id);\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('PRODUCT.WITHOUT_STOCK_PERMISSIONS'))\n              .position('top right'));\n        } else {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right')\n          );\n        }\n      });\n    }\n\n    function previewProductVariantTransfers(event, color_id, size_id, warehouseId) {\n      if (!vm.selectedSourceWarehouse) {\n        vm.selectedSourceWarehouse = warehouseId;\n        vm.firstWarehouseObject = angular.element(event.currentTarget);\n        vm.firstColorId = color_id;\n        vm.firstSizeId = size_id;\n        if (vm.firstWarehouseObject) {\n          vm.firstWarehouseObject.addClass('selected');\n        }\n        $timeout(function() {\n          vm.selectedSourceWarehouse = null;\n          if (vm.firstWarehouseObject) {\n            vm.firstWarehouseObject.removeClass('selected');\n          }\n          vm.firstWarehouseObject = null;\n          vm.firstColorId = null;\n          vm.firstSizeId = null;\n        }, 10000);\n        return;\n      } else {\n        if (vm.firstWarehouseObject) {\n          vm.firstWarehouseObject.removeClass('selected');\n        }\n        vm.firstWarehouseObject = null;\n        if (vm.firstColorId != color_id || vm.firstSizeId != size_id) {\n          vm.selectedSourceWarehouse = null;\n          vm.firstColorId = null;\n          vm.firstSizeId = null;\n          return;\n        }\n        vm.selectedTargetWarehouse = warehouseId;\n        vm.firstColorId = null;\n        vm.firstSizeId = null;\n      }\n      if (vm.view === 'available_on_hand' && vm.editTransfer) {\n        var product_variant_id = vm.productVariantByVariantsIds[size_id][color_id].id;\n        $rootScope.$broadcast('previewPanel::open', {\n          preview: 'product-variant-transfers',\n          params: {\n            productInstance: vm.product,\n            productVariantId: product_variant_id,\n            sourceWarehouseId: vm.selectedSourceWarehouse,\n            targetWarehouseId: vm.selectedTargetWarehouse\n          }\n        });\n        vm.selectedSourceWarehouse = null;\n        vm.selectedTargetWarehouse = null;\n      }\n    }\n\n    function initStockDict() {\n      return {\n        available_on_hand: 0,\n        allocated_on_retail: 0,\n        in_transit_on_transfer: 0,\n        in_transit_on_purchase: 0,\n        sold_on_retail: 0\n      };\n    }\n\n    function renderTable() {\n      vm.aggregatedDict = {};\n      vm.aggregatedDictBackup = {};\n\n      var aggregates = ['available_on_hand',\n        'allocated_on_retail', 'in_transit_on_transfer',\n        'in_transit_on_purchase', 'sold_on_retail'];\n\n      aggregates.forEach(function(aggregateName) {\n        vm.aggregatedData[aggregateName].forEach(function(aoh) {\n          if (angular.isUndefined(vm.aggregatedDict[aoh.color_id])) {\n            vm.aggregatedDict[aoh.color_id] = {};\n            vm.aggregatedDictBackup[aoh.color_id] = {};\n            vm.productVariantKpisTotals[aoh.color_id] = {};\n            vm.productVariantKpisColorSizeTotals[aoh.color_id] = {};\n            vm.productVariantKpisColorTotals[aoh.color_id] = initStockDict();\n          }\n          if (angular.isUndefined(vm.aggregatedDict[aoh.color_id][aoh.warehouse_id])) {\n            vm.aggregatedDict[aoh.color_id][aoh.warehouse_id] = {};\n            vm.aggregatedDictBackup[aoh.color_id][aoh.warehouse_id] = {};\n            vm.productVariantKpisTotals[aoh.color_id][aoh.warehouse_id] = initStockDict();\n          }\n          if (angular.isUndefined(vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id])) {\n            vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id] = initStockDict();\n          }\n          if (angular.isUndefined(vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id])) {\n            vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id] = {};\n            vm.aggregatedDictBackup[aoh.color_id][aoh.warehouse_id][aoh.size_id] = {};\n          }\n\n          vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id][aggregateName] = aoh;\n          vm.aggregatedDictBackup[aoh.color_id][aoh.warehouse_id][aoh.size_id][aggregateName] = angular.copy(aoh);\n          vm.productVariantKpisColorTotals[aoh.color_id][aggregateName] += aoh.stock;\n          vm.productVariantKpisTotals[aoh.color_id][aoh.warehouse_id][aggregateName] += aoh.stock;\n          vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id][aggregateName] += aoh.stock;\n        });\n      });\n\n      // The minimum stock comes with the available on hand, so we deal with it apart\n      vm.aggregatedData['available_on_hand'].forEach(function(aoh) {\n        var msAoh = angular.copy(aoh);\n        msAoh.stock = msAoh.minimum_stock;\n        msAoh.isUndefined = angular.isUndefined(msAoh.minimum_stock);\n        vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id]['minimum_stock'] = msAoh;\n        vm.productVariantKpisColorTotals[aoh.color_id]['minimum_stock'] += msAoh.minimum_stock;\n        vm.productVariantKpisTotals[aoh.color_id][aoh.warehouse_id]['minimum_stock'] += msAoh.minimum_stock;\n        vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id]['minimum_stock'] += msAoh.minimum_stock;\n      });\n    }\n\n    function showEditButton() {\n      return showEditTransfersButton() && (!vm.product.manage_uids || vm.view ==='minimum_stock');\n    }\n\n    function showEditTransfersButton() {\n      return vm.showAggregates &&\n        !vm.product.is_bundle &&\n        Session.hasPermission('inventory.products.product.details.update') &&\n        $scope.allowEdition && (\n          vm.view === 'minimum_stock' ||\n          vm.view === 'available_on_hand'\n        );\n    }\n\n    function toggleEdition() {\n      if (!vm.showEditButton()) {\n        return;\n      }\n\n      setEdit(!vm.edit);\n      if (vm.edit) {\n        vm.editTransfer = false;\n        vm.previsualizeTransferDraft = false;\n      }\n    }\n\n    function toggleEditTransfers() {\n      vm.editTransfer = !vm.editTransfer;\n      if (vm.editTransfer) {\n        vm.edit = false;\n      }\n    }\n\n    function setEdit(value) {\n      if (Session.hasPermission('inventory.products.product.details.update')) {\n        vm.edit = value;\n      }\n    }\n\n    function togglePrevisualizeTransferDrafts() {\n      vm.previsualizeTransferDraft = !vm.previsualizeTransferDraft;\n      if (vm.previsualizeTransferDraft) {\n        vm.getTransferOrderProductVariants();\n      }\n    }\n\n    function paintUnderMinimumBg(color, warehouse, size) {\n      if (vm.view !== 'available_on_hand' && vm.view !== 'minimum_stock') {\n        return false;\n      }\n      if (vm.aggregatedDict[color] &&\n        vm.aggregatedDict[color][warehouse] &&\n        vm.aggregatedDict[color][warehouse][size] &&\n        vm.aggregatedDict[color][warehouse][size].available_on_hand &&\n        vm.aggregatedDict[color][warehouse][size].minimum_stock) {\n        return !vm.aggregatedDict[color][warehouse][size].minimum_stock.isUndefined &&\n          vm.aggregatedDict[color][warehouse][size].available_on_hand.stock < vm.aggregatedDict[color][warehouse][size].minimum_stock.stock;\n      }\n      return false;\n    }\n\n    function setView(view) {\n      vm.view = view;\n      setEdit(false);\n    }\n\n    function viewSelectChanged() {\n      if (vm.view !== 'available_on_hand' && vm.view !== 'minimum_stock') {\n        setEdit(false);\n      }\n    }\n\n    function upgradePlan(event, flag, source) {\n      if (!flag) {\n        event.stopPropagation();\n        $state.go('app.account.upgrade_plan', {\n          source: source\n        });\n      }\n    }\n\n    function changeSelectedProduct() {\n      if (isProductBundleVariantSelected()) {\n        vm.colorVariants = [vm.selectedProduct.color];\n        vm.sizeVariants = [vm.selectedProduct.size];\n      } else {\n        vm.colorVariants = vm.product.color_variants;\n        vm.sizeVariants = vm.product.size_variants;\n      }\n      reloadTable();\n    }\n\n    function isProductBundleVariantSelected() {\n      return !!vm.selectedProduct.product;\n    }\n\n    function showExtraColumns() {\n      if (!vm.showAggregates) {\n        return false;\n      }\n\n      return !vm.product.is_bundle || vm.isProductBundleVariantSelected();\n    }\n\n    function showStockColumn() {\n      return vm.showAggregates;\n    }\n\n    function showSoldColumn() {\n      return vm.showAggregates;\n    }\n\n    function getCover(item) {\n      if (!item) {\n        return;\n      }\n\n      if (item.cover_thumbnail) {\n        return item.cover_thumbnail;\n      }\n      if (item.is_bundle) {\n        return '/assets/images/custom-material-design-icons/package-variant-closed-3.5badf57d.svg';\n      }\n      return '/assets/images/package-variant-closed.9c71cbbe.png';\n    }\n\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductProviderPriceController', ndProductProviderPriceController)\n    .directive('ndProductProviderPrice', ndProductProviderPrice);\n\n  /** @ngInject */\n  function ndProductProviderPrice() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        productProviderPrices: '=',\n        taxes: '='\n      },\n      controller: 'ndProductProviderPriceController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-provider-price/nd-product-provider-price.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n\n  }\n\n  /** @ngInject */\n  function ndProductProviderPriceController($scope, $document, $mdDialog, $mdToast, $filter, api, Session, HTTP_STATUS, PROVIDER_PRICE_TYPES, PROVIDER_PRICE_TYPES_REVERSE, CURRENCIES) {\n\n    var vm = this;\n\n    // Data\n    vm.product = $scope.product;\n    vm.productProviderPrices = $scope.productProviderPrices;\n    vm.session = Session;\n    vm.PROVIDER_PRICE_TYPES = PROVIDER_PRICE_TYPES;\n    vm.PROVIDER_PRICE_TYPES_REVERSE = PROVIDER_PRICE_TYPES_REVERSE;\n    vm.CURRENCIES = CURRENCIES;\n    vm.saving = false;\n    vm.taxes = $scope.taxes;\n    vm.hasProviderPricesFeature = false;\n\n    // Methods\n    vm.saveProductProviderPrices = saveProductProviderPrices;\n    vm.cancelProductProviderPrices = cancelProductProviderPrices;\n    vm.addProductProviderPrice = addProductProviderPrice;\n    vm.deleteProductProviderPrice = deleteProductProviderPrice;\n    vm.showAndHideVariants = showAndHideVariants;\n    vm.editProductProviderPrice = editProductProviderPrice;\n    vm.setAsDirty = setAsDirty;\n    vm.isRowValid = isRowValid;\n    vm.allRowsValid = allRowsValid;\n    vm.hasDirtyness = hasDirtyness;\n    vm.getProviderName = getProviderName;\n\n    // Initialize\n    initialize();\n\n    // Functions\n\n    /**\n     * Converts pricingTiers array to a dict\n     */\n    function initialize() {\n      if (vm.productProviderPrices) {\n        vm.productProviderPrices.forEach(function(ppp) {\n          setupProductProviderPrice(ppp);\n        });\n      }\n      vm.hasProviderPricesFeature = !Session.hasSubscription || Session.hasFeature('inventory.products.product.pricing-tiers.provider-prices');\n    }\n\n    function setupProductProviderPrice(ppp) {\n      ppp.productVariantProviderPriceById = {};\n      ppp.product_variant_provider_prices.forEach(function(pvpp) {\n        ppp.productVariantProviderPriceById[pvpp.product_variant] = pvpp;\n      });\n\n      vm.product.product_variants.forEach(function(pv) {\n        if (!Object.keys(ppp.productVariantProviderPriceById).includes(pv.id.toString())) {\n          ppp.productVariantProviderPriceById[pv.id] = {\n            provider_sku: null,\n            provider_barcode: null,\n            provider_price: null,\n            final_cost_price: null,\n            product_variant: pv.id,\n            product_provider_price: ppp.id\n          };\n        }\n      });\n    }\n\n    /**\n     * Saves all the product prices\n     */\n    function saveProductProviderPrices() {\n      vm.productProviderPrices.forEach(function(ppp) {\n        if (ppp.id) {\n          updateProductProviderPrice(ppp);\n        } else {\n          createProductProviderPrice(ppp);\n        }\n      });\n    }\n\n    /**\n     * Call the directive parameter cancelCallback\n     */\n    function cancelProductProviderPrices() {\n      vm.saving = true;\n      initialize();\n      vm.saving = false;\n    }\n\n    /**\n     * Adds a new ProviderPrice with the default data to edit\n     */\n    function addProductProviderPrice() {\n      var provider_id = vm.product.provider ? vm.product.provider.id : null;\n      var provider_instance = vm.product.provider ? vm.product.provider : null;\n      var provider_price = vm.product.fob_price;\n      var final_cost_price = vm.product.ddp_price;\n\n      var productProviderPrice = {\n        product: vm.product.id,\n        provider: provider_id,\n        provider_instance: provider_instance,\n        provider_price: provider_price,\n        provider_currency: vm.session.company.currency,\n        provider_price_type: vm.PROVIDER_PRICE_TYPES['DELIVERED_DUTY_PAID'],\n        provider_product_code: vm.product.origin_code,\n        date: new Date(),\n        final_cost_price: final_cost_price,\n        deleting: false,\n        showVariants: false,\n        dirty: true\n      };\n\n      $mdDialog.show({\n        controller: 'ProductProviderPriceDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-provider-price/dialogs/product-provider-price-dialog.html',\n        parent: angular.element(document.body),\n        locals: {\n          taxes: vm.taxes,\n          productProviderPrice: productProviderPrice\n        }\n      }).then(function(result) {\n        if (result.id) {\n          updateProductProviderPrice(result);\n        } else {\n          createProductProviderPrice(result);\n        }\n      }, function() {\n\n      });\n    }\n\n    /**\n     * Deletes a ProviderPrice with index pppArrayIndex\n     * @param pppArrayIndex\n     */\n    function deleteProductProviderPrice(productProviderPrice, event) {\n      event.stopPropagation();\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.DELETE_ROW'))\n        .htmlContent($filter('translate')('PRODUCT.DELETE_ROW_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        var index = vm.productProviderPrices.findIndex(function(ppp) {\n          return ppp.id === productProviderPrice.id;\n        });\n\n        if (index !== -1) {\n          vm.productProviderPrices[index].deleting = true;\n          api.inventories.productProviderPrices.delete(\n            {\n              id: vm.productProviderPrices[index].id\n            },\n            function(result, fn, status) {\n              vm.productProviderPrices[index].deleting = false;\n              if (status !== HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                return;\n              }\n\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n              vm.productProviderPrices.splice(index, 1);\n            }\n          );\n        }\n      }, function() {\n\n      });\n\n    }\n\n    function showAndHideVariants(productProviderPrice, arrayIndex) {\n      productProviderPrice.showVariants = !productProviderPrice.showVariants;\n    }\n\n    function editProductProviderPrice(productProviderPrice, pppIndex, event) {\n      event.stopPropagation();\n      $mdDialog.show({\n        controller: 'ProductProviderPriceDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-provider-price/dialogs/product-provider-price-dialog.html',\n        parent: angular.element(document.body),\n        locals: {\n          taxes: vm.taxes,\n          productProviderPrice: productProviderPrice\n        }\n      }).then(function(result) {\n        if (result.id) {\n          updateProductProviderPrice(result);\n        } else {\n          createProductProviderPrice(result);\n        }\n      }, function() {\n\n      });\n    }\n\n    function updateProductProviderPrice(productProviderPrice) {\n      vm.saving = true;\n\n      if (productProviderPrice.date) {\n        productProviderPrice.date = new Date(productProviderPrice.date);\n        productProviderPrice.date = productProviderPrice.date.toISOString().split('T')[0];\n      }\n\n      productProviderPrice.product_variant_provider_prices = Object.values(productProviderPrice.productVariantProviderPriceById)\n        .filter(function(pvpp) {\n          return pvpp.provider_price !== null &&\n            pvpp.final_cost_price !== null;\n        })\n        .map(function(pvpp) {\n          pvpp.product_provider_price = productProviderPrice.id;\n          return pvpp;\n        });\n\n      api.inventories.productProviderPrices.update(\n        productProviderPrice,\n        function(result, fn, status) {\n          vm.saving = false;\n          if (status !== HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          productProviderPrice = angular.extend(productProviderPrice, result);\n          productProviderPrice.dirty = false;\n          setupProductProviderPrice(productProviderPrice);\n        }\n      );\n    }\n\n    function createProductProviderPrice(productProviderPrice) {\n      vm.saving = true;\n\n      if (productProviderPrice.date) {\n        productProviderPrice.date = new Date(productProviderPrice.date);\n        productProviderPrice.date = productProviderPrice.date.toISOString().split('T')[0];\n      }\n\n      api.inventories.productProviderPrices.save(\n        productProviderPrice,\n        function(result, fn, status) {\n          vm.saving = false;\n          if (status !== HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          productProviderPrice = angular.extend(productProviderPrice, result);\n          setupProductProviderPrice(productProviderPrice);\n          vm.productProviderPrices.push(productProviderPrice);\n        }\n      );\n    }\n\n    function isRowValid(pvpp) {\n      if (pvpp.provider_sku || pvpp.provider_barcode) {\n        if (pvpp.provider_price === null) {\n          return false;\n        }\n        return pvpp.final_cost_price !== null;\n      }\n      if (pvpp.provider_price !== null || pvpp.final_cost_price !== null) {\n        if (pvpp.provider_price === null) {\n          return false;\n        }\n        return pvpp.final_cost_price !== null;\n      }\n      return true;\n    }\n\n    function allRowsValid() {\n      return vm.productProviderPrices.every(function(productProviderPrice) {\n        return vm.product.product_variants.every(function(productVariant) {\n          return isRowValid(productProviderPrice.productVariantProviderPriceById[productVariant.id]);\n        });\n      });\n    }\n\n    function setAsDirty(item) {\n      item.dirty = true;\n    }\n\n    function hasDirtyness() {\n      return vm.productProviderPrices.some(function(ppp) {\n        return ppp.dirty;\n      });\n    }\n\n    function getProviderName(productProviderPrice) {\n      if (productProviderPrice == null) {\n        return '';\n      }\n\n      var providerName = '';\n      if (productProviderPrice.name) {\n        providerName += productProviderPrice.name;\n      }\n      if (productProviderPrice.first_name) {\n        providerName += productProviderPrice.name ? ' - ' + productProviderPrice.first_name : productProviderPrice.first_name;\n      }\n      if (productProviderPrice.last_name) {\n        providerName += productProviderPrice.name || productProviderPrice.first_name ? ' ' + productProviderPrice.last_name : productProviderPrice.last_name;\n      }\n      return providerName;\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductPricingTiersController', ndProductPricingTiersController)\n    .directive('ndProductPricingTiers', ndProductPricingTiers);\n\n  /** @ngInject */\n  function ndProductPricingTiersController($scope, $document, $mdDialog, $mdToast, $filter, api, Session, HTTP_STATUS, Utils) {\n\n    var vm = this;\n\n    // Data\n    vm.product = $scope.product;\n    vm.pricingTiers = $scope.pricingTiers;\n    vm.saveCallback = $scope.saveCallback;\n    vm.cancelCallback = $scope.cancelCallback;\n    vm.showButtons = $scope.showButtons;\n    vm.hideToasts = $scope.hideToasts;\n    vm.hideDiscountWarning = $scope.hideDiscountWarning;\n    vm.taxes = $scope.taxes.sort(function (a, b) {\n      return b.percent_value - a.percent_value\n    });\n    vm.session = Session;\n    vm.pricesMatrix = {};\n    vm.deregisterListener;\n    vm.saving = false;\n    vm.latestFieldSet = \"\";\n    vm.lastFocused = null;\n\n    // Methods\n    vm.saveProductPrices = saveProductPrices;\n    vm.cancelProductPrices = cancelProductPrices;\n    vm.selectedPriceMatrixChanged = selectedPriceMatrixChanged;\n    vm.getIsValid = getIsValid;\n    vm.priceTaxChanged = priceTaxChanged;\n    vm.priceExclTaxChanged = priceExclTaxChanged;\n    vm.priceInclTaxChanged = priceInclTaxChanged;\n    // vm.showNewTaxOptionDialog = showNewTaxOptionDialog;\n    vm.offerPercentValueChanged = offerPercentValueChanged;\n    vm.offerPriceExclTaxChanged = offerPriceExclTaxChanged;\n    vm.offerPriceInclTaxChanged = offerPriceInclTaxChanged;\n    vm.enableDiscounts = enableDiscounts;\n    vm.showDiscountBanner = showDiscountBanner;\n    vm.changeFocused = changeFocused;\n\n    // Initialize\n    initialize();\n\n    // Functions\n\n    /**\n     * Converts pricingTiers array to a dict\n     */\n    function initialize() {\n\n      vm.pricingTiers.forEach(function (pricingTier) {\n        vm.pricesMatrix[pricingTier.id] = newEmptyProductPrice(pricingTier.id);\n      });\n\n      if (vm.product.prices) {\n        vm.product.prices.forEach(function (productPrice) {\n          vm.pricesMatrix[productPrice.pricing_tier] = newProductPrice(productPrice);\n        });\n      }\n\n      if (!vm.showButtons && !vm.deregisterListener) {\n        vm.deregisterListener = $scope.$on('saveProductPrices', function (event, data) {\n          saveProductPrices();\n        });\n\n        $scope.$on('$destroy', function () {\n          vm.deregisterListener();\n        });\n      }\n    }\n\n    function newEmptyProductPrice(pricingTierId) {\n      var defaultTax = vm.taxes.find(function (tax) {\n        return tax.default\n      }) || vm.taxes[0];\n\n      return {\n        id: null,\n        product: vm.product.id,\n        selected: false,\n        tax: defaultTax.id,\n        price_excl_tax: null,\n        price_incl_tax: null,\n        pricing_tier: pricingTierId,\n        discount: null,\n        discount_price_excl_tax: null,\n        discount_price_incl_tax: null,\n        changed: false,\n        focused: null,\n      };\n    }\n    function changeFocused(pricingId, focus){\n      if(vm.lastFocused){\n        vm.lastFocused.focused = null;\n      }\n      vm.pricesMatrix[pricingId].focused = focus;\n      vm.lastFocused =  vm.pricesMatrix[pricingId];\n    }\n    function newProductPrice(productPrice) {\n      return {\n        id: productPrice.id,\n        product: vm.product.id,\n        selected: productPrice.price_incl_tax || productPrice.price_incl_tax === 0,\n        tax: productPrice.tax,\n        price_excl_tax: productPrice.price_excl_tax,\n        price_incl_tax: productPrice.price_incl_tax,\n        pricing_tier: productPrice.pricing_tier,\n        discount: productPrice.discount,\n        discount_price_excl_tax: productPrice.discount_price_excl_tax,\n        discount_price_incl_tax: productPrice.discount_price_incl_tax\n      };\n    }\n\n    /**\n     * Saves all the product prices\n     */\n    function saveProductPrices() {\n      for (var key in vm.pricesMatrix) {\n\n        // If the row has changed\n        if (vm.pricesMatrix[key].changed) {\n\n          vm.saving = true;\n\n          // Get the productPrice object\n          var productPrice;\n          if (vm.product.prices) {\n            productPrice = vm.product.prices.find(function (productPrice) {\n              return productPrice.pricing_tier == key;\n            });\n            // It's initialized if it's new or it's extended if exists\n            if (!productPrice)\n              productPrice = vm.pricesMatrix[key];\n            else {\n              angular.extend(productPrice, vm.pricesMatrix[key])\n            }\n          } else {\n            productPrice = vm.pricesMatrix[key];\n          }\n\n          // TODO: A vegades no hi ha la ID nose per quin motiu, sembla que és pk és asincron i quan s'incialitza encara no tenim la id\n          productPrice.product = vm.product.id;\n\n          if (vm.pricesMatrix[key].id && !vm.pricesMatrix[key].selected) {\n            // Delete\n\n            // Set a flag\n            vm.pricesMatrix[key].delete = true;\n\n            api.inventories.productPrices.delete(\n              productPrice,\n              function (results, fn, status) {\n\n                if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n\n                  // Find the first object with delete === true and removed. It's possible that the callback object\n                  // is not from the selected object\n                  Object.keys(vm.pricesMatrix).forEach(function (pricingTier) {\n                    if (vm.pricesMatrix[pricingTier].delete) {\n\n                      var index = vm.product.prices.findIndex(function (pp) {\n                        return pp.pricing_tier === vm.pricesMatrix[pricingTier].pricing_tier;\n                      });\n\n                      vm.product.prices[index] = {\n                        position: vm.product.prices[index].position,\n                        pricing_tier: vm.product.prices[index].pricing_tier,\n                        product: vm.product.prices[index].product,\n                        value: vm.product.prices[index].value\n                      };\n\n                      vm.pricesMatrix[pricingTier] = newEmptyProductPrice(vm.pricesMatrix[pricingTier].pricing_tier);\n                      vm.pricesMatrix[pricingTier].saved = true;\n\n                      afterSave(null);\n\n                      return;\n                    }\n                  });\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          } else if (!vm.pricesMatrix[key].id && vm.pricesMatrix[key].selected) {\n            // Create\n            api.inventories.productPrices.save(\n              productPrice,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  afterSave(results);\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            )\n          } else if (vm.pricesMatrix[key].id && vm.pricesMatrix[key].selected) {\n            // Update\n            api.inventories.productPrices.update(\n              productPrice,\n              function (results, fn, status) {\n                if (status == HTTP_STATUS.HTTP_200_OK) {\n                  afterSave(results);\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            )\n          }\n        }\n      }\n    }\n\n    /**\n     * Call the directive parameter cancelCallback\n     */\n    function cancelProductPrices() {\n      initialize();\n\n      $scope.productPricesForm.$setPristine();\n\n      if (vm.cancelCallback) {\n        vm.cancelCallback();\n      }\n    }\n\n    /**\n     * Selected of pricingTier has changed\n     * @param pricingTierId\n     */\n    function selectedPriceMatrixChanged(pricingTierId) {\n      var lastTax;\n\n      for (var tmpPricingTierId in vm.pricesMatrix) {\n        lastTax = vm.pricesMatrix[tmpPricingTierId].tax;\n        break;\n      }\n\n      vm.pricesMatrix[pricingTierId].tax = angular.copy(lastTax);\n      vm.pricesMatrix[pricingTierId].price_excl_tax = null;\n      vm.pricesMatrix[pricingTierId].price_incl_tax = null;\n      vm.pricesMatrix[pricingTierId].pricing_tier = pricingTierId;\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      vm.pricesMatrix[pricingTierId].changed = true;\n\n    }\n\n    /**\n     * Returns true if all inputs are valid\n     * @returns {boolean}\n     */\n    function getIsValid() {\n      // $scope.isValid it's used to manage the correctness of the form a new-product view\n      var someIsSelected = false;\n      for (var pricingTierId in vm.pricesMatrix) {\n        if (vm.pricesMatrix[pricingTierId].selected) {\n          someIsSelected = true;\n          if (!vm.pricesMatrix[pricingTierId].tax ||\n            vm.pricesMatrix[pricingTierId].tax == -1 ||\n            vm.pricesMatrix[pricingTierId].price_excl_tax == null ||\n            vm.pricesMatrix[pricingTierId].price_incl_tax == null) {\n            $scope.isValid = false;\n            return false;\n          }\n        }\n      }\n\n      if (!someIsSelected) {\n        $scope.isValid = true;\n        return true;\n      }\n\n      $scope.isValid = true;\n      return true;\n    }\n\n    /**\n     * Updates the price tax and show a popup to decide if excl or incl tax price should be used\n     * @param pricingTierId\n     */\n    function priceTaxChanged(pricingTierId, ev) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      if (vm.pricesMatrix[pricingTierId].price_excl_tax === 0) {\n        vm.pricesMatrix[pricingTierId].selected = true;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].price_incl_tax = 0;\n      } else if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].tax != -1 && vm.pricesMatrix[pricingTierId].price_excl_tax) {\n        vm.pricesMatrix[pricingTierId].selected = true;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        var taxId = vm.pricesMatrix[pricingTierId].tax;\n        var tax = vm.taxes.find(function(tax) {\n          return tax.id === taxId;\n        });\n\n        var o1_price_excl_tax = vm.pricesMatrix[pricingTierId].price_excl_tax;\n        var o1_price_incl_tax = Utils.roundDigits(vm.pricesMatrix[pricingTierId].price_excl_tax * (1 + (tax.percent_value / 100.0)), 6);\n\n        var o2_price_excl_tax = Utils.roundDigits(vm.pricesMatrix[pricingTierId].price_incl_tax / (1 + (tax.percent_value / 100.0)), 6);\n        var o2_price_incl_tax = vm.pricesMatrix[pricingTierId].price_incl_tax;\n        var confirm = $mdDialog.confirm()\n          .title($filter(\"translate\")(\"PRODUCT.CHANGE_TAX\"))\n          .htmlContent($filter(\"translate\")(\"PRODUCT.CHANGE_TAX_MESSAGE\",\n            {'o1_price_excl_tax': o1_price_excl_tax,\n              'o1_price_incl_tax': o1_price_incl_tax,\n              'o2_price_excl_tax': o2_price_excl_tax,\n              'o2_price_incl_tax': o2_price_incl_tax}))\n          .clickOutsideToClose(false)\n          .escapeToClose(false)\n          .parent(angular.element(document.body))\n          .targetEvent(ev)\n          .ok($filter('translate')('PRODUCT.INCL_TAX_OPTION'))\n          .cancel($filter('translate')('PRODUCT.EXCL_TAX_OPTION'));\n\n        $mdDialog.show(confirm).then(\n          function() {\n            vm.pricesMatrix[pricingTierId].price_excl_tax = o2_price_excl_tax;\n            vm.pricesMatrix[pricingTierId].keep_price_excl_tax = false;\n          },\n          function() {\n            vm.pricesMatrix[pricingTierId].price_incl_tax = o1_price_incl_tax;\n            vm.pricesMatrix[pricingTierId].keep_price_excl_tax = true;\n          });\n      } else {\n        vm.pricesMatrix[pricingTierId].price_incl_tax = null;\n        vm.pricesMatrix[pricingTierId].price_excl_tax = null;\n        vm.pricesMatrix[pricingTierId].selected = false;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].discount = null;\n        vm.pricesMatrix[pricingTierId].discount_price_excl_tax = null;\n        vm.pricesMatrix[pricingTierId].discount_price_incl_tax = null;\n      }\n    }\n\n    /**\n     * Updates the price including tax accordding to excl tax and tax percent value\n     * @param pricingTierId\n     */\n    function priceExclTaxChanged(pricingTierId) {\n\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      if (vm.pricesMatrix[pricingTierId].price_excl_tax === 0) {\n        vm.pricesMatrix[pricingTierId].selected = true;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].price_incl_tax = 0;\n      } else if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].tax != -1 && vm.pricesMatrix[pricingTierId].price_excl_tax) {\n        vm.pricesMatrix[pricingTierId].selected = true;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        var taxId = vm.pricesMatrix[pricingTierId].tax;\n        var tax = vm.taxes.find(function (tax) {\n          return tax.id === taxId;\n        });\n\n        vm.pricesMatrix[pricingTierId].price_incl_tax = Utils.roundDigits(vm.pricesMatrix[pricingTierId].price_excl_tax * (1+(tax.percent_value / 100.0)), 6);\n      } else {\n        vm.pricesMatrix[pricingTierId].price_incl_tax = null;\n        vm.pricesMatrix[pricingTierId].price_excl_tax = null;\n        vm.pricesMatrix[pricingTierId].selected = false;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].discount = null;\n        vm.pricesMatrix[pricingTierId].discount_price_excl_tax = null;\n        vm.pricesMatrix[pricingTierId].discount_price_incl_tax = null;\n      }\n    }\n\n    /**\n     * Updates the price excluding tax accordding to incl tax and tax percent value\n     * @param pricingTierId\n     */\n    function priceInclTaxChanged(pricingTierId) {\n\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n      if (vm.pricesMatrix[pricingTierId].price_incl_tax === 0) {\n        vm.pricesMatrix[pricingTierId].price_excl_tax = 0;\n        vm.pricesMatrix[pricingTierId].selected = true;\n        vm.pricesMatrix[pricingTierId].changed = true;\n      } else if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].price_incl_tax) {\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].selected = true;\n        var taxId = vm.pricesMatrix[pricingTierId].tax;\n        var tax = vm.taxes.find(function (tax) {\n          return tax.id === taxId;\n        });\n\n        vm.pricesMatrix[pricingTierId].price_excl_tax = Utils.roundDigits(vm.pricesMatrix[pricingTierId].price_incl_tax / (1+(tax.percent_value / 100.0)), 6);\n      } else {\n        vm.pricesMatrix[pricingTierId].price_incl_tax = null;\n        vm.pricesMatrix[pricingTierId].price_excl_tax = null;\n        vm.pricesMatrix[pricingTierId].selected = false;\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].discount = null;\n        vm.pricesMatrix[pricingTierId].discount_price_excl_tax = null;\n        vm.pricesMatrix[pricingTierId].discount_price_incl_tax = null;\n      }\n    }\n\n    /**\n     * Function executed afer every productPrice save\n     */\n    function afterSave(results) {\n\n      // Save results if update or create\n      if (results) {\n        vm.product.prices = vm.product.prices.map(function (pp) {\n          if (pp.pricing_tier === results.pricing_tier) {\n            angular.extend(pp, results);\n          }\n          return pp;\n        });\n\n        angular.extend(vm.pricesMatrix[results.pricing_tier], results);\n        vm.pricesMatrix[results.pricing_tier].saved = false;\n        vm.pricesMatrix[results.pricing_tier].changed = false;\n      }\n\n      // Check if all are saved\n      for (var key in vm.pricesMatrix) {\n        if (vm.pricesMatrix[key].changed && !vm.pricesMatrix[key].saved)\n          return;\n      }\n\n      if (!vm.hideToasts) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRICES_UPDATED')).position('top right'));\n      }\n\n      vm.saving = false;\n      $scope.productPricesForm.$setPristine();\n    }\n\n    /**\n     * Opens a new tax dialog if the selected tax is -1. This function in called on md-on-close event to avoid\n     * layer troubles with md-dialog layer and md-select layer\n     * @param ev\n     *\n     function showNewTaxOptionDialog(pricingTier, ev) {\n      if (vm.pricesMatrix[pricingTier.id].tax == -1) {\n        $mdDialog.show({\n          controller: 'InventoryTaxDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/account/views/account/tabs/taxes/dialogs/tax/tax-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            tax: {}\n          }\n        }).then(function (result) {\n\n          // Adding the new tax to the array\n          vm.taxes.push(result);\n\n          // Set the new tax to the current pricingTier\n          vm.pricesMatrix[pricingTier.id].tax = result.id;\n          vm.priceExclTaxChanged(pricingTier.id);\n\n        }, function (results) {\n          // If the dialog is cancelled, the backupTax is restored\n          vm.pricesMatrix[pricingTier.id].tax = vm.backupTax;\n        });\n      }\n    }\n     */\n\n    function offerPercentValueChanged(pricingTierId) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n\n      if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].price_incl_tax && vm.pricesMatrix[pricingTierId].price_excl_tax) {\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].selected = true;\n\n        if (vm.pricesMatrix[pricingTierId].discount != null) {\n          vm.pricesMatrix[pricingTierId].discount_price_excl_tax = parseFloat((vm.pricesMatrix[pricingTierId].price_excl_tax * (1 - vm.pricesMatrix[pricingTierId].discount / 100)).toFixed(6));\n          vm.pricesMatrix[pricingTierId].discount_price_incl_tax = parseFloat((vm.pricesMatrix[pricingTierId].price_incl_tax * (1 - vm.pricesMatrix[pricingTierId].discount / 100)).toFixed(6));\n        } else {\n          vm.pricesMatrix[pricingTierId].discount_price_excl_tax = null;\n          vm.pricesMatrix[pricingTierId].discount_price_incl_tax = null;\n        }\n      }\n    }\n\n    function offerPriceExclTaxChanged(pricingTierId) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n\n      if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].price_incl_tax && vm.pricesMatrix[pricingTierId].price_excl_tax) {\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].selected = true;\n\n        vm.pricesMatrix[pricingTierId].discount = parseFloat(((1 - vm.pricesMatrix[pricingTierId].discount_price_excl_tax / vm.pricesMatrix[pricingTierId].price_excl_tax) * 100).toFixed(6));\n        vm.pricesMatrix[pricingTierId].discount_price_incl_tax = parseFloat((vm.pricesMatrix[pricingTierId].price_incl_tax * (1 - vm.pricesMatrix[pricingTierId].discount / 100)).toFixed(6));\n      }\n    }\n\n    function offerPriceInclTaxChanged(pricingTierId) {\n      vm.pricesMatrix[pricingTierId].product = vm.product.id;\n\n      if (vm.pricesMatrix[pricingTierId].tax && vm.pricesMatrix[pricingTierId].price_incl_tax && vm.pricesMatrix[pricingTierId].price_excl_tax) {\n        vm.pricesMatrix[pricingTierId].changed = true;\n        vm.pricesMatrix[pricingTierId].selected = true;\n\n        vm.pricesMatrix[pricingTierId].discount = parseFloat(((1 - vm.pricesMatrix[pricingTierId].discount_price_incl_tax / vm.pricesMatrix[pricingTierId].price_incl_tax) * 100).toFixed(6));\n        vm.pricesMatrix[pricingTierId].discount_price_excl_tax = parseFloat((vm.pricesMatrix[pricingTierId].price_excl_tax * (1 - vm.pricesMatrix[pricingTierId].discount / 100)).toFixed(6));\n      }\n    }\n\n    function enableDiscounts() {\n      vm.saving = true;\n\n      api.inventories.products.update(\n        {\n          id: vm.product.id,\n          discount_active: true\n        },\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.product.discount_active = true;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function showDiscountBanner(){\n      return !vm.hideDiscountWarning && !vm.product.discount_active && vm.pricingTiers.some(function(pt){\n        return vm.pricesMatrix[pt.id].discount ||\n          vm.pricesMatrix[pt.id].discount_price_excl_tax ||\n          vm.pricesMatrix[pt.id].discount_price_incl_tax;\n      });\n    }\n  }\n\n  /** @ngInject */\n  function ndProductPricingTiers() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        pricingTiers: '=',\n        saveCallback: '&?',\n        cancelCallback: '&?',\n        showButtons: '=?',\n        hideToasts: '=?',\n        taxes: '=',\n        isValid: '=?',\n        hideDiscountWarning: '=?',\n        isNew: '=?'\n      },\n      controller: 'ndProductPricingTiersController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-pricing-tiers/nd-product-pricing-tiers.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ndProductPlanningConfigurationController', ndProductPlanningConfigurationController)\n    .directive('ndProductPlanningConfiguration', ndProductPlanningConfiguration);\n\n  /** @ngInject */\n  function ndProductPlanningConfigurationController($scope, ProductPlanningConfiguration) {\n    // Data\n    var vm = this;\n    vm.product = $scope.product;\n    vm.maxTypes = [\n      {id: 1, name: 'PERCENTAGE_OF_STOCK'},\n      {id: 2, name: 'FIXED_AMOUNT'}\n    ];\n\n    // Methods\n\n    // Initialization\n    init();\n\n    // Functions\n    vm.examplePercentage = examplePercentage;\n    vm.isPercentage = isPercentage;\n    vm.isFixedAmount = isFixedAmount;\n\n    function init() {\n      vm.product.replenishment_planning_configuration = new ProductPlanningConfiguration(vm.product.replenishment_planning_configuration);\n      vm.product.purchase_planning_configuration = new ProductPlanningConfiguration(vm.product.purchase_planning_configuration);\n    }\n\n    function examplePercentage(maxStock, percentageValue) {\n      return Math.floor(maxStock * (percentageValue / 100) + maxStock);\n    }\n\n    function isPercentage(maxType) {\n      return parseInt(maxType) === vm.maxTypes[0].id;\n    }\n\n    function isFixedAmount(maxType) {\n      return parseInt(maxType) === vm.maxTypes[1].id;\n    }\n\n  }\n\n  /** @ngInject */\n  function ndProductPlanningConfiguration() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n      },\n      controller: 'ndProductPlanningConfigurationController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-planning-configuration/nd-product-planning-configuration.html',\n      link: function (scope, element, attrs) {\n        scope.$watch('vm.product', function (newVal, oldVal) {\n          if (newVal !== oldVal) {\n            scope.vm.product = newVal;\n          }\n        }, true);\n\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductOrdersController', ndProductOrdersController)\n    .directive('ndProductOrders', ndProductOrders);\n\n  /** @ngInject */\n  function ndProductOrders() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        productVariant: '=?',\n        warehouses: '=',\n        showInfo: '='\n      },\n      controller: 'ndProductOrdersController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-orders/nd-product-orders.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndProductOrdersController($scope,\n                                     $filter,\n                                     $timeout,\n                                     $mdToast,\n                                     $state,\n                                     $mdMenu,\n                                     $rootScope,\n                                     $mdSidenav,\n                                     $mdDialog,\n                                     api,\n                                     Session,\n                                     HTTP_STATUS,\n                                     TRANSFER_ORDER_STATUS_COLORS,\n                                     TRANSFER_ORDER_STATUSES,\n                                     TRANSFER_ORDER_STATUSES_REVERSE,\n                                     SALE_ORDER_STATUS_COLORS,\n                                     SALE_ORDER_STATUSES,\n                                     PURCHASE_ORDER_STATUS_COLORS,\n                                     PURCHASE_ORDER_STATUSES,\n                                     SALE_ORDER_STATUSES_REVERSE) {\n\n    // Data\n    var vm = this;\n\n    vm.TRANSFER_ORDER_STATUS_COLORS = TRANSFER_ORDER_STATUS_COLORS;\n    vm.TRANSFER_ORDER_STATUSES = TRANSFER_ORDER_STATUSES;\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.SALE_ORDER_STATUS_COLORS = SALE_ORDER_STATUS_COLORS;\n    vm.SALE_ORDER_STATUSES = SALE_ORDER_STATUSES;\n    vm.PURCHASE_ORDER_STATUS_COLORS = PURCHASE_ORDER_STATUS_COLORS;\n    vm.PURCHASE_ORDER_STATUSES = PURCHASE_ORDER_STATUSES;\n    vm.SALE_ORDER_STATUSES_REVERSE = SALE_ORDER_STATUSES_REVERSE;\n\n    vm.view = 'available_on_hand';\n    vm.loading = false;\n    vm.saleOrders = {};\n    vm.transferOrders = {};\n    vm.purchaseOrders = {};\n    vm.posOrders = {};\n    vm.aggregatedData = [];\n    vm.aggregatedDict = {};\n    vm.aggregatedDictBackup = {};\n    vm.productVariantKpis = null;\n    vm.productVariantKpisDict = {};\n    vm.productVariantKpisTotals = {};\n    vm.productVariantKpisColorTotals = {};\n    vm.productVariantKpisColorSizeTotals = {};\n    vm.transferOrderProductVariants = {};\n    vm.purchaseOrderProductVariants = {};\n    vm.saleOrderProductVariants = {};\n    vm.posOrderProductVariants = {};\n    vm.previsualizeTransferDraft = false;\n    vm.product = $scope.product;\n    vm.productVariant = $scope.productVariant;\n    vm.warehousesById = {};\n    vm.warehouses = $scope.warehouses;\n    vm.selectedWarehouses = vm.warehouses.length ? [vm.warehouses[0].id] : [];\n    vm.session = Session;\n    vm.selectedProduct = vm.product;\n    vm.colorVariants = vm.product.color_variants;\n    vm.sizeVariants = vm.product.size_variants;\n    vm.totalPendingByWarehouseColorSize = {};\n    vm.totalAllocatedByWarehouseColorSize = {};\n\n    // Methods\n    vm.getTransferOrderProductVariants = getTransferOrderProductVariants;\n    vm.changeWarehouses = changeWarehouses;\n    vm.checkTransfer = checkTransfer;\n    vm.getTransferAmount = getTransferAmount;\n    vm.checkSale = checkSale;\n    vm.getSaleAmount = getSaleAmount;\n    vm.checkPurchase = checkPurchase;\n    vm.getPurchaseAmount = getPurchaseAmount;\n    vm.getCover = getCover;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      if (!vm.warehouses) {\n        api.inventories.warehouses.get({\n          serializer: 'WarehouseSimpleSerializer',\n          id: 11842,\n          filter_stock_by_warehouse: 'true'\n        }, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.warehouses = results.results;\n            vm.warehouses.forEach(function(warehouse) {\n              vm.warehousesById[warehouse.id] = warehouse;\n            });\n          }\n        });\n      }\n\n      vm.warehouses.forEach(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      reloadTable();\n\n    }\n\n    function changeWarehouses() {\n      reloadTable();\n    }\n\n    function reloadTable() {\n\n      if(vm.loading){\n        return;\n      }\n\n      vm.loading = false;\n      vm.loadingStocks = false;\n      vm.loadingTransfers = false;\n      vm.loadingPurchases = false;\n      vm.loadingSales = false;\n      vm.loadingPosOrders = false;\n      vm.totalPendingByWarehouseColorSize = {};\n      vm.totalAllocatedByWarehouseColorSize = {};\n\n      var productId = vm.selectedProduct.id;\n      var productVariantId = null;\n      vm.loading = true;\n      vm.loadingStocks = true;\n      api.inventories.stocks.list({\n        option: 'aggregate',\n        product_id: productId,\n        product_variant_id: productVariantId\n      }, function(response) {\n        vm.aggregatedData = response;\n        vm.loadingStocks = false;\n        vm.loading = !(!vm.loadingPurchases && !vm.loadingTransfers && !vm.loadingSales && !vm.loadingStocks && !vm.loadingPosOrders);\n        renderTable();\n      });\n\n      if (vm.selectedWarehouses.length) {\n        getPurchaseOrderProductVariants();\n        getSaleOrderProductVariants();\n        getPosOrderProductVariants();\n        getTransferOrderProductVariants();\n      }\n\n    }\n\n\n    function getTransferOrderProductVariants() {\n\n      if (vm.loadingTransfers) {\n        return;\n      }\n\n      vm.loadingTransfers = true;\n\n      vm.transferOrders = {};\n\n      api.inventories.transferOrderProductVariants.list({\n        product_id: vm.product.id,\n        warehouse_ids: vm.selectedWarehouses.join(','),\n        statuses: [0, 1, 2, 4, 6, 7].join(',')\n      }, function(response) {\n        vm.transferOrderProductVariants = response.results;\n        response.results.forEach(function(topv) {\n          if (angular.isUndefined(vm.transferOrders[topv.order_id])) {\n            vm.transferOrders[topv.order_id] = {\n              id: topv.order_id,\n              autocode: topv.order_autocode,\n              status: topv.order_status,\n              target_warehouse_name: topv.target_warehouse_name,\n              source_warehouse_name: topv.source_warehouse_name,\n              target_warehouse_id: topv.target_warehouse_id,\n              source_warehouse_id: topv.source_warehouse_id,\n              transferOrderProductVariants: {},\n              totalPendingByColor: {},\n              totalAllocatedByColor: {},\n              totalShippedByColor: {}\n            };\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id])){\n            vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id][topv.color])){\n            vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id][topv.color] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id][topv.color][topv.size])){\n            vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id][topv.color][topv.size] = 0;\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id])){\n            vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id][topv.color])){\n            vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id][topv.color] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id][topv.color][topv.size])){\n            vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id][topv.color][topv.size] = 0;\n          }\n\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id])){\n            vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id][topv.color])){\n            vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id][topv.color] = {};\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id][topv.color][topv.size])){\n            vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id][topv.color][topv.size] = 0;\n          }\n          \n          if (angular.isUndefined(vm.transferOrders[topv.order_id].transferOrderProductVariants[topv.color])) {\n            vm.transferOrders[topv.order_id].transferOrderProductVariants[topv.color] = {};\n            vm.transferOrders[topv.order_id].totalPendingByColor[topv.color] = 0;\n            vm.transferOrders[topv.order_id].totalAllocatedByColor[topv.color] = 0;\n            vm.transferOrders[topv.order_id].totalShippedByColor[topv.color] = 0;\n          }\n          if (angular.isUndefined(vm.transferOrders[topv.order_id].transferOrderProductVariants[topv.color][topv.size])) {\n            vm.transferOrders[topv.order_id].transferOrderProductVariants[topv.color][topv.size] = {};\n          }\n\n          if (topv.amount > 0) { // Only when it is a replenishment, not a delivery\n            var pending = 0;\n            if(topv.amount > topv.total_allocated_amount + topv.total_prepared_amount + topv.total_shipped_amount){\n              pending = topv.amount - topv.total_allocated_amount - topv.total_prepared_amount - topv.total_shipped_amount;\n            }\n            vm.transferOrders[topv.order_id].totalPendingByColor[topv.color] += pending;\n            vm.totalPendingByWarehouseColorSize[topv.source_warehouse_id][topv.color][topv.size] -= pending;\n          }\n\n          vm.transferOrders[topv.order_id].totalAllocatedByColor[topv.color] += topv.total_allocated_amount + topv.total_prepared_amount;\n          vm.totalAllocatedByWarehouseColorSize[topv.source_warehouse_id][topv.color][topv.size] += topv.total_allocated_amount + topv.total_prepared_amount;\n          vm.transferOrders[topv.order_id].totalShippedByColor[topv.color] += topv.total_shipped_amount;\n          vm.totalPendingByWarehouseColorSize[topv.target_warehouse_id][topv.color][topv.size] += topv.total_shipped_amount;\n          vm.transferOrders[topv.order_id].transferOrderProductVariants[topv.color][topv.size] = topv;\n        });\n        vm.loadingTransfers = false;\n        vm.loading = !(!vm.loadingPurchases && !vm.loadingTransfers && !vm.loadingSales && !vm.loadingStocks && !vm.loadingPosOrders);\n      });\n    }\n\n    function getSaleOrderProductVariants() {\n\n      if (vm.loadingSales) {\n        return;\n      }\n\n      vm.loadingSales = true;\n\n      vm.saleOrders = {};\n\n      api.inventories.saleOrderProductVariants.list({\n        product_id: vm.product.id,\n        warehouse_ids: vm.selectedWarehouses.join(','),\n        statuses: [1, 2, 3, 4, 5, 7, 8, 11, 12].join(',')\n      }, function(response) {\n        vm.saleOrderProductVariants = response.results;\n        response.results.forEach(function(sopv) {\n          if (angular.isUndefined(vm.saleOrders[sopv.order_id])) {\n            vm.saleOrders[sopv.order_id] = {\n              id: sopv.order_id,\n              autocode: sopv.order_autocode,\n              is_devolution: sopv.is_devolution,\n              status: sopv.order_status,\n              target_warehouse_id: sopv.target_warehouse_id,\n              source_warehouse_id: sopv.source_warehouse_id,\n              saleOrderProductVariants: {},\n              totalPendingByColor: {},\n              totalAllocatedByColor: {},\n              contact_name: sopv.contact_name\n            };\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id])){\n            vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id][sopv.color])){\n            vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id][sopv.color] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size])){\n            vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size] = 0;\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id])){\n            vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id][sopv.color])){\n            vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id][sopv.color] = {};\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size])){\n            vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size] = 0;\n          }\n          \n          if (angular.isUndefined(vm.saleOrders[sopv.order_id].saleOrderProductVariants[sopv.color])) {\n            vm.saleOrders[sopv.order_id].saleOrderProductVariants[sopv.color] = {};\n            vm.saleOrders[sopv.order_id].totalPendingByColor[sopv.color] = 0;\n            vm.saleOrders[sopv.order_id].totalAllocatedByColor[sopv.color] = 0;\n          }\n          if (angular.isUndefined(vm.saleOrders[sopv.order_id].saleOrderProductVariants[sopv.color][sopv.size])) {\n            vm.saleOrders[sopv.order_id].saleOrderProductVariants[sopv.color][sopv.size] = {};\n          }\n          vm.saleOrders[sopv.order_id].saleOrderProductVariants[sopv.color][sopv.size] = sopv;\n          if(!sopv.is_devolution){\n            var pending = 0;\n            if(sopv.amount > sopv.total_allocated_amount + sopv.total_prepared_amount + sopv.total_shipped_amount){\n              pending = sopv.amount - sopv.total_allocated_amount - sopv.total_prepared_amount - sopv.total_shipped_amount;\n            }\n            vm.saleOrders[sopv.order_id].totalPendingByColor[sopv.color] += pending;\n            vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size] -= pending;\n            vm.saleOrders[sopv.order_id].totalAllocatedByColor[sopv.color] += sopv.total_allocated_amount + sopv.total_prepared_amount;\n            vm.totalAllocatedByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size] += sopv.total_allocated_amount + sopv.total_prepared_amount;\n          }else{\n            var pending = 0;\n            if(sopv.amount > sopv.total_received_amount){\n              pending = sopv.amount - sopv.total_received_amount;\n            }\n            vm.saleOrders[sopv.order_id].totalPendingByColor[sopv.color] += pending;\n            vm.totalPendingByWarehouseColorSize[sopv.source_warehouse_id][sopv.color][sopv.size] += pending;\n          }\n        });\n        vm.loadingSales = false;\n        vm.loading = !(!vm.loadingPurchases && !vm.loadingTransfers && !vm.loadingSales && !vm.loadingStocks && !vm.loadingPosOrders);\n      });\n    }\n    \n    function getPosOrderProductVariants() {\n\n      if (vm.loadingPosOrders) {\n        return;\n      }\n\n      vm.loadingPosOrders = true;\n\n      vm.posOrders = {};\n\n      api.inventories.posOrderFulfillmentProductVariants.get({\n        product_id: vm.product.id,\n        source_warehouses: vm.selectedWarehouses.join(','),\n        statuses: [20].join(','),\n        serializer: 'PosOrderFulfillmentProductVariantSerializer'\n      }, function(response) {\n        vm.posOrderProductVariants = response.data;\n        response.data.forEach(function(pofpv) {\n\n          if (angular.isUndefined(vm.posOrders[pofpv.pos_order_id])) {\n            vm.posOrders[pofpv.pos_order_id] = {\n              id: pofpv.pos_order_id,\n              autocode: pofpv.pos_order_autocode,\n              source_warehouse_id: pofpv.source_warehouse_id,\n              posOrderProductVariants: {},\n              totalPendingByColor: {},\n              totalAllocatedByColor: {},\n            };\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id])){\n            vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id][pofpv.color_id])){\n            vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id][pofpv.color_id] = {};\n          }\n          if (angular.isUndefined(vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id][pofpv.color_id][pofpv.size_id])){\n            vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id][pofpv.color_id][pofpv.size_id] = 0;\n          }\n          \n          if (angular.isUndefined(vm.posOrders[pofpv.pos_order_id].posOrderProductVariants[pofpv.color_id])) {\n            vm.posOrders[pofpv.pos_order_id].posOrderProductVariants[pofpv.color_id] = {};\n            vm.posOrders[pofpv.pos_order_id].totalAllocatedByColor[pofpv.color_id] = 0;\n          }\n          if (angular.isUndefined(vm.posOrders[pofpv.pos_order_id].posOrderProductVariants[pofpv.color_id][pofpv.size_id])) {\n            vm.posOrders[pofpv.pos_order_id].posOrderProductVariants[pofpv.color_id][pofpv.size_id] = {};\n          }\n          vm.posOrders[pofpv.pos_order_id].posOrderProductVariants[pofpv.color_id][pofpv.size_id] = pofpv;\n          vm.posOrders[pofpv.pos_order_id].totalAllocatedByColor[pofpv.color_id] += pofpv.amount;\n          vm.totalAllocatedByWarehouseColorSize[pofpv.source_warehouse_id][pofpv.color_id][pofpv.size_id] += pofpv.amount;\n\n        });\n\n        vm.loadingPosOrders = false;\n        vm.loading = !(!vm.loadingPurchases && !vm.loadingTransfers && !vm.loadingPoss && !vm.loadingStocks && !vm.loadingPosOrders);\n      });\n    }\n\n    function getPurchaseOrderProductVariants() {\n\n      if (vm.loadingPurchases) {\n        return;\n      }\n\n      vm.loadingPurchases = true;\n\n      vm.purchaseOrders = {};\n\n      api.inventories.purchaseOrderProductVariants.list({\n        product_id: vm.product.id,\n        warehouse_ids: vm.selectedWarehouses.join(','),\n        statuses: [1, 2, 7].join(',')\n      }, function(response) {\n        vm.purchaseOrderProductVariants = response.results;\n        response.results.forEach(function(popv) {\n          if (angular.isUndefined(vm.purchaseOrders[popv.order_id])) {\n            vm.purchaseOrders[popv.order_id] = {\n              id: popv.order_id,\n              autocode: popv.order_autocode,\n              status: popv.order_status,\n              target_warehouse_id: popv.target_warehouse_id,\n              source_warehouse_id: popv.source_warehouse_id,\n              purchaseOrderProductVariants: {},\n              totalPendingByColor: {},\n              contact_name: popv.contact_name\n            };\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id])){\n            vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id][popv.color])){\n            vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id][popv.color] = {};\n          }\n          if (angular.isUndefined(vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id][popv.color][popv.size])){\n            vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id][popv.color][popv.size] = 0;\n          }\n    \n          if (angular.isUndefined(vm.purchaseOrders[popv.order_id].purchaseOrderProductVariants[popv.color])) {\n            vm.purchaseOrders[popv.order_id].purchaseOrderProductVariants[popv.color] = {};\n            vm.purchaseOrders[popv.order_id].totalPendingByColor[popv.color] = 0;\n          }\n          if (angular.isUndefined(vm.purchaseOrders[popv.order_id].purchaseOrderProductVariants[popv.color][popv.size])) {\n            vm.purchaseOrders[popv.order_id].purchaseOrderProductVariants[popv.color][popv.size] = {};\n          }\n          vm.purchaseOrders[popv.order_id].purchaseOrderProductVariants[popv.color][popv.size] = popv;\n          var pending = 0;\n          if (popv.amount > popv.total_received_amount){\n            pending = popv.amount - popv.total_received_amount;\n          }\n          vm.purchaseOrders[popv.order_id].totalPendingByColor[popv.color] += pending;\n          vm.totalPendingByWarehouseColorSize[popv.target_warehouse_id][popv.color][popv.size] += pending;\n        });\n        vm.loadingPurchases = false;\n        vm.loading = !(!vm.loadingPurchases && !vm.loadingTransfers && !vm.loadingSales && !vm.loadingStocks && !vm.loadingPosOrders);\n      });\n    }\n\n    function initStockDict() {\n      return {\n        available_on_hand: 0,\n        allocated_on_retail: 0,\n        in_transit_on_transfer: 0,\n        in_transit_on_purchase: 0,\n        sold_on_retail: 0\n      };\n    }\n\n    function renderTable() {\n      vm.aggregatedDict = {};\n      vm.aggregatedDictBackup = {};\n\n      var aggregates = ['available_on_hand'];\n      //'allocated_on_retail', 'in_transit_on_transfer',\n      //'in_transit_on_purchase', 'sold_on_retail'];\n\n      aggregates.forEach(function(aggregateName) {\n        vm.aggregatedData[aggregateName].forEach(function(aoh) {\n          if (angular.isUndefined(vm.aggregatedDict[aoh.color_id])) {\n            vm.aggregatedDict[aoh.color_id] = {};\n            vm.aggregatedDictBackup[aoh.color_id] = {};\n            vm.productVariantKpisTotals[aoh.color_id] = {};\n            vm.productVariantKpisColorSizeTotals[aoh.color_id] = {};\n            vm.productVariantKpisColorTotals[aoh.color_id] = initStockDict();\n          }\n          if (angular.isUndefined(vm.aggregatedDict[aoh.color_id][aoh.warehouse_id])) {\n            vm.aggregatedDict[aoh.color_id][aoh.warehouse_id] = {};\n            vm.aggregatedDictBackup[aoh.color_id][aoh.warehouse_id] = {};\n            vm.productVariantKpisTotals[aoh.color_id][aoh.warehouse_id] = initStockDict();\n          }\n          if (angular.isUndefined(vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id])) {\n            vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id] = initStockDict();\n          }\n          if (angular.isUndefined(vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id])) {\n            vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id] = {};\n            vm.aggregatedDictBackup[aoh.color_id][aoh.warehouse_id][aoh.size_id] = {};\n          }\n\n          vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id][aggregateName] = aoh;\n          vm.aggregatedDictBackup[aoh.color_id][aoh.warehouse_id][aoh.size_id][aggregateName] = angular.copy(aoh);\n          vm.productVariantKpisColorTotals[aoh.color_id][aggregateName] += aoh.stock;\n          vm.productVariantKpisTotals[aoh.color_id][aoh.warehouse_id][aggregateName] += aoh.stock;\n          vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id][aggregateName] += aoh.stock;\n        });\n      });\n\n      // The minimum stock comes with the available on hand, so we deal with it apart\n      vm.aggregatedData['available_on_hand'].forEach(function(aoh) {\n        var msAoh = angular.copy(aoh);\n        msAoh.stock = msAoh.minimum_stock;\n        msAoh.isUndefined = angular.isUndefined(msAoh.minimum_stock);\n        vm.aggregatedDict[aoh.color_id][aoh.warehouse_id][aoh.size_id]['minimum_stock'] = msAoh;\n        vm.productVariantKpisColorTotals[aoh.color_id]['minimum_stock'] += msAoh.minimum_stock;\n        vm.productVariantKpisTotals[aoh.color_id][aoh.warehouse_id]['minimum_stock'] += msAoh.minimum_stock;\n        vm.productVariantKpisColorSizeTotals[aoh.color_id][aoh.size_id]['minimum_stock'] += msAoh.minimum_stock;\n      });\n    }\n\n    function getCover(item) {\n      if (!item) {\n        return;\n      }\n\n      if (item.cover_thumbnail) {\n        return item.cover_thumbnail;\n      }\n      if (item.is_bundle) {\n        return '/assets/images/custom-material-design-icons/package-variant-closed-3.5badf57d.svg';\n      }\n      return '/assets/images/package-variant-closed.9c71cbbe.png';\n    }\n\n    function checkSale(sale, color, size, warehouse, filterType) {\n      if (!sale.saleOrderProductVariants[color.id]) {\n        return false;\n      }\n\n      if (warehouse === sale.source_warehouse_id) {\n        if (filterType === 'on_hand') {\n          return sale.totalAllocatedByColor[color.id] > 0;\n        } else if (filterType === 'available_on_hand') {\n          return sale.totalPendingByColor[color.id] > 0;\n        }\n      }\n\n      return false;\n    }\n    \n    function getSaleAmount(sale, color, size, warehouse, filterType) {\n      var sopv = sale.saleOrderProductVariants[color.id][size.id];\n      if (sale.saleOrderProductVariants[color.id] && sopv) {\n        if (sale.source_warehouse_id === warehouse) {\n          if (filterType === 'on_hand') {\n            if(!sopv.is_devolution){\n              return '-' + (sopv.total_allocated_amount + sopv.total_prepared_amount);\n            }\n          } else if (filterType === 'available_on_hand') {\n            if(!sopv.is_devolution){\n              if(sopv.amount > sopv.total_allocated_amount + sopv.total_prepared_amount + sopv.total_shipped_amount){\n                return '-' + (sopv.amount - sopv.total_allocated_amount - sopv.total_prepared_amount - sopv.total_shipped_amount);\n              }\n            }else{\n              if(sopv.amount > sopv.total_received_amount){\n                return '+' + (sopv.amount - sopv.total_received_amount);\n              }\n            }\n          }\n        }\n      }\n      return 0;\n    }\n    \n    function checkTransfer(transfer, color, size, warehouse, filterType) {\n      if (!transfer.transferOrderProductVariants[color.id]) {\n        return false;\n      }\n      if (warehouse === transfer.source_warehouse_id) {\n        if (filterType === 'on_hand') {\n          return transfer.totalAllocatedByColor[color.id] > 0;\n        } else if (filterType === 'available_on_hand') {\n          return transfer.totalPendingByColor[color.id] > 0;\n        }\n      } else if (warehouse === transfer.target_warehouse_id) {\n        if (filterType === 'on_hand') {\n          return false;\n        } else if (filterType === 'available_on_hand') {\n          return transfer.totalShippedByColor[color.id] > 0;\n        }\n      }\n      return false;\n    }\n\n    function getTransferAmount(transfer, color, size, warehouse, filterType) {\n      var topv = transfer.transferOrderProductVariants[color.id][size.id]\n      if (transfer.transferOrderProductVariants[color.id] && topv) {\n        if (transfer.source_warehouse_id === warehouse) {\n          if (filterType === 'on_hand') {\n            return '-' + (topv.total_allocated_amount + topv.total_prepared_amount);\n          } else if (filterType === 'available_on_hand') {\n            if(topv.amount > topv.total_allocated_amount + topv.total_prepared_amount){\n              return '-' + (topv.amount - topv.total_allocated_amount - topv.total_prepared_amount);\n            }\n          }\n        } else if (transfer.target_warehouse_id === warehouse) {\n          if (filterType === 'on_hand') {\n            return 0;\n          } else if (filterType === 'available_on_hand') {\n            return '+' + topv.total_shipped_amount;\n          }\n        }\n      }\n      return 0;\n    }\n    \n    function checkPurchase(purchase, color, size, warehouse, filterType) {\n      if (!purchase.purchaseOrderProductVariants[color.id]) {\n        return false;\n      }\n      if (warehouse === purchase.target_warehouse_id) {\n        if (filterType === 'on_hand') {\n          return false;\n        } else if (filterType === 'available_on_hand') {\n          return purchase.totalPendingByColor[color.id] > 0;\n        }\n      }\n      return false;\n    }\n\n    function getPurchaseAmount(purchase, color, size, warehouse, filterType) {\n      var popv = purchase.purchaseOrderProductVariants[color.id][size.id];\n      if (purchase.purchaseOrderProductVariants[color.id] && popv) {\n        if (purchase.target_warehouse_id === warehouse) {\n           if (filterType === 'available_on_hand') {\n             if(popv.amount > popv.total_received_amount){\n               return '+' + (popv.amount - popv.total_received_amount);\n             }\n          }\n        }\n      }\n      return 0;\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductMainInformationController', ndProductMainInformationController)\n    .directive('ndProductMainInformation', ndProductMainInformation);\n\n  /** @ngInject */\n  function ndProductMainInformationController($q, $scope, $timeout, $document, $mdToast, $filter, api, Session, $mdDialog, $state,\n                                              GS1_BARCODE_TYPES_BY_ID, INVENTORY_POLICY_TYPES, $mdSelect, HTTP_STATUS,\n                                              GS1_BARCODE_TYPES_BY_NAME, WEIGHT_UNITS, WEIGHT_UNITS_FORMATTED, CONTACT_TYPES_REVERSE,\n                                              SEARCH_MAX_LENGTH, PRODUCT_TYPES, DEFAULT_AUTOCOMPLETE_PAGE_SIZE) {\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    $scope.NOTES_MAX_LENGTH = 2048;\n\n    // Data\n    $scope.taToolbar = [\n      ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'],\n      ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent', 'html', 'insertImage', 'insertLink', 'wordcount', 'charcount']\n    ];\n\n    $scope.ngFlowOptions = {\n      // You can configure the ngFlow from here\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    $scope.ngFlow = {\n      // ng-flow will be injected into here through its directive\n      flow: {}\n    };\n\n    $scope.cover = $scope.product.cover;\n    $scope.useFlowjs = false;\n    $scope.GS1_BARCODE_TYPES_BY_ID = GS1_BARCODE_TYPES_BY_ID;\n    $scope.INVENTORY_POLICY_TYPES = INVENTORY_POLICY_TYPES;\n    $scope.currencyFontIcon = $filter('currencyIcon')(Session.company.currency);\n    // $scope.saveProductListener;\n    $scope.colorCategories = [];\n    $scope.sizeCategories = [];\n    $scope.session = Session;\n    $scope.selectFilter = {};\n    $scope.WEIGHT_UNITS = WEIGHT_UNITS;\n    $scope.WEIGHT_UNITS_FORMATTED = WEIGHT_UNITS_FORMATTED;\n    $scope.codeAlreadyExists = null;\n    $scope.b2bEcommerces = [];\n    $scope.defaultB2b = null;\n    $scope.selectedUniqueB2b = false;\n\n    //Bundle data\n    $scope.PRODUCT_TYPES = {};\n    $scope.PRODUCT_TYPES_REVERSE = {};\n    $scope.hasProductBundlesFeature = !Session.hasSubscription || Session.hasAddOn('app.inventory.products.product.bundles');\n\n\n    // Methods\n    $scope.init = init;\n    $scope.fileAdded = fileAdded;\n    //$scope.convertTagsToArray = convertTagsToArray;\n    //$scope.convertTagsToString = convertTagsToString;\n    $scope.onSelectorClose = onSelectorClose;\n    $scope.autogenerateCode = autogenerateCode;\n    // $scope.filterFunction = filterFunction;\n    $scope.saveProduct = saveProduct;\n    $scope.fileSuccess = fileSuccess;\n    $scope.postSaveProduct = postSaveProduct;\n    $scope.cancelProduct = cancelProduct;\n\n    $scope.showNewObjectOptionDialog = showNewObjectOptionDialog;\n    $scope.checkCodeUnique = checkCodeUnique;\n    $scope.largestTagLength = largestTagLength;\n    $scope.setUniqueB2bToProduct = setUniqueB2bToProduct;\n    $scope.manageStockChanged = manageStockChanged;\n    $scope.getProductTypeImage = getProductTypeImage;\n    $scope.productTypeChanged = productTypeChanged;\n    $scope.isProductTypeDisabled = isProductTypeDisabled;\n    $scope.onSelectorOpen = onSelectorOpen;\n    $scope.onSelectorClose = onSelectorClose;\n    $scope.goToNewProductPage = goToNewProductPage;\n    $scope.isProductBundle = isProductBundle;\n    $scope.codeNameFormatter = codeNameFormatter;\n    $scope.providerQuerySearch = providerQuerySearch;\n    $scope.providerChanged = providerChanged;\n    $scope.brandQuerySearch = brandQuerySearch;\n    $scope.brandChanged = brandChanged;\n    $scope.seasonQuerySearch = seasonQuerySearch;\n    $scope.seasonChanged = seasonChanged;\n    $scope.categoryQuerySearch = categoryQuerySearch;\n    $scope.categoryChanged = categoryChanged;\n    $scope.subcategoryQuerySearch = subcategoryQuerySearch;\n    $scope.subcategoryChanged = subcategoryChanged;\n    $scope.compositionQuerySearch = compositionQuerySearch;\n    $scope.compositionChanged = compositionChanged;\n\n    // Functions\n    /**\n     * Initialize function\n     */\n    init();\n\n    function init() {\n      initProductTypes();\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n\n      if (!$scope.saveProductListener) {\n        $scope.saveProductListener = $scope.$on('saveProduct', function(event, data) {\n          $scope.saveProduct();\n        });\n\n        $scope.$on('$destroy', function() {\n          $scope.saveProductListener();\n        });\n      }\n\n      if ($scope.product) {\n        $scope.product.tags = $scope.product.tags.filter(function(tag) {\n          return !!tag;\n        });\n      }\n\n      // When the category changes, the subcategory is reset\n      $scope.$watch('product.category', function(newValue, oldValue) {\n        if ($scope.product && !$scope.product.id) {\n          $scope.product.subcategory = null;\n        }\n      });\n\n      if (!$scope.product.id) {\n        $scope.product.default_barcode_type = GS1_BARCODE_TYPES_BY_NAME.GS1_CODE_128.id;\n\n        if ($scope.product.is_bundle) {\n          $scope.product.product_type = $scope.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE;\n        } else if ($scope.product.is_raw_material) {\n          $scope.product.product_type = $scope.PRODUCT_TYPES_REVERSE.RAW_MATERIAL;\n        } else if ($scope.product.is_gift_card) {\n          $scope.product.product_type = $scope.PRODUCT_TYPES_REVERSE.GIFT_CARD;\n        } else {\n          $scope.product.product_type = $scope.PRODUCT_TYPES_REVERSE.PRODUCT;\n        }\n      }\n\n      //Get b2b Ecommerces\n      if (Session.hasMultipleB2B()) {\n        api.wholesale.b2bEcommerces.list(function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.data) {\n            $scope.b2bEcommerces = response.data;\n          }\n        });\n      } else {\n        $scope.defaultB2b = Session.getDefaultB2B();\n        if (!$scope.product.b2b_ecommerces) {\n          $scope.product.b2b_ecommerces = [];\n        }\n        $scope.selectedUniqueB2b = $scope.product.b2b_ecommerces.includes($scope.defaultB2b);\n      }\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function setUniqueB2bToProduct() {\n      if (!Session.hasMultipleB2B()) {\n        if (!$scope.selectedUniqueB2b) {\n          $scope.product.b2b_ecommerces.push($scope.defaultB2b);\n        } else {\n          $scope.product.b2b_ecommerces = [];\n        }\n      }\n    }\n\n    function checkCodeUnique() {\n\n      $scope.product.autogenerate = false;\n\n      if ($scope.checkCodeUniqueTimeout) {\n        $timeout.cancel($scope.checkCodeUniqueTimeout);\n      }\n\n      $scope.codeAlreadyExists = -1;\n\n      $scope.checkCodeUniqueTimeout = $timeout(function() {\n        api.inventories.products.get({\n          option: 'check-code-unique',\n          current_id: $scope.product.id,\n          code: $scope.product.code\n        }, function(response, callback, status) {\n          if (status == 200) {\n            $scope.codeAlreadyExists = 0;\n            $scope.productForm.code.$setValidity('uniqueCodeError', true);\n          } else if (status == 302) {\n            $scope.codeAlreadyExists = response.counter;\n            $scope.productForm.code.$setValidity('uniqueCodeError', false);\n          }\n          $scope.checkCodeUniqueTimeout = null;\n        });\n      }, 1000);\n\n    }\n\n    function autogenerateCode() {\n      if (!$scope.product.autogenerate || $scope.gettingCode) {\n        return;\n      }\n\n      $scope.productForm.code.$setValidity('uniqueCodeError', true);\n      $scope.codeAlreadyExists = null;\n\n      $scope.gettingCode = true;\n\n      api.inventories.products.get({\n        option: 'next-code',\n        current_id: $scope.product.id,\n        brand: $scope.product.brand,\n        composition: $scope.product.composition,\n        origin: $scope.product.origin_code,\n        group: $scope.product.group_code,\n        season: $scope.product.season,\n        category: $scope.product.category,\n        subcategory: $scope.product.subcategory\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $scope.product.code = response.next_code;\n        }\n        $scope.gettingCode = false;\n      });\n    }\n\n    /**\n     * On imatge added\n     * @param file\n     */\n    function fileAdded(file) {\n      var fileReader = new FileReader();\n      fileReader.readAsDataURL(file.file);\n      fileReader.onload = function(event) {\n        $scope.cover = event.target.result;\n        $scope.$apply();\n      };\n      $scope.useFlowjs = true;\n      if ($scope.productForm) {\n        $scope.productForm.$dirty = true;\n      }\n    }\n\n    function onSelectorClose(filter) {\n      $scope.selectFilter[filter] = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    /**\n     * Saves vm.product\n     */\n    function saveProduct() {\n      var product = angular.copy($scope.product);\n\n      // Edit current product\n      if ($scope.product.id) {\n        // To upload the file we use Flow.js\n\n        api.inventories.products.update(\n          product,\n          function(response) {\n\n            if ($scope.useFlowjs) {\n              $scope.ngFlow.flow.opts.headers = {\n                'Authorization': 'Token ' + Session.token\n              };\n              $scope.ngFlow.flow.opts.target = api.urls.inventories.products\n                .replace(':id/', $scope.product.id)\n                .replace(':option', '');\n              $scope.ngFlow.flow.opts.query = { id: product.id };\n              $scope.ngFlow.flow.opts.uploadMethod = 'PUT';\n              $scope.ngFlow.flow.upload();\n\n            } else {\n              $scope.postSaveProduct(response, true);\n            }\n\n          }\n        );\n\n        // Create new product\n      } else {\n        var productApi = api.inventories.products;\n        var isProductBundle = parseInt($scope.product.product_type) === $scope.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE;\n\n        if (isProductBundle && !$scope.hasProductBundlesFeature) {\n          return;\n        }\n\n        if (isProductBundle) {\n          productApi = api.inventories.productBundles;\n        }\n        productApi.save(\n          product,\n          function(response) {\n\n            // To upload the file we use Flow.js\n            if ($scope.useFlowjs) {\n              $scope.ngFlow.flow.opts.headers = {\n                'Authorization': 'Token ' + Session.token\n              };\n              $scope.ngFlow.flow.opts.target = api.urls.inventories.products\n                .replace(':id/', response.id)\n                .replace(':option', '');\n              $scope.ngFlow.flow.opts.query = { id: product.id };\n              $scope.ngFlow.flow.opts.uploadMethod = 'PUT';\n              $scope.ngFlow.flow.upload();\n\n              // If we didn't change the file we save normal\n            } else {\n              $scope.postSaveProduct(response, false);\n            }\n\n          }\n        );\n\n\n      }\n    }\n\n    function fileSuccess(file, message) {\n      $scope.useFlowjs = false;\n      postSaveProduct(JSON.parse(message), true);\n    }\n\n    function postSaveProduct(response, isUpdate) {\n\n      if (response.id) {\n        if (!$scope.hideToasts) {\n          if (isUpdate)\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n          else\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_CREATED')).position('top right'));\n        }\n\n        angular.extend($scope.product, response);\n\n        if (angular.isUndefined($scope.product.prices))\n          $scope.product.prices = [];\n\n        // TODO: is it needed here?\n        if (angular.isDefined($scope.pricingTiers) && $scope.pricingTiers.length) {\n          $scope.pricingTiers.forEach(function(pricingTier) {\n\n            var pp = $scope.product.prices.find(function(price) {\n              return price.pricing_tier == pricingTier.id;\n            });\n\n            if (angular.isUndefined(pp)) {\n              $scope.product.prices.push(\n                {\n                  currency: pricingTier.currency,\n                  pricing_tier: pricingTier.id,\n                  product: $scope.product.id,\n                  position: pricingTier.position,\n                  value: null\n                }\n              );\n            }\n          });\n        }\n\n        if ($scope.saveCallback)\n          $scope.saveCallback({ product: $scope.product });\n      }\n    }\n\n\n    /*\n    Not used\n\n    function filterFunction(subcategory) {\n      return selectFilter || subcategory.category.id == product.category.id;\n    }\n     */\n\n    function cancelProduct() {\n      if ($scope.cancelCallback)\n        $scope.cancelCallback();\n    }\n\n    function showNewObjectOptionDialog() {\n\n      // Hide the select before open the dialog\n      $mdSelect.hide();\n\n      $mdDialog.show({\n        controller: 'ConfigurationCompositionDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/composition-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          composition: null\n        }\n      }).then(function(result) {\n        newCompositionAdded(result);\n      }, function() {\n\n      });\n    }\n\n    function largestTagLength(tags) {\n      var maxLength = 0;\n      tags.forEach(function(tag) {\n        if (tag.length > maxLength) maxLength = tag.length;\n      });\n      return maxLength;\n    }\n\n    function manageStockChanged() {\n      if (!$scope.product.manage_stock) {\n        $scope.product.is_noos = false;\n        $scope.product.manage_uids = false;\n        $scope.product.manage_lots = false;\n      }\n    }\n\n    function getProductTypeImage(productType) {\n      if (parseInt(productType) === $scope.PRODUCT_TYPES_REVERSE.PRODUCT) {\n        return '/assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg';\n      } else if (parseInt(productType) === $scope.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE) {\n        return '/assets/images/custom-material-design-icons/package-variant-closed-3.5badf57d.svg';\n      } else if (parseInt(productType) === $scope.PRODUCT_TYPES_REVERSE.GIFT_CARD) {\n        return '/assets/images/wallet-giftcard.b55a1923.svg';\n      } else if (parseInt(productType) === $scope.PRODUCT_TYPES_REVERSE.RAW_MATERIAL) {\n        return '/assets/images/factory-icon.0bceea3e.svg';\n      }\n      return '';\n    }\n\n    function resetProductTypes() {\n      $scope.product.is_gift_card = false;\n      $scope.product.is_raw_material = false;\n      $scope.product.is_bundle = false;\n    }\n\n    function productTypeChanged() {\n      resetProductTypes();\n      if (parseInt($scope.product.product_type) === $scope.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE) {\n        if (!$scope.hasProductBundlesFeature) {\n          $scope.product.product_type = 1;\n        } else {\n          $scope.product.is_bundle = true;\n        }\n      } else if (parseInt($scope.product.product_type) === $scope.PRODUCT_TYPES_REVERSE.GIFT_CARD) {\n        $scope.product.is_gift_card = true;\n      } else if (parseInt($scope.product.product_type) === $scope.PRODUCT_TYPES_REVERSE.RAW_MATERIAL) {\n        $scope.product.is_raw_material = true;\n      }\n    }\n\n    function isProductTypeDisabled(productType) {\n      return parseInt(productType) === $scope.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE && !$scope.hasProductBundlesFeature;\n    }\n\n    function initProductTypes() {\n      $scope.PRODUCT_TYPES_REVERSE = {\n        PRODUCT: PRODUCT_TYPES.PRODUCT,\n        PRODUCT_BUNDLE: PRODUCT_TYPES.PRODUCT_BUNDLE,\n        GIFT_CARD: PRODUCT_TYPES.GIFT_CARD,\n        RAW_MATERIAL: PRODUCT_TYPES.RAW_MATERIAL\n      };\n\n      $scope.PRODUCT_TYPES = {\n        1: PRODUCT_TYPES[PRODUCT_TYPES.PRODUCT],\n        2: PRODUCT_TYPES[PRODUCT_TYPES.PRODUCT_BUNDLE],\n        3: PRODUCT_TYPES[PRODUCT_TYPES.GIFT_CARD],\n        4: PRODUCT_TYPES[PRODUCT_TYPES.RAW_MATERIAL]\n      };\n    }\n\n    function isProductBundle() {\n      return parseInt($scope.product.product_type) === $scope.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE;\n    }\n\n    function goToNewProductPage() {\n      $state.reload();\n    }\n\n    function querySearch(endpoint, parameters) {\n      var deferred = $q.defer();\n      endpoint.get(\n        window.angular.extend(parameters, {\n          page_size: DEFAULT_AUTOCOMPLETE_PAGE_SIZE\n        }),\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function providerQuerySearch() {\n      return querySearch(api.inventories.contacts, {\n        search: $scope.providerSearchText.substring(0, SEARCH_MAX_LENGTH),\n        type: [\n          CONTACT_TYPES_REVERSE.CONTACT_TYPE_PROVIDER,\n          CONTACT_TYPES_REVERSE.CONTACT_TYPE_MANUFACTURER\n        ].join(',')\n      });\n    }\n\n    function providerChanged(provider) {\n      if (provider && provider.id) {\n        $scope.product.provider = provider.id;\n      } else {\n        $scope.product.provider = null;\n      }\n    }\n\n    function codeNameFormatter(item) {\n      return $filter('codename')(item);\n    }\n\n    function brandQuerySearch() {\n      return querySearch(api.inventories.brands, {\n        search: $scope.brandSearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function brandChanged(brand) {\n      if (brand && brand.id) {\n        $scope.product.brand = brand.id;\n      } else {\n        $scope.product.brand = null;\n      }\n    }\n\n    function seasonQuerySearch() {\n      return querySearch(api.inventories.seasons, {\n        search: $scope.seasonSearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function seasonChanged(season) {\n      if (season && season.id) {\n        $scope.product.season = season.id;\n      } else {\n        $scope.product.season = null;\n      }\n    }\n\n    function categoryQuerySearch() {\n      return querySearch(api.inventories.categories, {\n        search: $scope.categorySearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function categoryChanged(item) {\n      if (item && item.id) {\n        $scope.product.category = item.id;\n      } else {\n        $scope.product.category = null;\n      }\n      $scope.product.subcategory = null;\n    }\n\n    function subcategoryQuerySearch() {\n      return querySearch(api.inventories.subcategories, {\n        search: $scope.subcategorySearchText.substring(0, SEARCH_MAX_LENGTH),\n        category_id: $scope.product.category\n      });\n    }\n\n    function subcategoryChanged(item) {\n      if (item && item.id) {\n        $scope.product.subcategory = item.id;\n      } else {\n        $scope.product.subcategory = null;\n      }\n    }\n\n    function compositionQuerySearch() {\n      return querySearch(api.inventories.compositions, {\n        search: $scope.compositionSearchText.substring(0, SEARCH_MAX_LENGTH)\n      });\n    }\n\n    function compositionChanged(item) {\n      if (item && item.id) {\n        $scope.product.composition = item.id;\n      } else {\n        $scope.product.composition = null;\n      }\n    }\n  }\n\n  /** @ngInject */\n  function ndProductMainInformation() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        collections: '=?',\n        currencies: '=?',\n        saveCallback: '&?',\n        cancelCallback: '&?',\n        showButtons: '=?',\n        hideToasts: '=?',\n        pricingTiers: '=?',\n        variantCategories: '=?',\n        inventoryConfiguration: '=?',\n        ecommerceProductRestrictions: '=?',\n        b2bEcommerces: '=?',\n        isNew: '=?'\n      },\n      controller: 'ndProductMainInformationController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-main-information/nd-product-main-information.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductEcommerceController', ndProductEcommerceController)\n    .directive('ndProductEcommerce', ndProductEcommerce);\n\n  /** @ngInject */\n  function ndProductEcommerceController($scope,\n                                        $document,\n                                        $mdToast,\n                                        $mdDialog,\n                                        $filter,\n                                        $interval,\n                                        $q,\n                                        api,\n                                        Session,\n                                        HTTP_STATUS,\n                                        ECOMMERCE_PLATFORMS,\n                                        ECOMMERCE_SYNC_OPTIONS,\n                                        ERROR_CODES,\n                                        $sce) {\n    // Data\n    var vm = $scope;\n    vm.sitesDict = {};\n    vm.showForceSizeVariations = null;\n    vm.showForceColorVariations = null;\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n    vm.ECOMMERCE_SYNC_OPTIONS = ECOMMERCE_SYNC_OPTIONS;\n    vm.taToolbar = [\n      ['h1', 'h2', 'h3', 'h4', 'p', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'html']\n    ];\n    vm.variants = {\n      colors: [],\n      sizes: []\n    };\n\n    // Methods\n    vm.saveProduct = saveProduct;\n    vm.exists = exists;\n    vm.toggle = toggle;\n\n    vm.syncSiteProduct = syncSiteProduct;\n    vm.showAdminActions = showAdminActions;\n    vm.syncSiteProduct = syncSiteProduct;\n    vm.importProduct = importProduct;\n    vm.showErrors = showErrors;\n    vm.showWarnings = showWarnings;\n    vm.clickSiteSwitch = clickSiteSwitch;\n    vm.saveSiteProduct = saveSiteProduct;\n    vm.showLog = showLog;\n    vm.getButtonText = getButtonText;\n    vm.deleteSiteProduct = deleteSiteProduct;\n    vm.showDeleteButton = showDeleteButton;\n    vm.showErrorColumn = showErrorColumn;\n    vm.showSyncColumn = showSyncColumn;\n    vm.showNeverSynchronizedText = showNeverSynchronizedText;\n    vm.showNextSyncText = showNextSyncText;\n    vm.showActiveColumn = showActiveColumn;\n    vm.showForceSyncSizeDialog = showForceSyncSizeDialog;\n    vm.showForceSyncColorDialog = showForceSyncColorDialog;\n    vm.closeDialog = closeDialog;\n    vm.showAndHideConfig = showAndHideConfig;\n    vm.querySearch = querySearch;\n    vm.siteProductBlocked = siteProductBlocked;\n    vm.siteCategorySelected = siteCategorySelected;\n    vm.openAdvancedCategorySearch = openAdvancedCategorySearch;\n    vm.isMiraviaProduct = isMiraviaProduct;\n    vm.hasCustomOptions = hasCustomOptions;\n    vm.hasCustomName = hasCustomName;\n    vm.hasCustomDescription = hasCustomDescription;\n    vm.hasCustomLongDescription = hasCustomLongDescription;\n    vm.hasCustomCode = hasCustomCode;\n    vm.selectAllVariants = selectAllVariants;\n    vm.showSlug = showSlug;\n\n    // Initialization\n    init();\n\n    // Functions\n\n    function init() {\n      var showForceVariations = false;\n\n      var tempColorDIct = {};\n      var tempSizeDIct = {};\n      vm.product.product_variants.forEach(function(productVariant) {\n        if (!tempColorDIct[productVariant.color]) {\n          tempColorDIct[productVariant.color] = true;\n          vm.variants.colors.push({\n            id: productVariant.color,\n            code: productVariant.color_code,\n            name: productVariant.color_name\n          });\n        }\n        if (!tempSizeDIct[productVariant.size]) {\n          tempSizeDIct[productVariant.size] = true;\n          vm.variants.sizes.push({\n            id: productVariant.size,\n            code: productVariant.size_code,\n            name: productVariant.size_name\n          });\n        }\n      });\n\n      vm.sites.forEach(function(site) {\n        site.showConfig = false;\n        vm.sitesDict[site.id] = site;\n        showForceVariations = showForceVariations ||\n          site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE ||\n          site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY ||\n          site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP;\n      });\n\n      vm.interval = {};\n\n      // Only show the columns when there is at least one WooCommerce or Shopify\n      // and there is just one variation of color or size\n      vm.showForceColorVariations = vm.product.color_variants.length === 1 && showForceVariations;\n      vm.showForceSizeVariations = vm.product.size_variants.length === 1 && showForceVariations;\n\n      vm.siteProductsDict = {};\n      vm.siteProductsEditDict = {};\n      vm.siteProducts.forEach(function(sp) {\n        vm.siteProductsDict[sp.site] = sp;\n        vm.siteProductsEditDict[sp.site] = { selectedCategories: sp.web_categories };\n        // If a site_product is synchronizing when the page is loaded, start the interval\n        if (sp.synchronizing) {\n          checkSyncSiteProductFinished({ id: sp.site }, false);\n        }\n\n        // Only show the showForceCreation if it's Shopify and the product is not synchronized yet\n        if (vm.sitesDict[sp.site] && vm.sitesDict[sp.site].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY) {\n          vm.siteProductsDict[sp.site].showForceCreationCheckbox = !sp.external_id;\n        }\n      });\n\n      $scope.$on('$destroy', function() {\n        Object.keys(vm.interval).forEach(function(siteId) {\n          $interval.cancel(vm.interval[siteId]);\n        });\n      });\n    }\n\n    function deleteSiteProduct(site) {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.DELETE_FROM_ECOMMERCE'))\n        .htmlContent($filter('translate')('PRODUCT.DELETE_FROM_ECOMMERCE_MESSAGE', {\n          product: vm.product.name,\n          site: site.name\n        }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        vm.siteProductsDict[site.id].saving = true;\n        vm.siteProductsDict[site.id].deleting = true;\n\n        api.ecommerce.siteProducts.update({\n            id: vm.siteProductsDict[site.id].id,\n            option: 'remove'\n          },\n          function(results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              checkDeleteSiteProductFinished(site);\n            } else {\n              vm.siteProductsDict[id].saving = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }, function() {\n\n      });\n    }\n\n    function exists(item, list) {\n      return list.indexOf(item) > -1;\n    }\n\n    function toggle(item, list) {\n      var idx = list.indexOf(item);\n      if (idx > -1) {\n        list.splice(idx, 1);\n      } else {\n        list.push(item);\n      }\n    }\n\n    function saveProduct() {\n      vm.sites_data = window.angular.copy(vm.product.sites);\n      vm.categories_data = window.angular.copy(vm.product.web_categories);\n\n      api.inventories.products.update(\n        vm.product,\n        function(response, callback, status) {\n          if (status === 200) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n          } else {\n\n          }\n        }\n      );\n    }\n\n    function clickSiteSwitch(site, event) {\n      event.stopPropagation();\n    }\n\n    function saveSiteProduct(site) {\n\n      if (vm.siteProductsDict[site.id] && vm.siteProductsDict[site.id].id) {\n        if (!vm.siteProductsDict[site.id].sync_enabled) {\n          site.showConfig = false;\n        }\n        // If it's a Zalando site, if exists, only can be a \"switch off\" that means that has to be removed\n        if (vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO) {\n          vm.siteProductsDict[site.id].saving = true;\n          api.ecommerce.siteProducts.delete(\n            vm.siteProductsDict[site.id],\n            function(response, callback, status) {\n              if (status === 204) {\n                delete vm.siteProductsDict[site.id];\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.siteProductsDict[site.id].saving = false;\n            }\n          );\n        } else {\n          vm.siteProductsDict[site.id].saving = true;\n          if (vm.siteProductsEditDict[site.id]) {\n            vm.siteProductsDict[site.id].web_categories = vm.siteProductsEditDict[site.id].selectedCategories.map(function(category) {\n              return category.id;\n            });\n          }\n          api.ecommerce.siteProducts.update(\n            vm.siteProductsDict[site.id],\n            function(response, callback, status) {\n              if (status === 200) {\n                vm.siteProductsDict[site.id] = response;\n                syncSiteProduct(site);\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.siteProductsDict[site.id].saving = false;\n            }\n          );\n        }\n      } else {\n        vm.siteProductsDict[site.id] = {\n          site: site.id,\n          product: vm.product.id,\n          sync_enabled: true,\n          active: true,\n          saving: true\n        };\n\n        if (vm.siteProductsEditDict[site.id]) {\n          vm.siteProductsDict[site.id].web_categories = vm.siteProductsEditDict[site.id].selectedCategories.map(function(category) {\n            return category.id;\n          });\n        }\n\n        api.ecommerce.siteProducts.save(\n          vm.siteProductsDict[site.id],\n          function(response, callback, status) {\n            if (status === 201) {\n              vm.siteProductsDict[site.id] = response;\n              if (site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY && !vm.siteProductsDict[site.id].external_id) {\n                vm.siteProductsDict[site.id].showForceCreationCheckbox = true;\n              }\n              syncSiteProduct(site);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.siteProductsDict[site.id].saving = false;\n          }\n        );\n      }\n    }\n\n    function importProduct(site, event) {\n      event.stopPropagation();\n\n      if (!vm.showAdminActions()) {\n        return;\n      }\n      if (site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO) {\n        return;\n      }\n      if (!vm.siteProductsDict[site.id].sync_enabled || !vm.siteProductsDict[site.id].external_id) {\n        return;\n      }\n\n      vm.siteProductsDict[site.id].synchronizing = true;\n\n      var object = {\n        id: site.id,\n        option: 'import-products',\n        external_ids: vm.siteProductsDict[site.id].external_id\n      };\n\n      api.ecommerce.sites.save(\n        object,\n        function(results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            checkSyncSiteProductFinished(site, true);\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (results && results.error) {\n              if (results.error == 'ERROR_08005_IMPORTATION_IN_PROGRESS') {\n                checkSyncSiteProductFinished(site, true);\n              }\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('ERROR_MESSAGES.' + results.error)).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          } else {\n            vm.siteProductsDict[site.id].synchronizing = false;\n            vm.siteProductsDict[site.id].waiting_to_synchronize = false;\n          }\n        }\n      );\n    }\n\n    function showAdminActions() {\n      return !!Session.user.isSuperAdmin();\n    }\n\n    function syncSiteProduct(site, event, action) {\n\n      event.stopPropagation();\n      if (site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n      } else {\n        if (vm.siteProductsDict[site.id].sync_enabled) {\n\n          vm.siteProductsDict[site.id].synchronizing = true;\n          api.ecommerce.siteProducts.update(\n            {\n              id: vm.siteProductsDict[site.id].id,\n              option: 'sync',\n              action: action,\n              force_creation: vm.siteProductsDict[site.id].force_creation\n            },\n            function(response, callback, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                checkSyncSiteProductFinished(site, false);\n              } else {\n                vm.siteProductsDict[site.id].synchronizing = false;\n                vm.siteProductsDict[site.id].waiting_to_synchronize = false;\n              }\n            }\n          );\n        }\n      }\n    }\n\n    function checkSyncSiteProductFinished(site, isImportation) {\n      vm.interval[site.id] = $interval(function() {\n        api.ecommerce.siteProducts.get(\n          {\n            id: vm.siteProductsDict[site.id].id,\n            option: 'check-status'\n          },\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              if (response) {\n                if (isImportation && !response.importing) {\n                  $interval.cancel(vm.interval[site.id]);\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.IMPORT_FINISHED')).position('top right'));\n                  updateSiteProduct(vm.siteProductsDict[site.id].id);\n                } else if (!response.synchronizing && !response.waiting_to_synchronize) {\n                  $interval.cancel(vm.interval[site.id]);\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.SYNC_FINISHED')).position('top right'));\n                  updateSiteProduct(vm.siteProductsDict[site.id].id);\n                }\n              }\n            } else {\n              // TODO\n            }\n          }\n        );\n      }, 5000);\n    }\n\n    function updateSiteProduct(siteProductId) {\n      api.ecommerce.siteProducts.get(\n        {\n          id: siteProductId\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (response) {\n              vm.siteProductsDict[response.site] = response;\n            }\n          }\n        }\n      );\n    }\n\n    function checkDeleteSiteProductFinished(site) {\n      vm.interval[site.id] = $interval(function() {\n        api.ecommerce.siteProducts.get(\n          {\n            id: vm.siteProductsDict[site.id].id\n          },\n          function(response, callback, status) {\n            if (status === 404) {\n              $interval.cancel(vm.interval[site.id]);\n              delete vm.siteProductsDict[site.id];\n            }\n          }\n        );\n      }, 5000);\n    }\n\n    function showErrors(site, event) {\n      event.stopPropagation();\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('PRODUCT.ERRORS_LOG'))\n          .htmlContent(getErrorMessage(site))\n          .ok($filter('translate')('GENERAL.CLOSE'))\n          .css({ 'min-width': '1000px' }));\n    }\n\n    function getErrorMessage(site) {\n      const rawMessage = vm.siteProductsDict[site.id].error_message;\n\n      if (rawMessage in ERROR_CODES)\n        return $filter('translate')('ECOMMERCE.' + ERROR_CODES[rawMessage]);\n\n      return $sce.trustAsHtml(rawMessage.replace(/\\n/g, '<br/>'));\n    }\n\n    function showWarnings(site, event) {\n      event.stopPropagation();\n      var warning_messages = vm.siteProductsDict[site.id].warning_message;\n      var full_warning_messages = '';\n      for (var i = 0; i < warning_messages.length; i++) {\n        full_warning_messages = full_warning_messages.concat('- ', $filter('translate')('ERROR_MESSAGES.' + warning_messages[i]['message'], warning_messages[i]['params']), '<br>');\n      }\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('PRODUCT.WARNINGS_LOG'))\n          .htmlContent(full_warning_messages)\n          .ok($filter('translate')('GENERAL.CLOSE')));\n    }\n\n\n    function showLog(site) {\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('PRODUCT.VIEW_LAST_LOG'))\n          .htmlContent('<pre class=\"log-pre\">' + vm.siteProductsDict[site.id].log + '</pre>')\n          .ok($filter('translate')('GENERAL.CLOSE')));\n    }\n\n    function getButtonText(siteId, action) {\n      if (vm.siteProductsDict[siteId].waiting_to_synchronize) {\n        return $filter('translate')('PRODUCT.SYNC_ENQUEUED');\n      }\n      if (vm.siteProductsDict[siteId].synchronizing) {\n        return $filter('translate')('PRODUCT.SYNCHRONIZING');\n      }\n      if (action === 'stock') {\n        return $filter('translate')('PRODUCT.SYNC_STOCK');\n      } else if (action === 'price') {\n        return $filter('translate')('PRODUCT.SYNC_PRICE');\n      } else {\n        {\n          return $filter('translate')('PRODUCT.SYNC_PRODUCT');\n        }\n      }\n    }\n\n    function showDeleteButton(site) {\n      if (!vm.siteProductsDict[site.id]) {\n        return false;\n      }\n      if (vm.sitesDict[site.id].platform !== ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE) {\n        return false;\n      }\n      if (vm.siteProductsDict[site.id].deleting) {\n        return true;\n      }\n      // return !vm.siteProductsDict[site.id].saving && !vm.siteProductsDict[site.id].active && !vm.siteProductsDict[site.id].synchronizing && !vm.siteProductsDict[site.id].waiting_to_synchronize;\n      return !vm.siteProductsDict[site.id].saving && !vm.siteProductsDict[site.id].active && !vm.siteProductsDict[site.id].synchronizing && !vm.siteProductsDict[site.id].waiting_to_synchronize;\n    }\n\n    function showErrorColumn(site) {\n      if (vm.siteProductsDict[site.id] && !vm.siteProductsDict[site.id].sync_enabled) {\n        return false;\n      }\n      if (vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO ||\n        vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX ||\n        vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_API) {\n        return false;\n      }\n      return true;\n    }\n\n    function showSyncColumn(site) {\n      if (vm.siteProductsDict[site.id] && !vm.siteProductsDict[site.id].sync_enabled) {\n        return false;\n      }\n      if (vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO ||\n        vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX) {\n        return false;\n      }\n      return true;\n    }\n\n    function showNeverSynchronizedText(site) {\n      if (vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV) {\n        return false;\n      }\n      return (vm.siteProductsDict[site.id] && !vm.siteProductsDict[site.id].last_sync) ||\n        !vm.siteProductsDict[site.id];\n    }\n\n    function showNextSyncText(site) {\n      return vm.siteProductsDict[site.id] &&\n        vm.siteProductsDict[site.id].next_sync &&\n        site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO;\n    }\n\n    function showActiveColumn(site) {\n      if (vm.siteProductsDict[site.id] && !vm.siteProductsDict[site.id].sync_enabled) {\n        return false;\n      }\n      if (vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO ||\n        vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV ||\n        vm.sitesDict[site.id].platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX) {\n        return false;\n      }\n      return true;\n    }\n\n    function showForceSyncSizeDialog() {\n      showForceSyncDialog('#force-sync-size-dialog');\n    }\n\n    function showForceSyncColorDialog() {\n      showForceSyncDialog('#force-sync-color-dialog');\n    }\n\n    function closeDialog() {\n      $mdDialog.hide();\n    }\n\n    function showForceSyncDialog(id) {\n      $mdDialog.show({\n        contentElement: id,\n        clickOutsideToClose: true,\n        parent: angular.element(document.getElementById(document.body))\n      }).then(function() {\n        // Nothing to do\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function showAndHideConfig(site) {\n      if (vm.siteProductsDict[site.id] && showSyncColumn(site) && (!site.sync_stock_only || site.allow_sync_productvariants_by_variant)) {\n        site.showConfig = !site.showConfig;\n      }\n    }\n\n    function querySearch(site) {\n      var deferred = $q.defer();\n      var data = {\n        search: vm.siteProductsEditDict[site.id].searchText,\n        category_group_id: site.category_group,\n        show_all: true\n      };\n      if (vm.isMiraviaProduct(site)) {\n        data.only_leafs = true;\n      }\n\n      api.ecommerce.categories.get(data, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function siteProductBlocked(site) {\n      return vm.siteProductsDict[site.id].deleting\n        || vm.siteProductsDict[site.id].synchronizing\n        || vm.siteProductsDict[site.id].saving\n        || vm.siteProductsDict[site.id].waiting_to_synchronize;\n    }\n\n    function siteCategorySelected(site) {\n      if (vm.siteProductsEditDict[site.id].selectedItem) {\n        if (!vm.siteProductsEditDict[site.id].selectedCategories) vm.siteProductsEditDict[site.id].selectedCategories = [];\n        vm.siteProductsEditDict[site.id].selectedCategories.push(angular.copy(vm.siteProductsEditDict[site.id].selectedItem));\n      }\n      vm.siteProductsEditDict[site.id].selectedItem = null;\n    }\n\n    function openAdvancedCategorySearch(site) {\n      if (!vm.siteProductsEditDict[site.id].selectedCategories) vm.siteProductsEditDict[site.id].selectedCategories = [];\n      $mdDialog.show({\n        controller: 'EcommerceCategoryTreeDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/ecommerce-category-tree/ecommerce-category-tree-dialog.html',\n        locals: {\n          site: site,\n          selectedCategories: $scope.siteProductsEditDict[site.id].selectedCategories\n        }\n      }).then(function(result) {\n\n      });\n    }\n\n    function isMiraviaProduct(site) {\n      return site.platform === vm.ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA;\n    }\n\n    function hasCustomOptions(site) {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ].includes(site.platform);\n    }\n\n    function hasCustomName(site) {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ].includes(site.platform);\n    }\n\n    function hasCustomDescription(site) {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ].includes(site.platform);\n    }\n\n    function hasCustomLongDescription(site) {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ].includes(site.platform);\n    }\n\n    function hasCustomCode(site) {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\n      ].includes(site.platform);\n    }\n\n    function showSlug(site) {\n      return site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY;\n    }\n\n    function selectAllVariants(siteId, variantsList) {\n\n      if (!$scope.siteProductsDict[siteId]) {\n        return;\n      }\n\n      var existingVariants = $scope.siteProductsDict[siteId].sync_variants || [];\n      var newVariants = [];\n\n      // Loop through the provided variantsList (can be colors or sizes)\n      if (variantsList) {\n        for (var i = 0; i < variantsList.length; i++) {\n          var variantId = variantsList[i].id;\n          if (existingVariants.indexOf(variantId) === -1) {\n            newVariants.push(variantId);\n          }\n        }\n      }\n\n      // Merge new variants with existing ones\n      $scope.siteProductsDict[siteId].sync_variants = existingVariants.concat(newVariants);\n    }\n\n  }\n\n\n  /** @ngInject */\n  function ndProductEcommerce() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        sites: '=',\n        siteProducts: '='\n      },\n      controller: 'ndProductEcommerceController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-ecommerce/nd-product-ecommerce.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductChipVariantsController', ndProductChipVariantsController)\n    .directive('ndProductChipVariants', ndProductChipVariants);\n\n\n  /** @ngInject */\n  function ndProductChipVariants() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        saveCallback: '&?',\n        cancelCallback: '&?',\n        showButtons: '=?',\n        hideToasts: '=?',\n        isNew: '=?'\n      },\n      controller: 'ndProductChipVariantsController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-chip-variants/nd-product-chip-variants.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndProductChipVariantsController($rootScope, $scope, $filter, $mdDialog, $document, $mdToast, $cookies,\n                                           $translate, api, Session, $q, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n    // Parameters\n    $scope.product;\n    $scope.showButtons;\n\n    const DEFAULT_CATEGORY_NAME_LABEL = $filter('translate')('PRODUCT.CATEGORY_CUSTOM_NAME');\n    const DEFAULT_CATEGORY_SIZE_NAME_LABEL = $filter('translate')('PRODUCT.CATEGORY_CUSTOM_NAME_SIZE');\n    const DEFAULT_CATEGORY_COLOR_NAME_LABEL = $filter('translate')('PRODUCT.CATEGORY_CUSTOM_NAME_COLOR');\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    $scope.variantsById = {};\n    $scope.ready = false; // used to avoid $digest() errors during the init fetching of data\n    $scope.firstOption = {\n      selectedCategories: [],\n      selectedVariants: [],\n      categoryName: \"\", // name for the option set\n      isCustomName: false,\n      searchText: \"\", // chips autocomplete text\n    };\n    $scope.secondOption = {\n      selectedCategories: [],\n      selectedVariants: [],\n      categoryName: \"\", // name for the option set\n      isCustomName: false,\n      searchText: \"\", // chips autocomplete text\n    };\n\n    $scope.loading = false;\n    $scope.variantAdded = false;\n    $scope.dirty = false;\n    $scope.swappingVariants = false;\n\n    // Methods\n    $scope.preSaveProductVariants = preSaveProductVariants;\n    $scope.cancelProductVariants = cancelProductVariants;\n    $scope.onVariantsUpdate = onVariantsUpdate;\n    $scope.querySearch = querySearch;\n    $scope.showAllVariants = showAllVariants;\n    $scope.getCategoryNameLabel = getCategoryNameLabel;\n    $scope.onCategoryNameUpdate = onCategoryNameUpdate;\n    $scope.showSwapCategoriesDialog = showSwapCategoriesDialog;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      $scope.firstOption.categoryName = $scope.product.color_category_name;\n      $scope.firstOption.isCustomName = $scope.product.is_color_category_name_custom;\n\n      $scope.secondOption.categoryName = $scope.product.size_category_name;\n      $scope.secondOption.isCustomName = $scope.product.is_size_category_name_custom;\n\n      if ($scope.product.product_variants && $scope.product.product_variants.length) {\n        var allVariantsIds = [];\n        $scope.product.product_variants.forEach(function (productVariant) {\n          if (productVariant.deleted) {\n            return\n          }\n\n          if (productVariant.color && allVariantsIds.indexOf(productVariant.color) === -1) allVariantsIds.push(productVariant.color);\n          if (productVariant.size && allVariantsIds.indexOf(productVariant.size) === -1) allVariantsIds.push(productVariant.size);\n        })\n\n        api.inventories.variants.list({\n          option: 'filter-id',\n          filter: allVariantsIds\n        }, function (results, fn, status) {\n          results.results && results.results.forEach(function (variant) {\n            $scope.variantsById[variant.id] = variant;\n          })\n\n          $scope.firstOption.selectedVariants = [];\n          $scope.secondOption.selectedVariants = [];\n\n          $scope.product.product_variants.forEach(function (productVariant) {\n            if (productVariant.deleted) {\n              return\n            }\n\n            var colorVariant = $scope.variantsById[productVariant.color];\n            if (colorVariant === undefined) {\n              return;\n            }\n            colorVariant.hasStock |= productVariant.total_stock > 0;\n            colorVariant.selected |= !productVariant.deleted;\n\n            if (!$scope.firstOption.selectedVariants.find(function (variant) {\n              return variant.id === colorVariant.id\n            })) {\n              $scope.firstOption.selectedVariants.push(colorVariant);\n            }\n\n            var sizeVariant = $scope.variantsById[productVariant.size];\n            if (sizeVariant === undefined) {\n              return;\n            }\n            sizeVariant.hasStock |= productVariant.total_stock > 0;\n            sizeVariant.selected |= !productVariant.deleted;\n\n            if (!$scope.secondOption.selectedVariants.find(function (variant) {\n              return variant.id === sizeVariant.id\n            })) {\n              $scope.secondOption.selectedVariants.push(sizeVariant);\n            }\n          });\n\n          computeSelectedCategories($scope.firstOption);\n          computeSelectedCategories($scope.secondOption);\n\n          $scope.ready = true;\n        })\n      } else {\n        $scope.ready = true;\n      }\n\n      if (!$scope.productHasBeenUpdatedListener) {\n        $scope.productHasBeenUpdatedListener = $rootScope.$on('onUpdateProductVariants', function () {\n          initialize();\n        });\n      }\n\n      if (!$scope.saveProductVariantsListener) {\n        $scope.saveProductVariantsListener = $scope.$on('saveProductVariants', function (event, data) {\n          saveProductVariants(data);\n        });\n      }\n\n      $scope.$on('$destroy', function () {\n        $scope.productHasBeenUpdatedListener();\n        $scope.saveProductVariantsListener();\n      });\n    }\n\n    function cancelProductVariants() {\n      if ($scope.cancelCallback)\n        $scope.cancelCallback();\n      initialize();\n      $scope.variantsForm.$setPristine();\n    }\n\n    function getCategory(option) {\n      if (option && option.selectedCategories && option.selectedCategories.length) {\n        return option.selectedCategories[0];\n      }\n    }\n\n    function getCategoryNameLabel(option) {\n      var isFirstOption = option == $scope.firstOption;\n      var isSecondOption = option == $scope.secondOption;\n      if (option && option.selectedVariants && option.selectedVariants.length) {\n        return option.selectedVariants[0].category.name;\n      } else if (isFirstOption) {\n        return DEFAULT_CATEGORY_COLOR_NAME_LABEL;\n      } else if (isSecondOption) {\n        return DEFAULT_CATEGORY_SIZE_NAME_LABEL;\n      }\n\n      return DEFAULT_CATEGORY_NAME_LABEL;\n    }\n\n    function getCategoryName(option) {\n      if (option.categoryName) return option.categoryName;\n      var isFirstOption = option == $scope.firstOption;\n      var placeholder = $filter('translate')(\"PRODUCT.\" + isFirstOption ? \"COLOR\" : \"SIZE\");\n\n      return option.selectedVariants.length ? option.selectedVariants[0].category.name : placeholder;\n    }\n\n    function preSaveProductVariants() {\n      if (!$scope.variantAdded) {\n        saveProductVariants({'generate_barcodes': false});\n        return;\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.GENERATE_BARCODES_TITLE'))\n        .htmlContent('<p class=\"w-400\">' + $filter('translate')('PRODUCT.GENERATE_BARCODES_MSG') + '</p>')\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.YES'))\n        .cancel($filter('translate')('GENERAL.NO'));\n\n      $mdDialog.show(confirm).then(function () {\n        saveProductVariants({'generate_barcodes': true});\n      }, function () {\n        saveProductVariants({'generate_barcodes': false});\n      });\n    }\n\n    function saveProductVariants(data) {\n\n      if ($scope.firstOption.selectedVariants.length ||\n        $scope.secondOption.selectedVariants.length) {\n        $scope.product.has_variants = true;\n      } else {\n        $scope.product.has_variants = false;\n      }\n\n      $scope.loading = true;\n\n      if ($scope.secondOption.categoryName === '') {\n        $scope.secondOption.categoryName = getCategoryName($scope.secondOption);\n        $scope.secondOption.isCustomName = false;\n      }\n\n      if ($scope.firstOption.categoryName === '') {\n        $scope.firstOption.categoryName = getCategoryName($scope.firstOption);\n        $scope.firstOption.isCustomName = false;\n      }\n\n      api.inventories.products.save(\n        {\n          id: $scope.product.id,\n          option: 'variants',\n          generate_barcodes: data ? data.generate_barcodes : false,\n\n          size_category_name: $scope.secondOption.categoryName,\n          size_variants: $scope.secondOption.selectedVariants,\n          is_size_category_name_custom: $scope.secondOption.isCustomName,\n          size_category_id: getCategory($scope.secondOption),\n\n          color_category_name: $scope.firstOption.categoryName,\n          color_variants: $scope.firstOption.selectedVariants,\n          is_color_category_name_custom: $scope.firstOption.isCustomName,\n          color_category_id: getCategory($scope.firstOption)\n        },\n        function (results, fn, status) {\n          $scope.loading = false;\n\n          if (angular.isDefined(results.product_variants)) {\n            $scope.variantAdded = false;\n            $scope.dirty = false;\n\n            $scope.product.product_variants = results.product_variants;\n            $scope.product.color_category_name = $scope.firstOption.categoryName;\n            $scope.product.size_category_name = $scope.secondOption.categoryName;\n            $rootScope.$broadcast('onUpdateSelectedVariants');\n            if (!$scope.hideToasts)\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.OK_SAVE_PRODUCT_VARIANTS')).position('top right'));\n          } else {\n            if (!$scope.hideToasts)\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_SAVE_PRODUCT_VARIANTS')).position('top right'));\n          }\n          if ($scope.saveCallback)\n            $scope.saveCallback();\n        }\n      );\n    }\n\n    function querySearch(option) {\n      var deferred = $q.defer();\n      option.searchText = option.searchText.substring(0, $scope.SEARCH_MAX_LENGTH);\n      api.inventories.variants.list({\n        option: 'filter-string',\n        filter: option.searchText\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var exclude = option === $scope.firstOption ? $scope.secondOption : $scope.firstOption;\n          var available = results.results.filter(function (variant) {\n            var categoryAlreadySelected = exclude.selectedCategories.find(function (categoryId) {\n              return categoryId === variant.category.id;\n            });\n\n            var variantAlreadySelected = option.selectedVariants.find(function (selectedVariant) {\n              return selectedVariant.id === variant.id;\n            });\n\n            return !categoryAlreadySelected && !variantAlreadySelected;\n          })\n\n          deferred.resolve(available);\n          return\n        }\n\n        deferred.resolve([]);\n        if (!$scope.hideToasts)\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      })\n\n      return deferred.promise;\n    }\n\n    function computeSelectedCategories(option) {\n      option.selectedCategories = [];\n      var categoriesIds = option.selectedVariants.map(function (variant) {\n        return variant.category.id;\n      })\n\n      option.selectedCategories = categoriesIds.filter(function (id, index, self) {\n        return self.indexOf(id) === index;\n      });\n    }\n\n    function onVariantsUpdate(option, chip, onDelete) {\n      $scope.dirty = true;\n      $scope.variantAdded |= !onDelete;\n\n      computeSelectedCategories(option);\n      if (!onDelete && !option.isCustomName) {\n        option.categoryName = chip.category.name;\n\n      }\n\n      var target = option == $scope.firstOption ? $scope.product.color_variants : $scope.product.size_variants;\n      if (onDelete && target.indexOf(chip.id) > -1) {\n        var index = target.indexOf(chip.id);\n        target.splice(index, 1);\n      } else if (target.indexOf(chip.id) === -1) {\n        target.push(chip.id);\n      }\n    }\n\n    function onCategoryNameUpdate(option) {\n      option.isCustomName = true;\n      $scope.dirty = true;\n      option.isCustomName = option.categoryName !== getCategoryNameLabel(option) || option.categoryName != '';\n    }\n\n    function showSwapCategoriesDialog() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.SWAP_CATEGORIES'))\n        .textContent($filter('translate')('PRODUCT.SWAP_CATEGORIES_MSG'))\n        .clickOutsideToClose(false)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.YES'))\n        .cancel($filter('translate')('GENERAL.NO'));\n\n      $mdDialog.show(confirm).then(function () {\n        swapCategories();\n      }, function () {\n        // No not remove\n      });\n    }\n\n    function swapCategories() {\n      $scope.swappingVariants = true;\n      api.inventories.products.update({\n        id: $scope.product.id,\n        option: 'swap-categories'\n      }, function (response, callback, status) {\n        $scope.swappingVariants = false;\n        $scope.product = response.product;\n        $rootScope.$broadcast('productUpdated', $scope.product);\n        initialize();\n      });\n    }\n\n    function showAllVariants(option) {\n      var exclude = option == $scope.firstOption ? $scope.secondOption : $scope.firstOption;\n\n      $mdDialog.show({\n        controller: 'VariantsSelectorDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/variants-selector/variants-selector-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          product: $scope.product,\n          selectedVariants: option.selectedVariants,\n          excludeCategories: exclude.selectedCategories,\n        }\n      }).then(\n        function (selectedVariants) {\n          selectedVariants.forEach(function (selectedVariant) {\n            if (!$scope.variantsById[selectedVariant.id]) {\n              $scope.variantsById[selectedVariant.id] = selectedVariant;\n            }\n          })\n\n          $scope.dirty = selectedVariants.length != option.selectedVariants.length ||\n            selectedVariants.some(function (newSelectedVariant) {\n              return !option.selectedVariants.some(function (alreadySelectedVariant) {\n                return alreadySelectedVariant.id !== newSelectedVariant.id;\n              });\n            });\n\n          option.selectedVariants = selectedVariants;\n          computeSelectedCategories(option);\n\n          var selectedIds = selectedVariants.map(function (variant) {\n            return variant.id;\n          })\n\n          if (option == $scope.firstOption) {\n            $scope.product.color_variants = selectedIds;\n          } else {\n            $scope.product.size_variants = selectedIds;\n          }\n\n        }, function () {\n          // Nothing to do\n        });\n    }\n  }\n\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('NdProductAutocompleteController', NdProductAutocompleteController)\n    .directive('ndProductAutocomplete', ndProductAutocomplete);\n\n  /** @ngInject */\n  function ndProductAutocomplete()\n  {\n    return {\n      restrict   : 'E',\n      scope      : {\n        placeholder: '=?',// input's placeholder\n        callback: '&',    // Functions that it's executed when the product is selected\n        collection: '=?',\n        brand: '=?',\n        disabled: '=',\n        category: '=?',\n        season: '=?',\n        type: '=?',\n        manageUids: '=?',\n        manageLots: '=?'\n      },\n      controller : 'NdProductAutocompleteController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-product-autocomplete/nd-product-autocomplete.html',\n      link : function (scope, element, attrs)\n      {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function NdProductAutocompleteController($scope, $rootScope, $q, api, HTTP_STATUS, SEARCH_MAX_LENGTH, DTO_ORDER_TYPES)\n  {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    // Data\n    vm.placeholder = $scope.placeholder;\n    vm.collection = $scope.collection;\n    vm.brand = $scope.brand;\n    vm.category = $scope.category;\n    vm.subcategory = $scope.subcategory;\n    vm.season = $scope.season;\n    vm.selectedItem = null;\n    vm.productSearchText = null;\n    vm.type = $scope.type;\n    vm.manageUids = angular.isDefined($scope.manageUids) ? $scope.manageUids : null;\n    vm.manageLots = angular.isDefined($scope.manageLots) ? $scope.manageLots : null;\n\n    // Methods\n    vm.productsQuerySearch = productsQuerySearch;\n    vm.selectedProductChange = selectedProductChange;\n    vm.setFocus = setFocus;\n    vm.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n\n    // Functions\n    function productsQuerySearch() {\n      var deferred = $q.defer();\n      vm.productSearchText = vm.productSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      var data = {\n          serializer: 'ProductAutocomplete',\n          search: vm.productSearchText\n      };\n      // Params are used to pass filters, f.e. to get only the collection products\n      if(vm.collection){\n        data.collection = vm.collection;\n      }\n      if(vm.brand){\n        data.brand = vm.brand;\n      }\n      if(vm.category){\n        data.category = vm.category;\n        if(vm.subcategory){\n          data.subcategory = vm.subcategory;\n        }\n      }\n      if(vm.season){\n        data.season = vm.season;\n      }\n\n      if (vm.type === DTO_ORDER_TYPES.PURCHASE_ORDER || vm.type === DTO_ORDER_TYPES.TRANSFER_ORDER) {\n        data.hide_bundles = true;\n      }\n\n      if (vm.manageUids !== null) {\n        data.manage_uids = vm.manageUids;\n      }\n\n      if (vm.manageLots !== null) {\n        data.manage_lots = vm.manageLots;\n      }\n\n      api.inventories.products.get(\n        data,\n        function (results, fn, status) {\n          if (status == HTTP_STATUS.HTTP_200_OK) {\n            deferred.resolve(results.results);\n          }\n          else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectedProductChange(product) {\n      if (product && $scope.callback) {\n        $scope.callback({product: product});\n        vm.productSearchText = null;\n        vm.selectedItem = null;\n      }\n    }\n\n    function setFocus(){\n      document.getElementsByTagName('nd-product-autocomplete')[0].getElementsByTagName('input')[0].focus();\n    }\n\n    function setNdBarcodeListenerEnabled(value) {\n      $rootScope.ndBarcodeListenerEnabled = value;\n    }\n  }\n\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndOrderProductController', ndOrderProductController)\n    .directive('ndOrderProduct', ndOrderProduct);\n\n  /** @ngInject */\n  function ndOrderProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        orderType: '=?',\n        onSave: '=',\n        deleteOrderProduct: '=',\n        validateOrderProduct: '=',\n        editable: '=',\n        changed: '=?',\n        showPrices: '=?',\n        sourceWarehouse: '=?',\n        targetWarehouse: '=?',\n        updateAmountPermission: '=?', // permission to allow edit amounts\n        deletePermission: '=?'        // permission to show 'Delete' button\n      },\n      controller: 'ndOrderProductController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-order-product/nd-order-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndOrderProductController($scope, $filter, Session, api) {\n\n    // Data\n    //$scope.orderProduct;\n    $scope.session = Session;\n    $scope.saveOrderProductVariant = saveOrderProductVariant;\n    $scope.deleteOrderProductWrapper = deleteOrderProductWrapper;\n    $scope.validateOrderProductWrapper = validateOrderProductWrapper;\n    $scope.onChange = onChange;\n    $scope.calculateTotalBySecondaryVariant = calculateTotalBySecondaryVariant;\n    $scope.changePurchaseOrderProductDate = changePurchaseOrderProductDate;\n    $scope.colorsWithAmount = 0;\n\n    $scope.totalAmountFilter = function (item) {\n      return item.totalAmount > 0 || $scope.editable;\n    };\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      if(angular.isUndefined($scope.editable)){\n        $scope.editable = false;\n        //$scope.status = {editable: true}\n      }else{\n        //$scope.status = {editable: $scope.editable}\n      }\n      renderTable();\n    }\n\n    function onChange(){\n      $scope.changed = true;\n    }\n\n    function changePurchaseOrderProductDate(orderProduct){\n      api.inventories.purchaseOrderProducts.update({\n        id: orderProduct.id,\n        start_date: orderProduct.start_date.getTime()\n      },function(response, callback, status){\n\n      })\n    }\n\n    function validateOrderProductWrapper(orderProduct){\n      if(angular.isDefined($scope.validateOrderProduct)){\n        $scope.validateOrderProduct(orderProduct);\n      }\n    }\n\n    function saveOrderProductVariant(orderProductVariant, variants, secondaryVariantAndTotal){\n      $scope.changed = true;\n\n      // TODO: Fix this with the autodetection for barcode scanner\n      if(orderProductVariant.amount == null || String(orderProductVariant.amount).length > 6){\n        orderProductVariant.amount = 0;\n      }\n\n      // Recalculating the row total\n      var newTotal = calculateTotalBySecondaryVariant(secondaryVariantAndTotal.totalsBySecondaryVariant);\n      secondaryVariantAndTotal.totalAmount = newTotal.totalAmount;\n      secondaryVariantAndTotal.totalCost = newTotal.totalCost;\n\n\n      // Executing save function given by param\n      if(angular.isDefined($scope.onSave)){\n        // We pass the orderProduct to be able to add the new order product variant at order_product_variants array if the order product variant is new\n        orderProductVariant.orderProduct = $scope.orderProduct;\n        orderProductVariant.order_product = $scope.orderProduct.id;\n        $scope.onSave(orderProductVariant)\n      }\n    }\n\n    function deleteOrderProductWrapper(orderProduct){\n      if(angular.isDefined($scope.deleteOrderProduct)){\n        $scope.changed = true;\n        $scope.deleteOrderProduct(orderProduct);\n      }\n    }\n\n    function calculateTotalBySecondaryVariant(totalsBySecondaryVariant){\n      var total = 0;\n      var total_cost = 0;\n      for (var key in totalsBySecondaryVariant) {\n        if(totalsBySecondaryVariant[key].amount > 0){\n          total += totalsBySecondaryVariant[key].amount;\n          if(totalsBySecondaryVariant[key].price_excl_tax){\n            total_cost += totalsBySecondaryVariant[key].price_excl_tax * totalsBySecondaryVariant[key].amount;\n          }else{\n            total_cost += $scope.orderProduct.price_excl_tax * totalsBySecondaryVariant[key].amount;\n          }\n\n        }\n      }\n      return {\n        totalAmount:total,\n        totalCost:total_cost\n      }\n    }\n\n    function renderTable() {\n\n      console.time('--' + $scope.orderProduct.product_code + ' Render Table');\n\n      var orderProduct = $scope.orderProduct;\n\n      // Setting source and target warehouse stocks of this product\n      if(orderProduct.source_stocks){\n        orderProduct.sourceStockByProductVariantId = {};\n        orderProduct.source_stocks.map(function(stock){\n          orderProduct.sourceStockByProductVariantId[stock.product_variant] = stock.stock;\n        });\n      }\n\n      if(orderProduct.target_stocks){\n        orderProduct.targetStockByProductVariantId = {};\n        orderProduct.target_stocks.map(function(stock){\n          orderProduct.targetStockByProductVariantId[stock.product_variant] = stock.stock;\n        });\n      }\n\n      var total = 0;\n      // Used to draw the totals row\n      var totalsByMainVariant = {};\n      // Used to draw each line of the table\n      orderProduct.secondaryVariantsAndTotals = [];\n      // Used to fill the matrix\n      orderProduct.orderProductVariantByVariantsIds = {};\n      // Used to calculated the totals by color\n      orderProduct.orderProductVariantByVariantsIdsInverse = {};\n\n      var deprecated = false;\n      var deleted = false;\n\n      var oldSizesBId = {}\n      orderProduct.size_variants.map(function(size){\n        oldSizesBId[size.id] = true;\n      });\n      var oldColorsBId = {}\n      orderProduct.color_variants.map(function(color){\n        oldColorsBId[color.id] = true;\n      });\n\n      // To be able to show the prices for each product variant, used for sale orders\n      var productVariantPriceBySizeAndColor = null;\n      if(orderProduct.product_variant_prices && orderProduct.product_variant_prices.length){\n        var productVariantPriceBySizeAndColor = {};\n        orderProduct.product_variant_prices.forEach(function(productVariantPrice){\n          if (angular.isUndefined(productVariantPriceBySizeAndColor[productVariantPrice.size])){\n            productVariantPriceBySizeAndColor[productVariantPrice.size] = {};\n          }\n          productVariantPriceBySizeAndColor[productVariantPrice.size][productVariantPrice.color] = productVariantPrice;\n        });\n      }\n\n      // Initializing one empty order_product_variant for each product_variant\n      // If the product has not been deleted\n      if(orderProduct.product && orderProduct.product.product_variants){\n        orderProduct.product.product_variants.map(function(productVariant){\n\n          if (angular.isUndefined(orderProduct.orderProductVariantByVariantsIds[productVariant.size]))\n              orderProduct.orderProductVariantByVariantsIds[productVariant.size] = {};\n          if (angular.isUndefined(orderProduct.orderProductVariantByVariantsIdsInverse[productVariant.color]))\n              orderProduct.orderProductVariantByVariantsIdsInverse[productVariant.color] = {};\n\n          // There is a new product variant, not there when it was created\n          if(!oldColorsBId[productVariant.color] || !oldSizesBId[productVariant.size]){\n            orderProduct.need_update = true;\n          }\n\n          var price_excl_tax = null;\n          if (productVariantPriceBySizeAndColor &&\n            angular.isDefined(productVariantPriceBySizeAndColor[productVariant.size]) &&\n            angular.isDefined(productVariantPriceBySizeAndColor[productVariant.size][productVariant.color])){\n              price_excl_tax = parseFloat(angular.copy(productVariantPriceBySizeAndColor[productVariant.size][productVariant.color].price_excl_tax))\n          }\n\n          var tempOrderProductVariant = {\n            amount: 0,\n            product_variant: productVariant.id,\n            order_product: orderProduct.id,\n            color: angular.copy(productVariant.color),\n            size: angular.copy(productVariant.size),\n            price_excl_tax: price_excl_tax\n          };\n\n          orderProduct.orderProductVariantByVariantsIds[productVariant.size][productVariant.color] = tempOrderProductVariant;\n          orderProduct.orderProductVariantByVariantsIdsInverse[productVariant.color][productVariant.size] = tempOrderProductVariant;\n        });\n      }else{\n        deleted = true;\n        deprecated = true;\n      }\n\n      /*orderProduct.color_variants.forEach(function (color) {\n        orderProduct.size_variants.forEach(function (size) {\n\n          if (angular.isUndefined(orderProduct.orderProductVariantByVariantsIds[size.id]))\n              orderProduct.orderProductVariantByVariantsIds[size.id] = {};\n          if (angular.isUndefined(orderProduct.orderProductVariantByVariantsIdsInverse[color.id]))\n              orderProduct.orderProductVariantByVariantsIdsInverse[color.id] = {};\n\n          var tempOrderProductVariant = {\n            amount: 0,\n            product_variant: productVariant.id,\n            order_product: orderProduct.id,\n            color: angular.copy(productVariant.color),\n            size: angular.copy(productVariant.size)\n          };\n\n          orderProduct.orderProductVariantByVariantsIds[size.id][color.id] = tempOrderProductVariant;\n          orderProduct.orderProductVariantByVariantsIdsInverse[color.id][size.id] = tempOrderProductVariant;\n\n        });\n      });\n\n      var orderProductVariantByColorId = {};\n\n      orderProduct.order_product_variants.map(function (orderProductVariant) {\n        orderProductVariantByColorId[orderProductVariant.color] = orderProductVariant;\n      });*/\n\n      orderProduct.color_variants.forEach(function (color) {\n\n        orderProduct.order_product_variants.map(function (orderProductVariant) {\n\n          // Do it only when the variant is the secondary to avoid repeatitions\n          if(orderProductVariant.color == color.id){\n\n            // Set the price to a float type for the input number\n            if(orderProductVariant.price_excl_tax){\n              orderProductVariant.price_excl_tax = parseFloat(orderProductVariant.price_excl_tax);\n            }\n\n            // We create a table to index them from the variants to draw the matrix\n            if (angular.isUndefined(orderProduct.orderProductVariantByVariantsIds[orderProductVariant.size]))\n              orderProduct.orderProductVariantByVariantsIds[orderProductVariant.size] = {};\n            if (angular.isUndefined(orderProduct.orderProductVariantByVariantsIdsInverse[orderProductVariant.color]))\n              orderProduct.orderProductVariantByVariantsIdsInverse[orderProductVariant.color] = {};\n\n            // This two lines is to carry the \"removed\" from the initialization, to see if it is deprecated\n            if(angular.isUndefined(orderProduct.orderProductVariantByVariantsIds[orderProductVariant.size]) || angular.isUndefined(orderProduct.orderProductVariantByVariantsIds[orderProductVariant.size][orderProductVariant.color])){\n              orderProductVariant.removed = true;\n            }else{\n              orderProductVariant.removed = false;\n            }\n\n            orderProduct.orderProductVariantByVariantsIds[orderProductVariant.size][orderProductVariant.color] = orderProductVariant;\n            orderProduct.orderProductVariantByVariantsIdsInverse[orderProductVariant.color][orderProductVariant.size] = orderProductVariant;\n\n            /* Used in Purchases */\n            orderProductVariant.pending_to_receive_amount = orderProductVariant.amount - orderProductVariant.total_received_amount;\n\n            /* Used in Sales and Transfers */\n            orderProductVariant.pending_to_prepare_amount = orderProductVariant.amount - orderProductVariant.total_prepared_amount - orderProductVariant.total_shipped_amount - orderProductVariant.total_received_amount;\n\n            // Calculating totals\n            if (angular.isUndefined(totalsByMainVariant[orderProductVariant.size]))\n              totalsByMainVariant[orderProductVariant.size] = 0;\n            totalsByMainVariant[orderProductVariant.size] += orderProductVariant.amount;\n            total += orderProductVariant.amount;\n          }\n\n        });\n\n        var total = calculateTotalBySecondaryVariant(orderProduct.orderProductVariantByVariantsIdsInverse[color.id]);\n        orderProduct.secondaryVariantsAndTotals.push({\n          isTotal: false,\n          variant: color,\n          totalsBySecondaryVariant: orderProduct.orderProductVariantByVariantsIdsInverse[color.id],\n          totalAmount: total.totalAmount,\n          totalCost: total.totalCost,\n          deprecated: deprecated,\n          deleted: deleted\n        });\n\n        if(total.totalAmount > 0 || $scope.editable){\n          $scope.colorsWithAmount += 1;\n        }\n\n      });\n\n\n      // If there are only one color, we do not need the subtotal row\n      /*if(totalsByMainVariant.length > 1){\n        orderProduct.secondaryVariantsAndTotals.push({\n          isTotal: true,\n          totalsByMainVariant: totalsByMainVariant,\n          total: total\n        });\n      }*/\n\n      console.timeEnd('--' + $scope.orderProduct.product_code + ' Render Table');\n\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndOrderDeliveryProductController', ndOrderDeliveryProductController)\n    .directive('ndOrderDeliveryProduct', ndOrderDeliveryProduct);\n\n  /** @ngInject */\n  function ndOrderDeliveryProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        orderDeliveryProductVariants: '=',\n        orderType: '=',\n        status: '=',\n        updateAmountPermission: '=?',\n        onSave: '=?',\n      },\n      controller: 'ndOrderDeliveryProductController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-order-delivery-product/nd-order-delivery-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndOrderDeliveryProductController($scope, $filter, Session) {\n\n    // Data\n    $scope.orderDeliveryProductVariantsByColorAndSize = {};\n    $scope.saveOrderDeliveryProductVariant = saveOrderDeliveryProductVariant;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      $scope.orderProduct.order_product_variants.forEach(function(orderProductVariant){\n        if(angular.isUndefined($scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color])){\n          var pointer = {};\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color] = pointer;\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color].totals = function(){\n            var totals = {prepared_amount: 0, shipped_amount: 0, received_amount: 0};\n            for(var key in pointer){\n              if(key != 'totals' && angular.isDefined(pointer[key])){\n                totals['prepared_amount'] += pointer[key].prepared_amount;\n                totals['shipped_amount'] += pointer[key].shipped_amount;\n                totals['received_amount'] += pointer[key].received_amount;\n              }\n            }\n            return totals;\n          };\n        }\n\n        // Initializing the order delivery product variant in case to be null\n        if(angular.isUndefined($scope.orderDeliveryProductVariants[orderProductVariant.id])){\n          $scope.orderDeliveryProductVariants[orderProductVariant.id] = {\n            order_product: $scope.orderProduct.id,\n            order_delivery: null,\n            order_product_variant: orderProductVariant.id,\n            ordered_amount: orderProductVariant.amount,\n            prepared_amount: 0,\n            shipped_amount: 0,\n            received_amount: 0,\n            size_id: orderProductVariant.size,\n            color_id: orderProductVariant.color,\n            total_received_amount: 0\n          }\n        }\n\n        $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size] =\n          $scope.orderDeliveryProductVariants[orderProductVariant.id];\n        $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].ordered_amount = orderProductVariant.amount;\n        // For Purchases\n        if(angular.isDefined(orderProductVariant.total_received_amount)){\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].total_received_amount = orderProductVariant.total_received_amount;\n        }\n        // For Sales\n        if(angular.isDefined(orderProductVariant.total_prepared_amount)){\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].total_prepared_amount = orderProductVariant.total_prepared_amount;\n        }\n        if(angular.isDefined(orderProductVariant.total_shipped_amount)){\n          $scope.orderDeliveryProductVariantsByColorAndSize[orderProductVariant.color][orderProductVariant.size].total_shipped_amount = orderProductVariant.total_shipped_amount;\n        }\n      });\n\n      $scope.orderProduct.size_variants.forEach(function(sizeVariant){\n\n        $scope.orderProduct.color_variants.forEach(function(colorVariant){\n\n          if(angular.isUndefined($scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id])){\n            $scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id] = {};\n          }\n          if(angular.isUndefined($scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id][sizeVariant.id])){\n            $scope.orderDeliveryProductVariantsByColorAndSize[colorVariant.id][sizeVariant.id] = {\n              order_product: $scope.orderProduct.id,\n              order_delivery: null,\n              order_product_variant: null,\n              ordered_amount: 0,\n              prepared_amount: 0,\n              shipped_amount: 0,\n              received_amount: 0,\n              size_id: sizeVariant.id,\n              color_id: colorVariant.id,\n              total_received_amount: 0\n            };\n          }\n\n        });\n\n      });\n    }\n\n    function saveOrderDeliveryProductVariant(orderDeliveryProductVariant){\n      // Executing save function given by param\n      if(angular.isDefined($scope.onSave)){\n        $scope.onSave(orderDeliveryProductVariant)\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndCsvEcommerceController', ndCsvEcommerceController)\n    .directive('ndCsvEcommerce', ndCsvEcommerce);\n\n  /** @ngInject */\n  function ndCsvEcommerceController($rootScope,\n                                    $scope,\n                                    api,\n                                    $mdToast,\n                                    $filter,\n                                    HTTP_STATUS,\n                                    ECOMMERCE_PLATFORMS) {\n    // Data\n    var vm = $scope;\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n\n    $scope.rules = [];\n    $scope.backup = [];\n    $scope.saving = false;\n    $scope.required = ['STOCK', 'NAME', 'SKU'];\n    $scope.leafs = [];\n\n    // Methods\n    $scope.initMetadata = initMetadata;\n    $scope.getSelected = getSelected;\n    $scope.cancel = cancel;\n    $scope.save = save;\n    $scope.updateLeafs = updateLeafs;\n    $scope.checkLeafsStatus = checkLeafsStatus;\n    $scope.switchCollapsible = switchCollapsible;\n    $scope.clearMetadata = clearMetadata;\n\n    // Initialization\n    init();\n\n    // Functions\n    function init() {\n      api.ecommerce.sitesRules.get({\n        id: $scope.site,\n        option: $scope.path,\n      }, function (response, callback, status) {\n        if (status === 200) {\n          $scope.rules = response.rules;\n          $scope.backup = angular.copy(response.rules);\n          initMetadata($scope.rules);\n          updateLeafs();\n        }\n      });\n\n      $scope.saveEvent = $rootScope.$on('details::saveCsvConfig', function () {\n        save();\n      });\n\n      $scope.cancelEvent = $rootScope.$on('details::cancelCsvConfig', function () {\n        cancel();\n      });\n\n      $scope.resetHipercalzadosCsv = $rootScope.$on('details::resetHipercalzadosCsv', function () {\n        resetHipercalzadosCsv();\n      });\n\n      $scope.destroyEvent = $scope.$on('$destroy', function () {\n        $scope.saveEvent();\n        $scope.cancelEvent();\n        $scope.resetHipercalzadosCsv();\n        $scope.destroyEvent();\n      });\n    }\n\n    function initMetadata(rules) {\n      var hasSelected = false;\n\n      rules.forEach(function (rule) {\n        // as the name is the way to tranlate the rule, it must be always in uppercase\n        rule.name = rule.name.toUpperCase().replaceAll(' ', '_');\n\n        // BASE CASE: rule is leaf\n        if (rule.type.indexOf('node') == -1) {\n          rule['meta'] = {\n            required: $scope.required.indexOf(rule.name) > -1,\n            error: null,\n            collection: [],\n          }\n\n          rule.collection.forEach(function (col) {\n            rule.meta.collection.push(col.id);\n          });\n\n          hasSelected |= rule.selected;\n\n        } else if (rule.type == 'node' && rule.children) {\n          const selected = initMetadata(rule.children);\n          rule['meta'] = {\n            // if the node has any selected children then the whole rule must be visible\n            visible: selected,\n          }\n\n          hasSelected |= selected;\n\n        } else if (rule.type == 'node_all') {\n          rule['meta'] = {\n            visible: rule.collection.length > 0,\n            collectionById: {},\n          }\n\n          var selected = [];\n          var nameById = {};\n          rule.collection.forEach(function (col) {\n            selected.push(col.id);\n            nameById[col.id] = col.name;\n          })\n\n          rule.available_collection.forEach(function (col) {\n            rule.meta.collectionById[col.id] = {\n              selected: selected.indexOf(col.id) > -1,\n              custom_name: col.name != nameById[col.id] ? nameById[col.id] : null,\n              error: null,\n            }\n          });\n\n          hasSelected |= rule['meta'].visible;\n        }\n      });\n\n      return hasSelected;\n    }\n\n    function getSelected(rules) {\n      var selected = [];\n      rules.forEach(function (rule) {\n        // BASE CASE: rule is leaf\n        if (rule.type.indexOf('node') == -1) {\n          if (rule.selected) {\n            if (rule.available_collection.length) {\n              var collection = []\n              rule.available_collection.forEach(function (col) {\n                if (rule.meta.collection.indexOf(col.id) > -1) {\n                  collection.push(col);\n                }\n              })\n\n              rule.collection = collection;\n              if (rule.collection.length) {\n                selected.push(rule)\n              }\n            } else {\n              selected.push(rule);\n            }\n          }\n        } else if (rule.type == 'node') {\n          rule.children = $scope.getSelected(rule.children);\n          if (rule.children.length) {\n            selected.push(rule)\n          }\n        } else if (rule.type == \"node_all\") {\n          var collection = [];\n          rule.available_collection.forEach(function (col) {\n            var meta = rule.meta.collectionById[col.id];\n            if (meta.selected) {\n              collection.push({\n                id: col.id,\n                name: !!meta.custom_name ? meta.custom_name : col.name,\n              });\n            }\n          })\n\n          rule.collection = collection;\n          if (rule.collection.length) {\n            selected.push(rule)\n          }\n        }\n      })\n\n      return selected;\n    }\n\n    function clearMetadata(rules) {\n      if (rule.type.indexOf('node') == -1) {\n        delete rule['meta'];\n      } else if (rule.type == 'node') {\n\n      } else if (rule.type == \"node_all\") {\n\n      }\n    }\n\n    function cancel() {\n      $scope.rules = $scope.backup;\n    }\n\n    function save() {\n      var items = angular.copy($scope.rules);\n      items = $scope.getSelected(items);\n\n      api.ecommerce.sitesRules.save({\n        id: $scope.site,\n        option: $scope.path,\n        rules: items,\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      })\n    }\n\n    function checkLeafsStatus(rules) {\n      rules.forEach(function (rule) {\n        // BASE CASE: rule is leaf\n        if (rule.type !== 'node') {\n          if (rule.meta.required && !(rule.selected || rule.collection)) {\n            rule.meta.error = 'NOT_SELECTED';\n          } else {\n            rule.meta.error = null;\n          }\n        } else if (rule.children) {\n          checkLeafsStatus(rule.children);\n        }\n      })\n    }\n\n    function updateLeafs() {\n      var items = angular.copy($scope.rules);\n      items = getSelected(items);\n\n      // recursive search for leafs\n      function immersion(rules) {\n        var leafs = [];\n        rules.forEach(function (rule) {\n          // BASE CASE: rule is leaf\n          if (rule.type.indexOf('node') == -1) {\n            leafs.push(rule);\n          } else if (rule.type == 'node') {\n            var children = immersion(rule.children);\n            leafs = leafs.concat(children);\n          } else if (rule.type == 'node_all') {\n            rule.available_collection.forEach(function (col) {\n              var meta = rule.meta.collectionById[col.id];\n              if (meta.selected) {\n                leafs.push({\n                  name: !!meta.custom_name ? meta.custom_name : col.name,\n                  noTranslate: true,\n                });\n              }\n            })\n          }\n        })\n\n        return leafs;\n      }\n\n      $scope.leafs = immersion(items);\n      $scope.checkLeafsStatus($scope.rules);\n    }\n\n    function switchCollapsible(rule) {\n      rule['meta'].visible = !rule['meta'].visible;\n    }\n\n    function resetHipercalzadosCsv() {\n      api.ecommerce.sites.update(\n        {\n          id: $scope.site,\n          option: 'reset-csv-mapper'\n        },\n        function (response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            init();\n          }\n        });\n    }\n  }\n\n  /** @ngInject */\n  function ndCsvEcommerce() {\n    return {\n      restrict: 'E',\n      scope: {\n        site: '=',\n        path: '=',\n      },\n      controller: 'ndCsvEcommerceController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-csv-ecommerce/nd-csv-ecommerce.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndBundleContentVariantsController', ndBundleContentVariantsController)\n    .directive('ndBundleContentVariants', ndBundleContentVariants);\n\n\n  /** @ngInject */\n  function ndBundleContentVariants() {\n    return {\n      restrict: 'E',\n      scope: {\n        product: '=',\n        saveCallback: '&?',\n        isNew: '=?'\n      },\n      controller: 'ndBundleContentVariantsController',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-bundle-content-variants/nd-bundle-content-variants.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndBundleContentVariantsController($scope, $document, $mdDialog, api, $mdToast, $filter, HTTP_STATUS) {\n    var vm = this;\n    $scope.openProductSearchDialog = openProductSearchDialog;\n    $scope.getCover = getCover;\n    $scope.deleteBundleContentVariant = deleteBundleContentVariant;\n    $scope.initBundleContentVariantAmount = initBundleContentVariantAmount;\n    $scope.saveBundleContentVariant = saveBundleContentVariant;\n    $scope.changeVariants = changeVariants;\n    // Functions\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.initialize = initialize;\n\n    if (!$scope.saveBundleContentVariantsListener) {\n      $scope.saveBundleContentVariantsListener = $scope.$on('saveBundleContentVariants', function (event, data) {\n        saveBundleContentVariants(data);\n      });\n\n      $scope.$on('$destroy', function () {\n        $scope.saveBundleContentVariantsListener();\n      });\n    }\n\n    vm.initialize();\n\n    function initialize() {\n\n    }\n\n    function changeVariants(variant) {\n      // Opening dialog\n      $mdDialog.show({\n        controller: 'ProductVariantSelectorDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sell/dialogs/product-variant-selector-dialog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        multiple: false,\n        locals: {\n          product: {id: variant.product, name: variant.product_name},\n          warehouse: null,\n          inStock: null,\n          productVariant: false\n        }\n      }).then(function (result) {\n        if ($scope.isNew) {\n          updateVariant(variant, result.variant);\n        } else {\n          api.inventories.productVariantBundleProductVariant.save(\n            {\n              id: variant.id,\n              option: 'change-content-variant',\n              bundle_content_variant: result.variant.id\n            }, function (response, fn, status) {\n              updateVariant(variant, result.variant);\n            }, function (error) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          );\n        }\n      });\n    }\n\n    function updateVariant(variant, newVariant) {\n      variant.bundle_content_variant = newVariant.id;\n      variant.color_name = newVariant.color.name;\n      variant.size_name = newVariant.size.name;\n      variant.barcode = newVariant.barcode;\n      variant.sku = newVariant.sku;\n    }\n\n    function initBundleContentVariantAmount(bundleContentVariant) {\n      if (!bundleContentVariant.amount) {\n        bundleContentVariant.amount = 1;\n      }\n    }\n\n    function openProductSearchDialog(productVariant) {\n      $mdDialog.show({\n        controller: 'ProductVariantSelectorGridController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-variant-selector-grid/product-variant-selector-grid.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          selectedVariants: (productVariant.bundle_content_variants || []).map(\n            function (variant) {\n              return variant.bundle_content_variant;\n            }\n          )\n        }\n      }).then(function (result) {\n        result = result.filter(function (resultVariant) {\n          return !(productVariant.bundle_content_variants || []).some(function (bundle_variant) {\n            return bundle_variant.bundle_content_variant === resultVariant.id || bundle_variant.bundle_content_variant === resultVariant;\n          });\n        });\n        if (result.length > 0) {\n          productVariant.bundle_content_variants = (productVariant.bundle_content_variants || []).concat(\n            result.map(function (variant) {\n              var bundleContentVariant = {};\n              bundleContentVariant.bundle_content_variant = variant.id;\n              bundleContentVariant.amount = variant.amount ? variant.amount : 1;\n              bundleContentVariant.color_name = variant.color_name;\n              bundleContentVariant.size_name = variant.size_name;\n              bundleContentVariant.product_name = variant.product.name;\n              bundleContentVariant.product_code = variant.product.code;\n              bundleContentVariant.brand_name = variant.brand_name;\n              bundleContentVariant.cover_thumbnail = variant.product.cover_thumbnail;\n              bundleContentVariant.sku = variant.sku;\n              bundleContentVariant.barcode = variant.barcode;\n              bundleContentVariant.product = variant.product.id;\n              return bundleContentVariant;\n            }));\n          if (!$scope.isNew) {\n            saveBundleContentVariants(productVariant, {'generate_barcodes': false});\n          }\n        }\n      });\n    }\n\n    function saveBundleContentVariant(productVariant, bundleContentVariant) {\n      if ($scope.isNew) {\n        return\n      }\n      api.inventories.productBundles.save(\n        {\n          id: $scope.product.id,\n          product_variant_id: productVariant.id,\n          option: 'bundle-variants',\n          bundle_content_variants: [{\n            id: bundleContentVariant.bundle_content_variant,\n            amount: bundleContentVariant.amount\n          }]\n        }\n      );\n    }\n\n    function saveBundleContentVariants(productVariant, data) {\n      var bundle_data = productVariant.bundle_content_variants.map(function (variant) {\n        var bundleContentVariant = {};\n        bundleContentVariant.id = variant.bundle_content_variant;\n        bundleContentVariant.amount = variant.amount;\n        return bundleContentVariant;\n      });\n\n      api.inventories.productBundles.save(\n        {\n          id: $scope.product.id,\n          product_variant_id: productVariant.id,\n          option: 'bundle-variants',\n          generate_barcodes: data ? data.generate_barcodes : false,\n          bundle_content_variants: bundle_data\n        },\n        function (results, fn, status) {\n          if ($scope.saveCallback) {\n            $scope.saveCallback();\n          }\n        }\n      );\n\n    }\n\n    function deleteBundleContentVariant(productVariant, bundleContentVariant) {\n\n      var idx = productVariant.bundle_content_variants.indexOf(bundleContentVariant);\n      if ($scope.isNew) {\n        productVariant.bundle_content_variants.splice(idx, 1);\n        return;\n      } else {\n        var bundleVariantId = bundleContentVariant.id;\n        api.inventories.productBundles.save(\n          {\n            id: $scope.product.id,\n            product_variant_id: productVariant.id,\n            option: 'delete-bundle-variants',\n            bundle_content_variants: [\n              {\n                id: bundleVariantId\n              }\n            ]\n          },\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              productVariant.bundle_content_variants.splice(idx, 1);\n              $mdToast.show($mdToast.simple().textContent(\n                $filter('translate')('PRODUCT.VARIANT_DELETED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent(\n                $filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function getCover(bundleContentVariant) {\n      if (bundleContentVariant.cover_thumbnail) {\n        return bundleContentVariant.cover_thumbnail;\n      }\n      return '/assets/images/package-variant-closed.9c71cbbe.png';\n    }\n\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAttributesCardController', ndAttributesCardController)\n    .directive('ndAttributesCard', ndAttributesCard);\n\n  /** @ngInject */\n  function ndAttributesCard() {\n    return {\n      restrict: 'E',\n      replace: true,\n      scope: {\n        product: '=?', attributeCategories: '=?'\n      },\n      controller: 'ndAttributesCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-attributes-card/nd-attributes-card.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndAttributesCardController(\n    $q,\n    $scope,\n    $filter,\n    $mdToast,\n    $mdSelect,\n    $mdDialog,\n    api,\n    Session,\n    AttributeCategory,\n    Attribute,\n    AttributeCategoryValue,\n    HTTP_STATUS,\n    SEARCH_MAX_LENGTH,\n    DEFAULT_AUTOCOMPLETE_PAGE_SIZE\n  ) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.product = $scope.product;\n    vm.attributeCategories = [];\n    vm.attributeCategoriesAutocomplete = {\n      searchText: '', selectedItem: null\n    };\n\n    vm.attributeCategoryValues = [];\n    vm.taToolbar = [['p', 'bold', 'italics', 'ul', 'ol', 'html', 'insertLink']];\n\n    // Methods\n    vm.attributeCategoriesQuerySearch = attributeCategoriesQuerySearch;\n    vm.attributeQuerySearch = attributeQuerySearch;\n    vm.addAttributeCategory = addAttributeCategory;\n    vm.createAttributeCategory = createAttributeCategory;\n    vm.transformChip = transformChip;\n    vm.removeAttributeCategory = removeAttributeCategory;\n    vm.save = save;\n    vm.getAttributes = getAttributes;\n    vm.customOptionClickedBehaviour = customOptionClickedBehaviour;\n    vm.removeAttributeCategoryValue = removeAttributeCategoryValue;\n    vm.setCategoryAttributes = setCategoryAttributes;\n    vm.displayedInInputContainer = displayedInInputContainer;\n    vm.singleAttributeChanged = singleAttributeChanged;\n    vm.multipleAttributeChanged = multipleAttributeChanged;\n    vm.removeMultipleAttribute = removeMultipleAttribute;\n    vm.addMultipleAttribute = addMultipleAttribute;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      vm.productSavedEvent = $scope.$on('InventoryProductDetailsController::productUpdated', saveAttributeCategoryValues);\n      $scope.$on('$destroy', function() {\n        vm.productSavedEvent();\n      });\n\n      api.inventories.attributeCategoryValues.get({\n        product_id: vm.product.id\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          results.results.forEach(function(attributeCategoryValue) {\n            var acv = new AttributeCategoryValue(attributeCategoryValue);\n            if (acv.attribute_instances.length) {\n              acv.availableAttributes = angular.copy(acv.attribute_instances);\n            }\n            vm.attributeCategoryValues.push(acv);\n          });\n        }\n      });\n    }\n\n    function setCategoryAttributes() {\n      if (vm.waitingSetCategories) {\n        return;\n      }\n      api.inventories.products.save({\n        id: vm.product.id, option: 'set-category-attributes'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var acById = {};\n          vm.product.attribute_categories.forEach(function(acv) {\n            acById[acv.id] = true;\n          });\n          results.product.attribute_categories.forEach(function(attributeCategoryValue) {\n            if (!acById[attributeCategoryValue.id]) {\n              vm.attributeCategoryValues.push(new AttributeCategoryValue({\n                product: vm.product.id,\n                attributecategory: attributeCategoryValue.id,\n                attributecategory_instance: attributeCategoryValue\n              }));\n            }\n          });\n        }\n      });\n    }\n\n    function attributeCategoriesQuerySearch() {\n      var deferred = $q.defer();\n      vm.attributeCategoriesAutocomplete.searchText = vm.attributeCategoriesAutocomplete.searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.attributeCategories.get({\n        search: vm.attributeCategoriesAutocomplete.searchText,\n        page_size: DEFAULT_AUTOCOMPLETE_PAGE_SIZE\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var attributeCategories = results.results.map(function(ac) {\n            return new AttributeCategory(ac);\n          });\n          deferred.resolve(attributeCategories);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function addAttributeCategory(attributeCategory) {\n      if (attributeCategory) {\n        if (!$scope.attributeCategories.find(function(ac) {\n          return attributeCategory.id === ac.id;\n        })) {\n          vm.attributeCategoriesAutocomplete.searchText = '';\n          var attributeCategoryValue = new AttributeCategoryValue({\n            product: vm.product.id,\n            attributecategory: attributeCategory.id,\n            attributecategory_instance: attributeCategory\n          });\n          vm.attributeCategoryValues.push(attributeCategoryValue);\n\n          // to remove\n          var newAttributeCategory = new AttributeCategory(attributeCategory);\n          newAttributeCategory.attributeAutocomplete = {\n            searchText: '', selectedItem: null\n          };\n          $scope.attributeCategories.push(newAttributeCategory);\n        }\n      }\n    }\n\n    function createAttributeCategory(newAttributeCategory) {\n      $mdDialog.show({\n        controller: 'AttributeDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/attribute-dialog.html',\n        clickOutsideToClose: true,\n        locals: {\n          object: null, isAttributeCategory: true, attributeCategories: [], specificAttributeCategory: null\n        }\n      }).then(function(object) {\n        if (object && Session.hasPermission('inventory.configuration.attributes.update')) {\n          api.inventories.attributeCategories.save(object, function(result, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              addAttributeCategory(result);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n        }\n      }, function(error) {\n        // Do not remove\n      });\n    }\n\n    /**\n     * Return the proper object when the append is called.\n     */\n    function transformChip(chip, attributeCategory) {\n      // If it is an object, it's already a known chip\n      if (angular.isObject(chip)) {\n        return chip;\n      }\n      // Otherwise, create a new Attribute\n      return new Attribute({\n        name: chip, attribute_category: attributeCategory.id\n      });\n    }\n\n    function removeAttributeCategory(index) {\n      $scope.attributeCategories.splice(index, 1);\n    }\n\n    function removeMultipleAttribute(acv, index) {\n      acv.attributes.splice(index, 1);\n    }\n\n    function addMultipleAttribute(item) {\n      api.inventories.attributes.save(item, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          item = angular.extend(chip, new Attribute(results));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function save() {\n      var params = {\n        id: vm.product.id, option: 'assign-attributes', attribute_categories: $scope.attributeCategories\n      };\n      api.inventories.products.update(params, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function getAttributes(attributeCategoryValue) {\n      attributeCategoryValue.fetching = true;\n      var callback = function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          attributeCategoryValue.fetching = false;\n          attributeCategoryValue.availableAttributes = results.results;\n        }\n      };\n      return api.inventories.attributes.get({\n        attribute_category: attributeCategoryValue.attributecategory\n      }, callback);\n    }\n\n    function saveAttributeCategoryValues() {\n      if (vm.saving) {\n        return;\n      }\n      vm.saving = true;\n\n      api.inventories.attributeCategoryValues.save({\n        options: 'bulk-update', product_id: vm.product.id\n      }, vm.attributeCategoryValues, function(results, fn, status) {\n        vm.saving = false;\n      });\n    }\n\n    function customOptionClickedBehaviour(acv, attribute, event) {\n      if (acv.isSingleAttribute()) {\n        acv.attributes = [attribute.id];\n        event.stopPropagation();\n        $mdSelect.hide();\n      }\n    }\n\n    function removeAttributeCategoryValue(attributeCategoryValue, index) {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('CONFIGURATION.DELETE_ATTRIBUTE'))\n        .textContent($filter('translate')('CONFIGURATION.DELETE_ATTRIBUTE_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (attributeCategoryValue.id) {\n          api.inventories.attributeCategoryValues.delete({\n            'id': attributeCategoryValue.id\n          }, function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              vm.attributeCategoryValues.splice(index, 1);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n        } else {\n          vm.attributeCategoryValues.splice(index, 1);\n        }\n      }, function() {\n        // Cancel\n      });\n    }\n\n    function attributeQuerySearch(attributeCategoryValue) {\n      var deferred = $q.defer();\n      api.inventories.attributes.get(\n        {\n          search: attributeCategoryValue.attributeSearchText,\n          attribute_category: attributeCategoryValue.attributecategory,\n          page_size: DEFAULT_AUTOCOMPLETE_PAGE_SIZE\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        });\n      return deferred.promise;\n    }\n\n    function displayedInInputContainer(attributeCategoryValue) {\n      return attributeCategoryValue.isText() ||\n        attributeCategoryValue.isJson() ||\n        attributeCategoryValue.isInt() ||\n        attributeCategoryValue.isDecimal();\n    }\n\n    function singleAttributeChanged(item, acv) {\n      if (item) {\n        acv.attributes = [acv.singleAttributeInstance.id];\n      } else {\n        acv.attributes = [];\n      }\n    }\n\n    function multipleAttributeChanged(item, acv) {\n      if (item) {\n        acv.multipleAttributeInstances.push(item);\n        acv.attributeSearchText = '';\n        if (!acv.attributes) {\n          acv.attributes = [];\n        }\n        acv.attributes.push(item.id);\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAdjustmentOrderProductController', ndAdjustmentOrderProductController)\n    .directive('ndAdjustmentOrderProduct', ndAdjustmentOrderProduct);\n\n  /** @ngInject */\n  function ndAdjustmentOrderProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        orderProduct: '=',\n        onSave: '=',\n        deleteOrderProduct: '=',\n        validateOrderProduct: '=',\n        editable: '=',\n        changed: '=?',\n        sourceWarehouse: '=?',\n        updateAmountPermission: '=?', // permission to allow edit amounts\n        deletePermission: '=?'        // permission to show 'Delete' button\n      },\n      controller: 'ndAdjustmentOrderProductController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/product/directives/nd-adjustment-order-product/nd-adjustment-order-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndAdjustmentOrderProductController($scope, $filter, Session, api) {\n\n    // Data\n    $scope.orderProductVariantByColorAndSize = {};\n    $scope.session = Session;\n\n    // Methods\n    $scope.saveOrderProductVariant = saveOrderProductVariant;\n    $scope.deleteOrderProductWrapper = deleteOrderProductWrapper;\n    $scope.getTotalByColor = getTotalByColor;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      if (angular.isUndefined($scope.editable)) {\n        $scope.editable = false;\n      }\n\n      $scope.orderProduct.color_variants.forEach(function (color) {\n        $scope.orderProductVariantByColorAndSize[color.id] = {};\n        $scope.orderProduct.size_variants.forEach(function (size) {\n\n          $scope.orderProductVariantByColorAndSize[color.id][size.id] = {\n            amount: 0,\n            product_variant: null,\n            orderProduct: $scope.orderProduct,\n            color: color.id,\n            size: size.id\n          };\n          $scope.orderProductVariantByColorAndSize[color.id]['total'] = 0\n\n        });\n      });\n\n      $scope.orderProduct.order_product_variants.map(function (orderProductVariant) {\n        $scope.orderProductVariantByColorAndSize[orderProductVariant.color][orderProductVariant.size] = orderProductVariant;\n        //$scope.orderProductVariantByColorAndSize[orderProductVariant.color][orderProductVariant.size].id = orderProductVariant.id;\n        //$scope.orderProductVariantByColorAndSize[orderProductVariant.color][orderProductVariant.size].amount = orderProductVariant.amount;\n        $scope.orderProductVariantByColorAndSize[orderProductVariant.color]['total'] += orderProductVariant.amount;\n      });\n\n      if ($scope.orderProduct.source_stocks) {\n        $scope.sourceStockByColorAndSize = {};\n        $scope.orderProduct.source_stocks.map(function (stock) {\n          if (angular.isUndefined($scope.sourceStockByColorAndSize[stock.product_variant__color])) {\n            $scope.sourceStockByColorAndSize[stock.product_variant__color] = {};\n          }\n          $scope.sourceStockByColorAndSize[stock.product_variant__color][stock.product_variant__size] = stock.stock;\n        });\n      }\n    }\n\n    function getTotalByColor(orderProductVariantsBySize) {\n      var total = 0;\n      for (var key in orderProductVariantsBySize) {\n        if (key != 'total') {\n          total += orderProductVariantsBySize[key].amount;\n        }\n      }\n      return total;\n    }\n\n    function saveOrderProductVariant(orderProductVariant, colorId) {\n      $scope.changed = true;\n\n      // TODO: Fix this with the autodetection for barcode scanner\n      if (orderProductVariant.amount == null || String(orderProductVariant.amount).length > 6) {\n        orderProductVariant.amount = 0;\n      }\n\n      // Recalculating the row total\n      var newTotal = getTotalByColor($scope.orderProductVariantByColorAndSize[colorId]);\n      $scope.orderProductVariantByColorAndSize[colorId]['total'] = newTotal;\n\n      // Executing save function given by param\n      if (angular.isDefined($scope.onSave)) {\n        // We pass the orderProduct to be able to add the new order product variant at order_product_variants array if the order product variant is new\n        orderProductVariant.orderProduct = $scope.orderProduct;\n        $scope.onSave(orderProductVariant)\n      }\n    }\n\n    function deleteOrderProductWrapper(orderProduct) {\n      if (angular.isDefined($scope.deleteOrderProduct)) {\n        $scope.changed = true;\n        $scope.deleteOrderProduct(orderProduct);\n      }\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('VariantsSelectorDialogController', VariantsSelectorDialogController);\n\n  /** @ngInject */\n  function VariantsSelectorDialogController($scope, $mdDialog, $document, product, api, HTTP_STATUS, SEARCH_MAX_LENGTH,\n                                            selectedVariants, excludeCategories, Session, $mdToast) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.Session = Session;\n    vm.product = product;\n    vm.selectedVariantsIds = [];\n    vm.excludeCategories = excludeCategories;\n    vm.variantsByCategoryId = {};\n    vm.allCategories = [];\n    vm.categoriesById = {};\n    vm.selectFilter = \"\";\n    vm.selectedId = null;\n    vm.currentCategoryId = null;\n    vm.selectAll = {};\n    vm.variantsFilter = \"\";\n    vm.selectVariantsForm = null;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.createNewVariant = createNewVariant;\n    vm.onSelectorChange = onSelectorChange;\n    vm.isSelected = isSelected;\n    vm.selectSelectedVariants = selectSelectedVariants;\n\n    initialize();\n\n    function initialize() {\n      if (!vm.currentCategoryId && selectedVariants.length > 0) {\n        vm.currentCategoryId = selectedVariants[0].category.id;\n      }\n\n      api.inventories.variantCategories.list({\n        'serializer': 'variant_category_simple',\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.allCategories = results.results.filter(function (category) {\n            return vm.excludeCategories.indexOf(category.id) === -1;\n          });\n\n          vm.allCategories.forEach(function (category) {\n            vm.categoriesById[category.id] = category;\n            if (!vm.currentCategoryId) {\n              vm.currentCategoryId = category.id;\n            }\n          })\n          vm.selectSelectedVariants();\n\n          vm.onSelectorChange();\n        }\n      })\n    }\n\n    function selectSelectedVariants() {\n\n      vm.selectedVariantsIds = selectedVariants.map(function (variant) {\n\n        if (!vm.variantsByCategoryId[variant.category.id]) {\n          vm.variantsByCategoryId[variant.category.id] = [];\n        }\n\n        variant.selected = true;\n        vm.variantsByCategoryId[variant.category.id].push(variant);\n        return variant.id;\n\n      });\n    }\n\n    function isSelected(variant) {\n      return vm.selectAll[variant.category] || vm.selectedVariantsIds.indexOf(variant.id) > -1;\n    }\n\n    function createNewVariant(ev, type) {\n      var variantCategory = vm.categoriesById[vm.currentCategoryId];\n      var specificCategory = vm.categoriesById[vm.currentCategoryId]\n      specificCategory.fixed = true;\n\n      $mdDialog.show({\n        controller: 'VariantCategoryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        fullscreen: $scope.customFullscreen,\n        locals: {\n          specificCategory: specificCategory,\n        },\n        resolve: {\n          object: function () {\n            return {};\n          },\n          isCategory: function () {\n            return false;\n          },\n          categories: function () {\n            return null;\n          },\n          specificCategory: function () {\n            return variantCategory;\n          }\n        }\n      })\n        .then(function (object) {\n          // Save buton clicked\n          api.inventories.variants.save(\n            object,\n            function (results, callback, status) {\n              if (status === 201) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.VARIANT_CREATED')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n    }\n\n    function onSelectorChange() {\n      if (!vm.variantsByCategoryId[vm.currentCategoryId] || selectedVariants.includes(vm.variantsByCategoryId[vm.currentCategoryId][0])) {\n        if (!vm.variantsByCategoryId[vm.currentCategoryId]) {\n          vm.variantsByCategoryId[vm.currentCategoryId] = [];\n        }\n        api.inventories.variants.list({\n          'category_id': vm.currentCategoryId,\n        }, function (results, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            results.results.forEach(function callback(variant) {\n              if (!vm.selectedVariantsIds.includes(variant.id)) {\n                vm.variantsByCategoryId[vm.currentCategoryId].push(variant);\n              }\n\n            });\n          }\n        })\n      }\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      var selectedVariants = [];\n      for (var categoryId in vm.variantsByCategoryId) {\n        var selected = vm.variantsByCategoryId[categoryId].filter(function (variant) {\n          variant.category = vm.categoriesById[categoryId];\n          return variant.selected;\n        })\n\n        selectedVariants = selectedVariants.concat(selected);\n      }\n\n      $mdDialog.hide(selectedVariants);\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = \"\";\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('UidsSearchDialogController', UidsSearchDialogController);\n\n  /** @ngInject */\n  function UidsSearchDialogController($mdDialog,\n                                      $mdMedia,\n                                      $compile,\n                                      $mdToast,\n                                      HTTP_STATUS,\n                                      $state,\n                                      $filter,\n                                      $scope,\n                                      $document,\n                                      api,\n                                      Session,\n                                      $http,\n                                      UiGridService,\n                                      orderDeliveryProductVariant,\n                                      orderProductVariant,\n                                      allowCreate,\n                                      showAll,\n                                      warehouseId,\n                                      warehouseName,\n                                      operation,\n                                      productVariantId,\n                                      excludeUids,\n                                      initSearch,\n                                      UidStock,\n                                      manageLots,\n                                      manageUids,\n                                      product\n  ) {\n    var vm = this;\n\n    // Data\n    vm.orderDeliveryProductVariant = orderDeliveryProductVariant;\n    vm.orderProductVariant = orderProductVariant;\n    vm.totalSelected = 0;\n    vm.uidStocksById = {};\n    vm.saving = false;\n    vm.loading = false;\n    vm.warehouseId = warehouseId;\n    vm.warehouseName = warehouseName;\n    vm.manageLots = manageLots;\n    vm.manageUids = manageUids;\n    vm.product = product;\n    vm.productVariantId = productVariantId;\n    vm.uidToSearch = initSearch ? initSearch : '';\n    vm.url = api.urls.inventories.uidStocks.replace('/:id/', '');\n    vm.allowCreate = allowCreate ? allowCreate : false;\n    vm.showAll = showAll ? showAll : false;\n    vm.excludeUids = excludeUids ? excludeUids : [];\n    vm.statusFilter = 'available';\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // Grid Configuration\n    vm.gridApi = null;\n    vm.gridOptions = UiGridService.getGridOptions({\n      enableColumnMenus: false,\n      enablePaginationControls: true,\n      enableFooter: false,\n      paginationPageSize: 10,\n      paginationPageSizes: [10, 25, 50, 100],\n      useExternalPagination: true,\n      useExternalSorting: true,\n      onRegisterApi: initializeUidGrid\n    });\n\n    // Methods\n    vm.searchUID = searchUID;\n    vm.cancel = cancel;\n    vm.isSelected = isSelected;\n    vm.select = select;\n    vm.accept = accept;\n    vm.createUidStock = createUidStock;\n    vm.editUID = editUID;\n    vm.filterChanged = filterChanged;\n    vm.saveSelectedState = saveSelectedState;\n    vm.loadSelectedState = loadSelectedState;\n\n    function setNewUidStock() {\n      vm.newUidStock = {\n        uid: '',\n        amount: 1,\n        warehouse: vm.warehouseId,\n        product_variant: vm.productVariantId,\n        received: false\n      };\n    }\n\n    function filterChanged() {\n      getGridPage();\n    }\n\n    function saveSelectedState() {\n      if (vm.gridApi && vm.gridApi.grid) {\n        var columnState = vm.gridApi.grid.columns.map(function(column) {\n          return {\n            name: column.name,\n            visible: column.visible\n          };\n        });\n        localStorage.setItem('uidsSearchColumnState', JSON.stringify(columnState));\n      }\n    }\n\n    function loadSelectedState() {\n      var savedState = localStorage.getItem('uidsSearchColumnState');\n      if (savedState) {\n        try {\n          var columnState = JSON.parse(savedState);\n          return columnState;\n        } catch (e) {\n          return null;\n        }\n      }\n      return null;\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (sortColumns.length > 0) {\n          vm.status.ordering = sortColumns[0].sort.direction === 'desc' ? '-' + sortColumns[0].field : sortColumns[0].field;\n        } else {\n          vm.status.ordering = null;\n        }\n        getGridPage();\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        vm.status.pageNumber = newPage;\n        vm.status.pageSize = pageSize;\n        getGridPage();\n      });\n\n      // Añadir listener para cambios en la visibilidad de columnas\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(column) {\n        saveSelectedState();\n      });\n\n      setGridColumns();\n      getGridPage();\n    }\n\n    function setGridColumns() {\n      var columnState = loadSelectedState();\n\n      vm.gridOptions.columnDefs = [\n        {\n          name: 'select',\n          displayName: '',\n          width: 50,\n          enableSorting: false,\n          enableHiding: false, // No permitir ocultar la columna de selección\n          cellTemplate: '<md-checkbox class=\"m-0 ml-16\" ng-checked=\"grid.appScope.vm.isSelected(row.entity.id)\" ' +\n            'ng-click=\"grid.appScope.vm.select(row.entity.id)\"></md-checkbox>'\n        },\n        {\n          name: 'product_variant_name',\n          displayName: $filter('translate')('PRODUCT.PRODUCT_VARIANT'),\n          cellTemplate: '<div class=\"cell-middle \"><div>{{row.entity.product_variant_name}}</div></div>'\n        },\n        {\n          name: 'uid',\n          displayName: $filter('translate')('PRODUCT.UID'),\n          cellTemplate: '<div class=\"cell-middle \"><span class=\"uid-text\">{{row.entity.uid}}</span></div>'\n        },\n        {\n          name: 'amount',\n          displayName: $filter('translate')('PRODUCT.AMOUNT'),\n          cellTemplate: '<div><input ng-if=\"row.entity.manage_uids && row.entity.manage_lots\" type=\"number\" ng-model=\"row.entity.split_amount\" ' +\n            'min=\"0\" max=\"{{row.entity.amount}}\" class=\"text-right nd-input w-60\"><span ng-if=\"row.entity.manage_uids && row.entity.manage_lots\"> /</span> <span class=\"cell-middle pt-10\">{{row.entity.amount}}</span></div>'\n        },\n        {\n          name: 'expiration_date',\n          displayName: $filter('translate')('PRODUCT.EXPIRATION_DATE'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.expiration_date | date:\"dd/MM/yyyy HH:mm\"}}</div>'\n        },\n        {\n          name: 'stock_warehouse_name',\n          displayName: $filter('translate')('PRODUCT.WAREHOUSE'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.stock_warehouse_name}}</div>'\n        },\n        {\n          name: 'sale_order_delivery',\n          displayName: $filter('translate')('PRODUCT.SALE_ORDER'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.sale_order_delivery.autocode}}</div>'\n        },\n        {\n          name: 'purchase_order_delivery',\n          displayName: $filter('translate')('PRODUCT.PURCHASE_ORDER'),\n          cellTemplate: '<div class=\"cell-middle \">{{row.entity.purchase_order_delivery.autocode}}</div>'\n        }\n      ];\n\n      if (columnState) {\n        vm.gridOptions.columnDefs.forEach(function(column) {\n          var savedColumn = columnState.find(function(col) {\n            return col.name === column.name;\n          });\n          if (savedColumn) {\n            column.visible = savedColumn.visible;\n          }\n        });\n      }\n    }\n\n    function getGridPage() {\n      vm.loading = true;\n\n      var params = {\n        pagination: 'datatable',\n        status: vm.statusFilter,\n        page: vm.status.pageNumber,\n        length: vm.status.pageSize,\n        start: vm.status.pageSize * (vm.status.pageNumber - 1)\n      };\n\n      if (vm.uidToSearch) {\n        params['search[value]'] = vm.uidToSearch;\n      }\n\n      if (operation === 'prepare-sale') {\n        params.operation = 'prepare-sale';\n        params.product_variant_id = vm.productVariantId;\n        params.order_delivery_id = orderDeliveryProductVariant.order_delivery_id;\n        params.source_warehouse = vm.orderDeliveryProductVariant.source_warehouse;\n      } else if (operation === 'prepare-transfer') {\n        params.operation = 'prepare_transfer';\n        params.transfer_order_delivery_product_variant_to_prepare = orderDeliveryProductVariant.id;\n        params.order_delivery_id = orderDeliveryProductVariant.order_delivery_id;\n        params.product_variant_id = vm.productVariantId;\n        params.source_warehouse = vm.orderDeliveryProductVariant.source_warehouse;\n      } else if (operation === 'receive-transfer') {\n        params.transfer_order_product_variant_to_receive = orderDeliveryProductVariant.order_product_variant;\n      } else if (operation === 'stocktaking') {\n        params.stocktaking_order_product_variant = orderProductVariant.id;\n      } else if (operation === 'sale') {\n        params.source_warehouse = vm.orderDeliveryProductVariant.source_warehouse;\n        params.product_variant_id = vm.orderProductVariant.variant.id;\n      } else if (operation === 'prepare-purchase-order-delivery-devolution') {\n        params.product_variant_id = vm.productVariantId;\n        params.source_warehouse = vm.warehouseId;\n        params.add_uid_to_purchase_order_delivery_for_devolution = orderDeliveryProductVariant.id;\n      }\n\n      $http({\n        url: vm.url,\n        method: 'GET',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        params: params\n      }).then(function(response) {\n        vm.gridOptions.data = response.data.data;\n        vm.gridOptions.totalItems = response.data.recordsFiltered;\n        vm.loading = false;\n\n        // Actualizar el diccionario de UIDs seleccionados\n        response.data.data.forEach(function(item) {\n          vm.uidStocksById[item.id] = item;\n          vm.uidStocksById[item.id].split_amount = item.amount;\n        });\n      }).catch(function(error) {\n        vm.loading = false;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function createUidStock() {\n      if (!vm.allowCreate || vm.saving || (!vm.newUidStock.uid || !vm.newUidStock.amount || !vm.newUidStock.warehouse)) {\n        return;\n      }\n\n      vm.saving = true;\n      api.inventories.uidStocks.save(\n        vm.newUidStock,\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            getGridPage();\n            setNewUidStock();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ADDED_SUCCESSFULLY')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function searchUID() {\n      getGridPage();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      //TODO: maybe exclude uids before response data\n      if (!vm.excludeUids.includes(data.uid)) {\n        $compile(angular.element(row).contents())($scope);\n      } else {\n        vm.dtInstance.DataTable.row(row).remove();\n      }\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n      });\n      return nRow;\n    }\n\n    function isSelected(uidStockId) {\n      return vm.uidStocksById[uidStockId].selected;\n    }\n\n    function select(uidStockId) {\n      if (!vm.isSelected(uidStockId)) {\n        vm.uidStocksById[uidStockId].selected = !vm.uidStocksById[uidStockId].selected;\n        vm.totalSelected++;\n      } else {\n        vm.uidStocksById[uidStockId].selected = !vm.uidStocksById[uidStockId].selected;\n        vm.totalSelected--;\n      }\n    }\n\n    function editUID() {\n      var productVariants = null;\n      if (vm.product) {\n        productVariants = vm.product.product_variants.filter(function(product_variant) {\n          return product_variant.size === vm.orderProductVariant.size && product_variant.color === vm.orderProductVariant.color;\n        });\n      }\n      var orderProductVariant = null;\n      if (vm.orderProductVariant) {\n        orderProductVariant = vm.orderProductVariant;\n      } else {\n        orderProductVariant = vm.orderDeliveryProductVariant;\n      }\n\n\n      $mdDialog.show({\n        controller: 'EditUidDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-edit/edit-uid-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          uidStock: null,\n          manageLots: vm.manageLots,\n          warehouses: [\n            {\n              id: vm.warehouseId,\n              name: vm.warehouseName\n            }\n          ],\n          productVariants: [\n            {\n              id: vm.productVariantId !== null ? vm.productVariantId : productVariants[0].id,\n              deleted: false,\n              color_name: orderProductVariant.color_name,\n              size_name: orderProductVariant.size_name\n            }\n          ],\n          received: false,\n          hideNotes: true,\n          hideMovementReason: true,\n          disableWarehouseSelector: true,\n          disableVariantSelector: true,\n          createMovement: false\n        }\n      }).then(function(uidStock) {\n        getGridPage();\n      });\n    }\n\n    function accept() {\n      var selected = [];\n      for (var key in vm.uidStocksById) {\n        if (vm.uidStocksById[key].selected) {\n          selected.push(\n            {\n              'id': vm.uidStocksById[key].id,\n              'uid': vm.uidStocksById[key].uid,\n              'split_amount': vm.uidStocksById[key].split_amount\n            });\n        }\n      }\n      $mdDialog.hide(selected);\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('EditUidDialogController', EditUidDialogController);\n\n  /** @ngInject */\n  function EditUidDialogController($scope,\n                                   $mdDialog,\n                                   $mdToast,\n                                   $filter,\n                                   uidStock,\n                                   $document,\n                                   Session,\n                                   api,\n                                   UidStock,\n                                   HTTP_STATUS,\n                                   manageLots,\n                                   warehouses,\n                                   SEARCH_MAX_LENGTH,\n                                   STOCK_MOVEMENT_REASONS,\n                                   productVariants,\n                                   received,\n                                   hideNotes,\n                                   hideMovementReason,\n                                   disableWarehouseSelector,\n                                   disableVariantSelector,\n                                   createMovement\n  ) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.STOCK_MOVEMENT_REASONS = STOCK_MOVEMENT_REASONS;\n\n    // Methods\n    vm.closeDialog = closeDialog;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.isEditMode = isEditMode;\n    vm.warehouseIsDisabled = warehouseIsDisabled;\n    vm.productVariantIsDisabled = productVariantIsDisabled;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.disableSavingButton = disableSavingButton;\n    vm.saving = false;\n\n    // Data\n\n    vm.uidStock = uidStock ? uidStock : new UidStock();\n    vm.warehouses = warehouses;\n    vm.productVariants = productVariants;\n    vm.manageLots = manageLots;\n    vm.hideNotes = hideNotes;\n    vm.hideMovementReason = hideMovementReason;\n    vm.disableWarehouseSelector = disableWarehouseSelector;\n    vm.disableVariantSelector = disableVariantSelector;\n    vm.createMovement = createMovement;\n    vm.amountChanged = false;\n    vm.warehouseSearchText = '';\n    vm.movements = [\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_TESTER,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_COURSE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_INTERNAL_USE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_LOSS,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ADJUSTMENT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_PRESS_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OWNER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OTHER\n    ];\n\n    //Functions\n    init();\n\n    function init() {\n      if (vm.warehouses.length === 1) {\n        vm.disableWarehouseSelector = true;\n        vm.uidStock.warehouse = vm.warehouses[0].id;\n      }\n      if (vm.productVariants.length === 1) {\n        vm.disableVariantSelector = true;\n        vm.uidStock.product_variant = vm.productVariants[0].id;\n      }\n      vm.uidStock.received = received;\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      vm.warehouseSearchText = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function disableSavingButton() {\n      if (vm.uidStock.id) {\n        return !vm.amountChanged;\n      }\n      return false;\n    }\n\n    function closeDialog(uidStockId) {\n      $mdDialog.hide(uidStockId);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function warehouseIsDisabled() {\n      return isEditMode() || vm.disableWarehouseSelector;\n    }\n\n    function productVariantIsDisabled() {\n      return isEditMode() || vm.disableVariantSelector;\n    }\n\n    function isEditMode() {\n      return vm.uidStock.id != null;\n    }\n\n    function save() {\n      if (vm.saving) {\n        return;\n      }\n\n      if (!$scope.editUidForm.$valid) {\n        return;\n      }\n      vm.saving = true;\n      if (vm.uidStock.id) {\n        if (Session.hasPermission('inventory.products.product.uid_stocks.update')) {\n          api.inventories.uidStocks.save(\n            {\n              option: 'edit-uid-stock',\n              id: vm.uidStock.id,\n              amount: vm.uidStock.amount,\n              reason: vm.uidStock.reason,\n              notes: vm.uidStock.notes\n            },\n            function(response, fn, status) {\n              vm.saving = false;\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                closeDialog();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        }\n      } else {\n        if (Session.hasPermission('inventory.products.product.uid_stocks.create')) {\n          if (vm.createMovement === false) {\n            vm.uidStock['create_movement'] = false;\n          }\n\n          api.inventories.uidStocks.save(\n            vm.uidStock,\n            function(response, fn, status) {\n              vm.saving = false;\n              if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                closeDialog(response);\n              } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n                var errorMessage = 'ERRORS.' + response.error;\n                $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage)).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        }\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('UidsAddDialogController', UidsAddDialogController);\n\n  /** @ngInject */\n  function UidsAddDialogController($mdDialog,\n                                   $mdMedia,\n                                   $compile,\n                                   $state,\n                                   $mdToast,\n                                   $filter,\n                                   $scope,\n                                   api,\n                                   Session,\n                                   DTColumnBuilder,\n                                   orderDeliveryProductVariant,\n                                   warehouseId,\n                                   productVariantId) {\n\n    // Data\n    var vm = this;\n    vm.orderDeliveryProductVariant = orderDeliveryProductVariant;\n\n    vm.uidStocksById = {};\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.uidStocks.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.purchase_order_delivery_product_variant = vm.orderDeliveryProductVariant.id;\n          d.purchase_order_delivery = vm.orderDeliveryProductVariant.order_delivery;\n          d.order_product_variant = vm.orderDeliveryProductVariant.order_product_variant;\n          d.order_product = vm.orderDeliveryProductVariant.order_product;\n          d.size_id = vm.orderDeliveryProductVariant.size_id;\n          d.color_id = vm.orderDeliveryProductVariant.color_id;\n        }\n      },\n      order: [[1, 'desc']],\n      rowId: 'id',\n      //autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      // initComplete: initComplete,\n      dom: $mdMedia('gt-sm') ? 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>' : 'rt<\"bottom\"<\"left\"<\"info\"i>><\"right\"<\"pagination\"p>>>',\n      pagingType: $mdMedia('gt-sm') ? 'full_numbers' : 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('last_update').notVisible(),\n      DTColumnBuilder.newColumn('uid').withTitle($filter('translate')('PRODUCT.UID')).withClass('')\n        .renderWith(function (data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('PRODUCT.AMOUNT')).withClass('')\n        .renderWith(function (data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('expiration_date').withTitle($filter('translate')('PRODUCT.EXPIRATION_DATE')).withClass('')\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return $filter('date')(data, 'dd/MM/yyyy HH:mm');\n          } else {\n            return '';\n          }\n        }),\n    ];\n\n    vm.newUidStock = {\n      uid: '',\n      amount: 1,\n      warehouse: warehouseId,\n      product_variant: productVariantId,\n      order_product_variant: vm.orderDeliveryProductVariant.order_product_variant,\n      purchase_order_delivery: vm.orderDeliveryProductVariant.order_delivery,\n      purchase_order_delivery_product_variant: vm.orderDeliveryProductVariant.id,\n      received: false\n    };\n\n    // Methods\n    vm.cancel = cancel;\n    vm.selectOption = selectOption;\n    vm.isSelected = isSelected;\n    vm.select = select;\n    vm.accept = accept;\n    vm.cancel = cancel;\n    vm.addUidStock = addUidStock;\n    vm.uidListenerCallback = uidListenerCallback;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function selectOption(option) {\n      $mdDialog.hide(option);\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n\n      });\n      return nRow;\n    }\n\n    function isSelected(uidStockId) {\n      return vm.uidStocksById[uidStockId].sale_order_delivery_product_variant == vm.orderDeliveryProductVariant.id;\n    }\n\n    function addUidStock() {\n      if (vm.saving || (!vm.newUidStock.uid || !vm.newUidStock.amount || !vm.newUidStock.warehouse)) {\n        return;\n      }\n\n      vm.saving = true;\n      vm.newUidStock.expirationDate = Date(vm.newUidStock.expirationDate);\n      vm.newUidStock.option = 'add-to-purchase';\n\n      // At first time, the id comes late, after create it but is not blocking, see delivery.controller.js line 332\n      vm.newUidStock.purchase_order_delivery_product_variant = vm.orderDeliveryProductVariant.id;\n      vm.newUidStock.purchase_order_delivery = vm.orderDeliveryProductVariant.order_delivery;\n\n      api.inventories.uidStocks.save(\n        vm.newUidStock,\n        function (response, callback, status) {\n          if (status === 201) {\n            vm.dtInstance.DataTable.draw();\n            vm.newUidStock = response;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ADDED_SUCCESSFULLY')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      )\n    }\n\n    function select(uidStockId) {\n\n      if (!vm.uidStocksById[uidStockId].sale_order_delivery_product_variant) {\n        vm.uidStocksById[uidStockId].sale_order_delivery_product_variant = vm.orderDeliveryProductVariant.id;\n      } else {\n        vm.uidStocksById[uidStockId].sale_order_delivery_product_variant = null;\n        vm.uidStocksById[uidStockId].sale_order_delivery_autocode = '';\n      }\n\n      api.inventories.uidStocks.update(\n        vm.uidStocksById[uidStockId],\n        function (response, callback, status) {\n          if (status === 200) {\n            vm.uidStocksById[uidStockId].sale_order_delivery_autocode = response.sale_order_delivery_autocode;\n            vm.uidStocksById[uidStockId].sale_order_delivery_product_variant = response.sale_order_delivery_product_variant;\n          }\n        }\n      );\n    }\n\n    function accept() {\n      $mdDialog.hide();\n    }\n\n    function uidListenerCallback(uid) {\n      if (uid && !vm.newUidStock.uid) {\n        vm.newUidStock.uid = uid;\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ResurrectUidDialogController', ResurrectUidDialogController);\n\n  /** @ngInject */\n  function ResurrectUidDialogController($mdDialog,\n                                        $mdMedia,\n                                        $compile,\n                                        $state,\n                                        $mdToast,\n                                        $filter,\n                                        $scope,\n                                        api,\n                                        Session,\n                                        uidID,\n                                        HTTP_STATUS,\n                                        ERROR_CODES\n  ) {\n\n    // Data\n    var vm = this;\n\n    // Methods\n    vm.initialize = initialize;\n    vm.accept = accept;\n    vm.cancel = cancel;\n    vm.validForm = validForm;\n\n    vm.uidID = uidID;\n    vm.uid = null;\n    vm.warehouses = [];\n    vm.selectedWarehouse = null;\n\n    vm.initialize();\n\n    function initialize() {\n      api.inventories.uidStocks.get(\n        {\n          id: vm.uidID,\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.uid = response;\n            vm.selectedWarehouse = vm.uid.stock_warehouse_id;\n          }\n          else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n\n      api.inventories.warehouses.list(\n        {}, function(results, fn, status){\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.warehouses = results.results;\n          }\n        }\n      );\n    }\n\n    // Functions\n    function validForm() {\n      return vm.uid && (!vm.uid.stock && vm.selectedWarehouse || vm.uid.stock);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function accept() {\n      api.inventories.uidStocks.save(\n        {\n          id: vm.uidID,\n          warehouse_id: vm.selectedWarehouse ? vm.selectedWarehouse : null,\n          option: 'resurrect'\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog.hide();\n            showAddReasonToast(response, $filter('translate')('PRODUCT.STOCK_SAVED'));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            var errorMessage = 'GENERAL.ERROR_TOAST';\n            if (response.error === ERROR_CODES.ERROR_04027_UDI_ALREADY_ALIVE) {\n              errorMessage = 'PRODUCT.UID_ALREADY_ALIVE';\n            } else if (response.error === ERROR_CODES.ERROR_04028_UDI_WITH_NO_STOCK_INSTANCE) {\n              errorMessage = 'PRODUCT.UID_WITH_NO_STOCK';\n            }\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')(errorMessage))\n                .position('top right')\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function showAddReasonToast(movement, message) {\n      $mdToast\n        .show($mdToast.simple()\n          .textContent(message)\n          .action($filter('translate')('MOVEMENTS.ADD_REASON'))\n          .highlightAction(true)\n          .hideDelay(5000)\n          .position('top right'))\n        .then(function(response) {\n          if (response === 'ok') {\n            $mdDialog.show({\n              controller: 'StockMovementDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/inventory/views/product/dialogs/stock-movement/stock-movement.html',\n              clickOutsideToClose: true,\n              multiple: true,\n              locals: {\n                movement: movement,\n                readonly: false,\n                callback: function(movement) {\n                  api.inventories.stockMovements.update(\n                    movement, function(response) {\n                      $mdToast\n                        .show($mdToast.simple()\n                          .textContent($filter('translate')('PRODUCT.STOCK_SAVED'))\n                          .position('top right'));\n                    });\n                }\n              }\n            });\n          }\n        });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('UidMovementsDialogController', UidMovementsDialogController);\n\n  /** @ngInject */\n  function UidMovementsDialogController($mdDialog,\n                                        $mdToast,\n                                        $filter,\n                                        $scope,\n                                        Session,\n                                        HTTP_STATUS,\n                                        api,\n                                        UIDId,\n                                        product,\n                                        $timeout,\n                                        STOCK_MOVEMENT_TYPES,\n                                        STOCK_MOVEMENT_REASONS,\n                                        STOCK_MOVEMENT_AUTOCODE_DICT,\n                                        UiGridService\n  ) {\n\n    // Data\n    var vm = this;\n    vm.stock_movement_types = STOCK_MOVEMENT_TYPES;\n    vm.stock_movement_reasons = STOCK_MOVEMENT_REASONS;\n    vm.stock_movement_autocode_dict = STOCK_MOVEMENT_AUTOCODE_DICT;\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.product = product;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableRowHeaderSelection: false,\n      saveSelection: true\n    });\n\n    // Methods\n    vm.cancel = cancel;\n    vm.accept = accept;\n    vm.editMovement = editMovement;\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        saveGridState();\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n\n        if (vm.uiGridInitialized) {\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridProductsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridProductsPage();\n        }\n      });\n\n      setGridColumns();\n\n\n      $timeout(function() {\n        getGridProductsPage();\n      }, 200);\n    }\n\n    function saveGridState() {\n      if (!vm.gridApi) {\n        return;\n      }\n\n      var columnsState = {};\n      vm.gridApi.grid.columns.forEach(function(column) {\n        columnsState[column.field] = {\n          visible: column.visible,\n          width: column.width,\n          sort: column.sort,\n          pinned: column.pinned\n        };\n      });\n\n      localStorage.setItem(Session.company.id + '::uidMovementsGridColumns', JSON.stringify(columnsState));\n    }\n\n    // Functions\n    function setGridColumns(avoidState) {\n      var savedState = localStorage.getItem(Session.company.id + '::uidMovementsGridColumns');\n      var columnsState = savedState ? JSON.parse(savedState) : {};\n\n      function getColumnVisibility(field) {\n        if (columnsState[field] && columnsState[field].visible !== undefined) {\n          return columnsState[field].visible;\n        }\n        return true;\n      }\n\n      angular.extend(vm.columns, {\n        datetime: {\n          displayName: $filter('translate')('PRODUCT.DATE'),\n          field: 'datetime',\n          permission: true,\n          visible: getColumnVisibility('datetime'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.datetime | date: \"dd/MM/yyyy HH:mm\"}}</div>'\n        },\n        autocode: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'autocode',\n          permission: true,\n          visible: getColumnVisibility('autocode'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==grid.appScope.vm.stock_movement_autocode_dict[\\'NOT_AVAILABLE\\']\" class=\"cell-middle secondary-text\" translate=\"PRODUCT.STOCK_MOVEMENT_NOT_AVAILABLE\"></div>' +\n            '<div ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==grid.appScope.vm.stock_movement_autocode_dict[\\'REMOVED\\']\" class=\"cell-middle secondary-text\" translate=\"PRODUCT.STOCK_MOVEMENT_REMOVED\"></div>' +\n            '<a class=\"cell-middle\" ui-sref=\"app.inventory.stocktakings.stocktaking.products({id:row.entity.object_id})\" ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==grid.appScope.vm.stock_movement_autocode_dict[\\'STOCKTAKING\\'] && row.entity.object_id\" translate=\"STOCKTAKING.STOCKTAKING\"></a>' +\n            '<div class=\"cell-middle\" ng-if=\"grid.appScope.vm.stock_movement_autocode_dict[row.entity.autocode]==null\">{{row.entity.autocode}}</div>'\n        },\n        type: {\n          displayName: $filter('translate')('PRODUCT.TYPE'),\n          field: 'type',\n          permission: true,\n          visible: getColumnVisibility('type'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<span class=\"cell-middle\" translate=\"PRODUCT.{{grid.appScope.vm.stock_movement_types[row.entity.type]}}\"></span>'\n        },\n        quantity: {\n          displayName: $filter('translate')('PRODUCT.AMOUNT'),\n          field: 'quantity',\n          permission: true,\n          visible: getColumnVisibility('quantity'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.move}}</div>'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.WAREHOUSE'),\n          field: 'warehouse',\n          permission: true,\n          visible: getColumnVisibility('warehouse'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.warehouse}}</div>'\n        },\n        color: {\n          displayName: $filter('translate')('PRODUCT.COLOR'),\n          field: 'color',\n          permission: true,\n          visible: getColumnVisibility('color'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.color}}</div>'\n        },\n        size: {\n          displayName: $filter('translate')('PRODUCT.SIZE'),\n          field: 'size',\n          permission: true,\n          visible: getColumnVisibility('size'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.size}}</div>'\n        },\n        user: {\n          displayName: $filter('translate')('PRODUCT.USER'),\n          field: 'user',\n          permission: true,\n          visible: getColumnVisibility('user'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.user}}</div>'\n        },\n        reason: {\n          displayName: $filter('translate')('MOVEMENTS.REASON_SHORT'),\n          field: 'reason',\n          permission: true,\n          visible: getColumnVisibility('reason'),\n          minWidth: 175,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div ng-if=\"row.entity.reason\"><span class=\"ml-10 cursor-pointer text-boxed {{grid.appScope.vm.getReasonStyle(row.entity.reason)}}\"' +\n            'ng-click=\"grid.appScope.vm.editMovement(row.entity)\"' +\n            'translate=\"MOVEMENTS.{{grid.appScope.vm.stock_movement_reasons[row.entity.reason]}}\"></span>' +\n            '</div>' +\n            '<div ng-if=\"!row.entity.reason\"><md-button class=\"md-primary\"' +\n            'ng-click=\"grid.appScope.vm.editMovement(row.entity)\" has-permission=\"app.inventory.products.product.stock-movements.update\">' +\n            '<md-icon class=\"mr-5 mb-5 size-20\" md-font-icon=\"icon-pencil\"></md-icon>' +\n            '<span translate=\"MOVEMENTS.ADD_REASON\"></span>' +\n            '</md-button></div>'\n        },\n        notes: {\n          displayName: $filter('translate')('MOVEMENTS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: getColumnVisibility('notes'),\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableColumnMenu: false,\n          cellTemplate: '<div ng-if=\"row.entity.notes\" class=\"cell-middle secondary-text\">{{row.entity.notes}}</div>' +\n            '<div ng-if=\"!row.entity.notes\"><md-button class=\"md-primary\" ng-click=\"grid.appScope.vm.editMovement(row.entity)\" has-permission=\"app.inventory.products.product.stock-movements.update\"><md-icon class=\"mr-5 mb-5 size-20\" md-font-icon=\"icon-pencil\"></md-icon><span translate=\"MOVEMENTS.ADD_REASON_NOTES\"></span></md-button></div>'\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      vm.gridOptions.columnDefs = [];\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridProductsPage() {\n      vm.loading = true;\n      api.inventories.stockMovements.get({\n        uid_stock_id: UIDId,\n        pagination: 'datatable',\n        length: vm.status.pageSize,\n        page: vm.status.pageNumber,\n        start: vm.status.pageSize * (vm.status.pageNumber - 1),\n        ordering: vm.status.ordering,\n        search: vm.status.search\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = response.data;\n          vm.gridOptions.totalItems = response.recordsTotal;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function accept() {\n      $mdDialog.hide();\n    }\n\n    function editMovement(movement) {\n      if (!Session.hasPermission('app.inventory.products.product.stock-movements.update')) {\n        return;\n      }\n      $mdDialog.show({\n        controller: 'StockMovementDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/stock-movement/stock-movement.html',\n        clickOutsideToClose: true,\n        focusOnOpen: true,\n        multiple: true,\n        locals: {\n          movement: movement,\n          readonly: false,\n          callback: function(movement) {\n            api.inventories.stockMovements.update(\n              movement, function(response) {\n                $mdToast\n                  .show($mdToast.simple()\n                    .textContent($filter('translate')('PRODUCT.STOCK_SAVED'))\n                    .position('top right'));\n              });\n          }\n        }\n      }).then(function() {\n        getGridProductsPage();\n      });\n    }\n\n    function getReasonStyle(reason) {\n      switch (reason) {\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY:\n          return 'red-bg white-fg';\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY:\n          return 'brown-bg white-fg';\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE:\n          return 'black-bg white-fg';\n        default:\n          return '';\n      }\n    }\n\n    function trim(text, size) {\n      if (text && text.length > size) {\n        return text.substr(0, size) + '…';\n      }\n      return text;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('StockMovementDialogController', StockMovementDialogController);\n\n  /** @ngInject */\n  function StockMovementDialogController($mdDialog,\n                                         callback,\n                                         readonly,\n                                         movement,\n                                         Session,\n                                         STOCK_MOVEMENT_REASONS) {\n    var vm = this;\n\n    // Data\n    vm.STOCK_MOVEMENT_REASONS = STOCK_MOVEMENT_REASONS;\n    vm.maxLength = 256;\n    vm.movement = angular.copy(movement);\n    vm.readonly = readonly;\n    vm.movements = [\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_TESTER,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_COURSE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_INTERNAL_USE,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_LOSS,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ADJUSTMENT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_PRESS_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OWNER_GIFT,\n      STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_OTHER\n    ];\n    vm.hasReasonWhenInit = vm.movement.reason ? true : false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.accept = accept;\n    vm.deleteReason = deleteReason;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function deleteReason() {\n      if (!Session.hasPermission('inventory.products.product.uid_stocks.create')) {\n        return;\n      }\n\n      vm.movement.reason = null;\n      vm.movement.notes = null;\n      vm.accept();\n    }\n\n    function accept() {\n      callback(vm.movement);\n      $mdDialog.hide();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ProductVariantSelectorGridController', ProductVariantSelectorGridController);\n\n  /** @ngInject */\n  function ProductVariantSelectorGridController($scope, $rootScope, UiGridService, $mdMedia, $timeout, $filter, Session, api,\n                                                $mdDialog, selectedVariants, SEARCH_MAX_LENGTH, $q, $mdSidenav, BarcodeService, $state) {\n\n    var vm = $scope.vm;\n    vm.$mdMedia = $mdMedia;\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.keptSelectionArray = selectedVariants;\n    vm.loading = true;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.status = {\n      state: {}, ordering: 'product__id', search: '', filtersParams: {}, notifications: 0, filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableColumnMenus: false,\n      enableSorting: false,\n      enableRowSelection: true\n      // isRowSelectable: false\n\n    });\n\n    $scope.selectFilter = {};\n\n    vm.getGridProductsPage = getGridProductsPage;\n    vm.cancel = cancel;\n    vm.confirm = confirm;\n    vm.filterChanged = filterChanged;\n    vm.variantQuerySearch = variantQuerySearch;\n    vm.toggleSidenav = toggleSidenav;\n    vm.clearFilter = clearFilter;\n    vm.goToProduct = goToProduct;\n\n    initialize();\n\n    function initialize() {\n\n    }\n\n    vm.barcodeListenerCallbackId = BarcodeService.subscribeBarcode(barcodeListenerCallback);\n    $scope.$on('$destroy', function () {\n      BarcodeService.unsubscribeBarcode(vm.barcodeListenerCallbackId);\n    });\n\n    function barcodeListenerCallback(barcode) {\n      vm.status.search = barcode;\n      if (vm.uiGridInitialized) {\n        getGridProductsPage();\n      }\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          vm.timeout = $timeout(function () {\n            vm.timeout = null;\n            getGridProductsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridProductsPage();\n        }\n      });\n\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n\n      vm.gridApi.core.on.rowsRendered($scope, function () {\n        var grid = this.grid;\n        var allSelected = true;\n        grid.rows.forEach(function (part, index, array) {\n          if (vm.keptSelectionArray.includes(array[index].entity.id)) {\n            array[index].isSelected = true;\n          } else if (allSelected) {\n            allSelected = false;\n          }\n        });\n\n        if (allSelected) {\n          grid.selection.selectAll = true;\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function (row) {\n        updateSelectedRows(row);\n      });\n\n      vm.gridApi.selection.on.rowSelectionChangedBatch($scope, function () {\n        if (vm.gridApi.selection.getSelectAllState()) {\n          this.grid.rows.map(function (row) {\n            var idx = vm.keptSelectionArray.indexOf(row.entity);\n            if (idx === -1) {\n              vm.keptSelectionArray.push(row.entity);\n            }\n          });\n        } else {\n          this.grid.rows.map(function (row) {\n            updateSelectedRows(row);\n          });\n        }\n      });\n\n      setGridColumns();\n      getGridProductsPage();\n      $timeout(function () {\n        $rootScope.$broadcast('ndGrid::statusLoaded');\n      }, 500);\n    }\n\n    function filterChanged() {\n      getGridProductsPage();\n    }\n\n\n    function setGridColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n      angular.extend(vm.columns, {\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: getColumnStatusVisibility('cover_thumbnail', true, avoidState),\n          minWidth: 48,\n          width: 48,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: createThumbnailCellTemplate()\n        },\n        codeSku: {\n          displayName: $filter('translate')('PRODUCT.CODE_SKU'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE_SKU'),\n          field: 'product.id',\n          grouping: {groupPriority: 0},\n          permission: true,\n          visible: getColumnStatusVisibility('product.id', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createCodeSkuCellTemplate()\n        },\n        name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          headerTooltip: $filter('translate')('PRODUCT.NAME'),\n          field: 'name',\n          permission: true,\n          visible: getColumnStatusVisibility('name', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createNameTemplate()\n        },\n        brand: {\n          displayName: $filter('translate')('PRODUCT.BRAND'),\n          headerTooltip: $filter('translate')('PRODUCT.BRAND'),\n          field: 'brand',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createBrandTemplate()\n        },\n        season: {\n          displayName: $filter('translate')('PRODUCT.SEASON'),\n          headerTooltip: $filter('translate')('PRODUCT.SEASON'),\n          field: 'season',\n          permission: true,\n          visible: getColumnStatusVisibility('season', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createSeasonTemplate()\n        },\n        category: {\n          displayName: $filter('translate')('PRODUCT.CATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createCategoryTemplate()\n        },\n        stock: {\n          displayName: $filter('translate')('PRODUCT.STOCK'),\n          headerTooltip: $filter('translate')('PRODUCT.STOCK'),\n          field: 'stock',\n          permission: true,\n          visible: getColumnStatusVisibility('stock', true, avoidState),\n          enableHiding: false,\n          cellTemplate: createStockTemplate()\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function (v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function (column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    function getGridProductsPagePostData() {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n      d.long_url_get = true;\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Fields\n      d.fields = getGridVisibleColumnFields();\n\n      // Search\n      d.search = vm.status.search;\n\n      // Filters (from the directive nd-products-filters\n      angular.extend(d, vm.status.filtersParams);\n\n      return d;\n    }\n\n    var controller = new AbortController();\n\n    function getGridProductsPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n      var url = api.urls.inventories.productVariants.replace('/:id/:option', '');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridProductsPagePostData()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          $scope.$apply();\n\n        })\n        .catch(function (error) {\n          throw error;\n        });\n\n    }\n\n    function updateSelectedRows(changed_row) {\n      var idx = vm.keptSelectionArray.indexOf(changed_row.entity);\n      if (idx > -1) {\n        vm.keptSelectionArray.splice(idx, 1);\n      } else {\n        vm.keptSelectionArray.push(changed_row.entity);\n      }\n    }\n\n    function goToProduct(productId) {\n      $state.go('app.inventory.products.product.overview', {id: productId});\n      vm.cancel();\n    }\n\n    function createCodeSkuCellTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '<a style=\"cursor: pointer;\" ng-click=\"grid.appScope.vm.goToProduct(row.treeNode.children[0].row.entity.product.id)\">' +\n        '{{row.treeNode.children[0].row.entity.product.code}}' +\n        '</a>' +\n        '</div>' +\n\n        '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">' +\n        '{{row.entity.sku}}' +\n        '</div>';\n    }\n\n    function createNameTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.name}}' +\n        '</div>' +\n\n        '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">' +\n        '{{row.entity.full_name}}' +\n        '</div>';\n    }\n\n    function createBrandTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.brand}}' +\n        '</div>';\n    }\n\n    function createSeasonTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.season}}' +\n        '</div>';\n    }\n\n    function createCategoryTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.category}}' +\n        '</div>';\n    }\n\n    function createStockTemplate() {\n      return '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n        '{{row.treeNode.children[0].row.entity.product.total_stock}}' +\n        '</div>' +\n\n        '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">' +\n        '{{row.entity.total_stock}}' +\n        '</div>';\n    }\n\n    function createThumbnailCellTemplate() {\n      return '<md-icon ng-if=\"!row.treeNode.children[0].row.entity.product.cover_thumbnail && row.treeLevel === 0\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n        '<img ng-if=\"row.treeNode.children[0].row.entity.product.cover_thumbnail && row.treeLevel === 0\" width=\"32px\" ng-src=\"{{row.treeNode.children[0].row.entity.product.cover_thumbnail}}\" lazy-src />';\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function confirm() {\n      $mdDialog.hide(vm.keptSelectionArray);\n    }\n\n    function variantQuerySearch(type) {\n      var deferred = $q.defer();\n      var searchText = '';\n      if (type === vm.TYPE_SIZE) {\n        searchText = vm.sizeSearchText;\n      } else if (type === vm.TYPE_COLOR) {\n        searchText = vm.colorSearchText;\n      }\n\n      searchText = searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.variants.get(\n        {\n          autocomplete: type,\n          search: searchText,\n          'serializer': 'VariantFullSerializer',\n        },\n        function (results) {\n          if (results.results) {\n            var variants = type === vm.TYPE_SIZE ? vm.status.filters.sizes : vm.status.filters.colors;\n            var variantIds = variants.map(function (variant) {\n              return variant.id;\n            });\n            deferred.resolve(results.results.filter(function (variant) {\n              return variantIds.indexOf(variant.id) === -1;\n            }));\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ProductSearchController', ProductSearchController);\n\n  /** @ngInject */\n  function ProductSearchController($scope, $rootScope, $mdDialog, $mdMedia, $compile, api, $document, $filter, $cookies, $mdSidenav, $timeout, apiResolver, Session, DTColumnBuilder, params, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    $scope.search = '';\n    $scope.variants = [];\n    $scope.tabIndex = 0;\n    $scope.filterSite = '';\n    $scope.discountActive = false;\n    $scope.productsById = {};\n    $scope.productVariantsById = {};\n    $scope.sourceUnderMinimum = false;\n    $scope.targetUnderMinimum = false;\n    $scope.$mdMedia = $mdMedia;\n    $scope.sidenavLockedOpen = true;\n    $scope.status = {\n      state: {}, ordering: '', search: '', filtersParams: {}, notifications: 0, filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      }, pageNumber: 1 //pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // Params\n    $scope.multipleProducts = angular.isDefined(params.multiple) ? params.multiple : true;\n    $scope.getVariants = angular.isDefined(params.getVariants) ? params.getVariants : false;\n    $scope.sourceWarehouse = angular.isDefined(params.sourceWarehouse) ? params.sourceWarehouse : null;\n    $scope.targetWarehouse = angular.isDefined(params.targetWarehouse) ? params.targetWarehouse : null;\n    $scope.hideBundles = angular.isDefined(params.hideBundles) ? params.hideBundles : false;\n    $scope.filterBrands = angular.isDefined(params.filterBrands) ? params.filterBrands : null;\n    $scope.filterCategories = angular.isDefined(params.filterCategories) ? params.filterCategories : null;\n    $scope.filterSeasons = angular.isDefined(params.filterSeasons) ? params.filterSeasons : null;\n    $scope.manageUids = angular.isDefined(params.manageUids) ? params.manageUids : null;\n    $scope.manageLots = angular.isDefined(params.manageLots) ? params.manageLots : null;\n\n    $scope.result = {\n      product: null,        // product object, not product_id\n      products: [],         // list of product objects, not of product_ids\n      productVariant: null, // productVariant object, not productVariant_ids\n      productVariants: []  // list of productVariant objects, not of productVariant_id\n    };\n    $scope.selectedProductDict = {};\n\n    $scope.selectedAmountsDict = {}; // productId: [amountSelected, amountVariants]\n    $scope.fetchingVariants = {};\n\n    $scope.showProductVariantSelector = false;\n    $scope.productsDict = {};\n    $scope.dtInstance = {};\n    $scope.dtVariantsInstance = {};\n    $scope.dtVariantsOptions = null;\n    $scope.dtOptions = {\n      ajax: {\n        dataSrc: 'data', url: api.baseUrl + 'inventories/products', type: 'get', headers: {\n          'Authorization': 'Token ' + Session.token\n        }, data: function(d) {\n          d.pagination = 'datatable';\n          d.serializer = 'ProductNamedSerializer';\n\n          // Manual filters (from the directive nd-products-filters)\n          angular.extend(d, $scope.status.filtersParams);\n\n          // Mandatory filters (from the view controller)\n          if (params.collectionId) {\n            d.presale = params.collectionId;\n          }\n          if ($scope.sourceUnderMinimum && $scope.targetUnderMinimum && $scope.sourceWarehouse && $scope.targetWarehouse) {\n            //d.under_minimum = [$scope.sourceWarehouse.id, $scope.targetWarehouse.id].join(',');\n            d.under_minimum = [$scope.sourceWarehouse, $scope.targetWarehouse].join(',');\n          } else if ($scope.sourceUnderMinimum && $scope.sourceWarehouse) {\n            //d.under_minimum = $scope.sourceWarehouse.id;\n            d.under_minimum = $scope.sourceWarehouse;\n          } else if ($scope.targetUnderMinimum && $scope.targetWarehouse) {\n            //d.under_minimum = $scope.targetWarehouse.id;\n            d.under_minimum = $scope.targetWarehouse;\n          }\n\n          if ($scope.filterBrands && $scope.filterBrands.length) {\n            d.brands = $scope.filterBrands.join(',');\n          }\n          if ($scope.filterCategories && $scope.filterCategories.length) {\n            d.categories = $scope.filterCategories.join(',');\n          }\n          if ($scope.filterSeasons && $scope.filterSeasons.length) {\n            d.seasons = $scope.filterSeasons.join(',');\n          }\n          if ($scope.hideBundles) {\n            d.hide_bundles = $scope.hideBundles;\n          }\n\n          if ($scope.manageUids !== null) {\n            d.manage_uids = $scope.manageUids;\n          }\n\n          if ($scope.manageLots !== null) {\n            d.manage_lots = $scope.manageLots;\n          }\n        }\n      },\n      rowId: 'id', //dom: '<\"top\"<\"left\"f<\"info\"i>><\"right\"<\"pagination\"p>>>rt',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      pagingType: 'simple',\n      pageLength: 25,\n      lengthMenu: [25, 50, 100, 200],\n      scrollX: false,\n      fixedHeader: false,\n      responsive: false, //scrollY: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      headerCallback: headerCallback,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      order: [[2, 'asc']],\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        data.status = $scope.status;\n        data.sourceUnderMinimum = $scope.sourceUnderMinimum;\n        data.targetUnderMinimum = $scope.targetUnderMinimum;\n        localStorage.setItem(Session.company.id + '::dataTableProductSearchDialogControllerV2', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableProductSearchDialogControllerV2'));\n        if (state) {\n          if (state.search && state.search.search) {\n            $scope.search = state.search.search;\n          }\n          if (angular.isDefined(state.status)) {\n            $scope.status = state.status;\n          }\n          $scope.sourceUnderMinimum = angular.isDefined(state.sourceUnderMinimum) ? state.sourceUnderMinimum : false;\n          $scope.targetUnderMinimum = angular.isDefined(state.targetUnderMinimum) ? state.targetUnderMinimum : false;\n        }\n        $timeout(function() {\n          $rootScope.$broadcast('ndGrid::statusLoaded');\n        }, 500);\n        return state;\n      }\n    };\n\n    $scope.dtColumns = [];\n    if ($scope.multipleProducts) {\n\n      if ($scope.getVariants) {\n        // When get also the variants, the checkbox is just an icon and there is not checkbox at header\n        $scope.dtColumns.push(DTColumnBuilder.newColumn('select')\n          .notSortable()\n          .withOption('searchable', false)\n          .withOption('orderable', false)\n          .renderWith(function(data, type, full) {\n            var result = '<div layout=\"column\">';\n            result += '<md-tooltip md-delay=\"500\">{{\"PRODUCTS.SELECT_DESELECT_ALL\" | translate}}</md-tooltip>';\n            result += '<md-progress-circular md-diameter=\"26\" class=\"md-accent\" ng-if=\"fetchingVariants[' + full.id + ']\"></md-progress-circular>';\n            result += '<md-icon class=\"mr-10 s26\" ng-if=\"!fetchingVariants[' + full.id + ']\" md-font-icon=\"{{getProductsCheckboxIcon(' + full.id + ')}}\" ng-class=\"getProductsCheckboxClass(' + full.id + ')\" ng-click=\"toggleAndSelectAllVariants(' + full.id + ')\"></md-icon>';\n            result += '<span class=\"variants-amount secondary-text\" ng-if=\"selectedAmountsDict[' + full.id + '] && selectedAmountsDict[' + full.id + '][0]\">{{selectedAmountsDict[' + full.id + '][0]}}/{{selectedAmountsDict[' + full.id + '][1]}}</span>';\n            result += '</div>';\n            return result;\n          }));\n      } else {\n        $scope.dtColumns.push(DTColumnBuilder.newColumn('select')\n          .withTitle('<md-checkbox class=\"mb-0\" ng-checked=\"isChecked()\"  md-indeterminate=\"isIndeterminate()\" ng-click=\"selectAll()\"></md-checkbox>')\n          .notSortable()\n          .withOption('searchable', false)\n          .withOption('orderable', false)\n          .renderWith(function(data, type, full) {\n            return '<md-checkbox class=\"m-0\" ng-checked=\"exists(' + full.id + ')\" ng-click=\"toggle(' + full.id + ')\"></md-checkbox>';\n          }));\n      }\n\n    }\n    $scope.dtColumns = $scope.dtColumns.concat([DTColumnBuilder.newColumn('cover_thumbnail').withTitle($filter('translate')('PRODUCT.IMAGE'))\n      .renderWith(function(data, type, full) {\n        if (full.cover_thumbnail) {\n          return '<img src=\"' + full.cover_thumbnail + '\">';\n        }\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n      }), DTColumnBuilder.newColumn('code')\n      .withTitle($filter('translate')('PRODUCT.CODE'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        $scope.productsById[full.id] = full;\n        return '<span class=\"text-truncate\"><md-tooltip md-delay=\"500\">' + full.code + '</md-tooltip>' + full.code + '</span>';\n      }), DTColumnBuilder.newColumn('name')\n      .withTitle($filter('translate')('PRODUCT.NAME'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span class=\"text-truncate\"><md-tooltip md-delay=\"500\">' + full.name + '</md-tooltip>' + full.name + '</span>';\n      }), DTColumnBuilder.newColumn('total_stock')\n      .withTitle($filter('translate')('PRODUCT.TOTAL_STOCK'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.total_stock + '</span>';\n      }), DTColumnBuilder.newColumn('brand__name')\n      .withTitle($filter('translate')('PRODUCT.BRAND'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span class=\"text-truncate\">' + full.brand + '</span>';\n      }), DTColumnBuilder.newColumn('season__name')\n      .withTitle($filter('translate')('PRODUCT.SEASON'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.season + '</span>';\n      }), DTColumnBuilder.newColumn('category__name')\n      .withTitle($filter('translate')('PRODUCT.CATEGORY'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.category + '</span>';\n      }), DTColumnBuilder.newColumn('subcategory__name')\n      .withTitle($filter('translate')('PRODUCT.SUBCATEGORY'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.subcategory ? full.subcategory : '-' + '</span>';\n      }), DTColumnBuilder.newColumn('provider__name')\n      .withTitle($filter('translate')('PRODUCT.PROVIDER'))\n      .withClass('w-150')\n      .renderWith(function(data, type, full) {\n        return '<span>' + full.provider ? full.provider : '-' + '</span>';\n      })]);\n\n    $scope.dtVariantsColumns = [];\n    if ($scope.multipleProducts) {\n      $scope.dtVariantsColumns.push(DTColumnBuilder.newColumn('select')\n        .withTitle('<md-checkbox class=\"mb-0\" ng-checked=\"isVariantChecked()\"  md-indeterminate=\"isVariantIndeterminate()\" ng-click=\"selectAllVariant()\"></md-checkbox>')\n        .withOption('className', 'checkbox')\n        .withOption('sortable', false)\n        .withOption('searchable', false)\n        .withOption('orderable', false)\n        .withClass('w-30')\n        .renderWith(function(data, type, full) {\n          return '<md-checkbox class=\"m-0\" ng-checked=\"exists(' + full.id + ', true)\" ng-click=\"toggle(' + full.id + ', true)\"></md-checkbox>';\n        }));\n    }\n    $scope.dtVariantsColumns = $scope.dtVariantsColumns.concat([DTColumnBuilder.newColumn('cover_thumbnail').withTitle($filter('translate')('PRODUCT.IMAGE'))\n      .withOption('className', 'imageColumn')\n      .withOption('sortable', false)\n      .renderWith(function(data, type, full) {\n        $scope.productVariantsById[full.id] = full;\n        if (full.cover_thumbnail) {\n          return '<img class=\"w-50\" src=\"' + full.cover_thumbnail + '\"/>';\n        }\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n      }), DTColumnBuilder.newColumn('size_name')\n      .withTitle($filter('translate')('PRODUCT.SIZE')), DTColumnBuilder.newColumn('color_name')\n      .withTitle($filter('translate')('PRODUCT.COLOR')), DTColumnBuilder.newColumn('barcode')\n      .withTitle($filter('translate')('PRODUCT.BARCODE'))\n      .renderWith(function(data, type, full) {\n        return data ? data : '-';\n      }), DTColumnBuilder.newColumn('sku')\n      .withTitle($filter('translate')('PRODUCT.SKU'))\n      .renderWith(function(data, type, full) {\n        return data ? data : '-';\n      })]);\n\n\n    // Methods\n    $scope.toggleSidenav = toggleSidenav;\n    $scope.showDialog = showDialog;\n    $scope.cancel = cancel;\n    // $scope.toggleRight = buildToggler('right');\n    // $scope.headerCallback = headerCallback;\n    $scope.filterByColumn = filterByColumn;\n    $scope.selectAll = selectAll;\n    $scope.selectAllVariant = selectAllVariant;\n    $scope.isIndeterminate = isIndeterminate;\n    $scope.isChecked = isChecked;\n    $scope.isVariantChecked = isVariantChecked;\n    $scope.exists = exists;\n    $scope.getProductsCheckboxIcon = getProductsCheckboxIcon;\n    $scope.getProductsCheckboxClass = getProductsCheckboxClass;\n    $scope.toggle = toggle;\n    $scope.toggleAndSelectAllVariants = toggleAndSelectAllVariants;\n    $scope.select = select;\n    $scope.unselectProduct = unselectProduct;\n    // $scope.selectProductVariant = selectProductVariant;\n    $scope.setVisibleTable = setVisibleTable;\n    $scope.onSelectorOpen = onSelectorOpen;\n    $scope.onSelectorClose = onSelectorClose;\n    $scope.reloadProducts = reloadProducts;\n    $scope.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n    // Functions:\n\n    function initialize() {\n      $scope.orderProductsBackup = angular.copy($scope.orderProducts);\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n\n    function mapAndJoinList(list) {\n      if (!list || !list.length) {\n        return null;\n      }\n      return list.map(function(item) {\n        return item.id;\n      }).join();\n    }\n\n    function initComplete() {\n      var api = this.api();\n\n      var searchBox = angular.element('body').find('#product-search-input');\n\n      if ($scope.dtInstance && $scope.dtInstance.DataTable) {\n        $scope.dtInstance.DataTable.columns.adjust();\n\n        // Bind an external input as a table wide search box\n        if (searchBox.length > 0) {\n          searchBox.on('keyup', function(event) {\n            if ($scope.timeout) {\n              $timeout.cancel($scope.timeout);\n            }\n            $scope.timeout = $timeout(function() {\n              var input = event.target.value;\n              var regex = false;\n              var smart = false;\n              var caseInsen = true;\n              api.search(input, regex, smart, caseInsen).draw();\n            }, 500);\n          });\n        }\n      }\n\n      $scope.dtInstance.DataTable.columns.adjust().draw();\n    }\n\n    function initVariantsComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#product-search-input');\n\n      $scope.dtVariantsInstance.DataTable.columns.adjust();\n      var length = $scope.dtVariantsInstance.DataTable.data().length;\n\n      updateAmounts($scope.clickedProduct.id, length);\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          if ($scope.timeout) {\n            $timeout.cancel($scope.timeout);\n          }\n          $scope.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function showDialog(ev) {\n      $mdDialog.show({\n        contentElement: '#product-search-dialog',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true\n      });\n    }\n\n    function filterByColumn(filter, column) {\n      $scope.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function headerVariantCallback(header) {\n      if (!$scope.headerVariantCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerVariantCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function cancel() {\n      $scope.orderProducts = angular.copy($scope.orderProductsBackup);\n      $mdDialog.cancel();\n    }\n\n    function select() {\n      $mdDialog.hide($scope.result);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n\n        // Manage the product\n        if ($scope.multipleProducts) {\n          toggle(aData.id);\n          $scope.$apply();\n          /*if (exists(aData, false)) {\n            $scope.result.products.push(aData);\n          }*/\n        } else {\n          $scope.result.product = aData;\n        }\n\n        // Manage the variants\n        if ($scope.getVariants) {\n          $scope.clickedProduct = aData;\n          initVariantsTable();\n        } else if (!$scope.multipleProducts) {\n          $mdDialog.hide($scope.result);\n        }\n\n        updateAmounts(aData.id);\n      });\n\n      $('td:nth-child(1)', nRow).unbind('click');\n      return nRow;\n    }\n\n    function rowVariantCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        if ($scope.multipleProducts) {\n          toggle(aData.id, true);\n          updateAmounts(aData.product_id, $scope.dtVariantsInstance.DataTable.data().length);\n          $scope.$apply();\n        } else {\n          $scope.result.productVariant = aData;\n          $mdDialog.hide($scope.result);\n        }\n      });\n\n      $('td:nth-child(1)', nRow).unbind('click');\n\n      $scope.$apply();\n      return nRow;\n    }\n\n    function initVariantsTable() {\n      $scope.tabIndex = 1;\n\n      $scope.dtVariantsOptions = {\n        ajax: {\n          dataSrc: 'data', url: api.baseUrl + 'inventories/product-variants', type: 'get', headers: {\n            'Authorization': 'Token ' + Session.token\n          }, data: function(d) {\n            d.pagination = 'datatable';\n            d.serializer = 'ProductVariantNamedSerializer';\n            d.is_raw_material = false;\n\n            if ($scope.clickedProduct) {\n              d.product_id = $scope.clickedProduct.id;\n            }\n          }\n        },\n        rowId: 'id',\n        dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n        createdRow: createdRow,\n        rowCallback: rowVariantCallback,\n        headerCallback: headerVariantCallback,\n        initComplete: initVariantsComplete,\n        pagingType: 'full_numbers',\n        pageLength: 25,\n        scrollX: false,\n        fixedHeader: false,\n        responsive: false,\n        serverSide: true,\n        processing: true,\n        searchDelay: 750\n      };\n\n      $scope.dtVariantsInstance.DataTable.draw();\n      try {\n        $scope.$apply();\n      } catch (e) {\n      }\n    }\n\n    function selectAll() {\n      var table = $scope.dtInstance.DataTable;\n      if ($scope.lastPage === table.page.info().page) {\n        if ($scope.lastPageAllSelected) {\n          table.rows().data().toArray().forEach(function(productInTable) {\n            deselectProduct(productInTable);\n          });\n        } else {\n          selectAllProductsFromTable();\n        }\n        $scope.lastPageAllSelected = !$scope.lastPageAllSelected;\n      } else {\n        selectAllProductsFromTable();\n        $scope.lastPageAllSelected = true;\n      }\n      $scope.lastPage = table.page.info().page;\n    }\n\n    function selectAllProductsFromTable() {\n      $scope.dtInstance.DataTable.rows().data().map(function(product) {\n        if (!$scope.selectedProductDict[product.id]) {\n          $scope.selectedProductDict[product.id] = true;\n          $scope.result.products.push(product);\n        }\n      });\n    }\n\n    function deselectProduct(product) {\n      if ($scope.selectedProductDict[product.id]) {\n        var index = $scope.result.products.findIndex(function(p) {\n          return product.id === p.id;\n        });\n        if (index !== -1) {\n          $scope.result.products.splice(index, 1);\n        }\n        delete $scope.selectedProductDict[product.id];\n      }\n    }\n\n    function selectAllVariant() {\n      if ($scope.result.productVariants.filter(function(pv) {\n        return pv.product_id === $scope.clickedProduct.id;\n      }).length) {\n        for (var i = 0; i < $scope.result.productVariants.length; ++i) {\n          if ($scope.result.productVariants[i].product_id === $scope.clickedProduct.id) {\n            $scope.result.productVariants.splice(i, 1);\n            --i;\n          }\n        }\n\n        var productIndex = $scope.result.products.findIndex(function(p) {\n          return p.id === $scope.clickedProduct.id;\n        });\n\n        $scope.result.products.splice(productIndex, 1);\n      } else {\n        if ($scope.result.products.findIndex(function(p) {\n          return p.id === $scope.clickedProduct.id;\n        }) === -1) {\n          $scope.result.products.push($scope.clickedProduct);\n        }\n\n        $scope.dtVariantsInstance.DataTable.rows().data().map(function(product) {\n          $scope.result.productVariants.push(product);\n        });\n      }\n      updateAmounts($scope.clickedProduct.id);\n    }\n\n    function exists(item, variantsTable) {\n      if (variantsTable) {\n        return $scope.result.productVariants.findIndex(function(productVariant) {\n          return productVariant.id === item;\n        }) !== -1;\n      } else {\n        return $scope.selectedProductDict[item];\n      }\n    }\n\n    function getProductsCheckboxIcon(item) {\n      if ($scope.result.products.length) {\n        var index = $scope.result.products.findIndex(function(product) {\n          if (product) {\n            return product.id === item;\n          }\n        });\n        return index === -1 ? 'icon-checkbox-multiple-blank-outline' : 'icon-checkbox-multiple-marked';\n      }\n      return 'icon-checkbox-multiple-blank-outline';\n    }\n\n    function getProductsCheckboxClass(item) {\n      if ($scope.result.products.length) {\n        var index = $scope.result.products.findIndex(function(product) {\n          if (product) {\n            return product.id === item;\n          }\n        });\n        return index === -1 ? '' : 'md-accent';\n      }\n      return '';\n    }\n\n    /**\n     * Checks or unchecks the productVariant or/and the product according to variantsTable parameter\n     * Returns true if the item has been added, or false if the item has been removed\n     * @param itemId\n     * @param variantsTable\n     */\n    function toggle(itemId, variantsTable) {\n\n      if (variantsTable) {\n\n        var productVariant = $scope.productVariantsById[itemId];\n\n        if ($scope.multipleProducts) {\n          var index = $scope.result.productVariants.findIndex(function(pv) {\n            return pv.id === itemId;\n          });\n\n          if (index > -1) {\n            $scope.result.productVariants.splice(index, 1);\n\n            // Check if this was the last variant of the product. It it was, uncheck the product\n            var indexProductVariant = $scope.result.productVariants.findIndex(function(pv) {\n              return pv.product_id === productVariant.product_id;\n            });\n\n            if (indexProductVariant === -1) {\n              var indexProduct = $scope.result.products.findIndex(function(p) {\n                return p.id === productVariant.product_id;\n              });\n              if (indexProduct !== -1) {\n                // Update the amounts\n                delete $scope.selectedAmountsDict[$scope.result.products[indexProduct].id];\n                // Splice from result\n                $scope.result.products.splice(indexProduct, 1);\n              }\n            }\n\n            updateAmounts(productVariant.product_id);\n            return false;\n          } else {\n            $scope.result.productVariants.push(productVariant);\n            // Push also the product if it is not already in\n            var indexProduct = $scope.result.products.findIndex(function(p) {\n              return p.id === productVariant.product_id;\n            });\n            if (indexProduct === -1) {\n              //var product = Object.values($scope.dtInstance.DataTable.data()).slice(0, 25).find(function (pv) {\n              //  return pv.id === productVariant.product_id;\n              //});\n              var product = $scope.productsById[productVariant.product_id];\n\n              $scope.result.products.push(product);\n            }\n            updateAmounts(productVariant.product_id);\n            return true;\n          }\n        } else {\n          // Just add the variant and return the result\n          $scope.result.productVariant = productVariant;\n          $mdDialog.hide($scope.result);\n\n          updateAmounts(productVariant.product_id);\n          return true;\n        }\n      } else {\n\n        var product = $scope.productsById[itemId];\n\n        if ($scope.multipleProducts) {\n          if ($scope.selectedProductDict[itemId]) {\n            delete $scope.selectedProductDict[itemId];\n            $scope.result.products.splice(index, 1);\n\n            if ($scope.getVariants) {\n              // When toggle unchecks the product, remove its variants\n              for (var i = 0; i < $scope.result.productVariants.length; ++i) {\n                if ($scope.result.productVariants[i].product_id === itemId) {\n                  $scope.result.productVariants.splice(i, 1);\n                  --i;\n                }\n              }\n            }\n\n            delete $scope.selectedAmountsDict[itemId];\n\n            updateAmounts(product.product_id);\n            return false;\n          } else {\n            $scope.selectedProductDict[itemId] = true;\n            $scope.result.products.push(product);\n            updateAmounts(product.product_id);\n            return true;\n          }\n        } else {\n          $scope.result.product = product;\n          $mdDialog.hide($scope.result);\n\n          updateAmounts(product.product_id);\n          return true;\n        }\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleAndSelectAllVariants(productId) {\n      if (!$scope.fetchingVariants[productId]) {\n\n        var productAdded = toggle(productId, false);\n\n        if (productAdded) {\n          $scope.fetchingVariants[productId] = true;\n\n          api.inventories.productVariants.list({\n            product_id: productId\n          }, function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n\n              var tempDict = {};\n\n              $scope.result.productVariants.forEach(function(pv) {\n                tempDict[pv.id] = pv.id;\n              });\n\n              results.results.forEach(function(productVariant) {\n                if (!tempDict[productVariant.id]) {\n                  $scope.result.productVariants.push(productVariant);\n                  tempDict[productVariant.id] = productVariant.id;\n                }\n              });\n\n              // Mark all as selected\n              $scope.selectedAmountsDict[productId] = [results.results.length, results.results.length];\n            }\n            $scope.fetchingVariants[productId] = false;\n          });\n        }\n      }\n    }\n\n    function unselectProduct() {\n\n    }\n\n    /**\n     * Returns true only when $scope.selected contains at least all the datatable data\n     * @returns {boolean|boolean|*}\n     */\n    function isChecked() {\n      if ($scope.dtInstance) {\n        var data = $scope.dtInstance.DataTable.rows().data();\n\n        for (var i = 0; i < data.length; ++i) {\n          if ($scope.result.products.indexOf(data[i].id) === -1) {\n            return false;\n          }\n        }\n        return true;\n      }\n    }\n\n    function isVariantChecked() {\n\n      var data = $scope.dtVariantsInstance.DataTable.rows().data();\n\n      for (var i = 0; i < data.length; ++i) {\n        if ($scope.result.productVariants.filter(function(pv) {\n          return pv.product_id === $scope.clickedProduct.id;\n        }).indexOf(data[i].id) === -1) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function isIndeterminate() {\n      return !!$scope.result.products.length && !isChecked();\n    }\n\n    function isVariantIndeterminate() {\n      return !!$scope.result.productVariants.filter(function(pv) {\n        return pv.product_id === $scope.clickedProduct.id;\n      }).length && !isVariantChecked();\n    }\n\n    function setVisibleTable(table) {\n      $scope.tabIndex = table;\n\n      if (table === 1) {\n        $scope.clickedProduct = null;\n      }\n    }\n\n    /**\n     * Recount the variants of the productId. If length is informed, is updated\n     * @param productId\n     * @param length\n     */\n    function updateAmounts(productId, length) {\n      if (!$scope.selectedAmountsDict[productId]) {\n        $scope.selectedAmountsDict[productId] = [0, 0];\n      }\n\n      $scope.selectedAmountsDict[productId][0] = $scope.result.productVariants.filter(function(pv) {\n        return pv.product_id === productId;\n      }).length;\n\n      if (length) {\n        $scope.selectedAmountsDict[productId][1] = length;\n      }\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function reloadProducts(id, enabled) {\n      if (id == 'source') {\n        $scope.sourceUnderMinimum = enabled;\n      } else if (id == 'target') {\n        $scope.targetUnderMinimum = enabled;\n      }\n\n      $scope.dtInstance.DataTable.draw();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ExchangeProductVariantsDialogController', ExchangeProductVariantsDialogController);\n\n  /** @ngInject */\n  function ExchangeProductVariantsDialogController($scope, $mdDialog, $document, variants, product, $q, Session, SEARCH_MAX_LENGTH, $filter) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.Session = Session;\n    vm.productVariants = angular.copy(variants);\n    vm.product = angular.copy(product);\n    vm.selectFilter = '';\n    vm.selectedId = null;\n    vm.selectedVariant = null;\n    vm.errorMessageKey = null;\n    vm.showWaringMessage = false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.getProductVariantDetails = getProductVariantDetails;\n\n    initialize();\n\n    function initialize() {\n\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      vm.errorMessageKey = null;\n      if (!vm.selectedId) {\n        return;\n      }\n      vm.selectedVariant = vm.productVariants.find(function(variant) {\n        return variant.id == vm.selectedId;\n      });\n\n      if (!vm.showWaringMessage) {\n        vm.showWaringMessage = true;\n        return;\n      }\n      vm.showWaringMessage = false;\n\n\n      $mdDialog.hide(vm.selectedVariant);\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function getProductVariantDetails(productVariant) {\n      var result = [];\n      if (productVariant.barcode) {\n        result.push($filter('translate')('PRODUCT.BARCODE').toLowerCase() + ' ' + productVariant.barcode);\n      }\n      if (productVariant.sku) {\n        result.push($filter('translate')('PRODUCT.SKU') + ' ' + productVariant.sku);\n      }\n      result.push('id: ' + productVariant.id);\n      return result.join(', ');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('EcommerceCategoryTreeDialogController', EcommerceCategoryTreeDialogController);\n\n  /** @ngInject */\n  function EcommerceCategoryTreeDialogController($scope, $mdDialog, $mdToast, $filter, site, selectedCategories, api, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.site = site;\n    vm.loading = true;\n    vm.categories = [];\n    vm.filteredCategories = [];\n\n    // Methods\n    vm.close = close;\n    vm.exists = exists;\n    vm.toggle = toggle;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      api.ecommerce.categories.list({\n        site_id: site.id\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.categories = response.results;\n          indexFilterPath();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n\n    function close() {\n      $mdDialog.hide();\n    }\n\n    function exists(category) {\n      return selectedCategories.map(function (c) {\n        return c.id;\n      }).indexOf(category.id) !== -1;\n    }\n\n    function toggle(category) {\n      var index = selectedCategories.map(function (c) {\n        return c.id;\n      }).indexOf(category.id);\n\n      if (index !== -1) {\n        selectedCategories.splice(index, 1);\n      } else {\n        selectedCategories.push(category);\n      }\n    }\n\n    function indexFilterPath() {\n      vm.categories.forEach(function (category) {\n        recursiveIndexFilterPath(category);\n      });\n    }\n\n    function recursiveIndexFilterPath(category) {\n      if (!category.children || category.children.length === 0) {\n        category.filterPath = category.name;\n        return;\n      }\n\n      var childrenFilterPath = [];\n      category.children.forEach(function (child) {\n        recursiveIndexFilterPath(child);\n        childrenFilterPath.push(child.filterPath);\n        category.filterPath = [category.name].concat(childrenFilterPath).join('|');\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ChangeCoverDialogController', ChangeCoverDialogController);\n\n  /** @ngInject */\n  function ChangeCoverDialogController($scope, $mdDialog, params, api, $mdToast, $filter) {\n    var vm = this;\n    // Data\n    vm.images = params.images;\n    vm.selectedImage = null;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.changeSelectedImage = changeSelectedImage;\n\n\n    init();\n    //Functions\n\n    function init() {\n      if (vm.images){\n        vm.selectedImage = vm.images.filter(function(image){\n          return image.is_cover;\n        })[0];\n      }\n    }\n\n    function changeSelectedImage(image) {\n      for (var img in vm.images){\n        vm.images[img].is_cover = false;\n      }\n      image.is_cover = true;\n      vm.selectedImage = image;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      api.inventories.productImages.update({\n        id: vm.selectedImage.id,\n        option: 'make-cover'\n      }, function (response) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('PRODUCT.IMAGE_SAVED'))\n          .position('top right'));\n        $mdDialog.hide(vm.selectedImage.url);\n      });\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingShippedListController', ndPickingPackingShippedListController)\n    .directive('ndPickingPackingShippedList', ndPickingPackingShippedList);\n\n  /** @ngInject */\n  function ndPickingPackingShippedList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n      },\n      controller: 'ndPickingPackingShippedListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/tabs/packed/packed-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingShippedListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $compile,\n    api,\n    PICKABLE_ORDER_STATUS,\n    UiGridService,\n    PACKING_STATUS,\n    PACKING_ORDER_STATUS_COLORS,\n    uiGridGroupingConstants\n  ) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.pickingPackingPickableOrders.replace('/:option', '');\n    vm.columns = null;\n    vm.storageLabel = 'UIGridPickingPackingControllerShippedListV1';\n\n    $scope.status.state = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_SHIPPED];\n\n\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n\n    // Initialize\n    initialize();\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      vm.gridApi = gridApi;\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n    });\n\n    function getStatusColorClass(status) {\n      return PACKING_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PACKING.' + PACKING_STATUS[status]);\n    }\n\n    function constructTargetDestination() {\n      return '<div ng-if=\"row.groupHeader\">' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\' && row.treeNode.children[0].row.entity.target_destination && row.treeNode.children[0].row.entity.target_destination.name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.target_destination.name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function constructCellTemplateLink(entity) {\n      return '<div>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '</div>';\n    }\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        packing_order_id: {\n          displayName: $filter('translate')('PICKING.PACKING_ORDER'),\n          headerTooltip: $filter('translate')('PICKING.PACKING_ORDER'),\n          field: 'packing_order_id',\n          permission: true,\n          visible: true,\n          grouping: {groupPriority: 0},\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<nd-a state=\"\\'app.inventory.picking_packing.packing_order.products\\'\" state-params=\"{id: row.treeNode.children[0].row.entity.packing_order.id}\">{{row.treeNode.children[0].row.entity.packing_order.autocode}}</nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        parent_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'parent_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n            'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n            'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\"' +\n            'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.origin_code}}</div>',\n          cellClass: 'cell-padding'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'warehouse',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">{{row.treeNode.children[0].row.entity.warehouse.name}}</div>',\n          cellClass: 'cell-padding'\n        },\n        target_destination: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_destination',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructTargetDestination(),\n          cellClass: 'cell-padding'\n        },\n        assigned_to: {\n          displayName: $filter('translate')('PACKING.ASSIGNED_TO'),\n          headerTooltip: $filter('translate')('PACKING.ASSIGNED_TO'),\n          field: 'assigned_to',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\" flex layout=\"row\" layout-align=\"start center\" ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities && row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length >= 1\">' +\n            '<nd-user-picture user=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0]\"  ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0]\" class=\"ml-8\"></nd-user-picture>' +\n            '<span class=\"username pl-10\" hide show-gt-sm> ' +\n            '{{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0][\"first_name\"]}} {{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0][\"last_name\"]}}</span>' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length > 1\" class=\"ml-8\">+{{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length}}</span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        created_at: {\n          displayName: $filter('translate')('PICKING.CREATED_AT'),\n          headerTooltip: $filter('translate')('PICKING.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate:  '<div ng-if=\"row.groupHeader\">' +\n            '{{row.treeNode.children[0].row.entity.packing_order.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.treeNode.children[0].row.entity.packing_order.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>' +\n            '<div ng-if=\"!row.groupHeader\">' +\n            '{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.entity.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        amount: {\n          displayName: $filter('translate')('PICKING.AMOUNT'),\n          headerTooltip: $filter('translate')('PICKING.AMOUNT'),\n          field: 'packing_quantity',\n          permission: true,\n          visible: true,\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          minWidth: 100,\n          enableSorting: false,\n          cellClass: 'cell-padding'\n        },\n        origin: {\n          displayName: $filter('translate')('PICKING.ORIGIN'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN'),\n          field: 'origin',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"!row.treeNode.children[0].row.entity.platform && row.groupHeader\" layout=\"row\" layout-align=\"start center\">' +\n            '<nd-picking-icon ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\'\" platform=\"302\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\'\" platform=\"303\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\'\" platform=\"301\"></nd-picking-icon>' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\') ? (\"PICKING.TRANSFER_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\') ? (\"PICKING.SALE_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\') ? (\"PICKING.POS_ORDER_FULFILLMENT\" | translate) : null}}' +\n            ' </div>' +\n            '<div ng-if=\"row.treeNode.children[0].row.entity.platform && row.groupHeader\" layout=\"row\" layout-align=\"start center\">' +\n            '<img class=\"ecommerce-image\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.treeNode.children[0].row.entity.platform}}.svg\">' +\n            '<div>{{row.treeNode.children[0].row.entity.site}}</div>' +\n            '</div>',\n          cellClass: 'cell-padding no-wrap'\n        }\n      }\n    }\n\n\n  }\n\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingToPrepareListController', ndPickingPackingToPrepareListController)\n    .directive('ndPickingPackingToPrepareList', ndPickingPackingToPrepareList);\n\n  /** @ngInject */\n  function ndPickingPackingToPrepareList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        configurationData: '=',\n        creating: '='\n      },\n      controller: 'ndPickingPackingToPrepareListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/tabs/to-prepare/to-prepare-list.html',\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingToPrepareListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $compile,\n    api,\n    UiGridService,\n    PICKABLE_ORDER_STATUS,\n    $mdDialog,\n    $state,\n    SERIAL_NUMBER_TYPES,\n    HTTP_STATUS\n  ) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.pickingPackingPickableOrders.replace('/:option', '');\n    vm.columns = null;\n    vm.storageLabel = 'UIGridPickingPackingControllerToPrepareListV1';\n    vm.gridApi = null;\n    vm.selectedWarehouse = '';\n    vm.configurationData = $scope.configurationData;\n\n    $scope.status.state   = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_PENDING];\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      vm.gridApi = gridApi;\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function (row) {\n        if (vm.selectedWarehouse === '' && row.isSelected) {\n          vm.selectedWarehouse = row.entity.warehouse;\n        }\n\n        if (vm.gridApi.selection.getSelectedGridRows().length === 0) {\n          vm.selectedWarehouse = '';\n        }\n\n        if ((vm.selectedWarehouse === null || row.entity.warehouse === null) &&\n          !(vm.selectedWarehouse === null && row.entity.warehouse === null) &&\n          vm.selectedWarehouse !== '') {\n          row.isSelected = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ONLY_ONE_WAREHOUSE')).position('top right'));\n        } else {\n          if (vm.selectedWarehouse != null && row.entity.warehouse != null && vm.selectedWarehouse !== '') {\n            if (vm.selectedWarehouse.id !== row.entity.warehouse.id) {\n              row.isSelected = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ONLY_ONE_WAREHOUSE')).position('top right'));\n            }\n          }\n        }\n      });\n\n      gridApi.selection.on.rowSelectionChangedBatch($scope, function () {\n        var isAllSelected = gridApi.selection.getSelectAllState();\n        if (isAllSelected) {\n          gridApi.selection.getSelectedGridRows().forEach(function (row) {\n            if (vm.selectedWarehouse === '' && row.isSelected) {\n              vm.selectedWarehouse = row.entity.warehouse;\n            }\n\n            if (vm.gridApi.selection.getSelectedGridRows().length === 0) {\n              vm.selectedWarehouse = '';\n            }\n\n            if ((vm.selectedWarehouse === null || row.entity.warehouse === null) &&\n              !(vm.selectedWarehouse === null && row.entity.warehouse === null) &&\n              vm.selectedWarehouse !== '') {\n              row.isSelected = false;\n            } else {\n              if (vm.selectedWarehouse != null && row.entity.warehouse != null && vm.selectedWarehouse !== '') {\n                if (vm.selectedWarehouse.id !== row.entity.warehouse.id) {\n                  row.isSelected = false;\n                }\n              }\n            }\n          });\n        } else {\n          vm.selectedWarehouse = '';\n        }\n      });\n\n    });\n\n    $scope.$on('ndPickingPacking::generatePickingOrder', function (event) {\n      vm.generatePickingOrder();\n    });\n\n    $scope.$on('ndPickingPacking::generatePackingOrder', function (event) {\n      vm.generatePackingOrder();\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n    });\n\n    vm.generatePickingOrder = generatePickingOrder;\n    vm.generatePackingOrder = generatePackingOrder;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        parent_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'parent_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.parent_autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.origin_code}}</div>',\n          cellClass: 'cell-padding'\n        },\n        created_at: {\n          displayName: $filter('translate')('PICKING.CREATED_AT'),\n          headerTooltip: $filter('translate')('PICKING.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateDate(),\n          cellClass: 'cell-padding'\n        },\n        amount: {\n          displayName: $filter('translate')('PICKING.AMOUNT'),\n          headerTooltip: $filter('translate')('PICKING.AMOUNT'),\n          field: 'amount',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.pending_picked_amount_not_finished | number: 0}}</div>',\n          cellClass: 'cell-padding'\n        },\n        location: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'location',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.warehouse[\"name\"]}}</div>',\n          cellClass: 'cell-padding'\n        },\n        target_destination: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_destination',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructTargetDestination(),\n          cellClass: 'cell-padding'\n        },\n        origin: {\n          displayName: $filter('translate')('PICKING.ORIGIN'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN'),\n          field: 'origin',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateImage('{{row.entity.site}}'),\n          cellClass: 'cell-padding no-wrap'\n        }\n\n      };\n    }\n\n    function constructTargetDestination() {\n      return '<div>' +\n        '<div flex layout=\"column\" ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\' && row.entity.target_destination && row.entity.target_destination.name\">' +\n        '<div>{{row.entity.target_destination.name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\' && row.entity.customer_name\">' +\n        '<div>{{row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\' && row.entity.customer_name\">' +\n        '<div>{{row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function constructCellTemplateLink(entity) {\n      return '<div>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '</div>';\n    }\n\n    function constructCellTemplateDate() {\n      return '<div>{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n        '<small class=\"ng-binding\">{{row.entity.created_at | date: \"HH:mm\"}}h</small></div>';\n    }\n\n    function constructCellTemplateImage(entity) {\n      return '<div ng-if=\"!row.entity.site\" layout=\"row\" layout-align=\"start center\">' +\n        '<nd-picking-icon ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\" platform=\"302\"></nd-picking-icon>' +\n        '<nd-picking-icon ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" platform=\"303\"></nd-picking-icon>' +\n        '<nd-picking-icon ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" platform=\"301\"></nd-picking-icon>' +\n        '{{(row.entity.order_type === \\'TransferOrderDelivery\\') ? (\"PICKING.TRANSFER_ORDER_DELIVERY\" | translate) : null}}' +\n        '{{(row.entity.order_type === \\'SaleOrderDelivery\\') ? (\"PICKING.SALE_ORDER_DELIVERY\" | translate) : null}}' +\n        '{{(row.entity.order_type === \\'PosOrderFulfillment\\') ? (\"PICKING.POS_ORDER_FULFILLMENT\" | translate) : null}}' +\n        ' </div>' +\n        '<div ng-if=\"row.entity.site\" layout=\"row\" layout-align=\"start center\">' +\n        '<img class=\"ecommerce-image\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.entity.site.platform}}.svg\">' +\n        '<div>{{row.entity.site.name}}</div>' +\n        '</div>';\n    }\n\n    function generatePickingOrder() {\n      if (vm.configurationData.picking_order_default_serial_number_type) {\n        createPickingOrder(vm.configurationData.picking_order_default_serial_number_type);\n      } else {\n        $mdDialog.show({\n          controller: 'SelectSerialNumberTypeDialogControllerPickings',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/picking-packing/dialogs/select-serial-number-type-dialog/select-serial-number-type-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          resolve: {\n            SerialNumberTypesData: function (apiResolver) {\n              return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n            }\n          }\n        }).then(function (serialNumberTypeId) {\n          createPickingOrder(serialNumberTypeId);\n        });\n      }\n    }\n\n    function createPickingOrder(serialNumberTypeId) {\n      $scope.creating = true;\n      var transferOrders = [];\n      var posOrders = [];\n      var saleOrders = [];\n      vm.gridApi.selection.getSelectedGridRows().forEach(function (row) {\n        if (row.entity.order_type === 'TransferOrderDelivery') {\n          transferOrders.push(row.entity.id);\n        } else if (row.entity.order_type === 'SaleOrderDelivery') {\n          saleOrders.push(row.entity.id);\n        } else if (row.entity.order_type === 'PosOrderFulfillment') {\n          posOrders.push(row.entity.id);\n        }\n      });\n      api.inventories.pickingOrder.save({\n        serialNumberType: serialNumberTypeId,\n        pos_order_fulfillment_ids: posOrders,\n        sale_order_delivery_ids: saleOrders,\n        transfer_order_delivery_ids: transferOrders,\n        warehouse_id: vm.selectedWarehouse.id\n      }, function (response, fn, status) {\n        if (status === 201) {\n          $state.go('app.inventory.picking_packing.picking_order', {id: response.picking_order.id});\n        }\n      });\n    }\n\n    function generatePackingOrder(row) {\n      var rows = [];\n      if (row) {\n        rows = [row];\n      } else {\n        rows = vm.gridApi.selection.getSelectedGridRows();\n      }\n\n      if (vm.configurationData.packing_order_default_serial_number_type) {\n        createPackingOrder(rows);\n      } else {\n        showDefaultSerialNumberTypeDialog(rows);\n      }\n    }\n\n    function showDefaultSerialNumberTypeDialog(rows) {\n      $mdDialog.show({\n          controller: 'SelectSerialNumberTypeDialogControllerPickings',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/picking-packing/dialogs/select-serial-number-type-dialog/select-serial-number-type-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            inventoryConfigurationId: vm.configurationData.id,\n            serialNumberTypeType: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PACKING_ORDER\n          },\n          resolve: {\n            SerialNumberTypesData: function (apiResolver) {\n              return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n            }\n          }\n        }).then(function (serialNumberTypeId) {\n          vm.configurationData.packing_order_default_serial_number_type = serialNumberTypeId;\n          createPackingOrder(rows);\n        });\n    }\n\n    function createPackingOrder(rows) {\n      $scope.creating = true;\n      var ordersType = rows[0].entity.order_type;\n      var ordersIds = rows.map(function (row) {\n        return row.entity.id;\n      });\n      api.inventories.pickingPackingPackingOrder.save({\n        pickable_order_ids: ordersIds,\n        order_type: ordersType\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          $state.go('app.inventory.picking_packing.packing_order.products', {id: response.id});\n        }\n      });\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingPickingListController', ndPickingPackingPickingListController)\n    .directive('ndPickingPackingPickingList', ndPickingPackingPickingList);\n\n  /** @ngInject */\n  function ndPickingPackingPickingList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n      },\n      controller: 'ndPickingPackingPickingListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/tabs/picking/picking-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingPickingListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $compile,\n    api,\n    PICKABLE_ORDER_STATUS,\n    UiGridService,\n    PICKING_STATUS,\n    PICKING_ORDER_STATUS_COLORS,\n    uiGridGroupingConstants\n  ) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.pickingPackingPickableOrders.replace('/:option', '');\n    vm.columns = null;\n    vm.storageLabel = 'UIGridPickingPackingControllerPickingListV1';\n\n    $scope.status.state = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_IN_PROGRESS];\n\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n\n    // Initialize\n    initialize();\n\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n    });\n\n    function getStatusColorClass(status) {\n      return PICKING_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PICKING.' + PICKING_STATUS[status]);\n    }\n\n    function constructTargetDestination() {\n      return '<div ng-if=\"row.groupHeader\">' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\' && row.treeNode.children[0].row.entity.target_destination && row.treeNode.children[0].row.entity.target_destination.name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.target_destination.name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function constructCellTemplateLink(entity) {\n      return '<div>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '</div>';\n    }\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        picking_order_id: {\n          displayName: $filter('translate')('PICKING.PICKING_ORDER'),\n          headerTooltip: $filter('translate')('PICKING.PICKING_ORDER'),\n          field: 'picking_order_id',\n          permission: true,\n          visible: true,\n          grouping: {groupPriority: 0},\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<nd-a state=\"\\'app.inventory.picking_packing.picking_order\\'\" state-params=\"{id: row.treeNode.children[0].row.entity.picking_order.id}\">{{row.treeNode.children[0].row.entity.picking_order.autocode}}</nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        parent_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'parent_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n            'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n            'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\"' +\n            'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.origin_code}}</div>',\n          cellClass: 'cell-padding'\n        },\n        status: {\n          displayName: $filter('translate')('PACKING.STATUS'),\n          headerTooltip: $filter('translate')('PACKING.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<span class=\"status status-badge p-4\"' +\n            'ng-class=\"grid.appScope.$parent.vm.getStatusColorClass(row.treeNode.children[0].row.entity.picking_order.status)\" ' +\n            'ng-bind=\"grid.appScope.$parent.vm.getStatusLabel(row.treeNode.children[0].row.entity.picking_order.status)\"></span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'warehouse',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">{{row.treeNode.children[0].row.entity.warehouse.name}}</div>',\n          cellClass: 'cell-padding'\n        },\n        target_destination: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_destination',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructTargetDestination(),\n          cellClass: 'cell-padding'\n        },\n        assigned_to: {\n          displayName: $filter('translate')('PACKING.ASSIGNED_TO'),\n          headerTooltip: $filter('translate')('PACKING.ASSIGNED_TO'),\n          field: 'assigned_to',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\" flex layout=\"row\" layout-align=\"start center\" ng-if=\"row.treeNode.children[0].row.entity.picking_order.picking_activities && row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances.length >= 1\">' +\n            '<nd-user-picture user=\"row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0]\"  ng-if=\"row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0]\" class=\"ml-8\"></nd-user-picture>' +\n            '<span class=\"username pl-10\" hide show-gt-sm> ' +\n            '{{row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0][\"first_name\"]}} {{row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0][\"last_name\"]}}</span>' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances.length > 1\" class=\"ml-8\">+{{row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances.length}}</span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        created_at: {\n          displayName: $filter('translate')('PICKING.CREATED_AT'),\n          headerTooltip: $filter('translate')('PICKING.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '{{row.treeNode.children[0].row.entity.picking_order.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.treeNode.children[0].row.entity.picking_order.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>' +\n            '<div ng-if=\"!row.groupHeader\">' +\n            '{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.entity.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        pending_picked_amount_not_finished: {\n          displayName: $filter('translate')('PICKING.AMOUNT'),\n          headerTooltip: $filter('translate')('PICKING.AMOUNT'),\n          field: 'pending_picked_amount_not_finished',\n          permission: true,\n          visible: true,\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          minWidth: 100,\n          enableSorting: false,\n          cellClass: 'cell-padding'\n        },\n        origin: {\n          displayName: $filter('translate')('PICKING.ORIGIN'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN'),\n          field: 'origin',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"!row.entity.platform\" layout=\"row\" layout-align=\"start center\">' +\n            '<nd-picking-icon ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\" platform=\"302\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" platform=\"303\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" platform=\"301\"></nd-picking-icon>' +\n            '{{(row.entity.order_type === \\'TransferOrderDelivery\\') ? (\"PICKING.TRANSFER_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.entity.order_type === \\'SaleOrderDelivery\\') ? (\"PICKING.SALE_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.entity.order_type === \\'PosOrderFulfillment\\') ? (\"PICKING.POS_ORDER_FULFILLMENT\" | translate) : null}}' +\n            ' </div>' +\n            '<div ng-if=\"row.entity.platform\" layout=\"row\" layout-align=\"start center\">' +\n            '<img class=\"ecommerce-image\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.entity.platform}}.svg\">' +\n            '<div>{{row.entity.site}}</div>' +\n            '</div>',\n          cellClass: 'cell-padding no-wrap'\n        }\n      }\n      ;\n    }\n  }\n\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingPickedListController', ndPickingPackingPickedListController)\n    .directive('ndPickingPackingPickedList', ndPickingPackingPickedList);\n\n  /** @ngInject */\n  function ndPickingPackingPickedList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        configurationData: '=',\n        creating: '='\n      },\n      controller: 'ndPickingPackingPickedListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/tabs/picked/picked-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingPickedListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $compile,\n    api,\n    PICKABLE_ORDER_STATUS,\n    UiGridService,\n    PICKING_STATUS,\n    PICKING_ORDER_STATUS_COLORS,\n    Session,\n    INTEGRATION_APP_TYPE,\n    $state,\n    $mdDialog,\n    SERIAL_NUMBER_TYPES,\n    HTTP_STATUS,\n    uiGridGroupingConstants\n  ) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.pickingPackingPickableOrders.replace('/:option', '');\n    vm.columns = null;\n    vm.storageLabel = 'UIGridPickingPackingControllerPickedListV1';\n    vm.configurationData = $scope.configurationData;\n\n    $scope.status.state = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_DONE];\n    vm.idRowCreated = null;\n\n    $scope.$on('ndPickingPacking::generatePackingOrder', function (event) {\n      vm.generatePackingOrder();\n    });\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n    vm.generatePackingOrder = generatePackingOrder;\n    vm.createPackingOrder = createPackingOrder;\n\n\n    // Initialize\n    initialize();\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      vm.gridApi = gridApi;\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n    });\n\n    function getStatusColorClass(status) {\n      return PICKING_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PICKING.' + PICKING_STATUS[status]);\n    }\n\n    function constructCellTemplateLink(entity) {\n      return '<div>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '</div>';\n    }\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        picking_order_id: {\n          displayName: $filter('translate')('PICKING.PICKING_ORDER'),\n          headerTooltip: $filter('translate')('PICKING.PICKING_ORDER'),\n          field: 'picking_order_id',\n          permission: true,\n          visible: true,\n          grouping: {groupPriority: 0},\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<nd-a state=\"\\'app.inventory.picking_packing.picking_order\\'\" state-params=\"{id: row.treeNode.children[0].row.entity.picking_order.id}\">{{row.treeNode.children[0].row.entity.picking_order.autocode}}</nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        parent_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'parent_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n            'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n            'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\"' +\n            'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.origin_code}}</div>',\n          cellClass: 'cell-padding'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'warehouse',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">{{row.treeNode.children[0].row.entity.warehouse.name}}</div>',\n          cellClass: 'cell-padding'\n        },\n        target_destination: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_destination',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructTargetDestination(),\n          cellClass: 'cell-padding'\n        },\n        assigned_to: {\n          displayName: $filter('translate')('PACKING.ASSIGNED_TO'),\n          headerTooltip: $filter('translate')('PACKING.ASSIGNED_TO'),\n          field: 'assigned_to',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\" flex layout=\"row\" layout-align=\"start center\" ng-if=\"row.treeNode.children[0].row.entity.picking_order.picking_activities && row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances.length >= 1\">' +\n            '<nd-user-picture user=\"row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0]\"  ng-if=\"row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0]\" class=\"ml-8\"></nd-user-picture>' +\n            '<span class=\"username pl-10\" hide show-gt-sm> ' +\n            '{{row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0][\"first_name\"]}} {{row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances[0][\"last_name\"]}}</span>' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances.length > 1\" class=\"ml-8\">+{{row.treeNode.children[0].row.entity.picking_order.picking_activities[0].picked_by_instances.length}}</span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        created_at: {\n          displayName: $filter('translate')('PICKING.CREATED_AT'),\n          headerTooltip: $filter('translate')('PICKING.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '{{row.treeNode.children[0].row.entity.picking_order.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.treeNode.children[0].row.entity.picking_order.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>' +\n            '<div ng-if=\"!row.groupHeader\">' +\n            '{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.entity.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        picked_quantity: {\n          displayName: $filter('translate')('PICKING.AMOUNT'),\n          headerTooltip: $filter('translate')('PICKING.AMOUNT'),\n          field: 'picked_quantity',\n          permission: true,\n          visible: true,\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          minWidth: 100,\n          enableSorting: false,\n          cellClass: 'cell-padding'\n        },\n        origin: {\n          displayName: $filter('translate')('PICKING.ORIGIN'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN'),\n          field: 'origin',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"!row.entity.platform\" layout=\"row\" layout-align=\"start center\">' +\n            '<nd-picking-icon ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\" platform=\"302\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" platform=\"303\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" platform=\"301\"></nd-picking-icon>' +\n            '{{(row.entity.order_type === \\'TransferOrderDelivery\\') ? (\"PICKING.TRANSFER_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.entity.order_type === \\'SaleOrderDelivery\\') ? (\"PICKING.SALE_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.entity.order_type === \\'PosOrderFulfillment\\') ? (\"PICKING.POS_ORDER_FULFILLMENT\" | translate) : null}}' +\n            ' </div>' +\n            '<div ng-if=\"row.entity.platform\" layout=\"row\" layout-align=\"start center\">' +\n            '<img class=\"ecommerce-image\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.entity.platform}}.svg\">' +\n            '<div>{{row.entity.site}}</div>' +\n            '</div>',\n          cellClass: 'cell-padding no-wrap'\n        },\n        create_packing_order: {\n          displayName: '',\n          headerTooltip: '',\n          field: 'create_packing_order',\n          permission: true,\n          visible: true,\n          width: 50,\n          enableSorting: false,\n          enableHiding: false,\n          cellTemplate: createPackingOrderTemplate(),\n          cellClass: 'cell-right'\n        },\n      };\n    }\n\n    function constructTargetDestination() {\n      return '<div>' +\n        '<div flex layout=\"column\" ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\' && row.entity.target_destination && row.entity.target_destination.name\">' +\n        '<div>{{row.entity.target_destination.name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\' && row.entity.customer_name\">' +\n        '<div>{{row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\' && row.entity.customer_name\">' +\n        '<div>{{row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.target_destination\">{{row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function createPackingOrderTemplate() {\n      return '<div ng-if=\"!row.groupHeader\">' +\n        '<md-menu md-position-mode=\"target-right target\">' +\n        '<md-button class=\"md-icon-button\" ng-click=\"$mdMenu.open($event)\">' +\n        '<md-icon class=\"icon-dots-vertical font-size-24\"></md-icon>' +\n        '</md-button>' +\n        '<md-menu-content width=\"4\">' +\n        '<md-menu-item>' +\n        '<md-button ng-click=\"grid.appScope.$parent.vm.generatePackingOrder(row.entity)\">' +\n        '<div flex layout=\"row\" layout-align=\"center center\">' +\n        '<md-icon ng-if=\"!grid.appScope.vm.idRowCreated\" md-font-icon=\"icon-plus\" class=\"s20 p-0 m-0\"></md-icon>' +\n        '<md-progress-circular ng-if=\"grid.appScope.vm.idRowCreated===row.entity.id\" md-diameter=\"12px\"></md-progress-circular>' +\n        '<span translate=\"PACKING.CREATE_PACKING_ORDER\"></span>' +\n        '</div>' +\n        '</md-button>' +\n        '</md-menu-item>' +\n        '</md-menu-content>' +\n        '</md-menu>' +\n        '</div>';\n    }\n\n    function generatePackingOrder(row) {\n      var rows = [];\n      if (row) {\n        rows = [row];\n      } else {\n        rows = vm.gridApi.selection.getSelectedGridRows()\n      }\n      createPackingOrder(rows);\n    }\n\n    function showDefaultSerialNumberTypeDialog(rows) {\n      $mdDialog.show({\n        controller: 'SelectSerialNumberTypeDialogControllerPickings',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/picking-packing/dialogs/select-serial-number-type-dialog/select-serial-number-type-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          inventoryConfigurationId: vm.configurationData.id,\n          serialNumberTypeType: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PACKING_ORDER\n        },\n        resolve: {\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          }\n        }\n      }).then(function (serialNumberTypeId) {\n        vm.configurationData.packing_order_default_serial_number_type = serialNumberTypeId;\n        createPackingOrder(rows);\n      }, function () {\n        $scope.creating = false;\n      });\n    }\n\n    function createPackingOrder(rows) {\n      $scope.creating = true;\n      if (!vm.configurationData.packing_order_default_serial_number_type) {\n        showDefaultSerialNumberTypeDialog(rows);\n      }\n      var ordersType = rows[0].entity.order_type;\n      var pickingOrderId = rows[0].entity.picking_order_id;\n      var ordersIds = rows.map(function (row) {\n        return row.entity.id;\n      });\n      api.inventories.pickingPackingPackingOrder.save({\n        picking_order_id: pickingOrderId,\n        pickable_order_ids: ordersIds,\n        order_type: ordersType\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          $state.go('app.inventory.picking_packing.packing_order.products', {id: response.id});\n        }\n      });\n    }\n  }\n\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingPackingListController', ndPickingPackingPackingListController)\n    .directive('ndPickingPackingPackingList', ndPickingPackingPackingList);\n\n  /** @ngInject */\n  function ndPickingPackingPackingList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n      },\n      controller: 'ndPickingPackingPackingListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/tabs/packing/packing-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingPackingListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $compile,\n    api,\n    PICKABLE_ORDER_STATUS,\n    UiGridService,\n    PACKING_STATUS,\n    PACKING_ORDER_STATUS_COLORS,\n    uiGridGroupingConstants\n  ) {\n\n    // Data\n    var vm = this;\n    // vm.url = api.urls.inventories.pickingPackingPackingOrders.replace('/:id', '').replace('/:option', '');\n    vm.url = api.urls.inventories.pickingPackingPickableOrders.replace('/:option', '');\n    vm.columns = null;\n    vm.storageLabel = 'UIGridPickingPackingControllerPackingListV1';\n\n    $scope.status.state = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_PACKING];\n\n    vm.gridApi = null;\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n\n    // Initialize\n    initialize();\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      vm.gridApi = gridApi;\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n    });\n\n    function getStatusColorClass(status) {\n      return PACKING_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PACKING.' + PACKING_STATUS[status]);\n    }\n\n    function constructTargetDestination() {\n      return '<div ng-if=\"row.groupHeader\">' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\' && row.treeNode.children[0].row.entity.target_destination && row.treeNode.children[0].row.entity.target_destination.name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.target_destination.name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function constructCellTemplateLink(entity) {\n      return '<div>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '</div>';\n    }\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        packing_order_id: {\n          displayName: $filter('translate')('PICKING.PACKING_ORDER'),\n          headerTooltip: $filter('translate')('PICKING.PACKING_ORDER'),\n          field: 'packing_order_id',\n          permission: true,\n          visible: true,\n          grouping: {groupPriority: 0},\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<nd-a state=\"\\'app.inventory.picking_packing.packing_order.products\\'\" state-params=\"{id: row.treeNode.children[0].row.entity.packing_order.id}\">{{row.treeNode.children[0].row.entity.packing_order.autocode}}</nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        parent_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'parent_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n            'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n            'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\"' +\n            'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">{{row.treeNode.children[0].row.entity.origin_code || \\'-\\'}}</div>' +\n            '<div ng-if=\"!row.groupHeader\">{{row.entity.origin_code || \\'-\\'}}</div>',\n          cellClass: 'cell-padding'\n        },\n        status: {\n          displayName: $filter('translate')('PACKING.STATUS'),\n          headerTooltip: $filter('translate')('PACKING.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<span class=\"status status-badge p-4\"' +\n            'ng-class=\"grid.appScope.$parent.vm.getStatusColorClass(row.treeNode.children[0].row.entity.packing_order.status)\" ' +\n            'ng-bind=\"grid.appScope.$parent.vm.getStatusLabel(row.treeNode.children[0].row.entity.packing_order.status)\"></span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'warehouse',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">{{row.treeNode.children[0].row.entity.warehouse.name}}</div>',\n          cellClass: 'cell-padding'\n        },\n        target_destination: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_destination',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructTargetDestination(),\n          cellClass: 'cell-padding'\n        },\n        assigned_to: {\n          displayName: $filter('translate')('PACKING.ASSIGNED_TO'),\n          headerTooltip: $filter('translate')('PACKING.ASSIGNED_TO'),\n          field: 'assigned_to',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\" flex layout=\"row\" layout-align=\"start center\" ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities && row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length >= 1\">' +\n            '<nd-user-picture user=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0]\"  ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0]\" class=\"ml-8\"></nd-user-picture>' +\n            '<span class=\"username pl-10\" hide show-gt-sm> ' +\n            '{{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0][\"first_name\"]}} {{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0][\"last_name\"]}}</span>' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length > 1\" class=\"ml-8\">+{{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length}}</span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        created_at: {\n          displayName: $filter('translate')('PICKING.CREATED_AT'),\n          headerTooltip: $filter('translate')('PICKING.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '{{row.treeNode.children[0].row.entity.packing_order.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.treeNode.children[0].row.entity.packing_order.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>' +\n            '<div ng-if=\"!row.groupHeader\">' +\n            '{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.entity.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        amount: {\n          displayName: $filter('translate')('PICKING.AMOUNT'),\n          headerTooltip: $filter('translate')('PICKING.AMOUNT'),\n          field: 'packing_quantity',\n          permission: true,\n          visible: true,\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          minWidth: 100,\n          enableSorting: false,\n          cellClass: 'cell-padding'\n        },\n        origin: {\n          displayName: $filter('translate')('PICKING.ORIGIN'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN'),\n          field: 'origin',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"!row.treeNode.children[0].row.entity.platform && row.groupHeader\" layout=\"row\" layout-align=\"start center\">' +\n            '<nd-picking-icon ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\'\" platform=\"302\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\'\" platform=\"303\"></nd-picking-icon>' +\n            '<nd-picking-icon ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\'\" platform=\"301\"></nd-picking-icon>' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\') ? (\"PICKING.TRANSFER_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\') ? (\"PICKING.SALE_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\') ? (\"PICKING.POS_ORDER_FULFILLMENT\" | translate) : null}}' +\n            ' </div>' +\n            '<div ng-if=\"row.treeNode.children[0].row.entity.platform && row.groupHeader\" layout=\"row\" layout-align=\"start center\">' +\n            '<img class=\"ecommerce-image\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.treeNode.children[0].row.entity.platform}}.svg\">' +\n            '<div>{{row.treeNode.children[0].row.entity.site}}</div>' +\n            '</div>',\n          cellClass: 'cell-padding no-wrap'\n        }\n      }\n      ;\n    }\n  }\n\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingPackedListController', ndPickingPackingPackedListController)\n    .directive('ndPickingPackingPackedList', ndPickingPackingPackedList);\n\n  /** @ngInject */\n  function ndPickingPackingPackedList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n      },\n      controller: 'ndPickingPackingPackedListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/tabs/packed/packed-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingPackedListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $compile,\n    api,\n    PICKABLE_ORDER_STATUS,\n    UiGridService,\n    PACKING_STATUS,\n    PACKING_ORDER_STATUS_COLORS,\n    uiGridGroupingConstants,\n    $mdDialog,\n    HTTP_STATUS\n  ) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.pickingPackingPickableOrders.replace('/:option', '');\n    vm.columns = null;\n    vm.storageLabel = 'UIGridPickingPackingControllerPackedListV1';\n    vm.gridApi = null;\n    vm.loading = false;\n\n    $scope.status.state = {};\n    $scope.status.filters.status = [PICKABLE_ORDER_STATUS.PICKABLE_ORDER_STATUS_PACKED];\n\n    vm.selected = [];\n\n\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getStatusLabel = getStatusLabel;\n    vm.openShippingPackingDialog = openShippingPackingDialog;\n    vm.markAsShipped = markAsShipped;\n\n    // Initialize\n    initialize();\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      gridApi.grid.registerDataChangeCallback(function () {\n        gridApi.treeBase.expandAllRows();\n      });\n      vm.gridApi = gridApi;\n    });\n\n    var openShippingPackingDialogUnwatch = $scope.$on('ndPickingPacking::openShippingPackingDialog', function (event) {\n      vm.openShippingPackingDialog();\n    });\n\n    var selectedRowsChangedUnwatch = $scope.$on('ndGrid::selectedRowsChanged', function (event, data) {\n      vm.selected = data;\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n      openShippingPackingDialogUnwatch();\n      selectedRowsChangedUnwatch();\n    });\n\n    function openShippingPackingDialog() {\n      if (vm.loading) {\n        return;\n      }\n      var pickableOrders = vm.gridApi.selection.getSelectedGridRows();\n      var autocodes = pickableOrders.map(function (row) {\n        return row.entity.autocode;\n      });\n\n      $mdDialog.show({\n        controller: 'ShippingDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/packing/dialogs/shipping-dialog/shipping-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          autocodes: autocodes,\n          hasParcels: vm.packingOrder.hasParcels()\n        }\n      }).then(function () {\n        var packingOrderIds = pickableOrders.map(function (row) {\n          return row.entity.packing_order.id;\n        });\n        markAsShipped(packingOrderIds);\n      });\n    }\n\n    function markAsShipped(packingOrderIds) {\n      vm.loading  = true;\n      api.inventories.packingOrder.update(\n        {\n          id: null,\n          option: 'ship',\n          ids: packingOrderIds\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $scope.$broadcast('ndGrid::filtersChanged');\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.loading = false;\n        }\n      );\n    }\n\n    function getStatusColorClass(status) {\n      return PACKING_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PACKING.' + PACKING_STATUS[status]);\n    }\n\n    function constructTargetDestination() {\n      return '<div ng-if=\"row.groupHeader\">' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\' && row.treeNode.children[0].row.entity.target_destination && row.treeNode.children[0].row.entity.target_destination.name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.target_destination.name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '<div flex layout=\"column\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\' && row.treeNode.children[0].row.entity.customer_name\">' +\n        '<div>{{row.treeNode.children[0].row.entity.customer_name}}</div>' +\n        '<small class=\"secondary-text\" ng-if=\"row.treeNode.children[0].row.entity.target_destination\">{{row.treeNode.children[0].row.entity.target_destination | largeLocation}}</small>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function constructCellTemplateLink(entity) {\n      return '<div>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + entity + '</nd-a>' +\n        '</div>';\n    }\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        packing_order_id: {\n          displayName: $filter('translate')('PICKING.PACKING_ORDER'),\n          headerTooltip: $filter('translate')('PICKING.PACKING_ORDER'),\n          field: 'packing_order_id',\n          permission: true,\n          visible: true,\n          grouping: {groupPriority: 0},\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '<nd-a state=\"\\'app.inventory.picking_packing.packing_order.products\\'\" state-params=\"{id: row.treeNode.children[0].row.entity.packing_order.id}\">{{row.treeNode.children[0].row.entity.packing_order.autocode}}</nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        parent_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'parent_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'TransferOrderDelivery\\'\"' +\n            'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'SaleOrderDelivery\\'\" ' +\n            'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '<nd-a ng-if=\"row.entity.order_type === \\'PosOrderFulfillment\\'\"' +\n            'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\"> {{row.entity.parent_autocode}} </nd-a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructCellTemplateLink('{{row.entity.autocode}}'),\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div>{{row.entity.origin_code}}</div>',\n          cellClass: 'cell-padding'\n        },\n        warehouse: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'warehouse',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">{{row.treeNode.children[0].row.entity.warehouse.name}}</div>',\n          cellClass: 'cell-padding'\n        },\n        target_destination: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_destination',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: constructTargetDestination(),\n          cellClass: 'cell-padding'\n        },\n        assigned_to: {\n          displayName: $filter('translate')('PACKING.ASSIGNED_TO'),\n          headerTooltip: $filter('translate')('PACKING.ASSIGNED_TO'),\n          field: 'assigned_to',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\" flex layout=\"row\" layout-align=\"start center\" ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities && row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length >= 1\">' +\n            '<nd-user-picture user=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0]\"  ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0]\" class=\"ml-8\"></nd-user-picture>' +\n            '<span class=\"username pl-10\" hide show-gt-sm> ' +\n            '{{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0][\"first_name\"]}} {{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by[0][\"last_name\"]}}</span>' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length > 1\" class=\"ml-8\">+{{row.treeNode.children[0].row.entity.packing_order.packing_activities[0].packed_by.length}}</span>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        created_at: {\n          displayName: $filter('translate')('PICKING.CREATED_AT'),\n          headerTooltip: $filter('translate')('PICKING.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"row.groupHeader\">' +\n            '{{row.treeNode.children[0].row.entity.packing_order.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.treeNode.children[0].row.entity.packing_order.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>' +\n            '<div ng-if=\"!row.groupHeader\">' +\n            '{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n            '<small>{{row.entity.created_at | date: \"HH:mm\"}}h</small>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        amount: {\n          displayName: $filter('translate')('PICKING.AMOUNT'),\n          headerTooltip: $filter('translate')('PICKING.AMOUNT'),\n          field: 'packing_quantity',\n          permission: true,\n          visible: true,\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          minWidth: 100,\n          enableSorting: false,\n          cellClass: 'cell-padding'\n        },\n        origin: {\n          displayName: $filter('translate')('PICKING.ORIGIN'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN'),\n          field: 'origin',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div ng-if=\"!row.treeNode.children[0].row.entity.platform && row.groupHeader\" layout=\"row\" layout-align=\"start center\">' +\n            '<nd-picking-icon className=\"mh-8\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\'\" platform=\"302\"></nd-picking-icon>' +\n            '<nd-picking-icon className=\"mh-8\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\'\" platform=\"303\"></nd-picking-icon>' +\n            '<nd-picking-icon className=\"mh-8\" ng-if=\"row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\'\" platform=\"301\"></nd-picking-icon>' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'TransferOrderDelivery\\') ? (\"PICKING.TRANSFER_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'SaleOrderDelivery\\') ? (\"PICKING.SALE_ORDER_DELIVERY\" | translate) : null}}' +\n            '{{(row.treeNode.children[0].row.entity.order_type === \\'PosOrderFulfillment\\') ? (\"PICKING.POS_ORDER_FULFILLMENT\" | translate) : null}}' +\n            ' </div>' +\n            '<div ng-if=\"row.treeNode.children[0].row.entity.platform && row.groupHeader\" layout=\"row\" layout-align=\"start center\">' +\n            '<img class=\"thumbnail-40 mr-8 w-32\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.treeNode.children[0].row.entity.platform}}.svg\">' +\n            '<div>{{row.treeNode.children[0].row.entity.site}}</div>' +\n            '</div>',\n          cellClass: 'cell-padding no-wrap'\n        },\n        ship: {\n          displayName: '',\n          headerTooltip: '',\n          field: 'ship',\n          permission: true,\n          visible: true,\n          width: 50,\n          enableSorting: false,\n          enableHiding: false,\n          cellTemplate: createShipActionTemplate(),\n          cellClass: 'cell-right'\n        }\n      };\n    }\n\n    function createShipActionTemplate() {\n      return '<div ng-if=\"!row.groupHeader\">' +\n        '<md-menu md-position-mode=\"target-right target\">' +\n        '<md-button class=\"md-icon-button\" ng-click=\"$mdMenu.open($event)\">' +\n        '<md-icon class=\"icon-dots-vertical font-size-24\"></md-icon>' +\n        '</md-button>' +\n        '<md-menu-content width=\"4\">' +\n        '<md-menu-item>' +\n        '<md-button ng-disabled=\"grid.appScope.$parent.vm.loading\" ng-click=\"grid.appScope.$parent.vm.markAsShipped([row.entity.packing_order.id])\">' +\n        '<div flex layout=\"row\" layout-align=\"center center\">' +\n        '<md-progress-circular ng-if=\"grid.appScope.vm.idRowCreated===row.entity.id\" md-diameter=\"12px\"></md-progress-circular>' +\n        '<span translate=\"PACKING.MARK_AS_SHIPPED\"></span>' +\n        '</div>' +\n        '</md-button>' +\n        '</md-menu-item>' +\n        '</md-menu-content>' +\n        '</md-menu>' +\n        '</div>';\n    }\n\n  }\n\n})\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPickingPackingActionsController', ndPickingPackingActionsController)\n    .directive('ndPickingPackingActions', ndPickingPackingActions);\n\n  /** @ngInject */\n  function ndPickingPackingActions() {\n    return {\n      restrict: 'E',\n      scope: {\n        navItem: '=',\n        anySelection: '=',\n        canCreatePackingOrder: '=',\n        creating: '='\n      },\n      controller: 'ndPickingPackingActionsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/picking-packing/directives/nd-picking-packing-actions/nd-picking-packing-actions.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPickingPackingActionsController(\n    $scope\n  ) {\n\n    // Data\n    var vm = this;\n\n    vm.createPickingOrder = createPickingOrder;\n    vm.createPackingOrder = createPackingOrder;\n    vm.openShippingPackingDialog = openShippingPackingDialog;\n    vm.showPackingButton = showPackingButton;\n    vm.showPickingButton = showPickingButton;\n    vm.showShippingButton = showShippingButton;\n\n    // Functions\n    function createPickingOrder() {\n      $scope.$emit('ndPickingPackingActions::generatePickingOrder');\n    }\n\n    function createPackingOrder() {\n      $scope.$emit('ndPickingPackingActions::generatePackingOrder');\n    }\n\n    function openShippingPackingDialog() {\n      $scope.$emit('ndPickingPackingActions::openShippingPackingDialog');\n    }\n\n    function showPackingButton() {\n      return $scope.navItem === 'to-prepare' || $scope.navItem === 'picked';\n    }\n\n    function showPickingButton() {\n      return $scope.navItem === 'to-prepare';\n    }\n\n    function showShippingButton() {\n      return $scope.navItem === 'packed';\n    }\n  }\n})();\n\n(function () {\n\n  'use strict';\n\n  angular\n    .module('app.accounting',\n      [\n        'nvd3',\n        'datatables'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n\n    $stateProvider\n\n      .state('app.accounting', {\n        abstract: true,\n        url: '/accounting'\n      })\n\n      /**\n       * INVOICES LIST\n       */\n\n      .state('app.accounting.invoices', {\n        url: '/invoices',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/accounting/views/invoices/invoices.html',\n            controller: 'InvoicesController as vm'\n          }\n        },\n        resolve: {\n          SerialNumberTypesData: function(apiResolver, api){\n            return apiResolver.resolve('inventories.serialNumberTypes@get', {types:'90'});\n          },\n          InvoiceType: function(INVOICE_TYPES){\n            return INVOICE_TYPES.INVOICE;\n          }\n        },\n        bodyClass: 'accounting-invoices'\n      })\n\n      /**\n       * INVOICE DETAILS\n       */\n\n      .state('app.accounting.invoices.invoice', {\n        url      : '/:id',\n        views    : {\n            'content@app': {\n                templateUrl: 'app/main/apps/accounting/views/invoice/invoice.html',\n                controller : 'InvoiceController as vm'\n            }\n        },\n        resolve  : {\n          InvoiceData: function (apiResolver, $stateParams){\n            if ($stateParams.id == 'new'){\n              return null;\n            }else{\n              return apiResolver.resolve('accounting.invoices@get', {'id': $stateParams.id});\n            }\n          },\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', {types:'90,93'});\n          },\n          ConfigurationData: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          TaxesData: function (apiResolver) {\n            return apiResolver.resolve('accounting.taxes@get');\n          },\n          PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          },\n          FiscalAddressesData: function (apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list');\n          },\n          InvoiceType: function(INVOICE_TYPES){\n            return INVOICE_TYPES.INVOICE;\n          },\n          PricingTiers: function (apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }\n        },\n        bodyClass: 'accounting-invoice printable'\n    })\n\n    /**\n       * PROFORMAS LIST\n       */\n\n      .state('app.accounting.proformas', {\n        url: '/proformas',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/accounting/views/invoices/invoices.html',\n            controller: 'InvoicesController as vm'\n          }\n        },\n        resolve: {\n          SerialNumberTypesData: function(apiResolver, api){\n            return apiResolver.resolve('inventories.serialNumberTypes@get', {types:'91'});\n          },\n          InvoiceType: function(INVOICE_TYPES){\n            return INVOICE_TYPES.PROFORMA;\n          }\n        },\n        bodyClass: 'accounting-invoices'\n      })\n\n      /**\n       * PROFORMA DETAILS\n       */\n\n      .state('app.accounting.proformas.proforma', {\n        url      : '/:id',\n        views    : {\n            'content@app': {\n                templateUrl: 'app/main/apps/accounting/views/invoice/invoice.html',\n                controller : 'InvoiceController as vm'\n            }\n        },\n        resolve  : {\n          InvoiceData: function (apiResolver, $stateParams){\n            if ($stateParams.id == 'new'){\n              return null;\n            }else{\n              return apiResolver.resolve('accounting.invoices@get', {'id': $stateParams.id});\n            }\n          },\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', {types:'91'});\n          },\n          ConfigurationData: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          TaxesData: function (apiResolver) {\n            return apiResolver.resolve('accounting.taxes@get');\n          },\n          PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          },\n          FiscalAddressesData: function (apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list');\n          },\n          InvoiceType: function(INVOICE_TYPES){\n            return INVOICE_TYPES.PROFORMA;\n          },\n          PricingTiers: function (apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }\n        },\n        bodyClass: 'accounting-invoice printable'\n      })\n\n      /**\n       * QUOTES LIST\n       */\n\n      .state('app.accounting.quotes', {\n        url: '/quotes',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/accounting/views/invoices/invoices.html',\n            controller: 'InvoicesController as vm'\n          }\n        },\n        resolve: {\n          SerialNumberTypesData: function(apiResolver, api){\n            return apiResolver.resolve('inventories.serialNumberTypes@get', {types:'92'});\n          },\n          InvoiceType: function(INVOICE_TYPES){\n            return INVOICE_TYPES.QUOTE;\n          }\n        },\n        bodyClass: 'accounting-invoices'\n      })\n\n      /**\n       * QUOTE DETAILS\n       */\n\n      .state('app.accounting.quotes.quote', {\n        url      : '/:id',\n        views    : {\n            'content@app': {\n                templateUrl: 'app/main/apps/accounting/views/invoice/invoice.html',\n                controller : 'InvoiceController as vm'\n            }\n        },\n        resolve  : {\n          InvoiceData: function (apiResolver, $stateParams){\n            if ($stateParams.id == 'new'){\n              return null;\n            }else{\n              return apiResolver.resolve('accounting.invoices@get', {'id': $stateParams.id});\n            }\n          },\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@get', {types:'92'});\n          },\n          ConfigurationData: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          TaxesData: function (apiResolver) {\n            return apiResolver.resolve('accounting.taxes@get');\n          },\n          PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          },\n          FiscalAddressesData: function (apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list');\n          },\n          InvoiceType: function(INVOICE_TYPES){\n            return INVOICE_TYPES.QUOTE;\n          },\n          PricingTiers: function (apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }\n        },\n        bodyClass: 'accounting-invoice printable'\n      })\n\n       /**\n       * PAYMENTS LIST\n       */\n\n      .state('app.accounting.payments', {\n        url: '/payments',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/accounting/views/payments/payments.html',\n            controller: 'PaymentsController as vm'\n          }\n        },\n        resolve: {\n\n        },\n        bodyClass: 'accounting-payments'\n      })\n\n      ;\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/accounting');\n\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.accounting')\n    .controller('SelectSerialNumberTypeDialogControllerPickings', SelectSerialNumberTypeDialogControllerPickings);\n  /** @ngInject */\n  function SelectSerialNumberTypeDialogControllerPickings($scope, $mdDialog, SerialNumberTypesData, SERIAL_NUMBER_TYPES, api, inventoryConfigurationId, serialNumberTypeType) {\n    // Data\n    var vm = this;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.serialNumberType = null;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // props\n    vm.inventoryConfigurationId = inventoryConfigurationId;\n    vm.serialNumberTypeType = serialNumberTypeType;\n    // Methods\n    vm.select = select;\n    vm.cancel = cancel;\n    function cancel() {\n      $mdDialog.cancel();\n    }\n    function select() {\n      var data = getData();\n      if (vm.serialNumberType) {\n        api.inventories.inventoryConfiguration.patch(\n          data, function () {\n            $mdDialog.hide(vm.serialNumberType);\n          }\n        );\n      }\n    }\n\n    function getData() {\n      var data = {};\n      data.id = vm.inventoryConfigurationId;\n      if (vm.serialNumberTypeType == SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PACKING_ORDER) {\n        data.packing_order_default_serial_number_type_id = vm.serialNumberType;\n      }\n      return data;\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('FinishPickingOrderDialogController', FinishPickingOrderDialogController);\n\n  /** @ngInject */\n  function FinishPickingOrderDialogController($scope, $mdDialog, $filter, totalPicked, totalAmount, isPacking, isShipping) {\n    var vm = this;\n\n    // DATA\n    vm.totalPicked = totalPicked;\n    vm.totalAmount = totalAmount;\n    vm.isPacking = isPacking || false;\n    vm.isShipping = isShipping || false;\n\n    vm.translationData = {\n      pickedAmount: vm.totalPicked,\n      totalAmount: vm.totalAmount\n    };\n\n    vm.mainTitle = getTitle();\n    vm.colorBadgeClass = getColorClass();\n    vm.statusName = getStatusName();\n\n    vm.allPicked = false;\n\n    // METHODS\n    vm.finish = finish;\n    vm.cancel = cancel;\n\n    function finish() {\n      $mdDialog.hide(vm.allPicked);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getTitle() {\n      if (vm.isShipping) {\n        return $filter('translate')('PICKING.MARK_AS_SHIPPED');\n      } else if (vm.isPacking) {\n        return $filter('translate')('PICKING.MARK_AS_PACKED');\n      } else {\n        return $filter('translate')('PICKING.MARK_AS_PICKED');\n      }\n    }\n\n    function getColorClass() {\n      if (vm.isShipping) {\n        return 'md-green-100-bg';\n      } else if (vm.isPacking) {\n        return 'md-blue-100-bg';\n      } else {\n        return 'md-orange-100-bg';\n      }\n    }\n\n    function getStatusName() {\n      if (vm.isShipping) {\n        return 'PACKING.SHIPPED';\n      } else if (vm.isPacking) {\n        return 'PACKING.PACKED';\n      } else {\n        return 'PICKING.PICKED';\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('FinishPickingAndPackPickingOrderDialogController', FinishPickingAndPackPickingOrderDialogController);\n\n  /** @ngInject */\n  function FinishPickingAndPackPickingOrderDialogController($scope, $mdDialog, Session) {\n    var vm = this;\n\n    vm.processPacking = true;\n    vm.sendPackingOrder = getIsSendPackingOrderFromStorage();\n\n    // METHODS\n    vm.finish = finish;\n    vm.cancel = cancel;\n    vm.getIsSendPackingOrderFromStorage = getIsSendPackingOrderFromStorage;\n    vm.setIsSendPackingOrderToStorage = setIsSendPackingOrderToStorage;\n\n\n    function finish() {\n      setIsSendPackingOrderToStorage(vm.sendPackingOrder);\n      $mdDialog.hide({\n        processPacking: vm.processPacking,\n        sendPackingOrder: vm.sendPackingOrder\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getIsSendPackingOrderFromStorage() {\n      return localStorage.getItem(Session.company.id + '::isSendPackingOrder') === 'true';\n    }\n\n    function setIsSendPackingOrderToStorage(sendPackingOrder) {\n      localStorage.setItem(Session.company.id + '::isSendPackingOrder', sendPackingOrder);\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PackingProductsController', PackingProductsController);\n\n  /** @ngInject */\n  function PackingProductsController(\n    $scope,\n    UiGridService,\n    api,\n    $http,\n    PosOrderFulfillmentShippingBox,\n    HTTP_STATUS,\n    ShippingBoxesData,\n    SEARCH_MAX_LENGTH,\n    ShippingMethodsData,\n    Session,\n    SENDCLOUD_SHIPPING_METHODS,\n    $filter,\n    $mdToast,\n    $state,\n    $document,\n    PackingOrder,\n    byteArrayBufferService,\n    $mdDialog,\n    ITEM_PACKING_STATUS,\n    $timeout,\n    INTEGRATION_APP_TYPE,\n    PACKING_STATUS,\n    ERROR_CODES\n  ) {\n    var vm = this;\n    vm.packingOrder = $scope.$parent.vm.packingOrder;\n    $scope.$parent.vm.currentNavItem = 'products';\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.ITEM_STATUS = ITEM_PACKING_STATUS;\n\n    vm.generatingDelivieresPdf = false;\n    vm.deliveryUrl = '';\n    vm.PACKING_ORDER_STATUS = PACKING_STATUS;\n\n    vm.selected = [];\n    vm.gridApi = null;\n\n    vm.showSendcloudSettings = true;\n    vm.shippingBoxes = ShippingBoxesData.results;\n    vm.sendcloudShippingMethods = [];\n\n    vm.selectedSendcloudShippingMethod = null;\n    vm.sendcloudOptions = {\n      selectedSendcloudShippingMethod: null,\n      printLabelsAutomatically: false,\n      printDeliveriesAutomatically: false,\n      volumeWeight: false\n    };\n    vm.shippingMethodSearch = '';\n\n    vm.generatingOrderPdf = false;\n    vm.cancelParcel = false;\n\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      filters: {},\n      nonStorableFilters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    $scope.$watch(\n      function() {\n        return vm.packingOrder;\n      },\n      function(newVal) {\n        $scope.$parent.vm.packingOrder = newVal;\n      },\n      true\n    );\n\n    vm.defaultShippingBox = getDefaultShippingBox();\n\n    vm.hasSendcloud = Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n\n\n    vm.toggleVisibilitySendcloudSettings = toggleVisibilitySendcloudSettings;\n    vm.createShippingBox = createShippingBox;\n    vm.removeShippingBox = removeShippingBox;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.bulkEditStatus = bulkEditStatus;\n    vm.checkAndFinishDialog = checkAndFinishDialog;\n    vm.storeShippingMethod = storeShippingMethod;\n    vm.restoreShippingMethod = restoreShippingMethod;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.downloadLabels = $scope.$parent.vm.downloadLabels;\n    vm.handleCancel = handleCancel;\n    vm.printDeliveriesPdf = printDeliveriesPdf;\n    vm.getGridProductsPage = getGridProductsPage;\n\n    init();\n\n    vm.createShippingBoxWithProductVariant = $scope.$on('ndPackingProductsList::createShippingBoxWithProductVariant', function(event, data) {\n      createShippingBox(true, null, data);\n    });\n\n    function init() {\n      if (vm.hasSendcloud) {\n        getSendcloudShippingMethods();\n      }\n    }\n\n    function getGridProductsPage() {\n      $scope.$broadcast('ndGrid::reload');\n    }\n\n    function barcodeListenerCallback(barcode) {\n      api.inventories.pickingPackingPackingOrderProductVariants.update(\n        {\n          option: 'update-status-by-barcode',\n          barcode: barcode,\n          packing_order: vm.packingOrder.id\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            updateShippingBox(response.pof_shipping_box);\n            updatePackingOrderProductVariant(response.packing_order_product_variant_id);\n            if (vm.packingOrder.isPendingToPack()) {\n              updatePackingOrder();\n            }\n            checkPrintLabelsAutomatically(response.is_totally_packed);\n            // todo: mdtoast with action that refresh list to the page where the product is\n          } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SCAN_AND_GO.BARCODE_NOT_FOUND')).position('top right'));\n            Audio.playErrorSound();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function updateShippingBox(pofShippingBox) {\n      if (!pofShippingBox) {\n        return;\n      }\n      pofShippingBox = new PosOrderFulfillmentShippingBox(pofShippingBox);\n      vm.packingOrder.packingOrderShippingBoxes.push(pofShippingBox);\n      vm.gridApi.grid.rows.forEach(function(row) {\n        if (row.entity.packed == vm.ITEM_STATUS.PACKED && !row.entity.packing_order_shipping_box) {\n          row.entity.packing_order_shipping_box = pofShippingBox.id;\n        }\n      });\n    }\n\n    function updatePackingOrderProductVariant(packingOrderProductVariantId) {\n      if (!packingOrderProductVariantId) {\n        return;\n      }\n      vm.gridApi.grid.rows.find(function(row) {\n        if (row.entity.id === packingOrderProductVariantId) {\n          row.entity.packed = vm.ITEM_STATUS.PACKED;\n        }\n      });\n    }\n\n    function toggleVisibilitySendcloudSettings() {\n      vm.showSendcloudSettings = !vm.showSendcloudSettings;\n    }\n\n\n    function getDefaultShippingBox() {\n      if (vm.shippingBoxes.length === 0) {\n        return null;\n      }\n      if (vm.shippingBoxes.length === 1) {\n        return vm.shippingBoxes[0];\n      }\n      return vm.defaultShippingBox || vm.shippingBoxes[0];\n    }\n\n    function storeShippingMethod() {\n      localStorage.setItem(Session.company.id + '::PackingProductsController::sendcloudOptions', JSON.stringify(vm.sendcloudOptions));\n    }\n\n    function restoreShippingMethod() {\n      var sendcloudOptions = JSON.parse(localStorage.getItem(Session.company.id + '::PackingProductsController::sendcloudOptions'));\n      if (sendcloudOptions) {\n        vm.sendcloudOptions = sendcloudOptions;\n      }\n    }\n\n    function createShippingBox(autoAssignToAllProducts, shippingBox, packingOrderProductVariant) {\n      if (vm.creatingShippingBox) {\n        return;\n      }\n      vm.creatingShippingBox = true;\n      var shippingBoxId = vm.defaultShippingBox ? vm.defaultShippingBox.id : null;\n      if (shippingBox) {\n        shippingBoxId = shippingBox.id;\n      }\n      api.inventories.pickingPackingPackingOrderShippingBoxes.save(\n        new PosOrderFulfillmentShippingBox({\n          shipping_box: shippingBoxId,\n          packing_order: vm.packingOrder.id\n        }), function(shippingBox, fn, status) {\n          vm.creatingShippingBox = false;\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.packingOrder.packingOrderShippingBoxes.push(shippingBox);\n            if (autoAssignToAllProducts) {\n              vm.gridApi.grid.rows.forEach(function(row) {\n                if (row.entity.packed == vm.ITEM_STATUS.PACKED && !row.entity.packing_order_shipping_box) {\n                  row.entity.packing_order_shipping_box = shippingBox.id;\n                }\n              });\n            }\n            if (packingOrderProductVariant) {\n              packingOrderProductVariant.packing_order_shipping_box = shippingBox.id;\n              $scope.$broadcast('PackingProductsController::shippingBoxCreated', packingOrderProductVariant);\n            }\n          }\n        });\n    }\n\n    function checkPrintLabelsAutomatically(isTotallyPacked) {\n      if (!vm.sendcloudOptions.printLabelsAutomatically || !isTotallyPacked) {\n        return;\n      }\n      tagAndFinishSendcloud(true);\n    }\n\n    function removeShippingBox(pofsb) {\n      if (pofsb.removing) {\n        return;\n      }\n\n      pofsb.removing = true;\n      api.inventories.pickingPackingPackingOrderShippingBoxes.delete(\n        {\n          id: pofsb.id\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            pofsb.removing = false;\n            var instanceIndex = vm.packingOrder.packingOrderShippingBoxes.findIndex(function(sb) {\n              return sb.id === pofsb.id;\n            }, 1);\n            if (instanceIndex !== -1) {\n              vm.packingOrder.packingOrderShippingBoxes.splice(instanceIndex, 1);\n            }\n            vm.gridApi.grid.rows.forEach(function(row) {\n              if (row.entity.packing_order_shipping_box == pofsb.id) {\n                row.entity.packing_order_shipping_box = null;\n              }\n            });\n          }\n        });\n    }\n\n    function getSendcloudShippingMethods() {\n      var url = api.baseUrl + 'inventories/picking-packing/packing-orders/' + vm.packingOrder.id + '/get-external-shipping-methods';\n      $http.get(url).then(function(response) {\n        if (response.status !== HTTP_STATUS.HTTP_200_OK) {\n          var errorData = response.data || {};\n          errorData.status = response.status;\n          showGetShippingMethodsError(errorData);\n          return;\n        }\n\n        var shippingMethods = response.data;\n        if (!angular.isArray(shippingMethods)) {\n          shippingMethods = [];\n        }\n        shippingMethods.every(function(shippingMethod) {\n          if (shippingMethod.id === SENDCLOUD_SHIPPING_METHODS.SENDCLOUD_UNSTAMPED_LETTER) {\n            shippingMethod.name = $filter('translate')('SCAN_AND_GO.' + SENDCLOUD_SHIPPING_METHODS[shippingMethod.id]);\n            return true;\n          }\n          return false;\n        });\n        vm.sendcloudShippingMethods = shippingMethods;\n        restoreShippingMethod();\n      }, function(errorResponse) {\n        var errorData = errorResponse && errorResponse.data ? errorResponse.data : errorResponse;\n        showGetShippingMethodsError(errorData);\n      });\n    }\n\n    function showErrorDialog(message) {\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .title($filter('translate')('PACKING.SENDCLOUD_ERROR_TITLE'))\n          .textContent(message)\n          .ok($filter('translate')('GENERAL.CLOSE'))\n      );\n    }\n\n    function getTranslatedError(errorCode, defaultTranslationKey) {\n      var translationKey = errorCode ? ('ERRORS.' + errorCode) : defaultTranslationKey;\n      var translatedError = $filter('translate')(translationKey);\n      if (translatedError === translationKey) {\n        translatedError = $filter('translate')(defaultTranslationKey);\n        if (translatedError === defaultTranslationKey) {\n          translatedError = errorCode;\n        }\n      }\n      return translatedError;\n    }\n\n    function appendPackingOrderMessage(errorMessage, response) {\n      var packingOrderAutocode = response && response.packing_order_autocode;\n      if (packingOrderAutocode) {\n        var orderMessage = $filter('translate')('PACKING.PACKING_ORDER_MISSING_ADDRESS', { order: packingOrderAutocode });\n        errorMessage = errorMessage + ' ' + orderMessage;\n      }\n      return errorMessage;\n    }\n\n    function showGetShippingMethodsError(response) {\n      var errorCode = response && response.error ? response.error : null;\n      var translatedError = getTranslatedError(errorCode, 'PACKING.ERROR_GETTING_SEND_CLOUD_SHIPPING_METHODS');\n      translatedError = appendPackingOrderMessage(translatedError, response);\n      showErrorDialog(translatedError);\n    }\n\n    function showSendcloudFinishError(response) {\n      var errorCode = response && response.error ? response.error : null;\n      var translatedError = getTranslatedError(errorCode);\n\n      if (errorCode === ERROR_CODES.ERROR_09008_MISSING_WAREHOUSE_CONTACT_PERSON) {\n       translatedError = appendPackingOrderMessage(translatedError, response);\n        var dialog = $mdDialog.confirm()\n          .clickOutsideToClose(true)\n          .title($filter('translate')('PACKING.SENDCLOUD_ERROR_TITLE'))\n          .textContent(translatedError)\n          .ok($filter('translate')('GENERAL.CLOSE'))\n          .cancel($filter('translate')('APPS.SETTING'));\n\n        $mdDialog.show(dialog).then(\n          angular.noop,\n          function() {\n            $state.go('app.inventory.warehouses.warehouse.details', { id: vm.packingOrder.destination.id });\n          }\n        );\n      } else {\n        showErrorDialog(translatedError);\n      }\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function printLabels(bytes) {\n      // todo: this should be a service...\n      var b64 = '';\n      for (var i = 0; bytes[i] !== undefined; i++) {\n        b64 += bytes[i];\n      }\n\n      if (vm.sendcloudOptions.printLabelsAutomatically) {\n        $scope.$emit('ndPrinter::printSendcloudLabel', {\n          b64: b64\n        });\n        // Otherwise we just open it in a new tab and download the file\n      } else {\n        var styles = '@media print { @page {size: auto; margin:0; }}';\n        var embedElement = '<embed width=\"100%\" height=\"100%\" type=\"application/pdf\" src=\"data:application/pdf;base64,' + b64 + '\" />';\n        var popupWindow = window.open('', '_blank', 'width=1000,height=700,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');\n        popupWindow.document.write('<html><head><style>' + styles + '</style></head><body onload=\"window.print()\">' + embedElement + '</body></html>');\n        popupWindow.document.close();\n      }\n    }\n\n    function tagAndFinishSendcloud(allPacked) {\n      api.inventories.pickingPackingPackingOrders.update(\n        {\n          id: vm.packingOrder.id,\n          option: 'finish',\n          print_labels: true,\n          sendcloud_shipping_method_id: vm.sendcloudOptions.selectedSendcloudShippingMethod,\n          all_packed: allPacked,\n          volumetric_weight: vm.sendcloudOptions.volumetricWeight,\n          print_deliveries: vm.sendcloudOptions.printDeliveriesAutomatically\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.printingSendcloudLabels = false;\n            vm.saving = false;\n            vm.deliveryUrl = '';\n            printLabels(response);\n            updatePackingOrder();\n          } else {\n            showSendcloudFinishError(response);\n          }\n          $scope.$parent.vm.finishing = false;\n        }\n      );\n    }\n\n    function bulkEditStatus(packed) {\n      var selectedItems = [];\n      vm.gridApi.selection.getSelectedRows().forEach(function(row) {\n        if (row.packed !== packed) {\n          selectedItems.push(row.id);\n        }\n      });\n      if (selectedItems.length === 0) {\n        return;\n      }\n\n      api.inventories.pickingPackingPackingOrderProductVariants.update(\n        {\n          option: 'bulk-update',\n          ids: selectedItems,\n          packed: packed,\n          packing_order: vm.packingOrder.id\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.gridApi.selection.getSelectedRows().forEach(function(row) {\n              row.packed = packed;\n            });\n            if (vm.packingOrder.status === vm.PACKING_ORDER_STATUS.PENDING_TO_PACK) {\n              updatePackingOrder();\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function updatePackingOrder() {\n      api.inventories.packingOrder.get(\n        {\n          id: vm.packingOrder.id\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.packingOrder = new PackingOrder(response);\n          }\n        }\n      );\n    }\n\n    function pullingPdfFileUrl() {\n      api.inventories.pickingPackingPackingOrder.get(\n        {\n          id: vm.packingOrder.id,\n          option: 'check-pdf-status'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.deliveryUrl = response.url;\n            vm.generatingDelivieresPdf = false;\n          } else if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $timeout(function() {\n              pullingPdfFileUrl();\n            }, 5000);\n          }\n        }\n      );\n    }\n\n    function printDeliveriesPdf() {\n      if (vm.deliveryUrl) {\n        var link = document.createElement('a');\n        link.href = vm.deliveryUrl;\n        link.download = vm.packingOrder.autocode + '.pdf';\n        link.dispatchEvent(new MouseEvent('click'));\n      } else {\n        vm.generatingDelivieresPdf = true;\n        api.inventories.pickingPackingPackingOrder.get(\n          {\n            id: vm.packingOrder.id,\n            option: 'create-deliveries-pdf-file'\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              pullingPdfFileUrl();\n            }\n          }\n        );\n      }\n    }\n\n    function checkAndFinishDialog(withSendcloud) {\n      $scope.$parent.vm.finishing = true;\n      var totalPacked = 0;\n      var total = 0;\n      api.inventories.pickingPackingPackingOrders.get(\n        {\n          id: vm.packingOrder.id,\n          option: 'get-count'\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            totalPacked = response.total_packed;\n            total = response.total;\n            openFinishPackingDialog(totalPacked, total, withSendcloud);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function openFinishPackingDialog(totalPacked, total, withSendcloud) {\n      if (totalPacked !== total) {\n        $mdDialog.show({\n          controller: 'FinishPackingOrderDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/packing/dialogs/finish-packing-order-dialog/finish-packing-order-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          focusOnOpen: false,\n          locals: {\n            totalPacked: totalPacked,\n            totalAmount: total\n          }\n        }).then(function(allPacked) {\n          if (withSendcloud) {\n            tagAndFinishSendcloud(allPacked);\n          } else {\n            finishPacking(allPacked);\n          }\n        }, function() {\n          $scope.$parent.vm.finishing = false;\n        });\n      } else {\n        if (withSendcloud) {\n          tagAndFinishSendcloud(true);\n        } else {\n          finishPacking(true);\n        }\n      }\n\n    }\n\n    function finishPacking(allPacked) {\n      $scope.$parent.vm.finishing = true;\n      api.inventories.pickingPackingPackingOrders.update(\n        {\n          id: vm.packingOrder.id,\n          option: 'finish',\n          all_packed: allPacked\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.deliveryUrl = '';\n            vm.packingOrder = new PackingOrder(response.packing_order);\n            $scope.$broadcast('ndGrid::filtersChanged');\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PACKING.PACKING_SUCCESSFUL')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          $scope.$parent.vm.finishing = false;\n        }\n      );\n    }\n\n    function checkSendcloudOptions() {\n      return !vm.sendcloudOptions.selectedSendcloudShippingMethod;\n    }\n\n    function cancelParcel() {\n      api.inventories.pickingPackingPackingOrder.save(\n        { id: vm.packingOrder.id, option: 'cancel-parcels' },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.CANCEL_PREPARATION_SUCCESS')).position('top right'));\n            for (var i = 0; i < vm.packingOrder.packingOrderShippingBoxes.length; i++) {\n              vm.packingOrder.packingOrderShippingBoxes[i].packingOrderSendcloudData = null;\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          $scope.$parent.vm.finishing = false;\n          vm.cancelParcel = false;\n        }\n      );\n    }\n\n    function handleCancel() {\n      var title = $filter('translate')('ORDERS.CANCEL_PREPARATION');\n      var message = $filter('translate')('ORDERS.CANCEL_PREPARATION_MSG');\n      var okButton = $filter('translate')('ORDERS.CANCEL_PREPARATION_BUTTON');\n      showCancelDialog(cancelParcel, title, message, okButton);\n    }\n\n    function showCancelDialog(callback, title, message, ok) {\n      var confirm = $mdDialog.confirm()\n        .title(title)\n        .htmlContent(message)\n        .ok(ok || title)\n        .cancel($filter('translate')('GENERAL.CLOSE'));\n      $mdDialog.show(confirm).then(function() {\n        $scope.$parent.vm.finishing = true;\n        vm.cancelParcel = true;\n        callback();\n      }, function() {\n      });\n    }\n\n    $scope.$on('tagAndFinishWithSendcloud', function() {\n      if (checkSendcloudOptions()) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING_AND_PACKING.SENDCLOUD_INFORMATION_MUST_BE_COMPLETED')).position('top right'));\n        vm.showSendcloudSettings = true;\n        return;\n      }\n      checkAndFinishDialog(true);\n    });\n\n    $scope.$on('generateLabels', function() {\n      if (checkSendcloudOptions()) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING_AND_PACKING.SENDCLOUD_INFORMATION_MUST_BE_COMPLETED')).position('top right'));\n        vm.showSendcloudSettings = true;\n        return;\n      }\n      generateLabels();\n    });\n\n    function generateLabels() {\n      $scope.$parent.vm.finishing = true;\n      api.inventories.pickingPackingPackingOrders.update(\n        {\n          id: vm.packingOrder.id,\n          option: 'generate-labels',\n          sendcloud_shipping_method_id: vm.sendcloudOptions.selectedSendcloudShippingMethod,\n          volumetric_weight: vm.sendcloudOptions.volumetricWeight,\n          print_deliveries: vm.sendcloudOptions.printDeliveriesAutomatically\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.printingSendcloudLabels = false;\n            printLabels(response);\n            updatePackingOrder();\n          } else if (response.error) {\n            var errorText = 'ERRORS.' + response.error;\n            var translatedError = $filter('translate')(errorText);\n            if (response.error == ERROR_CODES.ERROR_09008_MISSING_WAREHOUSE_CONTACT_PERSON) {\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent(translatedError)\n                  .action($filter('translate')('APPS.SETTING'))\n                  .highlightAction(true)\n                  .position('top right')\n              ).then(function(clicked) {\n                if (clicked === 'ok') {\n                  $state.go('app.inventory.warehouses.warehouse.details', { id: vm.packingOrder.destination.id });\n                }\n              });\n            } else {\n              $mdToast.show($mdToast.simple().textContent(translatedError).position('top right').hideDelay(7000));\n            }\n          }\n          $scope.$parent.vm.finishing = false;\n        }\n      );\n    }\n\n    $scope.$on('ndGrid::selectedRowsChanged', function(event, data) {\n      vm.selected = data;\n    });\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function(event, gridApi) {\n      vm.gridApi = gridApi;\n    });\n\n    $scope.$on('$destroy', function() {\n      gridApiInitializedUnwatch();\n    });\n\n    $scope.$on('PackingController::finishPacking', function(event) {\n      checkAndFinishDialog(false);\n    });\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PackingDetailsController', PackingDetailsController);\n\n  /** @ngInject */\n  function PackingDetailsController($scope, SEARCH_MAX_LENGTH, api, $mdToast, $filter, PackingActivity, $document) {\n    var vm = this;\n    vm.packingOrder = $scope.$parent.vm.packingOrder;\n    vm.usersList = $scope.$parent.vm.usersList;\n    $scope.$parent.vm.currentNavItem = 'details';\n    vm.isLoading = false;\n\n    vm.searchUserText = '';\n\n    vm.updatePackedBy = updatePackedBy;\n    vm.onSelectorOpen = onSelectorOpen;\n\n    function updatePackedBy() {\n      vm.isLoading = true;\n      api.inventories.packingActivity.update(\n        vm.packingOrder.packingActivity.toJson(),\n        function (response, callback, status) {\n          if (status === 200) {\n            vm.packingOrder.packingActivity = new PackingActivity(response);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.isLoading = false;\n        }\n      );\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ShippingDialogController', ShippingDialogController);\n\n  /** @ngInject */\n  function ShippingDialogController($scope, $mdDialog, $filter, autocodes, hasParcels) {\n    var vm = this;\n\n    // DATA\n    vm.autocodes = autocodes;\n    vm.hasParcels = hasParcels;\n    // join list of strings into a single string separate with , except las value\n    vm.autocodesString = vm.autocodes.map(function (item) {\n      return item;\n    }).join(', ');\n    vm.translationData = {\n      autocodes: vm.autocodesString\n    };\n\n    // METHODS\n    vm.markAsShipped = markAsShipped;\n    vm.cancel = cancel;\n\n\n    function markAsShipped() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('FinishPackingOrderDialogController', FinishPackingOrderDialogController);\n\n  /** @ngInject */\n  function FinishPackingOrderDialogController($scope, $mdDialog, $filter, totalPacked, totalAmount) {\n    var vm = this;\n\n    // DATA\n    vm.totalPacked = totalPacked;\n    vm.totalAmount = totalAmount;\n\n    vm.translationData = {\n      packedAmount: vm.totalPacked,\n      totalAmount: vm.totalAmount\n    };\n\n    vm.mainTitle = getTitle();\n    vm.colorBadgeClass = getColorClass();\n    vm.statusName = getStatusName();\n\n    vm.allPicked = false;\n\n    // METHODS\n    vm.finish = finish;\n    vm.cancel = cancel;\n\n\n    function finish() {\n      $mdDialog.hide(vm.allPicked);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function getTitle() {\n      return $filter('translate')('PICKING.MARK_AS_PACKED');\n    }\n\n    function getColorClass() {\n      return 'md-blue-100-bg';\n    }\n\n    function getStatusName() {\n      return 'PACKING.PACKED';\n    }\n\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockReplenishmentsController', LowStockReplenishmentsController);\n\n  /** @ngInject */\n  function LowStockReplenishmentsController($scope, $mdDialog, $filter, $state, ConfigurationData) {\n    // Data\n    var vm = this;\n    vm.currentNavItem = \"\";\n    $scope.$parent.vm.currentNavItem = 'replenishments';\n    vm.inventoryConfiguration = ConfigurationData.results[0];\n\n    // Methods\n    vm.openAnalysisInformationDialog = openAnalysisInformationDialog;\n\n    function openAnalysisInformationDialog() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('LOW_STOCK.ANALYSIS_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('LOW_STOCK.ANALYSIS_DIALOG_BODY', {\n          analysisPeriodDays: vm.inventoryConfiguration.analysis_period_days,\n          orderFrequency: vm.inventoryConfiguration.order_frequency_days,\n          replenishmentWarehouse: vm.inventoryConfiguration.replenishment_warehouse_name\n        }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('LOW_STOCK.GO_TO_CONFIGURATION'))\n        .cancel($filter('translate')('GENERAL.CLOSE'));\n\n      $mdDialog.show(confirm).then(function () {\n          $state.go('app.inventory.configuration.stocks_optimization');\n        }, function () {\n          // Cancel\n        }\n      );\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('LowStockPurchasesController', LowStockPurchasesController);\n\n  /** @ngInject */\n  function LowStockPurchasesController($scope, $mdDialog, $filter, $state) {\n    // Data\n    var vm = this;\n    vm.currentNavItem = \"\";\n    $scope.$parent.vm.currentNavItem = 'purchases';\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductLabelDesignCardController', ndProductLabelDesignCardController)\n    .directive('ndProductLabelDesignCard', ndProductLabelDesignCard);\n\n  /** @ngInject */\n  function ndProductLabelDesignCard() {\n    return {\n      restrict: 'E',\n      scope: {\n        productLabelDesigns: '=',\n        productLabelDesign: '=',\n        pricingTiers: '='\n      },\n      controller: 'ndProductLabelDesignCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/labels-generator/directives/nd-product-label-design-card/nd-product-label-design-card.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndProductLabelDesignCardController(\n    $scope,\n    $filter,\n    $state,\n    $mdSelect,\n    Session,\n    api,\n    ProductLabelDesign,\n    HTTP_STATUS) {\n\n    var vm = this;\n    var ZOOM_FACTOR = 1.5;\n\n    // Data\n    vm.hasCustomLabelFeature = !Session.hasSubscription || Session.hasFeature('inventory.labels-generator.custom-labels');\n    vm.closed = true;\n    vm.productLabelDesigns = $scope.productLabelDesigns;\n    vm.productLabelDesign = $scope.productLabelDesign;\n    vm.pricingTiers = $scope.pricingTiers;\n    vm.productLabelDesignScopeListener = null;\n    vm.previewProductVariant = {\n      code: 'SA120449',\n      sku: 'SA120449-B-40',\n      product_name: 'Demo product',\n      color: 'Black',\n      colorCode: 'B',\n      size: 'L',\n      sizeCode: '4',\n      price: 59.95,\n      barcode: '1234567890128',\n      origin_code: 'OR12345-6789-0',\n      description: 'Description',\n      description_long: 'Long description',\n      brand_name: 'Brand',\n      category_name: 'Category',\n      subcategory_name: 'Subcategory',\n      provider: 'Demo provider',\n      customText: 'Custom Text'\n    };\n    vm.fieldsClosed = true;\n    vm.layoutClosed = true;\n    vm.saving = false;\n    vm.newProductLabelDesign = new ProductLabelDesign();\n    vm.productLabelDesignBackup = angular.copy(vm.productLabelDesign);\n\n\n    // Methods\n    vm.getLabelPreviewStyle = getLabelPreviewStyle;\n    vm.getLabelRowStyle = getLabelRowStyle;\n    vm.getSheetPreviewMarginStyle = getSheetPreviewMarginStyle;\n    vm.getTableRows = getTableRows;\n    vm.getTableCols = getTableCols;\n    vm.isSkiped = isSkiped;\n    vm.getFieldFromPreviewProductVariant = getFieldFromPreviewProductVariant;\n    vm.getStyleFromPreviewProductVariant = getStyleFromPreviewProductVariant;\n    vm.getPreviewBarcodeStyle = getPreviewBarcodeStyle;\n    vm.moveFieldForward = moveFieldForward;\n    vm.moveFieldBackward = moveFieldBackward;\n    vm.layoutSelected = layoutSelected;\n    vm.saveDesign = saveDesign;\n    vm.saveAsNewDesign = saveAsNewDesign;\n    vm.onProductLabelDesignChange = onProductLabelDesignChange;\n    vm.setSkipped = setSkipped;\n    vm.upgradePlan = upgradePlan;\n    vm.getPartNumber = getPartNumber;\n    vm.getButterflyCellStyle = getButterflyCellStyle;\n    vm.getButterflyRowStyle = getButterflyRowStyle;\n\n    // Functions\n    function getLabelPreviewStyle() {\n      var labelWidth = vm.productLabelDesign.getLabelWidth();\n      var labelHeight = vm.productLabelDesign.getLabelHeight();\n      var result = 'width:' + labelWidth + 'mm; min-width:' + labelWidth + 'mm; max-width:' + labelWidth + 'mm; ';\n      result += 'height:' + labelHeight + 'mm; min-height:' + labelHeight + 'mm; max-height:' + labelHeight + 'mm; ';\n      result += 'padding: '\n        + vm.productLabelDesign.label_top_margin + 'mm '\n        + vm.productLabelDesign.label_right_margin + 'mm '\n        + vm.productLabelDesign.label_bottom_margin + 'mm '\n        + vm.productLabelDesign.label_left_margin + 'mm;';\n      return result;\n    }\n\n    function getSheetPreviewMarginStyle() {\n      return 'padding: '\n        + (vm.productLabelDesign.page_top_margin | 0) + 'px '\n        + (vm.productLabelDesign.page_right_margin | 0) + 'px '\n        + (vm.productLabelDesign.page_bottom_margin | 0) + 'px '\n        + (vm.productLabelDesign.page_left_margin | 0) + 'px !important';\n    }\n\n    function getLabelRowStyle() {\n      var width = vm.productLabelDesign.getLabelWidth(true) + 'px !important;';\n      var height = vm.productLabelDesign.getLabelHeight(true) + 'px !important;';\n      var result = '';\n      result += 'width: ' + width;\n      result += 'min-width: ' + width;\n      result += 'max-width: ' + width;\n      result += 'height: ' + height;\n      result += 'min-height: ' + height;\n      result += 'max-height: ' + height;\n      return result;\n    }\n\n\n    function getTableRows() {\n      var rows = [];\n      for (var i = 0; i < vm.productLabelDesign.rows; ++i) {\n        rows.push(i);\n      }\n      return rows;\n    }\n\n    function getTableCols() {\n      var cols = [];\n      for (var i = 0; i < vm.productLabelDesign.columns; ++i) {\n        cols.push(i);\n      }\n      return cols;\n    }\n\n    function isSkiped(row, column) {\n      return row * vm.productLabelDesign.columns + column + 1 < vm.productLabelDesign.start_at;\n    }\n\n    function getFieldFromPreviewProductVariant(field) {\n      switch (field.field_name) {\n        case 'code':\n          return vm.previewProductVariant.code;\n        case 'name':\n          return vm.previewProductVariant.product_name;\n        case 'sku':\n          return vm.previewProductVariant.sku;\n        case 'barcode_number':\n          return vm.previewProductVariant.barcode;\n        case 'color':\n          return vm.previewProductVariant.color;\n        case 'brand':\n          return vm.previewProductVariant.brand_name;\n        case 'category':\n          return vm.previewProductVariant.category_name;\n        case 'subcategory':\n          return vm.previewProductVariant.subcategory_name;\n        case 'color__code':\n          return field.custom_label + ' ' + vm.previewProductVariant.colorCode;\n        case 'color__name_code':\n          return field.custom_label + ' ' + vm.previewProductVariant.colorCode + ' - ' + vm.previewProductVariant.color;\n        case 'size':\n          return field.custom_label + ' ' + vm.previewProductVariant.size;\n        case 'size__code':\n          return field.custom_label + ' ' + vm.previewProductVariant.sizeCode;\n        case 'size__name_code':\n          return field.custom_label + ' ' + vm.previewProductVariant.sizeCode + ' - ' + vm.previewProductVariant.size;\n        case 'price':\n          var pricingTier = vm.pricingTiers.find(function(item) {\n            return item.id == vm.productLabelDesign.pricing_tier;\n          });\n\n          var currency = pricingTier && pricingTier.currency ? pricingTier.currency : Session.company.currency;\n          return field.custom_label + ' ' + $filter('price')(vm.previewProductVariant.price) + $filter('currencyCharacter')(currency);\n        case 'origin_code':\n          return vm.previewProductVariant.origin_code;\n        case 'description':\n          return vm.previewProductVariant.description;\n        case 'description_long':\n          return vm.previewProductVariant.description_long;\n        case 'variant_1_code_variant_2_name':\n          return vm.previewProductVariant.colorCode + ' ' + vm.previewProductVariant.size;\n        case 'variant_1_name_variant_2_code':\n          return vm.previewProductVariant.color + ' ' + vm.previewProductVariant.sizeCode;\n        case 'provider':\n          return vm.previewProductVariant.provider;\n        case 'custom_text':\n          return vm.previewProductVariant.customText;\n\n\n      }\n      return '';\n    }\n\n    function getStyleFromPreviewProductVariant(field) {\n      var result = '';\n\n      if (field.field_name !== 'barcode' && field.field_name !== 'spacer') {\n        result += 'font-size: ' + field.font_size + 'pt; ';\n        result += 'text-align: ' + field.text_align + '; ';\n\n        if (field.bold) {\n          result += 'font-weight: bold; ';\n        }\n        if (field.italic) {\n          result += 'font-style: italic; ';\n        }\n        if (field.underline) {\n          result += 'text-decoration: underline; ';\n        }\n      } else if (field.field_name === 'spacer') {\n        result += 'height: ' + field.spacer_height + 'mm; min-height: ' + field.spacer_height + 'mm; max-height: ' + field.spacer_height + 'mm; ';\n      }\n\n      return result;\n    }\n\n    function getPreviewBarcodeStyle() {\n      var barcode = vm.productLabelDesign.getFieldByFieldName('barcode');\n\n      var labelWidth = vm.productLabelDesign.getLabelWidth();\n      var labelHeight = vm.productLabelDesign.getLabelHeight();\n      var result = '';\n\n      if (barcode.barcode_align === 'left' || barcode.barcode_align === 'right') {\n\n        var imgHeight = labelHeight;\n        if (!barcode.barcode_height) {\n          var imgWidth = (labelWidth - vm.productLabelDesign.label_right_margin - vm.productLabelDesign.label_left_margin) * 0.2;\n          var imgHeight = labelHeight - vm.productLabelDesign.label_top_margin - vm.productLabelDesign.label_bottom_margin;\n        } else {\n          imgHeight = barcode.barcode_height;\n        }\n\n        if (barcode.barcode_vertical) {\n          var swap = angular.copy(imgHeight);\n          imgHeight = angular.copy(imgWidth);\n          imgWidth = angular.copy(swap);\n        }\n\n        result = 'width:' + imgWidth + 'mm; min-width:' + imgWidth + 'mm; max-width:' + imgWidth + 'mm; ';\n        result += 'height:' + imgHeight + 'mm; min-height:' + imgHeight + 'mm; max-height:' + imgHeight + 'mm; ';\n        result += 'position: relative; right: ' + (barcode.barcode_vertical ? imgHeight : 0) + 'mm; ';\n        result += 'transform: rotate(' + (barcode.barcode_vertical ? (barcode.barcode_align === 'left' ? 90 : 270) : 0) + 'deg); ';\n        result += 'transform-origin: center center; ';\n      } else if (barcode.barcode_align === 'top' || barcode.barcode_align === 'bottom') {\n\n        if (barcode.barcode_height) {\n          imgHeight = barcode.barcode_height;\n        }\n\n        if (barcode.barcode_vertical) {\n          var swap = angular.copy(imgHeight);\n          imgHeight = angular.copy(imgWidth);\n          imgWidth = angular.copy(swap);\n        }\n\n        result = 'width: 100%; min-width: 100%; max-width: 100%; ';\n        result += 'height:' + imgHeight + 'mm; min-height:' + imgHeight + 'mm; max-height:' + imgHeight + 'mm; ';\n        result += 'position: relative; right: ' + (barcode.barcode_vertical ? imgHeight : 0) + 'mm; ';\n        result += 'transform: rotate(' + (barcode.barcode_vertical ? (barcode.barcode_align === 'left' ? 90 : 270) : 0) + 'deg); ';\n        result += 'transform-origin: center center; ';\n      }\n      return result;\n    }\n\n    function moveFieldForward(event, index) {\n      vm.productLabelDesign.moveFieldForward(index);\n    }\n\n    function moveFieldBackward(event, index) {\n      vm.productLabelDesign.moveFieldBackward(index);\n    }\n\n    function layoutSelected() {\n      if (vm.productLabelDesign.isCustomLayout()) {\n        vm.productLabelDesign.label_top_margin = 3;\n        vm.productLabelDesign.label_bottom_margin = 3;\n      } else {\n        vm.productLabelDesign.label_top_margin = 1;\n        vm.productLabelDesign.label_bottom_margin = 1;\n      }\n    }\n\n    function onProductLabelDesignChange(previousPricingTier) {\n      if (vm.productLabelDesign === vm.newProductLabelDesign) {\n        vm.productLabelDesign = new ProductLabelDesign({\n          pricing_tier: previousPricingTier\n        });\n        vm.productLabelDesigns.push(vm.productLabelDesign);\n      } else {\n        setDefaultProductLabelDesign();\n      }\n      vm.productLabelDesignBackup = new ProductLabelDesign(vm.productLabelDesign);\n      emitProductLabelDesign();\n    }\n\n    function setDefaultProductLabelDesign() {\n      localStorage.setItem(Session.company.id + '::LabelsGeneratorController::defaultProductLabelDesignId', vm.productLabelDesign.id);\n    }\n\n    function emitProductLabelDesign() {\n      // Have to emit an event becasue the productLabelDesign is not bound to the parent controller, I don't know why\n      $scope.$emit('ndProductLabelDesignCardController::productLabelDesign', vm.productLabelDesign);\n    }\n\n    function saveDesign() {\n      if (vm.saving) {\n        return;\n      }\n      if (vm.productLabelDesign.id) {\n        update();\n      } else {\n        save();\n      }\n    }\n\n    function saveAsNewDesign() {\n      if (vm.saving) {\n        return;\n      }\n\n      var tmpProductLabelDesign = angular.copy(vm.productLabelDesign);\n      delete tmpProductLabelDesign.id;\n      tmpProductLabelDesign.fields.forEach(function(field) {\n        delete field.id;\n      });\n\n      vm.saving = true;\n      api.inventories.productLabelDesigns.save(\n        tmpProductLabelDesign,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.productLabelDesign = angular.extend(vm.productLabelDesign, new ProductLabelDesign(results));\n            vm.productLabelDesigns.push(vm.productLabelDesignBackup);\n            vm.productLabelDesignBackup = new ProductLabelDesign(vm.productLabelDesign);\n            setDefaultProductLabelDesign();\n            emitProductLabelDesign();\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function save() {\n      vm.saving = true;\n      api.inventories.productLabelDesigns.save(\n        vm.productLabelDesign,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.productLabelDesign = angular.extend(vm.productLabelDesign, new ProductLabelDesign(results));\n            setDefaultProductLabelDesign();\n            emitProductLabelDesign();\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function update() {\n      vm.saving = true;\n      api.inventories.productLabelDesigns.update(\n        vm.productLabelDesign,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.productLabelDesign = angular.extend(vm.productLabelDesign, new ProductLabelDesign(results));\n            var index = vm.productLabelDesigns.findIndex(function(productLabelDesign) {\n              return productLabelDesign.id === vm.productLabelDesign.id;\n            });\n            if (index > -1) {\n              vm.productLabelDesigns[index] = vm.productLabelDesign;\n            }\n            emitProductLabelDesign();\n          }\n          vm.saving = false;\n        }\n      );\n    }\n\n    function setSkipped(row, column) {\n      vm.productLabelDesign.setStartAt(row, column);\n    }\n\n    function upgradePlan(event) {\n      if (!vm.hasCustomLabelFeature) {\n        event.stopPropagation();\n        $state.go('app.account.upgrade_plan', {\n          source: 'inventory.labels-generator.custom-labels'\n        });\n      }\n    }\n\n    function getPartNumber(index) {\n      if (vm.productLabelDesign.page_layout === 's_butterfly' || vm.productLabelDesign.page_layout === 'c_butterfly') {\n        return [null, null, 1, 2, 3][index];\n      }\n      if (vm.productLabelDesign.page_layout === 'lc_butterfly') {\n        return [1, 2, 3, 4, 5][index];\n      }\n    }\n\n    function getButterflyCellWidth(index) {\n      var withMM = 0;\n      if (vm.productLabelDesign.page_layout === 's_butterfly' || vm.productLabelDesign.page_layout === 'c_butterfly') {\n        if (index < 2) {\n          withMM = 0;\n        } else {\n          withMM = vm.productLabelDesign.multilabel_width[index - 2];\n        }\n      }\n      else if (vm.productLabelDesign.page_layout === 'lc_butterfly') {\n        withMM = vm.productLabelDesign.multilabel_width[index];\n      }\n      return 'width: calc( withMMmm * ZOOM_FACTOR);'.replace(/withMM/g, withMM).replace(/ZOOM_FACTOR/g, ZOOM_FACTOR);\n    }\n\n    function getButterflyCellStyle(index) {\n      var style = '';\n      style += getButterflyCellWidth(index);\n      // More styles here\n      return style;\n    }\n\n    function getButterflyRowHeight(index) {\n      return 'height: calc( heightMMmm * ZOOM_FACTOR);'.replace(/heightMM/g, vm.productLabelDesign.label_height).replace(/ZOOM_FACTOR/g, ZOOM_FACTOR);\n    }\n\n    function getButterflyRowStyle(){\n      var style = '';\n      style += getButterflyRowHeight();\n      // More styles here\n      return style;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ImportProductsController', ImportProductsController);\n\n  /** @ngInject */\n  function ImportProductsController($filter, $compile, $scope, $mdDialog, $state, api, Session, DTColumnBuilder, IMPORTER_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.importationId = null;\n    vm.importationsById = {};\n    vm.dtInstance = {};\n\n    vm.statusColors = {\n      \"DONE\": \"blue-500-bg white-fg\",\n      \"IN_PROGRESS\": \"orange-500-bg white-fg\",\n      \"ENQUEUED\": \"orange-500-bg white-fg\",\n      \"VALIDATING\": \"pink-500-bg\",\n      \"PENDING_TO_VALIDATE\": \"\",\n      \"VALIDATION_DONE\": \"green-500-bg white-fg\",\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.importer.products,\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      //order: [9, 'desc'],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('file_name')\n        .notSortable()\n        .withTitle($filter('translate')('IMPORTER.FILE_NAME')),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('IMPORTER.CREATED_AT'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy hh:mm:ss');\n        }),\n      DTColumnBuilder.newColumn('updated_at')\n        .withTitle($filter('translate')('IMPORTER.UPDATED_AT'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy hh:mm:ss');\n        }),\n      DTColumnBuilder.newColumn('type')\n        .withTitle($filter('translate')('IMPORTER.TYPE'))\n        .renderWith(function (data, type, full) {\n          return $filter('translate')('IMPORTER.IMPORT_TYPE_' + data.toUpperCase());\n        }),\n      DTColumnBuilder.newColumn('total_items_in_file')\n        .withTitle($filter('translate')('IMPORTER.AMOUNT_OF_PRODUCT_VARIANTS'))\n        .renderWith(function (data, type, full) {\n          return (full.total_items || 0) + '/' + (full.total_items_in_file || 0);\n        }),\n      DTColumnBuilder.newColumn('status')\n        .withTitle($filter('translate')('IMPORTER.STATUS'))\n        .renderWith(function (data, type, full) {\n          var status = IMPORTER_STATUS[full.status];\n          var errors = '';\n          if (full.has_errors) {\n            errors = '<md-icon md-font-icon=\"icon-alert-octagon\" class=\"red-fg\"></md-icon>' +\n              '<md-tooltip md-direction=\"left\">{{\"IMPORTER.HAS_ERRORS\" | translate}}</md-tooltip>'\n          }\n          return '<text class=\"text-boxed ' + vm.statusColors[status] + '\" translate=\"IMPORTER.' + status + '\">Status</text>' + errors;\n        })\n    ];\n\n    // Methods\n    vm.showImportationDialog = showImportationDialog;\n    vm.showImportationTypeDialog = showImportationTypeDialog;\n\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      /*var id = data.product_id ? data.product_id : data.id;\n      angular.element(row).attr('ui-sref','app.inventory.products.product.overview({id:'+ id +'})');\n      $compile(angular.element(row))($scope);*/\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        showImportationDialog(aData);\n      });\n      return nRow;\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function showImportationTypeDialog() {\n      var ImportEditDialogConfig = {\n        controller: 'ImportEditWizardDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/import-edit-wizard.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        locals: {}\n      };\n\n      $mdDialog.show(ImportEditDialogConfig).then(function(importerType) {\n        showImportationDialog(null, importerType);\n      });\n    }\n\n    function showImportationDialog(importationInstance, importerType) {\n      $mdDialog.show({\n        controller: 'ImportationWizardDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/import/dialogs/importation-wizard/importation-wizard-dialog.html',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: true,\n        escapeToClose: false,\n        resolve: {\n          ImportationData: function (apiResolver) {\n            if (importationInstance) {\n              return apiResolver.resolve('importer.products@get', {\n                id: importationInstance.id\n              });\n            } else {\n              return {};\n            }\n          }\n        },\n        locals: {\n          readonly: importationInstance && importationInstance.status === IMPORTER_STATUS.DONE,\n          importerType: importerType,\n          importerContext: {}\n        }\n      }).then(function (changesMade) {\n        vm.dtInstance.DataTable.draw();\n      }, function (changesMade) {\n        vm.dtInstance.DataTable.draw();\n      });\n    }\n\n    function initComplete() {\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#product-search');\n\n      vm.dtInstance.DataTable.columns.adjust();\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            vm.searchInput = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n\n            vm.searchRequest = api.search(vm.searchInput, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryImportImagesController', InventoryImportImagesController);\n\n  /** @ngInject */\n  function InventoryImportImagesController($state, $scope, $filter, $window, $compile, $translate, api, DTColumnBuilder, DTOptionsBuilder, $http, $q,\n                                     $timeout, DTColumnDefBuilder, Session, ProductImportData, PricingTiersData,\n                                     WarehousesData, TaxesData, SitesData) {\n\n    // Data\n    var vm = this;\n    vm.productImport = ProductImportData;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.warehouses = WarehousesData.results;\n    vm.taxes = TaxesData.results;\n    vm.sites = SitesData.results;\n\n    vm.selectedStep;\n    vm.fileLoaded;\n    vm.draftByCode = {};\n    vm.selectAllDataImports = false;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 1024 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.dtInstance = {};\n    vm.dtOptions = DTOptionsBuilder\n      .fromFnPromise(function () {\n        var defer = $q.defer();\n        $timeout(function (result) {\n          defer.resolve(vm.productImport.validated_data);\n        });\n        return defer.promise;\n      })\n      .withPaginationType('full_numbers')\n      .withDisplayLength(10)\n      .withDOM('rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>')\n      .withOption('createdRow', createdRow)\n    ;\n    vm.dtColumns = [\n      /*DTColumnBuilder.newColumn('code').withTitle('Create').renderWith(function (data, type, full) {\n        vm.draftByCode[full[1].c] = full[1];\n        return '<input type=\"checkbox\" ng-model=\"vm.draftByCode[\\''+ full[1].c +'\\'].cr\" ng-disabled=\"vm.draftByCode[\\''+ full[1].c +'\\'].ex\">';\n      }),*/\n      DTColumnBuilder.newColumn('code').withTitle('Product').renderWith(function (data, type, full) {\n        return \"<span>\" + full[1].code + \"</span><br><span>\" + full[1].name + \"</span>\";\n      }),\n      DTColumnBuilder.newColumn('variants').withTitle('Variants').renderWith(function (data, type, full) {\n        var text = '';\n        full[1].product_variants.forEach(function(variant){\n          text += variant.color_name +'/'+ variant.size_name + '<br>';\n        });\n        return text;\n      }),\n      DTColumnBuilder.newColumn('errors').withTitle('Errors').renderWith(function (data, type, full) {\n        var text = '';\n        full[1].errors.forEach(function(error){\n          text += error + ', <br>'\n        });\n        full[1].variant_errors.forEach(function(error){\n          text += error + ', <br>'\n        });\n        return text;\n      })\n    ];\n\n\n    // Methods\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n    vm.previousStep = previousStep;\n    vm.nextStep = nextStep;\n    vm.selectAll = selectAll;\n    vm.changeSelectDataImport = changeSelectDataImport;\n    vm.finish = finish;\n    vm.reloadTable = reloadTable;\n    vm.restart = restart;\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.selectedStep = vm.productImport.step - 1;\n      vm.fileLoaded = false;\n\n      if(vm.productImport.step > 1 && !vm.productImport.code_index){\n        vm.productImport.name_index = findIndex('Name');\n        vm.productImport.code_index = findIndex('Code');\n        vm.productImport.origin_code_index = findIndex('Origin Code');\n        vm.productImport.group_code_index = findIndex('Group Code');\n        vm.productImport.cover_index = findIndex('Cover');\n        vm.productImport.images_index = findIndex('Images');\n        vm.productImport.category_code_index = findIndex('Category Code');\n        vm.productImport.category_name_index = findIndex('Category');\n        vm.productImport.subcategory_code_index = findIndex('Subcategory Code');\n        vm.productImport.subcategory_name_index = findIndex('Subcategory');\n        vm.productImport.composition_name_index = findIndex('Composition');\n        vm.productImport.brand_code_index = findIndex('Brand Code');\n        vm.productImport.brand_name_index = findIndex('Brand');\n        vm.productImport.season_code_index = findIndex('Season Code');\n        vm.productImport.season_name_index = findIndex('Season');\n        vm.productImport.provider_index = findIndex('Provider');\n        vm.productImport.color_category_name_index = findIndex('Color Category');\n        vm.productImport.color_code_index = findIndex('Color Code');\n        vm.productImport.color_name_index = findIndex('Color');\n        vm.productImport.size_category_name_index = findIndex('Size Category');\n        vm.productImport.size_name_index = findIndex('Size');\n        vm.productImport.tags_index = findIndex('Tags');\n        vm.productImport.description_index = findIndex('Description');\n        vm.productImport.description_long_index = findIndex('Long Description');\n        vm.productImport.fob_price_index = findIndex('FOB Price');\n        vm.productImport.fob_price_currency_index = findIndex('FOB Price Currency');\n        vm.productImport.ddp_price_index = findIndex('DDP Price');\n        vm.productImport.default_barcode_type_index = findIndex('Default Barcode Type');\n        vm.productImport.discount_active_index = findIndex('Discount Active');\n        vm.productImport.manage_stock_index = findIndex('Manage Stock');\n        vm.productImport.is_noos_index = findIndex('Is Noos');\n        vm.productImport.catalog_index = findIndex('Catalog');\n        vm.productImport.is_raw_material_index = findIndex('Is Raw Material');\n        vm.productImport.width_index = findIndex('Width');\n        vm.productImport.height_index = findIndex('Height');\n        vm.productImport.depth_index = findIndex('Depth');\n        vm.productImport.weight_index = findIndex('Weight');\n        vm.productImport.extra_shipping_fee_index = findIndex('Extra Shipping Fee');\n        vm.productImport.attribute_category_index = findIndex('Attribute Category');\n        vm.productImport.attributes_index = findIndex('Attributes');\n        vm.productImport.web_categories_index = findIndex('Web Categories');\n        vm.productImport.product_variant_barcode_index = findIndex('Barcode');\n        vm.productImport.product_variant_sku_index = findIndex('Sku');\n        //vm.productImport.pricing_tiers_indexes = findIndex('pricing_tiers_i');\n        //vm.productImport.warehouses_stock_indexes = findIndex('warehouses_stock_i');\n      }\n\n      vm.productImport.pricing_tiers_indexes = {};\n      var tax_id = null;\n      if(vm.taxes.length){\n        tax_id = vm.taxes[0].id;\n      }\n      vm.pricingTiers.forEach(function (pricingTier) {\n        vm.productImport.pricing_tiers_indexes[pricingTier.id] = {};\n        if (pricingTier.default == true && pricingTier.type==1){\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['index'] = findIndex('Wholesale Price');\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['tax_id'] = tax_id;\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['include_tax'] = false;\n        }else if (pricingTier.default == true && pricingTier.type==2){\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['index'] = findIndex('Retail Price');\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['tax_id'] = tax_id;\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['include_tax'] = false;\n        }else if (pricingTier.default == true && pricingTier.type==3){\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['index'] = findIndex('Outlet Price');\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['tax_id'] = tax_id;\n          vm.productImport.pricing_tiers_indexes[pricingTier.id]['include_tax'] = false;\n        }\n      });\n\n      vm.productImport.warehouses_stock_indexes = {};\n      /*vm.warehouses.forEach(function (warehouse) {\n      if (warehouse.id == 1)\n        vm.productImport.warehouses_stock_indexes[warehouse.id] = 17;\n      if (warehouse.id == 2)\n        vm.productImport.warehouses_stock_indexes[warehouse.id] = 19;\n      if (warehouse.id == 3)\n        vm.productImport.warehouses_stock_indexes[warehouse.id] = 18;\n      if (warehouse.id == 4)\n        vm.productImport.warehouses_stock_indexes[warehouse.id] = 20;\n      });*/\n\n      vm.productImport.sites_external_ids_indexes = {};\n      $window.scrollTo(0, 0);\n    }\n\n    function findIndex(columnName){\n      for(var i=0; i<vm.productImport.columns.length; i++){\n        if(vm.productImport.columns[i] == columnName){\n          return i;\n        }\n      }\n      return null;\n    }\n\n    function reloadTable(){\n      $timeout(function(){\n        if(vm.dtInstance.DataTable){\n          //vm.dtInstance.DataTable.draw();\n        }\n      },1000);\n    }\n\n    function previousStep() {\n      vm.selectedStep -= 1;\n    }\n\n    function nextStep() {\n      if (vm.selectedStep == 0) {\n        if (vm.fileLoaded) {\n          vm.loading = true;\n          uploadFile();\n        } else {\n          vm.selectedStep += 1;\n        }\n      } else if (vm.selectedStep == 1) {\n        selectColumns()\n      } else if (vm.selectedStep == 2) {\n        confirmDraft();\n      } else if (vm.selectedStep > 2 && vm.productImport.step==5) {\n        finish();\n      }\n    }\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n    }\n\n    function uploadFile() {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      if(vm.ngFlow.flow.files[0].name.endsWith('.zip')){\n        vm.ngFlow.flow.opts.target = api.urls.inventories.productImagesImportStep.replace(':id', vm.productImport.id).replace(':option', 'upload').concat('?code_separator=',vm.productImport.code_separator);\n      }else{\n        vm.ngFlow.flow.opts.target = api.urls.inventories.productImportsStep.replace(':id', vm.productImport.id).replace(':option', 'upload');\n      }\n      vm.ngFlow.flow.opts.query = {};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.ngFlow.flow.upload();\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.productImport = JSON.parse(response);\n      initialize();\n      vm.loading = false;\n    }\n\n    function selectColumns() {\n      var data = {\n        step: 'select',\n        id: vm.productImport.id,\n        name_index: vm.productImport.name_index,\n        code_index: vm.productImport.code_index,\n        origin_code_index: vm.productImport.origin_code_index,\n        group_code_index: vm.productImport.group_code_index,\n        cover_index: vm.productImport.cover_index,\n        images_index: vm.productImport.images_index,\n        category_code_index: vm.productImport.category_code_index,\n        category_name_index: vm.productImport.category_name_index,\n        subcategory_code_index: vm.productImport.subcategory_code_index,\n        subcategory_name_index: vm.productImport.subcategory_name_index,\n        composition_name_index: vm.productImport.composition_name_index,\n        brand_code_index: vm.productImport.brand_code_index,\n        brand_name_index: vm.productImport.brand_name_index,\n        season_code_index: vm.productImport.season_code_index,\n        season_name_index: vm.productImport.season_name_index,\n        provider_index: vm.productImport.provider_index,\n        color_category_name_index: vm.productImport.color_category_name_index,\n        color_code_index: vm.productImport.color_code_index,\n        color_name_index: vm.productImport.color_name_index,\n        size_category_name_index: vm.productImport.size_category_name_index,\n        size_name_index: vm.productImport.size_name_index,\n        tags_index: vm.productImport.tags_index,\n        description_index: vm.productImport.description_index,\n        description_long_index: vm.productImport.description_long_index,\n        notes_index: vm.productImport.notes_index,\n        fob_price_index: vm.productImport.fob_price_index,\n        fob_price_currency_index: vm.productImport.fob_price_currency_index,\n        ddp_price_index: vm.productImport.ddp_price_index,\n        default_barcode_type_index: vm.productImport.default_barcode_type_index,\n        discount_active_index: vm.productImport.discount_active_index,\n        manage_stock_index: vm.productImport.manage_stock_index,\n        is_noos_index: vm.productImport.is_noos_index,\n        catalog_index: vm.productImport.catalog_index,\n        is_raw_material_index: vm.productImport.is_raw_material_index,\n        width_index: vm.productImport.width_index,\n        height_index: vm.productImport.height_index,\n        depth_index: vm.productImport.depth_index,\n        weight_index: vm.productImport.weight_index,\n        extra_shipping_fee_index: vm.productImport.extra_shipping_fee_index,\n        product_variant_barcode_index: vm.productImport.product_variant_barcode_index,\n        product_variant_sku_index: vm.productImport.product_variant_sku_index,\n        attribute_category_index: vm.productImport.attribute_category_index,\n        attributes_index: vm.productImport.attributes_index,\n        web_categories_index: vm.productImport.web_categories_index,\n        pricing_tiers_indexes: vm.productImport.pricing_tiers_indexes,\n        warehouses_stock_indexes: vm.productImport.warehouses_stock_indexes,\n        sites_external_ids_indexes: vm.productImport.sites_external_ids_indexes\n      };\n      changeStep(data);\n    }\n\n    function confirmDraft() {\n      var data = {\n        step: 'import',\n        id: vm.productImport.id,\n        validated_data: vm.productImport.validated_data\n      };\n      changeStep(data);\n    }\n\n    function finish() {\n      var data = {\n        step: 'finish',\n        id: vm.productImport.id\n      };\n      changeStep(data);\n    }\n\n    function restart() {\n      var data = {\n        step: 'restart',\n        id: vm.productImport.id\n      };\n      changeStep(data);\n    }\n\n    function changeStep(data) {\n\n      if(vm.loading){\n        return;\n      }\n\n      vm.loading = true;\n\n      api.inventories.productImportsStep.save(\n        data,\n        function (response) {\n          vm.productImport = response;\n          vm.loading = false;\n          initialize();\n        }\n      );\n    }\n\n    function selectAll() {\n      vm.productImport.validated_data.forEach(function (data) {\n        if (!data.created && !data.old_category_id)\n          data.create = !vm.selectAllDataImports;\n      })\n    }\n\n    function changeSelectDataImport() {\n      if (vm.selectAllDataImports)\n        vm.selectAllDataImports = false;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ImportationWizardDialogController', ImportationWizardDialogController)\n\n  /** @ngInject */\n  function ImportationWizardDialogController(COUNTRIES_DICT,\n                                             COMPANY_SECTORS,\n                                             HTTP_STATUS,\n                                             ImportationData,\n                                             IMPORTER_STATUS,\n                                             ERROR_CODES,\n                                             DTColumnBuilder,\n                                             Session,\n                                             api,\n                                             $scope,\n                                             $document,\n                                             $translate,\n                                             $interval,\n                                             $mdDialog,\n                                             $mdToast,\n                                             $filter,\n                                             $compile,\n                                             $window,\n                                             readonly,\n                                             importerType,\n                                             importerContext) {\n    var vm = this;\n\n    // const IMPORTER_TYPE = 'product_variant';\n    const IMPORTING_INTERVAL_MS = 10 * 1000;\n    const VALIDATING_INTERVAL_MS = 5 * 1000;\n    const PRODUCT_VARIANTS_TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/1GN5_LC1LNz1gEcuXf5v0MB4bYEIFp13nCnDdNue69Dw/edit?usp=sharing';\n    const PRODUCTS_TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/1cq5qgtCYoSnuCY2Kl0P89sZpOHDztriCWXUNxc1sDgs/edit?usp=sharing';\n    const SERIES_TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/1JVyHGuXccmLnHgvW0ca3yNaThdeL2lxvj_7Zp6jGrfM/edit?usp=sharing';\n    const BUNDLES_TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/14bLnU5dMlRHqr9t8ZNwkNIqHHS1n6iFnukkHaWDLMqA/edit?usp=sharing';\n    const STOCKTAKING_PRODUCT_VARIANTS_TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/1Ip0StsSIaxgw50c34kT8dFq92NViTV7pVjcGKSgnTRw/edit?usp=sharing';\n\n    // Data\n    vm.IMPORTER_STATUS = IMPORTER_STATUS;\n    vm.templateUrl = PRODUCT_VARIANTS_TEMPLATE_URL;\n    vm.importation = angular.extend({}, ImportationData);\n    vm.loading = false;\n    vm.msWizardController = null;\n    vm.hasFileAttached = false;\n    vm.fileLoadedSuccessfully = false;\n    vm.fileColumnsRules = null;\n    vm.requirementsCompleted = false;\n    vm.draggingFile = false;\n    vm.targetHeadersByOrigin = {};\n    vm.requiredToAssign = null;\n    vm.currentBarProgress = 0;\n    vm.importationWentWrong = false;\n    vm.readonly = !!readonly;\n\n    vm.validationErrors = false;\n    vm.validationWarnings = false;\n\n    vm.selectedIndex = 0;\n    vm.checkImportationInterval = null;\n    vm.checkValidationInterval = null;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 1024 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.importer.productErrors.replace(':id', vm.importation.id),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      //order: [9, 'desc'],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      headerCallback: headerCallback,\n      pagingType: 'simple',\n      lengthMenu: [25, 50, 100, 500],\n      pageLength: 25,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n    };\n    vm.dtColumnCache = {\n      properties: {},\n      codes: {}\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id')\n        .notSortable()\n        .withTitle($filter('translate')('IMPORTER.ROW_NUMBER'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return ++data;\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('properties')\n        .notSortable()\n        .withTitle($filter('translate')('IMPORTER.COLUMNS'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            var propertyKey = data.join(',');\n            if (!vm.dtColumnCache.properties[propertyKey]) {\n              vm.dtColumnCache.properties[propertyKey] = '';\n              var spacer = '';\n              data.forEach(function (property) {\n                vm.dtColumnCache.properties[propertyKey] += spacer + $filter('translate')('IMPORTER.' + property.toUpperCase());\n                spacer = ', ';\n              });\n            }\n            return vm.dtColumnCache.properties[propertyKey];\n          }\n        }),\n      DTColumnBuilder.newColumn('code')\n        .notSortable()\n        .withTitle($filter('translate')('IMPORTER.ERRORS'))\n        .renderWith(function (data, type, full) {\n          return translateValidationError(data);\n        })\n    ];\n\n    // Methods\n    vm.onceFileUploaded = onceFileUploaded;\n    vm.fileAdded = fileAdded;\n    vm.checkCurrentStep = checkCurrentStep;\n    vm.onMandatoryHeadersChange = onMandatoryHeadersChange;\n    vm.checkImportationProgress = checkImportationProgress;\n    vm.downloadImportationFile = downloadImportationFile;\n    vm.goBack = goBack;\n    vm.goFront = goFront;\n    vm.close = close;\n    vm.hide = hide;\n    vm.allowToUpload = allowToUpload;\n    vm.stepDisabled = stepDisabled;\n\n    //Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (vm.importation !== null) {\n        if (vm.importation.status === IMPORTER_STATUS.PENDING_TO_VALIDATE) {\n          vm.selectedIndex = 1;\n          vm.hasFileAttached = true;\n          vm.fileLoadedSuccessfully = true;\n          vm.fileColumnsRules = vm.importation.data_preview;\n        } else if (vm.importation.status === IMPORTER_STATUS.VALIDATING) {\n          vm.selectedIndex = 2;\n          startValidationPulling();\n        } else if (vm.importation.status === IMPORTER_STATUS.VALIDATION_DONE) {\n          vm.selectedIndex = 2;\n          vm.hasFileAttached = true;\n          vm.fileLoadedSuccessfully = true;\n          vm.validationErrors = vm.importation.has_errors;\n          vm.fileColumnsRules = vm.importation.data_preview;\n          vm.importation.data_preview.properties.forEach(function (property) {\n            if (vm.importation.data_preview.headers.includes(property.id)) {\n              vm.targetHeadersByOrigin[property.id] = property;\n            }\n          });\n          vm.onMandatoryHeadersChange(true, vm.targetHeadersByOrigin)\n        } else if (vm.importation.status === IMPORTER_STATUS.IN_PROGRESS || vm.importation.status === IMPORTER_STATUS.ENQUEUED) {\n          vm.selectedIndex = 3;\n          vm.hasFileAttached = true;\n          vm.fileLoadedSuccessfully = true;\n          vm.validationErrors = vm.importation.has_errors;\n          vm.fileColumnsRules = vm.importation.data_preview;\n          vm.importation.data_preview.properties.forEach(function (property) {\n            if (vm.importation.data_preview.headers.includes(property.id)) {\n              vm.targetHeadersByOrigin[property.id] = property;\n            }\n          });\n          vm.onMandatoryHeadersChange(true, vm.targetHeadersByOrigin)\n          vm.currentBarProgress = Math.round((vm.importation.total_items * 100) / vm.importation.total_items_in_file);\n          checkImportationProgress();\n        } else if (vm.importation.status === IMPORTER_STATUS.DONE) {\n          vm.selectedIndex = 3;\n          vm.hasFileAttached = true;\n          vm.fileLoadedSuccessfully = true;\n          vm.validationErrors = vm.importation.has_errors;\n          vm.fileColumnsRules = vm.importation.data_preview;\n          vm.importation.data_preview.properties.forEach(function (property) {\n            if (vm.importation.data_preview.headers.includes(property.id)) {\n              vm.targetHeadersByOrigin[property.id] = property;\n            }\n          })\n          vm.onMandatoryHeadersChange(true, vm.targetHeadersByOrigin)\n        }\n      }\n\n      $scope.$on('$destroy', function () {\n        if (vm.checkImportationInterval) {\n          $interval.cancel(vm.checkImportationInterval);\n        }\n        if (vm.checkValidationInterval) {\n          $interval.cancel(vm.checkValidationInterval);\n        }\n      });\n\n      if(importerType === 'stocktaking_product_variant'){\n        vm.templateUrl = STOCKTAKING_PRODUCT_VARIANTS_TEMPLATE_URL;\n      }\n      else if(importerType === 'series'){\n        vm.templateUrl = SERIES_TEMPLATE_URL;\n      }\n      else if(importerType === 'bundle_by_barcode' || importerType === 'bundle_by_sku' || importerType === 'bundle_by_id'){\n        vm.templateUrl = BUNDLES_TEMPLATE_URL;\n      }\n      else if(importerType === 'product_by_id' || importerType === 'product_by_code'){\n        vm.templateUrl = PRODUCTS_TEMPLATE_URL;\n      } else {\n        vm.templateUrl = PRODUCT_VARIANTS_TEMPLATE_URL;\n      }\n    }\n\n    function allowToUpload(){\n      return !vm.importation.status || vm.importation.status === IMPORTER_STATUS.PENDING_TO_VALIDATE;\n    }\n\n    function stepDisabled(step){\n      if(step === 2){\n        return !vm.importation.status && !vm.fileLoadedSuccessfully;\n        // return vm.importatxion.status !== vm.IMPORTER_STATUS.DONE && (!vm.fileLoadedSuccessfully || vm.selectedIndex<1 || vm.selectedIndex === 3);\n      }\n      if(step === 3){\n        return !vm.importation.status ||\n          vm.importation.status === IMPORTER_STATUS.PENDING_TO_VALIDATE;\n      }\n      if(step === 4){\n        return !vm.importation.status ||\n          vm.importation.status !== IMPORTER_STATUS.DONE &&\n          vm.importation.status !== IMPORTER_STATUS.IN_PROGRESS &&\n          vm.importation.status !== IMPORTER_STATUS.ENQUEUED;\n      }\n    }\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.hasFileAttached = true;\n    }\n\n    function createProductsImportation() {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      vm.ngFlow.flow.opts.target = api.urls.importer.create.replace(':option', importerType);\n      vm.ngFlow.flow.opts.query = {context: JSON.stringify(importerContext)};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.ngFlow.flow.upload();\n    }\n\n    function onceFileUploaded(response, isError) {\n      vm.loading = false;\n\n      if (isError) {\n        vm.hasFileAttached = false;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      } else {\n        vm.msWizardController.nextStep();\n        vm.selectedIndex = vm.msWizardController.selectedIndex;\n        vm.fileColumnsRules = JSON.parse(response);\n        vm.importation.id = vm.fileColumnsRules['importation_id'];\n        // vm.importation.unique_items_in_file = vm.fileColumnsRules['rows'].length; // fileColumnsRules['rows'] conté els items sense repetir\n        vm.fileLoadedSuccessfully = true;\n      }\n    }\n\n    function validateProductsImportation() {\n      vm.loading = true;\n      var properties = [];\n      if (vm.targetHeadersByOrigin) {\n        vm.fileColumnsRules.headers.forEach(function (header) {\n          if (vm.targetHeadersByOrigin[header]) {\n            var property = {\n              property: vm.targetHeadersByOrigin[header].property,\n              id: vm.targetHeadersByOrigin[header].id,\n              column: header,\n            };\n\n            properties.push(property);\n          }\n        })\n      }\n\n      vm.dtOptions.ajax.url = api.urls.importer.productErrors.replace(':id', vm.importation.id);\n      api.importer.validate.save({\n        'importation_id': vm.importation.id,\n        'properties': properties,\n      }, function (response, callback, status) {\n        vm.loading = false;\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.importation.status = IMPORTER_STATUS.VALIDATING;\n          vm.msWizardController.nextStep();\n          vm.selectedIndex = vm.msWizardController.selectedIndex;\n          startValidationPulling();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      })\n    }\n\n    function startValidationPulling() {\n      vm.checkValidationInterval = $interval(function () {\n        api.importer.products.get(\n          {\n            'id': vm.importation.id\n          },\n          function (response, callback, status) {\n            if (status === 200) {\n              vm.importation = response;\n              if (vm.importation.status === IMPORTER_STATUS.VALIDATION_DONE) {\n                $interval.cancel(vm.checkValidationInterval);\n                vm.validationErrors = vm.importation.has_errors;\n              }\n            } else {\n              // TODO\n            }\n          }\n        );\n      }, VALIDATING_INTERVAL_MS);\n    }\n\n    function performImportation() {\n      vm.loading = true;\n      vm.importation.status = IMPORTER_STATUS.ENQUEUED;\n      api.importer.import.save({\n        'importation_id': vm.importation.id,\n      }, function (response, callback, status) {\n        vm.loading = false;\n        if (status !== HTTP_STATUS.HTTP_201_CREATED) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          vm.importationWentWrong = true;\n          return;\n        }\n      });\n      vm.importation.total_items = 0;\n      checkImportationProgress();\n      vm.msWizardController.nextStep();\n      vm.selectedIndex = vm.msWizardController.selectedIndex;\n    }\n\n    function checkCurrentStep(msWizard) {\n      if (vm.msWizardController == null) {\n        vm.msWizardController = msWizard;\n      }\n      vm.msWizardController.selectedIndex = vm.selectedIndex;\n      if (vm.msWizardController.selectedIndex === 0 && vm.hasFileAttached) {\n        vm.loading = true;\n        createProductsImportation();\n      } else if (vm.msWizardController.selectedIndex === 1 && vm.targetHeadersByOrigin) {\n        validateProductsImportation();\n      } else if (vm.msWizardController.selectedIndex === 2) {\n        performImportation();\n      }\n    }\n\n    function close() {\n      $mdDialog.cancel();\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function onMandatoryHeadersChange(enable, selections, requiredToAssign) {\n      vm.requirementsCompleted = enable;\n      vm.targetHeadersByOrigin = selections;\n      if (requiredToAssign) {\n        vm.requiredToAssign = requiredToAssign.map(function (header) {\n          return header.translation;\n        }).join(', ');\n      }\n    }\n\n    function checkImportationProgress() {\n      vm.checkImportationInterval = $interval(function () {\n        if (vm.importationWentWrong) {\n          $interval.cancel(vm.checkImportationInterval);\n          vm.msWizardController.previousStep();\n          vm.selectedIndex = vm.msWizardController.selectedIndex;\n        }\n        api.importer.products.get(\n          {\n            'id': vm.importation.id\n          },\n          function (response, callback, status) {\n            if (status === 200) {\n              vm.importation = response;\n              vm.currentBarProgress = Math.round((vm.importation.total_items * 100) / vm.importation.total_items_in_file);\n              if (vm.importation.status === IMPORTER_STATUS.DONE) {\n                $interval.cancel(vm.checkImportationInterval);\n              }\n            } else {\n              // TODO\n            }\n          }\n        );\n      }, IMPORTING_INTERVAL_MS);\n    }\n\n    function goBack(msWizard) {\n      if (vm.msWizardController == null) {\n        vm.msWizardController = msWizard;\n      }\n      vm.msWizardController.selectedIndex = vm.selectedIndex;\n      vm.msWizardController.previousStep();\n      vm.selectedIndex = vm.msWizardController.selectedIndex;\n    }\n\n    function goFront(msWizard) {\n      if (vm.msWizardController == null) {\n        vm.msWizardController = msWizard;\n      }\n\n      vm.msWizardController.selectedIndex = vm.selectedIndex;\n      vm.msWizardController.nextStep();\n      vm.selectedIndex = vm.msWizardController.selectedIndex;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      return nRow;\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function translateValidationError(code) {\n      if (vm.dtColumnCache.codes[code]) {\n        return vm.dtColumnCache.codes[code];\n      }\n\n      vm.dtColumnCache.codes[code] = '';\n      var error = code.split('::');\n      if (error.length === 1) {\n        vm.dtColumnCache.codes[code] = $filter('translate')('IMPORTER.ERROR_' + error[0])\n      } else if (error.length === 2) {\n        // TODO\n      } else if (error.length === 3) {\n        // Example: VALIDATE_TYPE_PRODUCT_VARIANT::EXPECTED_TYPE::FLOAT\n        if (error[1] === 'EXPECTED_TYPE') {\n          var type = $filter('translate')('IMPORTER.TYPE_' + error[2])\n          vm.dtColumnCache.codes[code] = $filter('translate')('IMPORTER.ERROR_' + error[1], {param: type})\n        } else if (error[0] === 'DIFFERENT_VALUES_SAME_PRODUCT') {\n          vm.dtColumnCache.codes[code] = $filter('translate')('IMPORTER.ERROR_' + error[0])\n        } else if (error[1] === 'MIN_VALUE' || error[1] === 'EXPECTED_CHOICES') {\n          vm.dtColumnCache.codes[code] = $filter('translate')('IMPORTER.ERROR_' + error[1], {param: error[2]})\n        } else {\n          // TODO\n        }\n      }\n      return vm.dtColumnCache.codes[code];\n    }\n\n    function downloadImportationFile() {\n      $window.open(vm.importation.file);\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndColumnsSelectorController', ndColumnsSelectorController)\n    .directive('ndColumnsSelector', ndColumnsSelector);\n\n  /** @ngInject */\n  function ndColumnsSelector() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/inventory/views/import/directives/nd-columns-selector/nd-columns-selector.html',\n      scope: {\n        headers: '=',\n        rows: '=',\n        properties: '=',\n        callback: '=?',\n        show: '=?',\n        readonly: '=?',\n        preset: '=?'\n      },\n      controller: 'ndColumnsSelectorController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndColumnsSelectorController($scope, $document, $filter, SEARCH_MAX_LENGTH) {\n    const MAX_ITEMS_TO_SHOW = $scope.show ? $scope.show : 3;\n    const MULTIPLE_VALUES_KEY = 'values';\n    const SEPARATOR_REGEX = /[-_]/g;\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    $scope.columnItemsByHeader = {};\n    $scope.selectFilter = '';\n    $scope.targetHeaders = [];\n    $scope.targetHeadersByOrigin = {};\n    $scope.once = true;\n\n    // Methods\n    $scope.getPreviewItemsByHeader = getPreviewItemsByHeader;\n    $scope.onSelectorOpen = onSelectorOpen;\n    $scope.onSelectorClose = onSelectorClose;\n    $scope.onTargetSelectorChange = onTargetSelectorChange;\n    $scope.isTargetHeaderAvailable = isTargetHeaderAvailable;\n    $scope.getOriginHeaders = getOriginHeaders;\n\n    init();\n\n    function init() {\n      buildTargetHeaders();\n      if ($scope.preset) {\n        setPreselectedHeaders();\n      }\n    }\n\n    // Functions\n    function getOriginHeaders() {\n      if ($scope.properties && $scope.once) {\n        onTargetSelectorChange();\n        $scope.once = false;\n      }\n\n      var idx1 = $scope.headers.findIndex(function(header){\n        return header === 'product site_product_image';\n      });\n      if (idx1 !== -1) {\n        $scope.headers.splice(idx1, 1);\n      }\n\n      var idx2 = $scope.headers.findIndex(function(header){\n        return header === 'product_variant site_product_variant_image';\n      });\n      if (idx2 !== -1) {\n        $scope.headers.splice(idx2, 1);\n      }\n\n      return $scope.headers;\n    }\n\n    function buildColumnItemsByHeader() {\n      for (var i = 0; i < $scope.headers.length; i++) {\n        var columnItems = [];\n        $scope.rows.forEach(function(row) {\n          columnItems.push(row[i]);\n        });\n\n        $scope.columnItemsByHeader[$scope.headers[i]] = columnItems;\n      }\n    }\n\n    function autoselectByOriginName() {\n      $scope.headers.forEach(function(header) {\n        var ident = header.toLowerCase().replace(SEPARATOR_REGEX, ' ').trim();\n        // Exact match\n        var selected = $scope.targetHeaders.find(function(target) {\n          return ident === target.autoSelectTranslation.toLowerCase().replace(SEPARATOR_REGEX, ' ').trim();\n        });\n\n        if (selected) {\n          $scope.targetHeadersByOrigin[header] = selected;\n        } else {\n          selected = $scope.targetHeaders.find(function(target) {\n            var translation = target.autoSelectTranslation.toLowerCase();\n            var search = ident.toLowerCase();\n\n            return translation.split(/[\\s_]/).includes(search); // Avoid words within other words\n          });\n\n\n          if (selected) {\n            $scope.targetHeadersByOrigin[header] = selected;\n          } else {\n            $scope.targetHeadersByOrigin[header] = null;\n          }\n        }\n      });\n    }\n\n    function buildTargetHeaders() {\n      var targetHeaders = [];\n      $scope.properties.forEach(function(property) {\n        if (property[MULTIPLE_VALUES_KEY]) {\n          property[MULTIPLE_VALUES_KEY].forEach(function(option) {\n            var autoSelectTranslation = $filter('translate')('IMPORTER.' + property.id.toUpperCase());\n            var translation = autoSelectTranslation + ' - ' + option.name;\n            var translationNormalized = translation.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n            targetHeaders.push({\n              mandatory: property.mandatory,\n              property: property.id,\n              name: option.name,\n              id: option.id,\n              translation: translation,\n              translationNormalized: translationNormalized,\n              autoSelectTranslation: autoSelectTranslation.toLowerCase() + ' - ' + option.name // used to auto select the selectors components\n            });\n          });\n        } else {\n          var autoSelectTranslation = $filter('translate')('IMPORTER.' + property.id.toUpperCase());\n          var translation = autoSelectTranslation;\n          var translationNormalized = translation.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n          targetHeaders.push({\n            mandatory: property.mandatory,\n            property: property.id,\n            translation: translation,\n            translationNormalized: translationNormalized,\n            autoSelectTranslation: autoSelectTranslation.toLowerCase() // used to auto select the selectors components\n          });\n        }\n      });\n\n      targetHeaders = targetHeaders.sort(function(a, b) {\n        if (a.mandatory && b.mandatory) {\n          if (a.translation < b.translation) {\n            return -1;\n          }\n          return 1;\n        }\n        if (a.mandatory) {\n          return -1;\n        }\n        if (b.mandatory) {\n          return 1;\n        }\n        if (a.translation < b.translation) {\n          return -1;\n        }\n        return 1;\n      });\n      $scope.targetHeaders = targetHeaders;\n      autoselectByOriginName();\n    }\n\n    function setPreselectedHeaders() {\n      $scope.preset.forEach(function(property) {\n        var matchingHeader = $scope.headers.find(function(header) {\n          return header == property.original_reference;\n        });\n\n        var matchingTargetHeader = $scope.targetHeaders.find(function(header) {\n          return (header.property === property.property && (!header.id || !property.id || header.id === property.id));\n        });\n\n        $scope.targetHeadersByOrigin[matchingHeader] = matchingTargetHeader;\n      });\n    }\n\n    function getPreviewItemsByHeader(header) {\n      if (!$scope.columnItemsByHeader[header]) {\n        buildColumnItemsByHeader();\n      }\n\n      var items = $scope.columnItemsByHeader[header];\n      var preview = [];\n\n      for (var i = 0; i < items.length && i < MAX_ITEMS_TO_SHOW; i++) {\n        preview.push(items[i]);\n      }\n\n      return preview;\n    }\n\n    function onTargetSelectorChange() {\n      var requiredToAssign = $scope.targetHeaders.filter(function(header) {\n        return $scope.isTargetHeaderAvailable('', header) && header.mandatory;\n      });\n\n      if (requiredToAssign.length) {\n        $scope.callback(false, null, requiredToAssign);\n        return;\n      }\n\n      var selectedProperties = angular.copy($scope.targetHeadersByOrigin);\n      Object.keys(selectedProperties).filter(function(key) {\n        return !selectedProperties[key];\n      }).forEach(function(key) {\n        delete selectedProperties[key];\n      });\n\n      $scope.callback(true, selectedProperties, requiredToAssign);\n    }\n\n    function isTargetHeaderAvailable(header, target) {\n      $scope.consumedTargetHeaders = [];\n      for (var origin in $scope.targetHeadersByOrigin) {\n        if ($scope.targetHeadersByOrigin[origin] === target) {\n          return header === origin;\n        }\n      }\n      return true;\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      $scope.selectFilter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('CategoryTreeDialogController', CategoryTreeDialogController);\n\n  /** @ngInject */\n  function CategoryTreeDialogController($scope, $mdDialog, $mdToast, $filter, selectedCategories, api, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.loading = true;\n    vm.categories = [];\n    vm.filteredCategories = [];\n\n    var newSelectedCategories = selectedCategories.slice();\n    var initialSelectedCategories = selectedCategories.slice();\n    var deselectedCategories = [];\n\n    // Methods\n    vm.cancel = cancel;\n    vm.close = close;\n    vm.exists = exists;\n    vm.toggle = toggle;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      api.inventories.categories.list({}, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.categories = response.results;\n          indexFilterPath();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel({});\n    }\n\n    function close() {\n      $mdDialog.hide({\n        selectedCategories: newSelectedCategories,\n        deselectedCategories: deselectedCategories\n      });\n    }\n\n    function exists(category) {\n      return newSelectedCategories.map(function (c) {\n        return c.id;\n      }).indexOf(category.id) !== -1;\n    }\n\n    function toggle(category) {\n      var index = newSelectedCategories.findIndex(function (c) {\n        return c.id === category.id;\n      });\n\n      if (index !== -1) {\n        newSelectedCategories = newSelectedCategories.filter(function (c) {\n          return c.id !== category.id;\n        });\n\n        if (initialSelectedCategories.some(function (c) {\n          return c.id === category.id;\n        })) {\n          deselectedCategories.push(category);\n        }\n\n      } else {\n        newSelectedCategories.push(category);\n        deselectedCategories = deselectedCategories.filter(function (c) {\n          return c.id !== category.id;\n        });\n      }\n    }\n\n    function indexFilterPath() {\n      vm.categories.forEach(function (category) {\n        recursiveIndexFilterPath(category);\n      });\n    }\n\n    function recursiveIndexFilterPath(category) {\n      if (!category.children || category.children.length === 0) {\n        category.filterPath = category.name;\n        return;\n      }\n\n      var childrenFilterPath = [];\n      category.children.forEach(function (child) {\n        recursiveIndexFilterPath(child);\n        childrenFilterPath.push(child.filterPath);\n        category.filterPath = [category.name].concat(childrenFilterPath).join('|');\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('CategoryMassivePercentageDialogController', CategoryMassivePercentageDialogController);\n\n  /** @ngInject */\n  function CategoryMassivePercentageDialogController(\n    $mdDialog\n  ) {\n\n    var vm = this;\n    vm.loyaltyPercentage = null;\n\n    // Data\n\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.noneChecked = noneChecked;\n\n    function save(value) {\n      $mdDialog.hide(value);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function noneChecked() {\n      return (vm.gridApi.selection.getSelectedRows().length === 0);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndNewObjectOptionController', ndNewObjectOptionController)\n    .directive('ndNewObjectOption', ndNewObjectOption);\n\n  /** @ngInject */\n  function ndNewObjectOptionController($scope, $mdDialog, $document, $filter, api, $mdSelect) {\n\n    // Data\n    $scope.object = {};\n    $scope.creating = false;\n\n    // Methods\n    $scope.showNewObjectOptionDialog = showNewObjectOptionDialog;\n    $scope.keypressHandler = keypressHandler;\n    $scope.saveAndClose = saveAndClose;\n    $scope.cancel = cancel;\n\n    $scope.formatComposition = formatComposition;\n    $scope.getChipNumber = getChipNumber;\n    $scope.getChipName = getChipName;\n\n    // Initialization\n\n    // Functions:\n    function showNewObjectOptionDialog(ev) {\n      if (ev.data === undefined) {\n        // Used to avoid adding the add button as an option\n        ev.stopPropagation();\n        $mdSelect.hide();\n      }\n\n      $scope.object = {};\n      $scope.creating = false;\n\n      if ($scope.apiName == 'subcategories') {\n        $scope.object.category = $scope.selectedParent.id;\n      } else if ($scope.apiName == 'compositions') {\n        $scope.object.name = [];\n        $scope.placeholder = $filter('translate')('GENERAL.NAME');\n        $scope.secondaryPlaceholder = $filter('translate')('CONFIGURATION.MATERIAL');\n      }\n\n      $mdDialog.show({\n        contentElement: '#objectOptionDialog' + $scope.apiName,\n        parent: angular.element('body'),\n        targetEvent: ev,\n        clickOutsideToClose: true\n      });\n    }\n\n    function keypressHandler(event, nextId) {\n      if (event.keyCode == 13) {\n        if (nextId)\n          angular.element('#' + nextId)[0].focus();\n        else\n          saveAndClose();\n      }\n    }\n\n    /**\n     * Hides the dialog\n     */\n    function saveAndClose() {\n      $scope.creating = true;\n\n      var saveObject = angular.copy($scope.object);\n\n      if ($scope.apiName == 'compositions') {\n        saveObject.name = saveObject.name.join(',');\n      }\n\n      api.inventories[$scope.apiName].save(\n        saveObject,\n        function (result) {\n          if (result.id) {\n            if ($scope.apiName != 'contactGroups') {\n              $scope.array.push(result);\n            }\n            $mdDialog.hide();\n            $scope.callback({newObject: result});\n          }\n        }\n      )\n    }\n\n    function cancel() {\n      $mdDialog.hide();\n    }\n\n    function formatComposition(index) {\n      index--;\n      var value = $scope.object.name[index];\n      var word = value.replace(/[0-9]/g, '').trim();\n\n      word = word.charAt(0).toUpperCase() + word.slice(1);\n\n      if (value.match(/\\d+/)) {\n        var number = value.match(/\\d+/)[0];\n        word = number + '% ' + word;\n      }\n\n      $scope.object.name[index] = word;\n    }\n\n    function getChipNumber(chip) {\n      var array = chip.split(' ');\n      for (var i = 0; i < array.length; ++i)\n        if (array[i].match(/\\d+/))\n          return array[i];\n    }\n\n    function getChipName(chip) {\n      var index = chip.indexOf('%');\n      if (index != -1)\n        return chip.substring(index + 2);\n      return chip;\n    }\n  }\n\n  /** @ngInject */\n  function ndNewObjectOption() {\n    return {\n      restrict: 'E',\n      scope: {\n        array: '=', // Array of objects,\n        apiName: '=', // String of the type of object\n        optionLabel: '=', // String of the translate label that is displayed as a option in the selector\n        dialogTitle: '=', // String of the translate label that is displayed in the dialog title\n        callback: '&', // Callback function after create object\n        selectedParent: '=?', // Parent object, i.ex. variant categories if apiName is subcategory\n        parentIcon: '=?', // Parent icon\n        parentName: '=?' // String of the translate label that is displayed as a parent label\n      },\n      controller: 'ndNewObjectOptionController',\n      templateUrl: 'app/main/apps/inventory/views/configuration/directives/nd-new-object-option/nd-new-object-option.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.integration_apps',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'xeditable',\n        'app.services.session',\n        'wipImageZoom',\n        'ui.tree',\n        'dndLists',\n        'mm.iban',\n        'ngMaterialDateRangePicker'\n      ]\n    )\n    .config(config);\n\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.integration_apps', {\n        abstract: true,\n        url: '/integration-apps'\n      })\n\n      /**\n       * APPS\n       */\n      .state('app.integration_apps.apps', {\n        url: '/apps',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/integration-apps/views/apps/apps.html',\n            controller: 'AppsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'apps'\n      })\n\n      /**\n       * VERIFACTU\n       */\n      .state('app.integration_apps.verifactu', {\n        url: '/verifactu',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/integration-apps/views/verifactu/verifactu.html',\n            controller: 'VeriFactuController as vm'\n          }\n        },\n        resolve: {\n          IntegrationAppData: function(apiResolver, INTEGRATION_APP_TYPE) {\n            return apiResolver.resolve('integrationApps.apps@list', {\n              option: INTEGRATION_APP_TYPE.VERIFACTU,\n            });\n          },\n          FiscalAddressesData: function(apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list');\n          },\n        },\n        bodyClass: 'apps-verifactu'\n      })\n\n      /**\n       * VERIFACTU DETAILS\n       */\n      .state('app.integration_apps.verifactu.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.integration_apps.verifactu': {\n            templateUrl: 'app/main/apps/integration-apps/views/verifactu/tabs/details/details.html',\n            controller: 'VeriFactuDetailsController as vm'\n          }\n        },\n        resolve: {\n          VerifactuIntegrationInstalledAppsData: function(apiResolver) {\n            return apiResolver.resolve('integrationApps.verifactuInstalledIntegrationApp@list');\n          },\n        },\n        bodyClass: 'inventory-warehouse-details'\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/integration-apps');\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('VeriFactuDetailsController', VeriFactuDetailsController);\n\n  /** @ngInject */\n  function VeriFactuDetailsController(\n    $scope,\n    $filter,\n    api,\n    $mdToast,\n    IntegrationAppData,\n    FiscalAddressesData,\n    VerifactuIntegrationInstalledAppsData,\n    VerifactuIntegrationInstalledApp,\n    Session,\n    HTTP_STATUS\n  ) {\n\n    // Data\n    var vm = this;\n    vm.selectedVerifactuIntegrationInstalledApp = {};\n    vm.integrationApp = IntegrationAppData;\n    vm.fiscalAddresses = FiscalAddressesData.results;\n    vm.fetchingInstalledApps = false;\n    vm.verifactuIntegrationInstalledApps = VerifactuIntegrationInstalledAppsData.results;\n\n    // Methods\n    vm.createVeriFactuApp = createVeriFactuApp;\n    vm.selectVeriFactuApp = selectVeriFactuApp;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (vm.verifactuIntegrationInstalledApps.length > 0) {\n        vm.selectVeriFactuApp(vm.verifactuIntegrationInstalledApps[0]);\n      }\n    }\n\n    function createVeriFactuApp() {\n      if (Session.hasPermission('app.integration_apps.verifactu.details.create')) {\n        vm.verifactuIntegrationInstalledApps.push(new VerifactuIntegrationInstalledApp());\n        setTimeout(function() {\n          vm.selectedTabIndex = vm.verifactuIntegrationInstalledApps.length - 1;\n        }, 100);\n      }\n    }\n\n    function selectVeriFactuApp(verifactuIntegrationInstalledApp) {\n      vm.selectedVerifactuIntegrationInstalledApp = verifactuIntegrationInstalledApp;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('ndIntegrationCardController', ndIntegrationCardController)\n    .directive('ndIntegrationCard', ndIntegrationCard);\n\n  /** @ngInject */\n  function ndIntegrationCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/integration-apps/views/apps/directives/nd-integration-card/nd-integration-card.html',\n      scope: {\n        app: '='\n      },\n      controller: 'ndIntegrationCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndIntegrationCardController(\n    $scope,\n    $state,\n    $mdToast,\n    $mdDialog,\n    $document,\n    $filter,\n    api,\n    HTTP_STATUS,\n    INTEGRATION_APP_TYPE,\n    INSTALLED_INTEGRATION_APP_STATUS,\n    INTEGRATION_APP_AVAILABLE_STATUS,\n    ERROR_CODES,\n    PLAN_LIMIT_CODES\n  ) {\n\n    // methods\n    $scope.getSubType = getSubType;\n    $scope.getWebUrl = getWebUrl;\n    $scope.getIntegrationName = getIntegrationName;\n    $scope.getIntegrationDescription = getIntegrationDescription;\n    $scope.openIntegrationAppDialog = openIntegrationAppDialog;\n    $scope.isInstalled = isInstalled;\n    $scope.isAvailable = isAvailable;\n    $scope.isNotAvailable = isNotAvailable;\n    $scope.isBeta = isBeta;\n    $scope.isCompatible = isCompatible;\n    $scope.hasWebUrl = hasWebUrl;\n    $scope.getIncompatibleApplication = getIncompatibleApplication;\n    $scope.save = save;\n\n    var applicationNames = {\n      'holded': 'HOLDED_NAME',\n      'kubibai': 'KUBIBAI_NAME',\n      'mailchimp': 'MAILCHIMP_NAME',\n      'sendcloud': 'SENDCLOUD_NAME',\n      'epos_italy': 'EPOS_ITALY_NAME',\n      'verifactu': 'VERIFACTU_NAME'\n    };\n\n    // functions\n    function getSubType() {\n      if (!$scope.app.subtype) {\n        return '\\u00A0';\n      }\n      return $filter('translate')('APPS.' + 'SUBTYPE_' + $scope.app.subtype.toUpperCase());\n    }\n\n    function getWebUrl() {\n      return $scope.app.web_url;\n    }\n\n    function getIntegrationName() {\n      return $filter('translate')('APPS.' + $scope.app.type.toUpperCase() + '_NAME');\n    }\n\n    function getIntegrationDescription() {\n      return $filter('translate')('APPS.' + $scope.app.type.toUpperCase() + '_DESCRIPTION');\n    }\n\n    function isInstalled() {\n      return !!$scope.app.instance && $scope.app.instance.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED;\n    }\n\n    function isAvailable() {\n      return !!$scope.app && ($scope.app.status === INTEGRATION_APP_AVAILABLE_STATUS.AVAILABLE || $scope.app.status === INTEGRATION_APP_AVAILABLE_STATUS.BETA);\n    }\n\n    function isNotAvailable() {\n      return !!$scope.app && $scope.app.status === INTEGRATION_APP_AVAILABLE_STATUS.NOT_AVAILABLE;\n    }\n\n    function isBeta() {\n      return !!$scope.app && $scope.app.status === INTEGRATION_APP_AVAILABLE_STATUS.BETA;\n    }\n\n    function isCompatible() {\n      return !!$scope.app && $scope.app.is_compatible;\n    }\n\n    function hasWebUrl() {\n      return !!$scope.app && $scope.app.web_url;\n    }\n\n    function getIncompatibleApplication() {\n      return $filter('translate')('APPS.' + applicationNames[$scope.app.incompatible_with]);\n    }\n\n    function openIntegrationAppDialog() {\n      if (!isAvailable() || !isCompatible()) {\n        return;\n      }\n\n      if ($scope.app.type === INTEGRATION_APP_TYPE.VERIFACTU) {\n        $state.go('app.integration_apps.verifactu.details');\n      } else {\n        _openIntegrationAppDialog();\n      }\n    }\n\n    function _openIntegrationAppDialog() {\n      var openDialog = $mdDialog.show({\n        controller: 'ndIntegrationDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/integration-apps/views/apps/dialogs/nd-integration-dialog/nd-integration-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        locals: {\n          app: $scope.app,\n          name: $scope.getIntegrationName(),\n          description: $scope.getIntegrationDescription()\n        },\n        resolve: {\n          ContractedPlanLimitData: function(apiResolver) {\n            var contractedPlanLimitCode = '';\n            if ($scope.app.type === INTEGRATION_APP_TYPE.HOLDED) {\n              contractedPlanLimitCode = PLAN_LIMIT_CODES.HOLDED_INTEGRATION_APP;\n            } else if ($scope.app.type === INTEGRATION_APP_TYPE.KUBIBAI) {\n              contractedPlanLimitCode = PLAN_LIMIT_CODES.KUBIBAI_INTEGRATION_APP;\n            } else if ($scope.app.type === INTEGRATION_APP_TYPE.SENDCLOUD) {\n              contractedPlanLimitCode = PLAN_LIMIT_CODES.SENDCLOUD_INTEGRATION_APP;\n            } else if ($scope.app.type === INTEGRATION_APP_TYPE.SAGE_200) {\n              contractedPlanLimitCode = PLAN_LIMIT_CODES.SAGE_200_INTEGRATION_APP;\n            }\n            return apiResolver.resolve('account.contractedPlanLimits@list', {\n              code: contractedPlanLimitCode\n            });\n          }\n        }\n      });\n\n      openDialog.then(function(result) {\n          if (checkShowConfirmationDialog()) {\n            showConfirmationDialog(result);\n          } else {\n            save(result);\n          }\n        },\n        function(error) {\n        });\n    }\n\n    function checkShowConfirmationDialog() {\n      return $scope.app.type === INTEGRATION_APP_TYPE.SENDCLOUD;\n    }\n\n    function showConfirmationDialog(result) {\n      if (!$scope.app.instance) {\n        save(result);\n        return;\n      }\n      var wasInstalled = $scope.app.instance.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED;\n      if (result.instance.status === INSTALLED_INTEGRATION_APP_STATUS.DISABLED && wasInstalled) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('APPS.UNINSTALL_SENDCLOUD_TITLE'))\n          .parent(angular.element($document.find('body')))\n          .htmlContent($filter('translate')('APPS.UNINSTALL_SENDCLOUD_BODY'))\n          .multiple(true)\n          .ok($filter('translate')('APPS.UNINSTALL_SENDCLOUD_OK'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          save(result);\n        });\n      } else {\n        save(result);\n      }\n    }\n\n    function save(result) {\n      var data = {\n        id: result.id,\n        option: 'install'\n      };\n\n      data = angular.extend(result.instance, data);\n      api.integrationApps.apps.save(data,\n        function(response, fn, status) {\n          $scope.app = result;\n          if (status === HTTP_STATUS.HTTP_409_CONFLICT &&\n            response.Error === ERROR_CODES.ERROR_09004_SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('APPS.SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND')).position('top right'));\n            $scope.$emit('reload_cards');\n          } else if (status !== HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          } else {\n            $scope.$emit('reload_cards');\n          }\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('ndIntegrationDialogController', ndIntegrationDialogController);\n\n  /** @ngInject */\n  function ndIntegrationDialogController(\n    $mdToast,\n    $filter,\n    $mdDialog,\n    api,\n    app,\n    name,\n    description,\n    ContractedPlanLimitData,\n    ContractedPlanLimit,\n    Session,\n    HTTP_STATUS,\n    INTEGRATION_APP_TYPE,\n    INSTALLED_INTEGRATION_APP_STATUS) {\n    var vm = this;\n\n    // data\n    vm.app = angular.copy(app);\n    vm.name = name;\n    vm.description = description;\n    vm.INSTALLED_INTEGRATION_APP_STATUS = INSTALLED_INTEGRATION_APP_STATUS;\n    vm.contractedPlanLimit = null;\n    vm.hasSubscription = Session.hasSubscription;\n    vm.showUpgradePlan = false;\n    vm.showPlanLimitAlert = false;\n    vm.showUpgradePlanTitle = '';\n    vm.showUpgradePlanBody = '';\n\n    // methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.disableSaveButton = disableSaveButton;\n    vm.getFormFilepath = getFormFilepath;\n    vm.initKeys = initKeys;\n    vm.saveWarehouseSenderAddress = saveWarehouseSenderAddress;\n    vm.copyToClipboard = copyToClipboard;\n\n    // Initialize\n    init();\n\n    // functions\n    function init() {\n      if (vm.app.type === INTEGRATION_APP_TYPE.SENDCLOUD) {\n        api.inventories.warehouses.list(\n          function (response, callback, status) {\n            vm.warehouses = response.results;\n          }\n        );\n      }\n      if (!vm.app.instance) {\n        vm.app.instance = {\n          status: INSTALLED_INTEGRATION_APP_STATUS.ENABLED\n        };\n        vm.initKeys();\n      }\n      vm.app.instance.installed = vm.app.instance.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED;\n\n      if (ContractedPlanLimitData.results.length) {\n        vm.contractedPlanLimit = new ContractedPlanLimit(ContractedPlanLimitData.results[0]);\n      }\n\n      vm.showUpgradePlan = showUpgradePlan();\n      vm.showPlanLimitAlert = showPlanLimitAlert();\n      if (vm.showUpgradePlan) {\n        var planName = 'UPGRADE_PLAN.' + vm.contractedPlanLimit.code;\n        vm.showUpgradePlanTitle = planName + '.NAME';\n        vm.showUpgradePlanBody = planName + '.DESCRIPTION';\n      }\n    }\n\n    function save() {\n      vm.app.instance.status = vm.app.instance.installed ? INSTALLED_INTEGRATION_APP_STATUS.ENABLED : INSTALLED_INTEGRATION_APP_STATUS.DISABLED;\n      $mdDialog.hide(vm.app);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function disableSaveButton() {\n      if (vm.app.type === INTEGRATION_APP_TYPE.SENDCLOUD) {\n        return !vm.app.instance.public_key || !vm.app.instance.secret_key;\n      }\n\n      if (vm.app.type === INTEGRATION_APP_TYPE.SAGE_200) {\n        return false;\n      }\n\n      if (vm.app.type !== INTEGRATION_APP_TYPE.EPOS_ITALY) {\n        return !vm.app.instance.key;\n      }\n\n      return false;\n    }\n\n    function getFormFilepath() {\n      var base = 'app/main/apps/integration-apps/views/apps/dialogs/forms/';\n      if (vm.app.type === INTEGRATION_APP_TYPE.HOLDED) {\n        return base + 'holded.html';\n      } else if (vm.app.type === INTEGRATION_APP_TYPE.KUBIBAI) {\n        return base + 'kubibai.html';\n      } else if (vm.app.type === INTEGRATION_APP_TYPE.SENDCLOUD) {\n        return base + 'sendcloud.html';\n      } else if (vm.app.type === INTEGRATION_APP_TYPE.EPOS_ITALY) {\n        return base + 'epos-italy.html';\n      } else if (vm.app.type === INTEGRATION_APP_TYPE.SAGE_200) {\n        return base + 'sage200.html';\n      } else if (vm.app.type === INTEGRATION_APP_TYPE.VERIFACTU) {\n        return base + 'verifactu.html';\n      }\n    }\n\n    function initKeys() {\n      if (vm.app.type === INTEGRATION_APP_TYPE.SENDCLOUD) {\n        vm.app.instance.public_key = '';\n        vm.app.instance.secret_key = '';\n        return;\n      }\n      if (vm.app.type === INTEGRATION_APP_TYPE.SAGE_200) {\n        vm.app.instance.token = '';\n        return;\n      }\n      vm.app.instance.key = '';\n    }\n\n    function showUpgradePlan() {\n      return vm.hasSubscription && !vm.app.instance.id && vm.contractedPlanLimit.blocksCreation();\n    }\n\n    function showPlanLimitAlert() {\n      return vm.hasSubscription && !vm.app.instance.id && vm.contractedPlanLimit.allowsCreation();\n    }\n\n    function saveWarehouseSenderAddress(warehouseSenderAddressId, warehouseId) {\n      var data = {\n        sender_address_id: warehouseSenderAddressId,\n        warehouse_id: warehouseId,\n        sendcloud_installed_integration_app_id: vm.app.instance.id,\n      };\n      api.integrationApps.sendcloudWarehouseSenderAddress.save({option: 'save'}, data,\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_409_CONFLICT || status === HTTP_STATUS.HTTP_404_NOT_FOUND ||\n            status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          }\n        });\n    }\n\n    function copyToClipboard(value) {\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({position: 'fixed', opacity: '0'});\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'xeditable',\n        'app.services.session',\n        'wipImageZoom',\n        'dndLists',\n        'mm.iban'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.ecommerce', {\n        abstract: true,\n        url: '/ecommerce'\n      })\n\n      /**\n       * SITES LIST\n       */\n\n      .state('app.ecommerce.sites', {\n        url: '/sites',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/sites/sites.html',\n            controller: 'EcommerceSitesController as vm'\n          }\n        },\n        resolve: {\n          ContractedPlanLimitData: function(apiResolver, PLAN_LIMIT_CODES) {\n            return apiResolver.resolve('account.contractedPlanLimits@list', {\n              codes: [\n                PLAN_LIMIT_CODES.EXTRA_ECOMMERCE,\n                PLAN_LIMIT_CODES.EXTRA_ECOMMERCE_VOUCHERS,\n                PLAN_LIMIT_CODES.EXTRA_MARKETPLACE,\n                PLAN_LIMIT_CODES.EXTRA_CSV,\n                PLAN_LIMIT_CODES.EXTRA_API\n              ].join(',')\n            });\n          }\n        },\n        bodyClass: 'ecommerce'\n      })\n\n      /**\n       * NEW SITE\n       */\n\n      .state('app.ecommerce.sites.new-site', {\n        url: '/add',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/new-site/new-site.html',\n            controller: 'NewEcommerceSiteController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          TicketConfigurationsData: function(apiResolver) {\n            return apiResolver.resolve('sales.ticketConfigurations@list');\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          }\n        }\n      })\n\n      .state('app.ecommerce.sites.connect-amazon', {\n        url: '/connect-amazon',\n        views: {\n          'content@app': {\n            controller: 'ConnectSiteController as vm'\n          }\n        }\n      })\n\n      /**\n       * SITE BASE\n       */\n\n      .state('app.ecommerce.sites.site', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/site.html',\n            controller: 'EcommerceSiteController as vm'\n          }\n        },\n        resolve: {\n          SiteData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              id: $stateParams.id,\n              include_deleted: true\n            });\n          }\n        }\n      })\n\n      /**\n       * SITE DETAILS\n       */\n\n      .state('app.ecommerce.sites.site.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/details.html',\n            controller: 'EcommerceSiteDetailsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          TicketConfigurationsData: function(apiResolver) {\n            return apiResolver.resolve('sales.ticketConfigurations@list');\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list');\n          },\n          AttributeCategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.attributeCategories@list');\n          },\n          SiteData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              id: $stateParams.id,\n              include_deleted: true\n            });\n          }\n        }\n      })\n\n      /**\n       * SITE PRODUCTS\n       */\n\n      .state('app.ecommerce.sites.site.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/products.html',\n            controller: 'EcommerceSiteProductsController as vm'\n          }\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          SiteData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              id: $stateParams.id,\n              include_deleted: true\n            });\n          }\n        }\n      })\n\n      /**\n       * SITE CATEGORIES\n       */\n\n      .state('app.ecommerce.sites.site.categories', {\n        url: '/categories',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/categories.html',\n            controller: 'EcommerceSiteCategoriesController as vm'\n          }\n        },\n        resolve: {\n          CategoriesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              id: $stateParams.id,\n              option: 'categories'\n            });\n          },\n          SiteData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              id: $stateParams.id,\n              include_deleted: true\n            });\n          }\n        }\n      })\n\n      /**\n       * ROUTING RULES\n       */\n\n      .state('app.ecommerce.sites.site.routing_rules', {\n        url: '/routing-rules',\n        views: {\n          'subcontent@app.ecommerce.sites.site': {\n            templateUrl: 'app/main/apps/ecommerce/views/site/tabs/routing-rules.html',\n            controller: 'RoutingRulesController as vm'\n          }\n        },\n        resolve: {\n          SiteData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              id: $stateParams.id,\n              include_deleted: true\n            });\n          },\n          RoutingRulesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.routingRules@get', {\n              site_id: $stateParams.id\n            });\n          }\n        }\n      })\n\n      /**\n       * ORDERS\n       */\n      .state('app.ecommerce.orders', {\n        url: '/orders',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/orders/orders.html',\n            controller: 'EcommerceOrdersController as vm'\n          }\n        },\n        params: {\n          tab: null\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer'\n            });\n          },\n          CountriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              option: 'get-countries'\n            });\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              serializer: 'SiteListSerializer'\n            });\n          },\n          ShippingMethodsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingMethods@list', {});\n          },\n          UsersData: function(apiResolver) {\n            return apiResolver.resolve('account.users@list', { serializer: 'UserNameSerializer' });\n          }\n        },\n        bodyClass: 'ecommerce-orders'\n      })\n\n      /**\n       * ORDER\n       */\n      .state('app.ecommerce.orders.order', {\n        url: '/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/order/order.html',\n            controller: 'EcommerceOrderController as vm'\n          }\n        },\n        resolve: {\n          OrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: $stateParams.id\n            });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@list', {\n              include_deleted: true\n            });\n          },\n          ShippingMethodsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingMethods@list', {});\n          },\n          ShippingBoxesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingBoxes@list', {});\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          }\n        },\n        bodyClass: 'ecommerce-order'\n      })\n\n      /**\n       * PICKING\n       */\n      .state('app.ecommerce.picking', {\n        url: '/picking',\n        params: {\n          order_ids: null,\n          warehouses: null,\n          orders: null\n        },\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/orders/orders.html',\n            controller: 'EcommerceOrdersController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer'\n            });\n          },\n          CountriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              option: 'get-countries'\n            });\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              serializer: 'SiteListSerializer'\n            });\n          },\n          ShippingMethodsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingMethods@list', {});\n          },\n          UsersData: function(apiResolver) {\n            return apiResolver.resolve('account.users@list', { serializer: 'UserNameSerializer' });\n          }\n        },\n        bodyClass: 'ecommerce-picking'\n      })\n\n      /**\n       * PICKING ORDER\n       */\n      .state('app.ecommerce.picking.order', {\n        url: '/order/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/order/order.html',\n            controller: 'EcommerceOrderController as vm'\n          }\n        },\n        resolve: {\n          OrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: $stateParams.id\n\n            });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@list', {\n              include_deleted: true\n            });\n          },\n          ShippingMethodsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingMethods@list', {});\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', {});\n          },\n          ShippingBoxesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingBoxes@list', {});\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          }\n        },\n        bodyClass: 'ecommerce-order'\n      })\n\n      /**\n       * PICKING PRODUCT BASE\n       */\n      .state('app.ecommerce.picking.product', {\n        url: '/product/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/product/product.html',\n            controller: 'InventoryProductController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-product'\n      })\n\n      /**\n       * PICKING PRODUCT OVERVIEW\n       */\n\n      .state('app.ecommerce.picking.product.overview', {\n        url: '/overview',\n        views: {\n          'subcontent@app.ecommerce.picking.product': {\n            templateUrl: 'app/main/apps/inventory/views/product/tabs/overview.html',\n            controller: 'InventoryProductOverviewController as vm'\n          }\n        },\n\n        resolve: {\n          ProductData: function(apiResolver, $stateParams) {\n            if ($stateParams.id) {\n              return apiResolver.resolve('inventories.products@get', {\n                'id': $stateParams.id,\n                'serializer': 'ProductOverviewSerializer'\n              });\n            } else {\n              return null;\n            }\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          TaxesData: function(apiResolver) {\n            return apiResolver.resolve('accounting.taxes@list');\n          }\n        },\n        bodyClass: 'inventory-product-overview'\n      })\n\n      /**\n       * SCAN & GO\n       */\n      .state('app.ecommerce.scan_and_go', {\n        url: '/scan-and-go',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/scan-and-go/scan-and-go.html',\n            controller: 'EcommerceScanAndGoController as vm'\n          }\n        },\n        params: {\n          order: null,\n          orderId: null,\n          previousState: null,\n          previousStateParams: null\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@list', {});\n          },\n          ShippingBoxesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.shippingBoxes@list', {});\n          },\n          PosOrderData: function(apiResolver, $stateParams) {\n            if ($stateParams.orderId) {\n              return apiResolver.resolve('inventories.posOrders@get', { id: $stateParams.orderId });\n            }\n            return null;\n          }\n        },\n        bodyClass: 'ecommerce-scan-and-go'\n      })\n\n      /**\n       * SORTING\n       */\n      .state('app.ecommerce.sorting', {\n        url: '/sorting',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/ecommerce/views/sorting/sorting.html',\n            controller: 'EcommerceSortingController as vm'\n          }\n        },\n        resolve: {\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          },\n          SubcategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list');\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          SitesData: function(apiResolver) {\n            return apiResolver.resolve('ecommerce.sites@get', {\n              include_deleted: true\n            });\n          }\n        },\n        bodyClass: 'ecommerce-sorting'\n      });\n\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/ecommerce');\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('ndSiteDetailsController', ndSiteDetailsController)\n    .directive('ndSiteDetails', ndSiteDetails);\n\n  /** @ngInject */\n  function ndSiteDetails() {\n    return {\n      restrict: 'E',\n      scope: {\n        site: '=',\n        isNewSite: '=',\n        callback: '&',\n        warehouses: '=',\n        attributeCategories: '=',\n        ticketConfigurations: '=',\n        serialNumberTypes: '=',\n        pricingTiers: '='\n      },\n      controller: 'ndSiteDetailsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/ecommerce/views/site/directives/nd-site-details/nd-site-details.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSiteDetailsController(\n    $rootScope,\n    $location,\n    $scope,\n    $mdDialog,\n    $document,\n    $mdToast,\n    $filter,\n    $window,\n    $interval,\n    api,\n    $sce,\n    Session,\n    ContractedPlanLimit,\n    HTTP_STATUS,\n    ECOMMERCE_PLATFORMS,\n    ECOMMERCE_PLATFORMS_NAMES,\n    SEARCH_MAX_LENGTH,\n    CSV_DELIMITERS,\n    AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY,\n    AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY,\n    RETURN_MANAGEMENT_POLICY,\n    PLAN_LIMIT_CODES,\n    AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY,\n    SERIAL_NUMBER_TYPES,\n    $http\n  ) {\n\n    var vm = this;\n\n    $scope.Session = Session;\n\n    // Cons\n    $scope.INTERVAL_MS = 7500;\n    $scope.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n    $scope.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n    $scope.ECOMMERCE_PLATFORMS_NAMES = ECOMMERCE_PLATFORMS_NAMES;\n    $scope.ECOMMERCE_PLATFORMS_TO_LIST = angular.copy(ECOMMERCE_PLATFORMS);\n    $scope.ECOMMERCE_PLATFORMS_NAMES_TO_LIST = angular.copy(\n      ECOMMERCE_PLATFORMS_NAMES\n    );\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    $scope.customWarehousePolicy = angular.copy(AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY);\n    $scope.replenishmentWarehousePolicy = angular.copy(AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY);\n    $scope.returnManagementPolicy = angular.copy(RETURN_MANAGEMENT_POLICY);\n    $scope.selectedPlatform = '';\n    $scope.importing = false;\n    $scope.importingVariantCategories = false;\n    $scope.shopifyAuthUrl = api.urls.ecommerce.shopifyAuth;\n    $scope.shopifyConnected = $location.search().shopify;\n    $scope.searchWarehouse = '';\n    $scope.paymentMethods = [];\n    $scope.shopifyWarningClosed = true;\n    $scope.timezones = [];\n    $scope.searchTimezone = '';\n    $scope.delimiters = [\n      {\n        name: 'SITE.SEMICOLON',\n        character: ';',\n        value: CSV_DELIMITERS.CSV_DELIMITER_SEMICOLON\n      },\n      {\n        name: 'SITE.COMA',\n        character: ',',\n        value: CSV_DELIMITERS.CSV_DELIMITER_COMA\n      },\n      {\n        name: 'SITE.TAB',\n        character: '  ',\n        value: CSV_DELIMITERS.CSV_DELIMITER_TAB\n      }\n    ];\n    $scope.fulfillmentPolicies = [\n      {\n        name: 'SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_NONE',\n        value: AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_NONE,\n        iconInfo: false,\n        show: true\n      },\n      {\n        name: 'SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_WITH_MORE_STOCK',\n        value: AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_WITH_MORE_STOCK,\n        iconInfo: false,\n        show: true\n      },\n      {\n        name: 'SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE',\n        value: AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE,\n        iconInfo: true,\n        show: $scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE || $scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP || $scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\n      },\n      {\n        name: 'SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY',\n        value: AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY,\n        iconInfo: true,\n        show: true\n      }\n    ];\n\n    $scope.autoManageProductVisibilityPolicies = [\n      {\n        name: 'SITE.AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_MANUAL',\n        value: AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY.AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_MANUAL,\n        iconInfo: false,\n        show: true\n      },\n      {\n        name: 'SITE.AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_BY_STOCK_LEVEL',\n        value: AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY.AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_BY_STOCK_LEVEL,\n        iconInfo: false,\n        show: $scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\n      }\n    ];\n\n    $scope.$on('$destroy', function() {\n      if ($scope.pullingInterval) {\n        $interval.cancel($scope.pullingInterval);\n      }\n    });\n\n    $scope.cplData = {\n      contractedPlanLimits: [],\n      contractedPlanLimitsDict: {},\n      contractedPlanLimitEcommerce: null,\n      contractedPlanLimitMarketplace: null,\n      contractedPlanLimitCSV: null\n    };\n\n    // Methods\n    $scope.submitShopifyForm = submitShopifyForm;\n    $scope.onSelectorOpen = onSelectorOpen;\n    $scope.cancel = cancel;\n    $scope.save = save;\n    $scope.checkFields = checkFields;\n    $scope.testSite = testSite;\n    $scope.showUrlStock = showUrlStock;\n    $scope.showWarehouse = showWarehouse;\n    $scope.showTicketConfig = showTicketConfig;\n    $scope.showSerialNumber = showSerialNumber;\n    $scope.showDefaultPaymentMethod = showDefaultPaymentMethod;\n    $scope.showTests = showTests;\n    $scope.trustSrc = trustSrc;\n    $scope.showBrandInfo = showBrandInfo;\n    $scope.showEciInfo = showEciInfo;\n    $scope.showCompositionInfo = showCompositionInfo;\n    $scope.showTestErrors = showTestErrors;\n    $scope.openInfoDialog = openInfoDialog;\n    $scope.showSyncStockOnly = showSyncStockOnly;\n    $scope.showAutoServeOrder = showAutoServeOrder;\n    $scope.enabledChanged = enabledChanged;\n    $scope.hasAdvancedConfiguration = hasAdvancedConfiguration;\n    $scope.connect = connect;\n    $scope.getTimezones = getTimezones;\n    $scope.showInfoDialogForFulfillmentPolicies = showInfoDialogForFulfillmentPolicies;\n    $scope.showAlert = showAlert;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      $scope.site.meta = $scope.site.meta || {};\n      getDefaultPaymentMethods();\n      //\n\n      if ($scope.isNewSite) {\n        getContractedPlanLimits();\n      }\n\n      if ($scope.site.testing) {\n        startPullingTestResults();\n      }\n    }\n\n    function getTimezones() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n      if ($scope.timezones.length !== 0) {\n        return;\n      }\n      var url = api.urls.account.company.replace(':id/', '').replace(':option', 'timezones');\n\n      return $http.get(url).then(function(response) {\n        if (response.data) {\n          $scope.timezones = response.data;\n        }\n      }).catch(function() {\n      });\n    }\n\n    function getContractedPlanLimits() {\n      api.account.contractedPlanLimits.list(\n        {\n          object: 'site'\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            initContractedPlanLimits(results.results);\n          }\n        });\n    }\n\n    function initContractedPlanLimits(contractedPlanLimits) {\n      contractedPlanLimits.forEach(function(contractedPlanLimit) {\n        var cpl = new ContractedPlanLimit(contractedPlanLimit);\n        $scope.cplData.contractedPlanLimits.push(cpl);\n        if (cpl.code === PLAN_LIMIT_CODES.EXTRA_ECOMMERCE) {\n          $scope.cplData.contractedPlanLimitEcommerce = cpl;\n          [\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX,\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_API,\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_MAGENTO,\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_MIINTO\n          ].forEach(function(platform) {\n            $scope.cplData.contractedPlanLimitsDict[platform] = $scope.cplData.contractedPlanLimitEcommerce;\n          });\n        } else if (cpl.code === PLAN_LIMIT_CODES.EXTRA_MARKETPLACE) {\n          $scope.cplData.contractedPlanLimitMarketplace = cpl;\n          [\n            ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO,\n            ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US,\n            ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES,\n            ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO\n          ].forEach(function(platform) {\n            $scope.cplData.contractedPlanLimitsDict[platform] = $scope.cplData.contractedPlanLimitMarketplace;\n          });\n        } else if (cpl.code === PLAN_LIMIT_CODES.EXTRA_CSV) {\n          $scope.cplData.contractedPlanLimitCSV = cpl;\n          $scope.cplData.contractedPlanLimitsDict[ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV] = $scope.cplData.contractedPlanLimitCSV;\n        } else if (cpl.code === PLAN_LIMIT_CODES.EXTRA_API) {\n          $scope.cplData.contractedPlanLimitAPI = cpl;\n          $scope.cplData.contractedPlanLimitsDict[ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_API] = $scope.cplData.contractedPlanLimitAPI;\n        } else if (cpl.code === PLAN_LIMIT_CODES.EXTRA_ECOMMERCE_VOUCHERS) {\n          $scope.cplData.contractedPlanLimitVouchers = cpl;\n        }\n      });\n    }\n\n    function showInfoDialogForFulfillmentPolicies() {\n      var policy = $scope.site.auto_assign_custom_warehouse_policy;\n      if (policy === $scope.customWarehousePolicy['AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE'] ||\n          policy === $scope.customWarehousePolicy['AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY']) {\n        return true\n      }\n\n      return false\n    }\n\n    function openInfoDialog(ev) {\n      var policy = $scope.site.auto_assign_custom_warehouse_policy;\n      if (policy === $scope.customWarehousePolicy['AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE']) {\n        openDialogForWarehouseSelectedBySite();\n      }\n      else if(policy === $scope.customWarehousePolicy['AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY']) {\n        openDialogForWarehouseSelectedByStockAvailability(ev);\n      }\n    }\n\n    function openDialogForWarehouseSelectedByStockAvailability(ev) {\n      $mdDialog.show({\n        controller: 'AutoAssignWarehouseByStockAvailabilityInfoDialog',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/ecommerce/views/site/dialogs/auto-assign-warehouse-by-stock-availability-info-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false\n      }).then(function(result) {\n      }, function(result) {\n      });\n    }\n\n    function openDialogForWarehouseSelectedBySite() {\n      var siteWarehouses = $scope.warehouses.filter(function(item) {\n        return $scope.site.warehouses.includes(item.id);\n      });\n      $mdDialog.show({\n        controller: 'AutoAssignWarehouseInfoDialog',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/ecommerce/views/site/dialogs/auto-assign-warehouse-info-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          params: { warehouses: siteWarehouses }\n        }\n      }).then(function(result) {\n      }, function(result) {\n      });\n    }\n\n    function getDefaultPaymentMethods() {\n      if (showDefaultPaymentMethod()) {\n        api.accounting.paymentMethods.list(null, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $scope.paymentMethods = response.results;\n          }\n        });\n      }\n    }\n\n    $scope.isDateWithinLast10Minutes = function(date) {\n      if (date) {\n        var tenMinutesAgo = new Date();\n        tenMinutesAgo.setMinutes(tenMinutesAgo.getMinutes() - 10);\n        var authenticatedDate = new Date(date);\n\n        return authenticatedDate > tenMinutesAgo;\n      }\n      return false;\n    };\n\n    function submitShopifyForm() {\n      if ($scope.saving) {\n        return;\n      }\n\n      $scope.saving = true;\n\n      if ($scope.siteForm.$dirty) {\n        api.ecommerce.sites.update(\n          $scope.site,\n          function(results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $scope.siteForm.$setPristine();\n              $scope.site = results;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.SITE_UPDATED')).position('top right'));\n              $scope.$emit('ndSiteDetailsController::submitShopifyForm');\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            $scope.saving = false;\n          }\n        );\n      } else {\n        $scope.saving = false;\n        $scope.$emit('ndSiteDetailsController::submitShopifyForm');\n      }\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function checkFields() {\n      if (\n        $scope.site.platform !==\n        $scope.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO &&\n        $scope.site.platform !==\n        $scope.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\n      ) {\n        delete $scope.site.scheduled_hours;\n        delete $scope.site.key;\n      }\n      if (\n        $scope.site.platform !==\n        $scope.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE &&\n        $scope.site.platform !==\n        $scope.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\n      ) {\n        delete $scope.site.consumer_key;\n        delete $scope.site.consumer_secret;\n      }\n      if (\n        $scope.site.platform !==\n        $scope.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\n      ) {\n        delete $scope.site.scheduled_hours_products;\n        delete $scope.site.url_products;\n      }\n      if (\n        $scope.site.platform ===\n        $scope.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO\n      ) {\n        delete $scope.site.ticket_configuration;\n        delete $scope.site.serial_number_type;\n        delete $scope.site.warehouse;\n      }\n    }\n\n    function testSite() {\n      if ($scope.siteForm.$valid) {\n        $scope.site.option = 'test-site';\n\n        $scope.site.testing = true;\n        api.ecommerce.sites.save(\n          {\n            option: 'test-site',\n            id: $scope.site.id,\n            platform: $scope.site.platform,\n            url: $scope.site.url,\n            consumer_key: $scope.site.consumer_key,\n            consumer_secret: $scope.site.consumer_secret,\n            key: $scope.site.key\n          },\n          function(results, fn, status, message) {\n            if (status == HTTP_STATUS.HTTP_200_OK) {\n              startPullingTestResults();\n            } else if (status == HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.TEST_FAILED')).position('top right'));\n              $scope.site.testing = false;\n            } else if (status == HTTP_STATUS.HTTP_409_CONFLICT) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.TEST_ALREADY_IN_PROGRESS')).position('top right'));\n              $scope.site.testing = false;\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              $scope.site.testing = false;\n            }\n          }\n        );\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n    function startPullingTestResults() {\n      $scope.pullingInterval = $interval(function() {\n        api.ecommerce.sites.get({\n          id: $scope.site.id, option: 'check-testing-status'\n        }, function(results, callback, status) {\n          if (results.testing === false) {\n            $interval.cancel($scope.pullingInterval);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.TEST_FINISHED')).position('top right'));\n            $scope.site.last_test = results.last_test;\n            $scope.site.test_results = results.test_results;\n            $scope.site.testing = false;\n          }\n        });\n      }, $scope.INTERVAL_MS);\n    }\n\n\n    function cancel() {\n      $scope.siteForm.$setPristine();\n    }\n\n    function save() {\n      if ($scope.siteForm.$valid) {\n        if ($scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE &&\n          (typeof $scope.site.meta.brand_category_name === 'undefined' ||\n            $scope.site.meta.brand_category_name === '')) {\n          $scope.site.meta.brand_category_name = 'Brand';\n        }\n\n        if ($scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP && $scope.site.discount_end_datetime) {\n          var endDate = $scope.site.discount_end_datetime;\n          if (!(endDate instanceof Date)) {\n            endDate = new Date(endDate);\n          }\n          endDate.setHours(23, 59, 59, 999);\n          $scope.site.discount_end_datetime = endDate;\n        }\n\n        $scope.callback({ site: $scope.site });\n        $scope.siteForm.$setPristine();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n    function showUrlStock() {\n      var hasTests = [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_API,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_MAGENTO,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ];\n      return hasTests.indexOf($scope.site.platform) !== -1;\n    }\n\n    function managesOrders() {\n      var hasTests = [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_API,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_MAGENTO,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ];\n      return hasTests.indexOf($scope.site.platform) !== -1;\n    }\n\n    function showWarehouse() {\n      return managesOrders();\n    }\n\n    function showTicketConfig() {\n      return managesOrders();\n    }\n\n    function showSerialNumber() {\n      return managesOrders();\n    }\n\n    function showDefaultPaymentMethod() {\n      return managesOrders();\n    }\n\n    function showTests() {\n      if ($scope.isNewSite) {\n        return false;\n      }\n      var hasTests = [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\n      ];\n      return hasTests.indexOf($scope.site.platform) !== -1;\n    }\n\n    function trustSrc(src) {\n      return $sce.trustAsResourceUrl(src);\n    }\n\n    function showBrandInfo() {\n      var dialog = $mdDialog.alert()\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .title($filter('translate')('SITE.BRAND_INFO_TITLE'))\n        .htmlContent($filter('translate')('SITE.BRAND_INFO_MESSAGE', { email: Session.user.email }))\n        .ok($filter('translate')('GENERAL.CLOSE'));\n\n      $mdDialog.show(dialog);\n    }\n\n    function showEciInfo() {\n      var dialog = $mdDialog.alert()\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .title($filter('translate')('SITE.ECI_API_KEY'))\n        .htmlContent($filter('translate')('SITE.API_KEY_INFO_MESSAGE'))\n        .ok($filter('translate')('GENERAL.CLOSE'));\n\n      $mdDialog.show(dialog);\n    }\n\n    function showCompositionInfo() {\n      var dialog = $mdDialog.alert()\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .title($filter('translate')('SITE.COMPOSITION_INFO_TITLE'))\n        .htmlContent($filter('translate')('SITE.COMPOSITION_INFO_MESSAGE', { email: Session.user.email }))\n        .ok($filter('translate')('GENERAL.CLOSE'));\n\n      $mdDialog.show(dialog);\n    }\n\n    function showTestErrors(errorMessage) {\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('SITE.TEST_ERRORS_TITTLE'))\n          .textContent(errorMessage)\n          .ok($filter('translate')('GENERAL.CLOSE')));\n    }\n\n    function showSyncStockOnly(site) {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA\n      ].includes(site.platform);\n    }\n\n    function showAutoServeOrder(site) {\n      return [\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\n      ].includes(site.platform);\n    }\n\n    function enabledChanged() {\n      if (!$scope.site.enabled) {\n        $scope.site.sync_stock_only = false;\n      }\n    }\n\n    function hasAdvancedConfiguration() {\n      return [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\n      ].includes($scope.site.platform);\n    }\n\n    function connect() {\n      $scope.site.option = 'connect';\n      api.ecommerce.sites.save(\n        {\n          option: 'connect',\n          id: $scope.site.id\n        },\n        function(results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            window.location.href = results.url;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function showAlert(title, message, event) {\n      event.stopPropagation();\n      var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')(title))\n                .htmlContent($filter('translate')(message))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n      $mdDialog.show(dialog);\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('SyncOrderFromSiteDialogController', SyncOrderFromSiteDialogController);\n\n  /** @ngInject */\n  function SyncOrderFromSiteDialogController(Session, $mdDialog, $mdToast, Utils, $filter, api, siteId, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n    vm.originId = null;\n    vm.onlyMissingOrders = true;\n    vm.onlyWarningOrders = false;\n    vm.dateRange = {\n      dateStart: null,\n      dateEnd: null,\n      format: function(dateStart, dateEnd) {\n        if (dateStart && dateEnd) {\n          return moment(dateStart).format('DD/MM/YYYY') + ' - ' + moment(dateEnd).format('DD/MM/YYYY');\n        }\n      }\n    };\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    //Functions\n    function save() {\n      if (!Session.user.isSuperAdmin()) {\n        return;\n      }\n\n      if (!vm.originId && !(vm.dateRange.dateStart && vm.dateRange.dateEnd)) {\n        return;\n      }\n\n      api.ecommerce.sites.save(\n        {\n          id: siteId,\n          date_start: vm.dateRange.dateStart,\n          date_end: vm.dateRange.dateEnd,\n          origin_id: vm.originId,\n          only_missing_orders: vm.onlyMissingOrders,\n          only_warning_orders: vm.onlyWarningOrders,\n          option: 'sync-order-from-site'\n        },\n        function(results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('SITES.SYNC_ORDER_IN_PROGRESS'))\n                .position('top right')\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right'));\n          }\n          $mdDialog.hide();\n        }\n      );\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.ecommerce')\n      .controller('NewOrderOriginDialogController', NewOrderOriginDialogController);\n\n    /** @ngInject */\n    function NewOrderOriginDialogController($mdDialog, WarehousesData, SitesData) {\n      var vm = this;\n\n      // Data\n      vm.warehousesData = WarehousesData.results;\n      vm.sitesData = SitesData.results;\n\n      vm.warehouse = null;\n      vm.site = null;\n\n      // Methods\n      vm.cancel = cancel;\n      vm.save = save;\n\n      // Initialize\n      init();\n\n      //Functions\n      function init(){\n        if(vm.sitesData && vm.sitesData.length === 1){\n          vm.site = vm.sitesData[0].id;\n          save();\n        }\n      }\n\n      function cancel() {\n        $mdDialog.cancel();\n      }\n\n      function save() {\n        $mdDialog.hide({\n          warehouse: vm.warehouse,\n          site: vm.site\n        });\n      }\n    }\n  }\n)();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.ecommerce')\n      .controller('GenerateLabelsWithSendcloudController', GenerateLabelsWithSendcloudController);\n\n    /** @ngInject */\n    function GenerateLabelsWithSendcloudController(\n      $scope,\n      ArtifactService,\n      $mdDialog,\n      $mdToast,\n      $document,\n      $filter,\n      api,\n      Session,\n      tab,\n      posOrdersFulfillments,\n      SENDCLOUD_SHIPPING_METHODS,\n      HTTP_STATUS,\n      onLabelsGenerated // <-- nuevo parámetro\n    ) {\n      var vm = this;\n\n      // Data\n      vm.generating = false;\n      vm.fetchingBoxes = true;\n      vm.volumetricWeight = false;\n      vm.printLabelsAutomatically = false;\n      vm.shippingMethodSearch = '';\n      vm.sendcloudShippingMethods = [];\n      vm.selectedShippingBoxId = null;\n      vm.shippingBoxes = [];\n      vm.selectedShippingMethodId = null;\n      vm.shippingMethods = [\n        {\n          id: SENDCLOUD_SHIPPING_METHODS.SENDCLOUD_UNSTAMPED_LETTER,\n          name: 'SCAN_AND_GO.SENDCLOUD_UNSTAMPED_LETTER'\n        },\n        {\n          id: SENDCLOUD_SHIPPING_METHODS.CUSTOM_SHIPPING_METHOD_CHECKOUT,\n          name: 'SCAN_AND_GO.CUSTOM_SHIPPING_METHOD_CHECKOUT'\n        }\n      ];\n      vm.errors = [];\n      vm.errorMessages = {\n        ERROR_09002_INVALID_FULFILLMENT_TYPE: $filter('translate')('ERRORS.ERROR_09002_INVALID_FULFILLMENT_TYPE'),\n        ERROR_09003_FULFILLMENT_WITHOUT_ITEMS: $filter('translate')('ERRORS.ERROR_09003_FULFILLMENT_WITHOUT_ITEMS'),\n        ERROR_09004_SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND: $filter('translate')('ERRORS.ERROR_09004_SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND'),\n        ERROR_09005_SENDCLOUD_NOT_KEYS_PROVIDED_EXCEPTION: $filter('translate')('ERRORS.ERROR_09005_SENDCLOUD_NOT_KEYS_PROVIDED_EXCEPTION'),\n        ERROR_09006_SENDCLOUD_ORDER_ALREADY_PROCESSED_EXCEPTION: $filter('translate')('ERRORS.ERROR_09006_SENDCLOUD_ORDER_ALREADY_PROCESSED_EXCEPTION'),\n        ERROR_09007_ORDER_WITHOUT_CUSTOMER: $filter('translate')('ERRORS.ERROR_09007_ORDER_WITHOUT_CUSTOMER')\n      };\n\n      // Methods\n      vm.cancel = cancel;\n      vm.close = close;\n      vm.generateLabels = generateLabels;\n      vm.storeVolumetricWeight = storeVolumetricWeight;\n      vm.storeSelectedShippingMethodId = storeSelectedShippingMethodId;\n      vm.storePrintDeliveriesAutomatically = storePrintDeliveriesAutomatically;\n      vm.storeSelectedShippingBoxId = storeSelectedShippingBoxId;\n      vm.onSelectorOpen = onSelectorOpen;\n      vm.isValid = isValid;\n      vm.toggleVolumetricWeight = toggleVolumetricWeight;\n\n      vm.tab = tab;\n      vm.title = getTitle();\n      vm.buttonActionText = getButtonActionText();\n\n      // Initialize\n      init();\n\n      //Functions\n      function init() {\n        vm.volumetricWeight = localStorage.getItem(Session.company.id + '::ScanAndGoController::volumetricWeight') === 'true';\n        vm.printDeliveriesAutomatically = localStorage.getItem(Session.company.id + '::ScanAndGoController::printDeliveriesAutomatically') === 'true';\n        vm.selectedShippingMethodId = localStorage.getItem(Session.company.id + '::GenerateLabelsWithSendcloudController::selectedShippingMethodId');\n\n        api.inventories.shippingBoxes.list(function (result) {\n          vm.fetchingBoxes = false;\n          vm.shippingBoxes = result.results;\n          vm.selectedShippingBoxId = getDefaultShippingBoxId();\n        });\n      }\n\n      function cancel() {\n        if (onLabelsGenerated) {\n          onLabelsGenerated();\n        }\n        $mdDialog.cancel();\n      }\n\n      function close() {\n        if (onLabelsGenerated) {\n          onLabelsGenerated();\n        }\n        $mdDialog.hide();\n      }\n\n      function generateLabels() {\n        if (vm.generating) {\n          return;\n        }\n        vm.generating = true;\n        vm.errors = [];\n        api.inventories.posOrders.get({\n            option: 'print-labels',\n            pos_order_fulfillment_ids: posOrdersFulfillments.map(function (posOrdersFulfillment) {\n              return posOrdersFulfillment.id;\n            }).join(','),\n            sendcloud_shipping_method_id: vm.selectedShippingMethodId,\n            volumetric_weight: vm.volumetricWeight,\n            print_deliveries: vm.printDeliveriesAutomatically,\n            shipping_box_id: vm.selectedShippingBoxId,\n            redownload: tab === 'prepared'\n          },\n          function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              if (response.artifact_id) {\n                ArtifactService.startPulling(response.artifact_id, function (url) {\n                  ArtifactService.downloadLabel(url);\n                  close();\n                });\n              }\n              vm.errors = response.errors.map(function (error) {\n                if (vm.errorMessages[error.error]) {\n                  error.error = vm.errorMessages[error.error];\n                }\n                return error;\n              });\n              if (vm.errors.length === 0) {\n                close();\n              }\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              if (onLabelsGenerated) onLabelsGenerated();\n            }\n            vm.generating = false;\n          });\n      }\n\n      function storeVolumetricWeight() {\n        localStorage.setItem(Session.company.id + '::ScanAndGoController::volumetricWeight', vm.volumetricWeight.toString());\n      }\n\n      function storeSelectedShippingMethodId() {\n        if (vm.selectedShippingMethodId) {\n          localStorage.setItem(Session.company.id + '::GenerateLabelsWithSendcloudController::selectedShippingMethodId', vm.selectedShippingMethodId);\n        }\n      }\n\n      function storePrintDeliveriesAutomatically() {\n        localStorage.setItem(Session.company.id + '::ScanAndGoController::printDeliveriesAutomatically', vm.printDeliveriesAutomatically.toString());\n      }\n\n      function storeSelectedShippingBoxId() {\n        localStorage.setItem(Session.company.id + '::GenerateLabelsWithSendcloudController::selectedShippingBoxId', vm.selectedShippingBoxId);\n      }\n\n      function onSelectorOpen() {\n        $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n          e.stopPropagation();\n        });\n      }\n\n      function isValid() {\n        return vm.selectedShippingMethodId && (!vm.volumetricWeight || vm.selectedShippingBoxId);\n      }\n\n      function getDefaultShippingBoxId() {\n        if (vm.shippingBoxes.length === 0) {\n          return null;\n        }\n        if (vm.shippingBoxes.length === 1) {\n          return vm.shippingBoxes[0].id;\n        }\n        var defaultShippingBox = vm.shippingBoxes.find(function (shippingBox) {\n          return shippingBox.default;\n        });\n        if (defaultShippingBox) {\n          return defaultShippingBox.id;\n        }\n        return vm.shippingBoxes[0].id;\n      }\n\n      function toggleVolumetricWeight() {\n        if (vm.generating) {\n          return;\n        }\n        vm.volumetricWeight = !vm.volumetricWeight;\n        storeVolumetricWeight();\n      }\n\n      function getTitle() {\n        if (tab === 'picked') {\n          return 'ORDERS.GENERATE_LABELS_WITH_SENDCLOUD_DIALOG_TITLE';\n        } else if (tab === 'prepared') {\n          return 'ORDERS.GENERATE_LABELS_WITH_SENDCLOUD_DIALOG_TITLE_PREPARED';\n        }\n      }\n\n      function getButtonActionText() {\n        if (tab === 'picked') {\n          return 'ORDERS.GENERATE_LABELS';\n        } else if (tab === 'prepared') {\n          return 'GENERAL.DOWNLOAD';\n        }\n      }\n\n\n    }\n  }\n)();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('SelectRegisterActivityController', SelectRegisterActivityController);\n\n  /** @ngInject */\n  function SelectRegisterActivityController($mdDialog,\n                                            $mdMedia,\n                                            $compile,\n                                            $state,\n                                            $filter,\n                                            $scope,\n                                            api,\n                                            Session,\n                                            DTColumnBuilder) {\n\n    // Data\n    var vm = this;\n    vm.selectedRegisterActityId = null;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.sales.registerActivities.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          // d.dateStart = vm.dateRange.dateStart ? vm.dateRange.dateStart.getTime() : '';\n          // d.dateEnd = vm.dateRange.dateEnd ? vm.dateRange.dateEnd.getTime() : '';\n          //d.restricted = true;\n        }\n      },\n      order: [[1, 'desc']],\n      rowId: 'id',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      // initComplete: initComplete,\n      dom: $mdMedia('gt-sm') ? 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>' : 'rt<\"bottom\"<\"left\"<\"info\"i>><\"right\"<\"pagination\"p>>>',\n      pagingType: $mdMedia('gt-sm') ? 'full_numbers' : 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('select')\n        .notSortable()\n        .withOption('className', 'checkbox')\n        .withOption(\"searchable\", false)\n        .withOption(\"orderable\", false)\n        .withOption(\"sortable\", false)\n        .withOption('width', '20px')\n        .renderWith(function (data, type, full) {\n          return '<md-checkbox class=\"m-0\" ng-checked=\"vm.isSelected(' + full.id + ')\" ng-click=\"vm.select(' + full.id + ')\"></md-checkbox>';\n        }),\n      DTColumnBuilder.newColumn('opened_at')\n        .withTitle($filter('translate')('REGISTER_CLOSURES.OPENED_AT'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd/MM/yy - hh:mm');\n        }),\n      DTColumnBuilder.newColumn('closed_at')\n        .withTitle($filter('translate')('REGISTER_CLOSURES.CLOSED_AT'))\n        .renderWith(function (data, type, full) {\n          if (data)\n            return $filter('date')(data, 'dd/MM/yy - hh:mm');\n          return '<span class=\"secondary-text text-italic\">' + $filter('translate')('REGISTER_CLOSURES.STILL_OPEN') + '</span>';\n        }),\n      DTColumnBuilder.newColumn('register__id')\n        .withTitle($filter('translate')('REGISTER_CLOSURES.REGISTER'))\n        .renderWith(function (data, type, full) {\n          return  full.register_code;\n        }),\n      DTColumnBuilder.newColumn('register__warehouse__name')\n        .withTitle($filter('translate')('REGISTER_CLOSURES.WAREHOUSE'))\n        .renderWith(function (data, type, full) {\n          return  full.warehouse_name;\n        }),\n      DTColumnBuilder.newColumn('closed_by__id')\n        .withTitle($filter('translate')('REGISTER_CLOSURES.CLOSED_BY'))\n        .renderWith(function (data, type, full) {\n          if (!full.closed_at)\n            return '<span class=\"secondary-text text-italic\">' + $filter('translate')('REGISTER_CLOSURES.STILL_OPEN') + '</span>';\n          return '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' + $filter('personname')(full.closed_by) + '\\'\"  class=\"mr-8\"></nd-user-picture> ' + $filter('personname')(full.closed_by) + '</div> ';\n        })\n    ];\n\n    // Methods\n    vm.selectOption = selectOption;\n    vm.isSelected = isSelected;\n    vm.select = select;\n    vm.save = save;\n    vm.cancel = cancel;\n\n    // Functions\n    function selectOption(option) {\n      $mdDialog.hide(option);\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n\n      });\n      return nRow;\n    }\n\n    function isSelected(registerActivityId){\n      return vm.selectedRegisterActityId === registerActivityId;\n    }\n\n    function select(registerActivityId){\n      if(vm.selectedRegisterActityId === registerActivityId){\n        vm.selectedRegisterActityId = null;\n      } else {\n        vm.selectedRegisterActityId = registerActivityId;\n      }\n    }\n\n    function save(){\n      if(!vm.selectedRegisterActityId){\n        return;\n      }\n\n      $mdDialog.hide(vm.selectedRegisterActityId);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n// In the controller\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('ExecuteSupplyingPolicyController', ExecuteSupplyingPolicyController);\n\n  /** @ngInject */\n  function ExecuteSupplyingPolicyController(\n    $mdDialog,\n    $filter,\n    $sce,\n    $q,\n    posOrder,\n    warehousesResults,\n    TRANSFER_ORDER_STATUS_COLORS,\n    PURCHASE_ORDER_STATUS_COLORS,\n    TRANSFER_ORDER_STATUSES,\n    PURCHASE_ORDER_STATUSES,\n    ECOMMERCE_PLATFORMS,\n    ECOMMERCE_PLATFORMS_NAMES,\n    AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY,\n    StockoutService\n  ) {\n    var vm = this;\n    vm.posOrder = angular.copy(posOrder);\n    vm.warehousesDict = {};\n    vm.TRANSFER_ORDER_STATUS_COLORS = TRANSFER_ORDER_STATUS_COLORS;\n    vm.PURCHASE_ORDER_STATUS_COLORS = PURCHASE_ORDER_STATUS_COLORS;\n    vm.sitePlatformName = null;\n    vm.allSelected = true;\n    vm.filteredFulfillments = [];\n    vm.loadingFilteredFulfillments = false;\n    vm.action_is_replenish = checkAction();\n\n    // Methods\n    vm.getTransferStatusLabel = getTransferStatusLabel;\n    vm.getPurchaseStatusLabel = getPurchaseStatusLabel;\n    vm.getWarehouseLabel = getWarehouseLabel;\n    vm.getSupplyingPolicyText = getSupplyingPolicyText;\n    vm.updateStockoutAmount = updateStockoutAmount;\n    vm.stockoutChecked = stockoutChecked;\n    vm.initIsCheckedForReplenish = initIsCheckedForReplenish;\n    vm.selectAll = selectAll;\n    vm.cancel = cancel;\n    vm.save = save;\n\n    vm.ensureNotEmpty = ensureNotEmpty;\n    vm.closeDialog = closeDialog;\n\n    init();\n\n    function init() {\n      warehousesResults.forEach(function(warehouse) {\n        vm.warehousesDict[warehouse.id] = warehouse;\n      });\n\n      if (vm.posOrder.site) {\n        vm.sitePlatformName = ECOMMERCE_PLATFORMS_NAMES[ECOMMERCE_PLATFORMS[vm.posOrder.site.platform]];\n      }\n\n      vm.filteredFulfillments = vm.posOrder.pos_order_fulfillments;\n      vm.posOrder.pos_order_fulfillments.forEach(function(fulfillment) {\n         fulfillment.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n           if (!pofpv.stockout_data) {\n             StockoutService.setStockoutData(pofpv);\n           }\n         });\n       });\n    }\n\n    function getTransferStatusLabel(status) {\n      return $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]);\n    }\n\n    function getPurchaseStatusLabel(status) {\n      return $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[status]);\n    }\n\n    function getWarehouseLabel(fulfillment) {\n      var warehouseName = vm.warehousesDict[fulfillment.custom_source_warehouse || vm.posOrder.source_warehouse].name;\n\n      return $filter('translate')('ORDERS.WAREHOUSE_STOCK') + ': ' + warehouseName;\n    }\n\n    function getSupplyingPolicyText() {\n      var translatedText = $filter('translate')('ORDERS.EXECUTE_SUPPLYING_POLICY_TXT', { platform: vm.sitePlatformName });\n      return $sce.trustAsHtml(translatedText);\n    }\n\n    function initIsCheckedForReplenish(pofpv) {\n      pofpv.isCheckedForReplenish = pofpv.maxStockoutAmount > 0;\n    }\n\n    function stockoutChecked(pofpv) {\n      if (pofpv.isCheckedForReplenish && pofpv.stockoutAmount === 0) {\n        pofpv.stockoutAmount = pofpv.maxStockoutAmount;\n      } else if (!pofpv.isCheckedForReplenish && pofpv.stockoutAmount === pofpv.maxStockoutAmount) {\n        pofpv.stockoutAmount = 0;\n      }\n    }\n\n    function selectAll() {\n      vm.allSelected = !vm.allSelected;\n      vm.posOrder.pos_order_fulfillments.forEach(function(pof) {\n        pof.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          pofpv.isCheckedForReplenish = vm.allSelected;\n          pofpv.stockoutAmount = vm.allSelected ? pofpv.maxStockoutAmount : 0;\n        });\n      });\n    }\n\n    function updateStockoutAmount(pofpv) {\n      pofpv.isCheckedForReplenish = pofpv.stockoutAmount > 0;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function closeDialog() {\n      $mdDialog.hide();\n    }\n\n    function save() {\n      var selectedInstances = [];\n      vm.posOrder.pos_order_fulfillments.forEach(function(pof) {\n        var fulfillmentId = pof.id;\n        var stockouts = [];\n        pof.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          if (pofpv.stockoutAmount > 0) {\n            stockouts.push({\n              pos_order_product_variant_id: pofpv.pos_order_product_variant,\n              product_variant_id: pofpv.pos_order_product_variant_instance.product_variant,\n              amount: pofpv.stockoutAmount\n            });\n          }\n        });\n        if (stockouts.length > 0) {\n          selectedInstances.push({\n            pos_order_fulfillment_id: fulfillmentId,\n            stockouts: stockouts\n          });\n        }\n      });\n      $mdDialog.hide(selectedInstances);\n    }\n\n    function checkAction() {\n      return vm.posOrder.site.auto_assign_replenishment_warehouse_policy === AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY.AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_BY_WAREHOUSE_ID_SELECTED_BY_SITE;\n    }\n\n    function ensureNotEmpty(pofpv) {\n      if (!pofpv.stockoutAmount) {\n        pofpv.stockoutAmount = 0;\n      }\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('AddDeliveryNoteDialogController2', AddDeliveryNoteDialogController2);\n\n  /** @ngInject */\n  function AddDeliveryNoteDialogController2($scope, $mdDialog, $q, $timeout, api, SEARCH_MAX_LENGTH)\n  {\n\n    var vm = this;\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH\n\n    // Methods\n    vm.search = search;\n    vm.addDeliveryNote = addDeliveryNote;\n    vm.cancel = cancel;\n    vm.selectedDelivery = null;\n\n    function search(searchText) {\n      var result = $q.defer();\n      searchText = searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.saleOrderDeliveries.get({\n        search: searchText,\n        no_invoice: true\n      }, function(data){\n        result.resolve(data.results);\n      });\n      return result.promise;\n\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function addDeliveryNote(delivery) {\n      api.inventories.saleOrderDeliveries.get({\n          id: vm.selectedDelivery.id,\n        }, function(response){\n          $mdDialog.hide(response);\n        }\n      )\n\n    }\n\n  }\n\n})();\n\n(function () {\n\n  'use strict';\n\n  angular\n    .module('app.contacts',\n      [\n        'nvd3',\n        'datatables'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n\n    $stateProvider\n\n      /**\n       * CONTACTS\n       */\n      .state('app.contacts', {\n        url: '/contacts',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/contacts/views/contacts/contacts.html',\n            controller: 'ContactsController as vm'\n          }\n        },\n        resolve: {\n          ContactGroupsData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.contactGroups@list', {});\n          }\n        }\n      })\n\n      /**\n       * CONTACT\n       */\n      .state('app.contacts.contact', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/contacts/views/contact/contact.html',\n            controller: 'ContactController as vm'\n          }\n        },\n        resolve: {\n          ContactData: function (apiResolver, $stateParams) {\n            if ($stateParams.id == 'add') {\n              return {};\n            } else {\n              return apiResolver.resolve('inventories.contacts@list', {id: $stateParams.id});\n            }\n          },\n        }\n      })\n\n      /**\n       * CONTACT OVERVIEW\n       */\n      .state('app.contacts.contact.overview', {\n        url: '/overview',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/overview.html',\n            controller: 'ContactsContactOverviewController as vm'\n          }\n        },\n        resolve: {\n          InvoicesData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('accounting.invoices@list', {customer: $stateParams.id, type: '30'});\n          }\n        }\n      })\n\n      /**\n       * CONTACT DETAILS\n       */\n      .state('app.contacts.contact.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/details.html',\n            controller: 'ContactsContactDetailsController as vm'\n          }\n        },\n        resolve: {\n          ContactGroupsData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.contactGroups@list', {});\n          }\n        }\n      })\n\n      /**\n       * CONTACT ADDRESSES\n       */\n      .state('app.contacts.contact.addresses', {\n        url: '/addresses',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/addresses.html',\n            controller: 'ContactsContactAddressesController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * CONTACT BILLING\n       */\n      .state('app.contacts.contact.billing', {\n        url: '/billing',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/billing.html',\n            controller: 'ContactsContactBillingController as vm'\n          }\n        },\n        resolve: {\n          PricingTiersData: function (apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          },\n        }\n      })\n\n      /**\n       * CONTACT PERSONS\n       */\n      .state('app.contacts.contact.persons', {\n        url: '/persons',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/persons.html',\n            controller: 'ContactsContactPersonsController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * CONTACT PURCHASES\n       */\n      .state('app.contacts.contact.purchases', {\n        url: '/purchases',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/purchases.html',\n            controller: 'ContactsContactPurchasesController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * CONTACT WHOLESALE SALES\n       */\n      .state('app.contacts.contact.wholesale_sales', {\n        url: '/wholesale-sales',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/wholesale-sales.html',\n            controller: 'ContactsContactWholesaleSalesController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * CONTACT RETAIL SALES\n       */\n      .state('app.contacts.contact.retail_sales', {\n        url: '/retail-sales',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/retail-sales.html',\n            controller: 'ContactsContactRetailSalesController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * CONTACT INVOICES\n       */\n      .state('app.contacts.contact.invoices', {\n        url: '/invoices',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/invoices.html',\n            controller: 'ContactsContactInvoicesController as vm'\n          }\n        },\n\n        resolve: {\n          InvoiceType: function (INVOICE_TYPES) {\n            return INVOICE_TYPES.INVOICE;\n          }\n        }\n      })\n\n      .state('app.contacts.contact.proformas', {\n        url: '/proformas',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/invoices.html',\n            controller: 'ContactsContactInvoicesController as vm'\n          }\n        },\n        resolve: {\n          InvoiceType: function (INVOICE_TYPES) {\n            return INVOICE_TYPES.PROFORMA;\n          }\n        }\n      })\n\n      .state('app.contacts.contact.quotes', {\n        url: '/quotes',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/invoices.html',\n            controller: 'ContactsContactInvoicesController as vm'\n          }\n        },\n        resolve: {\n          InvoiceType: function (INVOICE_TYPES) {\n            return INVOICE_TYPES.QUOTE;\n          }\n        }\n      })\n\n      /**\n       * CONTACT B2B_ECOMMERCE\n       */\n      .state('app.contacts.contact.b2b_ecommerces', {})\n        .state('app.contacts.contact.b2b_ecommerces.b2b_ecommerce',{\n          url: '/b2b_ecommerce',\n          views: {\n            'subcontent@app.contacts.contact': {\n              templateUrl: 'app/main/apps/contacts/views/contact/tabs/b2b-ecommerce.html',\n              controller: 'ContactsContactB2BEcommerceController as vm'\n            }\n          },\n          resolve: {}\n        })\n\n      /**\n       * CONTACT WISHLIIST\n       */\n       .state('app.contacts.contact.wishlist', {\n        url: '/wishlist',\n        views: {\n          'subcontent@app.contacts.contact': {\n            templateUrl: 'app/main/apps/contacts/views/contact/tabs/wishlist.html',\n            controller: 'ContactsContactWishlistController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n      * CONTACT LOYALTY\n      */\n     .state('app.contacts.contact.loyalty', {\n       url: '/loyalty',\n       views: {\n         'subcontent@app.contacts.contact': {\n           templateUrl: 'app/main/apps/contacts/views/contact/tabs/loyalty.html',\n           controller: 'ContactsContactLoyaltyController as vm'\n         }\n       },\n       resolve: {\n         ConfigurationData: function (apiResolver) {\n           return apiResolver.resolve('inventories.inventoryConfiguration@get');\n         },\n         AccountData: function (apiResolver) {\n           return apiResolver.resolve('account.myCompany@get');\n         }\n       }\n     });\n\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/contacts');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.contacts')\n    .controller('ContactDialogController', ContactDialogController);\n\n  /** @ngInject */\n  function ContactDialogController($mdDialog, $compile, $translate, $scope, Session, ContactsData, DTColumnBuilder,\n                                   msUtils, CONTACT_TYPES, CONTACT_TYPES_REVERSE, COUNTRIES_DICT, CONTACT_PERSON_TYPES,\n                                   PAYMENT_TERM_TYPES, api, $mdToast, $filter, $rootScope, forceCustomer,\n                                   forceNaturalPersonType, PaymentMethodsData, PricingTiersData,\n                                   CONTACT_PERSON_TYPES_REVERSE, HTTP_STATUS, CONTACT_INVOICING_TYPES) {\n    var vm = this;\n    $scope.Session = Session;\n\n    // Data\n    vm.title = $filter('translate')('CONTACTS.EDIT_CONTACT');\n    vm.contact = angular.copy(ContactsData);\n    vm.newContact = false;\n    vm.allFields = false;\n    vm.contactTypes = CONTACT_TYPES;\n    vm.personTypes = CONTACT_PERSON_TYPES;\n    vm.countries = COUNTRIES_DICT;\n    vm.contactInvoicingTypes = CONTACT_INVOICING_TYPES;\n    vm.editingAddress = null;\n    vm.editingPerson = null;\n    vm.forceCustomer = forceCustomer;\n    vm.selectedTab = 0;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.paymentMethods = PaymentMethodsData.results;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Spanish',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Catalan',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.posOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.customer = vm.contact.id;\n          // Get non deleted objects\n          d.columns[7].search.value = 'False';\n        }\n      },\n      order: [[2, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      //initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      scrollY: true,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('source_warehouse')\n        .notSortable().withTitle($filter('translate')('SALES_LOG.WAREHOUSE'))\n        .renderWith(function (data, type, full) {\n          return full.source_warehouse_name\n        }),\n      DTColumnBuilder.newColumn('created_by__id')\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          return full.created_by;\n        }),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('CUSTOMERS.CREATED_AT'))\n        .renderWith(function (data, type, full) {\n          return moment(data).format('DD-MM-YYYY, h:mm a');\n        }),\n      DTColumnBuilder.newColumn('autocode')\n        .withTitle($filter('translate')('SALES_LOG.SALE_NUMBER'))\n        .renderWith(function (data, type, full) {\n          var result = data;\n\n          if (full.devolution_of) {\n            result += ' (' + $filter('translate')('SALES_LOG.DEVOLUTION_OF') + ' ' + full.devolution_of + ')';\n          }\n          if (full.notes) {\n            result += ' <md-icon md-font-icon=\"icon-comment-processing-outline\" class=\"s18 ml-5\"></md-icon>';\n          }\n\n          return result;\n        }),\n      DTColumnBuilder.newColumn('created_by_name')\n        .withTitle($filter('translate')('CUSTOMERS.CREATED_BY'))\n        .renderWith(function (data, type, full) {\n          if (data)\n            return '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' + data + '\\'\"  class=\"mr-8\"></nd-user-picture> ' + data + '</div> ';\n          return data;\n        }),\n      DTColumnBuilder.newColumn('units_sold')\n        .notSortable()\n        .withTitle($filter('translate')('SALES_LOG.UNTIS_SOLD'))\n        .renderWith(function (data, type, full) {\n          var result = '';\n          if (full.units_sold) {\n            result += '<span class=\"text-boxed green-bg white-fg\">' + full.units_sold + '</span>';\n          }\n\n          if (full.units_returned) {\n            result += '<span class=\"text-boxed red-bg white-fg\">' + full.units_returned + '</span>';\n          }\n          return result;\n        }),\n      DTColumnBuilder.newColumn('total')\n        .withTitle($filter('translate')('CUSTOMERS.TOTAL'))\n        .renderWith(function (data, type, full) {\n          if (!full.autocode)\n            return '<em class=\"secondary-text\">' + $filter('translate')('SALES.ORDER_DRAFT') + '</em>';\n          return $filter('price')(data) + vm.currencyCharacter;\n        }),\n      DTColumnBuilder.newColumn('deleted')\n        .notVisible()\n        .notSortable()\n    ];\n\n\n    vm.dtOptionsInvoices = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.accounting.invoices.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.customer = vm.contact.id;\n        }\n      },\n      order: [[1, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      pagingType: 'full_numbers',\n      lengthMenu: [25, 50, 100],\n      pageLength: 50,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumnsInvoices = [\n      DTColumnBuilder.newColumn('type').withOption('visible', false),\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('INVOICES.REFERENCE')),\n      DTColumnBuilder.newColumn('billing_date').withTitle($filter('translate')('INVOICE.BILLING_DATE'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd/MM/yy');\n        }),\n      DTColumnBuilder.newColumn('expiration_date').withTitle($filter('translate')('INVOICE.EXPIRATION_DATE'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return $filter('date')(data, 'dd/MM/yy');\n          } else {\n            return null;\n          }\n        }),\n      DTColumnBuilder.newColumn('total_incl_tax').withTitle($filter('translate')('INVOICES.TOTAL_INCL_TAX'))\n        .renderWith(function (data, type, full) {\n          return full.total_incl_tax;\n        }),\n      DTColumnBuilder.newColumn('customer').withTitle($filter('translate')('INVOICES.CUSTOMER'))\n        .renderWith(function (data, type, full) {\n          return data ? data : '';\n        }),\n      DTColumnBuilder.newColumn('pdf_file').withTitle($filter('translate')('INVOICES.FILE'))\n        .renderWith(function (data, type, full) {\n          var filename = '';\n          if (data) {\n            filename = data.split('/')\n            filename = filename[filename.length - 1].split('?')[0]\n          }\n          return data ? '<a target=\"_blank\" href=\"' + data + '\">' + filename + '</a>' : '';\n        })\n    ];\n\n\n    // Methods\n    vm.addNewContact = addNewContact;\n    vm.saveContact = saveContact;\n    vm.deleteContactConfirm = deleteContactConfirm;\n    vm.closeDialog = closeDialog;\n    vm.cancelDialog = cancelDialog;\n    vm.showInformationActions = showInformationActions;\n\n    // Addresses Methods\n    vm.editAddress = editAddress;\n    vm.deleteAddress = deleteAddress;\n    vm.cancelEditingAddress = cancelEditingAddress;\n    vm.saveEditingAddress = saveEditingAddress;\n    vm.newAddress = newAddress;\n    vm.cancelDeletingAddress = cancelDeletingAddress;\n    vm.confirmDeletingAddress = confirmDeletingAddress;\n    vm.showAddressActions = showAddressActions;\n\n    // Persons Methods\n    vm.editPerson = editPerson;\n    vm.deletePerson = deletePerson;\n    vm.cancelEditingPerson = cancelEditingPerson;\n    vm.saveEditingPerson = saveEditingPerson;\n    vm.newPerson = newPerson;\n    vm.cancelDeletingPerson = cancelDeletingPerson;\n    vm.confirmDeletingPerson = confirmDeletingPerson;\n    vm.showPersonsActions = showPersonsActions;\n\n\n    // Initialize\n    initialize();\n\n    //Functions\n    function initialize() {\n      if (vm.contact) {\n        vm.contact.type = vm.contact.type.toString();\n      }\n      else {\n        vm.contact = {};\n        vm.title = $filter('translate')('CONTACTS.NEW_CONTACT');\n        vm.newContact = true;\n        vm.contact.tags = [];\n\n        if (forceCustomer) {\n          vm.contact.type = CONTACT_TYPES_REVERSE.CONTACT_TYPE_SHOP_CUSTOMER.toString();\n        }\n\n        if (forceNaturalPersonType) {\n          vm.contact.person_type = CONTACT_PERSON_TYPES_REVERSE.NATURAL_PERSON_TYPE.toString();\n        }\n\n        newAddress();\n      }\n\n      $scope.$watch('vm.contact.birthday', function(newDate) {\n        vm.contact.birthday = $filter('date')(newDate, 'yyyy-MM-dd');\n      });\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      if (aData.devolution_of || aData.amount < 0)\n        $('td', nRow).addClass('md-orange-300-bg');\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        showSaleDialog(aData);\n      });\n      return nRow;\n    }\n\n    function rowCallbackInvoices(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        var id = aData.product_id ? aData.product_id : aData.id;\n        $state.go('app.contacts.invoices.invoice', {id: id});\n      });\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-last-child(1)', nRow).unbind('click');\n      return nRow;\n    }\n\n    function showSaleDialog(object) {\n      $mdDialog.show({\n        controller: 'SalePosOrderDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          previousPosOrderId: null\n        },\n        resolve: {\n          PosOrderData: function (apiResolver) {\n            if (vm.currentView == vm.POS_ORDERS_VIEW)\n              return apiResolver.resolve('inventories.posOrders@get', {\n                id: object.id,\n                serializer: 'PosOrderWithDevolutionsSerializer'\n              });\n\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: object.pos_order,\n              serializer: 'PosOrderFullSerializer'\n            });\n          }\n        }\n      })\n        .then(function (refresh) {\n          if (refresh) {\n            vm.dtInstance.rerender();\n          }\n        }, function () {\n          // Nothing to do\n        });\n    }\n\n\n    /**\n     * Add new contact\n     */\n    function addNewContact() {\n      api.inventories.contacts.save(\n        vm.contact,\n        function (result, fn, status) {\n          if (status == HTTP_STATUS.HTTP_201_CREATED) {\n            vm.contact = result;\n            vm.newContact = false;\n            if (!vm.addressForm.$invalid && !vm.addressForm.$pristine) {\n              vm.editingAddress.contact = vm.contact.id;\n              saveEditingAddress(true);\n            }\n            else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.CONTACT_CREATED')).position('top right'));\n              $rootScope.$broadcast('contact-updated', result);\n              vm.contact = result;\n              closeDialog();\n            }\n          }\n          else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n\n    }\n\n    /**\n     * Save contact\n     */\n    function saveContact() {\n      if(vm.savingContact){\n        return;\n      }\n      vm.savingContact = true;\n      api.inventories.contacts.update(\n        vm.contact,\n        function (result, fn, status) {\n          if (status == HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.CONTACT_UPDATED')).position('top right'));\n            $rootScope.$broadcast('contact-updated', result);\n            vm.contact = result;\n          }\n          else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.savingContact = false;\n          closeDialog();\n        }\n      );\n    }\n\n    /**\n     * Delete Contact Confirm Dialog\n     */\n    function deleteContactConfirm(ev) {\n      if (Session.hasPermission('contacts.contacts.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONTACTS.DELETE_CONTACT_WARNING_MSG'))\n          .htmlContent('<b>' + vm.contact.name + '</b>' + ' ' + $filter('translate')('CONTACTS.DELETE_CONTACTE_EXPLENATION'))\n          .ariaLabel('delete contact')\n          .targetEvent(ev)\n          .ok($filter('translate')('GENERAL.OK'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('contacts.contacts.delete')) {\n            vm.contact.deleted = true;\n            api.inventories.contacts.update(\n              vm.contact,\n              function (result) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.CONTACT_DELETED')).position('top right'));\n                $rootScope.$broadcast('reload-datatable');\n              }\n            )\n          }\n        });\n      }\n    }\n\n    /**\n     * Close dialog\n     */\n    function closeDialog() {\n      $mdDialog.hide(vm.contact);\n    }\n\n    function cancelDialog() {\n      $mdDialog.cancel();\n    }\n\n    /**\n     * Shows the edition form\n     * @param address\n     */\n    function editAddress(address) {\n      vm.editingAddressBackup = angular.copy(address);\n      vm.editingAddress = address;\n    }\n\n    /**\n     * Saves or updates the editingAddress to the server\n     */\n    function saveEditingAddress(hide) {\n      if (!vm.editingAddress.id) {\n        api.inventories.postalAddresses.save(\n          vm.editingAddress,\n          function (result, fn, status) {\n            if (status == HTTP_STATUS.HTTP_201_CREATED) {\n              vm.contact.postal_addresses.push(result);\n              vm.editingAddress = null;\n\n              if (hide) {\n                closeDialog();\n              }\n            }\n            else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        )\n      } else {\n        api.inventories.postalAddresses.update(\n          vm.editingAddress,\n          function (result, fn, status) {\n            if (status == HTTP_STATUS.HTTP_200_OK) {\n              vm.contact.postal_addresses.find(function (address) {\n                return address.id == result.id;\n              });\n              vm.editingAddress = null;\n\n              if (hide) {\n                closeDialog();\n              }\n            }\n            else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n\n          }\n        );\n      }\n    }\n\n    /**\n     * Marks the address as deleting\n     * @param address\n     */\n    function deleteAddress(address) {\n      address.deleting = true;\n    }\n\n    /**\n     * Hides the edition form of the address\n     */\n    function cancelEditingAddress() {\n      vm.editingAddress = null;\n    }\n\n    /**\n     * Shows the new address form\n     */\n    function newAddress() {\n      vm.editingAddress = {\n        name: vm.newContact ? $filter('translate')('CONTACTS.MAIN_ADDRESS') : '',\n        is_billing_address: vm.newContact,\n        contact: vm.newContact ? null : vm.contact.id,\n        country: 'ES'\n      };\n    }\n\n    /**\n     * Cancels the erase\n     * @param address\n     */\n    function cancelDeletingAddress(address) {\n      address.deleting = false;\n    }\n\n    /**\n     * Deletes the address permanently\n     * @param address\n     */\n    function confirmDeletingAddress(address) {\n      api.inventories.postalAddresses.delete(\n        address,\n        function (result) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.ADDRESS_DELETED')).position('top right'));\n          for (var i = 0; vm.contact.postal_addresses.length; ++i) {\n            if (vm.contact.postal_addresses[i].id == address.id) {\n              vm.contact.postal_addresses.splice(i, 1);\n              return;\n            }\n          }\n        }\n      );\n    }\n\n    /**\n     * Shows the edition form\n     * @param person\n     */\n    function editPerson(person) {\n      vm.editingPersonBackup = angular.copy(person);\n      vm.editingPerson = person;\n    }\n\n    /**\n     * Saves or updates the editingPerson to the server\n     */\n    function saveEditingPerson() {\n      if (!vm.editingPerson.id) {\n        api.inventories.persons.save(\n          vm.editingPerson,\n          function (result) {\n            if (result.id) {\n              vm.contact.persons.push(result);\n            }\n            vm.editingPerson = null;\n          }\n        )\n      } else {\n        api.inventories.persons.update(\n          vm.editingPerson,\n          function (result) {\n            var person = vm.contact.persons.find(function (person) {\n              return person.id == result.id;\n            });\n            person = result;\n            vm.editingPerson = false;\n          }\n        );\n      }\n    }\n\n    /**\n     * Marks the person as deleting\n     * @param person\n     */\n    function deletePerson(person) {\n      person.deleting = true;\n    }\n\n    /**\n     * Hides the edition form of the person\n     */\n    function cancelEditingPerson() {\n      vm.editingPerson = null;\n    }\n\n    /**\n     * Shows the new person form\n     */\n    function newPerson() {\n      vm.editingPerson = {\n        contact: vm.contact.id\n      };\n    }\n\n    /**\n     * Cancels the erase\n     * @param person\n     */\n    function cancelDeletingPerson(person) {\n      person.deleting = false;\n    }\n\n    /**\n     * Deletes the person permanently\n     * @param person\n     */\n    function confirmDeletingPerson(person) {\n      api.inventories.persons.delete(\n        person,\n        function (result) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.PERSON_DELETED')).position('top right'));\n          for (var i = 0; vm.contact.persons.length; ++i) {\n            if (vm.contact.persons[i].id == person.id) {\n              vm.contact.persons.splice(i, 1);\n              return;\n            }\n          }\n        }\n      );\n    }\n\n    function showInformationActions() {\n      // When is new customer or if's not new and selected tab is 0 or 2\n      return vm.selectedTab == 0 || vm.selectedTab == 2 || (vm.selectedTab == 1 && !vm.contact.id);\n    }\n\n    function showAddressActions() {\n      return vm.selectedTab == 1 && vm.editingAddress && vm.contact.id;\n    }\n\n    function showPersonsActions() {\n      return vm.selectedTab == 3 && vm.editingPerson;\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.contacts')\n    .controller('ImportContactsDialogController', ImportContactsDialogController);\n\n  /** @ngInject */\n  function ImportContactsDialogController($mdDialog, $mdToast, $filter, $document, api, Session, CONTACT_TYPES) {\n\n    var vm = this;\n\n    // Data\n    vm.IMPORT_URL = 'https://docs.google.com/spreadsheets/d/1S20lKc2_ZOWsXk8xCfjEnRuw4QJd6uhTlx5_ledvz2k/edit?usp=sharing';\n    vm.fileLoaded = false;\n    vm.ngFlow = {flow: {}};\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      allowDuplicateUploads: true,\n      //singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.loading = false;\n    vm.filename = null;\n    vm.contactTypes = CONTACT_TYPES;\n    vm.contactType = null;\n    vm.success = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileAdded = fileAdded;\n    vm.uploadFile = uploadFile;\n    vm.uploadFileSuccess = uploadFileSuccess;\n\n    // Functions\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.fileLoaded = true;\n      vm.filename = file.name;\n    }\n\n    function uploadFile() {\n      vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n      vm.ngFlow.flow.opts.target = api.urls.inventories.contactsImport;\n      vm.ngFlow.flow.opts.query = {type: vm.contactType};\n      vm.ngFlow.flow.opts.uploadMethod = 'POST';\n      vm.loading = true;\n      vm.ngFlow.flow.upload();\n    }\n\n    function uploadFileSuccess(file, response) {\n      vm.loading = false;\n      vm.success = true;\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.contacts')\n    .controller('ContactAddressDialogController', ContactAddressDialogController);\n\n  /** @ngInject */\n  function ContactAddressDialogController($scope,\n                                          $mdDialog,\n                                          $mdToast,\n                                          $filter,\n                                          AddressData,\n                                          Session,\n                                          COUNTRIES_DICT,\n                                          HTTP_STATUS,\n                                          api) {\n\n    var vm = this;\n    $scope.Session = Session;\n\n    // Data\n    vm.address = AddressData;\n    vm.countries = COUNTRIES_DICT;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.saveAddress = saveAddress;\n    vm.deleteAddress = deleteAddress;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function saveAddress() {\n      if (vm.address.id && Session.hasPermission('contacts.contact.addresses.update')) {\n        // Update\n        api.inventories.postalAddresses.update(\n          vm.address,\n          function (result, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              angular.extend(vm.address, result);\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              $mdDialog.hide(false);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      } else if (!vm.address.id && Session.hasPermission('contacts.contact.addresses.create')) {\n        // Create\n        api.inventories.postalAddresses.save(\n          vm.address,\n          function (result, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              angular.extend(vm.address, result);\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              $mdDialog.hide(vm.address);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      }\n    }\n\n    function deleteAddress() {\n      if (Session.hasPermission('contacts.contact.addresses.delete')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONTACTS.DELETE_ADDRESS'))\n          .textContent($filter('translate')('CONTACTS.DELETE_ADDRESS_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'))\n          .multiple(true);\n\n        $mdDialog.show(confirm).then(function () {\n\n          // Delete\n          api.inventories.postalAddresses.delete(\n            vm.address,\n            function (result, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n                $mdDialog.hide(true);\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            })\n        }, function () {\n          // Nothing to do\n        });\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndDynamicReportFieldCardController', ndDynamicReportFieldCardController)\n    .directive('ndDynamicReportFieldCard', ndDynamicReportFieldCard);\n\n  /** @ngInject */\n  function ndDynamicReportFieldCardController(\n    $scope,\n    $rootScope,\n    $q,\n    $mdSelect,\n    $document,\n    $filter,\n    api,\n    DynamicReportFilter,\n    SEARCH_MAX_LENGTH\n  ) {\n    var vm = this;\n\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.title = $scope.title;\n    vm.helpText = $scope.helpText;\n    vm.availableOptions = $scope.availableOptions || [];\n    vm.selectedOptions = null;\n    vm.selectedOptionsForDnd = [];\n    vm.availableFilters = ($scope.availableFilters || []).map(function(filter) {\n      return {\n        key: filter,\n        name: $filter('translate')('DYNAMIC_REPORTS.' + filter.name.toUpperCase())\n      };\n    });\n    vm.selectedFilters = null;\n    vm.selectedFiltersForDnd = [];\n    vm.useFilters = !!$scope.availableFilters;\n    vm.selectedFilter = null;\n    vm.selectedSortingField = null;\n    vm.selectedSorting = null;\n    vm.availableSorting = $scope.availableSorting || [];\n    vm.sorting = !!$scope.availableSorting;\n    vm.localizationMap = $scope.localizationMap;\n\n    // Methods\n    vm.dndItemMoved = dndItemMoved;\n    vm.getFieldName = getFieldName;\n    vm.onSelectChange = onSelectChange;\n    vm.removeOption = removeOption;\n    vm.onFilterChange = onFilterChange;\n    vm.onSortingChange = onSortingChange;\n    vm.removeSorting = removeSorting;\n    vm.updateSortingDirection = updateSortingDirection;\n    vm.displayFunction = displayFunction;\n    vm.querySearch = querySearch;\n    vm.selectItem = selectItem;\n    vm.sendChangeCallback = sendChangeCallback;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.getChipDisplayValue = getChipDisplayValue;\n    vm.optionMatchesSearch = optionMatchesSearch;\n    vm.translatedSortKey = translatedSortKey;\n    vm.isSelected = isSelected;\n    vm.toggleOption = toggleOption;\n    vm.toggleFilterOption = toggleFilterOption;\n    vm.toggleSortingField = toggleSortingField;\n    vm.addOption = addOption;\n    vm.onDateFilterChange = onDateFilterChange;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      initSelections();\n      initWarchers();\n    }\n\n    function initWarchers() {\n      vm.restoreOptionsWatcher = $rootScope.$on('ndDynamicReportController::restoreOptions', initSelections);\n\n      vm.selectedOptionsWatcher = $scope.$watch('selectedOptions', function(newVal, oldVal) {\n        if (newVal !== oldVal) {\n          vm.selectedOptions = newVal;\n          initSelections();\n        }\n      });\n\n      vm.selectedFiltersWatcher = $scope.$watch('selectedFilters', function(newVal, oldVal) {\n        if (newVal !== oldVal) {\n          vm.selectedFilters = newVal;\n          initSelections();\n        }\n      });\n\n      $scope.$on('$destroy', function() {\n        vm.availableSortingWatcher();\n        if (vm.optionRemovedWatcher) {\n          vm.optionRemovedWatcher();\n        }\n        if (vm.selectedOptionsWatcher) {\n          vm.selectedOptionsWatcher();\n        }\n        if (vm.selectedFiltersWatcher) {\n          vm.selectedFiltersWatcher();\n        }\n        vm.restoreOptionsWatcher();\n      });\n\n    }\n\n    /**\n     * Custom filter predicate that compares the translated label\n     * against the current search text (case-insensitive).\n     */\n    function optionMatchesSearch(option) {\n      var q = (vm.searchFilter || '').toLowerCase();\n      if (!q) {\n        return true;\n      }\n      var label = $filter('translate')(vm.getFieldName(option)) || '';\n      return label.toLowerCase().indexOf(q) !== -1;\n    }\n\n    /**\n     * Key extractor used by orderBy so sorting is performed\n     * on the translated label instead of the raw option key.\n     */\n    function translatedSortKey(option) {\n      return $filter('translate')(vm.getFieldName(option)) || '';\n    }\n\n    function initSelections() {\n      // 1) Read initial values from scope (or fallback to empty arrays)\n      vm.selectedOptions = $scope.selectedOptions || [];\n      vm.optionHeaders = $scope.optionHeaders || {};\n      vm.selectedFilters = $scope.selectedFilters || [];\n      vm.selectedSorting = $scope.selectedSorting || [];\n\n      // 2) Always reset the DnD list\n      vm.selectedOptionsForDnd = [];\n\n      // 3) Fill according to card type\n      if (!vm.useFilters && !vm.sorting) {\n        // Dimensions/Metrics card → wrap primitive values into objects {label}\n        vm.selectedOptionsForDnd = vm.selectedOptions.map(function(option) {\n          return { label: option };\n        });\n      } else if (vm.useFilters && !vm.sorting) {\n        // Filters card → deep copy each filter object\n        vm.selectedOptionsForDnd = vm.selectedFilters.map(function(filter) {\n          return window.angular.copy(filter);\n        });\n      }\n      // Sorting card does not use selectedOptionsForDnd\n\n      // 4) Attach global listener only once → needed to remove sorting when metric is removed\n      if (!vm.optionRemovedWatcher) {\n        vm.optionRemovedWatcher = $rootScope.$on(\n          'ndDynamicReportFieldCardController::optionRemoved',\n          checkNeedToRemoveSortingFromRemovedMetricOption\n        );\n      }\n\n      // 5) Watch for changes in availableSorting → keep vm.availableSorting in sync\n      if (!vm.availableSortingWatcher) {\n        vm.availableSortingWatcher = $scope.$watch(\n          function() {\n            return $scope.availableSorting;\n          },\n          function(newVal) {\n            vm.availableSorting = newVal;\n          },\n          true\n        );\n      }\n    }\n\n    function getFieldName(field) {\n      if(field.startsWith('pricing_tier_')){\n        return vm.optionHeaders && vm.optionHeaders.hasOwnProperty(field) ? vm.optionHeaders[field] : field;\n      }else{\n        return $filter('translate')('DYNAMIC_REPORTS.' + field.toUpperCase());\n      }\n    }\n\n    function onSelectChange() {\n      var temp = vm.selectedOptionsForDnd.map(function(element) {\n        return element.label;\n      });\n\n      var removed = arrayDifference(temp, vm.selectedOptions);\n      var added = arrayDifference(vm.selectedOptions, temp);\n      if (added.length) {\n        added.forEach(function(element) {\n          vm.selectedOptionsForDnd.push({\n            label: element\n          });\n        });\n      }\n      if (removed.length) {\n        removed.forEach(function(element) {\n          var index = vm.selectedOptionsForDnd.findIndex(function(option) {\n            return option.label === element;\n          });\n          vm.selectedOptionsForDnd.splice(index, 1);\n        });\n      }\n\n      if (added.length || removed.length) {\n        sendChangeCallback();\n      }\n    }\n\n    function sendChangeCallback() {\n      if (!$scope.onSelectionChange) {\n        return;\n      }\n\n      if (vm.useFilters) {\n        $scope.onSelectionChange({\n          selection: vm.selectedOptionsForDnd\n        });\n      } else {\n        if (vm.sorting) {\n          $scope.onSelectionChange({\n            selection: vm.selectedSorting\n          });\n        } else {\n          $scope.onSelectionChange({\n            selection: vm.selectedOptionsForDnd.map(function(element) {\n              return element.label;\n            })\n          });\n        }\n      }\n    }\n\n    function arrayDifference(arr1, arr2) {\n      return arr1.filter(function(element) {\n        return !arr2.includes(element);\n      });\n    }\n\n    function removeOption(option) {\n      var matchingAttr = 'label';\n      if (option instanceof DynamicReportFilter) {\n        matchingAttr = 'name';\n      }\n\n      var index = vm.selectedOptionsForDnd.findIndex(function(element) {\n        return element[matchingAttr] === option[matchingAttr];\n      });\n      vm.selectedOptionsForDnd.splice(index, 1);\n\n      if (vm.selectedOptions) {\n        index = vm.selectedOptions.findIndex(function(element) {\n          return element === option.label;\n        });\n\n        vm.selectedOptions.splice(index, 1);\n      }\n      sendChangeCallback();\n      $rootScope.$emit('ndDynamicReportFieldCardController::optionRemoved', option);\n    }\n\n    function checkNeedToRemoveSortingFromRemovedMetricOption(event, removedOption) {\n      var index = vm.selectedSorting.findIndex(function(element) {\n        return element.field === removedOption.label;\n      });\n      if (index !== -1) {\n        removeSorting(removedOption);\n      }\n    }\n\n    function dndItemMoved(index) {\n      vm.selectedOptionsForDnd.splice(index, 1);\n      sendChangeCallback();\n    }\n\n    function onFilterChange() {\n      if (!vm.selectedFilter) {\n        return;\n      }\n\n      if (!vm.selectedFilters) {\n        vm.selectedFilters = [];\n      }\n\n      var newFilter = new DynamicReportFilter({\n        name: angular.copy(vm.selectedFilter.name),\n        type: angular.copy(vm.selectedFilter.type),\n        endpoint: angular.copy(vm.selectedFilter.endpoint),\n        serializer: angular.copy(vm.selectedFilter.serializer)\n      });\n\n      if (newFilter.type === 'date') {\n        newFilter.operation = 'between';\n        newFilter.value = {\n          dateStart: null,\n          dateEnd: null\n        };\n      }\n\n      vm.selectedFilters.push(newFilter);\n      vm.selectedOptionsForDnd.push(angular.copy(newFilter));\n\n      vm.selectedFilter = null;\n      $mdSelect.hide();\n    }\n\n    function onSortingChange() {\n      if (!vm.selectedSortingField) {\n        return;\n      }\n\n      var existingSorting = vm.selectedSorting.find(function(sorting) {\n        return sorting.field === vm.selectedSortingField;\n      });\n\n      if (!existingSorting) {\n        vm.selectedSorting.push({\n          field: vm.selectedSortingField,\n          direction: 'asc'\n        });\n      }\n\n      vm.selectedSortingField = null;\n      sendChangeCallback();\n    }\n\n    function updateSortingDirection(index, direction) {\n      vm.selectedSorting[index].direction = direction;\n      sendChangeCallback();\n    }\n\n    function removeSorting(sorting) {\n      var index = vm.selectedSorting.findIndex(function(element) {\n        return element.field === sorting.field;\n      });\n      if (index !== -1) {\n        vm.selectedSorting.splice(index, 1);\n        sendChangeCallback();\n      }\n    }\n\n    // TODO: Is possible to make this function generic?\n    function displayFunction(selectedDynamicReportFilter, item) {\n      var displayMappings = {\n        'purchase_order_ids': item.autocode,\n        'purchase_order_season_ids': item.name + ' (' + item.code + ')',\n        'transfer_order_ids': item.autocode,\n        'sale_order_ids': item.autocode,\n        'adjustment_order_ids': item.autocode,\n        'pos_order_ids': item.autocode,\n        'warehouse_ids': item.name,\n        'product_ids': item.name,\n        'product_category_ids': item.name + ' (' + item.code + ')',\n        'product_subcategory_ids': item.name + ' (' + item.code + ')',\n        'product_brand_ids': item.name + ' (' + item.code + ')',\n        'product_season_ids': item.name + ' (' + item.code + ')',\n        'pos_order_register_ids': item.code,\n        'pos_order_site_ids': item.name,\n        'pos_order_seller_ids': item.first_name + ' ' + item.last_name,\n        'pos_order_customer_ids': (item.first_name || '') + ' ' + (item.last_name || '') + (item.email ? ' (' + item.email + ')' : ''),\n        'pos_order_source_warehouse_ids': item.name\n      };\n\n      return displayMappings[selectedDynamicReportFilter.name] || '';\n    }\n\n    function querySearch(selectedDynamicReportFilter) {\n      var deferred = $q.defer();\n      selectedDynamicReportFilter.searchText = selectedDynamicReportFilter.searchText.substring(0, SEARCH_MAX_LENGTH);\n\n      var apiEndpoint = getApiEndpoint(selectedDynamicReportFilter.endpoint);\n      var serializer = selectedDynamicReportFilter.serializer;\n      apiEndpoint.get(\n        {\n          search: selectedDynamicReportFilter.searchText,\n          serializer: serializer,\n          restricted: true\n        },\n        function(results) {\n          if (results.results) {\n            var selectedValues = {};\n            if (selectedDynamicReportFilter.values) {\n              selectedDynamicReportFilter.values.forEach(function(item) {\n                selectedValues[item.id] = true;\n              });\n            }\n            deferred.resolve(results.results.filter(function(item) {\n              return !selectedValues[item.id];\n            }));\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectItem(selectedDynamicReportFilter, item) {\n      if (!item) {return;}\n      if (!Array.isArray(selectedDynamicReportFilter.value)) {\n        selectedDynamicReportFilter.value = [];\n      }\n      selectedDynamicReportFilter.value.push(item);\n      selectedDynamicReportFilter.itemInstance = null;\n      selectedDynamicReportFilter.searchText = '';\n      if (!Array.isArray(selectedDynamicReportFilter.values)) {\n        selectedDynamicReportFilter.values = [];\n      }\n      selectedDynamicReportFilter.values.push({ id: item.id });\n      vm.sendChangeCallback && vm.sendChangeCallback();\n    }\n\n    function getApiEndpoint(endpoint) {\n      var parts = endpoint.split('.');\n      var module = parts[0];\n      var resource = parts[1];\n      if (api[module] && api[module][resource]) {\n        return api[module][resource];\n      }\n      throw new Error(\n        'Endpoint not found for module: ${module}, resource: ${resource}'\n      );\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      filter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function getChipDisplayValue(chip) {\n      var possibleAttributes = [\n        'name',\n        'code',\n        'autocode',\n        'first_name',\n        'last_name'\n      ];\n      var primaryAttribute = null;\n      var secondaryAttribute = null;\n\n      for (var i = 0; i < possibleAttributes.length; i++) {\n        if (chip[possibleAttributes[i]]) {\n          if (!primaryAttribute) {\n            primaryAttribute = chip[possibleAttributes[i]];\n          } else {\n            secondaryAttribute = chip[possibleAttributes[i]];\n            break;\n          }\n        }\n      }\n\n      if (primaryAttribute && secondaryAttribute) {\n        return primaryAttribute + ' ' + secondaryAttribute;\n      }\n      if (chip.id != null){ return '#' + chip.id;}\n      return primaryAttribute || 'Unknown';\n    }\n\n    function isSelected(option) {\n      var label = option && option.label ? option.label : option;\n\n      if (!vm.useFilters && !vm.sorting) {\n        return (vm.selectedOptionsForDnd || []).some(function(it) {\n          return (it && it.label) === label;\n        });\n      }\n\n      if (vm.useFilters && !vm.sorting) {\n        // Use raw filter name when option comes from availableFilters ({key, name})\n        var rawName = (option && option.key && option.key.name) ? option.key.name\n          : (option && option.name ? option.name : label);\n        return (vm.selectedOptionsForDnd || []).some(function(f) {\n          return f && f.name === rawName;\n        });\n      }\n\n      if (vm.sorting) {\n        var field = option && option.field ? option.field : label;\n        return (vm.selectedSorting || []).some(function(s) {\n          return s && s.field === field;\n        });\n      }\n\n      return false;\n    }\n\n    function addOption(option) {\n      if (vm.useFilters || vm.sorting || !option) {\n        return;\n      }\n      var label = option && option.label ? option.label : option;\n      if (vm.isSelected(label)) {\n        return;\n      }\n      if (!vm.selectedOptions) {\n        vm.selectedOptions = [];\n      }\n      if (!vm.selectedOptionsForDnd) {\n        vm.selectedOptionsForDnd = [];\n      }\n      vm.selectedOptions.push(label);\n      vm.selectedOptionsForDnd.push({ label: label });\n      vm.sendChangeCallback && vm.sendChangeCallback();\n      // Do NOT call $mdMenu.cancel() here -> keep menu open\n    }\n\n    function toggleOption(option) {\n      if (vm.useFilters || vm.sorting || !option) {\n        return;\n      }\n\n      var label = option && option.label ? option.label : option;\n\n      if (!vm.selectedOptions) {\n        vm.selectedOptions = [];\n      }\n\n      if (!vm.selectedOptionsForDnd) {\n        vm.selectedOptionsForDnd = [];\n      }\n\n      if (vm.isSelected(label)) {\n        var index = vm.selectedOptions.indexOf(label);\n        if (index !== -1) {\n          vm.selectedOptions.splice(index, 1);\n        }\n\n        var dndIndex = vm.selectedOptionsForDnd.findIndex(function(it) {\n          return it.label === label;\n        });\n        if (dndIndex !== -1) {\n          vm.selectedOptionsForDnd.splice(dndIndex, 1);\n        }\n      } else {\n        vm.selectedOptions.push(label);\n        vm.selectedOptionsForDnd.push({ label: label });\n      }\n\n      if (vm.sendChangeCallback) {\n        vm.sendChangeCallback();\n      }\n    }\n\n    function toggleFilterOption(filter) {\n      // Normalize: accept either wrapper { key: {...} } or raw filter def\n      var def = (filter && filter.key) ? filter.key : filter;\n\n      // Guard clauses\n      if (!def || !def.name) {\n        return;\n      }\n\n      // Ensure arrays exist\n      if (!vm.selectedFilters) {\n        vm.selectedFilters = [];\n      }\n      if (!vm.selectedOptionsForDnd) {\n        vm.selectedOptionsForDnd = [];\n      }\n\n      // Find if this filter already exists by unique 'name'\n      var idx = vm.selectedFilters.findIndex(function(f) {\n        return f && f.name === def.name;\n      });\n\n      if (idx === -1) {\n        // ADD: create instance; constructor will init date ranges when type === 'date'\n        var newFilter = new DynamicReportFilter({\n          name: def.name,\n          type: def.type,\n          endpoint: def.endpoint,\n          serializer: def.serializer,\n          // value is optional; model will default for 'date' types\n          value: def.value\n        });\n\n        vm.selectedFilters.push(newFilter);\n        // Push a deep copy to the DnD list (keeps UI objects independent)\n        vm.selectedOptionsForDnd.push(window.angular.copy(newFilter));\n      } else {\n        // REMOVE: from selectedFilters\n        vm.selectedFilters.splice(idx, 1);\n        // And from DnD list (matched by name)\n        var dndIdx = vm.selectedOptionsForDnd.findIndex(function(f) {\n          return f && f.name === def.name;\n        });\n        if (dndIdx !== -1) {\n          vm.selectedOptionsForDnd.splice(dndIdx, 1);\n        }\n      }\n\n      // Notify parent (persist, set filterChanged, etc.)\n      if (typeof vm.sendChangeCallback === 'function') {\n        vm.sendChangeCallback();\n      }\n    }\n\n    function toggleSortingField(field) {\n      if (!vm.sorting || !field) {\n        return;\n      }\n\n      if (!vm.selectedSorting) {\n        vm.selectedSorting = [];\n      }\n\n      var existingIndex = vm.selectedSorting.findIndex(function(s) {\n        return s.field === field;\n      });\n      if (existingIndex !== -1) {\n        vm.selectedSorting.splice(existingIndex, 1);\n      } else {\n        vm.selectedSorting.push({ field: field, direction: 'asc' });\n      }\n\n      sendChangeCallback();\n    }\n\n    function onDateFilterChange() {\n      vm.sendChangeCallback();\n    }\n\n  }\n\n  /** @ngInject */\n  function ndDynamicReportFieldCard() {\n    return {\n      restrict: 'E',\n      scope: {\n        title: '=',\n        helpText: '=?',\n        availableOptions: '=?',\n        selectedOptions: '=?',\n        optionHeaders: '=?',\n        availableFilters: '=?',\n        selectedFilters: '=?',\n        onSelectionChange: '&',\n        availableSorting: '=?',\n        selectedSorting: '=?',\n        localizationMap: '=?'\n      },\n      require: '^ndDynamicReport',\n      controller: 'ndDynamicReportFieldCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/sale-analytics/directives/dynamic-report-field-card/nd-dynamic-report-field-card.html'\n    };\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndDynamicReportController', ndDynamicReportController)\n    .directive('ndDynamicReport', ndDynamicReport);\n\n  /** @ngInject */\n  function ndDynamicReportController(\n    $scope,\n    $rootScope,\n    $location,\n    $document,\n    $mdDialog,\n    $filter,\n    $timeout,\n    $mdToast,\n    $window,\n    Session,\n    api,\n    Utils,\n    HTTP_STATUS,\n    DynamicReportFilter,\n    fusePalettes,\n    CURRENCIES\n  ) {\n\n    var vm = this;\n\n    // Data\n    vm.dateRange = {};\n    vm.timeInterval = 'day';\n    vm.presets = window.angular.copy($scope.presets);\n    vm.report = null;\n    vm.filters = $scope.filters || [];\n    vm.selectedFilters = [];\n    vm.dimensions = $scope.dimensions || [];\n    vm.columnDimensions = $scope.columnDimensions || [];\n    vm.selectedDimensions = [];\n    vm.selectedColumnDimensions = [];\n    vm.metrics = $scope.metrics || [];\n    vm.metricHeaders = $scope.metricHeaders || {};\n    vm.selectedMetrics = [];\n    vm.sorting = $scope.sorting || [];\n    vm.selectedSorting = [];\n    vm.selectedTotals = false;\n    vm.columns = [];\n    vm.date = new Date();\n    vm.data = [];\n    vm.pagination = {};\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n    vm.debounceTimeout = null;\n    vm.chart = null;\n    vm.filterChanged = false;\n\n    // Methods\n    vm.getData = getData;\n    vm.dimensionsChanged = dimensionsChanged;\n    vm.columnDimensionsChanged = columnDimensionsChanged;\n    vm.metricsChanged = metricsChanged;\n    vm.filtersChanged = filtersChanged;\n    vm.sortingChanged = sortingChanged;\n    vm.applyFilters = applyFilters;\n    vm.openExportDialog = openExportDialog;\n    vm.changeDate = changeDate;\n    vm.changePageSize = changePageSize;\n    vm.changePageManually = changePageManually;\n    vm.goToFirstPage = goToFirstPage;\n    vm.goToPreviousPage = goToPreviousPage;\n    vm.goToNextPage = goToNextPage;\n    vm.goToLastPage = goToLastPage;\n    vm.timeIntervalChanged = timeIntervalChanged;\n    vm.restoreFilters = restoreFilters;\n    vm.getRowValue = getRowValue;\n    vm.presetChanged = presetChanged;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.getFieldName = getFieldName;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      loadPrest();\n      initSelections();\n      initPagination();\n      if ($scope.showChart) {\n        initDateRange();\n      }\n      loadSelections();\n      syncStateFromUrl();\n      updateSortingOptions();\n      $rootScope.$emit('ndDynamicReportController::restoreOptions');\n      getData();\n      initWatchers();\n    }\n\n    function scheduleUrlSync() {\n      if (vm.urlSyncDebounce) {\n        $timeout.cancel(vm.urlSyncDebounce);\n      }\n      vm.urlSyncDebounce = $timeout(syncUrlFromState, 250);\n    }\n\n    function syncUrlFromState() {\n      var q = {};\n      if (vm.report && vm.report.name) {\n        q.preset = (vm.report.code || (vm.report.name.replace(/^DYNAMIC_REPORTS\\./, '')));\n      }\n      if (vm.selectedDimensions && vm.selectedDimensions.length) {\n        q.dims = vm.selectedDimensions.join(',');\n      }\n      if (vm.selectedColumnDimensions && vm.selectedColumnDimensions.length) {\n        q.colDims = vm.selectedColumnDimensions.join(',');\n      }\n      if (vm.selectedMetrics && vm.selectedMetrics.length) {\n        q.metrics = vm.selectedMetrics.join(',');\n      }\n      if (vm.selectedSorting && vm.selectedSorting.length) {\n        q.sorting = vm.selectedSorting.map(function(s) {\n          return s.field + ':' + (s.direction || 'asc');\n        }).join(',');\n      }\n      if (vm.selectedTotals) {\n        q.totals = '1';\n      }\n      if (vm.pagination) {\n        if (vm.pagination.pageNumber) {\n          q.page = String(vm.pagination.pageNumber);\n        }\n        if (vm.pagination.pageSize) {\n          q.pageSize = String(vm.pagination.pageSize);\n        }\n      }\n      if (vm.timeInterval) {\n        q.timeInterval = vm.timeInterval;\n      }\n      if (vm.dateRange && vm.dateRange.dateStart) {\n        q.date_start = formatISO(vm.dateRange.dateStart);\n      }\n      if (vm.dateRange && vm.dateRange.dateEnd) {\n        q.date_end = formatISO(vm.dateRange.dateEnd);\n      }\n      (vm.selectedFilters || []).forEach(function(f) {\n        if (f && typeof f.toParams === 'function') {\n          var params = f.toParams();\n          if (params) {\n            Object.keys(params).forEach(function(k) {\n              var v = params[k];\n              if (v !== null && v !== undefined && v !== '') {\n                q[k] = v;\n              }\n            });\n          }\n        }\n      });\n\n      var current = {}; //$location.search();\n      var next = Object.assign({}, current, q);\n      ['dims', 'colDims', 'metrics', 'sorting', 'totals', 'page', 'pageSize', 'timeInterval', 'date_start', 'date_end']\n        .forEach(function(key) {\n          if (!q[key]) {\n            delete next[key];\n          }\n        });\n      if (!vm.selectedFilters || !vm.selectedFilters.length) {\n        Object.keys(next).forEach(function(k) {\n          if (/__gte$|__lte$|__gt$|__lt$|__eq$|__neq$/.test(k)) {\n            delete next[k];\n          }\n        });\n      }\n\n      $location.search(next);\n      $location.replace();\n    }\n\n    function syncStateFromUrl() {\n      var q = $location.search();\n      if (!q || Object.keys(q).length === 0) {\n        return;\n      }\n\n      // --- PRESET ---\n      if (q.preset) {\n        var preset = vm.presets.find(function (p) {\n          return p.code === q.preset ||\n                 p.name === ('DYNAMIC_REPORTS.' + q.preset) ||\n                 p.trans === q.preset;\n        });\n        if (preset) {\n          vm.report = preset;\n          initSelections();\n          updateSortingOptions();\n        }\n      }\n\n      // --- BASIC STATE (dims, metrics, sorting, totals, paging, time, daterange) ---\n      if (q.dims) {\n        vm.selectedDimensions = q.dims.split(',').map(function (d) { return d.trim(); }).filter(Boolean);\n      }\n      if (q.colDims) {\n        vm.selectedColumnDimensions = q.colDims.split(',').map(function (d) { return d.trim(); }).filter(Boolean);\n      }\n      if (q.metrics) {\n        vm.selectedMetrics = q.metrics.split(',').map(function (m) { return m.trim(); }).filter(Boolean);\n      }\n\n      if (q.sorting) {\n        vm.selectedSorting = q.sorting.split(',').map(function (s) {\n          var parts = s.split(':');\n          return { field: parts[0].trim(), direction: (parts[1] || 'asc').trim() };\n        });\n      }\n\n      vm.selectedTotals = q.totals === '1' || q.totals === 'true';\n      if (q.page)     { vm.pagination.pageNumber = parseInt(q.page, 10) || 1; }\n      if (q.pageSize) { vm.pagination.pageSize  = parseInt(q.pageSize, 10) || vm.pagination.pageSize; }\n      if (q.timeInterval) { vm.timeInterval = q.timeInterval; }\n      if (q.date_start || q.date_end) {\n        vm.dateRange = { dateStart: toDate(q.date_start), dateEnd: toDate(q.date_end) };\n      }\n\n      function toDate(x) {\n        if (!x){\n          return null;\n        }\n        if (Object.prototype.toString.call(x) === '[object Date]') {\n          return x;\n        }\n        var d = new Date(x);\n        return isNaN(d.getTime()) ? null : d;\n      }\n      function getFilterMetaByName(name) {\n        return (vm.filters || []).find(function (f) { return f && f.name === name; }) || null;\n      }\n      function ensureFilter(map, field) {\n        if (map[field]) return map[field];\n        var meta = getFilterMetaByName(field);\n        var f = new DynamicReportFilter({\n          name: field,\n          type: meta ? meta.type : 'int',\n          endpoint: meta ? meta.endpoint : null,\n          serializer: meta ? meta.serializer : null\n        });\n        if (f.type === 'date' && (!f.value || typeof f.value !== 'object')) {\n          f.value = { dateStart: null, dateEnd: null };\n        }\n        map[field] = f;\n        return f;\n      }\n      function applyPiece(map, field, opRaw, valueRaw) {\n        var f = ensureFilter(map, field);\n        var op = (opRaw || 'eq').toLowerCase();\n\n        var raw = (valueRaw == null) ? '' : ('' + valueRaw).trim();\n        var normalized = raw.replace(',', '.');\n\n        if (f.type === 'date') {\n          if (normalized.indexOf('..') > -1) {\n            var parts = normalized.split('..');\n            f.value = { dateStart: toDate(parts[0]), dateEnd: toDate(parts[1]) };\n            return;\n          }\n          if (!f.value || typeof f.value !== 'object') {\n            f.value = { dateStart: null, dateEnd: null };\n          }\n          if (op === 'gte') { f.value.dateStart = toDate(normalized); return; }\n          if (op === 'lte') { f.value.dateEnd   = toDate(normalized); return; }\n          if (op === 'eq')  {\n            var d = toDate(normalized);\n            f.value.dateStart = d; f.value.dateEnd = d; return;\n          }\n          return;\n        }\n\n        if (f.type === 'fk') {\n          var ids = String(valueRaw || '')\n            .split(',')\n            .map(function (v) { return v.trim(); })\n            .filter(Boolean)\n            .map(function (v) { return { id: parseInt(v, 10) }; });\n\n          f.value  = ids;\n          f.values = window.angular.copy(ids);\n\n          f.operation = 'eq';\n          return;\n        }\n\n        f.operation = op;\n\n        var isNumericMeta = ['int','integer','float','double','number','decimal'].indexOf((getFilterMetaByName(field) || {}).type) !== -1;\n        var isNumericOp   = ['gt','lt','gte','lte','eq','neq'].indexOf(op) !== -1;\n\n        if (isNumericMeta || isNumericOp) {\n\n          var meta = getFilterMetaByName(field);\n          var n = (meta && (meta.type === 'int' || meta.type === 'integer'))\n                    ? parseInt(normalized, 10)\n                    : parseFloat(normalized);\n          f.value = isNaN(n) ? null : n;\n        } else {\n          f.value = normalized;\n        }\n      }\n\n      var filterMap = Object.create(null);\n\n      if (q.f) {\n        var blocks = Array.isArray(q.f) ? q.f : [q.f];\n        blocks.forEach(function (b) {\n          b.split(';').forEach(function (tok) {\n            if (!tok){ return; }\n            var parts = tok.split(':');\n            if (parts.length < 3){ return; }\n            var field = parts.shift();\n            var op    = parts.shift();\n            var val   = parts.join(':'); // allow ':' inside value\n            applyPiece(filterMap, field, op, val);\n          });\n        });\n      }\n\n      Object.keys(q).forEach(function (key) {\n        var m = key.match(/^(.+)__(gte|lte|gt|lt|neq|eq)$/);\n        if (m) {\n          var field = m[1];\n          var op    = m[2];\n          applyPiece(filterMap, field, op, q[key]);\n          return;\n        }\n\n        var meta = getFilterMetaByName(key);\n        if (meta && meta.type === 'fk') {\n          applyPiece(filterMap, key, 'eq', q[key]);\n        }\n      });\n\n\n      vm.selectedFilters = Object.keys(filterMap).map(function (name) { return filterMap[name]; });\n\n      // --- finalize ---\n      updateSortingOptions();\n      saveSelections();\n      savePagination();\n    }\n\n    function formatISO(d) {\n      if (!d) {\n        return null;\n      }\n      var dd = (window.moment && window.moment(d).isValid()) ? window.moment(d).toDate() : new Date(d);\n      if (isNaN(dd.getTime())) {\n        return null;\n      }\n      var y = dd.getFullYear();\n      var m = String(dd.getMonth() + 1).padStart(2, '0');\n      var day = String(dd.getDate()).padStart(2, '0');\n      return y + '-' + m + '-' + day;\n    }\n\n    function loadPrest() {\n      var presetName = localStorage.getItem(getStorageKey('preset', true));\n      if (presetName) {\n        vm.report = vm.presets.find(function(preset) {\n          return preset.name === presetName;\n        }) || vm.presets[0];\n      } else {\n        vm.report = vm.presets[0];\n      }\n    }\n\n    function initSelections() {\n      vm.selectedFilters = window.angular.copy(vm.report.filters).map(deserializeFilter);\n      vm.selectedDimensions = window.angular.copy(vm.report.dimensions);\n      vm.selectedColumnDimensions = window.angular.copy(vm.report.columnDimensions);\n      vm.selectedMetrics = window.angular.copy(vm.report.metrics);\n      vm.selectedSorting = window.angular.copy(vm.report.sorts || []);\n      vm.selectedTotals = vm.report.totals;\n      updateSortingOptions();\n      $timeout(function() {\n        $rootScope.$emit('ndDynamicReportController::restoreOptions');\n      }, 100);\n    }\n\n    function initPagination() {\n      var storedPagination = JSON.parse(localStorage.getItem(getStorageKey('pagination')));\n      if (storedPagination) {\n        vm.pagination = storedPagination;\n      } else {\n        vm.pagination = {\n          pageNumber: 1,\n          pageSize: 50,\n          totalItems: null,\n          totalPages: null\n        };\n      }\n    }\n\n    function initWatchers() {\n      vm.onResizeWatcher = angular.element($window).on('resize', resizeChart);\n\n      /*\n      // TODO remove ???\n      vm.selectedDimensionsWatcher = $scope.$watch('selectedDimensions', function(newVal, oldVal) {\n        if (newVal !== oldVal) {\n          vm.selectedDimensions = newVal;\n        }\n      });\n      // TODO remove ???\n      vm.selectedMetricsWatcher = $scope.$watch('selectedMetrics', function(newVal, oldVal) {\n        if (newVal !== oldVal) {\n          vm.selectedMetrics = newVal;\n        }\n      });\n      */\n\n      $scope.$on('$destroy', function() {\n        if (vm.onResizeWatcher) {\n          vm.onResizeWatcher();\n        }\n        /*if (vm.selectedDimensionsWatcher) {\n          vm.selectedDimensionsWatcher();\n        }\n        if (vm.selectedMetricsWatcher) {\n          vm.selectedMetricsWatcher();\n        }*/\n      });\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      filter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function initDateRange() {\n      if ($scope.dateRange) {\n        vm.dateRange = $scope.dateRange;\n\n        vm.dateRangeWatcher = $scope.$watch('dateRange', function(newValue, oldValue) {\n          if (newValue !== oldValue) {\n            if (newValue.dateStart !== newValue.dateEnd) {\n              getData();\n            }\n          }\n        }, true);\n\n        $scope.$on('$destroy', function() {\n          vm.dateRangeWatcher();\n        });\n\n      } else {\n        var storedDateRange = JSON.parse(localStorage.getItem(Session.company.id + '::' + $scope.storageLabel + 'Date'));\n        if (storedDateRange) {\n          vm.dateRange = {\n            dateStart: new Date(storedDateRange.dateStart),\n            dateEnd: new Date(storedDateRange.dateEnd)\n          };\n        } else {\n          var today = new Date();\n          var days = !today.getDay() ? 7 : today.getDay();\n          vm.dateRange = {\n            dateStart: new Date(today.getFullYear(), today.getMonth(), today.getDate() - days + 1),\n            dateEnd: new Date(today.getFullYear(), today.getMonth(), today.getDate() + (7 - days))\n          };\n\n          vm.todayIndex = new Date().getDay();\n          if (vm.todayIndex === 0) {\n            vm.todayIndex = 6;\n          }\n          vm.todayIndex--;\n        }\n      }\n    }\n\n    function safeParse(item) {\n      try {\n        return item ? JSON.parse(item) : null;\n      } catch (e) {\n        return null;\n      }\n    }\n\n    function loadSelections() {\n      var storedDimensions = safeParse(localStorage.getItem(getStorageKey('selectedDimensions')));\n      if (storedDimensions) {\n        vm.selectedDimensions = storedDimensions;\n      }\n\n      var storedColumnDimensions = safeParse(localStorage.getItem(getStorageKey('selectedColumnDimensions')));\n      if (storedColumnDimensions) {\n        vm.selectedColumnDimensions = storedColumnDimensions;\n      }\n\n      var storedMetrics = safeParse(localStorage.getItem(getStorageKey('selectedMetrics')));\n      if (storedMetrics) {\n        vm.selectedMetrics = storedMetrics;\n      }\n\n      var storedSorting = safeParse(localStorage.getItem(getStorageKey('selectedSorting')));\n      if (storedSorting) {\n        vm.selectedSorting = storedSorting;\n      }\n\n      var storedFilters = safeParse(localStorage.getItem(getStorageKey('selectedFilters')));\n      if (storedFilters) {\n        vm.selectedFilters = storedFilters.map(deserializeFilter);\n      }\n\n      var storedTimeInterval = safeParse(localStorage.getItem(getStorageKey('timeInterval')));\n      if (storedTimeInterval) {\n        vm.timeInterval = storedTimeInterval;\n      }\n    }\n\n    function getData(extraParams) {\n      getTableData(extraParams);\n      if ($scope.showChart) {\n        getChartData();\n      }\n    }\n\n    function getRowValue(row, field) {\n      var match = row.find(function(item) {\n        return item.key === field;\n      });\n\n      if (!match) {\n        return '-';\n      }\n\n      if (match.key === 'product_cover_thumbnail') {\n        if (match.value && match.value.indexOf('http') !== 0) {\n          return '<div class=\"text-center\">' + match.value + '</div>';\n        } else if (!match.value) {\n          return '<div class=\"text-center\"><i md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail md-default-theme md-font material-icons icon-package-variant-closed\" role=\"img\" aria-label=\"icon-package-variant-closed\"></i></div>';\n        }\n        return '<div class=\"text-center\"><img class=\"table-thumbnail border-radius-image w-32\" ' +\n          'src=\"' + match.value + '\" /></div>';\n      }\n\n      if (match.currency !== null) {\n        if (match.value === null) {\n          return '-';\n        }\n        var currencyCharacter =\n          typeof CURRENCIES[match.currency] !== 'undefined'\n            ? CURRENCIES[match.currency]\n            : null;\n        var value = $filter('price')(match.value, 2);\n\n        if (currencyCharacter !== null) {\n          value += ' ' + currencyCharacter;\n        }\n        return value;\n      }\n\n      if (match.type === 'float') {\n        return $filter('number')(match.value, 2);\n      }\n\n      if (match.type === 'percent') {\n        return $filter('number')(match.value, 2) + ' %';\n      }\n\n      if (match.type === 'images') {\n        return match.value\n          .map(function(image) {\n            return '<img class=\"table-thumbnails mr-10 border-radius-image w-40\" src=\"' + image + '\" />';\n          })\n          .join('');\n      }\n\n      return match.value;\n    }\n\n    function getTableData(extraParams) {\n      vm.fetching = true;\n      var parameters = {\n        date_start: $filter('date')(vm.dateRange.dateStart, 'yyyy-MM-dd'),\n        date_end: $filter('date')(vm.dateRange.dateEnd, 'yyyy-MM-dd'),\n        pageSize: vm.pagination.pageSize,\n        pageNumber: vm.pagination.pageNumber,\n        dimensions: vm.selectedDimensions,\n        column_dimensions: vm.selectedColumnDimensions,\n        metrics: vm.selectedMetrics,\n        sorting: vm.selectedSorting.map(function(element) {\n          return element.field + ':' + element.direction;\n        }),\n        totals: vm.selectedTotals\n      };\n      var listParameters = {\n        interval: vm.timeInterval,\n        // dimensions: vm.selectedDimensions.length > 0 ? vm.selectedDimensions[0] : '', TODO for the moment we are aggregating the total in one single line\n        metrics: vm.selectedMetrics.length > 0 ? vm.selectedMetrics[0] : 'amount'\n      };\n\n      if (vm.selectedFilters.length > 0) {\n        window.angular.extend(parameters, formatFilters());\n      }\n\n      if (extraParams && Object.keys(extraParams).length > 0) {\n        window.angular.extend(parameters, extraParams);\n      }\n\n      $scope.endpoint.get(\n        parameters,\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if ('export' in parameters) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('DYNAMIC_REPORTS.EXPORT_OK')).position('top right'));\n            } else {\n              vm.data = response.data;\n              vm.pagination.totalItems = response.recordsTotal;\n              vm.pagination.totalPages = Math.ceil(response.recordsTotal / vm.pagination.pageSize);\n              generateTable();\n            }\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            var errorMessage = $filter('translate')('REPORTS.' + response.code);\n            errorMessage += ': ' + response.error;\n            $mdToast.show($mdToast.simple().textContent(errorMessage).hideDelay(6000).position('top right'));\n          }\n          vm.fetching = false;\n        });\n    }\n\n    function getChartData(pageNumber) {\n      if (!pageNumber) {\n        pageNumber = 1;\n        vm.tempData = [];\n      }\n      var parameters = {\n        date_start: $filter('date')(vm.dateRange.dateStart, 'yyyy-MM-dd'),\n        date_end: $filter('date')(vm.dateRange.dateEnd, 'yyyy-MM-dd'),\n        // dimensions: vm.selectedDimensions.length > 0 ? vm.selectedDimensions[0] : '', TODO for the moment we are aggregating the total in one single line\n        metrics: vm.selectedMetrics.length > 0 ? vm.selectedMetrics[0] : 'amount',\n        interval: vm.timeInterval,\n        pageNumber: pageNumber\n      };\n\n      if (vm.selectedFilters.length > 0) {\n        angular.extend(parameters, formatFilters());\n      }\n\n      $scope.endpoint.list(\n        parameters,\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.tempData = vm.tempData.concat(response.data);\n            if (vm.tempData.length < response.recordsFiltered) {\n              getChartData(pageNumber + 1);\n            } else {\n              generateChart(vm.tempData);\n            }\n          }\n        });\n    }\n\n    function dimensionsChanged(selection) {\n      vm.selectedDimensions = selection;\n      vm.filterChanged = true;\n      saveSelections();\n    }\n\n    function columnDimensionsChanged(selection) {\n      vm.selectedColumnDimensions = selection;\n      vm.filterChanged = true;\n      saveSelections();\n    }\n\n    function metricsChanged(selection) {\n      vm.selectedMetrics = selection;\n      vm.filterChanged = true;\n      saveSelections();\n    }\n\n    function filtersChanged(selection) {\n      vm.selectedFilters = selection;\n      vm.filterChanged = true;\n      saveSelections();\n    }\n\n    function sortingChanged(selection) {\n      vm.selectedSorting = selection;\n      vm.filterChanged = true;\n      saveSelections();\n    }\n\n    function saveSelections() {\n      localStorage.setItem(getStorageKey('selectedDimensions'), JSON.stringify(vm.selectedDimensions));\n      localStorage.setItem(getStorageKey('selectedColumnDimensions'), JSON.stringify(vm.selectedColumnDimensions));\n      localStorage.setItem(getStorageKey('selectedMetrics'), JSON.stringify(vm.selectedMetrics));\n      localStorage.setItem(getStorageKey('selectedSorting'), JSON.stringify(vm.selectedSorting));\n      if (vm.selectedFilters) {\n        localStorage.setItem(getStorageKey('selectedFilters'), JSON.stringify(vm.selectedFilters.map(serializeFilter)));\n      } else {\n        localStorage.removeItem(getStorageKey('selectedFilters'));\n      }\n      scheduleUrlSync();\n    }\n\n    function timeIntervalChanged() {\n      localStorage.setItem(getStorageKey('timeInterval'), JSON.stringify(vm.timeInterval));\n      getData();\n    }\n\n    function serializeFilter(filter) {\n      return {\n        id: filter.id,\n        name: filter.name,\n        type: filter.type,\n        operation: filter.operation,\n        endpoint: filter.endpoint,\n        serializer: filter.serializer,\n        value: filter.value,\n        searchText: filter.searchText,\n        itemInstance: filter.itemInstance\n      };\n    }\n\n    function deserializeFilter(filter) {\n      return new DynamicReportFilter(filter);\n    }\n\n    function applyFilters() {\n      saveSelections();\n      updateSortingOptions();\n      goToFirstPage();\n      if ($scope.showChart) {\n        getChartData();\n      }\n      vm.filterChanged = false;\n    }\n\n    function updateSortingOptions() {\n      vm.sorting = [vm.selectedDimensions, vm.selectedMetrics].flat();\n    }\n\n    function changeDate() {\n      localStorage.setItem(Session.company.id + '::' + $scope.storageLabel + 'Date', JSON.stringify(vm.dateRange));\n      getData();\n    }\n\n    function debounceGetData() {\n      if (vm.debounceTimeout) {\n        $timeout.cancel(vm.debounceTimeout);\n      }\n      vm.debounceTimeout = $timeout(getData, 800);\n    }\n\n    function generateChart(data) {\n      if (!data || data.length === 0) {\n        return;\n      }\n      var chartDom = document.getElementById('dynamic-report-chart');\n      vm.chart = window.echarts.init(chartDom);\n\n      var selectedDimensions = getSelectedDimensions(vm.selectedDimensions);\n      var selectedColumnDimensions = getSelectedColumnDimensions(vm.selectedColumnDimensions);\n      var selectedMetric = getSelectedMetric(data[0]);\n      var groupedData = groupDataByDimension(data, selectedDimensions, selectedMetric);\n      var allIntervalDates = getAllIntervalDates();\n      fillMissingDates(groupedData, allIntervalDates);\n      var totalData = calculateTotals(groupedData, allIntervalDates);\n      var markArea = generateMarkArea(vm.timeInterval, allIntervalDates);\n      var series = createSeries(groupedData, allIntervalDates, markArea);\n\n      if (Object.keys(groupedData).length > 1) {\n        series.push(createTotalSeries(totalData));\n      }\n\n      var option = buildChartOptions(series, groupedData, allIntervalDates);\n      vm.chart.setOption(option);\n    }\n\n    function getSelectedDimensions(dimensions) {\n      if (!dimensions) {\n        return [];\n      }\n      return dimensions.filter(function(d) {\n        return d !== 'Date';\n      });\n    }\n\n    function getSelectedColumnDimensions(columnDimensions) {\n      if (!columnDimensions) {\n        return [];\n      }\n      return columnDimensions.filter(function(d) {\n        return d !== 'Date';\n      });\n    }\n\n    function getSelectedMetric(row) {\n      return row.find(function(metric) {\n        return metric.key !== 'interval_date';\n      });\n    }\n\n    function groupDataByDimension(data, selectedDimensions, selectedMetric) {\n      var groupedData = {};\n      var defaultDimensionName = $filter('translate')('DYNAMIC_REPORTS.TOTAL');\n\n      data.forEach(function(item) {\n        item.forEach(function(dimension) {\n          if (dimension.key === selectedDimensions[0]) {\n            defaultDimensionName = dimension.key;\n          }\n\n          if (!groupedData[defaultDimensionName]) {\n            groupedData[defaultDimensionName] = [];\n          }\n\n          if (item[0].key === selectedMetric.key) {\n            groupedData[defaultDimensionName].push({\n              intervalDate: item[0].interval_date,\n              value: parseFloat(item[0].value) || 0\n            });\n          }\n        });\n      });\n\n      Object.keys(groupedData).forEach(function(key) {\n        groupedData[key].sort(function(a, b) {\n          return new Date(a.intervalDate) - new Date(b.intervalDate);\n        });\n      });\n\n      return groupedData;\n    }\n\n    function fillMissingDates(groupedData, allIntervalDates) {\n      Object.keys(groupedData).forEach(function(key) {\n        var seriesIntervals = groupedData[key].map(function(item) {\n          return item.intervalDate;\n        });\n\n        allIntervalDates.forEach(function(intervalDate) {\n          if (seriesIntervals.indexOf(intervalDate) === -1) {\n            groupedData[key].push({ intervalDate: intervalDate, value: 0 });\n          }\n        });\n\n        groupedData[key].sort(function(a, b) {\n          return new Date(a.intervalDate) - new Date(b.intervalDate);\n        });\n      });\n    }\n\n    function calculateTotals(groupedData, allIntervalDates) {\n      if (Object.keys(groupedData).length <= 1) {\n        return [];\n      }\n\n      return allIntervalDates.map(function(intervalDate) {\n        var totalValue = 0;\n        Object.keys(groupedData).forEach(function(key) {\n          var item = groupedData[key].find(function(i) {\n            return i.intervalDate === intervalDate;\n          });\n          if (item) {\n            totalValue += item.value;\n          }\n        });\n        return { intervalDate: intervalDate, value: totalValue };\n      });\n    }\n\n    function generateMarkArea(timeInterval, allIntervalDates) {\n      if (timeInterval !== 'day') return {};\n\n      var markArea = {\n        itemStyle: { color: 'rgba(0, 0, 0, 0.04)' },\n        data: []\n      };\n\n      var area = [];\n\n      allIntervalDates.forEach(function(intervalDate) {\n        if (window.moment(intervalDate).isoWeekday() === 6) {\n          area.push({ xAxis: intervalDate });\n        } else if (window.moment(intervalDate).isoWeekday() === 7) {\n          var nextDay = new Date(intervalDate);\n          nextDay.setDate(nextDay.getDate() + 1);\n          area.push({ xAxis: window.moment(nextDay).format('YYYY-MM-DD') });\n          markArea.data.push(area);\n          area = [];\n        }\n      });\n\n      return markArea;\n    }\n\n    function createSeries(groupedData, allIntervalDates, markArea) {\n      var colors = [\n        fusePalettes[0].options['500'].hex\n      ];\n\n      return Object.keys(groupedData).map(function(key, index) {\n        return {\n          name: key,\n          type: 'line',\n          data: groupedData[key].map(function(item) {\n            return [item.intervalDate, item.value];\n          }),\n          lineStyle: { color: colors[index % colors.length] },\n          itemStyle: { color: colors[index % colors.length] },\n          smooth: 0.5,\n          markArea: markArea\n        };\n      });\n    }\n\n    function createTotalSeries(totalData) {\n      return {\n        name: 'Total',\n        type: 'line',\n        data: totalData.map(function(item) {\n          return [item.intervalDate, item.value];\n        }),\n        lineStyle: {\n          color: '#4a5ff0',\n          type: 'dashed'\n        },\n        itemStyle: { color: '#4a5ff0' },\n        areaStyle: { color: '#dff1fe' },\n        smooth: 0.5\n      };\n    }\n\n    function buildChartOptions(series, groupedData, allIntervalDates) {\n      return {\n        tooltip: {\n          trigger: 'axis',\n          valueFormatter: function(value) {\n            return $filter('number')(value, 2);\n          },\n          formatter: gridTooltipFormatter\n        },\n        legend: {\n          data: Object.keys(groupedData).concat(['Total']),\n          orient: 'horizontal',\n          bottom: 0,\n          left: '5px'\n        },\n        xAxis: {\n          type: 'category',\n          data: allIntervalDates,\n          boundaryGap: false,\n          axisLabel: {\n            inside: false,\n            margin: 10,\n            formatter: formatXAxisLabel\n          }\n        },\n        yAxis: {\n          type: 'value',\n          position: 'right'\n        },\n        grid: {\n          left: 15,\n          right: 15,\n          top: 15,\n          bottom: 40,\n          containLabel: true\n        },\n        series: series\n      };\n    }\n\n    function getAllIntervalDates() {\n      var allIntervalDates = [];\n      var currentDate = new Date(vm.dateRange.dateStart);\n      if (vm.timeInterval === 'day') {\n        while (currentDate <= vm.dateRange.dateEnd) {\n          allIntervalDates.push(window.moment(currentDate).format('YYYY-MM-DD'));\n          currentDate.setDate(currentDate.getDate() + 1);\n        }\n      } else if (vm.timeInterval === 'week') {\n        var day = currentDate.getDay();\n        var diff = currentDate.getDate() - day + (day === 0 ? -6 : 1);\n        currentDate.setDate(diff);\n        while (currentDate <= vm.dateRange.dateEnd) {\n          allIntervalDates.push(window.moment(currentDate).format('YYYY-MM-DD'));\n          currentDate.setDate(currentDate.getDate() + 7);\n        }\n      } else if (vm.timeInterval === 'month') {\n        currentDate.setDate(1);\n        while (currentDate <= vm.dateRange.dateEnd) {\n          allIntervalDates.push(window.moment(currentDate).format('YYYY-MM-DD'));\n          currentDate.setMonth(currentDate.getMonth() + 1);\n        }\n      }\n      return allIntervalDates;\n    }\n\n    /*function formatFilters() {\n      if (vm.selectedFilters.length === 0) {\n        return;\n      }\n      var result = {};\n      vm.selectedFilters.forEach(function(filter) {\n        var value = filter.formatValue();\n        if (value != null && value !== '') {\n          result[filter.formatName()] = value;\n        }\n      });\n      return result;\n    }*/\n    function formatFilters() {\n      if (!vm.selectedFilters || !vm.selectedFilters.length) {\n        return;\n      }\n      var result = {};\n      vm.selectedFilters.forEach(function(filter) {\n        var params = filter.toParams && filter.toParams();\n        if (params) {\n          Object.keys(params).forEach(function(k) {\n            var v = params[k];\n            if (v !== null && typeof v !== 'undefined' && v !== '') {\n              result[k] = v;\n            }\n          });\n        }\n      });\n      return result;\n    }\n\n    function openExportDialog() {\n      exportReport({ fileType: 'xlsx', export: true });\n      // TODO - We are not showing the dialog for now\n      // $mdDialog\n      //   .show({\n      //     controller: 'ExportReportDialogController',\n      //     controllerAs: 'vm',\n      //     templateUrl:\n      //       'app/main/apps/analytics/views/sale-analytics/dialogs/dynamic-report/export-report-dialog.html',\n      //     parent: angular.element(document.body),\n      //     clickOutsideToClose: true\n      //   })\n      //   .then(function (params) {\n      //     exportReport(params);\n      //   });\n    }\n\n    function exportReport(params) {\n      getData(params);\n    }\n\n    function resizeChart() {\n      if (vm.chart) {\n        vm.chart.resize();\n      }\n    }\n\n    function formatXAxisLabel(value) {\n      if (vm.timeInterval === 'day') {\n        return formatXAxisLabelByDay(value);\n      }\n      if (vm.timeInterval === 'week') {\n        return formatXAxisLabelByWeek(value);\n      }\n      if (vm.timeInterval === 'month') {\n        return formatXAxisLabelByMonth(value);\n      }\n    }\n\n    function formatXAxisLabelByDay(value) {\n      return $filter('date')(new Date(value), 'd MMM');\n    }\n\n    function formatXAxisLabelByWeek(value) {\n      var startDate = $filter('date')(new Date(value), 'd MMM');\n      var dateEnd = new Date(value);\n      dateEnd.setDate(dateEnd.getDate() + 6);\n      var endDate = $filter('date')(new Date(dateEnd), 'd MMM y');\n      return startDate + ' - ' + endDate;\n    }\n\n    function formatXAxisLabelByMonth(value) {\n      return $filter('date')(new Date(value), 'MMMM y');\n    }\n\n    function gridTooltipFormatter(params, ticket, callback) {\n      var result = '';\n      result += '<div layout=\"row\">';\n      result += formatXAxisLabel(params[0].axisValue);\n      result += '<div layout=\"row\">';\n      result += params[0].marker;\n      result += params[0].seriesName;\n      result += '<b class=\"ml-8\">' + $filter('number')(params[0].data[1], 2) + '</b>';\n      result += '</div>';\n      result += '</div>';\n      return result;\n    }\n\n    function generateTable() {\n      if (!vm.data.length) {\n        return;\n      }\n\n      vm.columns = vm.data[0].map(function(item) {\n        return {\n          field: item.key,\n          field_value: item.key_name,\n          isMetric: vm.selectedMetrics.includes(item.key)\n        };\n      });\n    }\n\n    function getFieldName(column) {\n      var key = 'DYNAMIC_REPORTS.' + column.field.toUpperCase();\n\n      // If it's a pricing tier field, use metric headers directly\n      if (column.field.startsWith('pricing_tier_')) {\n        return vm.metricHeaders && vm.metricHeaders.hasOwnProperty(column.field)\n          ? vm.metricHeaders[column.field]\n          : column.field;\n      }\n\n      // Try to translate the key\n      var translated = $filter('translate')(key);\n\n      // If the translation returns the same key, fallback to raw field name\n      if (translated === key) {\n        return column.field_value; // fallback to original\n      }\n\n      return translated;\n    }\n\n    function changePageSize() {\n      vm.pagination.pageNumber = 1;\n      getTableData();\n      savePagination();\n    }\n\n    function changePageManually() {\n      getTableData();\n      savePagination();\n    }\n\n    function goToFirstPage() {\n      vm.pagination.pageNumber = 1;\n      getTableData();\n      savePagination();\n    }\n\n    function goToPreviousPage() {\n      if (vm.pagination.pageNumber > 1) {\n        --vm.pagination.pageNumber;\n        getTableData();\n        savePagination();\n      }\n    }\n\n    function goToNextPage() {\n      if (vm.pagination.pageNumber < vm.pagination.totalPages) {\n        ++vm.pagination.pageNumber;\n        getTableData();\n      }\n      savePagination();\n    }\n\n    function goToLastPage() {\n      vm.pagination.pageNumber = vm.pagination.totalPages;\n      getTableData();\n      savePagination();\n    }\n\n    function savePagination() {\n      localStorage.setItem(getStorageKey('pagination'), JSON.stringify(vm.pagination));\n      scheduleUrlSync();\n    }\n\n    function restoreFilters() {\n      initSelections();\n      localStorage.removeItem(getStorageKey('selectedDimensions'));\n      localStorage.removeItem(getStorageKey('selectedColumnDimensions'));\n      localStorage.removeItem(getStorageKey('selectedMetrics'));\n      localStorage.removeItem(getStorageKey('selectedSorting'));\n      localStorage.removeItem(getStorageKey('selectedFilters'));\n      applyFilters();\n    }\n\n    function getStorageKey(attribute, global) {\n      var key = [Session.company.id, $scope.storageLabel, $scope.dynamicReportName, attribute, 'V4'];\n      if (!global) {\n        key.push(vm.report.name);\n      }\n      return key.join('::');\n    }\n\n    function presetChanged() {\n      // Persist selected preset name (global key)\n      localStorage.setItem(getStorageKey('preset', true), vm.report.name);\n\n      // Reset pagination BEFORE fetching\n      vm.pagination.pageNumber = 1;\n      vm.pagination.totalItems = null;   // optional: avoid showing stale counts\n      vm.pagination.totalPages = null;   // optional: avoid showing stale pages\n      savePagination();                  // persist reset\n\n      // Re-init selections and fetch with page 1\n      $timeout(function() {\n        // 1) Reload selections from the selected preset\n        initSelections();                 // sets vm.selectedSorting = vm.report.sorts || []\n\n        // 2) Rebuild available sorting fields (dims + metrics)\n        updateSortingOptions();\n\n        // 3) Force the selected sorting to EXACTLY match the preset's sorting\n        //    (prevents any stale localStorage from taking over)\n        vm.selectedSorting = window.angular.copy(vm.report.sorts || []);\n\n        // 4) Persist the fresh state so the UI stays consistent\n        saveSelections();\n\n        // 5) Tell children to refresh any chips/selectors, then fetch data\n        $rootScope.$emit('ndDynamicReportController::restoreOptions');\n        getData(); // will call with page 1 and the preset's sorting\n      }, 0);\n    }\n  }\n\n  /** @ngInject */\n  function ndDynamicReport() {\n    return {\n      restrict: 'E',\n      scope: {\n        presets: '=',\n        dynamicReportName: '=',\n        filters: '=',\n        dimensions: '=',\n        columnDimensions: '=',\n        metrics: '=',\n        metricHeaders: '=?',\n        sorting: '=?',\n        endpoint: '=',\n        storageLabel: '=',\n        showChart: '=',\n        reportTitle: '='\n      },\n      controller: 'ndDynamicReportController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/sale-analytics/directives/dynamic-report/nd-dynamic-report.html',\n      link: function(scope, element, attrs) {\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ExportReportDialogController', ExportReportDialogController);\n\n  /** @ngInject */\n  function ExportReportDialogController($mdDialog) {\n    var vm = this;\n\n    // Data\n    vm.fileType = 'json';\n    vm.sendEmail = false;\n    vm.emailTo = '';\n\n    // Methods\n    vm.cancel = cancel;\n    vm.exportReport = exportReport;\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function exportReport() {\n      var params = {\n        file_type: vm.fileType,\n        send_email: vm.sendEmail,\n        email_to: vm.sendEmail ? vm.emailTo : null\n      };\n      $mdDialog.hide(params);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndWeeklyHeatmapController', ndWeeklyHeatmapController)\n    .directive('ndWeeklyHeatmap', ndWeeklyHeatmap);\n\n  /** @ngInject */\n  function ndWeeklyHeatmapController($filter, $scope, $timeout, api, Session, HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouseIds = $scope.warehouseIds;\n    vm.dateRange = $scope.dateRange;\n    vm.accumulateHeadmap = false;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n\n    // Methods\n    vm.updateHeatmap = updateHeatmap;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      var unregisterDateEnd = $scope.$watch('dateRange.dateEnd', function (newVal, oldVal) {\n        if ($scope.dateRange.dateStart !== $scope.dateRange.dateEnd){\n          updateHeatmap();\n        }\n      });\n\n      $scope.$on('$destroy', function () {\n        unregisterDateEnd();\n      });\n\n      $timeout(function () {\n        initializeHeatmap();\n      }, 500);\n    }\n\n    function renderHeatmap() {\n\n      var data = vm.heatmapData;\n      var max_value = 0;\n\n      for (var i = 0; i < data.length; i++) {\n        if (data[i][2] > max_value) {\n          max_value = data[i][2]\n        }\n      }\n\n      var hours = [];\n      for (var h = 0; h < 24; ++h) {\n        hours.push(h + ':00');\n      }\n\n      var days = [\n        $filter('translate')('RETAIL_DASHBOARD.MONDAY'),\n        $filter('translate')('RETAIL_DASHBOARD.TUESDAY'),\n        $filter('translate')('RETAIL_DASHBOARD.WEDNESDAY'),\n        $filter('translate')('RETAIL_DASHBOARD.THURSDAY'),\n        $filter('translate')('RETAIL_DASHBOARD.FRIDAY'),\n        $filter('translate')('RETAIL_DASHBOARD.SATURDAY'),\n        $filter('translate')('RETAIL_DASHBOARD.SUNDAY')\n      ];\n\n      var option = {\n        tooltip: {\n          show: true,\n          position: 'top',\n          textStyle: {\n            fontFamily: 'Silka'\n          },\n        },\n        animation: false,\n        grid: {\n          height: '500px',\n          y: '40px',\n          x: '60px',\n          width: '90%'\n        },\n        xAxis: {\n          type: 'category',\n          position: 'top',\n          data: days,\n          interval: 0,\n          splitArea: {\n            show: true,\n            areaStyle: {\n              color: ['rgba(0,0,0,0.02)', 'rgba(0,0,0,0)']\n            }\n          },\n          axisLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0)'\n            }\n          },\n          axisLabel: {\n            color: 'rgba(0,0,0,0.87)',\n            fontFamily: 'Silka'\n          },\n          axisTick: {\n            show: false\n          },\n          splitLine: {\n            show: false\n          }\n        },\n        yAxis: {\n          type: 'category',\n          data: hours,\n          inverse: true,\n          interval: 0,\n          splitArea: {\n            show: true,\n            areaStyle: {\n              color: ['rgba(0,0,0,0.02)', 'rgba(0,0,0,0)']\n            }\n          },\n          axisLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0)'\n            }\n          },\n          axisLabel: {\n            color: 'rgba(0,0,0,0.87)',\n            fontFamily: 'Silka',\n            align: 'right'\n          },\n          axisTick: {\n            show: false\n          },\n          splitLine: {\n            show: false\n          }\n        },\n        visualMap: {\n          type: 'continuous',\n          /*type: 'piecewise',*/\n          itemWidth: 5,\n          inRange: {\n            color: [\n              '#6577f2',\n              '#3243e9',\n              '#000000'\n            ]\n          },\n          textStyle: {\n            fontFamily: 'Silka'\n          },\n          align: 'auto',\n          min: 0,\n          max: max_value,\n          calculable: true,\n          orient: 'horizontal',\n          left: 'center',\n          bottom: '24px',\n          formatter: function (value) {\n            return $filter('price')(value) + ' ' + vm.currencyCharacter;\n          },\n        },\n        series: [{\n          name: $filter('translate')('RETAIL_DASHBOARD.SALES'),\n          type: 'heatmap',\n          data: data,\n          label: {\n            normal: {\n              fontSize: 14,\n              fontFamily: 'Silka',\n              show: true,\n              formatter: function (item) {\n                if(item && item.data && item.data.length === 3){\n                  return $filter('price')(item.data[2]) + ' ' + vm.currencyCharacter;\n                }\n                return '';\n              }\n            }\n          },\n          itemStyle: {\n            emphasis: {\n              borderWidth: 3,\n              borderColor: '#010000'\n              // borderColor: '#8852A0',\n              // shadowBlur: 10,\n              // shadowColor: 'rgba(0, 0, 0, 0.5)'\n            },\n            borderWidth: 0,\n            borderColor: '#FFF'\n          },\n          tooltip: {\n            formatter: function (item) {\n              return item.name + ' ' + item.value[1] + ':00-' + item.value[1] + ':59 <br>' + $filter('price')(item.value[2]) + ' ' + vm.currencyCharacter;\n            },\n            textStyle: {\n              fontSize: 14\n            }\n          }\n        }]\n      };\n      if (option && typeof option === \"object\") {\n        vm.heatmapChart.setOption(option);\n      }\n    }\n\n    function initializeHeatmap() {\n      var dom = document.getElementById(\"heatmap\");\n      vm.heatmapChart = window.echarts.init(dom);\n      updateHeatmap();\n    }\n\n    function changeHeatmapWeek(week) {\n      vm.selectedHeatmapWeek = week;\n      updateHeatmap();\n    }\n\n    function updateHeatmap() {\n      api.inventories.posOrders.save({\n        option: 'week-heatmap',\n        accumulate: vm.accumulateHeadmap,\n        warehouse_ids: vm.warehouseIds,\n        date_start: vm.dateRange.dateStart,\n        date_end: vm.dateRange.dateEnd\n      }, function (response, fn, status) {\n        if (status == 200) {\n          vm.heatmapData = response.data;\n          renderHeatmap();\n        }\n      })\n    }\n  }\n\n  /** @ngInject */\n  function ndWeeklyHeatmap() {\n    return {\n      restrict: 'E',\n      scope: {\n        dateRange: '=',\n        warehouseIds: '='\n      },\n      controller: 'ndWeeklyHeatmapController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/retail-dashboard/directives/nd-weekly-heatmap/nd-weekly-heatmap.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTopTenController', ndTopTenController)\n    .directive('ndTopTen', ndTopTen);\n\n  /** @ngInject */\n  function ndTopTenController($filter, $scope, api, Session, HTTP_STATUS, Utils) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouseIds = $scope.warehouseIds;\n    vm.dateRange = $scope.dateRange;\n    vm.topTen = null;\n    vm.topTenType = $scope.topTenType;\n    vm.percentage = percentage;\n    vm.showSellOuts = $scope.sellOuts;\n    // Methods\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n\n      var unregisterDateStart = $scope.$watch('dateRange.dateStart', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      var unregisterDateEnd = $scope.$watch('dateRange.dateEnd', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      var unregisterSeason = $scope.$watch('filters.season', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      var unregisterBrand = $scope.$watch('filters.brand', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      var unregisterCategory = $scope.$watch('filters.category', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      var unregisterSubcategory = $scope.$watch('filters.subcategory', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      var unregisterIsNoos = $scope.$watch('filters.is_noos', function (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          updateTopTen();\n        }\n      });\n\n      $scope.$on('$destroy', function () {\n        unregisterDateStart();\n        unregisterDateEnd();\n        unregisterSeason();\n        unregisterBrand();\n        unregisterCategory();\n        unregisterSubcategory();\n        unregisterIsNoos();\n      });\n\n      updateTopTen();\n    }\n\n    function percentage(total, partial) {\n      return Math.round((100 / total) * partial);\n    }\n\n    function updateTopTen() {\n      Utils.saveDateRangeToLocalStorage(Session.company.id + '::analyticsRetailDashboardPerformanceDateRangeControllerV2', vm.dateRange);\n      localStorage.setItem(Session.company.id + '::analyticsRetailDashboardSellOutFiltersController', JSON.stringify($scope.filters));\n\n      var startDate = new Date(vm.dateRange.dateStart);\n      startDate.setHours(0, 0, 0, 0);\n      startDate = Utils.formatDateToStringLocal(startDate);\n\n      var endDate = new Date(vm.dateRange.dateEnd);\n      endDate.setHours(23, 59, 59, 999);\n      endDate = Utils.formatDateToStringLocal(endDate);\n\n      api.analytics.topTen.get({\n        option: vm.topTenType,\n        warehouse_ids: JSON.stringify(vm.warehouseIds),\n        date_start: startDate,\n        date_end: endDate,\n        category: $scope.filters.category,\n        subcategory: $scope.filters.subcategory,\n        brand: $scope.filters.brand,\n        season: $scope.filters.season,\n        is_noos: $scope.filters.is_noos\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.topTen = results;\n        } else {\n          // TODO show error toast\n        }\n      });\n    }\n  }\n\n  /** @ngInject */\n  function ndTopTen() {\n    return {\n      restrict: 'E',\n      scope: {\n        dateRange: '=',\n        warehouseIds: '=',\n        topTenType: '=',\n        filters: '=',\n        sellOuts: '='\n      },\n      controller: 'ndTopTenController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/retail-dashboard/directives/nd-top-ten/nd-top-ten.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSellOutController', ndSellOutController)\n    .directive('ndSellOut', ndSellOut);\n\n  /** @ngInject */\n  function ndSellOutController($filter, $scope, api, Session, HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouseIds = $scope.warehouseIds;\n    vm.sellOut = null;\n    vm.sellOutType = $scope.sellOutType;\n    vm.percentage = percentage;\n\n    // Methods\n\n    // Initialize\n    init();\n\n    // Functions\n    function init(){\n\n      var unregisterSeason = $scope.$watch('filters.season', function(newVal, oldVal){\n        updateSellOut();\n      });\n\n      var unregisterBrand = $scope.$watch('filters.brand', function(newVal, oldVal){\n        updateSellOut();\n      });\n\n      var unregisterCategory = $scope.$watch('filters.category', function(newVal, oldVal){\n        updateSellOut();\n      });\n\n      var unregisterSubcategory = $scope.$watch('filters.subcategory', function(newVal, oldVal){\n        updateSellOut();\n      });\n\n      var unregisterIsNOOS = $scope.$watch('filters.is_noos', function(newVal, oldVal){\n        updateSellOut();\n      });\n\n      $scope.$on('$destroy', function() {\n        unregisterSeason();\n        unregisterBrand();\n        unregisterCategory();\n        unregisterSubcategory();\n        unregisterIsNOOS();\n      });\n\n      updateSellOut();\n    }\n\n    function percentage(total, partial){\n      return Math.round((100/total)*partial);\n    }\n\n    function updateSellOut(){\n\n      localStorage.setItem(Session.company.id + '::analyticsRetailDashboardSellOutFiltersController', JSON.stringify($scope.filters));\n\n      api.analytics.sellOut.get({\n        option: vm.sellOutType,\n        warehouse_ids: JSON.stringify(vm.warehouseIds),\n        category: $scope.filters.category,\n        subcategory: $scope.filters.subcategory,\n        brand: $scope.filters.brand,\n        season: $scope.filters.season,\n        is_noos: $scope.filters.is_noos\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.sellOut = results;\n        }\n        else {\n          // TODO show error toast\n        }\n      });\n    }\n  }\n\n  /** @ngInject */\n  function ndSellOut() {\n    return {\n      restrict: 'E',\n      scope: {\n        warehouseIds: '=',\n        sellOutType: '=',\n        filters: '=',\n        sellOuts: '='\n      },\n      controller: 'ndSellOutController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/retail-dashboard/directives/nd-sell-out/nd-sell-out.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductKpisController', ndProductKpisController)\n    .directive('ndProductKpis', ndProductKpis);\n\n  /** @ngInject */\n  function ndProductKpisController($filter, $scope, api, Session, DTColumnBuilder, HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouseIds = $scope.warehouseIds;\n    vm.dateRange = $scope.dateRange;\n    vm.sellOut = null;\n    vm.sellOutType = $scope.sellOutType;\n    vm.percentage = percentage;\n    vm.currency = Session.company.currency;\n\n    /*vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.analytics.productKpi,\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[ 0, 'desc' ]],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('stock').withTitle($filter('translate')('RETAIL_DASHBOARD.CODE'))\n        .renderWith(function (data, type, full) {\n          return data;\n        }),\n    ];*/\n\n    // Methods\n    vm.print = print;\n\n    // Initialize\n    init();\n\n    // Functions\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#transfer-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function () {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        $state.go('app.inventory.transfers.transfer.products', {id: aData.id});\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function init() {\n\n      var unregisterSeason = $scope.$watch('filters.season', function (newVal, oldVal) {\n        updateSellOut();\n      });\n\n      var unregisterBrand = $scope.$watch('filters.brand', function (newVal, oldVal) {\n        updateSellOut();\n      });\n\n      var unregisterCategory = $scope.$watch('filters.category', function (newVal, oldVal) {\n        updateSellOut();\n      });\n\n      var unregisterSubcategory = $scope.$watch('filters.subcategory', function (newVal, oldVal) {\n        updateSellOut();\n      });\n\n      var unregisterIsNOOS = $scope.$watch('filters.is_noos', function (newVal, oldVal) {\n        updateSellOut();\n      });\n\n      $scope.$on('$destroy', function () {\n        unregisterSeason();\n        unregisterBrand();\n        unregisterCategory();\n        unregisterSubcategory();\n        unregisterIsNOOS();\n      });\n\n      updateSellOut();\n    }\n\n    function percentage(total, partial) {\n      if (total) {\n        return Math.round((100 / total) * partial) + '%';\n      }\n      return '-';\n    }\n\n    function updateSellOut() {\n      localStorage.setItem(Session.company.id + '::analyticsRetailDashboardSellOutFiltersController', JSON.stringify($scope.filters));\n\n      api.analytics.productKpis.get({\n        option: vm.sellOutType,\n        warehouse_ids: JSON.stringify(vm.warehouseIds),\n        category: $scope.filters.category,\n        subcategory: $scope.filters.subcategory,\n        brand: $scope.filters.brand,\n        season: $scope.filters.season,\n        is_noos: $scope.filters.is_noos\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.sellOut = results;\n        } else {\n          // TODO show error toast\n        }\n      });\n    }\n\n    function print(value) {\n      const ignorables = [null, undefined];\n      if (ignorables.includes(value)) {\n        return '-';\n      }\n\n      return value\n    }\n  }\n\n  /** @ngInject */\n  function ndProductKpis() {\n    return {\n      restrict: 'E',\n      scope: {\n        warehouseIds: '=',\n        sellOutType: '=',\n        filters: '=',\n        sellOuts: '='\n      },\n      controller: 'ndProductKpisController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/retail-dashboard/directives/nd-product-kpis/nd-product-kpis.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndCompanyBasicRetailKpisController', ndCompanyBasicRetailKpisController)\n    .directive('ndCompanyBasicRetailKpis', ndCompanyBasicRetailKpis);\n\n  /** @ngInject */\n  function ndCompanyBasicRetailKpisController($scope, $document, $mdDialog, $mdToast, $filter, api, Session, HTTP_STATUS,\n                                              $timeout, BasicRetailKpi) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouseIds = $scope.warehouseIds || [];\n    vm.verticalLayout = !!$scope.verticalLayout;\n    vm.dateRange = {};\n    vm.selectedChartId = '';\n    vm.basicRetailKpis = null;\n    vm.basicRetailKpisDict = {};\n    vm.basicRetailKpiAggregated = null;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.days = [];\n    vm.todayIndex = 0;\n\n    vm.cartConfig = {\n      refreshDataOnly: true,\n      deepWatchData: true\n    };\n\n    vm.chartOptions = {};\n    vm.detailChartOptions = {};\n    vm.chartOptionsDict = {};\n\n    vm.selectedChartInstance = null;\n\n    vm.chartKeys = [\n      'grossSalesActualChart',\n      'grossSalesPlanChart',\n      'percentageToPlanChart',\n\n      'transactionsChart',\n      'trafficChart',\n      'conversionChart',\n\n      'unitsPerTransactionChart',\n      'grossSalePerTransactionChart',\n      'unitsSoldChart',\n\n      'returnsChart',\n      'grossSalesLastYearChart',\n      'grossSalesPercentageLastYearChart',\n\n    ];\n\n    if(Session.hasPermission('inventory.products.product.details.cost')){\n      vm.chartKeys.push(\n        'unitsSoldCostChart',\n        'grossProfitMarginChart',\n        'netSalesActualChart',\n        'netSalesLastYearChart'\n      );\n    }\n\n    vm.selectedChart = null;\n    vm.basicRetailKpisReady = false;\n\n    // Methods\n    vm.selectChart = selectChart;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      initDates();\n      initOptions();\n      getKpis();\n    }\n\n    function initDates() {\n      if ($scope.dateRange) {\n        vm.dateRange = $scope.dateRange;\n\n        vm.dateRangeWatcher = $scope.$watch('dateRange', function (newValue, oldValue) {\n          if (newValue !== oldValue) {\n            if (newValue.dateStart !== newValue.dateEnd) {\n              initOptions();\n              getKpis();\n            }\n          }\n        }, true);\n\n        $scope.$on('$destroy', function () {\n          vm.dateRangeWatcher();\n        });\n\n      } else {\n        var today = new Date();\n        var days = !today.getDay() ? 7 : today.getDay();\n        vm.dateRange = {\n          dateStart: new Date(today.getFullYear(), today.getMonth(), today.getDate() - days + 1),\n          dateEnd: new Date(today.getFullYear(), today.getMonth(), today.getDate() + (7 - days))\n        };\n\n        vm.todayIndex = new Date().getDay();\n        if (vm.todayIndex === 0) {\n          vm.todayIndex = 6;\n        }\n        vm.todayIndex--;\n      }\n    }\n\n    function initOptions() {\n\n      // Days\n      vm.days = [];\n      for (var d = new Date(vm.dateRange.dateStart); d <= vm.dateRange.dateEnd; d.setDate(d.getDate() + 1)) {\n        // vm.days.push($filter('date')(d, 'EEEE d MMM'));\n        vm.days.push(angular.copy(d));\n      }\n\n      // Small charts\n      vm.chartOptions = {\n        grid: {\n          containLabel: false,\n          height: '90%',\n          top: '5%',\n          left: '3%',\n          right: '3%',\n          bottom: '3%'\n        },\n        xAxis: {\n          show: true,\n          type: 'category',\n          boundaryGap: false,\n          data: vm.days,\n          interval: 0,\n          splitLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            interval: 0,\n            show: false\n          },\n          axisLine: {\n            show: true,\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          }\n        },\n        yAxis: {\n          show: false,\n          type: 'value',\n          splitLine: {\n            show: false\n          },\n          axisLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            show: false\n          }\n        },\n        series: [\n          {\n            animationEasing: 'sinusoidalOut',\n            animationDelay: 0,\n            animationDuration: 500,\n            type: 'line',\n            smooth: 0.25,\n            smoothMonotone: 'x',\n            sampling: 'average', // average when contains so much data\n            z: 99\n          },\n          {\n            animationEasing: 'sinusoidalOut',\n            animationDelay: 0,\n            animationDuration: 500,\n            type: 'line',\n            smooth: 0.25,\n            smoothMonotone: 'x',\n            sampling: 'average'\n          },\n          {\n            animationEasing: 'sinusoidalOut',\n            animationDelay: 0,\n            animationDuration: 500,\n            type: 'line',\n            smooth: 0.25,\n            smoothMonotone: 'x',\n            sampling: 'average'\n          }\n        ]\n      };\n\n      vm.chartOptionsDict = {\n        grossSalesActualChart: angular.copy(vm.chartOptions),\n        grossSalesPlanChart: angular.copy(vm.chartOptions),\n        percentageToPlanChart: angular.copy(vm.chartOptions),\n        transactionsChart: angular.copy(vm.chartOptions),\n        trafficChart: angular.copy(vm.chartOptions),\n        conversionChart: angular.copy(vm.chartOptions),\n        unitsPerTransactionChart: angular.copy(vm.chartOptions),\n        grossSalePerTransactionChart: angular.copy(vm.chartOptions),\n        unitsSoldChart: angular.copy(vm.chartOptions),\n        averageUnitRetailChart: angular.copy(vm.chartOptions),\n        returnsChart: angular.copy(vm.chartOptions),\n        grossSalesLastYearChart: angular.copy(vm.chartOptions),\n        grossSalesPercentageLastYearChart: angular.copy(vm.chartOptions),\n        unitsSoldCostChart: angular.copy(vm.chartOptions),\n        grossProfitMarginChart: angular.copy(vm.chartOptions),\n        netSalesActualChart: angular.copy(vm.chartOptions),\n        netSalesLastYearChart: angular.copy(vm.chartOptions)\n      };\n\n      // Selected big chart\n      vm.detailChartOptions = {\n        tooltip: {\n          textStyle: {\n            fontFamily: 'Silka'\n          },\n          trigger: 'axis',\n          formatter: function (args) {\n\n            var formattedDate = $filter('date')(new Date(args[0].axisValue), 'EEEE d MMM');\n            var tooltip = '<span>' + formattedDate + '</span><br>';\n\n            args.forEach(function (arg, index) {\n              tooltip += '<span>' + arg.marker + ' ' + arg.seriesName + ': ' + $filter('number')(arg.value, vm.selectedChart.tooltipDecimals[index]) + ' ' + vm.selectedChart.tooltipUnits[index] + '</span><br>';\n            });\n            return tooltip;\n          }\n        },\n        grid: {\n          top: vm.verticalLayout ? '32' : '3%',\n          left: vm.verticalLayout ? '16' : '6%',\n          right: vm.verticalLayout ? '16' : '6%',\n          bottom: vm.verticalLayout ? '50' : '3%',\n          containLabel: true\n        },\n        xAxis: {\n          type: 'category',\n          boundaryGap: false,\n          data: vm.days,\n          interval: 0,\n          splitLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            fontSize: 10,\n            fontFamily: 'Silka',\n            color: 'rgba(0,0,0,0.54)',\n            formatter: function (value) {\n              return $filter('date')(new Date(value), 'd MMM');\n            }\n          },\n          axisLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          }\n        },\n        yAxis: {\n          type: 'value',\n          splitLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          },\n          axisLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n\n          axisLabel: {\n            fontFamily: 'Silka',\n            color: 'rgba(0,0,0,0.54)',\n            /* TODO distinguish if the selected character is currency or not\n            formatter: function (value) {\n              return $filter('price')(value) + ' ' + vm.currencyCharacter;\n            }*/\n          }\n        },\n        series: [\n          {\n            animationEasing: 'sinusoidalOut',\n            animationDelay: 0,\n            animationDuration: 500,\n            type: 'line',\n            symbolSize: 8,\n            smooth: 0.25,\n            smoothMonotone: 'x',\n            sampling: 'average', // average when contains so much data\n            z: 99\n          }, {\n            animationEasing: 'sinusoidalOut',\n            animationDelay: 0,\n            animationDuration: 500,\n            type: 'line',\n            symbolSize: 8,\n            smooth: 0.25,\n            smoothMonotone: 'x',\n            sampling: 'average'\n          }, {\n            animationEasing: 'sinusoidalOut',\n            animationDelay: 0,\n            animationDuration: 500,\n            type: 'line',\n            symbolSize: 8,\n            smooth: 0.25,\n            smoothMonotone: 'x',\n            sampling: 'average'\n          }\n        ]\n      };\n\n      if (vm.verticalLayout) {\n        vm.detailChartOptions['dataZoom'] = [{\n          type: 'inside'\n        }, {\n          handleStyle: {\n            color: '#fff',\n            shadowBlur: 3,\n            shadowColor: 'rgba(0, 0, 0, 0.2)',\n            shadowOffsetX: 2,\n            shadowOffsetY: 2\n          }\n        }];\n\n        vm.detailChartOptions['toolbox'] = {\n          feature: {\n            dataZoom: {\n              yAxisIndex: 'none',\n              title: {\n                zoom: $filter('translate')('RETAIL_DASHBOARD.ZOOM_AREA'),\n                back: $filter('translate')('RETAIL_DASHBOARD.RESTORE_ZOOM')\n              }\n            }\n          }\n        };\n\n        vm.detailChartOptions.tooltip['position'] = function (pt) {\n          return [pt[0], '10%'];\n        }\n      } else {\n        // To force painting all the days in x axis line\n        vm.detailChartOptions.xAxis.axisLabel['interval'] = 0;\n      }\n    }\n\n    function getKpis() {\n\n      vm.basicRetailKpis = [];\n      vm.basicRetailKpisReady = false;\n\n      var paramsAggregateAsList = {\n        option: 'aggregate-as-list',\n        date_gte: vm.dateRange.dateStart,\n        date_lte: vm.dateRange.dateEnd\n      };\n\n      if (vm.warehouseIds.length > 0) {\n        paramsAggregateAsList['content_type'] = 'warehouse';\n        paramsAggregateAsList['object_ids'] = vm.warehouseIds;\n      } else {\n        paramsAggregateAsList['content_type'] = 'company';\n        paramsAggregateAsList['object_id'] = Session.company.id;\n      }\n\n      // Get the historic values\n      api.analytics.basicRetailKpi.list(paramsAggregateAsList,\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.basicRetailKpisReady = true;\n            vm.basicRetailKpis = results;\n            generateKpisByCompanyDict();\n          } else {\n            // TODO show error toast\n          }\n        });\n\n      var paramsAggregate = angular.copy(paramsAggregateAsList);\n      paramsAggregate.option = 'aggregate';\n\n      // Get the aggregated value\n      api.analytics.basicRetailKpi.get(paramsAggregate,\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.basicRetailKpiAggregated = {\n              grossSalesActualChart: results.gross_sales_actual,\n              grossSalesPlanChart: results.gross_sales_plan,\n              percentageToPlanChart: results.gross_sales_percentage_to_plan,\n              transactionsChart: results.transactions,\n              trafficChart: results.traffic,\n              conversionChart: results.conversion,\n              unitsSoldChart: results.units_sold,\n              returnsChart: results.returns,\n              grossSalesLastYearChart: results.gross_sales_last_year,\n              grossSalesPercentageLastYearChart: results.gross_sales_percentage_last_year,\n              unitsReturnedChart: results.units_returned,\n              unitsPerTransactionChart: results.units_per_transaction,\n              grossSalePerTransactionChart: results.gross_sale_per_transaction,\n              averageUnitRetailChart: results.average_unit_retail,\n              unitsSoldCostChart: results.units_sold_cost,\n              grossProfitMarginChart: results.gross_profit_margin,\n              netSalesActualChart: results.net_sales_actual,\n              netSalesLastYearChart: results.net_sales_last_year\n            };\n          } else {\n            // TODO show error toast\n          }\n        });\n    }\n\n    function generateKpisByCompanyDict() {\n      if (vm.basicRetailKpis && vm.basicRetailKpisReady) {\n\n        vm.basicRetailKpis = vm.basicRetailKpis.sort(function (a, b) {\n          return new Date(a.date).getTime() - new Date(b.date).getTime();\n        });\n\n        vm.basicRetailKpisDict = {\n          grossSalesActualChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_sales_actual : null;\n            }),\n            /*key2: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_PLAN'),\n            values2: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return basicRetailKPI.gross_sales_plan;\n            }),\n            key3: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_LAST_YEAR'),\n            values3: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return basicRetailKPI.net_sales_last_year;\n            }),*/\n            tooltipUnits: [\n              vm.currencyCharacter\n              /* vm.currencyCharacter,\n               vm.currencyCharacter*/\n            ],\n            tooltipDecimals: [\n              2\n              /* 2,\n               2*/\n            ]\n          },\n          grossSalesPlanChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_PLAN'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_sales_plan : null;\n            }),\n            /*key2: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_PLAN'),\n            values2: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return basicRetailKPI.gross_sales_plan;\n            }),\n            key3: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_LAST_YEAR'),\n            values3: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return basicRetailKPI.net_sales_last_year;\n            }),*/\n            tooltipUnits: [\n              vm.currencyCharacter\n              /* vm.currencyCharacter,\n               vm.currencyCharacter*/\n            ],\n            tooltipDecimals: [\n              2\n              /* 2,\n               2*/\n            ]\n          },\n          percentageToPlanChart: {\n            titleUnit: '%',\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_PLAN'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_sales_percentage_to_plan : null;\n            }),\n            tooltipUnits: [\n              '%'\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          unitsSoldChart: {\n            titleUnit: null,\n            isDecimal: false,\n            key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.units_sold : null;\n            }),\n            tooltipUnits: [\n              ''\n            ],\n            tooltipDecimals: [\n              0\n            ]\n          },\n          transactionsChart: {\n            titleUnit: null,\n            isDecimal: false,\n            key: $filter('translate')('BASIC_RETAIL_KPI.TRANSACTIONS'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.transactions : null;\n            }),\n            /* key2: $filter('translate')('BASIC_RETAIL_KPI.TRAFFIC'),\n             values2: vm.basicRetailKpis.map(function (basicRetailKPI) {\n               return basicRetailKPI.traffic;\n             }),*/\n            tooltipUnits: [\n              ''\n              // $filter('translate')('BASIC_RETAIL_KPI.VISITORS')\n            ],\n            tooltipDecimals: [\n              0\n              // 0\n            ]\n          },\n          trafficChart: {\n            titleUnit: null,\n            isDecimal: false,\n            key: $filter('translate')('BASIC_RETAIL_KPI.VISITORS'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.traffic : null;\n            }),\n            tooltipUnits: [\n              $filter('translate')('BASIC_RETAIL_KPI.VISITORS')\n            ],\n            tooltipDecimals: [\n              0\n            ]\n          },\n          conversionChart: {\n            titleUnit: '%',\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.CONVERSION'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.conversion : null;\n            }),\n            tooltipUnits: [\n              '%'\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          returnsChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.RETURNS'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.returns : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n\n          },\n          grossSalesLastYearChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_LAST_YEAR'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_sales_last_year : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n\n          },\n          grossSalesPercentageLastYearChart: {\n            titleUnit: '%',\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES_PERCENTAGE_LAST_YEAR'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_sales_percentage_last_year : null;\n            }),\n            tooltipUnits: [\n              '%'\n            ],\n            tooltipDecimals: [\n              2\n            ]\n\n          },\n          unitsSoldCostChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD_COST'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.units_sold_cost : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n\n          },\n          grossProfitMarginChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_PROFIT_MARGIN'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_profit_margin : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          netSalesActualChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.NET_SALES_ACTUAL'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.net_sales_actual : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          netSalesLastYearChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.NET_SALES_LAST_YEAR'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.net_sales_last_year : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          unitsReturnedChart: {\n            titleUnit: null,\n            isDecimal: false,\n            key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_RETURNED'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.units_returned : null;\n            }),\n            tooltipUnits: [\n              ''\n            ],\n            tooltipDecimals: [\n              0\n            ]\n          },\n          unitsPerTransactionChart: {\n            titleUnit: null,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.units_per_transaction : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          grossSalePerTransactionChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALE_PER_TRANSACTION'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.gross_sale_per_transaction : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          },\n          averageUnitRetailChart: {\n            titleUnit: vm.currencyCharacter,\n            isDecimal: true,\n            key: $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL'),\n            values: vm.basicRetailKpis.map(function (basicRetailKPI) {\n              return new Date(basicRetailKPI.date) <= new Date() ? basicRetailKPI.average_unit_retail : null;\n            }),\n            tooltipUnits: [\n              vm.currencyCharacter\n            ],\n            tooltipDecimals: [\n              2\n            ]\n          }\n        };\n\n        $timeout(function () {\n          var tempDelay = 0;\n          vm.chartKeys.forEach(function (chartKey) {\n\n            vm.chartOptionsDict[chartKey].series[0].name = vm.basicRetailKpisDict[chartKey].key;\n            vm.chartOptionsDict[chartKey].series[0].stack = vm.basicRetailKpisDict[chartKey].key;\n            vm.chartOptionsDict[chartKey].series[0].data = vm.basicRetailKpisDict[chartKey].values;\n            vm.chartOptionsDict[chartKey].series[0].animationDelay = tempDelay;\n\n            if (vm.basicRetailKpisDict[chartKey].values2) {\n              tempDelay += 100;\n              vm.chartOptionsDict[chartKey].series[1].name = vm.basicRetailKpisDict[chartKey].key2;\n              vm.chartOptionsDict[chartKey].series[1].stack = vm.basicRetailKpisDict[chartKey].key2;\n              vm.chartOptionsDict[chartKey].series[1].data = vm.basicRetailKpisDict[chartKey].values2;\n              vm.chartOptionsDict[chartKey].series[1].animationDelay = tempDelay;\n            }\n\n            if (vm.basicRetailKpisDict[chartKey].values3) {\n              tempDelay += 100;\n              vm.chartOptionsDict[chartKey].series[2].name = vm.basicRetailKpisDict[chartKey].key3;\n              vm.chartOptionsDict[chartKey].series[2].stack = vm.basicRetailKpisDict[chartKey].key3;\n              vm.chartOptionsDict[chartKey].series[2].data = vm.basicRetailKpisDict[chartKey].values3;\n              vm.chartOptionsDict[chartKey].series[2].animationDelay = tempDelay;\n            }\n\n            setOptionsColorsByChart(vm.chartOptionsDict[chartKey], chartKey, true);\n\n            var dom = document.getElementsByClassName(chartKey)[0];\n            var tempInstance = window.echarts.init(dom);\n            tempInstance.setOption(vm.chartOptionsDict[chartKey], true);\n\n            tempDelay += 100;\n          });\n        }, 250);\n\n        $timeout(function () {\n          selectChart('grossSalesActualChart');\n        }, 250);\n      }\n    }\n\n    function selectChart(chart) {\n      vm.selectedChart = angular.copy(vm.basicRetailKpisDict[chart]);\n      vm.selectedChartId = chart;\n\n      // Fill options according to selected chart\n      vm.detailChartOptions.series[0].name = vm.selectedChart.key;\n      vm.detailChartOptions.series[0].stack = vm.selectedChart.key;\n      vm.detailChartOptions.series[0].data = vm.selectedChart.values;\n\n      if (vm.selectedChart.values2) {\n        vm.detailChartOptions.series[1].name = vm.selectedChart.key2;\n        vm.detailChartOptions.series[1].stack = vm.selectedChart.key2;\n        vm.detailChartOptions.series[1].data = vm.selectedChart.values2;\n      } else {\n        vm.detailChartOptions.series[1].name = null;\n        vm.detailChartOptions.series[1].stack = null;\n        vm.detailChartOptions.series[1].data = null;\n      }\n\n      if (vm.selectedChart.values3) {\n        vm.detailChartOptions.series[2].name = vm.selectedChart.key3;\n        vm.detailChartOptions.series[2].stack = vm.selectedChart.key3;\n        vm.detailChartOptions.series[2].data = vm.selectedChart.values3;\n      } else {\n        vm.detailChartOptions.series[2].name = null;\n        vm.detailChartOptions.series[2].stack = null;\n        vm.detailChartOptions.series[2].data = null;\n      }\n\n      // Change colors between charts\n      setOptionsColorsByChart(vm.detailChartOptions, chart);\n\n      var dom = document.getElementById('selected-chart');\n      vm.selectedChartInstance = window.echarts.init(dom);\n      vm.selectedChartInstance.setOption(vm.detailChartOptions, true);\n    }\n\n    function setOptionsColorsByChart(option, chart, isSmall) {\n      if (chart === 'returnsChart' || chart === 'unitsReturnedChart') {\n        setNegativeColors(option, isSmall);\n      } else {\n        setPositiveColors(option, isSmall);\n      }\n    }\n\n    function setPositiveColors(options, isSmall) {\n      // options.color = ['rgba(54, 192, 241, 1)', 'rgb(255, 183, 77)', 'rgb(189, 189, 189)'];\n      options.color = ['#4A5ff0', '#E66000', '#00bb80'];\n\n      options.series[0].lineStyle = {\n        normal: {\n          width: isSmall ? 2 : 3,\n          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{\n            offset: 0,\n            color: '#4A5ff0'\n          }, {\n            offset: 1,\n            color: '#4A5ff0'\n          }])\n        }\n      };\n\n      options.series[1].lineStyle = {\n        normal: {\n          type: 'dotted',\n          width: isSmall ? 1 : 2\n        }\n      };\n\n      options.series[2].lineStyle = {\n        normal: {\n          width: isSmall ? 2 : 4,\n          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{\n            offset: 0,\n            color: '#00bb80'\n          }, {\n            offset: 1,\n            color: '#00bb80'\n          }])\n        }\n      };\n\n      options.series[0].areaStyle = {\n        normal: {\n          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{\n            offset: 0,\n            color: 'rgba(24, 160, 251, 0.2)'\n          }, {\n            offset: 1,\n            color: 'rgba(24, 160, 251, 0.2)'\n          }])\n        }\n      };\n\n      options.series[2].areaStyle = {\n        normal: {\n          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{\n            offset: 0,\n            color: 'rgba(26, 194, 166, 0.2)'\n          }, {\n            offset: 1,\n            color: 'rgba(26, 194, 166, 0.2)'\n          }])\n        }\n      };\n    }\n\n    function setNegativeColors(options, isSmall) {\n      options.color = ['#E66000'];\n\n      options.series[0].lineStyle = {\n        normal: {\n          width: isSmall ? 2 : 4,\n          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{\n            offset: 0,\n            color: '#E66000'\n          }, {\n            offset: 1,\n            color: '#E66000'\n          }])\n        }\n      };\n\n      options.series[0].areaStyle = {\n        normal: {\n          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{\n            offset: 0,\n            color: 'rgba(230, 96, 0, 0.2)'\n          }, {\n            offset: 1,\n            color: 'rgba(230, 96, 0, 0.2)'\n          }])\n        }\n      }\n    }\n\n  }\n\n  /** @ngInject */\n  function ndCompanyBasicRetailKpis() {\n    return {\n      restrict: 'E',\n      scope: {\n        warehouseIds: '=',\n        dateRange: '=?',\n        verticalLayout: '=?'\n      },\n      controller: 'ndCompanyBasicRetailKpisController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/retail-dashboard/directives/nd-company-basic-retail-kpis/nd-company-basic-retail-kpis.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndBasicRetailKpisTodateTableController', ndBasicRetailKpisTodateTableController)\n    .directive('ndBasicRetailKpisTodateTable', ndBasicRetailKpisTodateTable);\n\n  /** @ngInject */\n  function ndBasicRetailKpisTodateTableController($filter, $scope, api, Session, HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouseIds = $scope.warehouseIds;\n    vm.kpi = null;\n    vm.kpiWtd = null;\n    vm.kpiMtd = null;\n    vm.kpiYtd = null;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    // Methods\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      // If warehouseId is null, it's sent to the api anyway\n      var option = !!vm.warehouseId ? 'warehouse' : 'company';\n\n      var params = {\n        option: 'aggregate',\n        date_gte: new Date(),\n        date_lte: new Date(),\n\n        content_type: null,\n        object_id: null,\n        object_ids: null\n      };\n\n      if (vm.warehouseIds && vm.warehouseIds.length > 0) {\n        params.content_type = 'warehouse';\n        params.object_ids = vm.warehouseIds;\n      } else {\n        params.content_type = 'company';\n        params.object_ids = Session.company.id;\n      }\n\n      if (Session.hasPermission('analytics.retail_dashboard.realtime.view_today')) {\n        api.analytics.basicRetailKpi.get(\n          params,\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.kpi = results;\n            } else {\n              // TODO show error toast\n            }\n          });\n      }\n\n      if (Session.hasPermission('analytics.retail_dashboard.realtime.view_wtd')) {\n\n        api.analytics.basicRetailKpi.get(\n          angular.extend(params, {\n            option: 'week-to-date'\n          }),\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.kpiWtd = results;\n            } else {\n              // TODO show error toast\n            }\n          });\n      }\n\n      if (Session.hasPermission('analytics.retail_dashboard.realtime.view_mtd')) {\n\n        api.analytics.basicRetailKpi.get(\n          angular.extend(params, {\n            option: 'month-to-date'\n          }),\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.kpiMtd = results;\n            } else {\n              // TODO show error toast\n            }\n          });\n      }\n\n      if (Session.hasPermission('analytics.retail_dashboard.realtime.view_ytd')) {\n\n        api.analytics.basicRetailKpi.get(\n          angular.extend(params, {\n            option: 'year-to-date'\n          }),\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.kpiYtd = results;\n            } else {\n              // TODO show error toast\n            }\n          });\n      }\n    }\n  }\n\n  /** @ngInject */\n  function ndBasicRetailKpisTodateTable() {\n    return {\n      restrict: 'E',\n      scope: {\n        warehouseIds: '=?'\n      },\n      controller: 'ndBasicRetailKpisTodateTableController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/retail-dashboard/directives/nd-basic-retail-kpis-todate-table/nd-basic-retail-kpis-todate-table.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndBasicRetailKpisWidgetController', ndBasicRetailKpisWidgetController)\n    .directive('ndBasicRetailKpisWidget', ndBasicRetailKpisWidget);\n\n  /** @ngInject */\n  function ndBasicRetailKpisWidgetController($scope, $document, $mdDialog, $mdToast, $filter, api, Session, HTTP_STATUS,\n                                             $cookies, $mdDateRangePicker) {\n\n    var vm = this;\n\n    // Data\n    vm.dateRange = {\n      dateStart: null,\n      dateEnd: null\n    };\n    vm.company = Session.company;\n    vm.warehouses = null;\n    vm.basicRetailKpis = null;\n    vm.basicRetailKpisDict = {};\n    vm.basicRetailKpisByCompany = null;\n    vm.basicRetailKpisByCompanyDict = {};\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    vm.cartConfig = {\n      refreshDataOnly: true,\n      deepWatchData: true\n    };\n    vm.days = [];\n    vm.chartOptions = {\n      chart: {\n        type: 'lineChart',\n        color: ['#36C1F1'],\n        height: 30,\n        margin: {\n          top: 0,\n          right: 0,\n          bottom: 0,\n          left: 0\n        },\n        isArea: true,\n        interpolate: 'cardinal',\n        clipEdge: true,\n        duration: 500,\n        showXAxis: false,\n        showYAxis: false,\n        showLegend: false,\n        useInteractiveGuideline: false,\n        x: function (d) {\n          return d.x;\n        },\n        y: function (d) {\n          if (d) {\n            return d.y;\n          }\n          return 0;\n        },\n        xAxis: {\n          tickFormat: function (d) {\n            return vm.days[d].formatedDate;\n          }\n        },\n        interactiveLayer: {\n          tooltip: {\n            gravity: 'n',\n            classes: 'gravity-e'\n          }\n        }\n      }\n    };\n\n    vm.selectedWarehouses = {};\n    vm.chartOptionsDict = {\n      netSalesActualChart: angular.copy(vm.chartOptions),\n      unitsSoldChart: angular.copy(vm.chartOptions),\n      transactionsChart: angular.copy(vm.chartOptions),\n      returnsChart: angular.copy(vm.chartOptions),\n      unitsReturnedChart: angular.copy(vm.chartOptions),\n      unitsPerTransactionChart: angular.copy(vm.chartOptions),\n      averageUnitRetailChart: angular.copy(vm.chartOptions),\n    };\n\n    vm.selectedColumns = {\n      netSalesActualChart: {\n        order: 0,\n        attribute: 'netSalesActualChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES')\n      },\n      unitsSoldChart: {\n        order: 1,\n        attribute: 'unitsSoldChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD')\n      },\n      transactionsChart: {\n        order: 2,\n        attribute: 'transactionsChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.TRANSACTIONS')\n      },\n      unitsPerTransactionChart: {\n        order: 3,\n        attribute: 'unitsPerTransactionChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION')\n      },\n      averageUnitRetailChart: {\n        order: 4,\n        attribute: 'averageUnitRetailChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL')\n      },\n      returnsChart: {\n        order: 5,\n        attribute: 'returnsChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.RETURNS')\n      },\n      unitsReturnedChart: {\n        order: 6,\n        attribute: 'unitsReturnedChart',\n        name: $filter('translate')('BASIC_RETAIL_KPI.UNITS_RETURNED')\n      }\n    };\n\n    // yDomains is the yAxis min and max values\n    vm.yDomains = {\n      netSalesActualChart: [0, 0],\n      unitsSoldChart: [0, 0],\n      transactionsChart: [0, 0],\n      returnsChart: [0, 0],\n      unitsReturnedChart: [0, 0],\n      unitsPerTransactionChart: [0, 0],\n      averageUnitRetailChart: [0, 0]\n    };\n\n    // Methods\n    vm.toggleColumn = toggleColumn;\n    vm.toggleWarehouse = toggleWarehouse;\n    vm.sortByHeader = sortByHeader;\n    vm.getColumns = getColumns;\n    vm.filterDates = filterDates;\n\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      if ($scope.date) {\n        vm.dateRange.dateEnd = $scope.date;\n      }\n      else {\n        // Yesterday\n        var now = new Date();\n        vm.dateRange.dateEnd = new Date(Date.UTC(now.getFullYear(), now.getUTCMonth(), now.getDate() - 1, 23, 59, 59));\n      }\n\n      if ($scope.dateStart) {\n        vm.dateRange.dateStart = $scope.dateStart;\n      }\n      else {\n        // Last week\n        var now = new Date();\n        vm.dateRange.dateStart = new Date(Date.UTC(now.getFullYear(), now.getUTCMonth(), now.getDate() - 7, 0, 0, 0));\n      }\n\n      // Init days list\n      for(var d = new Date(vm.dateRange.dateStart); d <= vm.dateRange.dateEnd; d.setDate(d.getDate() + 1)){\n        vm.days.push({\n          date: angular.copy(d),\n          formatedDate: $filter('date')(d, 'mediumDate')\n        });\n      }\n\n      // Init selected columns\n      for (var attribute in vm.selectedColumns) {\n        var cookie = $cookies.get('ndBasicRetailKpiWidget-column-' + attribute);\n        vm.selectedColumns[attribute].visible = cookie !== 'false';\n      }\n\n      api.inventories.warehouses.get(function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          afterGetWarehouses(results.results);\n        }\n        else {\n          // TODO show error toast\n        }\n      });\n\n      getKpis();\n\n    }\n\n    function getKpis(){\n      api.analytics.basicRetailKpi.get({\n        content_type: 'warehouse',\n        date_start: vm.dateRange.dateStart,\n        date: vm.dateRange.dateEnd\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          afterGetKpis(results.results);\n        }\n        else {\n          // TODO show error toast\n        }\n      });\n\n      api.analytics.basicRetailKpi.get({\n        content_type: 'company',\n        date_start: vm.dateRange.dateStart,\n        date: vm.dateRange.dateEnd\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          afterGetKpisByCompany(results.results);\n        }\n        else {\n          // TODO show error toast\n        }\n      });\n    }\n\n    function afterGetKpis(basicRetailKpis) {\n      vm.basicRetailKpis = basicRetailKpis;\n      generateKpisDict();\n    }\n\n    function afterGetKpisByCompany(basicRetailKpisByCompany){\n      vm.basicRetailKpisByCompany = basicRetailKpisByCompany;\n      generateKpisByCompanyDict();\n    }\n\n    function afterGetWarehouses(warehouses) {\n      vm.warehouses = warehouses;\n\n      // Init selected warehouses\n      vm.warehouses.forEach(function (warehouse) {\n        var cookie = $cookies.get('ndBasicRetailKpiWidget-warehouse-' + warehouse.id);\n        if (cookie !== 'false') {\n          vm.selectedWarehouses[warehouse.id] = true;\n        }\n      });\n\n      generateKpisDict();\n    }\n\n    function generateKpisDict() {\n      if (vm.warehouses && vm.basicRetailKpis) {\n        vm.basicRetailKpis.forEach(function (basicRetailKpi) {\n          if (!vm.basicRetailKpisDict[basicRetailKpi.object_id]) {\n            vm.basicRetailKpisDict[basicRetailKpi.object_id] = {\n              rawData: [],\n              netSalesActualChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES'),\n                values: []\n              }],\n              unitsSoldChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD'),\n                values: []\n              }],\n              transactionsChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.TRANSACTIONS'),\n                values: []\n              }],\n              returnsChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.RETURNS'),\n                values: []\n              }],\n              unitsReturnedChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_RETURNED'),\n                values: []\n              }],\n              unitsPerTransactionChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION'),\n                values: []\n              }],\n              averageUnitRetailChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL'),\n                values: []\n              }]\n            };\n          }\n          vm.basicRetailKpisDict[basicRetailKpi.object_id].rawData.push(basicRetailKpi);\n        });\n\n        for (var object_id in vm.basicRetailKpisDict) {\n          // Net Sales Actual\n          vm.basicRetailKpisDict[object_id].netSalesActualChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.netSalesActualChart[0] = Math.min(vm.yDomains.netSalesActualChart[0], basicRetailKPI.net_sales_actual);\n            vm.yDomains.netSalesActualChart[1] = Math.max(vm.yDomains.netSalesActualChart[1], basicRetailKPI.net_sales_actual);\n            return {\n              'y': basicRetailKPI.net_sales_actual,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].netSalesActualChart[0].values = vm.basicRetailKpisDict[object_id].netSalesActualChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Units Sold\n          vm.basicRetailKpisDict[object_id].unitsSoldChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.unitsSoldChart[0] = Math.min(vm.yDomains.unitsSoldChart[0], basicRetailKPI.units_sold);\n            vm.yDomains.unitsSoldChart[1] = Math.max(vm.yDomains.unitsSoldChart[1], basicRetailKPI.units_sold);\n            return {\n              'y': basicRetailKPI.units_sold,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].unitsSoldChart[0].values = vm.basicRetailKpisDict[object_id].unitsSoldChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Transactions\n          vm.basicRetailKpisDict[object_id].transactionsChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.transactionsChart[0] = Math.min(vm.yDomains.transactionsChart[0], basicRetailKPI.transactions);\n            vm.yDomains.transactionsChart[1] = Math.max(vm.yDomains.transactionsChart[1], basicRetailKPI.transactions);\n            return {\n              'y': basicRetailKPI.transactions,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].transactionsChart[0].values = vm.basicRetailKpisDict[object_id].transactionsChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Returns\n          vm.basicRetailKpisDict[object_id].returnsChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.returnsChart[0] = Math.min(vm.yDomains.returnsChart[0], basicRetailKPI.returns);\n            vm.yDomains.returnsChart[1] = Math.max(vm.yDomains.returnsChart[1], basicRetailKPI.returns);\n            return {\n              'y': basicRetailKPI.returns,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].returnsChart[0].values = vm.basicRetailKpisDict[object_id].returnsChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Units returned\n          vm.basicRetailKpisDict[object_id].unitsReturnedChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.unitsReturnedChart[0] = Math.min(vm.yDomains.unitsReturnedChart[0], basicRetailKPI.units_returned);\n            vm.yDomains.unitsReturnedChart[1] = Math.max(vm.yDomains.unitsReturnedChart[1], basicRetailKPI.units_returned);\n            return {\n              'y': basicRetailKPI.units_returned,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].unitsReturnedChart[0].values = vm.basicRetailKpisDict[object_id].unitsReturnedChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Units per transaction\n          vm.basicRetailKpisDict[object_id].unitsPerTransactionChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.unitsPerTransactionChart[0] = Math.min(vm.yDomains.unitsPerTransactionChart[0], basicRetailKPI.units_per_transaction);\n            vm.yDomains.unitsPerTransactionChart[1] = Math.max(vm.yDomains.unitsPerTransactionChart[1], basicRetailKPI.units_per_transaction);\n            return {\n              'y': basicRetailKPI.units_per_transaction,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].unitsPerTransactionChart[0].values = vm.basicRetailKpisDict[object_id].unitsPerTransactionChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Average unit retail\n          vm.basicRetailKpisDict[object_id].averageUnitRetailChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.averageUnitRetailChart[0] = Math.min(vm.yDomains.averageUnitRetailChart[0], basicRetailKPI.average_unit_retail);\n            vm.yDomains.averageUnitRetailChart[1] = Math.max(vm.yDomains.averageUnitRetailChart[1], basicRetailKPI.average_unit_retail);\n            return {\n              'y': basicRetailKPI.average_unit_retail,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisDict[object_id].averageUnitRetailChart[0].values = vm.basicRetailKpisDict[object_id].averageUnitRetailChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n        }\n\n        // Sort warehouse by last day net sale actual\n        sortByHeader('netSalesActualChart');\n\n        // Set up yDomains\n        vm.chartOptionsDict.netSalesActualChart.chart.yDomain = vm.yDomains.netSalesActualChart;\n        vm.chartOptionsDict.unitsSoldChart.chart.yDomain = vm.yDomains.unitsSoldChart;\n        vm.chartOptionsDict.transactionsChart.chart.yDomain = vm.yDomains.transactionsChart;\n        vm.chartOptionsDict.returnsChart.chart.yDomain = vm.yDomains.returnsChart;\n        vm.chartOptionsDict.unitsReturnedChart.chart.yDomain = vm.yDomains.unitsReturnedChart;\n        vm.chartOptionsDict.unitsPerTransactionChart.chart.yDomain = vm.yDomains.unitsPerTransactionChart;\n        vm.chartOptionsDict.averageUnitRetailChart.chart.yDomain = vm.yDomains.averageUnitRetailChart;\n        vm.chartOptionsDict.returnsChart.chart.color = ['#EF5350'];\n        vm.chartOptionsDict.unitsReturnedChart.chart.color = ['#EF5350'];\n      }\n    }\n\n    function generateKpisByCompanyDict(){\n      if (vm.basicRetailKpisByCompany) {\n        vm.basicRetailKpisByCompany.forEach(function (basicRetailKpi) {\n          if (!vm.basicRetailKpisByCompanyDict[basicRetailKpi.object_id]) {\n            vm.basicRetailKpisByCompanyDict[basicRetailKpi.object_id] = {\n              rawData: [],\n              netSalesActualChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES'),\n                values: []\n              }],\n              unitsSoldChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD'),\n                values: []\n              }],\n              transactionsChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.TRANSACTIONS'),\n                values: []\n              }],\n              returnsChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.RETURNS'),\n                values: []\n              }],\n              unitsReturnedChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_RETURNED'),\n                values: []\n              }],\n              unitsPerTransactionChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION'),\n                values: []\n              }],\n              averageUnitRetailChart: [{\n                key: $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL'),\n                values: []\n              }]\n            };\n          }\n          vm.basicRetailKpisByCompanyDict[basicRetailKpi.object_id].rawData.push(basicRetailKpi);\n        });\n\n        for (var object_id in vm.basicRetailKpisByCompanyDict) {\n          // Net Sales Actual\n          vm.basicRetailKpisByCompanyDict[object_id].netSalesActualChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.netSalesActualChart[0] = Math.min(vm.yDomains.netSalesActualChart[0], basicRetailKPI.net_sales_actual);\n            vm.yDomains.netSalesActualChart[1] = Math.max(vm.yDomains.netSalesActualChart[1], basicRetailKPI.net_sales_actual);\n            return {\n              'y': basicRetailKPI.net_sales_actual,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].netSalesActualChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].netSalesActualChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Units Sold\n          vm.basicRetailKpisByCompanyDict[object_id].unitsSoldChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.unitsSoldChart[0] = Math.min(vm.yDomains.unitsSoldChart[0], basicRetailKPI.units_sold);\n            vm.yDomains.unitsSoldChart[1] = Math.max(vm.yDomains.unitsSoldChart[1], basicRetailKPI.units_sold);\n            return {\n              'y': basicRetailKPI.units_sold,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].unitsSoldChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].unitsSoldChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Transactions\n          vm.basicRetailKpisByCompanyDict[object_id].transactionsChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.transactionsChart[0] = Math.min(vm.yDomains.transactionsChart[0], basicRetailKPI.transactions);\n            vm.yDomains.transactionsChart[1] = Math.max(vm.yDomains.transactionsChart[1], basicRetailKPI.transactions);\n            return {\n              'y': basicRetailKPI.transactions,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].transactionsChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].transactionsChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Returns\n          vm.basicRetailKpisByCompanyDict[object_id].returnsChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.returnsChart[0] = Math.min(vm.yDomains.returnsChart[0], basicRetailKPI.returns);\n            vm.yDomains.returnsChart[1] = Math.max(vm.yDomains.returnsChart[1], basicRetailKPI.returns);\n            return {\n              'y': basicRetailKPI.returns,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].returnsChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].returnsChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Units returned\n          vm.basicRetailKpisByCompanyDict[object_id].unitsReturnedChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.unitsReturnedChart[0] = Math.min(vm.yDomains.unitsReturnedChart[0], basicRetailKPI.units_returned);\n            vm.yDomains.unitsReturnedChart[1] = Math.max(vm.yDomains.unitsReturnedChart[1], basicRetailKPI.units_returned);\n            return {\n              'y': basicRetailKPI.units_returned,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].unitsReturnedChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].unitsReturnedChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Units per transaction\n          vm.basicRetailKpisByCompanyDict[object_id].unitsPerTransactionChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.unitsPerTransactionChart[0] = Math.min(vm.yDomains.unitsPerTransactionChart[0], basicRetailKPI.units_per_transaction);\n            vm.yDomains.unitsPerTransactionChart[1] = Math.max(vm.yDomains.unitsPerTransactionChart[1], basicRetailKPI.units_per_transaction);\n            return {\n              'y': basicRetailKPI.units_per_transaction,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].unitsPerTransactionChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].unitsPerTransactionChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n          // Average unit retail\n          vm.basicRetailKpisByCompanyDict[object_id].averageUnitRetailChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].rawData.map(function (basicRetailKPI) {\n            vm.yDomains.averageUnitRetailChart[0] = Math.min(vm.yDomains.averageUnitRetailChart[0], basicRetailKPI.average_unit_retail);\n            vm.yDomains.averageUnitRetailChart[1] = Math.max(vm.yDomains.averageUnitRetailChart[1], basicRetailKPI.average_unit_retail);\n            return {\n              'y': basicRetailKPI.average_unit_retail,\n              'date': basicRetailKPI.date\n            };\n          });\n\n          vm.basicRetailKpisByCompanyDict[object_id].averageUnitRetailChart[0].values = vm.basicRetailKpisByCompanyDict[object_id].averageUnitRetailChart[0].values\n            .sort(function (a, b) {\n              return a - b;\n            }).map(function (point, index) {\n              point.x = index;\n              return point;\n            });\n\n        }\n      }\n    }\n\n    function sortByHeader(attribute) {\n      if (vm.warehouses) {\n        vm.warehouses = vm.warehouses.sort(function (a, b) {\n          if (vm.basicRetailKpisDict[a.id] &&\n            vm.basicRetailKpisDict[b.id] &&\n            vm.basicRetailKpisDict[a.id][attribute][0].values &&\n            vm.basicRetailKpisDict[b.id][attribute][0].values) {\n            return vm.basicRetailKpisDict[b.id][attribute][0].values[vm.basicRetailKpisDict[b.id][attribute][0].values.length-1].y - vm.basicRetailKpisDict[a.id][attribute][0].values[vm.basicRetailKpisDict[a.id][attribute][0].values.length - 1].y\n          }\n          return 0;\n        });\n      }\n    }\n\n    function toggleColumn(column) {\n      column.visible = !column.visible;\n      $cookies.put('ndBasicRetailKpiWidget-column-' + column.attribute, column.visible);\n    }\n\n    function toggleWarehouse(warehouseId) {\n      if (vm.selectedWarehouses[warehouseId]) {\n        delete vm.selectedWarehouses[warehouseId];\n        $cookies.put('ndBasicRetailKpiWidget-warehouse-' + warehouseId, false);\n      }\n      else {\n        vm.selectedWarehouses[warehouseId] = true;\n        $cookies.put('ndBasicRetailKpiWidget-warehouse-' + warehouseId, true);\n      }\n    }\n\n    function getColumns() {\n      return Object.values(vm.selectedColumns).sort(function (a, b) {\n        return b - a;\n      });\n    }\n\n    function filterDates() {\n      $mdDateRangePicker.show({\n        model: vm.dateRange\n      }).then(function (result) {\n        vm.dateRange = result;\n\n        // Reset dicsts\n        vm.basicRetailKpisDict = {};\n        vm.basicRetailKpisByCompanyDict = {};\n        vm.basicRetailKpis = [];\n        vm.basicRetailKpisByCompany = [];\n\n\n        // Init days list\n        vm.days = [];\n        for(var d = new Date(vm.dateRange.dateStart); d <= vm.dateRange.dateEnd; d.setDate(d.getDate() + 1)){\n          vm.days.push({\n            date: angular.copy(d),\n            formatedDate: $filter('date')(d, 'mediumDate')\n          });\n        }\n\n        getKpis();\n      }).catch(function () {\n\n      });\n\n    }\n\n  }\n\n  /** @ngInject */\n  function ndBasicRetailKpisWidget() {\n    return {\n      restrict: 'E',\n      scope: {\n        date: '=?',\n        dateStart: '=?',\n      },\n      controller: 'ndBasicRetailKpisWidgetController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/inventory/views/dashboard/directives/nd-basic-retail-kpis-widget/nd-basic-retail-kpis-widget.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndReportFilterController', ndReportFilterController)\n    .directive('ndReportFilter', ndReportFilter);\n\n  /** @ngInject */\n  function ndReportFilter() {\n    return {\n      restrict: 'E',\n      scope: {\n        columns: '=?',\n        downloading: '=?',\n        callback: '&?',\n        customFields: '=?',\n        description: '=?',\n        showDateRange: '=?',\n        showPdfDownloadButton: '=?'\n      },\n      controller: 'ndReportFilterController',\n      controllerAs: 'vm',\n      templateUrl: 'app/main/apps/analytics/views/report/directives/nd-report-filter/nd-report-filter.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndReportFilterController($rootScope, $scope, $filter, $mdDateRangePicker, $mdDialog, Session, Utils) {\n\n    $scope.FIELD_TYPE_SELECT = 'select';\n    $scope.FIELD_TYPE_CHECKBOX = 'checkbox';\n    $scope.FIELD_TYPE_AUTOCOMPLETE = 'autocomplete';\n\n    // Data\n    $scope.session = Session;\n\n    // Get the date of today\n    $scope.today = new Date();\n\n    // Get locale date\n    var options = { weekday: 'short', year: 'numeric', month: 'long', day: 'numeric' };\n\n    // Get the start of each filter\n    $scope.dateRangeDict = {\n      'TODAY': {\n        dateStart: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate(), 0, 0, 0),\n        dateEnd: $scope.today,\n        dateStartString: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate(), 0, 0, 0).toLocaleDateString($scope.session.user.lang, options),\n        dateEndString: $scope.today.toLocaleDateString($scope.session.user.lang, options)\n      },\n      'THIS_WEEK': {\n        dateStart: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate() - $scope.today.getDay() + 1),\n        dateEnd: $scope.today,\n        dateStartString: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate() - $scope.today.getDay() + 1).toLocaleDateString($scope.session.user.lang, options),\n        dateEndString: $scope.today.toLocaleDateString($scope.session.user.lang, options)\n      },\n      'LAST_WEEK': {\n        dateStart: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate() - $scope.today.getDay() - 6),\n        dateEnd: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate() - $scope.today.getDay(), 23, 59, 59),\n        dateStartString: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate() - $scope.today.getDay() - 6).toLocaleDateString($scope.session.user.lang, options),\n        dateEndString: new Date($scope.today.getFullYear(), $scope.today.getMonth(), $scope.today.getDate() - $scope.today.getDay(), 23, 59, 59).toLocaleDateString($scope.session.user.lang, options)\n\n      },\n      'THIS_MONTH': {\n        dateStart: new Date($scope.today.getFullYear(), $scope.today.getMonth(), 1),\n        dateEnd: $scope.today,\n        dateStartString: new Date($scope.today.getFullYear(), $scope.today.getMonth(), 1).toLocaleDateString($scope.session.user.lang, options),\n        dateEndString: $scope.today.toLocaleDateString($scope.session.user.lang, options)\n      },\n      'LAST_MONTH': {\n        dateStart: new Date($scope.today.getFullYear(), $scope.today.getMonth() - 1, 1),\n        dateEnd: new Date($scope.today.getFullYear(), $scope.today.getMonth(), 0, 23, 59, 59),\n        dateStartString: new Date($scope.today.getFullYear(), $scope.today.getMonth() - 1, 1).toLocaleDateString($scope.session.user.lang, options),\n        dateEndString: new Date($scope.today.getFullYear(), $scope.today.getMonth(), 0, 23, 59, 59).toLocaleDateString($scope.session.user.lang, options)\n\n      },\n      'ALL': {\n        dateStart: '',\n        dateEnd: ''\n      }\n    };\n    $scope.dateRange = $scope.dateRangeDict['TODAY'];\n    $scope.downloading = false;\n    $scope.columnFilterDict = {\n      'DEFAULT_COLUMNS': 1,\n      'ALL_COLUMNS': 2,\n      'PERSONALIZED': 3\n    };\n    $scope.datesFilter = 'TODAY';\n    $scope.columnFilter = $scope.columnFilterDict['DEFAULT_COLUMNS'];\n    $scope.showDateRange = angular.isDefined($scope.showDateRange) ? $scope.showDateRange : true;\n    $scope.selectedCategory = null;\n\n    // Methods\n    $scope.filterDates = filterDates;\n    $scope.updateDateRange = updateDateRange;\n    $scope.checkFilters = checkFilters;\n    $scope.countColumns = countColumns;\n    $scope.filterColumns = filterColumns;\n    $scope.getSelectedColumns = getSelectedColumns;\n    $scope.getItemText = getItemText;\n    $scope.selectedItemChange = selectedItemChange;\n    $scope.getSelectedCategoryParam = getSelectedCategoryParam;\n\n    // Initialization\n    init();\n\n    //Functions\n    function init() {\n      $scope.columns.forEach(function(column) {\n        column.selected = column.default;\n      });\n    }\n\n    function countColumns(key) {\n      if (key === 'DEFAULT_COLUMNS') {\n        return $scope.columns.filter(function(column) {\n          return column.default;\n        }).length;\n      }\n      if (key === 'ALL_COLUMNS') {\n        return $scope.columns.length;\n      }\n      if (key === 'PERSONALIZED') {\n        return $scope.columns.filter(function(column) {\n          return column.selected;\n        }).length;\n      }\n    }\n\n    function filterColumns() {\n      if ($scope.columnFilter == $scope.columnFilterDict['DEFAULT_COLUMNS']) {\n        $scope.columns.forEach(function(column) {\n          column.selected = column.default;\n        });\n      }\n      if ($scope.columnFilter == $scope.columnFilterDict['ALL_COLUMNS']) {\n        $scope.columns.forEach(function(column) {\n          column.selected = true;\n        });\n      }\n    }\n\n    function updateDateRange() {\n      if ($scope.datesFilter !== 'PERSONALIZED') {\n        $scope.dateRange = $scope.dateRangeDict[$scope.datesFilter];\n      }\n    }\n\n    function filterDates() {\n      $mdDateRangePicker.show({\n        model: $scope.dateRange\n      }).then(function(result) {\n        if (result.dateStart.getDate() == result.dateEnd.getDate()) {\n          // result.dateStart.setHours(0, 0, 0, 0) changes both dateStart & dateEnd\n          result.dateStart = new Date(result.dateStart.getFullYear(), result.dateStart.getMonth(), result.dateStart.getDate(), 0, 0, 0);\n        }\n        result.dateStartString = result.dateStart.toLocaleDateString($scope.session.user.lang, options);\n        result.dateEndString = result.dateEnd.toLocaleDateString($scope.session.user.lang, options);\n        $scope.dateRange = result;\n      });\n    }\n\n    function getSelectedCustomFields() {\n      if (!$scope.customFields) {\n        return [];\n      }\n      return $scope.customFields.filter(function(field) {\n\n        if (field.selectChecked) {\n          return field.selectChecked;\n        }\n        return field.checked || (field.selected && field.selected.length) || (field.selected && !field.multiple);\n      });\n    }\n\n    function checkFilters(fileType) {\n      var emptyColumns = true;\n      if (!$scope.columns.length) {\n        emptyColumns = false;\n      } else {\n        $scope.columns.forEach(function(column) {\n          emptyColumns = column.selected ? false : emptyColumns;\n        });\n      }\n\n      var unixRange = {\n        dateStart: $scope.dateRange.dateStart === '' ? '' : Utils.toUnixTimestamp($scope.dateRange.dateStart),\n        dateEnd: $scope.dateRange.dateEnd === '' ? '' : Utils.toUnixTimestamp($scope.dateRange.dateEnd) - 1\n      };\n\n      if (!emptyColumns) {\n        $scope.callback({\n          fileType: fileType,\n          dateRange: unixRange,\n          customFields: getSelectedCustomFields()\n        });\n      } else {\n        var dialog = $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('REPORTS.NO_COLUMNS'))\n          .htmlContent($filter('translate')('REPORTS.NO_COLUMNS_MESSAGE'))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n\n        $mdDialog.show(dialog);\n      }\n    }\n\n    function getSelectedColumns() {\n      return $scope.columns.filter(function(column) {\n        return column.selected;\n      }).map(function(column) {\n        return $filter('translate')('REPORTS.' + column.name);\n      }).join(', ');\n\n    }\n\n    function selectedItemChange(item, field) {\n      if (field && field.id && field.id === 'categories') {\n        $scope.selectedCategory = field.selectedItem.id;\n      }\n    }\n\n    function getSelectedCategoryParam() {\n      if (field && field.id && field.id === 'subcategories' && $scope.selectedCategory) {\n        return { category_id: $scope.selectedCategory };\n      }\n    }\n\n    function getItemText(item) {\n      return item.code + ' - ' + item.name;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('ConflictDeletedProductsDialogController', ConflictDeletedProductsDialogController);\n\n  /** @ngInject */\n  function ConflictDeletedProductsDialogController($scope, $mdDialog, deletedProducts) {\n\n    var vm = this;\n\n    // Cons\n\n    // Methods\n    vm.cancel = cancel;\n    vm.confirm = confirm;\n\n    // Data\n    vm.deletedProducts = deletedProducts;\n\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function confirm() {\n      $mdDialog.hide();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('AddDeliveryNoteDialogController', AddDeliveryNoteDialogController);\n\n  /** @ngInject */\n  function AddDeliveryNoteDialogController($scope, $mdSidenav, $mdMedia, $rootScope, $mdDialog, $q, $timeout, $compile, api, SEARCH_MAX_LENGTH,\n                                           $translate, customerId, Session, DTColumnBuilder, $filter, purchaseOrder, receivedInvoice,\n                                           selectedDeliveries, UiGridService, Utils) {\n\n    // Data\n    var vm = this;\n    vm.onlyMyContact = !!customerId;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.receivedInvoice = receivedInvoice;\n    vm.currentNavItem = vm.receivedInvoice ? 'purchases' : 'sales';\n    vm.warehouses = [];\n    vm.createdDateRange = null;\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n\n    vm.selectedTransfers = [];\n    vm.transfersStorageLabel = \"UIGridAccountingInvoiceTransferDeliveriesControllerV7\";\n    vm.transfersStatus = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        sourceWarehouses: [],\n        targetWarehouses: [],\n        startDate: null,\n        endDate: null\n      },\n      nonStorableFilters: {\n        fiscal_address_pending_to_invoice: true,\n        fiscal_address_contact_id: customerId && vm.onlyMyContact ? customerId : null\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.selectedSales = [];\n    vm.salesStorageLabel = \"UIGridAccountingInvoiceSaleDeliveriesControllerV7\";\n    vm.salesStatus = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        sourceWarehouses: [],\n        startDate: null,\n        endDate: null\n      }, nonStorableFilters: {\n        no_invoice: true,\n        customer_id: customerId && vm.onlyMyContact ? customerId : null\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.selectedPurchases = [];\n    vm.salesStorageLabel = \"UIGridAccountingInvoicePurchaseDeliveriesControllerV7\";\n    vm.purchasesStatus = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        targetWarehouses: [],\n        startDate: null,\n        endDate: null\n      }, nonStorableFilters: {\n        no_invoice: true,\n        purchase_order: purchaseOrder ? purchaseOrder : null,\n        contact_id: customerId && vm.onlyMyContact ? customerId : null\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.selectedFiscalAddressPosOrders = [];\n    vm.fiscalAddressPosOrdersStorageLabel = \"UIGridAccountingInvoiceFiscalAddressPosOrdersControllerV7\";\n    vm.fiscalAddressPosOrdersStatus = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        sourceWarehouses: [],\n        startDate: null,\n        endDate: null\n      }, nonStorableFilters: {\n        fiscal_address_pending_to_invoice: true,\n        fiscal_address_contact_id: customerId && vm.onlyMyContact ? customerId : null\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // Methods\n    vm.addDeliveryNote = addDeliveryNote;\n    vm.searchChanged = searchChanged;\n    vm.cancel = cancel;\n    vm.toggleSidenav = toggleSidenav;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.setDateRangeFilters = setDateRangeFilters;\n    \n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      api.inventories.warehouses.get({}, function (response, callback, status) {\n        if (status === 200) {\n          vm.warehouses = response.results;\n        }\n      });\n\n      vm.createdDateRange = {\n        dateStart: null,\n        dateEnd: null,\n        showClear: true,\n        format: function(dateStart, dateEnd) {\n          if (dateStart && dateEnd) {\n            return moment(dateStart).format('DD/MM/YYYY') + ' - ' + moment(dateEnd).format('DD/MM/YYYY');\n          }\n          return $filter('translate')('PRODUCT.FILTER_BY_CREATION_DATE');\n        }\n      };\n\n      vm.statusLoadedWatcher = $scope.$on('ndGrid::statusLoaded', loadStatus);\n      $scope.$on('$destroy', function() {\n        vm.statusLoadedWatcher();\n      });\n    }\n\n    function addDeliveryNote(delivery) {\n      $mdDialog.hide({\n        sales: vm.selectedSales,\n        transfers: vm.selectedTransfers,\n        purchases: vm.selectedPurchases,\n        fiscalAddressPosOrders: vm.selectedFiscalAddressPosOrders,\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function searchChanged(){\n      vm.salesStatus['nonStorableFilters']['customer_id'] = customerId && vm.onlyMyContact ? customerId : null;\n      vm.purchasesStatus['nonStorableFilters']['contact_id'] = customerId && vm.onlyMyContact ? customerId : null;\n      vm.transfersStatus['nonStorableFilters']['fiscal_address_contact_id'] = customerId && vm.onlyMyContact ? customerId : null;\n      vm.fiscalAddressPosOrdersStatus['nonStorableFilters']['fiscal_address_contact_id'] = customerId && vm.onlyMyContact ? customerId : null;\n      $rootScope.$broadcast('ndGrid::filtersChanged');\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function getFilterNotifications() {\n\n      var result = 0;\n\n      if(vm.currentNavItem === 'transfers'){\n        result += vm.transfersStatus.filters.targetWarehouses && vm.transfersStatus.filters.targetWarehouses.length > 0 ? 1 : 0;\n        result += vm.transfersStatus.filters.sourceWarehouses && vm.transfersStatus.filters.sourceWarehouses.length > 0 ? 1 : 0;\n        result += vm.transfersStatus.filters.startDate === null || vm.transfersStatus.filters.endDate === null ? 0 : 1;\n      }\n      if(vm.currentNavItem === 'sales'){\n        result += vm.salesStatus.filters.targetWarehouses && vm.salesStatus.filters.targetWarehouses.length > 0 ? 1 : 0;\n        result += vm.salesStatus.filters.sourceWarehouses && vm.salesStatus.filters.sourceWarehouses.length > 0 ? 1 : 0;\n        result += vm.salesStatus.filters.startDate === null || vm.salesStatus.filters.endDate === null ? 0 : 1;\n      }\n      if(vm.currentNavItem === 'purchases'){\n        result += vm.purchasesStatus.filters.targetWarehouses && vm.purchasesStatus.filters.targetWarehouses.length > 0 ? 1 : 0;\n        result += vm.purchasesStatus.filters.sourceWarehouses && vm.purchasesStatus.filters.sourceWarehouses.length > 0 ? 1 : 0;\n        result += vm.purchasesStatus.filters.startDate === null || vm.purchasesStatus.filters.endDate === null ? 0 : 1;\n      }\n      if(vm.currentNavItem === 'fiscal-address-pos-orders'){\n        result += vm.fiscalAddressPosOrdersStatus.filters.targetWarehouses && vm.fiscalAddressPosOrdersStatus.filters.targetWarehouses.length > 0 ? 1 : 0;\n        result += vm.fiscalAddressPosOrdersStatus.filters.sourceWarehouses && vm.fiscalAddressPosOrdersStatus.filters.sourceWarehouses.length > 0 ? 1 : 0;\n        result += vm.fiscalAddressPosOrdersStatus.filters.startDate === null || vm.fiscalAddressPosOrdersStatus.filters.endDate === null ? 0 : 1;\n      }\n\n      return result;\n    }\n\n    function clearFilter() {\n\n      if(vm.currentNavItem === 'transfers'){\n        vm.transfersStatus.filters.targetWarehouses = [];\n        vm.transfersStatus.filters.sourceWarehouses = [];\n        vm.transfersStatus.filters.startDate = null;\n        vm.transfersStatus.filters.endDate = null;\n      }\n      if(vm.currentNavItem === 'sales'){\n        vm.salesStatus.filters.targetWarehouses = [];\n        vm.salesStatus.filters.sourceWarehouses = [];\n        vm.salesStatus.filters.startDate = null;\n        vm.salesStatus.filters.endDate = null;\n      }\n      if(vm.currentNavItem === 'purchases'){\n        vm.purchasesStatus.filters.targetWarehouses = [];\n        vm.purchasesStatus.filters.sourceWarehouses = [];\n        vm.purchasesStatus.filters.startDate = null;\n        vm.purchasesStatus.filters.endDate = null;\n      }\n      if(vm.currentNavItem === 'fiscal-address-pos-orders'){\n        vm.fiscalAddressPosOrdersStatus.filters.targetWarehouses = [];\n        vm.fiscalAddressPosOrdersStatus.filters.sourceWarehouses = [];\n        vm.fiscalAddressPosOrdersStatus.filters.startDate = null;\n        vm.fiscalAddressPosOrdersStatus.filters.endDate = null;\n      }\n      searchChanged();\n    }\n    \n    function setDateRangeFilters() {\n      function formatDate(date) {\n        return (date instanceof Date && !isNaN(date)) ? date.toISOString() : null;\n      }\n\n      vm.transfersStatus.filters.startDate = formatDate(vm.createdDateRange.dateStart);\n      vm.transfersStatus.filters.endDate = formatDate(vm.createdDateRange.dateEnd);\n      vm.salesStatus.filters.startDate = formatDate(vm.createdDateRange.dateStart);\n      vm.salesStatus.filters.endDate = formatDate(vm.createdDateRange.dateEnd);\n      vm.purchasesStatus.filters.startDate = formatDate(vm.createdDateRange.dateStart);\n      vm.purchasesStatus.filters.endDate = formatDate(vm.createdDateRange.dateEnd);\n      vm.fiscalAddressPosOrdersStatus.filters.startDate = formatDate(vm.createdDateRange.dateStart);\n      vm.fiscalAddressPosOrdersStatus.filters.endDate = formatDate(vm.createdDateRange.dateEnd);\n      \n      searchChanged();\n    }\n\n    function loadStatus() {\n\n      vm.createdDateRange.dateStart = vm.transfersStatus.filters.startDate ? new Date(vm.transfersStatus.filters.startDate) : null;\n      vm.createdDateRange.endDate = vm.transfersStatus.filters.endDate ? new Date(vm.transfersStatus.filters.endDate) : null;\n      vm.transfersStatus.filters.startDate = vm.transfersStatus.filters.startDate ? new Date(vm.transfersStatus.filters.startDate) : null;\n      vm.transfersStatus.filters.endDate = vm.transfersStatus.filters.endDate ? new Date(vm.transfersStatus.filters.endDate) : null;\n      vm.salesStatus.filters.startDate = vm.salesStatus.filters.startDate ? new Date(vm.salesStatus.filters.startDate) : null;\n      vm.salesStatus.filters.endDate = vm.salesStatus.filters.endDate ? new Date(vm.salesStatus.filters.endDate) : null;\n      vm.purchasesStatus.filters.startDate = vm.purchasesStatus.filters.startDate ? new Date(vm.purchasesStatus.filters.startDate) : null;\n      vm.purchasesStatus.filters.endDate = vm.purchasesStatus.filters.endDate ? new Date(vm.purchasesStatus.filters.endDate) : null;\n      vm.fiscalAddressPosOrdersStatus.filters.startDate = vm.fiscalAddressPosOrdersStatus.filters.startDate ? new Date(vm.fiscalAddressPosOrdersStatus.filters.startDate) : null;\n      vm.fiscalAddressPosOrdersStatus.filters.endDate = vm.fiscalAddressPosOrdersStatus.filters.endDate ? new Date(vm.fiscalAddressPosOrdersStatus.filters.endDate) : null;\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('GenerateInvoicesDialogController', GenerateInvoicesDialogController);\n\n  /** @ngInject */\n  function GenerateInvoicesDialogController($scope, $mdDialog, api) {\n\n    // Data\n    var vm = this;\n    vm.dateRange = {};\n    vm.selectedDates = [];\n\n    // Methods\n    vm.generate = generate;\n    vm.cancel = cancel;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function generate() {\n\n      api.accounting.invoices.save({\n          option: 'generate-register-activity-invoices',\n          dateStart: vm.dateRange.dateStart,\n          dateEnd: vm.dateRange.dateEnd\n        }, function (response) {\n          $mdDialog.hide();\n        }\n      )\n\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('UserDialogController', UserDialogController);\n\n  /** @ngInject */\n  function UserDialogController(\n    $scope,\n    $mdDialog,\n    $translate,\n    $filter,\n    $mdToast,\n    UserData,\n    WarehousesData,\n    FiscalAddressesData,\n    RolesData,\n    msUtils,\n    api,\n    Session,\n    params,\n    USER_ROLES,\n    COUNTIRES_ISO_APLPHA_2_EN,\n    INTEGRATION_APP_TYPE,\n    HTTP_STATUS\n  ) {\n    var vm = this;\n    $scope.Session = Session;\n\n    // Data\n    vm.contact = angular.copy(UserData);\n    vm.user = angular.copy(UserData);\n    vm.warehouses = WarehousesData;\n    vm.fiscalAddresses = FiscalAddressesData;\n    vm.contractedPlanLimit = params.contractedPlanLimit;\n    vm.newUser = false;\n    vm.allFields = false;\n    vm.selectedRole = null;\n    vm.USER_ROLES = USER_ROLES;\n    vm.errors = {};\n    vm.roles = [];\n    vm.customRoles = [];\n    vm.hasMultipleFiscalDirectionFeature = !Session.hasSubscription || Session.hasAddOn('inventory.configuration.company.multiple_fiscal_directions');\n    vm.showVatHint = Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SAGE_200);\n    vm.countries = COUNTIRES_ISO_APLPHA_2_EN;\n\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Spanish',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Catalan',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n\n    if (!vm.user) {\n      vm.user = {\n        'first_name': '',\n        'last_name': '',\n        'username': '',\n        'password': '',\n        'role': '',\n        'email': '',\n        'phone': '',\n        'lang': Session.user.lang,\n        'has_notifications': false\n      };\n      vm.newUser = true;\n    }\n\n    // Methods\n    vm.addNewUser = addNewUser;\n    vm.saveUser = saveUser;\n    vm.deleteUserConfirm = deleteUserConfirm;\n    vm.closeDialog = closeDialog;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.usernameChange = usernameChange;\n    vm.showDeleteButton = showDeleteButton;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.roles = angular.copy(RolesData).filter(function(r) {\n        return !r.company;\n      });\n\n      vm.customRoles = angular.copy(RolesData).filter(function(r) {\n        return r.company;\n      });\n\n      // Remove the wholesale roles if the user does not have this module\n      if (!Session.hasPermission('app.wholesale')) {\n        vm.roles = vm.roles.filter(function(r) {\n          return r.id !== USER_ROLES.USER_ROLE_WHOLESALE_VENDOR && r.id !== USER_ROLES.USER_ROLE_WHOLESALE_MANAGER;\n        });\n      }\n    }\n\n    function usernameChange() {\n      $scope.userForm['username'].$setValidity('username', true);\n    }\n\n    function addNewUser() {\n\n      if (Session.hasPermission('account.users.create')) {\n        if (vm.user.username != '' && vm.user.password != '' && vm.user.email != '') {\n          api.account.users.save(\n            vm.user,\n            function(response, fn, status) {\n              var msg = 'GENERAL.ERROR_TOAST';\n              if (status == HTTP_STATUS.HTTP_201_CREATED) {\n                vm.errors = {};\n                msg = 'USERS.USER_CREATED_SUCCESSFULLY';\n                closeDialog();\n              } else if (status == HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n                vm.errors = response;\n                Object.keys(vm.errors).forEach(function(key) {\n                  if ($scope.userForm[key]) {\n                    $scope.userForm[key].$setValidity('username', false);\n                  }\n                });\n\n                return;\n              }\n\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')(msg))\n                  .position('top right')\n                  .hideDelay(3000)\n              );\n            }\n          );\n        }\n      }\n    }\n\n    function saveUser() {\n      if (Session.hasPermission('account.users.update')) {\n        if (vm.user.username != '' && vm.user.password != '' && vm.user.email != '') {\n          api.account.users.update(\n            vm.user,\n            function(response, fn, status) {\n              var msg = 'GENERAL.ERROR_TOAST';\n              if (status == HTTP_STATUS.HTTP_200_OK) {\n                vm.errors = {};\n                msg = 'USERS.USER_SAVED_SUCCESSFULLY';\n                closeDialog();\n              }\n\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')(msg))\n                  .position('top right')\n                  .hideDelay(3000)\n              );\n            }\n          );\n        }\n      }\n    }\n\n    /**\n     * Delete User Confirm Dialog\n     */\n    function deleteUserConfirm(ev) {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('USERS.DELETE_USER_WARNING_MSG'))\n        .htmlContent('<b>' + vm.contact.name + '</b>' + ' ' + $filter('translate')('USERS.DELETE_USER_EXPLANATION'))\n        .ariaLabel('delete user')\n        .targetEvent(ev)\n        .multiple(true)\n        .ok($filter('translate')('GENERAL.OK'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (Session.hasPermission('account.users.delete')) {\n          api.account.users.delete(\n            {\n              id: vm.user.id\n            },\n            function(response, fn, status) {\n              var msg = 'GENERAL.ERROR_TOAST';\n              if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                vm.errors = {};\n                msg = 'USERS.USER_REMOVED_SUCCESSFULLY';\n                Session.removeUser(vm.user.username);\n                closeDialog();\n              }\n\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')(msg))\n                  .position('top right')\n                  .hideDelay(3000)\n              );\n            }\n          );\n        }\n      });\n    }\n\n    function closeDialog() {\n      $mdDialog.hide();\n    }\n\n    function showDeleteButton(){\n      return !vm.newUser && !params.hideDelete;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('PurchaseAddOnDialogController', PurchaseAddOnDialogController);\n\n  /** @ngInject */\n  function PurchaseAddOnDialogController(\n    $scope,\n    $state,\n    $filter,\n    $mdDialog,\n    api,\n    priceExclTax,\n    currency,\n    addOnId,\n    sourceState,\n    sourceStateParams,\n    HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.purchasing = false;\n    vm.error = false;\n    vm.messageParams = {\n      priceExclTax: $filter('price')(priceExclTax),\n      currency: $filter('currencyCharacter')(currency)\n    };\n\n    // Methods\n    vm.cancel = cancel;\n    vm.purchase = purchase;\n\n    // Functions\n    function cancel() {\n      $mdDialog.hide();\n    }\n\n    function purchase() {\n      if (!vm.purchasing) {\n        vm.purchasing = true;\n        vm.error = false;\n\n        api.account.planFeatures.save({\n            id: addOnId,\n            option: 'contract'\n          },\n          function(results, fn, status) {\n            vm.purchasing = false;\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              if (sourceStateParams) {\n                window.location.href = $state.href(sourceState, sourceStateParams, { absolute: true });\n              } else {\n                window.location.href = $state.href(sourceState, { absolute: true });\n              }\n            } else {\n              vm.error = true;\n            }\n          });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('RoleEditorDialog', RoleEditorDialogController);\n\n  /** @ngInject */\n  function RoleEditorDialogController($mdDialog, $document, role, roles, option, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.search = \"\";\n    vm.option = option;\n    vm.roles = roles;\n    vm.role = {\n      name: role? role.name : null,\n      isDuplicate: false,\n      origin: null,\n    };\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.isCorrect = isCorrect;\n    vm.getAvailableRoles = getAvailableRoles;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n\n    //Functions\n    function save() {\n      $mdDialog.hide({\n        role: vm.role,\n        option: option,\n      });\n    }\n\n    function cancel(){\n      $mdDialog.cancel();\n    }\n\n    function isCorrect() {\n      return vm.role.name &&\n        !(vm.option == 'create' && vm.role.isDuplicate && !vm.role.origin) &&\n        !(vm.option == 'delete' && !vm.role.origin)\n    }\n\n    function getAvailableRoles() {\n      if (!role) return vm.roles;\n      else return vm.roles.filter(function(r){\n        return r.id != role.id;\n      })\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'xeditable',\n        'app.services.session',\n        'dndLists',\n        'mm.iban',\n        'ngMaterialDateRangePicker'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.wholesale', {\n        abstract: true,\n        url: '/wholesale'\n      })\n\n      /**\n       * PRESALES\n       */\n      .state('app.wholesale.presales', {\n        url: '/presales',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/presales/presales.html',\n            controller: 'WholesalePresalesController as vm'\n          }\n        },\n        resolve: {\n\n\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          },\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          }\n        },\n        bodyClass: 'presales'\n      })\n\n      /**\n       * PRESALE BASE\n       */\n\n      .state('app.wholesale.presales.presale', {\n        url: '/:idPresale',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/presale/presale.html',\n            controller: 'WholesalePresaleController as vm'\n          }\n        },\n        resolve: {\n          PresaleData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('wholesale.presales@get', { id: $stateParams.idPresale });\n          }\n\n        },\n        bodyClass: 'presale'\n      })\n\n      /**\n       * PRESALE DETAILS\n       */\n\n      .state('app.wholesale.presales.presale.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.wholesale.presales.presale': {\n            templateUrl: 'app/main/apps/wholesale/views/presale/tabs/details.html',\n            controller: 'WholesalePresaleDetailsController as vm'\n          }\n        },\n        resolve: {\n          BrandsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.brands@list');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }\n        },\n        bodyClass: 'persale-details'\n      })\n\n      /**\n       * PRESALE PRODUCTS\n       */\n\n      .state('app.wholesale.presales.presale.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.wholesale.presales.presale': {\n            templateUrl: 'app/main/apps/wholesale/views/presale/tabs/products.html',\n            controller: 'WholesalePresaleProductsController as vm'\n          }\n        },\n        params: {\n          loadTableState: null,\n          reload: null\n        },\n        resolve: {\n          PresaleData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('wholesale.presales@get', { id: $stateParams.idPresale });\n          },\n          CompositionsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.compositions@list');\n          },\n          CategoriesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.categories@list');\n          }\n        },\n        bodyClass: 'manufacture-collection-styles'\n      })\n\n      /**\n       * PRESALE PREORDERS\n       */\n\n      .state('app.wholesale.presales.presale.preorders', {\n        url: '/preorders',\n        views: {\n          'subcontent@app.wholesale.presales.presale': {\n            templateUrl: 'app/main/apps/wholesale/views/presale/tabs/preorders.html',\n            controller: 'WholesalePresalePreordersController as vm'\n          }\n        },\n        resolve: {\n          PresaleData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('wholesale.presales@get', { id: $stateParams.idPresale });\n          }\n        },\n        bodyClass: 'wholesale-presale-preorders'\n      })\n\n      /**\n       * PRESALE PURCHASES\n       */\n\n      .state('app.wholesale.presales.presale.purchases', {\n        url: '/purchases',\n        views: {\n          'subcontent@app.wholesale.presales.presale': {\n            templateUrl: 'app/main/apps/wholesale/views/presale/tabs/purchases.html',\n            controller: 'WholesalePresalePurchasesController as vm'\n          }\n        },\n        resolve: {\n          PresaleData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('wholesale.presales@get', { id: $stateParams.idPresale });\n          }\n        },\n        bodyClass: 'wholesale-presale-purchases'\n      })\n\n      /**\n       * SALES\n       */\n      .state('app.wholesale.sales', {\n        url: '/sales',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/sales/sales.html',\n            controller: 'SalesController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          }\n        },\n        bodyClass: 'sales'\n      })\n\n      /**\n       * DELIVERIES\n       */\n      .state('app.wholesale.deliveries', {\n        url: '/deliveries',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/deliveries/deliveries.html',\n            controller: 'DeliveriesController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          }\n        },\n        bodyClass: 'deliveries'\n      })\n\n      /**\n       * SALE BASE NEW\n       */\n\n      .state('app.wholesale.sales.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/sale.html',\n            controller: 'WholesaleSaleController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-sale'\n      })\n\n      /**\n       * NEW SALE\n       */\n\n      .state('app.wholesale.sales.new.details', {\n        url: '/details/:type',\n        views: {\n          'subcontent@app.wholesale.sales.new': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/details.html',\n            controller: 'WholesaleSaleDetailsController as vm'\n          }\n        },\n        resolve: {\n          SaleData: function(apiResolver, $stateParams) {\n            return null;\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          },\n          PricingTiers: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get', { serializer: 'PaymentMethodSimpleSerializer' });\n          },\n          CollectionsData: function(apiResolver) {\n            return apiResolver.resolve('manufactures.collections@list', { serializer: 'CollectionSimpleSerializer' });\n          }\n        },\n        params: {\n          presaleId: null\n        },\n        bodyClass: 'inventory-sale-details'\n      })\n\n      /**\n       * SALE  BASE\n       */\n\n      .state('app.wholesale.sales.sale', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/sale.html',\n            controller: 'WholesaleSaleController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'inventory-sale'\n      })\n\n      /**\n       * SALE DETAILS\n       */\n\n      .state('app.wholesale.sales.sale.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.wholesale.sales.sale': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/details.html',\n            controller: 'WholesaleSaleDetailsController as vm'\n          }\n        },\n        resolve: {\n          SaleData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrders@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          },\n          PricingTiers: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return null;\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          },\n          CollectionsData: function(apiResolver) {\n            return apiResolver.resolve('manufactures.collections@list');\n          }\n        },\n        bodyClass: 'inventory-sale-details'\n      })\n\n      /**\n       * SALE INVOICING\n       */\n\n      .state('app.wholesale.sales.sale.invoicing', {\n        url: '/invoicing',\n        views: {\n          'subcontent@app.wholesale.sales.sale': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/invoicing.html',\n            controller: 'WholesaleSaleInvoicingController as vm'\n          }\n        },\n        resolve: {\n          SaleData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrders@get', { id: $stateParams.id });\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InvoicesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('accounting.invoices@get', { sale_id: $stateParams.id });\n          },\n          PaymentMethodsData: function(apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          }\n        },\n        bodyClass: 'inventory-sale-details'\n      })\n\n      /**\n       * SALE PRODUCTS\n       */\n\n      .state('app.wholesale.sales.sale.products', {\n        url: '/products',\n         params: {\n          search: { value: null, squash: true }\n        },\n        views: {\n          'subcontent@app.wholesale.sales.sale': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/products.html',\n            controller: 'WholesaleSaleProductsController as vm'\n          }\n        },\n        resolve: {\n          SaleOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrders@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@get', {});\n          }\n        },\n        bodyClass: 'inventory-sale-products'\n      })\n\n      /**\n       * SALE DELIVERIES\n       */\n\n      .state('app.wholesale.sales.sale.deliveries', {\n        url: '/deliveries',\n        views: {\n          'subcontent@app.wholesale.sales.sale': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/deliveries.html',\n            controller: 'WholesaleSaleDeliveriesController as vm'\n          }\n        },\n        resolve: {\n          SaleOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrders@get', { id: $stateParams.id });\n          }\n        },\n        bodyClass: 'inventory-sale-deliveries'\n      })\n\n      /**\n       * SALE DELIVERY DETAILS\n       */\n\n      .state('app.wholesale.sales.sale.deliveries.delivery', {\n        url: '/:orderDeliveryId',\n        params: {\n          orderDeliveryId: { value: null, squash: true },\n          search: { value: null, squash: true }\n        },\n        views: {\n          'subcontent@app.wholesale.sales.sale': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/delivery.html',\n            controller: 'WholesaleSaleDeliveryController as vm'\n          }\n        },\n        resolve: {\n          SaleOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrders@get', { id: $stateParams.id });\n          },\n          SaleOrderDeliveryData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrderDeliveries@get', { id: $stateParams.orderDeliveryId });\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-sale-deliveries-delivery'\n      })\n\n      /**\n       * SALE DELIVERY\n       */\n\n      .state('app.wholesale.sales.sale.delivery', {\n        url: '/delivery',\n        views: {\n          'subcontent@app.wholesale.sales.sale': {\n            templateUrl: 'app/main/apps/wholesale/views/sale/tabs/delivery.html',\n            controller: 'WholesaleSaleDeliveryController as vm'\n          }\n        },\n        resolve: {\n          SaleOrderData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrders@get', { id: $stateParams.id });\n          },\n          SaleOrderDeliveryData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.saleOrderDeliveries@get', {\n              id: 'latest',\n              sale_order: $stateParams.id\n            });\n          },\n          SerialNumberTypesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'inventory-sale-delivery'\n      })\n\n      /**\n       * B2B ECOMMERCES\n       */\n\n      .state('app.wholesale.b2b_ecommerces', {\n        url: '/b2b-ecommerces',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/b2b-ecommerces/b2b-ecommerces.html',\n            controller: 'WholesaleB2BEcommercesController as vm'\n          }\n        }\n      })\n\n      /**\n       * B2B Ecommerce\n       */\n\n      .state('app.wholesale.b2b_ecommerces.b2b_ecommerce', {\n        url: '/:id',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/wholesale/views/b2b-ecommerce/b2b-ecommerce.html',\n            controller: 'WholesaleB2BEcommerceController as vm'\n          }\n        },\n        resolve: {\n          B2BEcommercesData: function(apiResolver, $stateParams) {\n            return apiResolver.resolve('wholesale.b2bEcommerces@get', { id: $stateParams.id });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', { serializer: 'WarehouseSimpleSerializer' });\n          },\n          SeasonsData: function(apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list');\n          },\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          ContractedPlanLimitData: function(apiResolver, PLAN_LIMIT_CODES) {\n            return apiResolver.resolve('account.contractedPlanLimits@list', {\n              codes: [\n                PLAN_LIMIT_CODES.EXTRA_B2B_ECOMMERCE,\n                PLAN_LIMIT_CODES.B2B_WAREHOUSE_LIMIT\n              ].join(',')\n            });\n          }\n        }\n        // bodyClass: 'wholesale-b2b-ecommerce'\n      });\n\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/wholesale');\n\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleProductsController', WholesaleSaleProductsController);\n\n  /** @ngInject */\n  function WholesaleSaleProductsController($scope,\n                                           $state,\n                                           $filter,\n                                           $mdDialog,\n                                           $stateParams,\n                                           api,\n                                           SaleOrderData,\n                                           SALE_ORDER_STATUSES) {\n\n    $scope.$parent.vm.currentNavItem = 'products';\n    $scope.$parent.vm.sale = SaleOrderData;\n\n    var vm = this;\n    vm.taxes = [];\n\n    // Data\n    vm.collection = $stateParams.idCollection;\n    vm.visualizationOptions = {\n      productOptions: {\n        discount: {\n          id: 'discount',\n          translation: 'PURCHASE.DISCOUNT',\n          selected: false,\n          visible: false\n        },\n        show_prices_incl_tax: {\n          id: 'show_prices_incl_tax',\n          translation: 'SALE.SHOW_INCL_TAXES',\n          selected: false,\n          visible: true\n        },\n        show_tax_select: {\n          id: 'tax_select',\n          translation: 'ACCOUNT.TAXES',\n          selected: false,\n          visible: true\n        },\n        price: {\n          id: 'price',\n          translation: 'SALE.SHOW_PRICES',\n          selected: false,\n          visible: true\n        },\n        shippingDate: {\n          id: 'shipping_date',\n          translation: 'PURCHASE.SHIPPING_DATE',\n          selected: false,\n          visible: false\n        }\n      },\n      productVariantOptions: {\n        sku: {\n          id: 'sku',\n          translation: 'SALE.SHOW_SKUS',\n          selected: false,\n          visible: true\n        },\n        leftAmount: {\n          id: 'leftAmount',\n          translation: 'PRODUCT.STOCK',\n          selected: true,\n          visible: true\n        },\n        rightAmount: {\n          id: 'rightAmount',\n          translation: 'ORDER.SHIPPED',\n          selected: true,\n          visible: true\n        }\n      }\n    };\n\n    // Methods\n    vm.gotoSales = gotoSales;\n    vm.getStatusLabel = getStatusLabel;\n    vm.toggleSidenav = toggleSidenav;\n\n    // Register Events\n    vm.initializeSaleEvent = $scope.$on('initialize-sale', function(event, args) {\n      SaleOrderData = args.sale;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.initializeSaleEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.sale = angular.copy(SaleOrderData);\n      vm.editable = vm.sale.status == 1 || vm.sale.status == 11 || vm.sale.status == 12;\n\n      api.accounting.taxes.get(function(response) {\n        angular.merge(vm.taxes, response.results);\n      });\n    }\n\n    function gotoSales() {\n      $state.go('app.wholesale.sales');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('SALES.' + SALE_ORDER_STATUSES[status]);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $scope.$parent.vm.toggleSidenav(sidenavId);\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleInvoicingController', WholesaleSaleInvoicingController);\n\n  /** @ngInject */\n  function WholesaleSaleInvoicingController($scope, $state, $stateParams, $filter, $window, $mdToast, $document, api, PaymentMethodsData,\n                                          SaleData, SerialNumberTypesData, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS,\n                                          PAYMENT_TERM_TYPES, COUNTRIES_DICT, CONTACT_TYPES, CONTACT_INVOICING_TYPES,\n                                          PAYMENT_STATUS_TYPES, CURRENCIES, LANGUAGES, Session, InvoicesData) {\n\n    $scope.$parent.vm.currentNavItem = \"invoicing\";\n    $scope.$parent.vm.sale = SaleData;\n    $scope.Session = Session;\n\n\n    // Data\n    var vm = this;\n    vm.countries = COUNTRIES_DICT;\n    vm.sale = null;\n\n    vm.collection = $stateParams.idCollection;\n    vm.minDate = new Date();\n    vm.searchSelectHeader = new Array(3);\n    vm.contactTypes = CONTACT_TYPES;\n    vm.contactInvoicingTypes = CONTACT_INVOICING_TYPES;\n    vm.paymentStatusTypes = PAYMENT_STATUS_TYPES\n    vm.serialNumberTypes = SerialNumberTypesData ? SerialNumberTypesData.results : null;\n    vm.paymentMethods = PaymentMethodsData.results;\n    vm.currencies = CURRENCIES;\n    vm.languages = LANGUAGES;\n    vm.temporalPayment = {};\n    vm.invoices = InvoicesData.results;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getBillingAddress = getBillingAddress;\n    vm.getShippingAddress = getShippingAddress;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.savePayment = savePayment;\n    vm.removePayment = removePayment;\n    vm.updatePayment = updatePayment;\n\n    // Register Events\n    vm.initializeSaleEvent = $scope.$on('initialize-sale', function (event, args) {\n      SaleData = args.sale;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeSaleEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n\n      vm.sale = angular.copy(SaleData);\n\n      vm.temporalPayment = {\n        id: null,\n        payment_method: null,\n        amount: null,\n        date: new Date(),\n        sale_order: vm.sale.id\n      };\n    }\n\n    function save() {\n\n      if (Session.hasPermissions('wholesale.sales.sale.details.update,wholesale.presales.presale.preorders.preorder.details.update')) {\n        var obj = angular.copy(vm.sale);\n\n        api.inventories.saleOrders.update(\n          obj,\n          function (result) {\n            if (result.id) {\n              SaleData = result;\n              initialize();\n              //$scope.billingForm.$setPristine();\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('SALE.SALE_UPDATED'))\n                  .position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function cancel() {\n      initialize();\n      //$scope.billingForm.$setPristine();\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('SALES.' + SALE_ORDER_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return SALE_ORDER_STATUS_COLORS[status];\n    }\n\n    function getAddressesById(addressId) {\n      return vm.sale.customer_instance.postal_addresses.find(function (postal_address) {\n        return postal_address.id == parseInt(addressId);\n      });\n    }\n\n    function getShippingAddress() {\n      if (!vm.sale.shipping_address) return {};\n      return getAddressesById(vm.sale.shipping_address);\n    }\n\n    function getBillingAddress() {\n      if (!vm.sale.billing_address) return {};\n      return getAddressesById(vm.sale.billing_address);\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function savePayment() {\n      if (vm.saving || vm.temporalPayment.payment_method == null || vm.temporalPayment.amount == 0) {\n        return;\n      }\n      vm.saving = true;\n\n      api.accounting.payments.save(\n        vm.temporalPayment,\n        function (response, callback, status) {\n          if (status == 201) {\n            vm.sale.sale_order_payments.push(response);\n            //vm.invoice.payment_status = response.invoice_payment_status;\n            vm.temporalPayment = {\n              id: null,\n              payment_method: null,\n              amount: null,\n              date: new Date(),\n              sale_order: vm.sale.id\n            }\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      )\n    }\n\n    function updatePayment(payment){\n\n      if (vm.saving) {\n        return;\n      }\n      vm.saving = true;\n\n      api.accounting.payments.update(\n        payment,\n        function (response, callback, status) {\n          if (status == 200) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      )\n    }\n\n    function removePayment(payment) {\n\n      if (vm.saving) {\n        return;\n      }\n      vm.saving = true;\n\n      api.accounting.payments.delete(\n        payment,\n        function (response, callback, status) {\n          if (status == 200) {\n            for (var i = 0; i < vm.sale.sale_order_payments.length; i++) {\n              if (vm.sale.sale_order_payments[i].id == payment.id) {\n                vm.sale.sale_order_payments.splice(i, 1);\n                break;\n              }\n            }\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      )\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleDetailsController', WholesaleSaleDetailsController);\n\n  /** @ngInject */\n  function WholesaleSaleDetailsController($scope, $q, $state, $stateParams, $filter, $window, $mdToast, $document, api, WarehousesData, PaymentMethodsData,\n                                          SaleData, SerialNumberTypesData, InventoryConfigurationData, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS,\n                                          PAYMENT_TERM_TYPES, PricingTiers, COUNTRIES_DICT, CONTACT_TYPES, CONTACT_INVOICING_TYPES, SEARCH_MAX_LENGTH,\n                                          PAYMENT_STATUS_TYPES, CURRENCIES, LANGUAGES, SeasonsData, Session, CollectionsData, SERIAL_NUMBER_TYPES) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.$parent.vm.sale = SaleData;\n    $scope.$parent.vm.isDevolution = $stateParams.type == \"devolution\";\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.countries = COUNTRIES_DICT;\n    vm.warehouses = WarehousesData.results;\n    vm.seasons = SeasonsData.results;\n    vm.sale = null;\n    vm.isNewSale = false;\n    vm.isDevolution = $stateParams.type == \"devolution\";\n    vm.presale = $state.params.presaleId;\n    vm.pricingTiers = PricingTiers.results;\n    vm.minDate = new Date();\n    vm.searchSelectHeader = new Array(3);\n    vm.contactTypes = CONTACT_TYPES;\n    vm.contactInvoicingTypes = CONTACT_INVOICING_TYPES;\n    vm.paymentStatusTypes = PAYMENT_STATUS_TYPES\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.paymentMethods = PaymentMethodsData.results;\n    vm.currencies = CURRENCIES;\n    vm.languages = LANGUAGES;\n    vm.selectFilter = {};\n    vm.collections = CollectionsData.results;\n    vm.creatingSalesAgent = false;\n    vm.salesAgentSearchText = null;\n    vm.salesWarehouseSearchText = null;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.create = create;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.getBillingAddress = getBillingAddress;\n    vm.getShippingAddress = getShippingAddress;\n    vm.customerChanged = customerChanged;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.actionSaveButton = actionSaveButton;\n    vm.translateSaveButton = translateSaveButton;\n    vm.pricingTierChanged = pricingTierChanged;\n    vm.salesAgentQuerySearch = salesAgentQuerySearch;\n    vm.selectSalesAgent = selectSalesAgent;\n    vm.createSalesAgent = createSalesAgent;\n    vm.getSelectedSalesAgentName = getSelectedSalesAgentName;\n\n    // Register Events\n    vm.initializeSaleEvent = $scope.$on('initialize-sale', function (event, args) {\n      SaleData = args.sale;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeSaleEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n    function getDefaultPricingTier() {\n      var defaultPricingTier = vm.pricingTiers.find(function(pricingTier) {\n        return pricingTier.type == 1 && pricingTier.default;\n      });\n\n      if (defaultPricingTier == null) {\n        defaultPricingTier = vm.pricingTiers.find(function(pricingTier) {\n          return pricingTier.type == 1;\n        });\n      }\n      return defaultPricingTier;\n    }\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n\n      // This is to fill the showroom select\n      vm.showroomsAvailable = {};\n      if (Session.user.warehouses.length) {\n        Session.user.warehouses.forEach(function (warehouse) {\n          vm.showroomsAvailable[warehouse] = true;\n        });\n      } else {\n        vm.warehouses.forEach(function (warehouse) {\n          vm.showroomsAvailable[warehouse.id] = true;\n        });\n      }\n      // Loading all whether we are creating or editing\n      if (SaleData == null) {\n\n        var defaultPricingTier = getDefaultPricingTier();\n\n        vm.isNewSale = true;\n        var serial_number_type = null;\n        var delivery_notes_serial_number_type = null;\n        if (InventoryConfigurationData) {\n          serial_number_type = vm.isDevolution ? InventoryConfigurationData.results[0].sale_order_devolution_default_serial_number_type : InventoryConfigurationData.results[0].sale_order_default_serial_number_type;\n          delivery_notes_serial_number_type = vm.isDevolution ? InventoryConfigurationData.results[0].sale_order_delivery_devolution_default_serial_number_type : InventoryConfigurationData.results[0].sale_order_delivery_default_serial_number_type;\n        }\n\n        var currency = null;\n\n        if (defaultPricingTier && defaultPricingTier.currency) {\n          currency = defaultPricingTier.currency;\n        } else {\n          currency = Session.company.currency;\n        }\n\n        vm.sale = {\n          tags: [],\n          serial_number_type: serial_number_type,\n          delivery_notes_serial_number_type: delivery_notes_serial_number_type,\n          currency: currency,\n          language: Session.user.lang,\n          source_warehouse: vm.warehouses.length ? vm.warehouses[0].id : null,\n          season: vm.seasons.length ? vm.seasons[0].id : null,\n          pricing_tier: defaultPricingTier ? defaultPricingTier.id : null,\n          showroom: null,\n          sales_agent: Session.user.id,\n          sales_agent_instance: Session.user,\n        };\n\n      } else {\n        vm.sale = angular.copy(SaleData);\n        if (vm.sale.start_date)\n          vm.sale.start_date = new Date(vm.sale.start_date);\n        if (vm.sale.cancel_date)\n          vm.sale.cancel_date = new Date(vm.sale.cancel_date);\n\n        vm.minDate = vm.sale.start_date;\n      }\n    }\n\n    function onSelectorClose(filter) {\n      vm.selectFilter[filter] = '';\n    }\n\n    function pricingTierChanged() {\n      if (vm.sale.pricing_tier && vm.pricingTiers && vm.pricingTiers.length) {\n        var defaultCurrency = Session.company.currency;\n\n        var pricingTierMatch = vm.pricingTiers.find(function (pricingTier) {\n          return pricingTier && pricingTier.hasOwnProperty('id') && pricingTier.id == vm.sale.pricing_tier;\n        });\n\n        if (pricingTierMatch && pricingTierMatch.hasOwnProperty('currency') && pricingTierMatch.currency) {\n          vm.sale.currency = pricingTierMatch.currency;\n        } else {\n          vm.sale.currency = defaultCurrency;\n        }\n      }\n    }\n\n    function save() {\n\n      if (Session.hasPermissions('wholesale.sales.sale.details.update,wholesale.presales.presale.preorders.preorder.details.update')) {\n        var obj = angular.copy(vm.sale);\n\n        if (obj.start_date) {\n          obj.start_date = $filter('date')(obj.start_date, 'yyyy-MM-dd');\n        }\n        if (obj.cancel_date) {\n          obj.cancel_date = $filter('date')(obj.cancel_date, 'yyyy-MM-dd');\n        }\n        api.inventories.saleOrders.update(\n          obj,\n          function (result) {\n            if (result.id) {\n              SaleData = result;\n              initialize();\n              $scope.detailsForm.$setPristine();\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('SALE.SALE_UPDATED'))\n                  .position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function cancel() {\n      if (vm.isNewSale) {\n        $window.history.back();\n      } else {\n        initialize();\n        $scope.detailsForm.$setPristine();\n      }\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('SALES.' + SALE_ORDER_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return SALE_ORDER_STATUS_COLORS[status];\n    }\n\n    /**\n     * Creates the new sale object\n     */\n    function create() {\n      if (Session.hasPermissions('wholesale.sales.create,wholesale.presales.presale.preorders.create')) {\n\n        var obj = angular.copy(vm.sale);\n        if (obj.start_date)\n          obj.start_date = $filter('date')(obj.start_date, 'yyyy-MM-dd');\n        if (obj.cancel_date)\n          obj.cancel_date = $filter('date')(obj.cancel_date, 'yyyy-MM-dd');\n        if (vm.presale) {\n          obj.collection = vm.presale;\n        }\n        if (obj.serial_number_type == -1 && InventoryConfigurationData) {\n          obj.serial_number_type = InventoryConfigurationData.results[0].sale_order_devolution_default_serial_number_type\n        }\n        if ($stateParams.type && $stateParams.type == 'devolution') {\n          obj.is_devolution = true;\n        }\n\n        api.inventories.saleOrders.save(\n          obj,\n          function (result, callback, status) {\n            if (status == 201) {\n              $state.go('app.wholesale.sales.sale.products', {id: result.id});\n            }\n          }\n        );\n      }\n    }\n\n    function getAddressesById(addressId) {\n      return vm.sale.customer_instance.postal_addresses.find(function (postal_address) {\n        return postal_address.id == parseInt(addressId);\n      });\n    }\n\n    function getShippingAddress() {\n      if (!vm.sale.shipping_address) return {};\n      return getAddressesById(vm.sale.shipping_address);\n    }\n\n    function getBillingAddress() {\n      if (!vm.sale.billing_address) return {};\n      return getAddressesById(vm.sale.billing_address);\n    }\n\n    function customerChanged() {\n      if (!vm.sale.customer || !vm.sale.customer_instance) {\n        return;\n      }\n\n      var aux_address = vm.sale.customer_instance.postal_addresses.find(function (postalAddress) {\n        return postalAddress.is_billing_address\n      });\n      vm.sale.billing_address = aux_address ? angular.copy(aux_address.id) : null;\n      aux_address = vm.sale.customer_instance.postal_addresses.find(function (postalAddress) {\n        return postalAddress.is_shipping_address\n      });\n      vm.sale.shipping_address = aux_address ? angular.copy(aux_address.id) : null;\n\n      vm.sale.payment_method = angular.copy(vm.sale.customer_instance.payment_method);\n      vm.sale.currency = angular.copy(vm.sale.customer_instance.currency);\n      //vm.sale.tags = vm.sale.customer_instance.tags ? angular.copy(vm.sale.customer_instance.tags) : [];\n      vm.sale.invoice_type = angular.copy(vm.sale.customer_instance.invoice_type);\n      vm.sale.exclude_taxes = angular.copy(vm.sale.customer_instance.exclude_taxes);\n      vm.sale.surcharge = angular.copy(vm.sale.customer_instance.surcharge);\n      if (vm.sale.customer_instance.pricing_tier) {\n        vm.sale.pricing_tier = angular.copy(vm.sale.customer_instance.pricing_tier);\n      }\n      vm.sale.discount = angular.copy(vm.sale.customer_instance.discount);\n      vm.sale.early_payment_discount = angular.copy(vm.sale.customer_instance.early_payment_discount);\n      vm.sale.exclude_taxes = angular.copy(vm.sale.customer_instance.exclude_taxes);\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function actionSaveButton(isNewSale) {\n      if (isNewSale) {\n        create();\n      } else {\n        save();\n      }\n    }\n\n    function translateSaveButton(isNewSale){\n      if (isNewSale) {\n        return $filter('translate')('SALE.CONTINUE');\n      }\n      else{\n        return $filter('translate')('SALE.SAVE')\n      }\n    }\n\n    function salesAgentQuerySearch() {\n      var deferred = $q.defer();\n      vm.salesAgentSearchText = vm.salesAgentSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.users.get(\n        {\n          search: vm.salesAgentSearchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectSalesAgent(salesAgent) {\n      if (typeof salesAgent === 'object') {\n        if (salesAgent) {\n          vm.sale.sales_agent_instance = salesAgent;\n          vm.sale.sales_agent = salesAgent.id;\n        } else {\n          vm.sale.sales_agent_instance = null;\n          vm.sale.sales_agent = null;\n        }\n      }\n    }\n\n    function createSalesAgent(salesAgent) {\n      if (vm.creatingSalesAgent) {\n        return;\n      }\n      vm.creatingSalesAgent = true;\n      api.account.users.save({\n        name: salesAgent\n      }, function (response, callback, status) {\n        if (status == 201) {\n          selectSalesAgent(response);\n        }\n        vm.creatingSalesAgent = false;\n      });\n    }\n\n    function getSelectedSalesAgentName() {\n      if (vm.sale.sales_agent_instance) {\n        return vm.sale.sales_agent_instance.first_name + ' ' + vm.sale.sales_agent_instance.last_name;\n      }\n      return null;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleDeliveryController', WholesaleSaleDeliveryController);\n\n  /** @ngInject */\n  function WholesaleSaleDeliveryController($scope,\n                                           $timeout,\n                                           $document,\n                                           $window,\n                                           $state,\n                                           $q,\n                                           $compile,\n                                           $translate,\n                                           $stateParams,\n                                           $http,\n                                           $mdDialog,\n                                           $mdToast,\n                                           $filter,\n                                           $interval,\n                                           WarehousesData,\n                                           InventoryConfigurationData,\n                                           SaleOrderData,\n                                           SerialNumberTypesData,\n                                           SaleOrderDeliveryData,\n                                           api,\n                                           DTColumnBuilder,\n                                           Invoice,\n                                           Session,\n                                           HTTP_STATUS,\n                                           ORDER_DELIVERY_STATUSES,\n                                           ORDER_DELIVERY_STATUSES_REVERSE,\n                                           SALE_ORDER_DELIVERY_STATUS_COLORS,\n                                           MAX_PRODUCTS_PER_PDF,\n                                           SEARCH_MAX_LENGTH,\n                                           SALE_ORDER_STATUSES_REVERSE,\n                                           SERIAL_NUMBER_TYPES\n  ) {\n\n    $scope.$parent.vm.currentNavItem = 'deliveries';\n    $scope.$parent.vm.sale = SaleOrderData;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SALE_ORDER_STATUSES_REVERSE = SALE_ORDER_STATUSES_REVERSE;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.sale = null;\n    vm.saleOrderDelivery = angular.copy(SaleOrderDeliveryData);\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.invoiceSerialNumberTypeId = InventoryConfigurationData ? InventoryConfigurationData.results[0].wholesale_invoice_default_serial_number_type : null;\n    vm.warehouses = WarehousesData.results;\n    vm.generatingInvoice = false;\n    vm.summary = {};\n    vm.notes = null;\n    vm.private_notes = null;\n    vm.taxes = [];\n    vm.currency = vm.saleOrderDelivery.pricing_tier_currency\n      ? vm.saleOrderDelivery.pricing_tier_currency\n      : Session.company.currency;\n\n    vm.visualizationOptions = {\n      productOptions: {\n        discount: {\n          id: 'discount',\n          translation: 'PURCHASE.DISCOUNT',\n          selected: false,\n          visible: false\n        },\n        show_prices_incl_tax: {\n          id: 'show_prices_incl_tax',\n          translation: 'SALE.SHOW_INCL_TAXES',\n          selected: false,\n          visible: true\n        },\n        show_tax_select: {\n          id: 'tax_select',\n          translation: 'ACCOUNT.TAXES',\n          selected: false,\n          visible: false\n        },\n        price: {\n          id: 'price',\n          translation: 'SALE.SHOW_PRICES',\n          selected: false,\n          visible: true\n        },\n        shippingDate: {\n          id: 'shipping_date',\n          translation: 'PURCHASE.SHIPPING_DATE',\n          selected: false,\n          visible: false\n        }\n      },\n      productVariantOptions: {\n        sku: {\n          id: 'sku',\n          translation: 'SALE.SHOW_SKUS',\n          selected: false,\n          visible: true\n        },\n        leftAmount: {\n          id: 'leftAmount',\n          translation: 'ORDER.ORDERED',\n          selected: true,\n          visible: true\n        },\n        rightAmount: {\n          id: 'rightAmount',\n          translation: getSaleOrderDeliveryStatusTranslation(),\n          selected: true,\n          visible: true\n        }\n      }\n    };\n\n    // Methods\n    vm.getAddressesById = getAddressesById;\n    vm.isShippingAddressSelectorEnabled = isShippingAddressSelectorEnabled;\n    vm.isInPickingPackingProcess = isInPickingPackingProcess;\n    vm.goPickingAndPackingView = goPickingAndPackingView;\n    vm.getContactShippingAddresses = getContactShippingAddresses;\n    vm.saveSaleOrderDelivery = saveSaleOrderDelivery;\n    vm.setShippingAddress = setShippingAddress;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.generateInvoice = generateInvoice;\n    vm.linkWithInvoice = linkWithInvoice;\n    vm.unbindInvoiceDialog = unbindInvoiceDialog;\n    vm.isNotAllowedToEdit = isNotAllowedToEdit;\n    vm.setSaleOrderDeliveryNotes = setSaleOrderDeliveryNotes;\n    vm.downloadInvoicePdf = downloadInvoicePdf;\n\n    // File methods\n    vm.fileAdded = fileAdded;\n    vm.filesAdded = filesAdded;\n    vm.upload = upload;\n    vm.fileSuccess = fileSuccess;\n    vm.deleteFile = deleteFile;\n    vm.getFilename = getFilename;\n    vm.firstImageLoaded = false;\n\n    vm.ngFlowOptions = {\n      // You can configure the ngFlow from here\n      target: api.urls.inventories.saleOrderDeliveryFiles.replace('/:id/', ''),\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000,\n      query: {\n        sale_order_delivery: vm.saleOrderDelivery.id\n      }\n    };\n    vm.ngFlow = {\n      // ng-flow will be injected into here through its directive\n      flow: {}\n    };\n    vm.dropping = false;\n\n    // Register Events\n    vm.initializeSaleEvent = $scope.$on('initialize-sale', function(event, args) {\n      SaleOrderData = args.sale;\n      initialize();\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.initializeSaleEvent();\n    });\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.sale = SaleOrderData;\n      vm.saleOrderDelivery = angular.copy(SaleOrderDeliveryData);\n      if (vm.saleOrderDelivery.invoice) {\n        vm.saleOrderDelivery.invoice = new Invoice(vm.saleOrderDelivery.invoice);\n      }\n\n      $scope.getTotalPriceEvent = $scope.$on('update-total-price::orderDeliveryController', function(event, totalOrderPrice) {\n        if (totalOrderPrice.total_price_excl_tax || totalOrderPrice.total_price_excl_tax === 0) {\n          vm.saleOrderDelivery.total_excl_tax = totalOrderPrice.total_price_excl_tax;\n        }\n        if (totalOrderPrice.total_price_incl_tax || totalOrderPrice.total_price_incl_tax === 0) {\n          vm.saleOrderDelivery.total_incl_tax = totalOrderPrice.total_price_incl_tax;\n        }\n        if (totalOrderPrice.subtotal || totalOrderPrice.subtotal === 0) {\n          vm.saleOrderDelivery.subtotal = totalOrderPrice.subtotal;\n        }\n        if (totalOrderPrice.subtotal_early_payment_discount || totalOrderPrice.subtotal_early_payment_discount === 0) {\n          vm.saleOrderDelivery.subtotal_early_payment_discount = totalOrderPrice.subtotal_early_payment_discount;\n        }\n        if (totalOrderPrice.subtotal_discount || totalOrderPrice.subtotal_discount === 0) {\n          vm.saleOrderDelivery.subtotal_discount = totalOrderPrice.subtotal_discount;\n        }\n        if (totalOrderPrice.subtotals_by_tax) {\n          vm.saleOrderDelivery.subtotals_by_tax = totalOrderPrice.subtotals_by_tax;\n        }\n      });\n\n      $scope.$on('$destroy', function() {\n        $scope.getTotalPriceEvent();\n      });\n\n      api.accounting.taxes.get(function(response) {\n        angular.merge(vm.taxes, response.results);\n      });\n\n      api.inventories.saleOrderDeliveryFiles.get(\n        { sale_order_delivery: vm.saleOrderDelivery.id },\n        function(response, callback, status) {\n          vm.files = response.results;\n          vm.files.map(function(files) {\n            files.type = 'file';\n          });\n          if (vm.files.length > 0) {\n            vm.firstImageLoaded = true;\n          }\n        }\n      );\n\n      vm.notes = vm.saleOrderDelivery.notes;\n      vm.private_notes = vm.saleOrderDelivery.private_notes;\n      getContactShippingAddresses();\n    }\n\n    function getStatusLabel() {\n      return $filter('translate')('SALE.' + ORDER_DELIVERY_STATUSES[vm.saleOrderDelivery.status]);\n    }\n\n    function getSaleOrderDeliveryStatusTranslation() {\n      if (vm.saleOrderDelivery.status === 3) {\n        return 'ORDER.SHIPPED';\n      }\n      return 'ORDER.PREPARED';\n    }\n\n    function getStatusColorClass() {\n      return SALE_ORDER_DELIVERY_STATUS_COLORS[vm.saleOrderDelivery.status];\n    }\n\n    function linkWithInvoice() {\n      $mdDialog.show({\n        controller: 'BindInvoiceToOrderController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/bind-invoice-to-order/bind-invoice-to-order.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          url: api.urls.accounting.invoices.replace('/:id/', ''),\n          order_type: 'SaleOrderDelivery',\n          order: vm.saleOrderDelivery,\n          orderId: vm.saleOrderDelivery.sale_order,\n          hasInvoices: vm.sale.invoices.length > 0\n        }\n      }).then(function(invoice) {\n        vm.saleOrderDelivery.invoice = invoice;\n      });\n    }\n\n    function unbindInvoiceDialog(callback) {\n      var autocode = vm.saleOrderDelivery.invoice.autocode ? vm.saleOrderDelivery.invoice.autocode : $filter('translate')('PURCHASE.NO_REFERENCE');\n\n      var confirm = $mdDialog.confirm({\n        onComplete: function afterShowAnimation() {\n          var $dialog = angular.element(document.querySelector('md-dialog'));\n          var $actionsSection = $dialog.find('md-dialog-actions');\n          var $cancelButton = $actionsSection.children()[0];\n          var $confirmButton = $actionsSection.children()[1];\n          angular.element($confirmButton).addClass('stroked md-warn');\n          angular.element($cancelButton).addClass('stroked md-primary');\n        }\n      })\n        .title($filter('translate')('PURCHASE.UNBIND_INVOICE'))\n        .htmlContent($filter('translate')('PURCHASE.UNBIND_INVOICE_TEXT', { 'autocode': autocode }))\n        .ariaLabel($filter('translate')('PURCHASE.UNBIND_INVOICE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.UNBIND'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (typeof callback !== 'undefined') {\n          unbindInvoice(callback);\n        } else {\n          unbindInvoice();\n        }\n      });\n    }\n\n    function unbindInvoice() {\n      api.inventories.order.save(\n        {\n          option: 'unbind-invoice-from-delivery-order',\n          order_id: vm.saleOrderDelivery.id,\n          order_type: 'SaleOrderDelivery',\n          invoice_id: vm.saleOrderDelivery.invoice.id\n        },\n        function(response, callback, status) {\n          if (status === 200) {\n            vm.saleOrderDelivery.invoice = null;\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY'))\n              .position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right'));\n          }\n        });\n    }\n\n    function generateInvoice() {\n\n      if (Session.hasPermission('wholesale.sales.sale.delivery.generate_invoice')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SALE.GENERATE_INVOICE'))\n          .htmlContent($filter('translate')('SALE.GENERATE_INVOICE_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.GENERATE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n\n          if (!vm.generatingInvoice) {\n            vm.generatingInvoice = true;\n            api.accounting.invoices.save({\n              option: 'generate-sale-order-delivery-invoice',\n              sale_order_delivery_id: vm.saleOrderDelivery.id,\n              serial_number_type_id: vm.invoiceSerialNumberTypeId\n            }, function(response) {\n              api.inventories.saleOrderDeliveries.get({\n                id: vm.saleOrderDelivery.id\n              }, function(response) {\n                vm.generatingInvoice = false;\n                $timeout(function() {\n                  vm.saleOrderDelivery.invoice = new Invoice(response.invoice);\n                });\n              });\n            });\n          }\n\n        }, function() {\n          vm.generatingInvoice = false;\n        });\n      }\n    }\n\n    function setShippingAddress() {\n      api.inventories.saleOrderDeliveries.update({\n        id: vm.saleOrderDelivery.id,\n        option: 'set-shipping-address',\n        shipping_address: vm.saleOrderDelivery.shipping_address\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          //SUCCESS\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function setSaleOrderDeliveryNotes() {\n      if (vm.notes === vm.saleOrderDelivery.notes && vm.private_notes === vm.saleOrderDelivery.private_notes) {\n        return;\n      }\n\n      api.inventories.saleOrderDeliveries.update({\n        id: vm.saleOrderDelivery.id,\n        option: 'set-sale-order-delivery-notes',\n        notes: vm.saleOrderDelivery.notes,\n        private_notes: vm.saleOrderDelivery.private_notes\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.notes = vm.saleOrderDelivery.notes;\n          vm.private_notes = vm.saleOrderDelivery.private_notes;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function saveSaleOrderDelivery() {\n\n      vm.changingStatus = true;\n\n      api.inventories.saleOrderDeliveries.update({\n        id: vm.saleOrderDelivery.id,\n        notes: vm.saleOrderDelivery.notes,\n        private_notes: vm.saleOrderDelivery.private_notes,\n        autocode: vm.saleOrderDelivery.autocode,\n        partial: true\n      }, function(response, callback, status) {\n        if (status === 200) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n    function getContactShippingAddresses() {\n      api.inventories.contacts.get({\n        id: SaleOrderData.customer\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          if (response.postal_addresses) {\n            vm.shippingAddresses = response.postal_addresses;\n          }\n        }\n      });\n    }\n\n    function getAddressesById(addressId) {\n      return vm.sale.customer_instance.postal_addresses.find(function(postal_address) {\n        return postal_address.id == parseInt(addressId);\n      });\n    }\n\n    function isShippingAddressSelectorEnabled() {\n      return vm.saleOrderDelivery.status !== ORDER_DELIVERY_STATUSES_REVERSE.DRAFT && vm.saleOrderDelivery.status !== ORDER_DELIVERY_STATUSES_REVERSE.PREPARED;\n    }\n\n    function isInPickingPackingProcess() {\n      return (vm.saleOrderDelivery.picking_order && vm.saleOrderDelivery.picking_order.length) || vm.saleOrderDelivery.packing_order;\n    }\n\n    function goPickingAndPackingView() {\n      if (vm.saleOrderDelivery.packing_order) {\n        $state.go('app.inventory.picking_packing.packing_order.products', { id: vm.saleOrderDelivery.packing_order });\n      } else if (vm.saleOrderDelivery.picking_order) {\n        $state.go('app.inventory.picking_packing.picking_order', { id: vm.saleOrderDelivery.picking_order[vm.saleOrderDelivery.picking_order.length - 1] });\n      }\n    }\n\n    function fileAdded(file, event, flow) {\n      // Prepare the temp file data for media list\n      var uploadingFile = {\n        id: file.uniqueIdentifier,\n        file: file,\n        type: 'uploading'\n      };\n      // Append it to the media list\n      vm.files.unshift(uploadingFile);\n    }\n\n    function filesAdded(files, event, flow) {\n      files.forEach(function(file) {\n        var uploadingFile = {\n          id: file.uniqueIdentifier,\n          file: file,\n          type: 'uploading'\n        };\n        vm.files.unshift(uploadingFile);\n      });\n    }\n\n    function upload(files, event, flow) {\n      flow.files = [];\n      files.forEach(function(file) {\n        flow.files.push(file);\n        file.progressValue = 0;\n        file.interval = $interval(function() {\n          file.progressValue = file.progress();\n          if (file.progressValue === 1) {\n            $interval.cancel(file.interval);\n          }\n        }, 100);\n      });\n      flow.opts.headers = {\n        'Authorization': 'Token ' + Session.token\n      };\n      flow.upload();\n    }\n\n    function getFilename(url) {\n      if (url) {\n        var m = url.toString().match(/.*\\/(.+?)\\./);\n        if (m && m.length > 1) {\n          return m[1];\n        }\n      }\n      return '';\n    }\n\n    function fileSuccess(file, message) {\n      // Iterate through the media list, find the one we\n      // are added as a temp and replace its data\n      // Normally you would parse the message and extract\n      // the uploaded file data from it\n      angular.forEach(vm.files, function(media, index) {\n        if (media.id === file.uniqueIdentifier) {\n          // Normally you would update the media item\n          // from database but we are cheating here!\n          /*var fileReader = new FileReader();\n          fileReader.readAsDataURL(media.file.file);\n          fileReader.onload = function (event)\n          {\n            media.url = event.target.result;\n          };*/\n\n          // Update the image type so the overlay can go away\n          angular.extend(media, JSON.parse(message));\n          media.type = 'file';\n          vm.firstImageLoaded = true;\n        }\n      });\n    }\n\n    function isNotAllowedToEdit() {\n      return vm.saleOrderDelivery.invoice && vm.saleOrderDelivery.invoice.status >= 1;\n    }\n\n    function deleteFile(file) {\n      // if (Session.hasPermission('app.inventory.sales.sale.invoices.update'))\n      var confirm = $mdDialog.confirm({\n        onComplete: function afterShowAnimation() {\n          var $dialog = angular.element(document.querySelector('md-dialog'));\n          var $actionsSection = $dialog.find('md-dialog-actions');\n          var $cancelButton = $actionsSection.children()[0];\n          var $confirmButton = $actionsSection.children()[1];\n          angular.element($confirmButton).addClass('stroked md-warn');\n          angular.element($cancelButton).addClass('stroked md-primary');\n        }\n      })\n        .title($filter('translate')('PURCHASE.DELETE_DOCUMENT'))\n        .htmlContent($filter('translate')('PURCHASE.DELETE_DOCUMENT_TEXT', { 'document_name': vm.getFilename(file.file) }))\n        .ariaLabel($filter('translate')('PURCHASE.DELETE_DOCUMENT'))\n        .targetEvent(file)\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n      $mdDialog.show(confirm).then(function() {\n        api.inventories.saleOrderDeliveryFiles.delete({ id: file.id }, function(response) {\n          var index = vm.files.indexOf(file);\n          vm.files.splice(index, 1);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n        });\n      });\n    }\n\n    function downloadInvoicePdf() {\n      api.private.v2.accounting.invoices.print({\n        id: vm.saleOrderDelivery.invoice.id\n      });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleDeliveriesController', WholesaleSaleDeliveriesController);\n\n  /** @ngInject */\n  function WholesaleSaleDeliveriesController($scope, $state, $stateParams, $compile, $mdDialog, $mdToast, $filter,\n                                             $translate, api, Session, SaleOrderData, DTColumnBuilder,\n                                             ORDER_DELIVERY_STATUSES, ORDER_DELIVERY_STATUS_COLORS,\n                                             SALE_ORDER_DELIVERY_STATUS_COLORS, SALE_ORDER_STATUSES_REVERSE) {\n\n    $scope.$parent.vm.currentNavItem = 'deliveries';\n    $scope.$parent.vm.sale = SaleOrderData;\n\n\n    // Data\n    var vm = this;\n    vm.sale = SaleOrderData;\n    vm.creatingNewDelivery = false;\n    vm.dtInstance = {};\n    vm.ajax = {\n      dataSrc: 'data',\n      url: api.urls.inventories.saleOrderDeliveries.replace('/:id/', ''),\n      type: 'get',\n      headers: {\n        'Authorization': 'Token ' + Session.token\n      },\n      data: function(d) {\n        d.pagination = 'datatable';\n        d.sale_order = $stateParams.id;\n      }\n    };\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      //drawCallback: drawCallback,\n      //rowCallback: rowCallback,\n      //initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [5, 10, 25, 50],\n      pageLength: 25,\n      //scrollY     : 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      //order: [[0, 'desc']],\n      language: {\n        url: 'app/main/apps/inventory/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableSaleOrderDeliveryController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableSaleOrderDeliveryController'));\n        return state;\n      }\n    };\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      //order: [[ 5, 'desc' ]],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      // rowCallback: rowCallback,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      //scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/inventory/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableSaleOrderDeliveryController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableSaleOrderDeliveryController'));\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('SALE.SERIAL_NUMBER')).renderWith(function(data, type, full) {\n        if (data) {\n          return '<a ui-sref=\"app.wholesale.sales.sale.deliveries.delivery({orderDeliveryId:' + full.id + '})\">' + data + '</a>';\n        } else {\n          return '<a ui-sref=\"app.wholesale.sales.sale.deliveries.delivery({orderDeliveryId:' + full.id + '})\">-</a>';\n        }\n\n      }),\n      DTColumnBuilder.newColumn('status').withTitle($filter('translate')('SALE.STATUS')).renderWith(function(data, type, full) {\n        return '<span class=\"status ' + getStatusColorClass(data) + '\">' + getStatusLabel(data) + '</span>';\n      }),\n      DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('SALE.CREATED_AT')).renderWith(function(data, type, full) {\n        return $filter('date')(data, 'medium');\n      }),\n      DTColumnBuilder.newColumn('created_by_username').withTitle($filter('translate')('SALE.CREATED_BY')),\n      DTColumnBuilder.newColumn('prepared_at').withTitle($filter('translate')('SALE.PREPARED_AT')).renderWith(function(data, type, full) {\n        return $filter('date')(data, 'dd-MM-yyyy');\n      }),\n      DTColumnBuilder.newColumn('prepared_by_username').withTitle($filter('translate')('SALE.PREPARED_BY')),\n      DTColumnBuilder.newColumn('shipped_at').withTitle($filter('translate')('SALE.SHIPPED_AT')).renderWith(function(data, type, full) {\n        return $filter('date')(data, 'dd-MM-yyyy');\n      }),\n      DTColumnBuilder.newColumn('shipped_by_username').withTitle($filter('translate')('SALE.SHIPPED_BY')),\n      DTColumnBuilder.newColumn('received_at').withTitle($filter('translate')('SALE.RECEIVED_AT')).renderWith(function(data, type, full) {\n        return $filter('date')(data, 'dd-MM-yyyy');\n      }),\n      DTColumnBuilder.newColumn('received_by_username').withTitle($filter('translate')('SALE.RECEIVED_BY'))\n    ];\n\n\n    // Methods\n    vm.newDelivery = newDelivery;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.showNewDeliveryButton = showNewDeliveryButton;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      api.inventories.saleOrders.get(\n        {\n          option: 'check-status',\n          id: vm.sale.id\n        },\n        function(response) {\n          vm.sale.status = response.status\n        }\n      );\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('SALE.' + ORDER_DELIVERY_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return SALE_ORDER_DELIVERY_STATUS_COLORS[status];\n    }\n\n    function newDelivery(ev) {\n      if (Session.hasPermission('wholesale.sales.sale.deliveries.create')) {\n\n        if (vm.creatingNewDelivery)\n          return;\n\n        vm.creatingNewDelivery = true;\n\n        var draftOnProcess = false;\n\n        if (draftOnProcess) {\n\n          $mdDialog.show(\n            $mdDialog.alert()\n              .parent(angular.element(document.querySelector('#sale-deliveries')))\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title('Delivery in course')\n              .textContent('You already have a delivery opened. Close it before open a new one.')\n              .ariaLabel('Delivery in course')\n              .ok('OK')\n              .targetEvent(ev)\n          );\n\n\n        } else {\n\n          api.inventories.saleOrderDeliveries.save(\n            {\n              sale_order: vm.sale.id,\n              serial_number_type: vm.sale.delivery_notes_serial_number_type\n            },\n            function(response) {\n              $state.go('app.wholesale.sales.sale.deliveries.delivery', {\n                id: vm.sale.id,\n                orderDeliveryId: response.id\n              });\n            }\n          );\n\n        }\n\n      }\n    }\n\n    function showNewDeliveryButton() {\n      return vm.sale.status != SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_RECEIVED &&\n        vm.sale.status != SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_CANCELED &&\n        vm.sale.status != SALE_ORDER_STATUSES_REVERSE.SALE_ORDER_STATUS_SHIPPED;\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('NewPresaleDialogController', NewPresaleDialogController);\n\n  /** @ngInject */\n  function NewPresaleDialogController($mdDialog, $mdToast, $filter, $document, api, collection, seasons, brands, SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.collection = collection;\n    vm.seasons = seasons;\n    vm.brands = brands;\n    vm.selectedTab = 0;\n    vm.newSeason = {};\n    vm.savingSeason = false;\n    vm.newBrand = {};\n    vm.savingBrand = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.saveSeason = saveSeason;\n    vm.saveBrand = saveBrand;\n\n\n    // Functions\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n      api.wholesale.presales.save(\n        vm.collection,\n        function (response) {\n          \n          vm.collection.id = response.id;\n          $mdDialog.hide({\n            collection: vm.collection,\n            newSeason: vm.newSeason,\n            newBrand: vm.newBrand\n          });\n\n        }\n      );\n\n    }\n\n    function saveSeason(){\n      vm.savingSeason = true;\n      api.inventories.seasons.save(\n        vm.newSeason,\n        function(results){\n          if(results.id){\n            vm.newSeason = results;\n            vm.savingSeason = false;\n            vm.seasons.push(vm.newSeason);\n            vm.collection.season = vm.newSeason.id;\n            vm.selectedTab = 0;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SEASON_CREATED')).position('top right'));\n          }\n          else{\n            vm.savingSeason = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      )\n    }\n\n    function saveBrand(){\n      vm.savingBrand = true;\n      api.inventories.brands.save(\n        vm.newBrand,\n        function(results){\n          if(results.id){\n            vm.newBrand = results;\n            vm.savingBrand = false;\n            vm.brands.push(vm.newBrand);\n            vm.collection.brand = vm.newBrand.id;\n            vm.selectedTab = 0;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.BRAND_CREATED')).position('top right'));\n          }\n          else{\n            vm.savingBrand = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      )\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen(){\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e)\n      {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose(){\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesalePresalePurchasesController', WholesalePresalePurchasesController);\n\n  /** @ngInject */\n  function WholesalePresalePurchasesController($scope, $stateParams, $state, $http, $timeout, $filter, $compile, DTColumnBuilder,\n                                                     $translate, api, Session, PresaleData, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUS_COLORS,\n                                                     SEARCH_MAX_LENGTH){\n\n    $scope.$parent.vm.currentNavItem = \"purchases\";\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.customers = {};\n    vm.presale = PresaleData;\n    vm.orderStatuses = PURCHASE_ORDER_STATUSES;\n    vm.orderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.inventories.purchaseOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.presale = vm.presale.id;\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [10, 25, 50, 100],\n      pageLength  : 25,\n      //scrollY     : 'auto',\n      autoWidth : false,\n      responsive: true,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/wholesale/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('PURCHASES.SERIAL_NUMBER')).renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.inventory.purchases.purchase.products({id:' + full.id + ', idCollection:' +  vm.presale.id + '})\">' + data + '</a>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('PURCHASES.STATUS')).renderWith(function(data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('contact_name').withTitle($filter('translate')('PURCHASE.CONTACT')),\n        /*DTColumnBuilder.newColumn('target_warehouse__name').withTitle($filter('translate')('PURCHASES.TARGET_WAREHOUSE')).renderWith(function(data, type, full) {\n          return vm.warehousesById[full.target_warehouse].name;\n        }),\n        DTColumnBuilder.newColumn('season').withTitle($filter('translate')('PURCHASES.SEASON')).renderWith(function(data, type, full) {\n          return vm.seasonsById[data].name;\n        }),*/\n        DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('PURCHASES.CREATION_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        /*DTColumnBuilder.newColumn('expected_at').withTitle($filter('translate')('PURCHASES.EXPECTED_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),*/\n        DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('TRANSFERS.ITEMS'))\n      ];\n\n    // Methods\n\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize(){\n\n    }\n\n    // Functions\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Go to presale detail\n     *\n     * @param id\n     */\n    function gotoOrderDetail(id){\n      $state.go('app.inventory.purchases.purchase.details', {id: id, idCollection: vm.presale.id});\n    }\n\n    function initComplete()\n    {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if ( searchBox.length > 0 )\n      {\n        searchBox.on('keyup', function (event)\n        {\n          var vm = $scope.vm;\n\n          if(vm.timeout){\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function(){\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesalePresaleProductsController', WholesalePresaleProductsController);\n\n  /** @ngInject */\n  function WholesalePresaleProductsController($scope, $state, $mdDialog, $document, $stateParams, $timeout, $filter,\n                                                 $compile, DTColumnBuilder, $translate, api, Session, PresaleData,\n                                                 CategoriesData, CompositionsData, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"products\";\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.categories = {};\n    vm.compositions = {};\n    vm.presale = PresaleData;\n    CategoriesData.results.forEach(function (category) {\n      vm.categories[category.id] = category\n    });\n    CompositionsData.results.forEach(function (composition) {\n      vm.compositions[composition.id] = composition\n    });\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.products.replace('/:id/:option', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.presale = vm.presale.id;\n          d.serializer = 'ProductNamedSerializer';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      order: [7, 'desc'],\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableWholesalePresalesPresaleProductController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        return JSON.parse(localStorage.getItem(Session.company.id + '::dataTableWholesalePresalesPresaleProductController'));\n      }\n    };\n\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('cover').withTitle($filter('translate')('PRODUCT.IMAGE')).withOption('className', 'imageColumn').withOption('width', '50px')\n      .renderWith(function (data, type, full) {\n        if (angular.isUndefined(full.cover_thumbnail)) return null;\n\n        if (full.cover_thumbnail) {\n          return '<img class=\"thumbnail-40\" src=\"' + full.cover_thumbnail + '\">'\n        }\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n\n      }),\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          if (angular.isUndefined(full.code)) return null;\n          return '<a ui-sref=\"app.inventory.products.product.overview({id:' + full.id + '})\">' + full.code + '</a>';\n        }),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function (data, type, full) {\n          if (!full.name) return '';\n          const name = (full.name.length > 30) ? full.name.substr(0, 30) + '&hellip;' : full.name;\n          return (full.name.length > 30) ? ('<md-tooltip md-direction=\"right\">' + full.name + '</md-tooltip>' + name) : full.name;\n        }),\n      DTColumnBuilder.newColumn('season').withTitle($filter('translate')('PRODUCT.SEASON')),\n      DTColumnBuilder.newColumn('category').withTitle($filter('translate')('PRODUCTS.CATEGORY')),\n      DTColumnBuilder.newColumn('subcategory').withTitle($filter('translate')('PRODUCTS.SUBCATEGORY')),\n      DTColumnBuilder.newColumn('provider').withTitle($filter('translate')('PRODUCTS.PROVIDER'))\n        .renderWith(function (data, type, full) {\n          if (!data) return '';\n          const name = (data.length > 30) ? data.substr(0, 30) + '&hellip;' : data;\n          return (data.length > 30) ? ('<md-tooltip md-direction=\"right\">' + data + '</md-tooltip>' + name) : data;\n        }),\n      DTColumnBuilder.newColumn('updated_at').withTitle($filter('translate')('PRODUCT.UPDATED_AT'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'short');\n        })\n    ];\n\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n\n    // Methods\n    vm.newProduct = newProduct;\n    vm.openProductSearchDialog = openProductSearchDialog;\n\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function newProduct(product) {\n      if (Session.hasPermission('wholesale.presales.presale.products.create')) {\n        $state.go(\"app.wholesale.presales.presale.products.new\", {id: vm.presale.id});\n      }\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function openProductSearchDialog(ev) {\n      if (Session.hasPermission('wholesale.presales.presale.products.add')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true\n            }\n          }\n        }).then(function (result) {\n\n          api.wholesale.presales.save({\n            product_id: result.product ? result.product.id : null,\n            product_ids: result.products ? result.products.map(function (p) {\n              return p.id;\n            }) : null,\n            id: vm.presale.id,\n            option: 'add-product'\n          }, function (response, callback, status) {\n            if (status === 200) {\n              vm.presale = response;\n              initialize();\n              vm.dtInstance.DataTable.draw();\n            }\n          });\n\n        });\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'nvd3',\n        'textAngular',\n        'xeditable',\n        'app.services.session',\n        'wipImageZoom',\n        'dndLists',\n        'mm.iban'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.manufacture', {\n        abstract: true,\n        url: '/manufacture'\n      })\n\n      /**\n       * RAW MATERIALS\n       */\n\n      /*.state('app.inventory.products', {\n        url: '/products',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          TableType: function() {\n            return 'products';\n          }\n        },\n        bodyClass: 'inventory'\n      })*/\n\n      .state('app.manufacture.materials', {\n        url: '/materials',\n        views: {\n          /*'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/materials/materials.html',\n            controller: 'ManufactureMaterialsController as vm'\n          }*/\n          'content@app': {\n            templateUrl: 'app/main/apps/inventory/views/products/products.html',\n            controller: 'InventoryProductsController as vm'\n          }\n        },\n        params: {\n          reload: null\n        },\n        resolve: {\n          PricingTiersData: function(apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          },\n          TableType: function() {\n            return 'm';\n          }\n        },\n        bodyClass: 'inventory'\n      })\n\n      /**\n       * PRODUCTIONS\n       */\n      .state('app.manufacture.productions', {\n        url: '/productions',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/productions/productions.html',\n            controller: 'ProductionsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {serializer: 'WarehouseSimpleSerializer'});\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list', {});\n          }\n        },\n        bodyClass: 'productions'\n      })\n\n      /**\n       * PRODUCTION BASE NEW\n       */\n\n      .state('app.manufacture.productions.new', {\n        url: '/new',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/production/production.html',\n            controller: 'ManufactureProductionController as vm'\n          }\n        },\n        resolve: {\n          ProductionData: function (apiResolver, $stateParams) {\n            return null;\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n        },\n        bodyClass: 'manufacture-production-new'\n      })\n\n      /**\n       * NEW PRODUCTION\n       */\n\n      .state('app.manufacture.productions.new.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.manufacture.productions.new': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/details.html',\n            controller: 'ManufactureProductionDetailsController as vm'\n          }\n        },\n        resolve: {\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          }\n        },\n        bodyClass: 'manufacture-production-new-details'\n      })\n\n      /**\n       * PRODUCTION  BASE\n       */\n\n      .state('app.manufacture.productions.production', {\n        url: '/:id',\n        abstract: true,\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/manufacture/views/production/production.html',\n            controller: 'ManufactureProductionController as vm'\n          }\n        },\n        params: {\n          idCollection: null\n        },\n        resolve: {},\n        bodyClass: 'manufacture-production'\n      })\n\n      /**\n       * PRODUCTION DETAILS\n       */\n\n      .state('app.manufacture.productions.production.details', {\n        url: '/details',\n        views: {\n          'subcontent@app.manufacture.productions.production': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/details.html',\n            controller: 'ManufactureProductionDetailsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {});\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list', {});\n          },\n          ProductionData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.productionOrders@get', {id: $stateParams.id});\n          },\n          SerialNumberTypesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n          },\n          InventoryConfigurationData: function (apiResolver) {\n            return null;\n          }\n        },\n        bodyClass: 'manufacture-production-details'\n      })\n\n      /**\n       * PRODUCTION PRODUCTS\n       */\n\n      .state('app.manufacture.productions.production.products', {\n        url: '/products',\n        views: {\n          'subcontent@app.manufacture.productions.production': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/products.html',\n            controller: 'ManufactureProductionProductsController as vm'\n          }\n        },\n        resolve: {\n          ProductionOrderData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.productionOrders@get', {id: $stateParams.id});\n          }\n        },\n        bodyClass: 'manufacture-production-products'\n      })\n\n      /**\n       * PRODUCTION MATERIALS\n       */\n\n      .state('app.manufacture.productions.production.materials', {\n        url: '/materials',\n        views: {\n          'subcontent@app.manufacture.productions.production': {\n            templateUrl: 'app/main/apps/manufacture/views/production/tabs/materials.html',\n            controller: 'ManufactureProductionMaterialsController as vm'\n          }\n        },\n        resolve: {\n          ProductionOrderData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('manufactures.productionOrders@get', {id: $stateParams.id});\n          }\n        },\n        bodyClass: 'manufacture-production-materials'\n      })\n\n      ;\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/manufacture');\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('WholesalePresalePreordersController', WholesalePresalePreordersController);\n\n  /** @ngInject */\n  function WholesalePresalePreordersController($scope, $stateParams, $state, $http, $timeout, $filter, $compile, DTColumnBuilder,\n                                                     $translate, api, Session, PresaleData, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH,\n                                               $interval){\n\n    $scope.$parent.vm.currentNavItem = \"preorders\";\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    var PULLING_FREQUENCE = 5000;\n\n    // Data\n    vm.presale = PresaleData;\n    vm.orderStatuses = SALE_ORDER_STATUSES;\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.selected = [];\n    vm.dtInstance = {};\n    vm.creatingPurchases = false;\n\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.inventories.saleOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.presale = vm.presale.id;\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [10, 25, 50, 100],\n      pageLength  : 25,\n      //scrollY     : 'auto',\n      //scrollX     : true,\n      autoWidth : false,\n      responsive: false,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n        DTColumnBuilder.newColumn('select')\n          .withTitle(\"<md-checkbox class='mb-0' ng-click='vm.selectAll()'></md-checkbox>\")\n          .withOption('className', 'checkbox')\n          .notSortable().withOption(\"searchable\", false).withOption(\"orderable\", false).withOption(\"sortable\", false).notSortable().withOption('width', '20px')\n          .renderWith(function (data, type, full) {\n            return '<md-checkbox class=\"m-0\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></md-checkbox>';\n        }),\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('SALE.SERIAL_NUMBER')).renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.wholesale.sales.sale.products({id:' + full.id + '})\">' + data + '</a>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('SALE.STATUS')).renderWith(function (data, type, full) {\n          return '<span class=\"status ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('SALES.' + SALE_ORDER_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('customer__name').withTitle($filter('translate')('SALE.CONTACT')).renderWith(function (data, type, full) {\n          return full.customer_name ? full.customer_name : '-';\n        }),\n        DTColumnBuilder.newColumn('showroom__name').withTitle($filter('translate')('SALES.SALES_WAREHOUSE')).renderWith(function (data, type, full) {\n          return full.showroom_name;\n        }).notSortable(),\n        DTColumnBuilder.newColumn('sales_agent__first_name').withTitle($filter('translate')('SALES.SALES_AGENT')).renderWith(function (data, type, full) {\n          return full.sales_agent_name;\n        }),\n        DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('SALE.CREATION_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('start_date').withTitle($filter('translate')('SALE.START_SHIPPING_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('cancel_date').withTitle($filter('translate')('SALE.CANCEL_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('SALES.ITEMS')).notSortable(),\n        DTColumnBuilder.newColumn('subtotal').withTitle($filter('translate')('SALES.SUBTOTAL'))\n      ];\n\n    // Methods\n    vm.toggle = toggle;\n    vm.exists = exists;\n    vm.selectAll = selectAll;\n    vm.createPurchases = createPurchases;\n    vm.createPendingPurchases = createPendingPurchases;\n    vm.newPreorder = newPreorder;\n    vm.getCreatePurchasesStatus = getCreatePurchasesStatus;\n    vm.pullCreatePurchasesStatus = pullCreatePurchasesStatus;\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize(){\n      getCreatePurchasesStatus();\n    }\n\n    // Functions\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function initComplete()\n    {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if ( searchBox.length > 0 )\n      {\n        searchBox.on('keyup', function (event)\n        {\n          var vm = $scope.vm;\n\n          if(vm.timeout){\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function(){\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggle(item) {\n      var idx = vm.selected.indexOf(item);\n      if (idx > -1) {\n        vm.selected.splice(idx, 1);\n      }\n      else {\n        vm.selected.push(item);\n      }\n    }\n\n    function exists(item) {\n      return vm.selected.indexOf(item) > -1;\n    }\n\n    function selectAll() {\n      if (vm.selected.length) {\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      } else {\n        vm.dtInstance.DataTable.rows().data().map(function (preorder) {\n          vm.selected.push(preorder.id);\n        });\n      }\n    }\n\n    function createPurchases(){\n      if(vm.creatingPurchases){\n        return\n      }\n      vm.creatingPurchases = true;\n\n      api.inventories.purchaseOrders.save({\n        option: 'create-from-presale',\n        presale_order_ids: vm.selected,\n        presale_collection_id: vm.presale.id\n      }, function(response, callback, status){\n        if(status === 200){\n          $state.go('app.wholesale.presales.presale.purchases')\n        }\n        getCreatePurchasesStatus();\n      });\n    }\n\n    function createPendingPurchases(){\n      if(vm.creatingPurchases){\n        return\n      }\n      vm.creatingPurchases = true;\n\n      api.inventories.purchaseOrders.save({\n        option: 'create-from-pending-presale',\n        presale_collection_id: vm.presale.id\n      }, function(response, callback, status){\n        if(status === 200){\n          $state.go('app.wholesale.presales.presale.purchases')\n        }\n        getCreatePurchasesStatus();\n      })\n    }\n\n    function newPreorder(){\n      $state.go('app.wholesale.sales.new.details', {presaleId: vm.presale.id});\n    }\n\n    function getCreatePurchasesStatus(){\n      api.manufactures.collections.get({\n        option: 'check-create-purchases',\n        id: vm.presale.id\n      }, function (result, callback, status) {\n        vm.creatingPurchases = result.creating_purchase_orders;\n        if (vm.creatingPurchases){\n          pullCreatePurchasesStatus();\n        }\n      });\n    }\n\n    function pullCreatePurchasesStatus(){\n      vm.pullingInterval = $interval(function () {\n        api.manufactures.collections.get({\n          option: 'check-create-purchases',\n          id: vm.presale.id\n        }, function (result, callback, status) {\n          if (result.creating_purchase_orders === false){\n            $interval.cancel(vm.pullingInterval);\n            vm.creatingPurchases = false;\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('WholesalePresaleDetailsController', WholesalePresaleDetailsController);\n\n  /** @ngInject */\n  function WholesalePresaleDetailsController($scope, $mdDialog, $mdToast, $filter, $document, api,\n                                                  HTTP_STATUS, PresaleData, BrandsData, SeasonsData, PricingTiersData, Session, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.presale = angular.copy(PresaleData);\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.selectFilter = '';\n    vm.generateClicked = false;\n    vm.pricingTiers = PricingTiersData.results;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.newBrandAdded = newBrandAdded;\n    vm.newSeasonAdded = newSeasonAdded;\n    vm.generateCSV = generateCSV;\n    vm.generatePDF = generatePDF;\n\n    // Initialize\n\n\n    // Functions\n    function save() {\n      Session.hasPermission('wholesale.presales.presale.details.update')\n      {\n        api.wholesale.presales.update(\n          vm.presale,\n          function (response, callback, status) {\n            if (status == 200) {\n              PresaleData.code = response.code;\n              PresaleData.brand = response.brand;\n              PresaleData.season = response.season;\n              vm.presale.code = response.code;\n              vm.presale.brand = response.brand;\n              vm.presale.season = response.season;\n              $scope.collectionForm.$setPristine();\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRESALE.PRESALE_COLLECTION_SAVED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        )\n      }\n    }\n\n    function cancel() {\n      vm.presale = angular.copy(PresaleData);\n      $scope.collectionForm.$setPristine();\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      vm.selectFilter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function newBrandAdded(newBrand) {\n      vm.presale.brand = newBrand.id;\n    }\n\n    function newSeasonAdded(newSeason) {\n      vm.presale.season = newSeason.id;\n    }\n\n    function generatePDF() {\n      api.wholesale.presales.get(\n        {\n          id:  vm.presale.id,\n          option: 'export-pdf',\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('PURCHASE.PURCHASE_CATALOG'))\n                .htmlContent($filter('translate')('PURCHASE.PURCHASE_CATALOG_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.printing = false;\n        });\n\n\n      //.replace(':id', vm.presale.id);\n      //var params = angular.element.param({\n      //  wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n      //  retail_pricing_tier_id: vm.selectedRetailPricingTier\n      //})\n      //Session.setTokenCookie();\n      //window.open(url + '?' + params);\n\n    }\n\n    function generateCSV() {\n      if (!vm.selectedWholesalePricingTier || !vm.selectedRetailPricingTier) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PURCHASE.PLEASE_SELECT_PRICING_TIERS')).position('top right'));\n      }\n      if (vm.selectedWholesalePricingTier && vm.selectedRetailPricingTier) {\n        var url = api.urls.wholesale.presalesCSV.replace(':id', vm.presale.id);\n        var params = angular.element.param({\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        })\n        Session.setTokenCookie();\n        window.open(url + '?' + params);\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SalesSearchGiftCardDialogController', SalesSearchGiftCardDialogController);\n\n  /** @ngInject */\n  function SalesSearchGiftCardDialogController($scope, $mdDialog, api, Session, hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.barcode = '';\n    vm.searching = false;\n    vm.posOrderProductVariant =  null;\n    vm.currency = Session.company.currency;\n\n    // Methods\n    vm.search = search;\n    vm.cancel = cancel;\n    vm.useGiftCard = useGiftCard;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT'],\n      callback: function (event) {\n        if (vm.posOrderProductVariant) {\n          useGiftCard()\n        } else {\n          search();\n        }\n      }\n    });\n\n    //Functions\n    function search() {\n      if (vm.searching) {\n        return;\n      }\n\n      vm.searching = true;\n\n      api.inventories.posOrderProductVariants.save({\n        barcode: vm.barcode,\n        option: 'consume-gift-card'\n      }, function (response, callback, status) {\n        if (status === 200) {\n          vm.posOrderProductVariant = response;\n          $scope.giftCardForm.barcode.$setValidity(\"NotFoundCodeError\", true);\n        } else {\n          $scope.giftCardForm.barcode.$setValidity(\"NotFoundCodeError\", false);\n        }\n        vm.searching = false;\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function useGiftCard() {\n      if (vm.posOrderProductVariant) {\n        $mdDialog.hide(vm.posOrderProductVariant);\n      }\n    }\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n        .module('app.sale')\n        .controller('SalesSearchDevolutionCardDialogController', SalesSearchDevolutionCardDialogController);\n\n    /** @ngInject */\n    function SalesSearchDevolutionCardDialogController($scope, $mdDialog, api, params) {\n        var vm = this;\n\n        // Data\n        vm.barcode = '';\n        vm.posOrderProductVariant = null;\n\n\n        // Methods\n        vm.search = search;\n        vm.cancel = cancel;\n\n        //Functions\n        function search() {\n            if (vm.searching) {\n                return;\n            }\n\n            vm.searching = true;\n\n            api.inventories.posOrderProductVariants.save({\n                barcode: vm.barcode,\n                register_id: params.registerId,\n                option: 'consume-gift-card'\n            }, function (response, callback, status) {\n                if (status === 200) {\n                    vm.posOrderProductVariant = response;\n                } else {\n                    vm.searching = false;\n                    $scope.voucherForm.barcode.$setValidity(\"NotFoundCodeError\", false);\n                }\n                vm.searching = false;\n                if (vm.posOrderProductVariant) {\n                    $mdDialog.hide(vm.posOrderProductVariant);\n                }\n            });\n        }\n\n        function cancel() {\n            $mdDialog.cancel();\n        }\n    }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('ProductVariantSelectorDialogController', ProductVariantSelectorDialogController)\n\n  /** @ngInject */\n  function ProductVariantSelectorDialogController($mdDialog, $mdToast, api, HTTP_STATUS, product, warehouse, inStock,\n                                                  $filter, productVariant) {\n    var vm = this;\n\n    // data\n    vm.product = product;\n    vm.fetching = false;\n    vm.colorVariantsById = {};\n    vm.sizeVariantsById = {};\n    vm.variantsDependencyTree = {};\n    vm.selectedSizeVariantId = null;\n    vm.selectedColorVariantId = null;\n    vm.productVariant = productVariant;\n\n    // methods\n    vm.disableBackButton = disableBackButton;\n    vm.getAvailableVariants = getAvailableVariants;\n    vm.onVariantSelected = onVariantSelected;\n    vm.back = back;\n    vm.cancel = cancel;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      fetchingProductVariants(product, warehouse, inStock);\n    }\n\n    function fetchingProductVariants(product, warehouse, inStock) {\n      vm.fetching = true;\n      // Call to get all variants\n      api.inventories.productVariants.get({\n        product_id: product.id,\n        warehouse_id: warehouse ? warehouse.id : null,\n        in_stock: inStock,\n        option: 'get-sell-variants'\n      }, function (results, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          $mdDialog.cancel();\n        } else {\n          vm.manageUids = results.manage_uids;\n          vm.manageLots = results.manage_lots;\n          if (vm.productVariant) {\n            var aux_product_variants = [];\n            results.product_variants.forEach(function(productVariant) {\n              if (productVariant.id == vm.productVariant) {\n                aux_product_variants.push(productVariant);\n              }\n            });\n            results.product_variants = aux_product_variants;\n          }\n          buildVariantsDependencyTree(results.product_variants);\n          autocompleteProductVariantSelection();\n        }\n        vm.fetching = false;\n      });\n    }\n\n    function buildVariantsDependencyTree(productVariants) {\n      productVariants.forEach(function(productVariant) {\n        if (!vm.sizeVariantsById[productVariant.size.id]) {\n          vm.sizeVariantsById[productVariant.size.id] = productVariant.size;\n          vm.variantsDependencyTree[productVariant.size.id] = {};\n        }\n\n        if (!vm.colorVariantsById[productVariant.color.id]) {\n          vm.colorVariantsById[productVariant.color.id] = productVariant.color;\n        }\n\n        vm.variantsDependencyTree[productVariant.size.id][productVariant.color.id] = productVariant;\n      });\n    }\n\n    function autocompleteProductVariantSelection() {\n      var sizeVariantIds = Object.keys(vm.sizeVariantsById);\n      if (!vm.selectedSizeVariantId && sizeVariantIds.length == 1) {\n        vm.selectedSizeVariantId = sizeVariantIds[0];\n      }\n\n      if (!vm.selectedSizeVariantId) {\n        return;\n      }\n\n      var colorVariantIds = Object.keys(vm.variantsDependencyTree[vm.selectedSizeVariantId]);\n      if (!vm.selectedColorVariantId && colorVariantIds.length == 1) {\n        vm.selectedColorVariantId = colorVariantIds[0];\n      }\n\n      if (vm.selectedSizeVariantId && vm.selectedColorVariantId) {\n        $mdDialog.hide({\n          manageUids: vm.manageUids,\n          manageLots: vm.manageLots,\n          variant: vm.variantsDependencyTree[vm.selectedSizeVariantId][vm.selectedColorVariantId]\n        });\n      }\n    }\n\n    function onVariantSelected(variant) {\n      if (!vm.selectedSizeVariantId) {\n        vm.selectedSizeVariantId = variant.id;\n      } else if (!vm.selectedColorVariantId) {\n        vm.selectedColorVariantId = variant.id;\n      }\n\n      autocompleteProductVariantSelection();\n    }\n\n    function getAvailableVariants() {\n      if (!vm.selectedSizeVariantId) {\n        return Object.values(vm.sizeVariantsById);\n      }\n\n      return Object.keys(vm.variantsDependencyTree[vm.selectedSizeVariantId])\n        .map(function(colorId){\n          return vm.colorVariantsById[colorId];\n        })\n    }\n\n    function disableBackButton() {\n      return !vm.selectedSizeVariantId || Object.keys(vm.sizeVariantsById).length == 1;\n    }\n\n    function back() {\n      vm.selectedSizeVariantId = null;\n      vm.selectedColorVariantId = null;\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('ProductNotFoundDialogController', ProductNotFoundDialogController);\n\n  /** @ngInject */\n  function ProductNotFoundDialogController($scope, $mdDialog, params, $rootScope) {\n    var vm = this;\n    // Data\n\n    // Methods\n    vm.cancel = cancel;\n    vm.barcode = params.barcode;\n\n    //Functions\n\n    function cancel() {\n      $mdDialog.cancel();\n      $rootScope.ndBarcodeListenerEnabled = true;\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('PaymentStatusDialogController', PaymentStatusDialogController);\n\n  /** @ngInject */\n  function PaymentStatusDialogController($scope, $mdDialog, $filter, $http, params, HTTP_STATUS, ERROR_CODES, api, GATEWAY_ERRORS, DOJO_STATES, DOJO_ERROR_MESSAGES, $mdToast, Comercia, PAYMENT_METHOD_GATEWAYS) {\n    var vm = this;\n\n    // Data\n    vm.pulling = true;\n    vm.pos_order_payment_method = params.pos_order_payment_method;\n    vm.pos_order = params.pos_order;\n    vm.timesRun = 0;\n    vm.success = null;\n    vm.errorMessage = null;\n    vm.dialogErrorMessage = null;\n    vm.cancelling = false;\n    vm.confirmCancel = false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.retry = retry;\n    vm.close = close;\n    //Functions\n    init();\n\n    function isComerciaGateway() {\n      return vm.pos_order_payment_method &&\n        vm.pos_order_payment_method.payment_gateway_data &&\n        vm.pos_order_payment_method.payment_gateway_data.gateway === PAYMENT_METHOD_GATEWAYS.COMERCIA;\n    }\n\n    function isDojoGateway() {\n      return vm.pos_order_payment_method &&\n        vm.pos_order_payment_method.payment_gateway_data &&\n        vm.pos_order_payment_method.payment_gateway_data.gateway === PAYMENT_METHOD_GATEWAYS.DOJO;\n    }\n\n    function init() {\n      init_payment();\n      checkPaymentStatus();\n    }\n\n    function validatePayment(data) {\n      api.inventories.posOrderPaymentMethods.save(\n        {\n          id: vm.pos_order_payment_method.id,\n          option: 'payment-terminal-validate'\n        },\n        data\n      );\n    }\n\n    function callPayPaymentGatewayService() {\n      Comercia.callPayComercia(vm.pos_order_payment_method, vm.pos_order)\n        .then(function (response) {\n          if (response.error === true) {\n            vm.errorMessage = response.errors;\n            if (response.cancel === true) {\n              cancelServer();\n            } else {\n              stopPulling();\n            }\n          }\n\n          if (response.success === true) {\n            validatePayment(response.data);\n          }\n        }, function (error) {\n          vm.errorMessage = error;\n          stopPulling();\n        });\n    }\n\n    function callRefundPaymentService() {\n      Comercia.callRefundComerciaPayment(vm.pos_order_payment_method, vm.pos_order).then(\n        function (response) {\n          if (response.error === true) {\n            vm.errorMessage = response.errors;\n            if (response.cancel === true) {\n              cancelServer();\n            } else {\n              stopPulling();\n            }\n          }\n\n          if (response.success === true) {\n            validatePayment(response.data);\n          }\n        },\n        function (error) {\n          vm.errorMessage = error;\n          stopPulling();\n        }\n      );\n    }\n\n    function callPaymentService() {\n      if (vm.pos_order.isDevolution && vm.pos_order.total < 0) {\n        callRefundPaymentService();\n        return;\n      }\n      if (vm.pos_order.total > 0) {\n        callPayPaymentGatewayService();\n      }\n    }\n\n    function initComercia() {\n      Comercia.initPinPad(vm.pos_order_payment_method).then(\n        function (response) {\n          if (response.error === true) {\n            vm.errorMessage = response.errors;\n            stopPulling();\n          } else {\n            vm.pulling = true;\n            callPaymentService();\n          }\n        },\n        function (error) {\n          vm.errorMessage = error;\n          stopPulling();\n        }\n      );\n    }\n\n    function init_payment() {\n      if(isComerciaGateway()){\n        initComercia();\n      }\n    }\n\n\n    function checkPaymentStatus() {\n      if (vm.pulling) {\n        api.inventories.posOrderPaymentMethods.get({\n          id: vm.pos_order_payment_method.id,\n          option: 'payment-terminal-status'\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            vm.pullingId = setTimeout(function () {\n              if (isComerciaGateway()) {\n                Comercia.isLastTransactionFinished(vm.pos_order_payment_method, vm.pos_order).then(function (response) {\n                  if (response !== false) {\n                    if (response.data.resultCode === 0) {\n                      validatePayment(response.data);\n                    } else if (response.data.resultCode === 16){\n                      cancelServer();\n                    }\n                  }\n                  checkPaymentStatus();\n                });\n              } else {\n                checkPaymentStatus();\n              }\n            }, 1500);\n            return;\n          }\n          if (status === HTTP_STATUS.HTTP_202_ACCEPTED) {\n            if (isDojoGateway()) {\n              var paymentStatus = response.data.meta.payment_status;\n              var errors = [60, 80, 90, 100, 110, 120];\n              if (paymentStatus && errors.indexOf(paymentStatus) !== -1) {\n                if (!(paymentStatus in DOJO_STATES)) {\n                  vm.errorMessage = 'GATEWAY_ERROR_STANDARD';\n                } else {\n                  vm.errorMessage = DOJO_STATES[paymentStatus];\n                }\n                vm.errorMessage = 'SALES.' + vm.errorMessage;\n                vm.errorMessage = $filter('translate')(vm.errorMessage);\n                $mdToast.show($mdToast.simple().textContent(vm.errorMessage).position('top right'));\n\n                if (paymentStatus in DOJO_ERROR_MESSAGES) {\n                  vm.dialogErrorMessage = 'SALES.' + DOJO_ERROR_MESSAGES[paymentStatus];\n                  vm.dialogErrorMessage = $filter('translate')(vm.dialogErrorMessage);\n                }\n                stopPulling();\n                if(paymentStatus === 60) {\n                  $mdDialog.cancel();\n                }\n                return;\n              }\n            }\n            vm.pullingId = setTimeout(function () {\n              checkPaymentStatus();\n            }, 1000);\n            return;\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var payment_data = response.data;\n            vm.errorMessage = payment_data.response_code;\n            if (vm.errorMessage) {\n              if (!(vm.errorMessage in GATEWAY_ERRORS)) {\n                vm.errorMessage = 'GATEWAY_ERROR_STANDARD';\n              }\n              vm.errorMessage = 'SALES.' + vm.errorMessage;\n              vm.errorMessage = $filter('translate')(vm.errorMessage);\n            }\n            stopPulling();\n            if (payment_data.success) {\n              $mdDialog.hide(response.pos_order);\n            }\n          } else {\n            stopPulling();\n          }\n        });\n      }\n    }\n\n    function stopPulling() {\n      vm.pulling = false;\n      if (vm.pullingId) {\n        if (isComerciaGateway()) {\n          Comercia.abortPayment();\n        }\n        clearTimeout(vm.pullingId);\n      }\n    }\n\n    function close() {\n      cancelServer();\n      $mdDialog.cancel();\n    }\n\n    function cancelServer() {\n      api.inventories.posOrderPaymentMethods.save({\n        id: vm.pos_order_payment_method.id,\n        option: 'payment-gateway-cancel-payment'\n      }, function (response, fn, status) {\n        if(isDojoGateway()){\n          vm.confirmCancel = false;\n          return;\n        }\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PAYMENT_CANCELED')).position('top right'));\n        } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n          // Do nothing\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        stopPulling();\n      });\n      if(!isDojoGateway()){\n        $mdDialog.cancel();\n      }\n    }\n\n    function cancel() {\n      vm.cancelling = true;\n      Comercia.callCancel(vm.pos_order_payment_method).then(\n        function (response) {\n          cancelServer();\n          vm.cancelling = false;\n        }, function (error) {\n          cancelServer();\n          vm.cancelling = false;\n        }\n      ).catch(function (error) {\n        vm.cancelling = false;\n      });\n    }\n\n    function retry() {\n      vm.timesRun = 0;\n      vm.errorMessage = null;\n      vm.dialogErrorMessage = null;\n      vm.pulling = true;\n      init_payment();\n      api.inventories.posOrderPaymentMethods.get({\n        pos_order_payment_method_id: vm.pos_order_payment_method.id,\n        option: 'payment-gateway-retry-payment'\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.pos_order_payment_method = response;\n          checkPaymentStatus();\n        } else {\n          stopPulling();\n        }\n      });\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('UsersBottomSheetController', UsersBottomSheetController);\n\n  /** @ngInject */\n  function UsersBottomSheetController($mdBottomSheet, $mdMedia, Session) {\n\n    var vm = this;\n    vm.users = Session.listUsers();\n\n    vm.setUser = setUser;\n\n    function setUser(user) {\n      $mdBottomSheet.hide(user);\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('NumericBottomSheetController', NumericBottomSheetController);\n\n  /** @ngInject */\n  function NumericBottomSheetController($mdBottomSheet, $mdMedia, Session) {\n\n    var vm = this;\n    vm.users = Session.listUsers();\n    vm.value = '';\n    vm.insertValue = insertValue;\n    vm.returnValue = returnValue;\n    vm.removeValue = removeValue;\n    vm.clearValue = clearValue;\n    function returnValue() {\n      $mdBottomSheet.hide(parseFloat(vm.value.replace(',','.')));\n    }\n\n    function insertValue(value){\n      if (value === ',' && vm.value.includes(',')) {\n        return;\n      }\n      if (value === ',' && vm.value.length === 0) {\n        return;\n      }\n      if (vm.value.includes(',') && vm.value.split(',')[1].length >= 2) {\n        return;\n      }\n      if (value === 0 && vm.value.length === 0) {\n        return;\n      }\n      vm.value += String(value);\n    }\n\n    function removeValue(value){\n      vm.value = vm.value.substring(0, vm.value.length - 1);\n    }\n\n    function clearValue(value){\n      vm.value = '';\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('ndPosOrderVerifactuCardController', ndPosOrderVerifactuCardController)\n    .directive('ndPosOrderVerifactuCard', ndPosOrderVerifactuCard);\n\n  /** @ngInject */\n  function ndPosOrderVerifactuCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/sale/views/sales-log/directives/nd-pos-order-verifactu-card.html',\n      scope: {\n        posOrderInvoices: '='\n      },\n      controller: 'ndPosOrderVerifactuCardController'\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrderVerifactuCardController($scope, $filter, $mdDialog) {\n    var VERIFACTU_STATUS = {\n      VALID: 1,\n      ACCEPTED_WITH_ERRORS: 2,\n      INVALID: 3\n    };\n\n    $scope.invoiceTabs = [];\n    $scope.selectedInvoice = null;\n    $scope.selectedTabIndex = 0;\n    $scope.tabsConfig = [];\n    $scope.selectedTabName = null;\n\n    if ($scope.posOrderInvoices && $scope.posOrderInvoices.length > 0) {\n      if ($scope.posOrderInvoices.length > 0) {\n        $scope.invoiceTabs = $scope.posOrderInvoices.map(function(invoice) {\n          var verifactuData = invoice.verifactu_data;\n          var qrCodeImage = invoice.qr_code_url || null;\n          var verifactuUrl = verifactuData ? verifactuData.url || null : null;\n          var fiscalAddress = invoice.fiscal_address || null;\n\n          var fiscalInfo = null;\n          if (fiscalAddress) {\n            var addressLine = fiscalAddress['address_1'] || '';\n            if (fiscalAddress['address_2']) {\n              addressLine += (addressLine ? ', ' : '') + fiscalAddress['address_2'];\n            }\n            var cityLine = '';\n            if (fiscalAddress['zip']) {\n              cityLine += fiscalAddress['zip'];\n            }\n            if (fiscalAddress['city']) {\n              cityLine += (cityLine ? ' ' : '') + fiscalAddress['city'];\n            }\n\n            fiscalInfo = {\n              legalName: fiscalAddress['legal_name'] || null,\n              vat: fiscalAddress['vat'] || null,\n              address: addressLine || null,\n              cityZip: cityLine || null\n            };\n          }\n\n          return {\n            id: invoice.id,\n            concept: invoice.concept,\n            autocode: invoice.autocode,\n            fiscalAddress: fiscalAddress,\n            fiscalInfo: fiscalInfo,\n            qrCodeImage: qrCodeImage,\n            url: verifactuUrl,\n            status: verifactuData.status,\n            errorCode: verifactuData['error_code'],\n            errorMessage: verifactuData['error_message'],\n            updatedAt: verifactuData['updated_at'] ?\n                       new Date(verifactuData['updated_at']) : null,\n            createdAt: verifactuData['created_at'] ?\n                       new Date(verifactuData['created_at']) : null\n          };\n        });\n\n        $scope.tabsConfig = $scope.invoiceTabs.map(function(invoice) {\n          return {\n            name: invoice.autocode,\n            label: invoice.autocode,\n            id: invoice.id\n          };\n        });\n\n        $scope.selectedInvoice = $scope.invoiceTabs[0];\n        $scope.selectedTabName = $scope.invoiceTabs[0].autocode;\n      }\n    }\n    $scope.hasInvoices = function() {\n      return $scope.invoiceTabs && $scope.invoiceTabs.length > 0;\n    };\n\n    $scope.selectInvoice = function(invoice) {\n      $scope.selectedInvoice = invoice;\n      $scope.selectedTabIndex = $scope.invoiceTabs.indexOf(invoice);\n    };\n\n    $scope.onTabChange = function(tab) {\n      var invoice = $scope.invoiceTabs.find(function(inv) {\n        return inv.autocode === tab.name;\n      });\n      if (invoice) {\n        $scope.selectedInvoice = invoice;\n        $scope.selectedTabIndex = $scope.invoiceTabs.indexOf(invoice);\n      }\n    };\n\n    $scope.getStatusLabel = getStatusLabel;\n    $scope.getStatusBadgeClass = getStatusBadgeClass;\n    $scope.showErrorDetails = showErrorDetails;\n    $scope.hasError = hasError;\n    $scope.isValid = isValid;\n    $scope.isValidWithErrors = isValidWithErrors;\n    $scope.isPending = isPending;\n\n    function getStatusLabel(status) {\n      if (status === null || status === undefined) {\n        return $filter('translate')('VERIFACTU.STATUS_PENDING');\n      }\n\n      var labels = {};\n      labels[VERIFACTU_STATUS.VALID] = 'VERIFACTU.STATUS_SENT';\n      labels[VERIFACTU_STATUS.ACCEPTED_WITH_ERRORS] = 'VERIFACTU.STATUS_SENT';\n      labels[VERIFACTU_STATUS.INVALID] = 'VERIFACTU.STATUS_ERROR';\n\n      return $filter('translate')(labels[status] || 'VERIFACTU.STATUS_UNKNOWN');\n    }\n\n    function getStatusBadgeClass(status) {\n      if (status === null || status === undefined) {\n        return 'md-grey-300-bg';\n      }\n\n      var classes = {};\n      classes[VERIFACTU_STATUS.VALID] = 'md-green-100-bg';\n      classes[VERIFACTU_STATUS.ACCEPTED_WITH_ERRORS] = 'md-green-100-bg';\n      classes[VERIFACTU_STATUS.INVALID] = 'md-red-100-bg';\n\n      return classes[status] || 'md-grey-300-bg';\n    }\n\n    function hasError() {\n      return $scope.selectedInvoice &&\n             $scope.selectedInvoice.status === VERIFACTU_STATUS.INVALID;\n    }\n\n    function isValid() {\n      return $scope.selectedInvoice &&\n             $scope.selectedInvoice.status === VERIFACTU_STATUS.VALID;\n    }\n\n    function isValidWithErrors() {\n      return $scope.selectedInvoice &&\n             $scope.selectedInvoice.status === VERIFACTU_STATUS.ACCEPTED_WITH_ERRORS;\n    }\n\n    function isPending() {\n      return $scope.selectedInvoice &&\n             ($scope.selectedInvoice.status === null || $scope.selectedInvoice.status === undefined);\n    }\n\n    function showErrorDetails() {\n      if ($scope.selectedInvoice && $scope.selectedInvoice.errorMessage) {\n        $mdDialog.show(\n          $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('VERIFACTU.ERROR_DETAILS'))\n            .htmlContent($scope.selectedInvoice.errorMessage)\n            .multiple(true)\n            .ok($filter('translate')('GENERAL.CLOSE'))\n        );\n      }\n    }\n  }\n})();\n\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('ndPaymentMethodsIconController', ndPaymentMethodsIconController)\n    .directive('ndPaymentMethodsIcon', ndPaymentMethodsIcon);\n\n  /** @ngInject */\n  function ndPaymentMethodsIcon() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/sale/views/sales-log/directives/nd-payment-methods-icon.html',\n      scope: {\n        parentObject: '<'\n      },\n      controller: 'ndPaymentMethodsIconController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPaymentMethodsIconController($scope, $filter) {\n    // methods\n    $scope.getNumberOfPaymentMethods = getNumberOfPaymentMethods;\n    $scope.getIconsTooltip = getIconsTooltip;\n    $scope.getIcon = getIcon;\n    $scope.getPaymentMethodName = getPaymentMethodName;\n    $scope.hasIcon = hasIcon;\n    $scope.hasPaymentMethods = hasPaymentMethods;\n    $scope.getCapital = getCapital;\n    $scope.hasCapital = getCapital() !== '';\n\n    function getNumberOfPaymentMethods() {\n      var numberOfPaymentMethods = 0;\n      if ($scope.parentObject && $scope.parentObject.devolution_cards && $scope.parentObject.devolution_cards.length > 0) {\n        numberOfPaymentMethods = $scope.parentObject.devolution_cards.length;\n      }\n\n      if ($scope.parentObject && $scope.parentObject.payment_methods.length > 0) {\n        numberOfPaymentMethods += $scope.parentObject.payment_methods.length;\n      }\n      numberOfPaymentMethods--;\n      return numberOfPaymentMethods > 0 ? '+ ' + numberOfPaymentMethods : '';\n    }\n\n    function getIconsTooltip() {\n      var tooltipVoucher = '';\n      var tooltip = '';\n      if ($scope.parentObject && $scope.parentObject.devolution_cards && $scope.parentObject.devolution_cards.length > 0) {\n        tooltipVoucher = $filter('translate')('SALES.VOUCHER');\n      }\n\n      if ($scope.parentObject && $scope.parentObject.payment_methods.length > 0) {\n        var separator = tooltipVoucher != '' && $scope.parentObject.payment_methods.length == 1 ? ' ' + $filter('translate')('SEPARATORS.AND') + ' ' : ', ';\n        tooltip = tooltipVoucher != '' ? tooltipVoucher + separator + $scope.parentObject.payment_methods[0].payment_method_instance.name : $scope.parentObject.payment_methods[0].payment_method_instance.name;\n        for (var i = 1; i < $scope.parentObject.payment_methods.length; i++) {\n          separator = i == $scope.parentObject.payment_methods.length-1 ? ' ' + $filter('translate')('SEPARATORS.AND') + ' ' : ', ';\n          if ($scope.parentObject.payment_methods.length == 1) {\n            separator = '';\n          }\n          tooltip += separator + $scope.parentObject.payment_methods[i].payment_method_instance.name;\n        }\n        return tooltip != '' ? tooltip : tooltipVoucher;\n      }\n    }\n\n    function getIcon() {\n      if ($scope.parentObject && $scope.parentObject.devolution_cards && $scope.parentObject.devolution_cards.length > 0) {\n        return 'icon-wallet-membership';\n      }\n      if ($scope.parentObject && $scope.parentObject.payment_methods.length > 0) {\n        return $scope.parentObject.payment_methods[0].payment_method_instance.icon;\n      }\n    }\n\n    function getPaymentMethodName() {\n      if ($scope.parentObject && $scope.parentObject.payment_methods.length > 0) {\n        return $scope.parentObject.payment_methods[0].payment_method_instance.name;\n      }\n    }\n\n    function hasPaymentMethods() {\n      return $scope.parentObject && $scope.parentObject.payment_methods.length > 0;\n    }\n\n    function hasIcon() {\n      return hasPaymentMethods() && $scope.parentObject.payment_methods[0].payment_method_instance.icon != null;\n    }\n\n    function getCapital() {\n      if ($scope.parentObject && $scope.parentObject.payment_methods.length > 0) {\n        if ($scope.parentObject.payment_methods[0].payment_method_instance.name != '') {\n          return $scope.parentObject.payment_methods[0].payment_method_instance.name[0].toLocaleUpperCase();\n        }\n      }\n      return '';\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.planning',\n      [\n        // 3rd Party Dependencies\n        'datatables',\n        'flow',\n        'app.services.session',\n        'wipImageZoom',\n        'ui.tree',\n        'dndLists',\n        'mm.iban',\n        'ngSanitize',\n        'ngMaterialDateRangePicker',\n        'ui.grid',\n        'ui.grid.resizeColumns',\n        'ui.grid.pagination',\n        'ui.grid.moveColumns',\n        'ui.grid.selection',\n        'ui.grid.cellNav',\n        'ui.grid.moveColumns',\n        'ui.grid.pinning',\n        'ui.grid.saveState',\n        //'ui.grid.edit',\n        'ui.grid.grouping',\n        //'ui-grid-rowEdit'\n        'ui.grid.exporter'\n      ]\n    )\n    .config(config);\n\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider\n      .state('app.planning', {\n        abstract: true,\n        url: '/planning'\n      })\n\n      /**\n       * REPLENISHMENT\n       */\n\n      .state('app.planning.replenishment', {\n        url: '/replenishment',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/planning/views/replenishment/replenishment.html',\n            controller: 'ReplenishmentController as vm'\n          }\n        },\n        resolve: {\n          TableType: function () {\n            return 1;\n          },\n          ConfigurationData: function (apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get');\n          },\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get', {\n              'serializer': 'OptimizationConfigurationSerializer'\n            });\n          },\n        },\n        bodyClass: 'replenishment',\n        params: {}\n      })\n\n      /**\n       * REORDER\n       */\n\n      .state('app.planning.reorder', {\n        url: '/reorder',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/planning/views/reorder/reorder.html',\n            controller: 'ReorderController as vm'\n          }\n        },\n        resolve: {\n          TableType: function () {\n            return 1;\n          },\n          BrandsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          CategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.categories@get');\n          },\n          SubcategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          ProvidersData: function (apiResolver) {\n            return apiResolver.resolve('inventories.contacts@list', { 'type': '6' });\n          },\n          InventoryConfiguration: function(apiResolver) {\n            return apiResolver.resolve('inventories.inventoryConfiguration@get', {\n              'serializer': 'OptimizationConfigurationSerializer'\n            });\n          },\n          CollectionsData: function (apiResolver) {\n            return apiResolver.resolve('manufactures.collections@list');\n          }\n        },\n        bodyClass: 'reorder',\n        params: {}\n      });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/planning');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.planning')\n    .controller('PlanningValidationErrorsDialogController', PlanningValidationErrorsDialogController);\n\n  /** @ngInject */\n  function PlanningValidationErrorsDialogController($scope, $document, $timeout, api, $mdDialog, HTTP_STATUS, params, $state, ERROR_CODES) {\n    var vm = this;\n    // Data\n    vm.textTitle = params.textTitle;\n    vm.textWarning = params.textWarning;\n    vm.textFooter = params.textFooter;\n    vm.productPlanningConfiguration = params.productPlanningConfiguration;\n\n    vm.error = params.error;\n    vm.type = params.type;\n    vm.message = 'ERRORS.' + vm.error + '_' + vm.type;\n    vm.proposedStock = params.proposedStock;\n    vm.orderedStock = params.orderedStock;\n    vm.minQuantity = params.limitMinQty;\n    vm.percentage = params.percentage;\n    vm.amount = params.amount;\n    vm.productId = params.productId;\n    vm.minStock = params.minStock;\n    vm.newValue = params.newValue;\n    vm.proposedValue = params.proposedValue;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.goTo = goTo;\n\n\n\n    //Functions\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n      function goTo() {\n      vm.currentOption = 'app.inventory.products.product.details';\n      $state.go(vm.currentOption, {id: vm.productId}).then(function() {\n        $timeout(function() {\n          var element = $document[0].getElementById('nd-product-planning-config');\n          if (element) {\n            element.scrollIntoView({ behavior: 'smooth' });\n          }\n        }, 500);\n      });\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('ManufactureProductionProductsController', ManufactureProductionProductsController);\n\n  /** @ngInject */\n  function ManufactureProductionProductsController($scope, $q, $http, $state, $document, $filter, $mdDialog, $stateParams,\n                                               $translate, $mdToast, $compile, api, ProductionOrderData,\n                                               PRODUCTION_ORDER_STATUSES, Session, DTColumnBuilder, HTTP_STATUS,\n                                               PRODUCTION_ORDER_STATUSES_REVERSE) {\n\n    $scope.$parent.vm.currentNavItem = \"products\";\n    $scope.$parent.vm.production = ProductionOrderData;\n\n    // Data\n    var vm = this;\n    vm.production = null;\n    vm.printing = false;\n    vm.saving = false;\n    vm.fetching = false;\n    vm.changed = false;\n    vm.changingStatus = false;\n    vm.lastAddedByBarcodeScan = false;\n    vm.productionOrderProducts = {};\n    vm.total_production_order_product_variants = 0;\n    vm.dtInstance = {};\n    vm.ajax = {\n      dataSrc: \"data\",\n      url: api.urls.manufactures.productionOrderProducts.replace('/:id/', ''),\n      type: 'get',\n      headers: {\n        \"Authorization\": \"Token \" + Session.token\n      },\n      data: function (d) {\n        d.pagination = 'datatable';\n        d.production_order = $stateParams.id;\n      }\n    };\n\n    vm.addingProduct = false;\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      drawCallback: drawCallback,\n      //rowCallback: rowCallback,\n      //initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [1, 2, 3, 4, 5, 10, 25, 50, 100],\n      pageLength: 5,\n      //scrollY     : 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      order: [[0, 'desc']],\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableProductionOrderProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableProductionOrderProductsController'));\n        return state;\n      }\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('updated_at')\n        .withOption('className', 'no-padding')\n        .renderWith(function (data, type, full) {\n          vm.productionOrderProducts[full.id] = full;\n          return '<nd-order-product on-save=\"vm.saveOnBlur\" ' +\n            'order-product=\"vm.productionOrderProducts[' + full.id + ']\" ' +\n            'delete-order-product=\"vm.deleteOrderProduct\" ' +\n            'editable=\"vm.editable\" ' +\n            'changed=\"vm.changed\" ' +\n            'order-type=\"\\'production\\'\" ' +\n            'target-warehouse=\"vm.production.target_warehouse\" ' +\n            'delete-permission=\"\\'manufacture.productions.production.products.delete\\'\" ' +\n            'update-amount-permission=\"\\'manufacture.productions.production.products.update\\'\">' +\n            '</nd-order-product>';\n        })\n    ];\n\n\n    // Methods\n    vm.gotoProductions = gotoProductions;\n    vm.getStatusLabel = getStatusLabel;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.order = order;\n    vm.cancelOrder = cancelOrder;\n    vm.produce = produce;\n    vm.cancelProduce = cancelProduce;\n\n    vm.printOrder = printOrder;\n    vm.printCatalog = printCatalog;\n    vm.saveOnBlur = saveOnBlur;\n    vm.deleteOrderProduct = deleteOrderProduct;\n    vm.searchProductCallback = searchProductCallback;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.importSaleOrdersDialog = importSaleOrdersDialog;\n\n    // Register Events\n    vm.initializeProductionEvent = $scope.$on('initialize-production', function (event, args) {\n      ProductionOrderData = args.production;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeProductionEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      vm.production = angular.copy(ProductionOrderData);\n      vm.editable = vm.production.status == 10;\n\n      // Getting the total order product variants\n      api.manufactures.productionOrders.get({\n        id: vm.production.id,\n        option: 'total-order-product-variants'\n      }, function (response) {\n        vm.total_production_order_product_variants = response.total_order_product_variants;\n      })\n\n    }\n\n    function drawCallback(settings) {\n      if (vm.addingProduct) {\n        vm.addingProduct = false;\n        // When last product was added by scanning a barcode, it doesn't have to be focused\n        if (!vm.lastAddedByBarcodeScan) {\n          setTimeout(function () {\n            if (angular.element('#datatable-table input').length)\n              var element = angular.element(angular.element('#datatable-table input')[0]);\n            element.focus()\n          }, 100)\n        }\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function gotoProductions() {\n      $state.go('app.manufacture.productions');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PRODUCTIONS.' + PRODUCTION_ORDER_STATUSES[status]);\n    }\n\n    function openProductSearchDialog(ev) {\n      if (Session.hasPermission('manufacture.productions.production.products.add')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true\n            }\n          }\n        }).then(function (result) {\n          searchProductCallback(result.product, null, result.products.map(function(p){\n            return p.id;\n          }));\n        });\n      }\n    }\n\n    function searchProductCallback(product, barcode, products) {\n\n      if (Session.hasPermission('manufacture.productions.production.products.add')) {\n        if (angular.isDefined(products) && products && products.length) {\n\n          vm.fetching = true;\n          api.manufactures.productionOrderProducts.save({\n            products: products,\n            production_order: vm.production.id,\n            order_product_variants: []\n          }, function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n\n              vm.dtInstance.DataTable.draw();\n\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n\n          });\n\n        } else if (angular.isDefined(product)) {\n          vm.lastAddedByBarcodeScan = !!barcode;\n          vm.fetching = true;\n\n          api.manufactures.productionOrderProducts.save({\n            product: product ? product.id : null,\n            barcode: barcode ? barcode : null,\n            production_order: vm.production.id,\n            order_product_variants: []\n          }, function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              // Enabling the focus to the first input\n              vm.addingProduct = true;\n              // Cleaning current production order products dictionary\n              vm.productionOrderProducts = {};\n              // Disabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = false;\n              vm.dtInstance.DataTable.settings()[0].ajax = false;\n              // Getting current products table\n              var currentRows = vm.dtInstance.DataTable.rows().data();\n              // Checking if the product already is in the table\n              for (var i = 0; i < currentRows.length; i++) {\n                if (currentRows[i].product.id == response.product.id) {\n                  currentRows.splice(i, 1);\n                }\n              }\n\n              // Adding the new product at the top\n              currentRows.unshift(response);\n              // Cleaning the old table and adding the new products list\n              vm.dtInstance.DataTable.clear();\n              vm.dtInstance.DataTable.rows.add(currentRows);\n              // Drawing the table\n              vm.dtInstance.DataTable.draw();\n              // Enabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = true;\n              vm.dtInstance.DataTable.settings()[0].ajax = vm.ajax;\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n          });\n        }\n      }\n    }\n\n    function order() {\n      changeStatus('order');\n    }\n\n    function cancelOrder() {\n      changeStatus('cancelorder');\n    }\n\n    function produce() {\n      changeStatus('produce');\n    }\n\n    function cancelProduce() {\n      changeStatus('cancelproduce');\n    }\n\n\n\n    function changeStatus(option) {\n\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n\n      api.manufactures.productionOrderStatus.update(\n        {\n          id: vm.production.id,\n          option: option\n        },\n        function (response) {\n          if (response.success) {\n\n            vm.production.status = response.production_order.status;\n            $scope.$parent.vm.production.status = vm.production.status;\n\n            if (option == 'order') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_ORDERED'))\n                  .position('top right'));\n                  vm.dtInstance.DataTable.draw();\n            }\n\n            if (option == 'produce') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_PRODUCED'))\n                  .position('top right'));\n              vm.dtInstance.DataTable.draw();\n            }\n\n            if (option == 'cancel') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_CANCELLED'))\n                  .position('top right'));\n              vm.dtInstance.DataTable.draw();\n            }\n\n            $scope.$broadcast('initialize-production', {production: vm.production});\n\n          } else {\n\n          }\n\n          vm.changingStatus = false;\n        }\n      );\n    }\n\n    function saveOnBlur(orderProductVariant) {\n\n      if (orderProductVariant.amount == 0 && angular.isUndefined(orderProductVariant.id)) {\n        return\n      }\n\n      var result = $q.defer();\n\n      var productionOrderProduct = {};\n      if (angular.isDefined(orderProductVariant.id) && orderProductVariant.id != 0)\n        productionOrderProduct.id = orderProductVariant.id;\n      productionOrderProduct.production_order_product = orderProductVariant.orderProduct.id;\n      productionOrderProduct.product_variant = orderProductVariant.product_variant;\n      productionOrderProduct.amount = orderProductVariant.amount;\n\n      vm.saving = true;\n\n      if (angular.isUndefined(productionOrderProduct.id)) {\n\n        api.manufactures.productionOrderProductVariants.save(productionOrderProduct, function (response) {\n          vm.saving = false;\n          vm.changed = false;\n\n          if (response.id) {\n            orderProductVariant.id = response.id;\n            orderProductVariant.production_order_product = response.production_order_product;\n            orderProductVariant.amount = response.amount;\n            // We need to add the order_product_variant at the table, just in case we need to redraw without to reload the data.\n            orderProductVariant.orderProduct.order_product_variants.push(orderProductVariant);\n\n            // Getting the total order product variants\n            api.manufactures.productionOrders.get({\n              id: vm.production.id,\n              option: 'total-order-product-variants'\n            }, function (response) {\n              vm.total_production_order_product_variants = response.total_order_product_variants;\n            })\n\n          } else {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('PRODUCTION.ERROR_SAVING_DRAFT'))\n                .position('top right'));\n          }\n          result.resolve();\n        });\n\n      } else {\n\n        api.manufactures.productionOrderProductVariants.update(productionOrderProduct, function (response) {\n          vm.saving = false;\n          vm.changed = false;\n\n          if (response.id) {\n            orderProductVariant.amount = response.amount;\n\n            // Getting the total order product variants\n            api.manufactures.productionOrders.get({\n              id: vm.production.id,\n              option: 'total-order-product-variants'\n            }, function (response) {\n              vm.total_production_order_product_variants = response.total_order_product_variants;\n            })\n\n          } else {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('PRODUCTION.ERROR_SAVING_DRAFT'))\n                .position('top right'));\n          }\n          result.resolve();\n        });\n\n      }\n\n      return result.promise;\n    }\n\n    function deleteOrderProduct(orderProduct) {\n\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n      vm.changed = true;\n      api.manufactures.productionOrderProducts.delete({id: orderProduct.id}, function (response) {\n\n        vm.saving = false;\n        vm.changed = false;\n\n        vm.dtInstance.DataTable.draw();\n\n      })\n    }\n\n    function printOrder(hidePrices) {\n      var url = '';\n      if (hidePrices) {\n        url = api.urls.manufactures.productionOrdersPrintHidePrices.replace(':id', vm.production.id);\n      } else {\n        url = api.urls.manufactures.productionOrdersPrint.replace(':id', vm.production.id);\n      }\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function base64ToArrayBuffer(data) {\n      var binaryString = window.atob(data);\n      var binaryLen = binaryString.length;\n      var bytes = new Uint8Array(binaryLen);\n      for (var i = 0; i < binaryLen; i++) {\n        var ascii = binaryString.charCodeAt(i);\n        bytes[i] = ascii;\n      }\n      return bytes;\n    }\n\n    function printCatalog() {\n      var url = api.urls.manufactures.productionOrdersPrintCatalog.replace(':id', vm.production.id);\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (vm.production.status == PRODUCTION_ORDER_STATUSES_REVERSE.PRODUCTION_ORDER_STATUS_DRAFT) {\n        searchProductCallback(null, barcode, null);\n      }\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.manufactures.productionOrders.get({\n        id: vm.production.id,\n        option: 'labels'\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.manufacture.labels-generator', {\n            productionOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function importSaleOrdersDialog(ev) {\n      if (Session.hasPermission('inventory.purchases.purchase.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportSaleOrdersDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/import-sale-orders/import-sale-orders.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n\n          }\n        }).then(function (response) {\n\n          if (vm.changingStatus)\n              return;\n\n          vm.changingStatus = true;\n\n          api.manufactures.productionOrders.save({\n            id: vm.production.id,\n            order_ids:response,\n            option: 'fill-from-orders'\n          }, function(response, callback, status){\n\n            // Getting the total order product variants\n            api.manufactures.productionOrders.get({\n              id: vm.production.id,\n              option: 'total-order-product-variants'\n            }, function (response) {\n              vm.total_production_order_product_variants = response.total_order_product_variants;\n            })\n\n            vm.changingStatus = false;\n            vm.dtInstance.DataTable.draw();\n\n          });\n\n        }, function () {\n          // Cancel button clicked\n        });\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('ManufactureProductionMaterialsController', ManufactureProductionMaterialsController);\n\n  /** @ngInject */\n  function ManufactureProductionMaterialsController($scope, $q, $http, $state, $document, $filter, $mdDialog, $stateParams,\n                                               $translate, $mdToast, $compile, api, ProductionOrderData,\n                                               PRODUCTION_ORDER_STATUSES, Session, DTColumnBuilder, HTTP_STATUS,\n                                               PRODUCTION_ORDER_STATUSES_REVERSE) {\n\n    $scope.$parent.vm.currentNavItem = \"materials\";\n    $scope.$parent.vm.production = ProductionOrderData;\n\n    // Data\n    var vm = this;\n    vm.production = null;\n    vm.calculatingMaterials = false;\n\n\n    vm.printing = false;\n    vm.saving = false;\n    vm.fetching = false;\n    vm.changed = false;\n    vm.changingStatus = false;\n    vm.lastAddedByBarcodeScan = false;\n    vm.productionOrderProducts = {};\n    vm.total_production_order_product_variants = 0;\n    vm.dtInstance = {};\n    vm.ajax = {\n      dataSrc: \"data\",\n      url: api.urls.manufactures.productionOrderProducts.replace('/:id/', ''),\n      type: 'get',\n      headers: {\n        \"Authorization\": \"Token \" + Session.token\n      },\n      data: function (d) {\n        d.pagination = 'datatable';\n        d.production_order = $stateParams.id;\n        d.is_raw_material = true;\n      }\n    };\n\n    vm.addingProduct = false;\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      drawCallback: drawCallback,\n      //rowCallback: rowCallback,\n      //initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [1, 2, 3, 4, 5, 10, 25, 50, 100],\n      pageLength: 5,\n      //scrollY     : 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      order: [[0, 'desc']],\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableProductionOrderProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableProductionOrderProductsController'));\n        return state;\n      }\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('updated_at')\n        .withOption('className', 'no-padding')\n        .renderWith(function (data, type, full) {\n          vm.productionOrderProducts[full.id] = full;\n          return '<nd-order-product on-save=\"vm.saveOnBlur\" ' +\n            'order-product=\"vm.productionOrderProducts[' + full.id + ']\" ' +\n            'delete-order-product=\"vm.deleteOrderProduct\" ' +\n            'editable=\"vm.editable\" ' +\n            'changed=\"vm.changed\" ' +\n            'order-type=\"\\'production\\'\" ' +\n            'source-warehouse=\"vm.production.source_warehouse\" ' +\n            'delete-permission=\"\\'manufacture.productions.production.products.delete_product\\'\" ' +\n            'update-amount-permission=\"\\'manufacture.productions.production.products.update_product_amount\\'\">' +\n            '</nd-order-product>';\n        })\n    ];\n\n\n    // Methods\n    vm.calculateMaterials = calculateMaterials;\n    vm.getStatusLabel = getStatusLabel;\n    vm.order = order;\n    vm.partiallyReceive = partiallyReceive;\n    vm.receive = receive;\n    vm.cancel = cancel;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.printOrder = printOrder;\n    vm.printCatalog = printCatalog;\n    vm.saveOnBlur = saveOnBlur;\n    vm.deleteOrderProduct = deleteOrderProduct;\n    vm.searchProductCallback = searchProductCallback;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n\n\n    // Register Events\n    vm.initializeProductionEvent = $scope.$on('initialize-production', function (event, args) {\n      ProductionOrderData = args.production;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeProductionEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      vm.production = angular.copy(ProductionOrderData);\n      vm.editable = vm.production.status == 1;\n\n      // Getting the total order product variants\n      api.manufactures.productionOrders.get({\n        id: vm.production.id,\n        option: 'total-order-product-variants',\n        is_raw_material: true\n      }, function (response) {\n        vm.total_production_order_product_variants = response.total_order_product_variants;\n      })\n\n    }\n\n    function calculateMaterials(){\n      if(vm.calculatingMaterials){\n        return;\n      }\n      vm.calculatingMaterials = true;\n\n      api.manufactures.productionOrders.save({\n        id: vm.production.id,\n        option: 'calculate-materials'\n      }, function (response) {\n        vm.dtInstance.DataTable.draw();\n        vm.calculatingMaterials = false;\n      })\n\n    }\n\n    function drawCallback(settings) {\n      if (vm.addingProduct) {\n        vm.addingProduct = false;\n        // When last product was added by scanning a barcode, it doesn't have to be focused\n        if (!vm.lastAddedByBarcodeScan) {\n          setTimeout(function () {\n            if (angular.element('#datatable-table input').length)\n              var element = angular.element(angular.element('#datatable-table input')[0]);\n            element.focus()\n          }, 100)\n        }\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PRODUCTIONS.' + PRODUCTION_ORDER_STATUSES[status]);\n    }\n\n    function openProductSearchDialog(ev) {\n      if (Session.hasPermission('manufacture.productions.production.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/manufacture/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true\n            }\n          }\n        }).then(function (result) {\n          searchProductCallback(result.product, null, result.products.map(function(p){\n            return p.id;\n          }));\n        });\n      }\n    }\n\n    function searchProductCallback(product, barcode, products) {\n\n      if (Session.hasPermission('manufacture.productions.production.products.add_product')) {\n        if (angular.isDefined(products) && products && products.length) {\n\n          vm.fetching = true;\n          api.manufactures.productionOrderProducts.save({\n            products: products,\n            production_order: vm.production.id,\n            order_product_variants: []\n          }, function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n\n              vm.dtInstance.DataTable.draw();\n\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n\n          });\n\n        } else if (angular.isDefined(product)) {\n          vm.lastAddedByBarcodeScan = !!barcode;\n          vm.fetching = true;\n\n          api.manufactures.productionOrderProducts.save({\n            product: product ? product.id : null,\n            barcode: barcode ? barcode : null,\n            production_order: vm.production.id,\n            order_product_variants: []\n          }, function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              // Enabling the focus to the first input\n              vm.addingProduct = true;\n              // Cleaning current production order products dictionary\n              vm.productionOrderProducts = {};\n              // Disabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = false;\n              vm.dtInstance.DataTable.settings()[0].ajax = false;\n              // Getting current products table\n              var currentRows = vm.dtInstance.DataTable.rows().data();\n              // Checking if the product already is in the table\n              for (var i = 0; i < currentRows.length; i++) {\n                if (currentRows[i].product.id == response.product.id) {\n                  currentRows.splice(i, 1);\n                }\n              }\n\n              // Adding the new product at the top\n              currentRows.unshift(response);\n              // Cleaning the old table and adding the new products list\n              vm.dtInstance.DataTable.clear();\n              vm.dtInstance.DataTable.rows.add(currentRows);\n              // Drawing the table\n              vm.dtInstance.DataTable.draw();\n              // Enabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = true;\n              vm.dtInstance.DataTable.settings()[0].ajax = vm.ajax;\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n          });\n        }\n      }\n    }\n\n    function order() {\n      changeStatus('order');\n    }\n\n    function partiallyReceive() {\n      changeStatus('partiallyreceive');\n    }\n\n    function receive() {\n      changeStatus('receive');\n    }\n\n    function cancel() {\n      changeStatus('cancel');\n    }\n\n    function changeStatus(option) {\n\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n\n      api.manufactures.productionOrderStatus.update(\n        {\n          id: vm.production.id,\n          option: option\n        },\n        function (response) {\n          if (response.success) {\n\n            vm.production.status = response.production_order.status;\n            $scope.$parent.vm.production.status = vm.production.status;\n\n            if (option == 'order') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_ORDERED'))\n                  .position('top right'));\n              vm.dtInstance.DataTable.draw();\n            }\n\n            if (option == 'receive') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_RECEIVED'))\n                  .position('top right'));\n              $state.go('app.manufacture.productions.production.delivery', {id: vm.production.id});\n            }\n\n            if (option == 'partiallyreceive') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_RECEIVED'))\n                  .position('top right'));\n              $state.go('app.manufacture.productions.production.deliveries', {id: vm.production.id});\n            }\n\n            if (option == 'cancel') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_CANCELLED'))\n                  .position('top right'));\n              vm.dtInstance.DataTable.draw();\n            }\n\n            $scope.$broadcast('initialize-production', {production: vm.production});\n\n          } else {\n\n          }\n\n          vm.changingStatus = false;\n        }\n      );\n    }\n\n    function saveOnBlur(orderProductVariant) {\n\n      if (orderProductVariant.amount == 0 && angular.isUndefined(orderProductVariant.id)) {\n        return\n      }\n\n      var result = $q.defer();\n\n      var productionOrderProduct = {};\n      if (angular.isDefined(orderProductVariant.id) && orderProductVariant.id != 0)\n        productionOrderProduct.id = orderProductVariant.id;\n      productionOrderProduct.production_order_product = orderProductVariant.orderProduct.id;\n      productionOrderProduct.product_variant = orderProductVariant.product_variant;\n      productionOrderProduct.amount = orderProductVariant.amount;\n\n      vm.saving = true;\n\n      if (angular.isUndefined(productionOrderProduct.id)) {\n\n        api.manufactures.productionOrderProductVariants.save(productionOrderProduct, function (response) {\n          vm.saving = false;\n          vm.changed = false;\n\n          if (response.id) {\n            orderProductVariant.id = response.id;\n            orderProductVariant.production_order_product = response.production_order_product;\n            orderProductVariant.amount = response.amount;\n            // We need to add the order_product_variant at the table, just in case we need to redraw without to reload the data.\n            orderProductVariant.orderProduct.order_product_variants.push(orderProductVariant);\n\n            // Getting the total order product variants\n            api.manufactures.productionOrders.get({\n              id: vm.production.id,\n              option: 'total-order-product-variants'\n            }, function (response) {\n              vm.total_production_order_product_variants = response.total_order_product_variants;\n            })\n\n          } else {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('PRODUCTION.ERROR_SAVING_DRAFT'))\n                .position('top right'));\n          }\n          result.resolve();\n        });\n\n      } else {\n\n        api.manufactures.productionOrderProductVariants.update(productionOrderProduct, function (response) {\n          vm.saving = false;\n          vm.changed = false;\n\n          if (response.id) {\n            orderProductVariant.amount = response.amount;\n\n            // Getting the total order product variants\n            api.manufactures.productionOrders.get({\n              id: vm.production.id,\n              option: 'total-order-product-variants'\n            }, function (response) {\n              vm.total_production_order_product_variants = response.total_order_product_variants;\n            })\n\n          } else {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('PRODUCTION.ERROR_SAVING_DRAFT'))\n                .position('top right'));\n          }\n          result.resolve();\n        });\n\n      }\n\n      return result.promise;\n    }\n\n    function deleteOrderProduct(orderProduct) {\n\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n      vm.changed = true;\n      api.manufactures.productionOrderProducts.delete({id: orderProduct.id}, function (response) {\n\n        vm.saving = false;\n        vm.changed = false;\n\n        vm.dtInstance.DataTable.draw();\n\n      })\n    }\n\n    function printOrder(hidePrices) {\n      var url = '';\n      if (hidePrices) {\n        url = api.urls.manufactures.productionOrdersPrintHidePrices.replace(':id', vm.production.id);\n      } else {\n        url = api.urls.manufactures.productionOrdersPrint.replace(':id', vm.production.id);\n      }\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function base64ToArrayBuffer(data) {\n      var binaryString = window.atob(data);\n      var binaryLen = binaryString.length;\n      var bytes = new Uint8Array(binaryLen);\n      for (var i = 0; i < binaryLen; i++) {\n        var ascii = binaryString.charCodeAt(i);\n        bytes[i] = ascii;\n      }\n      return bytes;\n    }\n\n    function printCatalog() {\n      var url = api.urls.manufactures.productionOrdersPrintCatalog.replace(':id', vm.production.id);\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (vm.production.status == PRODUCTION_ORDER_STATUSES_REVERSE.PRODUCTION_ORDER_STATUS_DRAFT) {\n        searchProductCallback(null, barcode, null);\n      }\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.manufactures.productionOrders.get({\n        id: vm.production.id,\n        option: 'labels'\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.manufacture.labels-generator', {\n            productionOrder: results\n          });\n        } else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('ManufactureProductionDetailsController', ManufactureProductionDetailsController);\n\n  /** @ngInject */\n  function ManufactureProductionDetailsController($scope, $state, $filter, $window, $mdToast, $document, api, InventoryConfigurationData,\n                                              WarehousesData, ProductionData, SeasonsData, SerialNumberTypesData,\n                                              PRODUCTION_ORDER_STATUSES, PRODUCTION_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, Session, SERIAL_NUMBER_TYPES) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.$parent.vm.production = ProductionData;\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.production = null;\n    vm.isNewProduction = false;\n    vm.taToolbar = [['undo', 'redo']];\n    vm.minDate = new Date();\n    vm.warehouses = WarehousesData.results;\n    vm.seasons = SeasonsData.results;\n    vm.searchSelectHeader = new Array(3);\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n\n    // Methods\n    vm.gotoProductions = gotoProductions;\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.create = create;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.onSelectorOpen = onSelectorOpen;\n\n\n    // Register Events\n    vm.initializeProductionEvent = $scope.$on('initialize-production', function (event, args) {\n      ProductionData = args.production;\n      initialize();\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeProductionEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n\n      if (ProductionData == null) {\n        var defaultWarehouse = vm.warehouses.find(function (warehouse) {\n          return warehouse.is_principal;\n        }) || {};\n        vm.isNewProduction = true;\n        vm.production = {\n          tags: [],\n          start_date: new Date(),\n          cancel_date: new Date(),\n          serial_number_type: InventoryConfigurationData ? InventoryConfigurationData.results[0].production_order_default_serial_number_type : null,\n          target_warehouse: defaultWarehouse,\n          source_warehouse: defaultWarehouse\n        };\n      } else {\n        vm.production = angular.copy(ProductionData);\n        /*if (vm.production.start_date){\n          vm.production.start_date = new Date(vm.production.start_date);\n        }\n        if (vm.production.cancel_date){\n          vm.production.cancel_date = new Date(vm.production.cancel_date);\n        }*/\n\n      }\n    }\n\n    /**\n     * Go to products page\n     */\n    function gotoProductions() {\n      $state.go('app.manufacture.productions');\n    }\n\n    function save() {\n      if (Session.hasPermissions('manufacture.productions.production.details.update')) {\n        var obj = angular.copy(vm.production);\n        if (obj.start_date)\n          obj.start_date = $filter('date')(obj.start_date, 'yyyy-MM-dd');\n        if (obj.cancel_date)\n          obj.cancel_date = $filter('date')(obj.cancel_date, 'yyyy-MM-dd');\n\n        api.manufactures.productionOrders.update(\n          obj,\n          function (result) {\n            if (result.id) {\n              ProductionData = result;\n              initialize();\n              $scope.detailsForm.$setPristine();\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PRODUCTION.PRODUCTION_UPDATED'))\n                  .position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function cancel() {\n      if (vm.isNewProduction) {\n        $window.history.back();\n      } else {\n        initialize();\n        $scope.detailsForm.$setPristine();\n      }\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PRODUCTIONS.' + PRODUCTION_ORDER_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return PRODUCTION_ORDER_STATUS_COLORS[status];\n    }\n\n    /**\n     * Creates the new production object\n     */\n    function create() {\n\n      if (Session.hasPermissions('manufacture.productions.create')) {\n        var obj = angular.copy(vm.production);\n        if (obj.start_date){\n          obj.start_date = $filter('date')(obj.start_date, 'yyyy-MM-dd');\n        }\n        if (obj.cancel_date){\n          obj.cancel_date = $filter('date')(obj.cancel_date, 'yyyy-MM-dd');\n        }\n\n        obj.season = vm.production.season.id;\n        obj.target_warehouse = vm.production.target_warehouse.id;\n        obj.source_warehouse = vm.production.source_warehouse.id;\n        api.manufactures.productionOrders.save(\n          obj,\n          function (result) {\n            if (result.id)\n              $state.go('app.manufacture.productions.production.products', {id: result.id});\n          }\n        );\n      }\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('WarehouseDialogController', WarehouseDialogController);\n\n  /** @ngInject */\n  function WarehouseDialogController(\n    $scope,\n    $mdDialog,\n    COUNTIRES_ISO_APLPHA_2_EN,\n    pricingTiers,\n    Session,\n    parameters,\n    Warehouse,\n    PLAN_LIMIT_CODES,\n    WAREHOUSE_TYPES\n  ) {\n\n    var vm = this;\n\n    // Cons\n    vm.WAREHOUSE_TYPES = WAREHOUSE_TYPES;\n\n    // Data\n    vm.warehouse = new Warehouse({\n      country: Session.company.country,\n      type: WAREHOUSE_TYPES.WAREHOUSE\n    });\n    vm.countries = COUNTIRES_ISO_APLPHA_2_EN;\n    vm.pricingTiers = pricingTiers;\n    vm.contractedPlanLimits = parameters.contractedPlanLimits;\n    vm.contractedPlanLimit = null;\n\n    // Methods\n    vm.closeDialog = closeDialog;\n    vm.saveWarehouse = saveWarehouse;\n    vm.setContractedPlanLimit = setContractedPlanLimit;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      setContractedPlanLimit();\n    }\n\n    function setContractedPlanLimit() {\n      var code = PLAN_LIMIT_CODES.WAREHOUSE_LIMIT;\n      if (vm.warehouse.type === WAREHOUSE_TYPES.STORE) {\n        code = PLAN_LIMIT_CODES.RETAIL_STORE_LIMIT;\n      } else if (vm.warehouse.type === WAREHOUSE_TYPES.WAREHOUSE) {\n        code = PLAN_LIMIT_CODES.WAREHOUSE_LIMIT;\n      }\n\n      vm.contractedPlanLimit = vm.contractedPlanLimits.find(function(cpl) {\n        return cpl.code === code;\n      });\n    }\n\n    function closeDialog() {\n      $mdDialog.cancel();\n    }\n\n    function saveWarehouse() {\n      $mdDialog.hide(vm.warehouse);\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryWarehouseStockController', InventoryWarehouseStockController);\n\n  /** @ngInject */\n  function InventoryWarehouseStockController($scope, WarehouseData, WarehouseStocksData)\n  {\n\n    $scope.$parent.vm.currentNavItem = \"stock\";\n    $scope.$parent.vm.warehouse = WarehouseData;\n\n    // Data\n    var vm = this;\n    vm.warehouse = WarehouseData;\n    vm.stocks = WarehouseStocksData;\n    vm.subcategoriesByCategory = {};\n\n    vm.categoriesWidget = {\n      title       : \"Stock by categories\",\n      mainChart   : {\n          config : {\n              refreshDataOnly: true,\n              deepWatchData  : true\n          },\n          options: {\n              chart: {\n                  type        : 'pieChart',\n                  color       : ['#f44336', '#9c27b0', '#03a9f4', '#e91e63'],\n                  height      : 400,\n                  margin      : {\n                      top   : 0,\n                      right : 0,\n                      bottom: 0,\n                      left  : 0\n                  },\n                  donut       : true,\n                  clipEdge    : true,\n                  cornerRadius: 0,\n                  labelType   : 'percent',\n                  padAngle    : 0.02,\n                  x           : function (d)\n                  {\n                      return d.label;\n                  },\n                  y           : function (d)\n                  {\n                      return d.value;\n                  },\n                  tooltip     : {\n                      gravity: 's',\n                      classes: 'gravity-s'\n                  },\n                  valueFormat: function(d){\n                    return d3.format(',.0f')(d);\n                  },\n              }\n          },\n          data   : []\n      }\n    };\n\n    vm.subcategoriesWidget = {\n      title       : \"Stock by subcategories\",\n      mainChart   : {\n          options: {\n            chart: {\n                type              : 'discreteBarChart',\n                height            : 500,\n                margin : {\n                    top: 20,\n                    right: 20,\n                    bottom: 150,\n                    left: 80\n                },\n                x                 : function (d){\n                    return d.label;\n                },\n                y                 : function (d){\n                    return d.value;\n                },\n                valueFormat: function(d){\n                    return d3.format(',.0f')(d);\n                },\n                showControls      : true,\n                showValues        : true,\n                transitionDuration: 500,\n                xAxis             : {\n                    showMaxMin: false,\n                    rotateLabels: -45,\n                    orient: 'bottom',\n                },\n                yAxis             : {\n                    axisLabel : 'Values',\n                    tickFormat: function (d)\n                    {\n                        return d3.format(',.0f')(d);\n                    }\n                }\n            }\n          },\n          data   : []\n      }\n    };\n\n    vm.brandsWidget = {\n      title       : \"Stock by brands\",\n      mainChart   : {\n          config : {\n              refreshDataOnly: true,\n              deepWatchData  : true\n          },\n          options: {\n              chart: {\n                  type        : 'pieChart',\n                  color       : ['#f44336', '#9c27b0', '#03a9f4', '#e91e63'],\n                  height      : 400,\n                  margin      : {\n                      top   : 0,\n                      right : 0,\n                      bottom: 0,\n                      left  : 0\n                  },\n                  donut       : true,\n                  clipEdge    : true,\n                  cornerRadius: 0,\n                  labelType   : 'percent',\n                  padAngle    : 0.02,\n                  x           : function (d)\n                  {\n                      return d.label;\n                  },\n                  y           : function (d)\n                  {\n                      return d.value;\n                  },\n                  tooltip     : {\n                      gravity: 's',\n                      classes: 'gravity-s'\n                  }\n              }\n          },\n          data   : []\n      }\n    };\n\n    vm.seasonsWidget = {\n      title       : \"Stock by seasons\",\n      mainChart   : {\n          config : {\n              refreshDataOnly: true,\n              deepWatchData  : true\n          },\n          options: {\n              chart: {\n                  type        : 'pieChart',\n                  color       : ['#f44336', '#9c27b0', '#03a9f4', '#e91e63'],\n                  height      : 400,\n                  margin      : {\n                      top   : 0,\n                      right : 0,\n                      bottom: 0,\n                      left  : 0\n                  },\n                  donut       : true,\n                  clipEdge    : true,\n                  cornerRadius: 0,\n                  labelType   : 'percent',\n                  padAngle    : 0.02,\n                  x           : function (d) {\n                      return d.label;\n                  },\n                  y           : function (d) {\n                      return d.value;\n                  },\n                  tooltip     : {\n                      gravity: 's',\n                      classes: 'gravity-s'\n                  },\n                  valueFormat: function(d){\n                    return d3.format(',.0f')(d);\n                  },\n              }\n          },\n          data   : []\n      }\n    };\n\n    // Methods\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize(){\n\n      vm.categoriesWidget.mainChart.data = [];\n      vm.stocks.total_by_category.map(function(total_by_category){\n        vm.categoriesWidget.mainChart.data.push({\n          label: total_by_category.product_variant__product__category__name,\n          value: total_by_category.stock__sum\n        });\n      });\n\n      vm.subcategoriesWidget.mainChart.data = [{\n        key: '',\n        values: []\n      }]\n\n      vm.stocks.total_by_subcategory.map(function(total_by_subcategory){\n        if(total_by_subcategory.stock__sum > 0){\n          vm.subcategoriesWidget.mainChart.data[0].values.push({\n            label: total_by_subcategory.product_variant__product__category__name + ' - ' + (total_by_subcategory.product_variant__product__subcategory__name ? total_by_subcategory.product_variant__product__subcategory__name : 'N/A'),\n            value: total_by_subcategory.stock__sum\n          })\n        }\n      });\n\n      vm.subcategoriesWidget.mainChart.data[0].values.sort(function(a, b){\n        return b.value - a.value;\n      });\n\n      vm.brandsWidget.mainChart.data = [{key:'', values:[]}];\n      vm.stocks.total_by_brand.map(function(total_by_brand){\n        if(total_by_brand.stock__sum>0){\n          vm.brandsWidget.mainChart.data[0].values.push({\n            label: total_by_brand.product_variant__product__brand__name,\n            value: total_by_brand.stock__sum\n          });\n        }\n      });\n\n      vm.brandsWidget.mainChart.data[0].values.sort(function(a, b){\n        return b.value - a.value;\n      });\n\n      vm.seasonsWidget.mainChart.data = [];\n      vm.stocks.total_by_season.map(function(total_by_season){\n        vm.seasonsWidget.mainChart.data.push({\n          label: total_by_season.product_variant__product__season__name,\n          value: total_by_season.stock__sum\n        });\n      });\n\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('WarehouseStockLocationsController', WarehouseStockLocationsController);\n\n  /** @ngInject */\n  function WarehouseStockLocationsController($scope, $rootScope, $mdToast, $compile, $document, $filter, $mdDialog, api,\n                                             DTColumnBuilder, Session, HTTP_STATUS, $sce, UiGridService, $timeout, BarcodeService) {\n\n    $scope.$parent.vm.currentNavItem = 'stock-locations';\n    $scope.Session = Session;\n\n    // Data\n    var vm = this;\n    vm.warehouse = $scope.$parent.vm.warehouse;\n    vm.currentNavItem = 'products';\n    vm.searchText = '';\n    vm.searchTextLocation = '';\n    vm.searchTextProduct = '';\n\n    vm.statusByStockLocation = {\n      state: {}, ordering: '', search: vm.searchTextLocation, filtersParams: {}, filters: {\n        show_only_available: false,\n        limit: true,\n        type: null,\n        statuses: [],\n        targetWarehouses: [],\n        sourceWarehouses: []\n      }, nonStorableFilters: {\n        warehouse_id: vm.warehouse.id,\n      },\n      pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.statusByProducts = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        show_only_available: false,\n        type: null,\n        statuses: [],\n        targetWarehouses: [],\n        sourceWarehouses: []\n      }, redirectParams: {\n\n      },\n      nonStorableFilters: {\n        warehouse_id: vm.warehouse.id,\n      },\n      pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // Methods\n    vm.getStatus = getStatus;\n    vm.reloadStockLocations = reloadStockLocations;\n\n    vm.newStockLocationWatcher = $scope.$on('WarehouseController::newStockLocation', function (event, stockLocation) {\n      stockLocationDialog(stockLocation);\n    });\n    $scope.$on('$destroy', function () {\n      vm.newStockLocationWatcher();\n    });\n\n    function getStatus() {\n      if (vm.currentNavItem === 'products') {\n        return vm.statusByProducts;\n      } else {\n        return vm.statusByStockLocation;\n      }\n    }\n\n    function isProductsTab() {\n      return vm.currentNavItem === 'products';\n    }\n\n    vm.barcodeListenerCallbackId = BarcodeService.subscribeBarcode(barcodeListenerCallback);\n    $scope.$on('$destroy', function () {\n      BarcodeService.unsubscribeBarcode(vm.barcodeListenerCallbackId);\n    });\n\n    function barcodeListenerCallback(barcode) {\n      if (isProductsTab()) {\n        vm.searchTextProduct = barcode;\n      } else {\n        vm.searchTextLocation = barcode;\n      }\n      vm.reloadStockLocations();\n    }\n\n    function reloadStockLocations() {\n      if (vm.reloadStockLocationsTimeout) {\n        $timeout.cancel(vm.reloadStockLocationsTimeout);\n      }\n      vm.reloadStockLocationsTimeout = $timeout(function () {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 500);\n    }\n\n    function stockLocationDialog(stockLocation) {\n      $mdDialog.show({\n        controller: 'StockLocationDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/stock-location-dialog/stock-location-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          stockLocation: stockLocation,\n          warehouseId: vm.warehouse.id\n        }\n      }).then(function (result) {\n        if (!stockLocation || !result) {\n          $rootScope.$broadcast('ndGrid::filtersChanged');\n        }\n      }, function () {\n      });\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('WarehouseRegistersController', WarehouseRegistersController);\n\n  /** @ngInject */\n  function WarehouseRegistersController($scope, $mdToast, $compile, $document, $filter, $mdDialog, WarehouseData, api,\n                                        DTColumnBuilder, Session, HTTP_STATUS, ContractedPlanLimit, PLAN_LIMIT_CODES) {\n\n    $scope.$parent.vm.currentNavItem = \"registers\";\n    $scope.$parent.vm.warehouse = WarehouseData;\n    $scope.Session = Session;\n\n    // Data\n    var vm = this;\n    vm.warehouse = angular.copy(WarehouseData);\n    vm.hasSubscription = Session.hasSubscription;\n    vm.contractedPlanLimits = [];\n    vm.registerLimit = null;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.sales.registers.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.warehouse = vm.warehouse.id;\n        }\n      },\n      order: [[0, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: false,\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('REGISTERS.CODE')),\n      DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('REGISTERS.CREATED_AT')).renderWith(function (data, type, full) {\n        return $filter('date')(data);\n      }),\n      DTColumnBuilder.newColumn('is_closed').withTitle($filter('translate')('REGISTERS.STATUS')).renderWith(function (data, type, full) {\n        if (data) {\n          return $filter('translate')('REGISTERS.CLOSED');\n        } else {\n          return $filter('translate')('REGISTERS.OPEN');\n        }\n\n      }),\n      DTColumnBuilder.newColumn('current_activity').withTitle($filter('translate')('REGISTERS.CURRENT_ACTIVITY')).renderWith(function (data, type, full) {\n        if (data && data.id) {\n          return '<a ui-sref=\"app.sale.register_closure({id:' + data.id + '})\">' + $filter('date')(data.opened_at) + '</a>'\n        } else {\n          return '';\n        }\n      }),\n      DTColumnBuilder.newColumn('serial_number_type').withTitle($filter('translate')('REGISTERS.SERIAL_NUMBERS')).renderWith(function (data, type, full) {\n        var salesSerial = $filter('serialNumberType')(full.serial_number_type_instance);\n        var devolutionSerial = $filter('serialNumberType')(full.pos_order_devolution_serial_number_type_instance);\n          if (devolutionSerial && devolutionSerial.trim() !== '') {\n            return '<em>' + salesSerial + ' / ' + devolutionSerial + '</em>';\n          } else {\n            return '<em>' + salesSerial + '</em>';\n          }\n      }),\n      DTColumnBuilder.newColumn('printer_name').withTitle($filter('translate')('REGISTERS.PRINTER'))\n    ];\n\n    // Methods\n    vm.newRegister = newRegister;\n    vm.allowRegisterCreation = allowRegisterCreation;\n    vm.blockRegisterCreation = blockRegisterCreation;\n\n    // Functions\n\n    function sizeNumber(value, length) {\n      if (value === undefined || value === '' || value === null)\n        return '';\n\n      if (value.toString().length >= length)\n        return value;\n\n      var prefix = \"\";\n      for (var i = 0; i < length - value.toString().length; ++i)\n        prefix += \"0\";\n\n      return prefix + value.toString();\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        if (Session.hasPermission('inventory.warehouses.warehouse.registers.edit')) {\n          $mdDialog.show({\n            controller: 'NewRegisterDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/sale/views/registers/dialogs/new-register/new-register-dialog.html',\n            clickOutsideToClose: true,\n            locals: {\n              WarehouseData: vm.warehouse,\n              RegisterData: aData,\n              contractedPlanLimit: vm.registerLimit\n            },\n            resolve: {\n              SerialNumberTypesData: function (apiResolver) {\n                return apiResolver.resolve('inventories.serialNumberTypes@list', {fiscal_address: aData.warehouse.fiscal_address});\n              }\n            }\n          }).then(function (result) {\n            if (result) {\n              vm.dtInstance.DataTable.draw();\n            }\n          }, function () {\n            // Nothing changed\n          });\n        }\n\n      });\n      return nRow;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function loadContractedPlanLimit() {\n      api.account.contractedPlanLimits.list({\n        codes: PLAN_LIMIT_CODES.REGISTER_LIMIT\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK && results.results && results.results.length) {\n          results.results.forEach(function(cpl) { vm.contractedPlanLimits.push(new ContractedPlanLimit(cpl)); });\n          vm.registerLimit = vm.contractedPlanLimits.find(function(cpl) { return cpl.code === PLAN_LIMIT_CODES.REGISTER_LIMIT; });\n        }\n      });\n    }\n\n    function allowRegisterCreation() {\n      return vm.registerLimit && vm.registerLimit.allowsCreation();\n    }\n\n    function blockRegisterCreation() {\n      return vm.registerLimit && !vm.registerLimit.allowsCreation();\n    }\n\n    // Load plan limit on init\n    loadContractedPlanLimit();\n\n    function newRegister(ev) {\n      if (Session.hasPermission('inventory.warehouses.warehouse.registers.add')) {\n        $mdDialog.show({\n          controller: 'NewRegisterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/registers/dialogs/new-register/new-register-dialog.html',\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            WarehouseData: vm.warehouse,\n            RegisterData: {},\n            contractedPlanLimit: vm.registerLimit\n          },\n          resolve: {\n            SerialNumberTypesData: function (apiResolver) {\n              return apiResolver.resolve('inventories.serialNumberTypes@list', {fiscal_address: vm.warehouse.fiscal_address});\n            }\n          }\n        }).then(function (result) {\n          if (result) {\n            vm.dtInstance.DataTable.draw();\n          }\n        }, function () {\n          // Nothing changed\n        });\n      }\n    }\n\n    function deleteRegister(ev, register) {\n      if (Session.hasPermission('inventory.warehouses.warehouse.registers.add')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('REGISTERS.DELETE_REGISTER', {register: register.code}))\n          .textContent($filter('translate')('REGISTERS.DELETE_REGISTER_MSG', {register: register.code}))\n          .targetEvent(ev)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('sale.registers.delete')) {\n            api.sales.registers.delete(\n              {id: register.id},\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n\n                  vm.dtInstance.DataTable.draw();\n\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('REGISTERS.REGISTER_DELETED')).position('top right'));\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        }, function () {\n          // Nothing to do. Do not remove.\n        });\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('WarehouseDetailsController', WarehouseDetailsController);\n\n  /** @ngInject */\n  function WarehouseDetailsController($scope, $mdToast, $filter, $q, WarehouseData, COUNTIRES_ISO_APLPHA_2_EN, api,\n                                      PricingTiersData, TicketConfigurationsData, Session, FiscalAddressesData,\n                                      HTTP_STATUS, WarehousesData, InventoryConfigurationData, SERIAL_NUMBER_TYPES,\n                                      WAREHOUSE_TYPES) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.Session = Session;\n\n    // Data\n    var vm = this;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n    vm.warehouse = angular.copy(WarehouseData);\n    vm.warehouses = WarehousesData.results;\n    $scope.$parent.vm.warehouse = vm.warehouse;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.fiscalAddresses = FiscalAddressesData.results;\n    vm.ticketConfigurations = TicketConfigurationsData.results;\n    vm.countries = COUNTIRES_ISO_APLPHA_2_EN;\n    vm.serialNumberTypes = [];\n    vm.inventoryConfiguration = InventoryConfigurationData.results[0];\n    vm.taxSearchText = '';\n    vm.selectedTax = vm.warehouse ? vm.warehouse.default_tax_instance : null;\n    vm.hasPickingAndPacking = false;\n    vm.usersUrl = api.account.users.list;\n    vm.WAREHOUSE_TYPES = WAREHOUSE_TYPES;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fiscalAddressChanged = fiscalAddressChanged;\n    vm.getDefaultReplenishmentWarehouseName = getDefaultReplenishmentWarehouseName;\n    vm.taxQuerySearch = taxQuerySearch;\n    vm.selectedTaxChanged = selectedTaxChanged;\n    vm.getVerifactuSerialNumberTypes = getVerifactuSerialNumberTypes;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      getSerialNumberTypes();\n      if (Session.hasFeature('app.inventory.pickings')) {\n          vm.hasPickingAndPacking = true;\n        }\n    }\n\n    function cancel() {\n      vm.warehouse = angular.copy(WarehouseData);\n      $scope.$parent.vm.warehouse = vm.warehouse;\n    }\n\n    function save() {\n      api.inventories.warehouses.update(\n        vm.warehouse,\n        function (response) {\n          if (response.id != undefined) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')(\"WAREHOUSE.WAREHOUSES_UPDATED\")).position('top right'));\n          }\n        }\n      );\n    }\n\n    function fiscalAddressChanged() {\n        getSerialNumberTypes();\n    }\n\n    function getSerialNumberTypes() {\n      api.inventories.serialNumberTypes.list({'fiscal_address': vm.warehouse.fiscal_address || ''},\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.serialNumberTypes = results.results;\n          }\n        });\n    }\n\n    function getDefaultReplenishmentWarehouseName() {\n      if (vm.warehouses.length === 0) {\n        return '';\n      }\n      var defaultWarehouse = vm.warehouses.filter(function (warehouse) {\n        return warehouse.id === vm.inventoryConfiguration.replenishment_warehouse;\n      });\n      return defaultWarehouse[0].name;\n    }\n\n    function taxQuerySearch(selectedDynamicReportFilter) {\n      var deferred = $q.defer();\n      api.accounting.taxes.list(\n        {\n          search: vm.taxSearchText,\n          restricted: true\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectedTaxChanged(item){\n      vm.warehouse.default_tax = item ? item.id : null;\n    }\n\n    function getVerifactuSerialNumberTypes() {\n      var verifactuApp = Session.company.getVerifactuApp(vm.warehouse.fiscal_address);\n      if (verifactuApp) {\n        return vm.serialNumberTypes.filter(function(serialNumberType) {\n          return verifactuApp.id === serialNumberType.verifactu_app;\n        });\n      } else {\n        return vm.serialNumberTypes.filter(function(serialNumberType) {\n          return serialNumberType.verifactu_app === null;\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('TransferAllDialogController', TransferAllDialogController);\n\n  /** @ngInject */\n  function TransferAllDialogController($q,\n                                       Session,\n                                       $filter,\n                                       $mdToast,\n                                       $mdDialog,\n                                       api,\n                                       unableToDelete,\n                                       sourceWarehouseId,\n                                       SEARCH_MAX_LENGTH,\n                                       HTTP_STATUS) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.sourceWarehouseId = sourceWarehouseId;\n    vm.unableToDelete = unableToDelete;\n    vm.userEmail = Session.user.email;\n    vm.loading = false;\n    vm.creating = false;\n    // Methods\n    vm.querySearch = querySearch;\n    vm.closeDialog = closeDialog;\n    vm.transferAll = transferAll;\n\n    // Functions\n    function querySearch() {\n\n      var deferred = $q.defer();\n\n      vm.searchWarehouse = vm.searchWarehouse.substring(0, vm.SEARCH_MAX_LENGTH)\n\n      api.inventories.warehouses.get({\n        search: vm.searchWarehouse,\n      }, function (results) {\n        if (results.results) {\n          deferred.resolve(results.results.filter(function (warehouse) {\n            return warehouse.id !== vm.sourceWarehouseId;\n          }));\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    /**\n     * Close dialog\n     */\n    function closeDialog() {\n      $mdDialog.cancel();\n    }\n\n    /**\n     * Return warehouse to save\n     */\n    function transferAll() {\n      if (vm.loading) {\n        return;\n      }\n      vm.loading = true;\n      api.inventories.warehouses.save({\n        id: vm.sourceWarehouseId,\n        target_warehouse_id: vm.targetWarehouse.id,\n        option: 'transfer-all'\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.creating = true;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryTransferProductsController', InventoryTransferProductsController);\n\n  /** @ngInject */\n  function InventoryTransferProductsController($scope,\n                                               TransferOrderData, $state) {\n\n    $scope.$parent.vm.currentNavItem = 'products';\n    $scope.$parent.vm.transfer = TransferOrderData;\n\n    var vm = this;\n\n    vm.transfer = null;\n\n    // Data\n    vm.visualizationOptions = {\n      productOptions: {\n        visible: false,\n        discount: {\n          id: 'discount',\n          translation: 'PURCHASE.DISCOUNT',\n          selected: false,\n          visible: false\n        },\n        show_prices_incl_tax: {\n          id: 'show_prices_incl_tax',\n          translation: 'SALE.SHOW_INCL_TAXES',\n          selected: false,\n          visible: false\n        },\n        show_tax_select: {\n          id: 'tax_select',\n          translation: 'ACCOUNT.TAXES',\n          selected: false,\n          visible: false\n        },\n        price: {\n          id: 'price',\n          translation: 'SALE.SHOW_PRICES',\n          selected: false,\n          visible: false\n        },\n        shippingDate: {\n          id: 'shipping_date',\n          translation: 'PURCHASE.SHIPPING_DATE',\n          selected: false,\n          visible: false\n        }\n      },\n      productVariantOptions: {\n        sku: {\n          id: 'sku',\n          translation: 'SALE.SHOW_SKUS',\n          selected: false,\n          visible: true\n        },\n        leftAmount: {\n          id: 'leftAmount',\n          translation: 'PRODUCT.SOURCE_STOCK',\n          selected: true,\n          visible: true\n        },\n        rightAmount: {\n          id: 'rightAmount',\n          translation: 'PRODUCT.TARGET_STOCK',\n          selected: true,\n          visible: true\n        }\n      }\n    };\n\n    // Register Events\n    vm.initializeTransferEvent = $scope.$on('initialize-transfer', function (event, args) {\n      TransferOrderData = args.transfer;\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeTransferEvent();\n    });\n\n    initialize();\n\n    vm.isInPickingPackingProcess = isInPickingPackingProcess;\n    vm.goPickingAndPackingView = goPickingAndPackingView;\n\n    // Functions\n    function initialize() {\n      vm.transfer = angular.copy(TransferOrderData);\n    }\n\n    function isInPickingPackingProcess() {\n      return (vm.transfer.picking_order) || vm.transfer.packing_order;\n    }\n\n    function goPickingAndPackingView() {\n      if (vm.transfer.packing_order) {\n        $state.go('app.inventory.picking_packing.packing_order.products', {id: vm.transfer.packing_order});\n      } else if (vm.transfer.picking_order) {\n        $state.go('app.inventory.picking_packing.picking_order', {id: vm.transfer.picking_order});\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryTransferDetailsController', InventoryTransferDetailsController);\n\n  /** @ngInject */\n  function InventoryTransferDetailsController($scope, $state, $mdDialog, $filter, $window, $mdToast, $document, api, InventoryConfigurationData,\n                                              WarehousesData, TransferData, SerialNumberTypesData, TRANSFER_ORDER_STATUSES,\n                                              TRANSFER_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, Session, SERIAL_NUMBER_TYPES) {\n\n    $scope.$parent.vm.currentNavItem = 'details';\n    $scope.$parent.vm.transfer = TransferData;\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.warehouses = [];\n    vm.transfer = null;\n    vm.isNewTransfer = !$state.params.id;\n    vm.isReplenishment = !!$state.params.type;\n    vm.dateStart = null;\n    vm.dateEnd = null;\n    vm.taToolbar = [['undo', 'redo']];\n    vm.minDate = new Date();\n    vm.searchSelectHeader = new Array(2);\n    vm.saving = false;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    // Methods\n    vm.gotoTransfers = gotoTransfers;\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.create = create;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.onSelectorOpen = onSelectorOpen;\n\n\n    // Register Events\n    vm.initializeTransferEvent = $scope.$on('initialize-transfer', function(event, args) {\n      TransferData = args.transfer;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.initializeTransferEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n      vm.warehouses = WarehousesData.results;\n      if (vm.isNewTransfer) {\n        vm.transfer = {\n          tags: [],\n          serial_number_type: InventoryConfigurationData ? InventoryConfigurationData.results[0].transfer_order_default_serial_number_type : null,\n          delivery_notes_serial_number_type: InventoryConfigurationData ? InventoryConfigurationData.results[0].transfer_order_delivery_default_serial_number_type : null,\n          expected_at: new Date()\n        };\n        vm.dateStart = new Date();\n        vm.dateEnd = new Date();\n      } else {\n        vm.transfer = angular.copy(TransferData);\n        vm.isReplenishment = vm.transfer.is_replenishment;\n        if (vm.transfer.expected_at) {\n          vm.transfer.expected_at = new Date(vm.transfer.expected_at);\n        }\n        if (vm.transfer.is_replenishment) {\n          vm.dateStart = new Date(vm.transfer.replenishment_period_start);\n          vm.dateEnd = new Date(vm.transfer.replenishment_period_end);\n        }\n      }\n    }\n\n    /**\n     * Go to products page\n     */\n    function gotoTransfers() {\n      $state.go('app.inventory.transfers');\n    }\n\n    function save() {\n\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n\n      var obj = angular.copy(vm.transfer);\n      if (obj.expected_at)\n        obj.expected_at = $filter('date')(obj.expected_at, 'yyyy-MM-dd');\n      obj.source_warehouse = vm.transfer.source_warehouse.id;\n      obj.target_warehouse = vm.transfer.target_warehouse.id;\n\n      api.inventories.transferOrders.update(\n        obj,\n        function(result) {\n          if (result.id) {\n            //TransferData = result;\n            //initialize();\n            // TODO: update the data from the server\n            vm.saving = false;\n            $scope.detailsForm.$setPristine();\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('TRANSFER.TRANSFER_UPDATED'))\n                .position('top right'));\n          }\n        }\n      );\n    }\n\n    function cancel() {\n      if (vm.isNewTransfer) {\n        $window.history.back();\n      } else {\n        initialize();\n        $scope.detailsForm.$setPristine();\n      }\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return TRANSFER_ORDER_STATUS_COLORS[status];\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'TRANSFER.PROCESSING_TRANSFER';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'TRANSFER.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    /**\n     * Creates the new transfer object\n     */\n    function create() {\n\n      if (vm.saving)\n        return;\n\n      showProgressBar('TRANSFER.CREATING_TRANSFER');\n      vm.saving = true;\n      var obj = angular.copy(vm.transfer);\n      if (obj.expected_at)\n        obj.expected_at = $filter('date')(obj.expected_at, 'yyyy-MM-dd');\n\n      // serializer needs IDs not as objects, but as values instead. So each obj.<name>_warehouse must be parsed to ID\n      obj.source_warehouse = vm.transfer.source_warehouse.id;\n      obj.target_warehouse = vm.transfer.target_warehouse.id;\n\n      if (vm.isReplenishment) {\n        obj.replenishment_period_start = vm.dateStart.toISOString();\n        obj.replenishment_period_end = vm.dateEnd.toISOString();\n        obj.is_replenishment = vm.isReplenishment;\n\n        api.inventories.transferOrders.save(\n          obj,\n          function (result) {\n            vm.saving = false;\n            $mdDialog.hide();\n            if(result.id) {\n              $state.go('app.inventory.transfers.transfer.products', { id: result.id });\n            }\n          }\n        );\n      }\n      else {\n        api.inventories.transferOrders.save({\n            option: 'create-ship-and-receive-transfer-order',\n            transfer_order: obj\n          },\n          function(result) {\n            vm.saving = false;\n            $mdDialog.hide();\n            if (result.id) {\n              $state.go('app.inventory.transfers.transfer.delivery', {id: result.transfer_order});\n            }\n          }\n        );\n      }\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryTransferDeliveriesController', InventoryTransferDeliveriesController);\n\n  /** @ngInject */\n  function InventoryTransferDeliveriesController($scope, $cookies, $state, $q, $timeout, $mdToast, $filter, $interval,\n                                                 api, Session, DTColumnBuilder, $translate, $compile,\n                                                 TransferOrderData, TransferOrderDeliveriesData, $stateParams,\n                                                 TransferOrderDeliveryData, ORDER_DELIVERY_STATUSES_REVERSE, ORDER_DELIVERY_STATUSES, ORDER_DELIVERY_STATUS_COLORS,\n                                                 TRANSFER_ORDER_STATUSES_REVERSE, SEARCH_MAX_LENGTH, MAX_PRODUCTS_PER_PDF, $mdDialog, HTTP_STATUS, $http) {\n\n    $scope.$parent.vm.currentNavItem = TransferOrderData.single_delivery ? 'delivery' : 'deliveries';\n    $scope.$parent.vm.transfer = TransferOrderData;\n\n    var vm = this;\n\n    // Data\n    // Data\n    vm.visualizationOptions = {\n      productOptions: {\n        visible: false,\n        discount: {\n          id: 'discount',\n          translation: 'PURCHASE.DISCOUNT',\n          selected: false,\n          visible: false\n        },\n        show_prices_incl_tax: {\n          id: 'show_prices_incl_tax',\n          translation: 'SALE.SHOW_INCL_TAXES',\n          selected: false,\n          visible: false\n        },\n        show_tax_select: {\n          id: 'tax_select',\n          translation: 'ACCOUNT.TAXES',\n          selected: false,\n          visible: false\n        },\n        price: {\n          id: 'price',\n          translation: 'SALE.SHOW_PRICES',\n          selected: false,\n          visible: false\n        },\n        shippingDate: {\n          id: 'shipping_date',\n          translation: 'PURCHASE.SHIPPING_DATE',\n          selected: false,\n          visible: false\n        }\n      },\n      productVariantOptions: {\n        sku: {\n          id: 'sku',\n          translation: 'SALE.SHOW_SKUS',\n          selected: false,\n          visible: true\n        },\n        leftAmount: {\n          id: 'leftAmount',\n          translation: $scope.$parent.vm.transfer.is_replenishment ? 'ORDER.ORDERED' : 'PRODUCT.SOURCE_STOCK',\n          selected: true,\n          visible: true\n        },\n        rightAmount: {\n          id: 'rightAmount',\n          translation: $scope.$parent.vm.transfer.is_replenishment ? 'ORDER.RECEIVED' : 'PRODUCT.TARGET_STOCK',\n          selected: true,\n          visible: true\n        }\n      }\n    };\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.transfer = TransferOrderData;\n    vm.transferOrderProducts = {};\n    vm.transferOrderDeliveries = !!TransferOrderDeliveriesData ? TransferOrderDeliveriesData.results : null;\n    vm.transferOrderDelivery = angular.copy(TransferOrderDeliveryData);\n\n    vm.orderDeliveryProductVariantsByOrderProductVariantIds = {};\n    vm.creatingNewDelivery = false;\n    vm.changingStatus = false;\n    vm.total_transfer_order_product_variants = 0;\n    vm.total_transfer_order_delivery_product_variants = 0;\n\n    // Methods\n    vm.gotoTransfers = gotoTransfers;\n    vm.getTabName = getTabName;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.isInPickingPackingProcess = isInPickingPackingProcess;\n    vm.goPickingAndPackingView = goPickingAndPackingView;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.initializeTransferEvent = $scope.$on('initialize-transfer', function(event, args) {\n        TransferOrderData = args.transfer;\n        initialize();\n      });\n\n      vm.transferDeliveryUpdateEvent = $scope.$on('transfer.delivery.update', function(event, arg) {\n        vm.dtUIDInstance.DataTable.draw();\n        $timeout(function() {\n        }, 500);\n      });\n\n      $scope.$on('$destroy', function() {\n        vm.initializeTransferEvent();\n        vm.transferDeliveryUpdateEvent();\n      });\n\n      vm.transfer = TransferOrderData;\n      vm.transferOrderDeliveries = !!TransferOrderDeliveriesData ? TransferOrderDeliveriesData.results : null;\n      vm.transferOrderDelivery = angular.copy(TransferOrderDeliveryData);\n      vm.changingStatus = vm.transferOrderDelivery.changing_status || vm.transferOrderDelivery.pending_to_change_status;\n\n      if (!!vm.transferOrderDeliveries) {\n        vm.transferOrderDeliveries.forEach(function(transferOrderDelivery) {\n          transferOrderDelivery.niceDate = moment(transferOrderDelivery.created_at).format('DD/MM/YYYY');\n          transferOrderDelivery.expected_at = new Date(transferOrderDelivery.expected_at);\n        });\n      }\n\n      vm.transferOrderDelivery.order_delivery_product_variants.forEach(function(transfer_order_delivery_product_variant) {\n        vm.orderDeliveryProductVariantsByOrderProductVariantIds[transfer_order_delivery_product_variant.order_product_variant] = transfer_order_delivery_product_variant;\n      });\n\n    }\n\n    function gotoTransfers() {\n      $state.go('app.inventory.transfers');\n    }\n\n    function getTabName(delivery) {\n      return delivery.niceDate + ' (' + $filter('translate')('TRANSFER.' + ORDER_DELIVERY_STATUSES[delivery.status]) + ')';\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('TRANSFER.' + ORDER_DELIVERY_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return ORDER_DELIVERY_STATUS_COLORS[status];\n    }\n\n    function isInPickingPackingProcess() {\n      return (vm.transfer.picking_order) || vm.transfer.packing_order;\n    }\n\n    function goPickingAndPackingView() {\n      if (vm.transfer.packing_order) {\n        $state.go('app.inventory.picking_packing.packing_order.products', { id: vm.transfer.packing_order });\n      } else if (vm.transfer.picking_order) {\n        $state.go('app.inventory.picking_packing.picking_order', { id: vm.transfer.picking_order });\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryStocktakingProductsController', InventoryStocktakingProductsController);\n\n  /** @ngInject */\n  function InventoryStocktakingProductsController($scope, $timeout, $rootScope, $q, $http, $state, $document, $filter,\n                                                  $mdDialog, $stateParams, $translate, $mdToast, $compile, $interval,\n                                                  api, StocktakingData, STOCKTAKING_STATUSES, STOCKTAKING_CLONE_STATUS, STOCKTAKING_STATUS_COLORS, STOCKTAKING_PRODUCT_NOT_FOUND_REASONS,\n                                                  Session, DTColumnBuilder, HTTP_STATUS, SEARCH_MAX_LENGTH, ERROR_CODES, IMPORTER_STATUS,\n                                                  IMPORTATION_TYPE_STOCKTAKING_PRODUCT_VARIANT) {\n\n    $scope.$parent.vm.currentNavItem = 'products';\n    $scope.$parent.vm.stocktaking = StocktakingData;\n\n    var vm = this;\n\n    // Consts\n    var PULLING_FREQUENCE = 5000;\n    vm.STOCKTAKING_STATUSES = STOCKTAKING_STATUSES;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.STOCKTAKING_PRODUCT_NOT_FOUND_REASONS = STOCKTAKING_PRODUCT_NOT_FOUND_REASONS;\n    vm.IMPORTER_STATUS = IMPORTER_STATUS;\n\n    // Data\n    vm.search = '';\n    vm.stocktaking = null;\n    vm.fetching = false;\n    vm.focus = false;\n    vm.lastAddedByBarcodeScan = false;\n    vm.saving = false;\n    vm.changed = false;\n    vm.printing = false;\n    vm.updating = false;\n    vm.uidToSearch = '';\n    vm.addingProduct = false;\n    vm.lastAddedByBarcodeScan = false;\n    vm.stocktakingOrderProducts = {};\n    vm.showStocks = true;\n    vm.totalAmount = 0;\n    vm.totalPreviousAmount = null;\n    vm.totalStocktakingOrderProducts = 0;\n    vm.totalStocktakingOrderProductVariants = 0;\n    vm.importations = [];\n    vm.loadingImportations = false;\n\n    vm.ajax = {\n      dataSrc: 'data',\n      url: api.urls.inventories.stocktakingOrderProducts.replace('/:id/:option', ''),\n      type: 'get',\n      headers: {\n        'Authorization': 'Token ' + Session.token\n      },\n      data: function(d) {\n        d.pagination = 'datatable';\n        d.stocktaking_order = $stateParams.id;\n        if (vm.search != '') {\n          d['search[value]'] = vm.search;\n        }\n      }\n    };\n\n    vm.addingProduct = false;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      drawCallback: drawCallback, //rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [1, 2, 3, 4, 5, 10, 25, 50, 100],\n      pageLength: 5, //scrollY     : 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      order: [[0, 'desc']],\n      language: {\n        url: 'app/main/apps/inventory/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableStocktakingOrderProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableStocktakingOrderProductsController'));\n        return state;\n      }\n    };\n\n    vm.productVariantById = {};\n\n    vm.dtColumns = [DTColumnBuilder.newColumn('updated_at')\n      .withOption('className', 'no-padding hide-table-head')\n      .notSortable()\n      .renderWith(function(data, type, full) {\n        vm.stocktakingOrderProducts[full.id] = full;\n\n        if (full.manage_lots) {\n          return '<nd-stocktaking-order-product-uid ' +\n            'on-save=\"vm.saveOnBlur\" ' +\n            'order-product=\"vm.stocktakingOrderProducts[' + full.id + ']\" ' +\n            'delete-order-product=\"vm.deleteOrderProduct\" ' +\n            'is-editable=\"vm.isEditable()\" ' +\n            'changed=\"vm.changed\" ' +\n            'show-stocks=\"vm.showStocks\" ' +\n            'source-warehouse=\"vm.stocktaking.source_warehouse_instance\" ' +\n            'delete-permission=\"\\'inventory.stocktakings.stocktaking.products.remove_product\\'\" ' +\n            'update-amount-permission=\"\\'inventory.stocktakings.stocktaking.products.update_amount\\'\">' +\n            '</nd-order-product-uid>';\n        } else {\n          return '<nd-stocktaking-order-product ' +\n            'on-save=\"vm.saveOnBlur\" ' +\n            'order-product=\"vm.stocktakingOrderProducts[' + full.id + ']\" ' +\n            'delete-order-product=\"vm.deleteOrderProduct\" ' +\n            'is-editable=\"vm.isEditable()\" ' +\n            'changed=\"vm.changed\" ' +\n            'show-stocks=\"vm.showStocks\" ' +\n            'source-warehouse=\"vm.stocktaking.source_warehouse_instance\" ' +\n            'delete-permission=\"\\'inventory.stocktakings.stocktaking.products.remove_product\\'\" ' +\n            'update-amount-permission=\"\\'inventory.stocktakings.stocktaking.products.update_amount\\'\">' +\n            '</nd-order-product>';\n        }\n      })];\n\n    // Methods\n    vm.gotoStocktakings = gotoStocktakings;\n    vm.getStatusLabel = getStatusLabel;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.deleteStocktakingProductVariant = deleteStocktakingProductVariant;\n    vm.searchProductCallback = searchProductCallback;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.updateProductVariant = updateProductVariant;\n    vm.apply = apply;\n    vm.saveOnBlur = saveOnBlur;\n    vm.deleteOrderProduct = deleteOrderProduct;\n    vm.isEditable = isEditable;\n    vm.isDisabled = isDisabled;\n    vm.searchProduct = searchProduct;\n    vm.switchShowStocktakingHistoric = switchShowStocktakingHistoric;\n    vm.cloneStocktaking = cloneStocktaking;\n    vm.showImportStocktakingDialog = showImportStocktakingDialog;\n    vm.showImportAction = showImportAction;\n    vm.showProgressCircular = showProgressCircular;\n    vm.showStatusDialog = showStatusDialog;\n    vm.showCloneSuccessDialog = showCloneSuccessDialog;\n    vm.getSwitchShowStocktakingHistoric = getSwitchShowStocktakingHistoric;\n    vm.openImportation = openImportation;\n    vm.menuOpened = menuOpened;\n\n    // Register Events\n    vm.initializeStocktakingEvent = $scope.$on('initialize-stocktaking', function(event, args) {\n      StocktakingData = args.stocktaking;\n      initialize();\n    });\n\n    $scope.$on('event:dataTableLoaded', function(event, loadedDT) {\n      vm.table = loadedDT;\n    });\n\n    vm.showUidsDialogEvent = $scope.$on('InventoryStocktakingProductsController::openSearchUidDialog', function(event, data) {\n      showUIDsDialog(data);\n    });\n\n    vm.getTotalsEvent = $scope.$on('InventoryStocktakingProductsController::getTotals', getTotals);\n\n    vm.reloadProductsTableEvent = $scope.$on('InventoryStocktakingProductsController::reloadProductsTableEvent', function(event, data) {\n      vm.dtInstance.DataTable.draw();\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.initializeStocktakingEvent();\n      vm.updateStocktakingEvent();\n      vm.reloadProductsTableEvent();\n      vm.showUidsDialogEvent();\n      vm.getTotalsEvent();\n      if (vm.pullingInterval) {\n        $interval.cancel(vm.pullingInterval);\n      }\n    });\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (!Session.hasPermission('inventory.stocktakings.stocktaking.products.show_stocks')) {\n        vm.showStocks = false;\n      }\n      vm.stocktaking = angular.copy(StocktakingData);\n      vm.editable = isEditable();\n      getTotals();\n      if (vm.stocktaking.changing_status) {\n        startPulling();\n      } else if (vm.stocktaking.clone_status === 1) {\n        startClonePulling();\n      }\n      getImportations();\n    }\n\n    function getImportations() {\n      if (vm.loadingImportations) {\n        return;\n      }\n      vm.loadingImportations = true;\n      api.importer.products.list({\n        type: IMPORTATION_TYPE_STOCKTAKING_PRODUCT_VARIANT.STOCKTAKING_PRODUCT_VARIANT,\n        context: {\n          stocktaking_id: vm.stocktaking.id\n        }\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.importations = response.results;\n        }\n        vm.loadingImportations = false;\n      });\n    }\n\n    function searchProduct() {\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function showProgressCircular() {\n      return vm.stocktaking.pending_to_apply || vm.stocktaking.changing_status || vm.stocktaking.clone_status === STOCKTAKING_CLONE_STATUS.CLONE_IN_PROGRESS || vm.changed || vm.saving;\n    }\n\n    function showStatusDialog() {\n      if (vm.stocktaking.clone_status === STOCKTAKING_CLONE_STATUS.CLONE_IN_PROGRESS) {\n        showProgressBar('STOCKTAKING.CLONE_IN_PROGRESS');\n      }\n      if (vm.stocktaking.pending_to_apply || vm.stocktaking.changing_status) {\n        showProgressBar('STOCKTAKING.APPLYING_IN_PROGRESS');\n      }\n    }\n\n    function showReloadTablesToast(message) {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')(message))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          searchProduct();\n        }\n      });\n    }\n\n    function showReloadToast(message) {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')(message))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function saveOnBlur(orderProductVariant) {\n      if (vm.stocktaking.status === STOCKTAKING_STATUSES.DRAFT) {\n\n        if (String(orderProductVariant.amount).length > 6) {\n          orderProductVariant.amount = 0;\n          return;\n        }\n\n        if (orderProductVariant.amount === null) {\n          orderProductVariant.amount = 0;\n        }\n\n        var result = $q.defer();\n\n        var stocktakingOrderProductVariant = {};\n        if (angular.isDefined(orderProductVariant.id) && orderProductVariant.id != 0) {\n          stocktakingOrderProductVariant.id = orderProductVariant.id;\n        }\n        stocktakingOrderProductVariant.stocktaking_order_product = orderProductVariant.orderProduct.id;\n        stocktakingOrderProductVariant.product_variant = orderProductVariant.product_variant;\n        stocktakingOrderProductVariant.amount = orderProductVariant.amount;\n        stocktakingOrderProductVariant.previous_amount = orderProductVariant.previous_amount;\n        stocktakingOrderProductVariant.size = orderProductVariant.size;\n        stocktakingOrderProductVariant.color = orderProductVariant.color;\n\n        vm.saving = true;\n\n        if (angular.isUndefined(stocktakingOrderProductVariant.id)) {\n\n          api.inventories.stocktakingOrderProductVariants.save(stocktakingOrderProductVariant, function(response, callback, status) {\n            vm.saving = false;\n            vm.changed = false;\n            if (response.id) {\n              orderProductVariant.id = response.id;\n              orderProductVariant.stocktaking_order_product = response.stocktaking_order_product;\n              orderProductVariant.amount = response.amount;\n              orderProductVariant.previous_amount = response.previous_amount;\n\n              updateStocktakingHistoric(response.last_stocktaking_change);\n\n              // We need to add the order_product_variant at the table, just in case we need to redraw without to reload the data.\n              orderProductVariant.orderProduct.order_product_variants.push(orderProductVariant);\n              getTotals();\n              $timeout(function() {\n                $rootScope.$emit('InventoryStocktakingProductsController::stocktakingOrderProductVariantsCreated');\n              }, 100);\n\n            } else {\n              if (status == HTTP_STATUS.HTTP_409_CONFLICT) {\n                showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n              } else {\n                $mdToast\n                  .show($mdToast.simple()\n                    .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                    .position('top right'));\n              }\n            }\n            result.resolve();\n          });\n\n        } else {\n\n          api.inventories.stocktakingOrderProductVariants.update(stocktakingOrderProductVariant, function(response, callback, status) {\n            vm.saving = false;\n            vm.changed = false;\n            if (response.id) {\n              orderProductVariant.amount = response.amount;\n              orderProductVariant.previous_amount = response.previous_amount;\n              updateStocktakingHistoric(response.last_stocktaking_change);\n              getTotals();\n            } else {\n              if (status == HTTP_STATUS.HTTP_409_CONFLICT) {\n                showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n              } else {\n                $mdToast\n                  .show($mdToast.simple()\n                    .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                    .position('top right'));\n              }\n            }\n            result.resolve();\n          });\n\n        }\n\n        return result.promise;\n      }\n    }\n\n    function getTotals() {\n      // Getting the total order product variants\n      api.inventories.stocktakings.get({\n        id: vm.stocktaking.id, option: 'total-order-product-variants'\n      }, function(response) {\n        vm.totalAmount = response.total_amount;\n        vm.totalStocktakingOrderProducts = response.total_stocktaking_order_products;\n        vm.totalStocktakingOrderProductVariants = response.total_count;\n      });\n    }\n\n    function getTotalPreviousAmount() {\n      if (vm.totalPreviousAmount !== null) {\n        return;\n      }\n\n      api.inventories.stocktakings.get({\n        id: vm.stocktaking.id, option: 'total-previous-amount'\n      }, function(response) {\n        vm.totalPreviousAmount = response.total_previous_amount;\n      });\n    }\n\n    function deleteOrderProduct(orderProduct) {\n      if (vm.saving) {\n        return;\n      }\n      vm.saving = true;\n      api.inventories.stocktakingOrderProducts.delete({ id: orderProduct.id }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          updateStocktakingHistoric(response.last_stocktaking_change);\n          vm.dtInstance.DataTable.draw();\n          vm.saving = false;\n          vm.changed = false;\n          getTotals();\n        } else {\n          if (status == HTTP_STATUS.HTTP_409_CONFLICT) {\n            showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n          } else {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('PURCHASE.ERROR_SAVING_DRAFT'))\n                .position('top right'));\n          }\n        }\n      });\n    }\n\n    function drawCallback(settings) {\n      if (vm.addingProduct) {\n        vm.addingProduct = false;\n        // When last product was added by scanning a barcode, it doesn't have to be focused\n        if (!vm.lastAddedByBarcodeScan) {\n          setTimeout(function() {\n            if (angular.element('#datatable-table input').length) var element = angular.element(angular.element('#datatable-table input')[0]);\n            element.focus();\n          }, 100);\n        }\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function gotoStocktakings() {\n      $state.go('app.inventory.stocktakings');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('STOCKTAKINGS.' + STOCKTAKING_ORDER_STATUSES[status]);\n    }\n\n    function initComplete() {\n      vm.dtInstance.DataTable.columns.adjust();\n      getTotalPreviousAmount();\n    }\n\n    function openProductSearchDialog(ev) {\n      if (Session.hasPermission('inventory.stocktakings.stocktaking.products.add_product')) {\n\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true,\n              targetWarehouse: vm.stocktaking.warehouse,\n              filterBrands: vm.stocktaking.partial && vm.stocktaking.brand ? [vm.stocktaking.brand] : null,\n              filterCategories: vm.stocktaking.partial && vm.stocktaking.category ? [vm.stocktaking.category] : null,\n              filterSeasons: vm.stocktaking.partial && vm.stocktaking.season ? [vm.stocktaking.season] : null\n            }\n          }\n        }).then(function(result) {\n          searchProductCallback(result.product, null, result.products.map(function(p) {\n            return p.id;\n          }));\n        });\n      }\n    }\n\n    function searchProductCallback(product, barcode, products) {\n      if (Session.hasPermission('inventory.stocktakings.stocktaking.products.add_product')) {\n        if (angular.isDefined(products) && products && products.length) {\n\n          vm.fetching = true;\n          api.inventories.stocktakingOrderProducts.save({\n            products: products, stocktaking_order: vm.stocktaking.id, order_product_variants: []\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              vm.dtInstance.DataTable.draw();\n              getTotals();\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('TRANSFER.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.fetching = false;\n          });\n\n        } else if (angular.isDefined(product) || !!barcode) {\n          vm.lastAddedByBarcodeScan = !!barcode;\n          vm.fetching = true;\n\n          api.inventories.stocktakingOrderProducts.save({\n            product: product ? product.id : null,\n            barcode: barcode ? barcode : null,\n            stocktaking_order: vm.stocktaking.id,\n            order_product_variants: []\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              if (barcode) updateStocktakingHistoric(response.last_stocktaking_change);\n              // Enabling the focus to the first input\n              vm.addingProduct = true;\n              // Cleaning current stocktaking order products dictionary\n              vm.stocktakingOrderProducts = {};\n              // Disabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = false;\n              vm.dtInstance.DataTable.settings()[0].ajax = false;\n              // Getting current products table\n              var currentRows = vm.dtInstance.DataTable.rows().data();\n              // Checking if the product already is in the table\n              for (var i = 0; i < currentRows.length; i++) {\n                if (currentRows[i].product.id == response.product.id) {\n                  currentRows.splice(i, 1);\n                }\n              }\n\n              currentRows.unshift(response);\n              // Cleaning the old table and adding the new products list\n              vm.dtInstance.DataTable.clear();\n              vm.dtInstance.DataTable.rows.add(currentRows);\n              // Drawing the table\n              vm.dtInstance.DataTable.draw();\n              // Enabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = true;\n              vm.dtInstance.DataTable.settings()[0].ajax = vm.ajax;\n              getTotals();\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              if (barcode) {\n                updateStocktakingHistoric(response.last_stocktaking_change);\n              }\n              if (response.last_stocktaking_change.not_found_reason) {\n                var notFoundReason = vm.STOCKTAKING_PRODUCT_NOT_FOUND_REASONS[response.last_stocktaking_change.not_found_reason];\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('STOCKTAKING.' + notFoundReason)).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n              }\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('TRANSFER.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            vm.fetching = false;\n          });\n        }\n      }\n    }\n\n    function apply() {\n      var stocktakingSummaryData = {\n        stocktaking: vm.stocktaking,\n        totalAmount: vm.totalAmount,\n        totalPreviousAmount: vm.stocktaking.product_variants_previous_amount,\n        totalStocktakingOrderProducts: vm.totalStocktakingOrderProducts,\n        totalStocktakingOrderProductVariants: vm.totalStocktakingOrderProductVariants\n      };\n\n      $mdDialog.show({\n        controller: 'StocktakingSummaryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/stocktaking/dialogs/summary-dialog/stocktaking-summary-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          stocktakingSummaryData: stocktakingSummaryData\n        }\n      }).then(function(resetStock) {\n        changeStatus('apply', resetStock);\n        showProgressBar('STOCKTAKING.APPLYING_IN_PROGRESS');\n      }, function(error) {\n        // Do not remove\n      });\n    }\n\n    function changeStatus(status, resetStock) {\n      if (vm.stocktaking.changing_status || vm.stocktaking.pending_to_apply) {\n        return;\n      }\n\n      vm.stocktaking.changing_status = true;\n      $scope.$parent.vm.stocktaking.changing_status = true;\n\n      api.inventories.stocktakings.update({\n        id: vm.stocktaking.id,\n        option: 'status',\n        action: status,\n        reset_stock: !!resetStock\n      }, function(response, fn, statusHttp) {\n        if (statusHttp === HTTP_STATUS.HTTP_200_OK) {\n          startPulling(status);\n          if (status === 'apply') {\n            vm.dtInstance.DataTable.draw();\n          }\n        } else if (statusHttp === HTTP_STATUS.HTTP_403_FORBIDDEN &&\n          response.error === ERROR_CODES.ERROR_04022_CANCEL_STOCKTAKING_NOT_ALLOWED_DUE_TO_UIDS) {\n          $mdToast\n            .show($mdToast.simple()\n              .textContent($filter('translate')('STOCKTAKING.CANNOT_CANCEL_DUE_TO_CONTAINS_UID'))\n              .position('top right'));\n          vm.stocktaking.changing_status = false;\n          $scope.$parent.vm.stocktaking.changing_status = false;\n        } else if (statusHttp == HTTP_STATUS.HTTP_409_CONFLICT) {\n          if (response.error === ERROR_CODES.ERROR_04024_ERROR_APPLYING_STOCKTAKING_DUE_TO_PENDING_IMPORTATION) {\n            showReloadTablesToast('STOCKTAKING.ERROR_STOCKTAKING_WITH_PENDING_IMPORT');\n          } else {\n            showReloadToast('ORDER.ERROR_ORDER_STATUS_CHANGED');\n          }\n          $interval.cancel(vm.pullingInterval);\n          vm.stocktaking.changing_status = false;\n          $scope.$parent.vm.stocktaking.changing_status = false;\n\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          vm.stocktaking.changing_status = false;\n          $scope.$parent.vm.stocktaking.changing_status = false;\n        }\n      });\n    }\n\n    function deleteStocktakingProductVariant(stocktakingProductVariantId) {\n      if (Session.hasPermission('inventory.stocktakings.stocktaking.products.remove_product')) {\n        api.inventories.stocktakingProductVariants.delete({\n          id: stocktakingProductVariantId\n        }, function(response) {\n          updateStocktakingHistoric(response.last_stocktaking_change);\n          vm.dtInstance.DataTable.draw();\n        });\n      }\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (vm.stocktaking.status === STOCKTAKING_STATUSES.DRAFT) {\n        searchProductCallback(null, barcode, null);\n      }\n    }\n\n    function updateProductVariant(productVariant) {\n      if (Session.hasPermission('inventory.stocktakings.stocktaking.products.update_amount')) {\n        if (vm.updating) {\n          return;\n        }\n\n        vm.updating = true;\n        if (!productVariant.amount_after) {\n          productVariant.amount_after = 0;\n        }\n\n        api.inventories.stocktakingProductVariants.update(productVariant, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            updateStocktakingHistoric(response.last_stocktaking_change);\n          }\n          vm.updating = false;\n        });\n      }\n    }\n\n    function isEditable() {\n      return vm.stocktaking.status === STOCKTAKING_STATUSES.DRAFT && vm.stocktaking.changing_status == false && vm.stocktaking.pending_to_apply == false;\n    }\n\n    function isDisabled() {\n      return vm.stocktaking.pending_to_apply || vm.stocktaking.changing_status || vm.changed || vm.saving;\n    }\n\n    function showCloneSuccessDialog(lastClone) {\n      $mdDialog.show({\n        controller: 'StocktakingCloneSuccessDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/stocktaking/dialogs/clone-success-dialog/stocktaking-clone-success-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          lastClone: lastClone\n        }\n      });\n    }\n\n    function startClonePulling() {\n      vm.pullingInterval = $interval(function() {\n        api.inventories.stocktakings.get({\n          id: vm.stocktaking.id, option: 'check-status'\n        }, function(result, callback, status) {\n          if (result.clone_status === STOCKTAKING_CLONE_STATUS.READY_TO_CLONE) {\n            $interval.cancel(vm.pullingInterval);\n            vm.stocktaking.clone_status = STOCKTAKING_CLONE_STATUS.READY_TO_CLONE;\n            $mdDialog.hide();\n            api.inventories.stocktakings.get({\n              id: vm.stocktaking.id\n            }, function(result, callback, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                showCloneSuccessDialog(result.last_clone);\n              }\n            });\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function startPulling(status) {\n      var pullingStatus = status;\n      vm.pullingInterval = $interval(function() {\n        api.inventories.stocktakings.get({\n          id: vm.stocktaking.id, option: 'check-status'\n        }, function(result, callback, status) {\n          if (result.changing_status === false && result.pending_to_apply === false && (pullingStatus === 'apply' && result.status === STOCKTAKING_STATUSES.APPLIED || pullingStatus === 'cancel' && result.status === STOCKTAKING_STATUSES.DRAFT)) {\n            $interval.cancel(vm.pullingInterval);\n            $mdDialog.hide();\n            api.inventories.stocktakings.get({\n              id: vm.stocktaking.id\n            }, function(result, callback, status) {\n              vm.stocktaking = result;\n              $scope.$parent.vm.stocktaking = vm.stocktaking;\n              vm.dtInstance.DataTable.draw();\n            });\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function switchShowStocktakingHistoric() {\n      $scope.$parent.vm.showStocktakingHistoric = !$scope.$parent.vm.showStocktakingHistoric;\n      if ($scope.$parent.vm.showStocktakingHistoric && $scope.$parent.vm.stocktakingHistoricArray.length === 0) {\n        initializeHistoric();\n      }\n    }\n\n    function getSwitchShowStocktakingHistoric() {\n      return $scope.$parent.vm.showStocktakingHistoric;\n    }\n\n    function showProgressBar(title) {\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'STOCKTAKING.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function cloneStocktaking() {\n      $mdDialog.show($mdDialog.confirm()\n        .title($filter('translate')('STOCKTAKING.CLONE_VALIDATION_TITLE'))\n        .htmlContent($filter('translate')('STOCKTAKING.CLONE_VALIDATION_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.CONTINUE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'))\n      ).then(function() {\n        vm.stocktaking.clone_status = STOCKTAKING_CLONE_STATUS.CLONE_IN_PROGRESS;\n        api.inventories.stocktakings.save({\n          id: vm.stocktaking.id,\n          option: 'clone'\n        }, function(result, callback, status) {\n          startClonePulling();\n          showProgressBar('STOCKTAKING.CLONE_IN_PROGRESS');\n        });\n      }, function() {\n      });\n    }\n\n    function initializeHistoric() {\n      api.inventories.stocktakingChanges.list({\n        stocktaking: vm.stocktaking.id\n      }, function(result, callback, status) {\n        $scope.$parent.vm.stocktakingHistoricArray = result.results;\n        $scope.$parent.vm.stocktakingHistoricNext = result.next;\n      });\n    }\n\n    function showImportStocktakingDialog(importationInstance) {\n      $mdDialog.show({\n        controller: 'ImportationWizardDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/import/dialogs/importation-wizard/importation-wizard-dialog.html',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: true,\n        escapeToClose: false,\n        resolve: {\n          ImportationData: function(apiResolver) {\n            if (importationInstance) {\n              return apiResolver.resolve('importer.products@get', {\n                id: importationInstance.id\n              });\n            } else {\n              return {};\n            }\n          }\n        },\n        locals: {\n          readonly: importationInstance && importationInstance.status === IMPORTER_STATUS.DONE,\n          importerType: 'stocktaking_product_variant',\n          importerContext: { stocktaking_id: vm.stocktaking.id }\n        }\n      }).then(function(changesMade) {\n        vm.dtInstance.DataTable.draw();\n        if ($scope.$parent.vm.showStocktakingHistoric || $scope.$parent.vm.stocktakingHistoricArray.length > 0) {\n          initializeHistoric();\n        }\n      }, function(changesMade) {\n        vm.dtInstance.DataTable.draw();\n        if ($scope.$parent.vm.showStocktakingHistoric || $scope.$parent.vm.stocktakingHistoricArray.length > 0) {\n          initializeHistoric();\n        }\n      });\n    }\n\n    function showImportAction() {\n      return vm.stocktaking.status === vm.STOCKTAKING_STATUSES.DRAFT;\n    }\n\n    function showUIDsDialog(data) {\n      $mdDialog.show({\n        controller: 'UidsSearchDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-search/uids-search.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        multiple: true,\n        locals: {\n          operation: 'stocktaking',\n          orderDeliveryProductVariant: null,\n          orderProductVariant: data.orderProductVariant,\n          product: data.orderProduct.product,\n          productVariantId: data.orderProductVariant.product_variant,\n          warehouseId: vm.stocktaking.source_warehouse,\n          warehouseName: vm.stocktaking.source_warehouse_instance.name,\n          allowCreate: true,\n          manageLots: data.orderProduct.manage_lots,\n          manageUids: data.orderProduct.manage_uids,\n          showAll: true,\n          excludeUids: [],\n          initSearch: null\n        }\n      }).then(function(results) {\n        $rootScope.$broadcast('InventoryStocktakingProductsController::reloadProductsTableEvent');\n\n        results.forEach(function(stockDetail) {\n          api.inventories.stocktakings.update({\n              id: vm.stocktaking.id,\n              uid_stock_id: stockDetail.id,\n              order_product_variant_id: data.orderProductVariant.id,\n              option: 'add-uid-stock'\n            },\n            function(response, callback, status) {\n              if (status === 200) {\n                api.inventories.stocktakingOrderProductVariants.update({\n                    id: data.orderProductVariant.id,\n                    option: 'recalculate-by-uids'\n                  },\n                  function(response, callback, status) {\n                  });\n                $rootScope.$broadcast('stocktaking.update', '');\n                $rootScope.$broadcast('InventoryStocktakingProductsController::reloadProductsTableEvent', '');\n                updateStocktakingHistoric(response.last_stocktaking_change);\n              }\n            });\n        });\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function updateStocktakingHistoric(lastStocktakingChange) {\n      if (lastStocktakingChange &&\n        ($scope.$parent.vm.stocktakingHistoricArray.length > 0 || $scope.$parent.vm.showStocktakingHistoric)) {\n        $scope.$parent.vm.stocktakingHistoricArray.unshift(lastStocktakingChange);\n        if ($scope.$parent.vm.stocktakingHistoricNext) {\n          $scope.$parent.vm.stocktakingHistoricArray.splice(-1, 1);\n        }\n      }\n    }\n\n    function openImportation(importationInstance) {\n      $mdDialog.show({\n        controller: 'ImportationWizardDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/import/dialogs/importation-wizard/importation-wizard-dialog.html',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: true,\n        escapeToClose: false,\n        resolve: {\n          ImportationData: function(apiResolver) {\n            if (importationInstance) {\n              return apiResolver.resolve('importer.products@get', {\n                id: importationInstance.id\n              });\n            } else {\n              return {};\n            }\n          }\n        },\n        locals: {\n          readonly: importationInstance && importationInstance.status === IMPORTER_STATUS.DONE,\n          importerType: 'stocktaking_product_variant',\n          importerContext: {}\n        }\n      }).then(function(changesMade) {\n        //\n      }, function(changesMade) {\n        //\n      });\n    }\n\n    function menuOpened($mdMenu, event){\n      $mdMenu.open(event);\n      getImportations();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryStocktakingDetailsController', InventoryStocktakingDetailsController);\n\n  /** @ngInject */\n  function InventoryStocktakingDetailsController($scope, $state, $filter, $window, $mdToast, $document, api, $q,\n                                                 SerialNumberTypesData, StocktakingData, InventoryConfigurationData,\n                                                 STOCKTAKING_STATUSES, STOCKTAKING_STATUS_COLORS, SEARCH_MAX_LENGTH,\n                                                 Session, SERIAL_NUMBER_TYPES) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.$parent.vm.stocktaking = StocktakingData;\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.stocktaking = null;\n    vm.isNewStocktaking = !$state.params.id;\n    vm.minDate = new Date();\n    vm.searchSelectHeader = new Array(2);\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.inventoryConfigurationData = InventoryConfigurationData ? InventoryConfigurationData.results[0] : null\n\n    // Methods\n    vm.gotoStocktakings = gotoStocktakings;\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.create = create;\n    vm.getStatusLabel = getStatusLabel;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.querySearch = querySearch;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.disableDetails = disableDetails;\n\n\n    // Initialization\n    initialize();\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n      if (vm.isNewStocktaking) {\n        vm.stocktaking = {\n          partial: false,\n          reset_stock: false,\n          apply_raw_materials: false,\n          serial_number_type: vm.inventoryConfigurationData.stocktaking_default_serial_number_type\n        };\n      } else {\n        vm.stocktaking = angular.copy(StocktakingData);\n        vm.warehouse = vm.stocktaking.source_warehouse_instance;\n        vm.brand = vm.stocktaking.brand_instance;\n        vm.category = vm.stocktaking.category_instance;\n        vm.subcategory = vm.stocktaking.subcategory_instance;\n        vm.season = vm.stocktaking.season_instance;\n        vm.collection = vm.stocktaking.collection_instance;\n        if (vm.stocktaking.created_by) {\n          vm.stocktaking.created_by_instance.full_name = vm.stocktaking.created_by_instance.first_name + ' ' + vm.stocktaking.created_by_instance.last_name;\n        }\n        if (vm.stocktaking.applied_by) {\n          vm.stocktaking.applied_by_instance.full_name = vm.stocktaking.applied_by_instance.first_name + ' ' + vm.stocktaking.applied_by_instance.last_name;\n        }\n      }\n    }\n\n    function disableDetails() {\n      return vm.stocktaking.changing_status || vm.stocktaking.status >= 2 || (!Session.hasPermission('inventory.stocktakings.create') && !Session.hasPermission('inventory.stocktakings.stocktaking.details.update_draft'));\n\n    }\n\n    function gotoStocktakings() {\n      $state.go('app.inventory.stocktakings');\n    }\n\n    function save() {\n      vm.stocktaking.source_warehouse = vm.warehouse.id;\n      vm.stocktaking.brand = vm.brand ? vm.brand.id : null;\n      vm.stocktaking.category = vm.category ? vm.category.id : null;\n      vm.stocktaking.subcategory = vm.subcategory ? vm.subcategory.id : null;\n      vm.stocktaking.season = vm.season ? vm.season.id : null;\n      vm.stocktaking.collection = vm.collection ? vm.collection.id : null;\n      api.inventories.stocktakings.update(\n        vm.stocktaking,\n        function (result) {\n          if (result.id) {\n            $scope.detailsForm.$setPristine();\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('STOCKTAKING.STOCKTAKING_UPDATED'))\n                .position('top right'));\n          }\n        }\n      );\n    }\n\n    function cancel() {\n      if (vm.isNewStocktaking) {\n        $window.history.back();\n      } else {\n        initialize();\n        $scope.detailsForm.$setPristine();\n      }\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('STOCKTAKINGS.' + STOCKTAKING_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return STOCKTAKING_STATUS_COLORS[status];\n    }\n\n    function create() {\n      vm.stocktaking.source_warehouse = vm.warehouse.id;\n      vm.stocktaking.brand = vm.brand ? vm.brand.id : null;\n      vm.stocktaking.category = vm.category ? vm.category.id : null;\n      vm.stocktaking.subcategory = vm.subcategory ? vm.subcategory.id : null;\n      vm.stocktaking.season = vm.season ? vm.season.id : null;\n      vm.stocktaking.collection = vm.collection ? vm.collection.id : null;\n\n      api.inventories.stocktakings.save(\n        vm.stocktaking,\n        function (result) {\n          if (result.id)\n            $state.go('app.inventory.stocktakings.stocktaking.products', {id: result.id});\n        }\n      );\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function querySearch(filter) {\n      var deferred = $q.defer();\n      var searchText;\n      var apiFunc;\n      if (filter === 'warehouse') {\n        vm.searchWarehouse = vm.searchWarehouse.substring(0, vm.SEARCH_MAX_LENGTH);\n        searchText = vm.searchWarehouse;\n        apiFunc = api.inventories.warehouses;\n      } else if (filter === 'brand') {\n        vm.searchBrand = vm.searchBrand.substring(0, vm.SEARCH_MAX_LENGTH);\n        searchText = vm.searchBrand;\n        apiFunc = api.inventories.brands;\n      } else if (filter === 'category') {\n        vm.searchCategory = vm.searchCategory.substring(0, vm.SEARCH_MAX_LENGTH);\n        searchText = vm.searchCategory;\n        apiFunc = api.inventories.categories;\n      } else if (filter === 'subcategory') {\n        vm.searchSubcategory = vm.searchSubcategory.substring(0, vm.SEARCH_MAX_LENGTH);\n        searchText = vm.searchSubcategory;\n        apiFunc = api.inventories.subcategories;\n      } else if (filter === 'season') {\n        vm.searchSeason = vm.searchSeason.substring(0, vm.SEARCH_MAX_LENGTH);\n        searchText = vm.searchSeason;\n        apiFunc = api.inventories.seasons;\n      } else if (filter === 'collection') {\n        vm.searchCollection = vm.searchCollection.substring(0, vm.SEARCH_MAX_LENGTH);\n        searchText = vm.searchCollection;\n        apiFunc = api.manufactures.collections;\n      }\n\n      var data;\n      if(filter === 'subcategory') {\n        data = {\n          search: searchText,\n          category_id: vm.category.id,\n\n        };\n      }else {\n        data = {\n          search: searchText,\n        };\n      }\n\n      apiFunc.get(data, function (results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchaseProductsController', InventoryPurchaseProductsController);\n\n  /** @ngInject */\n  function InventoryPurchaseProductsController($scope,\n                                               $mdDialog,\n                                               $state,\n                                               $filter,\n                                               $translate,\n                                               WarehousesData,\n                                               TaxesData,\n                                               PurchaseOrderData,\n                                               HTTP_STATUS,\n                                               PURCHASE_ORDER_STATUSES_REVERSE,\n                                               PURCHASE_ORDER_STATUSES,\n                                               api\n  ) {\n\n    $scope.$parent.vm.currentNavItem = 'products';\n    $scope.$parent.vm.purchase = PurchaseOrderData;\n\n    var vm = this;\n\n    vm.purchase = null;\n    vm.changed = false;\n    vm.warehouses = WarehousesData.results;\n    vm.taxes = TaxesData.results;\n    vm.tax = null;\n    vm.editable = null;\n\n    // Data\n    vm.visualizationOptions = {\n      productOptions: {\n        shippingDate: {\n          id: 'shipping_date',\n          translation: 'PURCHASE.SHIPPING_DATE',\n          selected: true,\n          visible: true\n        },\n        price: {\n          id: 'price',\n          translation: 'SALE.SHOW_PRICES',\n          selected: true,\n          visible: true\n        },\n        show_tax_select: {\n          id: 'tax_select',\n          translation: 'ACCOUNT.TAXES',\n          selected: true,\n          visible: true\n        },\n        discount: {\n          id: 'discount',\n          translation: 'PURCHASE.DISCOUNT',\n          selected: true,\n          visible: true\n        },\n        show_prices_incl_tax: {\n          id: 'show_prices_incl_tax',\n          translation: 'SALE.SHOW_INCL_TAXES',\n          selected: false,\n          visible: false\n        }\n      },\n      productVariantOptions: {\n        sku: {\n          id: 'sku',\n          translation: 'SALE.SHOW_SKUS',\n          selected: false,\n          visible: true\n        },\n        leftAmount: {\n          id: 'leftAmount',\n          translation: 'PRODUCT.STOCK',\n          selected: false,\n          visible: true\n        },\n        rightAmount: {\n          id: 'rightAmount',\n          translation: 'PRODUCT.MINIMUM_STOCK',\n          selected: true,\n          visible: true\n        }\n      }\n    };\n\n\n    // Methods\n    vm.gotoPurchases = gotoPurchases;\n    vm.getStatusLabel = getStatusLabel;\n\n    // Register Events\n    vm.initializePurchaseEvent = $scope.$on('initialize-purchase', function(event, args) {\n      PurchaseOrderData = args.purchase;\n      initialize();\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.initializePurchaseEvent();\n    });\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.purchase = angular.copy(PurchaseOrderData);\n\n      if (vm.purchase.is_replenishment && (vm.purchase.creating_replenishment || vm.purchase.pending_to_create_replenishment)) {\n        initPullReplenishment();\n      }\n    }\n\n    function initPullReplenishment() {\n      checkReplenishmentCompleted();\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        escapeToClose: false,\n        locals: {\n          title: 'PURCHASE.CREATING_REPLENISHMENT_PURCHASE',\n          body: 'PURCHASE.CREATING_REPLENISHMENT_PURCHASE_BODY'\n        }\n      });\n    }\n\n    function checkReplenishmentCompleted() {\n      api.inventories.purchaseOrders.get(\n        {\n          id: vm.purchase.id,\n          option: 'replenishment-completed'\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (response.completed) {\n              $mdDialog.hide();\n              vm.fetching = false;\n              updatePurchaseData();\n              vm.dtInstance.DataTable.draw();\n            } else {\n              vm.timeoutPromise = $timeout(checkReplenishmentCompleted, 3000);\n            }\n          }\n        }\n      );\n    }\n\n    function updatePurchaseData() {\n      api.inventories.purchaseOrders.get(\n        {\n          id: vm.purchase.id\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.purchase = response;\n            vm.getTotals();\n          }\n        }\n      );\n    }\n\n    function gotoPurchases() {\n      $state.go('app.inventory.purchases');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[status]);\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchasePaymentsController', InventoryPurchasePaymentsController);\n\n  /** @ngInject */\n  function InventoryPurchasePaymentsController($scope, $state, $stateParams, $compile, $mdDialog, $mdToast, $filter, $translate, api, Session,\n                                                 PurchaseOrderData, DTColumnBuilder, ORDER_DELIVERY_STATUSES, ORDER_DELIVERY_STATUS_COLORS, PaymentMethodsData) {\n\n    $scope.$parent.vm.currentNavItem = \"payments\";\n    $scope.$parent.vm.purchase = PurchaseOrderData;\n\n    // Data\n    var vm = this;\n    vm.purchase = PurchaseOrderData;\n    vm.creatingNewDelivery = false;\n    vm.dtInstance = {};\n    vm.paymentMethods = PaymentMethodsData.results;\n\n    // Methods\n    vm.gotoPurchases = gotoPurchases;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n    }\n\n    function gotoPurchases() {\n      $state.go('app.inventory.purchases');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchaseInvoiceController', InventoryPurchaseInvoiceController);\n\n\n  function InventoryPurchaseInvoiceController($scope, $state, INVOICE_TYPES, $timeout, $stateParams, $compile, PurchaseOrderData, api, Session,\n                                              DTColumnBuilder, $filter, $translate, HTTP_STATUS, $mdToast) {\n\n    $scope.$parent.vm.currentNavItem = \"invoices\";\n    $scope.$parent.vm.purchase = PurchaseOrderData;\n\n    var vm = this;\n\n    //data\n    vm.purchaseOrder = PurchaseOrderData;\n    vm.creatingNewDelivery = false;\n    vm.search = null;\n    vm.creatingNewDelivery = false;\n\n    // Methods\n    vm.createDocument = createDocument;\n\n    vm.dtInstance = {};\n    vm.ajax = {\n      dataSrc: \"data\",\n      url: api.urls.inventories.purchaseOrderInvoices.replace('/:id/',''),\n      type: 'get',\n      headers: {\n        \"Authorization\": \"Token \" + Session.token\n      },\n      data: function(d){\n        d.pagination = 'datatable';\n        d.purchase_order = $stateParams.id;\n      }\n    };\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      //order: [[ 0, 'desc' ]],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      //scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        emptyTable: $filter('translate')('PURCHASE.EMPTY_INVOICE_TABLE')\n        // url: 'app/main/apps/inventory/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTablePurchaseOrderDeliveriesProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n         var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTablePurchaseOrderDeliveriesProductsController'));\n\n        return state;\n\n      }\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('PURCHASES.SERIAL_NUMBER'))\n        .renderWith(function (data, type, full) {\n          if (full.id) {\n              if (full && full.autocode) {\n                return '<a ui-sref=\"app.accounting.invoices.invoice({id:' + full.id + '})\">' + full.autocode + '</a>';\n              }\n              return '<a ui-sref=\"app.accounting.invoices.invoice({id:' + full.id + '})\">' + $filter('translate')('PURCHASE.NO_REFERENCE') + '</a>';\n            }\n            return \"-\";\n        }),\n      DTColumnBuilder.newColumn('billing_date').withTitle($filter('translate')('PURCHASE.BILLING_DATE'))\n        .renderWith(function (data, type, full) {\n          return data ? $filter('date')(data, 'dd-MM-yyyy') : '-';\n        }),\n      DTColumnBuilder.newColumn('payment_status').withTitle($filter('translate')('PURCHASE.PAYMENT_STATUS'))\n        .renderWith(function (data, type, full) {\n          if (data === 10) {\n            return '<span class=\"text-boxed\">' + $filter('translate')('INVOICE.PENDING') + '</span>';\n          } else {\n            return '<span class=\"text-boxed green\">' + $filter('translate')('INVOICE.PAID') + '</span>';\n          }\n        }),\n\n      DTColumnBuilder.newColumn('total_incl_tax').withTitle($filter('translate')('PURCHASE.TOTAL'))\n        .renderWith(function (data, type, full) {\n            return data ? data + ' ' + $filter('currencyCharacter')(Session.company.currency) : '-';\n        }),\n\n      DTColumnBuilder.newColumn('expiration_date').withTitle($filter('translate')('PURCHASE.PAYMENT_EXPIRATION'))\n        .renderWith(function (data, type, full) {\n          return data ? $filter('date')(data, 'dd-MM-yyyy')+'<md-tooltip md-direction=\"bottom\">'+$filter('translate')('PURCHASE.INVOICE_PAYMENT_EXPIRATION_DATE')+'</md-tooltip>' : '-';\n        }),\n      DTColumnBuilder.newColumn('pdf_file').withTitle($filter('translate')('PURCHASE.FILE'))\n        .renderWith(function (data, type, full) {\n          var filename = '';\n          if (data) {\n            filename = data.split('/');\n            filename = filename[filename.length - 1].split('?')[0];\n          }\n\n          var icon = '';\n          if(full.pending_update_pdf_file){\n            icon = '<md-icon class=\"ml-5\" md-svg-src=\"assets/images/custom-material-design-icons/alert-circle-outline.5706d718.svg\"><md-tooltip>' + $filter('translate')('INVOICE.REGENERATE_INVOICE_MESSAGE') + '</md-tooltip></md-icon>';\n          }\n\n          return data ? '<div layout=\"row\" layout-align=\"start center\"><a target=\"_blank\" href=\"' + data + '\">' + filename + '</a>' + icon + '</div>': '-';\n        })\n\n    ];\n\n\n    // Methods\n    vm.newDelivery = newDelivery;\n\n    function newDelivery() {\n\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n      });\n      return nRow;\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#purchase-search');\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function createDocument() {\n      if (Session.hasPermission('app.inventory.purchases.purchase.invoices.create')) {\n        vm.waiting = true;\n        api.accounting.invoices.save({\n          option: 'create-empty-invoice-from-purchase-order',\n          purchase_order: vm.purchaseOrder.id,\n          invoice_type: INVOICE_TYPES.INVOICE,\n          is_received: true\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.dtInstance.DataTable.draw();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n          }\n          vm.waiting = false;\n        });\n      }\n\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchaseDetailsController', InventoryPurchaseDetailsController);\n\n  /** @ngInject */\n  function InventoryPurchaseDetailsController($scope, $state, $filter, $window, $mdToast, $document, api, $q, InventoryConfigurationData, WarehousesData, PurchaseData, SeasonsData, SerialNumberTypesData, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, Session, $mdDialog, HTTP_STATUS, SERIAL_NUMBER_TYPES) {\n\n    $scope.$parent.vm.currentNavItem = 'details';\n    $scope.$parent.vm.purchase = PurchaseData;\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.purchase = null;\n    vm.isNewPurchase = false;\n    vm.taToolbar = [['undo', 'redo']];\n    vm.minDate = new Date();\n    vm.warehouses = WarehousesData.results;\n    vm.seasons = SeasonsData.results;\n    vm.searchSelectHeader = new Array(3);\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.inventoryConfigurationData = InventoryConfigurationData ? InventoryConfigurationData.results[0] : null;\n    vm.creating = false;\n    vm.updating = false;\n    vm.maxDate = new Date();\n    // Methods\n    vm.gotoPurchases = gotoPurchases;\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.create = create;\n    vm.querySearch = querySearch;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.selectContact = selectContact;\n    vm.displayFunction = displayFunction;\n    vm.checkChangeProvider = checkChangeProvider;\n    vm.continueDisable = continueDisable;\n    // Register Events\n    vm.initializePurchaseEvent = $scope.$on('initialize-purchase', function(event, args) {\n      PurchaseData = args.purchase;\n      initialize();\n    });\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.initializePurchaseEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n      if (PurchaseData == null) {\n        vm.isNewPurchase = true;\n        vm.purchase = {\n          tags: [],\n          serial_number_type: vm.inventoryConfigurationData ? vm.inventoryConfigurationData.purchase_order_default_serial_number_type : null,\n          delivery_notes_serial_number_type: vm.inventoryConfigurationData ? vm.inventoryConfigurationData.purchase_order_delivery_default_serial_number_type : null,\n          self_supplied: false,\n          target_warehouse: vm.warehouses.find(function(warehouse) {\n            return warehouse.is_principal;\n          }) || vm.warehouses.length ? vm.warehouses[0].id : null,\n          season: vm.seasons.length ? vm.seasons[0].id : null,\n          is_replenishment: false,\n          replenishment_period_start: null,\n          replenishment_period_end: null,\n          minimum_stock_replenishment: false,\n          no_stock_replenishment: false,\n          negative_stock_replenishment: false\n        };\n      } else {\n        vm.purchase = angular.copy(PurchaseData);\n        if (vm.purchase.start_date) {\n          vm.purchase.start_date = new Date(vm.purchase.start_date);\n        }\n        if (vm.purchase.cancel_date) {\n          vm.purchase.cancel_date = new Date(vm.purchase.cancel_date);\n        }\n        if (vm.purchase.replenishment_period_start) {\n          vm.purchase.replenishment_period_start = new Date(vm.purchase.replenishment_period_start);\n        }\n        if (vm.purchase.replenishment_period_end) {\n          vm.purchase.replenishment_period_end = new Date(vm.purchase.replenishment_period_end);\n        }\n      }\n    }\n\n    /**\n     * Go to products page\n     */\n    function gotoPurchases() {\n      $state.go('app.inventory.purchases');\n    }\n\n    function checkChangeProvider() {\n      return vm.purchase.status !== 1;\n    }\n\n    function save() {\n      if (Session.hasPermissions('inventory.purchases.purchase.details.update')) {\n        vm.updating = true;\n        var obj = angular.copy(vm.purchase);\n        if (obj.start_date) obj.start_date = $filter('date')(obj.start_date, 'yyyy-MM-dd');\n        if (obj.cancel_date) obj.cancel_date = $filter('date')(obj.cancel_date, 'yyyy-MM-dd');\n\n        if (obj.replenishment_period_start) obj.replenishment_period_start = $filter('date')(obj.replenishment_period_start, 'yyyy-MM-dd');\n        if (obj.replenishment_period_end) obj.replenishment_period_end = $filter('date')(obj.replenishment_period_end, 'yyyy-MM-dd');\n\n        api.inventories.purchaseOrders.update(obj, function(result, response, status) {\n          if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            showReloadToast();\n          } else {\n            if (result.id) {\n              PurchaseData = result;\n              $scope.detailsForm.$setPristine();\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('PURCHASE.PURCHASE_UPDATED'))\n                  .position('top right'));\n            }\n          }\n          vm.updating = false;\n        });\n      }\n    }\n\n    function cancel() {\n      if (vm.isNewPurchase) {\n        $window.history.back();\n      } else {\n        initialize();\n        $scope.detailsForm.$setPristine();\n      }\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return PURCHASE_ORDER_STATUS_COLORS[status];\n    }\n\n    /**\n     * Creates the new purchase object\n     */\n    function create() {\n      if (vm.creating) {\n        return;\n      }\n\n      if (!Session.hasPermissions('inventory.purchases.create')) {\n        return;\n      }\n\n      vm.creating = true;\n      var obj = angular.copy(vm.purchase);\n      if (obj.start_date) obj.start_date = $filter('date')(obj.start_date, 'yyyy-MM-dd');\n      if (obj.cancel_date) obj.cancel_date = $filter('date')(obj.cancel_date, 'yyyy-MM-dd');\n\n      if (obj.replenishment_period_start) obj.replenishment_period_start = $filter('date')(obj.replenishment_period_start, 'yyyy-MM-dd');\n      if (obj.replenishment_period_end) obj.replenishment_period_end = $filter('date')(obj.replenishment_period_end, 'yyyy-MM-dd');\n\n      obj.enqueue_replenish = true;\n      api.inventories.purchaseOrders.save(obj, function(result, response, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          $state.go('app.inventory.purchases.purchase.products', { id: result.id });\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          vm.creating = false;\n        }\n      });\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function querySearch() {\n      var deferred = $q.defer();\n      vm.searchContact = vm.searchContact.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get({\n        search: vm.searchContact\n      }, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function displayFunction(contact) {\n      var contactName = '';\n      if (contact.name) {\n        contactName += contact.name;\n      }\n      if (contact.first_name) {\n        contactName += contact.name ? ' ' + contact.first_name : contact.first_name;\n      }\n      if (contact.last_name) {\n        contactName += contact.name || contact.first_name ? ' ' + contact.last_name : contact.last_name;\n      }\n      return contactName;\n    }\n\n    function selectContact(item) {\n      if (typeof item === 'object') {\n        if (item && item.id && (item.name || item.first_name) && !(vm.isNewPurchase)) {\n          $mdDialog.show({\n            controller: 'ChangeProviderController as vm',\n            templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/change-provider/change-provider.html',\n            clickOutsideToClose: false,\n            escapeToClose: false,\n            parent: angular.element($document.find('body')),\n            locals: {\n              purchaseOrder: vm.purchase,\n              provider_id: item.id\n            }\n          }).then();\n        }\n        vm.purchase.contact = item.id;\n      } else {\n        vm.purchase.contact = null;\n      }\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function continueDisable() {\n      if (vm.purchase.is_replenishment && !vm.purchase.replenishment_period_start) {\n        return true;\n      }\n      return vm.creating;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchaseDeliveryController', InventoryPurchaseDeliveryController);\n\n  /** @ngInject */\n  function InventoryPurchaseDeliveryController($scope, $document, OrderDeliveryLine, $state, $q, $window, $http, $interval, $mdDialog, $mdToast, $filter, api, $stateParams,\n                                               $cookies, PurchaseOrderData, Session, DTColumnBuilder, $compile, $translate,\n                                               PurchaseOrderDeliveryData, Invoice, ORDER_DELIVERY_STATUSES, HTTP_STATUS, $rootScope,\n                                               ORDER_DELIVERY_STATUSES_REVERSE, PURCHASE_ORDER_STATUSES_REVERSE, ORDER_DELIVERY_STATUS_COLORS,\n                                               MAX_PRODUCTS_PER_PDF, SEARCH_MAX_LENGTH, TaxesData) {\n\n    $scope.$parent.vm.currentNavItem = 'deliveries';\n    $scope.$parent.vm.purchase = PurchaseOrderData;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.visualizationOptions = {\n      filters: {\n        pending: false\n      },\n      productOptions: {\n        shippingDate: {\n          id: 'shipping_date',\n          translation: 'PURCHASE.SHIPPING_DATE',\n          selected: true,\n          visible: true\n        },\n        price: {\n          id: 'price',\n          translation: 'SALE.SHOW_PRICES',\n          selected: true,\n          visible: true\n        },\n        show_tax_select: {\n          id: 'tax_select',\n          translation: 'ACCOUNT.TAXES',\n          selected: true,\n          visible: true\n        },\n        discount: {\n          id: 'discount',\n          translation: 'PURCHASE.DISCOUNT',\n          selected: true,\n          visible: true\n        },\n        show_prices_incl_tax: {\n          id: 'show_prices_incl_tax',\n          translation: 'SALE.SHOW_INCL_TAXES',\n          selected: false,\n          visible: false\n        }\n      },\n      productVariantOptions: {\n        sku: {\n          id: 'sku',\n          translation: 'SALE.SHOW_SKUS',\n          selected: false,\n          visible: true\n        },\n        leftAmount: {\n          id: 'leftAmount',\n          translation: 'ORDER.ORDERED',\n          selected: true,\n          visible: true\n        },\n        rightAmount: {\n          id: 'rightAmount',\n          translation: 'ORDER.RECEIVED',\n          selected: true,\n          visible: true\n        }\n      }\n    };\n\n    vm.summary = {};\n    vm.purchase = null;\n    vm.printing = false;\n    vm.fetching = false;\n    vm.purchaseOrderDelivery = angular.copy(PurchaseOrderDeliveryData);\n    vm.creatingNewDelivery = false;\n    vm.changingStatus = false;\n    vm.updatingTotal = false;\n    vm.orderedIcon = {\n      label: 'icon-unfold-more',\n      description: 'icon-unfold-more',\n      quantity: 'icon-unfold-more',\n      price_excl_tax: 'icon-unfold-more',\n      discount: 'icon-unfold-more',\n      total_price_excl_tax: 'icon-unfold-more',\n      total_price_incl_tax: 'icon-unfold-more'\n    };\n\n    vm.taxes = TaxesData.results;\n    vm.tax = null;\n\n    // Methods\n    vm.gotoPurchases = gotoPurchases;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.saveExpectedDate = saveExpectedDate;\n    vm.setShowSkusCookie = setShowSkusCookie;\n    vm.unbindInvoice = unbindInvoice;\n    vm.unbindInvoiceDialog = unbindInvoiceDialog;\n    vm.linkWithInvoice = linkWithInvoice;\n    vm.createInvoice = createInvoice;\n    vm.isNotAllowedToEdit = isNotAllowedToEdit;\n    vm.orderBy = orderBy;\n    vm.isDisabledDelivery = isDisabledDelivery;\n    vm.downloadInvoicePdf = downloadInvoicePdf;\n    vm.getFilename = getFilename;\n\n    // Initialization\n    initialize();\n\n    function getFilename(url) {\n      if (url) {\n        var m = url.toString().match(/.*\\/(.+?)\\./);\n        if (m && m.length > 1) {\n          return m[1];\n        }\n      }\n      return '';\n    }\n\n    // Functions\n    function initialize() {\n      vm.purchase = PurchaseOrderData;\n      vm.purchaseOrderDelivery = angular.copy(PurchaseOrderDeliveryData);\n      if (vm.purchaseOrderDelivery.invoice) {\n        vm.purchaseOrderDelivery.invoice = new Invoice(vm.purchaseOrderDelivery.invoice);\n      }\n\n      vm.initializePurchaseEvent = $scope.$on('initialize-purchase', function(event, args) {\n        PurchaseOrderData = args.purchase;\n        initialize();\n      });\n\n      vm.getSummaryEvent = $scope.$on('get-summary::purchaseOrderDeliveryController', getTotalOrderProductVariants);\n\n      $scope.$on('$destroy', function() {\n        vm.initializePurchaseEvent();\n      });\n      $scope.$on('$destroy', function() {\n        vm.getSummaryEvent();\n      });\n\n    }\n\n    function getTotalOrderProductVariants() {\n      vm.updatingTotal = true;\n      api.inventories.purchaseOrderDeliveries.get(\n        {\n          id: vm.purchaseOrderDelivery.id,\n          option: 'get-total-order-summary'\n        }, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.updatingTotal = false;\n            vm.summary = response;\n\n          } else {\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('GENERAL.ERROR'))\n                .position('top right'));\n          }\n        });\n    }\n\n    function gotoPurchases() {\n      $state.go('app.inventory.purchases');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PURCHASE.' + ORDER_DELIVERY_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status) {\n      return ORDER_DELIVERY_STATUS_COLORS[status];\n    }\n\n    function unbindInvoiceDialog(callback) {\n      var autocode = vm.purchaseOrderDelivery.invoice.autocode ? vm.purchaseOrderDelivery.invoice.autocode : $filter('translate')('PURCHASE.NO_REFERENCE');\n\n      var confirm = $mdDialog.confirm({\n        onComplete: function afterShowAnimation() {\n          var $dialog = angular.element(document.querySelector('md-dialog'));\n          var $actionsSection = $dialog.find('md-dialog-actions');\n          var $cancelButton = $actionsSection.children()[0];\n          var $confirmButton = $actionsSection.children()[1];\n          angular.element($confirmButton).addClass('stroked md-warn');\n          angular.element($cancelButton).addClass('stroked md-primary');\n        }\n      })\n        .title($filter('translate')('PURCHASE.UNBIND_INVOICE'))\n        .htmlContent($filter('translate')('PURCHASE.UNBIND_INVOICE_TEXT', { 'autocode': autocode }))\n        .ariaLabel($filter('translate')('PURCHASE.UNBIND_INVOICE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.UNBIND'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (typeof callback !== 'undefined') {\n          unbindInvoice(callback);\n        } else {\n          unbindInvoice();\n        }\n      });\n    }\n\n    function unbindInvoice() {\n      api.inventories.purchaseOrderDeliveries.update({\n          id: vm.purchaseOrderDelivery.id,\n          option: 'unbind-invoice'\n        },\n        function(response, callback, status) {\n          if (status === 200) {\n            vm.purchaseOrderDelivery.invoice = null;\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY'))\n              .position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right'));\n          }\n        });\n    }\n\n    function saveExpectedDate() {\n      api.inventories.purchaseOrderDeliveries.partialUpdate(\n        {\n          id: vm.purchaseOrderDelivery.id,\n          shipped_at: vm.purchaseOrderDelivery.shipped_at,\n          expected_at: vm.purchaseOrderDelivery.expected_at,\n          origin_code: vm.purchaseOrderDelivery.origin_code\n        },\n        function(response) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY'))\n            .position('top right'));\n        }\n      );\n    }\n\n    vm.ngFlowOptions = {\n      // You can configure the ngFlow from here\n      target: api.urls.inventories.purchaseOrderDeliveryFiles.replace('/:id/', ''),\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000,\n      query: {\n        purchase_order_delivery: vm.purchaseOrderDelivery.id\n      }\n    };\n    vm.ngFlow = {\n      // ng-flow will be injected into here through its directive\n      flow: {}\n    };\n    vm.dropping = false;\n    vm.firstImageLoaded = false;\n\n    // Methods\n    vm.fileAdded = fileAdded;\n    vm.filesAdded = filesAdded;\n    vm.upload = upload;\n    vm.fileSuccess = fileSuccess;\n    vm.deleteFile = deleteFile;\n    vm.editRelatedInvoice = editRelatedInvoice;\n    vm.unbindInvoice = unbindInvoice;\n\n    // Initialization\n    init();\n\n\n    // Functions\n    function init() {\n      api.inventories.purchaseOrderDeliveryFiles.get(\n        { purchase_order_delivery: vm.purchaseOrderDelivery.id },\n        function(response, callback, status) {\n          vm.files = response.results;\n          vm.files.map(function(files) {\n            files.type = 'file';\n          });\n          if (vm.files.length > 0) {\n            vm.firstImageLoaded = true;\n          }\n        }\n      );\n    }\n\n    function fileAdded(file, event, flow) {\n      // Prepare the temp file data for media list\n      var uploadingFile = {\n        id: file.uniqueIdentifier,\n        file: file,\n        type: 'uploading'\n      };\n      // Append it to the media list\n      vm.files.unshift(uploadingFile);\n    }\n\n    function filesAdded(files, event, flow) {\n      files.forEach(function(file) {\n        var uploadingFile = {\n          id: file.uniqueIdentifier,\n          file: file,\n          type: 'uploading'\n        };\n        vm.files.unshift(uploadingFile);\n      });\n    }\n\n    function upload(files, event, flow) {\n      flow.files = [];\n      files.forEach(function(file) {\n        flow.files.push(file);\n        file.progressValue = 0;\n        file.interval = $interval(function() {\n          file.progressValue = file.progress();\n          if (file.progressValue === 1) {\n            $interval.cancel(file.interval);\n          }\n        }, 100);\n      });\n      flow.opts.headers = {\n        'Authorization': 'Token ' + Session.token\n      };\n      flow.upload();\n    }\n\n    function fileSuccess(file, message) {\n      // Iterate through the media list, find the one we\n      // are added as a temp and replace its data\n      // Normally you would parse the message and extract\n      // the uploaded file data from it\n      angular.forEach(vm.files, function(media, index) {\n        if (media.id === file.uniqueIdentifier) {\n          // Normally you would update the media item\n          // from database but we are cheating here!\n          /*var fileReader = new FileReader();\n          fileReader.readAsDataURL(media.file.file);\n          fileReader.onload = function (event)\n          {\n            media.url = event.target.result;\n          };*/\n\n          // Update the image type so the overlay can go away\n          angular.extend(media, JSON.parse(message));\n          media.type = 'file';\n          vm.firstImageLoaded = true;\n        }\n      });\n    }\n\n    function deleteFile(file) {\n      if (Session.hasPermission('app.inventory.purchases.purchase.invoices.update')) {\n        var confirm = $mdDialog.confirm({\n          onComplete: function afterShowAnimation() {\n            var $dialog = angular.element(document.querySelector('md-dialog'));\n            var $actionsSection = $dialog.find('md-dialog-actions');\n            var $cancelButton = $actionsSection.children()[0];\n            var $confirmButton = $actionsSection.children()[1];\n            angular.element($confirmButton).addClass('stroked md-warn');\n            angular.element($cancelButton).addClass('stroked md-primary');\n          }\n        })\n          .title($filter('translate')('PURCHASE.DELETE_DOCUMENT'))\n          .htmlContent($filter('translate')('PURCHASE.DELETE_DOCUMENT_TEXT', { 'document_name': vm.getFilename(file.file) }))\n          .ariaLabel($filter('translate')('PURCHASE.DELETE_DOCUMENT'))\n          .targetEvent(file)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          api.inventories.purchaseOrderDeliveryFiles.delete({ id: file.id }, function(response) {\n            var index = vm.files.indexOf(file);\n            vm.files.splice(index, 1);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n          });\n        });\n      }\n    }\n\n    function createInvoice() {\n      if (Session.hasPermission('app.inventory.purchases.purchase.invoices.create')) {\n        api.inventories.purchaseOrderDeliveriesLinkToInvoices.update({\n            purchase_order: vm.purchase.id,\n            deliveries: [vm.purchaseOrderDelivery.id],\n            option: 'link-or-create-invoice'\n          },\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.purchaseOrderDelivery.invoice = new Invoice(response);\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      }\n    }\n\n    function linkWithInvoice() {\n      $mdDialog.show({\n        controller: 'LinkWithInvoiceController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/link-with-invoice/link-with-invoice.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          url: api.urls.accounting.invoices.replace('/:id/', ''),\n          deliveries: [vm.purchaseOrderDelivery.id],\n          purchaseOrder: vm.purchase\n        }\n      }).then(function(invoice) {\n        vm.purchaseOrderDelivery.invoice = invoice;\n      });\n    }\n\n    function editRelatedInvoice() {\n      linkWithInvoice();\n    }\n\n    function setShowSkusCookie() {\n      $cookies.put('ndPurchaseProductsShowSkusButton', vm.showPrices);\n    }\n\n    function isNotAllowedToEdit() {\n      return vm.purchaseOrderDelivery.invoice && vm.purchaseOrderDelivery.invoice.status >= 1;\n    }\n\n    function isDisabledDelivery() {\n      return vm.changingStatus;\n    }\n\n    function orderBy(column) {\n      var newIcon;\n      if (vm.orderedIcon[column] === 'icon-chevron-up') {\n        newIcon = 'icon-chevron-down';\n        vm.purchaseOrderDelivery.purchase_order_delivery_lines = vm.purchaseOrderDelivery.purchase_order_delivery_lines.sort(function(a, b) {\n          if (a[column] < b[column]) {\n            return -1;\n          }\n          if (a[column] > b[column]) {\n            return 1;\n          }\n          return 0;\n        });\n      } else {\n        newIcon = 'icon-chevron-up';\n        vm.purchaseOrderDelivery.purchase_order_delivery_lines = vm.purchaseOrderDelivery.purchase_order_delivery_lines.sort(function(a, b) {\n          if (a[column] < b[column]) {\n            return 1;\n          }\n          if (a[column] > b[column]) {\n            return -1;\n          }\n          return 0;\n        });\n      }\n      vm.orderedIcon = {\n        label: 'icon-unfold-more',\n        description: 'icon-unfold-more',\n        quantity: 'icon-unfold-more',\n        price_excl_tax: 'icon-unfold-more',\n        discount: 'icon-unfold-more',\n        total_price_excl_tax: 'icon-unfold-more',\n        total_price_incl_tax: 'icon-unfold-more'\n      };\n      vm.orderedIcon[column] = newIcon;\n    }\n\n    function downloadInvoicePdf() {\n      api.private.v2.accounting.invoices.print({\n        id: vm.purchaseOrderDelivery.invoice.id\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchaseDeliveriesController', InventoryPurchaseDeliveriesController);\n\n  /** @ngInject */\n  function InventoryPurchaseDeliveriesController($scope, $document, $state, $stateParams, $compile, $mdDialog, $mdToast, $filter, $translate, api, Session,\n                                                 PurchaseOrderData, DTColumnBuilder, ORDER_DELIVERY_STATUSES, ORDER_DELIVERY_STATUS_COLORS, UiGridService) {\n\n    $scope.$parent.vm.currentNavItem = \"deliveries\";\n    $scope.$parent.vm.purchase = PurchaseOrderData;\n\n    // Data\n    var vm = this;\n    vm.purchase = PurchaseOrderData;\n    vm.selected = [];\n    vm.salesStorageLabel = \"UIGridInventoryPurchaseDeliveriesControllerV1\";\n    vm.purchasesStatus = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {}, nonStorableFilters: {\n        purchase_order: $stateParams.id\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.creatingNewDelivery = false;\n\n     /* invoice: {\n        name: 'PURCHASE.RELATED_INVOICE', field: 'invoice', selected: true, visible: true,\n        dtcb: DTColumnBuilder.newColumn('invoice').withTitle($filter('translate')('PURCHASE.RELATED_INVOICE'))\n          .renderWith(function (data, type, full) {\n            if (!data) {\n              if (!full.has_files) {\n                return \"-\";\n              } else {\n                return '<div layout=\"row\" layout-align=\"space-around center\"> - <md-icon  md-font-icon=\"icon-paperclip\">' +\n                  '<md-tooltip md-direction=\"bottom\">' + $filter('translate')('PURCHASE.ATTACHED_DOCUMENT') +\n                  '</md-tooltip></md-icon> </div>';\n              }\n            }\n            if (!data.autocode) {\n              if (!full.has_files) {\n                return '<a ui-sref=\"app.accounting.invoices.invoice({id:' + data.id + '})\">' + $filter('translate')('PURCHASE.NO_REFERENCE') + '</a>';\n              } else {\n                return '<div layout=\"row\" layout-align=\"space-around center\"><a ui-sref=\"app.accounting.invoices.invoice({id:' + data.id + '})\">' + $filter('translate')('PURCHASE.NO_REFERENCE') + '</a> <md-icon  md-font-icon=\"icon-paperclip\">' +\n                  '<md-tooltip md-direction=\"bottom\">' + $filter('translate')('PURCHASE.ATTACHED_DOCUMENT') +\n                  '</md-tooltip></md-icon> </div>';\n              }\n            } else {\n              if (!full.has_files) {\n                return '<div><a ui-sref=\"app.accounting.invoices.invoice({id:' + data.id + '})\">' + data.autocode + '</a>'\n              } else {\n                return '<div layout=\"row\" layout-align=\"space-around center\"><a ui-sref=\"app.accounting.invoices.invoice({id:' + data.id + '})\">' + data.autocode + '</a> <md-icon  md-font-icon=\"icon-paperclip\">' +\n                  '<md-tooltip md-direction=\"bottom\">' + $filter('translate')('PURCHASE.ATTACHED_DOCUMENT') +\n                  '</md-tooltip></md-icon> </div>';\n              }\n            }\n          })\n      },*/\n\n    // Methods\n    vm.gotoPurchases = gotoPurchases;\n    vm.newDelivery = newDelivery;\n    vm.linkWithInvoice = linkWithInvoice;\n\n    // Functions\n\n    function linkWithInvoice() {\n      $mdDialog.show({\n        controller: 'LinkWithInvoiceController as vm',\n        templateUrl: 'app/main/apps/inventory/views/purchase/dialogs/link-with-invoice/link-with-invoice.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          url: api.urls.accounting.invoices.replace('/:id/', ''),\n          deliveries: vm.selected,\n          purchaseOrder: vm.purchase\n        }\n      }).then(function (invoice) {\n        vm.selected = [];\n        vm.drawTable();\n      });\n    }\n\n    function gotoPurchases() {\n      $state.go('app.inventory.purchases');\n    }\n\n    function newDelivery(ev) {\n\n      if (vm.creatingNewDelivery)\n        return;\n\n      vm.creatingNewDelivery = true;\n      var draftOnProcess = false;\n      if (draftOnProcess) {\n        $mdDialog.show(\n          $mdDialog.alert()\n            .parent(angular.element(document.querySelector('#purchase-deliveries')))\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title('Delivery in course')\n            .textContent('You already have a delivery opened. Close it before open a new one.')\n            .ariaLabel('Delivery in course')\n            .ok('OK')\n            .targetEvent(ev)\n        );\n      } else {\n        api.inventories.purchaseOrderDeliveries.save(\n          {\n            purchase_order: vm.purchase.id,\n            serial_number_type: vm.purchase.delivery_notes_serial_number_type\n          },\n          function (response) {\n            $state.go('app.inventory.purchases.purchase.deliveries.delivery', {\n              id: vm.purchase.id,\n              orderDeliveryId: response.id\n            });\n          }\n        );\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller(\n      'InventoryProductUidStocksController',\n      InventoryProductUidStocksController\n    );\n\n  /** @ngInject */\n  function InventoryProductUidStocksController(\n    $scope,\n    $state,\n    $timeout,\n    $document,\n    $filter,\n    $mdSidenav,\n    $compile,\n    $mdToast,\n    $mdDialog,\n    $stateParams,\n    DTColumnBuilder,\n    $translate,\n    api,\n    Session,\n    ProductData,\n    WarehousesData,\n    STOCK_MOVEMENT_TYPES,\n    TRANSFER_ORDER_STATUSES,\n    TRANSFER_ORDER_STATUS_COLORS,\n    PURCHASE_ORDER_STATUSES,\n    PURCHASE_ORDER_STATUS_COLORS,\n    HTTP_STATUS,\n    UidStock\n  ) {\n    $scope.$parent.vm.currentNavItem = 'stock';\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n\n    vm.product = ProductData;\n    vm.columnUidLotName = vm.product.manage_lots ? 'PRODUCT.LOT' : 'PRODUCT.SERIES';\n    vm.storageLabel = Session.company.id + '::dataTableInventoryProductUidStocksController::'+vm.product.id;\n    vm.session = Session;\n    vm.currentMovItem = 'uid-stocks';\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.colors = [];\n    vm.sizes = [];\n    vm.addingUidStock = false;\n    vm.statusFilter = 'available';\n    vm.newUidStock = {\n      uid: '',\n      amount: vm.product.manage_lots ? null : 1\n    };\n    vm.dtInstance = {};\n    vm.search = null;\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.uidStocks.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          Authorization: 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.product_id = vm.product.id;\n          d.status = vm.statusFilter;\n          if (vm.filters.productVariants.length) {\n            d.product_variant_ids = vm.filters.productVariants.join(',');\n          }\n          if (vm.filters.warehouses.length) {\n            d.warehouse_ids = vm.filters.warehouses.join(',');\n          }\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      order: [1, 'desc'],\n      createdRow: createdRow,\n      // rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [25, 50, 100, 250],\n      pageLength: 50,\n      //scrollY     : 'auto',\n      autoWidth: false,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        if (vm.statusFilter) {\n          data.statusFilter = vm.statusFilter;\n        }\n        if (vm.filters.warehouses) {\n          data.warehouses = vm.filters.warehouses;\n        }\n        if (vm.filters.productVariants) {\n          data.productVariants = vm.filters.productVariants;\n        }\n        localStorage.setItem(vm.storageLabel,JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(vm.storageLabel));\n        if (state) {\n          if (state.statusFilter) {\n            vm.statusFilter = state.statusFilter;\n          }\n          if (state.warehouses) {\n            vm.filters.warehouses = state.warehouses;\n          }\n          if (state.productVariants) {\n            vm.filters.productVariants = state.productVariants;\n          }\n        }\n\n        return state;\n      }\n    };\n    vm.mapUIDs = {};\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('last_update').notVisible(),\n      DTColumnBuilder.newColumn('movements')\n        .notSortable()\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          var result = '<div layout=\"row\" layout-align=\"start start\">';\n          result += '<div class=\"cursor-pointer\" ng-click=\"vm.showMovements(' + full.id + ')\">';\n          result += '<md-icon md-svg-src=\"assets/images/custom-material-design-icons/doble-arrow.ad5d6bd9.svg\"></md-icon>';\n          result += '<md-tooltip>{{\"PRODUCT.SHOW_STOCK_MOVEMENT\" | translate }}</md-tooltip></div></div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('product_variant_name')\n        .withTitle($filter('translate')('PRODUCT.PRODUCT_VARIANT'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('uid')\n        .withTitle($filter('translate')(vm.columnUidLotName))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          vm.mapUIDs[full.id] = full;\n          var result = '<div layout=\"row\" layout-align=\"start start\">';\n          result += '<div class=\"uid-text\">' + data + '</div>';\n          result += '<div class=\"pl-10\"><md-icon class=\"cursor-pointer s16\" ng-click=\"vm.copyUID(' + full.id + ')\" md-font-icon=\"icon-content-copy\">';\n          result += '<md-tooltip ng-if=\"vm.product.manage_lots\">{{\"PRODUCT.COPY_LOT\" | translate}}</md-tooltip><md-tooltip ng-if=\"!vm.product.manage_lots\">{{\"PRODUCT.COPY_UID\" | translate}}</md-tooltip></md-icon></div>';\n          return result;\n\n        }),\n      DTColumnBuilder.newColumn('amount')\n        .withTitle($filter('translate')('PRODUCT.AMOUNT'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('expiration_date')\n        .withTitle($filter('translate')('PRODUCT.EXPIRATION_DATE'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          if (data) {\n            return $filter('date')(data, 'dd/MM/yyyy');\n          } else {\n            return '';\n          }\n        }),\n      DTColumnBuilder.newColumn('received_at')\n        .withTitle($filter('translate')('PRODUCT.RECEIVED_AT'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          if (data) {\n            return $filter('date')(data, 'dd/MM/yyyy');\n          } else {\n            return '';\n          }\n        }),\n      DTColumnBuilder.newColumn('stock_warehouse_name')\n        .withTitle($filter('translate')('PRODUCT.WAREHOUSE'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('purchase_order_delivery')\n        .withTitle($filter('translate')('PRODUCT.PURCHASE_ORDER'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          if (data) {\n            return '<a ui-sref=\"app.inventory.purchases.purchase.deliveries.delivery({id:' + full.purchase_order.id + ', orderDeliveryId:' + data.id + '})\">' + data.autocode + '</a>';\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('sale_order_delivery')\n        .withTitle($filter('translate')('PRODUCT.SALE_ORDER'))\n        .withClass('')\n        .renderWith(function(data, type, full) {\n          if (data) {\n            return '<a ui-sref=\"app.wholesale.sales.sale.deliveries.delivery({id:' + full.sale_order.id + ', orderDeliveryId:' + data.id + '})\">' + data.autocode + '</a>';\n          } else if (full.pos_order) {\n            var autocode = full.pos_order.autocode ? full.pos_order.autocode : $filter('translate')('ORDER.ORDER_DRAFT')\n            return '<a ui-sref=\"app.sale.sales_log.order({id:' + full.pos_order.id + '})\">' + autocode + '</a>';\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('actions')\n        .withOption('className', 'text-right nowrap')\n        .notSortable()\n        .renderWith(function(data, type, full) {\n          var result = '<div layout=\"row\" layout-align=\"end center\">';\n          result += '<div class=\"w-40\">';\n          result += '<md-menu> <md-button class=\"md-icon-button no-margin\" ng-click=\"$mdOpenMenu()\" aria-label=\"more\">';\n          result += '<md-icon class=\"vertical-dots\" md-font-icon=\"icon-dots-vertical\"></md-icon></md-button><md-menu-content>';\n          result += '<md-menu-item ng-disabled=\"!vm.session.hasPermissions(\\'inventory.products.product.uid_stocks.update\\')\" ng-if=\"vm.product.manage_lots\"><md-button ng-disabled=\"' + !full.is_available + '\" ng-click=\"vm.editUID(' + full.id + ')\"><md-icon md-font-icon=\"icon-pencil\" class=\"s20 md-font material-icons icon-pencil\" role=\"img\" aria-label=\"icon-pencil\"></md-icon>';\n          result += '{{\"GENERAL.EDIT\" | translate}}</md-button></md-menu-item><md-divider ng-if=\"vm.product.manage_lots\"></md-divider>';\n          result += '<md-menu-item ng-disabled=\"!vm.session.hasPermissions(\\'inventory.products.product.uid_stocks.delete\\')\"><md-button ng-disabled=\"' + !full.is_available + '\" ng-click=\"vm.deleteUID(' + full.id + ')\"><md-icon md-font-icon=\"icon-trash\" className=\"s20 md-font material-icons icon-trash\" role=\"img\" aria-label=\"icon-trash\"></md-icon>';\n          result += '{{\"GENERAL.DELETE\" | translate}}</md-button></md-menu-item>';\n          if (full.amount === 0) {\n            result += '<md-menu-item><md-button ng-click=\"vm.resurrectUID(' + full.id + ')\"><md-icon md-font-icon=\"icon-backup-restore\" class=\"s20 md-font material-icons icon-backup-restore\" role=\"img\" aria-label=\"icon-backup-restore\"></md-icon>';\n            result += '{{\"PRODUCT.RESURRECT_UID\" | translate}}</md-button></md-menu-item>';\n          }\n          result += '</md-menu-content></md-menu>';\n          result += '</div>';\n          result += '</div>';\n          return result;\n        })\n    ];\n    vm.dynamicFilters = {\n      productVariants: {\n        svgIcon: 'assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg',\n        title: 'GENERAL.FILTER_BY_PRODUCT_VARIANT',\n        visible: false\n      },\n      warehouses: {\n        svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n        title: 'GENERAL.FILTER_BY_WAREHOUSE',\n        visible: false\n      }\n    };\n    vm.filters = {\n      productVariants: [],\n      warehouses: []\n    };\n\n    // Methods\n    vm.refreshUidStocks = refreshUidStocks;\n    vm.uidListenerCallback = uidListenerCallback;\n    vm.deleteUID = deleteUID;\n    vm.editUID = editUID;\n    vm.resurrectUID = resurrectUID;\n    vm.copyUID = copyUID;\n    vm.showMovements = showMovements;\n    vm.toggleFilterVisibility = toggleFilterVisibility;\n    vm.filterChanged = filterChanged;\n    vm.getProductVariantName = getProductVariantName;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (Session.hasSubscription && !Session.hasFeatureOrAddon($state.current.name)) {\n        $state.go('app.inventory.products.product.overview', { id: vm.product.id });\n      }\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#uid-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function getProductVariantName(productVariant) {\n      return productVariant.sku ? productVariant.sku + ' (' + productVariant.product_variant_name + ')' : productVariant.product_variant_name;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function refreshUidStocks() {\n      vm.dtInstance.rerender();\n    }\n\n    function uidListenerCallback(uid) {\n      if (uid && !vm.newUidStock.uid) {\n        vm.search = uid;\n      }\n    }\n\n    function showMovements(uid) {\n      $mdDialog\n        .show({\n          controller: 'UidMovementsDialogController as vm',\n          templateUrl:\n            'app/main/apps/inventory/views/product/dialogs/uid-movements/uid-movements.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          locals: {\n            UIDId: uid,\n            product: vm.product\n          }\n        });\n    }\n\n    function copyUID(id) {\n      var uid = vm.mapUIDs[id].uid;\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({ position: 'fixed', opacity: '0' });\n      textarea.val(uid);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n\n    function resurrectUID(uid) {\n      $mdDialog.show({\n        controller: 'ResurrectUidDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uid-resurrect/uid-resurrect-dialog.html',\n        clickOutsideToClose: true,\n        multiple: true,\n        focusOnOpen: true,\n        locals: {\n          uidID: uid\n        }\n      }).then(function() {\n        vm.dtInstance.rerender();\n      });\n    }\n\n    function deleteUID(uid) {\n      var confirm = $mdDialog\n        .confirm()\n        .title($filter('translate')('PRODUCT.DELETE_UID'))\n        .textContent($filter('translate')('PRODUCT.DELETE_UID_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        api.inventories.uidStocks.delete({ id: uid }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            refreshUidStocks();\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent(\n                  $filter('translate')('GENERAL.DELETED_SUCCESSFULLY')\n                )\n                .position('top right')\n            );\n          } else if (status === HTTP_STATUS.HTTP_406_NOT_ACCEPTABLE) {\n            $mdDialog.show(\n              $mdDialog\n                .alert()\n                .title($filter('translate')('PRODUCT.UID_HAS_STOCK_MOVEMENT'))\n                .textContent(\n                  $filter('translate')('PRODUCT.UID_HAS_STOCK_MOVEMENT_MESSAGE')\n                )\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .ok($filter('translate')('GENERAL.OK'))\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        });\n      });\n    }\n\n    function editUID(uidStockId) {\n      var uid = new UidStock(vm.mapUIDs[uidStockId]);\n      $mdDialog.show({\n        controller: 'EditUidDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-edit/edit-uid-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          uidStock: uid,\n          manageLots: vm.product.manage_lots,\n          warehouses: vm.warehouses,\n          productVariants: vm.product.product_variants,\n          received: true,\n          hideNotes: false,\n          hideMovementReason: false,\n          disableWarehouseSelector: false,\n          disableVariantSelector: false,\n          createMovement: true\n        }\n      }).then(function(result) {\n        // Refresh the table\n        vm.dtInstance.rerender();\n      });\n    }\n\n    function toggleFilterVisibility(property, filter) {\n      filter.visible = !filter.visible;\n      if (!filter.visible) {\n        filterChanged();\n      }\n    }\n\n    function filterChanged() {\n      vm.dtInstance.DataTable.draw();\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductTranslationsController', InventoryProductTranslationsController);\n\n  /** @ngInject */\n  function InventoryProductTranslationsController($scope, $state, ProductData, ProductTranslationsData, Session)\n  {\n\n    $scope.$parent.vm.currentNavItem = \"translations\";\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.productTranslations = ProductTranslationsData.results;\n    \n\n    // Methods\n    vm.gotoProducts = gotoProducts;\n    vm.getVariantName = getVariantName;\n    vm.cancelProduct = cancelProductCallback;\n    vm.saveProductCallback = saveProductCallback;\n    vm.cancelProductPricesCallback = cancelProductPricesCallback;\n    vm.saveProductVariantsCallback = saveProductVariantsCallback;\n    vm.cancelProductVariantsCallback = cancelProductVariantsCallback;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize(){\n\n    }\n\n    function getVariantName(variantId){\n      return vm.variantsById[variantId].code;\n    }\n\n\n    /**\n     * Go to products page\n     */\n    function gotoProducts()\n    {\n      $state.go('app.inventory.products');\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * has finished the cancellProduct function\n     */\n    function cancelProductCallback(){\n      vm.product = angular.copy(ProductData);\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * directive has finished the saveProduct function\n     */\n    function saveProductCallback(){\n      ProductData = angular.copy(vm.product);\n    }\n\n\n    /**\n     * Function that is called when ndProductPricingTiers\n     * has finishd the save function\n     */\n    function cancelProductPricesCallback(){\n      vm.product.prices = angular.copy(ProductData.prices);\n    }\n\n\n    /**\n     * Function that is called when ndProductVariants\n     * has finishd the save function\n     */\n    function saveProductVariantsCallback(){\n      ProductData.product_variants = angular.copy(vm.product.product_variants);\n    }\n\n    /**\n     * Function that is called when ndProductVariants\n     * has canceled the save function\n     */\n    function cancelProductVariantsCallback(){\n      vm.product.has_variants = angular.copy(ProductData.has_variants);\n      vm.product.product_variants = angular.copy(ProductData.product_variants);\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductStockController', InventoryProductStockController);\n\n  /** @ngInject */\n  function InventoryProductStockController(\n    $scope,\n    WarehousesData,\n    ProductData,\n    Session){\n\n    $scope.$parent.vm.currentNavItem = 'stock';\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.warehouses = angular.copy(WarehousesData.results);\n    vm.currentMovItem = 'stock';\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductStockMovementsController', InventoryProductStockMovementsController);\n\n  /** @ngInject */\n  function InventoryProductStockMovementsController($scope, $state, $stateParams, $timeout, $filter, $compile, DTColumnBuilder, $mdDialog,\n                                                    $translate, HTTP_STATUS, api, Session, ProductData, WarehousesData, $mdToast, STOCK_MOVEMENT_TYPES, TRANSFER_ORDER_STATUSES,\n                                                    TRANSFER_ORDER_STATUS_COLORS, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUS_COLORS, STOCK_MOVEMENT_REASONS,\n                                                    POS_ORDER_PAYMENT_STATUSES, POS_ORDER_PAYMENT_STATUSES_COLORS, SALE_ORDER_STATUSES, UiGridService) {\n\n    //$scope.$parent.vm.currentNavItem = \"stock-movements\";\n    $scope.$parent.vm.currentNavItem = 'stock';\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.movementDictById = {};\n    vm.product = ProductData;\n    vm.currentMovItem = $stateParams.option ? $stateParams.option : 'movements';\n    vm.currentStateItem = $stateParams.option ? $stateParams.option : 'movements';\n    vm.orderStatuses = TRANSFER_ORDER_STATUSES;\n    vm.orderStatusColors = TRANSFER_ORDER_STATUS_COLORS;\n    vm.purchaseOrderStatuses = PURCHASE_ORDER_STATUSES;\n    vm.purchaseOrderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.selectedWarehouse = null;\n    vm.selectedSize = null;\n    vm.selectedColor = null;\n    vm.dtInstance = {};\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n    vm.status = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {},\n      nonStorableFilters: {\n        product_id: vm.product.id\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.transfersStorageLabel = 'InventoryProductStockMovementsControllerTransfersV2';\n    vm.purchasesStorageLabel = 'InventoryProductStockMovementsControllerPurchasesV1';\n    vm.wholesaleSalesStorageLabel = 'InventoryProductStockMovementsControllerSalesV1';\n    vm.salesStorageLabel = 'InventoryProductStockMovementsControllerPosOrdersV1';\n\n    vm.dtOptionsMovements = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.stockMovements.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.product_id = vm.product.id;\n          if (vm.selectedWarehouse) {\n            d.warehouse_id = vm.selectedWarehouse;\n          }\n          if (vm.selectedSize) {\n            d.size_id = vm.selectedSize;\n          }\n          if (vm.selectedColor) {\n            d.color_id = vm.selectedColor;\n          }\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      order: [0, 'desc'],\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100, 250],\n      pageLength: 10,\n      autoWidth: false,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableInventoryProductStockTakesController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        if ($stateParams.loadTableState)\n          return JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryProductStockTakesController'));\n        return settings;\n      },\n      headerCallback: function(thead, data, start, end, display) {\n        $(thead).find('th.column-before').attr('title', $filter('translate')('PRODUCT.BEFORE'));\n        $(thead).find('th.column-move').attr('title', $filter('translate')('PRODUCT.MOVE'));\n        $(thead).find('th.column-after').attr('title', $filter('translate')('PRODUCT.AFTER'));\n      }\n    };\n\n    vm.dtColumnsMovements = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('datetime').withTitle($filter('translate')('PRODUCT.DATE')).withClass('')\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd/MM/yyyy HH:mm');\n        }),\n      DTColumnBuilder.newColumn('autocode').notSortable().withTitle($filter('translate')('PRODUCT.ORIGIN')).withClass('')\n        .renderWith(function(data, type, full) {\n          if (data === 'NOT_AVAILABLE') {\n            return '';\n          }\n          if (data === 'REMOVED') {\n            return '<em class=\"secondary-text\">' + $filter('translate')('PRODUCT.STOCK_MOVEMENT_REMOVED') + '</em>';\n          }\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_STOCKTAKING ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_STOCKTAKING_CANCELLED) {\n            if (full.object_id) {\n              return '<nd-a state=\"\\'app.inventory.stocktakings.stocktaking.products\\'\" state-params=\"{id: ' + full.object_id + '}\">' + data + '</nd-a>';\n            } else {\n              return $filter('translate')('STOCKTAKING.STOCKTAKING');\n            }\n          }\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARATION_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEIVED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEPTION_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_TRANSFER_ALLOCATED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_TRANSFER_DEALLOCATED) {\n            return '<nd-a state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id: ' + full.object_id + ', search: \\'' + vm.product.name + '\\'}\">' + data + '</nd-a>';\n          }\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARATION_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION_CANCELLED) {\n            if (data.indexOf(' - ') === -1) {\n              return '<nd-a state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: ' + full.object_id + '}\">' + data + '</nd-a>';\n            }\n            var parentAutocode = data.split(' - ')[0];\n            var autocode = data.split(' - ')[1];\n            var result = '<div layout=\"row\" layout-align=\"start center\"><nd-a  class=\"mr-8\" state=\"\\'app.wholesale.sales.sale.products\\'\" state-params=\"{id: ' + full.parent_object_id + ', search: \\'' + vm.product.name + '\\'}\">' + parentAutocode + '</nd-a>';\n            result += '<nd-a state=\"\\'app.wholesale.sales.sale.deliveries.delivery\\'\" state-params=\"{id: ' + full.parent_object_id + ', orderDeliveryId: ' + full.object_id + ', search: \\'' + vm.product.name + '\\'}\">' + autocode + '</nd-a></div>';\n            return result;\n          }\n\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_SALE_ALLOCATED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_SALE_DEALLOCATED) {\n            if (data.indexOf(' - ') === -1) {\n              return '<nd-a state=\"\\'app.wholesale.sales.sale.products\\'\" state-params=\"{id: ' + full.object_id + '}\">' + data + '</nd-a>';\n            }\n            var parentAutocode = data.split(' - ')[0];\n            var autocode = data.split(' - ')[1];\n            var result = '<div layout=\"row\" layout-align=\"start center\"><nd-a  class=\"mr-8\" state=\"\\'app.wholesale.sales.sale.products\\'\" state-params=\"{id: ' + full.parent_object_id + ', search: \\'' + vm.product.name + '\\'}\">' + parentAutocode + '</nd-a>';\n            result += '<nd-a state=\"\\'app.wholesale.sales.sale.deliveries.delivery\\'\" state-params=\"{id: ' + full.parent_object_id + ', orderDeliveryId: ' + full.object_id + ', search: \\'' + vm.product.name + '\\'}\">' + autocode + '</nd-a></div>';\n            return result;\n          }\n\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEIVED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEPTION_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RETURNED) {\n            //                  ui-sref=\"app.inventory.purchases.purchase.deliveries.delivery({id:purchase_order_delivery.purchase_order, orderDeliveryId: purchase_order_delivery.id})\">\n            if (data.indexOf(' - ') === -1) {\n              return '<nd-a state=\"\\'app.inventory.purchases.purchase.deliveries.delivery\\'\" state-params=\"{id: ' + full.object_id + '}\">' + data + '</nd-a>';\n            }\n            var parentAutocode = data.split(' - ')[0];\n            var autocode = data.split(' - ')[1];\n            var result = '<div layout=\"row\" layout-align=\"start center\"><nd-a  class=\"mr-8\" state=\"\\'app.inventory.purchases.purchase.products\\'\" state-params=\"{id: ' + full.parent_object_id + '}\">' + autocode + '</nd-a>';\n            result += '<nd-a state=\"\\'app.inventory.purchases.purchase.deliveries.delivery\\'\" state-params=\"{id: ' + full.parent_object_id + ', orderDeliveryId: ' + full.object_id + '}\">' + parentAutocode + '</nd-a></div>';\n            return result;\n          }\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_ADJUSTMENT_ADJUSTED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_ADJUSTMENT_CANCELLED) {\n            return '<nd-a state=\"\\'app.inventory.adjustments.adjustment.products\\'\" state-params=\"{id: ' + full.object_id + '}\">' + data + '</nd-a>';\n          }\n          if (full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_REMOVAL ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_DEVOLUTION ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PENDING ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_ALLOCATED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_SHIPPED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PICKED_UP ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_RETURNED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_REMOVED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_ALLOCATED_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_SHIPPED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_ALLOCATED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_RETURN_RECEIVED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED_RECEIVED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURNED_RECEIVED_CANCELLED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_TO_PENDING ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_TO_PENDING ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURN_RECEIVED_TO_RETURNED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_ALLOCATED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_SHIPPED ||\n            full.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_PICKED_UP\n          ) {\n            if (Session.hasPermissions('app.sale.sales_log')) {\n              return '<a ng-click=\"vm.showSaleDialog(' + full.object_id + ')\" class=\"cursor-pointer\">' + data + '</a>';\n            }\n          }\n          return data;\n        }),\n      DTColumnBuilder.newColumn('type').withTitle($filter('translate')('PRODUCT.TYPE')).withClass('')\n        .renderWith(function(data, type, full) {\n          vm.movementDictById[full.id] = full;\n          var template = '<span>' + $filter('translate')('PRODUCT.' + STOCK_MOVEMENT_TYPES[data]) + '</span>';\n          if (full.reason) {\n            template += '<span class=\"cursor-pointer text-boxed ' + vm.getReasonStyle(full.reason) + '\" ' +\n              'ng-click=\"vm.showMovementDetails(' + full.id + ')\" ' +\n              'translate=\"' + 'MOVEMENTS.' + STOCK_MOVEMENT_REASONS[full.reason] + '\"> full.reason + </span>';\n          }\n          if (full.notes) {\n            template += '<span class=\"cursor-pointer text-boxed\" ng-click=\"vm.showMovementDetails(' + full.id + ')\"> ' + vm.trim(full.notes, 64) + '</span>';\n          }\n          return template;\n        }),\n      DTColumnBuilder.newColumn('before').withTitle($filter('translate')('PRODUCT.BEFORE_ABBR'))\n        .withClass('text-center column-before')\n        .renderWith(function(data, type, full) {\n          var color = data >= 0 ? '' : 'red-fg';\n          return '<span class=\" ' + color + '\">' + data + '</span>';\n        }),\n      DTColumnBuilder.newColumn('move').withTitle($filter('translate')('PRODUCT.MOVE_ABBR'))\n        .withClass('text-center column-move')\n        .renderWith(function(data, type, full) {\n          var color = data > 0 ? 'green' : '';\n          return '<span class=\"text-boxed black-fg ' + color + '\">' + data + '</span>';\n        }),\n      DTColumnBuilder.newColumn('after').withTitle($filter('translate')('PRODUCT.AFTER_ABBR'))\n        .withClass('text-center column-after')\n        .renderWith(function(data, type, full) {\n          var color = data >= 0 ? '' : 'red-fg';\n          return '<span class=\" ' + color + '\">' + data + '</span>';\n        }),\n      DTColumnBuilder.newColumn('warehouse').notSortable().withTitle($filter('translate')('PRODUCT.WAREHOUSE')).withClass('')\n        .renderWith(function(data, type, full) {\n          if (data) {\n            return data;\n          }\n          return '<em class=\"secondary-text\" translate=\"PRODUCT.DELETED_WAREHOUSE\"></em>';\n        }),\n      DTColumnBuilder.newColumn('color').notSortable().withTitle($filter('translate')('PRODUCT.COLOR')).withClass('')\n        .renderWith(function(data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('size').notSortable().withTitle($filter('translate')('PRODUCT.SIZE')).withClass('')\n        .renderWith(function(data, type, full) {\n          return data;\n        }),\n      DTColumnBuilder.newColumn('user').withTitle($filter('translate')('PRODUCT.USER')).withClass('')\n        .renderWith(function(data, type, full) {\n          if (!data) {\n            return '';\n          }\n          return '<div layout=\"row\" layout-align=\"start center\" class=\"nowrap\"><nd-user-picture fullname=\"\\'' + data + '\\'\" class=\"mr-5\"></nd-user-picture>' + data + '</div>';\n        })\n    ];\n\n    if (vm.currentMovItem == 'movements') {\n      vm.dtOptions = vm.dtOptionsMovements;\n      vm.dtColumns = vm.dtColumnsMovements;\n    }\n\n    // Methods\n    vm.refreshMovements = refreshMovements;\n    vm.getReasonStyle = getReasonStyle;\n    vm.trim = trim;\n    vm.showMovementDetails = showMovementDetails;\n    vm.showSaleDialog = showSaleDialog;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n    }\n\n    function getReasonStyle(reason) {\n      switch (reason) {\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_ROBBERY:\n          return 'red-bg white-fg';\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_EXPIRY:\n          return 'brown-bg white-fg';\n        case STOCK_MOVEMENT_REASONS.STOCK_MOVEMENT_REASON_BREAKAGE:\n          return 'black-bg white-fg';\n        default:\n          return '';\n      }\n    }\n\n    function trim(text, size) {\n      if (text && text.length > size) {\n        return text.substr(0, size) + '…';\n      }\n\n      return text;\n    }\n\n    function showMovementDetails(id) {\n      var movement = vm.movementDictById[id];\n\n      $mdDialog.show({\n        controller: 'StockMovementDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/stock-movement/stock-movement.html',\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          movement: movement,\n          readonly: false,\n          callback: function(movement) {\n            api.inventories.stockMovements.update(\n              movement,\n              function(response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  $mdToast\n                    .show($mdToast.simple()\n                      .textContent($filter('translate')('PRODUCT.STOCK_SAVED'))\n                      .position('top right'));\n                  refreshMovements();\n                }\n              });\n          }\n        }\n      });\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      if (vm.currentMovItem === 'sales') {\n        if (aData.deleted) {\n          // Deleted PosOrders style\n          $('td', nRow).addClass('red-900-fg no-text-strike md-red-100-bg');\n        } else if (aData.devolution_of || aData.amount < 0) {\n          // Devolutions style\n          $('td', nRow).addClass('orange-900-fg md-orange-50-bg');\n        }\n        return nRow;\n      }\n      if (aData.type === STOCK_MOVEMENT_TYPES.STOCK_MOVEMENT_TYPE_MANUAL_RESET) {\n        angular.element(nRow).addClass('red-100-bg');\n      }\n      return nRow;\n    }\n\n    function showSaleDialog(posOrderId) {\n      $mdDialog.show({\n        controller: 'SalePosOrderDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          previousPosOrderId: null\n        },\n        resolve: {\n          PosOrderData: function(apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: posOrderId,\n              serializer: 'PosOrderWithDevolutionsSerializer'\n            });\n          }\n        }\n      });//.then(function(refresh) {}, function() {});\n    }\n\n    function refreshMovements() {\n      vm.dtInstance.DataTable.draw();\n    }\n\n  }\n\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductStockLocationsController', InventoryProductStockLocationsController);\n\n  /** @ngInject */\n  function InventoryProductStockLocationsController($scope,\n                                                    $state,\n                                                    $mdToast,\n                                                    $mdDialog,\n                                                    $filter,\n                                                    api,\n                                                    ProductData,\n                                                    WarehouseData,\n                                                    StockLocations,\n                                                    Session,\n                                                    // Models\n                                                    StockLocation,\n                                                    // Constants\n                                                    GS1_BARCODE_TYPES_BY_ID,\n                                                    HTTP_STATUS) {\n\n    $scope.$parent.vm.currentNavItem = 'stock-locations';\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.stockLocations = angular.copy(StockLocations.results.map(function (sl) {\n      return new StockLocation(sl);\n    }));\n    vm.stockLocationsDict = {};\n    vm.warehouses = angular.copy(WarehouseData.results);\n\n    vm.GS1_BARCODE_TYPES_BY_ID = GS1_BARCODE_TYPES_BY_ID;\n\n    // Methods\n    vm.save = save;\n    vm.copy = copy;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize() {\n      if(Session.hasSubscription && !Session.hasFeatureOrAddon($state.current.name)){\n        $state.go('app.inventory.products.product.overview', {id: vm.product.id});\n      }\n      // Cambiar el orden de las claves: primero warehouse, luego productVariant\n      vm.warehouses.forEach(function (warehouse) {\n        vm.stockLocationsDict[warehouse.id] = {};\n        // vm.product.product_variants.forEach(function (productVariant) {\n        //   vm.stockLocationsDict[warehouse.id][productVariant.id] = [];\n        // });\n      });\n\n      vm.stockLocations.forEach(function (stockLocation) {\n        if (Array.isArray(stockLocation.product_variants)) {\n          stockLocation.product_variants.forEach(function(productVariant) {\n            if(vm.stockLocationsDict[stockLocation.warehouse] && !vm.stockLocationsDict[stockLocation.warehouse][productVariant.id]) {\n              vm.stockLocationsDict[stockLocation.warehouse][productVariant.id] = [];\n            }\n            if(vm.stockLocationsDict[stockLocation.warehouse] && vm.stockLocationsDict[stockLocation.warehouse][productVariant.id]){\n              vm.stockLocationsDict[stockLocation.warehouse][productVariant.id].push(stockLocation);\n            }\n          });\n        }\n      });\n      vm.filteredWarehouses = vm.warehouses.filter(function (warehouse) {\n        return vm.stockLocationsDict[warehouse.id] && Object.keys(vm.stockLocationsDict[warehouse.id]).length > 0;\n      });\n    }\n\n    function save(productVariantId, warehouseId) {\n      // Cambiar el orden de acceso: primero warehouseId, luego productVariantId\n      if (vm.stockLocationsDict[warehouseId][productVariantId].id) {\n        if (!vm.stockLocationsDict[warehouseId][productVariantId].location) {\n          // Delete\n          api.inventories.stockLocations.delete(vm.stockLocationsDict[warehouseId][productVariantId],\n            function (response, callback, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_DELETED')).position('top right'));\n                vm.stockLocationsDict[warehouseId][productVariantId] = new StockLocation(response);\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            });\n        } else {\n          // Update\n          api.inventories.stockLocations.update(vm.stockLocationsDict[warehouseId][productVariantId],\n            function (response, callback, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n                vm.stockLocationsDict[warehouseId][productVariantId] = new StockLocation(response);\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            });\n        }\n      } else {\n        if (!vm.stockLocationsDict[warehouseId][productVariantId].location) {\n          // Local delete\n          vm.stockLocationsDict[warehouseId][productVariantId] = new StockLocation({\n            product_variant: productVariantId,\n            warehouse: warehouseId\n          });\n        } else {\n          // Update\n          api.inventories.stockLocations.save(vm.stockLocationsDict[warehouseId][productVariantId],\n            function (response, callback, status) {\n              if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_CREATED')).position('top right'));\n                vm.stockLocationsDict[warehouseId][productVariantId] = new StockLocation(response);\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            });\n        }\n      }\n    }\n\n    function copy(productVariantId, warehouseId) {\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.COPY_LOCATION_TITLE'))\n        .htmlContent($filter('translate')('PRODUCT.COPY_LOCATION_MESSAGE', {\n          location: vm.stockLocationsDict[warehouseId][productVariantId].location,\n          warehouse: vm.warehouses.find(function(w){\n            return w.id === warehouseId;\n          }).name\n        }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('PRODUCT.COPY_LOCATION'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function () {\n        api.inventories.stockLocations.copy(angular.extend({option: 'copy'}, vm.stockLocationsDict[warehouseId][productVariantId]),\n          function (response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n              response.forEach(function(result){\n                vm.stockLocationsDict[result.warehouse][result.product_variant] = new StockLocation(result);\n              });\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      }, function(){});\n\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductProductVariantsController', InventoryProductProductVariantsController);\n\n  /** @ngInject */\n  function InventoryProductProductVariantsController($scope, $state, ProductData, PricingTiersData, VariantCategoriesData, Session)\n  {\n\n    $scope.$parent.vm.currentNavItem = \"product-variants\";\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.pricingTiers = PricingTiersData.results;\n    vm.variantCategories = angular.copy(VariantCategoriesData.results);\n\n    // Methods\n    vm.gotoProducts = gotoProducts;\n    vm.getVariantName = getVariantName;\n    vm.cancelProduct = cancelProductCallback;\n    vm.saveProductCallback = saveProductCallback;\n    vm.cancelProductPricesCallback = cancelProductPricesCallback;\n    vm.saveProductVariantsCallback = saveProductVariantsCallback;\n    vm.cancelProductVariantsCallback = cancelProductVariantsCallback;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize(){\n    }\n\n    function getVariantName(variantId){\n      return vm.variantsById[variantId].code;\n    }\n\n\n    /**\n     * Go to products page\n     */\n    function gotoProducts()\n    {\n      $state.go('app.inventory.products');\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * has finished the cancellProduct function\n     */\n    function cancelProductCallback(){\n      vm.product = angular.copy(ProductData);\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * directive has finished the saveProduct function\n     */\n    function saveProductCallback(){\n      ProductData = angular.copy(vm.product);\n    }\n\n\n    /**\n     * Function that is called when ndProductPricingTiers\n     * has finishd the save function\n     */\n    function cancelProductPricesCallback(){\n      vm.product.prices = angular.copy(ProductData.prices);\n    }\n\n\n    /**\n     * Function that is called when ndProductVariants\n     * has finishd the save function\n     */\n    function saveProductVariantsCallback(){\n      ProductData.product_variants = angular.copy(vm.product.product_variants);\n    }\n\n    /**\n     * Function that is called when ndProductVariants\n     * has canceled the save function\n     */\n    function cancelProductVariantsCallback(){\n      vm.product.has_variants = angular.copy(ProductData.has_variants);\n      vm.product.product_variants = angular.copy(ProductData.product_variants);\n    }\n    $scope.$on('productUpdated', function(event, updatedProduct) {\n      vm.product = updatedProduct;\n    });\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductPricingTiersController', InventoryProductPricingTiersController);\n\n  /** @ngInject */\n  function InventoryProductPricingTiersController($scope, $state, ProductData, PricingTiersData, ProductProviderPricesData,\n                                             $mdToast, api, $filter, $mdDialog, Session, TaxesData)\n  {\n\n    $scope.$parent.vm.currentNavItem = \"pricing-tiers\";\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.pricingTiers = PricingTiersData.results;\n    vm.productProviderPrices = ProductProviderPricesData.results;\n    vm.taxes = TaxesData.results;\n\n\n    // Methods\n    vm.gotoProducts = gotoProducts;\n    vm.getVariantName = getVariantName;\n    vm.cancelProduct = cancelProductCallback;\n    vm.saveProductCallback = saveProductCallback;\n    vm.cancelProductPricesCallback = cancelProductPricesCallback;\n    vm.saveProductVariantsCallback = saveProductVariantsCallback;\n    vm.cancelProductVariantsCallback = cancelProductVariantsCallback;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize(){\n\n    }\n\n    function getVariantName(variantId){\n      return vm.variantsById[variantId].code;\n    }\n\n\n    /**\n     * Go to products page\n     */\n    function gotoProducts()\n    {\n      $state.go('app.inventory.products');\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * has finished the cancellProduct function\n     */\n    function cancelProductCallback(){\n      vm.product = angular.copy(ProductData);\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * directive has finished the saveProduct function\n     */\n    function saveProductCallback(){\n      ProductData = angular.copy(vm.product);\n    }\n\n\n    /**\n     * Function that is called when ndProductPricingTiers\n     * has finishd the save function\n     */\n    function cancelProductPricesCallback(){\n      vm.product.prices = angular.copy(ProductData.prices);\n    }\n\n\n    /**\n     * Function that is called when ndProductVariants\n     * has finishd the save function\n     */\n    function saveProductVariantsCallback(){\n      ProductData.product_variants = angular.copy(vm.product.product_variants);\n    }\n\n    /**\n     * Function that is called when ndProductVariants\n     * has canceled the save function\n     */\n    function cancelProductVariantsCallback(){\n      vm.product.has_variants = angular.copy(ProductData.has_variants);\n      vm.product.product_variants = angular.copy(ProductData.product_variants);\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductOverviewController', InventoryProductOverviewController);\n\n  /** @ngInject */\n  function InventoryProductOverviewController($scope, ProductData, PricingTiersData, Session,\n                                              InventoryProductService, api) {\n\n    $scope.$parent.vm.currentNavItem = 'overview';\n    $scope.$parent.vm.product = ProductData;\n\n    var vm = this;\n\n    // Data\n    vm.product = ProductData;\n    vm.company = Session.company;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.taToolbar = [[]]; //['wordcount', 'charcount']];\n    vm.productVariantKpis = [];\n\n    // Methods\n    vm.getProductTags = getProductTags;\n    vm.getPricingTierName = getPricingTierName;\n    vm.getProductVariantPricingTierPrice = getProductVariantPricingTierPrice;\n\n    // Initialise\n    initialise();\n\n    // Functions:\n    function initialise() {\n\n      api.inventories.products.get({\n        id: vm.product.id,\n        option: 'product-variant-kpis'\n      }, function(response, callback, status) {\n        if (status == 200) {\n          vm.productVariantKpis = response.product_variant_kpis;\n        }\n      });\n      initMeasurements();\n    }\n\n    function initMeasurements() {\n      var tempMeasurements = [];\n      if (vm.product.width !== null) {\n        tempMeasurements.push(vm.product.width + Session.company.measurement_unit.toLowerCase());\n      }\n      if (vm.product.height !== null) {\n        tempMeasurements.push(vm.product.height + Session.company.measurement_unit.toLowerCase());\n      }\n      if (vm.product.depth !== null) {\n        tempMeasurements.push(vm.product.depth + Session.company.measurement_unit.toLowerCase());\n      }\n      vm.product.measurements = tempMeasurements.join(' x ');\n    }\n\n    function getProductTags() {\n      return vm.product.tags;\n    }\n\n    function getPricingTierName(pricingTierId) {\n      for (var i = 0; i < vm.pricingTiers.length; i++) {\n        if (vm.pricingTiers[i].id == pricingTierId)\n          return vm.pricingTiers[i].name;\n      }\n      return '';\n    }\n\n    function getProductVariantPricingTierPrice(productPrice, productVariant) {\n      for (var i = 0; i < productVariant.prices.length; i++) {\n        if (productVariant.prices[i].product_price == productPrice.id) {\n          return productVariant.prices[i].value;\n        }\n      }\n      return productPrice.value;\n    }\n  }\n\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductManufacturingController', InventoryProductManufacturingController);\n\n  /** @ngInject */\n  function InventoryProductManufacturingController(api, $q, $log, $timeout, $scope, $mdMedia, $state, ProductData, Session, SEARCH_MAX_LENGTH)\n  {\n\n    $scope.$parent.vm.currentNavItem = \"manufacturing\";\n    $scope.$parent.vm.product = ProductData;\n\n    var vm = this;\n\n    // Cons\n\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.selectedProductVariant = null;\n    vm.creatingCategory = false;\n    vm.selectedProductVariantManufacturings = null;\n    vm.loading = false;\n    vm.productSearchText = ''\n\n\n    // Methods\n    vm.selectSelectedProductVariant = selectSelectedProductVariant;\n    vm.addProductVariantManufacturing = addProductVariantManufacturing;\n    vm.manufacturingCategoryQuerySearch = manufacturingCategoryQuerySearch;\n    vm.createManufacturingCategory = createManufacturingCategory;\n    vm.productsQuerySearch = productsQuerySearch;\n    vm.productVariantsQuerySearch = productVariantsQuerySearch;\n    vm.calculateProductVariantManufacturingTotal = calculateProductVariantManufacturingTotal;\n    vm.selectProduct = selectProduct;\n    vm.selectProductVariant = selectProductVariant;\n    vm.selectManufacturingCategory = selectManufacturingCategory;\n    vm.updateProductVariantManufacturing = updateProductVariantManufacturing;\n    vm.removeProductVariantManufacturing = removeProductVariantManufacturing;\n    vm.calculateOtherCostTotal = calculateOtherCostTotal;\n    vm.calculateTotalCost = calculateTotalCost;\n    vm.getAutocompleteText = getAutocompleteText;\n    vm.getProductVariantAutocompleteText = getProductVariantAutocompleteText;\n    vm.getManufacturingCategoryAutocompleteText = getManufacturingCategoryAutocompleteText;\n    vm.setManufacturingDDPPrice = setManufacturingDDPPrice;\n    vm.copyManufacturingToProduct = copyManufacturingToProduct;\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize(){\n      selectSelectedProductVariant(vm.product.product_variants[0]);\n    }\n\n    function selectSelectedProductVariant(productVariant){\n      vm.loading = true;\n      vm.selectedProductVariant = productVariant;\n      vm.selectedProductVariantManufacturings = null;\n      api.manufactures.productVariantManufacturings.get({\n        product_variant_id: productVariant.id\n      }, function(response, callback, status){\n        if(status==200){\n          vm.selectedProductVariantManufacturings = response.results;\n        }\n        vm.loading = false;\n      })\n    }\n\n    function addProductVariantManufacturing(type){\n      vm.loading = true;\n\n      api.manufactures.productVariantManufacturings.save({\n        product_variant: vm.selectedProductVariant.id,\n        type: type\n      }, function(response, callback, status){\n\n        if(status==201){\n          vm.selectedProductVariantManufacturings.push(response);\n        }\n        vm.loading = false;\n      });\n    }\n\n    function updateProductVariantManufacturing(productVariantManufacturing) {\n      vm.loading = true;\n\n      if (productVariantManufacturing.selected_product_variant_instance && productVariantManufacturing.selected_product_variant_instance.ddp_price) {\n        productVariantManufacturing.cost_per_item = productVariantManufacturing.selected_product_variant_instance.ddp_price;\n      } else if (productVariantManufacturing.selected_product_instance && productVariantManufacturing.selected_product_instance.ddp_price) {\n        productVariantManufacturing.cost_per_item = productVariantManufacturing.selected_product_instance.ddp_price;\n      }\n\n      productVariantManufacturing.total_cost = Math.round(((productVariantManufacturing.quantity + productVariantManufacturing.wastage) * productVariantManufacturing.cost_per_item) * 100) / 100;\n\n      api.manufactures.productVariantManufacturings.update(\n        productVariantManufacturing, function(response, callback, status) {\n          vm.loading = false;\n        });\n    }\n\n    function removeProductVariantManufacturing(productVariantManufacturing){\n      vm.loading = true;\n      api.manufactures.productVariantManufacturings.delete(\n        {id: productVariantManufacturing.id}\n      , function(response, callback, status){\n\n        if(status==204){\n          for(var i=0; i<vm.selectedProductVariantManufacturings.length; i++){\n            if(vm.selectedProductVariantManufacturings[i].id == productVariantManufacturing.id){\n              vm.selectedProductVariantManufacturings.splice(i, 1);\n            }\n          }\n        }\n        vm.loading = false;\n      });\n    }\n\n    function productsQuerySearch(productVariantManufacturing) {\n      var deferred = $q.defer();\n      productVariantManufacturing.productSearchText = productVariantManufacturing.productSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.products.get(\n        {\n          //serializer: 'ProductPosFinderSerializer',\n          search: productVariantManufacturing.productSearchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          }\n          else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function productVariantsQuerySearch(productVariantManufacturing) {\n      var deferred = $q.defer();\n      productVariantManufacturing.productVariantSearchText = productVariantManufacturing.productVariantSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.productVariants.get(\n        {\n          search: productVariantManufacturing.productVariantSearchText,\n          product_id: productVariantManufacturing.selected_product\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          }\n          else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function manufacturingCategoryQuerySearch(productVariantManufacturing) {\n      var deferred = $q.defer();\n      productVariantManufacturing.manufacturingCategorySearchText = productVariantManufacturing.manufacturingCategorySearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.manufactures.manufacturingCategories.get(\n        {\n          search: productVariantManufacturing.manufacturingCategorySearchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          }\n          else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function getAutocompleteText(product) {\n      if(!!product){\n        return product.code + ' - ' + product.name;\n      }else{\n        return '-';\n      }\n    }\n\n    function getProductVariantAutocompleteText(productVariant) {\n      if(!!productVariant.size_name && !!productVariant.color_name){\n        return productVariant.size_name + ' / ' + productVariant.color_name + ' - ' + productVariant.barcode;\n      }else{\n        return '-';\n      }\n    }\n\n    function getManufacturingCategoryAutocompleteText(manufacturingCategory) {\n      if(manufacturingCategory){\n        return manufacturingCategory.name;\n      }else{\n        return '-';\n      }\n    }\n\n    function selectProduct(productVariantManufacturing, product){\n      if(product){\n        productVariantManufacturing.selected_product_instance = product;\n        productVariantManufacturing.selected_product = product.id;\n      }else{\n        productVariantManufacturing.selected_product_variant_instance = null;\n        productVariantManufacturing.selected_product_variant = null;\n      }\n      updateProductVariantManufacturing(productVariantManufacturing);\n    }\n\n    function selectProductVariant(productVariantManufacturing, productVariant){\n      if(productVariant){\n        productVariantManufacturing.selected_product_variant_instance = productVariant;\n        productVariantManufacturing.selected_product_variant = productVariant.id;\n      }else{\n        productVariantManufacturing.selected_product_variant_instance = null;\n        productVariantManufacturing.selected_product_variant = null;\n      }\n      updateProductVariantManufacturing(productVariantManufacturing);\n    }\n\n    function selectManufacturingCategory(productVariantManufacturing, manufacturingCategory){\n      if(manufacturingCategory){\n        productVariantManufacturing.manufacturing_category_instance = manufacturingCategory;\n        productVariantManufacturing.manufacturing_category = manufacturingCategory.id;\n      }else{\n        productVariantManufacturing.manufacturing_category_instance = null;\n        productVariantManufacturing.manufacturing_category = null;\n      }\n      updateProductVariantManufacturing(productVariantManufacturing);\n    }\n\n    function createManufacturingCategory(productVariantManufacturing, manufacturingCategory){\n\n      if(vm.creatingCategory){\n        return;\n      }\n      vm.creatingCategory = true;\n      api.manufactures.manufacturingCategories.save({\n        name: manufacturingCategory\n      }, function(response, callback, status){\n        if(status == 201){\n          selectManufacturingCategory(productVariantManufacturing, response);\n        }\n        vm.creatingCategory = false;\n      });\n    }\n\n    function calculateProductVariantManufacturingTotal(productVariantManufacturing){\n\n      if(productVariantManufacturing.selected_product){\n        var price = 0;\n        if(productVariantManufacturing.selected_product_variant_instance && productVariantManufacturing.selected_product_variant_instance.ddp_price){\n          price = productVariantManufacturing.selected_product_variant_instance.ddp_price;\n        } else if(productVariantManufacturing.selected_product_instance && productVariantManufacturing.selected_product_instance.ddp_price){\n          price = productVariantManufacturing.selected_product_instance.ddp_price;\n        }\n        var quantity = productVariantManufacturing.quantity + productVariantManufacturing.wastage;\n        var raw = parseFloat(price) * parseFloat(quantity);\n        var totalCost = parseFloat(raw.toFixed(5));\n        productVariantManufacturing.cost_per_item = price;\n        productVariantManufacturing.total_cost = totalCost;\n        return totalCost;\n      }\n      return 0;\n    }\n\n    function calculateOtherCostTotal(productVariantManufacturing){\n      if(productVariantManufacturing.cost_per_item && productVariantManufacturing.quantity){\n        var totalCost = Math.round(parseFloat(productVariantManufacturing.cost_per_item) * parseFloat(productVariantManufacturing.quantity) * 100) / 100;\n        productVariantManufacturing.total_cost = totalCost;\n        return totalCost;\n      }else{\n        return 0;\n      }\n    }\n\n    function calculateTotalCost(){\n      var totalCost = 0;\n      if(vm.selectedProductVariantManufacturings){\n        vm.selectedProductVariantManufacturings.forEach(function(pvm){\n          totalCost += pvm.total_cost;\n        });\n      }\n      return totalCost;\n    }\n\n    function setManufacturingDDPPrice(){\n      vm.loading = true;\n      api.inventories.productVariants.save({\n        id: vm.selectedProductVariant.id,\n        option: 'manufacturing-set-ddp-price'\n      }, function(response, callback, status){\n\n        vm.loading = false;\n      })\n    }\n\n    function copyManufacturingToProduct(){\n      vm.loading = true;\n      api.inventories.productVariants.save({\n        id: vm.selectedProductVariant.id,\n        option: 'manufacturing-copy-to-product'\n      }, function(response, callback, status){\n\n        vm.loading = false;\n      })\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductImagesController', InventoryProductImagesController);\n\n  /** @ngInject */\n  function InventoryProductImagesController($state, $document, $timeout, $interval, $scope, $mdToast, $filter, $mdDialog, ImagesData, api, Session,\n                                            ProductData, BundleImagesData) {\n\n    $scope.$parent.vm.currentNavItem = 'images';\n    $scope.$parent.vm.product = ProductData;\n    $scope.Session = Session;\n\n    // Data\n    var vm = this;\n    vm.product = ProductData;\n    vm.productId = $state.params.id;\n    vm.isBundle = vm.product.is_bundle;\n    vm.images = [];\n    vm.selectedToUpload = {\n      product_variants: [],\n      variants: []\n    };\n    vm.ngFlowOptions = {\n      // You can configure the ngFlow from here\n      target: api.urls.inventories.productImages.replace('/:id/', ''),\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000,\n      query: {\n        product: vm.productId,\n        product_variants: vm.selectedToUpload.product_variants\n      }\n    };\n    vm.ngFlow = {\n      // ng-flow will be injected into here through its directive\n      flow: {}\n    };\n    vm.dropping = false;\n    vm.imageZoomOptions = {};\n    vm.selectedImage = null;\n    vm.selectedImageVariants = null;\n    vm.productVariantsByVariantId = {};\n    vm.colorSearch = {};\n    vm.savePromise = null;\n    vm.pagination = {\n      pageNumber: 1,\n      pageSize: 10,\n      totalPages: 1\n    };\n    vm.firstImageLoaded = false;\n\n    // Methods\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.fileAdded = fileAdded;\n    vm.filesAdded = filesAdded;\n    vm.upload = upload;\n    vm.fileSuccess = fileSuccess;\n    vm.updateImageZoomOptions = updateImageZoomOptions;\n    vm.selectImage = selectImage;\n    vm.deleteImage = deleteImage;\n    vm.selectImageVariants = selectImageVariants;\n    vm.saveVariants = saveVariants;\n    vm.useAsCover = useAsCover;\n    vm.uploadDialog = uploadDialog;\n    vm.updatePositions = updatePositions;\n    vm.debouncedSaveVariants = debouncedSaveVariants;\n    vm.goToFirstPage = goToFirstPage;\n    vm.goToPreviousPage = goToPreviousPage;\n    vm.goToNextPage = goToNextPage;\n    vm.goToLastPage = goToLastPage;\n    vm.changePageSize = changePageSize;\n    vm.updateVisibleImages = updateVisibleImages;\n    vm.selectAllFromColor = selectAllFromColor;\n\n    // Initialization\n    init();\n\n\n    // Functions\n    function init() {\n      if (vm.isBundle) {\n        vm.images = BundleImagesData.results;\n      } else {\n        vm.images = ImagesData.results;\n      }\n\n      vm.images.map(function(image) {\n        image.type = 'image';\n      });\n\n      vm.images = vm.images.sort(function(first, second) {\n        return first.position - second.position;\n      });\n\n      vm.product.product_variants.map(function(productVariant) {\n        productVariant.variants.map(function(variant) {\n          if (angular.isUndefined(vm.productVariantsByVariantId[variant]))\n            vm.productVariantsByVariantId[variant] = [];\n          vm.productVariantsByVariantId[variant].push(productVariant.id);\n        });\n      });\n\n      if (vm.images.length > 0) {\n        vm.selectedImage = vm.images[0];\n        vm.updateImageZoomOptions(vm.images[0].url);\n        vm.firstImageLoaded = true;\n      }\n      updateVisibleImages();\n    }\n\n    function DialogController($scope, $mdDialog) {\n      $scope.hide = function() {\n        $mdDialog.hide();\n      };\n      $scope.cancel = function() {\n        $mdDialog.cancel();\n      };\n      $scope.answer = function(answer) {\n        $mdDialog.hide(answer);\n      };\n    }\n\n    function uploadDialog(ev) {\n      $mdDialog.show({\n        controller: InventoryProductImagesController,\n        contentElement: '#uploadDialog',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true\n      });\n    }\n\n    function fileAdded(file, event, flow) {\n      // Prepare the temp file data for media list\n      var uploadingFile = {\n        id: file.uniqueIdentifier,\n        file: file,\n        type: 'uploading'\n      };\n      // Append it to the media list\n      vm.images.unshift(uploadingFile);\n      $mdDialog.hide();\n    }\n\n    function filesAdded(files, event, flow) {\n      files.forEach(function(file) {\n        var uploadingFile = {\n          id: file.uniqueIdentifier,\n          product_variants: vm.selectedToUpload.product_variants,\n          file: file,\n          type: 'uploading'\n        };\n        vm.images.unshift(uploadingFile);\n      });\n      $mdDialog.hide();\n    }\n\n    /**\n     * Upload\n     * Automatically triggers when files added to the uploader\n     */\n    function upload(files, event, flow) {\n      flow.files = [];\n      flow.opts.query.product_variants = JSON.stringify(vm.selectedToUpload.product_variants);\n      files.forEach(function(file) {\n        flow.files.push(file);\n        file.progressValue = 0;\n        file.interval = $interval(function() {\n          file.progressValue = file.progress();\n          if (file.progressValue == 1) {\n            $interval.cancel(file.interval);\n          }\n        }, 100);\n      });\n      flow.opts.headers = {\n        'Authorization': 'Token ' + Session.token\n      };\n      flow.upload();\n      /*\n      // Set headers\n      vm.ngFlow.flow.opts.headers = {\n        'Authorization': 'Token ' + Session.token\n      };\n      vm.ngFlow.flow.upload();*/\n    }\n\n    /**\n     * File upload success callback\n     * Triggers when single upload completed\n     *\n     * @param file\n     * @param message\n     */\n    function fileSuccess(file, message) {\n      // Iterate through the media list, find the one we\n      // are added as a temp and replace its data\n      // Normally you would parse the message and extract\n      // the uploaded file data from it\n      angular.forEach(vm.images, function(media, index) {\n        if (media.id === file.uniqueIdentifier) {\n          // Normally you would update the media item\n          // from database but we are cheating here!\n          /*var fileReader = new FileReader();\n          fileReader.readAsDataURL(media.file.file);\n          fileReader.onload = function (event)\n          {\n            media.url = event.target.result;\n          };*/\n\n          // Update the image type so the overlay can go away\n          angular.extend(media, JSON.parse(message));\n          media.type = 'image';\n          selectImage(media);\n          vm.firstImageLoaded = true;\n          updateImageZoomOptions(media.url);\n          updateVisibleImages();\n        }\n      });\n    }\n\n    /**\n     * Update image zoom options\n     *\n     * @param url\n     */\n    function updateImageZoomOptions(url) {\n      vm.imageZoomOptions = {\n        images: [\n          {\n            thumb: url,\n            medium: url,\n            large: url\n          }\n        ]\n      };\n    }\n\n    function selectImage(image) {\n      vm.updateImageZoomOptions(image.url);\n      vm.selectedImage = image;\n    }\n\n    function deleteImage(image) {\n      var imageToUpdate = null;\n      if (image) {\n        imageToUpdate = image;\n      } else {\n        imageToUpdate = vm.selectedImage;\n      }\n      if (Session.hasPermission('inventory.products.product.images.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.DELETE_IMAGE_DIALOG_TITLE'))\n          .textContent($filter('translate')('PRODUCT.DELETE_IMAGE_DIALOG_BODY'))\n          .ariaLabel('Delete Image')\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          var imageApi = api.inventories.productImages;\n          if (vm.isBundle) {\n            imageApi = api.inventories.productBundleImages;\n          }\n\n          imageApi.delete({ id: imageToUpdate.id }, function(response) {\n            var index = vm.images.indexOf(imageToUpdate);\n            vm.images.splice(index, 1);\n            updateVisibleImages()\n            if (vm.images.length > 0) {\n              vm.selectedImage = vm.images[0];\n              vm.updateImageZoomOptions(vm.images[0].url);\n            } else {\n              vm.firstImageLoaded = true;\n            }\n          });\n        });\n      }\n    }\n\n    function selectImageVariants(variants, object) {\n\n      var selectedProductVariantsById = {};\n      variants.map(function(variant) {\n        vm.productVariantsByVariantId[variant].map(function(productVariant) {\n          selectedProductVariantsById[productVariant] = productVariant;\n        });\n      });\n      var imageProductVariantsIds = [];\n      Object.keys(selectedProductVariantsById).forEach(function(key) {\n        imageProductVariantsIds.push(key);\n      });\n      object.product_variants = imageProductVariantsIds;\n    }\n\n    function saveVariants(image) {\n\n      var imageToUpdate = null;\n      if (image) {\n        imageToUpdate = image;\n      } else {\n        imageToUpdate = vm.selectedImage;\n      }\n      api.inventories.productImages.update({\n        id: imageToUpdate.id,\n        product_variants: image.product_variants\n      }, function(response) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('PRODUCT.IMAGE_SAVED'))\n          .position('top right'));\n      });\n    }\n\n    function useAsCover(image) {\n      var imageToUpdate = null;\n      if (image) {\n        imageToUpdate = image;\n      } else {\n        imageToUpdate = vm.selectedImage;\n      }\n\n      var imageApi = api.inventories.productImages;\n      if (vm.isBundle) {\n        imageApi = api.inventories.productBundleImages;\n      }\n      imageApi.update({\n        id: imageToUpdate.id,\n        option: 'make-cover'\n      }, function(response) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('PRODUCT.IMAGE_SAVED'))\n          .position('top right'));\n      });\n    }\n\n    function updatePositions() {\n\n      var startIndex = (vm.pagination.pageNumber - 1) * vm.pagination.pageSize;\n\n      var reorderedImages = vm.images.slice();\n      for (var i = 0; i < vm.visibleImages.length; i++) {\n        reorderedImages[startIndex + i] = vm.visibleImages[i];\n      }\n\n      var images = [];\n      for (var j = 0; j < reorderedImages.length; j++) {\n        reorderedImages[j].position = j;\n        images.push({\n          id: reorderedImages[j].id,\n          position: reorderedImages[j].position\n        });\n      }\n\n      vm.images = reorderedImages;\n\n      api.inventories.productImages.save({\n        option: 'order_by',\n        images: images\n      }, function(response, callback, status) {\n        updateVisibleImages();\n      });\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(image) {\n      vm.colorSearch[image.id]='';\n      vm.saveVariants(image);\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function debouncedSaveVariants(image) {\n      if (image.imageTouched) {\n        if (vm.savePromise) {\n          $timeout.cancel(vm.savePromise);\n        }\n        vm.savePromise = $timeout(function() {\n          vm.saveVariants(image);\n        }, 1000);\n      }\n    }\n\n    function goToFirstPage() {\n      vm.pagination.pageNumber = 1;\n      updateVisibleImages();\n    }\n\n    function goToPreviousPage() {\n      if (vm.pagination.pageNumber > 1) {\n        vm.pagination.pageNumber--;\n        updateVisibleImages();\n      }\n    }\n\n    function goToNextPage() {\n      if (vm.pagination.pageNumber < vm.pagination.totalPages) {\n        vm.pagination.pageNumber++;\n        updateVisibleImages();\n      }\n    }\n\n    function goToLastPage() {\n      vm.pagination.pageNumber = vm.pagination.totalPages;\n      updateVisibleImages();\n    }\n\n    function changePageSize() {\n      vm.pagination.pageNumber = 1;\n      updateVisibleImages();\n    }\n\n    function updateVisibleImages() {\n      vm.pagination.totalPages = Math.ceil(vm.images.length / vm.pagination.pageSize);\n      var startIndex = (vm.pagination.pageNumber - 1) * vm.pagination.pageSize;\n      var endIndex = startIndex + vm.pagination.pageSize;\n      vm.visibleImages = vm.images.slice(startIndex, endIndex);\n    }\n\n    function selectAllFromColor(image, color) {\n      if (!image.product_variants) {\n        image.product_variants = [];\n      }\n\n      // Filter product variants that match the selected color\n      var variantsToAdd = vm.product.product_variants.filter(function(product_variant) {\n        return product_variant.color === color.id;\n      });\n\n      // Add the filtered variants to the image product_variants list, avoiding duplicates\n      variantsToAdd.forEach(function(product_variant) {\n        if (!image.product_variants.includes(product_variant.id)) {\n          image.product_variants.push(product_variant.id);\n        }\n      });\n\n      // Mark the image as modified to trigger a save\n      image.imageTouched = true;\n      vm.debouncedSaveVariants(image);\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductEcommerceController', InventoryProductEcommerceController);\n\n  /** @ngInject */\n  function InventoryProductEcommerceController($scope,\n                                               $state,\n                                               ProductData,\n                                               SitesData,\n                                               SiteProductsData,\n                                               Session) {\n\n    $scope.$parent.vm.currentNavItem = 'ecommerce';\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.sites = SitesData.results;\n    vm.siteProducts = SiteProductsData.results;\n\n    // Methods\n    vm.gotoProducts = gotoProducts;\n    vm.getVariantName = getVariantName;\n    vm.cancelProduct = cancelProductCallback;\n    vm.saveProductCallback = saveProductCallback;\n    vm.cancelProductPricesCallback = cancelProductPricesCallback;\n    vm.saveProductVariantsCallback = saveProductVariantsCallback;\n    vm.cancelProductVariantsCallback = cancelProductVariantsCallback;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n\n    function initialize() {\n      if (Session.hasSubscription && !Session.hasFeature($state.current.name)) {\n        $state.go('app.inventory.products.product.overview', { id: vm.product.id });\n      }\n    }\n\n    function getVariantName(variantId) {\n      return vm.variantsById[variantId].code;\n    }\n\n\n    /**\n     * Go to products page\n     */\n    function gotoProducts() {\n      $state.go('app.inventory.products');\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * has finished the cancellProduct function\n     */\n    function cancelProductCallback() {\n      vm.product = angular.copy(ProductData);\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * directive has finished the saveProduct function\n     */\n    function saveProductCallback() {\n      ProductData = angular.copy(vm.product);\n    }\n\n\n    /**\n     * Function that is called when ndProductPricingTiers\n     * has finishd the save function\n     */\n    function cancelProductPricesCallback() {\n      vm.product.prices = angular.copy(ProductData.prices);\n    }\n\n\n    /**\n     * Function that is called when ndProductVariants\n     * has finishd the save function\n     */\n    function saveProductVariantsCallback() {\n      ProductData.product_variants = angular.copy(vm.product.product_variants);\n    }\n\n    /**\n     * Function that is called when ndProductVariants\n     * has canceled the save function\n     */\n    function cancelProductVariantsCallback() {\n      vm.product.has_variants = angular.copy(ProductData.has_variants);\n      vm.product.product_variants = angular.copy(ProductData.product_variants);\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductDetailsController', InventoryProductDetailsController);\n\n  /** @ngInject */\n  function InventoryProductDetailsController($scope, $state, $document, $http, $element, ProductData, CollectionsData,\n                                             ProductTranslationsData, InventoryConfiguration,\n                                             SitesData, $mdToast, api, $filter, $mdDialog, Session, ECOMMERCE_PLATFORMS,\n                                             CURRENCIES, $timeout, Utils, HTTP_STATUS) {\n    $scope.$parent.vm.currentNavItem = 'details';\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.taToolbar = [\n      ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'],\n      ['indent', 'outdent', 'html', 'insertImage', 'insertLink', 'wordcount', 'charcount', 'script']\n    ];\n    vm.company = Session.company;\n    vm.product = angular.copy(ProductData);\n    vm.collections = CollectionsData.results;\n    vm.sites = Object.values(SitesData.results);\n    vm.currencies = CURRENCIES;\n    vm.platformDict = ECOMMERCE_PLATFORMS;\n    vm.productTranslations = ProductTranslationsData.results;\n    vm.inventoryConfiguration = InventoryConfiguration.results[0];\n    vm.b2bEcommerces = {};\n    vm.ecommerceProductRestrictions = {\n      'description_short': {\n        'min_length': null\n      },\n      'name': {\n        'min_length': null\n      },\n      'tag': {\n        'max_length': null\n      }\n    };\n    vm.dropping = false;\n\n    vm.ngFlowOptions = {\n      // You can configure the ngFlow from here\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n\n    vm.ngFlow = {\n      // ng-flow will be injected into here through its directive\n      flow: {}\n    };\n    vm.coverId = null;\n    vm.useFlowjs = false;\n    vm.images = [];\n    vm.attributeCategories = [];\n\n    // Methods\n    vm.gotoProducts = gotoProducts;\n    vm.getVariantName = getVariantName;\n    vm.cancelProduct = cancelProductCallback;\n    vm.saveProductCallback = saveProductCallback;\n    vm.cancelProductPricesCallback = cancelProductPricesCallback;\n    vm.saveProductVariantsCallback = saveProductVariantsCallback;\n    vm.cancelProductVariantsCallback = cancelProductVariantsCallback;\n    vm.saveDescription = saveDescription;\n    vm.cancelDescription = cancelDescription;\n    vm.removeDescriptionHTML = removeDescriptionHTML;\n    vm.removeDescriptionLongHTML = removeDescriptionLongHTML;\n    vm.normalizeHTML = normalizeHTML;\n    vm.toggleDescriptionWidget = toggleDescriptionWidget;\n    vm.getProductImages = getProductImages;\n    vm.saveProduct = saveProduct;\n\n    //image methods\n    vm.upload = upload;\n    vm.fileSuccess = fileSuccess;\n    vm.deleteCover = deleteCover;\n    vm.showModalChangeCover = showModalChangeCover;\n\n    // Declare Events\n    vm.saveProductEvent = $scope.$on('InventoryProductController::saveProduct', function(event, args) {\n      saveProduct();\n    });\n\n    // Initialization\n    initialize();\n\n    // Functions\n\n    function initialize() {\n      initToggleDescriptions();\n      getProductImages();\n      var platformIds = [];\n      vm.sites.map(function(site) {\n        return platformIds.push(site['platform']);\n      });\n      $http.get('assets/data/ecommerce-product-restrictions.7d2e56bf.json').then(function(response) {\n        vm.ecommerceProductRestrictions['tag']['max_length'] = response.data['tag']['max_length'];\n        var tag_max_lengths = Object.keys(response.data['tag']['max_length']).map(function(key) {\n          return vm.platformDict[key];\n        }).filter(function(key) {\n          return platformIds.includes(key);\n        }).map(function(key) {\n          return response.data['tag']['max_length'][vm.platformDict[key]];\n        });\n        vm.ecommerceProductRestrictions['tag']['max_length'] = Math.min.apply(null, Object.values(tag_max_lengths));\n\n        var description_short_max_lengths = Object.keys(response.data['description_short']['max_length']).map(function(key) {\n          return vm.platformDict[key];\n        }).filter(function(key) {\n          return platformIds.includes(key);\n        }).map(function(key) {\n          return response.data['description_short']['max_length'][vm.platformDict[key]];\n        });\n        vm.ecommerceProductRestrictions['description_short']['min_length'] = Math.min.apply(null, Object.values(description_short_max_lengths));\n      });\n\n      //Get b2b Ecommerces\n      if (Session.hasMultipleB2B()) {\n        api.wholesale.b2bEcommerces.list(function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.data) {\n            vm.b2bEcommerces = response.data;\n          }\n        });\n      }\n\n      $scope.$on('ndProductMainInformationReady', function(event, ndProductMainInformationCtrl) {\n        vm.ndProductMainInformationCtrl = ndProductMainInformationCtrl;\n      });\n    }\n\n    function getVariantName(variantId) {\n      return vm.variantsById[variantId].code;\n    }\n\n    function gotoProducts() {\n      $state.go('app.inventory.products');\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * has finished the cancellProduct function\n     */\n    function cancelProductCallback() {\n      vm.product = angular.copy(ProductData);\n    }\n\n    /**\n     * Function that is executed when ndProductMainInformation\n     * directive has finished the saveProduct function\n     */\n    function saveProductCallback() {\n      ProductData = angular.copy(vm.product);\n    }\n\n    function saveProduct() {\n      if (!isValid()) {\n        return;\n      }\n      var product = angular.copy(vm.product);\n      if (product.id) {\n        api.inventories.products.update(\n          product,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              $scope.$broadcast('InventoryProductDetailsController::productUpdated');\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT && response.error === 'ERROR_11004_OPTIMIZATION_CONFIGURATION_MIN_QTY_EXCEEDED') {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('INVENTORY_CONFIGURATION.OPTIMIZATION_CONFIGURATION_MIN_QTY_EXCEEDED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      } else {\n        api.inventories.products.save(\n          product,\n          function(response) {\n\n            // To upload the file we use Flow.js\n            if ($scope.useFlowjs) {\n              $scope.ngFlow.flow.opts.headers = {\n                'Authorization': 'Token ' + Session.token\n              };\n              $scope.ngFlow.flow.opts.target = api.urls.inventories.products\n                .replace(':id/', response.id)\n                .replace(':option', '');\n              $scope.ngFlow.flow.opts.query = { id: product.id };\n              $scope.ngFlow.flow.opts.uploadMethod = 'PUT';\n              $scope.ngFlow.flow.upload();\n\n              // If we didn't change the file we save normal\n            } else {\n              $scope.postSaveProduct(response, false);\n            }\n          });\n      }\n    }\n\n    function isValid() {\n      // TODO call child directives to validate\n      return true;\n    }\n\n    /**\n     * Function that is called when ndProductPricingTiers\n     * has finishd the save function\n     */\n    function cancelProductPricesCallback() {\n      vm.product.prices = angular.copy(ProductData.prices);\n    }\n\n\n    /**\n     * Function that is called when ndProductVariants\n     * has finishd the save function\n     */\n    function saveProductVariantsCallback() {\n      ProductData.product_variants = angular.copy(vm.product.product_variants);\n    }\n\n    /**\n     * Function that is called when ndProductVariants\n     * has canceled the save function\n     */\n    function cancelProductVariantsCallback() {\n      vm.product.has_variants = angular.copy(ProductData.has_variants);\n      vm.product.product_variants = angular.copy(ProductData.product_variants);\n    }\n\n    function saveDescription() {\n      api.inventories.products.update(\n        vm.product,\n        function(response, callback, status) {\n          if (status == 200) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function cancelDescription() {\n      vm.product.description = ProductData.description;\n      vm.product.description_long = ProductData.description_long;\n      initToggleDescriptions();\n    }\n\n    function removeDescriptionHTML(html) {\n      if (vm.descriptionPasted) {\n        $timeout(function() {\n          // Remove Html\n          // vm.product.description = html ? String(html).replace(/<[^>]+>/gm, '') : '';\n          // Remove Html Attributes\n          vm.product.description = html ? String(html).replace(/<([^ >]+)[^>]*>/ig, '<$1>') : '';\n        });\n        vm.descriptionPasted = false;\n      }\n    }\n\n    function removeDescriptionLongHTML(html) {\n      if (vm.descriptionPasted) {\n        $timeout(function() {\n          // Remove Html\n          // vm.product.description_long = html ? String(html).replace(/<[^>]+>/gm, '') : '';\n          // Remove Html Attributes\n          vm.product.description_long = html ? String(html).replace(/<([^ >]+)[^>]*>/ig, '<$1>') : '';\n        });\n        vm.descriptionPasted = false;\n      }\n    }\n\n    function normalizeHTML(id) {\n      var dirty = id === 'long' ? vm.product.description_long : vm.product.description;\n      const healthy = Utils.sanitizeHTML(dirty, {\n        allowedTags: [\n          'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'blockquote', 'b', 'i',\n          'strike', 'u', 'ul', 'li', 'ol', 'a', 'span', 'img', 'table', 'thead',\n          'tbody', 'tr', 'th', 'td', 'strong'\n        ],\n        allowedAttributes: {\n          'a': ['href'],\n          'img': ['id', 'class', 'src', 'ta-insert-video', 'allowfullscreen', 'contenteditable', 'frameborder'],\n          'table': ['id', 'class'],\n          'button': ['id', 'class', 'onclick'],\n          'div': ['id', 'class']\n        }\n        // #TODO: Is required some way of filtering styles\n        //allowedStyles: {\n        //  '*': {\n        //    // Match HEX and RGB\n        //    'color': [/^#(0x)?[0-9a-f]+$/i, /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/],\n        //    'text-align': [/^left$/, /^right$/, /^center$/, /^justify$/],\n        //    // Match any number with px, em, or %\n        //    'font-size': [/^\\d+(?:px|em|%)$/]\n        //  },\n        //  'p': {\n        //    'font-size': [/^\\d+rem$/]\n        //  }\n        //},\n      });\n\n      switch (id) {\n        case 'long':\n          vm.product.description_long = healthy;\n          break;\n        case 'short':\n          vm.product.description = healthy;\n          break;\n      }\n    }\n\n    function containsScript(text) {\n      if (text) {\n        return text.indexOf('<script') !== -1;\n      }\n      return false;\n    }\n\n    function initToggleDescriptions() {\n      vm.showDescriptionCustomTextArea = containsScript(vm.product.description);\n      vm.showLongDescriptionCustomTextArea = containsScript(vm.product.description);\n    }\n\n    function toggleDescriptionWidget(long) {\n      if (long) {\n        if (vm.showLongDescriptionCustomTextArea && containsScript(vm.product.description_long)) {\n          showContainScriptDialog(true);\n        } else {\n          vm.showLongDescriptionCustomTextArea = !vm.showLongDescriptionCustomTextArea;\n        }\n      } else {\n        if (vm.showDescriptionCustomTextArea && containsScript(vm.product.description)) {\n          showContainScriptDialog(false);\n        } else {\n          vm.showDescriptionCustomTextArea = !vm.showDescriptionCustomTextArea;\n        }\n      }\n    }\n\n    function showContainScriptDialog(long) {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.CHANGE_TO_SIMPLE_EDITOR'))\n        .content($filter('translate')('PRODUCT.CHANGE_TO_SIMPLE_EDITOR_MESSAGE'))\n        .ok($filter('translate')('PRODUCT.YES_CHANGE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        if (long) {\n          vm.showLongDescriptionCustomTextArea = !vm.showLongDescriptionCustomTextArea;\n        } else {\n          vm.showDescriptionCustomTextArea = !vm.showDescriptionCustomTextArea;\n        }\n      }, function() {\n        // No nothing\n      });\n    }\n\n    function getProductImages() {\n      api.inventories.productImages.list({ product_id: vm.product.id }, function(response) {\n          vm.images = response.results;\n        }\n      );\n    }\n\n    function getCover() {\n      var cover = vm.images.filter(function(image) {\n        return image.is_cover ? image.id : null;\n      });\n      return cover ? cover[0] : null;\n    }\n\n    function fileSuccess(file, message) {\n      var response = JSON.parse(message);\n      if (response.id && response.cover && response.cover.purchase_catalog) {\n        vm.product.cover = response.cover.purchase_catalog;\n      }\n      getProductImages();\n    }\n\n    function showModalChangeCover() {\n      $mdDialog.show({\n        controller: 'ChangeCoverDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/change-cover/change-cover-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          params: { images: vm.images }\n        }\n      }).then(function(result) {\n        vm.product.cover = result;\n      }, function(result) {\n\n      });\n    }\n\n    function upload(files, event, flow) {\n      vm.ngFlow.flow.opts.headers = {\n        'Authorization': 'Token ' + Session.token\n      };\n      vm.ngFlow.flow.opts.target = api.urls.inventories.products\n        .replace(':id/', vm.product.id)\n        .replace(':option', '');\n      vm.ngFlow.flow.opts.query = { id: vm.product.id };\n      vm.ngFlow.flow.opts.uploadMethod = 'PUT';\n      vm.ngFlow.flow.upload();\n    }\n\n    function deleteCover(ev) {\n      if (Session.hasPermission('inventory.products.product.images.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.DELETE_IMAGE_DIALOG_TITLE'))\n          .textContent($filter('translate')('PRODUCT.DELETE_IMAGE_DIALOG_BODY'))\n          .ariaLabel('Delete Image')\n          .targetEvent(ev)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          var coverId = getCover();\n          api.inventories.productImages.delete({ id: coverId.id }, function(response) {\n            vm.product.cover = null;\n            // var index = vm.images.indexOf(vm.selectedImage);\n            // vm.images.splice(index, 1);\n            // if (vm.images.length > 0) {\n            //   vm.selectedImage = vm.images[0];\n            //   vm.updateImageZoomOptions(vm.images[0].url);\n            // } else {\n            //   vm.firstImageLoaded = true;\n            // }\n          });\n        });\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductBundlesController', InventoryProductBundlesController);\n\n  /** @ngInject */\n  function InventoryProductBundlesController($scope, ProductData, $mdDialog, $filter, $mdToast, ERROR_CODES,\n                                             HTTP_STATUS, api, ECOMMERCE_PLATFORMS, GS1_BARCODE_TYPES_BY_ID,\n                                             NdBarcodeService) {\n\n    $scope.$parent.vm.currentNavItem = \"bundles\";\n    $scope.$parent.vm.product = ProductData;\n\n    // Data\n    var vm = this;\n    vm.product = ProductData;\n    vm.bundleProductVariant = vm.product.product_variants[0];\n    vm.GS1_BARCODE_TYPES_BY_ID = GS1_BARCODE_TYPES_BY_ID;\n    vm.backupCode = '';\n\n    // Initialization\n    initialize();\n    vm.generateCode = generateCode;\n    vm.updateProductVariant = updateProductVariant;\n    vm.hasInvalidSku = hasInvalidSku;\n    vm.getInvalidSkuTooltip = getInvalidSkuTooltip;\n    vm.updateBarcode = updateBarcode;\n    vm.backupBarcode = backupBarcode;\n\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function updateProductVariant(productVariant) {\n      api.inventories.productVariants.update(\n        productVariant,\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            productVariant.barcode = response.barcode;\n            productVariant.sku = response.sku;\n            productVariant.ddp_price = response.ddp_price;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_VARIANT_UPDATED')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.MODIFIED_FILED_NOT_VALID')).position('top right'));\n          }\n        }\n      );\n      checkBarcodeUnique(productVariant);\n    }\n\n     function updateBarcode(productVariant) {\n      /**\n       * Note, if productVariant.barcode is null it may be due\n       * to the barcode does not reach the minimum characters\n       */\n\n      // If bar barcode is empty, ignore valid check and save\n      if (!productVariant.barcode && !!vm.backupCode) {\n        updateProductVariant(productVariant);\n        return;\n      }\n\n      checkBarcodeInvalid(productVariant);\n      if (productVariant.barcodeInvalid) {\n        vm.productVariantsWithInvalidBarcode.push(productVariant);\n        if (vm.isBarcodeInvalidDialogOpen) {\n          return;\n        }\n\n        vm.isBarcodeInvalidDialogOpen = true;\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.BARCODE_NOT_VALID'))\n          .htmlContent($filter('translate')('PRODUCT.BARCODE_NOT_VALID_MSN'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('PRODUCT.BARCODE_NOT_VALID_SAVE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          vm.productVariantsWithInvalidBarcode.map(function(pv) {\n            updateProductVariant(pv);\n          });\n\n          vm.productVariantsWithInvalidBarcode = [];\n          vm.isBarcodeInvalidDialogOpen = false;\n        }, function() {\n          vm.productVariantsWithInvalidBarcode.map(function(pv) {\n            checkBarcodeInvalid(pv);\n          });\n\n          vm.productVariantsWithInvalidBarcode = [];\n          vm.isBarcodeInvalidDialogOpen = false;\n        });\n      } else {\n        updateProductVariant(productVariant);\n      }\n    }\n\n    function checkBarcodeInvalid(productVariant) {\n      if (!productVariant.barcode) {\n        productVariant.barcodeInvalid = false;\n      } else if (vm.product.default_barcode_type) {\n        productVariant.barcodeInvalid = !NdBarcodeService.isValid(productVariant.barcode, vm.product.default_barcode_type);\n      } else {\n        var validEan13 = productVariant.barcodeInvalid = NdBarcodeService.isValid(productVariant.barcode, GS1_BARCODE_TYPES_BY_NAME.GS1_EAN_13.id);\n        var validUpcA = productVariant.barcodeInvalid = NdBarcodeService.isValid(productVariant.barcode, GS1_BARCODE_TYPES_BY_NAME.GS1_UPC_A.id);\n        productVariant.barcodeInvalid = !(validEan13 || validUpcA);\n      }\n    }\n\n\n    function backupBarcode(barcode) {\n      if (barcode) {\n        vm.backupCode = angular.copy(barcode);\n      }\n    }\n    function hasInvalidSku(sku) {\n      if(!sku){\n        return;\n      }\n      if (sku.includes('%') && vm.product.site_platforms.includes(ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE)) {\n        return true;\n      }\n      return false;\n    }\n\n    function getInvalidSkuTooltip(sku) {\n      if (!vm.product.site_platforms.includes(ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE)) {\n        return $filter('translate')('PRODUCT.INVALID_SKU_DEFAULT_MESSAGE');\n      }\n      if (!sku.includes('%')) {\n        return $filter('translate')('PRODUCT.INVALID_SKU_DEFAULT_MESSAGE');\n      }\n      var indexof = sku.indexOf('%');\n      return $filter('translate')('PRODUCT.INVALID_SKU_WOOCOMMERCE_PERCENTAGE_MESSAGE', {sku: sku.replace(sku.substring(indexof, indexof + 3), '')});\n\n    }\n\n    function checkBarcodeUnique(productVariant) {\n      productVariant.barcodeAlreadyExists = -1;\n      api.inventories.productVariants.get({\n        option: 'check-barcode-unique',\n        current_id: productVariant.id,\n        barcode: productVariant.barcode\n      }, function (response, callback, status) {\n        if (status == 200) {\n          productVariant.barcodeAlreadyExists = 0;\n        } else if (status == 302) {\n          productVariant.barcodeAlreadyExists = response.counter;\n        }\n        productVariant.checkBarcodeUniqueTimeout = null;\n      });\n    }\n\n    function generateCode(productVariant, type) {\n      var dialogTitle;\n      var dialogContent;\n      var option;\n\n      if (type === 'barcode') {\n        dialogTitle = 'GENERATE_BARCODE';\n        dialogContent = 'GENERATE_BARCODE_MSN';\n        option = 'generate-barcode';\n      } else {\n        dialogTitle = 'GENERATE_SKU';\n        dialogContent = 'GENERATE_SKU_MSN';\n        option = 'generate-sku';\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.' + dialogTitle))\n        .htmlContent($filter('translate')('PRODUCT.' + dialogContent))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('PRODUCT.' + dialogTitle))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function () {\n        if (type == 'barcode') {\n          productVariant.generatingBarcode = true;\n        } else {\n          productVariant.generatingSku = true;\n        }\n\n        api.inventories.productVariants.get(\n          {\n            id: productVariant.id,\n            option: option\n          },\n          function (result, fn, status) {\n            productVariant.generatingBarcode = false;\n\n            if (result.Error === ERROR_CODES.ERROR_03_001_BARCODE_OVERFLOW) {\n              $mdDialog.show($mdDialog.alert()\n                .clickOutsideToClose(true)\n                .title($filter('translate')('CONFIGURATION.ERROR_BARCODE_OVERFLOW_TITLE'))\n                .textContent($filter('translate')('CONFIGURATION.ERROR_BARCODE_OVERFLOW_BODY'))\n                .ok('Aceptar')\n              );\n              return;\n            } else if (status != HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              return;\n            }\n\n            if (type == 'barcode') {\n              productVariant.barcode = result.barcode;\n              productVariant.barcodeInvalid = false;\n            } else {\n              productVariant.sku = result.sku;\n              productVariant.generatingSku = false;\n            }\n\n            var toastMsg = type == 'barcode' ? 'BARCODE_UPDATED' : 'SKU_UPDATED';\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.' + toastMsg)).position('top right'));\n          }\n        );\n      }, function () {\n        // Nothing to do. Do not remove.\n      });\n    }\n\n  }\n})();\n\n\n\n\n\n\n\n(function() {\n  'use strict';\n\n  angular\n  .module('app.inventory')\n  .controller('WarehouseSelectDialogController', WarehouseSelectDialogController);\n\n  /** @ngInject */\n  function WarehouseSelectDialogController($scope, $mdDialog, $document, WarehouseData) {\n\n    var vm = this;\n\n    // Data\n    vm.warehouse = null;\n    vm.warehouses = WarehouseData.results;\n    vm.selectedProducts = [];\n\n    // Methods\n    vm.cancel = cancel;\n    vm.select = select;\n    vm.openProductSearchDialog = openProductSearchDialog;\n\n    // Functions\n    function cancel()\n    {\n      $mdDialog.cancel();\n    }\n\n    function select()\n    {\n      if(vm.warehouse){\n        $mdDialog.hide({\n          warehouse: vm.warehouse,\n          productIds: vm.selectedProducts\n        });\n      } else {\n        cancel();\n      }\n    }\n\n    function openProductSearchDialog(ev) {\n\n      $mdDialog.show({\n        controller: 'ProductSearchController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          params: {\n            multiple: true\n          }\n        }\n      }).then(function (result) {\n        vm.selectedProducts = result.products.map(function(p){\n          return p.id;\n        });\n      });\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationWebhooksController', ConfigurationWebhooksController);\n\n  /** @ngInject */\n  function ConfigurationWebhooksController($scope, $timeout, PERMISSIONS, Session, $mdDialog, api,\n                                           $mdToast, $filter, $translate, $compile, DTColumnBuilder, $document,\n                                           HTTP_STATUS, WEBHOOK_TYPES) {\n\n    var vm = this;\n    vm.WEBHOOK_COLORS = ['',\n      'indigo-200-bg',\n      'green-200-bg',\n      'amber-200-bg',\n      'deep-purple-200-bg',\n      'red-200-bg',\n      'teal-200-bg',\n      'pink-200-bg',\n    ];\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.WEBHOOKS;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.webhooks.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('WEBHOOKS.WEBHOOK_NAME')),\n      DTColumnBuilder.newColumn('type')\n        .withTitle($filter('translate')('WEBHOOKS.WEBHOOK_TYPE'))\n        .renderWith(function (data, type, full) {\n          var color = vm.WEBHOOK_COLORS[data.toString()[0]];\n          return '<span class=\"text-boxed ' + color + '\">' + $filter('translate')('WEBHOOKS.WEBHOOK_TYPE_' + WEBHOOK_TYPES[data]) + '</span>';\n        }),\n      DTColumnBuilder.newColumn('url')\n        .withTitle($filter('translate')('WEBHOOKS.WEBHOOK_URL')),\n      DTColumnBuilder.newColumn('active')\n        .withTitle($filter('translate')('WEBHOOKS.WEBHOOK_IS_ACTIVE'))\n        .renderWith(function (data, type, full) {\n          return data ?\n            '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' :\n            '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        })\n    ];\n\n    if (Session.hasPermission('inventory.configuration.webhooks.create')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable().withClass('text-right')\n        .renderWith(function (data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#variant-category-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n\n      vm.dtInstance.DataTable.columns.adjust();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.webhooks.delete')) {\n        $('td:nth-child(5) md-icon', nRow).unbind('click');\n        $('td:nth-child(5) md-icon', nRow).bind('click', function () {\n          deleteWebhook(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({\n        active: true\n      });\n    }\n\n    function openDialog(webhook) {\n      if (Session.hasPermission('inventory.configuration.webhooks.create')) {\n        $mdDialog.show({\n          controller: 'ConfigurationWebhookDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/webhook-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          locals: {\n            webhook: webhook\n          }\n        }).then(function (result) {\n          vm.dtInstance.rerender();\n        }, function (result) {\n          // Nothing to do\n        });\n      }\n    }\n\n    function deleteWebhook(webhook) {\n      if (Session.hasPermission('inventory.configuration.webhooks.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('WEBHOOKS.DELETE_WEBHOOK_TITLE'))\n          .textContent($filter('translate')('WEBHOOKS.DELETE_WEBHOOK_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.webhooks.delete')) {\n            api.inventories.webhooks.delete(\n              webhook,\n              function (response, fn, status, message) {\n                if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('WEBHOOKS.WEBHOOK_DELETED')).position('top right'));\n                  vm.dtInstance.rerender();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              });\n          }\n        });\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationVariantsController', ConfigurationVariantsController);\n\n  /** @ngInject */\n  function ConfigurationVariantsController($scope, $timeout, PERMISSIONS, Session, $mdDialog, api,\n    $mdToast, $filter, $translate, $compile, DTColumnBuilder, $document,\n    HTTP_STATUS, SEARCH_MAX_LENGTH, $q, $http, Utils, $interval) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.VARIANTS;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.selectedVariantCategory = null;\n    vm.dtInstance = {};\n    vm.variantCategories = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.variantCategories.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          Authorization: 'Token ' + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[2, 'asc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"info\"i>><\"right\"<\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('is_principal')\n        .withTitle($filter('translate')('CONFIGURATION.TYPE'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return '<md-icon md-font-icon=\"icon-ruler\"></md-icon>';\n          }\n          return '<md-icon md-font-icon=\"icon-palette\"></md-icon>';\n        }),\n      DTColumnBuilder.newColumn('position')\n        .withClass('text-center')\n        .withTitle($filter('translate')('CONFIGURATION.POSITION')),\n      DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right fullwidth')\n        .renderWith(function (data, type, full) {\n          vm.variantCategories[full.id] = full;\n\n          var cell = '';\n          cell += '<md-icon md-font-icon=\"icon-pencil\" class=\"s20 mr-10\"></md-icon>';\n          if (Session.hasPermission('inventory.configuration.variants.delete')) {\n            cell += '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n          }\n          return cell;\n        })\n    ];\n\n    vm.dtInstance2 = {};\n\n    vm.dtOptions2 = angular.copy(vm.dtOptions);\n    vm.dtOptions2.ajax.url = api.urls.inventories.variants.replace('/:id/', '');\n    vm.dtOptions2.rowCallback = rowCallback2;\n    vm.dtOptions2.initComplete = initComplete2;\n    vm.dtOptions2.order = [[3, 'asc']];\n    vm.dtOptions2.ajax.data = function (d) {\n      d.pagination = 'datatable';\n      d.serializer = 'VariantSimpleSerializer';\n      if (vm.selectedVariantCategory) {\n        d['category_id'] = vm.selectedVariantCategory.id; // acceso bracket para evitar warning camelcase\n      }\n    };\n\n    vm.dtColumns2 = [\n      DTColumnBuilder.newColumn('category').notVisible().withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION')),\n      DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right fullwidth')\n        .renderWith(function (_data, _type, _full) { // ninguno usado\n          var cell = '';\n          if (Session.hasPermission('inventory.configuration.variants.update')) {\n            var tooltip = $filter('translate')('CONFIGURATION.SWAP_VARIANTS');\n            cell += '<md-icon md-font-icon=\"icon-swap-horizontal\" class=\"s20 mr-10\"><md-tooltip>'+tooltip+'</md-tooltip></md-icon>';\n          }\n\n          cell += '<md-icon md-font-icon=\"icon-pencil\" class=\"s20 mr-10\"></md-icon>';\n\n          if (Session.hasPermission('inventory.configuration.variants.delete')) {\n            cell += '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n          }\n          return cell;\n        })\n    ];\n\n    $scope.$on('createClicked', createVariantCategory);\n    $scope.$on('create2Clicked', createVariant);\n\n    // Methods\n\n\n    // Functions\n\n    function initComplete() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#variant-category-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function initComplete2() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#variant-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, _data, _dataIndex) { // unused params prefijo _\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, _iDisplayIndex, _iDisplayIndexFull) { // unused params prefijo _\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        selectVariantCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        selectVariantCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        selectVariantCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).bind('click', function () {\n        selectVariantCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      $('td:nth-child(5) md-icon.icon-pencil', nRow).unbind('click');\n      $('td:nth-child(5) md-icon.icon-pencil', nRow).bind('click', function () {\n        editVariantCategory(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.variants.delete')) {\n        $('td:nth-child(5) md-icon.icon-trash', nRow).unbind('click');\n        $('td:nth-child(5) md-icon.icon-trash', nRow).bind('click', function () {\n          deleteVariantCategory(aData);\n        });\n      }\n\n\n      return nRow;\n    }\n\n    function rowCallback2(nRow, aData, _iDisplayIndex, _iDisplayIndexFull) { // unused params prefijo _\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on all cells\n      if (Session.hasPermission('inventory.configuration.variants.update')) {\n        $('td:nth-child(4) md-icon.icon-swap-horizontal', nRow).unbind('click');\n        $('td:nth-child(4) md-icon.icon-swap-horizontal', nRow).bind('click', function () {\n          preExchangeVariant(aData);\n        });\n      }\n\n      $('td:nth-child(4) md-icon.icon-pencil', nRow).unbind('click');\n      $('td:nth-child(4) md-icon.icon-pencil', nRow).bind('click', function () {\n        editVariant(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.variants.delete')) {\n        $('td:nth-child(4) md-icon.icon-trash', nRow).unbind('click');\n        $('td:nth-child(4) md-icon.icon-trash', nRow).bind('click', function () {\n          deleteVariant(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n    function editVariantCategory(variantCategory) {\n      $mdDialog.show({\n        controller: 'VariantCategoryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          object: variantCategory,\n          isCategory: true,\n          categories: [],\n          specificCategory: null\n        }\n      }).then(function (object) {\n        if (object) {\n          api.inventories.variantCategories.update(object,\n            function (results, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                vm.dtInstance.rerender();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            });\n        }\n      }, function (error) {\n        // Do not remove\n      });\n    }\n\n    function exchangeVariant(config) {\n      showVariantExchangeProgress();\n      api.inventories.variants.update({\n        option: 'exchange',\n        id: config.from,\n        to: config.to,\n        merge: true,\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          startExchangePolling(config); // eliminado argumento initialResults\n        } else {\n          $mdDialog.hide();\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function preExchangeVariant(variant) {\n      $mdDialog.show({\n        controller: 'ExchangeVariantDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/exchange-variant-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          object: variant,\n        }\n      }).then(function (config) {\n        exchangeVariant(config);\n      }, function (error) {\n        // Do not remove\n        console.log(error);\n      });\n    }\n\n    function editVariant(variant) {\n      $mdDialog.show({\n        controller: 'VariantCategoryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          object: variant,\n          isCategory: false,\n          categories: [],\n          specificCategory: vm.selectedVariantCategory\n        }\n      }).then(function (object) {\n        if (object) {\n          api.inventories.variants.update(object,\n            function (results, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                vm.dtInstance2.DataTable.column(0).search(vm.selectedVariantCategory.id).draw();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            });\n        }\n      }, function (error) {\n        // Do not remove\n      });\n    }\n\n    function deleteVariantCategory(variantCategory) {\n      if (Session.hasPermission('inventory.configuration.variants.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_VARIANT_CATEGORY_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_VARIANT_CATEGORY_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.variants.delete')) {\n            api.inventories.variantCategories.delete(\n              {\n                id: variantCategory.id\n              },\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                  vm.dtInstance.rerender();\n                  vm.selectedVariantCategory = null;\n                } else {\n                  var conflicts = $mdDialog.confirm()\n                    .title($filter('translate')('CONFIGURATION.PRODUCT_CONFLICT_TITLE'))\n                    .htmlContent($filter('translate')('CONFIGURATION.PRODUCT_CONFLICT_MESSAGE', {\n                      conflicts: response.conflicts,\n                      objectType: $filter('translate')('PRODUCT.VARIANT_CATEGORY'),\n                      objectName: variantCategory.name\n                    }))\n                    .clickOutsideToClose(true)\n                    .parent(angular.element(document.body))\n                    .ok($filter('translate')('GENERAL.DOWNLOAD'))\n                    .cancel($filter('translate')('GENERAL.CLOSE'));\n\n                  $mdDialog.show(conflicts).then(function () {\n                    var url = api.urls.inventories.variantCategories\n                      .replace(':id', variantCategory.id)\n                      .concat('product-conflicts');\n                    $http.get(url).then(function (response) {\n                      if (response.status === HTTP_STATUS.HTTP_201_CREATED) {\n                        Utils.downloadFile($filter('translate')('CONFIGURATION.PRODUCT_CONFLICT_FILE') + '.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', Utils.binaryStringToArrayBuffer(atob(response.data)));\n                      } else {\n                        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                      }\n                    });\n                  });\n                }\n              }\n            );\n          }\n        });\n      }\n    }\n\n    function deleteVariant(variant) {\n      if (Session.hasPermission('inventory.configuration.variants.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_VARIANT_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_VARIANT_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.variants.delete')) {\n            api.inventories.variants.delete(\n              variant,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                  vm.dtInstance2.DataTable.column(0).search(vm.selectedVariantCategory.id).draw();\n                } else {\n                  var conflicts = $mdDialog.confirm()\n                    .title($filter('translate')('CONFIGURATION.PRODUCT_CONFLICT_TITLE'))\n                    .htmlContent($filter('translate')('CONFIGURATION.PRODUCT_CONFLICT_MESSAGE', {\n                      conflicts: response.conflicts,\n                      objectType: $filter('translate')('PRODUCT.VARIANT'),\n                      objectName: variant.name\n                    }))\n                    .clickOutsideToClose(true)\n                    .parent(angular.element(document.body))\n                    .ok($filter('translate')('GENERAL.DOWNLOAD'))\n                    .cancel($filter('translate')('GENERAL.CLOSE'));\n\n                  $mdDialog.show(conflicts).then(function () {\n                    var url = api.urls.inventories.variants\n                      .replace(':id', variant.id)\n                      .concat('product-conflicts');\n                    $http.get(url).then(function (response) {\n                      if (response.status === HTTP_STATUS.HTTP_201_CREATED) {\n                        Utils.downloadFile($filter('translate')('CONFIGURATION.PRODUCT_CONFLICT_FILE') + '.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', Utils.binaryStringToArrayBuffer(atob(response.data)));\n                      } else {\n                        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                      }\n                    });\n                  });\n                }\n              }\n            );\n          }\n        });\n      }\n    }\n\n    function createVariantCategory() {\n      if (Session.hasPermission('inventory.configuration.variants.create')) {\n        $mdDialog.show({\n          controller: 'VariantCategoryDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: {},\n            isCategory: true,\n            categories: [],\n            specificCategory: null\n          }\n        }).then(function (object) {\n          if (object) {\n            api.inventories.variantCategories.save(object,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  vm.dtInstance.rerender();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              });\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function createVariant() {\n      if (Session.hasPermission('inventory.configuration.variants.create')) {\n        $mdDialog.show({\n          controller: 'VariantCategoryDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: {},\n            isCategory: false,\n            categories: vm.selectedVariantCategory ? [] : vm.dtInstance.DataTable.data(),\n            specificCategory: vm.selectedVariantCategory\n          }\n        }).then(function (object) {\n          if (object) {\n            // Serialize only the pk (eliminada asignación redundante)\n            api.inventories.variants.save(object,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  if (vm.selectedVariantCategory) {\n                    vm.dtInstance2.DataTable.column(0).search(vm.selectedVariantCategory.id).draw();\n                  } else {\n                    if (vm.dtInstance2.DataTable) {\n                      vm.dtInstance2.DataTable.draw();\n                    }\n                  }\n                }\n              });\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function selectVariantCategory(clickedVariantCategory) {\n      vm.selectedVariantCategory = clickedVariantCategory;\n\n      if (vm.dtInstance2.DataTable) {\n        vm.dtInstance2.DataTable.columns().search('');\n        vm.dtInstance2.DataTable.search('');\n        vm.dtInstance2.DataTable.column(0).search(vm.selectedVariantCategory.id).draw();\n      }\n\n      var elements = document.getElementsByClassName('selected-row');\n      // Remove css classes to deselect all table cells\n      while (elements.length > 0) {\n        elements[0].classList.remove('selected-row', 'md-grey-200-bg');\n      }\n\n      // The first time will be drawn automatically after ng-if\n      if (vm.dtInstance2.DataTable) {\n        vm.dtInstance2.DataTable.draw();\n      }\n      $scope.$apply();\n\n    }\n\n    function showVariantExchangeProgress() {\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: false,\n        escapeToClose: false,\n        locals: {\n          title: 'CONFIGURATION.WORK_IN_PROGRESS',\n          body: 'CONFIGURATION.PLEASE_WAIT'\n        }\n      });\n    }\n\n    function startExchangePolling(config) { // eliminado initialResults no usado\n      var pullingPromise = $interval(function () {\n        api.inventories.variants.get({\n          option: 'exchange-status',\n          from: config.from,\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && !response['is_merging']) { // bracket notation para evitar warning camelcase\n            $interval.cancel(pullingPromise);\n            $mdDialog.hide(true);\n            if (vm.dtInstance2 && vm.dtInstance2.DataTable) {\n              vm.dtInstance2.DataTable.draw(false);\n            }\n            if (vm.dtInstance && vm.dtInstance.DataTable) {\n              vm.dtInstance.DataTable.draw(false);\n            }\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.EXCHANGE_COMPLETED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n            $interval.cancel(pullingPromise);\n            $mdDialog.hide();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }, 2000);\n\n      $scope.$on('$destroy', function () {\n        if (pullingPromise) {\n          $interval.cancel(pullingPromise);\n        }\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('TicketTemplatesController', TicketTemplatesController);\n\n  /** @ngInject */\n  function TicketTemplatesController($scope, $timeout, $mdToast, $mdDialog, $filter, $document, $translate, api, Session,\n                                     DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.TICKET_TEMPLATES;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.sales.ticketConfigurations.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('logo').notSortable().withTitle($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_LOGO'))\n        .withOption('className', 'logo').renderWith(function (data, type, full) {\n        return data ? '<img src=\"' + data + '\">' : '';\n      }),\n      DTColumnBuilder.newColumn('name').notSortable().withTitle($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_NAME')),\n      //DTColumnBuilder.newColumn('footer').notSortable().withTitle($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_FOOTER')).withOption('className', 'w-400'),\n      //DTColumnBuilder.newColumn('closure').notSortable().withTitle($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_CLOSURE')),\n      DTColumnBuilder.newColumn('print_logo').notSortable().withTitle($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_PRINT_LOGO')).withOption('className', 'text-center')\n        .renderWith(function (data, type, full) {\n          return data ?\n            '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' :\n            '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        }),\n      DTColumnBuilder.newColumn('barcode_design').notSortable().withTitle($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_PRINT_BARCODE')).withOption('className', 'text-center')\n        .renderWith(function (data, type, full) {\n          return data ?\n            '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' :\n            '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        })\n    ];\n\n    if (Session.hasPermission('inventory.configuration.ticket_templates.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable().withClass('text-right w-50')\n        .renderWith(function (data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n\n      vm.dtInstance.DataTable.columns.adjust();\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n      if (Session.hasPermission('inventory.configuration.ticket_templates.delete')) {\n        $('td:nth-child(5) md-icon', nRow).unbind('click');\n        $('td:nth-child(5) md-icon', nRow).bind('click', function () {\n          deleteTicketTemplate(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(ticketTemplate) {\n      if (Session.hasPermission('inventory.configuration.ticket_templates.create')) {\n        $mdDialog.show({\n          controller: 'ConfigurationTicketTemplateDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/ticket-template-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          locals: {\n            ticketTemplate: ticketTemplate\n          }\n        }).then(function (result) {\n          vm.dtInstance.rerender();\n        }, function (result) {\n          // Nothing to do\n        });\n      }\n    }\n\n    function deleteTicketTemplate(ticketTemplate) {\n      if (Session.hasPermission('inventory.configuration.ticket_templates.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_TICKET_TEMPLATE_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_TICKET_TEMPLATE_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.ticket_templates.delete')) {\n            api.sales.ticketConfigurations.delete(\n              {id: ticketTemplate.id},\n              function (response, fn, status, message) {\n                if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.TICKET_TEMPLATE_DELETED')).position('top right'));\n                  vm.dtInstance.rerender();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              });\n          }\n        });\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationTaxController', ConfigurationTaxController);\n\n  /** @ngInject */\n  function ConfigurationTaxController($scope, $timeout, $mdToast, $mdDialog, $filter, $document, $translate, api, Session, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.TAXES;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data', url: api.urls.accounting.taxes.replace('/:id/', ''), type: 'get', headers: {\n          'Authorization': 'Token ' + Session.token\n        }, data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[3, 'asc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1, //stateSaveCallback: function (settings, data) {localStorage.setItem('datatable_configuration_taxes', JSON.stringify(data));},\n      //stateLoadCallback: function (settings) {return JSON.parse(localStorage.getItem('datatable_configuration_taxes'));},\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [DTColumnBuilder.newColumn('name').withTitle($filter('translate')('TAXES.NAME')), DTColumnBuilder.newColumn('percent_value').withTitle($filter('translate')('TAXES.VALUE'))\n      .notSortable()\n      .renderWith(function(data, type, full) {\n        return $filter('price')(data) + '%';\n      }), DTColumnBuilder.newColumn('surcharge').withTitle($filter('translate')('TAXES.SURCHARGE'))\n      .notSortable()\n      .renderWith(function(data, type, full) {\n        return $filter('price')(data) + '%';\n      }), DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION')), DTColumnBuilder.newColumn('default').withTitle($filter('translate')('TAXES.DEFAULT'))\n      .notSortable()\n      .renderWith(function(data) {\n        return data ? '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' : '';\n      })];\n\n    if (Session.hasPermission('inventory.configuration.taxes.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function(data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.openDialogByType = openDialogByType;\n    vm.createClicked = createClicked;\n    vm.deleteTax = deleteTax;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(), searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(5)', nRow).unbind('click');\n      $('td:nth-child(5)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.taxes.delete')) {\n        $('td:nth-child(6) md-icon', nRow).unbind('click');\n        $('td:nth-child(6) md-icon', nRow).bind('click', function() {\n          deleteTax(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n\n    function openDialogByType(type) {\n      $mdDialog.show({\n        controller: 'CashMovementDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sell/dialogs/cash-movement/cash-movement-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          register: vm.selectedRegister, type: type\n        }\n      }).then(function(result) {\n        // Refresh the table\n        vm.dtInstance.rerender();\n      });\n    }\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(tax) {\n      $mdDialog.show({\n        controller: 'ConfigurationTaxDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/tax-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          tax: tax\n        }\n      }).then(function(result) {\n        // Refresh the table\n        vm.dtInstance.rerender();\n      });\n    }\n\n    function deleteTax(tax) {\n      if (Session.hasPermission('inventory.configuration.taxes.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('TAXES.DELETE_TAX_TITLE'))\n          .textContent($filter('translate')('TAXES.DELETE_TAL_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          if (Session.hasPermission('inventory.configuration.taxes.delete')) {\n            api.accounting.taxes.delete(tax, function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('TAXES.TAX_DELETED')).position('top right'));\n                vm.dtInstance.rerender();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              postDelete(response);\n            });\n          }\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationTagsController', ConfigurationTagsController);\n\n  /** @ngInject */\n  function ConfigurationTagsController($scope, InventoryConfiguration, api, $mdToast, $filter, Session) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.TAGS;\n    $scope.Session = Session;\n\n    var vm = this;\n    vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n\n    // Data\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n\n    // Initialize\n    init();\n\n    function init() {\n\n    }\n\n    // Functions\n    function cancel() {\n      vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n    }\n\n    function save() {\n      api.inventories.inventoryConfiguration.update(\n        vm.configuration,\n        function (result) {\n          if (result.id) {\n            InventoryConfiguration.results[0] = result;\n            vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.REGISTER_UPDATED')).position('top right'));\n          }\n        }\n      );\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationStocksOptimizationController', ConfigurationStocksOptimizationController);\n\n  /** @ngInject */\n  function ConfigurationStocksOptimizationController($scope, $mdToast, $filter, InventoryConfiguration, WarehousesData,\n                                                     $compile, $translate, Session, HTTP_STATUS, api, Utils) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.PLANNING;\n\n    // Data\n    vm.configurationData = angular.copy(InventoryConfiguration.results[0]);\n    vm.prevConfigurationData = angular.extend(vm.configurationData);\n    vm.warehouses = WarehousesData.results;\n    vm.academyLink = 'https://support.stockagile.com/hc/es/articles/13701290582557-Optimiza-tus-reposiciones-a-tiendas';\n    vm.initializing = false;\n    vm.deliveryDays = [\n      'monday',\n      'tuesday',\n      'wednesday',\n      'thursday',\n      'friday',\n      'saturday',\n      'sunday'\n    ];\n\n    // Methods\n    vm.saveStockOptimization = saveStockOptimization;\n    vm.initWarehouseSelect = initWarehouseSelect;\n    vm.postSave = postSave;\n\n    // Functions\n\n    function saveStockOptimization(showToast) {\n      if (vm.initializing) {\n        vm.initializing = false;\n        return;\n      }\n      if (typeof showToast === 'undefined') {\n        showToast = true;\n      }\n      if (!isValid()) {\n        return;\n      }\n\n      api.inventories.inventoryConfiguration.update({\n          id: vm.configurationData.id,\n          option: 'update-stocks-optimization',\n          params: {\n            analysis_period_days: vm.configurationData.analysis_period_days,\n            transfer_lead_time_days: vm.configurationData.transfer_lead_time_days,\n            order_frequency_days: vm.configurationData.order_frequency_days,\n            replenishment_warehouse: parseInt(vm.configurationData.replenishment_warehouse),\n            purchase_lead_time_days: vm.configurationData.purchase_lead_time_days,\n            purchase_order_frequency_days: vm.configurationData.purchase_order_frequency_days,\n            replenishment_max_total_overexceed_percentage: vm.configurationData.replenishment_max_total_overexceed_percentage,\n            delivery_days: vm.configurationData.delivery_days,\n            only_replenishment_stock_for_coverage: vm.configurationData.only_replenishment_stock_for_coverage\n          }\n        },\n        function (response, fn, status) {\n          if (showToast) {\n            postSave(response, status);\n          }\n        }\n      );\n    }\n\n    function postSave(response, status) {\n      if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n        $mdToast.show(\n          $mdToast.simple()\n            .textContent($filter('translate')('INVENTORY_CONFIGURATION.OPTIMIZATION_UPDATED'))\n            .action($filter('translate')('GENERAL.UNDO'))\n            .highlightAction(true)\n            .position('top right')).then(function (clicked) {\n          if (clicked === 'ok') {\n            vm.configurationData = vm.prevConfigurationData;\n            saveStockOptimization(false);\n          } else {\n            vm.prevConfigurationData = angular.copy(vm.configurationData);\n          }\n        });\n      } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.MISSING_REQUIRED_FIELDS_ERROR')).position('top right'));\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n    function initWarehouseSelect() {\n      vm.initializing = true;\n    }\n\n    function isValid() {\n      return true;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationShippingMethodsController', ConfigurationShippingMethodsController);\n\n  /** @ngInject */\n  function ConfigurationShippingMethodsController($scope, $timeout, $mdToast, $mdDialog, $filter, $document, $translate, api,\n                                                  Session, DTColumnBuilder, $compile, HTTP_STATUS, apiResolver) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.SHIPPING_METHODS;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.shippingMethods.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('GENERAL.NAME')),\n      DTColumnBuilder.newColumn('price_incl_tax').withTitle($filter('translate')('PRODUCT.PRICE_INCL_TAX'))\n        .renderWith(function (data, type, full) {\n          return $filter('price')(data) + ' ' + $filter('currencyCharacter')(Session.company.currency);\n        })\n    ];\n\n    if (Session.hasPermission('inventory.configuration.shipping_methods.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function (data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deleteShippingMethod = deleteShippingMethod;\n    vm.postDelete = postDelete;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(5) md-icon', nRow).unbind('click');\n\n      if (aData.company) {\n        $('td:nth-child(1)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(2)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        if (Session.hasPermission('inventory.configuration.shipping_methods.delete')) {\n          $('td:nth-child(3) md-icon', nRow).bind('click', function () {\n            deleteShippingMethod(aData);\n          });\n        }\n      }\n\n      return nRow;\n    }\n\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(shippingMethod) {\n      if (Session.hasPermission('inventory.configuration.shipping_methods.create')) {\n        $mdDialog.show({\n          controller: 'ConfigurationShippingMethodDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/shipping-method-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          escapeToClose: false,\n          locals: {\n            shippingMethod: shippingMethod,\n            sendcloudShippingMethods: vm.sendcloudShippingMethods\n          }\n        }).then(function (result) {\n          vm.sendcloudShippingMethods = result.sendcloudShippingMethods;\n          vm.dtInstance.rerender();\n        }, function(sendcloudShippingMethods){\n          vm.sendcloudShippingMethods = sendcloudShippingMethods;\n        });\n      }\n    }\n\n    function deleteShippingMethod(shippingMethod) {\n      if (Session.hasPermission('inventory.configuration.shipping_methods.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_SHIPPING_METHOD_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_SHIPPING_METHOD_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.shippingMethods.delete(\n            shippingMethod,\n            function (response, fn, status) {\n              postDelete(response, status);\n            }\n          );\n        });\n      }\n    }\n\n    function postDelete(response, status) {\n      if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_METHOD_DELETED')).position('top right'));\n        vm.dtInstance.rerender();\n      } else if (status == HTTP_STATUS.HTTP_403_FORBIDDEN) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_METHOD_DELETED_403')).position('top right'));\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationShippingBoxesController', ConfigurationShippingBoxesController);\n\n  /** @ngInject */\n  function ConfigurationShippingBoxesController($scope, $mdToast, $timeout, $mdDialog, $filter, $document, $translate, api,\n                                                  Session, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.SHIPPING_BOXES;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.shippingBoxes.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('GENERAL.NAME')),\n      DTColumnBuilder.newColumn('length').withTitle($filter('translate')('GENERAL.LENGTH'))\n        .renderWith(function (data, type, full) {\n          return data + ' ' + Session.company.measurement_unit;\n        }),\n      DTColumnBuilder.newColumn('height').withTitle($filter('translate')('GENERAL.HEIGHT'))\n        .renderWith(function (data, type, full) {\n          return data + ' ' + Session.company.measurement_unit;\n        }),\n      DTColumnBuilder.newColumn('width').withTitle($filter('translate')('GENERAL.WIDTH'))\n        .renderWith(function (data, type, full) {\n          return data + ' ' + Session.company.measurement_unit;\n        }),\n      DTColumnBuilder.newColumn('default').withTitle($filter('translate')('CONFIGURATION.DEFAULT'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return '<div class=\"default\"></div>';\n          } else {\n            return '<div class=\"not-default\"></div>';\n          }\n        }),\n    ];\n\n    if (Session.hasPermission('inventory.configuration.shipping_boxes.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function (data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deleteShippingBox = deleteShippingBox;\n    vm.postDelete = postDelete;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(5)', nRow).unbind('click');\n      $('td:nth-child(6) md-icon', nRow).unbind('click');\n\n      if (aData.company) {\n        $('td:nth-child(1)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(2)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(3)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(4)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(5)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        if (Session.hasPermission('inventory.configuration.shipping_boxes.delete')) {\n          $('td:nth-child(6) md-icon', nRow).bind('click', function () {\n            deleteShippingBox(aData);\n          });\n        }\n      }\n\n      return nRow;\n    }\n\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(ShippingBox) {\n      if (Session.hasPermission('inventory.configuration.shipping_boxes.create')) {\n        $mdDialog.show({\n          controller: 'ConfigurationShippingBoxDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/shipping-box-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            shippingBox: ShippingBox\n          }\n        }).then(function (result) {\n          // Refresh the table\n          vm.dtInstance.rerender();\n        });\n      }\n    }\n\n    function deleteShippingBox(shippingBox) {\n      if (Session.hasPermission('inventory.configuration.shipping_boxes.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_SHIPPING_BOX_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_SHIPPING_BOX_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.shippingBoxes.delete(\n            shippingBox,\n            function (response, fn, status) {\n              postDelete(response, status);\n            }\n          );\n        });\n      }\n    }\n\n    function postDelete(response, status) {\n      if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_BOX_DELETED')).position('top right'));\n        vm.dtInstance.rerender();\n      } else if (status == HTTP_STATUS.HTTP_403_FORBIDDEN) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_BOX_DELETED_403')).position('top right'));\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationSerialNumberTypesController', ConfigurationSerialNumberTypesController);\n\n  function ConfigurationSerialNumberTypesController(PERMISSIONS, $scope, $mdToast, $mdDialog, $filter, $document, $timeout,\n                                                    $translate, api, $state, Session, DTColumnBuilder, $compile, HTTP_STATUS, SERIAL_NUMBER_TYPES_REVERSE) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.SERIAL_NUMBER_TYPES;\n\n    var vm = this;\n    vm.serialNumberTypesReverse = SERIAL_NUMBER_TYPES_REVERSE;\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.serialNumberTypes.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('type').withTitle($filter('translate')('CONFIGURATION.TYPE')).renderWith(function(data, type, full) {\n        if (data) {\n          return '<span class=\"text-boxed\">' + $filter('translate')('CONFIGURATION.' + vm.serialNumberTypesReverse[data]) + '</span>';\n        }\n        return '-';\n      }),\n      DTColumnBuilder.newColumn('id').withTitle($filter('translate')('CONFIGURATION.CODE'))\n        .renderWith(function(data, type, full) {\n          return '<nd-serial-number-type counter=\"' + full.counter + '\" length=\"' + full.counter_length + '\" prefix=\"' + (full.prefix || '') + '\" suffix=\"' + (full.suffix || '') + '\" verifactu-app=\"' + (full.verifactu_app ? 'true' : '') + '\"></nd-serial-number-type>';\n        }),\n      DTColumnBuilder.newColumn('counter').withTitle($filter('translate')('CONFIGURATION.COUNTER')),\n      DTColumnBuilder.newColumn('counter_length').withTitle($filter('translate')('CONFIGURATION.LENGTH')),\n      DTColumnBuilder.newColumn('prefix').withTitle($filter('translate')('CONFIGURATION.PREFIX')),\n      DTColumnBuilder.newColumn('suffix').withTitle($filter('translate')('CONFIGURATION.SUFFIX')),\n      DTColumnBuilder.newColumn('fiscal_address').withTitle($filter('translate')('WAREHOUSE.FISCAL_ADDRESS')).renderWith(function(data, type, full) {\n        return full.fiscal_address_legal_name;\n      })\n    ];\n\n    if (Session.hasPermission('inventory.configuration.serial_number_types.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function(data, type, full) {\n          if (full.verifactu_app) {\n            return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\" style=\"opacity: 0.3; cursor: not-allowed;\"></md-icon>';\n          }\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deleteSerialNumberType = deleteSerialNumberType;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(5)', nRow).unbind('click');\n      $('td:nth-child(5)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(6)', nRow).unbind('click');\n      $('td:nth-child(6)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(7)', nRow).unbind('click');\n      $('td:nth-child(7)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(8)', nRow).unbind('click');\n      $('td:nth-child(8)', nRow).bind('click', function() {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.serial_number_types.delete')) {\n        $('td:nth-child(9) md-icon', nRow).unbind('click');\n        $('td:nth-child(9) md-icon', nRow).bind('click', function() {\n          if (!aData.verifactu_app) {\n            deleteSerialNumberType(aData);\n          }\n        });\n      }\n\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({ counter: 1 });\n    }\n\n    function openDialog(serialNumberType) {\n      $mdDialog.show({\n        controller: 'ConfigurationSerialNumberTypeDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/serial-number-type-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          serialNumberType: serialNumberType\n        }\n      }).then(function(result) {\n        vm.dtInstance.rerender();\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function deleteSerialNumberType(serialNumberType) {\n      if (Session.hasPermission('inventory.configuration.serial_number_types.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_SERIAL_NUMBER_TYPE_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_SERIAL_NUMBER_TYPE_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          api.inventories.serialNumberTypes.delete(\n            serialNumberType,\n            function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SERIAL_NUMBER_TYPE_DELETED')).position('top right'));\n                vm.dtInstance.rerender();\n              } else if (status === HTTP_STATUS.HTTP_409_CONFLICT && response.register_code) {\n                var confirm = $mdDialog.confirm()\n                  .title($filter('translate')('CONFIGURATION.DELETE_SERIAL_NUMBER_TYPE_PROTECTED_DIALOG_ERROR_TITLE'))\n                  .textContent($filter('translate')('CONFIGURATION.DELETE_SERIAL_NUMBER_TYPE_PROTECTED_DIALOG_ERROR_CONTENT', { register: response.register_code }))\n                  .clickOutsideToClose(true)\n                  .parent(angular.element(document.body))\n                  .ok($filter('translate')('CONFIGURATION.DELETE_SERIAL_NUMBER_TYPE_ACCEPT_BUTTON'))\n                  .cancel($filter('translate')('GENERAL.CANCEL'));\n\n                $mdDialog.show(confirm).then(function() {\n                  if (Session.hasPermission('inventory.warehouses.warehouse.registers.edit')) {\n                    $state.go('app.inventory.warehouses.warehouse.registers', { id: response.warehouse_id });\n                  } else {\n                    var appName = $filter('translate')('WAREHOUSE.WAREHOUSE');\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.PAGE_NOT_ALLOWED', { appName: appName })).position('top right'));\n                  }\n                });\n\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationSeasonsController', ConfigurationSeasonsController);\n\n  /** @ngInject */\n  function ConfigurationSeasonsController(PERMISSIONS, $timeout, $scope, $mdToast, $mdDialog, $filter, $document, $translate, api,\n                                          Session, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.SEASONS;\n\n    var vm = this;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.seasons.replace('/:id', '')\n          .replace('/:option', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[2, 'asc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('permanent').withTitle($filter('translate')('SEASON.PERMANENT'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return '<md-icon md-font-icon=\"icon-check\" class=\"green-300-fg\"></md-icon>';\n          } else {\n            return '<md-icon md-font-icon=\"icon-close\" class=\"red-300-fg\"></md-icon>';\n          }\n        }),\n      DTColumnBuilder.newColumn('active_date').withTitle($filter('translate')('SEASON.ACTIVE_DATE')),\n      DTColumnBuilder.newColumn('discontinued_date').withTitle($filter('translate')('SEASON.DISCONTINUED_DATE')),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION')),\n\n    ];\n\n    if (Session.hasPermission('inventory.configuration.seasons.create')) {\n      vm.dtColumns.push(\n        DTColumnBuilder.newColumn('delete').notSortable()\n          .withClass('text-right w-50')\n          .renderWith(function (data, type, full) {\n            return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n          })\n      );\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deleteSeason = deleteSeason;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.seasons.create')) {\n        $('td:last-child md-icon', nRow).unbind('click');\n        $('td:last-child md-icon', nRow).bind('click', function () {\n          deleteSeason(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(season) {\n      $mdDialog.show({\n        controller: 'ConfigurationSeasonDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/season-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          season: season\n        }\n      }).then(function (result) {\n        vm.dtInstance.rerender();\n      }, function () {\n      });\n    }\n\n    function deleteSeason(season) {\n      if (Session.hasPermission('inventory.configuration.seasons.create')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_SEASON_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_SEASON_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.seasons.create')) {\n            api.inventories.seasons.delete(\n              season,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SEASON_DELETED')).position('top right'));\n                  vm.dtInstance.rerender();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              });\n          }\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationPricingTiersController', ConfigurationPricingTiersController);\n\n  function ConfigurationPricingTiersController(PERMISSIONS, $scope, $timeout, $mdToast, $mdDialog, $filter, $document, $translate,\n                                               api, Session, DTColumnBuilder, $compile, HTTP_STATUS, CURRENCIES) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.PRICING_TIERS;\n\n    var vm = this;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.pricingTiers.replace('/:id/:option', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[5, 'asc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('currency').withTitle($filter('translate')('CONFIGURATION.CURRENCY'))\n        .renderWith(function (data, type, full) {\n          var currency = data || Session.company.currency;\n          var tag = data ? '' : '<em class=\"secondary-text\">';\n          var endTag = data ? '' : '</em>';\n          return tag + currency + ' (' + CURRENCIES[currency] + ')' + endTag;\n        }),\n      DTColumnBuilder.newColumn('type').withTitle($filter('translate')('CONFIGURATION.TYPE'))\n        .renderWith(function (data, type, full) {\n          if (data === 1) {\n            return $filter('translate')('CONFIGURATION.WHOLESALE');\n          } else if (data === 2) {\n            return $filter('translate')('CONFIGURATION.RETAIL');\n          } else if (data === 3) {\n            return $filter('translate')('CONFIGURATION.OUTLET')\n          }\n        }),\n      DTColumnBuilder.newColumn('default').withTitle($filter('translate')('CONFIGURATION.DEFAULT'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return '<div class=\"default\"></div>';\n          } else {\n            return '<div class=\"not-default\"></div>';\n          }\n        }),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION')),\n      DTColumnBuilder.newColumn('delete')\n        .notSortable()\n        .withClass('text-right w-60')\n        .renderWith(function (data, type, full) {\n\n          var icons = '';\n          if (Session.hasPermission('inventory.configuration.pricing_tiers.create')) {\n            icons = '<md-icon md-font-icon=\"icon-content-duplicate\" class=\"mr-5\" ng-click=\"vm.duplicatePricingTier(' + full.id + ')\"></md-icon>';\n          }\n          if (Session.hasPermission('inventory.configuration.pricing_tiers.delete')) {\n            icons += '<md-icon md-font-icon=\"icon-trash\" ng-click=\"vm.preDeletePricingTier(' + full.id + ',\\'' + full.name + '\\')\"></md-icon>';\n          }\n          return icons;\n        })\n    ];\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.preDeletePricingTier = preDeletePricingTier;\n    vm.duplicatePricingTier = duplicatePricingTier;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      /*// Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.pricing_tiers.delete')) {\n        $('td:nth-child(4) md-icon', nRow).unbind('click');\n        $('td:nth-child(4) md-icon', nRow).bind('click', function () {\n          deletePricingTier(aData);\n        });\n      }\n      return nRow;*/\n\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.pricing_tiers.delete')) {\n        $('td:last-child', nRow).unbind('click');\n      }\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(pricingTier) {\n      if (Session.hasPermission('inventory.configuration.pricing_tiers.create')) {\n        $mdDialog.show({\n          controller: 'ConfigurationPricingTierDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/pricing-tier-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            pricingTier: pricingTier\n          }\n        }).then(function (result) {\n          vm.dtInstance.rerender();\n        });\n      }\n    }\n\n\n    function duplicatePricingTier(pricingtierId) {\n      if (Session.hasPermission('inventory.configuration.pricing_tiers.create')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DUPLICATE_PRICING_TIER_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DUPLICATE_PRICING_TIER_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DUPLICATE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.pricing_tiers.create')) {\n            api.inventories.pricingTiers.save(\n              {\n                id: pricingtierId,\n                option: 'duplicate'\n              },\n              function (response, fn, status) {\n                if (status === 201) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.PRICING_TIER_DUPLICATED')).position('top right'));\n                  vm.dtInstance.rerender();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        });\n      }\n    }\n\n\n    function preDeletePricingTier(pricingtierId, pricingtierName) {\n      $mdDialog.show({\n        controller: 'DeletePricingTierDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/delete-pricing-tier-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          object: {\n            id: pricingtierId,\n            name: pricingtierName\n          }\n        }\n      }).then(function (status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.PRICING_TIER_DELETED')).position('top right'));\n          vm.dtInstance.rerender();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      }, function (status) {\n        // Nothing to do\n      });\n    }\n  }\n})();\n\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationPaymentMethodsController', ConfigurationPaymentMethodsController);\n\n  /** @ngInject */\n  function ConfigurationPaymentMethodsController($scope, $timeout, $mdToast, $mdDialog, $filter, $document, $translate, api,\n                                                 Session, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.PAYMENT_METHODS;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.accounting.paymentMethods.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('PAYMENT_METHODS.NAME'))\n        .renderWith(function (data, type, full) {\n          return full.company ? full.name : $filter('translate')(full.name);\n        }),\n      DTColumnBuilder.newColumn('percent_value').withTitle($filter('translate')('PAYMENT_METHODS.PREVIEW'))\n        .notSortable()\n        .renderWith(function (data, type, full) {\n\n          var foregroundColor = full.foreground_color || 'rgba(0, 0, 0, 0.54)';\n          var icon = full.icon;\n          var label = full.company ? full.name : $filter('translate')(full.name);\n\n          var span = '<span flex class=\"' + foregroundColor + '\">' + label + '</span>';\n\n          if (icon) {\n            var div = '';\n            div += '<div layout=\"row\" layout-align=\"start center\">';\n            div += '<md-icon md-font-icon=\"' + icon + '\" class=\"mr-5\" style=\"color:#' + foregroundColor + '\"></md-icon>';\n            div += span;\n            div += '</div>';\n            return div;\n          }\n\n          return span;\n        }),\n      DTColumnBuilder.newColumn('is_retail_method').withTitle($filter('translate')('PAYMENT_METHODS.VISIBLE_FOR_RETAIL'))\n        .renderWith(function (data, type, full) {\n          return data ?\n            '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' :\n            '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        }),\n      DTColumnBuilder.newColumn('is_wholesale_method').withTitle($filter('translate')('PAYMENT_METHODS.VISIBLE_FOR_WHOLESALE'))\n        .renderWith(function (data, type, full) {\n          return data ?\n            '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' :\n            '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        })\n    ];\n\n    if (Session.hasPermission('inventory.configuration.payment_methods.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function (data, type, full) {\n          return !full.is_default_cash && !full.is_default_card && !full.payment_gateway ? '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>' : '';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deletePaymentMethod = deletePaymentMethod;\n    vm.postDelete = postDelete;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(4)', nRow).unbind('click');\n      $('td:nth-child(5) md-icon', nRow).unbind('click');\n\n      if (aData.company) {\n        $('td:nth-child(1)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(2)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(3)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        $('td:nth-child(4)', nRow).bind('click', function () {\n          openDialog(aData);\n        });\n        if (Session.hasPermission('inventory.configuration.payment_methods.delete')) {\n          $('td:nth-child(5) md-icon', nRow).bind('click', function () {\n            deletePaymentMethod(aData);\n          });\n        }\n      }\n\n      return nRow;\n    }\n\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(paymentMethod) {\n      if (Session.hasPermission('inventory.configuration.payment_methods.create')) {\n        $mdDialog.show({\n          controller: 'ConfigurationPaymentMethodDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/payment-method-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            paymentMethod: paymentMethod\n          }\n        }).then(function (result) {\n          // Refresh the table\n          vm.dtInstance.rerender();\n        }, function (result) {\n          // Nothing to do\n        });\n      }\n    }\n\n    function deletePaymentMethod(paymentMethod) {\n      if (Session.hasPermission('inventory.configuration.payment_methods.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PAYMENT_METHODS.DELETE_PAYMENT_METHOD_TITLE'))\n          .textContent($filter('translate')('PAYMENT_METHODS.DELETE_PAYMENT_METHOD_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          api.accounting.paymentMethods.delete(\n            paymentMethod,\n            function (response, fn, status) {\n              postDelete(response, status);\n            }\n          );\n        });\n      }\n    }\n\n    function postDelete(response, status) {\n      if (status == HTTP_STATUS.HTTP_204_NO_CONTENT) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PAYMENT_METHODS.PAYMENT_METHOD_DELETED')).position('top right'));\n        vm.dtInstance.rerender();\n      } else if (status == HTTP_STATUS.HTTP_403_FORBIDDEN) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PAYMENT_METHODS.PAYMENT_METHOD_DELETED_403')).position('top right'));\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .service('NdBarcodeService', NdBarcodeService);\n\n  /** @ngInject */\n  function NdBarcodeService(GS1_BARCODE_TYPES_BY_ID, GS1_BARCODE_TYPES_BY_NAME) {\n\n    this.isValid = isValid;\n    this.getChecksum = getChecksum;\n\n    function isValid(barcode, barcode_type) {\n\n      if (!barcode)\n        return false;\n\n      if (!barcode_type)\n        return false;\n\n      var length = GS1_BARCODE_TYPES_BY_ID[barcode_type].length;\n      if (length && barcode.length !== length) {\n        return false;\n      }\n\n      if (barcode_type === GS1_BARCODE_TYPES_BY_NAME.GS1_UPC_A.id) {\n        return barcode[length - 1].toString() === getChecksum(length, barcode.slice(0, -1)).toString();\n      } else if (barcode_type === GS1_BARCODE_TYPES_BY_NAME.GS1_EAN_8.id) {\n        return barcode[length - 1].toString() === getChecksum(length, barcode.slice(0, -1)).toString();\n      } else if (barcode_type === GS1_BARCODE_TYPES_BY_NAME.GS1_EAN_13.id) {\n        return barcode[length - 1].toString() === getChecksum(length, barcode.slice(0, -1)).toString();\n      } else if (barcode_type === GS1_BARCODE_TYPES_BY_NAME.GS1_CODE_128.id) {\n        return true;\n      }\n    }\n\n    /**\n     * Generates the checksum number accordding to the given parameters\n     * @param length: int\n     * @param number: string\n     * @returns {number}\n     */\n    function getChecksum(length, number) {\n      var result = 0;\n\n      for (var i = length - 2; i >= 0; i -= 2) {\n        result += parseInt(number[i]) * 3;\n      }\n      for (var j = length - 3; j >= 0; j -= 2) {\n        result += parseInt(number[j]);\n      }\n\n      return (10 - (result % 10)) % 10;\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('MailTemplatesController', MailTemplatesController);\n\n  /** @ngInject */\n  function MailTemplatesController($scope, $mdToast, $filter, $compile, $translate, Utils, AccountData, Session, ConfigurationData,\n                                   HTTP_STATUS, api, $mdDialog, $document) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.EMAIL_TEMPLATES;\n    // Data\n    vm.taToolbar = [\n      ['h1', 'h2', 'p', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'],\n      ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent', 'html', 'insertLink', 'wordcount', 'charcount']\n    ];\n    vm.company = angular.copy(AccountData);\n    vm.configuration = angular.copy(ConfigurationData.results[0]);\n    vm.posOrderEmailSubject = vm.configuration.pos_order_email_subject;\n    vm.posOrderEmailBody = vm.configuration.pos_order_email_body;\n    vm.posOrderInvoiceEmailSubject = vm.configuration.pos_order_invoice_email_subject;\n    vm.posOrderInvoiceEmailBody = vm.configuration.pos_order_invoice_email_body;\n    vm.emailTestPosOrder = '';\n    vm.emailTestPosOrderInvoice = '';\n\n    // Methods\n    vm.normalizeHTML = normalizeHTML;\n    vm.sendTestEmail = sendTestEmail;\n    vm.save = save;\n    vm.cancel = cancel;\n\n    // Functions\n    function normalizeHTML(dirty) {\n      const healthy = Utils.sanitizeHTML(dirty, {\n        allowedTags: [\n          \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"p\", \"pre\", \"blockquote\", \"b\", \"i\",\n          \"strike\", \"u\", \"ul\", \"li\", \"ol\", \"a\", \"span\",\n        ],\n        allowedAttributes: {\n          'label': ['href', 'name', 'target'],\n          // We don't currently allow img itself by default, but this\n          // would make sense if we did. You could add srcset here,\n          // and if you do the URL is checked for safety\n          'img': ['src']\n        },\n      });\n    }\n\n    function sendTestEmail(invoice) {\n      var test_email = vm.emailTestPosOrder;\n      if (invoice) {\n        vm.configuration.pos_order_invoice_email_subject = vm.posOrderInvoiceEmailSubject;\n        vm.configuration.pos_order_invoice_email_body = vm.posOrderInvoiceEmailBody;\n        test_email = vm.emailTestPosOrderInvoice;\n      } else {\n        vm.configuration.pos_order_email_subject = vm.posOrderEmailSubject;\n        vm.configuration.pos_order_email_body = vm.posOrderEmailBody;\n      }\n      //Enviar email de proba\n      api.inventories.inventoryConfiguration.save(\n        {\n          option: 'send_test_email',\n          configuration: vm.configuration,\n          invoice: invoice,\n          test_email: test_email\n        },\n        function (results, fn, status) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.TEST_EMAIL_SENT')).position('top right'));\n        }\n      );\n    }\n\n    function save(invoice) {\n      if (invoice) {\n        vm.configuration.pos_order_invoice_email_subject = vm.posOrderInvoiceEmailSubject;\n        vm.configuration.pos_order_invoice_email_body = vm.posOrderInvoiceEmailBody;\n      } else {\n        vm.configuration.pos_order_email_subject = vm.posOrderEmailSubject;\n        vm.configuration.pos_order_email_body = vm.posOrderEmailBody;\n      }\n      api.inventories.inventoryConfiguration.update(\n        vm.configuration,\n        function (result) {\n          if (result.id) {\n            ConfigurationData.results[0] = result;\n            vm.configuration = angular.copy(ConfigurationData.results[0]);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.EMAIL_TEMPLATE_SAVED')).position('top right'));\n            invoice ? $scope.PosOrderInvoiceMailTemplateForm.$setPristine() : $scope.PosOrderMailTemplateForm.$setPristine();\n          }\n        }\n      );\n    }\n\n    function cancel(invoice) {\n      vm.posOrderEmailSubject = vm.configuration.pos_order_email_subject;\n      vm.posOrderEmailBody = vm.configuration.pos_order_email_body;\n      vm.posOrderInvoiceEmailSubject = vm.configuration.pos_order_invoice_email_subject;\n      vm.posOrderInvoiceEmailBody = vm.configuration.pos_order_invoice_email_body;\n      invoice ? $scope.PosOrderInvoiceMailTemplateForm.$setPristine() : $scope.PosOrderMailTemplateForm.$setPristine();\n    }\n  }\n})();\n\n(function () {\n    'use strict';\n    angular\n      .module('app.inventory')\n      .controller('ConfigurationLoyaltyController', ConfigurationLoyaltyController);\n\n    /** @ngInject */\n    function ConfigurationLoyaltyController($scope, $mdDialog, $document, Session, ConfigurationData, Utils, api,\n                                            $mdToast, HTTP_STATUS, $filter, UiGridService, $timeout) {\n\n      var vm = this;\n      $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.LOYALTY_CONFIGURATION;\n\n      // Data\n      vm.configurationData = angular.copy(ConfigurationData.results[0]);\n      vm.prevConfigurationData = angular.copy(vm.configurationData);\n      vm.categories = null;\n      vm.saving = false;\n      vm.columns = {};\n      vm.status = {\n        state: {},\n        ordering: '',\n        search: '',\n        filters: {},\n        dynamicFilters: {},\n        pageNumber: 1,\n        pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n      vm.gridOptions = UiGridService.getGridOptions({\n        onRegisterApi: initializeUidGrid,\n        enableColumnMenus: false,\n        enableSorting: false,\n        enableRowSelection: true,\n        enableCellEditOnFocus: true,\n        enableGridMenu: false,\n      });\n\n      // Methods\n      vm.saveLoyaltyConfiguration = saveLoyaltyConfiguration;\n      vm.cancel = cancel;\n      vm.exampleAccumulated = exampleAccumulated;\n      vm.openAdvancedCategorySearch = openAdvancedCategorySearch;\n      vm.filterChanged = filterChanged;\n      vm.addLoyaltyPercentageToCategory = addLoyaltyPercentageToCategory;\n      vm.openCategoryMassivePercentage = openCategoryMassivePercentage;\n      vm.getPercentage = getPercentage;\n      vm.removePercentage = removePercentage;\n      vm.updatePercentage = updatePercentage;\n      vm.noneChecked = noneChecked;\n\n      // Functions\n\n      var controller = new AbortController();\n\n      function openCategoryMassivePercentage() {\n        var categoriesIds = vm.gridApi.selection.getSelectedRows().map(function (row) {\n          return row.id;\n        });\n        $mdDialog.show({\n          controller: 'CategoryMassivePercentageDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/category-massive-percentage/category-massive-percentage-dialog.html',\n          locals: {\n            selectedCategories: vm.categories\n          }\n        }).then(function (result) {\n          addLoyaltyPercentageToCategories(categoriesIds, result, true);\n        });\n      }\n\n      function openAdvancedCategorySearch() {\n        $mdDialog.show({\n          controller: 'CategoryTreeDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/category-tree/category-tree-dialog.html',\n          locals: {\n            selectedCategories: vm.categories || []\n          }\n        }).then(function (result) {\n          if (result) {\n            var newCategoriesIds = [];\n            var selectedCategories = result.selectedCategories;\n            var deselectedCategories = result.deselectedCategories;\n            if (selectedCategories.length > 0) {\n              addSelectedCategories(selectedCategories, newCategoriesIds);\n            }\n            if (deselectedCategories.length > 0) {\n              removeDeselectedCategories(deselectedCategories);\n            }\n            addLoyaltyPercentageToCategories(newCategoriesIds, 0, false);\n          }\n        });\n      }\n\n      function addSelectedCategories(selectedCategories, newCategoriesIds) {\n        selectedCategories.forEach(function (newCategory) {\n          var exists = vm.categories.some(function (existingCategory) {\n            return existingCategory.id === newCategory.id;\n          });\n\n          if (!exists) {\n            newCategory.loyalty_percentage = 0;\n            newCategoriesIds.push(newCategory.id);\n            vm.categories.push(newCategory);\n          }\n        });\n      }\n\n      function removeDeselectedCategories(deselectedCategories) {\n        deselectedCategories.forEach(function (deselectedCategory) {\n          var index = vm.categories.findIndex(function (existingCategory) {\n            return existingCategory.id === deselectedCategory.id;\n          });\n\n          if (index !== -1) {\n            vm.categories.splice(index, 1);\n            removePercentage(deselectedCategory);\n          }\n        });\n      }\n\n      function initializeUidGrid(gridApi) {\n        vm.gridApi = gridApi;\n        vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n          vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n          if (changedColumn.colDef.visible) {\n            if (vm.timeout) {\n              $timeout.cancel(vm.timeout);\n              vm.timeout = null;\n            }\n          }\n          if (vm.uiGridInitialized) {\n            saveStatus();\n            vm.timeout = $timeout(function () {\n              vm.timeout = null;\n              getGridOrdersPage();\n            }, 2000);\n          }\n        });\n\n        vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n          if (vm.uiGridInitialized) {\n            vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n            saveStatus();\n            getGridOrdersPage();\n          }\n        });\n\n        vm.gridApi.pinning.on.columnPinned($scope, function () {\n          if (vm.uiGridInitialized) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApi.colResizable.on.columnSizeChanged($scope, function () {\n          if (vm.uiGridInitialized) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n          if (vm.uiGridInitialized) {\n            vm.status.pageNumber = newPage;\n            vm.status.pageSize = pageSize;\n            saveStatus();\n            getGridOrdersPage();\n          }\n        });\n\n        setGridOrdersColumns(true);\n\n        $timeout(function () {\n          loadStatus();\n          getGridOrdersPage();\n        }, 200);\n      }\n\n      function restoreGridColumns() {\n        vm.columns = {};\n        vm.gridOptions.columnDefs = [];\n        setGridOrdersColumns(true);\n        saveStatus();\n        getGridOrdersPageGetData(true);\n        saveStatus();\n      }\n\n      function saveStatus() {\n        vm.status.state = vm.gridApi.saveState.save();\n        localStorage.setItem(Session.company.id + '::UIGridLoyaltyController', JSON.stringify(vm.status));\n      }\n\n      function loadStatus() {\n        var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridLoyaltyController'));\n\n        if (loadedStatus) {\n          angular.merge(vm.status, loadedStatus);\n          if (vm.gridApi) {\n            vm.gridApi.saveState.restore($scope, vm.status.state);\n          }\n        }\n      }\n\n      function getColumnStatusVisibility(field, defaultValue, avoidState) {\n        if (vm.status.state.columns) {\n          var column = vm.status.state.columns.find(function (column) {\n            return column.name === field;\n          });\n          if (!avoidState && column) {\n            return column.visible;\n          }\n        }\n        return defaultValue;\n      }\n\n      function constructObject(title, name, permission, avoidState, minWidth, width, enablePinning, pinLeft,\n                               enableHiding, cellTemplate, cellClass, grouping, enableSorting, enableCellEdit) {\n        return {\n          displayName: $filter('translate')(title),\n          headerTooltip: $filter('translate')(title),\n          field: name,\n          permission: permission,\n          visible: getColumnStatusVisibility(name, true, avoidState),\n          minWidth: minWidth,\n          width: width,\n          enablePinning: enablePinning,\n          pinnedLeft: pinLeft,\n          enableHiding: enableHiding, //headerCellClass: 'header-cell-center',\n          cellTemplate: cellTemplate,\n          cellClass: cellClass,\n          grouping: grouping,\n          enableSorting: enableSorting,\n          enableCellEdit: enableCellEdit\n        };\n      }\n\n      function setGridOrdersColumns(avoidState) {\n        // Setting columns default configuration\n        // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n        var codeTemplate = '<div class=\"cell-middle\">' + '{{row.entity.code}}</div>';\n        var nameTemplate = '<div class=\"cell-middle\">' + '{{row.entity.name}}</div>';\n        var numProductsTemplate = '<div class=\"cell-middle text-right\" layout-align=\"start center\">' + '{{row.entity.num_products}}</div>';\n        var percentageTemplate = '<div class=\"cell-middle\" layout=\"row\" layout-align=\"center center\">' +\n          '<input class=\"nd-input text-right mr-5\" type=\\'number\\' ' +\n          'ng-blur=\"grid.appScope.vm.updatePercentage(row.entity, row.entity.loyalty_percentage)\" ' +\n          'ng-model=\"row.entity.loyalty_percentage\"/>' +\n          '<span>%</span>' +\n          '</div>';\n        var actionTemplate = '<div class=\"cell-middle\" layout=\"row\">' +\n          '<div layout=\"row\" layout-align=\"center center\"> ' +\n          '<md-icon md-font-icon=\"icon-trash\" class=\"s20 m-0\" ' +\n          'ng-click=\"grid.appScope.vm.removePercentage(row.entity)\"></md-icon></div>' +\n          '</div>';\n\n        var dict = {\n          code: constructObject('CONFIGURATION.CODE', 'code', true, avoidState, 90, 150, 0, false, 0, codeTemplate, null, null, true, false),\n          name: constructObject('CONFIGURATION.NAME', 'name', true, avoidState, 90, 170, 0, false, 0, nameTemplate, null, null, true, false),\n          num_products: constructObject('CONFIGURATION.NUM_PRODUCTS', 'num_products', true, avoidState, 90, 200, 0, false, 0, numProductsTemplate, 'cell-right', null, false, false),\n          loyalty_percentage: constructObject('INVENTORY_CONFIGURATION.MAX_PERCENTAGE_VALUE', 'loyalty_percentage', true, avoidState, 90, 200, 0, false, 0, percentageTemplate, null, null, false, true),\n          action: constructObject('', 'action', true, avoidState, 70, 80, 1, false, 0, actionTemplate, null, null, false, false)\n        };\n        dict.action.pinnedRight = true;\n\n        angular.extend(vm.columns, dict);\n\n        // Setting only the columns with permission to the grid\n        for (var key in vm.columns) {\n          if (vm.columns[key].permission) {\n            vm.gridOptions.columnDefs.push(vm.columns[key]);\n          }\n        }\n      }\n\n      function getGridOrdersPage() {\n        if (vm.loading) {\n          controller.abort();\n          controller = new AbortController();\n        }\n\n        vm.loading = true;\n        var url = api.urls.inventories.categories.replace('/:id/', '').replace(':option', '');\n        fetch(url + '?' + new URLSearchParams(getGridOrdersPageGetData()), {\n          method: 'GET', headers: {\n            'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n          }, signal: controller.signal\n        })\n          .then(function (response) {\n            return response.json();\n          })\n          .then(function (data) {\n            vm.loading = false;\n            vm.uiGridInitialized = true;\n            vm.categories = data.data;\n            vm.gridOptions.data = data.data;\n            vm.gridOptions.totalItems = data.recordsTotal;\n            $scope.$apply();\n          })\n          .catch(function (error) {\n            throw error;\n          });\n\n      }\n\n      function getGridOrdersPageGetData() {\n        var d = {};\n\n        // Configuration\n        d.pagination = 'datatable';\n\n        // Pagination\n        d.length = vm.status.pageSize;\n        d.page = vm.status.pageNumber;\n        d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n        // Ordering\n        d.ordering = vm.status.ordering;\n\n        // Search\n        if (vm.status.search !== '') {\n          d['search[value]'] = vm.status.search;\n        }\n\n        d.loyalty = true;\n\n        return d;\n      }\n\n      function saveLoyaltyConfiguration(showToast) {\n        if (Session.hasPermission('inventory.configuration.loyalty.update')) {\n          if (typeof showToast === 'undefined') {\n            showToast = true;\n          }\n          if (vm.configurationData.default_contact_balance_ratio === null) {\n            vm.configurationData.default_contact_balance_ratio = 0;\n          }\n          if (vm.configurationData.loyalty_rounding === null) {\n            vm.configurationData.loyalty_rounding = 0;\n          }\n          vm.saving = true;\n          api.inventories.inventoryConfiguration.update(\n            vm.configurationData,\n            function (result, response, status, message) {\n              if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n                if (!vm.prevConfigurationData.default_contact_balance_ratio_active && vm.configurationData.default_contact_balance_ratio_active && showToast) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.BALANCE_ACCUMULATION_ACTIVATED')).position('top right'));\n                } else if (vm.prevConfigurationData.default_contact_balance_ratio_active && !vm.configurationData.default_contact_balance_ratio_active && showToast) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.BALANCE_ACCUMULATION_DEACTIVATED')).position('top right'));\n                } else if (!vm.prevConfigurationData.loyalty_rounding && vm.configurationData.loyalty_rounding && showToast) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.LOYALTY_ROUNDING_ACTIVATED')).position('top right'));\n                } else if (vm.prevConfigurationData.loyalty_rounding && !vm.configurationData.loyalty_rounding && showToast) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.LOYALTY_ROUNDING_DEACTIVATED')).position('top right'));\n                } else if (!vm.prevConfigurationData.accumulate_balance_when_balance_discount && vm.configurationData.accumulate_balance_when_balance_discount && showToast) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ACCUMULATE_BALANCE_ACTIVATED')).position('top right'));\n                } else if (vm.prevConfigurationData.accumulate_balance_when_balance_discount && !vm.configurationData.accumulate_balance_when_balance_discount && showToast) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ACCUMULATE_BALANCE_DEACTIVATED')).position('top right'));\n                } else if (vm.prevConfigurationData.default_contact_balance_ratio !== vm.configurationData.default_contact_balance_ratio && showToast) {\n                  balanceRatioChangedToast();\n                }\n                vm.prevConfigurationData = angular.copy(vm.configurationData);\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.saving = false;\n            }\n          );\n        }\n      }\n\n      function balanceRatioChangedToast() {\n        vm.prev_default_contact_balance_ratio = vm.prevConfigurationData.default_contact_balance_ratio;\n        $mdToast.show(\n          $mdToast.simple()\n            .textContent($filter('translate')('CONFIGURATION.BALANCE_RATIO_UPDATED'))\n            .action($filter('translate')('CONFIGURATION.UNDO_BALANCE_RATIO_CHANGE'))\n            .highlightAction(true)\n            .position('top right')).then(function (clicked) {\n          if (clicked === 'ok') {\n            vm.configurationData.default_contact_balance_ratio = vm.prev_default_contact_balance_ratio;\n            saveLoyaltyConfiguration(false);\n          }\n        });\n      }\n\n      function cancel() {\n        vm.configurationData = angular.copy(ConfigurationData.results[0])\n        $scope.balanceForm.$setPristine();\n      }\n\n      function exampleAccumulated(baseValue) {\n        return Utils.twoDecimals(baseValue * (vm.configurationData.default_contact_balance_ratio / 100.));\n      }\n\n      function addLoyaltyPercentageToCategory(categoryId, loyaltyPercentage) {\n        var url = api.urls.inventories.categories.replace('/:id/', '/').replace(':option', 'add-loyalty-percentage-to-category');\n        fetch(url, {\n          method: 'POST',\n          headers: {\n            'Authorization': 'Token ' + Session.token,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify(\n            {\n              'category_id': categoryId,\n              'loyalty_percentage': loyaltyPercentage\n            }),\n          signal: controller.signal\n        })\n          .then(function (response) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ADD_CATEGORY_TOAST')).position('top right'));\n            filterChanged();\n          })\n          .catch(function (error) {\n            throw error;\n          });\n      }\n\n      function addLoyaltyPercentageToCategories(categoriesIds, loyaltyPercentage, isMassive) {\n        var url = api.urls.inventories.categories.replace('/:id/', '/').replace(':option', 'add-loyalty-percentage-to-categories');\n        fetch(url, {\n          method: 'POST',\n          headers: {\n            'Authorization': 'Token ' + Session.token,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify(\n            {\n              'categories_ids': categoriesIds,\n              'loyalty_percentage': loyaltyPercentage\n            }),\n          signal: controller.signal\n        })\n          .then(function (response) {\n            if (isMassive) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ADD_CATEGORY_TOAST')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ADD_MASSIVE_CATEGORIES_TOAST')).position('top right'));\n            }\n            filterChanged();\n          })\n          .catch(function (error) {\n            throw error;\n          });\n      }\n\n      function resetPagination() {\n        vm.gridApi.grid.options.paginationCurrentPage = 1;\n      }\n\n      function filterChanged() {\n        resetPagination();\n        saveStatus();\n        getGridOrdersPage();\n      }\n\n      function getPercentage(index, category) {\n        return category.loyalty_percentage;\n      }\n\n      function removePercentage(category) {\n        var url = api.urls.inventories.categories.replace('/:id/', '/').replace(':option', 'delete-loyalty-from-category');\n        fetch(url, {\n          method: 'POST',\n          headers: {\n            'Authorization': 'Token ' + Session.token,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify(\n            {\n              'category_id': category.id\n            }),\n          signal: controller.signal\n        })\n          .then(function (response) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.REMOVE_CATEGORY_TOAST', {category: category.name})).position('top right'));\n            filterChanged();\n          })\n          .catch(function (error) {\n            throw error;\n          });\n      }\n\n      function updatePercentage(category, percentage) {\n        addLoyaltyPercentageToCategory(category.id, percentage);\n      }\n\n      function noneChecked() {\n        return (vm.gridApi.selection.getSelectedRows().length === 0);\n      }\n\n    }\n  }\n\n)\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationEmailController', ConfigurationEmailController);\n\n  /** @ngInject */\n  function ConfigurationEmailController($scope, api, Session, $mdToast, $mdDialog, $filter, AccountData, HTTP_STATUS) {\n\n    var vm = this;\n\n    // Data\n    vm.company = AccountData;\n    vm.company_backup = angular.copy(vm.company);\n    vm.session = Session;\n   \n    // Functions\n    vm.cancel = function() {\n      vm.company = angular.copy(vm.company_backup);\n    }\n\n    vm.save = function() {\n      api.account.company.update(\n        vm.company,\n        function (company, fn, status) {\n          if (status !== HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n  \n          vm.company = company;\n          vm.company_backup = angular.copy(vm.company);\n          $scope.emailForm.$setPristine();\n        }\n      );\n    }\n\n    vm.test = function() {\n      api.account.company.update(\n        {\n          id: vm.company.id,\n          option: \"smtp-test\"\n        },\n        function (company, fn, status) {\n          if (status !== HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n  \n          showEmailSentDialog();\n        }\n      );\n    }\n\n    function showEmailSentDialog() {\n      var confirm = $mdDialog.confirm()\n        .title($filter(\"translate\")(\"CONFIGURATION.TEST_EMAIL_SENT_TITLE\"))\n        .htmlContent($filter(\"translate\")(\"CONFIGURATION.TEST_EMAIL_SENT_BODY\", {'to': vm.session.user.email, 'from': vm.company.email_host_email}))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.OK'));\n\n      $mdDialog.show(confirm);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DocumentsController', DocumentsController);\n\n  /** @ngInject */\n  function DocumentsController($scope, InventoryConfiguration, api, $mdToast, $filter, Session) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.DOCUMENTS;\n    $scope.Session = Session;\n\n    var vm = this;\n    vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n\n    // Data\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n\n    // Initialize\n    init();\n\n    function init() {\n\n    }\n\n    // Functions\n    function cancel() {\n      vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n    }\n\n    function save() {\n      if (Session.hasPermission('app.inventory.configuration.documents.update')) {\n        api.inventories.inventoryConfiguration.update(\n          vm.configuration,\n          function (result) {\n            if (result.id) {\n              InventoryConfiguration.results[0] = result;\n              vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.REGISTER_UPDATED')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationDefaultSerialNumbersController', ConfigurationDefaultSerialNumbersController);\n\n  /** @ngInject */\n  function ConfigurationDefaultSerialNumbersController($scope, $filter, $mdToast, InventoryConfiguration, api,\n                                                       SerialNumberTypesData, Session, SERIAL_NUMBER_TYPES) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.DEFAULT_SERIAL_NUMBERS;\n    $scope.Session = Session;\n    $scope.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    var vm = this;\n\n    // Data\n    vm.inventoryConfiguration = InventoryConfiguration.results[0];\n    vm.bill = {};\n    vm.delivery_note = {};\n    vm.purchase = {};\n    vm.sale = {};\n    vm.transfer = {};\n    vm.pos_order = {};\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n\n\n    // Methods\n    vm.initialize = initialize;\n    vm.getAttributes = getAttributes;\n    vm.setAttributes = setAttributes;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.saveDefaults = saveDefaults;\n    vm.cancelDefaults = cancelDefaults;\n    vm.isValid = isValid;\n    // Initialitze\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.bill = getAttributes('bill');\n      vm.delivery_note = getAttributes('delivery_note');\n      vm.transfer = getAttributes('transfer');\n      vm.pos_order = getAttributes('pos_order');\n      vm.sale = getAttributes('sale');\n      vm.purchase = getAttributes('purchase');\n    }\n\n    function getAttributes(attr) {\n      return {\n        counter: angular.copy(vm.inventoryConfiguration[attr + '_counter']),\n        counter_length: angular.copy(vm.inventoryConfiguration[attr + '_counter_length']),\n        prefix: angular.copy(vm.inventoryConfiguration[attr + '_prefix']),\n        suffix: angular.copy(vm.inventoryConfiguration[attr + '_suffix'])\n      };\n    }\n\n    function setAttributes(attr) {\n      vm.inventoryConfiguration[attr + '_counter'] = vm[attr].counter;\n      vm.inventoryConfiguration[attr + '_counter_length'] = vm[attr].counter_length;\n      vm.inventoryConfiguration[attr + '_prefix'] = vm[attr].prefix;\n      vm.inventoryConfiguration[attr + '_suffix'] = vm[attr].suffix;\n    }\n\n    function cancel(attr) {\n      vm[attr] = getAttributes(attr);\n    }\n\n    function save(attr) {\n      if (Session.hasPermission('inventory.configuration.default_serial_numbers.update')) {\n        setAttributes(attr);\n        api.inventories.inventoryConfiguration.update(\n          vm.inventoryConfiguration,\n          function(result) {\n            if (result.id){\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.REGISTER_UPDATED')).position('top right'));\n\n            }\n          }\n        );\n      }\n    }\n\n    function cancelDefaults() {\n      vm.inventoryConfiguration = InventoryConfiguration.results[0];\n    }\n\n    function saveDefaults() {\n      if (Session.hasPermission('inventory.configuration.default_serial_numbers.update')) {\n        api.inventories.inventoryConfiguration.update(\n          vm.inventoryConfiguration,\n          function(result) {\n            if (result.id){\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.REGISTER_UPDATED')).position('top right'));\n\n            }\n          }\n        );\n      }\n    }\n\n    function isValid() {\n      if (vm.inventoryConfiguration.use_product_default_serial_number_type && !vm.inventoryConfiguration.product_default_serial_number_type) {\n        return false;\n      }\n      return true;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationCompositionsController', ConfigurationCompositionsController);\n\n  /** @ngInject */\n  function ConfigurationCompositionsController(PERMISSIONS, $timeout, $scope, $mdToast, $mdDialog, $filter, $document, $translate,\n                                               api, Session, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.COMPOSITIONS;\n\n    var vm = this;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.compositions.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[2, 'asc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION'))\n    ];\n\n    if (Session.hasPermission('inventory.configuration.compositions.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function (data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deleteComposition = deleteComposition;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.compositions.delete')) {\n        $('td:nth-child(4) md-icon', nRow).unbind('click');\n        $('td:nth-child(4) md-icon', nRow).bind('click', function () {\n          deleteComposition(aData);\n        });\n      }\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(composition) {\n      $mdDialog.show({\n        controller: 'ConfigurationCompositionDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/composition-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          composition: composition\n        }\n      }).then(function (result) {\n        vm.dtInstance.rerender();\n      }, function () {\n\n      });\n    }\n\n    function deleteComposition(composition) {\n      if (Session.hasPermission('inventory.configuration.compositions.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_COMPOSITION_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_COMPOSITION_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.compositions.delete(\n            composition,\n            function (response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.COMPOSITION_DELETED')).position('top right'));\n                vm.dtInstance.rerender();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        }, function () {\n\n        });\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationCompanyController', ConfigurationCompanyController);\n\n  /** @ngInject */\n  function ConfigurationCompanyController(\n    $scope,\n    $mdToast,\n    $filter,\n    $compile,\n    $translate,\n    $state,\n    $mdDialog,\n    $document,\n    AccountData,\n    Session,\n    api,\n    DTColumnBuilder,\n    SpainFiscalProfile,\n    COUNTIRES_ISO_APLPHA_2_EN,\n    ContractedPlanLimit,\n    HTTP_STATUS,\n    PLAN_LIMIT_CODES,\n    SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES,\n    $rootScope // <-- Inyectar $rootScope\n  ) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.COMPANY;\n\n    // Data\n    vm.company = angular.copy(AccountData);\n    vm.countries = COUNTIRES_ISO_APLPHA_2_EN;\n    vm.SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES = SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES;\n\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.ngFlow = { flow: {} };\n    vm.useFlowjs = false;\n    vm.isNgFlowUpdate = false;\n    vm.logo = vm.company.logo;\n    vm.contractedPlanLimits = [];\n    vm.multipleFiscalDirectionsLimit = null;\n\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.account.fiscalAddresses.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('legal_name').withTitle($filter('translate')('COMPANY.LEGAL_NAME')),\n      DTColumnBuilder.newColumn('vat').withTitle($filter('translate')('COMPANY.VAT')),\n      DTColumnBuilder.newColumn('address_1').withTitle($filter('translate')('COMPANY.ADDRESS')),\n      DTColumnBuilder.newColumn('city').withTitle($filter('translate')('COMPANY.CITY'))\n    ];\n    vm.showFiscalProfile = Session.company.hasFiscalProfile();\n    vm.fiscalProfileTemplate = getFiscalProfileTemplate();\n    vm.fiscalProfile = Session.company.fiscal_profile;\n    vm.savingFiscalProfile = false;\n\n    // Methods\n    vm.saveCompany = saveCompany;\n    vm.cancel = cancel;\n    vm.postSave = postSave;\n    vm.fileAdded = fileAdded;\n    vm.fileSuccess = fileSuccess;\n    vm.createClicked = createClicked;\n    vm.hasSubscription = Session.hasSubscription;\n    vm.allowFiscalAddressCreation = allowFiscalAddressCreation;\n    vm.blockFiscalAddressCreation = blockFiscalAddressCreation;\n    vm.saveFiscalProfile = saveFiscalProfile;\n    vm.isVerifactuActive = false;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.isVerifactuActive = isVerifactuActive();\n      loadContractedPlanLimits();\n    }\n\n    function loadContractedPlanLimits() {\n      api.account.contractedPlanLimits.list(\n        {\n          codes: PLAN_LIMIT_CODES.MULTIPLE_FISCAL_DIRECTIONS\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && results.results.length) {\n            results.results.forEach(function(cpl) {\n              vm.contractedPlanLimits.push(new ContractedPlanLimit(cpl));\n            });\n            vm.multipleFiscalDirectionsLimit = vm.contractedPlanLimits.find(function(cpl) {\n              return cpl.code === PLAN_LIMIT_CODES.MULTIPLE_FISCAL_DIRECTIONS;\n            });\n          }\n        }\n      );\n    }\n\n    function allowFiscalAddressCreation() {\n      return vm.multipleFiscalDirectionsLimit && vm.multipleFiscalDirectionsLimit.allowsCreation();\n    }\n\n    function blockFiscalAddressCreation() {\n      return vm.multipleFiscalDirectionsLimit && !vm.multipleFiscalDirectionsLimit.allowsCreation();\n    }\n\n    function fileAdded(file) {\n      var fileReader = new FileReader();\n      fileReader.readAsDataURL(file.file);\n      fileReader.onload = function(event) {\n        vm.logo = event.target.result;\n        $scope.companyForm.$dirty = true;\n        $scope.companyForm.$setDirty();\n        $scope.$apply();\n      };\n      vm.useFlowjs = true;\n    }\n\n    function fileSuccess(file, message) {\n      vm.useFlowjs = false;\n      postSave(JSON.parse(message), 200);\n    }\n\n    function saveCompany() {\n      if (Session.hasPermission('inventory.configuration.company.update')) {\n        // To upload the file we use Flow.js\n        if (vm.useFlowjs) {\n          vm.ngFlow.flow.opts.headers = { 'Authorization': 'Token ' + Session.token };\n          vm.ngFlow.flow.opts.target = api.urls.account.company.replace(':id/:option', vm.company.id);\n          vm.ngFlow.flow.opts.query = { company: JSON.stringify(vm.company) };\n          vm.ngFlow.flow.opts.uploadMethod = 'PUT';\n          vm.ngFlow.flow.upload();\n\n          // If we didn't change the file we save normal\n        } else {\n          api.account.company.update(\n            vm.company,\n            function(response, fn, status, message) {\n              postSave(response, status);\n            }\n          );\n        }\n      }\n    }\n\n    function postSave(response, status) {\n      if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n        angular.extend(vm.company, response);\n        AccountData = angular.copy(vm.company);\n        $scope.companyForm.$setPristine();\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('COMPANY.COMPANY_UPDATED')).position('top right'));\n\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n    function cancel() {\n      vm.company = angular.copy(AccountData);\n      $scope.companyForm.$setPristine();\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        openFiscalAddress(aData);\n      });\n      return nRow;\n    }\n\n    function initComplete() {\n\n    }\n\n    function createClicked() {\n      openFiscalAddress({});\n    }\n\n    function openFiscalAddress(fiscalAddress) {\n      if (!Session.hasSubscription || (vm.multipleFiscalDirectionsLimit && vm.multipleFiscalDirectionsLimit.allowsCreation())) {\n        $mdDialog.show({\n          controller: 'FiscalAddressDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/fiscal-address-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            fiscalAddress: fiscalAddress,\n            contractedPlanLimit: vm.multipleFiscalDirectionsLimit\n          }\n        }).then(function(result) {\n          vm.dtInstance.rerender();\n        }, function() {\n        });\n      } else {\n        $state.go('app.account.upgrade_plan', {\n          source: 'inventory.configuration.company.multiple_fiscal_directions'\n        });\n      }\n    }\n\n    function saveFiscalProfile() {\n      if (!Session.hasPermission('inventory.configuration.company.update')) {\n        return;\n      }\n\n      if (typeof (vm.fiscalProfile, SpainFiscalProfile)) {\n        saveSpainFiscalProfile();\n      }\n    }\n\n    function saveSpainFiscalProfile() {\n      if (vm.savingFiscalProfile) {\n        return;\n      }\n      vm.savingFiscalProfile = true;\n      api.account.fiscalProfiles.spainFiscalProfiles.update(\n        vm.fiscalProfile,\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SPAIN_FISCAL_PROFILE.FISCAL_INFORMATION_SAVED')).position('top right'));\n            $rootScope.$emit('ConfigurationCompanyController::spainFiscalProfileSaved');\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.savingFiscalProfile = false;\n        }\n      );\n    }\n\n    function getFiscalProfileTemplate() {\n      if (!vm.showFiscalProfile) {\n        return;\n      }\n      if (Session.company.fiscal_profile.isSpainFiscalProfile()) {\n        return 'app/main/apps/inventory/views/configuration/forms/fiscal-profile-forms/spain-fiscal-profile-form.html';\n      }\n    }\n\n    function isVerifactuActive() {\n      var verifactuApp = Session.company.getVerifactuApp(null);\n      return !!verifactuApp;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationCategoriesController', ConfigurationCategoriesController);\n\n  /** @ngInject */\n  function ConfigurationCategoriesController($scope, $timeout, PERMISSIONS, Session, $mdDialog, api,\n                                             $mdToast, $filter, $translate, $compile, DTColumnBuilder, $document,\n                                             HTTP_STATUS, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.CATEGORIES;\n\n    var vm = this;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.selectedCategory = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.categories.replace('/:id/', '').replace(':option', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[2, 'asc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"info\"i>><\"right\"<\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION'))\n    ];\n\n    vm.dtInstance2 = {};\n\n    vm.dtOptions2 = angular.copy(vm.dtOptions);\n    vm.dtOptions2.ajax.url = api.urls.inventories.subcategories.replace('/:id/', '');\n    vm.dtOptions2.rowCallback = rowCallback2;\n    vm.dtOptions2.initComplete = initComplete2;\n    vm.dtOptions2.order = [[3, 'asc']];\n    vm.dtOptions2.ajax.data = function (d) {\n      d.pagination = 'datatable';\n      d.serializer = 'SubcategorySimpleSerializer';\n      if (vm.selectedCategory) {\n        d.category_id = vm.selectedCategory.id;\n      }\n    };\n\n    vm.dtColumns2 = [\n      DTColumnBuilder.newColumn('category').notVisible().withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION')),\n    ];\n\n    if (Session.hasPermission('inventory.configuration.categories.update') || Session.hasPermission('inventory.configuration.categories.create')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right fullwidth')\n        .renderWith(function (data, type, full) {\n          var cell = '';\n          if (Session.hasPermission('inventory.configuration.categories.update')) {\n            cell += '<md-icon md-font-icon=\"icon-pencil\" class=\"s20 mr-10\"></md-icon>';\n          }\n          if (Session.hasPermission('inventory.configuration.categories.create')) {\n            cell += '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n          }\n          return cell;\n        }));\n\n      vm.dtColumns2.push(\n        DTColumnBuilder.newColumn('delete').notSortable()\n          .withClass('text-right fullwidth')\n          .renderWith(function (data, type, full) {\n            var cell = '';\n            if (Session.hasPermission('inventory.configuration.categories.update')) {\n              cell += '<md-icon md-font-icon=\"icon-pencil\" class=\"s20 mr-10\"></md-icon>';\n            }\n            if (Session.hasPermission('inventory.configuration.categories.create')) {\n              cell += '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n            }\n            return cell;\n          })\n      );\n    }\n\n    $scope.$on('createClicked', createCategory);\n    $scope.$on('create2Clicked', createSubcategory);\n\n    // Methods\n\n\n    // Functions\n\n    function initComplete() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#category-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function initComplete2() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#subcategory-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        selectCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        selectCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        selectCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      if (Session.hasPermission('inventory.configuration.categories.update')) {\n        $('td:nth-child(4) md-icon.icon-pencil', nRow).unbind('click');\n        $('td:nth-child(4) md-icon.icon-pencil', nRow).bind('click', function () {\n          editCategory(aData);\n        });\n      }\n\n      if (Session.hasPermission('inventory.configuration.categories.delete')) {\n        $('td:nth-child(4) md-icon.icon-trash', nRow).unbind('click');\n        $('td:nth-child(4) md-icon.icon-trash', nRow).bind('click', function () {\n          deleteCategory(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n    function rowCallback2(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(4) md-icon.icon-pencil', nRow).unbind('click');\n      $('td:nth-child(4) md-icon.icon-pencil', nRow).bind('click', function () {\n        editSubcategory(aData);\n      });\n\n      $('td:nth-child(4) md-icon.icon-trash', nRow).unbind('click');\n      $('td:nth-child(4) md-icon.icon-trash', nRow).bind('click', function () {\n        deleteSubcategory(aData);\n      });\n\n\n      return nRow;\n    }\n\n    function editCategory(category) {\n      if (Session.hasPermission('inventory.configuration.categories.update')) {\n        $mdDialog.show({\n          controller: 'CategoryDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/category-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: category,\n            isCategory: true,\n            categories: [],\n            specificCategory: null\n          }\n        }).then(function (object) {\n          if (object && Session.hasPermission('inventory.configuration.categories.update')) {\n            api.inventories.categories.update(object,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  vm.dtInstance.rerender();\n                }\n              });\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function editSubcategory(subcategory) {\n      if (Session.hasPermission('inventory.configuration.categories.update')) {\n        $mdDialog.show({\n          controller: 'CategoryDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/category-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: subcategory,\n            isCategory: false,\n            categories: [],\n            specificCategory: vm.selectedCategory\n          }\n        }).then(function (object) {\n          if (object && Session.hasPermission('inventory.configuration.categories.update')) {\n            api.inventories.subcategories.update(object,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  vm.dtInstance2.DataTable.column(0).search(vm.selectedCategory.id).draw();\n                }\n              });\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function deleteCategory(category) {\n      if (Session.hasPermission('inventory.configuration.categories.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_CATEGORY_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_CATEGORY_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.categories.delete(\n            category,\n            function (response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.CATEGORY_DELETED')).position('top right'));\n                vm.dtInstance.rerender();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n      }\n    }\n\n    function deleteSubcategory(subcategory) {\n      if (Session.hasPermission('inventory.configuration.categories.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_SUBCATEGORY_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_SUBCATEGORY_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.subcategories.delete(\n            subcategory,\n            function (response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.CATEGORY_DELETED')).position('top right'));\n                vm.dtInstance2.DataTable.column(0).search(vm.selectedCategory.id).draw();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n      }\n    }\n\n    function createCategory() {\n      if (Session.hasPermission('inventory.configuration.categories.create')) {\n        $mdDialog.show({\n          controller: 'CategoryDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/category-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: {},\n            isCategory: true,\n            categories: [],\n            specificCategory: null\n          }\n        }).then(function (object) {\n          if (object) {\n            api.inventories.categories.save(object,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  vm.dtInstance.rerender();\n                }\n              });\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function createSubcategory() {\n      if (Session.hasPermission('inventory.configuration.categories.create')) {\n        $mdDialog.show({\n          controller: 'CategoryDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/category-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: {},\n            isCategory: false,\n            categories: vm.selectedCategory ? [] : vm.dtInstance.DataTable.data(),\n            specificCategory: vm.selectedCategory\n          }\n        }).then(function (object) {\n\n          if (object) {\n            // Serialize only the pk\n            object.category = object.category.id;\n            api.inventories.subcategories.save(object,\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  if (vm.selectedCategory) {\n                    vm.dtInstance2.DataTable.column(0).search(vm.selectedCategory.id).draw();\n                  } else {\n                    if (vm.dtInstance2.DataTable) {\n                      vm.dtInstance2.DataTable.draw();\n                    }\n                  }\n                }\n              });\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function selectCategory(clickedCategory) {\n      vm.selectedCategory = clickedCategory;\n      var elements = document.getElementsByClassName('selected-row');\n      // Remove css classes to deselect all table cells\n      while (elements.length > 0) {\n        elements[0].classList.remove('selected-row', 'md-grey-200-bg');\n      }\n\n      if (vm.dtInstance2.DataTable) {\n        vm.dtInstance2.DataTable.draw();\n      }\n      $scope.$apply();\n\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationBrandsController', ConfigurationBrandsController);\n\n  function ConfigurationBrandsController(PERMISSIONS, $timeout, $scope, $mdToast, $mdDialog, $filter, $document, $translate, api,\n                                         Session, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.BRANDS;\n\n    var vm = this;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.brands.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[2, 'asc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('CONFIGURATION.CODE')),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('position').withTitle($filter('translate')('CONFIGURATION.POSITION'))\n\n    ];\n    if (Session.hasPermission('inventory.configuration.brands.delete')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right w-50')\n        .renderWith(function (data, type, full) {\n          return '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n        }));\n    }\n\n    // Methods\n    vm.createClicked = createClicked;\n    vm.deleteBrand = deleteBrand;\n\n    $scope.$on('createClicked', createClicked);\n\n    // Functions\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#input-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(1)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(2)', nRow).unbind('click');\n      $('td:nth-child(2)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      $('td:nth-child(3)', nRow).unbind('click');\n      $('td:nth-child(3)', nRow).bind('click', function () {\n        openDialog(aData);\n      });\n\n      if (Session.hasPermission('inventory.configuration.brands.delete')) {\n        $('td:nth-child(4) md-icon', nRow).unbind('click');\n        $('td:nth-child(4) md-icon', nRow).bind('click', function () {\n          deleteBrand(aData);\n        });\n      }\n      return nRow;\n    }\n\n    function createClicked() {\n      openDialog({});\n    }\n\n    function openDialog(brand) {\n      $mdDialog.show({\n        controller: 'ConfigurationBrandDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/brand-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          brand: brand\n        }\n      }).then(function (result) {\n        vm.dtInstance.rerender();\n      }, function () {\n      });\n    }\n\n    function deleteBrand(brand) {\n      if (Session.hasPermission('inventory.configuration.brands.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_BRAND_TITLE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_BRAND_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('inventory.configuration.brands.delete')) {\n            api.inventories.brands.delete(\n              brand,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.BRAND_DELETED')).position('top right'));\n                  vm.dtInstance.rerender();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationBarcodesController', ConfigurationBarcodesController);\n\n  /** @ngInject */\n  function ConfigurationBarcodesController($scope, InventoryConfiguration, GS1_BARCODE_TYPES_BY_ID, api, $mdToast, $filter,\n                                           NdBarcodeService) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.BARCODES;\n\n    var vm = this;\n\n\n    // Data\n    vm.GS1_BARCODE_TYPES_BY_ID = GS1_BARCODE_TYPES_BY_ID;\n    vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n    vm.nextEan13 = '';\n    vm.nextEan8 = '';\n    vm.nextUpcA = '';\n    vm.nextCode128 = '';\n    vm.maxNumberCounterEan13 = Math.pow(10, 12 - vm.configuration.ean_13_company_prefix.length) - 1;\n    vm.maxNumberCounterUpca = Math.pow(10, 11 - vm.configuration.upc_a_company_prefix.length) - 1;\n    vm.maxNumberCounterEan8 = Math.pow(10, 7 - vm.configuration.ean_8_company_prefix.length) - 1;\n    vm.errorEan13 = false;\n    vm.errorEan8 = false;\n    vm.errorUpcA = false;\n\n    vm.options = {\n      width: 2,\n      height: 100,\n      quite: 10,\n      displayValue: true,\n      font: \"monospace\",\n      textAlign: \"center\",\n      fontSize: 12,\n      backgroundColor: \"\",\n      lineColor: \"#000\"\n    };\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.getNextEan13 = getNextEan13;\n    vm.getNextEan8 = getNextEan8;\n    vm.getNextUpcA = getNextUpcA;\n    vm.getNextCode128 = getNextCode128;\n\n    // Initialize\n    init();\n\n    function init() {\n      vm.getNextEan13();\n      vm.getNextEan8();\n      vm.getNextUpcA();\n      vm.getNextCode128();\n    }\n\n    // Functions\n    function cancel() {\n      vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n    }\n\n    function save() {\n      api.inventories.inventoryConfiguration.update(\n        vm.configuration,\n        function (result) {\n          if (result.id) {\n            InventoryConfiguration.results[0] = result;\n            vm.configuration = angular.copy(InventoryConfiguration.results[0]);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.REGISTER_UPDATED')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function getNextEan13() {\n      try {\n        var length = 13;\n        var counter = angular.copy(vm.configuration.ean_13_product_counter).toString();\n\n        while (vm.configuration.ean_13_company_prefix.length + counter.length < length - 1)\n          counter = '0' + counter;\n\n        vm.nextEan13 = vm.configuration.ean_13_company_prefix + counter + NdBarcodeService.getChecksum(length, vm.configuration.ean_13_company_prefix + counter);\n        JsBarcode(\"#ean-13\", vm.nextEan13, {format: \"ean13\", height: 58, lineColor: '#444'});\n        vm.errorEan13 = false;\n        } catch (error){\n        vm.errorEan13 = true;\n      }\n\n    }\n\n    function getNextEan8() {\n      try{\n        var length = 8;\n        var counter = angular.copy(vm.configuration.ean_8_product_counter).toString();\n\n        while (vm.configuration.ean_8_company_prefix.length + counter.length < length - 1)\n          counter = '0' + counter;\n\n        vm.nextEan8 = vm.configuration.ean_8_company_prefix + counter + NdBarcodeService.getChecksum(length, vm.configuration.ean_8_company_prefix + counter);\n        JsBarcode(\"#ean-8\", vm.nextEan8, {format: \"ean8\", height: 58, lineColor: '#444'});\n        vm.errorEan8 = false;\n      }catch (error) {\n        vm.errorEan8 = true;\n      }\n\n    }\n\n    function getNextUpcA() {\n      try {\n        var length = 12;\n        var counter = angular.copy(vm.configuration.upc_a_product_counter).toString();\n\n        while (vm.configuration.upc_a_company_prefix.length + counter.length < length - 1)\n          counter = '0' + counter;\n\n        vm.nextUpcA = vm.configuration.upc_a_company_prefix + counter + NdBarcodeService.getChecksum(length, vm.configuration.upc_a_company_prefix + counter);\n        JsBarcode(\"#upc-a\", vm.nextUpcA, {format: \"upc\", height: 58, lineColor: '#444'});\n        vm.errorUpcA = false;\n      } catch (error) {\n          vm.errorUpcA = true;\n      }\n\n    }\n\n    function getNextCode128() {\n      // The minimum barcode length is 3.\n      // This logic is done at save method of each barcode object\n      if(vm.configuration.code_128_product_counter){\n        var tempCode128ProductCounter = vm.configuration.code_128_product_counter.toString();\n        while (tempCode128ProductCounter.length < 3) {\n          tempCode128ProductCounter = '0' + tempCode128ProductCounter;\n        }\n        JsBarcode(\"#code-128\", tempCode128ProductCounter, {\n          // format: 'code128a', code128a cannot paint \"nd1.\"\n          format: \"code128b\",\n          height: 58,\n          lineColor: '#444'\n        });\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationAttributesController', ConfigurationAttributesController);\n\n  /** @ngInject */\n  function ConfigurationAttributesController(\n    $scope,\n    $timeout,\n    PERMISSIONS,\n    Session,\n    $mdDialog,\n    api,\n    $mdToast,\n    $filter,\n    $translate,\n    $compile,\n    DTColumnBuilder,\n    $document,\n    HTTP_STATUS,\n    ATTRIBUTE_CATEGORY_TYPES\n  ) {\n\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.ATTRIBUTES;\n    $scope.$parent.vm.create2Disabled = true;\n    var vm = this;\n\n    // Data\n    vm.selectedAttributeCategory = null;\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.attributeCategories.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[0, 'asc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"info\"i>><\"right\"<\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: true,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateDuration: -1,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME')),\n      DTColumnBuilder.newColumn('type').withTitle($filter('translate')('CONFIGURATION.ATTRIBUTE_TYPE'))\n        .renderWith(function(data, type, full) {\n          return '<span class=\"text-boxed\">' + $filter('translate')('CONFIGURATION.ATTRIBUTE_TYPE_' + ATTRIBUTE_CATEGORY_TYPES[data]) + '</span>';\n        })\n      /*\n      DTColumnBuilder.newColumn('total_products').withTitle($filter('translate')('CONFIGURATION.TOTAL_PRODUCTS'))\n        .notSortable()\n       */\n    ];\n\n    vm.dtInstance2 = {};\n\n    vm.dtOptions2 = angular.copy(vm.dtOptions);\n    vm.dtOptions2.ajax.url = api.urls.inventories.attributes.replace('/:id/', '');\n    vm.dtOptions2.rowCallback = rowCallback2;\n    vm.dtOptions2.initComplete = initComplete2;\n    vm.dtOptions2.order = [[0, 'asc']];\n    vm.dtOptions2.ajax.data = function(d) {\n      d.pagination = 'datatable';\n      if (vm.selectedAttributeCategory) {\n        d.attribute_category_id = vm.selectedAttributeCategory.id;\n      }\n    };\n\n    vm.dtColumns2 = [\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('CONFIGURATION.NAME'))\n    ];\n\n    if (Session.hasPermission('inventory.configuration.attributes.update') || Session.hasPermission('inventory.configuration.attributes.create')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('delete').notSortable()\n        .withClass('text-right fullwidth')\n        .renderWith(function(data, type, full) {\n          var cell = '';\n          if (Session.hasPermission('inventory.configuration.attributes.update')) {\n            cell += '<md-icon md-font-icon=\"icon-pencil\" class=\"s20 mr-10\"></md-icon>';\n          }\n          if (Session.hasPermission('inventory.configuration.attributes.create')) {\n            cell += '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n          }\n          return cell;\n        })\n      );\n\n      vm.dtColumns2.push(\n        DTColumnBuilder.newColumn('delete').notSortable()\n          .withClass('text-right fullwidth')\n          .renderWith(function(data, type, full) {\n            var cell = '';\n            if (Session.hasPermission('inventory.configuration.attributes.update')) {\n              cell += '<md-icon md-font-icon=\"icon-pencil\" class=\"s20 mr-10\"></md-icon>';\n            }\n            if (Session.hasPermission('inventory.configuration.attributes.create')) {\n              cell += '<md-icon md-font-icon=\"icon-trash\" class=\"s20\"></md-icon>';\n            }\n            return cell;\n          })\n      );\n    }\n\n    $scope.$on('createClicked', createAttributeCategory);\n    $scope.$on('create2Clicked', createAttribute);\n\n    // Methods\n\n\n    // Functions\n\n    function initComplete() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#attribute-category-search');\n\n      var state = api.state();\n      if (state && state.search) {\n        searchBox.val(state.search.search);\n        searchBox.trigger('input');\n      }\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function initComplete2() {\n\n      var api = this.api();\n      var searchBox = angular.element('body').find('#attribute-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        selectAttributeCategory(aData);\n        $('td', nRow).addClass('selected-row md-grey-200-bg');\n      });\n\n      if (Session.hasPermission('inventory.configuration.attributes.update')) {\n        $('td:last-child md-icon.icon-pencil', nRow).unbind('click');\n        $('td:last-child md-icon.icon-pencil', nRow).bind('click', function(event) {\n          event.stopPropagation();\n          editAttributeCategory(aData);\n        });\n      }\n\n      if (Session.hasPermission('inventory.configuration.attributes.delete')) {\n        $('td:last-child md-icon.icon-trash', nRow).unbind('click');\n        $('td:last-child md-icon.icon-trash', nRow).bind('click', function() {\n          event.stopPropagation();\n          deleteAttributeCategory(aData);\n        });\n      }\n\n      return nRow;\n    }\n\n    function rowCallback2(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n\n      // Click on the first and second cell\n      $('td:nth-child(2) md-icon.icon-pencil', nRow).unbind('click');\n      $('td:nth-child(2) md-icon.icon-pencil', nRow).bind('click', function() {\n        editAttribute(aData);\n      });\n\n      $('td:nth-child(2) md-icon.icon-trash', nRow).unbind('click');\n      $('td:nth-child(2) md-icon.icon-trash', nRow).bind('click', function() {\n        deleteAttribute(aData);\n      });\n\n\n      return nRow;\n    }\n\n    function editAttributeCategory(attributeCategory) {\n      if (Session.hasPermission('inventory.configuration.attributes.update')) {\n        $mdDialog.show({\n          controller: 'AttributeDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/attribute-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: attributeCategory,\n            isAttributeCategory: true,\n            attributeCategories: [],\n            specificAttributeCategory: null\n          }\n        }).then(function(object) {\n          if (object && Session.hasPermission('inventory.configuration.attributes.update')) {\n            api.inventories.attributeCategories.update(object,\n              function(results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  vm.dtInstance.rerender();\n                }\n              });\n          }\n        }, function(error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function editAttribute(attribute) {\n      if (Session.hasPermission('inventory.configuration.attributes.update')) {\n        $mdDialog.show({\n          controller: 'AttributeDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/attribute-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: attribute,\n            isAttributeCategory: false,\n            attributeCategories: [],\n            specificAttributeCategory: vm.selectedAttributeCategory\n          }\n        }).then(function(object) {\n          if (object && Session.hasPermission('inventory.configuration.attributes.update')) {\n            api.inventories.attributes.update(object,\n              function(results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  vm.dtInstance2.DataTable.draw();\n                }\n              });\n          }\n        }, function(error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function deleteAttributeCategory(attributeCategory) {\n      if (Session.hasPermission('inventory.configuration.attributes.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_ATTRIBUTE_CATEGORY'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_ATTRIBUTE_CATEGORY_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          api.inventories.attributeCategories.delete(\n            attributeCategory,\n            function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ATTRIBUTE_CATEGORY_DELETED')).position('top right'));\n                vm.dtInstance.rerender();\n              } else if (status === HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ATTRIBUTE_CATEGORY_ERROR_MESSAGE')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n      }\n    }\n\n    function deleteAttribute(attribute) {\n      if (Session.hasPermission('inventory.configuration.attributes.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONFIGURATION.DELETE_ATTRIBUTE'))\n          .textContent($filter('translate')('CONFIGURATION.DELETE_ATTRIBUTE_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          api.inventories.attributes.delete(\n            attribute,\n            function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ATTRIBUTE_DELETED')).position('top right'));\n                vm.dtInstance2.DataTable.draw();\n              } else if (status === HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.ATTRIBUTE_ERROR_MESSAGE')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        });\n      }\n    }\n\n    function createAttributeCategory() {\n      if (Session.hasPermission('inventory.configuration.attributes.create')) {\n        $mdDialog.show({\n          controller: 'AttributeDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/attribute-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: {},\n            isAttributeCategory: true,\n            attributeCategories: [],\n            specificAttributeCategory: null\n          }\n        }).then(function(object) {\n          if (object) {\n            api.inventories.attributeCategories.save(object,\n              function(results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  vm.selectedAttributeCategory = results;\n                  vm.dtInstance.rerender();\n                  if (vm.dtInstance2.DataTable) {\n                    vm.dtInstance2.DataTable.draw();\n                  }\n                }\n              });\n          }\n        }, function(error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function createAttribute() {\n      if (Session.hasPermission('inventory.configuration.attributes.create')) {\n        $mdDialog.show({\n          controller: 'AttributeDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/attribute-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            object: {},\n            isAttributeCategory: false,\n            attributeCategories: vm.selectedAttributeCategory ? [] : vm.dtInstance.DataTable.data(),\n            specificAttributeCategory: vm.selectedAttributeCategory\n          }\n        }).then(function(object) {\n          if (object) {\n            // Serialize only the pk\n            object.attribute_category_id = object.attribute_category;\n            api.inventories.attributes.save(object,\n              function(results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  if (vm.selectedAttributeCategory) {\n                    vm.dtInstance2.DataTable.draw();\n                  } else {\n                    if (vm.dtInstance2.DataTable) {\n                      vm.dtInstance2.DataTable.draw();\n                    }\n                  }\n                }\n              });\n          }\n        }, function(error) {\n          // Do not remove\n        });\n      }\n    }\n\n    function selectAttributeCategory(clickedAttributeCategory) {\n      var elements = document.getElementsByClassName('selected-row');\n      while (elements.length > 0) {\n        elements[0].classList.remove('selected-row', 'md-grey-200-bg');\n      }\n\n      if (clickedAttributeCategory.type !== ATTRIBUTE_CATEGORY_TYPES.MULTIPLE_ATTRIBUTES &&\n        clickedAttributeCategory.type !== ATTRIBUTE_CATEGORY_TYPES.SINGLE_ATTRIBUTE) {\n        vm.selectedAttributeCategory = null;\n        $scope.$parent.vm.create2Disabled = true;\n        $scope.$apply();\n        return;\n      }\n\n      vm.selectedAttributeCategory = clickedAttributeCategory;\n      $scope.$parent.vm.create2Disabled = false;\n      if (vm.dtInstance2.DataTable) {\n        vm.dtInstance2.DataTable.draw();\n      }\n      $scope.$apply();\n\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationAppearanceController', ConfigurationAppearanceController);\n\n  /** @ngInject */\n  function ConfigurationAppearanceController($scope, fuseTheming, $cookies) {\n\n    var vm = this;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.configurationOptions.APPEARANCE;\n\n    // Data\n    vm.themes = fuseTheming.themes;\n\n    vm.layoutModes = [{\n      label: 'Boxed',\n      value: 'boxed'\n    }, {\n      label: 'Wide',\n      value: 'wide'\n    }];\n    vm.layoutStyles = [{\n      label: 'Vertical Navigation',\n      value: 'verticalNavigation',\n      figure: '/assets/images/theme-options/vertical-nav.95f31526.jpg'\n    }, {\n      label: 'Vertical Navigation with Fullwidth Toolbar',\n      value: 'verticalNavigationFullwidthToolbar',\n      figure: '/assets/images/theme-options/vertical-nav-with-full-toolbar.21885632.jpg'\n    }, {\n      label: 'Vertical Navigation with Fullwidth Toolbar 2',\n      value: 'verticalNavigationFullwidthToolbar2',\n      figure: '/assets/images/theme-options/vertical-nav-with-full-toolbar-2.3bdde067.jpg'\n    }, {\n      label: 'Horizontal Navigation',\n      value: 'horizontalNavigation',\n      figure: '/assets/images/theme-options/horizontal-nav.4c516707.jpg'\n    }, {\n      label: 'Content with Toolbar',\n      value: 'contentWithToolbar',\n      figure: '/assets/images/theme-options/content-with-toolbar.c06648dc.jpg'\n    }, {\n      label: 'Content Only',\n      value: 'contentOnly',\n      figure: '/assets/images/theme-options/content-only.8c127b34.jpg'\n    },];\n\n    vm.layoutMode = 'wide';\n    vm.layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n\n    // Methods\n    vm.setActiveTheme = setActiveTheme;\n    vm.getActiveTheme = getActiveTheme;\n    vm.updateLayoutMode = updateLayoutMode;\n    vm.updateLayoutStyle = updateLayoutStyle;\n\n    //////////\n\n    /**\n     * Set active theme\n     *\n     * @param themeName\n     */\n    function setActiveTheme(themeName) {\n      fuseTheming.setActiveTheme(themeName);\n    }\n\n    /**\n     * Get active theme\n     *\n     * @returns {service.themes.active|{name, theme}}\n     */\n    function getActiveTheme() {\n      return fuseTheming.themes.active;\n    }\n\n    /**\n     * Update layout mode\n     */\n    function updateLayoutMode() {\n      var bodyEl = angular.element('body');\n\n      // Update class on body element\n      bodyEl.toggleClass('boxed', (vm.layoutMode === 'boxed'));\n    }\n\n    /**\n     * Update layout style\n     */\n    function updateLayoutStyle() {\n      // Update the cookie\n      $cookies.put('layoutStyle', vm.layoutStyle);\n\n      // Reload the page to apply the changes\n      location.reload();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationWebhookDialogController', ConfigurationWebhookDialogController);\n\n  /** @ngInject */\n  function ConfigurationWebhookDialogController($scope, $mdDialog, $mdToast, $filter, webhook, Session, api, HTTP_STATUS,\n                                                hotkeys, WEBHOOK_TYPES) {\n    var vm = this;\n\n    // Data\n    vm.saveing = false;\n    vm.webhook = webhook;\n    vm.WEBHOOK_TYPES = WEBHOOK_TYPES;\n    vm.webhookTypes = [];\n    vm.webhookTypes = [\n      {\n        name: 'WEBHOOKS.WEBHOOK_TYPE_CUSTOMERS',\n        webhooks: [\n          WEBHOOK_TYPES.CUSTOMER_CREATED,\n          WEBHOOK_TYPES.CUSTOMER_UPDATED,\n          WEBHOOK_TYPES.CUSTOMER_DELETED,\n          WEBHOOK_TYPES.CUSTOMERS_IMPORTED\n\n        ]\n      },{\n        name: 'WEBHOOKS.WEBHOOK_TYPE_ORDERS',\n        webhooks: [\n          WEBHOOK_TYPES.ORDER_CREATED,\n          WEBHOOK_TYPES.ORDER_UPDATED,\n          WEBHOOK_TYPES.ORDER_DELETED,\n          WEBHOOK_TYPES.ORDER_RESTORED\n        ]\n      },{\n        name: 'WEBHOOKS.WEBHOOK_TYPE_SALE_ORDERS',\n        webhooks: [\n          WEBHOOK_TYPES.SALE_ORDER_CREATED,\n          WEBHOOK_TYPES.SALE_ORDER_UPDATED,\n          WEBHOOK_TYPES.SALE_ORDER_DELETED,\n          WEBHOOK_TYPES.SALE_ORDER_RESTORED\n        ]\n      },{\n        name: 'WEBHOOKS.WEBHOOK_TYPE_PRODUCTS',\n        webhooks: [\n          WEBHOOK_TYPES.PRODUCT_CREATED,\n          WEBHOOK_TYPES.PRODUCT_UPDATED,\n          WEBHOOK_TYPES.PRODUCT_DELETED,\n          WEBHOOK_TYPES.PRODUCT_RESTORED,\n          WEBHOOK_TYPES.PRODUCT_STOCK_CHANGED,\n          WEBHOOK_TYPES.PRODUCTS_IMPORTED\n        ]\n      },{\n        name: 'WEBHOOKS.WEBHOOK_TYPE_PURCHASE_ORDERS',\n        webhooks: [\n          WEBHOOK_TYPES.PURCHASE_ORDER_CREATED,\n          WEBHOOK_TYPES.PURCHASE_ORDER_UPDATED,\n          WEBHOOK_TYPES.PURCHASE_ORDER_DELETED,\n          WEBHOOK_TYPES.PURCHASE_ORDER_RESTORED\n        ]\n      },{\n        name: 'WEBHOOKS.WEBHOOK_TYPE_SITE_CATEGORIES',\n        webhooks: [\n          WEBHOOK_TYPES.SITE_CATEGORIES_UPDATED,\n          WEBHOOK_TYPES.SITE_PRODUCT_SYNC\n        ]\n      }, {\n        name: 'WEBHOOKS.WEBHOOK_TYPE_CUSTOM_API_SITES',\n        webhooks: [\n          WEBHOOK_TYPES.CUSTOM_API_SITE_ORDER_UPDATED,\n          WEBHOOK_TYPES.CUSTOM_API_SITE_ORDER_DELETED\n        ]\n      }, {\n        name: 'WEBHOOKS.WEBHOOK_TYPE_TRANSFER_ORDER_STATUS',\n        webhooks: [\n          WEBHOOK_TYPES.TRANSFER_ORDER_STATUS_UPDATED,\n          WEBHOOK_TYPES.TRANSFER_ORDER_DELIVERY_STATUS_UPDATED,\n          WEBHOOK_TYPES.TRANSFER_ORDER_SOURCE_WAREHOUSE_UPDATED,\n        ]\n      }\n    ];\n\n    vm.webhookTypesAvailable = [\n      WEBHOOK_TYPES.CUSTOMER_CREATED,\n      WEBHOOK_TYPES.CUSTOMER_UPDATED,\n      WEBHOOK_TYPES.CUSTOMERS_IMPORTED,\n      WEBHOOK_TYPES.PRODUCT_UPDATED,\n      WEBHOOK_TYPES.PRODUCT_STOCK_CHANGED,\n      WEBHOOK_TYPES.PRODUCTS_IMPORTED,\n      WEBHOOK_TYPES.PURCHASE_ORDER_CREATED,\n      WEBHOOK_TYPES.PURCHASE_ORDER_UPDATED,\n      WEBHOOK_TYPES.SITE_CATEGORIES_UPDATED,\n      WEBHOOK_TYPES.SITE_PRODUCT_SYNC,\n      WEBHOOK_TYPES.ORDER_UPDATED,\n      WEBHOOK_TYPES.CUSTOM_API_SITE_ORDER_UPDATED,\n      WEBHOOK_TYPES.CUSTOM_API_SITE_ORDER_DELETED,\n      WEBHOOK_TYPES.SALE_ORDER_CREATED,\n      WEBHOOK_TYPES.TRANSFER_ORDER_STATUS_UPDATED,\n      WEBHOOK_TYPES.TRANSFER_ORDER_DELIVERY_STATUS_UPDATED,\n      WEBHOOK_TYPES.TRANSFER_ORDER_SOURCE_WAREHOUSE_UPDATED\n    ];\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.webhook);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.webhookForm.$valid) {\n        if (vm.webhook.id) {\n          if (Session.hasPermission('inventory.configuration.webhooks.update')) {\n            vm.saveing = true;\n            api.inventories.webhooks.update(\n              vm.webhook.id,\n              vm.webhook,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  angular.extend(vm.webhook, response);\n                  hide();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n                vm.saveing = false;\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.webhooks.create')) {\n            vm.saveing = true;\n            api.inventories.webhooks.save(\n              vm.webhook,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  angular.extend(vm.webhook, response);\n                  hide();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n                vm.saveing = false;\n              }\n            );\n          }\n        }\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('VariantCategoryDialogController', VariantCategoryDialogController);\n\n  /** @ngInject */\n  function VariantCategoryDialogController($scope, $mdDialog, $document, object, isCategory, categories,\n                                           specificCategory, Session, hotkeys, api, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.Session = Session;\n    vm.object = object;\n    vm.isNew = !object.name;\n    vm.isCategory = isCategory;\n    vm.variantCategories = categories;\n    vm.fixed = false;\n\n    if (specificCategory) {\n      vm.specificCategory = specificCategory;\n      vm.object.category = vm.specificCategory.id\n      vm.fixed = !!vm.specificCategory.fixed;\n\n      vm.allCategories = [];\n      vm.selectedId = vm.specificCategory.id;\n      vm.selectFilter = \"\";\n    }\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n\n    initialize();\n\n    function initialize() {\n      if (specificCategory) {\n        api.inventories.variantCategories.list(function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.allCategories = results.results;\n          } else {\n            vm.allCategories = [vm.specificCategory,];\n          }\n        })\n      }\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.categoryForm.$valid) {\n        vm.object.new_category = vm.selectedId;\n        $mdDialog.hide(vm.object);\n      }\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.account')\n      .controller('ConfigurationTicketTemplateDialogController', ConfigurationTicketTemplateDialogController);\n\n    /** @ngInject */\n    function ConfigurationTicketTemplateDialogController($scope, $mdDialog, $mdToast, $filter, ticketTemplate, api,\n                                                         Session, HTTP_STATUS, PRODUCT_IDENTIFIER_TYPES,\n                                                         VARIANT_IDENTIFIER_TYPES, PRODUCT_PRICE_POSITION_TYPES,\n                                                         BARCODE_DESIGN_TYPES, TOTAL_DESIGN_TYPES,\n                                                         Utils) {\n      var vm = this;\n      //Const\n      vm.PRODUCT_IDENTIFIER_TYPES = PRODUCT_IDENTIFIER_TYPES;\n      vm.VARIANT_IDENTIFIER_TYPES = VARIANT_IDENTIFIER_TYPES;\n      vm.PRODUCT_PRICE_POSITION_TYPES = PRODUCT_PRICE_POSITION_TYPES;\n      vm.BARCODE_DESIGN_TYPES = BARCODE_DESIGN_TYPES;\n      vm.TOTAL_DESIGN_TYPES = TOTAL_DESIGN_TYPES;\n\n      // Data\n      vm.ticketTemplate = ticketTemplate;\n      vm.taToolbar = [\n        ['h1', 'h2', 'p', 'bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'],\n        ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent', 'html', 'insertLink', 'wordcount', 'charcount']\n      ];\n      vm.emailTestPosOrder = '';\n      vm.emailTestPosOrderInvoice = '';\n\n      vm.ngFlowOptions = {\n        chunkSize: 15 * 1024 * 1024,\n        maxChunkRetries: 1,\n        simultaneousUploads: 1,\n        singleFile: true,\n        testChunks: false,\n        progressCallbacksInterval: 1000\n      };\n      vm.ngFlow = {flow: {}};\n      vm.useFlowjs = false;\n      vm.isNgFlowUpdate = false;\n      vm.logo = vm.ticketTemplate.logo;\n\n      // Methods\n      vm.hide = hide;\n      vm.cancel = cancel;\n      vm.saveTicketTemplate = saveTicketTemplate;\n      vm.fileAdded = fileAdded;\n      vm.fileSuccess = fileSuccess;\n      vm.normalizeHTML = normalizeHTML;\n      vm.sendTestEmail = sendTestEmail;\n\n      //Functions\n\n      // Functions\n    function normalizeHTML(dirty) {\n      const healthy = Utils.sanitizeHTML(dirty, {\n        allowedTags: [\n          \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"p\", \"pre\", \"blockquote\", \"b\", \"i\",\n          \"strike\", \"u\", \"ul\", \"li\", \"ol\", \"a\", \"span\",\n        ],\n        allowedAttributes: {\n          'label': ['href', 'name', 'target'],\n          // We don't currently allow img itself by default, but this\n          // would make sense if we did. You could add srcset here,\n          // and if you do the URL is checked for safety\n          'img': ['src']\n        },\n      });\n    }\n\n    function sendTestEmail(invoice) {\n      var test_email = vm.emailTestPosOrder;\n      if (invoice) {\n        test_email = vm.emailTestPosOrderInvoice;\n      }\n      //Enviar email de proba\n      api.sales.ticketConfigurations.save(\n        {\n          option: 'send_test_email',\n          configuration: vm.ticketTemplate,\n          invoice: invoice,\n          test_email: test_email\n        },\n        function (results, fn, status) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.TEST_EMAIL_SENT')).position('top right'));\n        }\n      );\n    }\n\n      function fileAdded(file) {\n        if (Session.hasPermission('inventory.configuration.ticket_templates.update')) {\n          var fileReader = new FileReader();\n          fileReader.readAsDataURL(file.file);\n          fileReader.onload = function (event) {\n            vm.logo = event.target.result;\n            $scope.ticketTemplateForm.$dirty = true;\n            $scope.$apply();\n          };\n          vm.useFlowjs = true;\n        }\n      }\n\n      function fileSuccess(file, message) {\n        vm.useFlowjs = false;\n        postSave(JSON.parse(message), 200);\n      }\n\n      function hide() {\n        $mdDialog.hide(vm.ticketTemplate);\n      }\n\n      function cancel() {\n        $mdDialog.cancel();\n      }\n\n      function saveTicketTemplate() {\n        if ($scope.ticketTemplateForm.$valid) {\n          if (vm.ticketTemplate.id) {\n            // Update\n            if (Session.hasPermission('inventory.configuration.ticket_templates.update')) {\n\n              // To upload the file we use Flow.js\n              if (vm.useFlowjs) {\n\n                vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n                vm.ngFlow.flow.opts.target = api.urls.sales.ticketConfigurations.replace(':id/', vm.ticketTemplate.id);\n                vm.ngFlow.flow.opts.query = {ticket_configuration: JSON.stringify(vm.ticketTemplate)};\n                vm.ngFlow.flow.opts.uploadMethod = 'PUT';\n                vm.ngFlow.flow.upload();\n\n                // If we didn't change the file we save normal\n              } else {\n                api.sales.ticketConfigurations.update(\n                  vm.ticketTemplate,\n                  function (response, fn, status, message) {\n                    postSave(response, status);\n                  }\n                );\n              }\n            }\n          } else {\n            // Create\n            if (Session.hasPermission('inventory.configuration.ticket_templates.create')) {\n              // To upload the file we use Flow.js\n              if (vm.useFlowjs) {\n                vm.ngFlow.flow.opts.headers = {'Authorization': 'Token ' + Session.token};\n                vm.ngFlow.flow.opts.target = api.urls.sales.ticketConfigurations.replace('/:id/', '');\n                vm.ngFlow.flow.opts.query = {ticket_configuration: JSON.stringify(vm.ticketTemplate)};\n                vm.ngFlow.flow.opts.uploadMethod = 'POST';\n                vm.ngFlow.flow.upload();\n\n                // If we didn't change the file we save normal\n              } else {\n                api.sales.ticketConfigurations.save(\n                  vm.ticketTemplate,\n                  function (response, fn, status, message) {\n                    postSave(response, status);\n                  }\n                );\n              }\n            }\n          }\n        }\n      }\n\n      function postSave(response, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n          angular.extend(vm.ticketTemplate, response);\n          hide();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      }\n    }\n  }\n)();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('TaxSelectorController', TaxSelectorController);\n\n  /** @ngInject */\n  function TaxSelectorController($scope, $state, $document, HTTP_STATUS, $mdToast, $mdDialog, $q, $timeout, $compile, api, SEARCH_MAX_LENGTH,\n                                     $translate, Session, DTColumnBuilder, $filter, purchase) {\n\n    var vm = this;\n    vm.purchase = purchase;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.toggle = toggle;\n    vm.exists = exists;\n    vm.selectTax = selectTax;\n    vm.createTax = createTax;\n\n    vm.search = \"\";\n    vm.tax = '';\n    vm.dtInstance = {};\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.accounting.taxes.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 5,\n      // scrollY: true,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = createDtColumns();\n\n    function createDtColumns() {\n      var dtColumns = [];\n      dtColumns = [\n        DTColumnBuilder.newColumn('select')\n          .withTitle('').notSortable().withOption('className', 'checkbox').withOption('searchable', false).withOption('orderable', false)\n          .withOption('sortable', false).withOption('width', '20px').renderWith(function(data, type, full) {\n          var checked = exists(full.id);\n          if (checked) {\n            return '<input type=\"radio\" class=\"m-0 md-checked\" ng-model=\"vm.tax\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></input>';\n          }\n          return '<input type=\"radio\" class=\"m-0\" ng-model=\"vm.tax\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle(' + full.id + ')\"></input>';\n        }),\n        DTColumnBuilder.newColumn('name').withTitle($filter('translate')('TAXES.NAME'))\n          .renderWith(function(data, type, full) {\n            return data ? data : '-';\n          }),\n        DTColumnBuilder.newColumn('percent_value').withTitle($filter('translate')('TAXES.VALUE'))\n          .renderWith(function(data, type, full) {\n            return data ? data + ' %' : '-';\n          }),\n        DTColumnBuilder.newColumn('surcharge').withTitle($filter('translate')('TAXES.SURCHARGE'))\n          .renderWith(function(data, type, full) {\n            return data ? data + ' %' : '-';\n          })\n      ];\n\n      return dtColumns;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      return nRow;\n    }\n\n    function initComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#invoice-search-input');\n\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.columns.adjust();\n\n        // Bind an external input as a table wide search box\n        if (searchBox.length > 0) {\n          searchBox.on('keyup', function(event) {\n            if ($scope.timeout) {\n              $timeout.cancel($scope.timeout);\n            }\n            $scope.timeout = $timeout(function() {\n              var input = event.target.value;\n              var regex = false;\n              var smart = false;\n              var caseInsen = true;\n              api.search(input, regex, smart, caseInsen).draw();\n            }, 500);\n          });\n        }\n      }\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function exists(item) {\n      return vm.tax == item;\n    }\n\n    function toggle(item) {\n      vm.tax = vm.tax == item ? '' : item;\n    }\n\n    function selectTax(tax_id) {\n      api.inventories.purchaseOrders.save({\n        id: vm.purchase,\n        tax: tax_id,\n        option: 'update-all-purchase-order-products-provider-tax'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdDialog.hide(response.tax);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function createTax(item) {\n      $mdDialog.show({\n        controller: 'ConfigurationTaxDialogController',\n        controllerAs: 'vm',\n        multiple: true,\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/tax-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          tax: {}\n        }\n      }).then(function (tax) {\n        vm.dtInstance.DataTable.draw();\n        vm.tax = tax.id;\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationTaxDialogController', ConfigurationTaxDialogController);\n\n  /** @ngInject */\n  function ConfigurationTaxDialogController($scope, $mdDialog, $mdToast, $filter, tax, Session, api, HTTP_STATUS,\n                                            hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.tax = tax;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function(event) {\n        save();\n      }\n    });\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.tax);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.taxForm.$valid) {\n        if (vm.tax.id) {\n          if (Session.hasPermission('inventory.configuration.taxes.update')) {\n            api.accounting.taxes.update(\n              vm.tax.id,\n              vm.tax,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  angular.extend(vm.tax, response);\n                  hide();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.taxes.create')) {\n            api.accounting.taxes.save(\n              vm.tax,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  angular.extend(vm.tax, response);\n                  hide();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        }\n      }\n    }\n  }\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.inventory')\n      .controller('ConfigurationShippingMethodDialogController', ConfigurationShippingMethodDialogController);\n\n    /** @ngInject */\n    function ConfigurationShippingMethodDialogController($mdDialog, $mdToast, $filter, $document, $scope,\n                                                         shippingMethod, sendcloudShippingMethods, api,\n                                                         materialUiColorsMin, HTTP_STATUS, Session, INTEGRATION_APP_TYPE) {\n      var vm = this;\n\n      // Data\n      vm.shippingMethodSearch = '';\n      vm.shippingMethod = shippingMethod;\n      vm.sendcloudShippingMethods = sendcloudShippingMethods || [];\n      vm.sendcloudInstalledAndActive = Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n      vm.loadingSendcloudData = true;\n\n      // Methods\n      vm.hide = hide;\n      vm.cancel = cancel;\n      vm.save = save;\n      vm.onSelectorOpen = onSelectorOpen;\n\n      init();\n\n      //Functions\n      function init(){\n        if(vm.shippingMethod.external_shipping_method_id && !vm.sendcloudShippingMethods.length){\n          getSendcloudShippingMethods();\n        }\n\n      }\n      function hide() {\n        $mdDialog.hide({\n          shippingMethod: vm.shippingMethod,\n          sendcloudShippingMethods: vm.sendcloudShippingMethods\n        });\n      }\n\n      function cancel() {\n        $mdDialog.cancel(vm.sendcloudShippingMethods);\n      }\n\n      function save() {\n        if (vm.shippingMethod.id) {\n          if (Session.hasPermission('inventory.configuration.shipping_methods.update')) {\n            api.inventories.shippingMethods.update(\n              vm.shippingMethod,\n              function(response, fn, status) {\n                postSave(response, status);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.shipping_methods.create')) {\n            api.inventories.shippingMethods.save(\n              vm.shippingMethod,\n              function(response, fn, status) {\n                postSave(response, status);\n              }\n            );\n          }\n        }\n\n        function postSave(response, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_METHOD_UPDATED')).position('top right'));\n            } else if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_METHOD_CREATED')).position('top right'));\n            }\n\n            angular.extend(vm.shippingMethod, response);\n            hide();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      }\n\n      function onSelectorOpen() {\n        $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n          e.stopPropagation();\n        });\n\n        if (vm.sendcloudShippingMethods.length === 0) {\n          getSendcloudShippingMethods();\n        }\n      }\n\n      function getSendcloudShippingMethods(){\n        vm.loadingSendcloudData = true;\n        api.inventories.shippingMethods.get({\n            option: 'get-sendcloud-shipping-methods'\n          }, function(response, fn, status) {\n            vm.loadingSendcloudData = false;\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.sendcloudShippingMethods = response.shipping_methods;\n            }\n          }\n        );\n      }\n    }\n  }\n\n)();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.inventory')\n      .controller('ConfigurationShippingBoxDialogController', ConfigurationShippingBoxDialogController);\n\n    /** @ngInject */\n    function ConfigurationShippingBoxDialogController($mdDialog, $mdToast, $filter, shippingBox, api,\n                                                      materialUiColorsMin, HTTP_STATUS, Session) {\n      var vm = this;\n\n      // Data\n      vm.shippingBox = shippingBox;\n      vm.session = Session;\n      vm.saving = false;\n\n      // Boxes\n      vm.hide = hide;\n      vm.cancel = cancel;\n      vm.save = save;\n\n      //Functions\n      function hide() {\n        $mdDialog.hide(vm.shippingBox);\n      }\n\n      function cancel() {\n        $mdDialog.cancel();\n      }\n\n      function save() {\n        if (vm.saving) {\n          return;\n        }\n        vm.saving = true;\n        if (vm.shippingBox.id) {\n          if (Session.hasPermission('inventory.configuration.shipping_boxes.update')) {\n            api.inventories.shippingBoxes.update(\n              vm.shippingBox,\n              function(response, fn, status) {\n                postSave(response, status);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.shipping_boxes.create')) {\n            api.inventories.shippingBoxes.save(\n              vm.shippingBox,\n              function(response, fn, status) {\n                postSave(response, status);\n              }\n            );\n          }\n        }\n\n        function postSave(response, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_BOX_UPDATED')).position('top right'));\n            } else if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SHIPPING_BOX_CREATED')).position('top right'));\n            }\n            angular.extend(vm.shippingBox, response);\n            hide();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      }\n    }\n  }\n\n)();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('SetDiscountToPurchaseProductsController', SetDiscountToPurchaseProductsController);\n\n  /** @ngInject */\n  function SetDiscountToPurchaseProductsController(\n    $mdToast,\n    $mdDialog,\n    api,\n    $translate,\n    HTTP_STATUS,\n    $filter,\n    purchaseId) {\n\n    var vm = this;\n    vm.purchaseId = purchaseId;\n    vm.discount = null;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.setDiscount = setDiscount;\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function setDiscount() {\n      api.inventories.purchaseOrders.save({\n        id: vm.purchaseId,\n        discount: vm.discount,\n        option: 'set-discount-to-all-products'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdDialog.hide();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationSerialNumberTypeDialogController', ConfigurationSerialNumberTypeDialogController);\n\n  /** @ngInject */\n  function ConfigurationSerialNumberTypeDialogController($scope, $mdDialog, $mdToast, $filter, $document, serialNumberType, api,\n                                                         Session, SERIAL_NUMBER_TYPES, SERIAL_NUMBER_TYPES_REVERSE,\n                                                         VERIFACTU_SERIAL_NUMBER_TYPES) {\n    var vm = this;\n\n    // Data\n    vm.examplePrefix = 'F';\n    vm.exampleCounter = '001990';\n    vm.exampleLength = 6;\n    vm.exampleSuffix = new Date().getFullYear();\n    vm.serialNumberType = serialNumberType;\n    vm.serialNumberTypes = [\n      {\n        groupName: $filter('translate')('CONFIGURATION.INVOICING_DEFAULT_SERIAL_NUMBERS'),\n        values: [\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PROFORMA_INVOICE,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_QUOTE\n        ].map(function(item) {\n          return {\n            name: $filter('translate')('CONFIGURATION.' + SERIAL_NUMBER_TYPES_REVERSE[item]),\n            value: item\n          };\n        })\n      },\n      {\n        groupName: $filter('translate')('CONFIGURATION.ORDER_AND_DELIVERIES_DEFAULT_SERIAL_NUMBERS'),\n        values: [\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PRODUCT,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PURCHASE_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PURCHASE_ORDER_DELIVERY,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_TRANSFER_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_TRANSFER_ORDER_DELIVERY,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_POS_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_POS_ORDER_DEVOLUTION,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_ADJUSTMENT_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PRODUCTION_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_STOCKTAKING_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PICKING_ORDER,\n          SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PACKING_ORDER\n        ].map(function(item) {\n          return {\n            name: $filter('translate')('CONFIGURATION.' + SERIAL_NUMBER_TYPES_REVERSE[item]),\n            value: item\n          };\n        })\n      }\n    ];\n    vm.verifactuSerialNumberTypes = VERIFACTU_SERIAL_NUMBER_TYPES;\n    vm.verifactuSerialNumberTypesValues = Object.values(VERIFACTU_SERIAL_NUMBER_TYPES);\n    vm.serialNumberTypesSearchText = '';\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.postSave = postSave;\n    vm.openActivateVerifactuDialog = openActivateVerifactuDialog;\n    vm.isVerifactuInstalled = isVerifactuInstalled;\n    vm.showAssociate = showAssociate;\n    vm.showActivated = showActivated;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.fiscalAddresses = [];\n\n    api.account.fiscalAddress.list(function(results) {\n      vm.fiscalAddresses = results.results;\n    });\n\n    init();\n\n    function init() {\n      vm.verifactuInstalledIntegrationApp = Session.company.getVerifactuApp(vm.serialNumberType.fiscal_address);\n      var fiscalAddressWatcher = $scope.$watch('vm.serialNumberType.fiscal_address', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.verifactuInstalledIntegrationApp = Session.company.getVerifactuApp(newValue);\n        }\n      });\n      $scope.$on('$destroy', function() {\n        fiscalAddressWatcher();\n      });\n    }\n\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.serialNumberType);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.serialNumberTypeForm.$valid) {\n        if (vm.serialNumberType.id) {\n          if (Session.hasPermission('inventory.configuration.serial_number_types.update')) {\n            api.inventories.serialNumberTypes.update(\n              vm.serialNumberType.id,\n              vm.serialNumberType,\n              function(response) {\n                postSave(response);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.serial_number_types.create')) {\n            api.inventories.serialNumberTypes.save(\n              vm.serialNumberType,\n              function(response) {\n                postSave(response);\n              }\n            );\n          }\n        }\n      }\n    }\n\n    function postSave(response) {\n      if (response.Error) {\n        $mdToast.show($mdToast.simple()\n          .textContent(response.Error)\n          .position('top right'));\n      } else if (response.id) {\n        angular.extend(vm.serialNumberType, response);\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n          .position('top right'));\n      }\n    }\n\n    function openActivateVerifactuDialog() {\n      $mdDialog.show({\n        controller: 'ActivateVerifactuDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/configuration/dialogs/activate-verifactu-dialog.html',\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          serialNumberType: vm.serialNumberType,\n          verifactuInstalledIntegrationApp: vm.verifactuInstalledIntegrationApp\n        }\n      }).then(function(result) {\n        if (result) {\n          api.inventories.serialNumberTypes.get({ id: vm.serialNumberType.id }, function(response) {\n            if (response && response.id) {\n              angular.extend(vm.serialNumberType, response);\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('CONFIGURATION.VERIFACTU_ACTIVATED_SUCCESS'))\n                .position('top right'));\n              hide();\n            }\n          });\n        }\n      }, function() {\n      });\n    }\n\n    function isVerifactuInstalled() {\n      return vm.verifactuInstalledIntegrationApp && vm.verifactuInstalledIntegrationApp.status === 1;\n    }\n\n    function showAssociate() {\n      return vm.isVerifactuInstalled() &&\n        vm.serialNumberType.verifactu_app == null &&\n        vm.serialNumberType.id &&\n        vm.verifactuSerialNumberTypesValues.includes(vm.serialNumberType.type);\n    }\n\n    function showActivated() {\n      return vm.isVerifactuInstalled() &&\n        vm.serialNumberType.verifactu_app !== null &&\n        vm.serialNumberType.id &&\n        vm.verifactuSerialNumberTypesValues.includes(vm.serialNumberType.type);\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(searchText) {\n      if (searchText) {\n        vm.serialNumberTypesSearchText = '';\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationSeasonDialogController', ConfigurationSeasonDialogController);\n\n  /** @ngInject */\n  function ConfigurationSeasonDialogController($scope, $mdDialog, $mdToast, $filter, season, api, Session, hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.season = season;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.postSave = postSave;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.season);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.seasonForm.$valid) {\n        if (vm.season.active_date) {\n          vm.season.active_date = moment(vm.season.active_date).format('YYYY-MM-DD');\n        }\n        if (vm.season.discontinued_date) {\n          vm.season.discontinued_date = moment(vm.season.discontinued_date).format('YYYY-MM-DD');\n        }\n        if (vm.season.id) {\n          if (Session.hasPermission('inventory.configuration.seasons.update')) {\n            api.inventories.seasons.update(\n              vm.season.id,\n              vm.season,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.seasons.create')) {\n            api.inventories.seasons.save(\n              vm.season,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        }\n      }\n    }\n\n    function postSave(response) {\n      if (response.id) {\n        angular.extend(vm.season, response);\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationPricingTierDialogController', ConfigurationPricingTierDialogController);\n\n  /** @ngInject */\n  function ConfigurationPricingTierDialogController($mdDialog, $mdToast, $filter, $scope, Session, pricingTier, api,\n                                                    HTTP_STATUS, hotkeys, CURRENCIES) {\n    var vm = this;\n\n    // Data\n    vm.pricingTier = pricingTier;\n    vm.CURRENCIES = CURRENCIES;\n    vm.currencies = angular.copy(CURRENCIES);\n    vm.Session = Session;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    // Initialize\n    init();\n\n    function init() {\n      // Exclude the company's currency from the array\n      delete vm.currencies[vm.Session.company.currency];\n    }\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.pricingTier);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.pricingTierForm.$valid) {\n        if (vm.pricingTier.id) {\n          if (Session.hasPermission('inventory.configuration.pricing_tiers.update')) {\n            api.inventories.pricingTiers.update(\n              vm.pricingTier.id,\n              vm.pricingTier,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  angular.extend(vm.pricingTier, response);\n                  hide();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.pricing_tiers.create')) {\n            api.inventories.pricingTiers.save(\n              vm.pricingTier,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  angular.extend(vm.pricingTier, response);\n                  hide();\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        }\n      }\n    }\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.account')\n      .controller('ConfigurationPaymentMethodDialogController', ConfigurationPaymentMethodDialogController);\n\n    /** @ngInject */\n    function ConfigurationPaymentMethodDialogController($scope, $mdDialog, $mdToast, $filter, paymentMethod, api,\n                                                        materialUiColorsMin, HTTP_STATUS, Session, hotkeys) {\n      var vm = this;\n\n      // Data\n      vm.paymentMethod = paymentMethod;\n      vm.colors = materialUiColorsMin;\n      vm.icons = [\n        'icon-cash-100',\n        'icon-cash-multiple',\n        'icon-cash-usd',\n        'icon-cash',\n        'icon-credit-card-multiple',\n        'icon-credit-card',\n        'icon-wallet-giftcard',\n        'icon-square-inc-cash',\n        'icon-wallet-giftcard',\n        'icon-wallet-membership',\n        'icon-wallet-travel',\n        'icon-wallet',\n        'icon-diamond',\n        'icon-bank',\n        'icon-coin',\n        'icon-apple',\n        'icon-android',\n        'icon-cellphone-android',\n        'icon-gift',\n        'icon-sale'\n      ];\n\n      hotkeys.add({\n        combo: 'enter',\n        allowIn: ['INPUT', 'TEXTAREA'],\n        callback: function (event) {\n          save();\n        }\n      });\n\n      // Methods\n      vm.hide = hide;\n      vm.cancel = cancel;\n      vm.save = save;\n\n      //Functions\n      function hide() {\n        $mdDialog.hide(vm.paymentMethod);\n      }\n\n      function cancel() {\n        $mdDialog.cancel();\n      }\n\n      function save() {\n        if ($scope.form.$valid) {\n          if (vm.paymentMethod.id) {\n            if (Session.hasPermission('inventory.configuration.payment_methods.update')) {\n              api.accounting.paymentMethods.update(\n                vm.paymentMethod,\n                function (response, fn, status) {\n                  postSave(response, status);\n                }\n              );\n            }\n          } else {\n            if (Session.hasPermission('inventory.configuration.payment_methods.create')) {\n              api.accounting.paymentMethods.save(\n                vm.paymentMethod,\n                function (response, fn, status) {\n                  postSave(response, status);\n                }\n              );\n            }\n          }\n        }\n      }\n\n      function postSave(response, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n\n          if (status === HTTP_STATUS.HTTP_200_OK)\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PAYMENT_METHODS.PAYMENT_METHOD_UPDATED')).position('top right'));\n          else if (status === HTTP_STATUS.HTTP_201_CREATED)\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PAYMENT_METHODS.PAYMENT_METHOD_CREATED')).position('top right'));\n\n          angular.extend(vm.paymentMethod, response);\n          hide();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      }\n    }\n  }\n)();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('FiscalAddressDialogController', FiscalAddressDialogController);\n\n  /** @ngInject */\n  function FiscalAddressDialogController($mdDialog, $mdToast, $filter, $scope, fiscalAddress, api, Session,\n                                         COUNTIRES_ISO_APLPHA_2_EN, HTTP_STATUS, FISCAL_ADDRESS_INVOICING_METHODS, contractedPlanLimit) {\n    var vm = this;\n\n    // Data\n    vm.FISCAL_ADDRESS_INVOICING_METHODS = FISCAL_ADDRESS_INVOICING_METHODS;\n    vm.fiscalAddress = fiscalAddress;\n    vm.countries = COUNTIRES_ISO_APLPHA_2_EN;\n    vm.contractedPlanLimit = contractedPlanLimit;\n\n    vm.ngFlowOptions = {\n      chunkSize: 15 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000\n    };\n    vm.ngFlow = {flow: {}};\n    vm.useFlowjs = false;\n    vm.isNgFlowUpdate = false;\n    vm.logo = vm.fiscalAddress.logo;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.fileSuccess = fileSuccess;\n    vm.fileAdded = fileAdded;\n\n    vm.isVerifactuActive = isVerifactuActive();\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.fiscalAddress);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function fileAdded(file) {\n      if (Session.hasPermission('inventory.configuration.company.update')) {\n        var fileReader = new FileReader();\n        fileReader.readAsDataURL(file.file);\n        fileReader.onload = function(event) {\n          vm.logo = event.target.result;\n          $scope.fiscalAddressForm.$dirty = true;\n          $scope.$apply();\n        };\n        vm.useFlowjs = true;\n      }\n    }\n\n    function save() {\n      if ($scope.fiscalAddressForm.$valid) {\n        vm.saving = true;\n        if (vm.fiscalAddress.id) {\n          if (Session.hasPermission('inventory.configuration.company.update')) {\n            if (vm.useFlowjs) {\n              vm.ngFlow.flow.opts.headers = { 'Authorization': 'Token ' + Session.token };\n              vm.ngFlow.flow.opts.target = api.urls.account.fiscalAddresses.replace(':id/', vm.fiscalAddress.id);\n              vm.ngFlow.flow.opts.query = { fiscal_address: JSON.stringify(vm.fiscalAddress) };\n              vm.ngFlow.flow.opts.uploadMethod = 'PUT';\n              vm.ngFlow.flow.upload();\n            } else {\n              api.account.fiscalAddress.update(\n                vm.fiscalAddress,\n                function(response, fn, status) {\n                  postSave(response, status);\n                }\n              );\n            }\n          }\n        } else {\n          if (vm.useFlowjs) {\n            vm.ngFlow.flow.opts.headers = { 'Authorization': 'Token ' + Session.token };\n            vm.ngFlow.flow.opts.target = api.urls.account.fiscalAddresses.replace('/:id/', '');\n            vm.ngFlow.flow.opts.query = { fiscal_address: JSON.stringify(vm.fiscalAddress) };\n            vm.ngFlow.flow.opts.uploadMethod = 'POST';\n            vm.ngFlow.flow.upload();\n          } else {\n            api.account.fiscalAddress.save(\n              vm.fiscalAddress,\n              function(response, fn, status) {\n                postSave(response, status);\n              }\n            );\n          }\n        }\n      }\n    }\n\n    function fileSuccess(file, message) {\n      vm.useFlowjs = false;\n      postSave(JSON.parse(message), 200);\n    }\n\n    function postSave(response, status) {\n      if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n        angular.extend(vm.fiscalAddress, response);\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n      vm.saving = false;\n    }\n\n    function isVerifactuActive() {\n      if (vm.fiscalAddress && vm.fiscalAddress.id) {\n        var verifactuApp = Session.company.getVerifactuApp(vm.fiscalAddress.id);\n        return !!verifactuApp;\n      }\n      return false;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ExchangeVariantDialogController', ExchangeVariantDialogController);\n\n  /** @ngInject */\n  function ExchangeVariantDialogController($scope, $filter, ERROR_CODES, $mdToast, $mdDialog, $q, object, Session, api, HTTP_STATUS, SEARCH_MAX_LENGTH, $sce, $state, $timeout) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.Session = Session;\n    vm.object = angular.copy(object);\n    vm.fromVariant = object.id;\n    vm.variantTag = \"\"\n    vm.allVariants = [];\n    vm.searchText = \"\";\n    vm.selectedItem = null;\n    vm.affected = 0;\n    vm.errorMessageKey = null;\n    vm.showWaringMessage = false;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.querySearch = querySearch;\n    vm.getSelectedVariantName = getSelectedVariantName;\n\n    initialize();\n\n    function initialize() {\n      api.inventories.variantCategories.list({}, function (response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          return;\n        }\n\n        response.results.forEach(function (variantCategory) {\n          variantCategory.variants.forEach(function (variant) {\n            if (variant.id == vm.object.id) {\n              vm.variantTag = variantCategory.code + \" - \" + vm.object.name;\n              return\n            }\n\n            variant.category_code = variantCategory.code;\n            variant.category_name = variantCategory.name;\n            vm.allVariants.push(variant);\n          })\n        })\n      })\n\n      api.inventories.productVariants.list({\n        option: 'affected-by-replacement',\n        from_variant: vm.fromVariant\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.affected = results.count;\n        }\n      })\n    }\n\n    // Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      vm.errorMessageKey = null;\n      if (!vm.selectedItem) {\n        return;\n      }\n\n      if (!vm.showWaringMessage ) {\n        vm.showWaringMessage = true;\n        return;\n      }\n      vm.showWaringMessage = false;\n\n      api.inventories.productVariants.get({\n        option: 'require-merge',\n        from_variant: vm.fromVariant,\n        to_variant: vm.selectedItem.id,\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var config = {\n            toMerge: results.count,\n            from: vm.fromVariant,\n            to: vm.selectedItem.id,\n          }\n          if ($scope.categoryForm.$valid) {\n            $mdDialog.hide(config);\n          }\n        } else {\n          if (results && results.error) {\n            var html = $filter('translate')('ERRORS.' + results.error);\n            if (results.error === ERROR_CODES.ERROR_05108_STOCK_COLLISION_IN_MERGE && results.collisions && results.collisions.length) {\n              html += '<br><ul>';\n              for (var i = 0; i < results.collisions.length; i++) {\n                var collision = results.collisions[i];\n                var warehouseName = '<span>' + sanitize(collision.warehouse_name) + '</span>';\n                var productName = '<span>' + sanitize(collision.product_name) + '</span>';\n                var productUrl = '';\n                if (collision && collision.product_id) {\n                  productUrl = sanitize($state.href('app.inventory.products.product.overview', { id: collision.product_id }));\n                }\n                if (productUrl) {\n                  html += '<li>' + warehouseName + ': <a href=\"' + productUrl + '\"  target=\"_blank\" class=\"collision-link\">' + productName + '</a></li>';\n                } else {\n                  html += '<li>' + warehouseName + ': ' + productName + '</li>';\n                }\n              }\n              html += '</ul>';\n            }\n            vm.errorMessageKey = $sce.trustAsHtml(html);\n          } else {\n            vm.errorMessageKey = $sce.trustAsHtml($filter('translate')('GENERAL.ERROR_TOAST'));\n          }\n        }\n      });\n    }\n\n    function sanitize(str) {\n      if (!str) {\n        return '';\n      }\n\n      return String(str)\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&#39;');\n    }\n\n    function querySearch() {\n      var deferred = $q.defer();\n      vm.searchText = vm.searchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.variants.get({\n        search: vm.searchText,\n        serializer: 'VariantFullSerializer'\n      }, function (response) {\n        deferred.resolve(response.results ? response.results.filter(function (item) {\n          // Hide the original\n          return vm.object ? item.id !== vm.object.id : true;\n        }) : []);\n      });\n\n      return deferred.promise;\n    }\n\n    function getSelectedVariantName(item) {\n      return item.name + \" (\" + item.category.name + \")\";\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('DeletePricingTierDialogController', DeletePricingTierDialogController);\n\n  /** @ngInject */\n  function DeletePricingTierDialogController($scope, $mdToast, $mdDialog, $filter, $q, object, Session, api, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.Session = Session;\n    vm.fromPricingTierId = object.id;\n    vm.fromPricingTierName = object.name;\n    vm.variantTag = \"\"\n    vm.allPricingTiers = [];\n    vm.searchText = \"\";\n    vm.selectedItem = null;\n    vm.affected = 0;\n    vm.errors = [];\n    vm.loading = false;\n\n\n    // Methods\n    vm.cancel = cancel;\n    vm.remove = remove;\n    vm.querySearch = querySearch;\n    vm.getSelectedVariantName = getSelectedVariantName;\n\n    initialize()\n\n    function initialize() {\n      api.inventories.pricingTiers.list({}, function (response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          return;\n        }\n\n        vm.allPricingTiers = response.results;\n      })\n    }\n\n    // Functions\n    function cancel() {\n      vm.errors = [];\n      $mdDialog.cancel();\n    }\n\n    function remove() {\n      if (Session.hasPermission('inventory.configuration.pricing_tiers.delete')) {\n        vm.loading = true;\n        api.inventories.pricingTiers.delete(\n          {\n            id: vm.fromPricingTierId,\n            replace_id: vm.selectedPricingTier.id\n          },\n          function (response, fn, status) {\n            vm.loading = false;\n\n            $mdDialog.hide(status);\n\n          }\n        );\n      }\n    }\n\n    function querySearch() {\n      var deferred = $q.defer();\n\n      api.inventories.variants.get({\n        search: vm.searchText,\n        serializer: 'VariantFullSerializer'\n      }, function (response) {\n        deferred.resolve(response.results ? response.results.filter(function (item) {\n          // Hide the original\n          return vm.object ? item.id !== vm.object.id : true;\n        }) : []);\n      });\n\n      return deferred.promise;\n    }\n\n    function getSelectedVariantName(item) {\n      return item.name + \" (\" + item.category.name + \")\";\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationCompositionDialogController', ConfigurationCompositionDialogController);\n\n  /** @ngInject */\n  function ConfigurationCompositionDialogController($mdDialog, $mdToast, $filter, $scope, composition, api, HTTP_STATUS,\n                                                    Session, hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.composition = composition;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    //Functions\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.compositionForm.$valid) {\n        if (vm.composition.id) {\n          if (Session.hasPermission('inventory.configuration.compositions.update')) {\n            api.inventories.compositions.update(\n              vm.composition.id,\n              vm.composition,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  angular.extend(vm.composition, response);\n                  $mdDialog.hide(vm.composition);\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.compositions.create')) {\n            api.inventories.compositions.save(\n              vm.composition,\n              function (response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                  angular.extend(vm.composition, response);\n                  $mdDialog.hide(vm.composition);\n                } else {\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                }\n              }\n            );\n          }\n        }\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('CategoryDialogController', CategoryDialogController);\n\n  /** @ngInject */\n  function CategoryDialogController($scope, $mdDialog, $document, object, isCategory, categories, specificCategory, hotkeys, SEARCH_MAX_LENGTH, api, HTTP_STATUS) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.object = object;\n    vm.isNew = !vm.object.name;\n    vm.isCategory = isCategory;\n    vm.categories = categories;\n    vm.attributes = [];\n\n    if (specificCategory) {\n      vm.specificCategory = specificCategory;\n      vm.object.category = { id: vm.specificCategory.id };\n    }\n\n    hotkeys.add({\n      combo: 'enter', allowIn: ['INPUT', 'SELECT', 'TEXTAREA'], callback: function(event) {\n        save();\n      }\n    });\n\n    // Functions\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n\n    initialize();\n\n    function initialize() {\n      api.inventories.attributeCategories.get({}, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.attributes = results.results;\n        }\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.categoryForm.$valid) {\n        $mdDialog.hide(vm.object);\n      }\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ConfigurationBrandDialogController', ConfigurationBrandDialogController);\n\n  /** @ngInject */\n  function ConfigurationBrandDialogController($mdDialog, $mdToast, $filter, $scope, brand, api, Session, hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.brand = brand;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.postSave = postSave;\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function(event) {\n        save();\n      }\n    });\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.brand);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.brandForm.$valid) {\n        if (vm.brand.id) {\n          if (Session.hasPermission('inventory.configuration.brands.update')) {\n            api.inventories.brands.update(\n              vm.brand.id,\n              vm.brand,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        } else {\n          if (Session.hasPermission('inventory.configuration.brands.create')) {\n            api.inventories.brands.save(\n              vm.brand,\n              function (response) {\n                postSave(response);\n              }\n            );\n          }\n        }\n      }\n    }\n\n    function postSave(response) {\n      if (response.id) {\n        angular.extend(vm.brand, response);\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('AttributeDialogController', AttributeDialogController);\n\n  /** @ngInject */\n  function AttributeDialogController(\n    $scope,\n    $mdDialog,\n    $document,\n    object,\n    isAttributeCategory,\n    attributeCategories,\n    specificAttributeCategory,\n    hotkeys,\n    SEARCH_MAX_LENGTH,\n    ATTRIBUTE_CATEGORY_TYPES\n  ) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.ATTRIBUTE_CATEGORY_TYPES = ATTRIBUTE_CATEGORY_TYPES;\n\n    // Data\n    vm.object = object;\n    vm.isNew = !vm.object.name;\n    vm.isAttributeCategory = isAttributeCategory;\n    vm.attributeCategories = attributeCategories;\n    vm.attributeCategoryTypes = [\n      ATTRIBUTE_CATEGORY_TYPES.MULTIPLE_ATTRIBUTES,\n      ATTRIBUTE_CATEGORY_TYPES.SINGLE_ATTRIBUTE,\n      ATTRIBUTE_CATEGORY_TYPES.TEXT,\n      ATTRIBUTE_CATEGORY_TYPES.HTML_TEXT,\n      ATTRIBUTE_CATEGORY_TYPES.JSON,\n      ATTRIBUTE_CATEGORY_TYPES.INT,\n      ATTRIBUTE_CATEGORY_TYPES.DECIMAL,\n    ];\n\n    if (specificAttributeCategory) {\n      vm.specificAttributeCategory = specificAttributeCategory;\n      vm.object.attribute_category = vm.specificAttributeCategory.id;\n    }\n\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\n      callback: function(event) {\n        save();\n      }\n    });\n\n    // Functions\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      if ($scope.attributeCategoryForm.$valid) {\n        $mdDialog.hide(vm.object);\n      }\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('ActivateVerifactuDialogController', ActivateVerifactuDialogController);\n\n  /** @ngInject */\n  function ActivateVerifactuDialogController($mdDialog, serialNumberType, verifactuInstalledIntegrationApp, api, $mdToast, $filter, Session, HTTP_STATUS, ERROR_CODES) {\n    var vm = this;\n\n    // Data\n    vm.serialNumberType = serialNumberType;\n    vm.verifactuInstalledIntegrationApp = verifactuInstalledIntegrationApp;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.activate = activate;\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function activate() {\n      if (!vm.verifactuInstalledIntegrationApp || !vm.verifactuInstalledIntegrationApp.id) {\n        $mdToast.show($mdToast.simple()\n          .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n          .position('top right'));\n        return;\n      }\n\n      var data = {\n        serial_number_type_id: vm.serialNumberType.id\n      };\n\n      api.integrationApps.verifactuInstalledIntegrationApp.save({\n          id: vm.verifactuInstalledIntegrationApp.id,\n          option: 'associate-verifactu-installed-integration-app'\n        }, data,\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.serialNumberType.verifactu_app = vm.verifactuInstalledIntegrationApp;\n            $mdDialog.hide(true);\n            return;\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (response.error) {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('ERRORS.' + response.error))\n                .position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right'));\n            }\n          } else {\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right'));\n          }\n          $mdDialog.cancel();\n        });\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('NewInventoryCollectionDialogController', NewInventoryCollectionDialogController);\n\n  /** @ngInject */\n  function NewInventoryCollectionDialogController($mdDialog, $mdToast, $filter, $document, api, collection, seasons, SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.collection = collection;\n    vm.seasons = seasons;\n    vm.selectedTab = 0;\n    vm.newSeason = {};\n    vm.savingSeason = false;\n    vm.newBrand = {};\n    vm.savingBrand = false;\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.saveSeason = saveSeason;\n\n\n    // Functions\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n\n      api.manufactures.collections.save(\n        vm.collection,\n        function (response) {\n          $mdDialog.hide({\n            collection: vm.collection,\n            newSeason: vm.newSeason,\n            newBrand: vm.newBrand\n          });\n\n        }\n      );\n\n    }\n\n    function saveSeason(){\n      vm.savingSeason = true;\n      api.inventories.seasons.save(\n        vm.newSeason,\n        function(results){\n          if(results.id){\n            vm.newSeason = results;\n            vm.savingSeason = false;\n            vm.seasons.push(vm.newSeason);\n            vm.collection.season = vm.newSeason.id;\n            vm.selectedTab = 0;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.SEASON_CREATED')).position('top right'));\n          }\n          else{\n            vm.savingSeason = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      )\n    }\n\n    /**\n     * On configuration selector open\n     */\n    function onSelectorOpen(){\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e)\n      {\n        e.stopPropagation();\n      });\n    }\n\n    /**\n     * On configuration selector close\n     */\n    function onSelectorClose(){\n      // Clear the filter\n      vm.selectFilter = '';\n\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryCollectionProductsController', InventoryCollectionProductsController);\n\n  /** @ngInject */\n  function InventoryCollectionProductsController($scope, $state, $mdDialog, $document, $stateParams, $timeout, $filter,\n                                                 $compile, DTColumnBuilder, $translate, api, Session, CollectionData,\n                                                 CategoriesData, CompositionsData, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"styles\";\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.categories = {};\n    vm.compositions = {};\n    vm.collection = CollectionData;\n    CategoriesData.results.forEach(function (category) {\n      vm.categories[category.id] = category\n    });\n    CompositionsData.results.forEach(function (composition) {\n      vm.compositions[composition.id] = composition\n    });\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.products.replace('/:id/:option', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.collection = vm.collection.id;\n          d.serializer = 'ProductNamedSerializer';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      order: [7, 'desc'],\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableManuractureCollectionStylesController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        return JSON.parse(localStorage.getItem(Session.company.id + '::dataTableManuractureCollectionStylesController'));\n      }\n    };\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('cover_thumbnail').withTitle($filter('translate')('PRODUCT.IMAGE')).withOption('className', 'image text-center').withOption('width', '50px')\n        .renderWith(function (data, type, full) {\n          if (full.cover_thumbnail)\n            return '<img class=\"w-50\" src=\"' + full.cover_thumbnail + '\">'\n          return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n        }),\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          return (data.length > 20) ? data.substr(0, 19) + '&hellip;' : data;\n        }),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function (data, type, full) {\n          return (data.length > 30) ? data.substr(0, 19) + '&hellip;' : data;\n        }),\n      DTColumnBuilder.newColumn('season').withTitle($filter('translate')('PRODUCT.SEASON')),\n      DTColumnBuilder.newColumn('category').withTitle($filter('translate')('PRODUCTS.CATEGORY')),\n      DTColumnBuilder.newColumn('subcategory').withTitle($filter('translate')('PRODUCTS.SUBCATEGORY')),\n      DTColumnBuilder.newColumn('provider').withTitle($filter('translate')('PRODUCTS.PROVIDER')),\n      DTColumnBuilder.newColumn('updated_at').withTitle($filter('translate')('PRODUCT.UPDATED_AT'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'short');\n        })\n    ];\n\n    vm.defaultRow = '<span class=\"text-italic hint-text\">' + $filter('translate')('GENERAL.EMPTY') + '</span>';\n\n    // Methods\n    vm.openProductSearchDialog = openProductSearchDialog;\n\n\n    // Initialize\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        $state.go('app.inventory.products.product.overview', {id: aData.id});\n      });\n      return nRow;\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function openProductSearchDialog(ev) {\n\n      $mdDialog.show({\n        controller: 'ProductSearchController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          params: {\n            multiple: true\n          }\n        }\n      }).then(function (result) {\n        api.manufactures.collections.save({\n          style_id: result.product ? result.product.id : null,\n          style_ids: result.products ? result.products.map(function (p) {\n            return p.id;\n          }) : null,\n          id: vm.collection.id,\n          option: 'add-style'\n        }, function (response, callback, status) {\n          if (status === 200) {\n            vm.collection = response;\n            initialize();\n            vm.dtInstance.DataTable.draw();\n          }\n        });\n\n      });\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryCollectionDetailsController', InventoryCollectionDetailsController);\n\n  /** @ngInject */\n  function InventoryCollectionDetailsController($scope, $mdToast, $filter, $document, api, $mdDialog, HTTP_STATUS, SEARCH_MAX_LENGTH,\n                                                CollectionData, BrandsData, SeasonsData, PricingTiersData, Session) {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.collection = angular.copy(CollectionData);\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.selectFilter = '';\n    vm.generateClicked = false;\n    vm.pricingTiers = PricingTiersData.results;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.newBrandAdded = newBrandAdded;\n    vm.newSeasonAdded = newSeasonAdded;\n    vm.generateStylesCSV = generateStylesCSV;\n    vm.generatePDFCatalog = generatePDFCatalog;\n\n    // Initialize\n\n\n    // Functions\n    function save() {\n      Session.hasPermission('inventory.collections.collection.details.update')\n      {\n        api.manufactures.collections.update(\n          vm.collection,\n          function (response, callback, status) {\n            if (status === 200) {\n              CollectionData = response;\n              vm.collection = angular.copy(CollectionData);\n              $scope.collectionForm.$setPristine();\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('COLLECTION.COLLECTION_SAVED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        )\n      }\n    }\n\n    function cancel() {\n      vm.collection = angular.copy(CollectionData);\n      $scope.collectionForm.$setPristine();\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      vm.selectFilter = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function newBrandAdded(newBrand) {\n      vm.collection.brand = newBrand.id;\n    }\n\n    function newSeasonAdded(newSeason) {\n      vm.collection.season = newSeason.id;\n    }\n\n    function generatePDFCatalog() {\n\n      if (vm.printing){\n        return;\n      }\n\n      vm.printing = true;\n      api.manufactures.collections.get(\n        {\n          id:  vm.collection.id,\n          option: 'print-catalog',\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('PURCHASE.PURCHASE_CATALOG'))\n                .htmlContent($filter('translate')('PURCHASE.PURCHASE_CATALOG_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.printing = false;\n      });\n\n      /*if (vm.selectedWholesalePricingTier || vm.selectedRetailPricingTier) {\n        var url = api.urls.manufactures.collectionsPrintCatalog.replace(':id', vm.collection.id);\n        var params = angular.element.param({\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        })\n        Session.setTokenCookie();\n        window.open(url + '?' + params);\n      }*/\n    }\n\n    function generateStylesCSV() {\n      if (vm.selectedWholesalePricingTier && vm.selectedRetailPricingTier) {\n        var url = api.urls.manufactures.collectionsStylesCSV.replace(':id', vm.collection.id);\n        var params = angular.element.param({\n          wholesale_pricing_tier_id: vm.selectedWholesalePricingTier,\n          retail_pricing_tier_id: vm.selectedRetailPricingTier\n        })\n        Session.setTokenCookie();\n        window.open(url + '?' + params);\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryAdjustmentProductsController', InventoryAdjustmentProductsController);\n\n  /** @ngInject */\n  function InventoryAdjustmentProductsController($scope, $q, $mdMedia, $sce, $http, $timeout, $state, $document, $filter, $mdDialog, $stateParams,\n                                               $translate, $mdToast, $compile, api, AdjustmentOrderData,\n                                               ADJUSTMENT_ORDER_STATUSES, ADJUSTMENT_ORDER_STATUSES_REVERSE, Session,\n                                               DTColumnBuilder, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentNavItem = \"products\";\n    $scope.$parent.vm.adjustment = AdjustmentOrderData;\n\n    // Data\n    var vm = this;\n    vm.search = '';\n    vm.adjustment = null;\n    vm.orderType = 'adjustment';\n    vm.fetching = false;\n    vm.ADJUSTMENT_ORDER_STATUSES_REVERSE = ADJUSTMENT_ORDER_STATUSES_REVERSE;\n    vm.focus = false;\n    vm.lastAddedByBarcodeScan = false;\n    vm.saving = false;\n    vm.changed = false;\n    vm.printing = false;\n    vm.changingStatus = false;\n    vm.total_adjustment_order_product_variants = 0;\n    vm.selectedOrder = 0;\n    vm.selectedOrderDirection = 'desc';\n    vm.timeout = null;\n    vm.ajax = {\n      dataSrc: \"data\",\n      url: api.urls.inventories.adjustmentOrderProducts.replace('/:id/', ''),\n      type: 'get',\n      headers: {\n        \"Authorization\": \"Token \" + Session.token\n      },\n      data: function (d) {\n        d.pagination = 'datatable';\n        d.adjustment_order = $stateParams.id;\n        if(vm.search != ''){\n          d['search[value]'] = vm.search;\n        }\n      }\n    };\n    vm.addingProduct = false;\n    vm.adjustmentOrderProducts = {};\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: vm.ajax,\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      drawCallback: drawCallback,\n      //rowCallback: rowCallback,\n      //initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [1, 2, 3, 4, 5, 10, 25, 50, 100],\n      pageLength: 5,\n      //scrollY     : 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      order: [vm.selectedOrder, vm.selectedOrderDirection],\n      language: {\n        url: 'app/main/apps/inventory/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableAdjustmentOrderProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableAdjustmentOrderProductsController'));\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('updated_at')\n        .withOption('className', 'no-padding')\n        .renderWith(function (data, type, full) {\n          vm.adjustmentOrderProducts[full.id] = full;\n          return '<nd-adjustment-order-product ' +\n            'on-save=\"vm.saveOnBlur\" ' +\n            'order-product=\"vm.adjustmentOrderProducts[' + full.id + ']\" ' +\n            'delete-order-product=\"vm.deleteOrderProduct\" ' +\n            'validate-order-product=\"vm.validateOrderProduct\" ' +\n            'editable=\"vm.adjustment.status==1\" ' +\n            'changed=\"vm.changed\" ' +\n            'order-type=\"\\'adjustment\\'\" ' +\n            'source-warehouse=\"vm.adjustment.source_warehouse\" ' +\n            'delete-permission=\"\\'inventory.adjustments.adjustment.products.delete_product\\'\" ' +\n            'update-amount-permission=\"\\'inventory.adjustments.adjustment.products.update_product_amount\\'\">' +\n            'order-type=\"\\'' + vm.orderType + '\\'\">' +\n            '</nd-order-product>';\n        }),\n      DTColumnBuilder.newColumn('brand_name').notVisible(),\n      DTColumnBuilder.newColumn('category_name').notVisible(),\n      DTColumnBuilder.newColumn('subcategory_name').notVisible(),\n      DTColumnBuilder.newColumn('product_code').notVisible()\n    ];\n\n\n    // Methods\n    vm.gotoAdjustments = gotoAdjustments;\n    vm.adjust = adjust;\n    vm.cancel = cancel;\n    vm.getStatusLabel = getStatusLabel;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.saveOnBlur = saveOnBlur;\n    vm.deleteOrderProduct = deleteOrderProduct;\n    vm.validateOrderProduct = validateOrderProduct;\n    vm.searchProductCallback = searchProductCallback;\n    vm.printOrder = printOrder;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.importToLabelsGenerator = importToLabelsGenerator;\n    vm.setSortMode = setSortMode;\n    vm.duplicate = duplicate;\n    vm.toggleSidenav = toggleSidenav;\n    vm.screenIsBig = screenIsBig;\n    vm.searchProduct = searchProduct;\n    vm.importProductsDialog = importProductsDialog;\n\n    // Register Events\n    vm.initializeAdjustmentEvent = $scope.$on('initialize-adjustment', function (event, args) {\n      AdjustmentOrderData = args.adjustment;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeAdjustmentEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.adjustment = angular.copy(AdjustmentOrderData);\n      vm.orderType = vm.adjustment.is_replenishment ? 'replenishment' : 'adjustment';\n      if (vm.adjustment.is_replenishment) {\n        vm.dtOptions.order = [[1, vm.selectedOrderDirection], [2, 'asc'], [3, 'asc'], [4, 'asc']];\n        vm.selectedOrder = 1;\n      }\n\n      // Getting the total order product variants\n      getTotal();\n    }\n\n    function searchProduct(){\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function screenIsBig(){\n      return $mdMedia('gt-sm');\n    }\n\n    function getTotal(){\n\n      if (vm.timeout) {\n        $timeout.cancel(vm.timeout);\n      }\n\n      vm.timeout = $timeout(function(){\n        api.inventories.adjustmentOrders.get({\n          id: vm.adjustment.id,\n          option: 'total-order-product-variants'\n        }, function (response) {\n          vm.total_adjustment_order_product_variants = response.total_order_product_variants;\n        });\n      }, 1500)\n    }\n\n    function toggleSidenav(sidenavId){\n      $scope.$parent.vm.toggleSidenav(sidenavId);\n    }\n\n    function drawCallback(settings) {\n      if (vm.addingProduct) {\n        vm.addingProduct = false;\n        // When last product was added by scanning a barcode, it doesn't have to be focused\n        if (!vm.lastAddedByBarcodeScan) {\n          setTimeout(function () {\n            if (angular.element('#datatable-table input').length)\n              var element = angular.element(angular.element('#datatable-table input')[0]);\n            element.focus()\n          }, 100)\n        }\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function gotoAdjustments() {\n      $state.go('app.inventory.adjustments');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('ADJUSTMENTS.' + ADJUSTMENT_ORDER_STATUSES[status]);\n    }\n\n    function openProductSearchDialog(ev) {\n      if (Session.hasPermission('inventory.adjustments.adjustment.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true,\n              sourceWarehouse: vm.adjustment.source_warehouse.id,\n              targetWarehouse: null,\n              manageUids: false,\n              manageLots: false\n            }\n          }\n        }).then(function (result) {\n          searchProductCallback(result.product, null, result.products.map(function(p){\n            return p.id;\n          }));\n        });\n      }\n    }\n\n    function searchProductCallback(product, barcode, products) {\n\n      if (Session.hasPermission('inventory.adjustments.adjustment.products.add_product')) {\n\n        if (angular.isDefined(products) && products && products.length) {\n\n          vm.fetching = true;\n          api.inventories.adjustmentOrderProducts.save({\n            products: products,\n            adjustment_order: vm.adjustment.id,\n            order_product_variants: []\n          }, function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n\n              vm.dtInstance.DataTable.draw();\n\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.fetching = false;\n\n          });\n\n        } else if (angular.isDefined(product)) {\n          vm.lastAddedByBarcodeScan = !!barcode;\n          vm.fetching = true;\n\n          var pendingBarcode = {};\n          if(barcode){\n            pendingBarcode['barcode'] = barcode;\n            pendingBarcode['status'] = 'pending';\n            $scope.$parent.vm.pendingBarcodes.unshift(pendingBarcode)\n            if($scope.$parent.vm.pendingBarcodes.length == 1){\n              toggleSidenav('sidenav');\n            }\n          }\n\n          api.inventories.adjustmentOrderProducts.save({\n            product: product ? product.id : null,\n            barcode: barcode ? barcode : null,\n            adjustment_order: vm.adjustment.id,\n            order_product_variants: []\n          }, function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n\n              // Enabling the focus to the first input\n              vm.addingProduct = true;\n              // Cleaning current adjustment order products dictionary\n              vm.adjustmentOrderProducts = {};\n              // Disabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = false;\n              vm.dtInstance.DataTable.settings()[0].ajax = false;\n\n              // Getting current products table\n              var currentRows = vm.dtInstance.DataTable.rows().data();\n              // Checking if the product already is in the table\n              for (var i = 0; i < currentRows.length; i++) {\n                if (currentRows[i].product == response.product) {\n                  currentRows.splice(i, 1);\n                }\n              }\n              // Adding the new product at the top\n              currentRows.unshift(response);\n              // Cleaning the old table and adding the new products list\n              vm.dtInstance.DataTable.clear();\n              vm.dtInstance.DataTable.rows.add(currentRows);\n              // Drawing the table\n              vm.dtInstance.DataTable.draw();\n\n              //vm.dtInstance.dataTable.fnUpdate(response, 0, 1, false);\n              //vm.dtInstance.dataTable.api().row.add(response);\n\n              // Enabling ajax again\n              vm.dtInstance.DataTable.settings()[0].oFeatures.bServerSide = true;\n              vm.dtInstance.DataTable.settings()[0].ajax = vm.ajax;\n\n              vm.addingProduct = false;\n\n              if(barcode){\n                $timeout(function(){\n                  pendingBarcode['status'] = 'success';\n                  pendingBarcode['code'] = response.product_code;\n                  response.order_product_variants.forEach(function(orderProductVariant){\n                    if(orderProductVariant.barcode == barcode){\n                      pendingBarcode['size'] = orderProductVariant.size_code;\n                      pendingBarcode['color'] = orderProductVariant.color_name;\n                    }\n                  });\n                });\n              }\n            }\n            else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n\n              if(barcode){\n                pendingBarcode['status'] = 'error';\n              }\n            }\n            else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n\n              if(barcode){\n                pendingBarcode['status'] = 'error';\n              }\n            }\n\n            getTotal();\n            vm.fetching = false;\n          });\n        }\n      }\n    }\n\n    function cancel() {\n      changeStatus('cancel');\n    }\n\n    function adjust() {\n      changeStatus('adjust');\n    }\n\n    function cancel() {\n      changeStatus('cancel');\n    }\n\n    function changeStatus(option) {\n\n      if (vm.changingStatus)\n        return;\n\n      vm.changingStatus = true;\n\n      api.inventories.adjustmentOrderStatus.update(\n        {\n          id: vm.adjustment.id,\n          option: option\n        },\n        function (response) {\n          if (response.success) {\n\n            vm.adjustment.status = response.adjustment_order.status;\n            $scope.$parent.vm.adjustment.status = vm.adjustment.status;\n            $scope.$parent.vm.adjustment.single_delivery = response.adjustment_order.single_delivery;\n\n            if (option == 'adjust') {\n              vm.dtInstance.DataTable.draw();\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('ADJUSTMENT.ADJUST'))\n                  .position('top right'));\n            }\n\n            if (option == 'cancel') {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('ADJUSTMENT.ADJUSTMENT_CANCELLED'))\n                  .position('top right'));\n              vm.dtInstance.DataTable.draw();\n            }\n\n            $scope.$broadcast('initialize-adjustment', {adjustment: vm.adjustment});\n\n          } else {\n\n          }\n\n          vm.changingStatus = false;\n        }\n      );\n\n    }\n\n    function saveOnBlur(orderProductVariant) {\n\n      if (vm.adjustment.status == ADJUSTMENT_ORDER_STATUSES_REVERSE.ADJUSTMENT_ORDER_STATUS_DRAFT) {\n\n        if (orderProductVariant.amount == 0 && angular.isUndefined(orderProductVariant.id) || String(orderProductVariant.amount).length > 6) {\n          orderProductVariant.amount = 0;\n          return;\n        }\n\n        var result = $q.defer();\n\n        var adjustmentOrderProductVariant = {};\n        if (angular.isDefined(orderProductVariant.id) && orderProductVariant.id != 0)\n          adjustmentOrderProductVariant.id = orderProductVariant.id;\n\n        adjustmentOrderProductVariant.adjustment_order_product = orderProductVariant.orderProduct.id;\n        adjustmentOrderProductVariant.product_variant = orderProductVariant.product_variant;\n        adjustmentOrderProductVariant.amount = orderProductVariant.amount;\n        adjustmentOrderProductVariant.size = orderProductVariant.size;\n        adjustmentOrderProductVariant.color = orderProductVariant.color;\n\n        vm.saving = true;\n\n        if (angular.isUndefined(adjustmentOrderProductVariant.id)) {\n\n          api.inventories.adjustmentOrderProductVariants.save(adjustmentOrderProductVariant, function (response) {\n            vm.saving = false;\n            vm.changed = false;\n            if (response.id) {\n\n              orderProductVariant.id = response.id;\n              orderProductVariant.adjustment_order_product = response.adjustment_order_product;\n              orderProductVariant.amount = response.amount;\n              // We need to add the order_product_variant at the table, just in case we need to redraw without to reload the data.\n              orderProductVariant.orderProduct.order_product_variants.push(orderProductVariant);\n\n              // Getting the total order product variants\n              api.inventories.adjustmentOrders.get({\n                id: vm.adjustment.id,\n                option: 'total-order-product-variants'\n              }, function (response) {\n                vm.total_adjustment_order_product_variants = response.total_order_product_variants;\n              });\n\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('ADJUSTMENT.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            result.resolve();\n          });\n\n        } else {\n\n          api.inventories.adjustmentOrderProductVariants.update(adjustmentOrderProductVariant, function (response) {\n            vm.saving = false;\n            vm.changed = false;\n            if (response.id) {\n              orderProductVariant.amount = response.amount;\n\n              // Getting the total order product variants\n              api.inventories.adjustmentOrders.get({\n                id: vm.adjustment.id,\n                option: 'total-order-product-variants'\n              }, function (response) {\n                vm.total_adjustment_order_product_variants = response.total_order_product_variants;\n              });\n\n            } else {\n              $mdToast\n                .show($mdToast.simple()\n                  .textContent($filter('translate')('ADJUSTMENT.ERROR_SAVING_DRAFT'))\n                  .position('top right'));\n            }\n            result.resolve();\n          });\n\n        }\n\n        return result.promise;\n      }\n    }\n\n    function deleteOrderProduct(orderProduct) {\n\n      if (vm.saving)\n        return;\n      vm.saving = true;\n\n      api.inventories.adjustmentOrderProducts.delete({id: orderProduct.id}, function (response) {\n\n        vm.dtInstance.DataTable.draw();\n        vm.saving = false;\n        vm.changed = false;\n      })\n    }\n\n    function validateOrderProduct(orderProduct) {\n      if (vm.saving)\n        return;\n      vm.saving = true;\n\n      orderProduct.validated = !!!orderProduct.validated;\n      api.inventories.adjustmentOrderProducts.save({id: orderProduct.id, option: 'validate'}, function (response) {\n        orderProduct.validated = response.validated;\n        vm.saving = false;\n      })\n    }\n\n    function printOrder() {\n      var url = api.urls.inventories.adjustmentOrdersPrint.replace(':id', vm.adjustment.id);\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (vm.adjustment.status == ADJUSTMENT_ORDER_STATUSES_REVERSE.ADJUSTMENT_ORDER_STATUS_DRAFT) {\n        searchProductCallback(null, barcode, null);\n      }\n    }\n\n    function importToLabelsGenerator() {\n      vm.fetching = true;\n      api.inventories.adjustmentOrders.get({\n        id: vm.adjustment.id,\n        option: 'labels'\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $state.go('app.inventory.labels-generator', {\n            adjustmentOrder: results\n          });\n        }\n        else {\n          vm.fetching = false;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function setSortMode(columnToSort) {\n\n      if (columnToSort == vm.selectedOrder) {\n        if (vm.selectedOrderDirection == 'asc') {\n          vm.selectedOrderDirection = 'desc'\n        } else {\n          vm.selectedOrderDirection = 'asc'\n        }\n      } else {\n        vm.selectedOrder = columnToSort;\n      }\n\n      if (columnToSort == 0) {\n        vm.dtInstance.DataTable.column(columnToSort).order(vm.selectedOrderDirection).draw();\n      } else if (columnToSort == 1) {\n        vm.dtInstance.DataTable.order([\n          [1, vm.selectedOrderDirection], [2, 'asc'], [3, 'asc'], [4, 'asc']\n        ]).draw();\n      } else if (columnToSort == 2) {\n        vm.dtInstance.DataTable.order([\n          [2, vm.selectedOrderDirection], [3, 'asc'], [0, 'asc'], [4, 'asc'],\n        ]).draw();\n      } else if (columnToSort == 3) {\n        vm.dtInstance.DataTable.order([\n          [3, vm.selectedOrderDirection], [0, 'asc'], [4, 'asc']\n        ]).draw();\n      } else if (columnToSort == 4) {\n        vm.dtInstance.DataTable.order([\n          [4, vm.selectedOrderDirection]\n        ]).draw();\n      }\n    }\n\n    function duplicate(){\n\n      if (Session.hasPermission('inventory.adjustments.create')) {\n\n        if (vm.changingStatus) {\n          return;\n        }\n        vm.changingStatus = true;\n\n        api.inventories.adjustmentOrders.save(\n          {\n            id: vm.adjustment.id,\n            option: 'duplicate'\n          }, function (response) {\n            vm.changingStatus = false;\n            $state.go('app.inventory.adjustments.adjustment.details', {id: response.id});\n          }\n        );\n      }\n    }\n\n    function importProductsDialog(ev) {\n      if (Session.hasPermission('inventory.adjustments.adjustment.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ImportAdjustmentProductsDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/adjustment/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          locals: {\n            adjustmentId: vm.adjustment.id\n          }\n        }).then(function (response) {\n\n          var dialog = $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('PURCHASE.IMPORTING_PRODUCTS'))\n            .htmlContent($filter('translate')('PURCHASE.IMPORTING_PRODUCTS_MESSAGE', {email: Session.user.email}))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n\n          vm.dtInstance.DataTable.draw();\n        }, function () {\n          // Cancel button clicked\n        });\n      }\n    }\n\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryAdjustmentDetailsController', InventoryAdjustmentDetailsController);\n\n  /** @ngInject */\n  function InventoryAdjustmentDetailsController($scope, $state, $filter, $window, $mdToast, $document, api, InventoryConfigurationData,\n                                              WarehousesData, AdjustmentData, SerialNumberTypesData, ADJUSTMENT_ORDER_STATUSES,\n                                              ADJUSTMENT_ORDER_STATUS_COLORS, ADJUSTMENT_ORDER_REASONS,\n                                              ADJUSTMENT_ORDER_OPERATIONS, ADJUSTMENT_ORDER_REASONS_REVERSE,\n                                              ADJUSTMENT_ORDER_OPERATIONS_REVERSE, SEARCH_MAX_LENGTH, Session, SERIAL_NUMBER_TYPES)\n  {\n\n    $scope.$parent.vm.currentNavItem = \"details\";\n    $scope.$parent.vm.adjustment = AdjustmentData;\n    $scope.Session = Session;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n\n    // Data\n    vm.warehouses = [];\n    vm.adjustment = null;\n    vm.isNewAdjustment = !$state.params.id;\n    vm.dateStart = null;\n    vm.dateEnd = null;\n    vm.taToolbar = [['undo', 'redo']];\n    vm.minDate = new Date();\n    vm.searchSelectHeader = new Array(2);\n    vm.saving = false;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    // Methods\n    vm.gotoAdjustments = gotoAdjustments;\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.create = create;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.reasons = ADJUSTMENT_ORDER_REASONS;\n    vm.reasons_reverse = ADJUSTMENT_ORDER_REASONS_REVERSE;\n    vm.operations = ADJUSTMENT_ORDER_OPERATIONS;\n    vm.operations_reverse = ADJUSTMENT_ORDER_OPERATIONS_REVERSE;\n\n\n\n\n    // Register Events\n    vm.initializeAdjustmentEvent = $scope.$on('initialize-adjustment', function(event, args) {\n      AdjustmentData = args.adjustment;\n      initialize();\n    });\n\n\n    // Unregister Events\n    $scope.$on('$destroy', function () {\n      vm.initializeAdjustmentEvent();\n    });\n\n\n    // Initialization\n    initialize();\n\n    /**\n     * Initialize\n     */\n    function initialize() {\n      vm.warehouses = WarehousesData.results;\n      if (vm.isNewAdjustment) {\n        vm.adjustment = {\n          tags: [],\n          serial_number_type: InventoryConfigurationData ? InventoryConfigurationData.results[0].adjustment_order_default_serial_number_type : null,\n        };\n      }\n      else {\n        vm.adjustment = angular.copy(AdjustmentData);\n      }\n    }\n\n    /**\n     * Go to products page\n     */\n    function gotoAdjustments(){\n      $state.go('app.inventory.adjustments');\n    }\n\n    function save(){\n\n      if(vm.saving)\n        return\n\n      vm.saving = true;\n\n      var obj = angular.copy(vm.adjustment);\n      obj.source_warehouse = vm.adjustment.source_warehouse.id;\n      api.inventories.adjustmentOrders.update(\n        obj,\n        function (result) {\n          if(result.id) {\n            vm.saving = false;\n            $scope.detailsForm.$setPristine();\n            $mdToast\n              .show($mdToast.simple()\n                .textContent($filter('translate')('ADJUSTMENT.ADJUSTMENT_UPDATED'))\n                .position('top right'));\n          }\n        }\n      );\n    }\n\n    function cancel(){\n      if(vm.isNewAdjustment){\n        $window.history.back();\n      }else {\n        initialize();\n        $scope.detailsForm.$setPristine();\n      }\n    }\n\n    function getStatusLabel(status){\n      return $filter('translate')('ADJUSTMENTS.' + ADJUSTMENT_ORDER_STATUSES[status]);\n    }\n\n    function getStatusColorClass(status){\n      return ADJUSTMENT_ORDER_STATUS_COLORS[status];\n    }\n\n    /**\n     * Creates the new adjustment object\n     */\n    function create(){\n\n      if(vm.saving)\n        return\n\n      vm.saving = true;\n      var obj = angular.copy(vm.adjustment);\n\n      // serializer needs IDs not as objects, but as values instead. So each obj.<name>_warehouse must be parsed to ID\n      obj.source_warehouse = vm.adjustment.source_warehouse.id;\n\n      api.inventories.adjustmentOrders.save(\n        obj,\n        function (result) {\n          vm.saving = false;\n          if(result.id)\n            $state.go('app.inventory.adjustments.adjustment.products', {id: result.id});\n        }\n      );\n    }\n\n    function onSelectorOpen()\n    {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e)\n      {\n        e.stopPropagation();\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('RoutingRulesController', RoutingRulesController);\n\n  /** @ngInject */\n  function RoutingRulesController(\n    $scope,\n    $q,\n    api,\n    RoutingRulesData,\n    SiteData,\n    RoutingRule,\n    RULE_CRITERIA_TYPES,\n    CONTACT_TYPES,\n    SEARCH_MAX_LENGTH,\n    HTTP_STATUS\n  ) {\n\n    // Data\n    var vm = this;\n    vm.RULE_CRITERIA_TYPES = RULE_CRITERIA_TYPES;\n    vm.site = SiteData;\n    vm.routingRule = new RoutingRule();\n    vm.saving = false;\n\n    // Methods\n    vm.createRuleLine = createRuleLine;\n    vm.createRuleCriteria = createRuleCriteria;\n    vm.warehouseQuerySearch = warehouseQuerySearch;\n    vm.selectWarehouseValue = selectWarehouseValue;\n    vm.getAutocompleteObjectName = getAutocompleteObjectName;\n    vm.dynamicQuerySearch = dynamicQuerySearch;\n    vm.getSelectedWarehouseName = getSelectedWarehouseName;\n    vm.selectDynamicObjectValue = selectDynamicObjectValue;\n    vm.save = save;\n\n    init();\n\n    // Functions\n    function init() {\n      if (RoutingRulesData && RoutingRulesData.results && RoutingRulesData.results.length) {\n        vm.routingRule = new RoutingRule(RoutingRulesData.results[0]);\n      } else {\n        vm.routingRule = new RoutingRule({ site_id: vm.site.id });\n      }\n    }\n\n    function createRuleLine() {\n      vm.routingRule.addRuleLine();\n    }\n\n    function createRuleCriteria(ruleLine) {\n      ruleLine.addRuleCriteria();\n    }\n\n    function warehouseQuerySearch(ruleLine) {\n      ruleLine.searchWarehouseText = ruleLine.searchWarehouseText.substring(0, SEARCH_MAX_LENGTH);\n      return callDynamicQuerySearch(\n        api.inventories.warehouses.get,\n        {\n          search: ruleLine.searchWarehouseText,\n          serializer: 'WarehouseSimpleSerializer'\n        },\n        ruleLine);\n    }\n\n    function dynamicQuerySearch(ruleCriteria) {\n      var endpoint = null;\n      var parameters = {\n        search: ruleCriteria.searchText.substring(0, SEARCH_MAX_LENGTH)\n      };\n\n      if (ruleCriteria.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_BRAND) {\n        endpoint = api.inventories.brands.get;\n      } else if (ruleCriteria.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_CATEGORY) {\n        endpoint = api.inventories.categories.get;\n      } else if (ruleCriteria.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_SUBCATEGORY) {\n        endpoint = api.inventories.subcategories.get;\n      } else if (ruleCriteria.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_PROVIDER) {\n        endpoint = api.inventories.contacts.get;\n        parameters.serializer = 'ContactSimpleSerializer';\n        parameters.type = CONTACT_TYPES.CONTACT_TYPE_PROVIDER;\n      } else {\n        return;\n      }\n\n      return callDynamicQuerySearch(endpoint, parameters);\n    }\n\n    function callDynamicQuerySearch(apiEndpoint, parameters) {\n      var deferred = $q.defer();\n      apiEndpoint(\n        parameters,\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectDynamicObjectValue(ruleCriteria, dynamicObject) {\n      if (typeof dynamicObject === 'object') {\n        if (dynamicObject) {\n          ruleCriteria.criteria_object_id = dynamicObject.id;\n          ruleCriteria.criteria_object_name = dynamicObject.name;\n        } else {\n          ruleCriteria.criteria_object_id = null;\n          ruleCriteria.criteria_object_name = null;\n        }\n      }\n    }\n\n    function selectWarehouseValue(ruleLine, value) {\n      if (typeof value === 'object') {\n        if (value) {\n          ruleLine.action_object_id = value.id;\n          ruleLine.action_object_name = value.name;\n        } else {\n          ruleLine.action_object_id = null;\n          ruleLine.action_object_name = null;\n        }\n      }\n    }\n\n    function getAutocompleteObjectName(ruleCriteria) {\n      return ruleCriteria.criteria_object_name;\n    }\n\n    function getSelectedWarehouseName(ruleLine) {\n      return ruleLine.action_object_name;\n    }\n\n    function save() {\n      if (!vm.saving) {\n        vm.saving = true;\n        api.inventories.routingRules.save(\n          vm.routingRule,\n          function(results, fn, status) {\n            vm.saving = false;\n            if(status === HTTP_STATUS.HTTP_201_CREATED) {\n              vm.routingRule = new RoutingRule(results);\n            }\n          });\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceSiteProductsController', EcommerceSiteProductsController);\n\n  /** @ngInject */\n  function EcommerceSiteProductsController($scope, $state, $stateParams, $timeout, $filter, $compile, $mdToast,\n                                           $document, $interval, DTColumnBuilder, $translate, api, SiteData, Session, CategoriesData,\n                                           HTTP_STATUS, SubcategoriesData, BrandsData, SeasonsData,\n                                           Version, $mdDialog, ARCHIVED_FILTER_STATES, ECOMMERCE_PLATFORMS, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"products\";\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.filterBrands = '';\n    vm.filterCategories = '';\n    vm.filterSeasons = '';\n    vm.filterStatus = '';\n    // index by column name must be set right here\n    vm.filterArchived = '';\n    vm.archivedDict = {\n      ONLY_ARCHIVED_PRODUCTS: ARCHIVED_FILTER_STATES.ONLY_ARCHIVED_PRODUCTS,\n      ONLY_NOT_ARCHIVED_PRODUCTS: ARCHIVED_FILTER_STATES.ONLY_NOT_ARCHIVED_PRODUCTS\n    };\n    vm.filterIndexes = {\n      'brands': 1,\n      'seasons': 2,\n      'categories': 3,\n    }\n    vm.site = angular.copy(SiteData);\n    vm.categories = {};\n    vm.subcategories = {};\n    vm.brands = {};\n    vm.seasons = {};\n    vm.dtInstance = {};\n    vm.siteProductsDict = {};\n    vm.initialized = false;\n    vm.interval = {};\n    vm.watches = {};\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n\n    CategoriesData.results.forEach(function (category) {\n      vm.categories[category.id] = category\n    });\n    SubcategoriesData.results.forEach(function (subcategory) {\n      vm.subcategories[subcategory.id] = subcategory\n    });\n    BrandsData.results.forEach(function (brand) {\n      vm.brands[brand.id] = brand\n    });\n    SeasonsData.results.forEach(function (season) {\n      vm.seasons[season.id] = season\n    });\n\n    vm.brandsList = BrandsData.results;\n    vm.categoriesList = CategoriesData.results;\n    vm.seasonsList = SeasonsData.results;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.baseUrl + 'ecommerce/site-products',\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.site_id = vm.site.id;\n          if (vm.filterArchived !== '' && vm.filterArchived) {\n            d.include_deleted = vm.filterArchived;\n          }\n          // Map DataTables ordering to backend 'ordering' param\n          if (d.order && d.order.length > 0) {\n            var orderColIdx = d.order[0].column;\n            var orderDir = d.order[0].dir;\n            var colName = d.columns[orderColIdx].data;\n            if (colName) {\n              d.ordering = (orderDir === 'desc' ? '-' : '') + colName;\n            }\n          }\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50],\n      pageLength: 25,\n      autoWidth: false,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        data.filterArchived = vm.filterArchived;\n        localStorage.setItem(Session.company.id + '::dataTablesEcommerceSiteProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        if (Version.isGrater(1, 6, 33)) {\n          var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTablesEcommerceSiteProductsController'));\n          if (state) {\n            vm.search = state.search.search;\n            vm.filterBrands = state.columns[vm.filterIndexes['brands']].search.search;\n            vm.filterCategories = state.columns[vm.filterIndexes['categories']].search.search;\n            vm.filterSeasons = state.columns[vm.filterIndexes['seasons']].search.search;\n            angular.isDefined(state.filterArchived) ? vm.filterArchived = state.filterArchived : '';\n          }\n          return state;\n        }\n        return null;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('product__brand__id')\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          return '';\n        }),\n      DTColumnBuilder.newColumn('product__season__id')\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          return '';\n        }),\n      DTColumnBuilder.newColumn('product__category__id')\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          return '';\n        }),\n      DTColumnBuilder.newColumn('image').withTitle($filter('translate')('PRODUCT.IMAGE')).withOption('className', 'imageColumn').withOption('width', '50px')\n        .notSortable().renderWith(function (data, type, full) {\n        if (full.cover_thumbnail)\n          return '<img class=\"thumbnail-40\" src=\"' + full.cover_thumbnail + '\">'\n        return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n      }),\n      DTColumnBuilder.newColumn('product__name')\n        .withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function (data, type, full) {\n          var result = '<div>';\n          result += '<a ng-click=\"vm.goToProduct(' + full.product_id + ')\">' + full.product_code + '</a><br>'\n          if (full.product_name !== null) {\n            result += (full.product_name.length > 20) ? full.product_name.substr(0, 20) + '&hellip;' : full.product_name;\n          }\n          result += '<br><small class=\"secondary-text\">';\n          result += (full.product_brand_name.length > 20) ?\n            full.product_brand_name.substr(0, 19) + '&hellip;' :\n            full.product_brand_name;\n          result += '</small>';\n          if (full.external_id) {\n            result += '<br><small class=\"secondary-text\">ID: ' + full.external_id + '</small>';\n          }\n          result += '</div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('sync_enabled')\n        .withTitle($filter('translate')('PRODUCT.SYNC_ENABLED'))\n        .renderWith(function (data, type, full) {\n          vm.siteProductsDict[full.id] = full;\n\n          return \"<div layout='row' layout-align='start center'>\" +\n            \"<md-switch class='m-0'\" +\n            \"ng-disabled='vm.siteProductsDict[\" + full.id + \"].saving || vm.siteProductsDict[\" + full.id + \"].synchronizing || vm.siteProductsDict[\" + full.id + \"].waiting_to_synchronize'\" +\n            \"ng-model='vm.siteProductsDict[\" + full.id + \"].sync_enabled'\" +\n            \"ng-change='vm.saveSiteProduct(\" + full.id + \")'>\" +\n            \"</md-switch>\" +\n            \"</div>\";\n        })\n    ];\n\n    if (vm.site.platform !== ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO) {\n      vm.dtColumns = vm.dtColumns.concat([\n        DTColumnBuilder.newColumn('active')\n          .withTitle($filter('translate')('SITES.VISIBLE'))\n          .renderWith(function (data, type, full) {\n            vm.siteProductsDict[full.id] = full;\n            if (!full.sync_enabled) {\n              return '';\n            }\n            return \"<div layout='row' layout-align='start center'>\" +\n              \"<md-checkbox class='m-0'\" +\n              \"ng-disabled='vm.siteProductsDict[\" + full.id + \"].saving || vm.siteProductsDict[\" + full.id + \"].synchronizing || vm.siteProductsDict[\" + full.id + \"].waiting_to_synchronize'\" +\n              \"ng-model='vm.siteProductsDict[\" + full.id + \"].active'\" +\n              \"ng-change='vm.activedChanged(\" + full.id + \")'>\" +\n              \"</md-checkbox>\" +\n              \"</div>\";\n          }),\n        DTColumnBuilder.newColumn('last_sync')\n          .withTitle($filter('translate')('SITES.LAST_SYNC'))\n          .renderWith(function (data, type, full) {\n            if (full.last_sync)\n              return $filter('date')(full.last_sync, 'medium');\n            return '<em class=\"secondary-text\">' + $filter('translate')('PRODUCT.NEVER_SYNCHRONIZED') + '</em>';\n          }),\n        DTColumnBuilder.newColumn('error')\n          .withTitle($filter('translate')('PRODUCT.SYNC_ERRORS'))\n          .renderWith(function (data, type, full) {\n            if (!full.sync_enabled) {\n              return '';\n            }\n\n            if (!data && !full.warning_message) {\n              return '<em class=\"secondary-text\">' + $filter('translate')('PRODUCT.WITHOUT_ERRORS') + '</div>';\n            }\n\n            var result = '';\n            // Errors\n            if (data) {\n              result += '<md-button class=\"md-warn\" ';\n              result += 'ng-disabled=\"vm.siteProductsDict[' + full.id + '].synchronizing ||  vm.siteProductsDict[' + full.id + '].waiting_to_synchronize || vm.siteProductsDict[' + full.id + '].saving\"';\n              result += 'ng-click=\"vm.showErrors(' + full.id + ')\">';\n              result += '<div layout=\"row\" ';\n              result += 'layout-align=\"center center\">';\n              result += '<md-icon md-svg-icon=\"assets/images/custom-material-design-icons/alert-octagon-outline.8b60d868.svg\" md-font-icon';\n              result += 'class=\"mr-5\"></md-icon>';\n              result += $filter('translate')('PRODUCT.WITH_ERRORS');\n              result += '</div>';\n              result += '</md-button>';\n            }\n            // Warnings\n            if (full.warning_message && full.warning_message.length) {\n              result += '<md-button class=\"w-45 amber\" ';\n              result += 'ng-disabled=\"vm.siteProductsDict[' + full.id + '].synchronizing ||  vm.siteProductsDict[' + full.id + '].waiting_to_synchronize || vm.siteProductsDict[' + full.id + '].saving\"';\n              result += 'ng-click=\"vm.showWarnings(' + full.id + ')\">';\n              result += '<md-icon md-font-icon=\"icon-alert\"';\n              result += 'class=\"amber-bg-50 amber-fg\"></md-icon>';\n              result += '</md-button>';\n            }\n            return result;\n          }),\n        DTColumnBuilder.newColumn('sync')\n          .notSortable()\n          .withClass('text-right')\n          .renderWith(function (data, type, full) {\n            if (!full.sync_enabled) {\n              return '';\n            }\n\n            var result = ''\n            if (vm.site.platform !== ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO) {\n              result += '<md-button class=\"md-button md-primary\"' +\n                'ng-disabled=\"vm.siteProductsDict[' + full.id + '].synchronizing || vm.siteProductsDict[' + full.id + '].saving || vm.siteProductsDict[' + full.id + '].waiting_to_synchronize\"' +\n                'ng-click=\"vm.syncSiteProduct(' + full.id + ')\">' +\n                '<div layout=\"row\" layout-align=\"start center\">' +\n                '<md-icon md-font-icon=\"icon-sync\"' +\n                'class=\"mr-8\"' +\n                'ng-if=\"!vm.siteProductsDict[' + full.id + '].synchronizing && !vm.siteProductsDict[' + full.id + '].waiting_to_synchronize\"></md-icon>' +\n                '<md-progress-circular ng-if=\"vm.siteProductsDict[' + full.id + '].synchronizing || vm.siteProductsDict[' + full.id + '].waiting_to_synchronize\"' +\n                'class=\"mr-8\"' +\n                'md-diameter=\"20px\"></md-progress-circular>' +\n                '<span flex ng-bind=\"vm.getSynchronizingText(' + full.id + ')\"></span>' +\n                '</div>' +\n                '</md-button>';\n            }\n            if (showDeleteButton(full)) {\n\n              result += '<md-button class=\"md-warn\" ' +\n                'ng-disabled=\"vm.siteProductsDict[' + full.id + '].synchronizing || vm.siteProductsDict[' + full.id + '].deleting\" ' +\n                'ng-click=\"vm.deleteProduct(' + full.id + ')\">' +\n                '<div layout=\"row\" ' +\n                'layout-align=\"center center\"> ' +\n                '<md-icon md-font-icon=\"icon-trash\" ' +\n                'className=\"mr-8\" ' +\n                'ng-if=\"!vm.siteProductsDict[' + full.id + '].deleting\"></md-icon> ' +\n                '<md-progress-circular ng-if=\"vm.siteProductsDict[' + full.id + '].deleting\" ' +\n                'class=\"mr-8\" ' +\n                'md-diameter=\"20px\"></md-progress-circular> ' +\n                '<span ng-if=\"!vm.siteProductsDict[' + full.id + '].deleting\">{{\"GENERAL.DELETE\" | translate}}</span> ' +\n                '<span ng-if=\"vm.siteProductsDict[' + full.id + '].deleting\">{{\"GENERAL.DELETING\" | translate}}</span> ' +\n                '</div>' +\n                '</md-button>';\n\n              /*result += '<md-button class=\"md-warn\" ' +\n                'ng-disabled=\"vm.siteProductsDict[' + full.id + '].synchronizing\" ' +\n                'ng-click=\"vm.deleteProduct(' + full.id + ')\">' +\n                ' <md-icon md-font-icon=\"icon-trash\"></md-icon>' +\n                '{{\"GENERAL.DELETE\" | translate }}' +\n                '</md-button>'*/\n            }\n\n            return result;\n          })]);\n    }\n\n\n    // Methods\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.activedChanged = activedChanged;\n    vm.saveSiteProduct = saveSiteProduct;\n    vm.syncSiteProduct = syncSiteProduct;\n    vm.getSynchronizingText = getSynchronizingText;\n    vm.showErrors = showErrors;\n    vm.showWarnings = showWarnings;\n    vm.deleteProduct = deleteProduct;\n    vm.goToProduct = goToProduct;\n    vm.reloadSiteProducts = reloadSiteProducts;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.watches['filterBrands'] = $scope.$watch('vm.filterBrands', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterBrands, vm.filterIndexes['brands']);\n        }\n      }, false);\n\n      vm.watches['filterSeasons'] = $scope.$watch('vm.filterSeasons', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterSeasons, vm.filterIndexes['seasons']);\n        }\n      }, false);\n\n      vm.watches['filterCategories'] = $scope.$watch('vm.filterCategories', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterCategories, vm.filterIndexes['categories']);\n        }\n      }, false);\n\n      $scope.$on('$destroy', function () {\n        vm.watches['filterBrands']();\n        vm.watches['filterSeasons']();\n        vm.watches['filterCategories']();\n\n        Object.keys(vm.interval).forEach(function (id) {\n          $interval.cancel(vm.interval[id]);\n        });\n      });\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function deleteProduct(id) {\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.DELETE_FROM_ECOMMERCE'))\n        .htmlContent($filter('translate')('PRODUCT.DELETE_FROM_ECOMMERCE_MESSAGE', {\n          product: vm.siteProductsDict[id].product_name,\n          site: vm.site.name\n        }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n      $mdDialog.show(confirm).then(function () {\n\n        vm.siteProductsDict[id].saving = true;\n        vm.siteProductsDict[id].deleting = true;\n\n        api.ecommerce.siteProducts.update({\n            id: id,\n            option: 'remove',\n          },\n          function (results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              checkDeleteSiteProductFinished(id);\n            } else {\n              vm.siteProductsDict[id].synchronizing = false;\n              vm.siteProductsDict[id].waiting_to_synchronize = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          });\n      }, function () {\n\n      });\n    }\n\n    function checkDeleteSiteProductFinished(id) {\n      vm.interval[id] = $interval(function () {\n        api.ecommerce.siteProducts.get(\n          {\n            id: vm.siteProductsDict[id].id\n          },\n          function (response, callback, status) {\n            if (status === 404) {\n              $interval.cancel(vm.interval[id]);\n              vm.dtInstance.DataTable.draw();\n              delete vm.siteProductsDict[id];\n            }\n          }\n        );\n      }, 5000);\n    }\n\n    function goToProduct(productId) {\n      $state.go('app.inventory.products.product.details', {id: productId, previousState: $state.current.name});\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      return nRow;\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function initComplete() {\n      vm.initialized = true;\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#search-input');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    function activedChanged(id) {\n      vm.siteProductsDict[id].saving = true;\n      vm.siteProductsDict[id].synchronizing = true;\n      api.ecommerce.siteProducts.update(\n        {\n          site: vm.site.id,\n          product: vm.siteProductsDict[id].product_id,\n          active: vm.siteProductsDict[id].active,\n          id: id,\n        },\n        function (response, callback, status) {\n          if (status === 200) {\n            syncSiteProduct(id);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.siteProductsDict[id].synchronizing = false;\n          }\n          vm.siteProductsDict[id].saving = false;\n        }\n      );\n    }\n\n    function saveSiteProduct(id) {\n      vm.siteProductsDict[id].saving = true;\n      api.ecommerce.siteProducts.update(\n        {\n          id: id,\n          site: vm.site.id,\n          product: vm.siteProductsDict[id].product_id,\n          active: vm.siteProductsDict[id].active,\n          sync_enabled: vm.siteProductsDict[id].sync_enabled\n        },\n        function (response, callback, status) {\n          /*if (status === 200) {\n            syncSiteProduct(id);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.siteProductsDict[id].synchronizing = false;\n          }*/\n          vm.siteProductsDict[id].saving = false;\n          vm.dtInstance.DataTable.draw();\n        }\n      );\n    }\n\n    function syncSiteProduct(id) {\n      vm.siteProductsDict[id].synchronizing = true;\n      api.ecommerce.siteProducts.update(\n        {\n          id: id,\n          option: 'sync'\n        },\n        function (response, callback, status) {\n          if (status === 200) {\n            checkSyncSiteProductFinished(id)\n          } else {\n            vm.siteProductsDict[id].synchronizing = false;\n            vm.siteProductsDict[id].waiting_to_synchronize = false;\n          }\n        }\n      );\n    }\n\n    function checkSyncSiteProductFinished(id) {\n      vm.interval[id] = $interval(function () {\n        api.ecommerce.siteProducts.get(\n          {\n            id: vm.siteProductsDict[id].id\n          },\n          function (response, callback, status) {\n            if (status === 200) {\n              if (response) {\n                vm.siteProductsDict[response.id].last_sync = response.last_sync;\n                vm.siteProductsDict[response.id].error = response.error;\n                vm.siteProductsDict[response.id].error_message = response.error_message;\n                vm.siteProductsDict[response.id].active = response.active;\n                vm.siteProductsDict[response.id].synchronizing = response.synchronizing;\n\n                if (!response.synchronizing && !response.waiting_to_synchronize) {\n                  $interval.cancel(vm.interval[response.id]);\n                  $mdToast.show($mdToast.simple().textContent($filter('translate')(\"PRODUCT.SYNC_FINISHED\")).position('top right'));\n                  vm.dtInstance.DataTable.draw();\n                }\n\n              }\n            } else {\n              // TODO\n              $mdToast.show($mdToast.simple().textContent($filter('translate')(\"GENERAL.ERROR_TOAST\")).position('top right'));\n            }\n          }\n        );\n      }, 5000);\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function getSynchronizingText(id) {\n      if (vm.siteProductsDict[id] && vm.siteProductsDict[id].waiting_to_synchronize) {\n        return $filter('translate')('PRODUCT.SYNC_ENQUEUED');\n      }\n      if (vm.siteProductsDict[id] && vm.siteProductsDict[id].synchronizing) {\n        return $filter('translate')('PRODUCT.SYNCHRONIZING');\n      }\n      return $filter('translate')('GENERAL.SYNC');\n    }\n\n    function showErrors(siteProductId) {\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('PRODUCT.ERRORS_LOG'))\n          .textContent(vm.siteProductsDict[siteProductId].error_message)\n          .ok($filter('translate')('GENERAL.CLOSE')));\n    }\n\n    function showWarnings(siteProductId) {\n      var warning_messages = vm.siteProductsDict[siteProductId].warning_message;\n      var full_warning_messages = '';\n      for (var i = 0; i < warning_messages.length; i++) {\n        full_warning_messages = full_warning_messages.concat('- ', $filter('translate')('PRODUCT.' + warning_messages[i]['message'], warning_messages[i]['params']), '<br>')\n      }\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('PRODUCT.WARNINGS_LOG'))\n          .htmlContent(full_warning_messages)\n          .ok($filter('translate')('GENERAL.CLOSE')));\n    }\n\n    function showDeleteButton(siteProduct) {\n      if (vm.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE) {\n        return !siteProduct.saving &&\n          !siteProduct.active &&\n          !siteProduct.synchronizing &&\n          !siteProduct.waiting_to_synchronize;\n      }\n      return false;\n    }\n\n    function reloadSiteProducts() {\n      vm.dtInstance.DataTable.draw();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller(\n      'EcommerceSiteDetailsController',\n      EcommerceSiteDetailsController\n    );\n\n  /** @ngInject */\n  function EcommerceSiteDetailsController(\n    $rootScope,\n    $location,\n    $scope,\n    $mdDialog,\n    $document,\n    $mdToast,\n    $filter,\n    $window,\n    $interval,\n    $state,\n    api,\n    SiteData,\n    WarehousesData,\n    $sce,\n    PricingTiersData,\n    AttributeCategoriesData,\n    HTTP_STATUS,\n    TicketConfigurationsData,\n    SerialNumberTypesData,\n    Session,\n    ECOMMERCE_PLATFORMS\n  ) {\n    var vm = this;\n\n    $scope.Session = Session;\n    $scope.$parent.vm.currentNavItem = 'details';\n\n    // Data\n\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n    vm.ZALANDO_HEADER_KEY = 'x-api-key';\n    vm.API_URL = api.url;\n    vm.site = angular.copy(SiteData);\n    vm.siteCopy = angular.copy(SiteData);\n    vm.warehouses = WarehousesData.results;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.ticketConfigurations = TicketConfigurationsData.results;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.attributeCategories = AttributeCategoriesData.results;\n    vm.synchronizing = false;\n    vm.importing = false;\n    vm.importingVariantCategories = false;\n    vm.shopifyAuthUrl = api.urls.ecommerce.shopifyAuth;\n    vm.shopifyConnected = $location.search().shopify;\n    vm.testing = false;\n    vm.shopifyAuthUrl = api.urls.ecommerce.shopifyAuth;\n    vm.syncErrors = [];\n\n    // Methods\n    vm.save = save;\n    vm.copy = copy;\n    vm.goTo = goTo;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.trustSrc = trustSrc;\n    vm.saveCsvConfig = saveCsvConfig;\n    vm.cancelCsvConfig = cancelCsvConfig;\n    vm.downloadDataFile = downloadDataFile;\n    vm.checkIsSuperAdmin = checkIsSuperAdmin;\n    vm.showSyncProducts = showSyncProducts;\n    vm.showProductsCsvEndpoint = showProductsCsvEndpoint;\n    vm.resetHipercalzadosCsv = resetHipercalzadosCsv;\n    vm.showDeleteSiteDialog = showDeleteSiteDialog;\n    vm.trustSrc = trustSrc;\n    vm.showAdvancedCard = showAdvancedCard;\n    vm.showSyncErrors = showSyncErrors;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      vm.submitShopifyFormWatch = $scope.$on('ndSiteDetailsController::submitShopifyForm', submitShopifyForm);\n      vm.setSyncErrors = $scope.$on('EcommerceSiteController::setSyncErrors', function(event, args) {\n        setSyncErrors(args.errors);\n      });\n\n      $scope.$on('$destroy', function() {\n        if (vm.interval) {\n          $interval.cancel(vm.interval);\n        }\n        if (vm.submitShopifyFormWatch) {\n          vm.submitShopifyFormWatch();\n        }\n        vm.setSyncErrors();\n      });\n    }\n\n    function trustSrc(src) {\n      return $sce.trustAsResourceUrl(src);\n    }\n\n    function setSyncErrors(errors) {\n      vm.syncErrors.push(errors);\n    }\n\n    function showSyncErrors() {\n      var syncErrors = '';\n      for (var i = 0; i < vm.syncErrors.length; i++) {\n        syncErrors += '<p>' + vm.syncErrors[i] + '</p>';\n      }\n\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .title($filter('translate')('SITE.SYNC_ERRORS_TITLE'))\n          .htmlContent(syncErrors)\n          .ok($filter('translate')('GENERAL.CLOSE'))\n      );\n\n    }\n\n    function save() {\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n      if (vm.site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI &&\n        vm.site.discount_start_date && vm.site.discount_end_date) {\n        vm.site.discount_start_date = moment(vm.site.discount_start_date).format('YYYY-MM-DD');\n        vm.site.discount_end_date = moment(vm.site.discount_end_date).format('YYYY-MM-DD');\n      }\n      if (vm.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP){\n        if(vm.site.discount_start_datetime) {\n          vm.site.discount_start_datetime = moment.parseZone(vm.site.discount_start_datetime.length === 10 ? vm.site.discount_start_datetime + 'T23:59:59' : vm.site.discount_start_datetime).format('YYYY-MM-DDTHH:mm:ssZ');\n        }\n        if(vm.site.discount_end_datetime) {\n          vm.site.discount_end_datetime = moment.parseZone(vm.site.discount_end_datetime.length === 10 ? vm.site.discount_end_datetime + 'T23:59:59' : vm.site.discount_end_datetime).format('YYYY-MM-DDTHH:mm:ssZ');\n        }\n      }\n\n      api.ecommerce.sites.update(\n        vm.site,\n        function(results, fn, status, message) {\n          vm.saving = false;\n          if (status == HTTP_STATUS.HTTP_200_OK) {\n            vm.site = results;\n            vm.siteCopy = angular.copy(vm.site);\n            SiteData = results;\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('SITE.SITE_UPDATED'))\n                .position('top right')\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        }\n      );\n    }\n\n    function nextSync() {\n      return vm.site.last_sync;\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document\n        .find('md-select-header input[type=\"search\"]')\n        .on('keydown', function(e) {\n          e.stopPropagation();\n        });\n    }\n\n    function copy(value) {\n      var body = angular.element($window.document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({ position: 'fixed', opacity: '0' });\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n\n      try {\n        var successful = document.execCommand('copy');\n        $mdToast.show(\n          $mdToast\n            .simple()\n            .textContent($filter('translate')('SITE.KEY_COPIED'))\n            .position('top right')\n        );\n        if (!successful) throw successful;\n      } catch (err) {\n      }\n\n      textarea.remove();\n    }\n\n    function goTo(url) {\n      window.open(url, '_blank').focus();\n    }\n\n    function downloadDataFile() {\n      api.ecommerce.sites.get(\n        {\n          id: vm.site.id,\n          option: 'download-csv'\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog\n              .alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('SITE.GENERATING_FILE'))\n              .htmlContent(\n                $filter('translate')('SITE.GENERATING_FILE_MESSAGE', {\n                  email: Session.user.email,\n                  site: 'Zalando'\n                })\n              )\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        }\n      );\n    }\n\n    function checkIsSuperAdmin() {\n      return Session.user.isSuperAdmin();\n    }\n\n    function saveCsvConfig() {\n      $rootScope.$broadcast('details::saveCsvConfig');\n    }\n\n    function cancelCsvConfig() {\n      $rootScope.$broadcast('details::cancelCsvConfig');\n    }\n\n    function resetHipercalzadosCsv() {\n      $rootScope.$broadcast('details::resetHipercalzadosCsv');\n    }\n\n    function showSyncProducts() {\n      return vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO &&\n        vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX;\n    }\n\n    function showProductsCsvEndpoint() {\n      return vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV ||\n        vm.site.platform === vm.ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO;\n    }\n\n    function showDeleteSiteDialog() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('SITE.DELETE_SITE_TITLE'))\n        .htmlContent($filter('translate')('SITE.DELETE_SITE_MSG'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n          deleteSite();\n        }, function() {\n          // Cancel\n        }\n      );\n    }\n\n    function deleteSite() {\n      if (Session.hasPermission('ecommerce.sites.site.details.delete')) {\n        api.ecommerce.sites.delete({\n          id: vm.site.id\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $state.go('app.ecommerce.sites');\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        });\n      }\n    }\n\n    function submitShopifyForm() {\n      document.getElementById('shopifyForm').submit();\n    }\n\n    function showAdvancedCard() {\n      var hasAdvancedCard = [\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO,\n        ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO\n      ];\n      return hasAdvancedCard.indexOf(vm.site.platform) !== -1;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceSiteCategoriesController', EcommerceSiteCategoriesController);\n\n  /** @ngInject */\n  function EcommerceSiteCategoriesController($scope, PERMISSIONS, Session, $mdDialog, api,\n                                             $mdToast, $filter, $translate, $compile, DTColumnBuilder, $document,\n                                             HTTP_STATUS, CategoriesData, SiteData, ECOMMERCE_PLATFORMS,\n                                             UNMODIFIABLE_PLATFORMS) {\n\n    var vm = this;\n\n    $scope.Session = Session;\n    $scope.$parent.vm.currentNavItem = \"categories\";\n\n    $scope.data = CategoriesData.categories || [];\n    $scope.site = angular.copy(SiteData);\n\n    $scope.saving = false;\n\n    $scope.editable =  UNMODIFIABLE_PLATFORMS.indexOf(ECOMMERCE_PLATFORMS[$scope.site.platform]) === -1;\n\n    $scope.treeOptions = {\n      dragStop: function (event) {\n        if (!event.source.nodeScope.$modelValue.company) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.CANNOT_UPDATE_CATEGORY')).position('top right'));\n          return;\n        }\n        updatePositions();\n      },\n    };\n\n    $scope.remove = function (scope) {\n      scope.remove();\n    };\n\n    $scope.toggle = function (scope) {\n      scope.toggle();\n    };\n\n    $scope.moveLastToTheBeginning = function () {\n      var a = $scope.data.pop();\n      $scope.data.splice(0, 0, a);\n    };\n\n    $scope.translations = function (category) {\n\n      $mdDialog.show({\n        controller: 'EcommerceCategoryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/ecommerce/views/site/dialogs/ecommerce-category-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          category: category,\n          site: $scope.site,\n        }\n      }).then(function (result) {\n\n      });\n\n    }\n\n    $scope.add = function () {\n      var newNode = {\n        id: null,\n        parent: null,\n        name: 'New Category' + '.' + ($scope.data.length + 1),\n        children: [],\n        products_amount: 0,\n        category_group: $scope.site.category_group\n      };\n      $scope.data.push(newNode);\n      $scope.translations(newNode);\n    }\n\n    $scope.newSubItem = function (scope) {\n      var nodeData = scope.$modelValue;\n      var newNode = {\n        id: null,\n        parent: nodeData.id,\n        name: nodeData.name + '.' + (nodeData.children.length + 1),\n        children: [],\n        products_amount: 0,\n        category_group: $scope.site.category_group\n      };\n      nodeData.children.push(newNode);\n      $scope.translations(newNode);\n    };\n\n    $scope.collapseAll = function () {\n      $scope.$broadcast('angular-ui-tree:collapse-all');\n    };\n\n    $scope.expandAll = function () {\n      $scope.$broadcast('angular-ui-tree:expand-all');\n    };\n\n    $scope.counter = 0;\n\n    $scope.save = function () {\n      $scope.saving = true;\n\n      updatePositions();\n\n      api.ecommerce.categories.save(\n        {\n          categories: $scope.data,\n          category_group_id: $scope.site.category_group,\n          option: 'update-list'\n        },\n        function (response, callback, status) {\n          if (status == 200) {\n            $scope.data = response.categories;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          }\n          $scope.saving = false;\n        }\n      )\n    };\n\n    // Methods\n    $scope.importFromEcommerce = importFromEcommerce;\n    $scope.showEcommerceInit = showEcommerceInit;\n\n    // Functions\n    function showEcommerceInit() {\n      return !$scope.data.length &&\n        ($scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP ||\n          $scope.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE);\n    }\n\n    function updatePositions() {\n      $scope.counter = 0;\n      $scope.data.forEach(function (node) {\n        updatePosition(node, null);\n      });\n    }\n\n    function updatePosition(node, parentId) {\n      node.position = $scope.counter;\n      node.parent = parentId;\n      $scope.counter += 1;\n      node.children.forEach(function (child) {\n        updatePosition(child, node.id);\n      });\n    }\n\n    function importFromEcommerce() {\n      if (showEcommerceInit()) {\n        $scope.importing = true;\n        api.ecommerce.sites.save(\n          {\n            id: $scope.site.id,\n            option: 'import-categories'\n          },\n          function (results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('CONFIGURATION.CATEGORIES_IMPORTED')).position('top right'));\n\n              api.ecommerce.sites.get(\n                {\n                  id: $scope.site.id,\n                  option: 'categories'\n                },\n                function (results, fn, status, message) {\n                  if (status === HTTP_STATUS.HTTP_200_OK) {\n                    $scope.data = results.categories;\n                  } else {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                  }\n                  $scope.importing = false;\n              });\n            } else {\n              $scope.importing = false;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        )\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('ImportProductsDialogController', ImportProductsDialogController);\n\n  /** @ngInject */\n  function ImportProductsDialogController($mdDialog) {\n    var vm = this;\n\n    // Data\n    vm.maxProducts = null;\n    vm.externalIds = null;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n\n    //Functions\n    function save() {\n      $mdDialog.hide({\n        maxProducts: vm.maxProducts,\n        externalIds: vm.externalIds\n      });\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('ImportMissingProductsDialogController', ImportMissingProductsDialogController);\n\n  /** @ngInject */\n  function ImportMissingProductsDialogController($mdDialog, $state, $window) {\n    var vm = this;\n\n    // Methods\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.goToImportation = goToImportation;\n\n    function goToImportation() {\n      var url = $state.href('app.inventory.import.products');\n      $window.open(url, '_blank');\n      $mdDialog.cancel();\n    }\n\n    //Functions\n    function save() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceCategoryDialogController', EcommerceCategoryDialogController);\n\n  /** @ngInject */\n  function EcommerceCategoryDialogController($scope, $mdDialog, $mdToast, $filter, category, api,\n                                             hotkeys, site, ECOMMERCE_PLATFORMS) {\n    var vm = this;\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n\n    // Data\n    vm.category = category;\n    vm.site = site;\n    vm.languages = [{\n      code: 'es',\n      name: 'Spanish'\n    }];\n    hotkeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT', 'TEXTAREA'],\n      callback: function (event) {\n        save();\n      }\n    });\n\n    // Methods\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.save = save;\n    vm.postSave = postSave;\n    vm.addTranslation = addTranslation;\n    vm.deleteTranslation = deleteTranslation;\n    vm.saveTranslation = saveTranslation;\n\n    //Functions\n    function hide() {\n      $mdDialog.hide(vm.brand);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function save() {\n      //  Remove double spaces this may cause problems in WordPress because it ignores them but we don't\n      vm.category.name = vm.category.name.replace(/  +/g, ' ');\n      if (vm.category.id) {\n        api.ecommerce.categories.update(\n          vm.category,\n          function (response) {\n            postSave(response);\n          }\n        );\n      } else {\n        api.ecommerce.categories.save(\n          vm.category,\n          function (response) {\n            postSave(response);\n          }\n        );\n      }\n    }\n\n    function postSave(response) {\n      if (response.id) {\n        angular.extend(vm.category, response);\n        hide();\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n    function addTranslation() {\n      if (!vm.category.translations) {\n        vm.category.translations = [];\n      }\n\n      vm.category.translations.push({\n        name: vm.category.name,\n        lang: vm.languages[0].code,\n        category: vm.category.id\n      });\n\n      // $scope.categoryForm.$setDirty();\n    }\n\n    function deleteTranslation(translation) {\n      if (!!!translation.id) {\n        for (var i = 0; i < vm.category.translations.length; i++) {\n          var current = vm.category.translations[i];\n          if (current.name == translation.name && current.lang == translation.lang) {\n            vm.category.translations.splice(i, 1);\n            return;\n          }\n        }\n      } else {\n        if (vm.saving)\n          return;\n\n        vm.saving = true;\n        api.ecommerce.categoryTranslations.delete(\n          translation,\n          function (response, callback, status) {\n            if (status == 204) {\n              for (var i = 0; i < vm.category.translations.length; i++) {\n                var current = vm.category.translations[i];\n                if (current.id == translation.id) {\n                  vm.category.translations.splice(i, 1);\n                  return;\n                }\n              }\n            }\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n    function saveTranslation(translation) {\n      if (vm.saving)\n        return;\n\n      vm.saving = true;\n      if (!!!translation.id) {\n        api.ecommerce.categoryTranslations.save(\n          translation,\n          function (response, callback, status) {\n            if (status == 201) {\n              angular.extend(translation, response);\n            }\n            vm.saving = false;\n          }\n        );\n      } else {\n        api.ecommerce.categoryTranslations.update(\n          translation,\n          function (response, callback, status) {\n            if (status == 200) {\n              angular.extend(translation, response);\n            }\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('AutoAssignWarehouseInfoDialog', AutoAssignWarehouseInfoDialog);\n\n  /** @ngInject */\n  function AutoAssignWarehouseInfoDialog($scope, $mdDialog, $mdToast, $filter, params, $rootScope) {\n    var vm = this;\n    // Data\n\n    // Methods\n    vm.warehouses = params.warehouses;\n    //Functions\n    vm.close = close;\n    vm.copyToClipboard = copyToClipboard;\n\n    function close() {\n      $mdDialog.cancel();\n    }\n\n    function copyToClipboard(value) {\n          var body = angular.element(document.body);\n          var textarea = angular.element('<textarea/>');\n          textarea.css({position: 'fixed', opacity: '0'});\n          textarea.val(value);\n          body.append(textarea);\n          textarea[0].select();\n          try {\n            var successful = document.execCommand('copy');\n            if (successful) {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.COPIED'))\n                  .position('top right')\n                  .hideDelay(500)\n              );\n            } else {\n              throw successful;\n            }\n          } catch (err) {\n          }\n          textarea.remove();\n        }\n\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('AutoAssignWarehouseByStockAvailabilityInfoDialog', AutoAssignWarehouseByStockAvailabilityInfoDialog);\n\n  /** @ngInject */\n  function AutoAssignWarehouseByStockAvailabilityInfoDialog($scope, $mdDialog, $mdToast, $filter, $rootScope) {\n    var vm = this;\n    // Data\n\n    // Methods\n    //Functions\n    vm.close = close;\n    vm.copyToClipboard = copyToClipboard;\n\n    function close() {\n      $mdDialog.cancel();\n    }\n\n    function copyToClipboard(value) {\n          var body = angular.element(document.body);\n          var textarea = angular.element('<textarea/>');\n          textarea.css({position: 'fixed', opacity: '0'});\n          textarea.val(value);\n          body.append(textarea);\n          textarea[0].select();\n          try {\n            var successful = document.execCommand('copy');\n            if (successful) {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.COPIED'))\n                  .position('top right')\n                  .hideDelay(500)\n              );\n            } else {\n              throw successful;\n            }\n          } catch (err) {\n          }\n          textarea.remove();\n        }\n\n\n  }\n})();\n\n// const { isElement } = require(\"lodash\");\n\n(function() {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactWishlistController', ContactsContactWishlistController);\n\n  /** @ngInject */\n  function ContactsContactWishlistController($scope, $state, $mdDialog, $timeout, HTTP_STATUS, $filter, $document, $compile, $mdToast, api,\n                                             DTColumnBuilder, $translate, Session, ContactData, DefaultRegisterService) {\n    var vm = this;\n\n    // Dataapi\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.selected = [];\n    vm.contact = ContactData;\n    vm.addProductVariants = addProductVariants;\n    vm.deleteProductVariants = deleteProductVariants;\n    vm.deleteProductVariantsConfirmed = deleteProductVariantsConfirmed;\n    vm.createPosOrder = createPosOrder;\n    vm.createPosOrderConfirmed = createPosOrderConfirmed;\n    vm.createPosOrderByRegister = createPosOrderByRegister;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.selectAll = selectAll;\n    vm.isChecked = isChecked;\n    vm.isIndeterminate = isIndeterminate;\n    vm.exists = exists;\n    vm.toggle = toggle;\n    vm.reloadProductVariants = reloadProductVariants;\n    vm.NoneChecked = NoneChecked;\n\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.productVariants.replace('/:id', '').replace('/:option', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.serializer = 'ProductVariantWishedSerializer';\n          d.contact = ContactData.id;\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      // initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      // scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('select')\n        .withTitle('<md-checkbox class=\"mb-0\" ng-checked=\"vm.isChecked()\"  md-indeterminate=\"vm.isIndeterminate()\" ng-click=\"vm.selectAll()\"></md-checkbox>')\n        .notSortable()\n        .withOption('className', 'checkbox')\n        .withOption('searchable', false)\n        .withOption('orderable', false)\n        .withOption('sortable', false)\n        .withOption('width', '20px')\n        .renderWith(function(data, type, full) {\n          return '<md-checkbox class=\"m-0\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle($event, ' + full.id + ')\"></md-checkbox>';\n        }),\n      DTColumnBuilder.newColumn('product_cover').withTitle($filter('translate')('PRODUCT.IMAGE')).notSortable().withOption('className', 'imageColumn').withOption('width', '50px')\n        .renderWith(function(data, type, full) {\n          if (angular.isUndefined(data)) return null;\n\n          if (data)\n            return '<img class=\"thumbnail-40 h-40\" src=\"' + data + '\">';\n          return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n\n        }),\n      DTColumnBuilder.newColumn('product_name')\n        .withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function(data, type, full) {\n          //data = value for that cell\n          //full = row (everything that has been serialized)\n          return data;\n        }),\n      DTColumnBuilder.newColumn('color_name')\n        .withTitle($filter('translate')('PRODUCT.COLOR'))\n        .renderWith(function(data, type, full) {\n          //data = value for that cell\n          //full = row (everything that has been serialized)\n          return full.color_code + data;\n        }),\n      DTColumnBuilder.newColumn('size_name')\n        .withTitle($filter('translate')('PRODUCT.SIZE'))\n        .renderWith(function(data, type, full) {\n          //data = value for that cell\n          //full = row (everything that has been serialized)\n          return data;\n        })\n\n    ];\n\n    //METHODS FOR DATATABLE OPTIONS\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      return nRow;\n    }\n\n    //METHODS FOR API CALLS\n    function reloadProductVariants() {\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function NoneChecked() {\n      if (vm.selected.length === 0) return true;\n      else return false;\n    }\n\n    //METHODS FOR CHECKBOX\n    function isChecked() {\n      var data = vm.dtInstanceProducts.DataTable.rows().data();\n      for (var i = 0; i < data.length; ++i) {\n        if (vm.selected.indexOf(data[i].id) === -1) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function isIndeterminate() {\n      return !!vm.selected.length && !isChecked();\n    }\n\n    function selectAll() {\n      if (isIndeterminate() || isChecked()) {\n        // Unselect all\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      } else {\n        // Select all\n        vm.dtInstanceProducts.DataTable.rows().data().map(function(product) {\n          vm.selected.push(product.id);\n        });\n      }\n    }\n\n    function exists(item) {\n      return vm.selected.indexOf(item) > -1;\n    }\n\n    function toggle(event, item) {\n      event.stopPropagation();\n      var idx = vm.selected.indexOf(item);\n      if (idx > -1) {\n        vm.selected.splice(idx, 1);\n      } else {\n        vm.selected.push(item);\n      }\n    }\n\n    //API CALLS\n    function openProductSearchDialog() {\n\n      if (Session.hasPermission('inventory.purchases.purchase.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: null,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true,\n              getVariants: true\n            }\n          }\n        }).then(function(result) {\n          addProductVariants(result.productVariants);\n\n        });\n      }\n    }\n\n    function addProductVariants(productVariantsIdsArray) {\n      var productVariantsIdsString = productVariantsIdsArray.map(function(productVariant) {\n        return productVariant.id.toString();\n      }).join(',');\n\n      api.inventories.contacts.update({\n        option: 'add_product_variants',\n        id: ContactData.id,\n        product_ids: productVariantsIdsString,\n        contact: ContactData\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          //SUCCESS\n          reloadProductVariants();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.waiting = false;\n      });\n    }\n\n    function deleteProductVariants() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('CONTACTS.DELETE_PRODUCT_VARIANT_WISHLIST'))\n        .htmlContent($filter('translate')('CONTACTS.DELETE_PRODUCT_VARIANT_WISHLIST_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        deleteProductVariantsConfirmed();\n\n      }, function() {\n      });\n\n    }\n\n    function deleteProductVariantsConfirmed() {\n      var productVariantsIds = vm.selected.join(',');\n\n      api.inventories.contacts.update({\n        option: 'delete_product_variants',\n        id: ContactData.id,\n        product_variants_ids: productVariantsIds\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          reloadProductVariants();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.waiting = false;\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      });\n    }\n\n    function createPosOrder() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('CONTACTS.WANT_TO_DELETE_FROM_WISHLIST_AFTER_SELL'))\n        .htmlContent($filter('translate')('CONTACTS.WANT_TO_DELETE_FROM_WISHLIST_AFTER_SELL_DESCRIPTION'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.YES'))\n        .cancel($filter('translate')('GENERAL.NO'));\n\n      $mdDialog.show(confirm).then(function() {\n        createPosOrderConfirmed(true);\n\n      }, function() {\n        createPosOrderConfirmed(false);\n\n      });\n    }\n\n    function createPosOrderConfirmed(confirmDelete) {\n      DefaultRegisterService.getDefaultRegister().then(function(defaultRegister) {\n        if (defaultRegister) {\n          createPosOrderByRegister(defaultRegister.id, confirmDelete);\n        } else {\n          DefaultRegisterService.requestDefaultRegister().then(function(defaultRegister) {\n            if (defaultRegister) {\n              createPosOrderByRegister(defaultRegister.id, confirmDelete);\n            }\n          });\n        }\n      });\n    }\n\n    function createPosOrderByRegister(register, confirmDelete) {\n\n      var productVariantsIds = vm.selected.join(',');\n\n      api.inventories.contacts.save({\n        option: 'generate-pos-order',\n        delete_product_variants: confirmDelete,\n        id: ContactData.id,\n        defaultRegister: register,\n        product_variants_ids: productVariantsIds\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          //SUCCESS\n          $state.go('app.sale.sell', { posOrder: response, isDevolution: false });\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.waiting = false;\n      });\n    }\n  }\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(function() {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactWholesaleSalesController', ContactsContactWholesaleSalesController);\n\n  /** @ngInject */\n  function ContactsContactWholesaleSalesController($scope, $mdSidenav, $mdDialog, $translate, $filter, $compile,\n                                                   api, Session, ContactData, DTColumnBuilder, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, UiGridService) {\n\n    var vm = this;\n\n    vm.toggleSidenav = toggleSidenav;\n    vm.orderStatuses = SALE_ORDER_STATUSES;\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.contact = ContactData;\n    vm.storageLabel = 'UIGridContactsContactWholesaleSalesControllerV2';\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      filters: {\n        type: 'all',\n        salesAgents: [],\n        customers: [],\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        statuses: [],\n        targetWarehouses: [],\n        sourceWarehouses: [],\n        providers: [],\n        startDate: null,\n        endDate: null,\n      },\n      nonStorableFilters: {\n        customer: vm.contact.id\n      },\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactRetailSalesController', ContactsContactRetailSalesController);\n\n  /** @ngInject */\n  function ContactsContactRetailSalesController($scope, $mdSidenav, $mdDialog, $translate, $filter, $compile,\n                                                api, Session, ContactData, DTColumnBuilder, UiGridService) {\n\n    // DATA\n    var vm = this;\n    vm.contact = ContactData;\n    vm.storageLabel = 'UIGridContactsContactRetailSalesControllerV2';\n    vm.status = {\n      state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n        startDate: null,\n        endDate: null,\n        startTime: null,\n        endTime: null,\n        registers: [],\n        users: [],\n        payment_methods: [],\n        payment_statuses: [],\n        incidence: false,\n        deleted: false\n      },\n      nonStorableFilters: {\n        customer: vm.contact.id\n      },\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    // METHODS\n    vm.toggleSidenav = toggleSidenav;\n\n    // FUNCTIONS\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactPurchasesController', ContactsContactPurchasesController);\n\n  /** @ngInject */\n  function ContactsContactPurchasesController($scope, $mdSidenav, $mdDialog, $translate, $filter, $compile,\n                                              api, Session, ContactData, DTColumnBuilder, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUS_COLORS, UiGridService) {\n\n    var vm = this;\n\n    vm.toggleSidenav = toggleSidenav;\n    vm.orderStatuses = PURCHASE_ORDER_STATUSES;\n    vm.orderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n    vm.contact = ContactData;\n    vm.storageLabel = 'UIGridContactsContactPurchasesControllerV2';\n\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        statuses: [],\n        targetWarehouses: [],\n        providers: []\n      },\n      nonStorableFilters: {\n        contact: vm.contact.id\n      },\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactPersonsController', ContactsContactPersonsController);\n\n  /** @ngInject */\n  function ContactsContactPersonsController($filter, $timeout, $scope, $mdToast, $compile, $mdDialog, $state,\n                                            $stateParams, $mdSidenav, api, Session, DTColumnBuilder, Utils) {\n\n    // Data\n    $scope.Session = Session;\n\n    var vm = this;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.persons.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.contact_id = $stateParams.id;\n        }\n      },\n      order: [[0, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      scrollY: true,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('first_name').withTitle($filter('translate')('CONTACTS.NAME')).renderWith(function (data, type, full) {\n        if (full.last_name) {\n          return full.first_name + ' ' + full.last_name;\n        } else {\n          return full.first_name;\n        }\n\n      }),\n      DTColumnBuilder.newColumn('email').withTitle($filter('translate')('CONTACTS.EMAIL')).renderWith(function (data, type, full) {\n        return data ? data : '';\n      }),\n    ];\n    vm.selectedPerson = null;\n    vm.addingNewPerson = false;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.addPerson = addPerson;\n    vm.cancelAddPerson = cancelAddPerson;\n    vm.savePerson = savePerson;\n    vm.deletePerson = deletePerson;\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function addPerson() {\n      vm.addingNewPerson = true;\n      vm.selectedPerson = {\n        contact: $stateParams.id\n      };\n    }\n\n    function cancelAddPerson() {\n      vm.addingNewPerson = false;\n      vm.selectedPerson = null;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      angular.element(row).attr('ng-class', '{\"md-background-bg md-hue-2\": vm.selectedPerson && vm.selectedPerson.id == ' + data.id + '}');\n      $compile(angular.element(row))($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        $timeout(function () {\n          vm.selectedPerson = aData;\n        });\n      });\n      return nRow;\n    }\n\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function deletePerson() {\n      var personId = vm.selectedPerson.id;\n      if (Session.hasPermission('contacts.contact.persons.delete')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('CONTACTS.DELETE_PERSON_TITLE'))\n          .htmlContent($filter('translate')('CONTACTS.DELETE_PERSON_TEXT'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          if (Session.hasPermission('contacts.contact.persons.delete')) {\n            api.inventories.persons.delete({\n              id: personId\n            }, function (response, callback, status) {\n              vm.selectedPerson = false;\n              vm.addingNewPerson = false;\n              vm.dtInstance.DataTable.draw();\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n              $scope.$emit('personDeleted', personId);\n            });\n          }\n        });\n      }\n    }\n\n    function savePerson() {\n      var tempPerson = angular.copy(vm.selectedPerson)\n      if (tempPerson.birthday && typeof tempPerson.birthday === 'object') {\n        tempPerson.birthday = Utils.dateToDateString(tempPerson.birthday, true);\n      }\n      if (!vm.selectedPerson.id && Session.hasPermission('contacts.contact.persons.update')) {\n        api.inventories.persons.save(\n          tempPerson,\n          function (result, callback, status) {\n            if (status === 201) {\n              vm.selectedPerson = result;\n              vm.addingNewPerson = false;\n              vm.dtInstance.DataTable.draw();\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              $scope.$emit('personSaved', result);\n            }\n          }\n        )\n      } else if (Session.hasPermission('contacts.contact.persons.update')) {\n        api.inventories.persons.update(\n          tempPerson,\n          function (result, callback, status) {\n            if (status === 200) {\n              vm.selectedPerson = result;\n              vm.addingNewPerson = false;\n              vm.dtInstance.DataTable.draw();\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              $scope.$emit('personSaved', result);\n            }\n          }\n        );\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactOverviewController', ContactsContactOverviewController);\n\n  /** @ngInject */\n  function ContactsContactOverviewController($scope, $timeout, $filter, $mdSidenav, api, ContactData, InvoicesData, Session) {\n\n    var vm = this;\n    vm.contact = ContactData;\n    vm.invoices = InvoicesData.results;\n    vm.saleInvoices = [];\n    vm.returnInvoices = [];\n    vm.totalSaleInvoices = 0.0;\n    vm.totalReturnInvoices = 0.0;\n    vm.totalPaid = 0.0;\n    vm.totalUnpaid = 0.0;\n    vm.pendingDifference = 0.0;\n    vm.toggleSidenav = toggleSidenav;\n    vm.salesVsReturnsOptions = {\n      color: ['#F44336', '#00bb80'],\n      title: {\n        text: $filter('translate')('CONTACTS.SALES_VS_RETURNS'),\n        subtext: '',\n        x: 'center'\n      },\n      tooltip: {\n        trigger: 'item',\n        formatter: \"{a} <br/>{b} : {c} ({d}%)\"\n      },\n      series: [\n        {\n          name: $filter('translate')('CONTACTS.SALES_VS_RETURNS'),\n          type: 'pie',\n          radius: ['25%', '50%'],\n          center: ['50%', '60%'],\n          data: [\n            {value: 1, name: $filter('translate')('CONTACTS.RETURN_INVOICES')},\n            {value: 1, name: $filter('translate')('CONTACTS.SALE_INVOICES')}\n          ],\n          itemStyle: {\n            borderRadius: 5,\n            borderColor: '#fff',\n            borderWidth: 1,\n          }\n        },\n      ]\n    };\n\n    vm.paymentOptions = {\n      color: ['#F44336', '#00bb80'],\n      title: {\n        text: $filter('translate')('CONTACTS.PAYMENTS'),\n        subtext: '',\n        x: 'center'\n      },\n      tooltip: {\n        trigger: 'item',\n        formatter: \"{a} <br/>{b} : {c} ({d}%)\"\n      },\n      series: [\n        {\n          name: $filter('translate')('CONTACTS.PAYMENTS'),\n          type: 'pie',\n          radius: ['25%', '50%'],\n          center: ['50%', '60%'],\n\n          data: [\n            {value: 1, name: $filter('translate')('CONTACTS.NOT_PAID')},\n            {value: 1, name: $filter('translate')('CONTACTS.PAID')}\n          ],\n          itemStyle: {\n            borderRadius: 5,\n            borderColor: '#fff',\n            borderWidth: 1,\n          }\n        },\n      ]\n    };\n\n    // Methods\n    vm.printBalance = printBalance\n\n    // Initialization\n    initialization();\n\n    // Functions\n    function initialization() {\n\n      vm.invoices.forEach(function (invoice) {\n        if (invoice.total_incl_tax >= 0) {\n          vm.saleInvoices.push(invoice);\n          vm.totalSaleInvoices += parseFloat(invoice.total_incl_tax);\n          if (invoice.payment_status == 10) {\n            vm.totalUnpaid += parseFloat(invoice.total_incl_tax);\n            vm.pendingDifference += parseFloat(invoice.total_incl_tax);\n          } else {\n            vm.totalPaid += parseFloat(invoice.total_incl_tax);\n          }\n        } else {\n          vm.returnInvoices.push(invoice);\n          vm.totalReturnInvoices += parseFloat(invoice.total_incl_tax);\n          if (invoice.payment_status == 10) {\n            vm.totalUnpaid += parseFloat(invoice.total_incl_tax) * -1;\n            vm.pendingDifference += parseFloat(invoice.total_incl_tax);\n          } else {\n            vm.totalPaid += parseFloat(invoice.total_incl_tax) * -1;\n          }\n        }\n      });\n\n      vm.salesVsReturnsOptions.series[0].data[0].value = vm.totalReturnInvoices.toFixed(2) * -1;\n      vm.salesVsReturnsOptions.series[0].data[1].value = vm.totalSaleInvoices.toFixed(2);\n      vm.paymentOptions.series[0].data[0].value = vm.totalUnpaid.toFixed(2);\n      vm.paymentOptions.series[0].data[1].value = vm.totalPaid.toFixed(2);\n\n      $timeout(function () {\n        var salesVsReturnsDom = document.getElementById('sales-vs-returns-chart');\n        var salesVsReturnsInstance = window.echarts.init(salesVsReturnsDom);\n        salesVsReturnsInstance.setOption(vm.salesVsReturnsOptions, true);\n\n        var paymentDom = document.getElementById('payment-chart');\n        var paymentInstance = window.echarts.init(paymentDom);\n        paymentInstance.setOption(vm.paymentOptions, true);\n      });\n\n    }\n\n    function printBalance() {\n      var url = api.urls.inventories.contactPrintBalance.replace(':id', vm.contact.id);\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactLoyaltyController', ContactsContactLoyaltyController);\n\n  /** @ngInject */\n  function ContactsContactLoyaltyController($scope, $mdToast, $filter, Session, ConfigurationData,\n                                          HTTP_STATUS, ContactData, api, DTColumnBuilder, $compile, $state) {\n\n    var vm = this;\n\n    // Constants\n    vm.HISTORIC_ONLY_CHANGE = 0;\n    vm.HISTORIC_ACCUMULATED_AND_SPENT = 1;\n    vm.HISTORIC_ALL = 2;\n\n    // Data\n    vm.dtInstanceRelatedPosOrders = {};\n    vm.configurationData = angular.copy(ConfigurationData.results[0]);\n    vm.contactData = ContactData;\n    vm.prevContactData = angular.copy(vm.contactData);\n    vm.currency = Session.company.currency;\n    vm.saving = false;\n    vm.editingBalanceRatio = false;\n    vm.historicMode = vm.HISTORIC_ONLY_CHANGE;\n\n    vm.dtOptionsRelatedPosOrders = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.posOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          Authorization: 'Token ' + Session.token,\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.serializer = 'PosOrderBalanceSerializer';\n          d.contact_id = vm.contactData.id;\n        }\n      },\n      order: [[1, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      pagingType: 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      scrollY: 'auto',\n      responsive: false,\n      serverSide: false,\n      processing: false,\n      searchDelay: 750,\n      stateSave: true,\n    };\n\n    vm.dtColumnsRelatedPosOrders = [\n      DTColumnBuilder.newColumn('autocode')\n        .withTitle($filter('translate')('CONTACTS.BALANCE_RELATED_AUTOCODE'))\n        .renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.sale.sales_log.order({id:' + full.id + '})\">' + data + '</a>';\n        }),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('CONTACTS.BALANCE_RELATED_DATE'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'shortDate');\n        }),\n      DTColumnBuilder.newColumn('accumulated_balance')\n        .withTitle($filter('translate')('CONTACTS.BALANCE_RELATED_ACCUMULATION'))\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          if (data > 0) {\n            return '<span class=\"green-fg\">' + data + '</span>';\n          } else if (data < 0) {\n            return '<span class=\"red-fg\">' + data + '</span>';\n          } else {\n            return data;\n          }\n        }),\n      DTColumnBuilder.newColumn('balance_discount')\n        .withTitle($filter('translate')('CONTACTS.BALANCE_RELATED_SUBTRACTION'))\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          if (data > 0) {\n            return '<span class=\"red-fg\">' + data + '</span>';\n          } else if (data < 0) {\n            return '<span class=\"green-fg\">' + data + '</span>';\n          } else {\n            return data;\n          }\n        }),\n      DTColumnBuilder.newColumn('balance_change')\n        .withTitle($filter('translate')('CONTACTS.BALANCE_RELATED_CHANGE'))\n        .renderWith(function (data, type, full) {\n          if (data > 0) {\n            return '<span class=\"green-fg\">' + data + '</span>';\n          } else if (data < 0) {\n            return '<span class=\"red-fg\">' + data + '</span>';\n          } else {\n            return data;\n          }\n        })\n    ];\n\n    // Methods\n    vm.startBalanceRatioEdition = startBalanceRatioEdition;\n    vm.saveClientLoyaltyConfiguration = saveClientLoyaltyConfiguration;\n    vm.getLoyaltyStartDate = getLoyaltyStartDate;\n    vm.getDefaultBalanceRatio = getDefaultBalanceRatio;\n    vm.setBalanceRatioToDefault = setBalanceRatioToDefault;\n    vm.setHistoricVisibleColumns = setHistoricVisibleColumns;\n    vm.cancel = cancel;\n\n    initialize();\n    // Functions\n\n    function initialize() {\n      $(document).ready(function() {\n        setHistoricVisibleColumns();\n      });\n    }\n\n    function startBalanceRatioEdition() {\n      vm.editingBalanceRatio = true;\n    }\n\n    function saveClientLoyaltyConfiguration(showToast) {\n      if (Session.hasPermission('contacts.contact.loyalty.update')) {\n        if (typeof showToast === 'undefined') {\n          showToast = true;\n        }\n        if (vm.saving) {\n          return;\n        }\n        vm.saving = true;\n        api.inventories.contacts.update(\n          vm.contactData,\n          function (result, fn, status) {\n            if (status == HTTP_STATUS.HTTP_200_OK) {\n              if (vm.prevContactData.balance_ratio != vm.contactData.balance_ratio && showToast) {\n                balanceRatioChangedToast();\n              }\n              vm.prevContactData = angular.copy(vm.contactData);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.editingBalanceRatio = false;\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n    function balanceRatioChangedToast() {\n      vm.prev_contact_balance_ratio = vm.prevContactData.balance_ratio;\n      $mdToast.show(\n        $mdToast.simple()\n          .textContent($filter('translate')('CONFIGURATION.BALANCE_RATIO_UPDATED'))\n          .action($filter('translate')('CONFIGURATION.UNDO_BALANCE_RATIO_CHANGE'))\n          .highlightAction(true)\n          .position('top right')).then(function (clicked) {\n        if (clicked === 'ok') {\n          vm.contactData.balance_ratio = vm.prev_contact_balance_ratio;\n          saveClientLoyaltyConfiguration(false);\n        }\n      });\n    }\n\n    function cancel() {\n      vm.contactData = angular.copy(ContactData);\n      $scope.balanceForm.$setPristine();\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        $state.go('app.sale.sales_log.order', {id: aData.id});\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function getLoyaltyStartDate() {\n      return vm.contactData.loyalty_start_date;\n    }\n\n    function getDefaultBalanceRatio() {\n      return vm.configurationData.default_contact_balance_ratio;\n    }\n\n    function setBalanceRatioToDefault() {\n      vm.contactData.balance_ratio = null;\n      saveClientLoyaltyConfiguration();\n    }\n\n    function setHistoricVisibleColumns() {\n      if (vm.historicMode === vm.HISTORIC_ONLY_CHANGE) {\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(2, false, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(3, false, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(4, true, false);\n      } else if (vm.historicMode === vm.HISTORIC_ACCUMULATED_AND_SPENT) {\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(2, true, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(3, true, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(4, false, false);\n      } else if (vm.historicMode === vm.HISTORIC_ALL) {\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(2, true, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(3, true, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(4, true, false);\n      } else {\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(2, true, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(3, true, false);\n        vm.dtInstanceRelatedPosOrders.dataTable.fnSetColumnVis(4, true, false);\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactInvoicesController', ContactsContactInvoicesController);\n\n  /** @ngInject */\n  function ContactsContactInvoicesController($scope, $rootScope, $mdDateRangePicker, $mdMedia, $state, $mdSidenav, $mdToast, $document, $http, $timeout, $filter, $compile, $mdDialog, api,\n                                             Session, DTColumnBuilder, $translate, InvoiceType, HTTP_STATUS, INVOICE_TYPES, SEARCH_MAX_LENGTH, ContactData, UiGridService) {\n    var vm = this;\n\n    // Cons\n    vm.INVOICE_TYPES = INVOICE_TYPES;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.status = {};\n    vm.type = InvoiceType;\n    vm.storageLabel = 'UIGridContactsContactInvoicesController' +vm.type + 'V1';\n    vm.timeout = null;\n    vm.selected = [];\n    vm.sidenavLockedOpen = true;\n    vm.dateRange = {};\n    vm.waiting = false;\n\n    // Methods\n    vm.initialize = initialize;\n    vm.generateInvoices = generateInvoices;\n    vm.downloadZip = downloadZip;\n    vm.toggleSidenav = toggleSidenav;\n    vm.showDateRangeDialog = showDateRangeDialog;\n    vm.reloadInvoices = reloadInvoices;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.status = {\n        state: {},\n        ordering: '',\n        search: '',\n        filtersParams: {},\n        filters: {\n          type: vm.type,\n          customers: [],\n          contactTypes: [],\n          serialNumberTypes: [],\n          startDate: null,\n          endDate: null\n        },\n        nonStorableFilters: {\n          customer: ContactData.id\n        },\n        pageNumber: 1,\n        pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n    }\n\n    function showDateRangeDialog() {\n      $mdDateRangePicker.show({\n        model: vm.dateRange\n      }).then(function(result) {\n        vm.dateRange = result;\n        vm.status.filters.startDate = vm.dateRange.dateStart;\n        vm.status.filters.endDate = vm.dateRange.dateEnd;\n        reloadInvoices();\n      }).catch(function() {\n      });\n    }\n\n    function reloadInvoices() {\n      if (vm.reloadInvoicesTimeout) {\n        $timeout.cancel(vm.reloadInvoicesTimeout);\n      }\n      vm.reloadInvoicesTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 1000);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function generateInvoices(ev) {\n\n      if (vm.waiting) {\n        return;\n      }\n\n      vm.waiting = true;\n\n      $mdDialog.show({\n        controller: 'GenerateInvoicesDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/accounting/views/invoices/dialogs/generate-invoices/generate-invoices.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {}\n      }).then(function(result) {\n\n        vm.waiting = false;\n        vm.dtInstance.rerender();\n      });\n    }\n\n\n    function downloadZip() {\n\n      if (vm.waiting) {\n        return;\n      }\n\n      vm.waiting = true;\n\n      var url = api.urls.accounting.invoicesDownloadZip;\n      var data = {\n        invoices_ids: vm.selected\n      };\n      var config = {};\n\n      $http.post(url, data, { responseType: 'arraybuffer' }).then(function(response) {\n\n        // create a download anchor tag\n        var downloadLink = document.createElement('a');\n        downloadLink.target = '_blank';\n        downloadLink.download = 'invoices.zip';\n\n        // convert downloaded data to a Blob\n        var blob = new Blob([response.data], { type: 'application/octet-stream' });\n\n        // create an object URL from the Blob\n        var URL = window.URL || window.webkitURL;\n        var downloadUrl = URL.createObjectURL(blob);\n\n        // set object URL as the anchor's href\n        downloadLink.href = downloadUrl;\n\n        // append the anchor to document body\n        document.body.appendChild(downloadLink);\n\n        // fire a click event on the anchor\n        downloadLink.click();\n\n        // cleanup: remove element and revoke object URL\n        document.body.removeChild(downloadLink);\n        URL.revokeObjectURL(downloadUrl);\n\n        vm.waiting = false;\n        $mdDialog.hide();\n      }, function(response) {\n        vm.waiting = false;\n        $mdDialog.cancel();\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactDetailsController', ContactsContactDetailsController);\n\n  /** @ngInject */\n  function ContactsContactDetailsController($scope, $document, $state, $q, $mdSidenav, $mdDialog, $mdToast, $filter, api, ContactData,\n                                            ContactGroupsData, HTTP_STATUS, CONTACT_TYPES, CONTACT_TYPES_REVERSE, COUNTRIES_DICT, SEARCH_MAX_LENGTH,\n                                            Session) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.contact = ContactData;\n    vm.contact.tags = typeof vm.contact.tags !== 'undefined' ? vm.contact.tags : [];\n    vm.toggleSidenav = toggleSidenav;\n    vm.saving = false;\n    vm.contactTypes = CONTACT_TYPES;\n    vm.contactTypesReverse = CONTACT_TYPES_REVERSE;\n    vm.countries = COUNTRIES_DICT;\n    vm.creatingSalesAgent = false;\n    vm.salesAgentSearchText = null;\n    vm.salesWarehouseSearchText = null;\n    vm.isNew = $state.params.id == 'add';\n    vm.contactGroups = ContactGroupsData.results;\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Spanish',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Catalan',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n\n    // Methods\n    vm.save = save;\n    vm.deleteContactConfirm = deleteContactConfirm;\n    vm.loadingDelete = false;\n\n    vm.salesAgentQuerySearch = salesAgentQuerySearch;\n    vm.selectSalesAgent = selectSalesAgent;\n    vm.createSalesAgent = createSalesAgent;\n    vm.getSelectedSalesAgentName = getSelectedSalesAgentName;\n\n    vm.salesWarehouseQuerySearch = salesWarehouseQuerySearch;\n    vm.selectSalesWarehouse = selectSalesWarehouse;\n    vm.getSelectedSalesWarehouseName = getSelectedSalesWarehouseName;\n    vm.newGroupAdded = newGroupAdded;\n    vm.isProvider = isProvider;\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n\n    function initialize() {\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function deleteContactConfirm(ev) {\n      if (vm.loadingDelete){\n        return;\n      }\n      vm.loadingDelete = true;\n     if (Session.hasPermission('contacts.contacts.delete')) {\n       var confirm = $mdDialog.confirm()\n         .title($filter('translate')('CONTACTS.DELETE_CONTACT_WARNING_MSG'))\n         .htmlContent('<b>' + vm.contact.name + '</b>' + ' ' + $filter('translate')('CONTACTS.DELETE_CONTACTE_EXPLENATION'))\n         .ariaLabel('delete contact')\n         .targetEvent(ev)\n         .ok($filter('translate')('GENERAL.OK'))\n         .cancel($filter('translate')('GENERAL.CANCEL'));\n\n       $mdDialog.show(confirm).then(function () {\n         if (Session.hasPermission('contacts.contacts.delete')) {\n           vm.contact.deleted = true;\n           api.inventories.contacts.update(\n             vm.contact,\n             function (result) {\n               $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.CONTACT_DELETED')).position('top right'));\n               $state.go('app.contacts')\n             }\n           )\n         }\n       });\n     }\n     vm.loadingDelete = false;\n   }\n\n    function save() {\n      if (Session.hasPermissions('contacts.contacts.create,contacts.contacts.update')) {\n        if (vm.saving) {\n          return;\n        }\n        vm.saving = true;\n\n        if (vm.contact.birthday) {\n          vm.contact.birthday = $filter('date')(vm.contact.birthday, 'yyyy-MM-dd');\n        }\n\n        if (vm.isNew) {\n          api.inventories.contacts.save(\n            vm.contact,\n            function (result, fn, status) {\n              if (status == HTTP_STATUS.HTTP_201_CREATED) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n                $state.go('app.contacts.contact.details', {id: result.id})\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.saving = false;\n            }\n          );\n        } else {\n          api.inventories.contacts.update(\n            vm.contact,\n            function (result, fn, status) {\n              if (status == HTTP_STATUS.HTTP_200_OK) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.saving = false;\n            }\n          );\n        }\n      }\n    }\n\n    function salesAgentQuerySearch() {\n      var deferred = $q.defer();\n      vm.salesAgentSearchText = vm.salesAgentSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.users.get(\n        {\n          search: vm.salesAgentSearchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectSalesAgent(salesAgent) {\n      if (typeof salesAgent === 'object') {\n        if (salesAgent) {\n          vm.contact.sales_agent_instance = salesAgent;\n          vm.contact.sales_agent = salesAgent.id;\n        } else {\n          vm.contact.sales_agent_instance = null;\n          vm.contact.sales_agent = null;\n        }\n      }\n    }\n\n    function createSalesAgent(salesAgent) {\n      if (vm.creatingSalesAgent) {\n        return;\n      }\n      vm.creatingSalesAgent = true;\n      api.account.users.save({\n        name: salesAgent\n      }, function (response, callback, status) {\n        if (status == 201) {\n          selectSalesAgent(response);\n        }\n        vm.creatingSalesAgent = false;\n      });\n    }\n\n    function getSelectedSalesAgentName() {\n      if (vm.contact.sales_agent_instance) {\n        return vm.contact.sales_agent_instance.first_name + ' ' + vm.contact.sales_agent_instance.last_name;\n      }\n      return null;\n    }\n\n    function salesWarehouseQuerySearch() {\n      var deferred = $q.defer();\n      vm.salesWarehouseSearchText = vm.salesWarehouseSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n      api.inventories.warehouses.get(\n        {\n          search: vm.salesWarehouseSearchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectSalesWarehouse(salesWarehouse) {\n      if (typeof salesWarehouse === 'object') {\n        if (salesWarehouse) {\n          vm.contact.sales_warehouse_instance = salesWarehouse;\n          vm.contact.sales_warehouse = salesWarehouse.id;\n        } else {\n          vm.contact.sales_warehouse_instance = null;\n          vm.contact.sales_warehouse = null;\n        }\n      }\n    }\n\n    function getSelectedSalesWarehouseName() {\n      if (vm.contact.sales_warehouse_instance) {\n        return vm.contact.sales_warehouse_instance.name;\n      }\n      return null;\n    }\n\n    function newGroupAdded(newObject) {\n      vm.contactGroups.push(newObject);\n      vm.contact.groups.push(newObject.id);\n    }\n\n    function isProvider(){\n      return parseInt(vm.contact.type) === parseInt(vm.contactTypesReverse.CONTACT_TYPE_PROVIDER);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactBillingController', ContactsContactBillingController);\n\n  /** @ngInject */\n  function ContactsContactBillingController($scope, $mdSidenav, $q, $mdToast, $filter, api, ContactData,\n                                            PricingTiersData, PaymentMethodsData, HTTP_STATUS, CONTACT_TYPES, CONTACT_PERSON_TYPES,\n                                            COUNTRIES_DICT, CONTACT_INVOICING_TYPES, Session) {\n\n    // Data\n    var vm = this;\n    $scope.Session = Session;\n    vm.contact = ContactData;\n    vm.toggleSidenav = toggleSidenav;\n    vm.saving = false;\n    vm.creatingSalesChannel = false;\n    vm.salesChannelSearchText = null;\n    vm.contactTypes = CONTACT_TYPES;\n    vm.personTypes = CONTACT_PERSON_TYPES;\n    vm.countries = COUNTRIES_DICT;\n    vm.contactInvoicingTypes = CONTACT_INVOICING_TYPES;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.paymentMethods = PaymentMethodsData.results;\n    vm.paymentMethodDays = null;\n\n    // Methods\n    vm.save = save;\n    vm.salesChannelQuerySearch = salesChannelQuerySearch;\n    vm.selectSalesChannel = selectSalesChannel;\n    vm.createSalesChannel = createSalesChannel;\n    vm.onPaymentMethodChange = onPaymentMethodChange;\n    vm.getSelectedPaymentMethod = getSelectedPaymentMethod;\n    \n    if (vm.contact.payment_method) {\n      var selectedPM = getSelectedPaymentMethod();\n      if (selectedPM) {\n        vm.paymentMethodDays = selectedPM.days || 0;\n      }\n    }\n    \n    // Functions\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n    function salesChannelQuerySearch() {\n      var deferred = $q.defer();\n\n      api.inventories.salesChannels.get(\n        {\n          search: vm.salesChannelSearchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectSalesChannel(salesChannel) {\n      if (typeof salesChannel === 'object') {\n        if (salesChannel && salesChannel.id && salesChannel.name) {\n          vm.contact.sales_channel_instance = salesChannel;\n          vm.contact.sales_channel = salesChannel.id;\n        } else {\n          vm.contact.sales_channel_instance = null;\n          vm.contact.sales_channel = null;\n        }\n      }\n    }\n\n    function createSalesChannel(salesChannel) {\n      if (vm.creatingSalesChannel) {\n        return;\n      }\n      vm.creatingSalesChannel = true;\n      api.inventories.salesChannels.save({\n        name: salesChannel\n      }, function (response, callback, status) {\n        if (status == 201) {\n          selectSalesChannel(response);\n        }\n        vm.creatingSalesChannel = false;\n      });\n    }\n\n    function getSelectedPaymentMethod() {\n      if (!vm.contact.payment_method) {\n        return null;\n      }\n      for (var i = 0; i < vm.paymentMethods.length; i++) {\n        if (vm.paymentMethods[i].id === vm.contact.payment_method) {\n          return vm.paymentMethods[i];\n        }\n      }\n      return null;\n    }\n\n    function onPaymentMethodChange() {\n      var selectedPM = getSelectedPaymentMethod();\n      vm.paymentMethodDays = selectedPM ? (selectedPM.days || 0) : null;\n    }\n\n    function save() {\n      if (Session.hasPermission('contacts.contact.billing.update')) {\n        if (vm.saving) {\n          return;\n        }\n        vm.saving = true;\n        \n        var savePromises = [];\n        var selectedPM = getSelectedPaymentMethod();\n        if (selectedPM && vm.paymentMethodDays !== null && vm.paymentMethodDays !== undefined) {\n          var paymentMethodUpdate = {\n            id: selectedPM.id,\n            days: vm.paymentMethodDays\n          };\n          savePromises.push(\n            $q(function(resolve, reject) {\n              api.accounting.paymentMethods.update(\n                paymentMethodUpdate,\n                function (result, fn, status) {\n                  if (status == HTTP_STATUS.HTTP_200_OK) {\n                    resolve();\n                  } else {\n                    reject();\n                  }\n                }\n              );\n            })\n          );\n        }\n\n        savePromises.push(\n          $q(function(resolve, reject) {\n            api.inventories.contacts.update(\n              vm.contact,\n              function (result, fn, status) {\n                if (status == HTTP_STATUS.HTTP_200_OK) {\n                  resolve();\n                } else {\n                  reject();\n                }\n              }\n            );\n          })\n        );\n        \n        $q.all(savePromises).then(function() {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n          vm.saving = false;\n        }, function() {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          vm.saving = false;\n        });\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactB2BEcommerceController', ContactsContactB2BEcommerceController);\n\n  /** @ngInject */\n  function ContactsContactB2BEcommerceController($scope, $mdSidenav, $mdToast, $filter, api, ContactData,\n                                                 HTTP_STATUS, Session, ERROR_CODES) {\n\n    // Data\n    var vm = this;\n    $scope.Session = Session;\n    vm.contact = ContactData;\n    vm.b2bEcommercePassword = '';\n    vm.toggleSidenav = toggleSidenav;\n    vm.saving = false;\n    vm.sending = false;\n    vm.b2bEcommerces = [];\n    vm.selectedEcommerces = [];\n    vm.selectedUniqueB2b = false;\n    vm.changePassword = false;\n    // Methods\n    vm.save = save;\n    vm.setUniqueB2bToContact = setUniqueB2bToContact;\n    vm.setDirty = setDirty;\n    vm.saveB2BPassword = saveB2BPassword;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      //Get b2b Ecommerces\n      if (Session.hasMultipleB2B()) {\n        api.wholesale.b2bEcommerces.list(function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.data) {\n            vm.b2bEcommerces = response.data;\n            for (var i = 0; i < vm.b2bEcommerces.length; i++) {\n              vm.selectedEcommerces.push({\n                id: vm.b2bEcommerces[i].id,\n                slug: vm.b2bEcommerces[i].slug,\n                selected: vm.contact.b2b_ecommerces.includes(vm.b2bEcommerces[i].id),\n                url: vm.b2bEcommerces[i].domain,\n                warehouse: vm.b2bEcommerces[i].warehouse_name\n              });\n            }\n          }\n        });\n      } else {\n        vm.defaultB2b = Session.getDefaultB2B();\n        vm.selectedUniqueB2b = vm.contact.b2b_ecommerces.includes(vm.defaultB2b);\n        api.wholesale.b2bEcommerces.list(function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response && response.data) {\n            vm.b2bEcommerces = response.data;\n            for (var i = 0; i < vm.b2bEcommerces.length; i++) {\n              if(vm.b2bEcommerces[i].id == vm.defaultB2b) {\n                vm.selectedEcommerces.push({\n                  id: vm.b2bEcommerces[i].id,\n                  slug: vm.b2bEcommerces[i].slug,\n                  selected: vm.contact.b2b_ecommerces.includes(vm.b2bEcommerces[i].id),\n                  url: vm.b2bEcommerces[i].domain,\n                  warehouse: vm.b2bEcommerces[i].warehouse_name\n                });\n              }\n            }\n          }\n        });\n      }\n    }\n\n    function setDirty() {\n      $scope.b2b_ecommerceForm.$setDirty();\n    }\n    function setUniqueB2bToContact() {\n      if (!Session.hasMultipleB2B()) {\n        if (!vm.selectedUniqueB2b) {\n          vm.selectedEcommerces.push({\n            id: vm.defaultB2b,\n            selected: true\n          });\n        } else {\n          vm.selectedEcommerces = [];\n        }\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function save() {\n      if (Session.hasPermission('contacts.contact.b2b_ecommerces.b2b_ecommerce.update')) {\n        if (vm.sending) {\n          return;\n        }\n\n        vm.sending = true;\n\n        if (vm.contact.email) {\n          var contact = angular.copy(vm.contact);\n          contact.b2b_ecommerces = $filter('filter')(vm.selectedEcommerces, {selected: true}).map(function (ecommerce) {\n            return ecommerce.id;\n          });\n\n          api.inventories.contacts.update(\n            contact,\n            function(result, fn, status) {\n              if (status == HTTP_STATUS.HTTP_200_OK) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.sending = false;\n              ContactData.b2b_ecommerces = contact.b2b_ecommerces;\n            }\n          );\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.NOT_EMAIL')).position('top right'));\n        }\n      }\n    }\n\n    function saveB2BPassword(sendCredentials) {\n      api.inventories.contacts.patch({\n            option: 'change-b2b-password',\n            id: vm.contact.id,\n            send_credentials: sendCredentials,\n            b2b_ecommerce_password: vm.b2bEcommercePassword\n          }, function(result, fn, status) {\n              if (status == HTTP_STATUS.HTTP_200_OK) {\n                var message = sendCredentials ? 'GENERAL.SAVED_AND_SENT_SUCCESSFULLY' : 'GENERAL.SAVED_SUCCESSFULLY';\n                $mdToast.show($mdToast.simple().textContent($filter('translate')(message)).position('top right'));\n                // vm.contact.b2b_ecommerce_password = \"\";\n              } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && result.error) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('CONTACTS.' + result.error)).position('top right'));\n              }  else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.sending = false;\n            }\n          );\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsContactAddressesController', ContactsContactAddressesController);\n\n  /** @ngInject */\n  function ContactsContactAddressesController($compile,\n                                              $document,\n                                              $filter,\n                                              $mdDialog,\n                                              $mdSidenav,\n                                              $scope,\n                                              $translate,\n                                              ContactData,\n                                              Session,\n                                              DTColumnBuilder) {\n\n    var vm = this;\n\n\n    // Data\n    vm.contact = ContactData;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      data: vm.contact.postal_addresses,\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"><\"right\"<\"info\"i><\"pagination\"p>>>',\n      pagingType: 'simple',\n      pageLength: 10,\n      responsive: false,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      },\n      rowCallback: rowCallback,\n      createdRow: createdRow,\n      drawCallback: drawCallback\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('CONTACTS.NAME')),\n      DTColumnBuilder.newColumn('city')\n        .withTitle($filter('translate')('CONTACTS.ADDRESS'))\n        .renderWith(function (data, type, full) {\n          return $filter('location')(full);\n        }),\n      DTColumnBuilder.newColumn('is_billing_address')\n        .withTitle($filter('translate')('CONTACTS.IS_BILLING_ADDRESS'))\n        .renderWith(function (data, type, full) {\n          return data ? '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' : ''\n        }),\n      DTColumnBuilder.newColumn('is_shipping_address')\n        .withTitle($filter('translate')('CONTACTS.IS_SHIPPING_ADDRESS'))\n        .renderWith(function (data, type, full) {\n          return data ? '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>' : ''\n        })\n    ];\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.newAddress = newAddress;\n    vm.openAddress = openAddress;\n\n    // Functions\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function newAddress() {\n      if (Session.hasPermission('contacts.contact.addresses.create')) {\n        $mdDialog.show({\n          controller: 'ContactAddressDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/address/contact-address-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            AddressData: {\n              contact: vm.contact.id\n            }\n          }\n        }).then(function (newAddress) {\n          vm.contact.postal_addresses.push(newAddress);\n        }, function () {\n          // Nothing to do\n        });\n      }\n    }\n\n    function openAddress(address) {\n      $mdDialog.show({\n        controller: 'ContactAddressDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/address/contact-address-dialog.html',\n        parent: angular.element($document.find('#content-container')),\n        clickOutsideToClose: true,\n        locals: {\n          AddressData: address\n        }\n      }).then(function (deleted) {\n        // The user has deleted the address\n        if (deleted) {\n          vm.contact.postal_addresses.splice(vm.contact.postal_addresses.findIndex(function (postalAddress) {\n            return postalAddress.id === address.id;\n          }), 1);\n        }\n      }, function () {\n        // Nothing to do\n      });\n    }\n\n    function drawCallback(settings) {\n      if (vm.addingProduct) {\n        vm.addingProduct = false;\n        // When last product was added by scanning a barcode, it doesn't have to be focused\n        if (!vm.lastAddedByBarcodeScan) {\n          setTimeout(function () {\n            if (angular.element('#datatable-table input').length)\n              var element = angular.element(angular.element('#datatable-table input')[0]);\n            element.focus()\n          }, 100)\n        }\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        openAddress(aData);\n      });\n      return nRow;\n    }\n\n  }\n})();\n\n(function () {\n\n  'use strict';\n\n  angular\n    .module('app.analytics',\n      [\n        'nvd3',\n        'datatables',\n        'ui.grid',\n        'ui.grid.resizeColumns',\n        'ui.grid.pagination',\n        'ui.grid.moveColumns',\n        'ui.grid.selection',\n        'ui.grid.cellNav',\n        'ui.grid.moveColumns',\n        'ui.grid.pinning',\n        'ui.grid.saveState',\n        'ui.grid.edit',\n        'ui.grid.exporter'\n      ]\n    )\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n\n    $stateProvider\n\n      .state('app.analytics', {\n        abstract: true,\n        url: '/analytics'\n      })\n\n      .state('app.analytics.start', {\n        url: '/start',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/start/start.html',\n            controller: 'AnalyticsStartController as vm'\n          }\n        },\n        resolve: {\n          StartDashboardData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('analytics.startDashboard@get');\n          },\n          StartBannersData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('support.startBanners@get');\n          }\n        },\n        bodyClass: 'analytics-start'\n      })\n\n      .state('app.analytics.retail_dashboard', {\n        url: '/retail-dashboard/:warehouseIds',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/retail-dashboard/retail-dashboard.html',\n            controller: 'AnalyticsRetailDashboardController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@get', {\n              include_deleted: true,\n              restricted: true,\n              filter_warehouse_by_user: true\n            });\n          },\n        },\n        bodyClass: 'analytics-retail-dashboard'\n      })\n\n\n      .state('app.analytics.retail_dashboard.realtime', {\n        url: '/realtime/',\n        views: {\n          'subcontent@app.analytics.retail_dashboard': {\n            templateUrl: 'app/main/apps/analytics/views/retail-dashboard/tabs/realtime.html',\n            controller: 'AnalyticsRetailDashboardRealtimeController as vm'\n          }\n        },\n        resolve: {\n          RetailDashboardData: function (apiResolver, $stateParams) {\n            if ($stateParams.warehouseIds)\n              return apiResolver.resolve('analytics.retailDashboard@get', {warehouse_ids: $stateParams.warehouseIds});\n            else {\n              return apiResolver.resolve('analytics.retailDashboard@get');\n            }\n\n          }\n        },\n        bodyClass: 'analytics-retail-dashboard'\n      })\n\n      .state('app.analytics.retail_dashboard.performance', {\n        url: '/performance/',\n        views: {\n          'subcontent@app.analytics.retail_dashboard': {\n            templateUrl: 'app/main/apps/analytics/views/retail-dashboard/tabs/performance.html',\n            controller: 'AnalyticsRetailDashboardPerformanceController as vm'\n          }\n        },\n        resolve: {\n          BrandsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          CategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.categories@get');\n          },\n          SubcategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          }\n        },\n        bodyClass: 'analytics-retail-dashboard'\n      })\n\n      .state('app.analytics.retail_dashboard.products', {\n        url: '/products/',\n        views: {\n          'subcontent@app.analytics.retail_dashboard': {\n            templateUrl: 'app/main/apps/analytics/views/retail-dashboard/tabs/products.html',\n            controller: 'AnalyticsRetailDashboardProductsController as vm'\n          }\n        },\n        resolve: {\n          BrandsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          CategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.categories@get');\n          },\n          SubcategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          }\n        },\n        bodyClass: 'analytics-retail-dashboard'\n      })\n\n      .state('app.analytics.retail_dashboard.categories', {\n        url: '/categories/',\n        views: {\n          'subcontent@app.analytics.retail_dashboard': {\n            templateUrl: 'app/main/apps/analytics/views/retail-dashboard/tabs/categories.html',\n            controller: 'AnalyticsRetailDashboardCategoriesController as vm'\n          }\n        },\n        resolve: {\n          BrandsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.brands@get');\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n          CategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.categories@get');\n          },\n          SubcategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@get');\n          }\n        },\n        bodyClass: 'analytics-retail-dashboard'\n      })\n\n      .state('app.analytics.health', {\n        url: '/health',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/health/health.html',\n            controller: 'AnalyticsHealthController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-health'\n      })\n\n      .state('app.analytics.inventory', {\n        url: '/inventory',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/inventory/inventory.html',\n            controller: 'AnalyticsInventoryController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-inventory'\n      })\n\n      .state('app.analytics.inventory.overview', {\n        url: '/overview',\n        views: {\n          'subcontent@app.analytics.inventory': {\n            templateUrl: 'app/main/apps/analytics/views/inventory/tabs/overview.html',\n            controller: 'AnalyticsInventoryOverviewController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-inventory-overview'\n      })\n\n      .state('app.analytics.inventory.abc_analysis', {\n        url: '/abc-analysis',\n        views: {\n          'subcontent@app.analytics.inventory': {\n            templateUrl: 'app/main/apps/analytics/views/inventory/tabs/abc-analysis.html',\n            controller: 'AnalyticsInventoryABCAnalysisController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-inventory-abc-analysis'\n      })\n\n      .state('app.analytics.inventory.low_stock', {\n        url: '/low-stock',\n        views: {\n          'subcontent@app.analytics.inventory': {\n            templateUrl: 'app/main/apps/analytics/views/inventory/tabs/low-stock.html',\n            controller: 'AnalyticsInventoryLowStockController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-inventory-low-stock'\n      })\n\n      .state('app.analytics.wholesale_dashboard', {\n        url: '/wholesale-dashboard/:warehouseIds',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/wholesale-dashboard/wholesale-dashboard.html',\n            controller: 'AnalyticsWholesaleDashboardController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@get', {include_deleted: true});\n          },\n        },\n        bodyClass: 'analytics-wholesale-dashboard'\n      })\n\n      .state('app.analytics.wholesale_dashboard.realtime', {\n        url: '/realtime/:warehouseId',\n        views: {\n          'subcontent@app.analytics.wholesale_dashboard': {\n            templateUrl: 'app/main/apps/analytics/views/wholesale-dashboard/tabs/realtime.html',\n            controller: 'AnalyticsWholesaleDashboardRealtimeController as vm'\n          }\n        },\n        resolve: {\n          SeasonsData: function (apiResolver, $stateParams) {\n            return apiResolver.resolve('inventories.seasons@get');\n          },\n        },\n        bodyClass: 'analytics-retail-dashboard'\n      })\n\n      /**\n       * Report Base\n       */\n\n      .state('app.analytics.report', {\n        url: '/report',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/report/report.html',\n            controller: 'ReportsReportController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report'\n      })\n\n      /**\n       * Retail Sales Report\n       */\n\n      .state('app.analytics.report.catalog', {\n        url: '/catalog',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/catalog.html',\n            controller: 'ReportsCatalogController as vm'\n          }\n        },\n        bodyClass: 'analytics-report-inventory'\n      })\n\n      .state('app.analytics.report.inventory', {\n        url: '/inventory',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/inventory.html',\n            controller: 'ReportsInventoryController as vm'\n          }\n        },\n        bodyClass: 'analytics-report-inventory'\n      })\n\n      .state('app.analytics.report.pre-orders', {\n        url: '/pre-orders',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/pre-orders.html',\n            controller: 'ReportsPreOrdersController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-pre-orders'\n      })\n\n      /**\n       * Purchases Report\n       */\n\n      .state('app.analytics.report.purchase-orders', {\n        url: '/purchase-orders',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/purchase-orders.html',\n            controller: 'ReportsPurchaseOrdersController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-purchase-orders'\n      })\n\n      /**\n       * Transfers Report\n       */\n\n      .state('app.analytics.report.transfer-orders', {\n        url: '/transfer-orders',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/transfer-orders.html',\n            controller: 'ReportsTransferOrdersController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-transfer-orders'\n      })\n\n      /**\n       * Wholesale Transactions\n       */\n\n      .state('app.analytics.report.wholesale-transactions', {\n        url: '/wholesale-transactions',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/wholesale-transactions.html',\n            controller: 'ReportsWholesaleTransactionsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-wholesale-transactions'\n      })\n\n      /**\n       * Wholesale Sales\n       */\n\n      .state('app.analytics.report.wholesale-sales', {\n        url: '/wholesale-sales',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/wholesale-sales.html',\n            controller: 'ReportsWholesaleSalesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-wholesale-sales'\n      })\n\n\n      /**\n       * Wholesale Sales\n       */\n\n      .state('app.analytics.report.wholesale-products-sold', {\n        url: '/wholesale-products-sold',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/wholesale-products-sold.html',\n            controller: 'ReportsWholesaleProductsSoldController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-wholesale-products-sold'\n      })\n\n      /**\n       * Wholesale Delivery Notes\n       */\n\n      .state('app.analytics.report.wholesale-delivery-notes', {\n        url: '/wholesale-delivery-notes',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/wholesale-delivery-notes.html',\n            controller: 'ReportsWholesaleDeliveryNotesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-wholesale-delivery-notes'\n      })\n\n      /**\n       * Workdays\n       */\n\n      .state('app.analytics.report.workdays', {\n        url: '/workdays',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/workdays.html',\n            controller: 'ReportsWorkdaysController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-workdays'\n      })\n\n      /**\n       * UID Stocks Report\n       */\n\n      .state('app.analytics.report.uid-stock', {\n        url: '/uid-stock',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/uid-stock.html',\n            controller: 'ReportUidStockController as vm'\n          }\n        },\n        bodyClass: 'analytics-report-uid-stock'\n      })\n\n      /**\n       * Stock movements\n       */\n      .state('app.analytics.report.stock-movements', {\n        url: '/stock-movements',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/stock-movements.html',\n            controller: 'ReportStockMovementsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-stock-movements'\n      })\n\n      /**\n       * UID Stocks Movements Report\n       */\n      .state('app.analytics.report.uid-stock-movements', {\n        url: '/uid-stock-movements',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/uid-stock-movements.html',\n            controller: 'ReportUIDStockMovementsController as vm'\n          }\n        },\n        bodyClass: 'analytics-report-uid-stock-movements'\n      })\n\n      /**\n       * Invoices\n       */\n\n      .state('app.analytics.report.invoices', {\n        url: '/invoices',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/invoices.html',\n            controller: 'ReportsInvoicesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-invoices'\n      })\n\n      /**\n       * Retail Transactions\n       */\n\n      .state('app.analytics.report.retail-transactions', {\n        url: '/retail-transactions',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/retail-transactions.html',\n            controller: 'ReportsRetailTransactionsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-retail-transactions'\n      })\n\n      /**\n       * Products status\n       */\n      .state('app.analytics.report.product-status', {\n        url: '/products-status',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/product-status.html',\n            controller: 'ReportProductStatusController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-ecommerce-sales'\n      })\n\n      /**\n       * Stock replenishment\n       */\n      .state('app.analytics.report.stock-replenishment', {\n        url: '/stock-replenishment',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/stock-replenishment.html',\n            controller: 'ReportStockReplenishmentController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-stock-replenishment'\n      })\n\n      /**\n       * Ecommerce Sales\n       */\n\n      .state('app.analytics.report.ecommerce-sales', {\n        url: '/ecommerce-sales',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/ecommerce-sales.html',\n            controller: 'ReportsEcommerceSalesController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-ecommerce-sales'\n      })\n\n\n      /**\n       * Cash Movement\n       */\n\n      .state('app.analytics.report.cash-movement', {\n        url: '/cash-movement',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/cash-movement.html',\n            controller: 'ReportsCashMovementController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-cash-movement'\n      })\n\n\n      /**\n       * Tickets\n       */\n\n      .state('app.analytics.report.tickets', {\n        url: '/tickets',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/tickets.html',\n            controller: 'ReportsTicketsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-tickets'\n      })\n\n      /**\n       * Payments\n       */\n\n      .state('app.analytics.report.payments', {\n        url: '/payments',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/payments.html',\n            controller: 'ReportsPaymentsController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-payments'\n      })\n\n      /**\n       * Daily billings\n       */\n\n      .state('app.analytics.report.daily-billings', {\n        url: '/daily-billings',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/daily-billings.html',\n            controller: 'ReportsDailyBillingsController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * Register closures\n       */\n\n      .state('app.analytics.report.register-closures', {\n        url: '/register-closures',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/register-closures.html',\n            controller: 'ReportsRegisterClosuresController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-register-closures'\n      })\n\n      /**\n       * Taxes\n       */\n\n      .state('app.analytics.report.taxes', {\n        url: '/taxes',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/retail-taxes.html',\n            controller: 'ReportsRetailTaxesController as vm'\n          }\n        },\n        resolve: {}\n      })\n\n      /**\n       * Seller Transactions\n       */\n\n      .state('app.analytics.report.seller-transactions', {\n        url: '/seller-transactions',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/seller-transactions.html',\n            controller: 'ReportsSellerTransactionsController as vm'\n          }\n        },\n        resolve: {\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {include_deleted: true});\n          },\n          BrandsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.brands@list', {});\n          },\n          SeasonsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.seasons@list', {});\n          },\n          CategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.categories@list', {});\n          },\n          SubcategoriesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.subcategories@list', {});\n          }\n        },\n        bodyClass: 'analytics-report-seller-transactions'\n      })\n\n      /**\n       * Retail Customers\n       */\n\n      .state('app.analytics.report.retail-customers', {\n        url: '/retail-customers',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/retail-customers.html',\n            controller: 'ReportsRetailCustomersController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-retail-customers'\n      })\n\n      /**\n       * Wholesale Customers\n       */\n\n      .state('app.analytics.report.wholesale-customers', {\n        url: '/wholesale-customers',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/wholesale-customers.html',\n            controller: 'ReportsWholesaleCustomersController as vm'\n          }\n        },\n        resolve: {},\n        bodyClass: 'analytics-report-wholesale-customers'\n      })\n\n      /**\n       * Retail KPIs\n       */\n\n      .state('app.analytics.report.retail-kpis', {\n        url: '/retail-kpis',\n        views: {\n          'subcontent@app.analytics.report': {\n            templateUrl: 'app/main/apps/analytics/views/report/tabs/retail-kpis.html',\n            controller: 'ReportsRetailKpisController as vm'\n          }\n        },\n        resolve: {\n          BasicRetailKPIsData: function (apiResolver, $stateParams) {\n            var lastDate = new Date();\n            lastDate.setUTCHours(0, 0, 0, 0);\n            lastDate.setDate(new Date().getDate() - 1);\n            var firstDate = new Date(lastDate);\n            firstDate.setDate(lastDate.getDate() - 7);\n\n            return apiResolver.resolve('analytics.basicRetailKpi@list', {\n              content_type: 'warehouse',\n              from_date: firstDate,\n              to_date: lastDate\n            });\n          },\n          WarehousesData: function (apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {include_deleted: true});\n          }\n        },\n        bodyClass: 'analytics-report-retail-kpis'\n      })\n\n      /**\n       * Sales (dynamic analytics)\n       */\n      .state('app.analytics.sales', {\n        url: '/sales',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/sale-analytics/sale-analytics.html',\n            controller: 'SaleAnalyticsController as vm'\n          }\n        },\n        resolve: {\n\n        },\n        bodyClass: 'analytics-sales'\n      })\n\n      /**\n       * Products (dynamic analytics)\n       */\n      .state('app.analytics.products', {\n        url: '/products',\n        views: {\n          'content@app': {\n            templateUrl: 'app/main/apps/analytics/views/product-analytics/product-analytics.html',\n            controller: 'ProductAnalyticsController as vm'\n          }\n        },\n        resolve: {\n\n        },\n        bodyClass: 'analytics-products'\n      });\n\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/apps/analytics');\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsWholesaleDashboardRealtimeController', AnalyticsWholesaleDashboardRealtimeController);\n\n  /** @ngInject */\n  function AnalyticsWholesaleDashboardRealtimeController($scope, $filter, $state, $interval, $mdSidenav, $stateParams,\n                                                         api, SeasonsData, Session, SEARCH_MAX_LENGTH) {\n\n    $scope.$parent.vm.currentNavItem = \"realtime\";\n    $scope.$parent.vm.warehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.seasons = SeasonsData.results;\n    vm.filters = {\n      season: null,\n      showInclTaxes: false\n    };\n    vm.loading = false;\n    vm.warehouseId = $scope.$parent.vm.warehouseId;\n    vm.data = [];\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    // Methods\n    vm.applyFilters = applyFilters;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize(){\n\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::analyticsWholesaleDashboardRetailtimeController'));\n\n      if(recovered_filters != null && angular.isDefined(recovered_filters.season)){\n        vm.filters.season = recovered_filters.season;\n      }\n      if(recovered_filters != null && angular.isDefined(recovered_filters.showInclTaxes)){\n        vm.filters.showInclTaxes = recovered_filters.showInclTaxes;\n      }\n\n      updateTable();\n\n    }\n\n    function applyFilters(){\n      localStorage.setItem(Session.company.id + '::analyticsWholesaleDashboardRetailtimeController', JSON.stringify(vm.filters))\n      updateTable();\n    }\n\n    function updateTable(){\n      vm.loading = true;\n\n      api.analytics.wholesaleDashboard.get({\n        warehouse_id: $stateParams.warehouseId,\n        season_id: vm.filters.season,\n        show_incl_taxes: vm.filters.showInclTaxes\n      }, function(response, callback, status){\n        vm.data = response;\n        vm.loading = false;\n      })\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsRetailDashboardRealtimeController', AnalyticsRetailDashboardRealtimeController);\n\n  /** @ngInject */\n  function AnalyticsRetailDashboardRealtimeController($scope, $filter, $state, $interval, $mdSidenav, api,\n                                                      RetailDashboardData, HTTP_STATUS, Session, Utils) {\n\n    $scope.$parent.vm.currentNavItem = 'realtime';\n    $scope.$parent.vm.selectedWarehouses = !$state.params.warehouseIds ?\n      [] :\n      $state.params.warehouseIds.split(',').map(function (stringId) {\n        // Parse int\n        return +stringId;\n      });\n    $scope.$parent.vm.initialize();\n\n    var vm = this;\n    vm.warehouseIds = $scope.$parent.vm.selectedWarehouses;\n    vm.selectedWarehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    vm.data = RetailDashboardData;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.pieWidget = {};\n    vm.basicRetailKpi = {};\n    vm.currentNavItem = 'sales';\n    vm.mainChartData = [];\n    vm.salesChartData = [];\n    vm.productsChartData = [];\n    vm.chartApi = {};\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.selectProject = selectProject;\n    vm.calculateConversion = calculateConversion;\n    vm.getLabel = getLabel;\n    vm.updateChart = updateChart;\n    vm.getColorFromName = getColorFromName;\n\n\n    // Initialization\n    initialization();\n\n    // Functions\n    function initialization() {\n      vm.data.today.employees_sales_2 = vm.data.today.employees_sales_2.sort(function(a, b) {\n        return b.total_products_sold - a.total_products_sold;\n      });\n      // FIXME: the currency transformation should be done at server side\n      vm.data.today.employees_sales_2.forEach(function(data, index){\n        if(data.pos_order__source_warehouse__pricing_tier__currency_convertion){\n          data.total_products_sold = Utils.twoDecimals(data.total_products_sold / data.pos_order__source_warehouse__pricing_tier__currency_convertion)\n          data.total_products_returned = Utils.twoDecimals(data.total_products_returned / data.pos_order__source_warehouse__pricing_tier__currency_convertion)\n        }\n        var label = getLabel(data, ' ');\n        vm.salesChartData.push({\n          label: label,\n          value: data.total_transactions\n        });\n        vm.productsChartData.push({\n          label: label,\n          value: data.amount_products_sold\n        });\n      });\n\n      vm.pieWidget = {\n        mainChart: {\n          config: {\n            refreshDataOnly: true,\n            deepWatchData: true\n          },\n          options: {\n            chart: {\n              type: 'pieChart',\n              // color: ['#f44336', '#9c27b0', '#03a9f4', '#e91e63'],\n              color: vm.data.today.employees_sales_2.map(function(employee) {\n                return getColorFromName(getLabel(employee, ''));\n              }),\n              height: 400,\n              margin: {\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0\n              },\n              donut: true,\n              clipEdge: true,\n              cornerRadius: 0,\n              labelType: 'percent',\n              padAngle: 0.02,\n              x: function(d) {\n                return d.label;\n              },\n              y: function(d) {\n                return d.value;\n              },\n              tooltip: {\n                gravity: 's',\n                classes: 'gravity-s'\n              }\n            }\n          },\n          data: []\n        },\n        init: function() {\n          vm.mainChartData = vm.currentNavItem === 'sales' ? vm.salesChartData : vm.productsChartData;\n        }\n      };\n\n      var ids = null;\n      if (vm.warehouseIds.length) {\n        ids = vm.warehouseIds.join()\n      } else {\n        ids = [];\n        $scope.$parent.vm.warehouses.forEach(function (warehouse) {\n          ids.push(warehouse.id);\n        });\n        ids = ids.join();\n      }\n\n      vm.pieWidget.init();\n\n      vm.basicRetailKpis = [];\n      vm.basicRetailKpisReady = false;\n\n      var params = {\n        option: 'aggregate',\n        date_gte: new Date(),\n        date_lte: new Date()\n      };\n\n      if (vm.warehouseIds.length > 0) {\n        params['content_type'] = 'warehouse';\n        params['object_ids'] = vm.warehouseIds;\n      } else {\n        params['content_type'] = 'company';\n        params['object_id'] = Session.company.id;\n      }\n\n      api.analytics.basicRetailKpi.get(params,\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.basicRetailKpi = results;\n          } else {\n            // TODO show error toast\n          }\n        });\n    }\n\n    function getLabel(data, separator) {\n      if (data.pos_order__site__name) {\n        return data.pos_order__site__name;\n      }\n\n      return data.employee_first_name + separator + data.employee_last_name;\n    }\n\n    function getColorFromName(name) {\n      var backgrounds = ['E91E63', '8852A0', '673AB7', '3F51B5', '4A5ff0', '4A5ff0', '00BCD4', '009688', '00bb80', 'CDDC39', 'F1AF2F', 'FFC107', 'FF9800', 'FF5722', '795548'];\n      var result = 0;\n      for (var i = 0; i < name.length; ++i) {\n        result += name.charCodeAt(i);\n      }\n      return '#' + backgrounds[result % backgrounds.length];\n    }\n\n    function updateChart() {\n      vm.mainChartData = vm.currentNavItem === 'sales' ? vm.salesChartData : vm.productsChartData;\n      vm.chartApi.update();\n    }\n\n    function calculateConversion(visitors, transactions) {\n      if (visitors == 0) {\n        return 0;\n      } else {\n        return Math.round((100 / visitors) * transactions * 100) / 100;\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function selectProject(project) {\n      vm.selectedProject = project;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsRetailDashboardProductsController', AnalyticsRetailDashboardProductsController);\n\n  /** @ngInject */\n  function AnalyticsRetailDashboardProductsController($scope, $state, $interval, $document, $mdSidenav, $mdDateRangePicker,\n                                                      BrandsData, SeasonsData, CategoriesData, SubcategoriesData, Session, SEARCH_MAX_LENGTH) {\n    $scope.$parent.vm.currentNavItem = \"products\";\n    $scope.$parent.vm.selectedWarehouses = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    $scope.$parent.vm.initialize();\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.warehouseIds = $scope.$parent.vm.selectedWarehouses;\n    vm.selectedWarehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    vm.dateRange = {\n      dateStart: null,\n      dateEnd: null\n    };\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.filters = {\n      brand: null,\n      season: null,\n      category: null,\n      subcategory: null,\n      is_noos: true\n    };\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.selectProject = selectProject;\n    vm.dateRangeChanged = dateRangeChanged;\n\n    // Initialization\n    initialize();\n\n    // Functions\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function selectProject(project) {\n      vm.selectedProject = project;\n    }\n\n    function initialize() {\n      var now = new Date();\n      vm.dateRange.dateEnd = new Date(Date.UTC(now.getFullYear(), now.getUTCMonth(), now.getDate() - 1, 23, 59, 59));\n      vm.dateRange.dateStart = new Date(Date.UTC(now.getFullYear(), now.getUTCMonth(), now.getDate() - 6, 0, 0, 0));\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::analyticsRetailDashboardSellOutFiltersController'));\n      if (recovered_filters != null && angular.isDefined(recovered_filters.brand)) {\n        vm.filters.brand = recovered_filters.brand;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.season)) {\n        vm.filters.season = recovered_filters.season;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.category)) {\n        vm.filters.category = recovered_filters.category;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.subcategory)) {\n        vm.filters.subcategory = recovered_filters.subcategory;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.is_noos)) {\n        vm.filters.is_noos = recovered_filters.is_noos;\n      }\n\n    }\n\n    function dateRangeChanged() {\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsRetailDashboardPerformanceController', AnalyticsRetailDashboardPerformanceController);\n\n  /** @ngInject */\n  function AnalyticsRetailDashboardPerformanceController($scope, $state, $document, $interval, $mdSidenav, $mdDateRangePicker,\n                                                         BrandsData, SeasonsData, CategoriesData, SubcategoriesData, Session, SEARCH_MAX_LENGTH, Utils) {\n    $scope.$parent.vm.currentNavItem = \"performance\";\n    $scope.$parent.vm.selectedWarehouses = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    $scope.$parent.vm.initialize();\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.categoryIdBySubcategoryId = {};\n    vm.warehouseIds = $scope.$parent.vm.selectedWarehouses;\n    vm.dateRange = {\n      dateStart: new Date(),\n      dateEnd: new Date()\n    };\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.filters = {\n      brand: null,\n      season: null,\n      category: null,\n      subcategory: null,\n      is_noos: 1\n    };\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.selectProject = selectProject;\n    vm.availableSubcategories = availableSubcategories;\n    vm.categoriesFilterHasChanged = categoriesFilterHasChanged;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      var recovered_daterange = Utils.getDateRangeFromLocalStorage(\n          Session.company.id + '::analyticsRetailDashboardPerformanceDateRangeControllerV2'\n      );\n\n      if (recovered_daterange && angular.isDefined(recovered_daterange.dateStart)) {\n        vm.dateRange.dateStart = new Date(recovered_daterange.dateStart);\n      } else {\n        vm.dateRange.dateStart = new Date();\n        vm.dateRange.dateStart.setDate(vm.dateRange.dateStart.getDate() - 14);\n      }\n      if (recovered_daterange && angular.isDefined(recovered_daterange.dateEnd)) {\n        vm.dateRange.dateEnd = new Date(recovered_daterange.dateEnd);\n      } else {\n        vm.dateRange.dateEnd = new Date();\n      }\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::analyticsRetailDashboardSellOutFiltersController'));\n      if (recovered_filters != null && angular.isDefined(recovered_filters.brand)) {\n        vm.filters.brand = recovered_filters.brand;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.season)) {\n        vm.filters.season = recovered_filters.season;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.category)) {\n        vm.filters.category = recovered_filters.category;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.subcategory)) {\n        vm.filters.subcategory = recovered_filters.subcategory;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.is_noos)) {\n        vm.filters.is_noos = recovered_filters.is_noos;\n      }\n\n      vm.subcategories.forEach(function(subcategory) {\n        vm.categoryIdBySubcategoryId[subcategory.id] = subcategory.category.id;\n      });\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function selectProject(project) {\n      vm.selectedProject = project;\n    }\n\n    function availableSubcategories() {\n      return vm.subcategories.filter(function(subcategory) {\n        return !vm.filters.category || vm.filters.category == subcategory.category.id;\n      });\n    }\n\n    function categoriesFilterHasChanged() {\n      if (!vm.filters.category || !vm.filters.subcategory) {\n        return\n      }\n\n      var categoryId = vm.categoryIdBySubcategoryId[vm.filters.subcategory]\n      if (vm.filters.category != categoryId) vm.filters.subcategory = null;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsRetailDashboardCategoriesController', AnalyticsRetailDashboardCategoriesController);\n\n  /** @ngInject */\n  function AnalyticsRetailDashboardCategoriesController($scope, $state, $interval, $document, $mdSidenav, $mdDateRangePicker,\n                                                        api, BrandsData, SeasonsData, CategoriesData, SubcategoriesData,\n                                                        HTTP_STATUS, SEARCH_MAX_LENGTH, Session) {\n    $scope.$parent.vm.currentNavItem = \"categories\";\n    $scope.$parent.vm.selectedWarehouses = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    $scope.$parent.vm.initialize();\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.warehouseIds = $scope.$parent.vm.selectedWarehouses;\n    vm.selectedWarehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.categoryKpis = [];\n    vm.totalsByWeek = {};\n    vm.amountsByWeek = {};\n    vm.salesBySubcategoryCode = {};\n    vm.subcategoriesWithSales = [];\n    vm.loading = false;\n    vm.filters = {\n      brand: null,\n      season: null,\n      category: null,\n      subcategory: null,\n      is_noos: true,\n      dateRange: {\n        dateStart: null,\n        dateEnd: null\n      }\n    }\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      order: [[2, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      //createdRow: createdRow,\n      //rowCallback: rowCallback,\n      //headerCallback: headerCallback,\n      //initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [25, 50, 100],\n      pageLength: 50,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750\n    };\n    vm.compare = compare;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.selectProject = selectProject;\n    vm.applyFilters = applyFilters;\n\n    // Initialization\n    initialize();\n\n    // Functions\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function selectProject(project) {\n      vm.selectedProject = project;\n    }\n\n    function initialize() {\n      var now = new Date();\n      vm.filters.dateRange.dateEnd = new Date(Date.UTC(now.getFullYear(), now.getUTCMonth(), now.getDate() - 1, 23, 59, 59));\n      vm.filters.dateRange.dateStart = new Date(Date.UTC(now.getFullYear(), now.getUTCMonth(), now.getDate() - 30, 0, 0, 0));\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::analyticsRetailDashboardCategoriesFiltersController'));\n\n      if (recovered_filters != null && angular.isDefined(recovered_filters.dateRange)) {\n        vm.filters.dateRange = recovered_filters.dateRange;\n        vm.filters.dateRange.dateEnd = new Date(vm.filters.dateRange.dateEnd);\n        vm.filters.dateRange.dateStart = new Date(vm.filters.dateRange.dateStart);\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.brand)) {\n        vm.filters.brand = recovered_filters.brand;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.season)) {\n        vm.filters.season = recovered_filters.season;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.is_noos)) {\n        vm.filters.is_noos = recovered_filters.is_noos;\n      }\n\n      update();\n    }\n\n    function applyFilters() {\n      localStorage.setItem(Session.company.id + '::analyticsRetailDashboardCategoriesFiltersController', JSON.stringify(vm.filters));\n      update();\n    }\n\n    function update() {\n\n      vm.loading = true;\n\n      api.analytics.categoryKpis.get({\n        option: vm.sellOutType,\n        warehouse_ids: JSON.stringify(vm.warehouseIds),\n        brand: vm.filters.brand,\n        season: vm.filters.season,\n        is_noos: vm.filters.is_noos,\n        date_gte: new Date(vm.filters.dateRange.dateStart),\n        date_lte: new Date(vm.filters.dateRange.dateEnd)\n      }, function (result, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.categoryKpis = result.data;\n          vm.totalsByWeek = result.totals_by_week;\n          vm.amountsByWeek = result.amounts_by_week;\n          initializeWeeklySales();\n        } else {\n          // TODO show error toast\n        }\n        vm.loading = false;\n      });\n    }\n\n    function initializeWeeklySales() {\n      vm.salesBySubcategoryCodeAndWeek = {};\n      var subcategoriesWithSalesDict = {};\n      var lastWeekStart = null;\n      vm.categoryKpis.forEach(function (weeklySales) {\n        weeklySales.weekly_sales.forEach(function (subcategorySales) {\n          subcategoriesWithSalesDict[subcategorySales.subcategory_code] = subcategorySales.subcategory_name;\n          if (angular.isUndefined(vm.salesBySubcategoryCodeAndWeek[subcategorySales.subcategory_code])) {\n            vm.salesBySubcategoryCodeAndWeek[subcategorySales.subcategory_code] = {};\n          }\n          vm.salesBySubcategoryCodeAndWeek[subcategorySales.subcategory_code][weeklySales.week_start] = subcategorySales;\n          subcategorySales.lastWeekStart = lastWeekStart;\n        })\n        lastWeekStart = weeklySales.week_start;\n      })\n      vm.subcategoriesWithSales = [];\n      for (var key in subcategoriesWithSalesDict) {\n        vm.subcategoriesWithSales.push({\n          code: key,\n          name: subcategoriesWithSalesDict[key]\n        });\n      }\n    }\n\n    function compare(lastValue, newValue) {\n\n      if (newValue > lastValue) {\n        return (((100.0 / parseFloat(lastValue)) * parseFloat(newValue)) - 100.00).toFixed(2);\n      } else {\n        return -1 * (100.00 - ((100.0 / parseFloat(lastValue)) * parseFloat(newValue))).toFixed(2);\n      }\n\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics.report.utils', [])\n    .service('ReportUtils', reportUtils);\n\n  /** @ngInject */\n  function reportUtils($q) {\n\n    var service = this;\n\n    service.querySearchCustomField = function(field, extraParams) {\n      var deferred = $q.defer();\n      var data = {\n        search: field.searchText\n      };\n\n      if (extraParams) {\n        angular.extend(data, extraParams);\n      }\n\n      // api.inventories.warehouses\n      field.api.get(data, function (results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        }\n        else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    service.getSelectedIds = function (field) {\n      if (field){\n        if (field.multiple) {\n          var ids = field.selected.map(function (item){\n            return item ? item.id : null;\n          }).filter(function (id) {\n            return id !== '' && id !== null;\n          })\n          ids = new Set(ids);\n          return Array.from(ids).join(',');\n        } else {\n          if (field.selectedItem){\n            return field.selectedItem.id.toString();\n          } else {\n            return null;\n          }\n        }\n      } else {\n        return null;\n      }\n    };\n\n    // We split first to trim each individual element and then join them back together\n    service.getTextElements = function (elements) {\n      return elements.selected.split(',').map(function (element) {\n        return element.trim();\n      }).join(',');\n    };\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsWorkdaysController', ReportsWorkdaysController);\n\n  /** @ngInject */\n  function ReportsWorkdaysController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.WORKDAYS;\n\n    var vm = this;\n    vm.downloading = false;\n    const ID_WAREHOUSES = 'warehouses';\n\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.WAREHOUSE',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField,\n      },\n    ];\n\n    vm.columns = [\n      {\n        name: 'EMPLOYEE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'START',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'END',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'WORK_TIME',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PAUSE_TIME',\n        selected: false,\n        default: false,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    function download(fileType, dateRange){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var warehouses = vm.customFields.find(function (field) {\n        return field.id === ID_WAREHOUSES;\n      });\n\n      api.reports.workdaysReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString,\n          warehouse_ids: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsWholesaleTransactionsController', ReportsWholesaleTransactionsController);\n\n  /** @ngInject */\n  function ReportsWholesaleTransactionsController($scope, $mdToast, $mdDialog, $filter, api, Session, ReportUtils, HTTP_STATUS) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.WHOLESALE_TITLE.buttons.WHOLESALE_TRANSACTIONS;\n\n    // Data\n    var ID_SEASONS = 'seasons';\n    var ID_SALES_AGENTS = 'sales_agents';\n    var vm = this;\n\n    vm.downloading = false;\n\n    vm.customFields = [\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SALES_AGENTS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SALES_AGENT',\n            api: api.account.users,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n    ];\n\n    vm.columns = [\n      {\n        name: 'SALE_ORDER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CREATION_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'START_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'DELIVERY_NOTE_SHIPPING_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE_RECEPTION_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE_DATE',\n        selected: true,\n        default: false\n      },\n      {\n        name: 'CANCEL_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'EXPECTED_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'COMPOSITION',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'VENDOR',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'FOB_PRICE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DDP_PRICE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PRICING_TIER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PRICE_EXCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PRICE_INCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'MERCHANDISE_DISCOUNT',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'MERCHANDISE_DISCOUNT_PRICE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'PAYMENT_TERMS_DISCOUNT',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'PAYMENT_TERMS_DISCOUNT_PRICE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'FINAL_PRICE_EXCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'FINAL_PRICE_INCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CUSTOMER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PAYMENT_METHOD',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'STATUS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'ORDER_TOTAL_SOLD',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'ORDER_TOTAL_SHIPPED',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SALES_AGENT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE_UNITS_SHIPPED',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_EXCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_INCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'INVOICE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PAYMENT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'ORDER_TOTAL_RETURNED',\n        selected: true,\n        default: false\n      },\n      {\n        name: 'DELIVERY_NOTE_UNITS_RETURNED',\n        selected: true,\n        default: false\n      },\n      {\n        name: 'DELIVERY_NOTE_TOTAL_UNITS',\n        selected: true,\n        default: true\n      }\n    ]\n\n    // Methods\n    vm.download = download;\n\n    function download(fileType, dataRange) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var seasons = vm.customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var sales_agents = vm.customFields.find(function (field) {\n        return field.id === ID_SALES_AGENTS;\n      });\n\n      api.reports.wholesaleTransactionsReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          sales_agent_id: sales_agents ? ReportUtils.getSelectedIds(sales_agents) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsWholesaleSalesController', ReportsWholesaleSalesController);\n\n  /** @ngInject */\n  function ReportsWholesaleSalesController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                     DTColumnBuilder,HTTP_STATUS, ReportUtils, $compile) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.WHOLESALE_TITLE.buttons.WHOLESALE_SALES;\n\n\n    // Data\n    var ID_SEASONS = 'seasons';\n    var ID_SALES_AGENTS = 'sales_agents';\n    var vm = this;\n\n    vm.dateRange = {};\n\n    vm.customFields = [\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SALES_AGENTS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SALES_AGENT',\n            api: api.account.users,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n    ];\n\n    vm.columns = [\n      {\n        name : 'SALE_ORDER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CREATION_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'START_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CANCEL_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'EXPECTED_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PRICING_TIER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SURCHARGE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'DISCOUNT',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'EARLY_PAYMENT_DISCOUNT',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'TOTAL_ITEMS',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SUBTOTAL',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SUBTOTAL_DISCOUNT',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SUBTOTAL_EARLY_PAYMENT_DISCOUNT',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'FINAL_PRICE_EXCL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'FINAL_PRICE_INCL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CUSTOMER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PAYMENT_METHOD',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'WAREHOUSE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'COUNTRY',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'STATUS',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CREATED_BY',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SALES_AGENT',\n        selected : true,\n        default :true\n      },{\n        name : 'CUSTOMER_CARRIER_NAME',\n        selected : false,\n        default :false\n      },\n      {\n        name : 'CUSTOMER_COMMENTS',\n        selected : false,\n        default :false\n      },\n      {\n        name : 'CUSTOMER_TRANSPORT_IMPORT_ACCOUNT_NUMBER',\n        selected : false,\n        default :false\n      },\n      {\n        name : 'NOTES',\n        selected : false,\n        default :false\n      },\n      {\n        name : 'GENERATED_DOCUMENTS',\n        selected : false,\n        default :false\n      },\n    ];\n    vm.downloading = false;\n\n    // Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init(){\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that sends a file with the report to the corresponding email\n     * @param fileType\n     * @param dateRange\n     */\n     function download(fileType, dateRange, customFields) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = true\n      var columnsString = vm.columns.filter(function(c){\n        return c.selected;\n      }).map(function(c){\n        return c.name;\n      }).join(',');\n\n      var seasons = vm.customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var sales_agents = vm.customFields.find(function (field) {\n        return field.id === ID_SALES_AGENTS;\n      });\n\n      api.reports.wholesaleSalesReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          sales_agent_id: sales_agents ? ReportUtils.getSelectedIds(sales_agents) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n\n  }\n\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsWholesaleProductsSoldController', ReportsWholesaleProductsSoldController);\n\n  /** @ngInject */\n  function ReportsWholesaleProductsSoldController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                     DTColumnBuilder,HTTP_STATUS, ReportUtils, $compile) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.WHOLESALE_TITLE.buttons.WHOLESALE_PRODUCTS_SOLD;\n\n\n    // Data\n    var ID_SEASONS = 'seasons';\n    var ID_SALES_AGENTS = 'sales_agents';\n    var vm = this;\n\n    vm.dateRange = {};\n\n    vm.customFields = [\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SALES_AGENTS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SALES_AGENT',\n            api: api.account.users,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n    ];\n\n    vm.columns = [\n      {\n        name : 'SALE_ORDER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CREATION_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'START_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CANCEL_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'EXPECTED_DATE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'BARCODE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CODE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'ORIGIN_CODE',\n        selected : true,\n        default :false\n      },\n      {\n        name : 'NAME',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SIZE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'COLOR_CODE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'COLOR_NAME',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SEASON',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'BRAND',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PROVIDER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'COLLECTION',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CATEGORY',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SUBCATEGORY',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'COMPOSITION',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'VENDOR',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'FOB_PRICE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'DDP_PRICE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PRICING_TIER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PRICE_EXCL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PRICE_INCL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'MERCHANDISE_DISCOUNT',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'MERCHANDISE_DISCOUNT_PRICE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PAYMENT_TERMS_DISCOUNT',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PAYMENT_TERMS_DISCOUNT_PRICE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'TOTAL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'FINAL_PRICE_EXCL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'FINAL_PRICE_INCL_TAX',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CUSTOMER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'PAYMENT_METHOD',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'WAREHOUSE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'STATUS',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'ORDER_TOTAL_SOLD',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'ORDER_TOTAL_SHIPPED',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'CREATED_BY',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'SALES_AGENT',\n        selected : true,\n        default :true\n      },\n    ];\n    vm.downloading = false;\n\n    // Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init(){\n      var date = new Date();\n      var y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(y, m, 1);\n      vm.dateRange.dateEnd = new Date(y, m + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that sends a file with the report to the corresponding email\n     * @param fileType\n     * @param dateRange\n     */\n     function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = true\n      var columnsString = vm.columns.filter(function(c){\n        return c.selected;\n      }).map(function(c){\n        return c.name;\n      }).join(',');\n\n      var seasons = vm.customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var sales_agents = vm.customFields.find(function (field) {\n        return field.id === ID_SALES_AGENTS;\n      });\n\n      api.reports.wholesaleProductsSoldReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          sales_agent_id: sales_agents ? ReportUtils.getSelectedIds(sales_agents) : null\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n\n  }\n\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsWholesaleDeliveryNotesController', ReportsWholesaleDeliveryNotesController);\n\n  /** @ngInject */\n  function ReportsWholesaleDeliveryNotesController($scope, $mdToast, $mdDialog, $filter, api, Session, HTTP_STATUS, ReportUtils) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.WHOLESALE_TITLE.buttons.WHOLESALE_DELIVERY_NOTES;\n\n\n    // Data\n    var ID_SEASONS = 'seasons';\n    var ID_SALES_AGENTS = 'sales_agents';\n    var vm = this;\n\n    vm.downloading = false;\n\n    vm.customFields = [\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SALES_AGENTS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SALES_AGENT',\n            api: api.account.users,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n    ];\n\n    vm.columns = [\n      //Wholesale delivery notes cols\n      {\n        name: 'DELIVERY_NOTE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE_STATUS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE_CREATION_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY_NOTE_EXPECTED_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'DELIVERY_NOTE_PREPARATION_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'DELIVERY_NOTE_SHIPPING_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALE_ORDER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALE_ORDER_STATUS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALE_ORDER_CREATION_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALE_ORDER_START_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SALE_ORDER_CANCEL_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SALE_ORDER_EXPECTED_DATE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALES_AGENT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PRICING_TIER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_ITEMS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SUBTOTAL',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DISCOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SUBTOTAL_DISCOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'EARLY_PAYMENT_DISCOUNT',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SUBTOTAL_EARLY_PAYMENT_DISCOUNT',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_EXCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_NAME',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_PERCENTAGE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_AMOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_SURCHARGE_PERCENTAGE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_SURCHARGE_AMOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_INCL_TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PAYMENT_METHOD',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'INVOICE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PAYMENT_STATUS',\n        selected: true,\n        default: true\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    // Functions\n    function download(fileType, dataRange) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var seasons = vm.customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var sales_agents = vm.customFields.find(function (field) {\n        return field.id === ID_SALES_AGENTS;\n      });\n\n      api.reports.wholesaleDeliveryNotesReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          sales_agent_id: sales_agents ? ReportUtils.getSelectedIds(sales_agents) : null\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsWholesaleCustomersController', ReportsWholesaleCustomersController);\n\n  /** @ngInject */\n  function ReportsWholesaleCustomersController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session) {\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.WHOLESALE_TITLE.buttons.WHOLESALE_CUSTOMERS;\n\n    var vm = this;\n\n    vm.columns = [\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FIRST_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'LAST_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'EMAIL',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PHONE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'GENDER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BIRTHDAY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_ADDRESS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BILLING_ADDRESS_1',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_ADDRESS_2',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_ZIP',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_CITY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_STATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_COUNTRY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'GROUPS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_ADDRESS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SHIPPING_ADDRESS_1',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_ADDRESS_2',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_ZIP',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_CITY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_STATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_COUNTRY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'NOTES',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'VAT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'WEBSITE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CURRENCY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TAGS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'IBAN',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SWIFT',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PAYMENT_METHOD',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'EXCLUDE_TAXES',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SURCHARGE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PRICING_TIER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'DISCOUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'EARLY_PAYMENT_DISCOUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SALES_WAREHOUSE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SALES_AGENT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COUNTRY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'B2B_ECOMMERCE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CREATED_AT',\n        selected: false,\n        default: false,\n      }\n\n    ];\n\n    vm.downloading = false;\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dateRange){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n      api.reports.contactsReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString,\n          type:\"wholesale_costumer\"\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportUidStockController', ReportUidStockController);\n\n  /** @ngInject */\n  function ReportUidStockController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.UID_STOCK;\n\n    // Data\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n\n    vm.downloading = false;\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.WAREHOUSE',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField\n      }\n    ];\n\n    vm.columns = [\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SIZE_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'UID',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'AMOUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PURCHASE_ORDER_DELIVERY_RECEIVED_AT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SALE_ORDER_DELIVERY_AUTOCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SALE_ORDER_DELIVERY_SHIPPED_AT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'EXPIRATION_AT',\n        selected: true,\n        default: true,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = true\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var warehouses = customFields.find(function (field) {\n        return field.id == ID_WAREHOUSES;\n      });\n\n      api.reports.uidStockReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          warehouses: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportUIDStockMovementsController', ReportUIDStockMovementsController);\n\n  /** @ngInject */\n  function ReportUIDStockMovementsController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.UID_STOCK_MOVEMENTS;\n\n    // Data\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n\n    vm.downloading = false;\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.WAREHOUSE',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField\n      }\n    ];\n\n    vm.columns = [\n      {\n        name: 'DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TYPE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'REASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NOTES',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'MOVE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'USER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'UID',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COMPOSITION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'FOB_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'FOB_PRICE_CURRENCY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DDP_PRICE',\n        selected: false,\n        default: false,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var warehouses = customFields.find(function (field) {\n        return field.id == ID_WAREHOUSES;\n      });\n\n      api.reports.uidStockMovementsReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          warehouses: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsTransferOrdersController', ReportsTransferOrdersController);\n\n  /** @ngInject */\n  function ReportsTransferOrdersController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.TRANSFER_ORDERS;\n\n    var vm = this;\n    vm.downloading = false;\n\n    vm.columns = [\n      {\n        name: 'TRANSFER_ORDER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'STATUS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FROM',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TO',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COMPOSITION',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CREATION_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'EXPECTED_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PREPARATION_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SHIPPING_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'RECEPTION_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'DDP_PRICE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TRANSFERRED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PREPARED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SHIPPED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'RECEIVED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CREATED_BY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PREPARED_BY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SHIPPED_BY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'RECEIVED_BY',\n        selected: true,\n        default: true,\n      }\n\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dateRange, customFields){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n      api.reports.transferOrdersReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsTicketsController', ReportsTicketsController);\n\n  /** @ngInject */\n  function ReportsTicketsController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                    DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.TICKETS;\n\n    // Data\n    var vm = this;\n    vm.dateRange = {};\n    vm.columns = [\n      {\n        name: 'ORDER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TIME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'OPERATION',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'ORIGINAL_SALE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'ORIGINAL_SALE_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'STORE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'REGISTER',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SUBTOTAL_SHIPPING_METHODS',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_SHIPPING_METHODS',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_DISCOUNTS',\n        selected: false,\n        default: true\n      },\n      {\n        name: 'TOTAL_DISCOUNTS_PRODUCT_VARIANTS',\n        selected: false,\n        default: true\n      },\n      {\n        name: 'SUBTOTAL',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAXES',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_PAYMENTS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_CREDIT_CARD',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_CASH',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL_VOUCHERS',\n        selected: false,\n        default: false\n      },\n\n      {\n        name: 'OTHER_PAYMENT_METHODS',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CREATED_VOUCHERS',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TAGS',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'INVOICE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'NOTES',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER_EMAIL',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER_ADDRESS',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER_ZIP',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER_CITY',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'CUSTOMER_COUNTRY',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SELLER',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'ORIGIN_ID',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: false,\n        default: false\n      }\n    ];\n    vm.downloading = false;\n\n\n    //Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init() {\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that's executed when a barcode has been listened\n     * @param fileType\n     * @param dateRange\n     */\n    function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function(c) {\n        return c.selected;\n      }).map(function(c) {\n        return c.name;\n      }).join(',');\n      api.reports.ticketsReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', { email: Session.user.email }))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportStockReplenishmentController', ReportStockReplenishmentController);\n\n  /** @ngInject */\n  function ReportStockReplenishmentController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.STOCK_REPLENISHMENT;\n\n    // Data\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n\n    // Parent initialization\n    vm.renderableColumns = [];\n    vm.warehousesList = [];\n    vm.pricingTiersById = {};\n    vm.warehouses = [];\n    vm.selectedPricingTier = null;\n\n    vm.warehouseSearch = \"\";\n    vm.downloading = false;\n    vm.submitDisabled = true;\n\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'NAVIGATION.WAREHOUSES',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField\n      },\n    ]\n\n    vm.columns = [\n\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var warehouses = customFields.find(function (field) {\n        return field.id == ID_WAREHOUSES;\n      });\n\n      api.reports.stockReplenishmentReport.get(\n        {\n          dateStart: dataRange.dateStart,\n          dateEnd: dataRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          warehouses: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportStockMovementsController', ReportStockMovementsController);\n\n  /** @ngInject */\n  function ReportStockMovementsController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.STOCK_MOVEMENTS;\n\n    // Data\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n    const ID_REPORT_TYPE = 'report_types';\n\n    vm.downloading = false;\n    vm.customFields = [\n      {\n        id: ID_REPORT_TYPE,\n        type: 'select',\n        title: 'REPORTS.ID_REPORT_TYPE',\n        options: {\n          'REPORTS.STOCK_MOVEMENTS': 'stock_movements',\n          'REPORTS.STOCK_DAILY_SNAPSHOT': 'stock_daily_snapshot'\n        },\n        selectChecked: 'stock_movements'\n      },{\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.WAREHOUSE',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField\n      }\n    ];\n\n    vm.columns = [\n      //StockMovement cols\n      {\n        name: 'DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TYPE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'REASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NOTES',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BEFORE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'MOVE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'AFTER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'USER',\n        selected: true,\n        default: true,\n      },\n\n        //Product cols\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COMPOSITION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER_PRICE_CURRENCY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COST_PRICE',\n        selected: false,\n        default: false,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var warehouses = customFields.find(function (field) {\n        return field.id === ID_WAREHOUSES;\n      });\n\n      var reportType = customFields.find(function (field) {\n        return field.id === ID_REPORT_TYPE;\n      });\n\n      api.reports.stockMovementsReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          columns: columnsString,\n          file_type: fileType,\n          report_type: reportType.selectChecked,\n          warehouses: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsRetailTransactionsController', ReportsRetailTransactionsController);\n\n  /** @ngInject */\n  function ReportsRetailTransactionsController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                     DTColumnBuilder, $compile) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.RETAIL_TRANSACTIONS;\n    $scope.$parent.vm.downloadReport = download;\n    $scope.$parent.vm.filterData = filterData;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n\n    // Data\n    var vm = this;\n    vm.dtInstance = {};\n    vm.dateRange = {};\n\n    vm.dtOptions = {\n      ajax : {\n        dataSrc: \"data\",\n        url: api.urls.reports.retailTransactions,\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.dateStart = vm.dateRange.dateStart ? vm.dateRange.dateStart.getTime() : '';\n          d.dateEnd = vm.dateRange.dateEnd ? vm.dateRange.dateEnd.getTime() : '';\n          d.columns = [d.columns[0]];\n        }\n      },\n      rowId: 'barcode',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [25, 50, 100, 500],\n      pageLength  : 50,\n      scrollX: 'true',\n      //scrollY     : 'auto',\n      scrollCollapse: true,\n      responsive  : false,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('date').withTitle('Date').notSortable(),\n      DTColumnBuilder.newColumn('product_code').withTitle('Code').notSortable(),\n      DTColumnBuilder.newColumn('product_name').withTitle('Name').notSortable(),\n      DTColumnBuilder.newColumn('barcode').withTitle('Barcode').notSortable(),\n      DTColumnBuilder.newColumn('size_name').withTitle('Size').notSortable(),\n      DTColumnBuilder.newColumn('color_code').withTitle('Color Code').notSortable(),\n      DTColumnBuilder.newColumn('color_name').withTitle('Color Name').notSortable(),\n      DTColumnBuilder.newColumn('sold_units').withTitle('Sold Units').notSortable(),\n      DTColumnBuilder.newColumn('warehouse').withTitle('Location').notSortable(),\n      DTColumnBuilder.newColumn('ddp_price').withTitle('DDP price').notSortable(),\n      DTColumnBuilder.newColumn('pricing_tier').withTitle('Pricing Tier').notSortable(),\n      DTColumnBuilder.newColumn('tax_percent_value').withTitle('Total Tax %').notSortable(),\n      DTColumnBuilder.newColumn('price_excl_tax').withTitle('Price Excl. Tax').notSortable(),\n      DTColumnBuilder.newColumn('price_incl_tax').withTitle('Price Incl. Tax').notSortable(),\n      DTColumnBuilder.newColumn('discount').withTitle('Offer % Discount').notSortable(),\n      DTColumnBuilder.newColumn('offer_price_excl_tax').withTitle('Offer Price Excl. Tax').notSortable(),\n      DTColumnBuilder.newColumn('offer_price_incl_tax').withTitle('Offer Price Incl Tax').notSortable(),\n      DTColumnBuilder.newColumn('revenue').withTitle('Revenue').notSortable(),\n      DTColumnBuilder.newColumn('expected_revenue').withTitle('Expected Revenue').notSortable(),\n      DTColumnBuilder.newColumn('season').withTitle('Season').notSortable(),\n      DTColumnBuilder.newColumn('brand').withTitle('Brand').notSortable(),\n      DTColumnBuilder.newColumn('category').withTitle('Category').notSortable(),\n      DTColumnBuilder.newColumn('subcategory').withTitle('Subcategory').notSortable(),\n    ];\n\n    // Methods\n\n    // Functions\n    function download(fileType, callback){\n      var url = api.urls.reports.retailTransactionsReport + '?' + angular.element.param({\n        dateStart: vm.dateRange.dateStart ? vm.dateRange.dateStart.getTime() : '',\n        dateEnd: vm.dateRange.dateEnd ? vm.dateRange.dateEnd.getTime() : '',\n        fileType: fileType\n      });\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n    function initComplete(){\n      vm.dtInstance.DataTable.columns.adjust();\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      return nRow;\n    }\n\n    function filterData(dateRange){\n      vm.dateRange = dateRange;\n      vm.dtInstance.DataTable.draw();\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsSellerTransactionsController', ReportsSellerTransactionsController);\n\n  /** @ngInject */\n  function ReportsSellerTransactionsController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.SELLER_TRANSACTIONS;\n\n\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n    const ID_CATEGORIES = 'categories';\n    const ID_SUBCATEGORIES = 'subcategories';\n    const ID_BRANDS = 'brands';\n    const ID_SEASONS = 'seasons';\n\n    vm.customFields = [\n      {\n            id: ID_WAREHOUSES,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.WAREHOUSE',\n            api: api.inventories.warehouses,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_CATEGORIES,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.CATEGORY',\n            api: api.inventories.categories,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SUBCATEGORIES,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SUBCATEGORY',\n            api: api.inventories.subcategories,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_BRANDS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.BRAND',\n            api: api.inventories.brands,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: false,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n    ];\n\n    vm.columns = [\n      {\n        name: 'NAME',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALES',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PRODUCTS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'REVENUE',\n        selected: true,\n        default: true\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n\n    function download(fileType, dataRange, customFields){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var brands = customFields.find(function (field) {\n        return field.id === ID_BRANDS;\n      });\n\n      var seasons = customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var categories = customFields.find(function (field) {\n        return field.id === ID_CATEGORIES;\n      });\n\n      var subcategories = customFields.find(function (field) {\n        return field.id === ID_SUBCATEGORIES;\n      });\n\n      var warehouses = customFields.find(function (field) {\n        return field.id === ID_WAREHOUSES;\n      });\n\n      api.reports.sellerTransactionsReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString,\n          brand_id: brands ? ReportUtils.getSelectedIds(brands) : null,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          category_id: categories ? ReportUtils.getSelectedIds(categories) : null,\n          subcategory_id: subcategories ? ReportUtils.getSelectedIds(subcategories) : null,\n          warehouse_id: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsRetailTransactionsController', ReportsRetailTransactionsController);\n\n  /** @ngInject */\n  function ReportsRetailTransactionsController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                               DTColumnBuilder, $compile, HTTP_STATUS, ReportUtils) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.RETAIL_TRANSACTIONS;\n\n    // Data\n    var vm = this;\n    vm.dateRange = {};\n    const ID_WAREHOUSES = 'warehouses';\n    const ID_CATEGORIES = 'categories';\n    const ID_SUBCATEGORIES = 'subcategories';\n    const ID_BRANDS = 'brands';\n    const ID_SEASONS = 'seasons';\n    const ID_KPI = 'kpi';\n    const ID_AVAILABLE_STOCK = 'only_available_stock';\n    const ID_ARCHIVED = 'archived';\n    const ID_UIDSTOCKS = 'uidstocks';\n\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.WAREHOUSE',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField,\n      },\n      {\n        id: ID_CATEGORIES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.CATEGORY',\n        api: api.inventories.categories,\n        querySearch: ReportUtils.querySearchCustomField,\n      },\n      {\n        id: ID_SUBCATEGORIES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.SUBCATEGORY',\n        api: api.inventories.subcategories,\n        querySearch: ReportUtils.querySearchCustomField,\n      },\n      {\n        id: ID_BRANDS,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.BRAND',\n        api: api.inventories.brands,\n        querySearch: ReportUtils.querySearchCustomField,\n      },\n      {\n        id: ID_SEASONS,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'REPORTS.SEASON',\n        api: api.inventories.seasons,\n        querySearch: ReportUtils.querySearchCustomField,\n      },\n      {\n        id: ID_UIDSTOCKS,\n        type: 'text',\n        selected: '',\n        title: 'REPORTS.UIDSTOCK',\n      },\n    ];\n\n    vm.columns = [\n      {\n        name: 'IMAGE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'STORE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'REGISTER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PRICING_TIER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORDER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'EXTERNAL_ORDER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CREATED_AT_DATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'TIME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'OPERATION',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGINAL_SALE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGINAL_SALE_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'UID',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: true,\n        default: true,\n      },\n\n      {\n        name: 'UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'UID',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COST_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COST',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PRICE_EXCL_TAX',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PRICE_INCL_TAX',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CURRENT_DISCOUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'DISCOUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FINAL_PRICE_EXCL_TAX',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FINAL_PRICE_INCL_TAX',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ADDITIONAL_DISCOUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TAX',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBTOTAL',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TOTAL',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SELLER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'NOTES',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CUSTOMER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CUSTOMER_PHONE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CUSTOMER_EMAIL',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CUSTOMER_BILLING_ADDRESS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CUSTOMER_SHIPPING_ADDRESS',\n        selected: false,\n        default: false,\n      },\n    ];\n    vm.downloading = false;\n\n\n    //Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init() {\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that's executed when a barcode has been listened\n     * @param fileType\n     * @param dateRange\n     */\n    function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function(c) {\n        return c.selected;\n      }).map(function(c) {\n        return c.name;\n      }).join(',');\n\n      var brands = vm.customFields.find(function (field) {\n        return field.id === ID_BRANDS;\n      });\n\n      var seasons = vm.customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var categories = vm.customFields.find(function (field) {\n        return field.id === ID_CATEGORIES;\n      });\n\n      var subcategories = vm.customFields.find(function (field) {\n        return field.id === ID_SUBCATEGORIES;\n      });\n\n      var warehouses = vm.customFields.find(function (field) {\n        return field.id === ID_WAREHOUSES;\n      });\n\n      var uidstocks = vm.customFields.find(function (field) {\n        return field.id === ID_UIDSTOCKS;\n      });\n\n      api.reports.retailTransactionsReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          brand_ids: brands ? ReportUtils.getSelectedIds(brands) : null,\n          season_ids: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          category_ids: categories ? ReportUtils.getSelectedIds(categories) : null,\n          subcategory_ids: subcategories ? ReportUtils.getSelectedIds(subcategories) : null,\n          warehouse_ids: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n          uidstocks_uids: uidstocks ? ReportUtils.getTextElements(uidstocks) : null,\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', { email: Session.user.email }))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsRetailTaxesController', ReportsRetailTaxesController);\n\n  /** @ngInject */\n  function ReportsRetailTaxesController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                        Utils, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.TAXES;\n\n    // Data\n    var vm = this;\n\n    vm.dateRange = {};\n    vm.columns = [\n        {\n        name : 'MONTH',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'WAREHOUSE',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'TAX',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'PERCENT_VALUE',\n        selected : false,\n        default : false,\n      },\n        {\n        name : 'SURCHARGE',\n        selected : false,\n        default : false,\n      },\n      {\n        name : 'TOTAL',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'NET_TOTAL',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'TAXES',\n        selected : true,\n        default : true\n      }\n    ];\n    vm.downloading=false;\n\n    //Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init(){\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that's executed when a barcode has been listened\n     * @param fileType\n     * @param dateRange\n     */\n    function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function(c){\n        return c.selected;\n      }).map(function(c){\n        return c.name;\n      }).join(',');\n      api.reports.retailTaxesReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsRetailKpisController', ReportsRetailKpisController);\n\n  /** @ngInject */\n  function ReportsRetailKpisController($scope, $filter, BasicRetailKPIsData, WarehousesData, Session) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_KPIS;\n    $scope.$parent.vm.downloadReport = download;\n    $scope.$parent.vm.filterData = filterData;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n\n    // Data\n    var vm = this;\n    vm.warehouses = WarehousesData.results;\n    vm.basicRetailKpisDict = {};\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.cartConfig = {\n      refreshDataOnly: true,\n      deepWatchData: true\n    };\n\n\n    vm.chartOptions = {\n      chart: {\n        type: 'lineChart',\n        color: ['#36C1F1'],\n        height: 40,\n        margin: {\n          top: 0,\n          right: 0,\n          bottom: 0,\n          left: 0\n        },\n        isArea: true,\n        interpolate: 'cardinal',\n        clipEdge: true,\n        duration: 500,\n        showXAxis: false,\n        showYAxis: false,\n        showLegend: false,\n        useInteractiveGuideline: false,\n        x: function (d) {\n          return d.x;\n        },\n        y: function (d) {\n          return d.y;\n        },\n        xAxis: {\n          tickFormat: function (d) {\n            return d;\n          }\n        },\n        interactiveLayer: {\n          tooltip: {\n            gravity: 'n',\n            classes: 'gravity-e'\n          }\n        }\n      }\n    };\n\n    vm.chartOptionsDict = {\n      netSalesActualChart: angular.copy(vm.chartOptions),\n      unitsSoldChart: angular.copy(vm.chartOptions),\n      transactionsChart: angular.copy(vm.chartOptions),\n      returnsChart: angular.copy(vm.chartOptions),\n      unitsReturnedChart: angular.copy(vm.chartOptions),\n      unitsPerTransactionChart: angular.copy(vm.chartOptions),\n      averageUnitRetailChart: angular.copy(vm.chartOptions),\n    };\n\n    vm.chartOptionsAccent = angular.copy(vm.chartOptions);\n    vm.chartOptionsAccent.chart.color = ['#EF5350'];\n\n    // yDomains is the yAxis min and max values\n    vm.yDomains = {\n      netSalesActualChart: [0, 0],\n      unitsSoldChart: [0, 0],\n      transactionsChart: [0, 0],\n      returnsChart: [0, 0],\n      unitsReturnedChart: [0, 0],\n      unitsPerTransactionChart: [0, 0],\n      averageUnitRetailChart: [0, 0]\n    }\n\n    // Methods\n    vm.sortByHeader = sortByHeader;\n\n    // Functions\n    init();\n\n    function init() {\n      BasicRetailKPIsData.results.forEach(function (basicRetailKpi) {\n        if (!vm.basicRetailKpisDict[basicRetailKpi.object_id]) {\n          vm.basicRetailKpisDict[basicRetailKpi.object_id] = {\n            rawData: [],\n            netSalesActualChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES'),\n              values: []\n            }],\n            unitsSoldChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD'),\n              values: []\n            }],\n            transactionsChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.TRANSACTIONS'),\n              values: []\n            }],\n            returnsChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.RETURNS'),\n              values: []\n            }],\n            unitsReturnedChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL'),\n              values: []\n            }],\n            unitsPerTransactionChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION'),\n              values: []\n            }],\n            averageUnitRetailChart: [{\n              key: $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL'),\n              values: []\n            }]\n          };\n        }\n        vm.basicRetailKpisDict[basicRetailKpi.object_id].rawData.push(basicRetailKpi);\n      });\n\n\n      $filter('translate')('BASIC_RETAIL_KPI.GROSS_SALES');\n      $filter('translate')('BASIC_RETAIL_KPI.UNITS_SOLD');\n      $filter('translate')('BASIC_RETAIL_KPI.TRANSACTIONS');\n      $filter('translate')('BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION');\n      $filter('translate')('BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL');\n      $filter('translate')('BASIC_RETAIL_KPI.RETURNS');\n      $filter('translate')('BASIC_RETAIL_KPI.UNITS_RETURNED');\n\n      for (var object_id in vm.basicRetailKpisDict) {\n        // Net Sales Actual\n        vm.basicRetailKpisDict[object_id].netSalesActualChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.netSalesActualChart[0] = Math.min(vm.yDomains.netSalesActualChart[0], basicRetailKPI.net_sales_actual);\n          vm.yDomains.netSalesActualChart[1] = Math.max(vm.yDomains.netSalesActualChart[1], basicRetailKPI.net_sales_actual);\n          return {\n            'y': basicRetailKPI.net_sales_actual,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].netSalesActualChart[0].values = vm.basicRetailKpisDict[object_id].netSalesActualChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n        // Units Sold\n        vm.basicRetailKpisDict[object_id].unitsSoldChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.unitsSoldChart[0] = Math.min(vm.yDomains.unitsSoldChart[0], basicRetailKPI.units_sold);\n          vm.yDomains.unitsSoldChart[1] = Math.max(vm.yDomains.unitsSoldChart[1], basicRetailKPI.units_sold);\n          return {\n            'y': basicRetailKPI.units_sold,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].unitsSoldChart[0].values = vm.basicRetailKpisDict[object_id].unitsSoldChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n        // Transactions\n        vm.basicRetailKpisDict[object_id].transactionsChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.transactionsChart[0] = Math.min(vm.yDomains.transactionsChart[0], basicRetailKPI.transactions);\n          vm.yDomains.transactionsChart[1] = Math.max(vm.yDomains.transactionsChart[1], basicRetailKPI.transactions);\n          return {\n            'y': basicRetailKPI.transactions,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].transactionsChart[0].values = vm.basicRetailKpisDict[object_id].transactionsChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n        // Returns\n        vm.basicRetailKpisDict[object_id].returnsChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.returnsChart[0] = Math.min(vm.yDomains.returnsChart[0], basicRetailKPI.returns);\n          vm.yDomains.returnsChart[1] = Math.max(vm.yDomains.returnsChart[1], basicRetailKPI.returns);\n          return {\n            'y': basicRetailKPI.returns,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].returnsChart[0].values = vm.basicRetailKpisDict[object_id].returnsChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n        // Units returned\n        vm.basicRetailKpisDict[object_id].unitsReturnedChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.unitsReturnedChart[0] = Math.min(vm.yDomains.unitsReturnedChart[0], basicRetailKPI.units_returned);\n          vm.yDomains.unitsReturnedChart[1] = Math.max(vm.yDomains.unitsReturnedChart[1], basicRetailKPI.units_returned);\n          return {\n            'y': basicRetailKPI.units_returned,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].unitsReturnedChart[0].values = vm.basicRetailKpisDict[object_id].unitsReturnedChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n        // Units per transaction\n        vm.basicRetailKpisDict[object_id].unitsPerTransactionChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.unitsPerTransactionChart[0] = Math.min(vm.yDomains.unitsPerTransactionChart[0], basicRetailKPI.units_per_transaction);\n          vm.yDomains.unitsPerTransactionChart[1] = Math.max(vm.yDomains.unitsPerTransactionChart[1], basicRetailKPI.units_per_transaction);\n          return {\n            'y': basicRetailKPI.units_per_transaction,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].unitsPerTransactionChart[0].values = vm.basicRetailKpisDict[object_id].unitsPerTransactionChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n        // Average unit retail\n        vm.basicRetailKpisDict[object_id].averageUnitRetailChart[0].values = vm.basicRetailKpisDict[object_id].rawData.map(function (basicRetailKPI) {\n          vm.yDomains.averageUnitRetailChart[0] = Math.min(vm.yDomains.averageUnitRetailChart[0], basicRetailKPI.average_unit_retail);\n          vm.yDomains.averageUnitRetailChart[1] = Math.max(vm.yDomains.averageUnitRetailChart[1], basicRetailKPI.average_unit_retail);\n          return {\n            'y': basicRetailKPI.average_unit_retail,\n            'date': basicRetailKPI.date\n          };\n        });\n\n        vm.basicRetailKpisDict[object_id].averageUnitRetailChart[0].values = vm.basicRetailKpisDict[object_id].averageUnitRetailChart[0].values\n          .sort(function (a, b) {\n            return a - b;\n          }).map(function (point, index) {\n            point.x = index;\n            return point;\n          });\n\n      }\n\n      // Sort warehouse by last day net sale actual\n      sortByHeader('netSalesActualChart');\n\n      // Set up yDomains\n      vm.chartOptionsDict.netSalesActualChart.chart.yDomain = vm.yDomains.netSalesActualChart;\n      vm.chartOptionsDict.unitsSoldChart.chart.yDomain = vm.yDomains.unitsSoldChart;\n      vm.chartOptionsDict.transactionsChart.chart.yDomain = vm.yDomains.transactionsChart;\n      vm.chartOptionsDict.returnsChart.chart.yDomain = vm.yDomains.returnsChart;\n      vm.chartOptionsDict.unitsReturnedChart.chart.yDomain = vm.yDomains.unitsReturnedChart;\n      vm.chartOptionsDict.unitsPerTransactionChart.chart.yDomain = vm.yDomains.unitsPerTransactionChart;\n      vm.chartOptionsDict.averageUnitRetailChart.chart.yDomain = vm.yDomains.averageUnitRetailChart;\n      vm.chartOptionsDict.returnsChart.chart.color = ['#EF5350'];\n      vm.chartOptionsDict.unitsReturnedChart.chart.color = ['#EF5350'];\n    }\n\n    function download(fileType, callback) {\n\n    }\n\n    function filterData(dateRange) {\n      vm.dateRange = dateRange;\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function sortByHeader(attribute) {\n      if(vm.warehouses){\n        vm.warehouses = vm.warehouses.sort(function (a, b) {\n          if(vm.basicRetailKpisDict[a.id] && vm.basicRetailKpisDict[b.id]){\n            return vm.basicRetailKpisDict[b.id][attribute][0].values[6].y - vm.basicRetailKpisDict[a.id][attribute][0].values[6].y\n          }\n          return 0;\n        });\n      }\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsRetailCustomersController', ReportsRetailCustomersController);\n\n  /** @ngInject */\n  function ReportsRetailCustomersController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.RETAIL_CUSTOMERS;\n\n    var vm = this;\n    vm.downloading = false;\n\n    vm.columns = [\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FIRST_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'LAST_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'EMAIL',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PHONE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'MOBILE_PHONE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'GENDER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BIRTHDAY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_ADDRESS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SHIPPING_ADDRESS_1',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_ADDRESS_2',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_ZIP',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_CITY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_STATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SHIPPING_COUNTRY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_ADDRESS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BILLING_ADDRESS_1',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_ADDRESS_2',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_ZIP',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_CITY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_STATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'BILLING_COUNTRY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'GROUPS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'NOTES',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'TAGS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'LAST_VISIT',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'TICKETS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'REVENUE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'ITEMS_AVERAGE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'REVENUE_AVERAGE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CURRENT_ACCUMULATED_BALANCE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'TOTAL_ACCUMULATED_BALANCE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'USED_ACCUMULATED_BALANCE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'LOYALTY_START_DATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CREATED_AT',\n        selected: false,\n        default: false,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dateRange){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      api.reports.contactsReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString,\n          type:'retail_costumer'\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsRegisterClosuresController', ReportsRegisterClosuresController);\n\n  /** @ngInject */\n  function ReportsRegisterClosuresController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                             DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.REGISTER_CLOSURES;\n\n    // Data\n    var vm = this;\n    vm.dateRange = {};\n    vm.columns = [\n        {\n        name : 'OPENED_AT',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'CLOSED_AT',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'REGISTER',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'WAREHOUSE',\n        selected : true,\n        default : true,\n      },\n      {\n        name : 'TOTAL',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'USED_VOUCHERS',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'GENERATED_VOUCHERS',\n        selected : true,\n        default : true\n      },\n        {\n        name : 'PAYMENT_METHODS',\n        selected : true,\n        default : true\n      },\n      {\n        name : 'OPENING_CASH_MOVEMENT',\n        selected : true,\n        default : true\n      },\n      {\n        name : 'CLOSURE_CASH_MOVEMENT',\n        selected : true,\n        default : true\n      },\n      {\n        name : 'INPUT_CASH_MOVEMENTS',\n        selected : true,\n        default : true\n      },\n      {\n        name : 'OUTPUT_CASH_MOVEMENTS',\n        selected : true,\n        default : true\n      }\n    ];\n    vm.downloading=false;\n\n    // Methods\n    vm.download = download;\n\n    // Initialize\n    init();\n\n    function init() {\n\n      // Force the current month by default\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that's executed when a barcode has been listened\n     * @param fileType\n     * @param dateRange\n     */\n    function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function(c){\n        return c.selected;\n      }).map(function(c){\n        return c.name;\n      }).join(',');\n      api.reports.registerClosuresReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsPurchaseOrdersController', ReportsPurchaseOrdersController);\n\n  /** @ngInject */\n  function ReportsPurchaseOrdersController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.PURCHASE_ORDERS;\n\n    var vm = this;\n    vm.downloading = false;\n\n    vm.columns = [\n      {\n        name: 'PURCHASE_ORDER',\n        selected: true,\n        default: true,\n      },\n      {\n        name : 'PROVIDER',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'RELATED_INVOICE',\n        selected : true,\n        default :true\n      },\n      {\n        name : 'RELATED_PURCHASES',\n        selected : true,\n        default :true\n      },\n      {\n        name: 'WAREHOUSE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'STATUS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CREATION_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'START_DATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'CANCEL_DATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'EXPECTED_DATE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name : 'COLLECTION',\n        selected : true,\n        default :true\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COMPOSITION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PURCHASED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'RECEIVED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TAX',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PROVIDER_PRICE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TOTAL_PROVIDER_PRICE',\n        selected: true,\n        default: true,\n      }\n\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dateRange, customFields){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      api.reports.purchaseOrdersReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportProductStatusController', ReportProductStatusController);\n\n  /** @ngInject */\n  function ReportProductStatusController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.PRODUCTS_STATUS;\n\n    // Data\n    var vm = this;\n    const ID_BREAK_DOWN_BY_COLOR = 'breakDownByColor';\n    const ID_BREAK_DOWN_BY_SIZES = 'breakDownBySizes';\n    const ID_WAREHOUSES = 'warehouses';\n\n    // Parent initialization\n    vm.renderableColumns = [];\n    vm.warehousesList = [];\n    vm.pricingTiersById = {};\n    vm.warehouses = [];\n    vm.selectedPricingTier = null;\n\n    vm.warehouseSearch = \"\";\n    vm.downloading = false;\n    vm.breakdownBySizes = false;\n    vm.breakdownByColors = false;\n    vm.submitDisabled = true;\n\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: true,\n        selected: [],\n        title: 'NAVIGATION.WAREHOUSES',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n        id: ID_BREAK_DOWN_BY_COLOR,\n        type: 'checkbox',\n        value: 'REPORTS.BREAK_DOWN_BY_COLOR',\n      },\n      {\n        id: ID_BREAK_DOWN_BY_SIZES,\n        type: 'checkbox',\n        value: 'REPORTS.BREAK_DOWN_BY_SIZES',\n      }\n    ]\n\n    vm.columns = [\n      {\n        name: 'START_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'END_DATE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PROVIDER',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COST',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'RETAIL_PRICE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'PURCHASED_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SOLD_UNITS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'TOTAL_RETAIL',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'STOCK',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FIRST_PURCHASE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'LAST_PURCHASE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'FIRST_SELL',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'LAST_SELL',\n        selected: true,\n        default: true,\n      },\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields) {\n      vm.downloading = true;\n\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var warehouses = customFields.find(function (field) {\n        return field.id == ID_WAREHOUSES;\n      });\n\n      var breakDownByColor = customFields.some(function (field) {\n        return field.id == ID_BREAK_DOWN_BY_COLOR;\n      });\n\n      var breakDownBySize = customFields.some(function (field) {\n        return field.id == ID_BREAK_DOWN_BY_SIZES;\n      });\n\n      api.reports.productStatusReport.get(\n        {\n          dateStart: dataRange.dateStart,\n          dateEnd: dataRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType,\n          warehouses: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n          breakDownByColor: breakDownByColor,\n          breakDownBySize: breakDownBySize,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsPreOrdersController', ReportsPreOrdersController);\n\n  /** @ngInject */\n  function ReportsPreOrdersController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                     DTColumnBuilder, $compile) {\n\n    // Data\n    var vm = this;\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.PRE_ORDERS;\n    $scope.$parent.vm.downloadReport = download;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n\n    // Methods\n\n    // Functions\n    function download(fileType, callback){\n      var url = api.urls.reports.styleOrdersReport;\n      Session.setTokenCookie();\n      window.open(url);\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsPaymentsController', ReportsPaymentsController);\n\n  /** @ngInject */\n  function ReportsPaymentsController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.PAYMENTS;\n\n    var vm = this;\n    vm.downloading = false;\n\n    vm.columns = [\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COUNT',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUM',\n        selected: true,\n        default: true,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dateRange, customFields){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      api.reports.paymentsReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsInvoicesController', ReportsInvoicesController);\n\n  /** @ngInject */\n  function ReportsInvoicesController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.INVOICES;\n\n    var vm = this;\n    vm.downloading = false;\n    const ID_TYPE = 'type';\n\n    vm.customFields = [\n      {\n        id: ID_TYPE,\n        type: 'select',\n        options: {\n          'REPORTS.INVOICE_HEADERS': 'headers',\n          'REPORTS.INVOICE_LINES': 'lines',\n        },\n        selectChecked: 'headers'\n      }\n\n    ];\n\n    vm.columns = [\n      {\n        name: 'ORDER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'DELIVERY',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SERIAL_NUMBER_TYPE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'INVOICE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'BILLING_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'BILLING_CITY',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'EXPIRATION_DATE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CONCEPT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_ID',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'ZIP_CODE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'COUNTRY',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CUSTOMER_CODE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CUSTOMER',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CUSTOMER_FIRST_NAME',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'CUSTOMER_LAST_NAME',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SALES_AGENT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SUBTOTAL',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SUBTOTAL_DISCOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_PERCENTAGE',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TAX_AMOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'SURCHARGE_PERCENTAGE',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'SURCHARGE_AMOUNT',\n        selected: false,\n        default: false\n      },\n      {\n        name: 'TOTAL',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'PAYMENT_STATUS',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_PAID_AMOUNT',\n        selected: true,\n        default: true\n      },\n      {\n        name: 'TOTAL_PENDING_AMOUNT',\n        selected: true,\n        default: true\n      },\n    ];\n\n    // Methods\n    vm.download = download;\n\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dateRange, customFields) {\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function(c) {\n        return c.selected;\n      }).map(function(c) {\n        return c.name;\n      }).join(',');\n\n      var Including = customFields.find(function (field) {\n        return field.id === ID_TYPE;\n      });\n\n      var type = 'headers';\n      if(Including.selectChecked === 'lines'){\n        type = 'lines';\n      }\n\n      api.reports.invoicesReport.get(\n        {\n          date_start: dateRange.dateStart,\n          date_end: dateRange.dateEnd,\n          fileType: fileType,\n          type: type,\n          columns: columnsString\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', { email: Session.user.email }))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsInventoryController', ReportsInventoryController);\n\n  /** @ngInject */\n  function ReportsInventoryController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.INVENTORY;\n\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n    const ID_CATEGORIES = 'categories';\n    const ID_SUBCATEGORIES = 'subcategories';\n    const ID_BRANDS = 'brands';\n    const ID_SEASONS = 'seasons';\n    const ID_COLLECTIONS = 'collections';\n    const ID_KPI = 'kpi';\n    const ID_AVAILABLE_STOCK = 'only_available_stock';\n    const ID_ARCHIVED = 'archived';\n\n\n    vm.customFields = [\n      {\n            id: ID_WAREHOUSES,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.WAREHOUSE',\n            api: api.inventories.warehouses,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_CATEGORIES,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.CATEGORY',\n            api: api.inventories.categories,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SUBCATEGORIES,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.SUBCATEGORY',\n            api: api.inventories.subcategories,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_BRANDS,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.BRAND',\n            api: api.inventories.brands,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_COLLECTIONS,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.COLLECTION',\n            api: api.manufactures.collections,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n       {\n            id: ID_AVAILABLE_STOCK,\n            type: 'checkbox',\n            value: 'REPORTS.ONLY_INCLUDE_AVAILABLE_STOCK',\n      },\n      {\n            id: ID_KPI,\n            type: 'checkbox',\n            value: 'REPORTS.INCLUDE_VARIANTS_KPIS',\n      },\n      {\n            id: ID_ARCHIVED,\n            type: 'select',\n            options: {'REPORTS.ALL_PRODUCTS':'1',\n                      'REPORTS.ONLY_INCLUDE_ARCHIVED':'2',\n                      'REPORTS.ONLY_INCLUDE_NOT_ARCHIVED':'3'},\n        selectChecked: '3'\n      }\n\n    ];\n\n    vm.columns = [\n      {\n        name: 'IMAGE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'ID',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SKU',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BARCODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE_CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SIZE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLOR_NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE_CAT_VARIANTS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COMPOSITION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLLECTIONS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'WEB_CATEGORY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'TAGS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DESCRIPTION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DESCRIPTION_LONG',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'IMAGES',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'FOB_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'FOB_PRICE_CURRENCY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'INITIAL_DDP_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DDP_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PRICING_TIERS',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'WAREHOUSES',\n        selected: true,\n        default: true,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var brands = customFields.find(function (field) {\n        return field.id === ID_BRANDS;\n      });\n\n      var seasons = customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var categories = customFields.find(function (field) {\n        return field.id === ID_CATEGORIES;\n      });\n\n      var subcategories = customFields.find(function (field) {\n        return field.id === ID_SUBCATEGORIES;\n      });\n\n      var warehouses = customFields.find(function (field) {\n        return field.id === ID_WAREHOUSES;\n      });\n\n      var collections = customFields.find(function (field) {\n        return field.id === ID_COLLECTIONS;\n      });\n\n      var only_available_stock = customFields.find(function (field) {\n        return field.id === ID_AVAILABLE_STOCK;\n      });\n      var includeKpis = customFields.find(function (field) {\n        return field.id === ID_KPI;\n      });\n      var Including = customFields.find(function (field) {\n        return field.id === ID_ARCHIVED;\n      });\n      var archived;\n      var not_archived;\n      if(Including.selectChecked=='1'){\n        archived = true;\n        not_archived = true;\n      }else if(Including.selectChecked=='2'){\n        archived = true;\n      }else if(Including.selectChecked=='3'){\n        not_archived = true;\n      }else{\n        archived = false;\n        not_archived = false;\n      }\n\n      api.reports.inventoryReport.get(\n        {\n          date_start: dataRange.dateStart,\n          date_end: dataRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString,\n          brand_id: brands ? ReportUtils.getSelectedIds(brands) : null,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          category_id: categories ? ReportUtils.getSelectedIds(categories) : null,\n          subcategory_id: subcategories ? ReportUtils.getSelectedIds(subcategories) : null,\n          warehouse_id: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n          collection_id: collections ? ReportUtils.getSelectedIds(collections) : null,\n          include_kpis: includeKpis ? includeKpis.checked : null,\n          only_available_stock: only_available_stock ? only_available_stock.checked : null,\n          archived: archived ? archived : null,\n          not_archived: not_archived ? not_archived : null\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsDailyBillingsController', ReportsDailyBillingsController);\n\n  /** @ngInject */\n  function ReportsDailyBillingsController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                        Utils, DTColumnBuilder, $compile, HTTP_STATUS) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.DAILY_BILLINGS;\n\n    // Data\n    var vm = this;\n    vm.dateRange = {};\n    vm.columns = [\n        {\n        name : 'DATE',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'WAREHOUSE',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'WAREHOUSE_CITY',\n        selected : false,\n        default : false,\n      },\n        {\n        name : 'WAREHOUSE_ADRESS',\n        selected : false,\n        default : false,\n      },\n        {\n        name : 'WAREHOUSE_ZIP',\n        selected : false,\n        default : false,\n      },\n        {\n        name : 'SUBTOTAL',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'TOTAL_TAX',\n        selected : true,\n        default : true,\n      },\n        {\n        name : 'TOTAL',\n        selected : true,\n        default : true\n      }\n    ];\n    vm.downloading=false;\n\n    //Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init(){\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n    }\n\n    // Functions\n    /**\n     * Function that's executed when a barcode has been listened\n     * @param fileType\n     * @param dateRange\n     */\n    function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = trueq\n      var columnsString = vm.columns.filter(function(c){\n        return c.selected;\n      }).map(function(c){\n        return c.name;\n      }).join(',');\n      api.reports.dailyBillingsReport.get(\n        {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsCatalogController', ReportsCatalogController);\n\n  /** @ngInject */\n  function ReportsCatalogController($scope, $document, $mdDialog, $mdToast, $filter, api, HTTP_STATUS, Session, ReportUtils) {\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.INVENTORY_TITLE.buttons.CATALOG;\n\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n    const ID_CATEGORIES = 'categories';\n    const ID_SUBCATEGORIES = 'subcategories';\n    const ID_BRANDS = 'brands';\n    const ID_SEASONS = 'seasons';\n    const ID_COLLECTIONS = 'collections';\n    const ID_KPI = 'kpi';\n    const ID_AVAILABLE_STOCK = 'only_available_stock';\n    const ID_ARCHIVED = 'archived';\n\n\n    vm.customFields = [\n      {\n            id: ID_WAREHOUSES,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.WAREHOUSE',\n            api: api.inventories.warehouses,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_CATEGORIES,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.CATEGORY',\n            api: api.inventories.categories,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SUBCATEGORIES,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.SUBCATEGORY',\n            api: api.inventories.subcategories,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_BRANDS,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.BRAND',\n            api: api.inventories.brands,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_SEASONS,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.SEASON',\n            api: api.inventories.seasons,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n            id: ID_COLLECTIONS,\n            type: 'autocomplete',\n            multiple: true,\n            selected: [],\n            title: 'REPORTS.COLLECTION',\n            api: api.manufactures.collections,\n            querySearch: ReportUtils.querySearchCustomField\n      },\n       {\n            id: ID_AVAILABLE_STOCK,\n            type: 'checkbox',\n            value: 'REPORTS.ONLY_INCLUDE_AVAILABLE_STOCK',\n      },\n      {\n            id: ID_ARCHIVED,\n            type: 'select',\n            options: {'REPORTS.ALL_PRODUCTS':'1',\n                      'REPORTS.ONLY_INCLUDE_ARCHIVED':'2',\n                      'REPORTS.ONLY_INCLUDE_NOT_ARCHIVED':'3'},\n        selectChecked: '3'\n      }\n\n    ];\n\n    vm.columns = [\n      {\n        name: 'IMAGE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'ID',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CODE',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'ORIGIN_CODE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'NAME',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SIZE_CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COLOR_CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SEASON',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'BRAND',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'CATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'SUBCATEGORY',\n        selected: true,\n        default: true,\n      },\n      {\n        name: 'COMPOSITION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'COLLECTIONS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'WEB_CATEGORY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'TAGS',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PROVIDER',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DESCRIPTION',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DESCRIPTION_LONG',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'IMAGES',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'FOB_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'FOB_PRICE_CURRENCY',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'INITIAL_DDP_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'DDP_PRICE',\n        selected: false,\n        default: false,\n      },\n      {\n        name: 'PRICING_TIERS',\n        selected: true,\n        default: true,\n      }\n    ];\n\n    // Methods\n    vm.download = download;\n    initialize();\n\n    function initialize() {\n    }\n\n    function download(fileType, dataRange, customFields){\n      vm.downloading = true;\n\n      var columnsString = vm.columns.filter(function (c) {\n        return c.selected;\n      }).map(function (c) {\n        return c.name;\n      }).join(',');\n\n      var brands = customFields.find(function (field) {\n        return field.id === ID_BRANDS;\n      });\n\n      var seasons = customFields.find(function (field) {\n        return field.id === ID_SEASONS;\n      });\n\n      var categories = customFields.find(function (field) {\n        return field.id === ID_CATEGORIES;\n      });\n\n      var subcategories = customFields.find(function (field) {\n        return field.id === ID_SUBCATEGORIES;\n      });\n\n      var warehouses = customFields.find(function (field) {\n        return field.id === ID_WAREHOUSES;\n      });\n\n      var collections = customFields.find(function (field) {\n        return field.id === ID_COLLECTIONS;\n      });\n\n      var only_available_stock = customFields.find(function (field) {\n        return field.id === ID_AVAILABLE_STOCK;\n      });\n      var includeKpis = customFields.find(function (field) {\n        return field.id === ID_KPI;\n      });\n      var Including = customFields.find(function (field) {\n        return field.id === ID_ARCHIVED;\n      });\n      var archived;\n      var not_archived;\n      if(Including.selectChecked=='1'){\n        archived = true;\n        not_archived = true;\n      }else if(Including.selectChecked=='2'){\n        archived = true;\n      }else if(Including.selectChecked=='3'){\n        not_archived = true;\n      }else{\n        archived = false;\n        not_archived = false;\n      }\n\n      api.reports.catalogReport.get(\n        {\n          //date_start: dataRange.dateStart,\n          //date_end: dataRange.dateEnd,\n          fileType: fileType,\n          columns: columnsString,\n          brand_id: brands ? ReportUtils.getSelectedIds(brands) : null,\n          season_id: seasons ? ReportUtils.getSelectedIds(seasons) : null,\n          category_id: categories ? ReportUtils.getSelectedIds(categories) : null,\n          subcategory_id: subcategories ? ReportUtils.getSelectedIds(subcategories) : null,\n          warehouse_id: warehouses ? ReportUtils.getSelectedIds(warehouses) : null,\n          collection_id: collections ? ReportUtils.getSelectedIds(collections) : null,\n          include_kpis: includeKpis ? includeKpis.checked : null,\n          only_available_stock: only_available_stock ? only_available_stock.checked : null,\n          archived: archived ? archived : null,\n          not_archived: not_archived ? not_archived : null\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ReportsCashMovementController', ReportsCashMovementController);\n\n  /** @ngInject */\n  function ReportsCashMovementController($scope, $mdToast, $mdDialog, $http, $filter, $document, $translate, api, Session,\n                                           Utils, DTColumnBuilder, $compile, HTTP_STATUS, ReportUtils, CASH_MOVEMENT_TYPES) {\n\n    // Parent initialization\n    $scope.$parent.vm.currentOption = $scope.$parent.vm.reportTypes.RETAIL_TITLE.buttons.CASH_MOVEMENT;\n    $scope.$parent.vm.downloadReport = null;\n    $scope.$parent.vm.filterData = null;\n    $scope.$parent.vm.checkboxValue = null;\n    $scope.$parent.vm.checkboxName = null;\n\n\n    // Data\n    var vm = this;\n    const ID_WAREHOUSES = 'warehouses';\n    const ID_MOVEMENT_TYPE = 'movement_type';\n\n    vm.customFields = [\n      {\n        id: ID_WAREHOUSES,\n        type: 'autocomplete',\n        multiple: false,\n        selected: [],\n        title: 'REPORTS.WAREHOUSE',\n        api: api.inventories.warehouses,\n        querySearch: ReportUtils.querySearchCustomField\n      },\n      {\n        id: ID_MOVEMENT_TYPE,\n        type: 'select',\n        options: {\n          'REPORTS.ALL_MOVEMENTS': null,\n          'REPORTS.ONLY_INPUT_MOVEMENTS': CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_INPUT,\n          'REPORTS.ONLY_OUTPUT_MOVEMENTS': CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_OUTPUT\n        },\n        selectChecked: null\n      },\n    ];\n\n    vm.dateRange = {};\n\n    vm.columns = [\n      {\n        name: 'WAREHOUSE',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'CASH_REGISTER',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'OPENING_ACTIVITY_DATE',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'CLOSING_ACTIVITY_DATE',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'MOVEMENT_TYPE',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'QUANTITY',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'NOTES',\n        selected:true,\n        default:true,\n      },\n      {\n        name: 'DATE_HOUR_MOVEMENT',\n        selected:true,\n        default:true,\n      }\n    ];\n\n    vm.downloading=false;\n\n    //Methods\n    vm.download = download;\n\n    // Init\n    init();\n\n    function init(){\n      var date = new Date(), y = date.getFullYear(), m = date.getMonth();\n      vm.dateRange.dateStart = new Date(date.getFullYear(), date.getMonth(), 1);\n      vm.dateRange.dateEnd = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n      $scope.$parent.vm.dateRange = angular.copy(vm.dateRange);\n      $scope.$parent.vm.warehouses = angular.copy(vm.customFields[0]);\n      $scope.$parent.vm.movementType = angular.copy(vm.customFields[1]);\n    }\n\n    // Functions\n    /**\n     * Function that's executed when a barcode has been listened\n     * @param fileType\n     * @param dateRange\n     */\n     function download(fileType, dateRange) {\n      vm.downloading = true;\n      // S'ha de transformar columns en un array amb nomes el nom de les columnes que tinguin selected = true\n      var columnsString = vm.columns.filter(function(c){\n        return c.selected;\n      }).map(function(c){\n        return c.name;\n      }).join(',');\n\n      var request =    {\n          dateStart: dateRange.dateStart,\n          dateEnd: dateRange.dateEnd,\n          columns: columnsString,\n          fileType: fileType\n        };\n      if(vm.customFields[0].selectedItem){\n        request.warehouses = vm.customFields[0].selectedItem.id;\n      }\n      if(vm.customFields[1].selectChecked !== null){\n        request.movementType = vm.customFields[1].selectChecked;\n      }\n\n      api.reports.cashMovementReport.get(\n        request,\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.downloading = false;\n        });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsInventoryOverviewController', AnalyticsInventoryOverviewController);\n\n  /** @ngInject */\n  function AnalyticsInventoryOverviewController($scope, $filter, $document, $state, $interval, $mdSidenav, $timeout, $window, $q, api, Session, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentNavItem = 'stocks';\n\n    var vm = this;\n    vm.days = [];\n    vm.warehouses = [];\n    vm.warehouseById = {};\n    vm.selectedWarehouses = [];\n    vm.selectedSeasons = [];\n    vm.selectedBrands = [];\n    vm.selectedCategories = [];\n    vm.selectedSubcategories = [];\n    vm.selectedProviders = [];\n    vm.aggregatedStockByWarehouseArray = [];\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.dateRange = {\n      dateStart: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000),\n      dateEnd: new Date()\n    };\n    vm.COLORS = ['#4A5ff0', '#8852a0', '#00bb80', '#e66000', '#F1AF2F', '#E91E63', '#F44336', '#00BCD4'];\n    vm.DISCONTIUED_STOCK_CHART_COLORS = ['#4a5ff0', '#3cf0b1', '#F1AF2F', '#F44336'];\n    vm.AVAILABLE_STOCK_CHART_COLORS = ['#4a5ff0', '#F1AF2F']; //['#808FF5', '#FFD54F']\n    vm.aggregatedStock = {\n      available_on_hand: {\n        positive: 0,\n        positive_with_cost: 0,\n        positive_cost: parseFloat(0),\n        negative: 0,\n        negative_with_cost: 0,\n        negative_cost: parseFloat(0)\n      },\n      in_transit_on_transfer: {\n        stock: 0,\n        stock_with_cost: 0,\n        stock_cost: 0.0\n      },\n      in_transit_on_purchase: {\n        stock: 0,\n        stock_with_cost: 0,\n        stock_cost: 0.0\n      },\n      allocated_on_retail: {\n        stock: 0,\n        stock_with_cost: 0,\n        stock_cost: 0.0\n      },\n      allocated_on_wholesale: {\n        stock: 0,\n        stock_with_cost: 0,\n        stock_cost: 0.0\n      }\n    };\n    vm.aggregatedStockByWarehouseId = {};\n    vm.availableOnHandOnInactiveProducts = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n    vm.availableOnHandOnDiscontinuedProducts = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n    vm.availableOnHandOnActiveProducts = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n    vm.availableOnHandOnActivePermanentProducts = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n    vm.availableOnHandOnActiveSeasonalProducts = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n    vm.availableOnHandOnInactiveNotDiscontinuedNotNoosProducts = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n    vm.availableOnHandRemaining = {\n      positive: 0,\n      positive_with_cost: 0,\n      positive_cost: 0.0\n    };\n\n    vm.activeProducts = 0;\n    vm.activePermanentProducts = 0;\n    vm.activeSeasonalProducts = 0;\n\n    vm.activeProductsWithAvailableOnHand = 0;\n    vm.activePermanentProductsWithAvailableOnHand = 0;\n    vm.activeSeasonalProductsWithAvailableOnHand = 0;\n\n    vm.retrievingAggregates = false;\n\n    // Methods\n    vm.reloadStockKpisChart = reloadStockKpisChart;\n    vm.reloadAggregates = reloadAggregates;\n    vm.reloadAggregatesFilters = reloadAggregatesFilters;\n    vm.selectedWarehousesFunction = selectedWarehousesFunction;\n    vm.getUsedVolumePercentage = getUsedVolumePercentage;\n\n    // Initialization\n    initialize();\n\n    function initialize() {\n      vm.dateRangeWatcher = $scope.$watch('vm.dateRange', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n            reloadStockKpisChart();\n        }\n      }, true);\n\n      api.inventories.warehouses.list(\n        {}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.warehouses = results.results;\n            vm.warehouses.forEach(function(warehouse){\n              vm.warehouseById[warehouse.id] = warehouse;\n            })\n          }\n        }\n      );\n\n      api.inventories.seasons.list(\n        {}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.seasons = results.results;\n          }\n        }\n      );\n\n      api.inventories.brands.list(\n        {}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.brands = results.results;\n          }\n        }\n      );\n\n      api.inventories.categories.list(\n        {}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.categories = results.results;\n          }\n        }\n      );\n\n      api.inventories.subcategories.list(\n        {}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.subcategories = results.results;\n          }\n        }\n      );\n\n      api.inventories.contacts.list(\n        {'type': 6}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.providers = results.results;\n          }\n        }\n      );\n\n      $(document).ready(function() {\n        reloadAggregates();\n        initializeStockKpisChart();\n        initializeStockQuantityByProductStatusChart();\n        initializeStockCostByProductStatusChart();\n        initializeAvailableStockOnPermanentProductsChart();\n        initializeAvailableStockOnSeasonalProductsChart();\n      });\n    }\n\n    function reloadAggregates() {\n      vm.retrievingAggregates = true;\n      var params = {};\n\n      api.inventories.stocks.list(\n        { option: 'status-by-product' },\n        function(results, fn, status) {\n          vm.retrievingAggregates = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n\n            results.available_on_hand.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id,\n                  order: parseFloat(stock.positive_with_cost)\n                };\n              }\n\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].available_on_hand = {\n                positive: stock.positive,\n                positive_with_cost: stock.positive_with_cost,\n                positive_cost: stock.positive_cost,\n                negative: stock.negative,\n                negative_with_cost: stock.negative_with_cost,\n                negative_cost: stock.negative_cost,\n                total_volume: parseFloat(stock.total_volume),\n                used_volume: parseFloat(stock.used_volume)\n              };\n              vm.aggregatedStock.available_on_hand.positive += stock.positive;\n              vm.aggregatedStock.available_on_hand.positive_with_cost += stock.positive_with_cost;\n              vm.aggregatedStock.available_on_hand.positive_cost += parseFloat(stock.positive_cost);\n              vm.aggregatedStock.available_on_hand.negative += stock.negative;\n              vm.aggregatedStock.available_on_hand.negative_with_cost += stock.negative_with_cost;\n              vm.aggregatedStock.available_on_hand.negative_cost += parseFloat(stock.negative_cost);\n              vm.aggregatedStock.available_on_hand.total_volume += parseFloat(stock.total_volume);\n              vm.aggregatedStock.available_on_hand.used_volume += parseFloat(stock.used_volume);\n\n            });\n\n            results.in_transit_on_transfer.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].in_transit_on_transfer = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.in_transit_on_transfer.stock += stock.stock;\n              vm.aggregatedStock.in_transit_on_transfer.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.in_transit_on_transfer.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            results.in_transit_on_purchase.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].in_transit_on_purchase = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.in_transit_on_purchase.stock += stock.stock;\n              vm.aggregatedStock.in_transit_on_purchase.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.in_transit_on_purchase.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            results.allocated_on_retail.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].allocated_on_retail = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost,\n                total_volume: parseFloat(stock.total_volume),\n              };\n              vm.aggregatedStock.allocated_on_retail.stock += stock.stock;\n              vm.aggregatedStock.allocated_on_retail.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.allocated_on_retail.stock_cost += parseFloat(stock.stock_cost);\n              vm.aggregatedStock.allocated_on_retail.total_volume += parseFloat(stock.total_volume);\n            });\n\n            results.allocated_on_wholesale.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].allocated_on_wholesale = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.allocated_on_wholesale.stock += stock.stock;\n              vm.aggregatedStock.allocated_on_wholesale.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.allocated_on_wholesale.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            vm.aggregatedStockByWarehouseArray = [];\n            for (var warehouse in vm.aggregatedStockByWarehouseId) {\n              vm.aggregatedStockByWarehouseArray.push(vm.aggregatedStockByWarehouseId[warehouse]);\n            }\n\n            vm.availableOnHandOnInactiveProducts = results.available_on_hand_on_inactive_products;\n            vm.availableOnHandOnDiscontinuedProducts = results.available_on_hand_on_discontinued_products;\n            vm.availableOnHandOnActiveProducts = results.available_on_hand_on_active_products;\n            vm.availableOnHandOnActivePermanentProducts = results.available_on_hand_on_active_noos_products;\n            vm.availableOnHandOnActiveSeasonalProducts = results.available_on_hand_on_active_not_noos_products;\n            // vm.availableOnHandOnInactiveNotDiscontinuedNotNoosProducts = results.available_on_hand_on_inactive_not_discontinued_not_noos_products\n            vm.availableOnHandRemaining.positive = vm.aggregatedStock.available_on_hand.positive\n              - vm.availableOnHandOnActiveProducts.positive\n              - vm.availableOnHandOnInactiveProducts.positive\n              - vm.availableOnHandOnDiscontinuedProducts.positive;\n            vm.availableOnHandRemaining.positive_cost = vm.aggregatedStock.available_on_hand.positive_cost\n              - vm.availableOnHandOnActiveProducts.positive_cost\n              - vm.availableOnHandOnInactiveProducts.positive_cost\n              - vm.availableOnHandOnDiscontinuedProducts.positive_cost;\n\n            vm.activeProducts = results.active_products;\n            vm.activePermanentProducts = results.active_noos_products;\n            vm.activeSeasonalProducts = results.active_not_noos_products;\n\n            vm.activeProductsWithAvailableOnHand = results.active_products_with_available_on_hand;\n            vm.activePermanentProductsWithAvailableOnHand = results.active_noos_products_with_available_on_hand;\n            vm.activeSeasonalProductsWithAvailableOnHand = results.active_not_noos_products_with_available_on_hand;\n            initializeStockQuantityByProductStatusChart();\n            initializeStockCostByProductStatusChart();\n            initializeAvailableStockOnPermanentProductsChart();\n            initializeAvailableStockOnSeasonalProductsChart();\n          }\n\n        }\n      );\n    }\n\n    function reloadAggregatesFilters() {\n      vm.retrievingAggregates = true;\n      var params = {};\n      vm.selectedWarehouses.length ? params['selected_warehouses_ids'] = vm.selectedWarehouses.toString() : null;\n      vm.selectedSeasons.length ? params['selected_seasons_ids'] = vm.selectedSeasons.toString() : null;\n      vm.selectedBrands.length ? params['selected_brands_ids'] = vm.selectedBrands.toString() : null;\n      vm.selectedCategories.length ? params['selected_categories_ids'] = vm.selectedCategories.toString() : null;\n      vm.selectedSubcategories.length ? params['selected_subcategories_ids'] = vm.selectedSubcategories.toString() : null;\n      vm.selectedProviders.length ? params['selected_providers_ids'] = vm.selectedProviders.toString() : null;\n      api.inventories.stocks.list(\n        { option: 'status-by-product',\n          selectedWarehousesIds: params['selected_warehouses_ids'],\n          selectedSeasonsIds: params['selected_seasons_ids'],\n          selectedBrandsIds: params['selected_brands_ids'],\n          selectedCategoriesIds: params['selected_categories_ids'],\n          selectedSubcategoriesIds: params['selected_subcategories_ids'],\n          selectedProvidersIds: params['selected_providers_ids'],\n        },\n        function(results, fn, status) {\n          vm.retrievingAggregates = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.aggregatedStock.available_on_hand.positive = 0;\n            vm.aggregatedStock.available_on_hand.positive_with_cost = 0;\n            vm.aggregatedStock.available_on_hand.positive_cost = 0;\n            vm.aggregatedStock.available_on_hand.negative = 0;\n            vm.aggregatedStock.available_on_hand.negative_with_cost = 0;\n            vm.aggregatedStock.available_on_hand.negative_cost = 0;\n            results.available_on_hand.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id,\n                  order: parseFloat(stock.positive_with_cost)\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].available_on_hand = {\n                positive: stock.positive,\n                positive_with_cost: stock.positive_with_cost,\n                positive_cost: stock.positive_cost,\n                negative: stock.negative,\n                negative_with_cost: stock.negative_with_cost,\n                negative_cost: stock.negative_cost\n              };\n              vm.aggregatedStock.available_on_hand.positive += stock.positive;\n              vm.aggregatedStock.available_on_hand.positive_with_cost += stock.positive_with_cost;\n              vm.aggregatedStock.available_on_hand.positive_cost += parseFloat(stock.positive_cost);\n              vm.aggregatedStock.available_on_hand.negative += stock.negative;\n              vm.aggregatedStock.available_on_hand.negative_with_cost += stock.negative_with_cost;\n              vm.aggregatedStock.available_on_hand.negative_cost += parseFloat(stock.negative_cost);\n\n            });\n            vm.aggregatedStock.in_transit_on_transfer.stock = 0;\n            vm.aggregatedStock.in_transit_on_transfer.stock_with_cost = 0;\n            vm.aggregatedStock.in_transit_on_transfer.stock_cost = 0;\n            results.in_transit_on_transfer.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].in_transit_on_transfer = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.in_transit_on_transfer.stock += stock.stock;\n              vm.aggregatedStock.in_transit_on_transfer.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.in_transit_on_transfer.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            vm.aggregatedStock.in_transit_on_purchase.stock = 0;\n            vm.aggregatedStock.in_transit_on_purchase.stock_with_cost = 0;\n            vm.aggregatedStock.in_transit_on_purchase.stock_cost = 0;\n            results.in_transit_on_purchase.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].in_transit_on_purchase = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.in_transit_on_purchase.stock += stock.stock;\n              vm.aggregatedStock.in_transit_on_purchase.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.in_transit_on_purchase.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            vm.aggregatedStock.allocated_on_retail.stock = 0;\n            vm.aggregatedStock.allocated_on_retail.stock_with_cost = 0;\n            vm.aggregatedStock.allocated_on_retail.stock_cost = 0;\n            results.allocated_on_retail.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].allocated_on_retail = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.allocated_on_retail.stock += stock.stock;\n              vm.aggregatedStock.allocated_on_retail.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.allocated_on_retail.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            vm.aggregatedStock.allocated_on_wholesale.stock = 0;\n            vm.aggregatedStock.allocated_on_wholesale.stock_with_cost = 0;\n            vm.aggregatedStock.allocated_on_wholesale.stock_cost = 0;\n            results.allocated_on_wholesale.forEach(function(stock) {\n              if (angular.isUndefined(vm.aggregatedStockByWarehouseId[stock.warehouse_name])) {\n                vm.aggregatedStockByWarehouseId[stock.warehouse_name] = {\n                  warehouse_name: stock.warehouse_name,\n                  warehouse_id: stock.warehouse_id\n                };\n              }\n              vm.aggregatedStockByWarehouseId[stock.warehouse_name].allocated_on_wholesale = {\n                stock: stock.stock,\n                stock_with_cost: stock.stock_with_cost,\n                stock_cost: stock.stock_cost\n              };\n              vm.aggregatedStock.allocated_on_wholesale.stock += stock.stock;\n              vm.aggregatedStock.allocated_on_wholesale.stock_with_cost += stock.stock_with_cost;\n              vm.aggregatedStock.allocated_on_wholesale.stock_cost += parseFloat(stock.stock_cost);\n            });\n\n            vm.aggregatedStockByWarehouseArray = [];\n            for (var warehouse in vm.aggregatedStockByWarehouseId) {\n              vm.aggregatedStockByWarehouseArray.push(vm.aggregatedStockByWarehouseId[warehouse]);\n            }\n\n            vm.availableOnHandOnInactiveProducts = results.available_on_hand_on_inactive_products;\n            vm.availableOnHandOnDiscontinuedProducts = results.available_on_hand_on_discontinued_products;\n            vm.availableOnHandOnActiveProducts = results.available_on_hand_on_active_products;\n            vm.availableOnHandOnActivePermanentProducts = results.available_on_hand_on_active_noos_products;\n            vm.availableOnHandOnActiveSeasonalProducts = results.available_on_hand_on_active_not_noos_products;\n            vm.availableOnHandRemaining.positive = vm.aggregatedStock.available_on_hand.positive\n              - vm.availableOnHandOnActiveProducts.positive\n              - vm.availableOnHandOnInactiveProducts.positive\n              - vm.availableOnHandOnDiscontinuedProducts.positive;\n            vm.availableOnHandRemaining.positive_cost = vm.aggregatedStock.available_on_hand.positive_cost\n              - vm.availableOnHandOnActiveProducts.positive_cost\n              - vm.availableOnHandOnInactiveProducts.positive_cost\n              - vm.availableOnHandOnDiscontinuedProducts.positive_cost;\n\n            vm.activeProducts = results.active_products;\n            vm.activePermanentProducts = results.active_noos_products;\n            vm.activeSeasonalProducts = results.active_not_noos_products;\n\n            vm.activeProductsWithAvailableOnHand = results.active_products_with_available_on_hand;\n            vm.activePermanentProductsWithAvailableOnHand = results.active_noos_products_with_available_on_hand;\n            vm.activeSeasonalProductsWithAvailableOnHand = results.active_not_noos_products_with_available_on_hand;\n            initializeStockQuantityByProductStatusChart();\n            initializeStockCostByProductStatusChart();\n            initializeAvailableStockOnPermanentProductsChart();\n            initializeAvailableStockOnSeasonalProductsChart();\n          }\n\n        }\n      );\n    }\n\n\n    function initializeStockKpisChart() {\n      vm.stockKpiChartOptions = {\n        color: vm.COLORS,\n        tooltip: {\n          trigger: 'axis',\n          textStyle: {\n            fontFamily: 'Silka'\n          },\n          formatter: function(args) {\n            var formattedDate = $filter('date')(new Date(args[0].axisValue), 'EEEE d MMM');\n            var tooltip = '<span>' + formattedDate + '</span><br>';\n            args.forEach(function(arg, index) {\n              tooltip += '<span>' + arg.marker + ' ' + arg.seriesName + ': ' + $filter('number')(arg.value, 0) + '</span><br>';\n            });\n            return tooltip;\n          }\n        },\n        toolbox: {\n          feature: {\n            //dataView: { show: true, readOnly: false },\n            //magicType: { show: true, type: ['line', 'bar'] },\n            //restore: { show: true },\n            saveAsImage: { show: true }\n          }\n        },\n        grid: {\n          top: '30',\n          left: '30',\n          right: '30',\n          bottom: '30',\n          containLabel: true\n        },\n        xAxis: {\n          type: 'category',\n          boundaryGap: false,\n          interval: 0,\n          axisPointer: {\n            type: 'shadow'\n          },\n          splitLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            fontSize: 10,\n            fontFamily: 'Silka',\n            color: 'rgba(0,0,0,0.54)',\n            formatter: function(value) {\n              return $filter('date')(new Date(value), 'd MMM');\n            }\n          },\n          axisLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          }\n        },\n        yAxis: [\n          {\n            type: 'value',\n            //name: 'Stock Amount',\n            splitLine: {\n              lineStyle: {\n                color: 'rgba(0,0,0,0.08)'\n              }\n            },\n            axisLine: {\n              show: false\n            },\n            axisTick: {\n              show: false\n            },\n            axisLabel: {\n              fontFamily: 'Silka',\n              color: 'rgba(0,0,0,0.54)',\n              formatter: '{value} u'\n            }\n          },\n          {\n            type: 'value',\n            //name: 'Stock Value',\n            splitLine: {\n              lineStyle: {\n                color: 'rgba(0,0,0,0.08)'\n              }\n            },\n            axisLine: {\n              show: false\n            },\n            axisTick: {\n              show: false\n            },\n            axisLabel: {\n              fontFamily: 'Silka',\n              color: 'rgba(0,0,0,0.54)',\n              formatter: function(value) {\n                return $filter('price')(value) + ' ' + vm.currencyCharacter;\n              }\n            },\n            alignTicks: true\n          }]\n      };\n    }\n\n    function selectedWarehousesFunction(){\n      reloadStockKpisChart();\n      reloadAggregatesFilters();\n    }\n\n    function reloadStockKpisChart() {\n\n      vm.days = [];\n      for (var d = new Date(vm.dateRange.dateStart); d <= vm.dateRange.dateEnd; d.setDate(d.getDate() + 1)) {\n        vm.days.push(angular.copy(d));\n      }\n\n      var params = {\n        date_gte: vm.dateRange.dateStart,\n        date_lte: vm.dateRange.dateEnd\n      };\n\n      if (vm.selectedWarehouses.length) {\n        params['warehouse_ids'] = vm.selectedWarehouses.toString();\n      }\n\n      api.analytics.stockKpis.list(\n        params,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n\n            vm.stockByWarehouseAndDate = {};\n            vm.warehouseNameById = {};\n\n            results.results.forEach(function(stock) {\n              if (angular.isUndefined(vm.stockByWarehouseAndDate[stock.warehouse_id])) {\n                vm.stockByWarehouseAndDate[stock.warehouse_id] = {};\n                vm.warehouseNameById[stock.warehouse_id] = stock.warehouse_name;\n              }\n              if (angular.isUndefined(vm.stockByWarehouseAndDate[stock.warehouse_id][stock.date])) {\n                vm.stockByWarehouseAndDate[stock.warehouse_id][stock.date] = stock;\n              }\n            });\n\n            var series = [];\n            for (var warehouse in vm.stockByWarehouseAndDate) {\n              var warehouseName = warehouse != 'undefined' ? vm.warehouseNameById[warehouse] : $filter('translate')('INVENTORY_DASHBOARD.ALL_WAREHOUSES_LOWER');\n\n              var warehouseStockData = [];\n              var warehouseCostData = [];\n              for (var date in vm.stockByWarehouseAndDate[warehouse]) {\n                warehouseStockData.push(vm.stockByWarehouseAndDate[warehouse][date].stock);\n                warehouseCostData.push(vm.stockByWarehouseAndDate[warehouse][date].cost);\n              }\n\n              series.push({\n                animationEasing: 'sinusoidalOut',\n                animationDelay: 0,\n                animationDuration: 500,\n                type: 'line',\n                smooth: 0.25,\n                smoothMonotone: 'x',\n                sampling: 'average', // average when contains so much data\n                z: 99,\n                name: $filter('translate')('INVENTORY_DASHBOARD.QUANTITY') + ' ' + warehouseName,\n                //stack: 'Total',\n                tooltip: {\n                  valueFormatter: function(value) {\n                    return value + 'u';\n                  }\n                },\n                lineStyle: {\n                  normal: {\n                    width: 4\n                  }\n                },\n                data: warehouseStockData\n              });\n\n              series.push({\n                yAxisIndex: 1,\n                animationEasing: 'sinusoidalOut',\n                animationDelay: 0,\n                animationDuration: 500,\n                name: $filter('translate')('INVENTORY_DASHBOARD.COST') + ' ' + warehouseName,\n                type: 'bar',\n                tooltip: {\n                  valueFormatter: function(value) {\n                    return $filter('price')(value) + ' ' + vm.currencyCharacter;\n                  }\n                },\n                itemStyle: {\n                  opacity: 0.3\n                },\n                data: warehouseCostData\n              });\n\n            }\n\n            vm.stockKpiChartOptions['series'] = series;\n            vm.stockKpiChartOptions['legend'] = {\n              textStyle: {\n                fontFamily: 'Silka'\n              }\n            };\n            vm.stockKpiChartOptions['xAxis']['data'] = vm.days;\n\n            var chartDom = document.getElementById('stockKpiChart');\n            var myChart = echarts.init(chartDom);\n            myChart.setOption(vm.stockKpiChartOptions, true);\n          } else {\n            // TODO show error toast\n          }\n        }\n      );\n\n    }\n\n    function initializeStockQuantityByProductStatusChart() {\n      var data = [\n        {\n          value: vm.availableOnHandOnActiveProducts.positive,\n          name: $filter('translate')('INVENTORY_DASHBOARD.ACTIVE')\n        },\n        {\n          value: vm.availableOnHandOnInactiveProducts.positive,\n          name: $filter('translate')('INVENTORY_DASHBOARD.INACTIVE')\n        },\n        {\n          value: vm.availableOnHandOnDiscontinuedProducts.positive,\n          name: $filter('translate')('INVENTORY_DASHBOARD.DISCONTINUED')\n        }\n      ];\n      if (vm.availableOnHandRemaining.positive > 0.001) {\n        data.push({\n          value: vm.availableOnHandRemaining.positive,\n          name: $filter('translate')('INVENTORY_DASHBOARD.MISSING_INFORMATION')\n        });\n      }\n\n      var stockQuantityByProductStatusChartOption = {\n        title: {\n          text: $filter('translate')('INVENTORY_DASHBOARD.QUANTITY'),\n          textStyle: {\n            fontFamily: 'Silka',\n            fontWeight: 'normal',\n            fontSize: '1.6rem'\n          }\n        },\n        colors: vm.COLORS,\n        tooltip: {\n          trigger: 'item',\n          formatter: '{b}: {c}',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        legend: {\n          bottom: 0,\n          left: 'center',\n          icon: 'circle',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        series: [\n          {\n            type: 'pie',\n            radius: '50%',\n            center: ['50%', '50%'],\n            color: vm.DISCONTIUED_STOCK_CHART_COLORS,\n            selectedMode: 'single',\n            data: data,\n            itemStyle: {\n              borderRadius: 5,\n              borderColor: '#fff',\n              borderWidth: 3\n            },\n            label: {\n              formatter: '{b}: {d}%',\n              bleedMargin: 0,\n              overflow: 'break',\n              textStyle: {\n                fontFamily: 'Silka'\n              }\n            }\n          }\n        ]\n      };\n\n      var stockQuantityByProductStatusChartDom = document.getElementById('stockQuantityByProductStatusChart');\n      var stockQuantityByProductStatusChart = echarts.init(stockQuantityByProductStatusChartDom);\n      stockQuantityByProductStatusChart.setOption(stockQuantityByProductStatusChartOption);\n    }\n\n    function initializeStockCostByProductStatusChart() {\n      var data = [\n        {\n          value: vm.availableOnHandOnActiveProducts.positive_cost,\n          name: $filter('translate')('INVENTORY_DASHBOARD.ACTIVE')\n        },\n        {\n          value: vm.availableOnHandOnInactiveProducts.positive_cost,\n          name: $filter('translate')('INVENTORY_DASHBOARD.INACTIVE')\n        },\n        {\n          value: vm.availableOnHandOnDiscontinuedProducts.positive_cost,\n          name: $filter('translate')('INVENTORY_DASHBOARD.DISCONTINUED')\n        }\n      ];\n      if (vm.availableOnHandRemaining.positive_cost > 0.001) {\n        data.push({\n          value: vm.availableOnHandRemaining.positive_cost,\n          name: $filter('translate')('INVENTORY_DASHBOARD.MISSING_INFORMATION')\n        });\n      }\n\n      var stockCostByProductStatusChartOption = {\n        title: {\n          text: $filter('translate')('INVENTORY_DASHBOARD.COST'),\n          textStyle: {\n            fontFamily: 'Silka',\n            fontWeight: 'normal',\n            fontSize: '1.6rem'\n          }\n        },\n        colors: vm.COLORS,\n        tooltip: {\n          trigger: 'item',\n          // formatter: '{b}: {c}',\n          formatter: function(param) {\n            return param.name + ': ' + $filter('price')(param.value) + vm.currencyCharacter;\n          },\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        legend: {\n          bottom: 0,\n          left: 'center',\n          icon: 'circle',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        series: [\n          {\n            type: 'pie',\n            radius: '50%',\n            center: ['50%', '50%'],\n            color: vm.DISCONTIUED_STOCK_CHART_COLORS,\n            selectedMode: 'single',\n            data: data,\n            itemStyle: {\n              borderRadius: 5,\n              borderColor: '#fff',\n              borderWidth: 3\n            },\n            label: {\n              formatter: '{b}: {d}%',\n              bleedMargin: 0,\n              overflow: 'break',\n              textStyle: {\n                fontFamily: 'Silka'\n              }\n            }\n          }\n        ]\n      };\n\n      var stockCostByProductStatusChartDom = document.getElementById('stockCostByProductStatusChart');\n      var stockCostByProductStatusChart = echarts.init(stockCostByProductStatusChartDom);\n      stockCostByProductStatusChart.setOption(stockCostByProductStatusChartOption);\n    }\n\n    function initializeAvailableStockOnPermanentProductsChart() {\n      var availableStockOnPermanentProductsChartOption = {\n        title: {\n          text: $filter('translate')('INVENTORY_DASHBOARD.AVAILABLE_STOCK_ON_PERMANENT_PRODUCTS_CHART_TITLE'),\n          textStyle: {\n            fontFamily: 'Silka',\n            fontWeight: 'normal',\n            fontSize: '1.6rem'\n          }\n        },\n        tooltip: {\n          trigger: 'item',\n          formatter: '{b}: {c}',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        legend: {\n          bottom: 0,\n          left: 'center',\n          icon: 'circle',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        series: [\n          {\n            type: 'pie',\n            radius: '50%',\n            center: ['50%', '50%'],\n            color: vm.AVAILABLE_STOCK_CHART_COLORS,\n            selectedMode: 'single',\n            data: [\n              {\n                value: vm.activePermanentProductsWithAvailableOnHand,\n                name: $filter('translate')('INVENTORY_DASHBOARD.WITH_STOCK_AVAILABLE_ON_HAND')\n              },\n              {\n                value: vm.activePermanentProducts - vm.activePermanentProductsWithAvailableOnHand,\n                name: $filter('translate')('INVENTORY_DASHBOARD.WITHOUT_STOCK_AVAILABLE_ON_HAND')\n              }\n            ],\n            itemStyle: {\n              borderRadius: 5,\n              borderColor: '#fff',\n              borderWidth: 3\n            },\n            label: {\n              formatter: '{b}: {d}%',\n              bleedMargin: 0,\n              overflow: 'break',\n              textStyle: {\n                fontFamily: 'Silka'\n              }\n            }\n          }\n        ]\n      };\n\n      var availableStockOnPermanentProductsChartDom = document.getElementById('availableStockOnPermanentProductsChart');\n      var availableStockOnPermanentProductsChart = echarts.init(availableStockOnPermanentProductsChartDom);\n      availableStockOnPermanentProductsChart.setOption(availableStockOnPermanentProductsChartOption);\n    }\n\n    function initializeAvailableStockOnSeasonalProductsChart() {\n      var availableStockOnSeasonalProductsChartOption = {\n        title: {\n          text: $filter('translate')('INVENTORY_DASHBOARD.AVAILABLE_STOCK_ON_SEASONAL_PRODUCTS_CHART_TITLE'),\n          textStyle: {\n            fontFamily: 'Silka',\n            fontWeight: 'normal',\n            fontSize: '1.6rem'\n          }\n        },\n        tooltip: {\n          trigger: 'item',\n          formatter: '{b}: {c}',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        legend: {\n          bottom: 0,\n          left: 'center',\n          icon: 'circle',\n          textStyle: {\n            fontFamily: 'Silka'\n          }\n        },\n        series: [\n          {\n            type: 'pie',\n            radius: '50%',\n            center: ['50%', '50%'],\n            color: vm.AVAILABLE_STOCK_CHART_COLORS,\n            selectedMode: 'single',\n            data: [\n              {\n                value: vm.activeSeasonalProductsWithAvailableOnHand,\n                name: $filter('translate')('INVENTORY_DASHBOARD.WITH_STOCK_AVAILABLE_ON_HAND')\n              },\n              {\n                value: vm.activeSeasonalProducts - vm.activeSeasonalProductsWithAvailableOnHand,\n                name: $filter('translate')('INVENTORY_DASHBOARD.WITHOUT_STOCK_AVAILABLE_ON_HAND')\n              }\n            ],\n            itemStyle: {\n              borderRadius: 5,\n              borderColor: '#fff',\n              borderWidth: 3\n            },\n            label: {\n              formatter: '{b}: {d}%',\n              bleedMargin: 0,\n              overflow: 'break',\n              textStyle: {\n                fontFamily: 'Silka'\n              }\n            }\n          }\n        ]\n      };\n\n      var availableStockOnSeasonalProductsChartDom = document.getElementById('availableStockOnSeasonalProductsChart');\n      var availableStockOnSeasonalProductsChart = echarts.init(availableStockOnSeasonalProductsChartDom);\n      availableStockOnSeasonalProductsChart.setOption(availableStockOnSeasonalProductsChartOption);\n    }\n\n    function getUsedVolumePercentage(usedVolume, totalVolume) {\n      if (!totalVolume || totalVolume === 0) {\n          return 0;\n      }\n      if (!usedVolume || usedVolume === 0) {\n          return 0;\n      }\n      return parseFloat(((usedVolume / totalVolume) * 100).toFixed(2));\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsInventoryLowStockController', AnalyticsInventoryLowStockController);\n\n  /** @ngInject */\n  function AnalyticsInventoryLowStockController($scope, $filter, $document, $state, $interval, $mdSidenav, $timeout, $window, $q, api, Session, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentNavItem = \"stocks\";\n\n\n    var vm = this;\n    vm.days = [];\n    vm.warehouses = [];\n    vm.selectedWarehouses = [];\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.dateRange = {\n      dateStart: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),\n      dateEnd: new Date()\n    };\n    vm.COLORS = ['#4A5ff0', '#8852a0', '#00bb80', '#e66000', '#F1AF2F', '#E91E63', '#F44336', '#00BCD4'];\n\n    // Methods\n    vm.reloadStockKpisChart = reloadStockKpisChart;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize(){\n      vm.dateRangeWatcher = $scope.$watch('vm.dateRange', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          if (newValue.dateStart !== newValue.dateEnd) {\n            reloadStockKpisChart();\n          }\n        }\n      }, true);\n\n      api.inventories.warehouses.list(\n        {}, function(results, fn, status){\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.warehouses = results.results;\n          }\n        }\n      )\n\n      api.inventories.stocks.list(\n        {option:'aggregate'}, function(results, fn, status){\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            console.log(results)\n          }\n        }\n      )\n\n      initializeStockKpisChart();\n      initializeDiscontinuedStockChart();\n      initializeAvailableStockChart();\n    }\n\n    function initializeStockKpisChart(){\n      vm.stockKpiChartOptions = {\n        color: vm.COLORS,\n        tooltip: {\n          trigger: 'axis',\n          textStyle: {\n            fontFamily: 'Silka'\n          },\n          axisPointer: {\n            type: 'cross',\n          },\n          formatter: function (args) {\n            var formattedDate = $filter('date')(new Date(args[0].axisValue), 'EEEE d MMM');\n            var tooltip = '<span>' + formattedDate + '</span><br>';\n            args.forEach(function (arg, index) {\n              tooltip += '<span>' + arg.marker + ' ' + arg.seriesName + ': ' + $filter('number')(arg.value, 0) + '</span><br>';\n            });\n            return tooltip;\n          }\n        },\n        toolbox: {\n          feature: {\n            //dataView: { show: true, readOnly: false },\n            //magicType: { show: true, type: ['line', 'bar'] },\n            //restore: { show: true },\n            saveAsImage: { show: true }\n          }\n        },\n        grid: {\n          top: '30',\n          left: '30',\n          right: '30',\n          bottom: '30',\n          containLabel: true\n        },\n        xAxis: {\n          type: 'category',\n          boundaryGap: false,\n          interval: 0,\n          axisPointer: {\n            type: 'shadow'\n          },\n          splitLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            fontSize: 10,\n            fontFamily: 'Silka',\n            color: 'rgba(0,0,0,0.54)',\n            formatter: function (value) {\n              return $filter('date')(new Date(value), 'd MMM');\n            }\n          },\n          axisLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          }\n        },\n        yAxis: [\n        {\n          type: 'value',\n          //name: 'Stock Amount',\n          splitLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          },\n          axisLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            fontFamily: 'Silka',\n            color: 'rgba(0,0,0,0.54)',\n            formatter: '{value} u'\n          }\n        },\n        {\n          type: 'value',\n          //name: 'Stock Value',\n          splitLine: {\n            lineStyle: {\n              color: 'rgba(0,0,0,0.08)'\n            }\n          },\n          axisLine: {\n            show: false\n          },\n          axisTick: {\n            show: false\n          },\n          axisLabel: {\n            fontFamily: 'Silka',\n            color: 'rgba(0,0,0,0.54)',\n            formatter: function (value) {\n              return $filter('price')(value) + ' ' + vm.currencyCharacter;\n            }\n          }\n        }],\n      };\n\n    }\n\n    function reloadStockKpisChart(){\n\n      vm.days = [];\n      for (var d = new Date(vm.dateRange.dateStart); d <= vm.dateRange.dateEnd; d.setDate(d.getDate() + 1)) {\n        vm.days.push(angular.copy(d));\n      }\n\n      var params = {\n        date_gte: vm.dateRange.dateStart,\n        date_lte: vm.dateRange.dateEnd\n      };\n\n      if(vm.selectedWarehouses.length){\n        params['warehouse_ids'] = vm.selectedWarehouses.toString()\n      }\n\n      api.analytics.stockKpis.list(\n          params\n          ,\n          function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n\n              vm.stockByWarehouseAndDate = {};\n\n              results.results.forEach(function(stock){\n                if(angular.isUndefined(vm.stockByWarehouseAndDate[stock.warehouse])){\n                  vm.stockByWarehouseAndDate[stock.warehouse] = {};\n                }\n                if(angular.isUndefined(vm.stockByWarehouseAndDate[stock.warehouse][stock.date])){\n                  vm.stockByWarehouseAndDate[stock.warehouse][stock.date] = stock;\n                }\n              })\n\n              var series = [];\n              var legend = [];\n              for(var warehouse in vm.stockByWarehouseAndDate){\n\n                legend.push(warehouse);\n\n                var warehouseStockData = [];\n                var warehouseCostData = [];\n                for(var date in vm.stockByWarehouseAndDate[warehouse]){\n                  warehouseStockData.push(vm.stockByWarehouseAndDate[warehouse][date].stock);\n                  warehouseCostData.push(vm.stockByWarehouseAndDate[warehouse][date].cost);\n                }\n\n                series.push({\n                  //name: 'Stock Amount',\n                  animationEasing: 'sinusoidalOut',\n                  animationDelay: 0,\n                  animationDuration: 500,\n                  type: 'line',\n                  smooth: 0.25,\n                  smoothMonotone: 'x',\n                  sampling: 'average', // average when contains so much data\n                  z: 99,\n                  name: warehouse != \"null\" ? warehouse : 'All Warehouses',\n                  //stack: 'Total',\n                  tooltip: {\n                    valueFormatter: function (value) {\n                      return value + 'u';\n                    }\n                  },\n                  lineStyle: {\n                    normal: {\n                      width: 4,\n                      //color: 'rgb(74,95,240)',\n                    },\n                  },\n                  data: warehouseStockData\n                });\n\n                series.push({\n                  //name: 'Stock Value',\n                  yAxisIndex: 1,\n                  animationEasing: 'sinusoidalOut',\n                  animationDelay: 0,\n                  animationDuration: 500,\n                  name: warehouse != \"null\" ? warehouse : 'All Warehouses',\n                  type: 'bar',\n                  tooltip: {\n                    valueFormatter: function (value) {\n                      return $filter('price')(value) + ' ' + vm.currencyCharacter;\n                    }\n                  },\n                  itemStyle: {\n                    opacity: 0.3\n                  },\n                  data: warehouseCostData\n                });\n\n              }\n\n              vm.stockKpiChartOptions['series'] = series;\n              vm.stockKpiChartOptions['legend'] = {data: legend};\n              vm.stockKpiChartOptions['xAxis']['data'] = vm.days;\n\n\n              var chartDom = document.getElementById('stockKpiChart');\n              var myChart = echarts.init(chartDom);\n              myChart.setOption(vm.stockKpiChartOptions);\n\n\n            } else {\n              // TODO show error toast\n            }\n          }\n      );\n\n    }\n\n    function initializeDiscontinuedStockChart(){\n\n      var discontinuedStockChartOption = {\n        colors: vm.COLORS,\n        tooltip: {\n          trigger: 'item',\n          formatter: '{a} <br/>{b} : {c} ({d}%)'\n        },\n        legend: {\n          bottom: 10,\n          left: 'center',\n          data: ['CityA', 'CityB', 'CityD', 'CityC', 'CityE']\n        },\n        series: [\n          {\n            type: 'pie',\n            radius: '65%',\n            center: ['50%', '50%'],\n            selectedMode: 'single',\n            data: [\n              { value: 735, name: 'Discontinued' },\n              { value: 510, name: 'Continued' },\n            ],\n            emphasis: {\n              itemStyle: {\n                shadowBlur: 10,\n                shadowOffsetX: 0,\n                shadowColor: 'rgba(0, 0, 0, 0.5)'\n              }\n            }\n          }\n        ]\n      };\n\n      var discontinuedStockChartDom = document.getElementById('stockQuantityByProductStatusChart');\n      var stockQuantityByProductStatusChart = echarts.init(discontinuedStockChartDom);\n      stockQuantityByProductStatusChart.setOption(discontinuedStockChartOption);\n    }\n\n    function initializeAvailableStockChart(){\n\n      var availableStockChartOption = {\n        colors: vm.COLORS,\n        tooltip: {\n          trigger: 'item',\n          formatter: '{a} <br/>{b} : {c} ({d}%)'\n        },\n        legend: {\n          bottom: 10,\n          left: 'center',\n          data: ['CityA', 'CityB', 'CityD', 'CityC', 'CityE']\n        },\n        series: [\n          {\n            type: 'pie',\n            radius: '65%',\n            center: ['50%', '50%'],\n            selectedMode: 'single',\n            data: [\n              { value: 434, name: 'Sin existencias' },\n              { value: 335, name: 'Con existencias' }\n            ],\n            emphasis: {\n              itemStyle: {\n                shadowBlur: 10,\n                shadowOffsetX: 0,\n                shadowColor: 'rgba(0, 0, 0, 0.5)'\n              }\n            }\n          }\n        ]\n      };\n\n      var availableStockChartDom = document.getElementById('availableStockChart');\n      var availableStockChart = echarts.init(availableStockChartDom);\n      availableStockChart.setOption(availableStockChartOption);\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsInventoryDistributionController', AnalyticsInventoryDistributionController);\n\n  /** @ngInject */\n  function AnalyticsInventoryDistributionController($scope, $filter, $document, $state, $interval, $mdSidenav, $timeout, $window, $q, api, WarehousesData,\n                                                       WarehouseStocksData, Session, BrandsData, SeasonsData, CategoriesData, SubcategoriesData, SEARCH_MAX_LENGTH, CONTACT_TYPES_REVERSE, HTTP_STATUS) {\n\n    $scope.$parent.vm.currentNavItem = \"stocks\";\n\n\n    var vm = this;\n    vm.days = [];\n    vm.warehouses = [];\n    vm.selectedWarehouses = [];\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.dateRange = {\n      dateStart: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),\n      dateEnd: new Date()\n    };\n    vm.COLORS = ['#4A5ff0', '#8852a0', '#00bb80', '#e66000', '#F1AF2F', '#E91E63', '#F44336', '#00BCD4'];\n\n    // Cons\n    const MIN_BARS_TO_PERCENT_THRESHOLD = 5;\n    const THRESHOLD_PERCENTAGE = 0.90;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    //vm.warehouseIds = $scope.$parent.vm.selectedWarehouses;\n    vm.selectedWarehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n    vm.stocks = WarehouseStocksData;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.subcategoriesByCategory = {};\n    vm.includeNoos = 1;\n    vm.selectedSeasonId = null;\n    vm.selectedBrandId = null;\n    vm.selectedCategoryId = null;\n    vm.selectedSubcategoryId = null;\n    vm.selectedProvider = null;\n    vm.providerSearchText = '';\n\n    vm.categoriesWidget = {\n      title: \"Stock by categories\",\n      mainChart: {\n        config: {\n          refreshDataOnly: true,\n          deepWatchData: true\n        },\n        options: {\n          chart: {\n            type: 'pieChart',\n            color: COLORS,\n            height: 300,\n            margin: {\n              top: 0,\n              right: 0,\n              bottom: 0,\n              left: 0\n            },\n            donut: true,\n            clipEdge: true,\n            cornerRadius: 0,\n            labelType: 'percent',\n            padAngle: 0.02,\n            x: function (d) {\n              return d.label;\n            },\n            y: function (d) {\n              return d.value;\n            },\n            tooltip: {\n              gravity: 's',\n              classes: 'gravity-s'\n            },\n            valueFormat: function (d) {\n              return d3.format(',.0f')(d);\n            },\n          }\n        },\n        data: []\n      }\n    };\n\n    vm.subcategoriesWidget = {\n      title: \"Stock by subcategories\",\n      mainChart: {\n        options: {\n          chart: {\n            type: 'discreteBarChart',\n            height: 500,\n            margin: {\n              top: 20,\n              right: 20,\n              bottom: 150,\n              left: 80\n            },\n            x: function (d) {\n              return d.label;\n            },\n            y: function (d) {\n              return d.value;\n            },\n            valueFormat: function (d) {\n              return d3.format(',.0f')(d);\n            },\n            showControls: true,\n            showValues: true,\n            transitionDuration: 500,\n            xAxis: {\n              showMaxMin: false,\n              rotateLabels: -45,\n              orient: 'bottom',\n            },\n            yAxis: {\n              axisLabel: 'Values',\n              tickFormat: function (d) {\n                return d3.format(',.0f')(d);\n              }\n            }\n          }\n        },\n        data: []\n      }\n    };\n\n    vm.brandsWidget = {\n      title: \"Stock by brands\",\n      mainChart: {\n        config: {\n          refreshDataOnly: true,\n          deepWatchData: true\n        },\n        options: {\n          chart: {\n            type: 'pieChart',\n            color: COLORS,\n            height: 400,\n            margin: {\n              top: 0,\n              right: 0,\n              bottom: 0,\n              left: 0\n            },\n            donut: true,\n            clipEdge: true,\n            cornerRadius: 0,\n            labelType: 'percent',\n            padAngle: 0.02,\n            x: function (d) {\n              return d.label;\n            },\n            y: function (d) {\n              return d.value;\n            },\n            tooltip: {\n              gravity: 's',\n              classes: 'gravity-s'\n            }\n          }\n        },\n        data: []\n      }\n    };\n\n    vm.seasonsWidget = {\n      title: \"Stock by seasons\",\n      mainChart: {\n        config: {\n          refreshDataOnly: true,\n          deepWatchData: true\n        },\n        options: {\n          chart: {\n            type: 'pieChart',\n            color: COLORS,\n            height: 400,\n            margin: {\n              top: 0,\n              right: 0,\n              bottom: 0,\n              left: 0\n            },\n            donut: true,\n            clipEdge: true,\n            cornerRadius: 0,\n            labelType: 'percent',\n            padAngle: 0.02,\n            x: function (d) {\n              return d.label;\n            },\n            y: function (d) {\n              return d.value;\n            },\n            tooltip: {\n              gravity: 's',\n              classes: 'gravity-s'\n            },\n            valueFormat: function (d) {\n              return d3.format(',.0f')(d);\n            },\n          }\n        },\n        data: []\n      }\n    };\n\n    vm.chartOptionsDict = {\n      grossSalesActualChart: angular.copy(vm.chartOptions),\n      grossSalesPlanChart: angular.copy(vm.chartOptions),\n      percentageToPlanChart: angular.copy(vm.chartOptions),\n      transactionsChart: angular.copy(vm.chartOptions),\n      trafficChart: angular.copy(vm.chartOptions),\n      conversionChart: angular.copy(vm.chartOptions),\n      unitsPerTransactionChart: angular.copy(vm.chartOptions),\n      grossSalePerTransactionChart: angular.copy(vm.chartOptions),\n      unitsSoldChart: angular.copy(vm.chartOptions),\n      averageUnitRetailChart: angular.copy(vm.chartOptions),\n      returnsChart: angular.copy(vm.chartOptions),\n      grossSalesLastYearChart: angular.copy(vm.chartOptions),\n      grossSalesPercentageLastYearChart: angular.copy(vm.chartOptions),\n      unitsSoldCostChart: angular.copy(vm.chartOptions),\n      grossProfitMarginChart: angular.copy(vm.chartOptions),\n      netSalesActualChart: angular.copy(vm.chartOptions),\n      netSalesLastYearChart: angular.copy(vm.chartOptions)\n    };\n\n    vm.comonEChartOptions = {\n      tooltip: {\n        textStyle: {\n          fontFamily: 'Silka'\n        },\n        trigger: 'axis',\n      },\n      grid: {\n        right: 64,\n        top: 8,\n        bottom: 128,\n        left: 64,\n        // height: 400 - 8 * 2,\n      },\n      xAxis: {\n        type: 'category',\n        splitLine: {\n          show: false\n        },\n        axisTick: {\n          show: false\n        },\n        axisLabel: {\n          rotate: -45,\n          interval: 0,\n          fontSize: 10,\n          fontFamily: 'Silka',\n          color: 'rgba(0,0,0,0.54)',\n          formatter: function (args) {\n            return args;\n          }\n        },\n        axisLine: {\n          lineStyle: {\n            color: 'rgba(0,0,0,0.08)'\n          }\n        }\n      },\n      yAxis: {\n        type: 'value',\n        splitLine: {\n          lineStyle: {\n            color: 'rgba(0,0,0,0.08)'\n          }\n        },\n        axisLine: {\n          show: false\n        },\n        axisTick: {\n          show: false\n        },\n\n        axisLabel: {\n          fontFamily: 'Silka',\n          color: 'rgba(0,0,0,0.54)',\n\n        }\n      },\n      series: []\n    };\n\n    // Methods\n    vm.applyFilters = applyFilters;\n    vm.providerQuerySearch = providerQuerySearch;\n\n    // Initialization\n    initialize();\n    recoverFilters();\n    applyFilters();\n\n    // Functions\n    function initialize() {\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n\n\n      vm.categoriesWidget.mainChart.data = [];\n      vm.stocks.total_by_category.map(function (total_by_category) {\n        vm.categoriesWidget.mainChart.data.push({\n          label: total_by_category.product_variant__product__category__name,\n          value: total_by_category.stock__sum\n        });\n      });\n\n      vm.subcategoriesWidget.mainChart.data = [{\n        key: '',\n        values: []\n      }];\n\n      var totalBySubcategory = 0;\n      vm.stocks.total_by_subcategory.map(function (total_by_subcategory) {\n        if (total_by_subcategory.stock__sum > 0) {\n          totalBySubcategory += total_by_subcategory.stock__sum;\n          vm.subcategoriesWidget.mainChart.data[0].values.push({\n            label: total_by_subcategory.product_variant__product__category__name + ' - ' + (total_by_subcategory.product_variant__product__subcategory__name ? total_by_subcategory.product_variant__product__subcategory__name : 'N/A'),\n            value: total_by_subcategory.stock__sum\n          })\n        }\n      });\n\n      vm.subcategoriesWidget.mainChart.data[0].values.sort(function (a, b) {\n        return b.value - a.value;\n      });\n\n      if (vm.subcategoriesWidget.mainChart.data[0].values.length > MIN_BARS_TO_PERCENT_THRESHOLD) {\n        var percentThresholdIndex = -1;\n        var reducedSum = 0;\n        for (var i = 0; i < vm.subcategoriesWidget.mainChart.data[0].values.length; ++i) {\n          reducedSum += vm.subcategoriesWidget.mainChart.data[0].values[i].value;\n          if (reducedSum >= totalBySubcategory * THRESHOLD_PERCENTAGE) {\n            percentThresholdIndex = i;\n            break;\n          }\n        }\n        if (percentThresholdIndex !== -1) {\n          vm.subcategoriesWidget.mainChart.data[0].values = vm.subcategoriesWidget.mainChart.data[0].values.slice(0, percentThresholdIndex);\n          vm.subcategoriesWidget.mainChart.data[0].values.push({\n            label: $filter('translate')('INVENTORY_DASHBOARD.THE_REST_SUBCATEGORIES'),\n            value: totalBySubcategory - reducedSum\n          });\n        }\n      }\n\n      var totalByBrand = 0;\n      vm.brandsWidget.mainChart.data = [{key: '', values: []}];\n      vm.stocks.total_by_brand.map(function (total_by_brand) {\n        if (total_by_brand.stock__sum > 0) {\n          totalByBrand += total_by_brand.stock__sum;\n          vm.brandsWidget.mainChart.data[0].values.push({\n            label: total_by_brand.product_variant__product__brand__name,\n            value: total_by_brand.stock__sum\n          });\n        }\n      });\n\n      vm.brandsWidget.mainChart.data[0].values.sort(function (a, b) {\n        return b.value - a.value;\n      });\n\n      if (vm.brandsWidget.mainChart.data[0].values.length > MIN_BARS_TO_PERCENT_THRESHOLD) {\n        var percentThresholdIndex = -1;\n        var reducedSum = 0;\n        for (var i = 0; i < vm.brandsWidget.mainChart.data[0].values.length; ++i) {\n          reducedSum += vm.brandsWidget.mainChart.data[0].values[i].value;\n          if (reducedSum >= totalByBrand * THRESHOLD_PERCENTAGE) {\n            percentThresholdIndex = i;\n            break;\n          }\n        }\n        if (percentThresholdIndex !== -1) {\n          vm.brandsWidget.mainChart.data[0].values = vm.brandsWidget.mainChart.data[0].values.slice(0, percentThresholdIndex);\n          vm.brandsWidget.mainChart.data[0].values.push({\n            label: $filter('translate')('INVENTORY_DASHBOARD.THE_REST_BRAND'),\n            value: totalBySubcategory - reducedSum\n          });\n        }\n      }\n\n      vm.seasonsWidget.mainChart.data = [];\n      vm.stocks.total_by_season.map(function (total_by_season) {\n        vm.seasonsWidget.mainChart.data.push({\n          label: total_by_season.product_variant__product__season__name,\n          value: total_by_season.stock__sum\n        });\n      });\n\n\n      // Use timeout to wait angular to render the cards\n      $timeout(initEcharts, 500);\n    }\n\n    function initEcharts() {\n      // Subcategories chart\n      var dom = document.getElementById('subcategories-chart');\n      vm.subcategoryChartOptions = angular.copy(vm.comonEChartOptions);\n      vm.subcategoryChartOptions.series = [{\n        data: vm.subcategoriesWidget.mainChart.data[0].values.map(function (value) {\n          return value.value;\n        }),\n        type: 'bar',\n        barMaxWidth: 48,\n        itemStyle: {\n          color: COLORS[0],\n          borderRadius: [20, 20, 0, 0]\n        }\n      }];\n      vm.subcategoryChartOptions.xAxis.data = vm.subcategoriesWidget.mainChart.data[0].values.map(function (value) {\n        return value.label;\n      });\n      vm.subcategoryChartInstance = window.echarts.init(dom);\n      vm.subcategoryChartInstance.setOption(vm.subcategoryChartOptions, true);\n\n      // Brands chart\n      var dom = document.getElementById('brands-chart');\n      vm.brandChartOptions = angular.copy(vm.comonEChartOptions);\n      vm.brandChartOptions.series = [{\n        data: vm.brandsWidget.mainChart.data[0].values.map(function (value) {\n          return value.value;\n        }),\n        type: 'bar',\n        barMaxWidth: 48,\n        itemStyle: {\n          color: COLORS[0],\n          borderRadius: [20, 20, 0, 0]\n        }\n      }];\n      vm.brandChartOptions.xAxis.data = vm.brandsWidget.mainChart.data[0].values.map(function (value) {\n        return value.label;\n      });\n      vm.brandChartInstance = window.echarts.init(dom);\n      vm.brandChartInstance.setOption(vm.brandChartOptions, true);\n      resizeEChart();\n\n      angular.element($window).bind('resize', function () {\n        resizeEChart();\n      });\n    }\n\n    function resizeEChart() {\n      var brandChartCardWidth = document.getElementById('brands-chart-card').clientWidth;\n      vm.brandChartInstance.resize({opts: {width: brandChartCardWidth}});\n      var subcategoryChartCardWidth = document.getElementById('subcategories-chart-card').clientWidth;\n      vm.subcategoryChartInstance.resize({opts: {width: subcategoryChartCardWidth}});\n    }\n\n    function providerQuerySearch() {\n      var deferred = $q.defer();\n      vm.providerSearchText = vm.providerSearchText.substring(0, SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get(\n        {\n          search: vm.providerSearchText,\n          type: CONTACT_TYPES_REVERSE.CONTACT_TYPE_PROVIDER,\n        },\n        function (results) {\n          if (!results.results) {\n            deferred.resolve([]);\n          }\n          deferred.resolve(results.results);\n        }\n      );\n\n      return deferred.promise;\n    }\n\n    function recoverFilters() {\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::analyticsInventoryStocksDashboardFiltersController'));\n      if (recovered_filters != null && angular.isDefined(recovered_filters.brand)) {\n        vm.selectedBrandId = recovered_filters.brand;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.season)) {\n        vm.selectedSeasonId = recovered_filters.season;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.category)) {\n        vm.selectedCategoryId = recovered_filters.category;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.subcategory)) {\n        vm.selectedSubcategoryId = recovered_filters.subcategory;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.is_noos)) {\n        vm.includeNoos = recovered_filters.is_noos;\n      }\n    }\n\n    function applyFilters() {\n\n      var params = {\n        option: 'stock',\n        brand: vm.selectedBrandId,\n        season: vm.selectedSeasonId,\n        category: vm.selectedCategoryId,\n        subcategory: vm.selectedSubcategoryId,\n        is_noos: vm.includeNoos\n      };\n      localStorage.setItem(Session.company.id + '::analyticsInventoryStocksDashboardFiltersController', JSON.stringify(params));\n\n      if (vm.warehouseIds) {\n        params.warehouse_ids = vm.warehouseIds;\n      }\n\n      if (vm.selectedProvider){\n        params.contact = vm.selectedProvider.id;\n      }\n\n      api.inventories.warehouses.get(params, function (response, callback, status) {\n        if (status === 200) {\n          vm.stocks = response;\n          initialize()\n        }\n      });\n    }\n\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsInventoryABCAnalysisController', AnalyticsInventoryABCAnalysisController);\n\n  /** @ngInject */\n  function AnalyticsInventoryABCAnalysisController($scope, $filter, $document, $state, $interval,\n                                                   $mdSidenav, $timeout, $window, $q, api,\n                                                   Session, DTColumnBuilder, Utils, HTTP_STATUS) {\n    $scope.$parent.vm.currentNavItem = \"abc-analysis\";\n\n    var SUMMARY_INTERVAL_MS = 5000;\n\n    var vm = this;\n\n    vm.performingAnalysis = false;\n\n    vm.dtInstanceABCAnalysisSummary = {};\n    vm.dtOptionsABCAnalysisSummary = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.productVariants.replace(':id/', '').replace(':option', 'abc-summary'),\n        type: 'get',\n        headers: {\n          Authorization: 'Token ' + Session.token,\n        },\n        data: function (d) {\n        }\n      },\n      order: [[0, 'asc']],\n      rowId: 'id',\n      dom: '',\n      pagingType: 'simple',\n      pageLength: 4,\n      responsive: false,\n      initComplete: dtInitComplete,\n      serverSide: false,\n      processing: false,\n      searchDelay: 750,\n      stateSave: false,\n      columnDefs: [\n        {\n          targets: [0, 1, 2, 3, 4, 5, 6, 7],\n          className: 'dt-center'\n        }\n      ]\n    };\n\n    vm.dtColumnsABCAnalysisSummary = [\n      DTColumnBuilder.newColumn('abc_category')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.ABC_CATEGORY'))\n        .renderWith(function (data, type, full) {\n          return '<div class=\"abc-box type-'+ data.toLowerCase() + '\">' + data + '</span>';\n        }),\n      DTColumnBuilder.newColumn('billed')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.BILLED'))\n        .renderWith(function (data, type, full) {\n          return $filter('price')(data, 2) + $filter('currencyCharacter')(Session.company.currency);\n        }),\n\n      DTColumnBuilder.newColumn('billed_percent')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.BILLED_PERCENT'))\n        .renderWith(function (data, type, full) {\n          return Utils.twoDecimals(data) + '%';\n        }),\n      DTColumnBuilder.newColumn('sku_count')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.SKU_COUNT')),\n      DTColumnBuilder.newColumn('sku_percent')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.SKU_COUNT_PERCENT'))\n        .renderWith(function (data, type, full) {\n          return Utils.twoDecimals(data) + '%';\n        }),\n      DTColumnBuilder.newColumn('units_sold')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'))\n        .renderWith(function (data, type, full) {\n          return data + ' u.';\n        }),\n      DTColumnBuilder.newColumn('retail_units_sold')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.RETAIL_UNITS_SOLD'))\n        .renderWith(function (data, type, full) {\n          return data + ' u.';\n        }),\n      DTColumnBuilder.newColumn('wholesale_units_sold')\n        .withTitle($filter('translate')('INVENTORY_DASHBOARD.WHOLESALE_UNITS_SOLD'))\n        .renderWith(function (data, type, full) {\n          return data + ' u.';\n        }),\n      // DTColumnBuilder.newColumn('cost')\n      //   .withTitle($filter('translate')('INVENTORY_DASHBOARD.COST')),\n      // DTColumnBuilder.newColumn('margin')\n      //   .withTitle($filter('translate')('INVENTORY_DASHBOARD.MARGIN'))\n    ];\n\n    function dtInitComplete(_, data){\n      if ((data.data.length) === 0) {\n        vm.performingAnalysis = true;\n        api.inventories.productVariants.save({\n          option: 'perform-sales-analysis'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_202_ACCEPTED) {\n            vm.summaryInterval = $interval(function() {\n              vm.dtInstanceABCAnalysisSummary.reloadData(function(result) {\n                if (result.data.length) {\n                  vm.performingAnalysis = false;\n                  $interval.cancel(vm.summaryInterval);\n                }\n              }, false);\n            }, SUMMARY_INTERVAL_MS);\n          }\n        });\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('ndInvoiceIntegrationAppDetailsCardController', ndInvoiceIntegrationAppDetailsCardController)\n    .directive('ndInvoiceIntegrationAppDetailsCard', ndInvoiceIntegrationAppDetailsCard);\n\n  /** @ngInject */\n  function ndInvoiceIntegrationAppDetailsCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/main/apps/accounting/views/invoice/directives/nd-invoice-integration-app-details-card.html',\n      scope: {\n        holdedInvoiceData: '=',\n        kubibaiInvoiceData: '=',\n        eposItalyInvoiceData: '='\n      },\n      controller: 'ndInvoiceIntegrationAppDetailsCardController'\n    };\n  }\n\n  /** @ngInject */\n  function ndInvoiceIntegrationAppDetailsCardController($scope,\n                                                        $filter,\n                                                        $mdDialog) {\n    if ($scope.holdedInvoiceData && $scope.holdedInvoiceData.holded_installed_integration_app) {\n      $scope.integrationApp = $scope.holdedInvoiceData.holded_installed_integration_app.integration_app;\n      $scope.updatedAt = new Date($scope.holdedInvoiceData.updated_at);\n    } else if ($scope.kubibaiInvoiceData && $scope.kubibaiInvoiceData.kubibai_installed_integration_app) {\n      $scope.integrationApp = $scope.kubibaiInvoiceData.kubibai_installed_integration_app.integration_app;\n      $scope.updatedAt = new Date($scope.kubibaiInvoiceData.updated_at);\n    } else if ($scope.eposItalyInvoiceData && $scope.eposItalyInvoiceData.epos_italy_installed_integration_app) {\n      $scope.integrationApp = $scope.eposItalyInvoiceData.epos_italy_installed_integration_app.integration_app;\n      $scope.integrationApp.type = $filter('translate')('APPS.' + $scope.integrationApp.type.toUpperCase() + '_NAME');\n      $scope.updatedAt = new Date($scope.eposItalyInvoiceData.updated_at);\n    } else {\n      $scope.integrationApp = null;\n      $scope.updatedAt = null;\n    }\n\n    // Methods\n    $scope.showErrors = showErrors;\n\n    // Functions\n    function showErrors(invoiceData) {\n      if (invoiceData.errors) {\n        $mdDialog.show(\n          $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('INVOICE_DATA.ERROR_LOG'))\n            .htmlContent(invoiceData.errors)\n            .multiple(true)\n            .ok($filter('translate')('GENERAL.CLOSE')));\n      }\n    }\n  }\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.account')\n      .controller('UpgradePlanController', UpgradePlanController);\n\n    /** @ngInject */\n    function UpgradePlanController(\n      api,\n      $stateParams,\n      $state,\n      $filter,\n      $mdDialog,\n      Session,\n      FeatureService,\n      HTTP_STATUS\n    ) {\n      var vm = this;\n\n      // Data\n      vm.fetching = false;\n      vm.sourceState = $stateParams.source;\n      vm.addOnId = $stateParams.addOnId;\n      vm.addOnCode = $stateParams.addOnCode;\n      vm.featureData = FeatureService.getFeatureDict(vm.sourceState);\n\n      // Methods\n      vm.purchaseAddOn = purchaseAddOn;\n\n      // Initialize\n      init();\n\n      // Functions\n      function init() {\n        if (!vm.sourceState) {\n          if (!!$stateParams.feature) {\n            vm.featureData = FeatureService.getFeatureDict($stateParams.feature);\n          } else {\n            $state.go('app.analytics.start');\n          }\n        }\n      }\n\n      function purchaseAddOn() {\n        if (vm.addOnId) {\n          vm.fetching = true;\n          api.account.planFeatures.get({\n              id: vm.addOnId,\n              option: 'get-price'\n            },\n            function(results, fn, status) {\n              vm.fetching = false;\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                showAddOnDialog(results.price_excl_tax, results.currency);\n              } else {\n                showNotAvailableDialog();\n              }\n            });\n        }\n      }\n\n      function showAddOnDialog(priceExclTax, currency) {\n        $mdDialog.show({\n          controller: 'PurchaseAddOnDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/account/views/subscriptions/upgrade-plan/dialogs/purchase-add-on-dialog.html',\n          escapeToClose: false,\n          clickOutsideToClose: false,\n          locals: {\n            priceExclTax: priceExclTax,\n            currency: currency,\n            addOnId: vm.addOnId,\n            sourceState: vm.sourceState,\n            sourceStateParams: $stateParams.sourceStateParams\n          }\n        }).then(function() {\n          // Purchased\n        }, function() {\n          // Cancel\n        });\n      }\n\n      function showNotAvailableDialog() {\n        $mdDialog.show(\n          $mdDialog.alert()\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .title($filter('translate')('UPGRADE_PLAN.NOT_AVAILABLE_RIGHT_NOW'))\n            .htmlContent($filter('translate')('UPGRADE_PLAN.NOT_AVAILABLE_RIGHT_NOW_MSG'))\n            .ok($filter('translate')('GENERAL.CLOSE'))\n        );\n      }\n    }\n  }\n)();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.account')\n      .controller('SubscriptionController', SubscriptionController);\n\n    /** @ngInject */\n    function SubscriptionController(\n      $mdDialog,\n      $mdToast,\n      $filter,\n      $scope,\n      $state,\n      $stateParams,\n      $translate,\n      $http,\n      $sce,\n      $compile,\n      $timeout,\n      api,\n      PlansData,\n      Coupon,\n      ContractedPlanLimit,\n      ContractedAddOn,\n      BillingPortalData,\n      Subscription,\n      Session,\n      SUBSCRIPTION_PERIOD,\n      PAYMENT_SERVICE_TYPES,\n      SUBSCRIPTION_EXCEED_LIMIT_POLICY,\n      PLAN_LIMIT_EXCEED_LIMIT_POLICIES,\n      HTTP_STATUS,\n      ERROR_CODES\n    ) {\n      var vm = this;\n\n      // Const\n      vm.TAX_NAME = 'IVA - España (21 %)';\n      vm.TAX_RATE = 21;\n\n      // Data\n      vm.editing = false;\n      vm.saving = false;\n      vm.plans = PlansData.results;\n      vm.hubs = [];\n      vm.contractedAddOns = [];\n      vm.yearlyPeriod = false;\n      vm.subscriptionMessage = '';\n      vm.subscriptionChanged = false;\n      vm.period = SUBSCRIPTION_PERIOD.MONTHLY;\n      vm.periodStr = {};\n      vm.billingPortalUrl = BillingPortalData ? BillingPortalData.url : null;\n      vm.showBillingPortalButton = !Session.company.partner;\n      vm.showSubscriptionDetails = Session.user.isSuperAdmin();\n      vm.showDiscountInputs = Session.user.isSuperAdmin();\n      vm.mockFeatures = {};\n      vm.subscription = Session.company.subscription ? Session.company.subscription : new Subscription();\n      vm.currencyCharacter = '€'; // TODO $filter('currencyCharacter')(vm.subscription.???);\n      vm.billableContractedPlanLimits = [];\n\n      // Methods\n      vm.periodChanged = periodChanged;\n      vm.getPlansByHub = getPlansByHub;\n      vm.planClicked = planClicked;\n      vm.getPlanName = getPlanName;\n      vm.getContractedPlanLimits = getContractedPlanLimits;\n      vm.getBillabledPlanLimits = getBillabledPlanLimits;\n      vm.onAddOnChanged = onAddOnChanged;\n      vm.getSelectedPlans = getSelectedPlans;\n      vm.getPlanPrice = getPlanPrice;\n      vm.getPlanDiscountAmount = getPlanDiscountAmount;\n      vm.saveSubscription = saveSubscription;\n      vm.getSubscriptionSubtotal = getSubscriptionSubtotal;\n      vm.getSubscriptionTaxes = getSubscriptionTaxes;\n      vm.getSubscriptionCommercialDiscount = getSubscriptionCommercialDiscount;\n      vm.getSubscriptionTotal = getSubscriptionTotal;\n      vm.formatPriceWithCurrencyAndPeriod = formatPriceWithCurrencyAndPeriod;\n      vm.setEditing = setEditing;\n\n      // Initialize\n      init();\n\n      // Functions\n      function init() {\n        var order = ['START', 'GROW', 'PRO'];\n        vm.plans = vm.plans.sort(function(a, b) {\n          return order.indexOf(a.code) - order.indexOf(b.code);\n        });\n\n        $translate.onReady(function() {\n          var paymentServiceType = PAYMENT_SERVICE_TYPES.DEFAULT;\n          if (vm.subscription && vm.subscription.payment_service_type) {\n            paymentServiceType = vm.subscription.payment_service_type;\n          }\n          vm.subscriptionMessage = $filter('translate')('SUBSCRIPTION.YOUR_SUBSCRIPTION_DETAILS_MSG_' + PAYMENT_SERVICE_TYPES[paymentServiceType]);\n          vm.periodStr[SUBSCRIPTION_PERIOD.MONTHLY] = $filter('translate')('SUBSCRIPTION.MONTH');\n          vm.periodStr[SUBSCRIPTION_PERIOD.YEARLY] = $filter('translate')('SUBSCRIPTION.YEAR');\n        });\n        vm.yearlyPeriod = vm.subscription ? vm.subscription.isYearly() : false;\n        vm.subscriptionChanged = vm.subscription ? vm.subscription.has_changed : false;\n\n        if ($stateParams.updated === 'true') {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('SUBSCRIPTION.SUBSCRIPTION_UPDATED_SUCCESSFULLY'))\n            .position('top right'));\n        }\n\n        initHubs();\n        initMockFeatures();\n        mapCurrentSubscription();\n        getContractedPlanLimitsBySelectedPlans();\n      }\n\n      function initHubs() {\n        var tempHubs = {};\n        vm.plans.forEach(function(plan) {\n          if (!tempHubs[plan.hub.id]) {\n            tempHubs[plan.hub.id] = plan.hub;\n          }\n        });\n        vm.hubs = Object.values(tempHubs).sort(function(a, b) {\n          return a.order - b.order;\n        });\n      }\n\n      function initMockFeatures() {\n        $http.get('assets/data/mock_features.8995959b.json').then(function(response) {\n          if (response.data) {\n            vm.mockFeatures = response.data;\n            drawPlanFeatureTemplate();\n            initContractedAddOns();\n          }\n        });\n      }\n\n      function mapCurrentSubscription() {\n        vm.plans.forEach(function(plan) {\n          var contractedPlan = vm.subscription ? vm.subscription.getContractedPlan(plan.id) : null;\n          plan.coupon = new Coupon();\n          if (contractedPlan) {\n            plan.selected = true;\n            plan.coupon = new Coupon(contractedPlan.coupon);\n          }\n        });\n      }\n\n      function periodChanged() {\n        if (!vm.editing) {\n          return;\n        }\n        if (vm.yearlyPeriod) {\n          vm.period = SUBSCRIPTION_PERIOD.YEARLY;\n        } else if (!vm.yearlyPeriod) {\n          vm.period = SUBSCRIPTION_PERIOD.MONTHLY;\n        }\n        drawPlanFeatureTemplate();\n      }\n\n      function getPlansByHub(hubId) {\n        return vm.plans.filter(function(plan) {\n          return plan.hub.id === hubId;\n        }).sort(function(a, b) {\n          return a.order - b.order;\n        });\n      }\n\n      function planClicked(plan) {\n        if (!vm.editing) {\n          return;\n        }\n        if (vm.saving) {\n          return;\n        }\n        togglePlan(plan);\n      }\n\n      function togglePlan(plan) {\n        if (plan.hub.code === 'CORE_HUB' && plan.selected) {\n          return;\n        }\n        plan.selected = !plan.selected;\n        if (plan.selected) {\n          vm.plans.filter(function(p) {\n            return p.hub.code === plan.hub.code && p.id !== plan.id;\n          }).forEach(function(p) {\n            p.selected = false;\n          });\n        }\n        getContractedPlanLimitsBySelectedPlans();\n        initContractedAddOns();\n      }\n\n      function getContractedPlanLimitsBySelectedPlans() {\n        var selectedPlanIds = vm.plans.filter(function(p) {\n          return p.selected;\n        }).map(function(p) {\n          return p.id;\n        });\n        if ((!selectedPlanIds || selectedPlanIds.length === 0) && vm.subscription && vm.subscription.contracted_plans) {\n          selectedPlanIds = vm.subscription.contracted_plans.map(function(cp) {\n            return cp.plan.id;\n          });\n        }\n\n        api.account.contractedPlanLimits.save({\n          id: 'get-billable',\n          plan_ids: selectedPlanIds\n        }, function(results) {\n          var items = results && results.limits ? results.limits : results;\n          vm.billableContractedPlanLimits = (items || []).map(function(item) {\n            return new ContractedPlanLimit(item);\n          });\n        }, function() {\n          vm.billableContractedPlanLimits = [];\n        });\n      }\n\n      function getPlanName(plan) {\n        if (plan.code.indexOf('STARTER') !== -1) {\n          return 'Starter';\n        }\n        if (plan.code.indexOf('GROW') !== -1) {\n          return 'Grow';\n        }\n        if (plan.code.indexOf('PRO') !== -1) {\n          return 'Pro';\n        }\n      }\n\n      function drawPlanFeatureTemplate(plan, feature) {\n        setTimeout(function() {\n\n          vm.hubs.forEach(function(hub) {\n            vm.getPlansByHub(hub.id).forEach(function(plan) {\n              var hubFeatures = (vm.mockFeatures && vm.mockFeatures[hub.name]) ? vm.mockFeatures[hub.name] : [];\n              hubFeatures.forEach(function(feature) {\n                if (feature.type !== 'feature') {\n                  return;\n                }\n                var element = angular.element(document.getElementById('template-' + plan.id + '-' + feature.name));\n                if (element.length === 0) {\n                  return;\n                }\n\n                var template = '<div layout=\"row\" layout-align=\"start center\" class=\"plan-feature\">';\n                var planLimit = plan.getPlanLimit(feature.name);\n                if (planLimit) {\n                  template += getPlanLimitTemplate(hub, plan, feature, planLimit);\n                } else {\n                  var planFeature = plan.getPlanFeatureByFeatureCode(feature.name, true);\n                  if (planFeature) {\n                    template += getAddOnTemplate(hub, plan, feature, planFeature);\n                  } else {\n                    var planMock = (vm.mockFeatures && vm.mockFeatures[plan.code]) ? vm.mockFeatures[plan.code] : {};\n                    var available = !!planMock[feature.name];\n                    template += available ? getFeatureAvailableTemplate() : getFeatureLockedTemplate();\n                  }\n                }\n\n                template += '</div>';\n                element.html(template);\n                $compile(element.contents())($scope);\n              });\n            });\n          });\n        });\n      }\n\n      function getFeatureAvailableTemplate() {\n        return '<md-icon md-font-icon=\"icon-check\" class=\"md-primary s20\"></md-icon>';\n      }\n\n      function getFeatureLockedTemplate() {\n        return '<md-icon md-font-icon=\"icon-lock-outline\" class=\"secondary-text s20\"></md-icon>';\n      }\n\n      function getPlanLimitTemplate(hub, plan, feature, planLimit) {\n        var template = '<div layout=\"row\" layout-align=\"start center\">';\n\n        // Custom limits that are composed with multiple limits and the ui need to be customized\n        if (plan.code === 'RETAIL_HUB_STARTER_2025' && feature.name === 'RETAIL_STORE_LIMIT') {\n          template += $filter('translate')('SUBSCRIPTION.ONE_STORE_INCLUDED');\n        } else if (plan.code === 'RETAIL_HUB_GROW_2025' && feature.name === 'RETAIL_STORE_LIMIT') {\n          template += '<div layout=\"column\" layout-align=\"center center\">';\n          template += '<span>' + $filter('translate')('SUBSCRIPTION.ONE_STORE_INCLUDED') + '</span>';\n          template += '<span class=\"secondary-text limit-details\">' + $filter('translate')('FEATURES_LIMITS_AND_ADD_ONS.RETAIL_STORE_LIMIT_EXTRA', { formattedPrice: formatPriceWithCurrencyAndPeriod(planLimit.getPrice(vm.period)) }) + '</span>';\n          template += '</div>';\n        } else if (plan.code === 'RETAIL_HUB_STARTER_2025' && feature.name === 'REGISTER_LIMIT') {\n          template += $filter('translate')('SUBSCRIPTION.ONE_REGISTER_INCLUDED');\n        } else if (plan.code === 'RETAIL_HUB_GROW_2025' && feature.name === 'REGISTER_LIMIT') {\n          template += '<div layout=\"column\" layout-align=\"center center\">';\n          template += '<span>' + $filter('translate')('SUBSCRIPTION.ONE_REGISTER_INCLUDED') + '</span>';\n          template += '<span class=\"secondary-text limit-details\">' + $filter('translate')('FEATURES_LIMITS_AND_ADD_ONS.REGISTER_LIMIT_EXTRA', { formattedPrice: formatPriceWithCurrencyAndPeriod(planLimit.getPrice(vm.period)) }) + '</span>';\n          template += '</div>';\n        } else if (plan.code === 'CORE_HUB_STARTER_2025' && feature.name === 'USER_LIMIT') {\n          template += $filter('translate')('SUBSCRIPTION.ONE_USER_INCLUDED');\n        } else if ((plan.code === 'CORE_HUB_GROW_2025' || plan.code === 'CORE_HUB_PRO_2025') && feature.name === 'USER_LIMIT') {\n          template += '<div layout=\"column\" layout-align=\"center center\">';\n          template += '<span>' + $filter('translate')('SUBSCRIPTION.N_USERS_INCLUDED', { n: planLimit.included_amount }) + '</span>';\n          template += '<span class=\"secondary-text limit-details\">' + $filter('translate')('FEATURES_LIMITS_AND_ADD_ONS.USER_LIMIT_EXTRA', { formattedPrice: formatPriceWithCurrencyAndPeriod(planLimit.getPrice(vm.period)) }) + '</span>';\n          template += '</div>';\n        }\n        // End of custom limits\n        else {\n          if (planLimit.included_amount) {\n            var amountStr = '';\n            if (feature.name === 'WAREHOUSE_LIMIT') {\n              amountStr = planLimit.included_amount === 1 ? $filter('translate')('SUBSCRIPTION.ONE_WAREHOUSE_INCLUDED') : $filter('translate')('SUBSCRIPTION.N_WAREHOUSE_INCLUDED', { n: planLimit.included_amount });\n            } else {\n              amountStr = planLimit.included_amount === 1 ? $filter('translate')('SUBSCRIPTION.INCLUDED_SINGULAR') : $filter('translate')('SUBSCRIPTION.INCLUDED_PLURAL', { n: planLimit.included_amount });\n            }\n            template += '<div>' + amountStr + '</div>';\n          } else if (planLimit.included_amount === 0 && planLimit.exceed_limit_policy === PLAN_LIMIT_EXCEED_LIMIT_POLICIES.BLOCK_CREATION) {\n            template += getFeatureLockedTemplate();\n          } else {\n            // Limits that act like add-ons\n            template += '<md-icon md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/puzzle-outline.13b1b68b.svg\" class=\"s20 mr-5\"></md-icon>';\n            template += formatPriceWithCurrencyAndPeriod(planLimit.getPrice(vm.period));\n          }\n        }\n        template += '</div>';\n        return template;\n      }\n\n      function formatPriceWithCurrencyAndPeriod(price) {\n        return $filter('price')(price) + vm.currencyCharacter + '/' + vm.periodStr[vm.period];\n      }\n\n      function getAddOnTemplate(hub, plan, feature, planFeature) {\n        var price = planFeature.getPrice(vm.period);\n        var template = '<md-icon md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/puzzle-outline.13b1b68b.svg\" class=\"s20 mr-5\"></md-icon>';\n        template += formatPriceWithCurrencyAndPeriod(price);\n        return template;\n      }\n\n      function getBillabledPlanLimits() {\n        if (vm.billableContractedPlanLimits && vm.billableContractedPlanLimits.length) {\n          return vm.billableContractedPlanLimits;\n        }\n        return [];\n      }\n\n      function getContractedPlanLimits() {\n        if (!vm.subscription) {\n          return [];\n        }\n        var contractedPlanLimits = [];\n        vm.subscription.contracted_plans.forEach(function(contractedPlan) {\n          contractedPlanLimits = contractedPlanLimits.concat(contractedPlan.contracted_plan_limits);\n        });\n        return contractedPlanLimits;\n      }\n\n      function initContractedAddOns() {\n        vm.contractedAddOns = [];\n\n        vm.plans.filter(function(plan) {\n          return plan.selected;\n        }).forEach(function(plan) {\n          plan.plan_features.filter(function(planFeature) {\n            return planFeature.is_add_on;\n          }).forEach(function(planFeature) {\n            vm.contractedAddOns.push(new ContractedAddOn({\n              plan_feature: planFeature\n            }));\n          });\n        });\n\n        // Mark the already contracted add-ons\n        if (vm.subscription) {\n          vm.subscription.contracted_plans.forEach(function(contractedPlan) {\n            contractedPlan.contracted_plan_add_ons.forEach(function(contractedAddOn) {\n              var index = vm.contractedAddOns.findIndex(function(addOn) {\n                return addOn.plan_feature.id === contractedAddOn.plan_feature.id;\n              });\n              if (index !== -1) {\n                vm.contractedAddOns[index].selected = true;\n                vm.contractedAddOns[index].coupon = new Coupon(contractedAddOn.coupon);\n              }\n            });\n          });\n        }\n      }\n\n      function onAddOnChanged(addOn) {\n        if (!vm.editing) {\n          return;\n        }\n        if (addOn.selected && !addOn.coupon) {\n          addOn.coupon = new Coupon();\n        }\n      }\n\n      function getSelectedPlans() {\n        return vm.plans.filter(function(plan) {\n          return plan.selected;\n        });\n      }\n\n      function getPlanPrice(plan) {\n        // We cannot use the Plan method because this plan is a mix between a Plan and a ContractedPlan\n        var price = plan.getPrice(vm.period);\n        if (!plan.coupon) {\n          return price;\n        }\n        var discount = plan.coupon.getDiscountAmount(price) || 0;\n        return price - discount;\n      }\n\n      function getPlanDiscountAmount(plan) {\n        // We cannot use the Plan method because this plan is a mix between a Plan and a ContractedPlan\n        if (!plan.coupon) {\n          return;\n        }\n        return plan.coupon.getDiscountAmount(plan.getPrice(vm.period));\n      }\n\n      function saveSubscription(forceSafe) {\n        if (!vm.editing) {\n          return;\n        }\n        if (vm.saving) {\n          return;\n        }\n        if (!forceSafe) {\n          showConfirmationDialog();\n          return;\n        }\n        vm.saving = true;\n        api.account.subscription.save({\n          option: 'apply',\n          period: vm.period,\n          plans: vm.plans.filter(function(plan) {\n            return plan.selected;\n          }).map(function(plan) {\n            var json = plan.toJson();\n            var planAddOns = vm.contractedAddOns\n              .filter(function(addOn) {\n                return addOn.selected && addOn.plan_feature && Array.isArray(plan.plan_features) &&\n                  plan.plan_features.some(function(pf) {\n                    return pf.id === addOn.plan_feature.id;\n                  });\n              })\n              .map(function(addOn) {\n                return addOn.toApplyJson();\n              });\n            json.add_ons = planAddOns;\n            return json;\n          }),\n          contracted_plan_limits: vm.getBillabledPlanLimits().map(function(contractedPlanLimit) {\n            return contractedPlanLimit.toJson();\n          }),\n          coupons: (vm.subscription && vm.subscription.coupon && vm.subscription.coupon.discount_value)\n            ? [vm.subscription.coupon.toJson()]\n            : []\n        }, function(response, callback, status) {\n          vm.saving = false;\n          if (status === HTTP_STATUS.HTTP_409_CONFLICT && response.code === ERROR_CODES.ERROR_14006_PLAN_DOWNGRADE_NOT_VALID) {\n            showDowngradeErrorDialog(response.details);\n          } else if (status === HTTP_STATUS.HTTP_200_OK) {\n            showSubscriptionUpdatedDialog();\n          } else {\n            showSubscriptionErrorDialog();\n          }\n        });\n      }\n\n      function showConfirmationDialog() {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SUBSCRIPTION.SAVE_SUBSCRIPTION_TITLE'))\n          .textContent($filter('translate')('SUBSCRIPTION.SAVE_SUBSCRIPTION_BODY'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('SUBSCRIPTION.SAVE_SUBSCRIPTION_TITLE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          saveSubscription(true);\n        }, function() {\n        });\n      }\n\n      function showDowngradeErrorDialog(details) {\n        var content = '';\n        content += '<div layout=\"column\">';\n        content += '<div>' + $filter('translate')('SUBSCRIPTION.DOWNGRADE_ERROR_MESSAGE') + '</div>';\n        if (details && details.length > 0) {\n          content += '<ul>';\n          details.forEach(function(detail) {\n            var included = detail.included_amount;\n            var current = detail.current_amount;\n            if (detail.code === 'POS_ORDER_SUBTOTAL_LIMIT') {\n              included = $filter('price')(included);\n              current = $filter('price')(current);\n            }\n            var formattedDetail = $filter('translate')('SUBSCRIPTION.DOWNGRADE_ERROR_BLOCKED_' + detail.code, {\n              included: included,\n              current: current\n            });\n            content += '<li>' + formattedDetail + '</li>';\n          });\n          content += '</ul>';\n        }\n\n        var dialog = $mdDialog.alert()\n          .clickOutsideToClose(false)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('SUBSCRIPTION.DOWNGRADE_ERROR_TITLE'))\n          .htmlContent(content)\n          .ok($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(dialog);\n      }\n\n      function showSubscriptionUpdatedDialog() {\n        var dialog = $mdDialog.alert()\n          .clickOutsideToClose(false)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('SUBSCRIPTION.SUBSCRIPTION_UPDATED_SUCCESFULLY_TITLE'))\n          .textContent($filter('translate')('SUBSCRIPTION.SUBSCRIPTION_UPDATED_SUCCESFULLY_BODY'))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(dialog);\n      }\n\n      function showSubscriptionErrorDialog() {\n        var dialog = $mdDialog.alert()\n          .clickOutsideToClose(false)\n          .parent(angular.element(document.body))\n          .title($filter('translate')('SUBSCRIPTION.SUBSCRIPTION_UPDATED_ERROR_TITLE'))\n          .textContent($filter('translate')('SUBSCRIPTION.SUBSCRIPTION_UPDATED_ERROR_BODY'))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(dialog);\n      }\n\n      function getSubscriptionSubtotal(withDiscounts, withGenericDiscount) {\n        var result = 0;\n        if (withDiscounts) {\n          vm.getSelectedPlans().forEach(function(plan) {\n            result += vm.getPlanPrice(plan);\n          });\n        } else {\n          vm.getSelectedPlans().forEach(function(plan) {\n            result += plan.getPrice(vm.period, true);\n          });\n        }\n        vm.getBillabledPlanLimits().forEach(function(planLimit) {\n          result += planLimit.getTotal(vm.period, withDiscounts);\n        });\n        vm.contractedAddOns.filter(function(addOn) {\n          return addOn.selected;\n        }).forEach(function(addOn) {\n          result += addOn.getPrice(vm.period, withDiscounts);\n        });\n        if (withGenericDiscount) {\n          result -= getSubscriptionGenericDiscount();\n        }\n        return result;\n      }\n\n      function getSubscriptionTaxes() {\n        return getSubscriptionSubtotal(true, true) * (vm.TAX_RATE / 100);\n      }\n\n      function getSubscriptionCommercialDiscount() {\n        var result = 0;\n        vm.getSelectedPlans().forEach(function(plan) {\n          result += vm.getPlanDiscountAmount(plan);\n        });\n        vm.getBillabledPlanLimits().forEach(function(planLimit) {\n          result += planLimit.getDiscountAmount(vm.period);\n        });\n        vm.contractedAddOns.filter(function(addOn) {\n          return addOn.selected;\n        }).forEach(function(addOn) {\n          result += addOn.getDiscountAmount(vm.period);\n        });\n        result += getSubscriptionGenericDiscount();\n        return result;\n      }\n\n      function getSubscriptionGenericDiscount() {\n        if (!vm.subscription || !vm.subscription.coupon || typeof vm.subscription.coupon.getDiscountAmount !== 'function') {\n          return 0;\n        }\n        return vm.subscription.coupon.getDiscountAmount(getSubscriptionSubtotal(true, false));\n      }\n\n      function getSubscriptionTotal() {\n        return getSubscriptionSubtotal(true, true) + getSubscriptionTaxes();\n      }\n\n      function setEditing(value) {\n        if (value && !Session.user.isSuperAdmin()) {\n          return;\n        }\n        vm.editing = value;\n      }\n    }\n  }\n)();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.validate-sign-up-two', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('signup.pages_validate_sign_up_two', {\n      url: '/validate-sign-up-two/:lang/:token',\n      views: {\n        'content@signup': {\n          templateUrl: 'app/main/pages/sign-up/validate-sign-up-two/validate-sign-up-two.html',\n          controller: 'ValidateSignUpTwoController as vm'\n        }\n      },\n      bodyClass: 'signuptwo'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/sign-up');\n  }\n})();\n\n(function () {\n  \"use strict\";\n\n  angular\n    .module(\"app.pages.validate-sign-up-two\")\n    .controller(\"CompleteSignUpTwoDialogController\", CompleteSignUpTwoDialogController);\n\n  /** @ngInject */\n  function CompleteSignUpTwoDialogController(\n    SignupGetResult,\n    SignupGetStatus,\n    ERROR_CODES,\n    api,\n    HTTP_STATUS,\n    SignupTwo,\n    $mdDialog\n  ) {\n    var vm = this;\n\n    // DATA\n    vm.signupGetResult = SignupGetResult;\n    vm.signupGetStatus = SignupGetStatus;\n    vm.signUpLoaded = false;\n    vm.generationInProgress = false;\n    vm.closeDialog = false;\n\n    // METHODS\n    vm.getFormVersion = getFormVersion;\n    vm.getErrorMessage = getErrorMessage;\n    vm.formDoneCallback = formDoneCallback;\n\n    initialize();\n\n    // FUNCTIONS\n    function initialize() {\n      getSignUp();\n    }\n\n    function getSignUp() {\n      if (vm.signupGetStatus === HTTP_STATUS.HTTP_200_OK) {\n        vm.signUp = new SignupTwo(vm.signupGetResult);\n        vm.signUpLoaded = true;\n      } else if (vm.signupGetStatus === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n        if (vm.signupGetResult.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL) {\n          vm.error = ERROR_CODES.ERROR_01003_TOKEN_IS_NULL;\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND) {\n          vm.error = ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND;\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED) {\n          vm.error = ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED;\n          vm.errorVerifiedAt = new Date(vm.signupGetResult.verified_at);\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS) {\n          vm.error = ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS;\n        } else if (vm.signupGetResult.error === ERROR_CODES.ERROR_01010_DATA_GENERATION_IN_PROGRESS) {\n          vm.signUp = new SignupTwo({id: vm.signupGetResult.id});\n          vm.signUpLoaded = true;\n          vm.generationInProgress = true;\n        }\n      } else {\n        vm.error = ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS;\n      }\n    }\n\n    function getErrorMessage() {\n      if (vm.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL || vm.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND) {\n        return 'SIGNUP.URL_NOT_VALID_MSG';\n      }\n      if (vm.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED) {\n        return 'SIGNUP.TOKEN_ALREADY_VALIDATED_MSG';\n      }\n      if (vm.error === ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS) {\n        return 'SIGNUP.ERROR_WHILE_GENERATING_DATA';\n      }\n      /*if (vm.error === ERROR_CODES.ERROR_01010_DATA_GENERATION_IN_PROGRESS) {\n        return 'SIGNUP.THERE_IS_A_VALIDATION_IN_PROGRESS';\n      }*/\n      if (vm.error === ERROR_CODES.ERROR_01011_DATA_ALREADY_GENERATED) {\n        return 'SIGNUP.THIS_SIGNUP_ALREADY_GENERATED';\n      }\n      return '';\n    }\n\n    function getFormVersion() {\n      return vm.signUp.form_version;\n    }\n\n    function formDoneCallback() {\n      $mdDialog.hide({signupFinished: vm.signUp.finished});\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.wholesale')\n    .controller('SalesController', SalesController);\n\n  /** @ngInject */\n  function SalesController($scope, $rootScope, $q, $mdDateRangePicker, $state, $mdSidenav, $timeout, $filter,\n                           api, Session, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate,\n                           WarehousesData, SeasonsData, INVOICE_TYPES, HTTP_STATUS, UiGridService) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.TYPE_CUSTOMER = 'customer';\n    vm.TYPE_SALES_AGENT = 'agent';\n\n    // Data\n    vm.status = null;\n    vm.currentNavItem = getCurrentNavItem();\n    vm.totalsByStatus = {};\n    vm.loading = false;\n\n    // Filters data\n    vm.orderStatuses = [];\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.warehouses = WarehousesData.results;\n    vm.seasons = SeasonsData.results;\n    vm.salesTypes = [];\n    vm.showDateFilter = false;\n    vm.customerSearchText = '';\n    vm.selectedCustomer = null;\n    vm.salesAgentSearchText = '';\n    vm.filterSalesAgent = null;\n    vm.filterSalesAgentInstance = null;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.filterDates = filterDates;\n    vm.customerQuerySearch = customerQuerySearch;\n    vm.enableBarcodeListener = enableBarcodeListener;\n    vm.disableBarcodeListener = disableBarcodeListener;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.salesAgentQuerySearch = salesAgentQuerySearch;\n    vm.selectSalesAgent = selectSalesAgent;\n    vm.getSelectedSalesAgentName = getSelectedSalesAgentName;\n    vm.handleNavClick = handleNavClick;\n    vm.getCurrentNavItem = getCurrentNavItem;\n    vm.reloadSales = reloadSales;\n    vm.updateMultiselectFilters = updateMultiselectFilters;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          type: 'all',\n          salesAgents: [],\n          customers: [],\n          brands: [],\n          categories: [],\n          subcategories: [],\n          seasons: [],\n          statuses: [],\n          targetWarehouses: [],\n          sourceWarehouses: [],\n          providers: [],\n          startDate: null,\n          endDate: null\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      }\n\n      vm.orderStatuses = Object.keys(SALE_ORDER_STATUSES).map(function(key) {\n        return { code: key, name: SALE_ORDER_STATUSES[key] };\n      });\n\n      vm.salesTypes = [{\n        value: 'all', name: 'GENERAL.ALL'\n      }, {\n        value: 'sales', name: 'SALES.SALES'\n      }, {\n        value: 'presales', name: 'PRESALES.PRESALES'\n      }];\n\n      getTotals();\n    }\n\n    function filterDates() {\n      vm.status.filters.startDate = null;\n      vm.status.filters.endDate = null;\n      $mdDateRangePicker.show({\n        model: {\n          dateStart: vm.status.filters.startDate, dateEnd: vm.status.filters.endDate\n        }\n      }).then(function(result) {\n        vm.status.filters.startDate = result.dateStart;\n        vm.status.filters.endDate = result.dateEnd;\n        reloadSales();\n      });\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function enableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = true;\n    }\n\n    function disableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = false;\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      if (vm.currentNavItem == 'all') {\n        result += vm.status.filters.statuses && vm.status.filters.statuses.length > 0 ? 1 : 0;\n      }\n      result += vm.status.filters.sourceWarehouses && vm.status.filters.sourceWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.targetWarehouses && vm.status.filters.targetWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.categories && vm.status.filters.categories.length > 0 ? 1 : 0;\n      result += vm.status.filters.subcategories && vm.status.filters.subcategories.length > 0 ? 1 : 0;\n      result += vm.status.filters.brands && vm.status.filters.brands.length > 0 ? 1 : 0;\n      result += vm.status.filters.seasons && vm.status.filters.seasons.length > 0 ? 1 : 0;\n      result += vm.status.filters.customers && vm.status.filters.customers.length > 0 ? 1 : 0;\n      result += vm.status.filters.salesAgents && vm.status.filters.salesAgents.length > 0 ? 1 : 0;\n      result += vm.status.filters.type && vm.status.filters.type != 'all' ? 1 : 0;\n      result += (vm.status.filters.startDate || vm.status.filters.endDate) ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      if (vm.currentNavItem === 'all') {\n        vm.status.filters.statuses = [];\n      }\n      vm.status.filters.type = 'all';\n      vm.status.filters.targetWarehouses = [];\n      vm.status.filters.sourceWarehouses = [];\n      vm.status.filters.categories = [];\n      vm.status.filters.subcategories = [];\n      vm.status.filters.brands = [];\n      vm.status.filters.seasons = [];\n      vm.status.filters.customers = [];\n      vm.status.filters.salesAgents = [];\n      vm.status.filters.startDate = null;\n      vm.status.filters.endDate = null;\n      vm.salesAgentSearchText = '';\n      vm.filterSalesAgent = null;\n      vm.customerSearchText = null;\n      vm.selectedCustomer = null;\n      reloadSales();\n    }\n\n    function customerQuerySearch() {\n      var deferred = $q.defer();\n      vm.customerSearchText = vm.customerSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get({\n        search: vm.customerSearchText\n      }, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n      return deferred.promise;\n    }\n\n    function salesAgentQuerySearch() {\n      var deferred = $q.defer();\n\n      vm.salesAgentSearchText = vm.salesAgentSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.users.get({\n        search: vm.salesAgentSearchText\n      }, function(results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n      return deferred.promise;\n    }\n\n    function selectSalesAgent(salesAgent) {\n      if (typeof salesAgent === 'object') {\n        if (salesAgent) {\n          vm.filterSalesAgentInstance = salesAgent;\n          vm.filterSalesAgent = salesAgent.id;\n        } else {\n          vm.filterSalesAgentInstance = null;\n          vm.filterSalesAgent = null;\n        }\n      }\n    }\n\n    function getSelectedSalesAgentName() {\n      if (vm.filterSalesAgentInstance) {\n        return vm.filterSalesAgentInstance.first_name + ' ' + vm.filterSalesAgentInstance.last_name;\n      }\n      return null;\n    }\n\n    function reloadSales() {\n      if (vm.reloadSalesTimeout) {\n        $timeout.cancel(vm.reloadSalesTimeout);\n      }\n      vm.reloadSalesTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n        getTotals();\n      }, 1000);\n    }\n\n    function handleNavClick(option) {\n      vm.loading = true;\n      vm.currentNavItem = option;\n      if (vm.currentNavItem !== 'all') {\n        // This is because to simplify we aggregated some status\n        if (vm.currentNavItem === '1') {\n          vm.status.filters.statuses = ['1,11'];\n        } else if (vm.currentNavItem === '2') {\n          vm.status.filters.statuses = ['2,3'];\n        } else if (vm.currentNavItem === '4') {\n          vm.status.filters.statuses = ['4,5'];\n        } else if (vm.currentNavItem === '7') {\n          vm.status.filters.statuses = ['7,8'];\n        } else {\n          vm.status.filters.statuses = [vm.currentNavItem];\n        }\n      } else {\n        vm.status.filters.statuses = [];\n      }\n\n      localStorage.setItem(Session.company.id + '::' + $state.current.name + '::SalesController::currentNavItem', option);\n      reloadSales();\n    }\n\n    function getCurrentNavItem() {\n      if (localStorage.getItem(Session.company.id + '::' + $state.current.name + '::SalesController::currentNavItem')) {\n        return localStorage.getItem(Session.company.id + '::' + $state.current.name + '::SalesController::currentNavItem');\n      }\n      return 1;\n    }\n\n    function getTotals() {\n      vm.loading = true;\n      api.inventories.saleOrders.list({\n        option: 'totals'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.totalsByStatus = {};\n          response.status_counts.forEach(function(counter) {\n            vm.totalsByStatus[counter['status']] = counter['count'];\n          });\n          // This is because to simplify we aggregated some status\n          vm.totalsByStatus['1'] = (parseInt(vm.totalsByStatus['1']) || 0) + (parseInt(vm.totalsByStatus['11']) || 0);\n          vm.totalsByStatus['2'] = (parseInt(vm.totalsByStatus['2']) || 0) + (parseInt(vm.totalsByStatus['3']) || 0);\n          vm.totalsByStatus['4'] = (parseInt(vm.totalsByStatus['4']) || 0) + (parseInt(vm.totalsByStatus['5']) || 0);\n          vm.totalsByStatus['7'] = (parseInt(vm.totalsByStatus['7']) || 0) + (parseInt(vm.totalsByStatus['8']) || 0);\n        }\n        vm.loading = false;\n      });\n    }\n\n    function updateMultiselectFilters(filter) {\n      if (filter === vm.TYPE_CUSTOMER && vm.selectedCustomer) {\n        vm.status.filters.customers.push(angular.copy(vm.selectedCustomer));\n        vm.selectedCustomer = null;\n        vm.customerSearchText = '';\n      } else if (filter === vm.TYPE_SALES_AGENT && vm.selectedSalesAgent) {\n        vm.status.filters.salesAgents.push(angular.copy(vm.selectedSalesAgent));\n        vm.selectedSalesAgent = null;\n        vm.salesAgentSearchText = '';\n      }\n      reloadSales();\n      getTotals();\n    }\n\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleSaleController', WholesaleSaleController);\n\n  /** @ngInject */\n  function WholesaleSaleController($scope, SALE_ORDER_STATUS_COLORS, $mdSidenav, $stateParams, $state, $mdMedia,\n                                   $mdDialog, $mdToast, $filter, api, SALE_ORDER_STATUSES, SALE_ORDER_STATUSES_REVERSE,\n                                   Session, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.isNewSale = !$state.params.id;\n    vm.isPreorderPage = $state.params.presaleId;\n    vm.sale = null;\n    vm.currentNavItem = '';\n    vm.pendingBarcodes = [];\n    vm.orderStatusColors = SALE_ORDER_STATUS_COLORS;\n    vm.saleOrderStatus = SALE_ORDER_STATUSES_REVERSE;\n\n    // Methods\n    vm.getStatusLabel = getStatusLabel;\n    vm.deleteSale = deleteSale;\n    vm.toggleSidenav = toggleSidenav;\n    vm.cancelSale = cancelSale;\n    vm.finish = finishSaleDialog;\n    vm.getStatusColorClass = getStatusColorClass;\n\n    initialize();\n\n    function initialize() {\n      $scope.changeOrderStatus = $scope.$on('changeOrderStatus::orderType', function(event, data) {\n        changeOrderStatus(data.status);\n      });\n\n      // Unregister Events\n      $scope.$on('$destroy', function() {\n        $scope.changeOrderStatus();\n      });\n    }\n\n    function changeOrderStatus(status) {\n      vm.sale.status = status;\n    }\n\n    function getStatusLabel() {\n      return $filter('translate')('SALES.' + SALE_ORDER_STATUSES[vm.sale.status]);\n    }\n\n    function getStatusColorClass() {\n      return vm.orderStatusColors[vm.sale.status];\n    }\n\n\n    function toggleSidenav(sidenavId) {\n      if (!$mdMedia('gt-md')) {\n        $mdSidenav(sidenavId).toggle();\n      } else {\n        vm.barcodeLogOpened = !vm.barcodeLogOpened;\n      }\n    }\n\n    function deleteSale() {\n      if (Session.hasPermission('wholesale.sales.delete')) {\n        api.inventories.saleOrders.delete(\n          { id: vm.sale.id },\n          function(response) {\n            $state.go('app.wholesale.sales');\n          }\n        );\n      }\n    }\n\n    function cancelSale() {\n      if (Session.hasPermission('wholesale.sales.delete')) {\n        api.inventories.saleOrderStatus.update(\n          { id: vm.sale.id, option: 'cancel' },\n          function(response) {\n            $state.go('app.wholesale.sales');\n          }\n        );\n      }\n    }\n\n    function finishSaleDialog() {\n      if (Session.hasPermission('inventory.purchases.delete')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SALE.FINISH_SALE_DIALOG_TITLE'))\n          .htmlContent($filter('translate')('SALE.FINISH_SALE_DIALOG_BODY'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('SALE.FINISH'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          finishSale();\n        });\n      }\n    }\n\n    function finishSale() {\n\n      if (vm.changingStatus){\n        return;\n      }\n\n      vm.changingStatus = true;\n\n      api.inventories.saleOrderStatus.update({\n        id: vm.sale.id, option: 'finish'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('SALE.SALE_FINISHED'))\n            .position('top right'));\n\n          changeOrderStatus(vm.saleOrderStatus['SALE_ORDER_STATUS_SHIPPED']);\n        } else {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n            .position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesalePresalesController', WholesalePresalesController);\n\n  /** @ngInject */\n  function WholesalePresalesController($scope, $state, $timeout, $filter, $mdSidenav, $compile, $mdDialog, api,\n                                       Session, DTColumnBuilder, BrandsData, SeasonsData, $translate, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.brands = {};\n    vm.seasons = {};\n    vm.filtersNotifications = 0;\n\n    BrandsData.results.forEach(function(brand) {\n      vm.brands[brand.id] = brand;\n    });\n    SeasonsData.results.forEach(function(season) {\n      vm.seasons[season.id] = season;\n    });\n\n    vm.status = {\n      filters: {\n        filterBrands: '',\n        filterSeasons: ''\n      }\n    };\n    vm.storageLabel = 'PresalesWholesale::filters';\n\n\n    vm.brandsList = BrandsData.results;\n    vm.seasonsList = SeasonsData.results;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.wholesale.presales.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      order: [[0, 'desc']],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/wholesale/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('PRESALES.PRESALE_COLLECTION'))\n        .renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.wholesale.presales.presale.details({idPresale:' + full.id + '})\">' + full.code + '</a>';\n        }),\n      DTColumnBuilder.newColumn('brand__name').withTitle($filter('translate')('PRODUCT.BRAND'))\n        .renderWith(function(data, type, full) {\n          return full.brand_name;\n        }),\n      DTColumnBuilder.newColumn('season__name').withTitle($filter('translate')('PRODUCT.SEASON'))\n        .renderWith(function(data, type, full) {\n          return full.season_name;\n        }),\n      DTColumnBuilder.newColumn('total_products').withTitle($filter('translate')('PRODUCTS.PRODUCTS')).notSortable(),\n      DTColumnBuilder.newColumn('total_orders').withTitle($filter('translate')('PRESALES.PRESALES')).notSortable()\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.filterByColumn = filterByColumn;\n    vm.newCollection = newCollection;\n    vm.toggleSidenav = toggleSidenav;\n    vm.clearFilter = clearFilter;\n    vm.updateFilterNotifications = updateFilterNotifications;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      $scope.$watch('vm.status.filters.filterBrands', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterBrands, 1);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n\n      $scope.$watch('vm.status.filters.filterSeasons', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterSeasons, 2);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n      loadStatus();\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function clearFilter() {\n      vm.status.filters.filterBrands = '';\n      vm.status.filters.filterSeasons = '';\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        updateFilterNotifications();\n      }\n    }\n\n    function saveStatus() {\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.status));\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#collection-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Filters by filter param in datatable's column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      vm.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function newCollection(ev) {\n      if (Session.hasPermission('wholesale.presales.create')) {\n        $mdDialog.show({\n          controller: 'NewPresaleDialogController as vm',\n          templateUrl: 'app/main/apps/wholesale/views/presales/dialogs/new-presale.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          resolve: {\n            collection: function() {\n              return {};\n            },\n            seasons: function() {\n              return SeasonsData.results;\n            },\n            brands: function() {\n              return BrandsData.results;\n            }\n          }\n        }).then(function(response) {\n          // Save buton clicked\n          // Add the new season to the dict\n          if (response.newSeason && response.newSeason.id)\n            vm.seasons[response.newSeason.id] = response.newSeason;\n\n          // Add the new brand to the dics\n          if (response.newBrand && response.newBrand.id)\n            vm.brands[response.newBrand.id] = response.newBrand;\n\n          $state.go('app.wholesale.presales.presale.details', { idPresale: response.collection.id });\n\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('WholesalePresaleController', WholesalePresaleController);\n\n  /** @ngInject */\n  function WholesalePresaleController($state, $mdDialog, $filter, api, $mdToast, Session, PresaleData) {\n    var vm = this;\n\n\n    // Data\n    vm.presale = angular.copy(PresaleData);\n    vm.currentNavItem = \"\";\n\n    // Methods\n    vm.deleteCollection = deleteCollection;\n\n    // Functions\n    function deleteCollection(ev) {\n      if (Session.hasPermission('wholesale.presales.delete')) {\n\n        $mdDialog.show({\n          controller: function ($scope, $mdDialog, $filter) {\n\n            $scope.text = '';\n            $scope.securityWord = $filter('translate')('PRESALE.DELETE_COLLECTION').toLowerCase();\n\n            $scope.cancel = cancel;\n            $scope.hide = hide;\n            $scope.checkSecurityWord = checkSecurityWord;\n\n            function cancel() {\n              $mdDialog.cancel();\n            }\n\n            function hide() {\n              $mdDialog.hide();\n            }\n            function checkSecurityWord(){\n              return $scope.text.toLowerCase() != $scope.securityWord;\n            }\n\n          },\n          templateUrl: 'app/main/apps/wholesale/views/presale/dialogs/delete-presale.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          fullscreen: false\n        })\n          .then(function (answer) {\n            api.wholesale.presales.delete(\n              vm.presale,\n              function (result) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')(\"PRESALE.COLLECTION_DELETED\")).position('top right'));\n                $state.go('app.wholesale.presales');\n              }\n            );\n          }, function () {\n          });\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.wholesale')\n    .controller('DeliveriesController', DeliveriesController);\n\n  /** @ngInject */\n  function DeliveriesController($scope, $rootScope, $compile, $q, $mdDateRangePicker, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                                Session, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, ORDER_DELIVERY_STATUSES, SALE_ORDER_DELIVERY_STATUS_COLORS,\n                                SEARCH_MAX_LENGTH, $translate, WarehousesData) {\n\n    var ARRAY_ITEMS_SEPARATOR = ',';\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = SALE_ORDER_STATUSES;\n    vm.orderStatusColors = SALE_ORDER_DELIVERY_STATUS_COLORS;\n    vm.search = null;\n    vm.filterDateRange = {\n      dateStart: null,\n      dateEnd: null\n    };\n\n    vm.filterStatus = [];\n    vm.statusList = getStatusListByDict();\n    vm.filterSourceWarehouse = '';\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.providerSearchText = '';\n    vm.selectedProvider = null;\n\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterSourceWarehouse: 2\n    };\n\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.saleOrderDeliveries.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.filter_status = vm.filterStatus.join(ARRAY_ITEMS_SEPARATOR);\n          d.filter_source_warehouse = vm.filterSourceWarehouse;\n          if (vm.selectedProvider) {\n            d.customer_id = vm.selectedProvider.id;\n          }\n          prepareDateAndTimeFilterData(d);\n        }\n      },\n      order: [[0, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      //scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        if (vm.filterDateRange.dateStart) {\n          data.dateStart = vm.filterDateRange.dateStart.getTime();\n        }\n        if (vm.filterDateRange.dateEnd) {\n          data.dateEnd = vm.filterDateRange.dateEnd.getTime();\n        }\n        if (vm.selectedProvider) {\n          data.selectedProvider = vm.selectedProvider;\n        }\n        localStorage.setItem(Session.company.id + '::dataTableDeliveriesController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableDeliveriesController'));\n\n        if (state) {\n          if (state.dateStart) {\n            vm.filterDateRange.dateStart = new Date(state.dateStart);\n          }\n          if (state.dateEnd) {\n            vm.filterDateRange.dateEnd = new Date(state.dateEnd);\n          }\n          if (state.selectedProvider) {\n            vm.selectedProvider = state.selectedProvider;\n          }\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          if (state.columns[vm.dicFilterColumns.filterStatus].search.search.indexOf(',') === -1) {\n            if (state.columns[vm.dicFilterColumns.filterStatus].search.search === '') {\n              vm.filterStatus = [];\n            } else {\n              vm.filterStatus = [state.columns[vm.dicFilterColumns.filterStatus].search.search];\n            }\n          } else {\n            vm.filterStatus = state.columns[vm.dicFilterColumns.filterStatus].search.search.split(',');\n          }\n          vm.filterSourceWarehouse = state.columns[vm.dicFilterColumns.filterSourceWarehouse].search.search;\n        }\n        return state;\n      }\n    };\n    vm.dtColumns = [];\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.filterByColumn = filterByColumn;\n    vm.filterDates = filterDates;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.providerQuerySearch = providerQuerySearch;\n    vm.enableBarcodeListener = enableBarcodeListener;\n    vm.disableBarcodeListener = disableBarcodeListener;\n    vm.updateProviderFilter = updateProviderFilter;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      vm.dtColumns = [\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('SALE.SERIAL_NUMBER')).renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.wholesale.sales.sale.deliveries.delivery({id:' + full.sale_order + ', orderDeliveryId:' + full.id + '})\">' + data + '</a><br><small>' + full.sale_order_autocode + '</small>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('SALE.STATUS')).renderWith(function(data, type, full) {\n          return '<span class=\"status ' + SALE_ORDER_DELIVERY_STATUS_COLORS[data] + '\">' + $filter('translate')('SALE.' + ORDER_DELIVERY_STATUSES[data]) + '</span>';\n        }),\n        DTColumnBuilder.newColumn('customer_name').withTitle($filter('translate')('SALE.CONTACT')).notSortable(),\n        DTColumnBuilder.newColumn('warehouse_name').withTitle($filter('translate')('SALE.FROM_WAREHOUSE')).notSortable(),\n        DTColumnBuilder.newColumn('shipped_at').withTitle($filter('translate')('SALE.SHIPPED_AT')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('received_at').withTitle($filter('translate')('SALE.RECEIVED_AT')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }).notSortable(),\n        DTColumnBuilder.newColumn('invoice__autocode').withTitle($filter('translate')('SALE.INVOICE')).renderWith(function(data, type, full) {\n          if (full.invoice) {\n            return '<div class=\"green-500-fg\">' + full.invoice + '</div>';\n          } else {\n            return '<div class=\"invoice-ko\"></div>';\n          }\n        }),\n        DTColumnBuilder.newColumn('invoice__payment_status').withTitle($filter('translate')('INVOICES.PAYMENT'))\n          .renderWith(function(data, type, full) {\n            if (full.invoice_payment_status == 20) {\n              return '<span class=\"green-500-fg\">' + $filter('translate')('INVOICE.PAID') + '</span>';\n            }\n            return '<span class=\"red-500-fg\">' + $filter('translate')('INVOICE.PENDING') + '</span>';\n          }),\n        DTColumnBuilder.newColumn('private_notes').withTitle($filter('translate')('SALE.PRIVATE_NOTES')).renderWith(function(data, type, full) {\n          if (data && data.length > 20) {\n            var shortNotes = data.substring(0, 20) + '...';\n            return '<span>' + shortNotes + '</span>' +\n              '<md-tooltip>' + data + '</md-tooltip>';\n          }\n          return data;\n        }),\n        DTColumnBuilder.newColumn('notes').withTitle($filter('translate')('SALE.NOTES')).renderWith(function(data, type, full) {\n          if (data && data.length > 20) {\n            var shortNotes = data.substring(0, 20) + '...';\n            return '<span>' + shortNotes + '</span>' +\n              '<md-tooltip>' + data + '</md-tooltip>';\n          }\n          return data;\n        })\n      ];\n\n      $scope.$watch('vm.filterStatus', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterStatus, vm.dicFilterColumns.filterStatus);\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSourceWarehouse', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterSourceWarehouse, vm.dicFilterColumns.filterSourceWarehouse);\n        }\n      }, false);\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#sale-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * Toggle sidenav\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function prepareDateAndTimeFilterData(d) {\n      if (vm.filterDateRange.dateStart) {\n        d.startDate = angular.copy(vm.filterDateRange.dateStart);\n        d.startDate.setHours(0);\n        d.startDate = d.startDate.toISOString();\n      } else {\n        d.startDate = null;\n      }\n\n      if (vm.filterDateRange.dateEnd) {\n        d.endDate = angular.copy(vm.filterDateRange.dateEnd);\n        d.endDate.setHours(0);\n        d.endDate.setHours(d.endDate.getHours() + 24);\n        d.endDate = d.endDate.toISOString();\n      } else {\n        d.endDate = null;\n      }\n    }\n\n    function filterDates() {\n      $mdDateRangePicker.show({\n        model: vm.filterDateRange\n      }).then(function(result) {\n        vm.filterDateRange = result;\n        vm.dtInstance.DataTable.draw();\n      }).catch(function() {\n        console.log('Cancelled');\n      });\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.wholesale.sales.sale.delivery', { id: aData.sale_order, orderDeliveryId: aData.id });\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Applies the filter parameter to the column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    /**\n     * Creates a list of status from TRANSFER_ORDER_STATUSES cons\n     * @returns {Array}\n     */\n    function getStatusListByDict() {\n      var result = [];\n      for (var id in ORDER_DELIVERY_STATUSES) {\n        result.push({ code: id, name: ORDER_DELIVERY_STATUSES[id] });\n      }\n      return result;\n    }\n\n    function enableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = true;\n    }\n\n    function disableBarcodeListener() {\n      $rootScope.ndBarcodeListenerEnabled = false;\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.filterStatus && vm.filterStatus.length > 0 ? 1 : 0;\n      result += vm.filterSourceWarehouse !== '' ? 1 : 0;\n      result += vm.selectedProvider != null ? 1 : 0;\n      result += (vm.filterDateRange.dateEnd || vm.filterDateRange.dateStart) ? 1 : 0;\n\n      return result;\n    }\n\n    function clearFilter() {\n      vm.filterStatus = [];\n      vm.filterSourceWarehouse = '';\n      vm.selectedProvider = null;\n      vm.providerSearchText = null;\n      vm.filterDateRange.dateStart = null;\n      vm.filterDateRange.dateEnd = null;\n\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function updateProviderFilter(provider) {\n       if (angular.isUndefined(provider)) {\n          vm.selectedProvider = null;\n       }\n      if (typeof provider === 'object') {\n        if (provider && provider.id && (provider.name || provider.first_name)) {\n          vm.selectedProvider = provider;\n        } else {\n          vm.selectedProvider = null;\n        }\n      }\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function providerQuerySearch() {\n      var deferred = $q.defer();\n      vm.providerSearchText = vm.providerSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.inventories.contacts.get(\n        {\n          search: vm.providerSearchText\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleB2BEcommercesController', WholesaleB2BEcommercesController);\n\n  /** @ngInject */\n  function WholesaleB2BEcommercesController(\n    $state,\n    $scope,\n    $mdDialog,\n    $filter,\n    $mdToast,\n    $document,\n    $timeout,\n    $mdSidenav,\n    $compile,\n    api,\n    Session,\n    DTColumnBuilder,\n    HTTP_STATUS\n  ) {\n\n    var vm = this;\n\n    $scope.Session = Session;\n    vm.hasSubscription = Session.hasSubscription;\n    vm.hasMultipleB2B = Session.hasMultipleB2B();\n    vm.countB2bEcommerces = null;\n\n    // Data\n    vm.dtInstance = {};\n    vm.search = null;\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.wholesale.b2bEcommerces.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableEcommercesController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableEcommercesController'));\n        return state;\n      }\n    };\n    vm.dtColumns = [];\n    vm.showOldCreateB2bButton = false;\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.filterByColumn = filterByColumn;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n      vm.dtColumns = [\n        DTColumnBuilder.newColumn('slug')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.SLUG'))\n          .renderWith(function(data, type, full) {\n            return data;\n          }),\n        DTColumnBuilder.newColumn('domain')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.PUBLIC_URL'))\n          .renderWith(function(data, type, full) {\n            return data;\n          }),\n        DTColumnBuilder.newColumn('warehouse_name')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.WAREHOUSE'))\n          .renderWith(function(data, type, full) {\n            return data;\n          }),\n        DTColumnBuilder.newColumn('pricing_tier_name')\n          .withTitle($filter('translate')('B2B_ECOMMERCE.PRICING_TIER'))\n          .renderWith(function(data, type, full) {\n            return data;\n          })\n      ];\n    }\n\n    function initComplete() {\n      var api = this.api();\n      var searchBox = angular.element('body').find('#ecommerce-search');\n      vm.showOldCreateB2bButton = !vm.hasSubscription && (vm.hasMultipleB2B || api.data().length === 0);\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.wholesale.b2b_ecommerces.b2b_ecommerce', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.wholesale')\n    .controller('WholesaleB2BEcommerceController', WholesaleB2BEcommerceController);\n\n  /** @ngInject */\n  function WholesaleB2BEcommerceController(\n    $state,\n    $scope,\n    $mdDialog,\n    $filter,\n    $mdToast,\n    $document,\n    api,\n    Session,\n    B2BEcommerce,\n    ContractedPlanLimit,\n    B2BEcommercesData,\n    WarehousesData,\n    SeasonsData,\n    PricingTiersData,\n    ContractedPlanLimitData,\n    B2B_ECOMMECE_MENU_TYPES,\n    HTTP_STATUS,\n    SEARCH_MAX_LENGTH\n  ) {\n    var vm = this;\n    $scope.Session = Session;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.b2bEcommerce = B2BEcommercesData ?\n      new B2BEcommerce(angular.copy(B2BEcommercesData)) :\n      new B2BEcommerce();\n    vm.searchWarehouse = '';\n    vm.searchPricingTier = '';\n    vm.warehouses = WarehousesData.results;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.B2B_ECOMMECE_MENU_TYPES = B2B_ECOMMECE_MENU_TYPES;\n    vm.saveingB2bEcommerce = false;\n\n    vm.collections = [];\n    vm.seasons = [];\n    vm.categories = [];\n    vm.contractedPlanLimit = null;\n\n    // Methods\n    vm.saveB2bEcommerce = saveB2bEcommerce;\n    vm.cancelChanges = cancelChanges;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.getLeatTimePreview = getLeatTimePreview;\n\n    // Initialize\n    init();\n\n\n    // Functions\n    function init() {\n      api.inventories.categories.list(function(response, fn, status) {\n        if (response && response.results) {\n          vm.categories = response.results.sort(function(a, b) {\n            return a.position - b.position;\n          });\n        }\n      });\n\n      api.inventories.seasons.list(function(response, fn, status) {\n        if (response && response.results) {\n          vm.seasons = response.results.sort(function(a, b) {\n            return a.position - b.position;\n          });\n        }\n      });\n\n      api.manufactures.collections.list(function(response, fn, status) {\n        if (response && response.results) {\n          vm.collections = response.results.sort(function(a, b) {\n            return a.position - b.position;\n          });\n        }\n      });\n\n      if (ContractedPlanLimitData.results && ContractedPlanLimitData.results.length) {\n        var cpl = ContractedPlanLimitData.results.find(function(item){ return item.code === 'B2B_WAREHOUSE_LIMIT'; }) || ContractedPlanLimitData.results[0];\n        vm.contractedPlanLimit = new ContractedPlanLimit(cpl);\n      }\n    }\n\n    function saveB2bEcommerce() {\n      if ($scope.form.$valid && Session.hasPermissions('wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update')) {\n        vm.saveingB2bEcommerce = true;\n\n        if (vm.b2bEcommerce.id) {\n          api.wholesale.b2bEcommerces.update(vm.b2bEcommerce,\n            function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                vm.b2bEcommerce = new B2BEcommerce(response);\n                // Backup the object if the user wants to make changes and cancel it\n                B2BEcommercesData.results = [angular.copy(vm.b2bEcommerce)];\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('B2B_ECOMMERCE.B2B_UPDATED'))\n                  .position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right'));\n              }\n              vm.saveingB2bEcommerce = false;\n            });\n        } else {\n          api.wholesale.b2bEcommerces.save(vm.b2bEcommerce,\n            function(response, fn, status) {\n              vm.saveingB2bEcommerce = false;\n              if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('B2B_ECOMMERCE.B2B_CREATED'))\n                  .position('top right'));\n                $state.go('app.wholesale.b2b_ecommerces.b2b_ecommerce', { id: response.id });\n              } else {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right'));\n              }\n            });\n        }\n      }\n    }\n\n    function cancelChanges() {\n      vm.b2bEcommerce = angular.copy(B2BEcommercesData);\n      $scope.form.$setPristine();\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose() {\n      vm.searchWarehouse = '';\n      vm.searchPricingTier = '';\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function getLeatTimePreview() {\n      return [\n        vm.b2bEcommerce.global_lead_time_prefix || '',\n        vm.b2bEcommerce.global_lead_time || '',\n        ($filter('translate')('B2B_ECOMMERCE.GLOBAL_LEAD_TIME_UNIT_' + vm.b2bEcommerce.global_lead_time_units) || '').toLowerCase()\n      ].join(' ');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('SupportVideosController', SupportVideosController);\n\n  /** @ngInject */\n  function SupportVideosController($scope, api, VideosData, VIDEO_CATEGORIES, SEARCH_MAX_LENGTH, $mdDialog) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.videos = VideosData.results;\n    vm.categories = VIDEO_CATEGORIES;\n    vm.videosByCategory = {};\n\n    // Methods\n    vm.showDialog = showDialog;\n    vm.categoryNotEmpty = categoryNotEmpty;\n    vm.init = init;\n\n    // Initialize\n    init();\n\n    // Functions\n\n    function init() {\n      for (var category in vm.categories) {\n        vm.videosByCategory[vm.categories[category]] = [];\n      }\n\n      vm.videos.forEach(function (video) {\n        vm.videosByCategory[video.category].push(video);\n      });\n      console.log(vm.videosByCategory);\n    }\n\n    function DialogController($scope, $mdDialog, videoId) {\n      $scope.videoId = videoId;\n      $scope.closeDialog = function () {\n        $mdDialog.hide();\n      }\n    }\n\n    function showDialog(ev, videoId) {\n      $mdDialog.show({\n        controller: DialogController,\n        template:\n          '<md-dialog>' +\n          '  <md-dialog-content class=\"no-padding\">' +\n          '    <ng-youtube-embed video=\"videoId\"  autoplay=\"false\" ccloadpolicy=\"false\" controls=\"true\"' +\n          '      disablekb=\"true\" fs=\"true\" modestbranding=\"true\" playsinline=\"true\">' +\n          '    </ng-youtube-embed>' +\n          '  </md-dialog-content>' +\n          '</md-dialog>',\n        locals: {\n          videoId: videoId\n        },\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        fullscreen: $scope.customFullscreen // Only for -xs, -sm breakpoints.\n      })\n        .then(function (answer) {\n\n        }, function () {\n\n        });\n    }\n\n    function categoryNotEmpty(category) {\n\n      var categoryNotEmpty = false;\n      vm.videos.forEach(function (video) {\n        categoryNotEmpty = (categoryNotEmpty || video.category == category);\n      });\n      return categoryNotEmpty;\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('TrialStatusDetailsController', TrialStatusDetailsController);\n\n  /** @ngInject */\n  function TrialStatusDetailsController() {\n    // Data\n\n    // Initialize\n\n    // Functions\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('PerformanceController', PerformanceController);\n\n  /** @ngInject */\n  function PerformanceController($scope) {\n\n    var vm = this;\n    vm.PERFORMANCE_EVENT_RUN = \"performance::run\";\n    vm.PERFORMANCE_EVENT_START = \"performance::start\";\n    vm.PERFORMANCE_EVENT_END = \"performance::end\";\n\n    // Data\n    vm.processing = 0;\n   \n    // Methods\n    vm.runAll = runAll;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      $scope.cancelStartEventListener = $scope.$on(vm.PERFORMANCE_EVENT_START, add);\n      $scope.cancelEndEventListener = $scope.$on(vm.PERFORMANCE_EVENT_END, remove);\n\n      // Cleanup\n      $scope.$on('$destroy', function (){\n        $scope.cancelStartEventListener();\n        $scope.cancelEndEventListener();\n      });\n    }\n\n    function runAll() {\n      $scope.$broadcast(vm.PERFORMANCE_EVENT_RUN);\n    }\n\n    function add() {\n      vm.processing++;\n    }\n\n    function remove() {\n      vm.processing--;\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.support')\n    .controller('SupportChangelogsController', SupportChangelogsController);\n\n  /** @ngInject */\n  function SupportChangelogsController($scope,\n                                       $http,\n                                       $filter,\n                                       $mdToast,\n                                       api,\n                                       ChangelogsData,\n                                       Changelog) {\n\n    var vm = this;\n\n    // Data\n    vm.changelogs = ChangelogsData.results;\n    vm.next = ChangelogsData.next;\n    vm.loading = false;\n\n    // Methods\n    vm.loadMore = loadMore;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.changelogs = vm.changelogs.map(function (change) {\n        return new Changelog(change);\n      });\n    }\n\n    function loadMore() {\n      if (vm.loading) {\n        return;\n      }\n\n      vm.loading = true;\n\n      $http({\n        method: 'GET',\n        url: vm.next,\n      }).then(function successCallback(response) {\n        var newChangelogs = response.data.results.map(function (changelog) {\n          return new Changelog(changelog);\n        });\n        vm.changelogs = vm.changelogs.concat(newChangelogs);\n        vm.next = response.data.next;\n        vm.loading = false;\n      }, function errorCallback(response) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        vm.loading = false;\n      });\n    }\n  }\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.sale')\n      .controller('SellSaleController', SellSaleController);\n\n    /** @ngInject */\n    function SellSaleController($mdDialog, $document, $filter, $q, $state, $mdToast, $window, $rootScope, $mdBottomSheet,\n                                $scope, $interval, RegistersData, WarehousesData, InventoryConfiguration, api, Session,\n                                $stateParams, $mdMedia, HTTP_STATUS, AuthService,\n                                CASH_MOVEMENT_TYPES, INTEGRATION_APP_TYPE, SEARCH_MAX_LENGTH, $timeout,\n                                PaymentMethods, ERROR_CODES, SellMatrixData,\n                                PosOrderProductVariant, apiResolver, $translate, Utils, PAYMENT_METHOD_GATEWAYS,\n                                msNavigationService, DefaultRegisterService, FeatureFlagService) {\n\n      var vm = this;\n      vm.$mdMedia = $mdMedia;\n      // Conts\n      vm.MIN_QUERY_LENGTH = 3;\n      vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n      vm.AUTOCOMPLETE_MS_TIMEOUT = 300;\n      vm.DEFAULT_IN_STOCK = false;\n      // vm.CATEGORY_LAYOUT = 1;\n      // vm.COMPACT_LAYOUT = 2;\n      vm.CATALOG_LENGTH = 16;\n      vm.SELL_VIEW = 1;\n      vm.PAY_VIEW = 2;\n      vm.CURRENT_VIEW_TYPE_LIST = 1;\n      vm.CURRENT_VIEW_TYPE_MATRIX = 2;\n      vm.REFUND_ENABLED = true;\n\n      // Data\n      //vm.isMobile = !$mdMedia('gt-sm');\n      vm.inventoryConfiguration = angular.copy(InventoryConfiguration.results[0]);\n      vm.registers = angular.copy(RegistersData.results);\n      // vm.categories = CategoriesData.results;\n      vm.selectedRegister;\n      vm.sales = [];\n      vm.warehousesDict = {};\n      vm.session = Session;\n      vm.catalog = new Array(vm.CATALOG_LENGTH);\n      // vm.layoutStyle = vm.COMPACT_LAYOUT; // TODO: initialize by using a cookie\n      vm.currentTab = 0;\n      vm.isFullsize = false;\n      vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n      vm.paymentMethodsDict = {};\n      vm.peopleCounter = null;\n      vm.selectedProductStock = null;\n      vm.showStockDetails = false;\n      vm.warehouses = WarehousesData.results;\n      vm.productsById = {};\n      vm.discountAsPercentage = null;\n      vm.isDialogOpen = false;\n      vm.hasUID = false;\n      vm.has_gateway_payment = false;\n      vm.creatingCustomer = false;\n      vm.allowDebtSells = !Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SAGE_200);\n\n      // Methods\n      vm.addPosProductVariantToSale = addPosProductVariantToSale;\n      vm.amountChanged = amountChanged;\n      vm.barcodeListenerCallback = barcodeListenerCallback;\n      vm.cancelDialog = cancelDialog;\n      vm.categoryClicked = categoryClicked;\n      vm.changeVariants = changeVariants;\n      vm.checkEnterPressed = checkEnterPressed;\n      vm.clearProductAutocomplete = clearProductAutocomplete;\n      vm.closeCurrentSale = closeCurrentSale;\n      vm.closeRegister = closeRegister;\n      vm.createCustomer = createCustomer;\n      vm.createNegativeCashMovement = createNegativeCashMovement;\n      vm.createNewSale = createNewSale;\n      vm.createPositiveCashMovement = createPositiveCashMovement;\n      vm.customersQuerySearch = customersQuerySearch;\n      vm.deleteCurrentSale = deleteCurrentSale;\n      vm.deleteDevolutionCard = deleteDevolutionCard;\n      vm.deletePosOrderProductVariant = deletePosOrderProductVariant;\n      vm.devolutionCardCallback = devolutionCardCallback;\n      vm.finishCustomPriceEdition = finishCustomPriceEdition;\n      vm.finishPayment = finishPayment;\n      vm.getBalance = getBalance;\n      vm.getRefoundByAny = getRefoundByAny;\n      vm.getCustomerText = getCustomerText;\n      vm.customerAutocompleteFocused = customerAutocompleteFocused;\n      vm.getItemCustomerText = getItemCustomerText;\n      vm.getPendingToAssigned = getPendingToAssigned;\n      vm.getPrice = getPrice;\n      vm.getPriceByPrices = getPriceByPrices;\n      vm.getTotalAssigned = getTotalAssigned;\n      vm.getTotalDevolutionCardAmount = getTotalDevolutionCardAmount;\n      vm.getTotalTaxByGroup = getTotalTaxByGroup;\n      vm.goToRegisterActivity = goToRegisterActivity;\n      vm.newSale = newSale;\n      vm.openCashDrawer = openCashDrawer;\n      vm.openDevolutionCardFinder = openDevolutionCardFinder;\n      vm.openRegister = openRegister;\n      vm.pay = pay;\n      vm.payButtonDisabled = payButtonDisabled;\n      vm.payByCard = payByCard;\n      vm.payByCash = payByCash;\n      vm.refundByCash = refundByCash;\n      vm.refundByCard = refundByCard;\n      vm.refundByNewDevolutionCard = refundByNewDevolutionCard;\n      vm.posOrderCallback = posOrderCallback;\n      vm.priceClicked = priceClicked;\n      vm.nameClicked = nameClicked;\n      vm.finishCustomNameEdition = finishCustomNameEdition;\n      vm.productsQuerySearch = productsQuerySearch;\n      vm.registerHasChanged = registerHasChanged;\n      vm.selectedCustomerChange = selectedCustomerChange;\n      vm.selectedProductChange = selectedProductChange;\n      vm.setSelectedRegister = setSelectedRegister;\n      vm.showTotalTaxes = showTotalTaxes;\n      vm.togglePosOrderProductVariant = togglePosOrderProductVariant;\n      vm.toggleWindowSize = toggleWindowSize;\n      vm.updateSale = updateSale;\n      vm.showGenerateVoucherConfirmation = showGenerateVoucherConfirmation;\n      vm.getVoucherValue = getVoucherValue;\n      vm.isNormalPayingWorkflow = isNormalPayingWorkflow;\n      vm.isDevolutionPayingWorkflow = isDevolutionPayingWorkflow;\n      vm.isRegenerateDevolutionCardPayingWorkflow = isRegenerateDevolutionCardPayingWorkflow;\n      vm.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n      vm.countTotalProductVariants = countTotalProductVariants;\n      vm.finishSale = finishSale;\n      vm.assignAllToPaymentMethod = assignAllToPaymentMethod;\n      vm.isDevolution = isDevolution;\n      vm.peopleCounterMove = peopleCounterMove;\n      vm.toggleCurrentViewType = toggleCurrentViewType;\n      vm.matrixSelectedProductChange = matrixSelectedProductChange;\n      vm.getRegisterConfigurationProperty = getRegisterConfigurationProperty;\n      vm.useGiftCard = useGiftCard;\n      vm.getTotalLessDevolution = getTotalLessDevolution;\n      vm.assignAllToGiftCard = assignAllToGiftCard;\n      vm.getConsumedGiftCards = getConsumedGiftCards;\n      vm.getConsumedGiftCardsNotVoucher = getConsumedGiftCardsNotVoucher;\n      vm.getConsumedGiftCardsVoucher = getConsumedGiftCardsVoucher;\n      vm.deleteConsumedGiftCard = deleteConsumedGiftCard;\n      vm.finishGiftCardCustomPriceEdition = finishGiftCardCustomPriceEdition;\n      vm.checkGiftCardCode = checkGiftCardCode;\n      vm.isPaymentDisabled = isPaymentDisabled;\n      vm.showApplyBalanceButton = showApplyBalanceButton;\n      vm.applyOrRemoveBalanceDiscount = applyOrRemoveBalanceDiscount;\n      vm.customPriceChanged = customPriceChanged;\n      vm.getLanguage = getLanguage;\n      vm.showSaleDialogById = showSaleDialogById;\n      vm.printSale = printSale;\n      vm.printDevolutionCard = printDevolutionCard;\n      vm.saveButtonDisabled = saveButtonDisabled;\n      vm.saveButtonClicked = saveButtonClicked;\n      vm.paymentMethodBlurred = paymentMethodBlurred;\n      vm.paymentMethodFocused = paymentMethodFocused;\n      vm.openNotFoundDialog = openNotFoundDialog;\n      vm.twoDecimals = twoDecimals;\n      vm.getRefundCardPaymentMethod = getRefundCardPaymentMethod;\n\n      vm.getTotal = getTotal;\n      vm.getSubtotal = getSubtotal;\n      vm.viewStock = viewStock;\n      vm.hideStock = hideStock;\n      vm.hasPaymentGateway = hasPaymentGateway;\n      vm.applyCustomerDiscount = applyCustomerDiscount;\n      vm.showPromotions = showPromotions;\n      vm.isLowStock = isLowStock;\n      vm.hasAdyenPaymentGateway = hasAdyenPaymentGateway;\n      vm.hasComerciaPaymentGateway = hasComerciaPaymentGateway;\n      vm.getOriginalCardNumber = getOriginalCardNumber;\n      vm.getOriginalCardIssuer = getOriginalCardIssuer;\n      vm.getCover = getCover;\n      vm.showAndHideBundleVariants = showAndHideBundleVariants;\n      vm.assignSeller = assignSeller;\n      vm.removeSeller = removeSeller;\n      vm.sellerChanged = sellerChanged;\n      vm.hasBundle = hasBundle;\n      vm.cancelCloseCurrentSaleTimeout = cancelCloseCurrentSaleTimeout;\n      vm.hasCustomerSelected = hasCustomerSelected;\n      vm.toggleShowTaxesDict = toggleShowTaxesDict;\n      vm.openSearchVendorDialog = openSearchVendorDialog;\n      vm.selectPaymentMethod = selectPaymentMethod;\n      vm.showAssignSeller = showAssignSeller;\n\n      vm.amountFocus = amountFocus;\n      vm.discountFocus = discountFocus;\n      vm.hasEposItalyActive = hasEposItalyActive;\n      vm.openDisplay = openDisplay;\n      vm.showPayByCardButton = showPayByCardButton;\n      vm.showRefundByCardButton = showRefundByCardButton;\n      vm.showPayByCashButton = showPayByCashButton;\n      vm.showRefundByCashButton = showRefundByCashButton;\n\n      // Initialization\n      initialize();\n\n      // Functions\n      function initialize() {\n        initApiVersion();\n        initializeRegister();\n        refreshDisplay();\n\n        WarehousesData.results.forEach(function(warehouse) {\n          vm.warehousesDict[warehouse.id] = warehouse;\n        });\n      }\n\n      function initApiVersion() {\n        vm.createPosOrderApiVersion = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n      }\n\n      function refreshDisplay() {\n        localStorage.setItem('displaySale', JSON.stringify(vm.sales[vm.currentTab] || {}));\n      }\n\n      function postInitializeRegister() {\n        vm.paymentMethodsDict = {};\n        vm.selectedRegister.payment_methods.forEach(function(paymentMethod) {\n          vm.paymentMethodsDict[paymentMethod.id] = paymentMethod;\n        });\n\n        vm.currencyCharacter = $filter('currencyCharacter')(vm.selectedRegister.currency);\n\n        // If it's an existing posOrder\n        if ($stateParams.posOrder && !$stateParams.isDevolution) {\n          createContinuousSale();\n        }\n        // If it's a devolution\n        else if ($stateParams.posOrder && $stateParams.isDevolution) {\n          createDevolutionSale();\n        }\n        // If is a new sale\n        else {\n          createNewSale();\n        }\n      }\n\n      function hasBundle(sale) {\n        sale.hasBundle = sale.pos_order_product_variants.some(function(popv) {\n          return popv.is_bundle === true;\n        });\n      }\n\n      function showAndHideBundleVariants(popv) {\n        popv.showBundle = !popv.showBundle;\n        localStorage.setItem(Session.company.id + '_' + Session.user.id + '::showBundle', JSON.stringify(popv.showBundle));\n      }\n\n      function getCover(item) {\n        if (item.cover_thumbnail) {\n          return item.cover_thumbnail;\n        } else if (item.is_gift_card) {\n          return '/assets/images/wallet-giftcard.b55a1923.svg';\n        } else if (item.is_bundle) {\n          return '/assets/images/custom-material-design-icons/package-variant-closed-3.5badf57d.svg';\n        } else {\n          return '/assets/images/package-variant-closed.9c71cbbe.png';\n        }\n      }\n\n      /**\n       * Gets the register to use from the local storage, or requests which register to use\n       */\n      function initializeRegister() {\n        DefaultRegisterService.getDefaultRegister().then(function(defaultRegister) {\n          if (defaultRegister) {\n            var defaultRegisterObj = vm.registers.find(function(register) {\n              return register.id == defaultRegister.id;\n            });\n\n            if (defaultRegisterObj) {\n              vm.selectedRegister = defaultRegisterObj;\n            } else {\n              vm.selectedRegister = vm.registers.length > 0 ? vm.registers[0] : null;\n            }\n            registerHasChanged();\n            // FIXME This method contains duplicated code:\n            postInitializeRegister();\n          }\n        });\n      }\n\n      function registerHasChanged() {\n        if (vm.selectedRegister) {\n          vm.paymentMethodsDict = {};\n          vm.selectedRegister.payment_methods.forEach(function(paymentMethod) {\n            vm.paymentMethodsDict[paymentMethod.id] = paymentMethod;\n          });\n          vm.currencyCharacter = $filter('currencyCharacter')(vm.selectedRegister.currency);\n\n          DefaultRegisterService.setDefaultRegister(vm.selectedRegister);\n\n          vm.sales.forEach(function(sale) {\n            sale.register = vm.selectedRegister.id;\n            sale.pos_order_payment_methods = [];\n          });\n\n          vm.sellMatrixData = new SellMatrixData({\n            warehouseId: vm.selectedRegister.warehouse.id\n          });\n\n          if (vm.sales.length > 0 && vm.currentTab !== null) {\n            // if the register is changed in the middle of a PosOrder it is required to update the source_warehouse from the current\n            // sale order. Otherwise the backend will take the previous warehouse as the one where the sale has take place.\n            vm.sales[vm.currentTab].source_warehouse = vm.selectedRegister.warehouse.id;\n          }\n\n          vm.amountList = [1, 2, 3, 5, 10];\n        }\n\n        updatePeopleCounter();\n      }\n\n      function setSelectedRegister(register) {\n        if (!vm.selectedRegister) {\n          vm.selectedRegister = register;\n          registerHasChanged();\n          createNewSale();\n        } else if (register.id !== vm.selectedRegister.id) {\n          vm.selectedRegister = register;\n          registerHasChanged();\n        }\n      }\n\n      function updatePeopleCounter() {\n        if (vm.selectedRegister) {\n          api.analytics.trafficKpis.get({\n            warehouse_id: vm.selectedRegister.warehouse.id,\n            option: 'aggregate-today'\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.peopleCounter = response;\n            } else {\n              // TODO show error toast\n            }\n          });\n        }\n      }\n\n      function peopleCounterMove(movement) {\n        api.analytics.trafficKpis.save({\n          warehouse_id: vm.selectedRegister.warehouse.id,\n          movement: movement\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.peopleCounter = response;\n          } else {\n            // TODO show error toast\n          }\n        });\n      }\n\n      /**\n       * Opens the CloseRegisterDialogController witch may saves the closures\n       */\n      function closeRegister() {\n\n        if (!vm.selectedRegister.is_closed && Session.hasPermission('sale.register_closure.close_register')) {\n\n          vm.selectedRegister.openingOrClosing = true;\n          $mdDialog.show({\n            controller: 'CloseRegisterDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/sale/views/registers/dialogs/close-register/close-register-dialog.html',\n            parent: angular.element($document.find('body')),\n            clickOutsideToClose: false,\n            fullscreen: true,\n            locals: {\n              paymentMethods: vm.selectedRegister.payment_methods\n            },\n            resolve: {\n              registerActivity: function(apiResolver) {\n                return apiResolver.resolve('sales.register_activities@get', {\n                  id: vm.selectedRegister.current_activity.id,\n                  serializer: 'RegisterActivityFullSerializer'\n                });\n              }\n            }\n          }).then(function(result) {\n            angular.extend(vm.selectedRegister.current_activity, result);\n            vm.selectedRegister.is_closed = vm.selectedRegister.current_activity.is_closed;\n            vm.selectedRegister.openingOrClosing = false;\n          }, function() {\n            // Nothing to do\n            vm.selectedRegister.openingOrClosing = false;\n          });\n\n        }\n      }\n\n      function openRegister() {\n        $mdDialog.show({\n          controller: 'OpenRegisterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/registers/dialogs/open-register/open-register-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            register: vm.selectedRegister\n          }\n        }).then(function(result) {\n          angular.extend(vm.selectedRegister, result);\n        });\n      }\n\n      /**\n       * Creates a new sale having in account the parametes of the sale to continue\n       */\n      function createContinuousSale() {\n        // Initialize the stored sale\n        var sale = newSale($stateParams.posOrder);\n        sale.customerAutocomplete.selectedItem = $stateParams.posOrder.customer;\n        sale.customerAutocomplete.customerSearchText = vm.getCustomerText(sale.customerAutocomplete.selectedItem, '');\n        vm.sales.push(sale);\n        refreshDisplay();\n      }\n\n      /**\n       * Creates a devolution sale\n       */\n      function createDevolutionSale(posOrder) {\n        // Initialize the stored sale\n        var sale = {};\n        if (posOrder)\n          sale = newSale(posOrder, true);\n        else\n          sale = newSale($stateParams.posOrder, true);\n\n        vm.sales.push(sale);\n        refreshDisplay();\n      }\n\n      /**\n       * Creates a new sale tab\n       */\n      function createNewSale() {\n        if (vm.selectedRegister) {\n          vm.sales.push(newSale());\n          refreshDisplay();\n        }\n      }\n\n      /**\n       * Deletes the current displaied sale\n       */\n      function deleteCurrentSale(ev) {\n        if (vm.currentTab != 0 && vm.sales[vm.currentTab].id || !vm.sales[vm.currentTab].successfullyPaid) {\n\n          var confirm = $mdDialog.confirm()\n            .title($filter('translate')('SALES.DELETE_SALE'))\n            .textContent($filter('translate')('SALES.DELETE_SALE_MSG'))\n            .targetEvent(ev)\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('GENERAL.DELETE'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n\n          $mdDialog.show(confirm).then(function() {\n\n            // If posOrder object has id, we delete it\n            if (vm.sales[vm.currentTab].id) {\n              api.inventories.posOrders.delete(\n                { id: vm.sales[vm.currentTab].id },\n                function(result) {\n                  vm.sales.splice(vm.currentTab, 1);\n                  if (vm.sales.length == 0) {\n                    createNewSale();\n                  }\n                }\n              );\n            }\n            // Otherwise is removed from the array\n            else {\n              vm.sales.splice(vm.currentTab, 1);\n              if (vm.sales.length == 0) {\n                createNewSale();\n              }\n            }\n\n            refreshDisplay();\n\n          });\n        }\n      }\n\n      /**\n       * Creates and returns a sale object\n       * @returns {{register: *, sale: {}, lines: Array, title: *, productAutocomplete: {}, customerAutocomplete: {}}}\n       */\n      function newSale(olderSale, isDevolution) {\n        if (olderSale) {\n          var sale = {\n            // Data\n            pos_order_product_variants: [],\n            pos_order_payment_methods: [],\n            register: vm.selectedRegister.id,\n            sale: olderSale.sale,\n            barcode: olderSale.barcode,\n            taxes: {},\n            source_warehouse: vm.selectedRegister.warehouse.id,\n            paymentValue: olderSale.paymentValue,\n            successfullyPaid: false,\n            total: 0,\n            subtotal: 0,\n            total_taxes: 0,\n            output_amount: 0,\n            balance_discount: olderSale.balance_discount,\n            devolution_cards: olderSale.devolution_cards || [],\n            gift_cards: olderSale.gift_cards || [],\n            notes: olderSale.notes,\n            status: olderSale.status,\n            promotions: [],\n            isDevolution: isDevolution,\n\n            // View Data\n            title: $filter('translate')('SALES.SALE_NUMBER', { autocode: olderSale.autocode }),\n            productAutocomplete: {},\n            customerAutocomplete: {\n              selectedItem: olderSale.customer ? olderSale.customer : null\n            },\n            currentView: vm.SELL_VIEW,\n            currentViewType: vm.CURRENT_VIEW_TYPE_LIST,\n            in_stock: vm.DEFAULT_IN_STOCK\n          };\n\n          if (olderSale.pos_order_payment_methods) {\n            sale.pos_order_payment_methods = olderSale.pos_order_payment_methods;\n          }\n\n          if (isDevolution) {\n\n            sale.devolution_of_object = olderSale.devolution_of;\n            sale.balance_discount *= -1;\n            var total, balance_discount, discount_incl_tax;\n            if (olderSale.devolution_of && olderSale.devolution_of.total) {\n              total = Math.abs(parseFloat(olderSale.devolution_of.total));\n              balance_discount = Math.abs(parseFloat(olderSale.devolution_of.balance_discount));\n              discount_incl_tax = Math.abs(parseFloat(olderSale.devolution_of.discount_incl_tax));\n            } else {\n              total = Math.abs(parseFloat(olderSale.total));\n              balance_discount = Math.abs(parseFloat(olderSale.balance_discount));\n              discount_incl_tax = Math.abs(parseFloat(olderSale.discount_incl_tax));\n            }\n            sale.original_balance_discount = balance_discount;\n            sale.original_total_without_discount = total + balance_discount + discount_incl_tax;\n          }\n\n          if (sale.autocode) {\n            sale.title = $filter('translate')('SALES.SALE_NUMBER', { autocode: sale.autocode });\n          } else if (!sale.autocode) {\n            sale.title = $filter('translate')('SALE.DRAFT');\n          }\n\n          if (isDevolution) {\n            sale.id = olderSale.id;\n            sale.generateDevolutionCard = true;\n            sale.title = $filter('translate')('SALES.DEVOLUTION_OF', { autocode: olderSale.autocode });\n            olderSale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n              addPosProductVariantToSale(sale, posOrderProductVariant);\n            });\n          } else {\n            sale.id = olderSale.id;\n            olderSale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n              addPosProductVariantToSale(sale, posOrderProductVariant);\n            });\n          }\n\n          if (vm.selectedRegister.register_configuration) {\n            sale.currentViewType = vm.selectedRegister.register_configuration.touch_ui_as_default ?\n              vm.CURRENT_VIEW_TYPE_MATRIX :\n              vm.CURRENT_VIEW_TYPE_LIST;\n          }\n\n          updateSale(sale);\n          refreshDisplay();\n          return sale;\n        }\n\n        // TODO refactor to new PosOrder()\n        var sale = {\n          // Data\n          pos_order_payment_methods: [],\n          pos_order_product_variants: [],\n          register: vm.selectedRegister.id,\n          sale: {},\n          taxes: {},\n          source_warehouse: vm.selectedRegister.warehouse.id,\n          paymentValue: 0,\n          successfullyPaid: false,\n          total: 0,\n          subtotal: 0,\n          total_taxes: 0,\n          output_amount: 0,\n          devolution_cards: [],\n          gift_cards: [],\n          promotions: [],\n\n          // View Data\n          title: $filter('translate')('SALES.NEW_SALE'),\n          productAutocomplete: {},\n          customerAutocomplete: {},\n          currentView: vm.SELL_VIEW,\n          currentViewType: vm.CURRENT_VIEW_TYPE_LIST,\n          in_stock: vm.DEFAULT_IN_STOCK\n        };\n\n        if (vm.selectedRegister.register_configuration) {\n          sale.currentViewType = vm.selectedRegister.register_configuration.touch_ui_as_default ?\n            vm.CURRENT_VIEW_TYPE_MATRIX :\n            vm.CURRENT_VIEW_TYPE_LIST;\n        }\n\n        return sale;\n      }\n\n      function newPosOrderPaymentMethods(sale) {\n        if (!sale.pos_order_payment_methods || sale.pos_order_payment_methods.length === 0) {\n          return vm.selectedRegister.payment_methods.map(function(paymentMethod) {\n            return {\n              disabled: false,\n              amount: null,\n              given_amount: null,\n              payment_method: paymentMethod.id,\n              payment_gateway: paymentMethod.payment_gateway\n            };\n          });\n        } else {\n          // Keep the existing payment methods\n          vm.selectedRegister.payment_methods.forEach(function(paymentMethod) {\n            var found = sale.pos_order_payment_methods.find(function(pm) {\n              return paymentMethod.id === pm.payment_method;\n            });\n            if (!found) {\n              sale.pos_order_payment_methods.push({\n                disabled: false,\n                amount: null,\n                given_amount: null, payment_method: paymentMethod.id\n              });\n            }\n          });\n          return sale.pos_order_payment_methods;\n        }\n      }\n\n      /**\n       * Subtracts the amount or deteles the line\n       * @param sale\n       * @param index\n       */\n      function deletePosOrderProductVariant(sale, index) {\n\n        if (sale.pos_order_product_variants[index].amount > 1) {\n          sale.pos_order_product_variants[index].amount -= 1;\n          amountChanged(sale, sale.pos_order_product_variants[index]);\n        } else if (sale.pos_order_product_variants[index].amount < -1) {\n          sale.pos_order_product_variants[index].amount += 1;\n          amountChanged(sale, sale.pos_order_product_variants[index]);\n        } else {\n          // Get the ID to used once the posOrderProductVairnat is deleted\n          var id = sale.pos_order_product_variants[index].id;\n          var tax = sale.pos_order_product_variants[index].tax;\n\n          // Remove it from the array\n          sale.pos_order_product_variants.splice(index, 1);\n          vm.hasBundle(sale);\n          amountChanged(sale);\n        }\n      }\n\n      /**\n       * Deletes the devolution card on the given sale on the given index\n       * @param sale\n       * @param index\n       */\n      function deleteDevolutionCard(sale, index) {\n        sale.devolution_cards.splice(index, 1);\n        updateSale(sale);\n      }\n\n      /**\n       * Returns the correct price depending on the pricing tier of the selected register\n       * @param prices\n       */\n      function getPriceByPrices(prices) {\n        var priceInPricingTier = prices.find(function(price) {\n          return price.pricing_tier == vm.selectedRegister.warehouse.pricing_tier;\n        });\n\n        if (priceInPricingTier)\n          return priceInPricingTier.value;\n\n        return 0;\n      }\n\n      /**\n       * Retreives the productVariants of the given product and shows the dialog to\n       * choose the variants\n       * @param sale\n       * @param product\n       */\n      function selectedProductChange(sale, product) {\n        //TODO check if the product only have one variant\n        if (product) {\n          // Opening dialog\n          $mdDialog.show({\n            controller: 'ProductVariantSelectorDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/sale/views/sell/dialogs/product-variant-selector-dialog.html',\n            parent: angular.element(document.body),\n            clickOutsideToClose: false,\n            multiple: false,\n            locals: {\n              product: product,\n              warehouse: vm.selectedRegister.warehouse,\n              inStock: sale.in_stock ? true : null,\n              productVariant: false\n            }\n          }).then(function(result) {\n            sale.selectedProduct = product;\n            vm.productsById[product.id] = product;\n            if (result.manageUids && !result.manageLots) {\n              $mdDialog.show({\n                controller: 'UidsSearchDialogController as vm',\n                templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-search/uids-search.html',\n                parent: angular.element($document.find('body')),\n                locals: {\n                  warehouseId: vm.selectedRegister.warehouse.id,\n                  productVariantId: result.id,\n                  allowCreate: false,\n                  operation: 'sale',\n                  orderDeliveryProductVariant: sale,\n                  orderProductVariant: result,\n                  showAll: false,\n                  excludeUids: sale.pos_order_product_variants.filter(function(popv) {\n                    return !!popv.uid_stock_uid;\n                  }).map(function(popv) {\n                    return popv.uid_stock_uid;\n                  }),\n                  initSearch: null,\n                  manageLots: null,\n                  manageUids: null,\n                  warehouseName: null,\n                  product: null\n                }\n              }).then(function(selectedUidStocks) {\n                onProductVariantSelected(sale, result, selectedUidStocks);\n              });\n            } else {\n              onProductVariantSelected(sale, result, null);\n            }\n          });\n        } else {\n          clearProductAutocomplete(sale);\n        }\n      }\n\n      function selectedCustomerChange(sale, customer) {\n        if (customer) {\n          sale.customer = sale.customerAutocomplete.selectedItem.id;\n          if (customer.pricing_tier && customer.pricing_tier !== vm.selectedRegister.warehouse.pricing_tier) {\n            var confirm = $mdDialog.confirm()\n              .title($filter('translate')('SALES.CHANGE_TO_CUSTOMER_PRICING_TIER'))\n              .textContent($filter('translate')('SALES.CHANGE_TO_CUSTOMER_PRICING_TIER_MSG'))\n              .clickOutsideToClose(false)\n              .escapeToClose(false)\n              .parent(angular.element(document.body))\n              .ok($filter('translate')('SALES.YES_APPLY'))\n              .cancel($filter('translate')('SALES.DONT_APPLY'));\n\n            $mdDialog.show(confirm).then(function() {\n              setPricingTier(sale, customer.pricing_tier);\n              changePricesFromPricingTier(sale, $filter('translate')('SALES.CUSTOMER_PRICING_TIER_APPLIED'));\n            }, function() {\n              setPricingTier(sale, null);\n              updateSale(sale);\n            });\n          } else {\n            setPricingTier(sale, null);\n            updateSale(sale);\n          }\n        } else {\n          sale.customer = null;\n          sale.customer_discount_applied = false;\n          var hasPreviousPricingTier = !!sale.pricing_tier;\n          setPricingTier(sale, null);\n          if(hasPreviousPricingTier){\n            changePricesFromPricingTier(sale, $filter('translate')('SALES.CUSTOMER_PRICING_TIER_REVERTED'));\n          }\n          updateSale(sale);\n        }\n      }\n\n      function setPricingTier(sale, pricingTierId) {\n        sale.applyCustomerPricingTier = !!pricingTierId;\n        sale.pricing_tier = pricingTierId;\n      }\n\n      /**\n       * Retrieves the products from the server according to the input test\n       * @param sale\n       * @returns {*}\n       */\n      function productsQuerySearch(sale) {\n        sale.productAutocomplete.productSearchText = sale.productAutocomplete.productSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n        var deferred = $q.defer();\n\n        api.inventories.products.get(\n          {\n            serializer: 'ProductPosFinderSerializer',\n            register_warehouse: vm.selectedRegister.warehouse.id,\n            search: sale.productAutocomplete.productSearchText,\n            in_stock: sale.in_stock ? true : null\n          },\n          function(results) {\n            if (results.results) {\n              deferred.resolve(results.results);\n            } else {\n              deferred.resolve([]);\n            }\n          }\n        );\n        return deferred.promise;\n      }\n\n      /**\n       * Retrieves the customers from the server according to the input test\n       * @param sale\n       * @returns {*}\n       */\n      function customersQuerySearch(sale) {\n\n        var deferred = $q.defer();\n        sale.customerAutocomplete.customerSearchText = sale.customerAutocomplete.customerSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n        api.sales.customers.get(\n          {\n            search: sale.customerAutocomplete.customerSearchText\n          },\n          function(results) {\n            if (results.results) {\n              deferred.resolve(results.results);\n            } else {\n              deferred.resolve([]);\n            }\n          }\n        );\n        return deferred.promise;\n      }\n\n      function showApplyBalanceButton(sale) {\n        return (sale.total > 0.00 ||\n            sale.balance_discount) &&\n          sale.customerAutocomplete.selectedItem &&\n          sale.customerAutocomplete.selectedItem.balance &&\n          sale.customerAutocomplete.selectedItem.balance != 0.00 &&\n          vm.inventoryConfiguration.default_contact_balance_ratio_active;\n      }\n\n      function applyOrRemoveBalanceDiscount(sale) {\n        if (sale.balance_discount === undefined || sale.balance_discount === null || sale.balance_discount === 0.00) {\n          sale.balance_discount = parseFloat(sale.customerAutocomplete.selectedItem.balance) > sale.total ? sale.total : parseFloat(sale.customerAutocomplete.selectedItem.balance);\n          vm.discountAsPercentage = sale.balance_discount != sale.total ? sale.balance_discount / sale.total : 0.;\n        } else {\n          delete sale.balance_discount;\n          vm.discountAsPercentage = null;\n        }\n        updateSale(sale);\n      }\n\n      /**\n       * Shows the new customer dialog\n       * @param customerAutocomplete\n       * @param sale\n       */\n      function createCustomer(customerAutocomplete, sale) {\n        if (!checkEditableCustomer(sale)) {\n          return false;\n        }\n\n        vm.creatingCustomer = true;\n\n        // Hiding the mdAutocomplete content:\n        angular.element('.customer-autocomplete input').scope().$mdAutocompleteCtrl.hidden = true;\n        $rootScope.ndBarcodeListenerEnabled = false;\n        $mdDialog.show({\n          controller: 'ContactDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            forceCustomer: true,\n            forceNaturalPersonType: true\n          },\n          resolve: {\n            ContactsData: function(apiResolver) {\n              if (customerAutocomplete && customerAutocomplete.selectedItem && customerAutocomplete.selectedItem.id)\n                return apiResolver.resolve('inventories.contacts@get', { id: customerAutocomplete.selectedItem.id });\n              return false;\n            },\n            PricingTiersData: function(apiResolver) {\n              return apiResolver.resolve('inventories.pricingTiers@list');\n            },\n            PaymentMethodsData: function(apiResolver) {\n              return apiResolver.resolve('accounting.paymentMethods@get');\n            }\n          }\n        }).then(function(contact) {\n          customerAutocomplete.selectedItem = contact;\n          $rootScope.ndBarcodeListenerEnabled = true;\n          vm.creatingCustomer = false;\n        }, function() {\n          $rootScope.ndBarcodeListenerEnabled = true;\n          vm.creatingCustomer = false;\n        });\n      }\n\n      function hasCustomerSelected(sale) {\n        return sale.customerAutocomplete && sale.customerAutocomplete.selectedItem && sale.customerAutocomplete.selectedItem.id;\n      }\n\n      function viewStock(posOrderProductVariant, ev) {\n        if (posOrderProductVariant.is_bundle) {\n          posOrderProductVariant.showBundle = !posOrderProductVariant.showBundle;\n          return;\n        }\n        apiResolver.resolve('inventories.products@get', {\n          'id': posOrderProductVariant.product,\n          'serializer': 'ProductStockSerializer'\n        }).then(function(response) {\n          vm.selectedProductStock = response;\n          vm.selectedPosOrderProductVariant = posOrderProductVariant;\n          vm.showStockDetails = true;\n          $mdDialog.show({\n            contentElement: '#sellOrderStockDialog',\n            parent: angular.element(document.getElementById(document.body)),\n            targetEvent: ev,\n            clickOutsideToClose: true,\n            fullscreen: true\n          }).then(function(result) {\n            hideStock();\n          }, function() {\n            hideStock();\n          });\n        });\n      }\n\n      function hideStock() {\n        vm.showStockDetails = false;\n        vm.selectedProductStock = null;\n        vm.selectedPosOrderProductVariant = null;\n        $mdDialog.hide();\n      }\n\n      /**\n       * Returns the formated string for a given customer\n       * @param customer\n       * @param searchText\n       * @returns {*}\n       */\n      function getCustomerText(customer, searchText) {\n        var result = '';\n\n        if (!customer) {\n          return result;\n        }\n\n        if (searchText && customer.name && customer.name.toLowerCase().includes(searchText.toLowerCase())) {\n          result = customer.name;\n        } else {\n          result = $filter('personname')(customer);\n        }\n        if (customer.email)\n          result += ' - ' + customer.email;\n        if (customer.phone)\n          result += ' - ' + customer.phone;\n        return result;\n      }\n\n      function getItemCustomerText(customer) {\n        var result = '';\n\n        if (!customer) {\n          return result;\n        }\n\n        if (customer.name) {\n          result = customer.name;\n        } else {\n          result = $filter('personname')(customer);\n        }\n        return result;\n      }\n\n      function customerAutocompleteFocused(sale) {\n        vm.setNdBarcodeListenerEnabled(false);\n        if (!checkEditableCustomer(sale)) {\n          return false;\n        }\n      }\n\n      /**\n       * Deprecated. Use popv factory methods instead (getTotal or getSubtotal)\n       *\n       * Returns the prices applying the custom price, the discount and the amount\n       * @param posOrderProductVariant\n       * @param inclTax\n       * @param rounded (optional)\n       */\n      function getPrice(posOrderProductVariant, inclTax, rounded) {\n        if (typeof rounded === 'undefined') {\n          rounded = false;\n        }\n\n        var price;\n\n        if (posOrderProductVariant.custom_price_incl_tax !== null && posOrderProductVariant.custom_price_incl_tax !== undefined) {\n          if (inclTax) {\n            price = posOrderProductVariant.amount * posOrderProductVariant.custom_price_incl_tax;\n          } else {\n            price = posOrderProductVariant.amount * posOrderProductVariant.custom_price_excl_tax;\n          }\n        } else if (posOrderProductVariant.discount !== null && posOrderProductVariant.discount > 0) {\n          if (inclTax) {\n            price = posOrderProductVariant.amount * posOrderProductVariant.discount_price_incl_tax;\n          } else {\n            price = posOrderProductVariant.amount * posOrderProductVariant.discount_price_excl_tax;\n          }\n        } else {\n          if (inclTax) {\n            price = posOrderProductVariant.amount * posOrderProductVariant.price_incl_tax;\n          } else {\n            price = posOrderProductVariant.amount * posOrderProductVariant.price_excl_tax;\n          }\n        }\n\n        if (rounded) {\n          return Utils.roundPrice(price);\n        }\n\n        return price;\n      }\n\n      /**\n       * Recalculates the prices applying the discount and the amount\n       * @param posOrderProductVariant\n       */\n      function updatePosOrderProductVariantDiscountPrices(posOrderProductVariant) {\n\n        // Promotion.fixed_discount is more important than posOrderProductVariant.discount\n        if (posOrderProductVariant.promotion && posOrderProductVariant.promotion_discount) {\n          posOrderProductVariant.discount = posOrderProductVariant.promotion_fixed_discount;\n\n        } else if (posOrderProductVariant.discount) {\n          posOrderProductVariant.discount = Math.max(posOrderProductVariant.discount, 0);\n          posOrderProductVariant.discount = Math.min(posOrderProductVariant.discount, 100);\n\n          var price_excl_tax = posOrderProductVariant.price_incl_tax / (1.0 + (parseFloat(posOrderProductVariant.tax_percent_value) / 100.0));\n\n          posOrderProductVariant.discount_price_excl_tax = price_excl_tax * (1.0 - parseFloat(posOrderProductVariant.discount) / 100.0);\n          posOrderProductVariant.discount_price_incl_tax = posOrderProductVariant.price_incl_tax * (1.0 - parseFloat(posOrderProductVariant.discount) / 100.0);\n        }\n      }\n\n      /**\n       * Returns the sub-total of the given sale\n       * @param sale\n       * @returns {number}\n       */\n      function getSubtotal(sale) {\n        var result = 0;\n        sale.pos_order_product_variants.forEach(function(popv) {\n          result += getPrice(popv, false, true);\n        });\n\n        if (sale.total !== 0 && result >= sale.balance_discount && !sale.isDevolution) {\n          vm.discountAsPercentage = sale.balance_discount != sale.total ? sale.balance_discount / (sale.balance_discount + sale.total) : 0.;\n        }\n\n        if (vm.discountAsPercentage) {\n          result = result * (1 - vm.discountAsPercentage);\n        }\n        return Utils.roundPrice(result);\n      }\n\n      /**\n       * Returns the total taxes of the given sale\n       * @param sale\n       * @returns {number}\n       */\n      function getTotalTaxes(sale) {\n        var result = 0;\n        sale.pos_order_product_variants.forEach(function(popv) {\n          var tax = getPrice(popv, true, true) - getPrice(popv, false, true);\n          if (vm.discountAsPercentage) {\n            tax = Utils.roundPrice(tax * (1 - vm.discountAsPercentage));\n          }\n          result += tax;\n        });\n        return result;\n      }\n\n      /**\n       * Returns the total of the given sale\n       * @param sale\n       * @param avoidConsumedGiftCards\n       * @param discounted - Optional parameter\n       * @returns {number}\n       */\n      function getTotal(sale, avoidConsumedGiftCards, discounted) {\n        if (typeof discounted === 'undefined') {\n          discounted = true;\n        }\n\n        var result = 0;\n\n        if (avoidConsumedGiftCards) {\n          sale.pos_order_product_variants.forEach(function(popv) {\n            if (popv.consumed_gift_card === null) {\n              result += getPrice(popv, true, true);\n            }\n          });\n        } else {\n          sale.pos_order_product_variants.forEach(function(popv) {\n            result += getPrice(popv, true, true);\n          });\n        }\n        if (sale.balance_discount !== undefined\n          && sale.balance_discount !== null\n          && sale.balance_discount != 0\n          && discounted\n          && !sale.isDevolution) {\n          return checkBalanceDiscount(sale, result);\n        }\n        return Utils.roundPrice(result);\n      }\n\n      function checkBalanceDiscount(sale, total) {\n        if (sale.customerAutocomplete.selectedItem === null || total < 0) {\n          return Utils.roundPrice(total - sale.balance_discount);\n        }\n        sale.balance_discount = parseFloat(sale.customerAutocomplete.selectedItem.balance) > total ? total : parseFloat(sale.customerAutocomplete.selectedItem.balance);\n        vm.discountAsPercentage = sale.balance_discount != total ? sale.balance_discount / total : 0.;\n        return Utils.roundPrice(total - sale.balance_discount);\n      }\n\n      /**\n       * Returns the total tax of the given sale\n       * @param groupedProductVariants\n       * @returns {number}\n       */\n      function getTotalTaxByGroup(groupedProductVariants) {\n        var totalExcTaxByTax = 0;\n\n        if (groupedProductVariants) {\n          groupedProductVariants.forEach(function(popv) {\n            totalExcTaxByTax += getPrice(popv, true, true) - getPrice(popv, false, true);\n          });\n        }\n        if (vm.discountAsPercentage) {\n          totalExcTaxByTax = totalExcTaxByTax * (1 - vm.discountAsPercentage);\n        }\n        return totalExcTaxByTax;\n      }\n\n      /**\n       * Function that's executed when a posOrder barcode has been listened\n       * @param barcode\n       */\n      function posOrderCallback(barcode) {\n\n\n        // Appending dialog to document.body to cover sidenav in docs app\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SALES.POS_ORDER_DETECTED'))\n          .textContent($filter('translate')('SALES.POS_ORDER_DETECTED_MSG'))\n          .clickOutsideToClose(false)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('SALES.START_DEVOLUTION'))\n          .cancel($filter('translate')('SALES.GO_TO_POS_ORDER'));\n\n        $mdDialog.show(confirm).then(function() {\n          var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n\n          apiToUse.update(\n            {\n              option: 'create-devolution-draft',\n              barcode: barcode,\n              register: vm.selectedRegister.id\n            },\n            function(results, fn, status, message) {\n              if (status == HTTP_STATUS.HTTP_200_OK) {\n                createDevolutionSale(results);\n              } else if (status == HTTP_STATUS.HTTP_404_NOT_FOUND) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.POS_ORDER_NOT_FOUND')).position('top right'));\n              } else if (status == HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.POS_ORDER_NOT_ALLOWED')).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          );\n        }, function() {\n          showSaleDialog(barcode);\n        });\n\n      }\n\n      /**\n       * Function that's executed when a devolutionCard barcode has been listened\n       * @param barcode\n       */\n      function devolutionCardCallback(barcode) {\n\n        var index = vm.sales[vm.currentTab].devolution_cards.findIndex(function(devolutionCard) {\n          return devolutionCard.barcode === barcode;\n        });\n\n        // If the barcode is already in the current sale\n        if (index !== -1) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.VOUCHER_ALREADY_USED')).position('top right'));\n          return;\n        }\n\n        api.inventories.posOrderProductVariants.save({\n            barcode: barcode,\n            option: 'consume-gift-card'\n          },\n          function(results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              // If the devolution card it's already used\n              if (results.custom_price_incl_tax >= 0) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('SALES.VOUCHER_USED'))\n                  .hideDelay(5000)\n                  .highlightAction(true)\n                  .position('top right'));\n              } else {\n                searchGiftCardCallback(vm.sales[vm.currentTab], results);\n                updateSale(vm.sales[vm.currentTab]);\n              }\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.VOUCHER_NOT_FOUND')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n\n      /**\n       * Function that's executed when a barcode has been listened\n       * @param barcode\n       */\n      function barcodeListenerCallback(barcode) {\n        var sale = vm.sales[vm.currentTab];\n\n        // We check whether the product is already in the posOrderProductVariants and is not used by a promotion\n        var existingIndex = sale.pos_order_product_variants.findIndex(function(posOrderProductVariant) {\n          return posOrderProductVariant.barcode === barcode && !posOrderProductVariant.promotion;\n        });\n\n        // If we find a posOrderProductVariant with the same barcode\n        if (existingIndex !== -1) {\n          if (sale.pos_order_product_variants[existingIndex].uid_stock_uid) {\n            createPosOrderProductVariant(sale, barcode);\n          } else {\n            sale.pos_order_product_variants[existingIndex].amount += 1;\n            updateSale(sale);\n          }\n        }\n        // Otherwise, we call api to create the line product\n        else {\n          createPosOrderProductVariant(sale, barcode);\n        }\n      }\n\n      function openNotFoundDialog(barcode) {\n        $rootScope.ndBarcodeListenerEnabled = false;\n        $mdDialog.show({\n          controller: 'ProductNotFoundDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/product-not-found-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          focusOnOpen: false,\n          locals: {\n            params: { barcode: barcode }\n          }\n        }).then(function(result) {\n          $rootScope.ndBarcodeListenerEnabled = true;\n        }, function(result) {\n          $rootScope.ndBarcodeListenerEnabled = true;\n        });\n      }\n\n      /**\n       * Creates the posOrderProductVariants with the given barcode by calling the api\n       */\n      function createPosOrderProductVariant(sale, barcode) {\n        // The sale is set as isFetching data\n        sale.isFetching = true;\n\n        api.inventories.posOrderProductVariants.save(\n          {\n            barcode: barcode,\n            warehouse: vm.selectedRegister.warehouse.id,\n            save: false,\n            // Nullable:\n            pos_order: sale.id,\n            pricing_tier: sale.pricing_tier\n          },\n          function(results, fn, status) {\n\n            sale.isFetching = false;\n\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              var warehouse = {\n                id: sale.source_warehouse\n              };\n              var product = {\n                id: results.product\n              };\n              sale.selectedProduct = product;\n              vm.productsById[product.id] = product;\n              var result = results.manage_uid_and_product_variant;\n              if (result.manageUids && !result.manageLots) {\n                if (barcode.length !== results.barcode.length) {\n                  if (barcode.length > results.barcode.length) {\n                    if (barcode.length - results.barcode.length === 1) {\n                      results.barcode = '0' + results.barcode;\n                    }\n                  } else {\n                    if (results.barcode.length - barcode.length === 1) {\n                      barcode = '0' + barcode;\n                    }\n                  }\n                }\n                if (barcode !== results.barcode) {\n                  var init_search = barcode;\n                } else {\n                  var init_search = '';\n                }\n\n                var excludedUids = __getExcludedUids(sale.pos_order_product_variants);\n\n                if (results.uid_stock_uid === init_search) {\n                  if (!excludedUids.includes(results.uid_stock_uid)) {\n                    //TODO Maybe just change the uid of the given pos order product variant (results)\n                    onProductVariantSelected(sale, result, [{\n                      'id': results.uid_stock,\n                      'uid': results.uid_stock_uid\n                    }]);\n                  }\n                } else {\n                  $mdDialog.show({\n                    controller: 'UidsSearchDialogController as vm',\n                    templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-search/uids-search.html',\n                    parent: angular.element($document.find('body')),\n                    locals: {\n                      warehouseId: warehouse.id,\n                      productVariantId: result.variant.id,\n                      allowCreate: false,\n                      operation: 'sale',\n                      orderDeliveryProductVariant: sale,\n                      orderProductVariant: result,\n                      showAll: false,\n                      excludeUids: excludedUids,\n                      initSearch: init_search,\n                      manageLots: null,\n                      manageUids: null,\n                      warehouseName: null,\n                      product: null\n                    }\n                  }).then(function(selectedUidStocks) {\n                    //TODO Maybe just change the uid of the given pos order product variant (results)\n                    onProductVariantSelected(sale, result, selectedUidStocks);\n                  });\n                }\n              } else {\n                //TODO Add flow to add the pos order product variant (results) to the pos_order\n                onPosOrderProductVariantSelected(sale, results);\n              }\n            } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n              if (!vm.inventoryConfiguration.tpv_dialog_product_not_found) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND', { barcode: barcode })).position('top right'));\n              } else {\n                vm.openNotFoundDialog(barcode);\n              }\n            } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && result.Error && result.Error === ERROR_CODES.ERROR_04001_PRICE_NOT_SET) {\n              if (Session.hasPermission('app.inventory.products.product.pricing-tiers')) {\n                var confirm = $mdDialog.confirm()\n                  .title($filter('translate')('SALES.PRODUCT_NOT_SET_WAREHOUSE'))\n                  .htmlContent($filter('translate')('SALES.PRODUCT_NOT_SET_WAREHOUSE_MSG', { barcode: barcode }))\n                  .clickOutsideToClose(true)\n                  .parent(angular.element(document.body))\n                  .ok($filter('translate')('SALES.VIEW_PRODUCT_DETAILS'))\n                  .cancel($filter('translate')('GENERAL.CLOSE'));\n\n                $mdDialog.show(confirm).then(function() {\n                  $state.go('app.inventory.products.product.pricing-tiers', { id: result.product_id });\n                }, function() {\n                  // Do nothing\n                });\n              } else {\n                $mdDialog.show(\n                  $mdDialog.alert()\n                    .parent(angular.element(document.querySelector('#dialogContent_pos-order-dialog')))\n                    .clickOutsideToClose(true)\n                    .title($filter('translate')('SALES.PRODUCT_NOT_SET_WAREHOUSE'))\n                    .htmlContent($filter('translate')('SALES.PRODUCT_NOT_SET_WAREHOUSE_MSG'))\n                    .ok($filter('translate')('GENERAL.CLOSE'))\n                    .targetEvent(ev)\n                );\n              }\n            } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && result.Error && result.Error === ERROR_CODES.ERROR_04040_UID_HAS_SHIPPED) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('ERRORS.ERROR_04040_UID_HAS_SHIPPED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n\n      function onProductVariantSelected(sale, productVariant, selectedUidStocks) {\n        if (selectedUidStocks !== null) {\n          selectedUidStocks.forEach(function(uidStock) {\n            addProductVariantIntoPosOrder(sale, productVariant.variant, uidStock);\n          });\n        } else {\n          var alreadyExists = sale.pos_order_product_variants.some(function(pv) {\n            return pv.product_variant == productVariant.variant.id;\n          });\n          if (alreadyExists) {\n            incrementProductVariantAmount(sale, productVariant.variant.id);\n          } else if (sale.selectedProduct.productVariantIdToChangeTo) {\n            var origin = sale.selectedProduct.productVariantIdToChangeTo;\n            performChangeOfProductVariants(sale, origin, productVariant.variant);\n          } else {\n            addProductVariantIntoPosOrder(sale, productVariant.variant);\n          }\n        }\n        clearProductAutocomplete(sale);\n      }\n\n      function onPosOrderProductVariantSelected(sale, productVariant) {\n        var alreadyExists = sale.pos_order_product_variants.some(function(pv) {\n          return pv.product_variant == productVariant.product_variant;\n        });\n        if (alreadyExists) {\n          incrementProductVariantAmount(sale, productVariant.product_variant);\n        } else {\n          addPosProductVariantToSale(sale, productVariant);\n        }\n      }\n\n      function incrementProductVariantAmount(sale, productVariant_id) {\n        var existingIndex = sale.pos_order_product_variants.findIndex(function(pv) {\n          return pv.product_variant == productVariant_id;\n        });\n\n        var changeAmount = 0;\n\n        // If it's a change of variants and the variant exists, we add its amount to the result\n        if (sale.selectedProduct.productVariantIdToChangeTo) {\n          var productVariantIdToChangeTo = sale.selectedProduct.productVariantIdToChangeTo;\n          // Otherwise, we call api to initialize the line product\n          api.inventories.posOrderProductVariants.save(\n            {\n              product_variant: productVariant_id,\n              warehouse: vm.selectedRegister.warehouse.id,\n              save: false,\n              pos_order: vm.sales[vm.currentTab].id,\n              in_stock: sale.in_stock,\n              pricing_tier: sale.pricing_tier\n            },\n            function(result) {\n              var popvIndex = sale.pos_order_product_variants.findIndex(function(posOrderProductVariant) {\n                return posOrderProductVariant.product_variant == productVariantIdToChangeTo;\n              });\n\n              changeAmount = sale.pos_order_product_variants[popvIndex].amount;\n              sale.pos_order_product_variants.splice(popvIndex, 1);\n            }\n          );\n        }\n\n        sale.pos_order_product_variants[existingIndex].amount += 1 + changeAmount;\n        updateSale(sale);\n      }\n\n      function performChangeOfProductVariants(sale, fromProductVariant, toProductVariant) {\n        var devolutionPosOrderProductVariant = sale.selectedProduct.devolutionPosOrderProductVariant;\n\n        // we initialize the new product\n        api.inventories.posOrderProductVariants.save({\n          product_variant: toProductVariant.id,\n          warehouse: vm.selectedRegister.warehouse.id,\n          save: false,\n          pos_order: vm.sales[vm.currentTab].id,\n          in_stock: sale.in_stock,\n          pricing_tier: sale.pricing_tier\n        }, function(result) {\n          var popvIndex = sale.pos_order_product_variants.findIndex(function(posOrderProductVariant) {\n            return posOrderProductVariant.product_variant == fromProductVariant;\n          });\n\n          if (!devolutionPosOrderProductVariant) {\n            // if it's a normal change we delete the old productVairant and initialize a new one\n            result.amount = sale.pos_order_product_variants[popvIndex].amount;\n            result.discount = sale.pos_order_product_variants[popvIndex].discount;\n            result.discount_price_excl_tax = sale.pos_order_product_variants[popvIndex].discount_price_excl_tax;\n            result.discount_price_incl_tax = sale.pos_order_product_variants[popvIndex].discount_price_incl_tax;\n            result.custom_price_excl_tax = sale.pos_order_product_variants[popvIndex].custom_price_excl_tax;\n            result.custom_price_incl_tax = sale.pos_order_product_variants[popvIndex].custom_price_incl_tax;\n\n            sale.pos_order_product_variants.splice(popvIndex, 1);\n          } else {\n            // else if it's a change of a a devolution we initialize a new one but keeping the devolution\n            result.amount = angular.copy(sale.pos_order_product_variants[popvIndex].amount) * -1;\n            result.discount = angular.copy(sale.pos_order_product_variants[popvIndex].discount);\n            result.discount_price_excl_tax = angular.copy(sale.pos_order_product_variants[popvIndex].discount_price_excl_tax);\n            result.discount_price_incl_tax = angular.copy(sale.pos_order_product_variants[popvIndex].discount_price_incl_tax);\n            result.custom_price_excl_tax = angular.copy(sale.pos_order_product_variants[popvIndex].custom_price_excl_tax);\n            result.custom_price_incl_tax = angular.copy(sale.pos_order_product_variants[popvIndex].custom_price_incl_tax);\n          }\n\n          addPosProductVariantToSale(sale, result);\n        });\n      }\n\n      function addProductVariantIntoPosOrder(sale, productVariant, uidStock) {\n        api.inventories.posOrderProductVariants.save(\n          {\n            product_variant: productVariant.id,\n            warehouse: vm.selectedRegister.warehouse.id,\n            save: false,\n            pos_order: vm.sales[vm.currentTab].id,\n            in_stock: sale.in_stock,\n            uid_stock: uidStock,\n            pricing_tier: sale.pricing_tier\n          },\n          function(result) {\n            if (result.Error) {\n              var content = '';\n              var buttonText = 'SALES.VIEW_SALE';\n              if (result.Error === ERROR_CODES.ERROR_04040_UID_HAS_SHIPPED) {\n                content = 'ERRORS.ERROR_04040_UID_HAS_SHIPPED';\n              } else if (result.Error === ERROR_CODES.ERROR_04041_UID_HAS_ALLOCATED) {\n                content = 'ERRORS.ERROR_04041_UID_HAS_ALLOCATED';\n              } else if (result.Error === ERROR_CODES.ERROR_04042_UID_IS_TRANSFERRING) {\n                content = 'ERRORS.ERROR_04042_UID_IS_TRANSFERRING';\n                buttonText = 'TRANSFERS.VIEW_TRANSFER';\n              }\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')(content))\n                .action($filter('translate')(buttonText))\n                .hideDelay(5000)\n                .highlightAction(true)\n                .position('top right')).then(function(toast_response) {\n                if (toast_response === 'ok') {\n                  if (result.order.type === 'sale_order') {\n                    $state.go('app.wholesale.sales.sale.products', { id: result.order.id });\n                  } else if (result.order.type === 'pos_order') {\n                    $state.go('app.sale.sales_log.order', { id: result.order.id });\n                  } else if (result.order.type === 'transfer') {\n                    $state.go('app.inventory.transfers.transfer.products', { id: result.order.id });\n                  }\n                }\n              });\n            } else {\n              addPosProductVariantToSale(sale, result);\n            }\n          }\n        );\n      }\n\n      function addPosOrderIntoUidStock(sale) {\n        api.inventories.uidStocks.save(\n          {\n            option: 'add-to-posorder',\n            uid_stock: sale.pos_order_product_variants,\n            pos_order: sale.id\n          }, function(result) {\n            console.log(result);\n          }\n        );\n      }\n\n      /**\n       * Adds the given product to the sale's list\n       * @param sale\n       * @param posProductVariant\n       */\n      function addPosProductVariantToSale(sale, posProductVariant) {\n        var popv = new PosOrderProductVariant(posProductVariant);\n\n        popv.showBundle = JSON.parse(localStorage.getItem(Session.company.id + '_' + Session.user.id + '::showBundle'));\n        // Push to the array\n        sale.pos_order_product_variants = [popv].concat(sale.pos_order_product_variants);\n\n        // Recalculate Total and Subtotal\n        if (sale.customer_discount_applied) {\n          vm.applyCustomerDiscount(sale);\n        } else {\n          updateSale(sale);\n        }\n\n        // Reassign to consumed_gift_card if it's possible\n        getConsumedGiftCards(sale).forEach(function(popv) {\n          popv.custom_price_incl_tax = null;\n          popv.custom_price_excl_tax = null;\n        });\n        assignAllToGiftCard(sale, null);\n        vm.hasBundle(sale);\n      }\n\n      /**\n       * Shows or hides the information of the given product in the list\n       * @param product\n       */\n      function togglePosOrderProductVariant(sale, product) {\n        var currentStatus = angular.copy(product.is_open);\n\n        sale.pos_order_product_variants.map(function(pos_order_product_variant) {\n          pos_order_product_variant.is_open = false;\n        });\n\n        product.is_open = !currentStatus;\n      }\n\n      /**\n       * Deletes the selected product in the product autocomplete\n       * @param sale\n       */\n      function clearProductAutocomplete(sale) {\n        vm.setNdBarcodeListenerEnabled(true);\n        sale.productAutocomplete.selectedItem = null;\n        sale.selectedProduct = null;\n      }\n\n      /**\n       * Toggles full screen model\n       */\n      function toggleWindowSize() {\n        var bodyEl = angular.element('body');\n        if (msNavigationService.getFolded()) {\n          msNavigationService.toggleFolded();\n        }\n\n        vm.isFullsize = !vm.isFullsize;\n        bodyEl.toggleClass('fullsize', (vm.isFullsize));\n      }\n\n      function cancelDialog(sale) {\n        $mdDialog.hide();\n        clearProductAutocomplete(sale);\n      }\n\n      /**\n       * Change the view to pay by cash view\n       * @param sale\n       */\n      function payByCash(sale) {\n        if (sale.register_message) {\n          showRegisterMessageDialog(sale, _payByCash);\n        } else {\n          _payByCash(sale);\n        }\n      }\n\n      function setPaymentView(sale) {\n        sale.currentView = vm.PAY_VIEW;\n        $scope.$emit('ndPrinter::warmUpConnection');\n      }\n\n      function _payByCash(sale) {\n        sale.pos_order_payment_methods = newPosOrderPaymentMethods(sale);\n        setPaymentView(sale);\n\n        // Look for the payment method to make it focus\n        for (var paymentMethodId in vm.paymentMethodsDict) {\n\n          if (vm.paymentMethodsDict[paymentMethodId].is_default_cash) {\n            // Make it focus if allowed\n            if (getRegisterConfigurationProperty('autofocus_payment_method', true)) {\n              vm.paymentMethodsDict[paymentMethodId].focus = true;\n            }\n\n            // Set amount 0 for those has amount null\n            /*sale.pos_order_payment_methods.forEach(function (posOrderPaymentMethod) {\n              if (posOrderPaymentMethod.amount === null)\n                posOrderPaymentMethod.amount = 0;\n            });*/\n\n            // Set the total amount by default\n            var posPaymentMethod = sale.pos_order_payment_methods.find(function(posOrderPaymentMethod) {\n              return posOrderPaymentMethod.payment_method == paymentMethodId;\n            });\n            posPaymentMethod.given_amount = Utils.roundPrice(sale.total + getTotalDevolutionCardAmount(sale));\n            selectPaymentMethod(sale, posPaymentMethod);\n          }\n        }\n\n\n        angular.element('#content')[0].scrollTop = 0;\n      }\n\n      function pay(sale) {\n        if (sale.register_message) {\n          showRegisterMessageDialog(sale, _pay);\n        } else {\n          _pay(sale);\n        }\n      }\n\n      /**\n       * Change the view to pay by card view\n       * @param sale\n       */\n      function payByCard(sale) {\n        if (sale.register_message) {\n          showRegisterMessageDialog(sale, _payByCard);\n        } else {\n          _payByCard(sale);\n        }\n      }\n\n      function _payByCard(sale) {\n        sale.pos_order_payment_methods = newPosOrderPaymentMethods(sale);\n        setPaymentView(sale);\n\n        //Check if the register has a default card method. if not, look for company default card method.\n        if (vm.selectedRegister.default_card_method) {\n          paymentMethodId = vm.selectedRegister.default_card_method.id;\n          // Make it focus if allowed\n          if (getRegisterConfigurationProperty('autofocus_payment_method', true)) {\n            vm.paymentMethodsDict[paymentMethodId].focus = true;\n          }\n\n          // Set the total amount by default\n          var posPaymentMethod = sale.pos_order_payment_methods.find(function(posOrderPaymentMethod) {\n            return posOrderPaymentMethod.payment_method == paymentMethodId;\n          });\n          posPaymentMethod.given_amount = Utils.roundPrice(sale.total + getTotalDevolutionCardAmount(sale));\n          selectPaymentMethod(sale, posPaymentMethod);\n\n\n        } else {\n          // Look for the payment method to make it focus\n          for (var paymentMethodId in vm.paymentMethodsDict) {\n\n            if (vm.paymentMethodsDict[paymentMethodId].is_default_card) {\n              // Make it focus if allowed\n              if (getRegisterConfigurationProperty('autofocus_payment_method', true)) {\n                vm.paymentMethodsDict[paymentMethodId].focus = true;\n              }\n\n              // Set the total amount by default\n              var posPaymentMethod = sale.pos_order_payment_methods.find(function(posOrderPaymentMethod) {\n                return posOrderPaymentMethod.payment_method == paymentMethodId;\n              });\n              posPaymentMethod.given_amount = Utils.roundPrice(sale.total + getTotalDevolutionCardAmount(sale));\n              selectPaymentMethod(sale, posPaymentMethod);\n              // Break for loop\n              break;\n            }\n          }\n\n        }\n\n        angular.element('#content')[0].scrollTop = 0;\n      }\n\n      /**\n       * Change the view to refund money view\n       * @param sale\n       */\n      function refundByCash(sale) {\n        PaymentMethods.results.forEach(function(paymentMethod) {\n          if (paymentMethod.is_default_cash) {\n            var amount = Utils.roundPrice(sale.total + getTotalDevolutionCardAmount(sale));\n            sale.pos_order_payment_methods = [{\n              disabled: false,\n              amount: amount,\n              given_amount: amount,\n              payment_method: paymentMethod.id\n            }];\n          }\n        });\n\n        sale.generateDevolutionCard = false;\n        sale.generateDevolutionCardClicked = false;\n        sale.refundByPaymentMethod = true;\n        sale.refundByPaymentMethodCard = false;\n        sale.refundByPaymentMethodCash = true;\n\n        setPaymentView(sale);\n        angular.element('#content')[0].scrollTop = 0;\n      }\n\n      function getCardPaymentWithNoGateway() {\n        return vm.selectedRegister.payment_methods.find(function(posOrderPaymentMethod) {\n          return !posOrderPaymentMethod.payment_gateway && posOrderPaymentMethod.is_default_card;\n        });\n      }\n\n      /**\n       * Change the view to refund money view\n       * @param sale\n       */\n      function refundByCard(sale) {\n        var paymentMethod = getRefundCardPaymentMethod();\n        var amount = Utils.roundPrice(sale.total + getTotalDevolutionCardAmount(sale));\n        sale.pos_order_payment_methods = [{\n          disabled: false,\n          amount: amount,\n          given_amount: amount,\n          payment_method: paymentMethod.id,\n          payment_gateway: paymentMethod.payment_gateway\n\n        }];\n\n\n        // flags\n        sale.generateDevolutionCard = false;\n        sale.generateDevolutionCardClicked = false;\n        sale.refundByPaymentMethod = true;\n        sale.refundByPaymentMethodCard = true;\n        sale.refundByPaymentMethodCash = false;\n\n\n        setPaymentView(sale);\n        angular.element('#content')[0].scrollTop = 0;\n      }\n\n\n      /**\n       * Change the view to pay by cash view\n       * @param sale\n       */\n      function refundByNewDevolutionCard(sale) {\n        sale.pos_order_payment_methods = [];\n\n        // flags\n        sale.generateDevolutionCard = true;\n        sale.generateDevolutionCardClicked = true;\n        sale.refundByPaymentMethod = false;\n        sale.refundByPaymentMethodCard = false;\n        sale.refundByPaymentMethodCash = false;\n\n        setPaymentView(sale);\n        angular.element('#content')[0].scrollTop = 0;\n      }\n\n      /**\n       * Step 1: Saves/Updates the posOrder\n       * @param sale\n       * @param print - prints the ticket if true\n       * @param printGiftTicket - prints the gift ticket if true\n       * @param sendPdf - send pdf by email\n       */\n      function finishPayment(sale, print, printGiftTicket, sendPdf) {\n        if (!sale.paying) {\n          sale.paying = true;\n          var tempSale = angular.copy(sale);\n          sale.available_payment_methods = sale.pos_order_payment_methods;\n          tempSale.pos_order_payment_methods = tempSale.pos_order_payment_methods.filter(function(popm) {\n            return popm.given_amount;\n          });\n\n          vm.has_gateway_payment = false;\n          for (var payment_method in tempSale.pos_order_payment_methods) {\n            if (tempSale.pos_order_payment_methods[payment_method].payment_gateway || (tempSale.pos_order_payment_methods[payment_method].payment_method_instance && tempSale.pos_order_payment_methods[payment_method].payment_method_instance.payment_gateway)) {\n              vm.has_gateway_payment = true;\n            }\n          }\n          if (vm.has_gateway_payment) {\n            tempSale.extra_actions = ['pay'];\n          } else {\n            tempSale.extra_actions = ['close', 'pay'];\n          }\n          if (sendPdf) {\n            tempSale.extra_actions.push('send');\n            if (!sale.customerAutocomplete.selectedItem.email) {\n              sale.paying = false;\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')('SALES.CONTACT_EMAIL_HAS_NOT_BEEN_PROVIDED_TOAST'))\n                .action($filter('translate')('SALES.CONTACT_EMAIL_HAS_NOT_BEEN_PROVIDED_TOAST_ACTION'))\n                .hideDelay(5000)\n                .highlightAction(true)\n                .position('top right')).then(function(toast_response) {\n                if (toast_response === 'ok') {\n                  if (Session.hasPermission('contacts.contacts.update')) {\n                    vm.createCustomer(sale.customerAutocomplete);\n                  }\n                }\n              });\n              return;\n            }\n          }\n          if (!!tempSale.refundByPaymentMethod) {\n            tempSale.extra_actions.push('avoid_devolution_card');\n          }\n\n          // If it's a new sale\n          if (!sale.id) {\n            if (tempSale.generateDevolutionCard || tempSale.refundByPaymentMethodCash || tempSale.refundByPaymentMethodCard) {\n              tempSale.output_amount = 0;\n            }\n            vm.createPosOrderApiVersion.save(\n              tempSale,\n              function(results, fn, status) {\n                postCreateOrUpdatePosOrder(sale, results, fn, status, print, printGiftTicket, sendPdf);\n              }\n            );\n          }\n          // Else it's a devolution or a continuous sale or continuous devolution\n          else {\n            // TODO\n            vm.createPosOrderApiVersion.update(\n              tempSale,\n              function(results, fn, status) {\n                postCreateOrUpdatePosOrder(sale, results, fn, status, print, printGiftTicket, sendPdf);\n              }\n            );\n          }\n        }\n      }\n\n      /**\n       * Step 2: Pays the already created PosOrder.\n       * If the user wants to send a eco gift ticket the mdDialog is displayed\n       * @param sale\n       * @param results\n       * @param fn\n       * @param status\n       * @param print\n       * @param printGiftTicket\n       * @param sendPdf\n       */\n      function postCreateOrUpdatePosOrder(sale, results, fn, status, print, printGiftTicket, sendPdf) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED || status === HTTP_STATUS.HTTP_200_OK) {\n          angular.extend(sale, results);\n          sale.generateDevolutionCardClicked = false;\n          sale.taxes = {};\n\n          sale.pos_order_product_variants = sale.pos_order_product_variants.map(function(popv) {\n            return new PosOrderProductVariant(popv);\n          });\n\n          sale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n            if (!sale.taxes[posOrderProductVariant.tax]) {\n              sale.taxes[posOrderProductVariant.tax] = [];\n            }\n            sale.taxes[posOrderProductVariant.tax].push(posOrderProductVariant);\n          });\n          if (printGiftTicket && sendPdf) {\n            // Save temporally sale because the cash payment method is going to change\n            var tempSale = angular.copy(sale);\n            // If it's a gift, select the desired amounts to print\n            $mdDialog.show({\n              controller: 'EscPosPrinterDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/services/dialogs/esc-pos-printer-dialog/esc-pos-printer-dialog.html',\n              parent: angular.element(document.body),\n              clickOutsideToClose: false,\n              multiple: true,\n              locals: {\n                products: tempSale.pos_order_product_variants,\n                isEco: true\n              }\n            }).then(function(result) {\n\n              var giftAmounts = result.map(function(posOrderProductVariant) {\n                return {\n                  id: posOrderProductVariant.id,\n                  amount: posOrderProductVariant.selected ? posOrderProductVariant.gift_amount : 0\n                };\n              });\n\n              tempSale.is_gift = true;\n              tempSale.gift_amounts = giftAmounts;\n              vm.fetching = true;\n              vm.createPosOrderApiVersion.update(\n                tempSale,\n                function(results, fn, status) {\n                  if (status === HTTP_STATUS.HTTP_200_OK) {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.TICKET_SENT')).position('top right'));\n                  } else {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                  }\n                  vm.fetching = false;\n                });\n            });\n          } else {\n            if (vm.has_gateway_payment) {\n              activeRequestStatusObserver(sale, results, fn, status, print, printGiftTicket);\n            } else {\n              postPayedPosOrder(sale, results, fn, status, print, printGiftTicket);\n            }\n          }\n        } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n          if (results.error === ERROR_CODES.ERROR_01025_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE) {\n            sale.paying = false;\n            $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('ERRORS.ERROR_01025_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE'))\n            .action($filter('translate')('GENERAL.GO'))\n            .hideDelay(10000)\n            .highlightAction(true)\n            .position('top right'))\n            .then(function(toast_response) {\n              if (toast_response === 'ok') {\n                $state.go('app.inventory.configuration.default_serial_numbers');\n              }\n            });\n          } else if (results.error === ERROR_CODES.ERROR_01026_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_FOR_WAREHOUSE) {\n            sale.paying = false;\n            $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('ERRORS.ERROR_01025_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_FOR_WAREHOUSE'))\n            .action($filter('translate')('GENERAL.GO'))\n            .hideDelay(10000)\n            .highlightAction(true)\n            .position('top right'))\n            .then(function(toast_response) {\n              if (toast_response === 'ok') {\n                $state.go('app.inventory.warehouses.warehouse.details', { id: vm.selectedRegister.warehouse.id });\n              }\n            });\n          }\n          else if (results.Error === ERROR_CODES.ERROR_01013_GATEWAY_CONNECTION_FAILED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.ERROR_CANNOT_CONNECT_WITH_GATEWAY_SERVICE')).position('top right'));\n          } else if (results.error === ERROR_CODES.ERROR_01027_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_NOT_ASSOCIATED_WITH_VERIFACTU) {\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('ERRORS.ERROR_01027_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_NOT_ASSOCIATED_WITH_VERIFACTU'))\n              .position('top right')\n              .action($filter('translate')('GENERAL.GO'))\n              .hideDelay(10000)\n              .highlightAction(true)\n              .position('top right'))\n              .then(function(toast_response) {\n                if (toast_response === 'ok') {\n                  $state.go('app.inventory.warehouses.warehouse.details', { id: vm.selectedRegister.warehouse.id });\n                }\n              }\n            );\n            sale.paying = false;\n          } else {\n            sale.paying = false;\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('SALES.CONTACT_EMAIL_HAS_NOT_BEEN_PROVIDED_TOAST'))\n              .action($filter('translate')('SALES.CONTACT_EMAIL_HAS_NOT_BEEN_PROVIDED_TOAST_ACTION'))\n              .hideDelay(5000)\n              .highlightAction(true)\n              .position('top right')).then(function(toast_response) {\n              if (toast_response === 'ok') {\n                if (results.contact_id && Session.hasPermission('contacts.contacts.update')) {\n                  vm.createCustomer(sale.customerAutocomplete);\n                }\n              }\n            });\n          }\n        } else if (results.Error && results.Error == ERROR_CODES.ERROR_04011_GIFT_CARD_ALREADY_EXISTS) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.GIFT_CARD_ALREADY_EXISTS')).position('top right'));\n          sale.paying = false;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.ERROR_CREATE_SALE')).position('top right'));\n          sale.paying = false;\n        }\n      }\n\n      function postPayedPosOrder(sale, results, fn, status, print, printGiftTicket) {\n        if (status === HTTP_STATUS.HTTP_200_OK || status === HTTP_STATUS.HTTP_201_CREATED) {\n          //angular.extend(sale, results);\n          sale.successfullyPaid = true;\n\n          if (print) {\n            printSale(sale, printGiftTicket);\n\n            if (sale.devolution_cards.length > 0) {\n              if (sale.devolution_cards[0].source_pos_order) {\n                $timeout(function() {\n                  api.inventories.posOrders.get({\n                    id: sale.devolution_cards[0].source_pos_order\n                  }, function(response, fn, status) {\n                    if (status === 200) {\n                      printDevolutionCard(response);\n                    }\n                  });\n                }, 1000);\n              } else {\n                $timeout(function() {\n                  api.sales.giftCards.get({\n                    id: sale.devolution_cards[0].id\n                  }, function(response, fn, status) {\n                    if (status === 200) {\n                      $scope.$emit('ndPrinter::printGiftCard', {\n                        giftCard: response\n                      });\n                    }\n                  });\n                }, 1000);\n              }\n            }\n\n          } else {\n            $scope.$emit('ndPrinter::openCashDrawer', {\n              register: vm.selectedRegister\n            });\n          }\n          if (results.generated_devolution_card && results.generated_devolution_card.length > 0) {\n            printDevolutionCard(results);\n          }\n          startAutocloseCurrentSale(sale);\n        } else if (results.Error && results.Error == ERROR_CODES.ERROR_04011_GIFT_CARD_ALREADY_EXISTS) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.GIFT_CARD_ALREADY_EXISTS')).position('top right'));\n        } else if (results.Error === ERROR_CODES.ERROR_01013_GATEWAY_CONNECTION_FAILED) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.ERROR_CANNOT_CONNECT_WITH_GATEWAY_SERVICE')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.ERROR_PAY_SALE')).position('top right'));\n        }\n        sale.paying = false;\n      }\n\n      function startAutocloseCurrentSale(sale) {\n        sale.closeCurrentSaleTimeout = 0;\n\n        sale.autocloseCurrentSaleInterval = $interval(function() {\n          sale.closeCurrentSaleTimeout += 1;\n          if (sale.closeCurrentSaleTimeout >= 100) {\n            closeCurrentSale(sale);\n          }\n        }, 100);\n      }\n\n      function cancelCloseCurrentSaleTimeout(sale) {\n        if (sale.autocloseCurrentSaleInterval) {\n          $interval.cancel(sale.autocloseCurrentSaleInterval);\n          sale.autocloseCurrentSaleInterval = null;\n        }\n      }\n\n      /**\n       * Given a paid sale, it removes the given sale and creates a new sale to keep selling\n       */\n      function closeCurrentSale(sale) {\n        cancelCloseCurrentSaleTimeout(sale);\n\n        const saleIndex = vm.sales.findIndex(function(s) {\n          return s.id === sale.id;\n        });\n        vm.sales.splice(saleIndex, 1);\n\n        if (vm.sales.length == 0) {\n          createNewSale();\n        }\n      }\n\n      /**\n       * Returns true if pay button has to be disabled, otherwise false\n       */\n      function payButtonDisabled(sale) {\n        return !(sale.total <= 0) && sale.paying;\n      }\n\n      /**\n       * Gets the products of the given category\n       * @param sale\n       * @param category\n       */\n      function categoryClicked(sale, category) {\n        sale.selectedCategory = category;\n\n        api.inventories.products.get(\n          {\n            serializer: 'ProductPosFinderSerializer',\n            register_warehouse: vm.selectedRegister.warehouse.id,\n            category__id: category.id,\n            in_stock: sale.in_stock ? true : null\n          },\n          function(results) {\n            if (results.results) {\n              sale.selectedCategory.products = results.results;\n            }\n          }\n        );\n      }\n\n      function hasEposItalyActive() {\n        return vm.selectedRegister.integration_app === INTEGRATION_APP_TYPE.EPOS_ITALY;\n      }\n\n      function printSale(posOrder, printGiftTicket) {\n        if (printGiftTicket && hasEposItalyActive()) {\n          return;\n        }\n\n        $scope.$emit('ndPrinter::printPosOrder', {\n          posOrder: posOrder,\n          register: vm.selectedRegister,\n          openDrawer: true,\n          giftTicket: printGiftTicket,\n          avoidNormalTicket: printGiftTicket\n        });\n      }\n\n      function printDevolutionCard(sale) {\n        $scope.$emit('ndPrinter::printDevolutionCard', {\n          posOrder: sale,\n          register: vm.selectedRegister\n        });\n      }\n\n      /**\n       * Recalculates Total and Subtotal of the given sale. If getPromotions gets promotions, this function is called\n       * again once the promotions have been applied\n       * @param sale\n       * @param avoidGetPromotions\n       */\n      function updateSale(sale, avoidGetPromotions) {\n        if (!avoidGetPromotions) {\n          getPromotions(sale);\n        }\n\n        getRegisterMessages(sale);\n\n        // Update prices\n        sale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n          updatePosOrderProductVariantDiscountPrices(posOrderProductVariant);\n        });\n\n        // Recalculate totals\n        sale.total = getTotal(sale);\n        sale.subtotal = getSubtotal(sale);\n        sale.total_taxes = getTotalTaxes(sale);\n\n        // Regenerate the tax dict\n        sale.taxes = {};\n        sale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n          if (!sale.taxes[posOrderProductVariant.tax]) {\n            sale.taxes[posOrderProductVariant.tax] = [];\n          }\n          sale.taxes[posOrderProductVariant.tax].push(posOrderProductVariant);\n        });\n\n        // Force flags\n        sale.generateDevolutionCard = sale.total < 0;\n        sale.refundByPaymentMethod = false;\n        sale.refundByPaymentMethodCash = false;\n        sale.refundByPaymentMethodCard = false;\n\n        refreshDisplay();\n      }\n\n      /**\n       * Functino executed when the input of pos_order_product_variants.amount changes\n       * @param sale\n       */\n      function amountChanged(sale, posOrderProductVariant, oldAmount, index) {\n        // Fix to avoid posOrderProductVariants with 0 amount\n        if (oldAmount !== 0 && posOrderProductVariant && posOrderProductVariant.amount === 0) {\n          deletePosOrderProductVariant(sale, index);\n        } else {\n          if (posOrderProductVariant && posOrderProductVariant.amount === null) {\n            posOrderProductVariant.amount = 0;\n          }\n\n          sale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n            // Restore old discount prices\n            if (posOrderProductVariant.amount === null) {\n              posOrderProductVariant.amount = 0;\n            }\n            if (posOrderProductVariant.pricesBackup && posOrderProductVariant.promotion) {\n              restorePricesBackup(posOrderProductVariant);\n            }\n\n            // Remove the promotion data\n            posOrderProductVariant.promotion = null;\n            posOrderProductVariant.promotion_name = null;\n            posOrderProductVariant.promotion_discount = null;\n            posOrderProductVariant.promotion_fixed_discount = null;\n          });\n\n          updateSale(sale);\n        }\n      }\n\n      function backupPrices(posOrderProductVariant) {\n        posOrderProductVariant.pricesBackup = {\n          price_incl_tax: angular.copy(posOrderProductVariant.price_incl_tax),\n          price_excl_tax: angular.copy(posOrderProductVariant.price_excl_tax),\n          discount: angular.copy(posOrderProductVariant.discount),\n          discount_price_excl_tax: angular.copy(posOrderProductVariant.discount_price_excl_tax),\n          discount_price_incl_tax: angular.copy(posOrderProductVariant.discount_price_incl_tax),\n          custom_price_incl_tax: angular.copy(posOrderProductVariant.custom_price_incl_tax),\n          custom_price_excl_tax: angular.copy(posOrderProductVariant.custom_price_excl_tax)\n        };\n      }\n\n      function restorePricesBackup(posOrderProductVariant) {\n        posOrderProductVariant.price_incl_tax = posOrderProductVariant.pricesBackup.price_incl_tax;\n        posOrderProductVariant.price_excl_tax = posOrderProductVariant.pricesBackup.price_excl_tax;\n        posOrderProductVariant.discount = posOrderProductVariant.pricesBackup.discount;\n        posOrderProductVariant.discount_price_excl_tax = posOrderProductVariant.pricesBackup.discount_price_excl_tax;\n        posOrderProductVariant.discount_price_incl_tax = posOrderProductVariant.pricesBackup.discount_price_incl_tax;\n        posOrderProductVariant.custom_price_incl_tax = posOrderProductVariant.pricesBackup.custom_price_incl_tax;\n        posOrderProductVariant.custom_price_excl_tax = posOrderProductVariant.pricesBackup.custom_price_excl_tax;\n      }\n\n      function getPromotions(sale) {\n\n        // Create a dict because different pos_order_product_variants might be the same product variant\n        var quantityDictById = {};\n        sale.pos_order_product_variants.filter(function(posOrderProductVariant) {\n          return posOrderProductVariant.amount > 0;\n        }).forEach(function(posOrderProductVariant) {\n          if (!quantityDictById[posOrderProductVariant.product_variant]) {\n            quantityDictById[posOrderProductVariant.product_variant] = {\n              amount: 0,\n              promotion: posOrderProductVariant.promotion,\n              price: posOrderProductVariant.getUnitPrice(true, true)\n            };\n          }\n          quantityDictById[posOrderProductVariant.product_variant].amount += posOrderProductVariant.amount;\n        });\n        var productVariants = [];\n        Object.keys(quantityDictById).forEach(function(posOrderProductVariant) {\n          productVariants.push({\n            id: +posOrderProductVariant,\n            quantity: quantityDictById[posOrderProductVariant].amount,\n            promotion_id: quantityDictById[posOrderProductVariant].promotion,\n            price: quantityDictById[posOrderProductVariant].price\n          });\n        });\n        api.sales.promotions.save({\n          option: 'check',\n          warehouse_id: vm.selectedRegister.warehouse.id,\n          product_variants: productVariants,\n          customer_id: sale.customer\n        }, function(response, callback, status) {\n\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            // keeping the enabled attribute\n            response.promotions.forEach(function(promotion) {\n              var tempPromotion = sale.promotions.find(function(localPromotion) {\n                return promotion.id === localPromotion.id;\n              });\n              promotion.enabled = tempPromotion ? tempPromotion.enabled : true;\n            });\n\n            sale.promotions = response.promotions;\n            matchPromotions(sale);\n          }\n        });\n      }\n\n      function getRegisterMessages(sale) {\n        if (vm.selectedRegister.register_configuration && sale.pos_order_product_variants.length) {\n          api.sales.registerConfigurations.save({\n              id: vm.selectedRegister.register_configuration.id,\n              option: 'check',\n              products: sale.pos_order_product_variants.map(function(posOrderProductVariant) {\n                return posOrderProductVariant.product;\n              })\n            },\n            function(result, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK && result.register_message) {\n                sale.register_message = result.register_message;\n              } else {\n                sale.register_message = null;\n              }\n            });\n        }\n      }\n\n      /**\n       * Applies the sale.promotions to sale. Remember that if sale contains promotions means that the server\n       * has check that sale.promotions must to be appied\n       * @param sale\n       */\n      function matchPromotions(sale) {\n        clearPromotions(sale);\n        var longList = separatePosOrderProductVariants(angular.copy(sale.pos_order_product_variants));\n        sale.promotions.forEach(function(promotion) {\n\n          var tempApplyTo = angular.copy(promotion.apply_to);\n\n          longList.forEach(function(popv) {\n            var index = tempApplyTo.indexOf(popv.product_variant);\n            if (index !== -1) {\n              setPromotionAttributes(popv, promotion);\n              tempApplyTo.splice(index, 1);\n            }\n          });\n\n        });\n\n        if (sale.promotions && sale.promotions.length) {\n          sale.pos_order_product_variants = joinPosOrderProductVariants(longList);\n          updateSale(sale, true);\n        }\n      }\n\n      /**\n       * Separate those PosOrderProductVariants that have amount > 1 into new PosOrderProductVariants with amounts 1\n       * @param popvs\n       * @returns {[]}\n       */\n      function separatePosOrderProductVariants(popvs) {\n        var result = [];\n\n        popvs.forEach(function(popv) {\n          if (popv.amount < 0) {\n            var len = angular.copy(popv.amount);\n            for (var i = 0; i < len * -1; ++i) {\n              var tempPopv = angular.copy(popv);\n              tempPopv.amount = -1;\n              result.push(tempPopv);\n            }\n          } else if (popv.amount === 1) {\n            result.push(angular.copy(popv));\n          } else {\n            var len = angular.copy(popv.amount);\n            for (var i = 0; i < len; ++i) {\n              var tempPopv = angular.copy(popv);\n              tempPopv.amount = 1;\n              result.push(tempPopv);\n            }\n          }\n        });\n\n        return result;\n      }\n\n      /**\n       * The oposite of separatePosOrderProductVariants(), joins the PosOrderProductVariants by joining amounts\n       * @param longList\n       */\n      function joinPosOrderProductVariants(longList) {\n        for (var i = 0; i < longList.length - 1; ++i) {\n          for (var j = i; j < longList.length; ++j) {\n            if (i !== j && areTheSame(longList[i], longList[j])) {\n              longList[i].amount += longList[j].amount;\n              longList.splice(j, 1);\n              --j;\n            }\n          }\n        }\n        return longList;\n      }\n\n      /**\n       * Returns true if the 2 PosOrderProductVariants are equivalent (same attributes)\n       */\n      function areTheSame(popv1, popv2) {\n        if (popv1.product_variant !== popv2.product_variant) {\n          return false;\n        }\n        if (popv1.promotion !== popv2.promotion) {\n          return false;\n        }\n        if (popv1.promotion !== popv2.promotion) {\n          return false;\n        }\n        return true;\n      }\n\n      /**\n       * Return true if targetIds satisfies a promotion with sourceIds with min amount\n       * @param targetIds list of ids of ProductVariants\n       * @param sourceIds list of ids of a Promotion.apply_to\n       * @param min_quantity Promotion.min_quantity amount to apply a Promotion\n       */\n      function containsPromotion(targetIds, sourceIds, min_quantity) {\n        var founds = 0;\n        for (var i = 0; i < targetIds.length; ++i) {\n          if (sourceIds.indexOf(targetIds[i]) !== -1) {\n            ++founds;\n          }\n        }\n\n        if (!founds) {\n          return false;\n        }\n        if (!min_quantity) {\n          return true;\n        }\n        if (min_quantity <= founds) {\n          return true;\n        }\n        return false;\n      }\n\n      /**\n       * Applies the promotion to the posOrderProductVariants if min_max_quantity_enabled is false, otherwise\n       * applies the promotion to the first occurrence of posOrderProductVariants\n       * @param posOrderProductVariants\n       * @param promotion\n       */\n      function setPromotion(posOrderProductVariants, promotion) {\n\n        if (promotion.min_max_quantity_enabled) {\n          var founds = 0;\n\n          for (var i = 0; i < posOrderProductVariants.length; ++i) {\n            // If the posOrderProductVariant matches with promotion and doesn't have any promotion applied\n            if (promotion.apply_to.indexOf(posOrderProductVariants[i].product_variant) !== -1 && !posOrderProductVariants[i].promotion) {\n              if (posOrderProductVariants[i].amount + founds <= promotion.min_quantity) {\n\n                setPromotionAttributes(posOrderProductVariants[i], promotion);\n                founds += posOrderProductVariants[i].amount;\n\n                if (founds === promotion.min_quantity) {\n                  return;\n                }\n              } else {\n                // TODO\n              }\n            }\n          }\n        } else {\n          // Apply the promotion to every matching by id product variant\n          for (var i = 0; i < posOrderProductVariants.length; ++i) {\n            if (promotion.apply_to.indexOf(posOrderProductVariants[i].product_variant) !== -1 && !posOrderProductVariants[i].promotion) {\n              setPromotionAttributes(posOrderProductVariants[i], promotion);\n            }\n          }\n        }\n      }\n\n      function clearPromotions(sale) {\n        sale.pos_order_product_variants.forEach(function(popv) {\n          if (popv.promotion) {\n            restorePricesBackup(popv);\n            popv.promotion = null;\n            popv.promotion_name = null;\n            popv.promotion_discount = null;\n            popv.promotion_fixed_discount = null;\n          }\n        });\n      }\n\n      /**\n       * Applies the prices of the promotion to the given posOrderProductVariant\n       * @param posOrderProductVariant\n       * @param promotion\n       */\n      function setPromotionAttributes(posOrderProductVariant, promotion) {\n        // Only can be set if posOrderProductVariant does not have a promotion already applied\n        if (!posOrderProductVariant.promotion) {\n\n          backupPrices(posOrderProductVariant);\n          var promotionApplied = false;\n\n          if (promotion.fixed_price_incl_tax) {\n            var actual_price = posOrderProductVariant.getUnitPrice(true, true);\n            if (actual_price > promotion.fixed_price_incl_tax) {\n              posOrderProductVariant.discount = null;\n              posOrderProductVariant.discount_price_incl_tax = null;\n              posOrderProductVariant.discount_price_excl_tax = null;\n              posOrderProductVariant.custom_price_incl_tax = Utils.roundPrice(promotion.fixed_price_incl_tax);\n              posOrderProductVariant.custom_price_excl_tax = Utils.roundPrice(promotion.fixed_price_incl_tax / (1 + (posOrderProductVariant.tax_percent_value / 100)));\n              promotionApplied = true;\n            }\n          } else if (promotion.fixed_discount) {\n            if (posOrderProductVariant.discount < promotion.fixed_discount) {\n              posOrderProductVariant.discount = promotion.fixed_discount;\n              promotionApplied = true;\n            }\n          }\n\n          if (promotionApplied) {\n            posOrderProductVariant.promotion = promotion.id;\n            posOrderProductVariant.promotion_name = promotion.name;\n            posOrderProductVariant.promotion_public_name = promotion.public_name;\n            posOrderProductVariant.promotion_discount = promotion.discount;\n            posOrderProductVariant.promotion_fixed_discount = promotion.fixed_discount;\n          }\n        }\n      }\n\n      /**\n       * Returs true if the sale contains more than one different taxes\n       * @param sale\n       */\n      function showTotalTaxes(sale) {\n        return Object.keys(sale.taxes).length > 1;\n      }\n\n      function saveSale(sale, allocateDraft) {\n        var tempSale = angular.copy(sale);\n        tempSale.extra_actions = [];\n        if (allocateDraft) {\n          tempSale.extra_actions.push('allocate_draft');\n        }\n        tempSale.pos_order_payment_methods = tempSale.pos_order_payment_methods.filter(function(popm) {\n          return popm.given_amount;\n        });\n\n        if (!tempSale.id) {\n          vm.createPosOrderApiVersion.save(\n            tempSale,\n            function(result, fn, status) {\n              if (status === HTTP_STATUS.HTTP_201_CREATED) {\n                angular.extend(sale, result);\n\n                sale.pos_order_product_variants = sale.pos_order_product_variants.map(function(popv) {\n                  return new PosOrderProductVariant(popv);\n                });\n\n                updateSale(sale);\n\n                if (sale.autocode) {\n                  sale.title = $filter('translate')('SALES.SALE_NUMBER', { autocode: sale.autocode });\n                } else if (!sale.autocode) {\n                  sale.title = $filter('translate')('SALE.DRAFT');\n                }\n\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('SALES.SALE_SAVED'))\n                  .position('top right'));\n\n              } else {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right'));\n              }\n            }\n          );\n        } else {\n          vm.createPosOrderApiVersion.update(\n            tempSale,\n            function(result, fn, status) {\n\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                angular.extend(sale, result);\n\n                sale.pos_order_product_variants = sale.pos_order_product_variants.map(function(popv) {\n                  return new PosOrderProductVariant(popv);\n                });\n\n                updateSale(sale);\n                sale.pos_order_payment_methods = newPosOrderPaymentMethods(sale);\n\n                if (sale.autocode) {\n                  sale.title = $filter('translate')('SALES.SALE_NUMBER', { autocode: sale.autocode });\n                } else if (!sale.autocode) {\n                  sale.title = $filter('translate')('SALE.DRAFT');\n                }\n\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('SALES.SALE_SAVED'))\n                  .position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right'));\n              }\n            }\n          );\n        }\n      }\n\n      function getTotalDevolutionCardAmount(sale) {\n        var result = 0.0;\n\n        sale.devolution_cards.forEach(function(devolutionCard) {\n          result += devolutionCard.amount;\n        });\n\n        return Utils.roundPrice(result);\n      }\n\n      function createPositiveCashMovement() {\n        openDialogByType(CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_INPUT);\n      }\n\n      function createNegativeCashMovement() {\n        openDialogByType(CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_OUTPUT);\n      }\n\n      function openDialogByType(type) {\n        $mdDialog.show({\n          controller: 'CashMovementDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/cash-movement/cash-movement-dialog.html',\n          clickOutsideToClose: true,\n          locals: {\n            register: vm.selectedRegister,\n            type: type\n          }\n        }).then(function(result) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.CASH_MOVEMENT_CREATED')).position('top right'));\n          $scope.$emit('ndPrinter::openCashDrawer', {\n            register: vm.selectedRegister\n          });\n        }, function() {\n          // Nothing to do\n        });\n      }\n\n      function showSaleDialog(barcode) {\n        $mdDialog.show({\n          controller: 'SalePosOrderDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n          parent: angular.element(document.body),\n          multiple: true,\n          clickOutsideToClose: true,\n          locals: {\n            previousPosOrderId: null\n          },\n          resolve: {\n            PosOrderData: function(apiResolver) {\n              return apiResolver.resolve('inventories.posOrders@get', {\n                barcode: barcode,\n                serializer: 'PosOrderWithDevolutionsSerializer'\n              });\n            }\n          }\n        })\n          .then(function(refresh) {\n            // Nothing to do\n          }, function() {\n            // Nothing to do\n          });\n      }\n\n      function showSaleDialogById(posOrderId) {\n        $mdDialog.show({\n          controller: 'SalePosOrderDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          multiple: true,\n          locals: {\n            previousPosOrderId: null\n          },\n          resolve: {\n            PosOrderData: function(apiResolver) {\n              return apiResolver.resolve('inventories.posOrders@get', {\n                id: posOrderId,\n                serializer: 'PosOrderWithDevolutionsSerializer'\n              });\n            }\n          }\n        })\n          .then(function(refresh) {\n            // Nothing to do\n          }, function() {\n            // Nothing to do\n          });\n      }\n\n      /**\n       * Function called when the price of a PosOrderProductVairant is clicket.\n       * Toggles the input to edit the custom_price_incl_tax\n       * @param posOrderProductVariant\n       */\n      function priceClicked(posOrderProductVariant) {\n        if (Session.hasPermission('sale.sell.set_custom_price')) {\n          posOrderProductVariant.editingPrice = true;\n        }\n      }\n\n      /**\n       * Function called when blur custom_price_incl_tax input\n       * @param popv\n       */\n      function finishCustomPriceEdition(popv, sale, avoidGetPromotions) {\n        popv.editingPrice = false;\n        customPriceChanged(popv, sale, avoidGetPromotions);\n      }\n\n      /**\n       * Function called when blur name input\n       * @param posOrderProductVariant\n       */\n      function nameClicked(posOrderProductVariant) {\n        if (Session.hasPermission('sale.sell.change_product_name')) {\n          posOrderProductVariant.originalProductName = posOrderProductVariant.product_name;\n          posOrderProductVariant.editingName = true;\n        }\n      }\n\n      function finishCustomNameEdition(posOrderProductVariant) {\n        posOrderProductVariant.editingName = false;\n\n        if (posOrderProductVariant.product_name === '') {\n          posOrderProductVariant.product_name = posOrderProductVariant.originalProductName;\n        }\n      }\n\n      /**\n       * Blurs input when keypressed is enter\n       * @param $event\n       */\n      function checkEnterPressed($event) {\n        // If enter is pressed, blur input\n        if (event.which === 13) {\n          var target = $event.target;\n          target.blur();\n        }\n      }\n\n      function showRegisterMessageDialog(sale, callback) {\n        if (sale.register_message === null) {\n          callback(sale);\n          return;\n        }\n        if (sale.register_message.allow_to_pay) {\n          var confirm = $mdDialog.confirm()\n            .title($filter('translate')('SALES.BEFORE_PAYING'))\n            .textContent(sale.register_message.message)\n            .clickOutsideToClose(false)\n            .escapeToClose(false)\n            .ok($filter('translate')('GENERAL.YES'))\n            .cancel($filter('translate')('GENERAL.NO'));\n\n          $mdDialog.show(confirm).then(function() {\n              // Yes clicked, do nothing\n            },\n            function() {\n              // No clicked, continue\n              callback(sale);\n            });\n        } else {\n          var dialog = $mdDialog.alert()\n            .parent(angular.element(document.body))\n            .title($filter('translate')('SALES.BEFORE_PAYING'))\n            .textContent(sale.register_message.message)\n            .clickOutsideToClose(false)\n            .escapeToClose(false)\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n        }\n      }\n\n      function _pay(sale) {\n        sale.pos_order_payment_methods = newPosOrderPaymentMethods(sale);\n        setPaymentView(sale);\n        angular.element('#content')[0].scrollTop = 0;\n      }\n\n      function getTotalAssigned(sale, ignoreDevolutionCards, avoidConsumedGiftCards) {\n\n        var result = 0.00;\n\n        sale.pos_order_payment_methods.forEach(function(paymentMethod) {\n          result += paymentMethod.given_amount;\n        });\n\n        if (!ignoreDevolutionCards) {\n          sale.devolution_cards.forEach(function(devolutionCard) {\n            result += devolutionCard.amount * -1;\n          });\n        }\n\n        // Adding Gift Cards\n        if (!avoidConsumedGiftCards) {\n          result += getTotalConsumedGiftCards(sale);\n        }\n\n        return Utils.roundPrice(result);\n      }\n\n      function getPendingToAssigned(sale, avoidConsumedGiftCards) {\n        var total = getTotal(sale, avoidConsumedGiftCards);\n        var totalAssigned = getTotalAssigned(sale, false, true);\n        return Utils.roundPrice(Math.max(total - totalAssigned, 0));\n      }\n\n      function getBalance(sale) {\n        return Utils.roundPrice(Math.max(getTotalAssigned(sale) - getTotal(sale, true), 0));\n      }\n\n      function getRefoundByAny(sale) {\n\n      }\n\n      function openDevolutionCardFinder() {\n        $mdDialog.show({\n          controller: 'SalesSearchDevolutionCardDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/search-devolution-card-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              registerId: vm.selectedRegister.id\n            }\n          }\n        }).then(function(pos_order_product_variant) {\n          searchGiftCardCallback(vm.sales[vm.currentTab], pos_order_product_variant);\n        }, function() {\n          // Nothing to do\n        });\n      }\n\n      function twoDecimals(value) {\n        return Utils.roundPrice(value);\n      }\n\n      function goToRegisterActivity() {\n        $state.go('app.sale.register_closure', { id: vm.selectedRegister.current_activity.id });\n      }\n\n      function openCashDrawer() {\n        if (vm.selectedRegister.open_drawer_pin) {\n          setNdBarcodeListenerEnabled(false);\n          var confirm = $mdDialog.prompt()\n            .title($filter('translate')('SALES.OPEN_CASH_DRAWER'))\n            .textContent($filter('translate')('SALES.OPEN_CASH_DRAWER_MESSAGE'))\n            .placeholder($filter('translate')('SALES.PIN'))\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('SALES.OPEN_CASH_DRAWER'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n          $mdDialog.show(confirm).then(function(result) {\n            setNdBarcodeListenerEnabled(true);\n            if (vm.selectedRegister.open_drawer_pin === result) {\n              $scope.$emit('ndPrinter::openCashDrawer', {\n                register: vm.selectedRegister\n              });\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.WRONG_PIN')).position('top right'));\n            }\n          }, function() {\n            setNdBarcodeListenerEnabled(true);\n          });\n        } else {\n          $scope.$emit('ndPrinter::openCashDrawer', {\n            register: vm.selectedRegister\n          });\n        }\n      }\n\n      function changeVariants(sale, popv) {\n        // Opening dialog\n        $mdDialog.show({\n          controller: 'ProductVariantSelectorDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/product-variant-selector-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: false,\n          multiple: false,\n          locals: {\n            product: vm.productsById[popv.product],\n            warehouse: vm.selectedRegister.warehouse,\n            inStock: sale.in_stock ? true : null,\n            productVariant: false\n          }\n        }).then(function(result) {\n          sale.selectedProduct = vm.productsById[popv.product];\n          sale.selectedProduct.productVariantIdToChangeTo = popv.product_variant;\n          onProductVariantSelected(sale, result, null);\n        });\n      }\n\n      /**\n       * Returns true when the total of the sale is less than 0\n       * @param sale\n       * @returns {boolean}\n       */\n      function isDevolutionPayingWorkflow(sale) {\n        return (sale.generateDevolutionCard || sale.refundByPaymentMethod);\n      }\n\n      /**\n       * Returns true when is not a devolution and one or more voucher has been used and total of them is higher that\n       * total of the sale\n       * @param sale\n       */\n      function isRegenerateDevolutionCardPayingWorkflow(sale) {\n        return sale.devolution_cards && sale.devolution_cards.length > 0 && sale.total < getTotalDevolutionCardAmount(sale) * -1;\n      }\n\n      /**\n       * Returns true if the given sale is a devolution\n       * @param sale\n       * @returns {boolean|*}\n       */\n      function isDevolution(sale) {\n        return isDevolutionPayingWorkflow(sale) || isRegenerateDevolutionCardPayingWorkflow(sale);\n      }\n\n      /**\n       * Returs true if the system doesn't have to generate any devolution card\n       * @param sale\n       */\n      function isNormalPayingWorkflow(sale) {\n        return sale.total >= 0 && !isRegenerateDevolutionCardPayingWorkflow(sale) && !isDevolutionPayingWorkflow(sale);\n      }\n\n      /**\n       * Returns true if generate voucher confirmation view has to be showed.\n       * @param sale\n       * @returns {boolean}\n       */\n      function showGenerateVoucherConfirmation(sale) {\n        if (sale.successfullyPaid) {\n          return false;\n        }\n        if (sale.pos_order_payment_methods.length !== 0) {\n          return false;\n        }\n        return true;\n      }\n\n      function getVoucherValue(sale) {\n        var result;\n        if (isDevolutionPayingWorkflow(sale))\n          result = sale.total * -1;\n        if (isRegenerateDevolutionCardPayingWorkflow(sale))\n          result = getBalance(sale);\n        return $filter('price')(result);\n      }\n\n      function setNdBarcodeListenerEnabled(value) {\n        $rootScope.ndBarcodeListenerEnabled = value;\n      }\n\n      function setUser(sale, user) {\n        sale.user = user;\n      }\n\n      function countTotalProductVariants(sale) {\n        var result = 0;\n\n        sale.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n          result += posOrderProductVariant.amount;\n        });\n\n        return result;\n      }\n\n      function finishSale(callback, sale, args) {\n\n        if (getPendingToAssigned(sale) !== 0) {\n          if(vm.allowDebtSells){\n            var confirm = $mdDialog.confirm()\n              .title($filter('translate')('SALES.LEAVE_AS_DEBT_TITLE'))\n              .textContent($filter('translate')('SALES.LEAVE_AS_DEBT_MSG'))\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .ok($filter('translate')('SALES.LEAVE_AS_DEBT'))\n              .cancel($filter('translate')('GENERAL.CANCEL'));\n            $mdDialog.show(confirm).then(function() {\n              showUsersBottomSheet(callback, sale, args);\n            }, function() {\n              // Nothing to do\n            });\n          } else {\n            var alert = $mdDialog.alert()\n              .title($filter('translate')('SALES.LEAVE_AS_DEBT_NOT_ALLOWED_TITLE'))\n              .textContent($filter('translate')('SALES.LEAVE_AS_DEBT_NOT_ALLOWED_MSG'))\n              .ok($filter('translate')('GENERAL.CLOSE'));\n            $mdDialog.show(alert);\n          }\n        } else {\n          showUsersBottomSheet(callback, sale, args);\n        }\n      }\n\n      function showUsersBottomSheet(callback, sale, args) {\n        var tempListUsers = Session.listUsers();\n        if (tempListUsers.length > 1) {\n          // If more than user have logged in\n          var parent = angular.element(document.getElementsByClassName('pay-view-whiteframe'));\n          $mdBottomSheet.show({\n            parent: parent[vm.currentTab],\n            templateUrl: 'app/main/apps/sale/views/sell/bottom-sheets/users-bottom-sheet.html',\n            controller: 'UsersBottomSheetController',\n            controllerAs: 'vm',\n            clickOutsideToClose: true,\n            escapeToClose: true\n          }).then(function(user) {\n            setUser(sale, user);\n            callback(sale, args[0], args[1], args[2]);\n          });\n        } else {\n          // If only 1 user has logged in\n          sale.user = tempListUsers[0];\n          callback(sale, args[0], args[1], args[2]);\n        }\n      }\n\n      /**\n       * Assigns the total of the sale to the given payment method considering devolution cards\n       * @param sale\n       * @param paymentMethod\n       */\n      function assignAllToPaymentMethod(sale, paymentMethod) {\n        sale.pos_order_payment_methods.forEach(function(paymentMethod) {\n          paymentMethod.given_amount = null;\n        });\n\n        paymentMethod.given_amount = Utils.roundPrice(sale.total);\n      }\n\n      function toggleCurrentViewType(sale) {\n        sale.currentView = vm.SELL_VIEW;\n        if (sale.currentViewType === vm.CURRENT_VIEW_TYPE_MATRIX) {\n          sale.currentViewType = vm.CURRENT_VIEW_TYPE_LIST;\n        } else {\n          sale.currentViewType = vm.CURRENT_VIEW_TYPE_MATRIX;\n        }\n      }\n\n      function matrixSelectedProductChange(params) {\n        if (vm.selectedRegister.register_configuration) {\n          vm.sales[vm.currentTab].currentViewType = vm.selectedRegister.register_configuration.touch_ui_as_default ?\n            vm.CURRENT_VIEW_TYPE_MATRIX :\n            vm.CURRENT_VIEW_TYPE_LIST;\n        } else {\n          vm.sales[vm.currentTab].currentViewType = vm.CURRENT_VIEW_TYPE_LIST;\n        }\n\n        selectedProductChange(vm.sales[vm.currentTab], params.product);\n      }\n\n      function getRegisterConfigurationProperty(property, defaultValue) {\n        if (vm.selectedRegister) {\n          return vm.selectedRegister.register_configuration ? vm.selectedRegister.register_configuration[property] : defaultValue;\n        } else {\n          return defaultValue;\n        }\n      }\n\n      function useGiftCard(sale) {\n        $mdDialog.show({\n          controller: 'SalesSearchGiftCardDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/search-gift-card-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true\n        }).then(function(pos_order_product_variant) {\n          searchGiftCardCallback(vm.sales[vm.currentTab], pos_order_product_variant);\n        }, function() {\n          // Nothing to do\n        });\n      }\n\n      function searchGiftCardCallback(sale, pos_order_product_variant) {\n        pos_order_product_variant = new PosOrderProductVariant(pos_order_product_variant);\n        if (!sale.pos_order_product_variants.find(function(popv) {\n          return popv.gift_card_code === pos_order_product_variant.gift_card_code;\n        })) {\n          sale.pos_order_product_variants.push(pos_order_product_variant);\n\n          sale.showNonDeclaredBanner = sale.pos_order_product_variants.some(function(popv) {\n            return popv.consumed_gift_card_is_voucher && popv.is_old_non_declared;\n          });\n          assignAllToGiftCard(sale, pos_order_product_variant);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.GIFT_CARD_ALREADY_USED')).position('top right'));\n        }\n      }\n\n      function getTotalLessDevolution(sale) {\n        return Utils.roundPrice(sale.total + getTotalDevolutionCardAmount(sale));\n      }\n\n      function assignAllToGiftCard(sale, posOrderProductVariant) {\n\n        sale.pos_order_payment_methods.forEach(function(paymentMethod) {\n          paymentMethod.given_amount = paymentMethod.amount || 0;\n        });\n\n        var pendingToAssigned = vm.getPendingToAssigned(sale, true);\n\n        if (!posOrderProductVariant) {\n          getConsumedGiftCards(sale).forEach(function(popv) {\n            var total = getPrice(popv, true, true) * -1;\n\n            if (pendingToAssigned < total) {\n              popv.custom_price_incl_tax = pendingToAssigned * -1;\n              finishCustomPriceEdition(popv, sale, true);\n\n              // positive attributes only for the input in the template\n              popv.custom_price_incl_tax_positive = popv.custom_price_incl_tax * -1;\n              popv.price_incl_tax_positive = popv.price_incl_tax * -1;\n            }\n            pendingToAssigned = vm.getPendingToAssigned(sale, true);\n          });\n          updateSale(sale, true);\n        } else {\n          var totalAvailable = getPrice(posOrderProductVariant, true, true);\n          posOrderProductVariant.price_incl_tax = totalAvailable;\n          posOrderProductVariant.price_incl_tax_positive = totalAvailable * -1;\n          if (totalAvailable * -1 <= pendingToAssigned) {\n            posOrderProductVariant.custom_price_incl_tax = totalAvailable;\n            posOrderProductVariant.custom_price_incl_tax_positive = totalAvailable * -1;\n          } else {\n            posOrderProductVariant.custom_price_incl_tax = pendingToAssigned * -1;\n            posOrderProductVariant.custom_price_incl_tax_positive = pendingToAssigned;\n          }\n          finishCustomPriceEdition(posOrderProductVariant, sale, true);\n          updateSale(sale, true);\n        }\n      }\n\n      function getConsumedGiftCards(sale) {\n        return sale.pos_order_product_variants.filter(function(popv) {\n          return !!popv.consumed_gift_card;\n        });\n      }\n\n      function getConsumedGiftCardsNotVoucher(sale) {\n        return sale.pos_order_product_variants.filter(function(popv) {\n          return !!popv.consumed_gift_card && popv.consumed_gift_card_is_voucher === false;\n        });\n      }\n\n      function getConsumedGiftCardsVoucher(sale) {\n        return sale.pos_order_product_variants.filter(function(popv) {\n          return !!popv.consumed_gift_card && popv.consumed_gift_card_is_voucher === true;\n        });\n      }\n\n      function getTotalConsumedGiftCards(sale) {\n        var result = 0;\n\n        getConsumedGiftCards(sale).forEach(function(popv) {\n          result += getPrice(popv, true, true) * -1;\n        });\n\n        return result;\n      }\n\n      function deleteConsumedGiftCard(sale, popv) {\n        var index = sale.pos_order_product_variants.findIndex(function(item) {\n          return item.gift_card_code === popv.gift_card_code;\n        });\n\n        if (index !== -1) {\n          sale.pos_order_product_variants.splice(index, 1);\n          updateSale(sale);\n        }\n      }\n\n      function finishGiftCardCustomPriceEdition(posOrderProductVariant, sale) {\n        posOrderProductVariant.custom_price_incl_tax = posOrderProductVariant.custom_price_incl_tax_positive * -1;\n        finishCustomPriceEdition(posOrderProductVariant, sale, true);\n      }\n\n      function isPaymentDisabled(sale) {\n        for (var iprod = 0; iprod < sale.pos_order_product_variants.length; iprod++) {\n          var popv = sale.pos_order_product_variants[iprod];\n          if (popv.invalid === true || popv.repeated === true ||\n            (popv.is_gift_card && !popv.gift_card_code)) {\n            return true;\n          }\n        }\n\n        return false;\n      }\n\n      function getLanguage() {\n        return $translate.use();\n      }\n\n      function customPriceChanged(popv, sale, avoidGetPromotions) {\n        if (popv.custom_price_incl_tax !== undefined) {\n          popv.discount = null;\n        }\n\n        var taxPercentValue = parseFloat(popv.tax_percent_value);\n        popv.custom_price_excl_tax = parseFloat(popv.custom_price_incl_tax / (1 + (taxPercentValue / 100.0)));\n\n        updateSale(sale, avoidGetPromotions);\n      }\n\n      function checkGiftCardCode(sale, popv) {\n        api.sales.giftCards.list({\n          barcode: popv.gift_card_code\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            popv.invalid = response.count > 0;\n          } else {\n            // TODO show error toast\n          }\n        });\n\n        // when a barcode is changed it could affect the repeated status from another barcode on the same sale\n        // in order to check all invalidated barcodes as well each of them will be saved and then checked\n        var popvs = [popv];\n        for (var index = 0; index < popvs.length; index++) {\n          for (var iprod = 0; iprod < sale.pos_order_product_variants.length; iprod++) {\n            // if the product has any error and has not been registered yet it has to added into pending\n            var prod = sale.pos_order_product_variants[iprod];\n            if ((prod.invalid === true || prod.repeated === true) &&\n              popvs.indexOf(prod) == -1) {\n              popvs.push(prod);\n            }\n\n            // if the current item is equal to any other from the same sale\n            if (sale.pos_order_product_variants[iprod] != popvs[index] &&\n              sale.pos_order_product_variants[iprod].gift_card_code === popvs[index].gift_card_code) {\n              popvs[index].repeated = true;\n              return;\n            }\n          }\n\n          popvs[index].repeated = false;\n        }\n      }\n\n      function saveButtonDisabled() {\n        return (vm.selectedRegister && vm.selectedRegister.is_closed) ||\n          vm.sales[vm.currentTab] && vm.sales[vm.currentTab].successfullyPaid;\n      }\n\n      function saveButtonClicked() {\n        var confirm = $mdDialog\n          .confirm()\n          .title($filter('translate')('SALES.ALLOCATE_STOCK'))\n          .htmlContent($filter('translate')('SALES.ALLOCATE_STOCK_MSG'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('SALES.ALLOCATE_STOCK_YES'))\n          .cancel($filter('translate')('SALES.ALLOCATE_STOCK_NO'));\n        $mdDialog.show(confirm).then(\n          function() {\n            saveSale(vm.sales[vm.currentTab], true);\n          },\n          function() {\n            saveSale(vm.sales[vm.currentTab]);\n          }\n        );\n      }\n\n      function paymentMethodBlurred(elem) {\n        elem.focus = false;\n        setNdBarcodeListenerEnabled(true);\n        refreshDisplay();\n      }\n\n      function paymentMethodFocused() {\n        setNdBarcodeListenerEnabled(false);\n        refreshDisplay();\n      }\n\n      function activeRequestStatusObserver(sale, results, fn, status, print, printGiftTicket) {\n\n        var pos_order_payment_method = null;\n        for (var payment_method in sale.pos_order_payment_methods) {\n          if (sale.pos_order_payment_methods[payment_method].payment_gateway_data !== null) {\n            pos_order_payment_method = sale.pos_order_payment_methods[payment_method];\n          }\n        }\n\n        $mdDialog.show({\n          controller: 'PaymentStatusDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/payment-status-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          escapeToClose: false,\n          focusOnOpen: false,\n          locals: {\n            params: {\n              pos_order_payment_method: pos_order_payment_method,\n              pos_order: sale\n            }\n          }\n        }).then(function(result) {\n          postPayedPosOrder(sale, result, fn, status, print, printGiftTicket);\n        }, function(result) {\n          sale.paying = false;\n          sale.pos_order_payment_methods = sale.available_payment_methods;\n        });\n\n      }\n\n      function hasPaymentGateway(sale) {\n        var has_gateway = sale.pos_order_payment_methods.filter(function(pm) {\n          return pm.payment_gateway;\n        });\n        return has_gateway.length !== 0;\n\n      }\n\n      function applyCustomerDiscount(sale) {\n        sale.customer_discount_applied = true;\n        if (sale.customerAutocomplete.selectedItem.discount) {\n          for (var popv in sale.pos_order_product_variants) {\n            if (sale.pos_order_product_variants[popv].discount < sale.customerAutocomplete.selectedItem.discount)\n              sale.pos_order_product_variants[popv].discount = sale.customerAutocomplete.selectedItem.discount;\n          }\n          vm.updateSale(sale, true);\n        }\n\n      }\n\n      function showPromotions(sale, popv) {\n        var promotion = null;\n        var customer_discount = sale.customerAutocomplete.selectedItem ? sale.customerAutocomplete.selectedItem.discount : null;\n        if (popv.promotion) {\n          if (!customer_discount) {\n            return true;\n          }\n          promotion = sale.promotions.find(function(prom) {\n            return prom.id === popv.promotion;\n          });\n          if (promotion.fixed_discount >= sale.customerAutocomplete.selectedItem.discount || promotion.fixed_price_incl_tax >= popv.price_incl_tax * customer_discount) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      function isLowStock(posOrderProductVariant) {\n        if (posOrderProductVariant == null) {\n          return false;\n        }\n\n        return posOrderProductVariant.stock < posOrderProductVariant.amount;\n      }\n\n      function getRefundCardPaymentMethod() {\n        if (vm.selectedRegister.default_card_method) {\n          if (!vm.sales[vm.currentTab].devolution_of_object || vm.sales[vm.currentTab].total >= 0) {\n            return getCardPaymentWithNoGateway();\n          }\n          var has_gateway = vm.sales[vm.currentTab].devolution_of_object.pos_order_payment_methods.filter(function(pos_order_payment_method) {\n            return pos_order_payment_method.payment_method === vm.selectedRegister.default_card_method.id && pos_order_payment_method.amount >= vm.sales[vm.currentTab].total * -1;\n          });\n\n          if (has_gateway.length === 0) {\n            return getCardPaymentWithNoGateway();\n          }\n\n          return vm.selectedRegister.default_card_method;\n        }\n\n        return getCardPaymentWithNoGateway();\n      }\n\n      function getPaymentMethodByPaymentGateway(sale, gateway) {\n        return sale.pos_order_payment_methods.find(function(pm) {\n          return pm.payment_gateway && pm.payment_gateway.gateway === gateway;\n        });\n      }\n\n      function hasAdyenPaymentGateway(sale) {\n        return getPaymentMethodByPaymentGateway(sale, PAYMENT_METHOD_GATEWAYS.ADYEN);\n      }\n\n      function hasComerciaPaymentGateway(sale) {\n        return getPaymentMethodByPaymentGateway(sale, PAYMENT_METHOD_GATEWAYS.COMERCIA);\n      }\n\n      function getOriginalPayment(sale) {\n        return sale.devolution_of_object.pos_order_payment_methods.find(\n          function(pos_order_payment_method) {\n            return pos_order_payment_method.payment_gateway_data && pos_order_payment_method.payment_gateway_data.gateway === PAYMENT_METHOD_GATEWAYS.COMERCIA;\n          }\n        );\n      }\n\n      function __getExcludedUids(posOrderProductVariants) {\n        return posOrderProductVariants.filter(function(popv) {\n          return !!popv.uid_stock_uid;\n        }).map(function(popv) {\n          return popv.uid_stock_uid;\n        });\n      }\n\n      function getOriginalCardNumber(sale) {\n        if (!sale.devolution_of_object) {\n          return null;\n        }\n        var original_payment = getOriginalPayment(sale);\n\n        if (original_payment) {\n          return original_payment.payment_gateway_data.meta.card_number;\n        }\n        return null;\n      }\n\n      function getOriginalCardIssuer(sale) {\n        if (!sale.devolution_of_object) {\n          return null;\n        }\n        var original_payment = getOriginalPayment(sale);\n\n        if (original_payment) {\n          return original_payment.payment_gateway_data.meta.card_issuer;\n        }\n        return null;\n      }\n\n      function checkEditableCustomer(sale) {\n        if (sale.isDevolution) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALE.CUSTOMER_NOT_EDITABLE_ON_DEVOLUTION')).position('top right'));\n          return false;\n        }\n        return true;\n      }\n\n      function assignSeller(posOrderProductVariant) {\n        posOrderProductVariant.addingSeller = true;\n      }\n\n      function removeSeller(posOrderProductVariant) {\n        posOrderProductVariant.seller = null;\n        posOrderProductVariant.seller_instance = null;\n      }\n\n      function sellerChanged(popv, seller) {\n        if (!seller) {\n          return;\n        }\n        popv.seller = seller.id;\n        popv.seller_instance = seller;\n        popv.addingSeller = false;\n      }\n\n      function showAssignSeller() {\n        return Session.listUsers().length > 1;\n      }\n\n      function toggleShowTaxesDict(sale) {\n        sale.showTaxesDict = !sale.showTaxesDict;\n      }\n\n      function openSearchVendorDialog(popv) {\n        var tempListUsers = Session.listUsers();\n        if (tempListUsers.length > 1) {\n          // If more than user have logged in\n          var parent = angular.element(document.getElementsByClassName('pay-view-whiteframe'));\n          $mdBottomSheet.show({\n            parent: parent[vm.currentTab],\n            templateUrl: 'app/main/apps/sale/views/sell/bottom-sheets/users-bottom-sheet.html',\n            controller: 'UsersBottomSheetController',\n            controllerAs: 'vm',\n            clickOutsideToClose: true,\n            escapeToClose: true\n          }).then(function(user) {\n            sellerChanged(popv, user.data);\n          });\n        }\n      }\n\n      function selectPaymentMethod(sale, posOrderPaymentMethod) {\n        if ($mdMedia('md')) {\n          sale.selectedPosOrderPaymentMethod = posOrderPaymentMethod;\n        } else {\n          sale.selectedPosOrderPaymentMethod = null;\n          vm.assignAllToPaymentMethod(sale, posOrderPaymentMethod);\n        }\n      }\n\n      function openSetNumberDialog(value, options, decimals, unit) {\n        return $mdDialog.show({\n          controller: 'SetNumberDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sell/dialogs/set-number/set-number-dialog.html',\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              value: value,\n              options: options,\n              decimals: decimals,\n              unit: unit\n            }\n          }\n        });\n      }\n\n      function amountFocus(sale, posOrderProductVariant, product, index) {\n        if (vm.selectedRegister.register_configuration && vm.selectedRegister.register_configuration.list_amounts) {\n          openSetNumberDialog(posOrderProductVariant.amount, vm.selectedRegister.register_configuration.list_amounts, 0).then(function(value) {\n            var oldAmount = angular.copy(posOrderProductVariant.amount);\n            posOrderProductVariant.amount = value;\n            vm.amountChanged(sale, product, oldAmount, index);\n          }, function() {\n            // Nothing to do\n          });\n        }\n      }\n\n      function discountFocus(sale, posOrderProductVariant) {\n        if (vm.selectedRegister.register_configuration && vm.selectedRegister.register_configuration.list_discounts) {\n          openSetNumberDialog(posOrderProductVariant.discount, vm.selectedRegister.register_configuration.list_discounts, 2, '%').then(function(value) {\n            posOrderProductVariant.discount = value;\n            vm.updateSale(sale, true);\n          }, function() {\n            // Nothing to do\n          });\n        }\n      }\n\n      function openDisplay() {\n        var displayUrl = $state.href('app.sale.display');\n        var newWindow = $window.open(displayUrl, '_blank');\n\n        newWindow.onload = function() {\n          refreshDisplay();\n        };\n      }\n\n      function showPayByCardButton() {\n        var showDefault = Object.keys(vm.paymentMethodsDict).findIndex(function(paymentMethodId) {\n          return vm.paymentMethodsDict[paymentMethodId].is_default_card;\n        }) !== -1;\n        return getRegisterConfigurationProperty('show_pay_card_button', showDefault);\n      }\n\n      function showRefundByCardButton() {\n        return showPayByCardButton() && vm.REFUND_ENABLED;\n      }\n\n      function showPayByCashButton() {\n        var showDefault = Object.keys(vm.paymentMethodsDict).findIndex(function(paymentMethodId) {\n          return vm.paymentMethodsDict[paymentMethodId].is_default_cash;\n        }) !== -1;\n        return getRegisterConfigurationProperty('show_pay_cash_button', showDefault);\n      }\n\n      function showRefundByCashButton() {\n        return showPayByCashButton() && vm.REFUND_ENABLED;\n      }\n\n      function changePricesFromPricingTier(sale, successMessage) {\n        if(sale.pos_order_product_variants.length === 0){\n          return;\n        }\n\n        api.inventories.posOrders.save(\n          {\n            option: 'change-pricing-tier',\n            default_pricing_tier: vm.selectedRegister.warehouse.pricing_tier,\n            new_pricing_tier: sale.pricing_tier,\n            pos_order_product_variants: sale.pos_order_product_variants\n          },\n          function(results, fn, status) {\n            if(status === HTTP_STATUS.HTTP_200_OK){\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent(successMessage)\n                  .position('top right')\n              );\n              sale.pos_order_product_variants = results.pos_order_product_variants.map(function(popv){\n                return new PosOrderProductVariant(popv);\n              });\n              updateSale(sale, true);\n            } else {\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')('SALES.ERROR_CHANGING_PRICING_TIER'))\n                  .position('top right')\n              );\n            }\n          }\n        );\n      }\n    }\n  }\n)();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SaleSalesLogController', SaleSalesLogController);\n\n  /** @ngInject */\n  function SaleSalesLogController($scope, $state, $mdDialog, $rootScope, $document, $translate, $filter, $mdToast,\n                                  $compile, $timeout, $mdSidenav, api, $http, $window, WarehousesData, RegistersData,\n                                  SitesData, PaymentMethodsData, Session, DTColumnBuilder, UsersData,\n                                  INCIDENCE_STATUSES, SALES_STATUS_COLORS_BG, HTTP_STATUS, POS_ORDER_PAYMENT_STATUSES,\n                                  SEARCH_MAX_LENGTH, Version, Utils, UiGridService, FeatureFlagService) {\n\n    var vm = this;\n\n    // Const\n    vm.POS_ORDERS_VIEW = 1;\n    vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW = 2;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n\n    vm.registers = RegistersData.results;\n    vm.sites = SitesData.results;\n    vm.selected = [];\n    vm.posOrderPaymentStatuses = [\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_PENDING,\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_PAID,\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_UNPAID\n    ];\n    vm.POS_ORDER_PAYMENT_STATUSES = POS_ORDER_PAYMENT_STATUSES;\n    vm.transferPaymentMethods = {};\n\n    vm.warehousesDict = {};\n    vm.registersDict = {};\n    vm.sitesDict = {};\n    vm.creating = false;\n    vm.showDateFilter = false;\n    vm.showTimeFilter = false;\n    vm.dialogOpened = false;\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n    vm.dateRange = {\n      dateStart: null,\n      dateEnd: null,\n      format: function(dateStart, dateEnd) {\n        if (dateStart && dateEnd) {\n          return moment(dateStart).format('DD/MM/YYYY') + ' - ' + moment(dateEnd).format('DD/MM/YYYY');\n        }\n        return $filter('translate')('SALES_LOG.FILTER_BY_DATE');\n      }\n    };\n    vm.timeRange = {\n      startTime: null,\n      endTime: null\n    };\n    vm.users = UsersData.results;\n    vm.currentView = null;\n    vm.paymentMethods = PaymentMethodsData.results;\n    vm.paymentMethodsMap = transformPaymentMethodsToMap(vm.paymentMethods);\n    vm.currencyCharacter = $filter('currencyCharacter')(\n      Session.company.currency\n    );\n\n    // Methods\n    vm.initialize = initialize;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.showNewOrderDialog = showNewOrderDialog;\n    vm.createInvoices = createInvoices;\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.toggleDateFilter = toggleDateFilter;\n    vm.toggleTimeFilter = toggleTimeFilter;\n    vm.getPaymentMethodNameFromChip = getPaymentMethodNameFromChip;\n    vm.getPaymentMethodIconFromChip = getPaymentMethodIconFromChip;\n    vm.showPaymentMethodChips = showPaymentMethodChips;\n    vm.reloadPosOrders = reloadPosOrders;\n    vm.setDateRangeFilters = setDateRangeFilters;\n    vm.loadDateRangeFilters = loadDateRangeFilters;\n    vm.setCurrentView = setCurrentView;\n    vm.registersAndSitesChanged = registersAndSitesChanged;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      initApiVersion();\n      var currentView = vm.currentView = localStorage.getItem(Session.company.id + '::SaleSalesLogController::currentView');\n      if (currentView) {\n        vm.currencyCharacter = currentView;\n      } else{\n        setCurrentView(vm.POS_ORDERS_VIEW);\n      }\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          startDate: null,\n          endDate: null,\n          startTime: null,\n          endTime: null,\n          registers: [],\n          registersAndSites: [],\n          users: [],\n          payment_methods: [],\n          payment_statuses: [],\n          incidence: false,\n          deleted: false\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      WarehousesData.results.forEach(function(warehouse) {\n        vm.warehousesDict[warehouse.id] = warehouse;\n      });\n\n      vm.registers.forEach(function(register) {\n        vm.registersDict[register.id] = register;\n      });\n\n      vm.sites.forEach(function(site) {\n        vm.sitesDict[site.id] = site;\n      });\n\n      vm.statusLoadedWatcher = $scope.$on('ndGrid::statusLoaded', loadDateRangeFilters);\n      $scope.$on('$destroy', function() {\n        vm.statusLoadedWatcher();\n      });\n\n    }\n\n    function initApiVersion() {\n      vm.createPosOrderApiVersion = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n    }\n\n    function reloadPosOrders() {\n      if (vm.reloadPosOrdersTimeout) {\n        $timeout.cancel(vm.reloadPosOrdersTimeout);\n      }\n      vm.reloadPosOrdersTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 1000);\n    }\n\n    function registersAndSitesChanged() {\n      var registers = [];\n      var sites = [];\n      (vm.status.filters.registersAndSites || []).forEach(function(item) {\n        if (typeof item === 'string') {\n          if (item.startsWith('register-')) {\n            registers.push(parseInt(item.replace('register-', '')));\n          } else if (item.startsWith('site-')) {\n            sites.push(parseInt(item.replace('site-', '')));\n          }\n        }\n      });\n      vm.status.filters.registers = registers;\n      vm.status.filters.sites = sites;\n      reloadPosOrders();\n    }\n\n    function transformPaymentMethodsToMap(paymentMethods) {\n      var paymentMethodsMap = {};\n      for (var i = 0; i < paymentMethods.length; i++) {\n        paymentMethodsMap[paymentMethods[i].id] = paymentMethods[i];\n      }\n      return paymentMethodsMap;\n    }\n\n    function setDateRangeFilters() {\n      vm.status.filters.startDate = vm.dateRange.dateStart;\n      vm.status.filters.endDate = vm.dateRange.dateEnd;\n      reloadPosOrders();\n    }\n\n    function loadDateRangeFilters() {\n      if (vm.status.filters && vm.status.filters.startDate && vm.status.filters.endDate) {\n        vm.dateRange.dateStart = new Date(vm.status.filters.startDate);\n        vm.dateRange.dateEnd = new Date(vm.status.filters.endDate);\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function barcodeListenerCallback(barcode) {\n      vm.search = barcode;\n      reloadPosOrders();\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.status.filters.registersAndSites && vm.status.filters.registersAndSites.length > 0 ? 1 : 0;\n      result += vm.status.filters.users && vm.status.filters.users.length > 0 ? 1 : 0;\n      result += vm.status.filters.payment_methods && vm.status.filters.payment_methods.length > 0 ? 1 : 0;\n      result += vm.status.filters.payment_statuses && vm.status.filters.payment_statuses.length > 0 ? 1 : 0;\n      result += (vm.status.filters.startDate || vm.status.filters.endDate) ? 1 : 0;\n      result += (vm.status.filters.startTime || vm.status.filters.endTime) ? 1 : 0;\n      result += vm.status.filters.incidence ? 1 : 0;\n      result += vm.status.filters.deleted ? 1 : 0;\n      result += vm.dateRange.dateStart || vm.dateRange.dateEnd ? 1 : 0;\n      result += vm.timeRange.startTime || vm.timeRange.endTime ? 1 : 0;\n\n      return result;\n    }\n\n    function clearFilter() {\n      vm.status.filters.startDate = null;\n      vm.status.filters.endDate = null;\n      vm.status.filters.startTime = null;\n      vm.status.filters.endTime = null;\n      vm.status.filters.registersAndSites = [];\n      vm.status.filters.registers = [];\n      vm.status.filters.sites = [];\n      vm.status.filters.users = [];\n      vm.status.filters.payment_methods = [];\n      vm.status.filters.payment_statuses = [];\n      vm.status.filters.incidence = false;\n      vm.status.filters.deleted = false;\n      vm.dateRange = {};\n      vm.timeRange = {};\n      reloadPosOrders();\n    }\n\n    function createNewOrder(register) {\n      if (vm.creating) {\n        return;\n      }\n      vm.creating = true;\n\n      var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n      apiToUse.save(\n        {\n          register: register,\n          serializer: 'PosOrderSerializer'\n        },\n        function(response, callback, status) {\n          if (status === 201) {\n            $state.go('app.sale.sales_log.order', { id: response.id });\n          }\n          vm.creating = false;\n        }\n      );\n    }\n\n    function showNewOrderDialog() {\n      $mdDialog\n        .show({\n          controller: 'SelectRegisterDialogController',\n          controllerAs: 'vm',\n          templateUrl:\n            'app/main/apps/sale/views/registers/dialogs/select-register/select-register-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: false,\n          resolve: {\n            RegistersData: function(apiResolver) {\n              return apiResolver.resolve('sales.registers@list');\n            }\n          },\n          locals: {\n            message: 'ORDER.SELECT_THE_REGISTER_MSG' // 'SELECT_REGISTER.SELECT_REGISTER_MSG'\n          }\n        })\n        .then(\n          function(result) {\n            createNewOrder(result.id);\n          },\n          function() {\n            // Nothing to do\n          }\n        );\n    }\n\n    function createInvoices(ev) {\n      if (vm.generatingInvoices) {\n        return;\n      }\n\n      vm.generatingInvoices = true;\n\n      api.inventories.posOrders.save(\n        {\n          invoices: vm.selected,\n          option: 'invoices'\n        },\n        function(result, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog\n              .show({\n                controller: 'GenerateInvoicesDialogController',\n                controllerAs: 'vm',\n                templateUrl:\n                  'app/main/apps/sale/views/sales-log/dialogs/generate-invoices/generate-invoices-dialog.html',\n                parent: angular.element(document.body),\n                clickOutsideToClose: true,\n                multiple: true,\n                locals: {\n                  invoices: result.invoices,\n                  errors: result.errors\n                }\n              })\n              .then(\n                function(refresh) {\n                  // Nothing to do\n                },\n                function() {\n                  // Nothing to do\n                }\n              );\n\n            /*var dialogText = '';\n\n            if (result.invoices && result.invoices.length){\n              dialogText += '<div class=\"w-300\">' + $filter('translate')('SALES_LOG.INVOICES_CREATED') + ':</div>';\n              dialogText += '<ul>';\n              result.invoices.forEach(function (invoice) {\n                dialogText += '<li><a href=\"' + invoice.pdf_file + '\" target=\"_blank\">' + invoice.pdf_filename + '</a></li>';\n              });\n              dialogText += '</ul>';\n            }\n\n            if (result.errors && result.errors.length){\n              dialogText += '<div>' + $filter('translate')('SALES_LOG.SALES_WITH_PROBLEMS') + ':</div>';\n              dialogText += '<ul>';\n              result.errors.forEach(function (error) {\n                dialogText += '<li>' + error.pos_order + '</li>';\n              });\n              dialogText += '</ul>';\n            }\n\n            $mdDialog.show(\n              $mdDialog.alert()\n                .parent(angular.element(document.body))\n                .clickOutsideToClose(false)\n                .title($filter('translate')('SALES_LOG.INVOICES_GENERATION'))\n                .htmlContent(dialogText)\n                .multiple(true)\n                .ok($filter('translate')('GENERAL.CLOSE'))\n                .targetEvent(ev)\n            );*/\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n\n          vm.generatingInvoices = false;\n        }\n      );\n    }\n\n    function toggleDateFilter() {\n      vm.showDateFilter = !vm.showDateFilter;\n    }\n\n    function toggleTimeFilter() {\n      vm.showTimeFilter = !vm.showTimeFilter;\n    }\n\n    function getPaymentMethodIconFromChip(paymentMethodId) {\n      return vm.paymentMethodsMap[paymentMethodId].icon;\n    }\n\n    function getPaymentMethodNameFromChip(paymentMethodId) {\n      return vm.paymentMethodsMap[paymentMethodId].name;\n    }\n\n    function showPaymentMethodChips() {\n      return vm.filterPaymentMethods && vm.filterPaymentMethods.length > 0;\n    }\n\n    function setCurrentView(value){\n      vm.currentView = value;\n      localStorage.setItem(Session.company.id + '::SaleSalesLogController::currentView', value);\n    }\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.sale')\n      .controller('SaleRegistersController', SaleRegistersController);\n\n    /** @ngInject */\n    function SaleRegistersController($mdDialog, $document, $filter, $mdToast, RegistersData, api,\n                                     WarehousesData, HTTP_STATUS, Session) {\n\n      var vm = this;\n\n      // Data\n      vm.registers = angular.copy(RegistersData.results);\n      vm.warehousesDict = {};\n\n\n      // Methods\n      vm.newRegister = newRegister;\n      vm.deleteRegister = deleteRegister;\n      vm.openRegister = openRegister;\n      vm.closeRegister = closeRegister;\n      vm.getUserName = getUserName;\n      vm.getDate = getDate;\n      vm.closeRegisterConfirm = closeRegisterConfirm;\n\n      // Initialization\n      initialize();\n\n      // Functions\n      function initialize() {\n        WarehousesData.results.forEach(function (warehouse) {\n          vm.warehousesDict[warehouse.id] = warehouse;\n        });\n      }\n\n      function newRegister(ev) {\n        if (Session.hasPermission('sale.registers.create')) {\n          $mdDialog.show({\n            controller: 'NewRegisterDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/sale/views/registers/dialogs/new-register/new-register-dialog.html',\n            parent: angular.element($document.find('#content-container')),\n            targetEvent: ev,\n            clickOutsideToClose: true,\n            locals: {\n              WarehousesData: WarehousesData\n            },\n            resolve: {\n              SerialNumberTypesData: function (apiResolver) {\n                return apiResolver.resolve('inventories.serialNumberTypes@list', {});\n              }\n            }\n          }).then(function (result) {\n            vm.registers.push(result);\n          }, function () {\n            // Nothing to do. Do not remove.\n          });\n        }\n      }\n\n      function deleteRegister(ev, register) {\n        if (Session.hasPermission('sale.registers.delete')) {\n          var confirm = $mdDialog.confirm()\n            .title($filter('translate')('REGISTERS.DELETE_REGISTER', {register: register.code}))\n            .textContent($filter('translate')('REGISTERS.DELETE_REGISTER_MSG', {register: register.code}))\n            .targetEvent(ev)\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('GENERAL.DELETE'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n\n          $mdDialog.show(confirm).then(function () {\n            if (Session.hasPermission('sale.registers.delete')) {\n              api.sales.registers.delete(\n                {id: register.id},\n                function (results, fn, status) {\n                  if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                    var index = vm.registers.findIndex(function (r) {\n                      return r.id === register.id\n                    });\n\n                    vm.registers.splice(index, 1);\n\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('REGISTERS.REGISTER_DELETED')).position('top right'));\n                  } else {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                  }\n                }\n              );\n            }\n          }, function () {\n            // Nothing to do. Do not remove.\n          });\n        }\n      }\n\n      function openRegister(register) {\n        if (Session.hasPermission('sale.registers.open_register')) {\n          register.openingOrClosing = true;\n\n          $mdDialog.show({\n            controller: 'OpenRegisterDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/sale/views/registers/dialogs/open-register/open-register-dialog.html',\n            parent: angular.element($document.find('#content-container')),\n            clickOutsideToClose: true,\n            locals: {\n              register: register\n            }\n          }).then(function (result) {\n            angular.extend(register, result);\n            register.openingOrClosing = false;\n          }, function () {\n            register.openingOrClosing = false;\n          });\n        }\n      }\n\n      function closeRegister(register) {\n        if (Session.hasPermission('sale.registers.close_register')) {\n          var confirm = $mdDialog.confirm()\n            .title($filter('translate')('REGISTERS.CLOSE_REGISTER'))\n            .htmlContent($filter('translate')('REGISTERS.CLOSE_REGISTER_MSG'))\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('REGISTERS.CLOSE_REGISTER'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n          $mdDialog.show(confirm).then(function () {\n            closeRegisterConfirm(register);\n          }, function () {\n            // Nothing to do. Do not remove.\n          });\n        }\n      }\n\n      function closeRegisterConfirm(register) {\n        register.openingOrClosing = true;\n\n        api.sales.registers.update(\n          {\n            id: register.id,\n            option: 'close'\n          },\n          function (results) {\n\n            if (results.id) {\n              postCloseRegister(register, results)\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n\n      function postCloseRegister(register, results) {\n        angular.extend(register, results);\n        register.openingOrClosing = false;\n\n        $mdDialog.show({\n          controller: 'CloseRegisterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/registers/dialogs/close-register/close-register-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          fullscreen: true,\n          resolve: {\n            PaymentMethods: function (apiResolver) {\n              return apiResolver.resolve('accounting.paymentMethods@list');\n            }\n          },\n          locals: {\n            register: register\n          }\n        }).then(function (result) {\n\n        });\n      }\n\n      function getUserName(register) {\n        return $filter('personname')(register.current_activity.opened_by);\n      }\n\n      function getDate(register) {\n        return $filter('asDateWithDateAndHour')(register.current_activity.opened_at);\n      }\n    }\n  }\n)();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.sale')\n    .controller('SaleRegisterClosuresController', SaleRegisterClosuresController);\n\n  /** @ngInject */\n  function SaleRegisterClosuresController($scope, $mdDateRangePicker, $compile, $http, $state, $mdSidenav, $timeout, $filter, $window, $mdMedia,\n                                          api, DTColumnBuilder, msUtils, Session, PURCHASE_ORDER_STATUSES,\n                                          PURCHASE_ORDER_STATUS_COLORS, $translate, RegistersData, UsersData) {\n\n    var vm = this;\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = PURCHASE_ORDER_STATUSES;\n    vm.orderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n    vm.search = null;\n\n    vm.registersDict = {};\n\n    vm.users = UsersData.results;\n    vm.registers = RegistersData.results;\n\n    vm.filterRegister = '';\n    vm.filterUser = '';\n    vm.dateRange = {};\n\n    vm.statusList = getStatusListByDict();\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.sales.registerActivities.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.dateStart = vm.dateRange.dateStart ? vm.dateRange.dateStart.getTime() : '';\n          d.dateEnd = vm.dateRange.dateEnd ? vm.dateRange.dateEnd.getTime() : '';\n          if (d.dateStart === d.dateEnd) d.dateStart = d.dateStart - (24 * 60 * 60 * 1000);\n        }\n      },\n      order: [[0, 'desc']],\n      rowId: 'id',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      dom: $mdMedia('gt-sm') ? 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>' : 'rt<\"bottom\"<\"left\"<\"info\"i>><\"right\"<\"pagination\"p>>>',\n      pagingType: $mdMedia('gt-sm') ? 'full_numbers' : 'simple',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        if (vm.dateRange.dateStart) {\n          data.dateStart = vm.dateRange.dateStart.getTime();\n        }\n        if (vm.dateRange.dateEnd) {\n          data.dateEnd = vm.dateRange.dateEnd.getTime();\n        }\n        localStorage.setItem(Session.company.id + '::dataTableSaleRegisterClosuresController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableSaleRegisterClosuresController'));\n        if (state) {\n          if (state.dateStart) {\n            vm.dateRange.dateStart = new Date(state.dateStart);\n          }\n          if (state.dateEnd) {\n            vm.dateRange.dateEnd = new Date(state.dateEnd);\n          }\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          vm.filterRegister = state.columns[2].search.search;\n          vm.filterUser = state.columns[4].search.search;\n        }\n        return state;\n      }\n    };\n    vm.dtColumns = [];\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.filterByColumn = filterByColumn;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.downloadInvoice = downloadInvoice;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.selectedRegisterChanged = selectedRegisterChanged;\n    vm.filterUserHasChanged = filterUserHasChanged;\n    vm.filterDates = filterDates;\n    vm.exportTableToCSV = exportTableToCSV;\n\n    // Initialization\n    initialize();\n\n    function filterDates() {\n\n      $mdDateRangePicker.show({\n        model: vm.dateRange\n      }).then(function(result) {\n        vm.dateRange = result;\n        vm.dtInstance.DataTable.draw();\n      }).catch(function() {\n        console.log('Cancelled');\n      });\n\n    }\n\n    function exportTableToCSV(tableId) {\n\n      var filename = 'registers_activity.csv';\n      var $table = angular.element(tableId);\n      var $headers = $table.find('tr:has(th)')\n        , $rows = $table.find('tr:has(td)')\n\n        // Temporary delimiter characters unlikely to be typed by keyboard\n        // This is to avoid accidentally splitting the actual contents\n        , tmpColDelim = String.fromCharCode(11) // vertical tab character\n        , tmpRowDelim = String.fromCharCode(0) // null character\n\n        // actual delimiter characters for CSV format\n        , colDelim = '\",\"'\n        , rowDelim = '\"\\r\\n\"';\n\n      // Grab text from table into CSV formatted string\n      var csv = '\"';\n      csv += formatRows($headers.map(grabRow));\n      csv += rowDelim;\n      csv += formatRows($rows.map(grabRow)) + '\"';\n\n      // Data URI\n      var csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);\n\n      // For IE (tested 10+)\n      if (window.navigator.msSaveOrOpenBlob) {\n        var blob = new Blob([decodeURIComponent(encodeURI(csv))], {\n          type: 'text/csv;charset=utf-8;'\n        });\n        navigator.msSaveBlob(blob, filename);\n      } else {\n\n        var link = document.createElement('a');\n        link.setAttribute('href', csvData);\n        link.setAttribute('download', filename);\n        link.innerHTML = '';\n        link.click();\n\n      }\n\n      //------------------------------------------------------------\n      // Helper Functions\n      //------------------------------------------------------------\n      // Format the output so it has the appropriate delimiters\n      function formatRows(rows) {\n        return rows.get().join(tmpRowDelim)\n          .split(tmpRowDelim).join(rowDelim)\n          .split(tmpColDelim).join(colDelim);\n      }\n\n      // Grab and format a row from the table\n      function grabRow(i, row) {\n\n        var $row = $(row);\n        //for some reason $cols = $row.find('td') || $row.find('th') won't work...\n        var $cols = $row.find('td');\n        if (!$cols.length) $cols = $row.find('th');\n\n        return $cols.map(grabCol)\n          .get().join(tmpColDelim);\n      }\n\n      // Grab and format a column from the table\n      function grabCol(j, col) {\n        var $col = $(col),\n          $text = $col.text();\n\n        return $text.replace('\"', '\"\"'); // escape double quotes\n\n      }\n    }\n\n    // Functions\n    function initialize() {\n\n      vm.registers.map(function(register) {\n        vm.registersDict[register.id] = register;\n      });\n\n      vm.dtColumns = [\n        DTColumnBuilder.newColumn('opened_at')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.OPENED_AT'))\n          .renderWith(function(data, type, full) {\n            return $filter('date')(data, 'dd/MM/yy - HH:mm');\n          }),\n        DTColumnBuilder.newColumn('closed_at')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.CLOSED_AT'))\n          .renderWith(function(data, type, full) {\n            if (data)\n              return $filter('date')(data, 'dd/MM/yy - HH:mm');\n            return '<span class=\"secondary-text text-italic\">' + $filter('translate')('REGISTER_CLOSURES.STILL_OPEN') + '</span>';\n          }),\n        DTColumnBuilder.newColumn('register__id')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.REGISTER'))\n          .renderWith(function(data, type, full) {\n            if (vm.registersDict[full.register]) {\n              return vm.registersDict[full.register].code;\n            }\n            return '';\n          }).notSortable(),\n        DTColumnBuilder.newColumn('register__warehouse__name')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.WAREHOUSE'))\n          .renderWith(function(data, type, full) {\n            if (vm.registersDict[full.register] && vm.registersDict[full.register].warehouse) {\n              return vm.registersDict[full.register].warehouse.name;\n            }\n            return '';\n          }).notSortable(),\n        DTColumnBuilder.newColumn('closed_by__id')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.CLOSED_BY'))\n          .renderWith(function(data, type, full) {\n            if (!full.closed_at)\n              return '<span class=\"secondary-text text-italic\">' + $filter('translate')('REGISTER_CLOSURES.STILL_OPEN') + '</span>';\n            return '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' + $filter('personname')(full.closed_by) + '\\'\"  class=\"mr-8\"></nd-user-picture> ' + $filter('personname')(full.closed_by) + '</div> ';\n          }).notSortable(),\n        DTColumnBuilder.newColumn('total_sales')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.TOTAL_SALES'))\n          .notSortable(),\n        DTColumnBuilder.newColumn('total_revenue')\n          .withTitle($filter('translate')('REGISTER_CLOSURES.REVENUE'))\n          .renderWith(function(data, type, full) {\n            if (data !== null) {\n              return $filter('price')(data) + $filter('currencyCharacter')(full.currency);\n            }\n            return '';\n          }).notSortable(),\n        DTColumnBuilder.newColumn('invoice')\n          .notSortable()\n          .withTitle($filter('translate')('REGISTER_CLOSURES.INVOICE'))\n          .renderWith(function(data, type, full) {\n            if(data){\n              if(data.autocode) {\n                return '<nd-a class=\"nowrap\" state=\"\\'app.accounting.invoices.invoice\\'\" state-params=\"{id: ' + data.id + '}\">' + data.autocode + '</nd-a>';\n              }\n              return $filter('translate')('INVOICE.NO_SERIAL_NUMBER');\n            }\n            return '';\n          })\n      ];\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#purchase-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * Toggle sidenav\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.sale.register_closure', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Applies the filter parameter to the column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    /**\n     * Creates a list of status from TRANSFER_ORDER_STATUSES cons\n     * @returns {Array}\n     */\n    function getStatusListByDict() {\n      var result = [];\n      for (var id in PURCHASE_ORDER_STATUSES) {\n        result.push({ code: id, name: PURCHASE_ORDER_STATUSES[id] });\n      }\n      return result;\n    }\n\n    function downloadInvoice(activityId) {\n      var url = api.urls.sales.registerActivitiesInvoice.replace(':id', activityId);\n      $http.get(url).then(function(response) {\n        var blob = new Blob([response.data], { type: 'application/pdf' });\n        var URL = window.URL || window.webkitURL;\n        window.open(URL.createObjectURL(blob));\n      });\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.filterRegister ? 1 : 0;\n      result += vm.filterUser ? 1 : 0;\n      result += vm.dateRange.dateStart || vm.dateRange.dateEnd ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      vm.filterRegister = '';\n      vm.filterUser = '';\n      vm.dateRange = {};\n      vm.dtInstance.DataTable.column(4).search('').draw();\n      vm.dtInstance.DataTable.column(2).search('').draw();\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function selectedRegisterChanged() {\n      filterByColumn(vm.filterRegister, 2);\n    }\n\n    function filterUserHasChanged() {\n      filterByColumn(vm.filterUser, 4);\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SaleRegisterClosureController', SaleRegisterClosureController);\n\n  /** @ngInject */\n  function SaleRegisterClosureController($state, $filter, $http, $mdToast, $mdDialog, $document, $timeout, $scope, api, PERMISSIONS,\n                                         RegisterActivityData, CASH_MOVEMENT_TYPES, HTTP_STATUS, Session, DTColumnBuilder,\n                                         apiResolver, PaymentMethods, $compile, POS_ORDER_SHIPPING_STATUSES_COLORS,\n                                         POS_ORDER_SHIPPING_STATUSES, POS_ORDER_PAYMENT_STATUSES_COLORS,\n                                         POS_ORDER_PAYMENT_STATUSES, Version) {\n    var vm = this;\n\n    //Cons\n    vm.CASH_MOVEMENT_TYPES = CASH_MOVEMENT_TYPES;\n    vm.POS_ORDER_SHIPPING_STATUSES_COLORS = POS_ORDER_SHIPPING_STATUSES_COLORS;\n    vm.POS_ORDER_SHIPPING_STATUSES = POS_ORDER_SHIPPING_STATUSES;\n    vm.POS_ORDER_PAYMENT_STATUSES_COLORS = POS_ORDER_PAYMENT_STATUSES_COLORS;\n    vm.POS_ORDER_PAYMENT_STATUSES = POS_ORDER_PAYMENT_STATUSES;\n\n    // Data\n    vm.registerActivity = RegisterActivityData;\n    vm.currencyCharacter = $filter('currencyCharacter')(vm.registerActivity.currency);\n    vm.paymentMethodsDict = {};\n    vm.totalPaymentAmounts = 0;\n    vm.dtInstanceViewPO = {};\n    vm.transferPaymentMethods = {};\n    vm.showGiftCardsData =\n    vm.filterIndexesPO = {\n      'deleted': 0, // hidden\n      'incidence': 1, // hidden\n      'autocode': 2,\n      'created_at': 3,\n      'created_by': 4,\n      'created_by_id': 5, // hidden\n      'customer': 6,\n      'units_sold': 7,\n      'payment_status': 8,\n      'shipping_status': 9,\n      'payment_methods': 10,\n      'total': 11,\n    };\n    vm.dtOptionsViewPO = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.posOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.register_activity = vm.registerActivity.id;\n          if (!d.columns[0].search.value) {\n            d.columns[0].search.value = 'False';\n          }\n        }\n      },\n      order: [[vm.filterIndexesPO['created_at'], 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n    };\n\n    vm.filterIndexesPM = {\n      'pos_order_autocode': 0, // hidden\n      'pos_order__autocode': 1,\n      'created_by': 2,\n      'created_by_id': 3, // hidden\n      'payment_method': 4,\n      'amount': 5\n    }\n    vm.dtOptionsViewPM = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.inventories.posOrdersPaymentMethods,\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.status = 0;\n          d.pagination = 'datatable';\n          d.register_activity = vm.registerActivity.id;\n          d.serializer = \"PosOrderPaymentMethodDatatableSerializer\";\n          if (!d.columns[0].search.value) {\n            d.columns[0].search.value = 'False';\n          }\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initCompletePM,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 10,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n    };\n\n    vm.dtColumnsViewPM = [\n      DTColumnBuilder.newColumn('pos_order_autocode')\n        .notVisible(),\n      DTColumnBuilder.newColumn('pos_order__autocode')\n        .withTitle($filter('translate')('SALES_LOG.SALE_NUMBER'))\n        .renderWith(function (data, type, full) {\n          var autocode = '<em class=\"orange-fg mr-5\" translate=\"ORDER.ORDER_DRAFT\"></em>';\n          if (full.pos_order_autocode) {\n            autocode = full.pos_order_autocode;\n          }\n          if (full.is_external_pos_order) {\n            autocode += '<span class=\"text-boxed orange\">' + $filter('translate')('REGISTER_CLOSURE.POS_ORDER_FROM_ANOTHER_CLOSURE') + '</span>';\n          }\n          return autocode;\n        }),\n      DTColumnBuilder.newColumn('pos_order__created_by')\n        .withTitle($filter('translate')('REGISTER_CLOSURE.USER'))\n        .renderWith(function (data, type, full) {\n          if (full.pos_order_created_by && full.pos_order_created_by.first_name)\n            return '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' + full.pos_order_created_by.first_name + ' ' + full.pos_order_created_by.last_name + '\\'\"  class=\"mr-8\"></nd-user-picture> ' + full.pos_order_created_by.first_name + ' ' + full.pos_order_created_by.last_name + '</div> ';\n          return \"\";\n        }),\n      DTColumnBuilder.newColumn('created_by_id')\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          return full.pos_order_created_by ? full.pos_order_created_by.id : '';\n        }),\n      DTColumnBuilder.newColumn('payment_methods')\n        .withTitle($filter('translate')('ORDER.PAYMENT_METHOD'))\n        .renderWith(function (data, type, full) {\n          if (full.payment_method) {\n            return '<md-icon class=\"mb-5 mr-10\" md-font-icon=\"'+full.payment_method_instance.icon+'\"></md-icon>' + full.payment_method_name;\n          } else {\n            return \"\";\n          }\n        }),\n      DTColumnBuilder.newColumn('amount')\n        .withTitle($filter('translate')('CUSTOMERS.TOTAL'))\n        .withOption('className', 'text-right nowrap')\n        .renderWith(function (data, type, full) {\n          var result = '';\n          if (full.amount !== null && full.amount !== undefined) {\n            var currencyCharacter = '';\n            if (full.pos_order_currency) {\n              currencyCharacter = $filter('currencyCharacter')(full.pos_order_currency);\n            }\n            else if (full.register_currency){\n              currencyCharacter = $filter('currencyCharacter')(full.register_currency);\n            }\n            result += $filter('price')(full.amount) + currencyCharacter;\n          }\n          return result;\n        }),\n    ];\n\n    vm.dtColumnsViewPO = [\n      DTColumnBuilder.newColumn('deleted').notVisible().notSortable(),\n      DTColumnBuilder.newColumn('incidence').notVisible().notSortable(),\n      DTColumnBuilder.newColumn('autocode')\n        .withTitle($filter('translate')('SALES_LOG.SALE_NUMBER'))\n        .renderWith(function (data, type, full) {\n          var result = '<div layout=\"row\" layout-align=\"start center\">';\n\n          //result += '<md-button class=\"md-icon-button mr-5\" ng-click=\"vm.previewClicked($event, ' + full.id + ')\"><md-icon md-font-icon=\"icon-eye\"></md-icon></md-button>';\n\n          result += '<div layout=\"row\" layout-align=\"start center\">';\n\n          if (!full.autocode) {\n            result += '<em class=\"orange-fg mr-5\" translate=\"ORDER.ORDER_DRAFT\"></em>';\n          }\n\n          if (full.autocode) {\n            result += '<span class=\"mr-5\">' + full.autocode + '</span>';\n          }\n\n          if (full.is_paid_in_other_register_activity) {\n            result += '<span class=\"text-boxed orange\">' + $filter('translate')('REGISTER_CLOSURE.POS_ORDER_PAID_FROM_ANOTHER_CLOSURE') + '</span>';\n          }\n\n          /*if (full.devolution_of) {\n            result += '<small class=\"secondary-text\">' + $filter('translate')('SALES_LOG.DEVOLUTION_OF') + ' ' + full.devolution_of + '</small>';\n          }*/\n\n          if (full.negative_of) {\n            result += '<small class=\"secondary-text\">' + $filter('translate')('SALES_LOG.NEGATIVE_OF') + ' ' + full.negative_of + '</small>';\n          }\n          result += '</div>';\n\n          if (full.incidence) {\n            result += '<md-icon md-font-icon=\"icon-flag-variant\" class=\"s18 ml-5 red-fg\"></md-icon>';\n          }\n          if (full.notes) {\n            result += '<md-icon md-font-icon=\"icon-comment-processing-outline\" class=\"s18 ml-5\"></md-icon>';\n            result += '<md-tooltip>' + full.notes + '</md-tooltip>';\n            result += '</md-icon>';\n          }\n\n          result += '<span flex></span>';\n          result += '</div>';\n\n          return result;\n        }),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('REGISTER_CLOSURE.DATE_TIME'))\n        .renderWith(function (data, type, full) {\n          var result = '';\n          result += moment(data).format('h:mm a') + \"<br>\";\n          result += \"<small class='secondary-text'>\" + moment(data).format('DD-MM-YYYY') + \"</small>\";\n          return result;\n        }),\n      DTColumnBuilder.newColumn('created_by_name')\n        .withTitle($filter('translate')('REGISTER_CLOSURE.USER'))\n        .renderWith(function (data, type, full) {\n          if (data)\n            return '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' + data + '\\'\"  class=\"mr-8\"></nd-user-picture> ' + data + '</div> ';\n          return data;\n        }),\n      DTColumnBuilder.newColumn('created_by__id')\n        .notVisible()\n        .renderWith(function (data, type, full) {\n          return full.created_by;\n        }),\n      DTColumnBuilder.newColumn('customer_name')\n        .withTitle($filter('translate')('REGISTER_CLOSURE.CUSTOMER'))\n        .renderWith(function (data, type, full) {\n          return full.customer_name;\n        }),\n      DTColumnBuilder.newColumn('units_sold')\n        .notSortable()\n        .withTitle($filter('translate')('SALES_LOG.UNTIS_SOLD'))\n        .renderWith(function (data, type, full) {\n          var result = '';\n          if (full.units_sold) {\n            result += '<span class=\"mr-5 black-fg-important\">' + full.units_sold + '</span>';\n          }\n\n          if (full.units_sold_returned) {\n            result += '<md-icon class=\"refund-icon\" md-svg-src=\"assets/images/custom-material-design-icons/refund.221d6d4a.svg\"></md-icon>';\n            result += '<span class=\"mr-5 red-700-fg\">' + full.units_sold_returned + '</span>';\n          }\n\n          if (full.units_returned) {\n            result += '<span class=\"red-fg\">' + full.units_returned + '</span>';\n          }\n          return result;\n        }),\n      DTColumnBuilder.newColumn('payment_status')\n        .withTitle($filter('translate')('ORDER.PAYMENT'))\n        .renderWith(function (data, type, full) {\n          return '<span class=\"' + POS_ORDER_PAYMENT_STATUSES_COLORS[data] + '\">' + $filter('translate')('ORDER.' + POS_ORDER_PAYMENT_STATUSES[data]) + '</span>';\n        }),\n      DTColumnBuilder.newColumn('shipping_status')\n        .withTitle($filter('translate')('ORDER.SHIPPING'))\n        .renderWith(function (data, type, full) {\n          var status_id = full.shipping_status\n          var color = vm.POS_ORDER_SHIPPING_STATUSES_COLORS[status_id]\n          var status = $filter('translate')('ORDER.' + vm.POS_ORDER_SHIPPING_STATUSES[status_id])\n          return \"<span class='\" + color + \"'>\" +\n            status +\n            \"</span>\";\n        }),\n      DTColumnBuilder.newColumn('payment_methods')\n        .withTitle($filter('translate')('ORDER.PAYMENT'))\n        .renderWith(function (data, type, full) {\n          vm.transferPaymentMethods[full.id] = full;\n          return '<nd-payment-methods-icon parent-object=\"vm.transferPaymentMethods[' + full.id + ']\"></nd-payment-methods-icon>';\n        }),\n      DTColumnBuilder.newColumn('total')\n        .withTitle($filter('translate')('CUSTOMERS.TOTAL'))\n        .withOption('className', 'text-right nowrap')\n        .renderWith(function (data, type, full) {\n          var result = '';\n          if (data !== null && data !== undefined) {\n            result += ' ' + $filter('price')(data) + $filter('currencyCharacter')(full.currency);\n          }\n          if (!full.autocode) {\n            result += '</em>'\n          }\n          return result;\n        }),\n    ];\n\n    // Methods\n    vm.closeRegister = closeRegister;\n    vm.getInvoiceNameFromPath = getInvoiceNameFromPath;\n    vm.gotoRegisterClosures = gotoRegisterClosures;\n    vm.openCashDrawer = openCashDrawer;\n    vm.printSoldProducts = printSoldProducts;\n    vm.printSummary = printSummary;\n    vm.showPosOrderDialog = showPosOrderDialog;\n    vm.createInvoice = createInvoice;\n\n    // Initialize:\n    init();\n\n    // Functions\n    function init() {\n\n      PaymentMethods.results.forEach(function (paymentMethod) {\n        vm.paymentMethodsDict[paymentMethod.id] = paymentMethod;\n      });\n\n      if (vm.registerActivity) {\n        vm.registerActivity.total_payment_amounts.forEach(function (tpa) {\n          vm.totalPaymentAmounts += tpa.total;\n        });\n      }\n    }\n\n    function gotoRegisterClosures() {\n      $state.go('app.sale.register_closures');\n    }\n\n    function printSummary() {\n      $scope.$emit('ndPrinter::printRegisterActivitySummary', {\n        registerActivity: vm.registerActivity,\n        paymentMethodsDict: vm.paymentMethodsDict\n      });\n    }\n\n    function printSoldProducts() {\n      api.inventories.posOrderProductVariants.list({\n        option: 'sales-by-register-activity',\n        register_activity: vm.registerActivity.id\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $scope.$emit('ndPrinter::printRegisterActivitySoldProductsSummary', {\n            registerActivity: vm.registerActivity,\n            posOrderProductVariants: results\n          });\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function showPosOrderDialog(posOrderId) {\n      vm.lastPosOrderIdOpened = posOrderId;\n\n      $mdDialog.show({\n        controller: 'SalePosOrderDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          previousPosOrderId: null\n        },\n        resolve: {\n          PosOrderData: function (apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: posOrderId,\n              serializer: 'PosOrderWithDevolutionsSerializer'\n            });\n          }\n        }\n      })\n        .then(function (refresh) {\n          // If refresh means thant must be reloaded because the posOrders and the totalPaymentMethodsAmounts have changed\n          if (refresh) {\n            api.sales.register_activities.get({\n              id: vm.registerActivity.id,\n              serializer: 'RegisterActivityFullSerializer'\n            }, function (result, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                vm.registerActivity = result;\n                // $scope.$apply();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.WRONG_PIN')).position('top right'));\n              }\n            });\n          }\n        }, function () {\n          // Nothing to do\n        });\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstanceViewPO && vm.dtInstanceViewPO.DataTable) {\n        vm.dtInstanceViewPO.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    function openCashDrawer() {\n      var confirm = $mdDialog.prompt()\n        .title($filter('translate')('SALES.OPEN_CASH_DRAWER'))\n        .textContent($filter('translate')('SALES.OPEN_CASH_DRAWER_MESSAGE'))\n        .placeholder($filter('translate')('SALES.PIN'))\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('SALES.OPEN_CASH_DRAWER'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n      $mdDialog.show(confirm).then(function (result) {\n        if (vm.registerActivity.register.open_drawer_pin === result) {\n          $scope.$emit('ndPrinter::openCashDrawer', {\n            register: vm.registerActivity.register\n          });\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.WRONG_PIN')).position('top right'));\n        }\n      }, function () {\n        // Nothing to do\n      });\n    }\n\n    function getInvoiceNameFromPath(path) {\n      if (path) {\n        var fileName = path.split('/');\n        fileName = fileName[fileName.length - 1];\n        return fileName.substr(0, fileName.indexOf('.pdf') + 4);\n      }\n    }\n\n    function closeRegister() {\n      if (!vm.registerActivity.is_closed && Session.hasPermission('sale.register_closure.close_register')) {\n\n        vm.registerActivity.register.openingOrClosing = true;\n\n        $mdDialog.show({\n          controller: 'CloseRegisterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/registers/dialogs/close-register/close-register-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          fullscreen: true,\n          locals: {\n            registerActivity: vm.registerActivity,\n            paymentMethods: PaymentMethods.results\n          }\n        }).then(function (result) {\n          angular.extend(vm.registerActivity, result)\n        }, function () {\n          // Nothing to do\n        });\n      }\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#sales-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function initCompletePM() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#payments-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      if (aData.deleted) {\n        // Deleted PosOrders style\n        $('td', nRow).addClass('red-900-fg no-text-strike md-red-100-bg');\n      } else if (aData.devolution_of || aData.amount < 0) {\n        // Devolutions style\n        $('td', nRow).addClass('orange-900-fg md-orange-50-bg');\n      }\n\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        if (aData.payment_method_instance) {\n          //Payments datatable\n          showPosOrderDialog(aData.pos_order);\n        } else {\n          //trasactions datatable\n          showPosOrderDialog(aData.id);\n        }\n\n        // $state.go('app.sale.sales_log.order', {id: aData.id});\n      });\n      $('td:nth-child(1)', nRow).unbind('click');\n      return nRow;\n    }\n\n    function createInvoice(){\n      if(vm.waiting){\n        return;\n      }\n      vm.waiting = true;\n\n      api.sales.register_activities.save({\n        option: 'create-invoice',\n        id: vm.registerActivity.id\n      }, function (results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.registerActivity.invoice = results.invoice;\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES_LOG.INVOICES_GENERATED_SUCCESSFULLY')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.waiting = false;\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SalePromotionsController', SalePromotionsController);\n\n  /** @ngInject */\n  function SalePromotionsController($scope, $state, $timeout, $filter, $compile, $mdDialog, $document, api, Session,\n                                    DTColumnBuilder, $translate, PERMISSIONS, SEARCH_MAX_LENGTH, apiResolver) {\n    var vm = this;\n\n    // Cons\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n\n    vm.filterBrands = \"\";\n    vm.brandsList = [];//BrandsData.results;\n    vm.filterCategories = \"\";\n    vm.categoriesList = [];//CategoriesData.results;\n    vm.filterSeasons = \"\";\n    vm.seasonsList = [];//SeasonsData.results;\n\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.urls.sales.promotions.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[1, 'asc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableSalePromotionsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableSalePromotionsController'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('name').withTitle($filter('translate')('PROMOTIONS.NAME'))\n        .renderWith(function (data, type, full) {\n          var result = '<div layout=\"row\" layout-align=\"start center\">';\n          if (full.only_for_loyal_customers){\n            result += '<md-icon md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/account-star-outline.c863396d.svg\" class=\"mr-10\">';\n            result += '<md-tooltip>' + $filter('translate')('PROMOTIONS.ONLY_FOR_LOYAL_CUSTOMERS') + '</md-tooltip>';\n            result += '</md-icon>';\n          }\n          result += '<a flex ui-sref=\"app.sale.promotions.promotion({id:' + full.id + '})\">' + data + '</a>';\n          result += \"</div>\";\n          return result;\n        }),\n      DTColumnBuilder.newColumn('start_date').withTitle($filter('translate')('PROMOTIONS.START_DATE'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'medium');\n        }),\n      DTColumnBuilder.newColumn('end_date').withTitle($filter('translate')('PROMOTIONS.END_DATE'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'medium');\n        }),\n      DTColumnBuilder.newColumn('fixed_discount')\n        .withTitle($filter('translate')('PROMOTIONS.PRICE'))\n        .renderWith(function (data, type, full) {\n          if (full.fixed_price_incl_tax !== null) {\n            return $filter('price')(full.fixed_price_incl_tax) + ' ' + vm.currencyCharacter;\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('fixed_discount')\n        .withTitle($filter('translate')('PROMOTIONS.DISCOUNT'))\n        .renderWith(function (data, type, full) {\n          if (full.fixed_discount !== null) {\n            return full.fixed_discount + ' %';\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('enabled')\n        .withTitle($filter('translate')('PROMOTIONS.ENABLED'))\n        .renderWith(function (data, type, full) {\n          if (data) {\n            return '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>';\n          }\n          return '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        })\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.filterByColumn = filterByColumn;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#promotion-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      angular.element('td', nRow).unbind('click');\n      angular.element('td', nRow).bind('click', function () {\n        $state.go('app.sale.promotions.promotion', {id: aData.id});\n      });\n      return nRow;\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SalePromotionController', SalePromotionController);\n\n  /** @ngInject */\n  function SalePromotionController($state, $filter, $http, $mdToast, $mdDialog, $document, api, PERMISSIONS, PromotionData,\n                                   CategoriesData, SubcategoriesData, BrandsData, SeasonsData, WarehousesData, HTTP_STATUS, Session, apiResolver) {\n\n    var vm = this;\n    vm.promotion = {};\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.warehouses = WarehousesData.results;\n\n    // Data\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    // Methods\n    vm.openMenu = openMenu;\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.delete = deletePromotion;\n    vm.searchProductCallback = searchProductCallback;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.removeProduct = removeProduct;\n    vm.duplicate = duplicate;\n\n    // Initialize:\n    init();\n\n    // Functions\n    function init() {\n      vm.promotion = angular.copy(PromotionData);\n      if (!vm.promotion) {\n        vm.promotion = {\n          products: [],\n          product_instances: [],\n          excluded_products: [],\n          excluded_product_instances: []\n        };\n      }\n    }\n\n    function openMenu($mdMenu, ev) {\n      $mdMenu.open(ev);\n    }\n\n    function save() {\n      if (!Session.hasPermission('sale.promotions.update')) {\n        return;\n      }\n\n      if(vm.saving){\n        return;\n      }\n\n      vm.saving = true;\n      if (vm.promotion.end_date) {\n        var endDate = window.moment(vm.promotion.end_date);\n        endDate.hour(23);\n        endDate.minute(59);\n        endDate.second(59);\n        vm.promotion.end_date = endDate.format('YYYY-MM-DDTHH:mm:ssZ');\n      }\n      if (!vm.promotion.id) {\n        api.sales.promotions.save(\n          vm.promotion,\n          function(response, callback, status) {\n            if (status == 201) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PROMOTION.PROMOTION_CREATED')).position('top right'));\n              $state.go('app.sale.promotions.promotion', { id: response.id });\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.saving = false;\n          }\n        );\n      } else {\n        api.sales.promotions.update(\n          vm.promotion,\n          function(response, callback, status) {\n            if (status == 200) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PROMOTION.PROMOTION_UPDATED')).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.saving = false;\n          }\n        );\n      }\n    }\n\n    function deletePromotion() {\n      if (Session.hasPermission('sale.promotions.delete')) {\n\n        if (vm.saving) {\n          return;\n        }\n\n        vm.saving = true;\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PROMOTION.DELETE_PROMOTION'))\n          .htmlContent($filter('translate')('PROMOTION.DELETE_PROMOTION_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          api.sales.promotions.delete(\n            vm.promotion,\n            function(response, callback, status) {\n              $state.go('app.sale.promotions');\n            }\n          );\n          vm.saving = false;\n\n        }, function() {\n          vm.saving = false;\n        });\n\n      }\n    }\n\n    function duplicate() {\n      if (!Session.hasPermission('sale.promotions.delete')) {\n        return;\n      }\n\n      if (vm.saving) {\n        return;\n      }\n\n      vm.saving = true;\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PROMOTIONS.DUPLICATE_PROMOTION'))\n        .htmlContent($filter('translate')('PROMOTIONS.DUPLICATE_PROMOTION_MESSAGE'))\n        .clickOutsideToClose(true)\n        .ok($filter('translate')('GENERAL.DUPLICATE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        api.sales.promotions.update(\n          {\n            id: vm.promotion.id,\n            option: 'duplicate'\n          },\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              $state.go('app.sale.promotions.promotion', { id: response.id });\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n        vm.saving = false;\n      }, function() {\n        vm.saving = false;\n      });\n    }\n\n    function cancel() {\n      vm.promotion = angular.copy(PromotionData);\n    }\n\n    function searchProductCallback(newProduct, excluded) {\n      var exists = false;\n\n      if (!excluded) {\n        vm.promotion.products.map(function(product) {\n          if (product.id == newProduct.id) {\n            exists = true;\n          }\n        });\n        if (!exists) {\n          vm.promotion.products.push(newProduct.id);\n          vm.promotion.product_instances.push(newProduct);\n        }\n      } else {\n        vm.promotion.excluded_products.map(function(product) {\n          if (product.id == newProduct.id) {\n            exists = true;\n          }\n        });\n        if (!exists) {\n          vm.promotion.excluded_products.push(newProduct.id);\n          vm.promotion.excluded_product_instances.push(newProduct);\n        }\n      }\n\n    }\n\n    function openProductSearchDialog(ev, excluded) {\n      if (Session.hasPermission('inventory.transfers.transfer.products.add_product')) {\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            params: {\n              multiple: true\n            }\n          }\n        }).then(function(result) {\n          if (result.product) {\n            searchProductCallback(result.product, excluded);\n          } else if (result.products.length) {\n            api.inventories.products.get({\n              ids: JSON.stringify(result.products.map(function(p) {\n                return p.id;\n              }))\n            }, function(response) {\n              response.results.map(function(product) {\n                searchProductCallback(product, excluded);\n              });\n            });\n          }\n        });\n      }\n    }\n\n    function removeProduct(product, excluded) {\n\n      if (!excluded) {\n\n        for (var i = 0; i < vm.promotion.products.length; i++) {\n          if (product.id == vm.promotion.products[i]) {\n            vm.promotion.products.splice(i, 1);\n            break;\n          }\n        }\n\n        for (var i = 0; i < vm.promotion.product_instances.length; i++) {\n          if (product.id == vm.promotion.product_instances[i].id) {\n            vm.promotion.product_instances.splice(i, 1);\n            break;\n          }\n        }\n\n      } else {\n\n        for (var i = 0; i < vm.promotion.excluded_products.length; i++) {\n          if (product.id == vm.promotion.excluded_products[i]) {\n            vm.promotion.excluded_products.splice(i, 1);\n            break;\n          }\n        }\n\n        for (var i = 0; i < vm.promotion.excluded_product_instances.length; i++) {\n          if (product.id == vm.promotion.excluded_product_instances[i].id) {\n            vm.promotion.excluded_product_instances.splice(i, 1);\n            break;\n          }\n        }\n\n      }\n\n    }\n  }\n})();\n\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('GoalsController', GoalsController);\n\n  /** @ngInject */\n  function GoalsController($mdDialog, $document, api, WarehousesData, SalesGoalsData, Session, $filter,\n                           SalesGoal, CURRENCIES) {\n    var vm = this;\n\n    // Data\n    vm.CURRENCIES = CURRENCIES;\n    vm.selectedDate = new Date();\n    vm.warehouses = WarehousesData.results;\n    vm.salesGoals = SalesGoalsData.results;\n    vm.salesGoalEvents = [];\n    vm.warehouseTotalDict = {};\n    vm.warehouseDict = {};\n\n    vm.calendarUiConfig = {\n      calendar: {\n        firstDay: 1,\n        editable: true,\n        eventLimit: true,\n        header: '',\n        handleWindowResize: true,\n        aspectRatio: 1,\n        dayNames: [\n          $filter('translate')('GENERAL.SUNDAY'),\n          $filter('translate')('GENERAL.MONDAY'),\n          $filter('translate')('GENERAL.TUESDAY'),\n          $filter('translate')('GENERAL.WEDNESDAY'),\n          $filter('translate')('GENERAL.THURSDAY'),\n          $filter('translate')('GENERAL.FRIDAY'),\n          $filter('translate')('GENERAL.SATURDAY')\n        ],\n        dayNamesShort: [\n          $filter('translate')('GENERAL.SUNDAY_ABBR'),\n          $filter('translate')('GENERAL.MONDAY_ABBR'),\n          $filter('translate')('GENERAL.TUESDAY_ABBR'),\n          $filter('translate')('GENERAL.WEDNESDAY_ABBR'),\n          $filter('translate')('GENERAL.THURSDAY_ABBR'),\n          $filter('translate')('GENERAL.FRIDAY_ABBR'),\n          $filter('translate')('GENERAL.SATURDAY_ABBR')\n        ],\n        viewRender: function (view) {\n          vm.calendarView = view;\n          vm.calendar = vm.calendarView.calendar;\n          vm.currentMonthShort = 'month-' + vm.calendar.getDate().month();\n        },\n        eventRender: function (event, element) {\n          element[0].innerText = event.title;\n        },\n        columnFormat: {\n          month: 'ddd',\n          week: 'ddd D',\n          day: 'ddd M'\n        },\n        eventClick: eventDetail,\n        selectable: true,\n        selectHelper: true,\n        select: select\n      }\n    };\n\n\n    // Methods\n    vm.addSalesGoal = addSalesGoal;\n    vm.toggleWarehouse = toggleWarehouse;\n    vm.next = next;\n    vm.prev = prev;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.warehouses.forEach(function (warehouse) {\n        warehouse.selected = true;\n        vm.warehouseDict[warehouse.id] = warehouse;\n      });\n\n      vm.salesGoals = vm.salesGoals.map(function (saleGoal) {\n        return new SalesGoal(saleGoal);\n      });\n\n      initTotalDict();\n      updateSalesGoalEvents();\n    }\n\n    function initTotalDict() {\n      vm.warehouses.forEach(function (warehouse) {\n        vm.warehouseTotalDict[warehouse.id] = 0;\n      });\n\n      vm.salesGoals.forEach(function (salesGoal) {\n        if (vm.selectedDate.getMonth() === new Date(salesGoal.start).getMonth()) {\n          vm.warehouseTotalDict[salesGoal.warehouse] += salesGoal.goal;\n        }\n      });\n    }\n\n    function updateSalesGoalEvents() {\n      var goals = [];\n      vm.salesGoals.filter(function (salesGoal) {\n        return vm.warehouseDict[salesGoal.warehouse] && vm.warehouseDict[salesGoal.warehouse].selected;\n      }).forEach(function (salesGoal) {\n        var currencyCharacter = $filter('currencyCharacter')(vm.warehouseDict[salesGoal.warehouse].currency);\n        var goalName = salesGoal.warehouse_name + ': ' + $filter('price')(salesGoal.goal) + ' ' + currencyCharacter;\n        var color = new Date(salesGoal.start).getMonth() === vm.selectedDate.getMonth() ? '#039be5' : '#BDBDBD';\n\n        goals.push({\n          color: color,\n          id: salesGoal.id,\n          title: goalName,\n          start: new Date(salesGoal.start),\n          end: null,\n          salesGoal: salesGoal\n        })\n      });\n\n      if (!vm.salesGoalEvents.length) {\n        // First time\n        vm.salesGoalEvents.push(goals);\n      } else {\n        // Update\n        vm.salesGoalEvents[0] = goals;\n      }\n    }\n\n    function toggleWarehouse(warehouse) {\n      warehouse.selected = !warehouse.selected;\n      vm.warehouseDict[warehouse.id].selected = warehouse.selected;\n\n      updateSalesGoalEvents();\n    }\n\n\n    /**\n     * Go to next on current view (week, month etc.)\n     */\n    function next() {\n      vm.loading = true;\n      vm.calendar.next();\n\n      // Moment.js to Date\n      vm.selectedDate = vm.calendar.getDate().toDate();\n\n      while (vm.salesGoalEvents.length > 0) {\n        vm.salesGoalEvents.pop();\n      }\n      api.sales.salesGoals.get(\n        {\n          date: vm.selectedDate.getTime(),\n          pagination: 'calendar'\n        },\n        function (response, callback, status) {\n          if (status === 200) {\n            vm.salesGoals = response.results;\n            initialize();\n          }\n          vm.loading = false;\n        }\n      )\n    }\n\n    /**\n     * Go to previous on current view (week, month etc.)\n     */\n    function prev() {\n      vm.loading = true;\n      vm.calendar.prev();\n\n      // Moment.js to Date\n      vm.selectedDate = vm.calendar.getDate().toDate();\n\n      while (vm.salesGoalEvents.length > 0) {\n        vm.salesGoalEvents.pop();\n      }\n      api.sales.salesGoals.get(\n        {\n          date: vm.selectedDate.getTime(),\n          pagination: 'calendar'\n        },\n        function (response, callback, status) {\n          if (status == 200) {\n            vm.salesGoals = response.results;\n            initialize();\n          }\n          vm.loading = false;\n        }\n      )\n    }\n\n    /**\n     * Show event detail\n     */\n    function eventDetail(salesGoalEvent, e) {\n      showSalesGoalFormDialog('edit', salesGoalEvent, e);\n    }\n\n    /**\n     * Add new sales goal in between selected dates\n     */\n    function select(start, end, e) {\n      var salesGoal = new SalesGoal({\n        start: new Date(start.format())\n      });\n      showSalesGoalFormDialog('add', {\n        salesGoal: salesGoal\n      }, e);\n    }\n\n    /**\n     * Add sales goal\n     */\n    function addSalesGoal(e) {\n      if (Session.hasPermission('sale.goals.create')) {\n        var salesGoal = new SalesGoal({\n          start: new Date()\n        });\n\n        showSalesGoalFormDialog('add', {\n          salesGoal: salesGoal\n        }, e);\n      }\n    }\n\n    /**\n     * Show sales goal add/edit form dialog\n     */\n    function showSalesGoalFormDialog(type, salesGoalEvent, e) {\n\n      $mdDialog.show({\n        controller: 'SalesGoalFormDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/goals/dialogs/sales-goal-form/sales-goal-form-dialog.html',\n        parent: angular.element($document.body),\n        targetEvent: e,\n        clickOutsideToClose: true,\n        locals: {\n          type: type,\n          salesGoal: salesGoalEvent.salesGoal,\n          warehouses: vm.warehouses\n        }\n      }).then(function (response) {\n\n          switch (response.type) {\n\n            case 'add':\n              var tempGoalIndex = vm.salesGoals.findIndex(function (salesGoals) {\n                return salesGoals.id === response.salesGoal.id;\n              });\n\n              if (tempGoalIndex !== -1) {\n                vm.salesGoals[tempGoalIndex] = response.salesGoal;\n              } else {\n                vm.salesGoals.push(response.salesGoal);\n              }\n\n              initTotalDict();\n              updateSalesGoalEvents();\n              break;\n\n            case 'edit':\n              var tempGoalIndex = vm.salesGoals.findIndex(function (salesGoals) {\n                return salesGoals.id === response.salesGoal.id;\n              });\n\n              if (tempGoalIndex !== -1) {\n                vm.salesGoals[tempGoalIndex] = response.salesGoal;\n                initTotalDict();\n                updateSalesGoalEvents();\n              }\n              break;\n\n            case 'remove':\n              var tempGoalIndex = vm.salesGoals.findIndex(function (salesGoals) {\n                return salesGoals.id === response.salesGoal.id;\n              });\n\n              if (tempGoalIndex !== -1) {\n                vm.salesGoals.splice(tempGoalIndex, 1);\n                initTotalDict();\n                updateSalesGoalEvents();\n              }\n              break;\n          }\n        },\n        function () {\n          // Do not remove\n        }\n      );\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SaleGiftCardsController', SaleGiftCardsController);\n\n  /** @ngInject */\n  function SaleGiftCardsController($scope, $state, $timeout, $filter, $compile, $mdDialog, $document, api, Session,\n                                   DTColumnBuilder, $translate, PERMISSIONS, SEARCH_MAX_LENGTH, apiResolver,\n                                   UiGridService, $http, $mdToast, HTTP_STATUS) {\n    var vm = this;\n\n    // Cons\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.timeout = null;\n\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.filterChanged = filterChanged;\n\n    // Grid Configuration\n    vm.types = ['gift_card', 'voucher'];\n    vm.is_valid = [true, false];\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        types: [],\n        is_valid: []\n      },\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      exporterCsvFilename: $filter('translate')('GIFT_CARDS.GIFT_CARDS') + '.csv',\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('GIFT_CARDS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ]\n    });\n\n    // Methods\n    vm.initialize = initialize;\n    vm.showSaleDialog = showSaleDialog;\n    vm.showCustomerDialog = showCustomerDialog;\n    vm.goToNewProductPage = goToNewProductPage;\n    vm.copyToClipboard = copyToClipboard;\n    vm.printGiftCard = printGiftCard;\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n    }\n\n    // Functions\n    function printGiftCard(giftCard) {\n      var sourcePosOrder = null;\n      var sourcePosOrderId = giftCard.pos_order_id;\n      if (sourcePosOrderId) {\n        api.inventories.posOrders.get({\n          id: sourcePosOrderId\n        }, function (response, fn, status) {\n          if (status === 200) {\n            sourcePosOrder = response;\n            $scope.$emit('ndPrinter::printDevolutionCard', {\n              posOrder: sourcePosOrder,\n              register: sourcePosOrder.register_instance\n            });\n          }\n        });\n      } else {\n        $scope.$emit('ndPrinter::printGiftCard', {\n              giftCard: giftCard,\n            });\n      }\n    }\n\n    function showSaleDialog(posOrderId) {\n      if (!posOrderId) {\n        return;\n      }\n      $mdDialog.show({\n        controller: 'SalePosOrderDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          previousPosOrderId: null\n        },\n        resolve: {\n          PosOrderData: function (apiResolver) {\n            return apiResolver.resolve('inventories.posOrders@get', {\n              id: posOrderId,\n              serializer: 'PosOrderWithDevolutionsSerializer'\n            });\n          }\n        }\n      })\n        .then(function (refresh) {\n          // Nothing to do\n        }, function () {\n          // Nothing to do\n        });\n    }\n\n\n    function showCustomerDialog(customerId) {\n      $mdDialog.show({\n        controller: 'ContactDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          forceCustomer: true,\n          forceNaturalPersonType: true\n        },\n        resolve: {\n          ContactsData: function (apiResolver) {\n            if (customerId) {\n              return apiResolver.resolve('inventories.contacts@get', {id: customerId});\n            }\n            return false;\n          },\n          PricingTiersData: function (apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@list');\n          },\n          PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          }\n        }\n      }).then(function () {\n        // Nothing to do\n      });\n    }\n\n    function goToNewProductPage() {\n      $state.go('app.inventory.products.new-product', {is_gift_card: true});\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n          vm.timeout = $timeout(function () {\n            vm.timeout = null;\n            getGridGiftCardsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridGiftCardsPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridGiftCardsPage();\n        }\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function (colDef) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function (oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function () {\n        loadStatus();\n        getGridGiftCardsPage();\n      }, 200);\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setGridColumns(true);\n      saveStatus();\n      getGridGiftCardsPage();\n    }\n\n    function setGridColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n      angular.extend(vm.columns, {\n        is_voucher: {\n          displayName: $filter('translate')('GIFT_CARDS.TYPE'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.TYPE'),\n          field: 'is_voucher',\n          permission: true,\n          visible: getColumnStatusVisibility('is_voucher', true, avoidState),\n          minWidth: 150,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"!row.entity.is_voucher\"><md-icon md-font-icon=\"icon-wallet-giftcard\" class=\"mr-5\"></md-icon>{{\\'SALES.GIFT_CARD\\' | translate}}</span>' +\n            '<span ng-if=\"row.entity.is_voucher\"><md-icon md-font-icon=\"icon-wallet-membership\" class=\"mr-5\"></md-icon>{{\\'SALES.VOUCHER\\' | translate}}</span></div>'\n        },\n        barcode: {\n          displayName: $filter('translate')('GIFT_CARDS.CODE'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.CODE'),\n          field: 'barcode',\n          permission: true,\n          visible: getColumnStatusVisibility('barcode', true, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle barcode-cell\" flex>{{row.entity.barcode || \\'-\\'}} ' +\n            '<md-icon class=\"show-copy-button cursor-pointer ml-5\" ng-click=\"grid.appScope.copyToClipboard(row.entity.barcode)\" ' +\n            'class=\"cursor-pointer s20\" md-font-icon=\\'icon-content-copy\\'></md-icon>' +\n            '</div>'\n        },\n        created_at: {\n          displayName: $filter('translate')('GIFT_CARDS.CREATED_AT'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: getColumnStatusVisibility('created_at', true, avoidState),\n          minWidth: 100,\n          width: 160,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</div>'\n        },\n        created_by: {\n          displayName: $filter('translate')('GIFT_CARDS.CREATED_BY'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.CREATED_BY'),\n          field: 'created_by',\n          permission: true,\n          visible: getColumnStatusVisibility('created_by', true, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\" layout=\"row\" layout-align=\"center center\" ng-if=\"row.entity.created_by\"><nd-user-picture user=\"row.entity.created_by\" class=\"mr-8\"></nd-user-picture>' + '{{row.entity.created_by | personname}}' + '</div>'\n        },\n        customer: {\n          displayName: $filter('translate')('GIFT_CARDS.CUSTOMER'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.CUSTOMER'),\n          field: 'customer',\n          permission: true,\n          visible: getColumnStatusVisibility('customer', true, avoidState),\n          minWidth: 200,\n          cellTemplate: '<md-button class=\"md-primary\" ng-click=\"grid.appScope.vm.showCustomerDialog(row.entity.customer.id)\" ng-if=\"row.entity.customer\">' + '{{row.entity.customer | personname}}' + '</md-button>'\n        },\n        pos_order_autocode: {\n          displayName: $filter('translate')('GIFT_CARDS.FROM_THE_SALE'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.FROM_THE_SALE'),\n          field: 'pos_order_autocode',\n          permission: true,\n          visible: getColumnStatusVisibility('pos_order_autocode', true, avoidState),\n          minWidth: 100,\n          orderingField: 'pos_order_product_variant',\n          cellTemplate: '<md-button class=\"md-primary\" ng-if=\"row.entity.pos_order_id\" ng-click=\"grid.appScope.vm.showSaleDialog(row.entity.pos_order_id)\">' + '{{row.entity.pos_order_autocode || \\'-\\'}}' + '</md-button>'\n        },\n        consumed_pos_orders: {\n          displayName: $filter('translate')('GIFT_CARDS.USED_IN_SALES'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.USED_IN_SALES'),\n          field: 'consumed_pos_orders',\n          permission: true,\n          visible: getColumnStatusVisibility('consumed_pos_orders', true, avoidState),\n          minWidth: 100,\n          cellClass: 'cell-padding',\n          cellTemplate: '<p style=\"word-break: break-all;\"><a class=\"cursor-pointer\" ng-repeat=\"consumed_pos_order in row.entity.consumed_pos_orders\" ng-click=\"grid.appScope.vm.showSaleDialog(consumed_pos_order.id)\">' + '{{$index == 0 ? \"\": \", \"}} {{consumed_pos_order.autocode || \\'-\\'}}' + '</a></p>'\n        },\n        amount_incl_tax: {\n          displayName: $filter('translate')('GIFT_CARDS.AMOUNT'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.AMOUNT'),\n          field: 'amount_incl_tax',\n          permission: true,\n          visible: getColumnStatusVisibility('season', true, avoidState),\n          minWidth: 100,\n          cellClass: 'cell-right amount-cell',\n          cellTemplate: '<md-icon class=\"show-print-button cursor-pointer ml-5\" ng-click=\"grid.appScope.vm.printGiftCard(row.entity)\" md-svg-src=\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\"></md-icon><div class=\"cell-middle\">{{grid.appScope.getAmount(row.entity.amount_incl_tax)}}</div>'\n        },\n        is_valid: {\n          displayName: $filter('translate')('GIFT_CARDS.VALIDITY'),\n          headerTooltip: $filter('translate')('GIFT_CARDS.VALIDITY'),\n          field: 'is_valid',\n          permission: true,\n          visible: getColumnStatusVisibility('is_valid', true, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.is_valid\"><md-icon md-font-icon=\"icon-check\" class=\"mr-5\"></md-icon>{{\\'GIFT_CARDS.VALID\\' | translate}}</span>' +\n            '<span ng-if=\"!row.entity.is_valid\"><md-icon md-font-icon=\"icon-close\" class=\"mr-5\"></md-icon>{{\\'GIFT_CARDS.NOT_VALID\\' | translate}}</span></div>'\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridGiftCardsPage() {\n      vm.loading = true;\n\n      $http({\n        url: api.urls.sales.giftCards.replace('/:id/', ''),\n        method: 'GET',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        params: getGridGiftCardsPagePostData(),\n      }).then(function (response) {\n        vm.loading = false;\n        vm.uiGridInitialized = true;\n        vm.gridOptions.data = response.data.data;\n\n        vm.gridOptions.totalItems = response.data.recordsFiltered;\n      })\n        .catch(function (error) {\n          throw error;\n        });\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridSaleGiftCardsController', JSON.stringify(vm.status));\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridSaleGiftCardsController'));\n      if (loadedStatus) {\n        angular.extend(vm.status, loadedStatus);\n        if (vm.gridApi) {\n          vm.gridApi.saveState.restore($scope, vm.status.state);\n        }\n      }\n    }\n\n    function getGridGiftCardsPagePostData() {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Fields\n      d.fields = getGridVisibleColumnFields();\n\n      // Search\n      d.search = vm.status.search;\n      vm.status.filters.types ? d.types = vm.status.filters.types : null;\n      vm.status.filters.is_valid ? d.is_valid = vm.status.filters.is_valid : null;\n\n      return d;\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function (v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function (column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    $scope.getShortDate = function (date) {\n      return $filter('date')(date, 'dd/MM/yy HH:mm');\n    };\n\n    $scope.getAmount = function (amount) {\n      return $filter('price')(amount) + ' ' + vm.currencyCharacter;\n    }\n\n    function filterChanged() {\n      saveStatus();\n      getGridGiftCardsPage();\n    }\n\n    function copyToClipboard(value) {\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({position: 'fixed', opacity: '0'});\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.sale')\n      .controller('SellDisplayController', SellDisplayController);\n\n    /** @ngInject */\n    function SellDisplayController($scope, $filter, Utils, Session, PosOrder) {\n\n      var vm = this;\n      vm.sale = null;\n      vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n      initialize();\n\n      function initialize() {\n        window.addEventListener('storage', function(event) {\n          if (event.key === 'displaySale') {\n            vm.sale = new PosOrder(JSON.parse(event.newValue));\n            $scope.$apply();\n          }\n        });\n      }\n\n    }\n  }\n)();\n\n/*jshint esversion: 7 */\n(function () {\n  'use strict';\n\n  angular\n    .module('app.planning')\n    .controller('ReplenishmentController', ReplenishmentController);\n\n  /** @ngInject */\n  function ReplenishmentController(\n    $scope,\n    $mdToast,\n    $timeout,\n    $mdSidenav,\n    $filter,\n    $state,\n    api,\n    Session,\n    HTTP_STATUS,\n    UiGridService,\n    InventoryConfiguration,\n    $mdDialog,\n    $document,\n    ERROR_CODES,\n    PLANNING_AVAILABILITY_STATUS,\n    TRANSFER_ORDER_STATUSES,\n    TRANSFER_ORDER_STATUSES_REVERSE,\n    uiGridGroupingConstants,\n    Utils\n  ) {\n\n    var PULLING_DELAY_MS = 5000;\n    var vm = this;\n    var controller = new window.AbortController();\n    vm.VIEW_BY_PRODUCT = 1;\n    vm.VIEW_BY_WAREHOUSE = 2;\n    vm.PLANNING_AVAILABILITY_STATUS = PLANNING_AVAILABILITY_STATUS;\n\n\n    // Grid Configuration\n    vm.columnsByProduct = {};\n    vm.columnsByWarehouse = {};\n    vm.gridApiByProduct = null;\n    vm.gridApiByWarehouse = null;\n    vm.uiGridByProductInitialized = false;\n    vm.uiGridByWarehouseInitialized = false;\n    vm.statusByProduct = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        warehouses: [],\n        availabilityStatuses: [],\n        abcCategories: [],\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        collections: [],\n        warehouseStock: null,\n        stockToOrder: null,\n      },\n      page: 1,\n      pageSize: 5\n    };\n    vm.statusByWarehouse = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        warehouses: [],\n        seasons: [],\n        collections: [],\n        brands: [],\n        categories: [],\n        subcategories: []\n      },\n      page: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.warehouseUrl = api.inventories.warehouses.list;\n    vm.seasonsUrl = api.inventories.seasons.list;\n    vm.brandsUrl = api.inventories.brands.list;\n    vm.categoriesUrl = api.inventories.categories.list;\n    vm.subcategoriesUrl = api.inventories.subcategories.list;\n    vm.collectionsUrl = api.manufactures.collections.list;\n\n    vm.orderQuantities = {};\n    vm.orderQuantitiesByWeeklyCoverage = {};\n    vm.totalDraftByProduct = {};\n    vm.totalDraftByWarehouse = {};\n    vm.pullingTimeouts = {}; // Track pulling timeouts by warehouse ID\n    vm.company = Session.company;\n    vm.configurationData = window.angular.copy(InventoryConfiguration.results[0]);\n    vm.deliveryDays = vm.configurationData.delivery_days;\n    vm.exporting = false;\n    vm.abcCategories = ['A', 'B', 'C'];\n    vm.availabilityStatuses = [\n      PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK,\n      PLANNING_AVAILABILITY_STATUS.URGENT_ORDER,\n      PLANNING_AVAILABILITY_STATUS.IN_STOCK\n    ];\n    vm.gridOptionsByProduct = UiGridService.getGridOptions({\n      rowHeight: 40,\n      onRegisterApi: initializeGridByProduct,\n      enableRowHeaderSelection: false,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ]\n    });\n    vm.gridOptionsByWarehouse = UiGridService.getGridOptions({\n      rowHeight: 40,\n      onRegisterApi: initializeGridByWarehouse,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ]\n    });\n    vm.view = vm.VIEW_BY_WAREHOUSE; // TODO init by local storage\n    vm.selectedStatus = vm.statusByWarehouse; // TODO init by local storage\n    vm.activePresetFilter = null; // TODO init by local storage\n    vm.countByAvailabilityStatusDict = {};\n    vm.analysis_period_days = null;\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.filterChanged = filterChanged;\n    vm.searchInputChanged = searchInputChanged;\n    vm.replenishProductVariant = replenishProductVariant;\n    vm.toggleFilterVisibility = toggleFilterVisibility;\n    vm.getCoverage = getCoverage;\n    vm.downloadCSV = downloadCSV;\n    vm.openAnalysisInformationDialog = openAnalysisInformationDialog;\n    vm.isProductView = isProductView;\n    vm.isWarehouseView = isWarehouseView;\n    vm.applyAvailabilityStatusFilter = applyAvailabilityStatusFilter;\n    vm.getAggregatedByStatusFilter = getAggregatedByStatusFilter;\n    vm.createReplenishmentDraft = createReplenishmentDraft;\n    vm.expandAll = expandAll;\n    vm.collapseAll = collapseAll;\n    vm.orderQuantityByWeeklyCoverageChanged = orderQuantityByWeeklyCoverageChanged;\n    vm.orderQuantityByUnitsChanged = orderQuantityByUnitsChanged;\n    vm.calculateDate = Utils.calculateDateByNumberDays;\n    vm.onClickInput = onClickInput;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      $scope.$on('$destroy', function () {\n        if (vm.timeout) {\n          $timeout.cancel(vm.timeout);\n        }\n        // Also stop all pulling drafts when destroying the controller\n        stopPullingDrafts();\n      });\n\n      $scope.$watch(function () {\n        return vm.view;\n      }, function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.view = parseInt(newValue);\n          saveView();\n          if (newValue === vm.VIEW_BY_PRODUCT){\n            vm.selectedStatus = vm.statusByProduct;\n            // Stop all pulling drafts when switching to product view\n            stopPullingDrafts();\n          }else if (newValue === vm.VIEW_BY_WAREHOUSE){\n            vm.selectedStatus = vm.statusByWarehouse;\n          }\n        }\n      });\n\n      loadView();\n\n    }\n\n    function saveView(){\n      localStorage.setItem(Session.company.id + '::UIGridReplenishmentControllerV7::view', vm.view);\n    }\n\n    function loadView(){\n      var view = localStorage.getItem(Session.company.id + '::UIGridReplenishmentControllerV7::view');\n      if(view){\n        vm.view = parseInt(view);\n      }\n    }\n\n\n    // Used to avoid problems when editing the input after render the table during scroll\n    function onClickInput($event) {\n      $event.stopPropagation();\n      $timeout(function () {\n        $event.target.focus();\n      }, 0);\n    };\n\n    function getAvailabilityStatusValue(availabilityStatus) {\n      switch (availabilityStatus) {\n        case 'OUT_OF_STOCK':\n          return 3;\n        case 'URGENT_ORDER':\n          return 2;\n        case 'NON_URGENT_ORDER':\n          return 1;\n        default:\n          return 0;\n      }\n    }\n\n    function getABCValue(abcCategory) {\n      switch (abcCategory) {\n        case 'A':\n          return 1.5;\n        case 'B':\n          return 1;\n        case 'C':\n          return 0.5;\n        default:\n          return 0;\n      }\n    }\n\n    function orderQuantityByWeeklyCoverageChanged(entity) {\n      var weeks = vm.orderQuantitiesByWeeklyCoverage[entity.item_external_id][entity.location_external_id];\n      var newOrderQuantity = Math.ceil(weeks * 7 * entity.avg_daily_total_units_sold) + entity.replenishment_rop;\n      newOrderQuantity -= entity.stock_total_store;\n      vm.orderQuantities[entity.item_external_id][entity.location_external_id] = newOrderQuantity;\n      vm.gridApiByProduct.core.refresh();\n    }\n\n    function orderQuantityByUnitsChanged(entity) {\n      var newOrderQuantity = vm.orderQuantities[entity.item_external_id][entity.location_external_id];\n      var weeks = (newOrderQuantity + entity.replenishment_rop + entity.stock_total_store) / (7 * entity.avg_daily_total_units_sold);\n      vm.orderQuantitiesByWeeklyCoverage[entity.item_external_id][entity.location_external_id] = Math.ceil(weeks);\n      vm.gridApiByProduct.core.refresh();\n    }\n\n    function expandAll() {\n      vm.gridApiByProduct.treeBase.expandAllRows();\n    }\n\n    function collapseAll() {\n      vm.gridApiByProduct.treeBase.collapseAllRows();\n    }\n\n    function initializeGridByProduct(gridApi) {\n      vm.gridApiByProduct = gridApi;\n\n      vm.gridApiByProduct.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        if (vm.columnsByProduct[changedColumn.colDef.field]) {\n          vm.columnsByProduct[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n        }\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridByProductInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApiByProduct.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridByProductInitialized) {\n          vm.statusByProduct.page = newPage;\n          vm.statusByProduct.pageSize = pageSize;\n          saveStatus();\n          getGridPageByProduct(false);\n        }\n      });\n\n      vm.gridApiByProduct.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridByProductInitialized) {\n          resetPagination();\n          vm.statusByProduct.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridPageByProduct(false);\n        }\n      });\n\n      vm.gridApiByProduct.pinning.on.columnPinned($scope, function (colDef) {\n        if (vm.uiGridByProductInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApiByProduct.colMovable.on.columnPositionChanged($scope, function (oldPosition, newPositio) {\n        if (vm.uiGridByProductInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApiByProduct.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridByProductInitialized) {\n          saveStatus();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function () {\n        loadStatus();\n        getGridPageByProduct(true);\n      }, 200);\n    }\n\n    function initializeGridByWarehouse(gridApi) {\n      vm.gridApiByWarehouse = gridApi;\n\n      vm.gridApiByWarehouse.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columnsByWarehouse[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridByWarehouseInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApiByWarehouse.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridByWarehouseInitialized) {\n          vm.statusByWarehouse.page = newPage;\n          vm.statusByWarehouse.pageSize = pageSize;\n          saveStatus();\n          getGridPageByWarehouse(false);\n        }\n      });\n\n      vm.gridApiByWarehouse.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridByWarehouseInitialized) {\n          vm.statusByWarehouse.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridPageByWarehouse(false);\n        }\n      });\n\n      vm.gridApiByWarehouse.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridByWarehouseInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApiByWarehouse.colMovable.on.columnPositionChanged($scope, function (oldPosition, newPositio) {\n        if (vm.uiGridByWarehouseInitialized) {\n          saveStatus();\n        }\n      });\n\n      if (!vm.uiGridByWarehouseInitialized) {\n        setGridColumnsByWarehouse();\n      }\n\n      $timeout(function () {\n        loadStatus();\n        getGridPageByWarehouse(true);\n      }, 200);\n    }\n\n    function saveStatus() {\n      if (isProductView()) {\n        vm.statusByProduct.state = vm.gridApiByProduct.saveState.save();\n        localStorage.setItem(Session.company.id + '::UIGridReplenishmentControllerV7::statusByProduct', JSON.stringify(vm.statusByProduct));\n      } else if (isWarehouseView()) {\n        vm.statusByWarehouse.state = vm.gridApiByWarehouse.saveState.save();\n        localStorage.setItem(Session.company.id + '::UIGridReplenishmentControllerV7::statusByWarehouse', JSON.stringify(vm.statusByWarehouse));\n      }\n    }\n\n    function loadStatus() {\n      var statusBy = isProductView() ? 'Product' : 'Warehouse';\n      var statusKey = Session.company.id + '::UIGridReplenishmentControllerV7::statusBy' + statusBy;\n      var loadedStatus = JSON.parse(localStorage.getItem(statusKey));\n      if (loadedStatus && isProductView()) {\n        window.angular.merge(vm.statusByProduct, loadedStatus);\n        if (vm.gridApiByProduct) {\n          if (vm.statusByProduct.state &&\n            vm.statusByProduct.state['grouping'] &&\n            vm.statusByProduct.state['grouping']['rowExpandedStates']\n          ) {\n            delete vm.statusByProduct.state['grouping']['rowExpandedStates'];\n          }\n          vm.gridApiByProduct.saveState.restore($scope, vm.statusByProduct.state);\n        }\n      } else if (loadedStatus && isWarehouseView()) {\n        window.angular.merge(vm.statusByWarehouse, loadedStatus);\n        if (vm.gridApiByWarehouse) {\n          vm.gridApiByWarehouse.saveState.restore($scope, vm.statusByWarehouse.state);\n        }\n      }\n    }\n\n    function getColumnVisibility(field, defaultValue, avoidState) {\n      var status = isProductView() ? vm.statusByProduct : vm.statusByWarehouse;\n      if (!avoidState && status.state.columns) {\n        const column = status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function restoreGridColumns() {\n      cleanColumns();\n      setGridColumns(true);\n      getGridPage(false);\n\n      $timeout(function() {\n        saveStatus();\n      }, 100);\n    }\n\n    function cleanColumns() {\n      if (isProductView()) {\n        vm.columnsByProduct = {};\n        vm.gridOptionsByProduct.columnDefs = [];\n      } else if (isWarehouseView()) {\n        vm.columnsByWarehouse = {};\n        vm.gridOptionsByWarehouse.columnDefs = [];\n      }\n    }\n\n    function getCoverage(quantity, avgDailyTotalUnitsSold) {\n      if (quantity < 0) {\n        return 0;\n      }\n      return avgDailyTotalUnitsSold === 0 ? 0 : Math.ceil(quantity / avgDailyTotalUnitsSold);\n    }\n\n    function setGridColumns(avoidState) {\n      if (isProductView()) {\n        setGridColumnsByProduct(avoidState);\n      } else if (isWarehouseView()) {\n        setGridColumnsByWarehouse(avoidState);\n      }\n    }\n\n    vm.getAggregationValue = function (aggregations, field, rendered) {\n      var aggregation = aggregations.find(function (agg) {\n        return agg.col.field === field;\n      });\n      if (!rendered) {\n        return aggregation ? aggregation.rendered : null;\n      }\n      return aggregation ? aggregation[rendered] : null;\n    };\n\n    function setGridColumnsByProduct(avoidState) {\n      var orderCellHtml =\n        '<div ng-if=\"row.groupHeader\" layout=\"row\" layout-align=\"end center\" flex ng-if=\"row.groupHeader\">' +\n        '<span>{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'order\\') }} </span>' +\n        '</div>' +\n        '<div layout=\"row\" layout-align=\"center center\" flex ng-show=\"row.treeLevel !== 0\">' +\n        '<div flex>' +\n        '<input type=\"number\" ng-click=\"grid.appScope.vm.onClickInput($event)\" ng-wheel=\"$event.preventDefault()\" ng-mousedown=\"$event.stopPropagation()\"' +\n        'ng-change=\"grid.appScope.vm.orderQuantityByUnitsChanged(row.entity)\"' +\n        'ng-model=\"grid.appScope.vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id]\"' +\n        'class=\"nd-input text-right\">' +\n        '</div>' +\n        '<div flex layout=\"column\" class=\"pl-8\">' +\n        '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n        '</small>' +\n        '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(grid.appScope.vm.orderQuantitiesByWeeklyCoverage[row.entity.item_external_id][row.entity.location_external_id] * 7, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n        '</small>' +\n        '</div>' +\n        '<md-button class=\"md-icon-button no-margin\"' +\n        'ng-click=\"grid.appScope.vm.replenishProductVariant(row.entity, row.entity.location_external_id, row.entity.provider_external_id, row.entity.replenishment_stock_to_order)\">' +\n        '<md-tooltip> {{\"INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT\" | translate }}</md-tooltip>' +\n        '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/package-add.0bc557a5.svg\"></md-icon>' +\n        '</md-button>' +\n        '</div>';\n\n\n      var orderByCoverageCellHtml =\n        '<div layout=\"row\" layout-align=\"center center\" flex ng-show=\"row.treeLevel !== 0\">' +\n        '<div flex>' +\n        '<input type=\"number\"' +\n        'ng-change=\"grid.appScope.vm.orderQuantityByWeeklyCoverageChanged(row.entity)\"' +\n        'ng-model=\"grid.appScope.vm.orderQuantitiesByWeeklyCoverage[row.entity.item_external_id][row.entity.location_external_id]\"' +\n        'class=\"nd-input text-right\">' +\n        '</div>' +\n        '<div flex layout=\"column\" class=\"pl-8\">' +\n        '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n        '</small>' +\n        '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(grid.appScope.vm.orderQuantitiesByWeeklyCoverage[row.entity.item_external_id][row.entity.location_external_id] * 7, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n        '</small>' +\n        '</div>' +\n        '<md-button class=\"md-icon-button no-margin\"' +\n        'ng-click=\"grid.appScope.vm.replenishProductVariant(row.entity, row.entity.location_external_id)\">' +\n        '<md-tooltip> {{\"LOW_STOCK.CREATE_REPLENISHMENT_DRAFT\" | translate }}</md-tooltip>' +\n        '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/package-add.0bc557a5.svg\"></md-icon>' +\n        '</md-button>' +\n        '</div>';\n\n      window.angular.extend(vm.columnsByProduct, {\n        cover_thumbnail: {\n          displayName: '',\n          headerTooltip: $filter('translate')('PRODUCT.IMG'),\n          field: 'cover_thumbnail',\n          width: 45,\n          minWidth: 45,\n          maxWidth: 45,\n          permission: true,\n          visible: true,\n          enablePinning: false,\n          pinnedLeft: true,\n          enableSorting: false,\n          enableHiding: false,\n          enableColumnMenu: false,\n          enableColumnResizing: false,\n          enableCellEdit: false,\n          movable: false,\n          cellTemplate: '<div class=\"cell-center full-width\" ng-show=\"row.treeLevel === 0\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.treeNode.children[0].row.entity.product_id})\">' +\n            '<div ng-if=\"!row.treeNode.children[0].row.entity.cover_thumbnail\" layout=\"row\" layout-align=\"center center\" class=\"w-48\">' +\n            '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '</div>' +\n            '<img ng-if=\"row.treeNode.children[0].row.entity.cover_thumbnail\" class=\"w-40 h-40\" ng-src=\"{{row.treeNode.children[0].row.entity.cover_thumbnail}}\" lazy-src>' +\n            '</a>' +\n            '</div>'\n        },\n        item_code: {\n          displayName: $filter('translate')('PRODUCT.CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE'),\n          field: 'item_code',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          visible: getColumnStatusVisibility('item_code', false, avoidState),\n          enablePinning: true,\n          groupingShowAggregationMenu: false,\n          pinnedLeft: true,\n          grouping: {groupPriority: 0},\n          enableSorting: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" layout=\"row\" flex class=\"start center\" ng-show=\"row.treeLevel === 0\">' +\n            '<a style=\"align-self: center\" ui-sref=\"app.inventory.products.product.overview({id:row.treeNode.children[0].row.entity.product_id})\">' + '{{row.treeNode.children[0].row.entity.item_code || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        item_name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          field: 'item_name',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('item_name', true, avoidState),\n          pinnedLeft: true,\n          enablePinning: true,\n          enableSorting: true,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.treeNode.children[0].row.entity.product_id})\">' + '{{row.treeNode.children[0].row.entity.item_name || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        item_sku: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n          field: 'item_sku',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          visible: getColumnStatusVisibility('item_sku', true, avoidState),\n          enablePinning: true,\n          enableHiding: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_sku || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        item_barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'item_barcode',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('item_barcode', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_barcode || \\'-\\'}}' + '</a>' +\n            '</div>'\n        },\n        size: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n          field: 'size',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('size', true, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.size || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        color: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n          field: 'color',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('color', true, avoidState),\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.color || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        brand_name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n          field: 'brand_name',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('brand_name', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.brand_name || \\'-\\'}}</div>'\n        },\n        category: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n          field: 'category',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('category', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.category || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        subcategory: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n          field: 'subcategory',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('subcategory', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.subcategory || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        season_name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n          field: 'season_name',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('season_name', false, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.season_name || \\'-\\'}}</div>'\n        },\n        separator_2: {\n          displayName: '',\n          field: 'separator_2',\n          visible: true,\n          width: 5,\n          minWidth: 5,\n          permission: true,\n          enableHiding: false,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          enableFiltering: false,\n          enableColumnMenu: false,\n          enableColumnResizing: false,\n          cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellClass: 'no-padding'\n        },\n        replenishment_stock_purchase_in_transit: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          field: 'replenishment_stock_purchase_in_transit',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('replenishment_stock_purchase_in_transit', false, avoidState),\n          cellFilter: 'number',\n          cellClass: 'cell-right',\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.replenishment_stock_purchase_in_transit | number}}</div>'\n        },\n        replenishment_stock_transfers_in_transit: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TRANSFERS_IN_TRANSIT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TRANSFERS_IN_TRANSIT'),\n          field: 'replenishment_stock_transfers_in_transit',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('replenishment_stock_transfers_in_transit', false, avoidState),\n          cellFilter: 'number',\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\" >{{row.entity.replenishment_stock_transfers_in_transit | number}}</div>'\n        },\n        stock_replenishment: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISHMENT_STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISHMENT_STOCK'),\n          field: 'stock_replenishment',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('stock_replenishment', false, avoidState),\n          cellFilter: 'number',\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.stock_replenishment | number}}</div>'\n        },\n        replenishment_stock_total: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_REPLENISHMENT_STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_REPLENISHMENT_STOCK'),\n          field: 'replenishment_stock_total',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('replenishment_stock_total', true, avoidState),\n          cellFilter: 'number',\n          cellClass: 'cell-right cell-padding',\n          enableSorting: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.replenishment_stock_total | number}}</div>'\n        },\n        separator_3: {\n          displayName: '',\n          field: 'separator_3',\n          visible: true,\n          width: 5,\n          minWidth: 5,\n          permission: true,\n          enableHiding: false,\n          groupingShowAggregationMenu: false,\n          enableSorting: false,\n          enableFiltering: false,\n          enableColumnMenu: false,\n          enableColumnResizing: false,\n          cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellClass: 'no-padding'\n        },\n        location_name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STORE_NAME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STORE_NAME'),\n          field: 'location_name',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('location_name', true, avoidState),\n          cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel !== 0\">{{row.entity.location_name || \\'-\\'}}</div>',\n          enableSorting: false\n        },\n        stock_purchase_in_transit_to_store: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n          field: 'stock_purchase_in_transit_to_store',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('stock_purchase_in_transit_to_store', false, avoidState),\n          cellFilter: 'number: 0',\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false\n        },\n        stock_transfers_in_transit_to_store: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT_TO_STORE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT_TO_STORE'),\n          field: 'stock_transfers_in_transit_to_store',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('stock_transfers_in_transit_to_store', false, avoidState),\n          cellFilter: 'number: 0',\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding',\n          enableSorting: false\n        },\n        stock_available_store: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          field: 'stock_available_store',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('stock_available_store', false, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding'\n        },\n        stock_total_store: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_STORE_STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_STORE_STOCK'),\n          field: 'stock_total_store',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          enableSorting: true,\n          visible: getColumnVisibility('stock_total_store', true, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding'\n        },\n        separator_4: {\n          displayName: '',\n          field: 'separator_4',\n          visible: true,\n          width: 5,\n          minWidth: 5,\n          permission: true,\n          enableHiding: false,\n          enableSorting: false,\n          enableFiltering: false,\n          groupingShowAggregationMenu: false,\n          enableColumnMenu: false,\n          enableColumnResizing: false,\n          cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellClass: 'no-padding'\n        },\n        item_abc_category: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n          field: 'item_abc_category',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('item_abc_category', true, avoidState),\n          customTreeAggregationFn: function (aggregation, fieldValue, numValue, row) {\n            if (typeof (aggregation.value) === 'undefined') {\n              aggregation.value = [];\n            }\n            aggregation.value.push(row.entity.item_abc_category);\n          },\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            var counts = {};\n            var compare = 0;\n            var mostFrequent;\n            for (var i = 0, len = aggregation.value.length; i < len; i++) {\n              var word = aggregation.value[i];\n              if (counts[word] === undefined) {\n                counts[word] = 1;\n              } else {\n                counts[word] = counts[word] + 1;\n              }\n              if (counts[word] > compare) {\n                compare = counts[word];\n                mostFrequent = aggregation.value[i];\n              }\n            }\n            aggregation.rendered = mostFrequent;\n          },\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"abc-box type-{{row.entity.item_abc_category}}\" ng-if=\"!row.groupHeader\">{{row.entity.item_abc_category}}</div>' +\n            '<div class=\"abc-box type-{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'item_abc_category\\')}}\" ng-if=\"row.groupHeader\">{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'item_abc_category\\')}}</div>',\n        },\n        coverage_days: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n          field: 'coverage_days',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('coverage_days', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          customTreeAggregationFn: function (aggregation, fieldValue, numValue, row) {\n            // i want to get the min value\n            if (typeof (aggregation.value) === 'undefined') {\n              aggregation.value = [];\n            }\n            var value = 0\n            if (row.entity.avg_daily_total_units_sold) {\n              value = row.entity.stock_available_store / row.entity.avg_daily_total_units_sold;\n            }\n            aggregation.value.push(value);\n          },\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.min = Math.max(0, Math.min.apply(null, aggregation.value));\n            aggregation.max = Math.max.apply(null, aggregation.value);\n            var sum = 0;\n            for (var i = 0; i < aggregation.value.length; i++) {\n              sum += aggregation.value[i];\n            }\n            if (aggregation.value.length === 0) {\n              aggregation.avg = 0\n            } else {\n              aggregation.avg = sum / aggregation.value.length;\n            }\n          },\n          cellTemplate: '<div class=\"full-width text-right\" ng-if=\"!row.groupHeader\">{{ grid.appScope.vm.getCoverage(row.entity.stock_available_store, row.entity.avg_daily_total_units_sold) | number: 0 }}</div>' +\n            '<div flex layout=\"column\">' +\n            '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'coverage_days\\', \\'avg\\') | number:0 }}</span>' +\n            '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'coverage_days\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'coverage_days\\', \\'max\\') | number:0 }}' +\n            '</small>' +\n            '</div>',\n        },\n        coverage_weeks: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS'),\n          field: 'coverage_weeks',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('coverage_weeks', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          customTreeAggregationFn: function (aggregation, fieldValue, numValue, row) {\n            if (typeof (aggregation.value) === 'undefined') {\n              aggregation.value = [];\n            }\n            var value = 0\n            if (row.entity.avg_daily_total_units_sold) {\n              value = row.entity.stock_available_store / row.entity.avg_daily_total_units_sold / 7;\n            }\n            aggregation.value.push(value);\n          },\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.min = Math.max(0, Math.min.apply(null, aggregation.value));\n            aggregation.max = Math.max.apply(null, aggregation.value);\n            var sum = 0;\n            for (var i = 0; i < aggregation.value.length; i++) {\n              sum += aggregation.value[i];\n            }\n            if (aggregation.value.length === 0) {\n              aggregation.avg = 0\n            } else {\n              aggregation.avg = sum / aggregation.value.length;\n            }\n          },\n          cellTemplate: '<div class=\"full-width text-right\" ng-if=\"!row.groupHeader\">{{  grid.appScope.vm.getCoverage(row.entity.stock_available_store, row.entity.avg_daily_total_units_sold) / 7 | number: 0 }}</div>' +\n            '<div flex layout=\"column\">' +\n            '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'coverage_weeks\\', \\'avg\\') | number:0 }}</span>' +\n            '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'coverage_weeks\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'coverage_weeks\\', \\'max\\') | number:0 }}' +\n            '</small>' +\n            '</div>'\n        },\n        total_units_sold: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n          field: 'total_units_sold',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('total_units_sold', true, avoidState),\n          cellFilter: 'number',\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right',\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'total_units_sold\\') }}</span>' +\n            '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.LAST_X_DAYS\\' | translate: {days: grid.appScope.vm.analysis_period_days} }}' +\n            '</small>' +\n            '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.total_units_sold }}</span>' +\n            '<small ng-if=\"!row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.LAST_X_DAYS\\' | translate: {days: grid.appScope.vm.analysis_period_days} }}' +\n            '</small>' +\n            '</div>'\n        },\n        avg_daily_total_units_sold: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n          field: 'avg_daily_total_units_sold',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('avg_daily_total_units_sold', true, avoidState),\n          cellClass: 'cell-right',\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') | number:2 }}</span>' +\n            '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') * 7 | number: 0 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.PER_WEEK\\' | translate}}' +\n            '</small>' +\n            '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.avg_daily_total_units_sold  | number:2 }}</span>' +\n            '<small ng-if=\"!row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{row.entity.avg_daily_total_units_sold  * 7 | number: 0 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.PER_WEEK\\' | translate}}' +\n            '</small>' +\n            '</div>'\n        },\n        avg_weekly_total_units_sold: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_WEEKLY_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_WEEKLY_SALES'),\n          field: 'avg_weekly_total_units_sold',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('avg_weekly_total_units_sold', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') * 7 | number: 0 }} </span>' +\n            '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') | number:2 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.PER_DAY\\' | translate}}' +\n            '</small>' +\n            '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.avg_daily_total_units_sold  * 7 | number: 0 }}</span>' +\n            '<small ng-if=\"!row.groupHeader\" class=\"text-right secondary-text\">' +\n            '{{ row.entity.avg_daily_total_units_sold  | number:2 }} ' +\n            '{{\\'INVENTORY_DASHBOARD.PER_DAY\\' | translate}}' +\n            '</small>' +\n            '</div>'\n        },\n        separator_5: {\n          displayName: '',\n          field: 'separator_5',\n          visible: true,\n          width: 5,\n          minWidth: 5,\n          permission: true,\n          enableHiding: false,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          enableFiltering: false,\n          enableColumnMenu: false,\n          enableColumnResizing: false,\n          cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n          headerCellClass: 'no-padding'\n        },\n        replenishment_lead_time: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_lead_time',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          enableSorting: false,\n          visible: getColumnVisibility('replenishment_lead_time', true, avoidState),\n          cellClass: 'cell-right',\n          cellTemplate: '<div class=\"cell-middle\" flex layout=\"column\">' +\n            '<span  ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.replenishment_lead_time | number: 0 }}</span>' +\n            '<small class=\"text-right secondary-text\"  ng-if=\"!row.groupHeader\">' +\n            '{{\\'INVENTORY_DASHBOARD.DELIVERY_ON\\' | translate}} ' +\n            '{{ row.entity.lead_time_date  | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        stock_available_on_lead_time: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_LEAD_TIME'),\n          field: 'stock_available_on_lead_time',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          enableSorting: false,\n          visible: getColumnVisibility('stock_available_on_lead_time', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<div class=\"cell-middle\" flex layout=\"column\">' +\n            '<span  ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.stock_available_on_lead_time | number: 0 }}</span>' +\n            '</div>'\n        },\n        expected_demand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n          field: 'expected_demand',\n          width: 120,\n          minWidth: 120,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('expected_demand', true, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellTemplate:\n            '<span flex  ng-if=\"row.groupHeader\" class=\"text-right pr-5\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'expected_demand\\') | number: 0 }} </span>' +\n            '<div ng-if=\"!row.groupHeader\" flex layout=\"row\" layout-align=\"end center\" class=\"cell-middle\">' +\n            '<div layout=\"column\" > {{ row.entity.expected_demand | number: 0 }} </div>' +\n            '<div layout=\"column\" class=\"pl-8\">' +\n            '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n            '</small>' +\n            '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(row.entity.order_frequency, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n            '</small>' +\n            '</div>' +\n            '</div>'\n        },\n        replenishment_rop: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n          field: 'replenishment_rop',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          enableSorting: false,\n          visible: getColumnVisibility('replenishment_rop', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span ng-if=\"!row.groupHeader\">{{ row.entity.replenishment_rop | number:  0 }}</span>'\n        },\n        all_locations_expected_demand: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ALL_LOCATIONS_EXPECTED_DEMAND'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ALL_LOCATIONS_EXPECTED_DEMAND'),\n          field: 'all_locations_expected_demand',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          enableSorting: false,\n          visible: getColumnVisibility('all_locations_expected_demand', true, avoidState),\n          cellClass: 'cell-right cell-padding'\n        },\n        replenishment_stockout_losses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          width: 150,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          enableSorting: false,\n          visible: getColumnVisibility('replenishment_stockout_losses', false, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellTemplate:\n            '<span flex ng-if=\"row.groupHeader\" class=\"text-right pr-5\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'replenishment_stockout_losses\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<div ng-if=\"!row.groupHeader\" flex layout=\"row\" layout-align=\"end center\" class=\"cell-middle\">' +\n            '<div layout=\"column\" > {{ row.entity.replenishment_stockout_losses | number: 2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</div>' +\n            '<div layout=\"column\" class=\"pl-8\">' +\n            '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n            '</small>' +\n            '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(row.entity.order_frequency, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n            '</small>' +\n            '</div>' +\n            '</div>'\n        },\n        expected_sales: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n          field: 'expected_sales',\n          width: 150,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnStatusVisibility('expected_sales', false, avoidState),\n          cellClass: 'cell-right cell-padding',\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellTemplate:\n            '<span flex  ng-if=\"row.groupHeader\" class=\"text-right pr-5\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'expected_sales\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}} </span>' +\n            '<div ng-if=\"!row.groupHeader\" flex layout=\"row\" layout-align=\"end center\" class=\"cell-middle\">' +\n            '<div layout=\"column\" > {{ row.entity.expected_sales | number: 2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</div>' +\n            '<div layout=\"column\" class=\"pl-8\">' +\n            '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n            '</small>' +\n            '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(row.entity.order_frequency, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n            '</small>' +\n            '</div>' +\n            '</div>'\n        },\n        replenishment_stock_to_order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          width: 100,\n          minWidth: 100,\n          enableSorting: true,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('replenishment_stock_to_order', true, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding',\n        },\n        replenishment_stock_to_order_with_shop_expansion: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_EXPANSION'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_EXPANSION'),\n          field: 'replenishment_stock_to_order_with_shop_expansion',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('replenishment_stock_to_order_with_shop_expansion', false, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding',\n        },\n        replenishment_stock_to_order_with_max_min: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_MAX_MIN'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_MAX_MIN'),\n          field: 'replenishment_stock_to_order_with_max_min',\n          width: 100,\n          minWidth: 100,\n          permission: true,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('replenishment_stock_to_order_with_max_min', false, avoidState),\n          treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n          customTreeAggregationFinalizerFn: function (aggregation) {\n            aggregation.rendered = aggregation.value;\n          },\n          cellClass: 'cell-right cell-padding',\n        },\n        total_draft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          width: 150,\n          minWidth: 100,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('total_draft', true, avoidState),\n          enableSorting: false,\n          pinnedRight: false,\n          enablePinning: false,\n          cellClass: 'cell-padding cell-padding',\n          customTreeAggregationFn: function (aggregation, fieldValue, numValue, row) {\n            if (typeof (aggregation.value) === 'undefined') {\n              aggregation.value = 0;\n            }\n            try {\n              aggregation.value += vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id].total;\n            } catch (e) {\n            }\n          },\n          cellTemplate:\n            '<div flex layout=\"column\" ng-if=\"row.groupHeader\">' +\n            '<span class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'total_draft\\')  }}</span>' +\n            '</div>' +\n            '<div flex layout=\"column\" ng-if=\"!row.groupHeader\">' +\n            '<div layout=\"row\" layout-align=\"end center\" flex>' +\n            '<span>{{ grid.appScope.vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id][\"total\"] }} </span>' +\n            '<span class=\"mh-5 secondary-text\" ng-if=\"grid.appScope.vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id][\\'transfer_order_autocode\\']\">|</span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id][\\'transfer_order_autocode\\']\" target=\"_blank\" ' +\n            'ng-href=\"/inventory/transfers/{{grid.appScope.vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id][\\'transfer_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id][\"transfer_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{ grid.appScope.vm.getCoverage(row.entity.stock_available_store + vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id], row.entity.avg_daily_total_units_sold) / 7 | number: 0 }}' +\n            ' {{\\'INVENTORY_DASHBOARD.WEEKS_COVERAGE\\' | translate}}' +\n            '</small>' +\n            '</div>'\n        },\n        order_by_coverage: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH_BY_COVERAGE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH_BY_COVERAGE'),\n          field: 'order_by_coverage',\n          width: 200,\n          minWidth: 200,\n          permission: true,\n          visible: getColumnStatusVisibility('order_by_coverage', false, avoidState),\n          cellTemplate: orderByCoverageCellHtml,\n          editableCellTemplate: orderByCoverageCellHtml,\n          enableSorting: false,\n          groupingShowAggregationMenu: false,\n          pinnedRight: false,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          cellClass: 'cell-padding'\n        },\n        order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n          field: 'order',\n          width: 200,\n          minWidth: 200,\n          permission: true,\n          groupingShowAggregationMenu: false,\n          visible: getColumnVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          customTreeAggregationFn: function (aggregation, fieldValue, numValue, row) {\n            if (typeof (aggregation.value) === 'undefined') {\n              aggregation.value = 0;\n            }\n            try {\n              aggregation.value += vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id];\n            } catch (e) {\n            }\n          },\n          enableSorting: false,\n          pinnedRight: false,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          cellClass: 'cell-centered cell-padding'\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      vm.gridOptionsByProduct.columnDefs = [];\n      for (var key in vm.columnsByProduct) {\n        if (vm.columnsByProduct[key].permission) {\n          vm.gridOptionsByProduct.columnDefs.push(vm.columnsByProduct[key]);\n        }\n      }\n    }\n\n    function setGridColumnsByWarehouse(avoidState) {\n      var orderCellHtml =\n        '<button ng-disabled=\"grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\\'transfer_order_status\\']===0\" ' +\n        'class=\"custom-button\" ng-click=\"grid.appScope.vm.createReplenishmentDraft($event, row.entity.location_external_id)\" ' +\n        '<div layout=\"row\" layout-align=\"center center\">' +\n        '<md-icon ng-if=\"grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\\'transfer_order_status\\']!==0\" md-font-icon=\"icon-package-add-icon\" class=\"mr-5 custom-button\" md-svg-src=\"assets/images/custom-material-design-icons/package-add.0bc557a5.svg\"></md-icon>' +\n        '<md-progress-circular ng-if=\"grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\\'transfer_order_status\\']===0\" class=\"custom-progress mr-5\" md-diameter=\"16\" md-mode=\"indeterminate\"></md-progress-circular>' +\n        '<span translate=\"INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT\"></span>' +\n        '</button>';\n\n      window.angular.extend(vm.columnsByWarehouse, {\n        location_name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          field: 'location_name',\n          minWidth: 200,\n          width: 200,\n          permission: true,\n          visible: getColumnVisibility('location_name', true, avoidState),\n          cellClass: 'cell-padding',\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false\n        },\n        replenishment_lead_time: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_lead_time',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('leadTime', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_lead_time | number: 0 }}</span>'\n        },\n        rotation: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          field: 'rotation',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('rotation', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.rotation | number: 0 }}</span>'\n        },\n        discontinued_stock_value_percentage: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.DISCONTINUED_STOCK_VALUE_PERCENTAGE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.DISCONTINUED_STOCK_VALUE_PERCENTAGE'),\n          field: 'discontinued_stock_value_percentage',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('discontinued_stock_value_percentage', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.discontinued_stock_value_percentage | number: 2 }}%</span>',\n          enableSorting: false\n        },\n        replenishment_stockout_losses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('replenishment_stockout_losses', true, avoidState),\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.replenishment_stockout_losses_date | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        stock: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          field: 'stock',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('stock', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock | number: 0}}</span>'\n        },\n        stock_value: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          field: 'stock_value',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('stock_value', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock_value | price}} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        replenishment_stock_to_order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('replenishment_stock_to_order', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n        },\n        replenishment_stock_to_order_value: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_VALUE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_VALUE'),\n          field: 'replenishment_stock_to_order_value',\n          minWidth: 100,\n          width: 100,\n          permission: true,\n          visible: getColumnVisibility('replenishment_stock_to_order_value', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order_value | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        total_draft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          minWidth: 100,\n          width: 200,\n          permission: true,\n          visible: getColumnVisibility('total_draft', true, avoidState),\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\"total\"]  }}</span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\\'transfer_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/transfers/{{grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\\'transfer_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraftByWarehouse[row.entity.location_external_id][\"transfer_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>'\n        },\n        order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT'),\n          field: 'order',\n          minWidth: 200,\n          width: 200,\n          permission: true,\n          visible: getColumnVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          enableColumnMenu: false\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      vm.gridOptionsByWarehouse.columnDefs = [];\n      for (var key in vm.columnsByWarehouse) {\n        if (vm.columnsByWarehouse[key].permission) {\n          vm.gridOptionsByWarehouse.columnDefs.push(vm.columnsByWarehouse[key]);\n        }\n      }\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.statusByProduct.state.columns) {\n        var column = vm.statusByProduct.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function getGridPostBodyByProduct() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.statusByProduct.page;\n      d.page_size = vm.statusByProduct.pageSize;\n\n      // Ordering\n      d.order_by = vm.statusByProduct.ordering;\n\n      // Search\n      d.search = vm.statusByProduct.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columnsByProduct).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columnsByProduct).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      //Filters\n      vm.statusByProduct.filters.warehouses && vm.statusByProduct.filters.warehouses.length ? d.warehouses = vm.statusByProduct.filters.warehouses : null;\n      vm.statusByProduct.filters.seasons && vm.statusByProduct.filters.seasons.length ? d.seasons = vm.statusByProduct.filters.seasons : null;\n      vm.statusByProduct.filters.collections && vm.statusByProduct.filters.collections.length ? d.collections = vm.statusByProduct.filters.collections : null;\n      vm.statusByProduct.filters.brands && vm.statusByProduct.filters.brands.length ? d.brands = vm.statusByProduct.filters.brands : null;\n      vm.statusByProduct.filters.categories && vm.statusByProduct.filters.categories.length ? d.categories = vm.statusByProduct.filters.categories : null;\n      vm.statusByProduct.filters.subcategories && vm.statusByProduct.filters.subcategories.length ? d.subcategories = vm.statusByProduct.filters.subcategories : null;\n      vm.statusByProduct.filters.abcCategories && vm.statusByProduct.filters.abcCategories.length ? d.abc_categories = vm.statusByProduct.filters.abcCategories : null;\n      vm.statusByProduct.filters.availabilityStatuses && vm.statusByProduct.filters.availabilityStatuses.length ? d.availability_statuses = vm.statusByProduct.filters.availabilityStatuses : null;\n      vm.statusByProduct.filters.warehouseStock ? d.warehouse_stock = vm.statusByProduct.filters.warehouseStock : null;\n      vm.statusByProduct.filters.stockToOrder ? d.stock_to_order = vm.statusByProduct.filters.stockToOrder : null;\n\n      return d;\n    }\n\n    function getGridPostBodyByWarehouse() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.statusByWarehouse.page;\n      d.pageSize = vm.statusByWarehouse.pageSize;\n\n      // Ordering\n      d.orderBy = vm.statusByWarehouse.ordering;\n\n      // Search\n      d.search = vm.statusByWarehouse.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columnsByWarehouse).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columnsByWarehouse).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      return d;\n    }\n\n    function getGridPage() {\n      if (isProductView()) {\n        getGridPageByProduct();\n      } else if (isWarehouseView()) {\n        getGridPageByWarehouse();\n      }\n    }\n\n    function getGridPageByProduct(pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new window.AbortController();\n      }\n\n      vm.loading = true;\n      $scope.prices = {};\n\n      var url = api.urls.inventories.productVariants.replace(':id/', '').replace(':option', 'replenishment_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBodyByProduct()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridByProductInitialized = true;\n          vm.gridOptionsByProduct.data = data.data;\n          vm.gridOptionsByProduct.totalItems = data.recordsTotal;\n          vm.countByAvailabilityStatusDict = data.count_by_availability_status;\n          vm.analysis_period_days = data.analysis_period_days;\n          if (data.data.length) {\n            vm.orderQuantities = {};\n            vm.orderQuantitiesByWeeklyCoverage = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n                vm.orderQuantitiesByWeeklyCoverage[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order_with_max_min <= item.replenishment_stock_total ? item.replenishment_stock_to_order_with_max_min : 0;\n              vm.orderQuantitiesByWeeklyCoverage[item.item_external_id][item.location_external_id] = item.avg_daily_total_units_sold === 0 ? 0 : Math.round((item.replenishment_stock_to_order_with_max_min + item.stock_total_store) / (item.avg_daily_total_units_sold * 7));\n            });\n            updateTotalOnOrderByProduct();\n            vm.gridApiByProduct.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getGridPageByProduct(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          throw error;\n        });\n    }\n\n    function getGridPageByWarehouse(pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.warehouses.replace(':id/', '').replace(':option', 'replenishment_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBodyByWarehouse()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridByWarehouseInitialized = true;\n          vm.gridOptionsByWarehouse.data = data.data;\n          vm.gridOptionsByWarehouse.totalItems = data.recordsTotal;\n          if (data.data.length) {\n            vm.orderQuantities = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order_with_max_min;\n            });\n            updateTotalDraftByWarehouse();\n            vm.gridApiByWarehouse.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getGridPageByWarehouse(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          throw error;\n        });\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function filterChanged() {\n      resetPagination();\n      saveStatus();\n      getGridPage();\n    }\n\n    function searchInputChanged() {\n      if (isProductView()) {\n        getGridProductsVariantsReplenishmentsPage();\n      } else if (isWarehouseView()) {\n        getGridPageByWarehouse(false);\n      }\n    }\n\n    function getGridProductsVariantsReplenishmentsPage() {\n      resetPagination();\n      getGridPageByProduct();\n    }\n\n    function resetPagination() {\n      if (isProductView()) {\n        vm.gridApiByProduct.grid.options.paginationCurrentPage = 1;\n      } else if (isWarehouseView()) {\n        vm.gridApiByWarehouse.grid.options.paginationCurrentPage = 1;\n      }\n    }\n\n    function replenishProductVariant(productVariant, targetWarehouseId) {\n      var productVariantId = productVariant.item_external_id;\n      var quantity = vm.orderQuantities[productVariant.item_external_id][productVariant.location_external_id]\n      if (typeof quantity !== 'undefined') {\n        api.inventories.productVariants.save({\n          id: productVariantId,\n          option: 'replenish',\n          target_warehouse_id: targetWarehouseId,\n          quantity: quantity,\n          configuration_data: vm.configurationData,\n          original_quantity: productVariant.replenishment_stock_to_order_with_max_min\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            updateTotalOnOrderByProduct();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('INVENTORY_DASHBOARD.REPLENISHMENT_CREATED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT &&\n            response.error === ERROR_CODES.ERROR_11001_PLANNING_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11002_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_PERCENTAGE ||\n            response.error === ERROR_CODES.ERROR_11003_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_FIXED_AMOUNT ||\n            response.error === ERROR_CODES.ERROR_11004_PLANNING_CONFIGURATION_MINIMUM_STOCK_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11005_PLANNING_CONFIGURATION_MIN_QTY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11006_PLANNING_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY ||\n            response.error === ERROR_CODES.ERROR_11007_PLANNING_CONFIGURATION_MAX_PRICE_EXCEEDED) {\n            var productPlanningConfiguration = productVariant.replenishment_planning_configuration;\n            $mdDialog.show({\n              controller: 'PlanningValidationErrorsDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/planning/views/dialogs/planning-validation-errors-dialog/planning-validation-errors-dialog.html',\n              parent: window.angular.element($document.find('body')),\n              clickOutsideToClose: true,\n              focusOnOpen: false,\n              locals: {\n                params: {\n                  textTitle: 'REPLENISHMENT.RESTOCK_ERROR_DIALOG_TITLE',\n                  textWarning: 'REPLENISHMENT.RESTOCK_WARNING_MESSAGE',\n                  textFooter: 'REPLENISHMENT.RESTOCK_ERROR_DIALOG_FOOTER',\n                  productPlanningConfiguration: productPlanningConfiguration,\n                  proposedStock: productVariant.replenishment_stock_to_order_with_max_min,\n                  error: response.error,\n                  type: 'REPLENISHMENT',\n                  orderedStock: response.quantity,\n                  productId: response.product_id,\n                  limitMinQty: response.limit_min_qty,\n                  percentage: response.percentage,\n                  amount: response.fixed_amount,\n                  minStock: response.minimum_stock,\n                  newValue: response.new_value,\n                  originalValue: response.original_value\n                }\n              }\n            });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n    }\n\n    function updateTotalOnOrderByProduct() {\n      var located_product_variants = [];\n      vm.gridOptionsByProduct.data.forEach(function (item) {\n        located_product_variants.push({\n          product_variant_id: item.item_external_id,\n          warehouse_id: item.location_external_id\n        });\n      });\n      api.inventories.productVariants.save(\n        {\n          option: 'total-draft-on-ai-replenishment-orders',\n          located_product_variants: located_product_variants\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraftByProduct = response.data;\n            expandAll();\n          }\n        }\n      );\n    }\n\n    function toggleFilterVisibility(property, filter) {\n      filter.visible = !filter.visible;\n      if (!filter.visible && isProductView() && vm.statusByProduct.filters[property].length) {\n        vm.statusByProduct.filters[property] = [];\n        vm.filterChanged();\n      } else if (!filter.visible && isWarehouseView() && vm.statusByWarehouse.filters[property].length) {\n        vm.statusByWarehouse.filters[property] = [];\n        vm.filterChanged();\n      }\n      saveStatus();\n    }\n\n    function downloadCSV() {\n      if (isProductView()) {\n        downloadCSVByProduct();\n      } else if (isWarehouseView()) {\n        downloadCSVByWarehouse();\n      }\n    }\n\n    function downloadCSVByProduct() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.productVariants.replace('/:id', '').replace(':option', 'store-replenishments-by-product-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBodyByProduct()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(window.angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n\n    function downloadCSVByWarehouse() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.warehouses.replace('/:id', '').replace(':option', 'store-replenishments-by-warehouse-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBodyByWarehouse()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(window.angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n\n    function openAnalysisInformationDialog() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('LOW_STOCK.ANALYSIS_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('LOW_STOCK.ANALYSIS_DIALOG_BODY', {\n          analysisPeriodDays: vm.configurationData.analysis_period_days,\n          orderFrequency: vm.configurationData.order_frequency_days,\n          replenishmentWarehouse: vm.configurationData.replenishment_warehouse_name\n        }))\n        .clickOutsideToClose(true)\n        .parent(window.angular.element(document.body))\n        .ok($filter('translate')('LOW_STOCK.GO_TO_CONFIGURATION'))\n        .cancel($filter('translate')('GENERAL.CLOSE'));\n\n      $mdDialog.show(confirm).then(function () {\n          $state.go('app.inventory.configuration.stocks_optimization');\n        }, function () {\n          // Cancel\n        }\n      );\n    }\n\n    function isProductView() {\n      return vm.view === vm.VIEW_BY_PRODUCT;\n    }\n\n    function isWarehouseView() {\n      return vm.view === vm.VIEW_BY_WAREHOUSE;\n    }\n\n    function updateTotalDraftByWarehouse() {\n      var warehouses = [];\n      vm.gridOptionsByWarehouse.data.forEach(function (item) {\n        warehouses.push(item.location_external_id);\n      });\n      api.inventories.warehouses.save(\n        {\n          option: 'ai_replenishment_draft_orders_totals',\n          warehouse_ids: warehouses\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraftByWarehouse = response.data;\n            for (var key in vm.totalDraftByWarehouse) {\n              if (vm.totalDraftByWarehouse[key].transfer_order_status != null && Number(vm.totalDraftByWarehouse[key].transfer_order_status) === Number(TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_CREATING_DRAFT)) {\n                startPullingDrafts(key);\n              }\n            }\n          }\n        }\n      );\n    }\n\n    function startPullingDrafts(warehouseId) {\n      // Cancel any existing pulling for this warehouse\n      if (vm.pullingTimeouts[warehouseId]) {\n        $timeout.cancel(vm.pullingTimeouts[warehouseId]);\n        delete vm.pullingTimeouts[warehouseId];\n      }\n\n      var pullDrafts = function () {\n        api.inventories.warehouses.get({\n          id: warehouseId,\n          option: 'get-replenishment-status'\n        }, function (response, fn, status) {\n          if (Number(response.status) === Number(TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT)){\n            updateTotalDraftByWarehouse();\n            // Clear the timeout reference since pulling is complete\n            delete vm.pullingTimeouts[warehouseId];\n          } else {\n            // Store the timeout reference so it can be cancelled later\n            vm.pullingTimeouts[warehouseId] = $timeout(pullDrafts, PULLING_DELAY_MS);\n          }\n        });\n      };\n      // Store the initial timeout reference\n      vm.pullingTimeouts[warehouseId] = $timeout(pullDrafts, PULLING_DELAY_MS);\n    }\n\n    function stopPullingDrafts(warehouseId) {\n      if (warehouseId && vm.pullingTimeouts[warehouseId]) {\n        // Stop pulling for a specific warehouse\n        $timeout.cancel(vm.pullingTimeouts[warehouseId]);\n        delete vm.pullingTimeouts[warehouseId];\n      } else if (!warehouseId) {\n        // Stop pulling for all warehouses\n        Object.keys(vm.pullingTimeouts).forEach(function(id) {\n          $timeout.cancel(vm.pullingTimeouts[id]);\n        });\n        vm.pullingTimeouts = {};\n      }\n    }\n\n    function applyAvailabilityStatusFilter(availabilityStatus) {\n      vm.activePresetFilter = availabilityStatus;\n      vm.statusByProduct.filters.availabilityStatuses = availabilityStatus ? [availabilityStatus] : [];\n      filterChanged();\n    }\n\n    function getAggregatedByStatusFilter(availabilityStatus) {\n      if (!availabilityStatus) {\n        return;\n      }\n      if (vm.countByAvailabilityStatusDict && vm.countByAvailabilityStatusDict[availabilityStatus]) {\n        return vm.countByAvailabilityStatusDict[availabilityStatus];\n      }\n      return 0;\n    }\n\n    function createReplenishmentDraft($event, warehouseId) {\n      api.inventories.warehouses.save({\n        id: warehouseId,\n        option: 'create_replenishment_draft'\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.totalDraftByWarehouse[warehouseId].transfer_order_status = Number(TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_CREATING_DRAFT);\n          startPullingDrafts(warehouseId);\n          $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('INVENTORY_DASHBOARD.REPLENISHMENT_BY_WAREHOUSE_CREATED'))\n              .action($filter('translate')('GENERAL.GO'))\n              .hideDelay(10000)\n              .highlightAction(true)\n              .position('top right')).then(function(toast_response) {\n              if (toast_response === 'ok') {\n                $state.go('app.inventory.transfers');\n              }\n            });\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function updateTotalDraft() {\n      var warehouses = [];\n      vm.gridOptionsByWarehouse.data.forEach(function (item) {\n        warehouses.push(item.location_external_id);\n      });\n      api.inventories.warehouses.save(\n        {\n          option: 'ai_replenishment_draft_orders_totals',\n          warehouse_ids: warehouses\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraftByProduct = response.data;\n          }\n        }\n      );\n    }\n\n  }\n})();\n\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.inventory')\n      .controller('ReorderController', ReorderController);\n\n    /** @ngInject */\n    function ReorderController(\n      $scope,\n      Session,\n      $timeout,\n      $filter,\n      UiGridService,\n      BrandsData,\n      SeasonsData,\n      CollectionsData,\n      CategoriesData,\n      SubcategoriesData,\n      ProvidersData,\n      api,\n      $mdToast,\n      HTTP_STATUS,\n      $state,\n      InventoryConfiguration,\n      $mdDialog,\n      $document,\n      ERROR_CODES,\n      PLANNING_AVAILABILITY_STATUS,\n      PURCHASE_ORDER_STATUSES_REVERSE,\n      uiGridGroupingConstants,\n      Utils\n    ) {\n      // Data\n      var PULLING_DELAY_MS = 5000;\n      var vm = this;\n      vm.VIEW_BY_PRODUCT = 1;\n      vm.VIEW_BY_PROVIDER = 2;\n      vm.PLANNING_AVAILABILITY_STATUS = PLANNING_AVAILABILITY_STATUS;\n\n      // Data\n      vm.abortController = new window.AbortController();\n      vm.columnsByProduct = {};\n      vm.columnsByProvider = {};\n      vm.gridApiByProduct = null;\n      vm.gridApiByProvider = null;\n      vm.uiGridByProductInitialize = false;\n      vm.uiGridByProviderInitialize = false;\n      vm.statusByProduct = {\n        state: {},\n        ordering: '',\n        search: '',\n        filters: {\n          providers: [],\n          warehouses: [],\n          seasons: [],\n          collections: [],\n          brands: [],\n          categories: [],\n          subcategories: []\n        },\n        dynamicFilters: {\n          providers: {\n            icon: 'icon-store',\n            title: 'LOW_STOCK.PROVIDER',\n            visible: false\n          },\n          availabilityStatuses: {\n            svgIcon: 'assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg',\n            title: 'INVENTORY_DASHBOARD.AVAILABILITY_STATUS',\n            visible: false\n          },\n          abcCategetAggregories: {\n            svgIcon: 'assets/images/custom-material-design-icons/abc.3172f407.svg',\n            title: 'INVENTORY_DASHBOARD.ABC_CATEGORY',\n            visible: false\n          },\n          brands: {\n            icon: 'icon-tag-outline',\n            title: 'INVENTORY_DASHBOARD.BRAND',\n            visible: false\n          },\n          categories: {\n            icon: 'icon-folder-multiple-outline',\n            title: 'INVENTORY_DASHBOARD.CATEGORY',\n            visible: false\n          },\n          subcategories: {\n            icon: 'icon-folder-outline',\n            title: 'INVENTORY_DASHBOARD.SUBCATEGORY',\n            visible: false\n          },\n          seasons: {\n            icon: 'icon-weather-sunny',\n            title: 'INVENTORY_DASHBOARD.SEASON',\n            visible: false\n          },\n          collections: {\n            icon: 'icon-tag-outline',\n            title: 'SALE.COLLECTION',\n            visible: false\n          }\n        },\n        page: 1,\n        pageSize: 5\n      };\n      vm.statusByProvider = {\n        state: {},\n        ordering: '',\n        search: '',\n        filters: { // TODO use dynamicFilters\n          warehouses: [],\n          providers: [],\n          seasons: [],\n          brands: [],\n          categories: [],\n          subcategories: []\n        },\n        page: 1,\n        pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n      vm.seasons = SeasonsData.results;\n      vm.collections = CollectionsData.results;\n      vm.brands = BrandsData.results;\n      vm.categories = CategoriesData.results;\n      vm.subcategories = SubcategoriesData.results;\n      vm.providers = ProvidersData.results;\n      vm.orderQuantities = {};\n      vm.orderQuantitiesByWeeklyCoverage = {};\n      vm.totalDraft = {};\n      vm.totalDraftByProvider = {};\n      vm.pullingTimeouts = {}; // Track pulling timeouts by warehouse/provider ID\n      vm.company = Session.company;\n      vm.abcCategories = ['A', 'B', 'C'];\n      vm.availabilityStatuses = [\n        'OUT_OF_STOCK',\n        'URGENT_ORDER',\n        'NON_URGENT_ORDER',\n        'IN_STOCK'\n      ];\n      vm.exporting = false;\n      vm.gridOptionsByProduct = UiGridService.getGridOptions({\n        rowHeight: 40,\n        onRegisterApi: initializeGridByProduct,\n        enableRowHeaderSelection: false,\n        headerRowHeight: 40,\n        gridMenuCustomItems: [\n          {\n            title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n            action: function($event) {\n              restoreGridColumns();\n            },\n            order: 2\n          }\n        ],\n        minimumColumnSize: 170\n      });\n      vm.gridOptionsByProvider = UiGridService.getGridOptions({\n        onRegisterApi: initializeGridByProvider,\n        gridMenuCustomItems: [\n          {\n            title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n            action: function($event) {\n              restoreGridColumns();\n            },\n            order: 2\n          }\n        ],\n        useExternalPagination: true\n      });\n      vm.view = vm.VIEW_BY_PRODUCT; // TODO init by local storage\n      vm.selectedStatus = vm.statusByProduct; // TODO init by local storage\n      vm.activePresetFilter = null; // TODO init by local storage\n      vm.countByAvailabilityStatusDict = {};\n      vm.analysis_period_days = null;\n\n      // Methods\n      vm.purchaseProductVariant = purchaseProductVariant;\n      vm.toggleFilterVisibility = toggleFilterVisibility;\n      vm.filterChanged = filterChanged;\n      vm.getCoverage = getCoverage;\n      vm.orderQuantityByWeeklyCoverageChanged = orderQuantityByWeeklyCoverageChanged;\n      vm.orderQuantityByUnitsChanged = orderQuantityByUnitsChanged;\n      vm.getSaleOrderValue = getSaleOrderValue;\n      vm.downloadCSV = downloadCSV;\n      vm.isProductView = isProductView;\n      vm.isProviderView = isProviderView;\n      vm.toggleView = toggleView;\n      vm.applyAvailabilityStatusFilter = applyAvailabilityStatusFilter;\n      vm.getAggregatedByStatusFilter = getAggregatedByStatusFilter;\n      vm.expandAll = expandAll;\n      vm.collapseAll = collapseAll;\n      vm.calculateDate = Utils.calculateDateByNumberDays;\n      vm.showSalesAnalysisPopup = showSalesAnalysisPopup;\n      vm.onClickInput = onClickInput;\n      vm.createPurchaseDraft = createPurchaseDraft;\n\n      initialize();\n\n      function initialize() {\n        $scope.$on('$destroy', function() {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          // Also stop all pulling drafts when destroying the controller\n          stopPullingDrafts();\n        });\n\n        $scope.$watch(function() {\n          return vm.view;\n        }, function(newValue, oldValue) {\n          if (newValue !== oldValue) {\n            vm.view = parseInt(newValue);\n            saveView();\n            if (newValue === vm.VIEW_BY_PRODUCT) {\n              vm.selectedStatus = vm.statusByProduct;\n              // Stop all pulling drafts when switching to product view\n              stopPullingDrafts();\n            } else if (newValue === vm.VIEW_BY_PROVIDER) {\n              vm.selectedStatus = vm.statusByProvider;\n            }\n          }\n        });\n\n        loadView();\n      }\n\n      function saveView() {\n        localStorage.setItem(Session.company.id + '::UIGridReorderControllerV7::view', vm.view);\n      }\n\n      function loadView() {\n        var view = localStorage.getItem(Session.company.id + '::UIGridReorderControllerV7::view');\n        if (view) {\n          vm.view = parseInt(view);\n        }\n      }\n\n      function createPurchaseDraft(providerId, replenishmentWarehouseId) {\n        api.inventories.warehouses.save({\n          id: replenishmentWarehouseId,\n          provider_id: providerId,\n          option: 'create_purchase_draft'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraftByProvider[providerId][replenishmentWarehouseId].purchase_order_status = Number(PURCHASE_ORDER_STATUSES_REVERSE.PURCHASE_ORDER_STATUS_CREATING_DRAFT);\n            startPullingDrafts(replenishmentWarehouseId, providerId);\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('INVENTORY_DASHBOARD.REORDER_BY_PROVIDER_CREATED'))\n              .action($filter('translate')('GENERAL.GO'))\n              .hideDelay(10000)\n              .highlightAction(true)\n              .position('top right')).then(function(toast_response) {\n              if (toast_response === 'ok') {\n                $state.go('app.inventory.purchases');\n              }\n            });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n\n      function startPullingDrafts(warehouseId, providerId) {\n        // Create a unique key for this warehouse/provider combination\n        var key = warehouseId + '_' + providerId;\n\n        // Cancel any existing pulling for this warehouse/provider combination\n        if (vm.pullingTimeouts[key]) {\n          $timeout.cancel(vm.pullingTimeouts[key]);\n          delete vm.pullingTimeouts[key];\n        }\n\n        var pullDrafts = function() {\n          api.inventories.warehouses.get({\n            id: warehouseId,\n            provider_id: providerId,\n            option: 'get-purchase-status'\n          }, function(response, fn, status) {\n            if (Number(response.status) === Number(PURCHASE_ORDER_STATUSES_REVERSE.PURCHASE_ORDER_STATUS_DRAFT)) {\n              updateTotalDraftByProvider();\n              // Clear the timeout reference since pulling is complete\n              delete vm.pullingTimeouts[key];\n            } else {\n              // Store the timeout reference so it can be cancelled later\n              vm.pullingTimeouts[key] = $timeout(pullDrafts, PULLING_DELAY_MS);\n            }\n          });\n        };\n        vm.pullingTimeouts[key] = $timeout(pullDrafts, PULLING_DELAY_MS);\n      }\n\n      function stopPullingDrafts(key) {\n        if (key && vm.pullingTimeouts[key]) {\n          $timeout.cancel(vm.pullingTimeouts[key]);\n          delete vm.pullingTimeouts[key];\n        } else if (!key) {\n          Object.keys(vm.pullingTimeouts).forEach(function(id) {\n            $timeout.cancel(vm.pullingTimeouts[id]);\n          });\n          vm.pullingTimeouts = {};\n        }\n      }\n\n      function getAvailabilityStatusValue(availabilityStatus) {\n        switch (availabilityStatus) {\n          case 'OUT_OF_STOCK':\n            return 3;\n          case 'URGENT_ORDER':\n            return 2;\n          case 'NON_URGENT_ORDER':\n            return 1;\n          default:\n            return 0;\n        }\n      }\n\n      function getABCValue(abcCategory) {\n        switch (abcCategory) {\n          case 'A':\n            return 1.5;\n          case 'B':\n            return 1;\n          case 'C':\n            return 0.5;\n          default:\n            return 0;\n        }\n      }\n\n      function orderQuantityByWeeklyCoverageChanged(entity) {\n        var weeks = vm.orderQuantitiesByWeeklyCoverage[entity.item_external_id][entity.location_external_id];\n        var newOrderQuantity = Math.ceil(weeks * 7 * entity.avg_daily_total_units_sold);\n        newOrderQuantity -= entity.stock_available_on_lead_time;\n        vm.orderQuantities[entity.item_external_id][entity.location_external_id] = newOrderQuantity;\n        vm.gridApiByProduct.core.refresh();\n      }\n\n      function orderQuantityByUnitsChanged(entity) {\n        var newOrderQuantity = vm.orderQuantities[entity.item_external_id][entity.location_external_id];\n        var weeks = (newOrderQuantity + entity.stock_available_on_lead_time) / (7 * entity.avg_daily_total_units_sold);\n        vm.orderQuantitiesByWeeklyCoverage[entity.item_external_id][entity.location_external_id] = Math.ceil(weeks);\n        vm.gridApiByProduct.core.refresh();\n      }\n\n      function expandAll() {\n        vm.gridApiByProduct.treeBase.expandAllRows();\n      }\n\n      function collapseAll() {\n        vm.gridApiByProduct.treeBase.collapseAllRows();\n      }\n\n      function initializeGridByProduct(gridApi) {\n        vm.gridApiByProduct = gridApi;\n\n\n        vm.gridApiByProduct.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n\n          if (vm.columnsByProduct[changedColumn.colDef.field]) {\n            vm.columnsByProduct[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n          }\n\n          if (changedColumn.colDef.visible) {\n            if (vm.timeout) {\n              $timeout.cancel(vm.timeout);\n              vm.timeout = null;\n            }\n          }\n          if (vm.uiGridByProductInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProduct.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n          if (vm.uiGridByProductInitialize) {\n            vm.statusByProduct.page = newPage;\n            vm.statusByProduct.pageSize = pageSize;\n            saveStatus();\n            getGridPageByProduct();\n          }\n        });\n\n        vm.gridApiByProduct.core.on.sortChanged($scope, function(grid, sortColumns) {\n          if (vm.uiGridByProductInitialize) {\n            resetPagination();\n            vm.statusByProduct.ordering = UiGridService.getSortString(grid, sortColumns);\n            saveStatus();\n            getGridPageByProduct();\n          }\n        });\n\n        vm.gridApiByProduct.pinning.on.columnPinned($scope, function(colDef) {\n          if (vm.uiGridByProductInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProduct.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n          if (vm.uiGridByProductInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProduct.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n          if (vm.uiGridByProductInitialize) {\n            saveStatus();\n          }\n        });\n\n\n        if (!vm.uiGridByProductInitialize) {\n          setGridColumnsByProduct();\n        }\n\n        $timeout(function() {\n          loadStatus();\n          getGridPageByProduct();\n        }, 200);\n\n\n      }\n\n      function initializeGridByProvider(gridApi) {\n        vm.gridApiByProvider = gridApi;\n\n        vm.gridApiByProvider.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n          vm.columnsByProvider[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n          if (changedColumn.colDef.visible) {\n            if (vm.timeout) {\n              $timeout.cancel(vm.timeout);\n              vm.timeout = null;\n            }\n          }\n          if (vm.uiGridByProviderInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProvider.pinning.on.columnPinned($scope, function(colDef) {\n          if (vm.uiGridByProviderInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProvider.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n          if (vm.uiGridByProviderInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProvider.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n          if (vm.uiGridByProviderInitialize) {\n            saveStatus();\n          }\n        });\n\n        vm.gridApiByProvider.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n          if (vm.uiGridByProviderInitialize) {\n            vm.statusByProvider.page = newPage;\n            vm.statusByProvider.pageSize = pageSize;\n            saveStatus();\n            getGridPageByProvider();\n          }\n        });\n\n        vm.gridApiByProvider.core.on.sortChanged($scope, function(grid, sortColumns) {\n          if (vm.uiGridByProviderInitialize) {\n            vm.statusByProvider.ordering = UiGridService.getSortString(grid, sortColumns);\n            saveStatus();\n            getGridPageByProvider();\n          }\n        });\n\n        vm.gridApiByProvider.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n          if (vm.uiGridByProviderInitialize) {\n            saveStatus();\n          }\n        });\n\n\n        if (!vm.uiGridByProviderInitialize) {\n          setGridColumnsByProvider();\n        }\n\n        $timeout(function() {\n          loadStatus();\n          getGridPageByProvider();\n        }, 200);\n\n      }\n\n      function restoreGridColumns() {\n        cleanColumns();\n        setGridColumns(true);\n        $timeout(function() {\n          saveStatus();\n          getGridPage(false);\n        });\n      }\n\n      function cleanColumns() {\n        if (isProductView()) {\n          vm.columnsByProduct = {};\n          vm.gridOptionsByProduct.columnDefs = [];\n        } else if (isProviderView()) {\n          vm.columnsByProvider = {};\n          vm.gridOptionsByProvider.columnDefs = [];\n        }\n      }\n\n      function saveStatus() {\n        if (isProductView()) {\n          vm.statusByProduct.state = vm.gridApiByProduct.saveState.save();\n          localStorage.setItem(Session.company.id + '::UIGridPurchaseByProductControllerV6', JSON.stringify(vm.statusByProduct));\n        } else if (isProviderView()) {\n          vm.statusByProvider.state = vm.gridApiByProvider.saveState.save();\n          localStorage.setItem(Session.company.id + '::UIGridPurchaseByProviderControllerV6', JSON.stringify(vm.statusByProvider));\n        }\n      }\n\n      function loadStatus() {\n        if (isProductView()) {\n          loadStatusByProduct();\n        } else if (isProviderView()) {\n          loadStatusByProvider();\n        }\n      }\n\n      function loadStatusByProvider() {\n        var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridPurchaseByProviderControllerV6'));\n        if (loadedStatus) {\n          window.angular.merge(vm.statusByProvider, loadedStatus);\n          if (vm.gridApiByProvider) {\n            vm.gridApiByProvider.saveState.restore($scope, vm.statusByProvider.state);\n          }\n        }\n      }\n\n      function loadStatusByProduct() {\n        var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridPurchaseByProductControllerV6'));\n        if (loadedStatus) {\n          window.angular.merge(vm.statusByProduct, loadedStatus);\n          if (vm.gridApiByProduct) {\n\n            if (\n              vm.statusByProduct.state &&\n              vm.statusByProduct.state['grouping'] &&\n              vm.statusByProduct.state['grouping']['rowExpandedStates']\n            ) {\n              // This is to avoid what I think is a bug from the UI-GRID library trying to merge two jsons with\n              // different name (groupHeaderCache vs groupingHeaderCache) in ui-grid.js line 18525\n              // at the code: if ( config.rowExpandedStates ) { service.applyRowExpandedStates( grid.grouping.groupingHeaderCache, config.rowExpandedStates );\n              // that's why I remove it, losing the expand status which is not really important\n              delete vm.statusByProduct.state['grouping']['rowExpandedStates'];\n            }\n            vm.gridApiByProduct.saveState.restore($scope, vm.statusByProduct.state);\n          }\n        }\n      }\n\n      function setGridColumns(avoidState) {\n        if (isProductView()) {\n          setGridColumnsByProduct(avoidState);\n        } else if (isProviderView()) {\n          setGridColumnsByProvider(avoidState);\n        }\n      }\n\n      vm.getAggregationValue = function(aggregations, field, rendered) {\n        var aggregation = aggregations.find(function(agg) {\n          return agg.col.field === field;\n        });\n        if (!rendered) {\n          return aggregation ? aggregation.rendered : null;\n        }\n        return aggregation ? aggregation[rendered] : null;\n      };\n\n      // Used to avoid problems when editing the input after render the table during scroll\n      function onClickInput($event) {\n        $event.stopPropagation();\n        $timeout(function() {\n          $event.target.focus();\n        }, 0);\n      };\n\n      function setGridColumnsByProduct(avoidState) {\n        var orderCellHtml =\n          '<div ng-if=\"row.groupHeader\" layout=\"row\" layout-align=\"end center\" flex ng-if=\"row.groupHeader\">' +\n          '<span>{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'order\\') }} </span>' +\n          '<md-button class=\"md-icon-button no-margin\"' +\n          'ng-click=\"grid.appScope.vm.purchaseProductVariant(row.treeNode.children, row.entity.location_external_id, row.entity.provider_external_id, row.entity.replenishment_stock_to_order)\">' +\n          '<md-tooltip> {{\"LOW_STOCK.CREATE_PURCHASE_DRAFT\" | translate }}</md-tooltip>' +\n          '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n          '</md-button>' +\n          '</div>' +\n          '<div layout=\"row\" layout-align=\"center center\" flex ng-show=\"row.treeLevel !== 0\">' +\n          '<div flex>' +\n          '<input type=\"number\" ng-click=\"grid.appScope.vm.onClickInput($event)\" ng-wheel=\"$event.preventDefault()\" ng-mousedown=\"$event.stopPropagation()\"' +\n          'ng-change=\"grid.appScope.vm.orderQuantityByUnitsChanged(row.entity)\"' +\n          'ng-model=\"grid.appScope.vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id]\"' +\n          'class=\"nd-input text-right\">' +\n          '</div>' +\n          '<div flex layout=\"column\" class=\"pl-8\">' +\n          '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n          '</small>' +\n          '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(grid.appScope.vm.orderQuantitiesByWeeklyCoverage[row.entity.item_external_id][row.entity.location_external_id] * 7, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n          '</small>' +\n          '</div>' +\n          '<md-button class=\"md-icon-button no-margin\"' +\n          'ng-click=\"grid.appScope.vm.purchaseProductVariant(row.entity, row.entity.location_external_id, row.entity.provider_external_id, row.entity.replenishment_stock_to_order)\">' +\n          '<md-tooltip> {{\"LOW_STOCK.CREATE_PURCHASE_DRAFT\" | translate }}</md-tooltip>' +\n          '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n          '</md-button>' +\n          '</div>';\n\n        var orderByCoverageCellHtml =\n          '<div layout=\"row\" layout-align=\"center center\" flex ng-show=\"row.treeLevel !== 0\">' +\n          '<div flex>' +\n          '<input type=\"number\" ng-click=\"grid.appScope.vm.onClickInput($event)\" ng-wheel=\"$event.preventDefault()\" ng-mousedown=\"$event.stopPropagation()\"' +\n          'ng-change=\"grid.appScope.vm.orderQuantityByWeeklyCoverageChanged(row.entity)\"' +\n          'ng-model=\"grid.appScope.vm.orderQuantitiesByWeeklyCoverage[row.entity.item_external_id][row.entity.location_external_id]\"' +\n          'class=\"nd-input text-right\">' +\n          '</div>' +\n          '<div flex layout=\"column\" class=\"pl-8\">' +\n          '<small class=\"secondary-text\"> {{\"LOW_STOCK.FROM\" | translate }} {{ row.entity.lead_time_date | date: \\'dd/MM\\'}}' +\n          '</small>' +\n          '<small class=\"secondary-text\"> {{\"LOW_STOCK.TO\" | translate }} {{ grid.appScope.vm.calculateDate(grid.appScope.vm.orderQuantitiesByWeeklyCoverage[row.entity.item_external_id][row.entity.location_external_id] * 7, row.entity.lead_time_date) | date: \\'dd/MM\\'}}' +\n          '</small>' +\n          '</div>' +\n          '<md-button class=\"md-icon-button no-margin\"' +\n          'ng-click=\"grid.appScope.vm.purchaseProductVariant(row.entity, row.entity.location_external_id, row.entity.provider_external_id, row.entity.replenishment_stock_to_order)\">' +\n          '<md-tooltip> {{\"LOW_STOCK.CREATE_PURCHASE_DRAFT\" | translate }}</md-tooltip>' +\n          '<md-icon class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n          '</md-button>' +\n          '</div>';\n\n        window.angular.extend(vm.columnsByProduct, {\n          cover_thumbnail: {\n            displayName: '',\n            headerTooltip: $filter('translate')('PRODUCT.IMG'),\n            field: 'cover_thumbnail',\n            width: 45,\n            minWidth: 45,\n            maxWidth: 45,\n            permission: true,\n            visible: true,\n            enablePinning: false,\n            pinnedLeft: true,\n            enableSorting: false,\n            enableHiding: false,\n            enableColumnMenu: false,\n            enableColumnResizing: false,\n            groupingShowAggregationMenu: false,\n            enableCellEdit: false,\n            movable: false,\n            cellTemplate: '<div class=\"cell-center full-width\" ng-show=\"row.treeLevel === 0\">' +\n              '<a ui-sref=\"app.inventory.products.product.overview({id:row.treeNode.children[0].row.entity.product_id})\">' +\n              '<div ng-if=\"!row.treeNode.children[0].row.entity.cover_thumbnail\" layout=\"row\" layout-align=\"center center\" class=\"w-48\">' +\n              '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n              '</div>' +\n              '<img ng-if=\"row.treeNode.children[0].row.entity.cover_thumbnail\" class=\"w-40 h-40\" ng-src=\"{{row.treeNode.children[0].row.entity.cover_thumbnail}}\" lazy-src>' +\n              '</a>' +\n              '</div>'\n          },\n          item_code: {\n            displayName: $filter('translate')('PRODUCT.CODE'),\n            headerTooltip: $filter('translate')('PRODUCT.CODE'),\n            field: 'item_code',\n            width: 180,\n            minWidth: 150,\n            permission: true,\n            visible: getColumnStatusVisibility('item_code', false, avoidState),\n            enablePinning: true,\n            pinnedLeft: true,\n            grouping: { groupPriority: 0 },\n            enableSorting: false,\n            enableHiding: true,\n            cellTemplate: '<div class=\"cell-middle\" layout=\"row\" flex class=\"start center\" ng-show=\"row.treeLevel === 0\">' +\n              '<a style=\"align-self: center\" ui-sref=\"app.inventory.products.product.overview({id:row.treeNode.children[0].row.entity.product_id})\">' + '{{row.treeNode.children[0].row.entity.item_code || \\'-\\'}}' + '</a>' +\n              '</div>'\n          },\n          item_name: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n            field: 'item_name',\n            width: 180,\n            minWidth: 150,\n            permission: true,\n            enableSorting: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('item_name', true, avoidState),\n            pinnedLeft: true,\n            enablePinning: true,\n            enableHiding: true,\n            cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">' +\n              '<a ui-sref=\"app.inventory.products.product.overview({id:row.treeNode.children[0].row.entity.product_id})\">' + '{{row.treeNode.children[0].row.entity.item_name || \\'-\\'}}' + '</a>' +\n              '</div>'\n          },\n          item_sku: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SKU'),\n            field: 'item_sku',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('item_sku', true, avoidState),\n            enablePinning: true,\n            enableHiding: true,\n            groupingShowAggregationMenu: false,\n            cellTemplate: '<div class=\"cell-middle\">' +\n              '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_sku || \\'-\\'}}' + '</a>' +\n              '</div>'\n          },\n          item_barcode: {\n            displayName: $filter('translate')('PRODUCT.BARCODE'),\n            headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n            field: 'item_barcode',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('item_barcode', false, avoidState),\n            cellTemplate: '<div class=\"cell-middle\">' +\n              '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' + '{{row.entity.item_barcode || \\'-\\'}}' + '</a>' +\n              '</div>'\n          },\n          size: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SIZE'),\n            field: 'size',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('size', true, avoidState),\n            cellTemplate: '<div class=\"cell-middle\">{{row.entity.size || \\'-\\'}}</div>',\n            enableSorting: false\n          },\n          color: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.COLOR'),\n            field: 'color',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('color', true, avoidState),\n            cellTemplate: '<div class=\"cell-middle\">{{row.entity.color || \\'-\\'}}</div>',\n            enableSorting: false\n          },\n          brand_name: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.BRAND'),\n            field: 'brand_name',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('brand_name', false, avoidState),\n            cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.brand_name || \\'-\\'}}</div>'\n          },\n          category: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.CATEGORY'),\n            field: 'category',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('category', false, avoidState),\n            cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.category || \\'-\\'}}</div>',\n            enableSorting: false\n          },\n          subcategory: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SUBCATEGORY'),\n            field: 'subcategory',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('subcategory', false, avoidState),\n            cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.subcategory || \\'-\\'}}</div>',\n            enableSorting: false\n          },\n          season_name: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.SEASON'),\n            field: 'season_name',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('season_name', false, avoidState),\n            cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.season_name || \\'-\\'}}</div>'\n          },\n          separator_2: {\n            displayName: '',\n            field: 'separator_2',\n            visible: true,\n            width: 5,\n            minWidth: 5,\n            permission: true,\n            enableHiding: false,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            enableFiltering: false,\n            enableColumnMenu: false,\n            enableColumnResizing: false,\n            cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellClass: 'no-padding'\n          },\n          availability_status: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVAILABILITY'),\n            field: 'availability_status',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('availability_status', true, avoidState),\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = 0;\n                aggregation.num = 0;\n              }\n              var availabilityStatusValue = getAvailabilityStatusValue(row.entity.availability_status);\n              var abcCategoryValue = getABCValue(row.entity.item_abc_category);\n\n              aggregation.num += 1;\n              aggregation.value += availabilityStatusValue * abcCategoryValue;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              var result = aggregation.value / aggregation.num;\n              if (result == 0) {\n                aggregation.rendered = 'IN_STOCK';\n              } else if (0 < result && result <= 1) {\n                aggregation.rendered = 'NON_URGENT_ORDER';\n              } else if (1 < result && result <= 2) {\n                aggregation.rendered = 'URGENT_ORDER';\n              } else {\n                aggregation.rendered = 'OUT_OF_STOCK';\n              }\n            },\n            pinnedLeft: false,\n            enableColumnMenu: false,\n            enableHiding: true,\n            cellClass: 'cell-padding',\n            cellTemplate:\n              '<div layout=\"row\" layout-align=\"center center\" class=\"full-width\" ng-if=\"!row.groupHeader\">' +\n              '<div class=\"replenishment-stock-status {{row.entity.availability_status}}\">' +\n              '<md-tooltip>' +\n              '{{\\'INVENTORY_DASHBOARD.\\' + row.entity.availability_status | translate}}</md-tooltip>' +\n              '</div>' +\n              '</div>' +\n              '<div layout=\"row\" layout-align=\"space-around center\" class=\"full-width\" ng-if=\"row.groupHeader\">' +\n              '<div class=\"replenishment-stock-status {{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'availability_status\\')}}\">' +\n              '<md-tooltip>' +\n              '{{\\'INVENTORY_DASHBOARD.\\' + grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'availability_status\\') | translate}}</md-tooltip>' +\n              '</div>' +\n              '</div>',\n            enableSorting: false\n          },\n          stock_in_transit: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_IN_TRANSIT'),\n            field: 'stock_in_transit',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('stock_in_transit', false, avoidState),\n            cellFilter: 'number',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right cell-padding',\n            enableSorting: false\n          },\n          stock_on_hand: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_HANDS'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_HANDS'),\n            field: 'stock_on_hand',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('stock_on_hand', false, avoidState),\n            cellFilter: 'number',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right cell-padding',\n            enableSorting: true,\n            enableCellEdit: true\n          },\n          global_stock: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n            field: 'global_stock',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('global_stock', false, avoidState),\n            cellFilter: 'number',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right cell-padding'\n          },\n          total_stock: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_STOCK'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_STOCK'),\n            field: 'total_stock',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('total_stock', true, avoidState),\n            cellFilter: 'number',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right cell-padding'\n          },\n          separator_3: {\n            displayName: '',\n            field: 'separator_3',\n            visible: true,\n            width: 5,\n            minWidth: 5,\n            permission: true,\n            enableHiding: false,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            enableFiltering: false,\n            enableColumnMenu: false,\n            enableColumnResizing: false,\n            cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellClass: 'no-padding'\n          },\n          item_abc_category: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ABC'),\n            field: 'item_abc_category',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('item_abc_category', true, avoidState),\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = [];\n              }\n              aggregation.value.push(row.entity.item_abc_category);\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              var counts = {};\n              var compare = 0;\n              var mostFrequent;\n              for (var i = 0, len = aggregation.value.length; i < len; i++) {\n                var word = aggregation.value[i];\n                if (counts[word] === undefined) {\n                  counts[word] = 1;\n                } else {\n                  counts[word] = counts[word] + 1;\n                }\n                if (counts[word] > compare) {\n                  compare = counts[word];\n                  mostFrequent = aggregation.value[i];\n                }\n              }\n              aggregation.rendered = mostFrequent;\n            },\n            enablePinning: false,\n            pinnedLeft: false,\n            enableHiding: true,\n            cellClass: 'cell-centered',\n            cellTemplate: '<div class=\"abc-box type-{{row.entity.item_abc_category}}\" ng-if=\"!row.groupHeader\">{{row.entity.item_abc_category}}</div>' +\n              '<div class=\"abc-box type-{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'item_abc_category\\')}}\" ng-if=\"row.groupHeader\">{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'item_abc_category\\')}}</div>'\n          },\n          stock_turn: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN'),\n            field: 'stock_turn',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('stock_turn', true, avoidState),\n            cellClass: 'cell-right cell-padding',\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.total_stock) === 'undefined') {\n                aggregation.total_stock = 0;\n                aggregation.total_avg_daily_total_units_sold = 0;\n                aggregation.value = [];\n              }\n              var value = 0;\n              if (row.entity.avg_daily_total_units_sold > 0) {\n                value = row.entity.total_stock / row.entity.avg_daily_total_units_sold;\n              }\n              aggregation.value.push(value);\n              aggregation.total_avg_daily_total_units_sold += row.entity.avg_daily_total_units_sold;\n              aggregation.total_stock += row.entity.total_stock;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.min = Math.min.apply(null, aggregation.value);\n              aggregation.max = Math.max.apply(null, aggregation.value);\n              if (aggregation.total_avg_daily_total_units_sold === 0) {\n                aggregation.avg = 0;\n              } else {\n                aggregation.avg = aggregation.total_stock / aggregation.total_avg_daily_total_units_sold;\n              }\n            },\n            cellTemplate: '<div class=\"text-right full-width\" ng-if=\"!row.groupHeader\">{{ row.entity.total_stock / row.entity.avg_daily_total_units_sold | number: 0 }}</div>' +\n              '<div flex layout=\"column\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stock_turn\\', \\'avg\\') | number:0 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stock_turn\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stock_turn\\', \\'max\\') | number:0 }}' +\n              '</small>' +\n              '</div>'\n          },\n          stock_turn_weeks: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS'),\n            field: 'stock_turn_weeks',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('stock_turn_weeks', false, avoidState),\n            cellClass: 'cell-right cell-padding',\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = [];\n                aggregation.total_stock = 0;\n                aggregation.total_avg_daily_total_units_sold = 0;\n              }\n              var value = 0;\n              if (row.entity.avg_daily_total_units_sold > 0) {\n                value = row.entity.total_stock / row.entity.avg_daily_total_units_sold / 7;\n              }\n              aggregation.value.push(value);\n              aggregation.total_avg_daily_total_units_sold += row.entity.avg_daily_total_units_sold;\n              aggregation.total_stock += row.entity.total_stock;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.min = Math.min.apply(null, aggregation.value);\n              aggregation.max = Math.max.apply(null, aggregation.value);\n              var sum = 0;\n              for (var i = 0; i < aggregation.value.length; i++) {\n                sum += aggregation.value[i];\n              }\n              if (aggregation.total_avg_daily_total_units_sold === 0) {\n                aggregation.avg = 0;\n              } else {\n                aggregation.avg = aggregation.total_stock / aggregation.total_avg_daily_total_units_sold / 7;\n              }\n            },\n            cellTemplate: '<div class=\"text-right full-width\" ng-if=\"!row.groupHeader\">{{ row.entity.total_stock / row.entity.avg_daily_total_units_sold / 7 | number: 0 }}</div>' +\n              '<div flex layout=\"column\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stock_turn_weeks\\', \\'avg\\') | number:0 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stock_turn_weeks\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stock_turn_weeks\\', \\'max\\') | number:0 }}' +\n              '</small>' +\n              '</div>'\n          },\n          warehouse_stock_turn: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WAREHOUSE'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WAREHOUSE'),\n            field: 'warehouse_stock_turn',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('warehouse_stock_turn', false, avoidState),\n            cellClass: 'cell-right cell-padding',\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = [];\n                aggregation.total_stock = 0;\n                aggregation.total_avg_daily_total_units_sold = 0;\n              }\n              var value = 0;\n              if (row.entity.avg_daily_total_units_sold > 0) {\n                value = (row.entity.stock_in_transit + row.entity.stock_on_hand) / row.entity.avg_daily_total_units_sold;\n              }\n              aggregation.value.push(value);\n              aggregation.total_avg_daily_total_units_sold += row.entity.avg_daily_total_units_sold;\n              aggregation.total_stock += row.entity.stock_in_transit + row.entity.stock_on_hand;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.min = Math.min.apply(null, aggregation.value);\n              aggregation.max = Math.max.apply(null, aggregation.value);\n              var sum = 0;\n              for (var i = 0; i < aggregation.value.length; i++) {\n                sum += aggregation.value[i];\n              }\n              if (aggregation.total_avg_daily_total_units_sold === 0) {\n                aggregation.avg = 0;\n              } else {\n                aggregation.avg = aggregation.total_stock / aggregation.total_avg_daily_total_units_sold;\n              }\n            },\n            cellTemplate: '<div class=\"text-right full-width\" ng-if=\"!row.groupHeader\">{{ (row.entity.stock_in_transit + row.entity.stock_on_hand) / row.entity.avg_daily_total_units_sold | number: 0 }}</div>' +\n              '<div flex layout=\"column\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'warehouse_stock_turn\\', \\'avg\\') | number:0 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'warehouse_stock_turn\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'warehouse_stock_turn\\', \\'max\\') | number:0 }}' +\n              '</small>' +\n              '</div>'\n          },\n          warehouse_stock_turn_weeks: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS_WAREHOUSE'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS_WAREHOUSE'),\n            field: 'warehouse_stock_turn_weeks',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('warehouse_stock_turn_weeks', false, avoidState),\n            cellClass: 'cell-right cell-padding',\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = [];\n                aggregation.total_stock = 0;\n                aggregation.total_avg_daily_total_units_sold = 0;\n              }\n              var value = 0;\n              if (row.entity.avg_daily_total_units_sold > 0) {\n                value = (row.entity.stock_in_transit + row.entity.stock_on_hand) / row.entity.avg_daily_total_units_sold / 7;\n              }\n              aggregation.value.push(value);\n              aggregation.total_avg_daily_total_units_sold += row.entity.avg_daily_total_units_sold;\n              aggregation.total_stock += row.entity.stock_in_transit + row.entity.stock_on_hand;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.min = Math.min.apply(null, aggregation.value);\n              aggregation.max = Math.max.apply(null, aggregation.value);\n              var sum = 0;\n              for (var i = 0; i < aggregation.value.length; i++) {\n                sum += aggregation.value[i];\n              }\n              if (aggregation.total_avg_daily_total_units_sold === 0) {\n                aggregation.avg = 0;\n              } else {\n                aggregation.avg = aggregation.total_stock / aggregation.total_avg_daily_total_units_sold / 7;\n              }\n            },\n            cellTemplate: '<div class=\"text-right full-width\" ng-if=\"!row.groupHeader\">{{ (row.entity.stock_in_transit + row.entity.stock_on_hand) / row.entity.avg_daily_total_units_sold / 7 | number: 0 }}</div>' +\n              '<div flex layout=\"column\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'warehouse_stock_turn_weeks\\', \\'avg\\') | number:0 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'warehouse_stock_turn_weeks\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'warehouse_stock_turn_weeks\\', \\'max\\') | number:0 }}' +\n              '</small>' +\n              '</div>'\n          },\n          stores_stock_turn: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_STORES'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_STORES'),\n            field: 'stores_stock_turn',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('stores_stock_turn', false, avoidState),\n            cellClass: 'cell-right cell-padding',\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.total_stock) === 'undefined') {\n                aggregation.total_stock = 0;\n                aggregation.total_avg_daily_total_units_sold = 0;\n                aggregation.value = [];\n              }\n              var value = 0;\n              if (row.entity.avg_daily_total_units_sold > 0) {\n                value = row.entity.global_stock / row.entity.avg_daily_total_units_sold;\n              }\n              aggregation.value.push(value);\n              aggregation.total_avg_daily_total_units_sold += row.entity.avg_daily_total_units_sold;\n              aggregation.total_stock += row.entity.global_stock;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.min = Math.min.apply(null, aggregation.value);\n              aggregation.max = Math.max.apply(null, aggregation.value);\n              if (aggregation.total_avg_daily_total_units_sold === 0) {\n                aggregation.avg = 0;\n              } else {\n                aggregation.avg = aggregation.total_stock / aggregation.total_avg_daily_total_units_sold;\n              }\n            },\n            cellTemplate: '<div class=\"text-right full-width\" ng-if=\"!row.groupHeader\">{{ row.entity.global_stock / row.entity.avg_daily_total_units_sold | number: 0 }}</div>' +\n              '<div flex layout=\"column\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stores_stock_turn\\', \\'avg\\') | number:0 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stores_stock_turn\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stores_stock_turn\\', \\'max\\') | number:0 }}' +\n              '</small>' +\n              '</div>'\n          },\n          stores_stock_turn_weeks: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS_STORES'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TURN_WEEKS_STORES'),\n            field: 'stores_stock_turn_weeks',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('stores_stock_turn_weeks', false, avoidState),\n            cellClass: 'cell-right cell-padding',\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.total_stock) === 'undefined') {\n                aggregation.total_stock = 0;\n                aggregation.total_avg_daily_total_units_sold = 0;\n                aggregation.value = [];\n              }\n              var value = 0;\n              if (row.entity.avg_daily_total_units_sold > 0) {\n                value = row.entity.global_stock / (row.entity.avg_daily_total_units_sold * 7);\n              }\n              aggregation.value.push(value);\n              aggregation.total_avg_daily_total_units_sold += row.entity.avg_daily_total_units_sold;\n              aggregation.total_stock += row.entity.global_stock;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.min = Math.min.apply(null, aggregation.value);\n              aggregation.max = Math.max.apply(null, aggregation.value);\n              if (aggregation.total_avg_daily_total_units_sold === 0) {\n                aggregation.avg = 0;\n              } else {\n                aggregation.avg = aggregation.total_stock / (aggregation.total_avg_daily_total_units_sold * 7);\n              }\n            },\n            cellTemplate: '<div class=\"text-right full-width\" ng-if=\"!row.groupHeader\">{{ row.entity.global_stock / (row.entity.avg_daily_total_units_sold * 7) | number: 0 }}</div>' +\n              '<div flex layout=\"column\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stores_stock_turn_weeks\\', \\'avg\\') | number:0 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stores_stock_turn_weeks\\', \\'min\\') | number:0 }} - {{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'stores_stock_turn_weeks\\', \\'max\\') | number:0 }}' +\n              '</small>' +\n              '</div>'\n          },\n          total_units_sold: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD'),\n            field: 'total_units_sold',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('total_units_sold', true, avoidState),\n            cellFilter: 'number',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right',\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex ng-click=\"grid.appScope.vm.showSalesAnalysisPopup(row.entity.item_external_id)\" style=\"cursor: pointer;\">' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'total_units_sold\\') }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{\\'INVENTORY_DASHBOARD.LAST_X_DAYS\\' | translate: {days: grid.appScope.vm.analysis_period_days} }}' +\n              '</small>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.total_units_sold }}</span>' +\n              '<small ng-if=\"!row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{\\'INVENTORY_DASHBOARD.LAST_X_DAYS\\' | translate: {days: grid.appScope.vm.analysis_period_days} }}' +\n              '</small>' +\n              '</div>'\n          },\n          avg_daily_total_units_sold: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES'),\n            field: 'avg_daily_total_units_sold',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('avg_daily_total_units_sold', true, avoidState),\n            cellClass: 'cell-right',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') | number:2 }}</span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') * 7 | number: 0 }} ' +\n              '{{\\'INVENTORY_DASHBOARD.PER_WEEK\\' | translate}}' +\n              '</small>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.avg_daily_total_units_sold  | number:2 }}</span>' +\n              '<small ng-if=\"!row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{row.entity.avg_daily_total_units_sold  * 7 | number: 0 }} ' +\n              '{{\\'INVENTORY_DASHBOARD.PER_WEEK\\' | translate}}' +\n              '</small>' +\n              '</div>'\n          },\n          avg_weekly_total_units_sold: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_WEEKLY_SALES'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_WEEKLY_SALES'),\n            field: 'avg_weekly_total_units_sold',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('avg_weekly_total_units_sold', false, avoidState),\n            cellClass: 'cell-right',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_daily_total_units_sold\\') * 7 | number: 0 }} </span>' +\n              '<small ng-if=\"row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'avg_weekly_total_units_sold\\') | number:2 }} ' +\n              '{{\\'INVENTORY_DASHBOARD.PER_DAY\\' | translate}}' +\n              '</small>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.avg_daily_total_units_sold  * 7 | number: 0 }}</span>' +\n              '<small ng-if=\"!row.groupHeader\" class=\"text-right secondary-text\">' +\n              '{{ row.entity.avg_daily_total_units_sold  | number:2 }} ' +\n              '{{\\'INVENTORY_DASHBOARD.PER_DAY\\' | translate}}' +\n              '</small>' +\n              '</div>'\n          },\n          separator_4: {\n            displayName: '',\n            field: 'separator_4',\n            visible: true,\n            width: 5,\n            minWidth: 5,\n            permission: true,\n            enableHiding: false,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            enableFiltering: false,\n            enableColumnMenu: false,\n            enableColumnResizing: false,\n            cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellClass: 'no-padding'\n          },\n          item_provider: {\n            displayName: $filter('translate')('LOW_STOCK.PROVIDER'),\n            headerTooltip: $filter('translate')('LOW_STOCK.PROVIDER'),\n            field: 'item_provider',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('item_provider', true, avoidState),\n            enablePinning: true,\n            pinnedLeft: false,\n            enableHiding: true,\n            cellTemplate: '<div class=\"cell-middle\" ng-show=\"row.treeLevel === 0\">{{row.treeNode.children[0].row.entity.provider_name || \\'-\\'}}</div>'\n          },\n          replenishment_lead_time: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n            field: 'replenishment_lead_time',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('replenishment_lead_time', true, avoidState),\n            cellClass: 'cell-right',\n            cellTemplate: '<div class=\"pr-8\" flex layout=\"column\" ng-show=\"row.treeLevel === 0\">' +\n              '<span  ng-if=\"row.groupHeader\" class=\"text-right\">{{ row.treeNode.children[0].row.entity.replenishment_lead_time | number: 0 }}</span>' +\n              '<small class=\"text-right secondary-text\"  ng-if=\"row.groupHeader\">' +\n              '{{\\'INVENTORY_DASHBOARD.DELIVERY_ON\\' | translate}} ' +\n              '{{ grid.appScope.vm.calculateDate(row.treeNode.children[0].row.entity.replenishment_lead_time)  | date: \\'dd/MM\\'}}' +\n              '</small></div>'\n          },\n          stock_available_on_lead_time: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_LEAD_TIME'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_ON_LEAD_TIME'),\n            field: 'stock_available_on_lead_time',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            visible: getColumnStatusVisibility('stock_available_on_lead_time', true, avoidState),\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right cell-padding'\n          },\n          unit_price: {\n            displayName: $filter('translate')('LOW_STOCK.DDP'),\n            headerTooltip: $filter('translate')('LOW_STOCK.DDP'),\n            field: 'unit_price',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('unit_price', false, avoidState),\n            cellClass: 'cell-right',\n            treeAggregationType: uiGridGroupingConstants.aggregation.AVG,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'unit_price\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.unit_price | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '</div>'\n          },\n          price: {\n            displayName: $filter('translate')('LOW_STOCK.SALE_PRICE'),\n            headerTooltip: $filter('translate')('LOW_STOCK.SALE_PRICE'),\n            field: 'price',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('price', false, avoidState),\n            cellClass: 'cell-right',\n            treeAggregationType: uiGridGroupingConstants.aggregation.AVG,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'price\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.price | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '</div>'\n          },\n          separator_5: {\n            displayName: '',\n            field: 'separator_5',\n            visible: true,\n            width: 5,\n            minWidth: 5,\n            permission: true,\n            enableHiding: false,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            enableFiltering: false,\n            enableColumnMenu: false,\n            enableColumnResizing: false,\n            cellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellTemplate: '<div style=\"background-color: #e0e0e0; height: 100%; width: 5px;\"></div>',\n            headerCellClass: 'no-padding'\n          },\n          replenishment_rop: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROP'),\n            field: 'replenishment_rop',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('replenishment_rop', true, avoidState),\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span>{{ row.entity.replenishment_rop | number:  0 }}</span>'\n          },\n          replenishment_stockout_losses: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n            field: 'replenishment_stockout_losses',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('replenishment_stockout_losses', false, avoidState),\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'replenishment_stockout_losses\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<small class=\"text-right secondary-text\" ng-if=\"!row.groupHeader\">' +\n              '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n              '{{row.entity.replenishment_stockout_losses_date | date: \"dd/MM\"}}' +\n              '</small></div>'\n          },\n          expected_demand: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_DEMAND'),\n            field: 'expected_demand',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('expected_demand', true, avoidState),\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate:\n              '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'expected_demand\\') | number:2 }} </span>' +\n              '<span  ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.expected_demand | number: 0 }}</span>' +\n              '<small class=\"text-right secondary-text\"  ng-if=\"!row.groupHeader\">' +\n              '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n              '{{row.entity.expected_demand_date | date: \\'dd/MM\\'}}' +\n              '</small></div>'\n          },\n          expected_sales: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.EXPECTED_SALES'),\n            field: 'expected_sales',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('expected_sales', false, avoidState),\n            cellClass: 'cell-right',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'expected_sales\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.expected_sales | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '</div>'\n          },\n          replenishment_stock_to_order: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n            field: 'replenishment_stock_to_order',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('replenishment_stock_to_order', true, avoidState),\n            cellFilter: 'number',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right cell-padding'\n          },\n          demand_value: {\n            displayName: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n            headerTooltip: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n            field: 'demand_value',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('demand_value', false, avoidState),\n            cellClass: 'cell-right',\n            treeAggregationType: uiGridGroupingConstants.aggregation.SUM,\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'demand_value\\') | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ row.entity.demand_value | number:2 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '</div>'\n          },\n          sale_value: {\n            displayName: $filter('translate')('LOW_STOCK.SALE_ORDER_VALUE'),\n            headerTooltip: $filter('translate')('LOW_STOCK.SALE_ORDER_VALUE'),\n            field: 'sale_value',\n            width: 100,\n            minWidth: 100,\n            permission: true,\n            enableSorting: false,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('sale_value', false, avoidState),\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              var quantity = vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id];\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = 0;\n              }\n              aggregation.value += row.entity.price * quantity;\n            },\n            customTreeAggregationFinalizerFn: function(aggregation) {\n              aggregation.rendered = aggregation.value;\n            },\n            cellClass: 'cell-right',\n            cellTemplate: '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span ng-if=\"row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'sale_value\\') | number: 0 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<span ng-if=\"!row.groupHeader\" class=\"text-right\">{{ grid.appScope.vm.getSaleOrderValue(row.entity) | number: 0 }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '</div>'\n          },\n          total_draft: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n            field: 'total_draft',\n            width: 200,\n            minWidth: 140,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('total_draft', true, avoidState),\n            enableSorting: false,\n            pinnedRight: false,\n            enablePinning: false,\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = 0;\n              }\n              try {\n                aggregation.value += vm.totalDraftByProduct[row.entity.item_external_id][row.entity.location_external_id].total;\n              } catch (e) {\n              }\n            },\n            cellClass: 'cell-padding',\n            cellTemplate:\n              '<div flex layout=\"column\" ng-if=\"row.groupHeader\">' +\n              '<span class=\"text-right\">{{ grid.appScope.vm.getAggregationValue(row.treeNode.aggregations, \\'total_draft\\')  }}</span>' +\n              '</div>' +\n              '<div flex layout=\"column\" ng-if=\"!row.groupHeader\">' +\n              '<div layout=\"row\" layout-align=\"end center\" flex>' +\n              '<span>{{ grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\"total\"] }} </span>' +\n              '<span class=\"mh-5\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_autocode\\']\">| </span>' +\n              '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/purchases/{{grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\\'purchase_order_id\\']}}/products\">' +\n              '{{grid.appScope.vm.totalDraft[row.entity.item_external_id][row.entity.location_external_id][row.entity.provider_external_id][\"purchase_order_autocode\"]}}' +\n              '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n              '</a>' +\n              '</div>' +\n              '<small class=\"text-right secondary-text\">' +\n              '{{ grid.appScope.vm.getCoverage(row.entity) / 7 | number: 0 }}' +\n              ' {{\\'INVENTORY_DASHBOARD.WEEKS_COVERAGE\\' | translate}}' +\n              '</small>' +\n              '</div>'\n          },\n          order_by_coverage: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH_BY_COVERAGE'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH_BY_COVERAGE'),\n            field: 'order_by_coverage',\n            width: 200,\n            minWidth: 140,\n            permission: true,\n            visible: getColumnStatusVisibility('order_by_coverage', true, avoidState),\n            groupingShowAggregationMenu: false,\n            cellTemplate: orderByCoverageCellHtml,\n            editableCellTemplate: orderByCoverageCellHtml,\n            enableSorting: false,\n            pinnedRight: false,\n            enablePinning: false,\n            enableCellEdit: true,\n            enableCellEditOnFocus: true,\n            cellClass: 'cell-padding'\n          },\n          order: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.REPLENISH'),\n            field: 'order',\n            width: 200,\n            minWidth: 140,\n            permission: true,\n            groupingShowAggregationMenu: false,\n            visible: getColumnStatusVisibility('order', true, avoidState),\n            cellTemplate: orderCellHtml,\n            editableCellTemplate: orderCellHtml,\n            customTreeAggregationFn: function(aggregation, fieldValue, numValue, row) {\n              if (typeof (aggregation.value) === 'undefined') {\n                aggregation.value = 0;\n              }\n              try {\n                aggregation.value += vm.orderQuantities[row.entity.item_external_id][row.entity.location_external_id];\n              } catch (e) {\n              }\n            },\n            enableSorting: false,\n            pinnedRight: false,\n            enablePinning: false,\n            enableCellEdit: true,\n            enableCellEditOnFocus: true,\n            cellClass: 'cell-padding'\n          }\n        });\n\n        // Setting only the columns with permission to the grid\n        // Old version without loading the column\n        /*for (var key in vm.columnsByProduct) {\n          if (vm.columnsByProduct[key].permission) {\n            vm.gridOptionsByProduct.columnDefs.push(vm.columnsByProduct[key]);\n          }\n        }*/\n\n        vm.gridOptionsByProduct.columnDefs = [];\n\n        if (!avoidState && vm.statusByProduct.state && vm.statusByProduct.state.columns) {\n          var columnMap = {};\n          vm.statusByProduct.state.columns.forEach(function(column) {\n            columnMap[column.name] = column;\n          });\n\n          vm.statusByProduct.state.columns.forEach(function(stateColumn) {\n            var key = stateColumn.name;\n            if (vm.columnsByProduct.hasOwnProperty(key) && vm.columnsByProduct[key].permission) {\n              angular.extend(vm.columnsByProduct[key], columnMap[key]);\n              vm.columnsByProduct[key].groupingShowAggregationMenu = false;\n              vm.columnsByProduct[key].groupingShowGroupingMenu = false;\n              vm.gridOptionsByProduct.columnDefs.push(vm.columnsByProduct[key]);\n            }\n          });\n        } else {\n          for (var key in vm.columnsByProduct) {\n            if (vm.columnsByProduct.hasOwnProperty(key) && vm.columnsByProduct[key].permission) {\n              var col = vm.columnsByProduct[key];\n              col.groupingShowAggregationMenu = false;\n              col.groupingShowGroupingMenu = false;\n              vm.gridOptionsByProduct.columnDefs.push(col);\n            }\n          }\n        }\n      }\n\n      function setGridColumnsByProvider(avoidState) {\n        var orderCellHtml =\n          '<button ng-disabled=\"grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_status\\']===0\" ' +\n          'class=\"custom-button\" ng-click=\"grid.appScope.vm.createPurchaseDraft(row.entity.provider_external_id, row.entity.location_external_id)\" ' +\n          '<div layout=\"row\" layout-align=\"center center\">' +\n          '<md-icon ng-if=\"grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_status\\']!==0\" class=\"md-primary-fg\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/cart-plus.59deb4ea.svg\"></md-icon>' +\n          '<md-progress-circular ng-if=\"grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_status\\']===0\" class=\"custom-progress mr-5\" md-diameter=\"16\" md-mode=\"indeterminate\"></md-progress-circular>' +\n          '<span translate=\"LOW_STOCK.CREATE_PURCHASE_DRAFT\"></span>' +\n          '</button>';\n\n\n        window.angular.extend(vm.columnsByProvider, {\n          provider_name: {\n            displayName: $filter('translate')('LOW_STOCK.PROVIDER'),\n            headerTooltip: $filter('translate')('LOW_STOCK.PROVIDER'),\n            field: 'provider_name',\n            permission: true,\n            visible: getColumnStatusVisibility('provider_name', true, avoidState),\n            cellClass: 'cell-padding',\n            enablePinning: true,\n            enableSorting: false,\n            pinnedLeft: false,\n            enableHiding: false\n          },\n          rotation: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n            field: 'rotation',\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('rotation', true, avoidState),\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span>{{ row.entity.rotation | number: 0 }}</span>'\n          },\n          replenishment_stockout_losses: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n            field: 'replenishment_stockout_losses',\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('replenishment_stockout_losses', true, avoidState),\n            minWidth: 100,\n            cellTemplate:\n              '<div class=\"cell-middle\" layout=\"column\" flex>' +\n              '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n              '<small class=\"text-right secondary-text\">' +\n              '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n              '{{row.entity.replenishment_stockout_losses_date | date: \\'dd/MM\\'}}' +\n              '</small></div>'\n          },\n          stock: {\n            displayName: $filter('translate')('LOW_STOCK.STOCK'),\n            headerTooltip: $filter('translate')('LOW_STOCK.STOCK'),\n            field: 'stock',\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('stock', true, avoidState),\n            minWidth: 75,\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span>{{row.entity.stock | number: 0}}</span>'\n          },\n          stock_value: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n            field: 'stock_value',\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('stock_value', true, avoidState),\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span>{{row.entity.stock_value | price}} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n          },\n          replenishment_stock_to_order: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n            field: 'replenishment_stock_to_order',\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('replenishment_stock_to_order', true, avoidState),\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n          },\n          replenishment_stock_to_order_value: {\n            displayName: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n            headerTooltip: $filter('translate')('LOW_STOCK.ORDER_VALUE'),\n            field: 'replenishment_stock_to_order_value',\n            permission: true,\n            enableSorting: false,\n            visible: getColumnStatusVisibility('replenishment_stock_to_order_value', true, avoidState),\n            cellClass: 'cell-right cell-padding',\n            cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order_value | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n          },\n          total_draft: {\n            displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n            headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n            field: 'total_draft',\n            permission: true,\n            visible: getColumnStatusVisibility('total_draft', true, avoidState),\n            enableSorting: false,\n            pinnedRight: false,\n            enablePinning: false,\n            cellClass: 'cell-centered cell-padding',\n            cellTemplate:\n              '<div layout=\"column\" flex>' +\n              '<span class=\"text-right\">{{ grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\"total\"]  }}</span>' +\n              '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/purchases/{{grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\\'purchase_order_id\\']}}/products\">' +\n              '{{grid.appScope.vm.totalDraftByProvider[row.entity.provider_external_id][row.entity.location_external_id][\"purchase_order_autocode\"]}}' +\n              '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n              '</a></div>'\n          },\n          order: {\n            displayName: $filter('translate')('LOW_STOCK.CREATE_PURCHASE_DRAFT'),\n            headerTooltip: $filter('translate')('LOW_STOCK.CREATE_PURCHASE_DRAFT'),\n            field: 'order',\n            permission: true,\n            visible: getColumnStatusVisibility('order', true, avoidState),\n            cellTemplate: orderCellHtml,\n            editableCellTemplate: orderCellHtml,\n            enableSorting: false,\n            pinnedRight: false,\n            enablePinning: false,\n            enableCellEdit: true,\n            enableCellEditOnFocus: true,\n            enableColumnMenu: false\n          }\n        });\n\n        // Setting only the columns with permission to the grid\n        vm.gridOptionsByProvider.columnDefs = [];\n        for (var key in vm.columnsByProvider) {\n          if (vm.columnsByProvider[key].permission) {\n            vm.gridOptionsByProvider.columnDefs.push(vm.columnsByProvider[key]);\n          }\n        }\n      }\n\n      function getCoverage(entity) {\n        var quantity = entity.total_stock + vm.orderQuantities[entity.item_external_id][entity.location_external_id];\n        if (quantity < 0) {\n          return 0;\n        }\n        return Math.ceil(quantity / entity.avg_daily_total_units_sold);\n      }\n\n      function getSaleOrderValue(entity) {\n        var quantity = vm.orderQuantities[entity.item_external_id][entity.location_external_id];\n        return quantity * entity.price;\n      }\n\n      function getColumnStatusVisibility(field, defaultValue, avoidState) {\n        if (vm.statusByProduct.state.columns) {\n          var column = vm.statusByProduct.state.columns.find(function(column) {\n            return column.name === field;\n          });\n          if (!avoidState && column) {\n            return column.visible;\n          }\n        }\n        return defaultValue;\n      }\n\n      function getGridPostBodyByProduct() {\n        var d = {};\n        vm.statusByProduct = vm.selectedStatus;\n        d.page = vm.statusByProduct.page;\n        d.page_size = vm.statusByProduct.pageSize;\n        d.order_by = vm.statusByProduct.ordering;\n        d.search = vm.statusByProduct.search;\n\n        d.columns_names = Object.values(vm.columnsByProduct).map(function(column) {\n          if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n            return column.displayName;\n          }\n        }).filter(Boolean);\n\n        d.columns_fields = Object.values(vm.columnsByProduct).map(function(column) {\n          if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n            return column.field;\n          }\n        }).filter(Boolean);\n\n        //Filters\n        vm.statusByProduct.filters.providers && vm.statusByProduct.filters.providers.length ? d.providers = vm.statusByProduct.filters.providers : null;\n        vm.statusByProduct.filters.seasons && vm.statusByProduct.filters.seasons.length ? d.seasons = vm.statusByProduct.filters.seasons : null;\n        vm.statusByProduct.filters.collections && vm.statusByProduct.filters.collections.length ? d.collections = vm.statusByProduct.filters.collections : null;\n        vm.statusByProduct.filters.brands && vm.statusByProduct.filters.brands.length ? d.brands = vm.statusByProduct.filters.brands : null;\n        vm.statusByProduct.filters.categories && vm.statusByProduct.filters.categories.length ? d.categories = vm.statusByProduct.filters.categories : null;\n        vm.statusByProduct.filters.subcategories && vm.statusByProduct.filters.subcategories.length ? d.subcategories = vm.statusByProduct.filters.subcategories : null;\n        vm.statusByProduct.filters.abcCategories && vm.statusByProduct.filters.abcCategories.length ? d.abc_categories = vm.statusByProduct.filters.abcCategories : null;\n        vm.statusByProduct.filters.availabilityStatuses && vm.statusByProduct.filters.availabilityStatuses.length ? d.availability_statuses = vm.statusByProduct.filters.availabilityStatuses : null;\n\n        return d;\n      }\n\n      function getGridPostBodyByProvider() {\n        var d = {};\n        d.page = vm.statusByProvider.page;\n        d.pageSize = vm.statusByProvider.pageSize;\n        d.orderBy = vm.statusByProvider.ordering;\n        d.search = vm.statusByProvider.search;\n\n        d.columns_names = Object.values(vm.columnsByProvider).map(function(column) {\n          if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n            return column.displayName;\n          }\n        }).filter(Boolean);\n\n        d.columns_fields = Object.values(vm.columnsByProvider).map(function(column) {\n          if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n            return column.field;\n          }\n        }).filter(Boolean);\n        return d;\n      }\n\n      function purchaseProductVariant(productVariants) {\n        if (!Array.isArray(productVariants)) {\n          productVariants = [productVariants];\n        } else {\n          productVariants = productVariants.map(function(productVariant) {\n            return productVariant.row.entity;\n          });\n        }\n        var productVariantsRequest = [];\n        for (var i = 0; i < productVariants.length; i++) {\n          var productVariant = productVariants[i];\n          var quantity = vm.orderQuantities[productVariant.item_external_id][productVariant.location_external_id];\n          if (typeof quantity === 'undefined') {\n            continue;\n          }\n          productVariantsRequest.push(\n            {\n              id: productVariant.item_external_id,\n              target_warehouse_id: productVariant.location_external_id,\n              provider_id: productVariant.provider_external_id,\n              original_quantity: productVariant.replenishment_stock_to_order,\n              quantity: quantity\n            }\n          );\n        }\n\n        api.inventories.productVariants.save({\n          option: 'purchase',\n          product_variants: productVariantsRequest\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            updateTotalOnOrder();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PURCHASE_CREATED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.message === 'Provider is required') {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('LOW_STOCK.PROVIDER_REQUIRED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT &&\n            response.error === ERROR_CODES.ERROR_11001_PLANNING_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11002_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_PERCENTAGE ||\n            response.error === ERROR_CODES.ERROR_11003_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_FIXED_AMOUNT ||\n            response.error === ERROR_CODES.ERROR_11004_PLANNING_CONFIGURATION_MINIMUM_STOCK_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11005_PLANNING_CONFIGURATION_MIN_QTY_EXCEEDED ||\n            response.error === ERROR_CODES.ERROR_11006_PLANNING_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY ||\n            response.error === ERROR_CODES.ERROR_11007_PLANNING_CONFIGURATION_MAX_PRICE_EXCEEDED) {\n            var productPlanningConfiguration = productVariant.purchase_planning_configuration;\n            $mdDialog.show({\n              controller: 'PlanningValidationErrorsDialogController',\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/planning/views/dialogs/planning-validation-errors-dialog/planning-validation-errors-dialog.html',\n              parent: window.angular.element($document.find('body')),\n              clickOutsideToClose: true,\n              focusOnOpen: false,\n              locals: {\n                params: {\n                  textTitle: 'REORDER.PURCHASE_ERROR_DIALOG_TITLE',\n                  textWarning: 'REORDER.PURCHASE_WARNING_MESSAGE',\n                  textFooter: 'REORDER.PURCHASE_ERROR_DIALOG_FOOTER',\n                  productPlanningConfiguration: productPlanningConfiguration,\n                  proposedStock: productVariant.replenishment_stock_to_order,\n                  error: response.error,\n                  type: 'PURCHASE',\n                  orderedStock: response.quantity,\n                  productId: response.product_id,\n                  limitMinQty: response.limit_min_qty,\n                  percentage: response.percentage,\n                  amount: response.fixed_amount,\n                  minStock: response.minimum_stock\n                }\n              }\n            });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n\n      }\n\n      function updateTotalOnOrder() {\n        var located_product_variants = [];\n        vm.gridOptionsByProduct.data.forEach(function(item) {\n          located_product_variants.push({\n            product_variant_id: item.item_external_id,\n            warehouse_id: item.location_external_id,\n            provider_id: item.provider_external_id\n          });\n        });\n        api.inventories.productVariants.save(\n          {\n            option: 'total-draft-on-ai-purchase-orders',\n            located_product_variants: located_product_variants\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.totalDraft = response.data;\n              expandAll();\n            }\n          }\n        );\n      }\n\n      function getGridPageByProduct() {\n        if (vm.loading) {\n          vm.abortController.abort();\n          vm.abortController = new window.AbortController();\n        }\n\n        vm.loading = true;\n\n        var url = api.urls.inventories.productVariants.replace(':id/', '').replace(':option', 'purchase_report');\n\n        fetch(url, {\n          method: 'POST',\n          headers: {\n            'Authorization': 'Token ' + Session.token,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify(getGridPostBodyByProduct()),\n          signal: vm.abortController.signal\n        })\n          .then(function(response) {\n            return response.json();\n          })\n          .then(function(data) {\n            if (data.message === ERROR_CODES.ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION) {\n              showMissingReplenishmentWarehouseError();\n            } else if (data.message == ERROR_CODES.ERROR_04043_NOT_DEFAULT_PRICING_TIER) {\n              showNotDefaultPricingTierError();\n            } else {\n              vm.loading = false;\n              vm.uiGridByProductInitialize = true;\n              vm.gridOptionsByProduct.data = data.data;\n              vm.gridOptionsByProduct.totalItems = data.recordsTotal;\n              vm.countByAvailabilityStatusDict = data.count_by_availability_status;\n              vm.analysis_period_days = data.analysis_period_days;\n              if (data.data.length) {\n                vm.orderQuantities = {};\n                vm.orderQuantitiesByWeeklyCoverage = {};\n                data.data.forEach(function(item) {\n                  if (!vm.orderQuantities[item.item_external_id]) {\n                    vm.orderQuantities[item.item_external_id] = {};\n                    vm.orderQuantitiesByWeeklyCoverage[item.item_external_id] = {};\n                  }\n                  vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n                  vm.orderQuantitiesByWeeklyCoverage[item.item_external_id][item.location_external_id] = Math.round((item.replenishment_stock_to_order + item.stock_available_on_lead_time) / (item.avg_daily_total_units_sold * 7));\n                });\n                updateTotalOnOrder();\n                vm.gridApiByProduct.core.handleWindowResize(); // fix for grid not rendering correctly\n              }\n              $scope.$apply();\n            }\n          })\n          .catch(function(error) {\n            throw error;\n          });\n      }\n\n      function showNotDefaultPricingTierError() {\n        $mdToast.show(\n          $mdToast.simple()\n            .textContent($filter('translate')('ERRORS.ERROR_04043_NOT_DEFAULT_PRICING_TIER'))\n            .action($filter('translate')('APPS.SETTING'))\n            .highlightAction(true)\n            .hideDelay(7500)\n            .position('top right')).then(function(response) {\n          if (response === 'ok') {\n            $state.go('app.inventory.configuration.pricing_tiers');\n          }\n        });\n      }\n\n      function showMissingReplenishmentWarehouseError() {\n        $mdToast.show(\n          $mdToast.simple()\n            .textContent($filter('translate')('ERRORS.ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION'))\n            .action($filter('translate')('APPS.SETTING'))\n            .highlightAction(true)\n            .hideDelay(7500)\n            .position('top right')).then(function(response) {\n          if (response === 'ok') {\n            $state.go('app.inventory.configuration.stocks_optimization');\n          }\n        });\n      }\n\n      function toggleFilterVisibility(property, filter) {\n        filter.visible = !filter.visible;\n        if (!filter.visible && vm.statusByProduct.filters[property].length) {\n          vm.statusByProduct.filters[property] = [];\n          vm.filterChanged();\n        }\n        saveStatus();\n      }\n\n      function filterChanged() {\n        resetPagination();\n        saveStatus();\n        getGridPage();\n      }\n\n      function resetPagination() {\n        if (isProductView() && vm.gridApiByProduct) {\n          vm.gridApiByProduct.grid.options.paginationCurrentPage = 1;\n        } else if (isProviderView() && vm.gridApiByProvider) {\n          vm.gridApiByProvider.grid.options.paginationCurrentPage = 1;\n        }\n      }\n\n      function downloadCSV() {\n        if (vm.exporting) {\n          return;\n        }\n        vm.exporting = true;\n\n        var url = api.urls.inventories.productVariants.replace('/:id', '').replace(':option', 'store-purchases-by-product-csv');\n        fetch(url + '?' + new URLSearchParams(getGridPostBodyByProduct()), {\n          method: 'GET', headers: {\n            'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n          }, signal: vm.abortController.signal\n        })\n          .then(function(response) {\n            return response.json();\n          })\n          .then(function(data) {\n            if (data.success === true) {\n              $mdDialog.show(\n                $mdDialog.alert()\n                  .clickOutsideToClose(true)\n                  .parent(window.angular.element(document.body))\n                  .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                  .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', { email: Session.user.email }))\n                  .ok($filter('translate')('GENERAL.CLOSE'))\n              );\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.exporting = false;\n          });\n      }\n\n      function isProductView() {\n        return vm.view === vm.VIEW_BY_PRODUCT;\n      }\n\n      function isProviderView() {\n        return vm.view === vm.VIEW_BY_PROVIDER;\n      }\n\n      function getGridPage() {\n        if (isProductView()) {\n          getGridPageByProduct();\n        } else if (isProviderView()) {\n          getGridPageByProvider();\n        }\n      }\n\n      function getGridPageByProvider() {\n        if (vm.loading) {\n          vm.abortController.abort();\n          vm.abortController = new window.AbortController();\n        }\n\n        vm.loading = true;\n\n        var url = api.urls.inventories.warehouses.replace(':id/', '').replace(':option', 'purchase_report');\n\n        fetch(url, {\n          method: 'POST',\n          headers: {\n            'Authorization': 'Token ' + Session.token,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify(getGridPostBodyByProvider()),\n          signal: vm.abortController.signal\n        })\n          .then(function(response) {\n            return response.json();\n          })\n          .then(function(data) {\n            vm.loading = false;\n            vm.uiGridByProviderInitialize = true;\n            vm.gridOptionsByProvider.data = data.data;\n\n            vm.gridOptionsByProvider.totalItems = data.recordsTotal;\n            if (data.data.length) {\n              vm.orderQuantities = {};\n              data.data.forEach(function(item) {\n                if (!vm.orderQuantities[item.item_external_id]) {\n                  vm.orderQuantities[item.item_external_id] = {};\n                }\n                vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n              });\n              updateTotalDraftByProvider();\n              vm.gridApiByProvider.core.handleWindowResize(); // fix for grid not rendering correctly\n            }\n            $scope.$apply();\n          })\n          .catch(function(error) {\n            vm.loading = false;\n            $scope.$apply();\n            console.error('Error loading provider grid data:', error);\n          });\n      }\n\n      function updateTotalDraftByProvider() {\n        var providersIdsWithWarehousesIdsDict = [];\n        vm.gridOptionsByProvider.data.forEach(function(item) {\n          providersIdsWithWarehousesIdsDict.push([item.provider_external_id, item.location_external_id]);\n        });\n        api.inventories.warehouses.save(\n          {\n            option: 'ai_purchase_draft_orders_totals',\n            provider_ids_with_warehouses_ids_dict: providersIdsWithWarehousesIdsDict\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.totalDraftByProvider = response.data;\n            }\n          }\n        );\n      }\n\n      function toggleView() {\n        if (isProductView()) {\n          vm.view = vm.VIEW_BY_PROVIDER;\n          vm.selectedStatus = vm.statusByProvider;\n        } else if (isProviderView()) {\n          vm.view = vm.VIEW_BY_PRODUCT;\n          vm.selectedStatus = vm.statusByProduct;\n        }\n      }\n\n      function applyAvailabilityStatusFilter(availabilityStatus) {\n        if (isProductView()) {\n          vm.activePresetFilter = availabilityStatus;\n          vm.statusByProduct.filters.availabilityStatuses = availabilityStatus ? [availabilityStatus] : [];\n          filterChanged();\n        } else if (isProviderView()) {\n          // TODO\n        }\n      }\n\n      function getAggregatedByStatusFilter(availabilityStatus) {\n        if (!availabilityStatus) {\n          return;\n        }\n        if (vm.countByAvailabilityStatusDict && vm.countByAvailabilityStatusDict[availabilityStatus]) {\n          return vm.countByAvailabilityStatusDict[availabilityStatus];\n        }\n        return 0;\n      }\n\n      function showSalesAnalysisPopup(locatedItemId) {\n        api.inventories.productVariants.get({\n          option: 'get_located_item_sales_analysis_result',\n          id: locatedItemId\n        }, function(response) {\n          if (response && response.data) {\n            $mdDialog.show({\n              controller: SalesAnalysisDialogController,\n              controllerAs: 'vm',\n              templateUrl: 'app/main/apps/planning/views/reorder/sales-analysis-dialog.html',\n              parent: angular.element(document.body),\n              clickOutsideToClose: true,\n              locals: {\n                salesData: response.data\n              }\n            });\n          }\n        }, function(error) {\n          $mdToast.show($mdToast.simple().textContent('Error fetching sales analysis data').position('top right'));\n        });\n      }\n\n      function SalesAnalysisDialogController($scope, $mdDialog, salesData, UiGridService) {\n        var vm = this;\n        vm.salesData = salesData;\n\n        vm.gridOptions = UiGridService.getGridOptions({\n          rowHeight: 40,\n          enableSorting: true,\n          columnDefs: [\n            { field: 'location_name', displayName: 'Location' },\n            { field: 'total_units_sold', displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_UNITS_SOLD') },\n            { field: 'retail_units_sold', displayName: 'retail units sold' },\n            { field: 'wholesale_units_sold', displayName: 'Wholesale Units Sold' },\n            {\n              field: 'avg_daily_total_units_sold',\n              displayName: $filter('translate')('INVENTORY_DASHBOARD.AVERAGE_DAILY_SALES')\n            },\n            { field: 'days_with_stock', displayName: 'days with stock' },\n            { field: 'start_date', displayName: 'Start Date', cellFilter: 'date:\"dd/MM/yyyy\"' },\n            { field: 'end_date', displayName: 'End Date', cellFilter: 'date:\"dd/MM/yyyy\"' }\n          ],\n          data: vm.salesData\n        });\n\n        vm.closeDialog = function() {\n          $mdDialog.hide();\n        };\n      }\n\n    }\n  }\n)();\n\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.manufacture')\n    .controller('ManufactureProductionController', ManufactureProductionController);\n\n  /** @ngInject */\n  function ManufactureProductionController($scope, $state, $stateParams, $mdToast, $filter, $mdDialog, api,\n                                       PRODUCTION_ORDER_STATUSES, Session) {\n\n    // Data\n    var vm = this;\n    vm.isNewProduction = !$state.params.id;\n    vm.idCollection = $stateParams.idCollection;\n    vm.production = null;\n    vm.currentNavItem = \"\";\n\n\n    // Methods\n    vm.gotoProductions = gotoProductions;\n    vm.getStatusLabel = getStatusLabel;\n    vm.delete = deleteProduction;\n\n\n    // Functions\n    function gotoProductions() {\n      $state.go('app.manufacture.productions');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('PRODUCTIONS.' + PRODUCTION_ORDER_STATUSES[status]);\n    }\n\n    function deleteProduction() {\n      if (Session.hasPermission('manufacture.productions.delete')) {\n        api.manufactures.productionOrders.delete(\n          {\n            id:vm.production.id\n          },\n          function (response) {\n            $state.go('app.manufacture.productions');\n          }\n        );\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.manufacture')\n    .controller('ProductionsController', ProductionsController);\n\n  /** @ngInject */\n  function ProductionsController($scope, $http, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                                 Session, PRODUCTION_ORDER_STATUSES, PRODUCTION_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate,\n                                 WarehousesData, SeasonsData) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = PRODUCTION_ORDER_STATUSES;\n    vm.orderStatusColors = PRODUCTION_ORDER_STATUS_COLORS;\n    vm.search = null;\n\n    vm.status = {\n      filters: {\n        filterStatus: '',\n        filterTargetWarehouse: ''\n      }\n    };\n\n    vm.statusList = getStatusListByDict();\n    vm.warehouses = WarehousesData.results;\n    vm.seasons = SeasonsData.results;\n    vm.warehousesById = {};\n    vm.seasonsById = {};\n    vm.filtersNotifications = 0;\n    vm.storageLabel = 'ProductionsInventory::filters';\n\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterTargetWarehouse: 2\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.manufactures.productionOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[5, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableProductionsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableProductionsController'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          if (state.columns[vm.dicFilterColumns.filterStatus].search.search.indexOf(',') === -1) {\n            if (state.columns[vm.dicFilterColumns.filterStatus].search.search === '') {\n              vm.filterStatus = [];\n            } else {\n              vm.filterStatus = [state.columns[vm.dicFilterColumns.filterStatus].search.search];\n            }\n          } else {\n            vm.filterStatus = state.columns[vm.dicFilterColumns.filterStatus].search.search.split(',');\n          }\n          vm.filterTargetWarehouse = state.columns[vm.dicFilterColumns.filterTargetWarehouse].search.search;\n        }\n        return state;\n      }\n    };\n    vm.dtColumns = [];\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.filterByColumn = filterByColumn;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.clearFilter = clearFilter;\n    vm.saveStatus = saveStatus;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      vm.seasons.map(function(season) {\n        vm.seasonsById[season.id] = season;\n      });\n\n      vm.dtColumns = [\n        DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('PRODUCTIONS.SERIAL_NUMBER')).renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.manufacture.productions.production.products({id:' + full.id + '})\">' + data + '</a>';\n        }),\n        DTColumnBuilder.newColumn('status').withTitle($filter('translate')('PRODUCTIONS.STATUS')).renderWith(function(data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('PRODUCTIONS.' + PRODUCTION_ORDER_STATUSES[data]) + '</span>';\n        }),\n        /*DTColumnBuilder.newColumn('source_warehouse__name').withTitle($filter('translate')('PRODUCTIONS.SOURCE_WAREHOUSE')).renderWith(function(data, type, full) {\n          return vm.warehousesById[full.source_warehouse].name;\n        }),*/\n        DTColumnBuilder.newColumn('target_warehouse__name').withTitle($filter('translate')('PRODUCTIONS.TARGET_WAREHOUSE')).renderWith(function(data, type, full) {\n          return vm.warehousesById[full.target_warehouse] ? vm.warehousesById[full.target_warehouse].name : '';\n        }),\n        DTColumnBuilder.newColumn('season').withTitle($filter('translate')('PRODUCTIONS.SEASON')).renderWith(function(data, type, full) {\n          return vm.seasonsById[data] ? vm.seasonsById[data].name : '-';\n        }).notSortable(),\n        DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('PRODUCTIONS.CREATION_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('start_date').withTitle($filter('translate')('PRODUCTIONS.START_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('cancel_date').withTitle($filter('translate')('PRODUCTIONS.END_DATE')).renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        /*DTColumnBuilder.newColumn('cancel_date').withTitle($filter('translate')('PRODUCTIONS.CANCEL_DATE')).renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),*/\n        DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('TRANSFERS.ITEMS')).notSortable()\n      ];\n\n      $scope.$watch('vm.status.filters.filterStatus', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterStatus, vm.dicFilterColumns.filterStatus);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n\n      $scope.$watch('vm.status.filters.filterTargetWarehouse', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterTargetWarehouse, vm.dicFilterColumns.filterTargetWarehouse);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n      loadStatus();\n    }\n\n    function clearFilter() {\n      vm.status.filters = {\n        filterStatus: '',\n        filterTargetWarehouse: ''\n      };\n    }\n\n    function saveStatus() {\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.status));\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        updateFilterNotifications();\n      }\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#production-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * Toggle sidenav\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.manufacture.productions.production.products', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Applies the filter parameter to the column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    /**\n     * Creates a list of status from TRANSFER_ORDER_STATUSES cons\n     * @returns {Array}\n     */\n    function getStatusListByDict() {\n      var result = [];\n      for (var id in PRODUCTION_ORDER_STATUSES) {\n        result.push({ code: id, name: PRODUCTION_ORDER_STATUSES[id] });\n      }\n      return result;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('WarehousesController', WarehousesController);\n\n  /** @ngInject */\n  function WarehousesController(\n    HTTP_STATUS,\n    $mdDialog,\n    $mdToast,\n    $scope,\n    $state,\n    $filter,\n    api,\n    Session,\n    PricingTiersData,\n    ContractedPlanLimitData,\n    ContractedPlanLimit,\n    hotkeys) {\n    var vm = this;\n\n    // Data\n    vm.currentNavItem = '';\n    vm.map = null;\n    vm.search = '';\n    vm.focusSearch = false;\n    vm.contractedPlanLimits = [];\n    vm.hasSubscription = Session.hasSubscription;\n    var customMapStyles = [\n      {\n        'featureType': 'all',\n        'elementType': 'geometry.fill',\n        'stylers': [\n          {\n            'weight': '2.00'\n          }\n        ]\n      },\n      {\n        'featureType': 'all',\n        'elementType': 'geometry.stroke',\n        'stylers': [\n          {\n            'color': '#9c9c9c'\n          }\n        ]\n      },\n      {\n        'featureType': 'all',\n        'elementType': 'labels.text',\n        'stylers': [\n          {\n            'visibility': 'on'\n          }\n        ]\n      },\n      {\n        'featureType': 'landscape',\n        'elementType': 'all',\n        'stylers': [\n          {\n            'color': '#f2f2f2'\n          }\n        ]\n      },\n      {\n        'featureType': 'landscape',\n        'elementType': 'geometry.fill',\n        'stylers': [\n          {\n            'color': '#E0E0E0'\n          }\n        ]\n      },\n      {\n        'featureType': 'landscape.man_made',\n        'elementType': 'geometry.fill',\n        'stylers': [\n          {\n            'color': '#E0E0E0'\n          }\n        ]\n      },\n      {\n        'featureType': 'poi',\n        'elementType': 'all',\n        'stylers': [\n          {\n            'visibility': 'off'\n          }\n        ]\n      },\n      {\n        'featureType': 'road',\n        'elementType': 'all',\n        'stylers': [\n          {\n            'saturation': -100\n          },\n          {\n            'lightness': 45\n          }\n        ]\n      },\n      {\n        'featureType': 'road',\n        'elementType': 'geometry.fill',\n        'stylers': [\n          {\n            'color': '#eeeeee'\n          }\n        ]\n      },\n      {\n        'featureType': 'road',\n        'elementType': 'labels.text.fill',\n        'stylers': [\n          {\n            'color': '#7b7b7b'\n          }\n        ]\n      },\n      {\n        'featureType': 'road',\n        'elementType': 'labels.text.stroke',\n        'stylers': [\n          {\n            'color': '#ffffff'\n          }\n        ]\n      },\n      {\n        'featureType': 'road.highway',\n        'elementType': 'all',\n        'stylers': [\n          {\n            'visibility': 'simplified'\n          }\n        ]\n      },\n      {\n        'featureType': 'road.arterial',\n        'elementType': 'labels.icon',\n        'stylers': [\n          {\n            'visibility': 'off'\n          }\n        ]\n      },\n      {\n        'featureType': 'transit',\n        'elementType': 'all',\n        'stylers': [\n          {\n            'visibility': 'off'\n          }\n        ]\n      },\n      {\n        'featureType': 'water',\n        'elementType': 'all',\n        'stylers': [\n          {\n            'color': '#c9cffb'\n          },\n          {\n            'visibility': 'on'\n          }\n        ]\n      },\n      {\n        'featureType': 'water',\n        'elementType': 'geometry.fill',\n        'stylers': [\n          {\n            'color': '#ffffff'\n          }\n        ]\n      },\n      {\n        'featureType': 'water',\n        'elementType': 'labels.text.fill',\n        'stylers': [\n          {\n            'color': '#ffffff'\n          }\n        ]\n      },\n      {\n        'featureType': 'water',\n        'elementType': 'labels.text.stroke',\n        'stylers': [\n          {\n            'color': '#ffffff'\n          }\n        ]\n      }\n    ];\n\n\n    // Initialize\n    initialize();\n\n    // Methods\n    vm.newWarehouseClicked = newWarehouseClicked;\n    vm.blockCreation = blockCreation;\n    vm.allowCreation = allowCreation;\n    vm.focusSearch = focusSearch;\n    vm.warehouseSearchFilter = warehouseSearchFilter;\n\n    // Functions\n    function initialize() {\n      initMap();\n      initHotKeys();\n\n      api.inventories.warehouses.list(\n        function(response, callback, status) {\n          vm.warehouses = response.results;\n          initWarehouseMarkers();\n        }\n      );\n\n      if (ContractedPlanLimitData.results.length) {\n        ContractedPlanLimitData.results.forEach(function(cpl) {\n          vm.contractedPlanLimits.push(new ContractedPlanLimit(cpl));\n        });\n      }\n    }\n\n    function initMap() {\n      vm.map = new google.maps.Map(document.getElementById('warehouses-map'), {\n        center: { lat: 0, lng: 0 },\n        maxZoom: 17,\n        styles: customMapStyles\n      });\n    }\n\n    function initHotKeys() {\n      hotkeys.add({\n        combo: 'mod+k',\n        description: 'Obrir el cercador',\n        allowIn: ['INPUT', 'TEXTAREA'],\n        callback: function(event) {\n          focusSearch();\n        }\n      });\n\n      vm.hotkeyHtml = hotkeys.get('mod+k')\n        .format()[0]\n        .split(' + ')\n        .map(function(key) {\n          return '<kbd>' + key + '</kbd>';\n        }).join('<span class=\"kbd-plus\">+</span>');\n    }\n\n    function initWarehouseMarkers() {\n      var bounds = new google.maps.LatLngBounds();\n      var infoWindowTemplate = '<div class=\"h4 mb-8\">NAME</div><div>LOCATION</div>';\n\n      vm.warehouses.filter(function(warehouse) {\n        return warehouse.latitude && warehouse.longitude;\n      }).forEach(function(warehouse) {\n        var color = warehouse.isWarehouse() ? '#FFC107' : '#4a5ff0';\n        var marker = new google.maps.Marker({\n          position: new google.maps.LatLng(warehouse.latitude, warehouse.longitude),\n          map: vm.map,\n          icon: {\n            path: 'M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z',\n            scale: 1.5,\n            fillColor: color,\n            fillOpacity: 1,\n            strokeWeight: 0,\n            strokeColor: color,\n            anchor: new google.maps.Point(10, 20)\n          }\n        });\n        var infoWindow = new google.maps.InfoWindow({\n          content: infoWindowTemplate.replace('NAME', warehouse.name).replace('LOCATION', $filter('location')(warehouse))\n        });\n        marker.addListener('click', function() {\n          infoWindow.open(vm.map, marker);\n        });\n        bounds.extend(marker.position);\n      });\n      vm.map.fitBounds(bounds);\n    }\n\n    function blockCreation() {\n      if (!vm.contractedPlanLimits.length) {\n        return false;\n      }\n\n      for (var i = 0; i < vm.contractedPlanLimits.length; ++i) {\n        if (vm.contractedPlanLimits[i].blocksCreation()) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    function allowCreation() {\n      if (!vm.contractedPlanLimits.length) {\n        return true;\n      }\n\n      for (var i = 0; i < vm.contractedPlanLimits.length; ++i) {\n        if (vm.contractedPlanLimits[i].allowsCreation()) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    function newWarehouseClicked(ev) {\n      if (Session.hasPermission('inventory.warehouses.create')) {\n        if (allowCreation()) {\n          $mdDialog.show({\n            controller: 'WarehouseDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/inventory/views/warehouses/dialogs/warehouse-dialog.html',\n            parent: angular.element(document.body),\n            targetEvent: ev,\n            clickOutsideToClose: true,\n            fullscreen: $scope.customFullscreen,\n            locals: {\n              parameters: {\n                contractedPlanLimits: vm.contractedPlanLimits\n              }\n            },\n            resolve: {\n              pricingTiers: function() {\n                return PricingTiersData.results;\n              }\n            }\n          }).then(function(warehouse) {\n            saveWarehouse(warehouse);\n          }, function() {\n            // Cancel button clicked\n          });\n        } else {\n          $state.go('app.account.upgrade_plan', {\n            source: 'inventory.warehouses.create'\n          });\n        }\n      }\n    }\n\n    function saveWarehouse(warehouse) {\n      // Save button clicked\n      api.inventories.warehouses.save(\n        warehouse,\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            if (warehouse.isWarehouse()) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSES.WAREHOUSE_CREATED')).position('top right'));\n            } else if (warehouse.isStore()) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSES.STORE_CREATED')).position('top right'));\n            }\n            vm.warehouses.push(response);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function focusSearch() {\n      vm.focusSearch = true;\n    }\n\n    function warehouseSearchFilter(warehouse) {\n      if (!vm.search) {\n        return true;\n      }\n\n      var term = vm.search.toLowerCase();\n      return (\n        (warehouse.name && warehouse.name.toLowerCase().includes(term)) ||\n        (warehouse.code && warehouse.code.toLowerCase().includes(term)) ||\n        (warehouse.city && warehouse.city.toLowerCase().includes(term))\n      );\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('WarehouseController', WarehouseController);\n\n  /** @ngInject */\n  function WarehouseController($document,\n                               $filter,\n                               $mdToast,\n                               $mdDialog,\n                               $state,\n                               $scope,\n                               api,\n                               WarehousesData,\n                               WarehouseData,\n                               HTTP_STATUS,\n                               WAREHOUSE_TYPES) {\n    var vm = this;\n\n    // Data\n    vm.warehouse = WarehouseData;\n    vm.warehouses = WarehousesData.results;\n    vm.currentNavItem = \"\";\n    vm.loadingDelete = false;\n    vm.loading = false;\n    vm.WAREHOUSE_TYPES = WAREHOUSE_TYPES;\n\n    // Methods\n    vm.transferAll = transferAll;\n    vm.deleteWarehouse = deleteWarehouse;\n    vm.handleNewStockLocation = handleNewStockLocation;\n\n    // Functions\n    function transferAll() {\n      var transferAllDialog = {\n        controller: 'TransferAllDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/transfer-all.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        resolve: {\n          unableToDelete: function () {\n            return false;\n          },\n          sourceWarehouseId: function () {\n            return vm.warehouse.id;\n          }\n        }\n      }\n      $mdDialog.show(transferAllDialog);\n    }\n\n    function deleteWarehouse() {\n      if (vm.loadingDelete) {\n        return;\n      }\n\n      $mdDialog.show({\n          controller: 'DeleteWarehouseDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/delete-warehouse/delete-warehouse-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false\n        }).then(function () {\n          vm.loadingDelete = true;\n          api.inventories.warehouses.delete({\n            id: vm.warehouse.id,\n          }, function (response, callback, status){\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT){\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('WAREHOUSE.WAREHOUSE_DELETED')).position('top right'));\n              $state.go('app.inventory.warehouses');\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.loadingDelete = false;\n          });\n      });\n    }\n\n    function handleNewStockLocation() {\n      $scope.$broadcast('WarehouseController::newStockLocation');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('UIDsController', UIDsController);\n\n  /** @ngInject */\n  function UIDsController($scope, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n    Session, SEARCH_MAX_LENGTH, $translate,\n    WarehousesData) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.search = null;\n    vm.filterStatus = \"\";\n    vm.filterWarehouse = \"\";\n    vm.filterTargetWarehouse = \"\";\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterWarehouse: 2,\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.uidStocksList.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      ordering: false\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('product_code_annotation').withTitle($filter('translate')('PRODUCT.PRODUCT')).\n      renderWith(function (data, type, full) {\n        var result = '<div layout=\"row\"';\n        result += 'layout-align=\"start center\">';\n        if(full.product_cover_annotation){\n          result += '<img class=\"thumbnail-40 mr-10\"';\n           result += 'src=\"' + full.product_cover_annotation + '\" />';\n        } else {\n          result += '<img class=\"thumbnail-40 mr-10 default-icon\"';\n           result += 'src=\"/assets/images/package-variant-closed.9c71cbbe.png\" />';\n        }\n\n        result +=  '<div layout=\"column\" class=\"mr-8\">';\n        result += '<a ui-sref=\"app.inventory.products.product.uid-stocks({id:' + full.product_id_annotation + '})\">';\n        result += full.product_name_annotation + ' (' + full.product_variant_size_name_annotation + '/' + full.product_variant_color_name_annotation + ')';\n        result += '</a>';\n\n        result += '<small class=\"secondary-text\">';\n        result += full.product_variant_sku_annotation;\n\n        if(full.product_variant_barcode_annotation){\n          result += '<span class=\"ml-8 barcode-text\">' + full.product_variant_barcode_annotation + '</span>';\n        }\n\n        result += '</div>';\n        result += '</div>';\n        return result;\n      }),\n      DTColumnBuilder.newColumn('product_id_annotation').withTitle($filter('translate')('PRODUCT.UID')).renderWith(function (data, type, full) {\n        return '<span class=\"uid-text\">' + full.uid_annotation + '</span>';\n      }),\n      DTColumnBuilder.newColumn('expiration_date_annotation').withTitle($filter('translate')('PRODUCT.EXPIRATION_DATE')).withClass('text-center').renderWith(function (data, type, full) {\n        if(full.expiration_date_annotation){\n          return $filter('date')(new Date(full.expiration_date_annotation), 'dd/MM/yyyy');\n        }\n        return '';\n      }),\n      DTColumnBuilder.newColumn('total_purchased').withTitle($filter('translate')('PRODUCT.PURCHASED')).withClass('text-right').renderWith(function (data, type, full) {\n        return full.total_purchased;\n      }),\n      DTColumnBuilder.newColumn('total_avilable').withTitle($filter('translate')('PRODUCT.STOCK')).withClass('text-right').renderWith(function (data, type, full) {\n        return full.total_available;\n      }),\n      DTColumnBuilder.newColumn('total_allocated').withTitle($filter('translate')('PRODUCT.ALLOCATED')).withClass('text-right').renderWith(function (data, type, full) {\n        return full.total_allocated;\n      }),\n      DTColumnBuilder.newColumn('total_sold').withTitle($filter('translate')('PRODUCT.SOLD')).withClass('text-right').renderWith(function (data, type, full) {\n        return full.total_sold;\n      })\n    ];\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.toggleInArray = msUtils.toggleInArray;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function (warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      $scope.$watch('vm.filterWarehouse', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterWarehouse, vm.dicFilterColumns.filterWarehouse);\n        }\n      }, false);\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#uid-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function () {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function filterByColumn(filter, column) {\n      if(vm.dtInstance && vm.dtInstance.DataTable){\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('TransfersController', TransfersController);\n\n  /** @ngInject */\n  function TransfersController($scope, $rootScope, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils, Session, TRANSFER_ORDER_STATUSES, TRANSFER_ORDER_STATUSES_REVERSE, HTTP_STATUS, TRANSFER_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate, WarehousesData, UiGridService) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.status = null;\n    vm.loading = false;\n    vm.currentNavItem = getCurrentNavItem();\n    vm.totalsByStatus = {};\n    vm.orderStatuses = [];\n    vm.orderStatusColors = TRANSFER_ORDER_STATUS_COLORS;\n\n    // Filters data\n    vm.transferTypes = [];\n    vm.warehouses = WarehousesData.results;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.reloadTransfers = reloadTransfers;\n    vm.handleNavClick = handleNavClick;\n    vm.getCurrentNavItem = getCurrentNavItem;\n    vm.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          type: null,\n          statuses: [],\n          targetWarehouses: [],\n          sourceWarehouses: []\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      }\n\n      vm.orderStatuses = Object.keys(TRANSFER_ORDER_STATUSES).map(function(key) {\n        return { code: key, name: TRANSFER_ORDER_STATUSES[key] };\n      });\n\n      vm.transfersTypes = [{\n        value: null, name: 'TRANSFERS.ALL_TRANSFER_TYPES'\n      }, {\n        value: 'transfer', name: 'TRANSFERS.ONLY_TRANSFERS'\n      }, {\n        value: 'replenishment', name: 'TRANSFERS.ONLY_REPLENISHMENTS'\n      }];\n\n      getTotals();\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function reloadTransfers() {\n      if (vm.reloadTransfersTimeout) {\n          $timeout.cancel(vm.reloadTransfersTimeout);\n      }\n      vm.reloadTransfersTimeout = $timeout(function(){\n          $rootScope.$broadcast('ndGrid::filtersChanged');\n          getTotals();\n      }, 1000);\n    }\n\n    function handleNavClick(option) {\n      vm.loading = true;\n      vm.currentNavItem = option;\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      } else {\n        vm.status.filters.statuses = [];\n      }\n      localStorage.setItem(Session.company.id + '::' + $state.current.name + '::TransfersController::currentNavItem', option);\n      reloadTransfers();\n    }\n\n    function getCurrentNavItem() {\n      if (localStorage.getItem(Session.company.id + '::' + $state.current.name + '::TransfersController::currentNavItem')) {\n        return localStorage.getItem(Session.company.id + '::' + $state.current.name + '::TransfersController::currentNavItem');\n      }\n      return 1;\n    }\n\n    function getTotals() {\n      vm.loading = true;\n      api.inventories.transferOrders.list({\n        option: 'totals'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.totalsByStatus = {};\n          response.status_counts.forEach(function(counter) {\n            vm.totalsByStatus[counter['status']] = counter['count'];\n          });\n        }\n        vm.loading = false;\n      });\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      if (vm.currentNavItem == 'all') {\n        result += vm.status.filters.statuses && vm.status.filters.statuses.length > 0 ? 1 : 0;\n      }\n      result += vm.status.filters.targetWarehouses && vm.status.filters.targetWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.sourceWarehouses && vm.status.filters.sourceWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.type !== null ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      if (vm.currentNavItem === 'all') {\n        vm.status.filters.statuses = [];\n      }\n      vm.status.filters.type = null;\n      vm.status.filters.targetWarehouses = [];\n      vm.status.filters.sourceWarehouses = [];\n      reloadTransfers();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryTransferController', InventoryTransferController);\n\n  /** @ngInject */\n  function InventoryTransferController(api,\n                                       $scope,\n                                       $state,\n                                       $mdMedia,\n                                       $mdSidenav,\n                                       $filter,\n                                       TRANSFER_ORDER_STATUSES,\n                                       TRANSFER_ORDER_STATUSES_REVERSE,\n                                       TRANSFER_ORDER_STATUS_COLORS,\n                                       Session) {\n\n    // Data\n    var vm = this;\n    vm.isNewTransfer = !$state.params.id;\n    vm.isReplenishment = !!$state.params.type;\n    vm.transfer = null;\n    vm.currentNavItem = \"\";\n    vm.TRANSFER_ORDER_STATUSES_REVERSE = TRANSFER_ORDER_STATUSES_REVERSE;\n    vm.pendingBarcodes = [];\n\n    // Methods\n    vm.gotoTransfers = gotoTransfers;\n    vm.getStatusLabel = getStatusLabel;\n    vm.delete = deleteTransfer;\n    vm.toggleSidenav = toggleSidenav;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.showDeleteButton = showDeleteButton;\n\n    initialize();\n\n    function initialize() {\n      $scope.changeOrderStatus = $scope.$on('changeOrderStatus::orderType', function(event, data) {\n        changeOrderStatus(data.status);\n      });\n\n      // Unregister Events\n      $scope.$on('$destroy', function () {\n        $scope.changeOrderStatus();\n      });\n    }\n\n      function changeOrderStatus(status) {\n        vm.transfer.status = status;\n      }\n\n    // Functions\n    function gotoTransfers() {\n      $state.go('app.inventory.transfers');\n    }\n\n    function getStatusColorClass(status) {\n      return TRANSFER_ORDER_STATUS_COLORS[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]);\n    }\n\n    function toggleSidenav(sidenavId){\n      if(!$mdMedia('gt-md')){\n        $mdSidenav(sidenavId).toggle();\n      }else{\n        vm.barcodeLogOpened = !vm.barcodeLogOpened;\n      }\n    }\n\n    function showDeleteButton() {\n      if (!vm.transfer) {\n        return;\n      }\n      return (vm.transfer.status === 1 && vm.transfer.is_replenishment) || (vm.transfer.status === 2 && !vm.transfer.is_replenishment);\n    }\n\n    function deleteTransfer() {\n      if (Session.hasPermission('inventory.transfers.delete')) {\n        api.inventories.transferOrders.delete(\n          {\n            id:vm.transfer.id\n          },\n          function (response) {\n            $state.go('app.inventory.transfers');\n          }\n        )\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('StocktakingsController', StocktakingsController);\n\n  /** @ngInject */\n  function StocktakingsController($scope, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                                  Session, STOCKTAKING_STATUSES, STOCKTAKING_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate,\n                                  WarehousesData) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = STOCKTAKING_STATUSES;\n    vm.stocktakingStatuses = [\n      STOCKTAKING_STATUSES.DRAFT,\n      STOCKTAKING_STATUSES.APPLIED\n    ];\n\n    vm.orderStatusColors = STOCKTAKING_STATUS_COLORS;\n    vm.search = null;\n\n    vm.filterStatus = '';\n    vm.statusList = getStatusListByDict();\n    vm.filterWarehouse = '';\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterWarehouse: 6\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.stocktakings.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          if (vm.search) {\n            d.search.value = vm.search;\n          }\n        }\n      },\n      order: [[2, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableStocktakingsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableStocktakingsController'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n\n          if (state.columns[vm.dicFilterColumns.filterStatus].search.search.indexOf(',') === -1) {\n            if (state.columns[vm.dicFilterColumns.filterStatus].search.search === '') {\n              vm.filterStatus = [];\n            } else {\n              vm.filterStatus = [state.columns[vm.dicFilterColumns.filterStatus].search.search];\n            }\n          } else {\n            vm.filterStatus = state.columns[vm.dicFilterColumns.filterStatus].search.search.split(',');\n          }\n          vm.filterWarehouse = state.columns[vm.dicFilterColumns.filterWarehouse].search.search;\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('STOCKTAKINGS.REFERENCE')),\n      DTColumnBuilder.newColumn('status')\n        .withTitle($filter('translate')('STOCKTAKINGS.STATUS'))\n        .renderWith(function(data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('STOCKTAKINGS.' + STOCKTAKING_STATUSES[data]) + '</span>';\n        }),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('STOCKTAKINGS.CREATION_DATE'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n      DTColumnBuilder.newColumn('created_by_instance')\n        .withTitle($filter('translate')('CUSTOMERS.CREATED_BY'))\n        .renderWith(function(data, type, full) {\n          var fullname = data.first_name + ' ' + data.last_name;\n          return (\n            '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture fullname=\"\\'' +\n            fullname +\n            '\\'\"  class=\"mr-8\"></nd-user-picture> ' +\n            fullname +\n            '</div> '\n          );\n        })\n        .withOption('orderData', 4),\n      DTColumnBuilder.newColumn('created_by')\n        .withTitle('')\n        .notVisible(),\n      DTColumnBuilder.newColumn('partial')\n        .withTitle($filter('translate')('STOCKTAKINGS.TYPE'))\n        .renderWith(function(data, type, full) {\n          if (!full.partial) {\n            return $filter('translate')('STOCKTAKINGS.TYPE_TOTAL');\n          } else {\n            var text = '<span translate=\\'STOCKTAKINGS.TYPE_PARTIAL\\'></span>';\n            var result = '';\n            if (full.brand) {\n              result += full.brand_instance.name;\n            }\n\n            if (full.category) {\n              if (result !== '') result += ' / ';\n              result += full.category_instance.name;\n            }\n\n            if (full.subcategory) {\n              if (result !== '') result += ' / ';\n              result += full.subcategory_instance.name;\n            }\n\n            if (full.collection) {\n              if (result !== '') result += ' / ';\n              result += full.collection_instance.code;\n            }\n\n            if (full.season) {\n              if (result !== '') result += ' / ';\n              result += full.season_instance.name;\n            }\n\n            if (result !== '') {\n              return text + '<md-tooltip> ' + result + ' </md-tooltip>';\n            } else {\n              return text;\n            }\n\n\n          }\n        }),\n      DTColumnBuilder.newColumn('source_warehouse')\n        .withTitle($filter('translate')('STOCKTAKINGS.WAREHOUSE'))\n        .renderWith(function(data, type, full) {\n          if (full.source_warehouse_instance) {\n            return full.source_warehouse_instance.name;\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('applied_at')\n        .withTitle($filter('translate')('STOCKTAKINGS.APPLIED_DATE'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        })\n    ];\n    if (Session.hasPermissions('inventory.stocktakings.stocktaking.products.show_previous_amount')) {\n      vm.dtColumns.push(DTColumnBuilder.newColumn('product_variants_previous_amount')\n        .withTitle($filter('translate')('STOCKTAKINGS.PREVIOUS'))\n        .renderWith(function(data, type, full) {\n          if (full.status == vm.orderStatuses.DRAFT) {\n            return '<span class=\"secondary-text\">' + data + '</span>';\n          }\n          return data;\n        }).notSortable()\n      );\n    }\n    vm.dtColumns.push(\n      DTColumnBuilder.newColumn('product_variants_amount')\n        .withTitle($filter('translate')('STOCKTAKINGS.DIFFERENCE'))\n        .renderWith(function(data, type, full) {\n          if (full.status == vm.orderStatuses.DRAFT) {\n            var difference = data - full.product_variants_previous_amount;\n            return '<span class=\"secondary-text\">' + difference + '</span>';\n          }\n          return data;\n        }).notSortable()\n    );\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      $scope.$watch('vm.filterStatus', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterStatus, vm.dicFilterColumns.filterStatus);\n        }\n      }, false);\n\n      $scope.$watch('vm.filterWarehouse', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterWarehouse, vm.dicFilterColumns.filterWarehouse);\n        }\n      }, false);\n\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#stocktaking-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * Toggle sidenav\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.inventory.stocktakings.stocktaking.products', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    //http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Applies the filter parameter to the column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.filterStatus && vm.filterStatus.length > 0 ? 1 : 0;\n      result += vm.filterWarehouse != '' ? 1 : 0;\n\n      return result;\n    }\n\n    function clearFilter() {\n      vm.filterStatus = '';\n      vm.filterWarehouse = '';\n      vm.dtInstance.DataTable.draw();\n    }\n\n    /**\n     * Creates a list of status from STOCKTAKING_STATUSES cons\n     * @returns {Array}\n     */\n    function getStatusListByDict() {\n      var result = [];\n      for (var i in vm.stocktakingStatuses) {\n        var id = vm.stocktakingStatuses[i];\n        result.push({ code: id, name: STOCKTAKING_STATUSES[id] });\n      }\n      return result;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryStocktakingController', InventoryStocktakingController);\n\n  /** @ngInject */\n  function InventoryStocktakingController(api, $state, $filter, $mdDialog, STOCKTAKING_STATUSES, STOCKTAKING_STATUS_COLORS, Session) {\n\n    // Data\n    var vm = this;\n    vm.STOCKTAKING_STATUSES = STOCKTAKING_STATUSES;\n\n    vm.isNewStocktaking = !$state.params.id;\n    vm.stocktaking = null;\n    vm.currentNavItem = \"\";\n    vm.showStocktakingHistoric = false;\n    vm.stocktakingHistoricArray = [];\n    vm.stocktakingHistoricNext = null;\n    vm.orderStatusColors = STOCKTAKING_STATUS_COLORS;\n\n\n    // Methods\n    vm.gotoStocktakings = gotoStocktakings;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColor = getStatusColor;\n    vm.delete = deleteStocktaking;\n    vm.isEditable = isEditable;\n    vm.showStocktakingHistoricFunc = showStocktakingHistoricFunc;\n\n    // Functions\n    function gotoStocktakings() {\n      $state.go('app.inventory.stocktakings');\n    }\n\n    function getStatusColor(status) {\n      return vm.orderStatusColors[status];\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('STOCKTAKINGS.' + STOCKTAKING_STATUSES[status]);\n\n    }\n\n    function isEditable() {\n      return vm.stocktaking.status === STOCKTAKING_STATUSES.DRAFT &&\n        vm.stocktaking.changing_status == false && vm.stocktaking.pending_to_apply == false;\n    }\n\n    function deleteStocktaking() {\n      if (Session.hasPermission('inventory.stocktakings.delete_draft')) {\n\n        if (vm.saving || vm.stocktaking.changing_status){\n          return;\n        }\n\n        vm.saving = true;\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('STOCKTAKING.DELETE_STOCKTAKING'))\n          .htmlContent($filter('translate')('STOCKTAKING.DELETE_STOCKTAKING_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.stocktakings.delete(\n            {id: vm.stocktaking.id},\n            function (response) {\n              $state.go('app.inventory.stocktakings');\n            }\n          );\n        }, function () {\n          vm.saving = false;\n        });\n      }\n    }\n\n    function showStocktakingHistoricFunc(){\n      return vm.currentNavItem === 'products' && vm.showStocktakingHistoric;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryStocksController', InventoryStocksController);\n\n  /** @ngInject */\n  function InventoryStocksController($scope, $rootScope, $http, $document, $state, $timeout, $q, $mdSidenav, $mdMedia, $filter, $mdDialog,\n                                     $compile, api, Session, DTColumnBuilder, STOCK_FILTER_STATES, WarehousesData, CategoriesData, SitesData,\n                                     SubcategoriesData, BrandsData, SeasonsData, CONTACT_TYPES_REVERSE, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.products = {};\n    vm.searchInput = '';\n    vm.checkboxesStatuses = {};\n    vm.warehouses = WarehousesData.results;\n    vm.selectedWarehouses = [];\n    vm.view = $state.params.view == 'totals' ? 2 : 1;\n    vm.firstRow = true;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      notifications: 0,\n      filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      },\n      pageNumber: 1\n      //pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.baseUrl + 'inventories/products',\n        type: 'post',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.serializer = 'ProductStockSerializer';\n          d.long_url_get = true;\n          d.order = null;\n          d.warehouses = vm.selectedWarehouses.map(function(w) {\n            return w.id;\n          }).join(',');\n\n          // Filters (from the directive nd-products-filters\n          angular.extend(d, vm.status.filtersParams);\n\n          vm.firstRow = true;\n        }\n      },\n      className: 'text-center',\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [1, 2, 5, 10, 25],\n      pageLength: 5,\n      scrollY: 'auto',\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      displayStart: 0,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        data.status = vm.status;\n        localStorage.setItem(Session.company.id + '::dataTableInventoryStocksControllerV5', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryStocksControllerV5'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          if (angular.isDefined(state.status)) {\n            vm.status = state.status;\n          }\n          vm.filterStock = localStorage.getItem(Session.company.id + '::dataTableInventoryStocksControllerV5::filterStock') ? localStorage.getItem(Session.company.id + '::dataTableInventoryStocksControllerV5::filterStock') : '';\n        }\n        $timeout(function() {\n          $rootScope.$broadcast('ndGrid::statusLoaded');\n        }, 500);\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withOption('className', 'no-padding').renderWith(function(data, type, full) {\n        vm.products[full.id] = full;\n\n        if (vm.view == 1) {\n          return '<nd-product-stock-kpis show-info=\"true\" edit-transfers=\"true\" product=\"vm.products[' + full.id + ']\" warehouses=\"vm.selectedWarehouses\" allow-edition=\"true\"></nd-product-stock-kpis>';\n        } else {\n          if (vm.firstRow) {\n            vm.firstRow = false;\n            return '<nd-stock-overview  header=\"true\" product=\"vm.products[' + full.id + ']\" warehouses=\"vm.selectedWarehouses\"></nd-stock-overview>';\n          } else {\n            return '<nd-stock-overview  product=\"vm.products[' + full.id + ']\" warehouses=\"vm.selectedWarehouses\"></nd-stock-overview>';\n          }\n        }\n      })\n    ];\n\n    // Methods\n    vm.gotoProductDetail = gotoProductDetail;\n    vm.initialize = initialize;\n    vm.toggleSidenav = toggleSidenav;\n    vm.exists = exists;\n    vm.toggle = toggle;\n    vm.inStockChanged = inStockChanged;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.reloadProducts = reloadProducts;\n    vm.clearFilter = clearFilter;\n    vm.updateFilterNotifications = updateFilterNotifications;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      var selectedWarehouses = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryStocksWarehousesV4Controller'));\n      if (selectedWarehouses) {\n        var availableWarehousesIds = WarehousesData.results.map(function(warehouse) {\n          return warehouse.id;\n        });\n        selectedWarehouses = selectedWarehouses.filter(function(warehouse) {\n          return availableWarehousesIds.indexOf(warehouse.id) > -1;\n        });\n        vm.selectedWarehouses = selectedWarehouses;\n      } else {\n        vm.warehouses.map(function(warehouse) {\n          vm.selectedWarehouses.push(warehouse);\n        });\n      }\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function gotoProductDetail(id) {\n      $state.go('app.inventory.products.product.details', { id: id });\n    }\n\n    function initComplete() {\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#product-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 1000);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function StockDetailsController($scope, $mdDialog, product, warehouses, status) {\n\n      $scope.product = product;\n      $scope.warehouses = warehouses;\n      $scope.status = status;\n\n      $scope.hide = function() {\n        $mdDialog.hide();\n      };\n      $scope.cancel = function() {\n        $mdDialog.cancel();\n      };\n      $scope.answer = function(answer) {\n        $mdDialog.hide(answer);\n      };\n\n      $scope.changeStatus = function(status) {\n        $scope.status = status;\n      };\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function removeFalsyItems(item) {\n      return !!item;\n    }\n\n    function extractItemsId(item) {\n      return item.id;\n    }\n\n    function contains(warehouse) {\n      return vm.selectedWarehouses.findIndex(function(w) {\n        return w.id == warehouse.id;\n      });\n    }\n\n    function exists(warehouse) {\n      return contains(warehouse) > -1;\n    }\n\n    function toggle(warehouse) {\n      var index = contains(warehouse);\n      if (index > -1) {\n        vm.selectedWarehouses.splice(index, 1);\n      } else {\n        vm.selectedWarehouses.push(warehouse);\n      }\n\n      if (!!vm.timeout) {\n        $timeout.cancel(vm.timeout);\n      }\n\n      vm.timeout = $timeout(function() {\n        vm.dtInstance.DataTable.draw();\n        vm.timeout = null;\n      }, 1000);\n\n      localStorage.removeItem(Session.company.id + '::dataTableInventoryStocksWarehousesV4Controller');\n      localStorage.setItem(Session.company.id + '::dataTableInventoryStocksWarehousesV4Controller', JSON.stringify(vm.selectedWarehouses));\n    }\n\n    function hasSomeItemWithSameId(array, origin) {\n      if (!origin || !array) {\n        return true;\n      }\n\n      return array.some(function(item) {\n        return item.id === origin.id;\n      });\n    }\n\n    function barcodeListenerCallback(barcode) {\n      vm.search = barcode;\n      vm.dtInstance.DataTable.search(barcode, false, false, true).draw();\n    }\n\n    function inStockChanged() {\n      localStorage.setItem(Session.company.id + '::dataTableInventoryStocksControllerV2::filterStock', vm.filterStock);\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function reloadProducts() {\n      vm.dtInstance.DataTable.draw();\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('PurchasesCalendarController', PurchasesCalendarController);\n\n  /** @ngInject */\n  function PurchasesCalendarController($scope, $http, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                               Session, $translate, BrandsData, SeasonsData, CategoriesData, SubcategoriesData, SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.search = null;\n\n    vm.filterBrands = null;\n    vm.filterCategories = null;\n    vm.filterSubcategories = null;\n    vm.filterSeasons = null;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.calendarType='purchases'\n\n    vm.purchaseOrderProducts = [];\n    vm.currentYear = new Date().getFullYear();\n    vm.loading = false;\n    vm.popsByMonth = {};\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterTargetWarehouse: 3\n    };\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.prevYear = prevYear;\n    vm.nextYear = nextYear;\n    vm.loadOrderProductPurchases = loadOrderProductPurchases;\n    vm.getPopsOrPodps = getPopsOrPodps;\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize(){\n\n      var recovered_filters = JSON.parse(localStorage.getItem(Session.company.id + '::purchasesCalendarFiltersController'));\n      if (recovered_filters != null && angular.isDefined(recovered_filters.year)) {\n        vm.currentYear = recovered_filters.year;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.search)) {\n        vm.search = recovered_filters.search;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.brand)) {\n        vm.filterBrands = recovered_filters.brand;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.category)) {\n        vm.filterCategories = recovered_filters.category;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.subcategory)) {\n        vm.filterSubcategories = recovered_filters.subcategory;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.season)) {\n        vm.filterSeasons = recovered_filters.season;\n      }\n      if (recovered_filters != null && angular.isDefined(recovered_filters.type)) {\n        vm.calendarType = recovered_filters.type;\n      }\n\n      loadOrderProductPurchases();\n\n      $scope.$watch('vm.search', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterBrands', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterCategories', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterSubcategories', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.filterSeasons', function(newValue, oldValue){\n        if(newValue !== oldValue){loadOrderProductPurchases()}}, false);\n      $scope.$watch('vm.calendarType', function(newValue, oldValue){\n        if(newValue !== oldValue){saveFiltersStatus()}}, false);\n\n    }\n\n    function prevYear(){\n      if(vm.loading){\n        return;\n      }\n      vm.currentYear -= 1;\n      loadOrderProductPurchases();\n    }\n\n    function nextYear(){\n      if(vm.loading){\n        return;\n      }\n      vm.currentYear += 1;\n      loadOrderProductPurchases();\n    }\n\n    function getPopsOrPodps(){\n      if(vm.calendarType=='purchases'){\n        return vm.popsByMonth;\n      }else{\n        return vm.podpsByMonth;\n      }\n    }\n\n    function loadOrderProductPurchases(){\n      if(vm.loading){\n        return;\n      }\n\n      vm.loading = true;\n\n      api.inventories.purchaseOrderProducts.get({\n        option: 'calendar',\n        year: vm.currentYear,\n        brand: vm.filterBrands && vm.filterBrands.length ? vm.filterBrands.join() : null,\n        category: vm.filterCategories && vm.filterCategories.length ? vm.filterCategories.join() : null,\n        subcategory: vm.filterSubcategories && vm.filterSubcategories.length ? vm.filterSubcategories.join() : null,\n        season: vm.filterSeasons && vm.filterSeasons.length ? vm.filterSeasons.join() : null,\n        search: vm.search\n      }, function(response, callback, status){\n        \n        // Preparing Purchase Order Products to be more optim\n        vm.popByProductId = {};\n        vm.popsByMonth = {};\n        vm.purchaseOrderProducts = response.purchases;\n        vm.purchaseOrderProducts.forEach(function(pop){\n          pop.start_date = new Date(pop.start_date)\n          if(angular.isUndefined(vm.popsByMonth[pop.month])){\n            vm.popsByMonth[pop.month] = [];\n          }\n          if(angular.isUndefined(vm.popByProductId[pop.product])){\n            vm.popsByMonth[pop.product] = pop;\n          }\n          pop.type='purchase'\n          vm.popsByMonth[pop.month].push(pop);\n        });\n\n        // Preparing Purchase Order Delivery Products to be more optim\n        vm.podpsByMonth = {};\n        vm.purchaseOrderDeliveryProducts = response.deliveries;\n        vm.purchaseOrderDeliveryProducts.forEach(function(podp){\n\n          var pop = vm.popsByMonth[podp.order_product_variant__purchase_order_product__product];\n          podp.cover = angular.isDefined(pop) && angular.isDefined(pop.cover) ? pop.cover : null;\n          podp.product = podp.order_product_variant__purchase_order_product__product;\n          podp.product_code = podp.order_product_variant__purchase_order_product__product_code;\n          podp.product_name = podp.order_product_variant__purchase_order_product__product_name;\n          podp.start_date = new Date(podp.order_delivery__expected_at);\n          podp.amount = podp.received_amount__sum;\n          podp.month = new Date(podp.order_delivery__expected_at).getMonth() + 1;\n          podp.purchase_order = podp.order_delivery__purchase_order;\n          podp.order_delivery = podp.order_delivery;\n          podp.autocode = podp.order_delivery__autocode;\n\n          if(angular.isUndefined(vm.podpsByMonth[podp.month])){\n            vm.podpsByMonth[podp.month] = [];\n          }\n          podp.type='delivery'\n          vm.podpsByMonth[podp.month].push(podp);\n        });\n        \n        vm.loading = false;\n      });\n\n      saveFiltersStatus();\n    }\n\n    function saveFiltersStatus(){\n      localStorage.setItem(Session.company.id + '::purchasesCalendarFiltersController', JSON.stringify({\n        year: vm.currentYear,\n        brand: vm.filterBrands,\n        category: vm.filterCategories,\n        subcategory: vm.filterSubcategories,\n        season: vm.filterSeasons,\n        search: vm.search,\n        type: vm.calendarType\n      }));\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('PurchasesController', PurchasesController);\n\n  /** @ngInject */\n  function PurchasesController($scope, $rootScope, $http, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils, Session, PURCHASE_ORDER_STATUSES, EXPIRING_DATE_PAYMENT_STATUS, PURCHASE_ORDER_STATUS_COLORS, SEARCH_MAX_LENGTH, $translate, WarehousesData, CategoriesData, SubcategoriesData, BrandsData, SeasonsData, HTTP_STATUS, UiGridService) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.status = null;\n    vm.currentNavItem = getCurrentNavItem();\n    vm.totalsByStatus = {};\n    vm.loading = false;\n\n    // Filters data\n    vm.orderStatuses = [];\n    vm.orderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n    vm.warehouses = WarehousesData.results;\n    vm.categories = CategoriesData.results;\n    vm.subcategories = SubcategoriesData.results;\n    vm.brands = BrandsData.results;\n    vm.seasons = SeasonsData.results;\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.reloadPurchases = reloadPurchases;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.handleNavClick = handleNavClick;\n    vm.getCurrentNavItem = getCurrentNavItem;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          brands: [], categories: [], subcategories: [], seasons: [], statuses: [], targetWarehouses: [], providers: []\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      }\n\n      vm.orderStatuses = Object.keys(PURCHASE_ORDER_STATUSES).map(function(key) {\n        return { code: key, name: PURCHASE_ORDER_STATUSES[key] };\n      });\n\n      getTotals();\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function reloadPurchases() {\n      if (vm.reloadPurchasesTimeout) {\n        $timeout.cancel(vm.reloadPurchasesTimeout);\n      }\n      vm.reloadPurchasesTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n        getTotals();\n      }, 1000);\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      if (vm.currentNavItem == 'all') {\n        result += vm.status.filters.statuses && vm.status.filters.statuses.length > 0 ? 1 : 0;\n      }\n      result += vm.status.filters.targetWarehouses && vm.status.filters.targetWarehouses.length > 0 ? 1 : 0;\n      result += vm.status.filters.categories && vm.status.filters.categories.length > 0 ? 1 : 0;\n      result += vm.status.filters.subcategories && vm.status.filters.subcategories.length > 0 ? 1 : 0;\n      result += vm.status.filters.brands && vm.status.filters.brands.length > 0 ? 1 : 0;\n      result += vm.status.filters.seasons && vm.status.filters.seasons.length > 0 ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      if (vm.currentNavItem == 'all') {\n        vm.status.filters.statuses = [];\n      }\n      vm.status.filters.targetWarehouses = [];\n      vm.status.filters.categories = [];\n      vm.status.filters.subcategories = [];\n      vm.status.filters.brands = [];\n      vm.status.filters.seasons = [];\n      reloadPurchases();\n    }\n\n    function handleNavClick(option) {\n      vm.loading = true;\n      vm.currentNavItem = option;\n      if (vm.currentNavItem !== 'all') {\n        vm.status.filters.statuses = [vm.currentNavItem];\n      } else {\n        vm.status.filters.statuses = [];\n      }\n      localStorage.setItem(Session.company.id + '::' + $state.current.name + '::PurchasesController::currentNavItem', option);\n      reloadPurchases();\n    }\n\n    function getCurrentNavItem() {\n      if (localStorage.getItem(Session.company.id + '::' + $state.current.name + '::PurchasesController::currentNavItem')) {\n        return localStorage.getItem(Session.company.id + '::' + $state.current.name + '::PurchasesController::currentNavItem');\n      }\n      return 1;\n    }\n\n    function getTotals() {\n      vm.loading = true;\n      api.inventories.purchaseOrders.list({\n        option: 'totals'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.totalsByStatus = {};\n          response.status_counts.forEach(function(counter) {\n            vm.totalsByStatus[counter['status']] = counter['count'];\n          });\n        }\n        vm.loading = false;\n      });\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPurchaseController', InventoryPurchaseController);\n\n  /** @ngInject */\n  function InventoryPurchaseController($scope, $state, $stateParams, $mdToast, $filter, $mdDialog, api, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUSES_REVERSE, PURCHASE_ORDER_STATUS_COLORS, Session, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.isNewPurchase = !$state.params.id;\n    vm.idCollection = $stateParams.idCollection;\n    vm.purchase = null;\n    vm.currentNavItem = '';\n    vm.orderStatusColors = PURCHASE_ORDER_STATUS_COLORS;\n    vm.purchaseOrderStatus = PURCHASE_ORDER_STATUSES_REVERSE;\n\n    // Methods\n    vm.gotoPurchases = gotoPurchases;\n    vm.getStatusLabel = getStatusLabel;\n    vm.delete = deletePurchase;\n    vm.finish = finishPurchaseDialog;\n    vm.showInvoicesTab = showInvoicesTab;\n    vm.getStatusColorClass = getStatusColorClass;\n\n    initialize();\n\n    function initialize() {\n      $scope.changeOrderStatus = $scope.$on('changeOrderStatus::orderType', function(event, data) {\n        changeOrderStatus(data.status);\n      });\n\n      // Unregister Events\n      $scope.$on('$destroy', function() {\n        $scope.changeOrderStatus();\n      });\n    }\n\n    function changeOrderStatus(status) {\n      vm.purchase.status = status;\n    }\n\n    // Functions\n    function gotoPurchases() {\n      $state.go('app.inventory.purchases');\n    }\n\n    function getStatusLabel() {\n      return $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[vm.purchase.status]);\n    }\n\n    function getStatusColorClass() {\n      return vm.orderStatusColors[vm.purchase.status];\n    }\n\n    function deletePurchase() {\n      if (Session.hasPermission('inventory.purchases.delete')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PURCHASE.DELETE_STOCKTAKING_DIALOG_TITLE'))\n          .htmlContent($filter('translate')('PURCHASE.DELETE_STOCKTAKING_DIALOG_BODY'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          api.inventories.purchaseOrders.delete({\n            id: vm.purchase.id\n          }, function(response) {\n            $state.go('app.inventory.purchases');\n          });\n        });\n      }\n    }\n\n    function finishPurchaseDialog() {\n      if (Session.hasPermission('inventory.purchases.delete')) {\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PURCHASE.FINISH_PURCHASE_DIALOG_TITLE'))\n          .htmlContent($filter('translate')('PURCHASE.FINISH_PURCHASE_DIALOG_BODY'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('PURCHASE.FINISH'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          finishPurchase();\n        });\n      }\n    }\n\n    function finishPurchase() {\n\n      if (vm.changingStatus){\n        return;\n      }\n\n      vm.changingStatus = true;\n\n      api.inventories.purchaseOrderStatus.update({\n        id: vm.purchase.id, option: 'finish'\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.purchase.status = response.purchase_order.status;\n          vm.purchase.is_editable = response.purchase_order.is_editable;\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('PURCHASE.PURCHASE_FINISHED'))\n            .position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n            .position('top right'));\n        }\n        vm.changingStatus = false;\n      });\n    }\n\n    function showInvoicesTab() {\n      return Session.user.isSuperAdmin() && vm.purchase.status > 1;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductsController', InventoryProductsController);\n\n  /** @ngInject */\n  function InventoryProductsController($scope, $rootScope, $interval, $http, $mdMenu, $mdToast, $q, $state, $timeout,\n                                       $mdSidenav, $mdMedia, $filter, $mdDialog, $document, $compile, $stateParams, api,\n                                       Session, DTColumnBuilder, PricingTiersData, TableType, $translate, PERMISSIONS,\n                                       HTTP_STATUS, SEARCH_MAX_LENGTH, CURRENCIES, UiGridService, BarcodeService) {\n\n    var vm = this;\n\n    // Constants\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.loading = false;\n    vm.saving = false;\n    vm.timeout = null;\n    vm.pricingTiers = PricingTiersData ? PricingTiersData.results : [];\n    vm.keptSelectionArray = [];\n    $scope.currency = CURRENCIES[Session.company.currency];\n    vm.tableType = TableType;\n    vm.storageLabel = 'UIGridProductsInventory::' + vm.tableType + '::ControllerV2';\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {}, ordering: '', search: '', filtersParams: {}, notifications: 0, filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null,\n      }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      rowHeight: 40,\n      headerRowHeight: 40,\n      onRegisterApi: initializeUidGrid,\n      exporterCsvFilename: $filter('translate')('PRODUCTS.PRODUCTS') + '.csv',\n      exporterFieldCallback: function(grid, row, col, value) {\n        if (value === undefined && col.colDef.pricingTier) {\n          const tier = row.entity.pricing_tiers[col.colDef.pricingTier.id];\n          return (tier && tier.discount_price_incl_tax) || (tier && tier.price_incl_tax);\n        }\n\n        return value;\n      },\n      gridMenuCustomItems: [{\n        title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'), action: function($event) {\n          restoreGridColumns();\n        }, order: 2\n      }]\n    });\n\n    // Methods\n    vm.initialize = initialize;\n    vm.showImportDialog = showImportDialog;\n    vm.showQuickProductCreatorDialog = showQuickProductCreatorDialog;\n    vm.getGridProductsPage = getGridProductsPage;\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.clearFilter = clearFilter;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.openProductsEditDialog = openProductsEditDialog;\n    vm.printOverview = printOverview;\n    vm.filterChanged = filterChanged;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      setGridColumns();\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridProductsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.rowsRendered($scope, function() {\n        var grid = this.grid;\n        var allSelected = true;\n        grid.rows.forEach(function(part, index, array) {\n          if (vm.keptSelectionArray.includes(array[index].entity.id)) {\n            array[index].isSelected = true;\n          } else if (allSelected) {\n            allSelected = false;\n          }\n        });\n\n        if (allSelected) {\n          grid.selection.selectAll = true;\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function(row) {\n        updateSelectedRows(row);\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChangedBatch($scope, function() {\n        if (vm.gridApi.selection.getSelectAllState()) {\n          this.grid.rows.map(function(row) {\n            var idx = vm.keptSelectionArray.indexOf(row.entity.id);\n            if (idx === -1) {\n              vm.keptSelectionArray.push(row.entity.id);\n            }\n          });\n        } else {\n          this.grid.rows.map(function(row) {\n            updateSelectedRows(row);\n          });\n        }\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function(colDef) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      loadStatus();\n    }\n\n    function updateSelectedRows(changed_row) {\n      var idx = vm.keptSelectionArray.indexOf(changed_row.entity.id);\n      if (idx > -1) {\n        vm.keptSelectionArray.splice(idx, 1);\n      } else {\n        vm.keptSelectionArray.push(changed_row.entity.id);\n      }\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      // If we have to load the status, first we will change the filters which will update the table, otherwise\n      // we update the table directly\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        vm.columns = {};\n        vm.gridOptions.columnDefs = [];\n        setGridColumns();\n        updateFilterNotifications();\n        if (vm.gridApi) {\n           $timeout(function(){\n              vm.gridApi.saveState.restore($scope, vm.status.state);\n            }, 10);\n        }\n      }\n      getGridProductsPage();\n      $timeout(function(){\n        $rootScope.$broadcast('ndGrid::statusLoaded');\n      }, 500);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.status));\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function(column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n\n      setGridColumns(true);\n      getGridProductsPage();\n\n      $timeout(function () {\n        saveStatus();\n      }, 100);\n    }\n\n    function setGridColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n      angular.extend(vm.columns, {\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: getColumnStatusVisibility('cover_thumbnail', true, avoidState),\n          minWidth: 36,\n          width: 36,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<md-icon ng-if=\"!row.entity.cover_thumbnail\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' + '<img  ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>'\n        }, code: {\n          displayName: $filter('translate')('PRODUCT.CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE'),\n          field: 'code',\n          permission: true,\n          visible: getColumnStatusVisibility('code', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.inventory.products.product.overview({id:row.entity.id})\">{{row.entity.code || \\'-\\'}}</a></div>'\n        }, origin_code: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: Session.hasPermission('inventory.products.product.details.cost'),\n          visible: getColumnStatusVisibility('origin_code', false, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.origin_code || \\'-\\'}}</div>'\n        }, group_code: {\n          displayName: $filter('translate')('PRODUCT.GROUP_CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.GROUP_CODE'),\n          field: 'group_code',\n          permission: true,\n          visible: getColumnStatusVisibility('group_code', false, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.group_code || \\'-\\'}}</div>'\n        }, name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          headerTooltip: $filter('translate')('PRODUCT.NAME'),\n          field: 'name',\n          permission: true,\n          visible: getColumnStatusVisibility('name', true, avoidState),\n          minWidth: 200,\n          enableCellEdit: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.name || \\'-\\'}}</div>'\n        }, variant_barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'variant_barcode',\n          permission: vm.tableType === 'v',\n          visible: getColumnStatusVisibility('variant_barcode', true, avoidState),\n          minWidth: 200,\n          enableCellEdit: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.variant_barcode || \\'-\\'}}</div>'\n        }, variant_sku: {\n          displayName: $filter('translate')('PRODUCT.SKU'),\n          headerTooltip: $filter('translate')('PRODUCT.SKU)'),\n          field: 'variant_sku',\n          permission: vm.tableType === 'v',\n          visible: getColumnStatusVisibility('variant_sku', true, avoidState),\n          minWidth: 200,\n          enableCellEdit: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.variant_sku || \\'-\\'}}</div>'\n        }, variant_color: {\n          displayName: $filter('translate')('PRODUCT.COLOR'),\n          headerTooltip: $filter('translate')('PRODUCT.COLOR'),\n          field: 'variant_color',\n          permission: vm.tableType === 'v',\n          visible: getColumnStatusVisibility('variant_color', true, avoidState),\n          minWidth: 200,\n          enableCellEdit: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.variant_color || \\'-\\'}}</div>'\n        }, variant_size: {\n          displayName: $filter('translate')('PRODUCT.SIZE'),\n          headerTooltip: $filter('translate')('PRODUCT.SIZE'),\n          field: 'variant_size',\n          permission: vm.tableType === 'v',\n          visible: getColumnStatusVisibility('variant_size', true, avoidState),\n          minWidth: 200,\n          enableCellEdit: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.variant_size || \\'-\\'}}</div>'\n        }, brand: {\n          displayName: $filter('translate')('PRODUCT.BRAND'),\n          headerTooltip: $filter('translate')('PRODUCT.BRAND'),\n          field: 'brand',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', true, avoidState),\n          minWidth: 100,\n          orderingField: 'brand__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.brand || \\'-\\'}}</div>'\n        }, season: {\n          displayName: $filter('translate')('PRODUCT.SEASON'),\n          headerTooltip: $filter('translate')('PRODUCT.SEASON'),\n          field: 'season',\n          permission: true,\n          visible: getColumnStatusVisibility('season', true, avoidState),\n          minWidth: 100,\n          orderingField: 'season__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season || \\'-\\'}}</div>'\n        }, category: {\n          displayName: $filter('translate')('PRODUCTS.CATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', true, avoidState),\n          minWidth: 100,\n          orderingField: 'category__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.category || \\'-\\'}}</div>'\n        }, subcategory: {\n          displayName: $filter('translate')('PRODUCTS.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.SUBCATEGORY'),\n          field: 'subcategory',\n          permission: true,\n          visible: getColumnStatusVisibility('subcategory', true, avoidState),\n          minWidth: 100,\n          orderingField: 'subcategory__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.subcategory || \\'-\\'}}</div>'\n        }, composition: {\n          displayName: $filter('translate')('PRODUCT.COMPOSITION'),\n          headerTooltip: $filter('translate')('PRODUCT.COMPOSITION'),\n          field: 'composition',\n          permission: true,\n          visible: getColumnStatusVisibility('composition', false, avoidState),\n          minWidth: 100,\n          orderingField: 'composition__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.composition || \\'-\\'}}</div>'\n        }, updated_at: {\n          displayName: $filter('translate')('PRODUCT.UPDATED_AT'),\n          headerTooltip: $filter('translate')('PRODUCT.UPDATED_AT'),\n          field: 'updated_at',\n          permission: true,\n          visible: getColumnStatusVisibility('updated_at', true, avoidState),\n          minWidth: 100,\n          width: 160,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(grid.getCellValue(row, col))}}</div>'\n        }, created_at: {\n          displayName: $filter('translate')('PRODUCT.CREATION_DATE'),\n          headerTooltip: $filter('translate')('PRODUCT.CREATION_DATE'),\n          field: 'created_at',\n          permission: true,\n          visible: getColumnStatusVisibility('created_at', true, avoidState),\n          minWidth: 100,\n          width: 160,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</div>'\n        }, images: {\n          displayName: $filter('translate')('PRODUCT.IMAGES'),\n          field: 'images',\n          permission: true,\n          visible: getColumnStatusVisibility('images', false, avoidState),\n          minWidth: 75,\n          width: 75,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: true,\n          enableHiding: true,\n          cellTemplate: '<img  ng-repeat=\"image in row.entity.images\" width=\"32px\" class=\"ml-5\" ng-src=\"{{image}}\" lazy-src>'\n        }, total_stock: {\n          displayName: $filter('translate')('PRODUCT.STOCK'),\n          headerTooltip: $filter('translate')('PRODUCT.STOCK'),\n          field: 'total_stock',\n          permission: true,\n          visible: getColumnStatusVisibility('total_stock', false, avoidState),\n          minWidth: 75,\n          width: 75,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.total_stock || \\'-\\'}}</div>'\n        }, total_allocated: {\n          displayName: $filter('translate')('PRODUCT.ALLOCATED'),\n          headerTooltip: $filter('translate')('PRODUCT.ALLOCATED'),\n          field: 'total_allocated',\n          permission: true,\n          visible: getColumnStatusVisibility('total_allocated', false, avoidState),\n          minWidth: 75,\n          width: 75,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.total_allocated || \\'-\\'}}</div>'\n        }, fob_price: {\n          displayName: $filter('translate')('PRODUCT.PROVIDER_PRICE'),\n          headerTooltip: $filter('translate')('PRODUCT.PROVIDER_PRICE'),\n          field: 'fob_price',\n          permission: Session.hasPermission('inventory.products.product.details.cost'),\n          visible: getColumnStatusVisibility('fob_price', false, avoidState),\n          minWidth: 75,\n          width: 75,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.fob_price, 5, row.entity.fob_price_currency)}}</div>'\n        }, ddp_price: {\n          displayName: $filter('translate')('PRODUCT.CURRENT_DDP_PRICE'),\n          headerTooltip: $filter('translate')('PRODUCT.CURRENT_DDP_PRICE'),\n          field: 'ddp_price',\n          permission: Session.hasPermission('inventory.products.product.details.cost'),\n          visible: getColumnStatusVisibility('ddp_price', false, avoidState),\n          minWidth: 75,\n          width: 75,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.ddp_price, 5)}}</div>'\n        }, total_cost: {\n          displayName: $filter('translate')('PRODUCT.TOTAL_COST'),\n          headerTooltip: $filter('translate')('PRODUCT.TOTAL_COST'),\n          field: 'total_cost',\n          permission: Session.hasPermission('inventory.products.product.details.cost'),\n          visible: getColumnStatusVisibility('total_cost', false, avoidState),\n          minWidth: 75,\n          width: 75,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.total_cost)}}</div>'\n        }, tags: {\n          displayName: $filter('translate')('PRODUCT.TAGS'),\n          headerTooltip: $filter('translate')('PRODUCT.TAGS'),\n          field: 'tags',\n          permission: true,\n          visible: getColumnStatusVisibility('tags', false, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-tags\"><span class=\"text-boxed\" ng-repeat=\"tag in grid.getCellValue(row, col)\">{{tag}}</span></div>'\n        }, web_categories: {\n          displayName: $filter('translate')('PRODUCT.WEB_CATEGORIES'),\n          headerTooltip: $filter('translate')('PRODUCT.WEB_CATEGORIES'),\n          field: 'web_categories',\n          permission: Session.hasPermission('app.ecommerce'),\n          visible: getColumnStatusVisibility('web_categories', false, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-tags\"><span ng-repeat=\"site in grid.getCellValue(row, col)\"><span class=\"text-boxed\"  ng-repeat=\"cat in site\">{{cat}}</span></span></div>'\n        }, web_sites: {\n          displayName: $filter('translate')('PRODUCT.CHANNELS'),\n          headerTooltip: $filter('translate')('PRODUCT.CHANNELS'),\n          field: 'web_sites',\n          permission: Session.hasPermission('app.ecommerce'),\n          visible: getColumnStatusVisibility('web_sites', false, avoidState),\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-tags\"><span class=\"text-boxed mt-0 mb-0 ml-0\" ng-repeat=\"web in grid.getCellValue(row, col)\">{{web}}</span></div>'\n        }, discount_active: {\n          displayName: $filter('translate')('PRODUCT.DISCOUNT_ACTIVE'),\n          headerTooltip: $filter('translate')('PRODUCT.DISCOUNT_ACTIVE'),\n          field: 'discount_active',\n          permission: true,\n          visible: getColumnStatusVisibility('discount_active', false, avoidState),\n          minWidth: 75,\n          cellTemplate: '<div class=\"cell-middle\"><div ng-class=\"{\\'web-completed\\': grid.getCellValue(row, col), \\'web-incompleted\\': !grid.getCellValue(row, col)}\"></div></div>'\n        }\n      });\n\n      vm.pricingTiers.forEach(function(pricingTier) {\n        vm.columns['pricing_tiers,pricing_tier_' + pricingTier.id] = {\n          displayName: $filter('translate')('PRODUCT.PRICING_TIER') + ' ' + pricingTier.name,\n          headerTooltip: pricingTier.name,\n          field: 'pricing_tiers,pricing_tier_' + pricingTier.id,\n          permission: true,\n          visible: getColumnStatusVisibility('pricing_tiers,pricing_tier_' + pricingTier.id, false, avoidState),\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\"> ' +\n            '<span ng-if=\"!row.entity.pricing_tiers[col.colDef.pricingTier.id].discount\">' +\n            '{{row.entity.pricing_tiers[col.colDef.pricingTier.id].price_incl_tax || \\'-\\'}}  {{grid.appScope.currency}}</span>' +\n            '<small ng-if=\"row.entity.pricing_tiers[col.colDef.pricingTier.id].discount\" style=\"secondary-text\">' +\n            '<strike>{{row.entity.pricing_tiers[col.colDef.pricingTier.id].price_incl_tax || \\'-\\'}}  {{grid.appScope.currency}}</strike><br></small>' +\n            '<span ng-if=\"row.entity.pricing_tiers[col.colDef.pricingTier.id].discount\">' +\n            '{{row.entity.pricing_tiers[col.colDef.pricingTier.id].discount_price_incl_tax || \\'-\\'}}  {{grid.appScope.currency}}</span>' +\n            '</div>',\n          pricingTier: pricingTier\n        };\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function(v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function(column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    function filterChanged() {\n      $rootScope.$broadcast('ndProductsFilters::updateFilters');\n      saveStatus();\n      getGridProductsPage();\n    }\n\n    function getGridProductsPagePostData(serializer) {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n      d.long_url_get = true;\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Fields\n      d.fields = getGridVisibleColumnFields();\n\n      // Search\n      d.search = vm.status.search;\n\n      // Filters (from the directive nd-products-filters\n      angular.extend(d, vm.status);\n      angular.extend(d, vm.status.filtersParams);\n\n      if (serializer){\n        d.serializer = serializer;\n      }\n\n      if (vm.tableType === 'v') {\n        d.product_variants_list = true;\n      }\n\n      if (vm.tableType === 'm') {\n        d.is_raw_material = true;\n      }else{\n        d.is_raw_material = false;\n      }\n\n      if (vm.tableType === 'b') {\n        d.is_bundle = true;\n      }else{\n        d.is_bundle = false;\n      }\n\n      return d;\n    }\n\n    function mapAndJoinList(list) {\n      if (!list || !list.length) {\n        return null;\n      }\n      return list.map(function(item) {\n        return item.id;\n      }).join();\n    }\n\n    var controller = new AbortController();\n\n    function getGridProductsPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = '';\n      var serializer = '';\n      if(vm.tableType === 'v'){\n        url = api.urls.inventories.productVariants.replace('/:id/:option', '');\n        serializer = 'ProductListProductVariantSerializer';\n      }else {\n        url = api.urls.inventories.products.replace('/:id/:option', '');\n        serializer = null;\n      }\n\n      fetch(url, {\n        method: 'POST', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, body: JSON.stringify(getGridProductsPagePostData(serializer)), signal: controller.signal\n      })\n        .then(function(response) {\n          return response.json();\n        })\n        .then(function(data) {\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          $scope.$apply();\n        })\n        .catch(function(error) {\n          throw error;\n        })\n        .finally(\n          function() {\n            vm.loading = false;\n            vm.uiGridInitialized = true;\n          }\n        );\n    }\n\n    $scope.getShortDate = function(date) {\n      return $filter('date')(date, 'dd/MM/yy HH:mm');\n    };\n\n    $scope.getPrice = function(value, decimals, currency) {\n      if (value) {\n        return $filter('number')(+value, decimals || 2) + ' ' + CURRENCIES[(currency || Session.company.currency)];\n      }\n      return '-';\n    };\n\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        vm.gridApi.core.handleWindowResize();\n      }, 400);\n    }\n\n    function openProductsEditDialog(ev) {\n      if (Session.hasPermission('inventory.products.bulk_update')) {\n        $rootScope.ndBarcodeListenerEnabled = false;\n        $mdDialog.show({\n          controller: 'ProductsEditDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/products/dialogs/products-edit/products-edit-dialog.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            Selected: vm.keptSelectionArray\n          }\n        }).then(function(draw) {\n          $rootScope.ndBarcodeListenerEnabled = true;\n          if (draw) {\n            getGridProductsPage();\n          }\n        });\n      }\n    }\n\n    function printOverview(event) {\n\n      if (Session.hasPermission('app.inventory.products.product.overview')) {\n\n        if (vm.waiting) {\n          return;\n        }\n\n        vm.waiting = true;\n\n        var selected = [];\n        vm.gridApi.selection.getSelectedRows().forEach(function(row) {\n          selected.push(row.id);\n        });\n\n        api.inventories.products.save({\n          option: 'print-overview', products_ids: selected\n        }, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdDialog.show($mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n              .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', { email: Session.user.email }))\n              .ok($filter('translate')('GENERAL.CLOSE')));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.waiting = false;\n        });\n      }\n    }\n\n    function barcodeListenerCallback(barcode) {\n      vm.status.search = barcode;\n      getGridProductsPage();\n    }\n\n    function showQuickProductCreatorDialog() {\n      BarcodeService.setEnabled(false);\n      $mdDialog.show({\n        controller: 'QuickProductCreatorDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/directives/nd-quick-product-creator-button/quick-product-creator-dialog.html',\n        locals: {\n          params: {\n            isBundle: vm.tableType === 'b',\n            isRawMaterial: vm.tableType === 'm',\n            productType: vm.tableType\n          }\n        },\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false\n      }).then(function(result) {\n        if (result) {\n          getGridProductsPage();\n        }\n        BarcodeService.setEnabled(true);\n      });\n    }\n\n    function clearFilter() {\n      vm.status.search = '';\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n\n    function showImportDialog() {\n      if (Session.user.isSuperAdmin()) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCTS.IMPORT'))\n          .textContent($filter('translate')('PRODUCTS.IMPORT_MSG'))\n          .clickOutsideToClose(false)\n          .escapeToClose(false)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('PRODUCTS.IMPORT_PRODUCTS'))\n          .cancel($filter('translate')('PRODUCTS.IMPORT_IMAGES'));\n        $mdDialog.show(confirm).then(function() {\n          $state.go('app.inventory.import.products');\n        }, function() {\n          $state.go('app.inventory.import.images');\n        });\n      } else {\n        $state.go('app.inventory.import.products');\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ProductLocationsController', ProductLocationsController);\n\n  /** @ngInject */\n  function ProductLocationsController($scope, $rootScope, $interval, $http, $mdMenu, $mdToast, $q, $state, $timeout,\n                                      $mdSidenav, $mdMedia, $filter, $mdDialog, $document, $compile, $stateParams, api,\n                                      Session, DTColumnBuilder, $translate, PERMISSIONS,\n                                      HTTP_STATUS, SEARCH_MAX_LENGTH, CURRENCIES, UiGridService, BarcodeService, WarehouseData) {\n    var vm = this;\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.loading = false;\n    vm.saving = false;\n    vm.timeout = null;\n    vm.storageLabel = 'UIGridProductLocationsController::V2';\n    vm.warehouses = WarehouseData.results;\n    vm.warehousesById = {};\n    vm.excludedWarehouses = {};\n    vm.excludedWarehousesLoading = {};\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      notifications: 0,\n      filters: {\n        brands: [],\n        categories: [],\n        subcategories: [],\n        seasons: [],\n        compositions: [],\n        status: [],\n        sites: [],\n        barcode: '',\n        sku: '',\n        sizes: [],\n        colors: [],\n        webCategories: [],\n        providers: [],\n        purchases: [],\n        cover: '',\n        tag: '',\n        stock: '',\n        visibleInEcommerce: '',\n        discountPrice: '',\n        stockBelowMinimum: false,\n        discountActive: false,\n        duplicatedProducts: false,\n        isNoos: false,\n        archived: false,\n        duplicatedBarcode: false,\n        duplicatedSku: false,\n        productCreatedStartDate: null,\n        productCreatedEndDate: null,\n        productUpdatedStartDate: null,\n        productUpdatedEndDate: null,\n        productPriceUpdatedStartDate: null,\n        productPriceUpdatedEndDate: null\n      },\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.gridOptions = UiGridService.getGridOptions({\n      rowHeight: 40,\n      headerRowHeight: 40,\n      onRegisterApi: initializeUidGrid,\n      exporterCsvFilename: $filter('translate')('PRODUCT_LOCATIONS.PRODUCT_LOCATIONS') + '.csv',\n      exporterFieldCallback: function(grid, row, col, value) {\n        if (value === undefined && col.colDef.pricingTier) {\n          return null; // TODO\n        }\n        return value;\n      },\n      gridMenuCustomItems: [{\n        title: $filter('translate')('GENERAL.RESTORE_COLUMNS'), action: function($event) {\n          restoreGridColumns();\n        }, order: 2\n      }]\n    });\n\n    // Methods\n    vm.initialize = initialize;\n    vm.getGridProductsPage = getGridProductsPage;\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.clearFilter = clearFilter;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.filterChanged = filterChanged;\n    vm.excludedWarehouseChanged = excludedWarehouseChanged;\n    vm.copyColumnState = copyColumnState;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      getWarehouses();\n      setGridColumns();\n    }\n\n    function getWarehouses() {\n      vm.warehouses.forEach(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridProductsPage();\n          });\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function(colDef) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      loadStatus();\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      // If we have to load the status, first we will change the filters which will update the table, otherwise\n      // we update the table directly\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        vm.columns = {};\n        vm.gridOptions.columnDefs = [];\n        setGridColumns();\n        updateFilterNotifications();\n        if (vm.gridApi) {\n          $timeout(function() {\n            vm.gridApi.saveState.restore($scope, vm.status.state);\n          }, 10);\n        }\n      }\n      getGridProductsPage();\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::statusLoaded');\n      }, 500);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.status));\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function(column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n\n      setGridColumns(true);\n      getGridProductsPage();\n\n      $timeout(function() {\n        saveStatus();\n      }, 100);\n    }\n\n    function setGridColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n      angular.extend(vm.columns, {\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: getColumnStatusVisibility('cover_thumbnail', true, avoidState),\n          minWidth: 36,\n          width: 36,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<md-icon ng-if=\"!row.entity.cover_thumbnail\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' + '<img  ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>'\n        }, code: {\n          displayName: $filter('translate')('PRODUCT.CODE'),\n          headerTooltip: $filter('translate')('PRODUCT.CODE'),\n          field: 'code',\n          permission: true,\n          visible: getColumnStatusVisibility('code', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.inventory.products.product.overview({id:row.entity.id})\">{{row.entity.code || \\'-\\'}}</a></div>'\n        }, name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          headerTooltip: $filter('translate')('PRODUCT.NAME'),\n          field: 'name',\n          permission: true,\n          visible: getColumnStatusVisibility('name', true, avoidState),\n          minWidth: 200,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.name || \\'-\\'}}</div>'\n        }, brand: {\n          displayName: $filter('translate')('PRODUCT.BRAND'),\n          headerTooltip: $filter('translate')('PRODUCT.BRAND'),\n          field: 'brand',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', false, avoidState),\n          minWidth: 100,\n          orderingField: 'brand__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.brand || \\'-\\'}}</div>'\n        }, season: {\n          displayName: $filter('translate')('PRODUCT.SEASON'),\n          headerTooltip: $filter('translate')('PRODUCT.SEASON'),\n          field: 'season',\n          permission: true,\n          visible: getColumnStatusVisibility('season', false, avoidState),\n          minWidth: 100,\n          orderingField: 'season__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season || \\'-\\'}}</div>'\n        }, category: {\n          displayName: $filter('translate')('PRODUCTS.CATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', false, avoidState),\n          minWidth: 100,\n          orderingField: 'category__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.category || \\'-\\'}}</div>'\n        }, subcategory: {\n          displayName: $filter('translate')('PRODUCTS.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.SUBCATEGORY'),\n          field: 'subcategory',\n          permission: true,\n          visible: getColumnStatusVisibility('subcategory', false, avoidState),\n          minWidth: 100,\n          orderingField: 'subcategory__name',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.subcategory || \\'-\\'}}</div>'\n        }, updated_at: {\n          displayName: $filter('translate')('PRODUCT.UPDATED_AT'),\n          headerTooltip: $filter('translate')('PRODUCT.UPDATED_AT'),\n          field: 'updated_at',\n          permission: true,\n          visible: getColumnStatusVisibility('updated_at', false, avoidState),\n          minWidth: 100,\n          width: 160,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(grid.getCellValue(row, col))}}</div>'\n        }, created_at: {\n          displayName: $filter('translate')('PRODUCT.CREATION_DATE'),\n          headerTooltip: $filter('translate')('PRODUCT.CREATION_DATE'),\n          field: 'created_at',\n          permission: true,\n          visible: getColumnStatusVisibility('created_at', false, avoidState),\n          minWidth: 100,\n          width: 160,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</div>'\n        }\n      });\n      var template = '<div class=\"cell-checkbox\"><input ' +\n        'class=\"exclude-warehouse-checkbox\" ' +\n        'type=\"checkbox\" ' +\n        'ng-disabled=\"grid.appScope.vm.excludedWarehousesLoading[row.entity.id][WAREHOUSE_ID]\" ' +\n        'ng-model=\"grid.appScope.vm.excludedWarehouses[row.entity.id][WAREHOUSE_ID]\" ' +\n        'ng-change=\"grid.appScope.vm.excludedWarehouseChanged(row.entity, WAREHOUSE_ID)\" ' +\n        '> <button class=\"copy-column-button\"\\n' +\n                  'ng-click=\"grid.appScope.vm.copyColumnState(WAREHOUSE_ID, row.entity.id)\"><md-icon md-font-icon=\"icon-content-copy\"></md-icon></button>' +\n        '</div>';\n      vm.warehouses.forEach(function(warehouse) {\n        var cellTemplate = template.replace(/WAREHOUSE_ID/g, warehouse.id);\n        vm.columns['warehouse_' + warehouse.id] = {\n          displayName: warehouse.name,\n          headerTooltip: warehouse.name,\n          field: 'warehouse_' + warehouse.id,\n          permission: true,\n          visible: getColumnStatusVisibility('warehouse_' + warehouse.id, true, avoidState),\n          minWidth: 100,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          cellTemplate: cellTemplate,\n          editableCellTemplate: cellTemplate\n        };\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,excluded_warehouses,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function(v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function(column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    function filterChanged() {\n      saveStatus();\n      getGridProductsPage();\n    }\n\n    function getGridProductsPagePostData(serializer) {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n      d.long_url_get = true;\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Fields\n      d.fields = getGridVisibleColumnFields();\n\n      // Search\n      d.search = vm.status.search;\n\n      // Filters (from the directive nd-products-filters\n      angular.extend(d, vm.status);\n      angular.extend(d, vm.status.filtersParams);\n\n      if (serializer) {\n        d.serializer = serializer;\n      }\n\n      return d;\n    }\n\n    var controller = new AbortController();\n\n    function getGridProductsPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = '';\n      var serializer = '';\n      url = api.urls.inventories.products.replace('/:id/:option', '');\n      serializer = null;\n\n      fetch(url, {\n        method: 'POST', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, body: JSON.stringify(getGridProductsPagePostData(serializer)), signal: controller.signal\n      })\n        .then(function(response) {\n          return response.json();\n        })\n        .then(function(data) {\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          initializeExcludedWarehouses(data.data);\n          $scope.$apply();\n        })\n        .catch(function(error) {\n          throw error;\n        })\n        .finally(\n          function() {\n            vm.loading = false;\n            vm.uiGridInitialized = true;\n          }\n        );\n    }\n\n    $scope.excludedWarehouses = vm.excludedWarehouses;\n\n    $scope.getShortDate = function(date) {\n      return $filter('date')(date, 'dd/MM/yy HH:mm');\n    };\n\n    function initializeExcludedWarehouses(products) {\n      var tempExcludedWarehouses = {};\n      vm.warehouses.forEach(function(warehouse) {\n        tempExcludedWarehouses[warehouse.id] = true;\n      });\n      vm.excludedWarehouses = {};\n      vm.excludedWarehousesLoading = {};\n      products.forEach(function(product) {\n        vm.excludedWarehouses[product.id] = {};\n        vm.excludedWarehousesLoading[product.id] = {};\n        angular.extend(vm.excludedWarehouses[product.id], angular.copy(tempExcludedWarehouses));\n        product.excluded_warehouses.forEach(function(excludedWarehouseId) {\n          if (vm.excludedWarehouses[product.id][excludedWarehouseId]) {\n            vm.excludedWarehouses[product.id][excludedWarehouseId] = false;\n          }\n        });\n      });\n    }\n\n    function copyColumnState(warehouseId, productIdReference) {\n      var valueToCopy = vm.excludedWarehouses[productIdReference][warehouseId];\n      angular.forEach(vm.excludedWarehouses, function(productWarehouses, productId) {\n        if (productWarehouses[warehouseId] !== valueToCopy) {\n          productWarehouses[warehouseId] = valueToCopy;\n        }\n      });\n      excludedWarehouseChangedBulk(warehouseId);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        vm.gridApi.core.handleWindowResize();\n      }, 400);\n    }\n\n    function barcodeListenerCallback(barcode) {\n      vm.status.search = barcode;\n      getGridProductsPage();\n    }\n\n    function clearFilter() {\n      $rootScope.$broadcast('ndProductsFilters::clearFilters');\n    }\n\n    function excludedWarehouseChanged(row, warehouseId) {\n      vm.excludedWarehousesLoading[row.id][warehouseId] = true;\n      api.inventories.products.update({\n        id: row.id,\n        option: 'exclude-warehouse',\n        warehouse_id: warehouseId,\n        value: vm.excludedWarehouses[row.id][warehouseId]\n      }, function(results, fn, status) {\n        vm.excludedWarehousesLoading[row.id][warehouseId] = false;\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')));\n        }\n      });\n    }\n\n    function excludedWarehouseChangedBulk(warehouseId) {\n\n      angular.forEach(vm.excludedWarehouses, function(productWarehouses, productId) {\n        vm.excludedWarehousesLoading[productId][warehouseId] = true;\n      });\n\n      var productIds = [];\n      angular.forEach(vm.excludedWarehouses, function(productWarehouses, productId) {\n        if (productWarehouses[warehouseId] !== undefined) {\n          productIds.push(parseInt(productId));\n        }\n      });\n\n      var commonValue = vm.excludedWarehouses[productIds[0]][warehouseId];\n\n      api.inventories.products.update({\n        option: 'exclude-warehouse-bulk',\n        warehouse_id: warehouseId,\n        product_ids: productIds,\n        value: commonValue\n      }, function(results, fn, status) {\n\n        angular.forEach(vm.excludedWarehousesLoading, function(warehousesLoadingByProduct) {\n          warehousesLoadingByProduct[warehouseId] = false;\n        });\n\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')));\n        }\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryProductController', InventoryProductController);\n\n  /** @ngInject */\n  function InventoryProductController($state, $mdDialog, $filter, $window, $http, PERMISSIONS, api, Session, $stateParams, $scope) {\n    var vm = this;\n\n    //Cons\n    vm.PERMISSIONS = PERMISSIONS;\n\n    // Data\n    vm.product = null;\n    vm.currentNavItem = \"\";\n    vm.waiting = false;\n    vm.previousState = $stateParams.previousState;\n\n    // Methods\n    vm.goBack = goBack;\n    vm.goToEditProduct = goToEditProduct;\n    vm.goToNewProduct = goToNewProduct;\n    vm.delete = deleteProduct;\n    vm.archive = archive;\n    vm.unarchive = unarchive;\n    vm.duplicate = duplicate;\n    vm.printInformation = printInformation;\n    vm.printOverview = printOverview;\n    vm.openMenu = openMenu;\n    vm.saveProduct = saveProduct;\n\n    // Functions\n    function goBack() {\n      if(vm.previousState){\n        $state.go(vm.previousState);\n        return;\n      }\n\n      if (vm.product.is_raw_material) {\n        $state.go('app.manufacture.materials');\n        return;\n      } else if ($state.current.name !== 'app.ecommerce.picking.product.overview') {\n        $state.go('app.inventory.products', {reload: true});\n        return;\n      }\n      if ($state.current.name === 'app.ecommerce.picking.product.overview') {\n        $state.go('app.ecommerce.picking');\n        return;\n      }\n    }\n\n    function openMenu($mdMenu, ev) {\n      $mdMenu.open(ev);\n    }\n\n    function goToEditProduct() {\n      if (Session.hasPermission('inventory.products.product.details.update')) {\n        $state.go('app.inventory.products.product.details')\n      }\n    }\n\n    function goToNewProduct() {\n      $state.go('app.inventory.products.new-product');\n    }\n\n    function deleteProduct() {\n\n      if (Session.hasPermission('inventory.products.product.details.delete')) {\n\n        if (vm.waiting) {\n          return;\n        }\n\n        vm.waiting = true;\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.DELETE_PRODUCT'))\n          .htmlContent($filter('translate')('PRODUCT.DELETE_PRODUCT_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.products.delete({id: vm.product.id}, function (response) {\n            vm.waiting = false;\n            $state.go('app.inventory.products', {reload: false});\n          })\n        }, function () {\n          vm.waiting = false;\n        });\n      }\n    }\n\n    function archive() {\n\n      if (vm.waiting)\n        return;\n      vm.waiting = true;\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.ARCHIVE_PRODUCT'))\n        .htmlContent($filter('translate')('PRODUCT.ARCHIVE_PRODUCT_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.ARCHIVE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function () {\n        api.inventories.products.update({\n          id: vm.product.id,\n          option: 'archive'\n        }, function (response) {\n          vm.waiting = false;\n          $state.go('app.inventory.products', {reload: false});\n        })\n      }, function () {\n        vm.waiting = false;\n      });\n    }\n\n    function unarchive() {\n\n      if (vm.waiting)\n        return;\n      vm.waiting = true;\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.UNARCHIVE_PRODUCT'))\n        .htmlContent($filter('translate')('PRODUCT.UNARCHIVE_PRODUCT_MESSAGE'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.UNARCHIVE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function () {\n        api.inventories.products.update({\n          id: vm.product.id,\n          option: 'unarchive'\n        }, function (response) {\n          vm.waiting = false;\n          $state.go('app.inventory.products', {reload: false});\n        })\n      }, function () {\n        vm.waiting = false;\n      });\n    }\n\n    function duplicate() {\n\n      if (Session.hasPermission('inventory.products.product.details.duplicate')) {\n\n        if (vm.waiting) {\n          return;\n        }\n\n        vm.waiting = true;\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.DUPLICATE_PRODUCT'))\n          .htmlContent($filter('translate')('PRODUCT.DUPLICATE_PRODUCT_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DUPLICATE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function () {\n          api.inventories.products.save({\n            id: vm.product.id,\n            option: 'duplicate'\n          }, function (response) {\n            vm.waiting = false;\n            $state.go('app.inventory.products.product.details', {id: response.id});\n          })\n        }, function () {\n          vm.waiting = false;\n        });\n      }\n    }\n\n    function printInformation() {\n\n      if (Session.hasPermission('app.inventory.products.product.overview')) {\n\n        if (vm.waiting) {\n          return;\n        }\n\n        vm.waiting = true;\n\n        var url = api.urls.inventories.products\n          .replace(':id', vm.product.id)\n          .replace(':option', 'print-information');\n\n        $http.post(url, vm.product).then( function(response) {\n          var blob = new Blob([response.data], { type: 'application/pdf' });\n          var URL = window.URL || window.webkitURL;\n          window.open(URL.createObjectURL(blob));\n          vm.waiting = false;\n        });\n\n      }\n    }\n\n    function printOverview() {\n\n      if (Session.hasPermission('app.inventory.products.product.overview')) {\n\n        if (vm.waiting) {\n          return;\n        }\n\n        vm.waiting = true;\n\n        var url = api.urls.inventories.products\n          .replace(':id', vm.product.id)\n          .replace(':option', 'print-overview');\n\n        $http.post(url, vm.product).then( function(response) {\n          var blob = new Blob([response.data], { type: 'application/pdf' });\n          var URL = window.URL || window.webkitURL;\n          window.open(URL.createObjectURL(blob));\n          vm.waiting = false;\n        });\n\n      }\n    }\n\n    function saveProduct() {\n      $scope.$broadcast('InventoryProductController::saveProduct');\n    }\n\n  }\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryPricingController', InventoryPricingController);\n\n  /** @ngInject */\n  function InventoryPricingController($scope, $mdMenu, $mdToast, $state, $timeout, $mdSidenav, $mdMedia, $filter, SitesData,\n                                      $mdDialog, $document, $compile, $stateParams, api, Session, DTColumnBuilder, CategoriesData,\n                                      SubcategoriesData, BrandsData, SeasonsData, PricingTiersData, ConfigurationData, TableType, $translate,\n                                      PERMISSIONS, HTTP_STATUS, WarehousesData, SEARCH_MAX_LENGTH) {\n    var vm = this;\n    // Cons\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstanceProducts = {};\n    vm.categories = {};\n    vm.subcategories = {};\n    vm.brands = {};\n    vm.seasons = {};\n    vm.sites = {};\n    vm.items = [];\n    vm.selected = [];\n    vm.saving = false;\n\n    CategoriesData.results.forEach(function (category) {\n      vm.categories[category.id] = category\n    });\n    SubcategoriesData.results.forEach(function (subcategory) {\n      vm.subcategories[subcategory.id] = subcategory\n    });\n    BrandsData.results.forEach(function (brand) {\n      vm.brands[brand.id] = brand\n    });\n    SeasonsData.results.forEach(function (season) {\n      vm.seasons[season.id] = season\n    });\n    SitesData.results.forEach(function (site) {\n      vm.sites[site.id] = site\n    });\n\n    vm.filterBrands = \"\";\n    vm.brandsList = BrandsData.results;\n    vm.filterCategories = \"\";\n    vm.categoriesList = CategoriesData.results;\n    vm.warehouses = WarehousesData.results;\n    vm.filterSubcategories = \"\";\n    vm.subcategoriesList = SubcategoriesData.results;\n    vm.filterSeasons = \"\";\n    vm.seasonsList = SeasonsData.results;\n    vm.filterStatus = \"\";\n    vm.sitesList = SitesData.results;\n    vm.filterSite = \"\";\n    vm.pricingTiers = PricingTiersData ? PricingTiersData.results : [];\n    vm.selectedSiteId = null;\n    vm.duplicatedProducts = false;\n    vm.isNoos = false;\n    vm.discountActive = false;\n    vm.selectedPricingTier = null;\n    vm.selectedWarehouses = [];\n\n    vm.dtOptionsProducts = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.baseUrl + 'inventories/products',\n        type: 'post',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.is_raw_material = false;\n          d.long_url_get = true;\n\n          if (vm.filterBrands && vm.filterBrands.length) {\n            d.brands = vm.filterBrands.join(',');\n          }\n          if (vm.filterCategories && vm.filterCategories.length) {\n            d.categories = vm.filterCategories.join(',');\n          }\n          if (vm.filterSubcategories && vm.filterSubcategories.length) {\n            d.subcategories = vm.filterSubcategories.join(',');\n          }\n          if (vm.filterSeasons && vm.filterSeasons.length) {\n            d.seasons = vm.filterSeasons.join(',');\n          }\n          if (vm.filterStatus && vm.filterStatus.length) {\n            d.statuses = vm.filterStatus.join(',');\n          }\n          if (vm.filterSites && vm.filterSites.length) {\n            d.sites = vm.filterSites.join(',');\n          }\n          if (vm.duplicatedProducts) {\n            d.duplicated = true;\n          }\n          if (vm.isNoos) {\n            d.is_noos = true;\n          }\n          if (vm.discountActive) {\n            d.discount_active = true;\n          }\n        }\n      },\n      rowId: 'id',\n      //order: [9, 'desc'],\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      //scrollY: true,\n      //scrollX: true,\n      //scrollCollapse: true,\n      //autoWidth: true,\n      //fixedColumns:   {\n      //  leftColumns: 1\n      //},\n      stateSaveCallback: function (settings, data) {\n\n        data.filterCategories = vm.filterCategories;\n        data.filterSubcategories = vm.filterSubcategories;\n        data.filterBrands = vm.filterBrands;\n        data.filterSeasons = vm.filterSeasons;\n        data.filterStatus = vm.filterStatus;\n        data.filterSites = vm.filterSites;\n        data.duplicatedProducts = vm.duplicatedProducts;\n        data.isNoos = vm.isNoos;\n        data.discountActive = vm.discountActive;\n\n        localStorage.setItem(Session.company.id + '::dataTableProductsInventoryProductsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableProductsInventoryProductsController'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          angular.isDefined(state.filterCategories) ? vm.filterCategories = state.filterCategories : [];\n          angular.isDefined(state.filterSubcategories) ? vm.filterSubcategories = state.filterSubcategories : [];\n          angular.isDefined(state.filterBrands) ? vm.filterBrands = state.filterBrands : [];\n          angular.isDefined(state.filterSeasons) ? vm.filterSeasons = state.filterSeasons : [];\n          angular.isDefined(state.filterStatus) ? vm.filterStatus = state.filterStatus : [];\n          angular.isDefined(state.filterSites) ? vm.filterSites = state.filterSites : null;\n          angular.isDefined(state.duplicatedProducts) ? vm.duplicatedProducts = state.duplicatedProducts : null;\n          angular.isDefined(state.isNoos) ? vm.isNoos = state.isNoos : null;\n          angular.isDefined(state.discountActive) ? vm.discountActive = state.discountActive : null;\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumnsProducts = [\n      DTColumnBuilder.newColumn('cover_thumbnail').withTitle($filter('translate')('PRODUCT.IMAGE')).withOption('className', 'imageColumn').withOption('width', '50px')\n        .renderWith(function (data, type, full) {\n          if (angular.isUndefined(full.cover_thumbnail)) return null;\n\n          if (full.cover_thumbnail)\n            return '<img class=\"w-50\" src=\"' + full.cover_thumbnail + '\">'\n          return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n\n        }),\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.inventory.products.product.overview({id:' + full.id + '})\">' + full.code + '</a> / ' + full.name;\n        }),\n      DTColumnBuilder.newColumn('total_stock').withTitle($filter('translate')('PRODUCT.STOCK'))\n    ];\n\n    // Methods\n    vm.gotoProductDetail = gotoProductDetail;\n    vm.initialize = initialize;\n    vm.toggleSidenav = toggleSidenav;\n    vm.drawTable = drawTable;\n    vm.reloadProducts = reloadProducts;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function reloadProducts() {\n      vm.dtInstanceProducts.DataTable.draw();\n    }\n\n    /**\n     * Go to product detail\n     *\n     * @param id\n     */\n    function gotoProductDetail(id) {\n      $state.go('app.inventory.products.product.details', {id: id});\n    }\n\n    function initComplete() {\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#product-search');\n\n      vm.dtInstanceProducts.DataTable.columns.adjust();\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      /*var id = data.product_id ? data.product_id : data.id;\n      angular.element(row).attr('ui-sref','app.inventory.products.product.overview({id:'+ id +'})');\n      $compile(angular.element(row))($scope);*/\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      /*$('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function () {\n        var id = aData.product_id ? aData.product_id : aData.id;\n        $state.go('app.inventory.products.product.overview', {id: id});\n      });\n      $('td:nth-child(1)', nRow).unbind('click');\n      $('td:nth-child(0)', nRow).unbind('click');*/\n      return nRow;\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n        // Use this headerCompiled field to only compile header once\n        $scope.headerCompiled = true;\n        $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function drawTable(column, event) {\n\n      event.stopPropagation();\n      event.preventDefault();\n      column.selected = !column.selected;\n\n      vm.dtColumnsProducts = [\n        DTColumnBuilder.newColumn('select')\n          .withTitle('<md-checkbox class=\"mb-0\" ng-click=\"vm.selectAll()\"></md-checkbox>')\n          .notSortable()\n          .withOption('className', 'checkbox')\n          .withOption(\"searchable\", false)\n          .withOption(\"orderable\", false)\n          .withOption(\"sortable\", false)\n          .withOption('width', '20px')\n          .renderWith(function (data, type, full) {\n            return '<md-checkbox class=\"m-0\" ng-checked=\"vm.exists(' + full.id + ')\" ng-click=\"vm.toggle($event, ' + full.id + ')\"></md-checkbox>';\n          })\n      ];\n\n      for (var key in vm.columns) {\n        if (vm.columns[key].selected && vm.columns[key].dtcb) {\n          vm.dtColumnsProducts.push(vm.columns[key].dtcb);\n        }\n      }\n\n      localStorage.removeItem(Session.company.id + '::dataTableInventoryProductsColumnsController');\n      localStorage.setItem(Session.company.id + '::dataTableInventoryProductsColumnsController', JSON.stringify(vm.columns));\n\n      if (vm.timeout) {\n        $timeout.cancel(vm.timeout);\n      }\n      vm.timeout = $timeout(function () {\n        vm.dtInstanceProducts.DataTable.draw();\n      }, 1000);\n\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PickingPackingController', PickingPackingController);\n\n  /** @ngInject */\n  function PickingPackingController(\n    HTTP_STATUS,\n    PICKING_ORDER_STATUS_COLORS,\n    PICKING_STATUS,\n    $state,\n    $mdDialog,\n    $filter,\n    $window,\n    $http,\n    PERMISSIONS,\n    api,\n    Session,\n    $mdMedia,\n    UiGridService,\n    $scope,\n    PICKABLE_ORDER_STATUS,\n    WarehousesData,\n    ConfigurationData,\n    $rootScope,\n    $timeout,\n    $stateParams,\n    SEARCH_MAX_LENGTH,\n    SitesData\n  ) {\n    var vm = this;\n\n    //Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    vm.navItems = {\n      toPrepare: {\n        title: 'TO_PREPARE',\n        value: 'to-prepare',\n        count: null,\n        permission: 'app.inventory.picking_packing.to_prepare'\n      },\n      picking: {\n        title: 'PICKING',\n        value: 'picking',\n        count: null,\n        permission: 'app.inventory.picking_packing.picking'\n      },\n      picked: {\n        title: 'PICKED',\n        value: 'picked',\n        count: null,\n        permission: 'app.inventory.picking_packing.picked'\n      },\n      packing: {\n        title: 'PACKING',\n        value: 'packing',\n        count: null,\n        permission: 'app.inventory.picking_packing.packing'\n      },\n      packed: {\n        title: 'PACKED',\n        value: 'packed',\n        count: null,\n        permission: 'app.inventory.picking_packing.packed'\n      },\n      shipped: {\n        title: 'SHIPPED',\n        value: 'shipped',\n        count: null,\n        permission: 'app.inventory.picking_packing.shipped'\n      }\n    };\n\n    vm.currentNavItem = null;\n    vm.currentItem = null;\n\n    vm.filterStorageLabel = 'PickingPackingFiltersV1';\n\n    vm.warehouses = WarehousesData.results;\n    vm.configurationData = ConfigurationData.results[0];\n    vm.creating = false;\n    vm.sitesList = SitesData.results.filter(function(site) {\n      return !site.deleted;\n    });\n\n    vm.globalStatus = {\n      search: '',\n      sourceWarehouses: null,\n      targetWarehouses: null,\n      stockAvailability: null,\n      unitsFilter: null,\n      orderTypes: null\n    };\n\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filtersParams: {},\n      filters: {\n        warehouses: null,\n        targetWarehouses: null,\n        stockAvailability: null,\n        unitsFilter: null,\n        orderTypes: null\n      },\n      dynamicFilters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.gridApi = null;\n\n    vm.stockAvailabilityOptions = [\n      { value: 'with_stock', labelKey: 'PICKING_AND_PACKING.WITH_STOCK_TO_SERVE' },\n      { value: 'without_stock', labelKey: 'PICKING_AND_PACKING.WITHOUT_STOCK_TO_SERVE' }\n    ];\n    vm.unitsFilterOptions = [\n      { value: 'single', labelKey: 'PICKING_AND_PACKING.ORDERS_WITH_SINGLE_PRODUCT' },\n      { value: 'multiple', labelKey: 'PICKING_AND_PACKING.ORDERS_WITH_MULTIPLE_PRODUCTS' }\n    ];\n\n    var gridApiInitializedUnwatch = $scope.$on('gridApiInitialized', function (event, gridApi) {\n      vm.gridApi = gridApi;\n    });\n\n    $scope.$on('$destroy', function () {\n      gridApiInitializedUnwatch();\n    });\n\n    $scope.$on('ndGrid::statusLoaded', function (event, status) {\n      vm.status.search = vm.globalStatus.search;\n      vm.status.filters.sourceWarehouses = vm.globalStatus.sourceWarehouses;\n      vm.status.filters.targetWarehouses = vm.globalStatus.targetWarehouses;\n      vm.status.filters.stockAvailability = vm.globalStatus.stockAvailability;\n      vm.status.filters.unitsFilter = vm.globalStatus.unitsFilter;\n      vm.status.filters.orderTypes = vm.globalStatus.orderTypes;\n      $timeout(function () {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 0);\n    });\n\n    $scope.$on('ndFilter::clear', function (event, data) {\n      var filterName = typeof data === 'string' ? data : (data && data.filterName);\n      var filterMap = {\n        'FILTER_BY_STOCK_AVAILABILITY': 'stockAvailability',\n        'FILTER_BY_UNITS': 'unitsFilter'\n      };\n\n      var filterProperty = filterMap[filterName];\n      if (filterProperty) {\n        var previousValue = vm.globalStatus[filterProperty];\n        vm.globalStatus[filterProperty] = null;\n        vm.status.filters[filterProperty] = null;\n        if (previousValue !== null) {\n          $timeout(function() {\n            vm.reloadTable();\n          }, 0);\n        }\n      }\n    });\n\n    // Methods\n    vm.handleNavClick = handleNavClick;\n    vm.clearFilter = clearFilter;\n    vm.reloadTable = reloadTable;\n    vm.filterChanged = filterChanged;\n    vm.getCount = getCount;\n    vm.controlSelected = controlSelected;\n    vm.canCreatePackingOrder = canCreatePackingOrder;\n    vm.getGlobalStatus = getGlobalStatus;\n\n\n    vm.warehouseUrl = api.inventories.warehouses.list;\n    vm.usersUrl = api.account.users.list;\n    vm.transformCallback = transformCallback;\n\n    function transformCallback(item) {\n      return item.name;\n    }\n\n    initialize();\n\n    function initialize() {\n      getGlobalStatus();\n      getFirstTab();\n      getCount();\n\n      $rootScope.$on('ndFilter::clear', function(event, filterName) {\n        if (filterName === 'FILTER_BY_ORDER_TYPE') {\n          vm.globalStatus.orderTypes = null;\n          vm.reloadTable();\n        }\n      });\n    }\n\n    function getGlobalStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridPickingPackingControllerV1::globalStatus'));\n      if (loadedStatus) {\n        vm.globalStatus = loadedStatus;\n      }\n    }\n\n    function getFirstTab() {\n      if ($stateParams.tab) {\n        vm.currentNavItem = $stateParams.tab;\n        vm.currentItem = vm.navItems[vm.currentNavItem];\n        localStorage.setItem(Session.company.id + '::UIGridPickingPackingControllerV1::currentNavItem', vm.currentNavItem);\n        return;\n      }\n      if (localStorage.getItem(Session.company.id + '::UIGridPickingPackingControllerV1::currentNavItem')) {\n        vm.currentNavItem = localStorage.getItem(Session.company.id + '::UIGridPickingPackingControllerV1::currentNavItem');\n        vm.currentItem = vm.navItems[vm.currentNavItem];\n        return;\n      }\n      for (var key in vm.navItems) {\n        if (vm.navItems.hasOwnProperty(key)) {\n          var navItem = vm.navItems[key];\n          if (Session.hasPermission(navItem.permission)) {\n            vm.currentNavItem = navItem.value;\n            vm.currentItem = navItem;\n            break;\n          }\n        }\n      }\n    }\n\n    function controlSelected() {\n      if (vm.gridApi) {\n        return vm.gridApi.selection.getSelectedGridRows().length === 0;\n      }\n      return false;\n    }\n\n    function canCreatePackingOrder() {\n      if (!vm.gridApi) {\n        return false;\n      }\n      // i need to check that every row has the same row.entity.target_destination.id and the same row.entity.type_pickable_order\n      var selectedRows = vm.gridApi.selection.getSelectedGridRows();\n      if (selectedRows.length === 0) {\n        return false;\n      }\n      var targetWarehouse = selectedRows[0].entity.target_destination;\n      var typePickableOrder = selectedRows[0].entity.type_pickable_order;\n      for (var i = 1; i < selectedRows.length; i++) {\n        if (selectedRows[i].entity.target_destination.id !== targetWarehouse.id || selectedRows[i].entity.type_pickable_order !== typePickableOrder) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function handleNavClick(navItem) {\n      vm.currentNavItem = navItem;\n      localStorage.setItem(Session.company.id + '::UIGridPickingPackingControllerV1::currentNavItem', navItem);\n      vm.status.pageNumber = 1;\n      getCount();\n    }\n\n    function clearFilter(filter) {\n      vm.globalStatus.sourceWarehouses = null;\n      vm.globalStatus.targetWarehouses = null;\n      vm.globalStatus.orderTypes = null;\n      vm.reloadTable();\n    }\n\n    function reloadTable() {\n      localStorage.setItem(Session.company.id + '::UIGridPickingPackingControllerV1::globalStatus', JSON.stringify(vm.globalStatus));\n      vm.status.search = vm.globalStatus.search;\n      vm.status.filters.sourceWarehouses = vm.globalStatus.sourceWarehouses;\n      vm.status.filters.targetWarehouses = vm.globalStatus.targetWarehouses;\n      vm.status.filters.stockAvailability = vm.globalStatus.stockAvailability;\n      vm.status.filters.unitsFilter = vm.globalStatus.unitsFilter;\n      vm.status.filters.orderTypes = vm.globalStatus.orderTypes;\n      if (vm.reloadPIckingPackingTimeout) {\n        $timeout.cancel(vm.reloadPIckingPackingTimeout);\n      }\n      vm.reloadPIckingPackingTimeout = $timeout(function () {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 1000);\n    }\n\n    function hasFilterChanged(oldValue, newValue) {\n      if (Array.isArray(oldValue) || Array.isArray(newValue)) {\n        return JSON.stringify(oldValue || []) !== JSON.stringify(newValue || []);\n      }\n      return oldValue !== newValue;\n    }\n\n    function filterChanged() {\n      $timeout(function () {\n        var filters = [\n          { old: vm.status.filters.stockAvailability, new: vm.globalStatus.stockAvailability },\n          { old: vm.status.filters.unitsFilter, new: vm.globalStatus.unitsFilter },\n          { old: vm.status.filters.sourceWarehouses, new: vm.globalStatus.sourceWarehouses },\n          { old: vm.status.filters.targetWarehouses, new: vm.globalStatus.targetWarehouses },\n          { old: vm.status.filters.orderTypes, new: vm.globalStatus.orderTypes },\n          { old: vm.status.search, new: vm.globalStatus.search }\n        ];\n\n        var hasChanges = filters.some(function(filter) {\n          return hasFilterChanged(filter.old, filter.new);\n        });\n\n        if (hasChanges) {\n          vm.reloadTable();\n        }\n      }, 0);\n    }\n\n    function getCount() {\n      api.inventories.pickingPackingPickableOrders.get({\n        id: null,\n        option: 'count',\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.navItems.toPrepare.count = response.pickable_orders_count;\n          vm.navItems.picking.count = response.in_progress_orders_count;\n          vm.navItems.picked.count = response.picked_orders_count;\n          vm.navItems.packing.count = response.packing_orders_in_progress_count;\n          vm.navItems.packed.count = response.packing_orders_packed_count;\n        }\n      });\n    }\n\n\n    $scope.$on('ndPickingPackingActions::generatePickingOrder', function (event) {\n      $scope.$broadcast('ndPickingPacking::generatePickingOrder');\n    });\n\n    $scope.$on('ndPickingPackingActions::generatePackingOrder', function (event) {\n      $scope.$broadcast('ndPickingPacking::generatePackingOrder');\n    });\n\n    $scope.$on('ndPickingPackingActions::openShippingPackingDialog', function (event) {\n      $scope.$broadcast('ndPickingPacking::openShippingPackingDialog');\n    });\n\n\n  }\n})\n\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PìckingController', PìckingController);\n\n  /** @ngInject */\n  function PìckingController(byteArrayBufferService, UiGridService, $filter, $scope, $timeout, Session, api,\n                             HTTP_STATUS, PickingOrderData, $mdToast, $q, $document, UsersData, PICKING_STATUS,\n                             ITEM_PICKING_STATUS, $mdDialog, $state, PICKING_ORDER_STATUS_COLORS, UserCreatePicking,\n                             Audio, $stateParams, BarcodeService, SEARCH_MAX_LENGTH, $http, uiGridConstants) {\n\n    // Data\n    var vm = this;\n    vm.created_at = new Date();\n    vm.created_by = '';\n    vm.warehouse = '';\n    vm.pickingOrder = PickingOrderData;\n    vm.userCreatePicking = UserCreatePicking;\n    vm.usersList = UsersData.results;\n    vm.userSearchText = '';\n    vm.keptSelectionArray = [];\n    vm.pickers = null;\n    vm.status_pending_to_pick = ITEM_PICKING_STATUS.ITEM_PENDING_TO_PICK;\n    vm.status_picked = ITEM_PICKING_STATUS.ITEM_PICKED;\n    vm.PICKING_ORDER_STATUS = PICKING_STATUS;\n    vm.generating_pickable_pdf = false;\n    vm.generating_delivieres_pdf = false;\n    vm.deliveryUrl = '';\n    vm.changingPickingStatus = {};\n    vm.changingPickingLot = {};\n    vm.finishing = false;\n    vm.previousState = $stateParams.previousState;\n    vm.uidStocks = [];\n    vm.uidStockSearch = '';\n    vm.loadingUidStocks = false;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      exporterCsvFilename: $filter('translate')('PRODUCTS.PRODUCTS') + '.csv',\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ]\n    });\n\n    vm.conLog = function() {\n      console.log('Prova');\n    };\n\n    // Methods\n    vm.deletePickingOrder = deletePickingOrder;\n    vm.userQuerySearch = userQuerySearch;\n    vm.updatePickedBy = updatePickedBy;\n    vm.changePickItemStatus = changePickItemStatus;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.bulkEditStats = bulkEditStats;\n    vm.printPickableItemListPdf = printPickableItemListPdf;\n    vm.isPickingOrderPendingToPick = isPickingOrderPendingToPick;\n    vm.isPickingOrderPicking = isPickingOrderPicking;\n    vm.isPickingOrderPicked = isPickingOrderPicked;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n    vm.uidListenerCallback = uidListenerCallback;\n    vm.gs1datamatrixCallback = gs1datamatrixCallback;\n    vm.printDeliveriesPdf = getDeliveriesPdf;\n    vm.goBack = goBack;\n    vm.openSelectUidStock = openSelectUidStock;\n    vm.onUidStockChange = onUidStockChange;\n    vm.getGridProductsPage = getGridProductsPage;\n    vm.handleFinishPicking = handleFinishPicking;\n    vm.handleFinishPickingAndPack = handleFinishPickingAndPack;\n    vm.handleFinishPickingAndShip = handleFinishPickingAndShip;\n    vm.executeFinishPicking = executeFinishPicking;\n\n    function getDeliveriesPdf() {\n      if (vm.deliveryUrl) {\n        var link = document.createElement('a');\n        link.href = vm.deliveryUrl;\n        link.download = vm.pickingOrder.autocode + '.pdf';\n        link.dispatchEvent(new MouseEvent('click'));\n      } else {\n        vm.generating_delivieres_pdf = true;\n        api.inventories.pickingOrder.get(\n          {\n            id: vm.pickingOrder.id,\n            option: 'create-deliveries-pdf-file'\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              pullingPdfFileUrl();\n            }\n          }\n        );\n      }\n    }\n\n    function pullingPdfFileUrl() {\n      api.inventories.pickingOrder.get(\n        {\n          id: vm.pickingOrder.id,\n          option: 'check-pdf-status'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            //start pulling\n            vm.deliveryUrl = response.url;\n            vm.generating_delivieres_pdf = false;\n          } else if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $timeout(function() {\n              pullingPdfFileUrl();\n            }, 5000);\n          }\n        }\n      );\n    }\n\n    function uidListenerCallback(barcode) {\n      if (!isPickingOrderPendingToPick() && !isPickingOrderPicking()) {\n        return;\n      }\n      if (!Session.hasPermissions('inventory.pickings.pick_products')) {\n        return;\n      }\n      changePickItemStatusByBarcode(barcode);\n\n    }\n\n    function gs1datamatrixCallback(barcode) {\n      if (!isPickingOrderPendingToPick() && !isPickingOrderPicking()) {\n        return;\n      }\n      if (!Session.hasPermissions('inventory.pickings.pick_products')) {\n        return;\n      }\n      assignLotToPickingItemByDatamatrix(barcode);\n    }\n\n    function getStatusColorClass() {\n      return PICKING_ORDER_STATUS_COLORS[vm.pickingOrder.status];\n    }\n\n    function getStatusLabel() {\n      return $filter('translate')('PICKING.' + PICKING_STATUS[vm.pickingOrder.status]);\n    }\n\n    function isPickingOrderPendingToPick() {\n      return vm.pickingOrder.status === vm.PICKING_ORDER_STATUS.PENDING_TO_PICK;\n    }\n\n    function isPickingOrderPicking() {\n      return vm.pickingOrder.status === vm.PICKING_ORDER_STATUS.IN_PROGRESS;\n    }\n\n    function isPickingOrderPicked() {\n      return vm.pickingOrder.status === vm.PICKING_ORDER_STATUS.PICKED;\n    }\n\n    function printPickableItemListPdf() {\n      vm.generating_pickable_pdf = true;\n      api.inventories.pickingOrder.get(\n        {\n          id: vm.pickingOrder.id,\n          option: 'get-pdf-file'\n        },\n        function(response, fn, status) {\n          var b64 = '';\n          for (var i = 0; response[i] !== undefined; i++) {\n            b64 += response[i];\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.generating_pickable_pdf = false;\n            var sampleArr = byteArrayBufferService.base64ToArrayBuffer(b64);\n            byteArrayBufferService.saveByteArray('Picking Order', sampleArr);\n          }\n        }\n      );\n    }\n\n    function handleFinishPicking() {\n      if (vm.finishing) {\n        return;\n      }\n      vm.executeFinishPicking(false, false);\n    }\n\n    function handleFinishPickingAndPack() {\n      if (vm.finishing) {\n        return;\n      }\n      vm.executeFinishPicking(true, false);\n    }\n\n    function handleFinishPickingAndShip() {\n      if (vm.finishing) {\n        return;\n      }\n      vm.executeFinishPicking(true, true);\n    }\n\n    function executeFinishPicking(pack, ship) {\n      vm.finishing = true;\n\n      api.inventories.pickingOrder.get(\n        {\n          id: vm.pickingOrder.id,\n          option: 'get-pending-amount'\n        },\n        function(response, fn, status) {\n          vm.finishing = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var totalPicked = response.total_picked;\n\n            if (totalPicked !== vm.gridOptions.totalItems) {\n              $mdDialog.show({\n                controller: 'FinishPickingOrderDialogController',\n                controllerAs: 'vm',\n                templateUrl: 'app/main/apps/inventory/views/picking/dialogs/finish-picking-order-dialog/finish-picking-order-dialog.html',\n                parent: angular.element($document.find('body')),\n                clickOutsideToClose: false,\n                focusOnOpen: false,\n                locals: {\n                  totalPicked: totalPicked,\n                  totalAmount: vm.gridOptions.totalItems,\n                  isPacking: pack,\n                  isShipping: ship\n                }\n              }).then(function(pickAll) {\n                if (!pack) {\n                  finishPicking(pickAll);\n                } else {\n                  finishAndPackPickingOrder(pickAll, ship);\n                }\n              });\n            } else {\n              if (!pack) {\n                finishPicking(true);\n              } else {\n                finishAndPackPickingOrder(true, ship);\n              }\n            }\n          } else {\n            $mdToast.show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right'));\n          }\n        }\n      );\n    }\n\n    function showMissingDefaultPackingSerialNumberType() {\n      $mdToast.show(\n        $mdToast.simple()\n          .textContent($filter('translate')('ERRORS.ERROR_12002_MISSING_PACKING_ORDER_SERIAL_NUMBER_TYPE'))\n          .action($filter('translate')('APPS.SETTING'))\n          .highlightAction(true)\n          .hideDelay(7500)\n          .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          $state.go('app.inventory.configuration.default_serial_numbers');\n        }\n      });\n    }\n\n    function finishAndPackPickingOrder(allPicked, sendPackingOrder) {\n      vm.finishing = true;\n      api.inventories.pickingOrder.update(\n        {\n          id: vm.pickingOrder.id,\n          option: 'finish-and-pack-picking-order',\n          all_picked: allPicked,\n          send_packing_order: sendPackingOrder\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.FINISH_AND_PROCESS_PACKING_TOAST')).position('top right'));\n            angular.extend(vm.pickingOrder, response.picking_order);\n            getGridProductsPage();\n            if (vm.previousState) {\n              $state.go(vm.previousState);\n            } else {\n              $state.go('app.inventory.picking_packing', { tab: 'packed' });\n            }\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (response.message === 'ERROR_12002_MISSING_PACKING_ORDER_SERIAL_NUMBER_TYPE') {\n              showMissingDefaultPackingSerialNumberType();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.finishing = false;\n        }\n      );\n    }\n\n\n    function finishPicking(allPicked) {\n      vm.finishing = true;\n      api.inventories.pickingOrder.update(\n        {\n          id: vm.pickingOrder.id,\n          option: 'finish',\n          all_picked: allPicked\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            angular.extend(vm.pickingOrder, response.picking_order);\n            getGridProductsPage();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.PICKING_SUCCESSFUL')).position('top right'));\n            if (vm.previousState) {\n              $state.go(vm.previousState);\n            } else {\n              $state.go('app.inventory.picking_packing', { tab: 'picked' });\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.finishing = false;\n        }\n      );\n    }\n\n    function bulkEditStats(itemStatus) {\n      var selectedItems = [];\n      vm.gridApi.selection.getSelectedRows().forEach(function(row) {\n        if (row.status !== itemStatus) {\n          var opv = getOrderProductVariantFromRow(row);\n          selectedItems.push(opv);\n        }\n      });\n      if (selectedItems.length === 0) {\n        return;\n      }\n      api.inventories.pickingOrder.update({\n        id: vm.pickingOrder.id,\n        option: 'change-pickable-item-status',\n        order_product_variants: selectedItems,\n        status: itemStatus\n\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var picking_order_product_variant_ids = response.picking_order_product_variant_ids;\n          vm.gridApi.selection.getSelectedRows().forEach(function(row, index) {\n            row.status = itemStatus;\n            if (\n              picking_order_product_variant_ids &&\n              picking_order_product_variant_ids[index] !== undefined\n            ) {\n              updateRowData(\n                row,\n                'picking_order_product_variant_id',\n                picking_order_product_variant_ids[index]\n              );\n            }\n          });\n          if (vm.pickingOrder.status === vm.PICKING_ORDER_STATUS.PENDING_TO_PICK) {\n            updatePickingOrder();\n          }\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function changePickItemLot(row) {\n      if (vm.changingPickingLot[row.opv_id]) {\n        return;\n      }\n\n      vm.changingPickingLot[row.opv_id] = true;\n      api.inventories.pickingOrder.update({\n        id: vm.pickingOrder.id,\n        option: 'update-pickable-item-uid-stock',\n        order_product_variant: getOrderProductVariantFromRow(row)\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.LOT_CHANGED_SUCCESSFULLY')).position('top right'));\n          updateRowData(row, 'picking_order_product_variant_id', response.picking_order_product_variant_id);\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.changingPickingLot[row.opv_id] = false;\n        vm.uidStocks = [];\n      });\n    }\n\n    function updateRowData(row, field, newValue) {\n      if (row && row.hasOwnProperty(field)) {\n        row[field] = newValue;\n        vm.gridApi.core.notifyDataChange(uiGridConstants.dataChange.EDIT);\n      }\n    }\n\n    function changePickItemStatusByBarcode(barcode) {\n      api.inventories.pickingOrder.update({\n        id: vm.pickingOrder.id,\n        option: 'change-pickable-item-status-by-barcode',\n        barcode: barcode\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var updatedVariant = response.updated_variant;\n          var value = vm.gridOptions.data.filter(function(item) {\n            return item.box === updatedVariant.box && item.opv_id === updatedVariant.opv_id &&\n              item.pickable_item_type === updatedVariant.pickable_item_type && item.status !== ITEM_PICKING_STATUS.ITEM_PICKED;\n          });\n          if (value.length > 0) {\n            value[0].status = ITEM_PICKING_STATUS.ITEM_PICKED;\n            updateRowData(value[0], 'picking_order_product_variant_id', response.picking_order_product_variant_id);\n          }\n          if (vm.pickingOrder.status === vm.PICKING_ORDER_STATUS.PENDING_TO_PICK) {\n            updatePickingOrder();\n          }\n        } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.PRODUCT_NOT_FOUND')).position('top right'));\n          Audio.playErrorSound();\n        } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.' + response.Error)).position('top right'));\n          Audio.playErrorSound();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          Audio.playErrorSound();\n        }\n      });\n    }\n\n    function changePickItemStatus(row) {\n      if (vm.changingPickingStatus[row.opv_id]) {\n        return;\n      }\n\n      var itemStatus = row.status;\n      if (itemStatus === ITEM_PICKING_STATUS.ITEM_PENDING_TO_PICK) {\n        itemStatus = ITEM_PICKING_STATUS.ITEM_PICKED;\n      } else {\n        itemStatus = ITEM_PICKING_STATUS.ITEM_PENDING_TO_PICK;\n      }\n      vm.changingPickingStatus[row.opv_id] = true;\n      api.inventories.pickingOrder.update({\n        id: vm.pickingOrder.id,\n        option: 'change-pickable-item-status',\n        order_product_variants: [getOrderProductVariantFromRow(row)],\n        status: itemStatus\n      }, function(response, fn, status) {\n        try {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            row.status = itemStatus;\n            if (response.picking_order_product_variant_ids) {\n              updateRowData(row, 'picking_order_product_variant_id', response.picking_order_product_variant_ids[0]);\n            }\n            if (vm.pickingOrder.status === vm.PICKING_ORDER_STATUS.PENDING_TO_PICK) {\n              updatePickingOrder();\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        } catch (error) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        } finally {\n          vm.changingPickingStatus[row.opv_id] = false;\n        }\n      });\n    }\n\n    function getOrderProductVariantFromRow(row) {\n      return {\n        'opv_id': row.opv_id,\n        'pickable_item_type': row.pickable_item_type,\n        'box': row.box,\n        'uid_stock': row.uid_stock,\n        'picking_order_product_variant_id': row.picking_order_product_variant_id\n      };\n    }\n\n    function updatePickingOrder() {\n      api.inventories.pickingOrder.get(\n        {\n          id: vm.pickingOrder.id\n        },\n        function(response, fn, status) {\n          angular.extend(vm.pickingOrder, response);\n        }\n      );\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          // saveStatus();\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridProductsPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.rowsRendered($scope, function() {\n        var grid = this.grid;\n        var allSelected = true;\n        grid.rows.forEach(function(part, index, array) {\n          if (vm.keptSelectionArray.includes(array[index].entity.id)) {\n            array[index].isSelected = true;\n          } else if (allSelected) {\n            allSelected = false;\n          }\n        });\n\n        if (allSelected) {\n          grid.selection.selectAll = true;\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function(row) {\n        updateSelectedRows(row);\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          // TODO: saveStatus();\n          getGridProductsPage();\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChangedBatch($scope, function() {\n        if (vm.gridApi.selection.getSelectAllState()) {\n          this.grid.rows.map(function(row) {\n            var idx = vm.keptSelectionArray.indexOf(row.entity.id);\n            if (idx === -1) {\n              vm.keptSelectionArray.push(row.entity.id);\n            }\n          });\n        } else {\n          this.grid.rows.map(function(row) {\n            updateSelectedRows(row);\n          });\n        }\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function(colDef) {\n        if (vm.uiGridInitialized) {\n          // TODO: saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          // TODO: saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          // TODO: saveStatus();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function() {\n        // TODO: loadStatus();\n        getGridProductsPage();\n      }, 200);\n    }\n\n    function updateSelectedRows(changed_row) {\n      var idx = vm.keptSelectionArray.indexOf(changed_row.entity.id);\n      if (idx > -1) {\n        vm.keptSelectionArray.splice(idx, 1);\n      } else {\n        vm.keptSelectionArray.push(changed_row.entity.id);\n      }\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function(column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setGridColumns(true);\n      // saveStatus();\n      getGridProductsPage();\n    }\n\n    function setGridColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n      angular.extend(vm.columns, {\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: getColumnStatusVisibility('cover_thumbnail', true, avoidState),\n          minWidth: 48,\n          width: 48,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<md-icon ng-if=\"!row.entity.cover_thumbnail\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '<img  ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>'\n        },\n        origin_order_autocode: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'reference',\n          permission: true,\n          visible: getColumnStatusVisibility('reference', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: constructCellTemplateLinkAutocode('{{row.entity.reference}}')\n        },\n        origin_code: {\n          displayName: $filter('translate')('ORDER.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('ORDER.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: getColumnStatusVisibility('origin_code', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"ui-grid-cell cell-middle\">{{row.entity.origin_code || \\'-\\'}}</div>'\n        },\n        name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          headerTooltip: $filter('translate')('PRODUCT.NAME'),\n          field: 'name',\n          permission: true,\n          visible: getColumnStatusVisibility('name', false, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.name || \\'-\\'}}</div>'\n        },\n        sku: {\n          displayName: $filter('translate')('PRODUCT.SKU'),\n          headerTooltip: $filter('translate')('PRODUCT.SKU'),\n          field: 'sku',\n          permission: true,\n          visible: getColumnStatusVisibility('sku', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.sku || \\'-\\'}}</div>'\n        },\n        brand: {\n          displayName: $filter('translate')('PRODUCT.BRAND'),\n          headerTooltip: $filter('translate')('PRODUCT.BRAND'),\n          field: 'brand',\n          permission: true,\n          visible: getColumnStatusVisibility('brand', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.brand || \\'-\\'}}</div>'\n        },\n        category: {\n          displayName: $filter('translate')('PRODUCT.CATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: getColumnStatusVisibility('category', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.category || \\'-\\'}}</div>'\n        },\n        variant_1: {\n          displayName: $filter('translate')('PRODUCT.VARIANT_1'),\n          headerTooltip: $filter('translate')('PRODUCT.VARIANT_1'),\n          field: 'variant_1',\n          permission: true,\n          visible: getColumnStatusVisibility('variant_1', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.variant_1 || \\'-\\'}}</div>'\n        },\n        variant_2: {\n          displayName: $filter('translate')('PRODUCT.VARIANT_2'),\n          headerTooltip: $filter('translate')('PRODUCT.VARIANT_2'),\n          field: 'variant_2',\n          permission: true,\n          visible: getColumnStatusVisibility('variant_2', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.variant_2 || \\'-\\'}}</div>'\n        },\n        warehouse_location: {\n          displayName: $filter('translate')('PRODUCT.STOCK_LOCATIONS'),\n          headerTooltip: $filter('translate')('PRODUCT.STOCK_LOCATIONS'),\n          field: 'location',\n          permission: true,\n          visible: getColumnStatusVisibility('location', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.location || \\'-\\'}}</div>'\n        },\n        uid_stock: {\n          displayName: $filter('translate')('PRODUCT.LOTE_UID'),\n          headerTooltip: $filter('translate')('PRODUCT.LOTE_UID'),\n          field: 'uid_stock',\n          permission: true,\n          visible: getColumnStatusVisibility('uid_stock', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: [\n            '<div class=\"cell-middle full-width\">',\n            ' <md-select class=\"nd-input custom-md-select\" ng-model=\"row.entity.uid_stock\"',\n            '   ng-if=\"row.entity.is_batches_manager\"',\n            '   md-on-open=\"grid.appScope.vm.openSelectUidStock(row)\"',\n            '   ng-change=\"grid.appScope.vm.onUidStockChange(row)\"',\n            '   ng-init=\"row.entity.old_uid_stock = row.entity.uid_stock; row.entity.old_uid_stock_uid = row.entity.uid_stock_uid\"',\n            '   placeholder=\"{{\\'PRODUCT.LOTE_UID\\' | translate}}\">',\n            '   <md-select-header ng-if=\"!grid.appScope.vm.loadingUidStocks\">',\n            '     <input class=\"md-text\" type=\"search\" ng-model=\"grid.appScope.vm.uidStockSearch\" placeholder=\"{{\\'GENERAL.SEARCH\\' | translate}}\">',\n            '   </md-select-header>',\n            '   <md-option id=\"opt\" ng-if=\"!row.entity.fetched && row.entity.uid_stock && !grid.appScope.vm.loadingUidStocks && !row.entity.uidStocks\" ng-value=\"row.entity.uid_stock\">',\n            '     {{row.entity.uid_stock_uid}}<br ng-if=\"row.entity.uid_stock_expiration_date\">',\n            '     <small ng-if=\"row.entity.uid_stock_expiration_date\" class=\"secondary-text option-hack\">{{\"PRODUCT.EXPIRATION_DATE\" | translate}}: {{uid.expiration_date | date: \"dd/MM/yyyy\"}}</small>',\n            '   </md-option>',\n            '   <md-option ng-value=\"null\" ng-if=\"row.entity.uidStocks && row.entity.uid_stock\">-</md-option>',\n            '   <md-option ng-repeat=\"uid in row.entity.uidStocks | orderBy: \\'id\\' | filter:grid.appScope.vm.uidStockSearch\" ng-value=\"uid.id\">',\n            '     {{uid.uid}}<br ng-if=\"uid.expiration_date\">',\n            '     <small ng-if=\"uid.expiration_date\" class=\"secondary-text option-hack\">{{\"PRODUCT.EXPIRATION_DATE\" | translate}}: {{uid.expiration_date | date: \"dd/MM/yyyy\"}}</small>',\n            '   </md-option>',\n            ' </md-select>',\n            '<span ng-if=\"!row.entity.is_batches_manager\">-</span>',\n            '</div>'\n          ].join('')\n        },\n        warehouse_location_position: {\n          displayName: $filter('translate')('PRODUCT.STOCK_LOCATION_POSITION'),\n          headerTooltip: $filter('translate')('PRODUCT.STOCK_LOCATION_POSITION'),\n          field: 'position',\n          permission: true,\n          visible: getColumnStatusVisibility('position', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding cell-right',\n          cellTemplate: '<span>{{row.entity.position | number: 0}}</span>'\n        },\n        box: {\n          displayName: $filter('translate')('PICKING.BOX'),\n          headerTooltip: $filter('translate')('PICKING.BOX'),\n          field: 'box',\n          permission: true,\n          visible: getColumnStatusVisibility('box', true, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding cell-right',\n          cellTemplate: '<span>{{row.entity.box}}</span>'\n        },\n        status: {\n          displayName: $filter('translate')('ORDER.STATUS'),\n          headerTooltip: $filter('translate')('ORDER.STATUS'),\n          headerCellTemplate: '<div class=\"mt-16 ml-8\"><span translate=\"ORDER.STATUS\"></span><md-icon class=\"icon icon-information-outline name font-size-16 mr-10 ml-8\"><md-tooltip><span translate=\"PICKING.STATUS_TOOLTIP\"></span></md-tooltip></md-icon></div>',\n          field: 'status',\n          permission: true,\n          visible: getColumnStatusVisibility('status', true, avoidState),\n          minWidth: 220,\n          enablePinning: false,\n          pinnedRight: true,\n          enableHiding: false,\n          cellTemplate: '<md-button ng-click=\"grid.appScope.vm.changePickItemStatus(row.entity)\" ng-disabled=\"grid.appScope.vm.isPickingOrderPicked()\" ng-if=\"row.entity.status==1\" layout=\"row\" layout-align=\"center center\" class=\"text-boxed gray p-0 soft-button\">' +\n            '<md-tooltip><span translate=\"PICKING.PENDING_TO_PICK_TOOLTIP\"></span></md-tooltip>' +\n            '<md-icon class=\"s16\" md-font-icon ng-if=\"!grid.appScope.vm.changingPickingStatus[row.entity.opv_id]\"' +\n            'md-svg-src=\"assets/images/custom-material-design-icons/circle-pending.bbd9c65e.svg\"></md-icon>' +\n            '<md-progress-circular md-diameter=\"15px\" ng-if=\"grid.appScope.vm.changingPickingStatus[row.entity.opv_id]\"></md-progress-circular>' +\n            '<span class=\"ml-10 text-bold\" translate=\"PICKING.PENDING_TO_PICK\"></span>' +\n            '</md-button>' +\n            '<md-button ng-click=\"grid.appScope.vm.changePickItemStatus(row.entity)\" ng-disabled=\"grid.appScope.vm.isPickingOrderPicked()\" ng-if=\"row.entity.status==2\" layout=\"row\" layout-align=\"center center\" class=\"text-boxed md-green-A700-bg p-0 soft-button text-black\">' +\n            '<md-tooltip><span translate=\"PICKING.PICKED_TOOLTIP\"></span></md-tooltip>' +\n            '<md-icon class=\"s16\" md-font-icon ng-if=\"!grid.appScope.vm.changingPickingStatus[row.entity.opv_id]\"' +\n            'md-svg-src=\"assets/images/custom-material-design-icons/circle-picked.374e1f2a.svg\"></md-icon>' +\n            '<md-progress-circular md-diameter=\"15px\" ng-if=\"grid.appScope.vm.changingPickingStatus[row.entity.opv_id]\"></md-progress-circular>' +\n            '<span class=\"ml-10 text-bold\" translate=\"PICKING.PICKED\"></span>' +\n            '</md-button>'\n        },\n        barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'barcode',\n          permission: true,\n          visible: getColumnStatusVisibility('barcode', false, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.barcode}}</div>'\n        },\n        subcategory: {\n          displayName: $filter('translate')('PRODUCT.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.SUBCATEGORY'),\n          field: 'subcategory',\n          permission: true,\n          visible: getColumnStatusVisibility('subcategory', false, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.subcategory}}</div>'\n        },\n        season: {\n          displayName: $filter('translate')('PRODUCT.SEASON'),\n          headerTooltip: $filter('translate')('PRODUCT.SEASON'),\n          field: 'season',\n          permission: true,\n          visible: getColumnStatusVisibility('season', false, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season}}</div>'\n        },\n        collection: {\n          displayName: $filter('translate')('COLLECTIONS.COLLECTION'),\n          headerTooltip: $filter('translate')('COLLECTIONS.COLLECTION'),\n          field: 'collection',\n          permission: true,\n          visible: getColumnStatusVisibility('collection', false, avoidState),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.collection}}</div>'\n        }\n      });\n\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function(v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function(column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    function getGridProductsPagePostData() {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n      d.long_url_get = true;\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.page = vm.status.pageNumber;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Fields\n      d.fields = getGridVisibleColumnFields();\n\n      // Search\n      d.search = vm.status.search;\n\n      return d;\n    }\n\n    function getGridProductsPage() {\n      vm.loading = true;\n\n      api.inventories.pickingOrder.get({\n        id: vm.pickingOrder.id,\n        option: 'pickable-items',\n        data: getGridProductsPagePostData()\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = response.pickable_items;\n          vm.gridOptions.totalItems = response.total_items;\n          vm.status.ordering = response.ordering;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loading = false;\n      });\n    }\n\n    function deletePickingOrder() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PICKING.DELETE_PICKING_ORDER_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('PICKING.DELETE_PICKING_ORDER_DIALOG_DESCRIPTION', { autocode: vm.pickingOrder.autocode }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        api.inventories.pickingOrder.delete({\n          id: vm.pickingOrder.id\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $state.go('app.inventory.picking_packing', { tab: 'to-prepare' });\n          }\n        });\n      });\n\n    }\n\n\n    function userQuerySearch(text) {\n      var deferred = $q.defer();\n      text = text.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.users.get(\n        {\n          search: text\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function updatePickedBy(event) {\n      api.inventories.pickingActivity.update(\n        vm.pickingOrder.picking_activity,\n        function(response, callback, status) {\n          if (status === 200) {\n            angular.extend(vm.pickingOrder.picking_activity, response);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function assignLotToPickingItemByDatamatrix(datamatrix) {\n      api.inventories.pickingOrder.update({\n        id: vm.pickingOrder.id,\n        option: 'assign-lot-to-pickable-item',\n        gs1_number: datamatrix\n      }, function(response, fn, status) {\n        switch (status) {\n          case HTTP_STATUS.HTTP_200_OK:\n            getGridProductsPage();\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.BATCH_ASSIGNED_OK')).position('top right'));\n            break;\n          case HTTP_STATUS.HTTP_404_NOT_FOUND:\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.PRODUCT_NOT_FOUND')).position('top right'));\n            Audio.playErrorSound();\n            break;\n          case HTTP_STATUS.HTTP_409_CONFLICT:\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.' + response.Error)).position('top right'));\n            Audio.playErrorSound();\n            break;\n          default:\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            Audio.playErrorSound();\n            break;\n        }\n      });\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n    }\n\n    function openSelectUidStock(row) {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n        e.stopPropagation();\n      });\n\n      if (row.entity.fetched) {\n        return;\n      }\n\n      fetchUidStocks(row);\n    }\n\n    function fetchUidStocks(row) {\n      vm.loadingUidStocks = true;\n\n      var url = api.urls.inventories.uidStocks.replace('/:id/', '');\n      var params = {\n        product_variant_id: row.entity.product_variant_id,\n        source_warehouse: vm.pickingOrder.warehouse.id,\n        status: 'available'\n      };\n      return $http.get(url, { params: params }).then(function(response) {\n        if (response.data && response.data.results) {\n          row.entity.fetched = true;\n          row.entity.uidStocks = response.data.results;\n\n          if (row.entity.uid_stock && !row.entity.uidStocks.some(function(uid) {\n            return uid.id === row.entity.uid_stock;\n          })) {\n            row.entity.uidStocks.unshift({\n              id: row.entity.uid_stock,\n              uid: row.entity.uid_stock_uid\n            });\n          }\n        }\n        vm.loadingUidStocks = false;\n      }).catch(function() {\n        vm.loadingUidStocks = false;\n      });\n    }\n\n    function onUidStockChange(row) {\n      var oldValue = row.entity.old_uid_stock;\n      var newValue = row.entity.uid_stock;\n\n      if (oldValue === newValue) {\n        return;\n      }\n\n      if (oldValue === null && newValue !== null) {\n        changePickItemLot(row.entity);\n      }\n\n      if (oldValue !== null && oldValue !== newValue) {\n        showChangeLotConfirmDialog(row);\n      }\n    }\n\n    function showChangeLotConfirmDialog(row) {\n      var selectedUid = row.entity.uidStocks.find(function(uid) {\n        return uid.id === row.entity.uid_stock;\n      });\n\n      if (!selectedUid || !row.entity.old_uid_stock_uid) {\n        return changePickItemLot(row.entity);\n      }\n\n      var isRemoving = row.entity.old_uid_stock !== null && row.entity.uid_stock === null;\n\n      var title_trans_key = isRemoving ? 'PICKING.REMOVE_LOT_NUMBER_DIALOG_TITLE' : 'PICKING.CHANGE_LOT_NUMBER_DIALOG_TITLE';\n      var body_trans_key = isRemoving ? 'PICKING.REMOVE_LOT_NUMBER_DIALOG_DESCRIPTION' : 'PICKING.CHANGE_LOT_NUMBER_DIALOG_DESCRIPTION';\n      var ok_trans_key = isRemoving ? 'GENERAL.YES_REMOVE' : 'GENERAL.YES_CHANGE';\n\n      var body_translation = $filter('translate')(body_trans_key, {\n        productName: row.entity.name,\n        currentLotNumber: row.entity.old_uid_stock_uid,\n        newLotNumber: row.entity.uid_stock_uid\n      });\n\n      row.entity.uid_stock_uid = selectedUid ? selectedUid.uid : '-';\n\n      $mdDialog.show({\n        template:\n          '<md-dialog aria-label=\"Change Lot Number\">' +\n          '  <md-dialog-content class=\"md-dialog-content\">' +\n          '    <h2 class=\"md-title\">{{ \"' + title_trans_key + '\" | translate}}</h2>' +\n          '    <div class=\"md-dialog-content-body\">' +\n          body_translation +\n          '    </div>' +\n          '  </md-dialog-content>' +\n          '  <md-dialog-actions layout=\"row\">' +\n          '    <md-button class=\"stroked\" ng-click=\"cancel()\">' +\n          '      {{ \"GENERAL.NO_KEEP_AS_IS\" | translate}}' +\n          '    </md-button>' +\n          '    <md-button class=\"md-primary md-raised\" ng-click=\"confirm()\">' +\n          '      {{ \"' + ok_trans_key + '\" | translate}}' +\n          '    </md-button>' +\n          '  </md-dialog-actions>' +\n          '</md-dialog>',\n        controller: DialogController,\n        parent: angular.element(document.body),\n        clickOutsideToClose: true\n      });\n\n      function DialogController($scope, $mdDialog) {\n        $scope.confirm = function() {\n          changePickItemLot(row.entity);\n          $mdDialog.hide();\n        };\n\n        $scope.cancel = function() {\n          row.entity.uid_stock = row.entity.old_uid_stock;\n          row.entity.uid_stock_uid = row.entity.old_uid_stock_uid;\n          $mdDialog.cancel();\n        };\n      }\n    }\n\n    function constructCellTemplateLinkAutocode(rows) {\n      return '<div class=\"cell-middle\">' +\n\n        '<nd-a ng-if=\"row.entity.pickable_item_type === \\'TransferOrderDeliveryProductVariant\\'\" ' +\n        'state=\"\\'app.inventory.transfers.transfer.delivery\\'\" state-params=\"{id:row.entity.order_id}\">' + rows + '</nd-a>' +\n\n        '<nd-a ng-if=\"row.entity.pickable_item_type === \\'SaleOrderDeliveryProductVariant\\'\" ' +\n        'state=\"\\'app.wholesale.sales.sale.delivery\\'\" state-params=\"{id: row.entity.order_id}\">' + rows + '</nd-a>' +\n\n        '<nd-a ng-if=\"row.entity.pickable_item_type === \\'PosOrderFulfillmentProductVariant\\'\" ' +\n        'state=\"\\'app.ecommerce.orders.order\\'\" state-params=\"{id: row.entity.order_id}\">' + rows + '</nd-a>' +\n\n        '</div>';\n    }\n\n    function goBack() {\n      if (vm.previousState) {\n        $state.go(vm.previousState);\n      } else {\n        $state.go('app.inventory.picking_packing');\n      }\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('PackingController', PackingController);\n\n  /** @ngInject */\n  function PackingController(UiGridService, $filter, $scope, $timeout, Session, api, HTTP_STATUS, PackingOrderData,\n                             $mdToast, $q, $document, UsersData, PACKING_STATUS, ITEM_PACKING_STATUS, $mdDialog, $state,\n                             PACKING_ORDER_STATUS_COLORS, INTEGRATION_APP_TYPE, byteArrayBufferService, PackingOrder) {\n\n    // Data\n    var vm = this;\n    vm.currentNavItem = 'details';\n    vm.packingOrder = new PackingOrder(PackingOrderData);\n\n    vm.usersList = UsersData.results;\n    vm.userSearchText = '';\n    vm.PACKING_ORDER_STATUS = PACKING_STATUS;\n    vm.PACKING_ORDER_STATUS_COLORS = PACKING_ORDER_STATUS_COLORS;\n    vm.changingPackingStatus = {};\n    vm.loading = false;\n\n    // Methods\n    vm.updatePackedBy = updatePackedBy;\n    vm.getStatusLabel = getStatusLabel;\n    vm.getStatusColorClass = getStatusColorClass;\n\n    vm.hasCompanySendcloud = hasCompanySendcloud;\n\n    vm.downloadLabels = downloadLabels;\n    vm.handleDownloadLabels = handleDownloadLabels;\n    vm.handleDownloadLabelsWithDeliveries = handleDownloadLabelsWithDeliveries;\n\n    vm.openShippingDialog = openShippingDialog;\n\n    vm.getOrderTypeLabel = getOrderTypeLabel;\n    vm.checkAndFinishDialog = checkAndFinishDialog;\n    vm.deletePackingOrder = deletePackingOrder;\n    vm.uidListenerCallback = uidListenerCallback;\n    vm.back = back;\n\n\n    vm.tagAndFinishWithSendcloud = tagAndFinishWithSendcloud;\n    vm.generateLabels = generateLabels;\n\n\n    vm.printOrder = printOrder;\n\n    function tagAndFinishWithSendcloud() {\n      $scope.$broadcast('tagAndFinishWithSendcloud');\n    }\n\n    function generateLabels() {\n      $scope.$broadcast('generateLabels');\n    }\n\n    function handleDownloadLabels() {\n      downloadLabels();\n    }\n\n    function handleDownloadLabelsWithDeliveries() {\n      downloadLabels(null, true);\n    }\n\n    function downloadLabels(externalParcelsIds, printDeliveries) {\n      vm.loading = true;\n      if (!printDeliveries) {\n        printDeliveries = false;\n      }\n      var data = {\n        id: vm.packingOrder.id,\n        option: 'get-external-labels',\n        print_deliveries: printDeliveries,\n      };\n      if (externalParcelsIds) {\n        data.external_parcels_ids = externalParcelsIds.join(',');\n      }\n      api.inventories.pickingPackingPackingOrders.get(\n        data,\n        function (response, fn, status) {\n          var b64 = '';\n          for (var i = 0; response[i] !== undefined; i++) {\n            b64 += response[i];\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var sampleArr = byteArrayBufferService.base64ToArrayBuffer(b64);\n            var filename = 'Labels_' + vm.packingOrder.orderAutocode;\n            byteArrayBufferService.saveByteArray(filename, sampleArr);\n            vm.loading = false;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.loading = false;\n          }\n        }\n      );\n    }\n\n    function printOrder() {\n      vm.generating_order_pdf = true;\n      api.inventories.packingOrder.get(\n        {\n          id: vm.packingOrder.id,\n          option: 'get-order-pdf-file'\n        },\n        function (response, fn, status) {\n          var b64 = '';\n          for (var i = 0; response[i] !== undefined; i++) {\n            b64 += response[i];\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.generating_order_pdf = false;\n            var sampleArr = byteArrayBufferService.base64ToArrayBuffer(b64);\n            var filename = vm.packingOrder.order_autocode;\n            byteArrayBufferService.saveByteArray(filename, sampleArr);\n          } else {\n            vm.generating_order_pdf = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n    function back() {\n      $state.go('app.inventory.picking_packing');\n    }\n\n    function markAsShipped() {\n      vm.loading = true;\n      api.inventories.packingOrder.update(\n        {\n          ids: [vm.packingOrder.id],\n          option: 'ship'\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && response.packing_orders.length > 0) {\n            vm.packingOrder = new PackingOrder(response.packing_orders[0]);\n            vm.loading = false;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.loading = false;\n          }\n        }\n      );\n    }\n\n    function openShippingDialog() {\n      $mdDialog.show({\n        controller: 'ShippingDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/packing/dialogs/shipping-dialog/shipping-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          autocodes: vm.packingOrder.ordersAutocode,\n          hasParcels: vm.packingOrder.hasParcels()\n        }\n      }).then(function () {\n        markAsShipped();\n      });\n    }\n\n    function updatePackedBy() {\n      api.inventories.packingActivity.update(\n        vm.packingOrder.packing_activity,\n        function (response, callback, status) {\n          if (status === 200) {\n            angular.extend(vm.packingOrder.packing_activity, response);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function getStatusColorClass() {\n      return vm.PACKING_ORDER_STATUS_COLORS[vm.packingOrder.status];\n    }\n\n    function getStatusLabel() {\n      return $filter('translate')('PACKING.' + vm.PACKING_ORDER_STATUS[vm.packingOrder.status]);\n    }\n\n    function getOrderTypeLabel(article) {\n      if (article) {\n        return $filter('translate')('PACKING.' + vm.packingOrder.orderType.toUpperCase() + '_WITH_ARTICLE');\n      }\n      return $filter('translate')('PACKING.' + vm.packingOrder.orderType.toUpperCase());\n    }\n\n    function hasCompanySendcloud() {\n      return Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n    }\n\n    function checkAndFinishDialog() {\n      $scope.$broadcast('PackingController::finishPacking');\n    }\n\n    function deletePackingOrder() {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PACKING.DELETE_PACKING_ORDER_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('PACKING.DELETE_PACKING_ORDER_DIALOG_DESCRIPTION', {\n          autocode: vm.packingOrder.autocode,\n          orderType: vm.getOrderTypeLabel(true),\n          orderAutocode: vm.packingOrder.orderAutocode\n        }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function () {\n        api.inventories.pickingPackingPackingOrder.delete({\n          id: vm.packingOrder.id\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $state.go('app.inventory.picking_packing');\n          }\n        });\n      });\n\n    }\n\n    function uidListenerCallback(barcode) {\n      var rows = $scope.vm.gridApi.grid.rows;\n      var toast = true;\n      var find = false;\n\n      if ((vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress()) && Session.hasPermissions('inventory.packings.pack_products')) {\n        for (var i = 0; i < rows.length; i++) {\n          var row = rows[i];\n          if (row.entity.barcode === barcode) {\n            find = true;\n            if (row.entity.status === vm.PACKING_ORDER_STATUS.PENDING_TO_PACK) {\n              vm.changePackItemStatus(row.entity);\n              toast = false;\n              break;\n            }\n          }\n        }\n        if (toast) {\n          if (find) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ALL_PICKED_BY_ITEM')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.BARCODE_NOT_FOUND')).position('top right'));\n          }\n          Audio.playErrorSound();\n        }\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('NewInventoryProductController', NewInventoryProductController);\n\n  /** @ngInject */\n  function NewInventoryProductController(Categories, SubCategories, Compositions, Brands, Seasons, PricingTiersData, CollectionsData,\n                                         VariantCategoriesData, api, $filter, $rootScope, $mdToast, $state, $stateParams, TaxesData,\n                                         $mdDialog, InventoryConfiguration, ContactsData, CURRENCIES, PRODUCT_TYPES) {\n    var vm = this;\n\n    // Data\n    vm.product = {\n      tags: [],\n      collection: $stateParams.idCollection,\n      is_sample: !!$stateParams.idCollection,\n      is_gift_card: $stateParams.is_gift_card,\n      is_bundle: !!$stateParams.isBundle,\n      is_raw_material: !!$stateParams.isRawMaterial,\n      size_variants: [],\n      color_variants: [],\n      manage_stock: true,\n      allow_b2b_pre_sales: true,\n      bundleContentVariants: [],\n    };\n\n    vm.brands = Brands.results;\n    vm.compositions = Compositions.results;\n    vm.categories = Categories.results;\n    vm.collections = CollectionsData.results;\n    vm.subcategories = SubCategories.results;\n    vm.seasons = Seasons.results;\n    vm.contacts = ContactsData.results;\n    vm.pricingTiers = PricingTiersData.results;\n    vm.variantCategories = VariantCategoriesData.results;\n    vm.taxes = TaxesData.results;\n    vm.inventoryConfiguration = InventoryConfiguration.results[0];\n    vm.currencies = CURRENCIES;\n    vm.PRODUCT_TYPES_REVERSE = {\n      PRODUCT: PRODUCT_TYPES.PRODUCT,\n      PRODUCT_BUNDLE: PRODUCT_TYPES.PRODUCT_BUNDLE,\n      GIFT_CARD: PRODUCT_TYPES.GIFT_CARD,\n      RAW_MATERIAL: PRODUCT_TYPES.RAW_MATERIAL\n    };\n\n    //vm.wizardStep1 = {};\n    vm.waiting = false;\n\n    vm.stepTwoValid = false;\n\n    // Methods\n    vm.finishWizard = finishWizard;\n    vm.nextStep = nextStep;\n    vm.saveProductVariantsCallback = saveProductVariantsCallback;\n    vm.gotoProducts = gotoProducts;\n    vm.mainInformationSaveCallback = mainInformationSaveCallback;\n    vm.saveProduct = saveProduct;\n    vm.saveProductPrices = saveProductPrices;\n    vm.getMainTitle = getMainTitle;\n    vm.getFirstStepTitle = getFirstStepTitle;\n    vm.isValid = isValid;\n    vm.isProductBundle = isProductBundle;\n\n    // Functions\n\n\n    function finishWizard() {\n      // If the barcode pollicy has been configured\n      var generateBarcodes = null;\n      var callback = null;\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PRODUCT.GENERATE_BARCODES_TITLE'))\n        .htmlContent('<p class=\"w-400\">' + $filter('translate')('PRODUCT.GENERATE_BARCODES_MSG') + '</p>')\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.YES'))\n        .cancel($filter('translate')('GENERAL.NO'));\n\n      $mdDialog.show(confirm).then(function() {\n        vm.waiting = true;\n        generateBarcodes = true;\n      }, function() {\n        vm.waiting = true;\n        generateBarcodes = false;\n      }).then(function() {\n        callback = 'saveProductVariants';\n        $rootScope.$broadcast(callback, { 'generate_barcodes': generateBarcodes });\n      });\n    }\n\n    function nextStep(msWizard) {\n      msWizard.nextStep();\n      angular.element('#content')[0].scrollTop = 0;\n    }\n\n    function saveProductVariantsCallback() {\n      // Check whether come back to an style or to a product\n      if ($stateParams.idCollection) {\n        $state.go('app.manufacture.collections.collection.styles.style', {\n          idCollection: $stateParams.idCollection,\n          idStyle: vm.product.id\n        });\n      } else {\n        if(vm.isProductBundle()){\n          $state.go('app.inventory.products.product.bundles', { id: vm.product.id });\n        }else{\n          $state.go('app.inventory.products.product.details', { id: vm.product.id });\n        }\n      }\n    }\n\n    function saveProduct() {\n      $rootScope.$broadcast('saveProduct', {});\n    }\n\n    function saveProductPrices() {\n      $rootScope.$broadcast('saveProductPrices', {});\n    }\n\n    function gotoProducts() {\n      $state.go('app.inventory.products');\n    }\n\n    function mainInformationSaveCallback(product) {\n      angular.extend(vm.product, product);\n    }\n\n    function getFirstStepTitle() {\n      if (vm.product.is_gift_card) {\n        return 'PRODUCT.GIFT_CARD_INFORMATION';\n      } else if (vm.isProductBundle()) {\n        return 'PRODUCT.PRODUCT_BUNDLE_INFORMATION';\n      } else if (vm.product.is_raw_material) {\n        return 'PRODUCT.RAW_MATERIAL_INFORMATION';\n      }\n      return 'PRODUCT.PRODUCT_INFORMATION';\n    }\n\n    function getMainTitle() {\n      if (vm.product.is_gift_card) {\n        return 'PRODUCT.NEW_GIFT_CARD';\n      } else if (vm.isProductBundle()) {\n        return 'PRODUCT.NEW_PRODUCT_BUNDLE';\n      } else if (vm.product.is_sample) {\n        return 'COLLECTION.NEW_STYLE';\n      } else if (vm.product.is_raw_material) {\n        return 'PRODUCT.NEW_RAW_MATERIAL';\n      }\n      return 'PRODUCT.NEW_PRODUCT';\n    }\n\n    function isValid() {\n      if (vm.product.bundleContentVariants && vm.product.bundleContentVariants.length > 0) {\n        return true;\n      } else if (vm.product.size_variants.length && vm.product.color_variants.length) {\n        return true;\n      }\n      return false;\n    }\n\n    function isProductBundle() {\n      return parseInt(vm.product.product_type) === vm.PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE;\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.inventory')\n        .controller('LowStockController', LowStockController);\n\n    /** @ngInject */\n    function LowStockController($scope, Session)\n    {\n\n        // Data\n        var vm = this;\n        $scope.$parent.vm.currentNavItem = \"\";\n\n        // Methods\n\n        vm.isABCAnalysisEnabled = isABCAnalysisEnabled;\n        vm.isReplenishmentsEnabled = isReplenishmentsEnabled;\n        vm.notImplemented = notImplemented;\n\n        function isABCAnalysisEnabled(){\n          return Session.company.has_inventory_analytics;\n        }\n\n        function isReplenishmentsEnabled(){\n          return Session.company.has_inventory_analytics;\n        }\n\n        function notImplemented(event){\n          event.preventDefault();\n          event.stopPropagation();\n        }\n    }\n\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.inventory')\n      .controller('LabelsGeneratorController', LabelsGeneratorController);\n\n    /** @ngInject */\n    function LabelsGeneratorController(\n      $rootScope,\n      $document,\n      $q,\n      $http,\n      $filter,\n      $scope,\n      $stateParams,\n      $mdDialog,\n      $mdToast,\n      $mdSidenav,\n      ProductLabelDesign,\n      Session,\n      api,\n      PricingTiersData,\n      ProductLabelDesignData,\n      Utils,\n      HTTP_STATUS,\n      SEARCH_MAX_LENGTH\n    ) {\n\n      var vm = this;\n\n      // Cons\n      vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n      vm.MAX_LABELS = 4000;\n      vm.MAX_LABELS_WITHOUT_EMAIL = 100;\n      vm.ORDER_BY = {\n        'asc': 'ORDER_BY_VARIANT_ASC',\n        'desc': 'ORDER_BY_VARIANT_DESC',\n      };\n\n      // Data\n      vm.productLabelDesigns = ProductLabelDesignData.results || [];\n      vm.productLabelDesign = null;\n      vm.selectFilter = '';\n      vm.fetchingVariants = false;\n      vm.pricingTiers = PricingTiersData.results;\n      vm.variantsDict = {};\n      vm.variantCategories = [];\n      vm.variantCategoriesDict = {};\n      vm.selectedItem = null;\n      vm.productSearchText = '';\n      vm.productVariants = [];\n      vm.currencyCharacter = Session.company.currency;\n      vm.products = [];\n      vm.totalLabels = 0;\n      vm.importing = false;\n      vm.selectedWarehouse = null;\n      vm.ngFlowOptions = {};\n      vm.startAt = 1;\n      vm.usePriceExclTax = false;\n      vm.oneLabelPerPage = false;\n      vm.printGrid = false;\n      vm.ngFlow = {\n        flow: {}\n      };\n      vm.productVariantPricesByPricingTier = {};\n      vm.ready = false;\n      vm.orderBy = 'asc';\n\n      // Methods\n      vm.onSelectorOpen = onSelectorOpen;\n      vm.onSelectorClose = onSelectorClose;\n      vm.generate = generate;\n      vm.productsQuerySearch = productsQuerySearch;\n      vm.selectedProductChange = selectedProductChange;\n      vm.printLabels = printLabels;\n      vm.getAutocompleteText = getAutocompleteText;\n      vm.getTotalPages = getTotalPages;\n      vm.hasDiscount = hasDiscount;\n      vm.getPrice = getPrice;\n      vm.amountChanged = amountChanged;\n      vm.deleteProduct = deleteProduct;\n      vm.hasPrice = hasPrice;\n      vm.initUseDiscountPrice = initUseDiscountPrice;\n      vm.barcodeListenerCallback = barcodeListenerCallback;\n      vm.showImportFromWarehouseDialog = showImportFromWarehouseDialog;\n      vm.openProductSearchDialog = openProductSearchDialog;\n      vm.toggleSidenav = toggleSidenav;\n      vm.onFocus = onFocus;\n      vm.onBlur = onBlur;\n      vm.getProductIdx = getProductIdx;\n\n      // Initialze\n      init();\n\n      // Functions\n      function init() {\n        if (vm.productLabelDesigns.length) {\n          vm.productLabelDesigns = vm.productLabelDesigns.map(function (productLabelDesign) {\n            return new ProductLabelDesign(productLabelDesign);\n          });\n          vm.productLabelDesign = getDefaultProductLabelDesign();\n        } else {\n          if (localStorage.getItem(Session.company.id + '::LabelsGeneratorController::productLabelDesign')) {\n            var storedString = localStorage.getItem(Session.company.id + '::LabelsGeneratorController::productLabelDesign');\n            vm.productLabelDesign = new ProductLabelDesign(JSON.parse(storedString));\n          } else {\n            vm.productLabelDesign = new ProductLabelDesign({\n              pricing_tier: getDefaultPricingTierId()\n            });\n          }\n          vm.productLabelDesigns.push(vm.productLabelDesign)\n        }\n\n        if ($stateParams.transferOrder) {\n          initFromOrder($stateParams.transferOrder.transfer_order_products, $stateParams.transferOrder.target_warehouse);\n        } else if ($stateParams.purchaseOrder) {\n          initFromOrder($stateParams.purchaseOrder.purchase_order_products, $stateParams.purchaseOrder.target_warehouse);\n        } else if ($stateParams.saleOrder) {\n          initFromOrder($stateParams.saleOrder.sale_order_products, $stateParams.saleOrder.source_warehouse);\n        } else if ($stateParams.purchaseOrderDelivery) {\n          initFromOrder($stateParams.purchaseOrderDelivery.purchase_order_delivery_products, $stateParams.purchaseOrderDelivery.target_warehouse);\n        }\n\n        vm.currencyCharacter = getCurrentCurrency();\n\n        vm.unregisterPricingTier = $scope.$watch('vm.productLabelDesign.pricing_tier', function (newVal, oldVal) {\n          if (newVal !== oldVal && newVal) {\n            onPricingTierChange();\n          }\n        });\n\n        $scope.$on('ndProductLabelDesignCardController::productLabelDesign', function (event, productLabelDesign) {\n          vm.productLabelDesign = productLabelDesign;\n        })\n\n        $scope.$on('$destroy', function () {\n          if (vm.unregisterPricingTier) {\n            vm.unregisterPricingTier();\n          }\n        });\n\n        vm.ready = true;\n      }\n\n      function getDefaultProductLabelDesign() {\n        var defaultId = localStorage.getItem(Session.company.id + '::LabelsGeneratorController::defaultProductLabelDesignId');\n        if (defaultId) {\n          return vm.productLabelDesigns.find(function (productLabelDesign) {\n            return productLabelDesign.id === +defaultId;\n          }) || vm.productLabelDesigns[0];\n        }\n        return vm.productLabelDesigns[0];\n      }\n\n      function getDefaultPricingTierId() {\n        var pricingTierId = vm.pricingTiers[0].id;\n        for (var i = 0; i < vm.pricingTiers.length; i++) {\n          if (vm.pricingTiers[i].default) {\n            return vm.pricingTiers[i].id;\n          }\n        }\n      }\n\n      function toggleSidenav(sidenavId) {\n        $mdSidenav(sidenavId).toggle();\n      }\n\n      function initFromOrder(orderProducts, warehouse) {\n        vm.productLabelDesign.pricing_tier = warehouse.pricing_tier;\n        orderProducts.forEach(function (orderProduct) {\n\n          var orderProdutVariantAmountDict = {};\n          // Create a dict of amounts by productVariant id\n          orderProduct.order_product_variants.map(function (orderProdutVariant) {\n            return {\n              id: orderProdutVariant.id,\n              amount: orderProdutVariant.amount\n            };\n          }).forEach(function (orderProdutVariant) {\n            orderProdutVariantAmountDict[orderProdutVariant.id] = orderProdutVariant.amount;\n          });\n\n          postGetOrderProductVariants(orderProduct.product, orderProduct.product.product_variants, orderProdutVariantAmountDict);\n        });\n      }\n\n      function onSelectorOpen() {\n        // The md-select directive eats keydown events for some quick select\n        // logic. Since we have a search input here, we don't need that logic.\n        $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n          e.stopPropagation();\n        });\n      }\n\n      function onSelectorClose() {\n        // Clear the filter\n        vm.selectFilter = '';\n\n        // Unbind the input event\n        $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      }\n\n      function generate() {\n\n      }\n\n      function productsQuerySearch() {\n        var deferred = $q.defer();\n        vm.productSearchText = vm.productSearchText.substring(0, vm.SEARCH_MAX_LENGTH);\n\n        api.inventories.products.get(\n          {\n            serializer: 'ProductPosFinderSerializer',\n            pricing_tier: vm.productLabelDesign.pricing_tier,\n            search: vm.productSearchText\n          },\n          function (results) {\n            if (results.results) {\n              deferred.resolve(results.results);\n            } else {\n              deferred.resolve([]);\n            }\n          }\n        );\n        return deferred.promise;\n      }\n\n      function selectedProductChange(product, barcode) {\n        if (!product || (!barcode && vm.products.some(function (p) {\n          return product.id == p.id\n        }))) {\n          vm.fetchingVariants = false;\n          vm.productSearchText = null;\n          vm.selectedItem = null;\n          return;\n        }\n\n        // Check if product already in the list\n        var matchProduct = vm.products.find(function (prod) {\n          return prod.id === product.id\n        });\n\n        var updateProduct = function () {\n          if (!matchProduct.productVariants[primaryId][nonprimaryId].amount) {\n            matchProduct.productVariants[primaryId][nonprimaryId].amount = 0;\n          }\n          matchProduct.productVariants[primaryId][nonprimaryId].amount += 1;\n          vm.totalLabels += 1;\n        };\n\n        if (matchProduct) {\n          // Iterate by variants dict because we don't have the variants instances\n          for (var primaryId in matchProduct.productVariants) {\n            for (var nonprimaryId in matchProduct.productVariants[primaryId]) {\n              var match_barcode = matchProduct.productVariants[primaryId][nonprimaryId].barcode;\n              if (match_barcode === barcode) {\n                updateProduct();\n                return;\n              }\n              else if (match_barcode && !isNaN(match_barcode) && match_barcode.length === 13 && match_barcode[0] === '0') {\n                match_barcode = match_barcode.substring(1);\n                if (match_barcode === barcode) {\n                  updateProduct();\n                  return;\n                }\n              }\n            }\n          }\n        }\n\n        // Otherwise, call to get all variants\n        vm.fetchingVariants = true;\n        var pricingTier = vm.productLabelDesign.pricing_tier;\n        api.inventories.productVariants.get(\n          {\n            product_id: product.id,\n            serializer: 'ProductVariantWithPriceSerializer',\n            pricing_tier: pricingTier,\n          },\n          function (results, fn, status) {\n            if (status !== HTTP_STATUS.HTTP_200_OK) {\n              return\n            }\n\n            postGetProductVariants(product, results.results, barcode);\n\n            if (!vm.productVariantPricesByPricingTier[pricingTier]) {\n              vm.productVariantPricesByPricingTier[pricingTier] = {};\n            }\n\n            results.results.forEach(function (pv) {\n              vm.productVariantPricesByPricingTier[pricingTier][pv.id] = pv.price;\n            })\n          }\n        );\n      }\n\n      function postGetProductVariants(product, productVariants, barcode) {\n        product.colors = productVariants.filter(function (pv) {\n          return pv.color !== null && pv.color !== undefined;\n        }).sort(function (a, b) {\n          return a.color.position - b.color.position;\n        }).map(function (pv) {\n          return pv.color;\n        }).filter(function (pv, index, self) {\n          // remove duplicated variant\n          var index2 = self.findIndex(function (pv2) {\n            return pv2.id == pv.id;\n          });\n\n          return index2 == index;\n        });\n\n        product.sizes = productVariants.filter(function (pv) {\n          return pv.size !== null && pv.size !== undefined;\n        }).sort(function (a, b) {\n          return a.size.position - b.size.position;\n        }).map(function (pv) {\n          return pv.size;\n        }).filter(function (pv, index, self) {\n          // remove duplicated variant\n          var index2 = self.findIndex(function (pv2) {\n            return pv2.id == pv.id;\n          });\n\n          return index2 == index;\n        });\n\n        product.productVariants = {};\n        productVariants.forEach(function (productVariant) {\n          if (!productVariant.size || !productVariant.color) {\n            return;\n          }\n          if (!product.productVariants[productVariant.size.id]) {\n            product.productVariants[productVariant.size.id] = {}\n          }\n\n          // If barcode is given, means this must be incremented in 1\n          if (barcode && barcode === productVariant.barcode) {\n            if (!productVariant.amount) {\n              productVariant.amount = 0;\n            }\n\n            productVariant.amount += 1;\n            vm.totalLabels += 1;\n          }\n\n          productVariant.hasDiscount = hasDiscount(productVariant);\n          productVariant.useDiscountPrice = productVariant.discount_active;\n          if (productVariant.amount < 0) {\n            productVariant.amount = 0;\n          }\n\n          product.productVariants[productVariant.size.id][productVariant.color.id] = productVariant;\n        });\n\n        vm.products = [product].concat(vm.products);\n        vm.productVariants = productVariants.concat(vm.productVariants);\n      }\n\n      function postGetOrderProductVariants(product, productVariants, orderProdutVariantAmountDict) {\n        var tempVariantsDict = {};\n        product.size_variants_instances.forEach(function (productVariant) {\n          tempVariantsDict[productVariant.id] = productVariant;\n        });\n        product.color_variants_instances.forEach(function (productVariant) {\n          tempVariantsDict[productVariant.id] = productVariant;\n        });\n\n        product.colors = [];\n        product.sizes = [];\n\n        product.product_variants.forEach(function (variant) {\n          if (!variant.color || !variant.size) {\n            return;\n          }\n          if (!product.colors.includes(tempVariantsDict[variant.color.id]))\n            product.colors = product.colors.concat(tempVariantsDict[variant.color.id]);\n\n          if (!product.sizes.includes(tempVariantsDict[variant.size.id]))\n            product.sizes = product.sizes.concat(tempVariantsDict[variant.size.id]);\n        })\n\n        vm.fetchingVariants = false;\n        product.productVariants = {};\n\n        var principalVariantsById = {};\n        var nonPrincipalVariantsById = {};\n\n        product.primaryVariantCategories = [];\n        product.nonPrimaryVariantCategories = [];\n\n        productVariants.forEach(function (productVariant) {\n          if (!productVariant.color || !productVariant.size) {\n            return;\n          }\n          try {\n            var principalVariant = null;\n            var nonPrincipalVariant = null;\n\n            principalVariant = productVariant.size.id;\n            nonPrincipalVariant = productVariant.color.id;\n\n            principalVariant = tempVariantsDict[principalVariant];\n            nonPrincipalVariant = tempVariantsDict[nonPrincipalVariant];\n\n            if (!principalVariantsById[principalVariant.id]) {\n              principalVariantsById[principalVariant.id] = true;\n              product.primaryVariantCategories.push(principalVariant);\n            }\n            if (!nonPrincipalVariantsById[nonPrincipalVariant.id]) {\n              nonPrincipalVariantsById[nonPrincipalVariant.id] = true;\n              product.nonPrimaryVariantCategories.push(nonPrincipalVariant);\n            }\n\n            if (!product.productVariants[principalVariant.id]) {\n              product.productVariants[principalVariant.id] = {};\n            }\n            product.productVariants[principalVariant.id][nonPrincipalVariant.id] = productVariant;\n\n            // If the price is in the product variant\n            if (product.productVariants[principalVariant.id][nonPrincipalVariant.id].prices.length > 0) {\n              product.productVariants[principalVariant.id][nonPrincipalVariant.id].price = product.productVariants[principalVariant.id][nonPrincipalVariant.id].prices.find(function (price) {\n                return price.pricing_tier === vm.productLabelDesign.pricing_tier;\n              });\n              // If the product variant doesn't contain the current pricing tier\n              product.productVariants[principalVariant.id][nonPrincipalVariant.id].price = product.prices.find(function (price) {\n                return price.pricing_tier === vm.productLabelDesign.pricing_tier;\n              });\n            }\n            // If the price is in the product\n            else {\n              product.productVariants[principalVariant.id][nonPrincipalVariant.id].price = product.prices.find(function (price) {\n                return price.pricing_tier === vm.productLabelDesign.pricing_tier;\n              });\n            }\n            // Fill the amount\n            product.productVariants[principalVariant.id][nonPrincipalVariant.id].amount = orderProdutVariantAmountDict[productVariant.id];\n            vm.totalLabels += product.productVariants[principalVariant.id][nonPrincipalVariant.id].amount || 0;\n\n            //Initialize discount vars\n            var hasDiscountVar = hasDiscount(productVariant);\n            product.productVariants[principalVariant.id][nonPrincipalVariant.id].hasDiscount = hasDiscountVar;\n            product.productVariants[principalVariant.id][nonPrincipalVariant.id].useDiscountPrice = hasDiscountVar;\n          } catch (error) {\n            console.error('Product code ' + product.code + ', product variant id: ' + productVariant.id + ', ' + error);\n          }\n\n        });\n        // }\n\n        // New method\n        vm.products = [product].concat(vm.products);\n        // Old method\n        vm.productVariants = productVariants.concat(vm.productVariants);\n      }\n\n      function printLabels(documentType) {\n        if (vm.totalLabels >= vm.MAX_LABELS) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('LABELS_GENERATOR.TOO_MANY_LABELS_ERROR', {max: vm.MAX_LABELS})).position('top right'));\n          return;\n        }\n        if (!vm.productLabelDesign.isValid()) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.MISSING_REQUIRED_FIELDS_ERROR')).position('top right'));\n          return;\n        }\n        if (documentType === 'pdf') {\n          vm.printing_pdf = true;\n        } else if (documentType === 'spreadsheet') {\n          vm.printing_spreadsheet = true;\n        }\n\n        var url = api.urls.inventories.pricingTiers\n          .replace(':id', vm.productLabelDesign.pricing_tier)\n          .replace(':option', 'generate-labels');\n\n        var items = [];\n\n        vm.products.forEach(function (product) {\n          for (var pimaryVariant in product.productVariants) {\n            for (var nonPimaryVariant in product.productVariants[pimaryVariant]) {\n              items.push({\n                product_variant: product.productVariants[pimaryVariant][nonPimaryVariant].id,\n                amount: product.productVariants[pimaryVariant][nonPimaryVariant].amount,\n                use_discount: !!product.productVariants[pimaryVariant][nonPimaryVariant].useDiscountPrice,\n                product_id: product.id,\n              });\n            }\n          }\n        });\n\n        items = items.filter(function (productVariant) {\n          return productVariant.amount;\n        });\n\n        vm.productLabelDesign.label_bottom_margin = vm.productLabelDesign.label_bottom_margin || 0;\n        vm.productLabelDesign.label_left_margin = vm.productLabelDesign.label_left_margin || 0;\n        vm.productLabelDesign.label_right_margin = vm.productLabelDesign.label_right_margin || 0;\n        vm.productLabelDesign.label_top_margin = vm.productLabelDesign.label_top_margin || 0;\n        vm.productLabelDesign.page_bottom_margin = vm.productLabelDesign.page_bottom_margin || 0;\n        vm.productLabelDesign.page_left_margin = vm.productLabelDesign.page_left_margin || 0;\n        vm.productLabelDesign.page_right_margin = vm.productLabelDesign.page_right_margin || 0;\n        vm.productLabelDesign.page_top_margin = vm.productLabelDesign.page_top_margin || 0;\n\n        var data = {\n          id: vm.productLabelDesign.pricing_tier,\n          option: 'generate-labels',\n          items: items,\n          document_type: documentType,\n          product_label_design: vm.productLabelDesign,\n          order_by: vm.orderBy\n        };\n\n        if ((vm.totalLabels <= vm.MAX_LABELS_WITHOUT_EMAIL &&\n            vm.productLabelDesign.fields.filter(function (field) {\n              return field.field_name === 'image'\n            }).length === 0) ||\n          documentType === 'spreadsheet'\n        ) {\n          var url = api.urls.inventories.pricingTiers\n            .replace(':id', vm.productLabelDesign.pricing_tier)\n            .replace(':option', 'generate-labels');\n\n          $mdDialog.show(\n            $mdDialog.alert()\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .title($filter('translate')('LABELS_GENERATOR.GENERATING_LABELS'))\n              .htmlContent($filter('translate')('LABELS_GENERATOR.GENERATING_LABELS_MESSAGE_LOCAL', {email: Session.user.email}))\n              .ok($filter('translate')('GENERAL.CLOSE'))\n          );\n\n          $http.post(url, data).then(function (response) {\n            vm.printing_pdf = false;\n            vm.printing_spreadsheet = false;\n            if (documentType == 'pdf') {\n              var blob = new Blob([response.data], {type: 'application/pdf'});\n              var URL = window.URL || window.webkitURL;\n              window.open(URL.createObjectURL(blob));\n            } else if (documentType == 'spreadsheet') {\n              Utils.downloadFile(\"labels.xls\", \"application/vnd.ms-excel\", Utils.binaryStringToArrayBuffer(atob(response.data)));\n            }\n          });\n\n        } else {\n          api.inventories.pricingTiers.save(\n            data,\n            function (response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                $mdDialog.show(\n                  $mdDialog.alert()\n                    .clickOutsideToClose(true)\n                    .parent(angular.element(document.body))\n                    .title($filter('translate')('LABELS_GENERATOR.GENERATING_LABELS'))\n                    .htmlContent($filter('translate')('LABELS_GENERATOR.GENERATING_LABELS_MESSAGE', {email: Session.user.email}))\n                    .ok($filter('translate')('GENERAL.CLOSE'))\n                );\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n              vm.printing_pdf = false;\n              vm.printing_spreadsheet = false;\n            });\n        }\n      }\n\n      function getTotalPages() {\n        return Math.ceil(vm.totalLabels / vm.productLabelDesign.getLabelsPerPage());\n      }\n\n      function getAutocompleteText(product) {\n        return product.code + ' - ' + product.name;\n      }\n\n      function hasDiscount(product) {\n        return product.price && !!product.price.discount_price_incl_tax;\n      }\n\n      function hasPrice(productVariant) {\n        return (vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier] &&\n            !!vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier][productVariant.id]) ||\n          !!productVariant.price;\n      }\n\n      function getPrice(productVariant, discount) {\n        var productVariantPrice = null;\n        if (vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier])\n          productVariantPrice = vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier][productVariant.id];\n        else productVariantPrice = productVariant.price;\n        if (!productVariantPrice) return null;\n\n        if (!vm.usePriceExclTax) {\n          return discount ?\n            productVariantPrice.discount_price_incl_tax :\n            productVariantPrice.price_incl_tax;\n        }\n\n        return discount ?\n          productVariantPrice.discount_price_excl_tax :\n          productVariantPrice.price_excl_tax;\n      }\n\n      function amountChanged(newValue, oldValue) {\n        vm.totalLabels += newValue - Number(oldValue);\n      }\n\n      function deleteProduct(product) {\n        vm.products.splice(vm.products.findIndex(function (p) {\n          return p.id === product.id\n        }), 1);\n\n        vm.productVariants = vm.productVariants.filter(function (pv) {\n          return pv.product_code !== product.code;\n        })\n\n        vm.totalLabels = sumAllAmounts();\n      }\n\n      function initUseDiscountPrice(product) {\n        if (product.useDiscountPrice === null || product.useDiscountPrice === undefined)\n          product.useDiscountPrice = product.discount_active;\n      }\n\n      function barcodeListenerCallback(barcode) {\n        vm.lastBarcode = barcode;\n        if (vm.productLabelDesign && vm.productLabelDesign.pricing_tier) {\n          api.inventories.products.get(\n            {\n              serializer: 'ProductPosFinderSerializer',\n              pricing_tier: vm.productLabelDesign.pricing_tier,\n              search: barcode\n            },\n            function (results, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK && results.count > 0) {\n                selectedProductChange(results.results[0], barcode);\n              }\n            }\n          );\n        }\n      }\n\n      /**\n       * Sums all the amounts. Due to its cost, it's only called when an object is deleted\n       */\n      function sumAllAmounts() {\n        var result = 0;\n\n        vm.products.forEach(function (product) {\n          for (var pimaryVariant in product.productVariants) {\n            for (var nonPimaryVariant in product.productVariants[pimaryVariant]) {\n              if (product.productVariants[pimaryVariant][nonPimaryVariant].amount) {\n                result += product.productVariants[pimaryVariant][nonPimaryVariant].amount;\n              }\n            }\n          }\n        });\n\n        return result;\n      }\n\n      function openProductSearchDialog(ev) {\n\n        $mdDialog.show({\n          controller: 'ProductSearchController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          multiple: true,\n          locals: {\n            params: {\n              multiple: true\n            }\n          }\n        }).then(function (result) {\n          if (vm.importing) {\n            return;\n          }\n\n          if (result.products) {\n            result.products = result.products.filter(function (product) {\n              return !vm.products.some(function (p) {\n                return p.id == product.id\n              });\n            })\n\n            if (!result.products.length) return\n          }\n\n          // The controller can return one or more products\n          var products = result.products ? result.products.map(function (p) {\n            return p.id;\n          }) : [result.product.id];\n          vm.importing = true;\n\n          api.inventories.products.get({\n            pricing_tier: vm.productLabelDesign.pricing_tier,\n            serializer: 'ProductLabelSerializer',\n            ids: JSON.stringify(products)\n          }, function (response, callback, status) {\n            if (status === 200) {\n              response.results.forEach(function (product) {\n                postGetProductVariants(product, product.product_variants);\n              });\n              vm.totalLabels = sumAllAmounts();\n            }\n            vm.importing = false;\n          })\n\n        });\n\n      }\n\n      function showImportFromWarehouseDialog() {\n        if (vm.importing) {\n          return;\n        }\n\n        $mdDialog.show({\n          controller: 'WarehouseSelectDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/inventory/views/labels-generator/warehouse-select-dialog/warehouse-select-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: true,\n          multiple: true,\n          resolve: {\n            WarehouseData: function (apiResolver) {\n              return apiResolver.resolve('inventories.warehouses@get', {serializer: 'WarehouseSimpleSerializer'});\n            }\n          }\n        }).then(function (params) {\n          if (params.warehouse) {\n            vm.importing = true;\n\n            api.inventories.products.get({\n              pricing_tier: vm.productLabelDesign.pricing_tier,\n              serializer: 'ProductLabelSerializer',\n              warehouse: params.warehouse,\n              ids: JSON.stringify(params.productIds)\n            }, function (response, callback, status) {\n              if (status === 200) {\n                response.results.forEach(function (product) {\n                  postGetProductVariants(product, product.product_variants);\n                });\n                vm.totalLabels = sumAllAmounts();\n              }\n              vm.importing = false;\n            })\n          }\n        }, function (error) {\n          // Do not remove\n        });\n      }\n\n      function onPricingTierChange() {\n        var promises = [];\n        vm.products.forEach(function (product) {\n          var p = $q.defer();\n          promises.push(p.promise);\n          api.inventories.productVariants.get(\n            {\n              product_id: product.id,\n              serializer: 'ProductVariantWithPriceSerializer',\n              pricing_tier: vm.productLabelDesign.pricing_tier\n            },\n            function (results, fn, status) {\n              if (status !== HTTP_STATUS.HTTP_200_OK) {\n                p.reject();\n              }\n              var info = {\n                'productVariants': results.results,\n                'productId': product.id\n              }\n              p.resolve(info);\n            }\n          );\n        });\n\n        $q.all(promises).then(function (info) {\n          info.forEach(function (result) {\n            var productIdx = getProductIdx(result.productId);\n            if (!vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier]) {\n              vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier] = {};\n            }\n\n            result.productVariants.forEach(function (pv) {\n              vm.productVariantPricesByPricingTier[vm.productLabelDesign.pricing_tier][pv.id] = pv.price;\n\n              vm.products[productIdx].productVariants[pv.size.id][pv.color.id].hasDiscount = hasDiscount(pv);\n              vm.products[productIdx].productVariants[pv.size.id][pv.color.id].useDiscountPrice = hasDiscount(pv);\n            })\n          });\n          vm.currencyCharacter = getCurrentCurrency();\n        })\n      }\n\n      function getCurrentCurrency() {\n        var pricingTier = vm.pricingTiers.find(function (pt) {\n          return pt.id == vm.productLabelDesign.pricing_tier;\n        });\n\n        if (!pricingTier || !pricingTier.currency) return Session.company.currency;\n        return pricingTier.currency;\n      }\n\n      // As the input to consider is inside a directive (md-autocomplete) there is no way to make our\n      // directive (ndMuteBarcodeCallbacks) know which is the input to watch out.\n      function onFocus() {\n        $rootScope.ndBarcodeListenerEnabled = false;\n      }\n\n      function onBlur() {\n        $rootScope.ndBarcodeListenerEnabled = true;\n      }\n\n      function getProductIdx(productId) {\n        for (var i = 0; i < vm.products.length; i++) {\n          if (vm.products[i].id === productId) return i;\n        }\n        return null;\n      }\n    }\n  }\n\n)();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('ConfigurationController', ConfigurationController);\n\n  /** @ngInject */\n  function ConfigurationController($mdSidenav, $state, $scope, Session) {\n\n    var vm = this;\n\n    vm.configurationOptions = {\n      GENERAL_CONFIGURATION: {\n        type: 'title',\n        title: 'GENERAL_CONFIGURATION',\n        show: Session.hasPermission('app.inventory.configuration.company') ||\n              Session.hasPermission('app.inventory.configuration.taxes') ||\n              Session.hasPermission('app.inventory.configuration.email')||\n              Session.hasPermission('app.inventory.configuration.documents')\n      },\n\n      COMPANY: {\n        type: 'button',\n        serf: 'app.inventory.configuration.company',\n        icon: 'icon-home',\n        title: 'COMPANY',\n        show: Session.hasPermission('app.inventory.configuration.company')\n      },\n\n      EMAIL_CONFIGURATION: {\n        type: 'button',\n        serf: 'app.inventory.configuration.email',\n        icon: 'icon-mail-ru',\n        title: 'EMAIL_CONFIGURATION',\n        show: Session.hasPermission('app.inventory.configuration.email')\n      },\n\n      DOCUMENTS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.documents',\n        icon: 'icon-document',\n        title: 'DOCUMENTS',\n        show: Session.hasPermission('app.inventory.configuration.documents')\n      },\n\n      TAXES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.taxes',\n        icon: 'icon-bank',\n        title: 'TAXES',\n        newButtonPermission: 'inventory.configuration.taxes.create',\n        newButtonLabel: 'ACCOUNT.NEW_TAX',\n        show: Session.hasPermission('inventory.configuration.taxes.create')\n      },\n\n      INVENTORY_CONFIGURATION: {\n        type: 'title',\n        title: 'INVENTORY_CONFIGURATION',\n        show: Session.hasPermission('app.inventory.configuration.pricing_tiers') ||\n              Session.hasPermission('app.inventory.configuration.brands') ||\n              Session.hasPermission('app.inventory.configuration.seasons') ||\n              Session.hasPermission('app.inventory.configuration.categories') ||\n              Session.hasPermission('app.inventory.configuration.attributes') ||\n              Session.hasPermission('app.inventory.configuration.variants') ||\n              Session.hasPermission('app.inventory.configuration.compositions') ||\n              Session.hasPermission('app.inventory.configuration.barcodes') ||\n              Session.hasPermission('app.inventory.configuration.serialNumberTypes') ||\n              Session.hasPermission('app.inventory.configuration.defaultSerialNumbers') ||\n              Session.hasPermission('app.inventory.configuration.payment_methods') ||\n              Session.hasPermission('app.inventory.configuration.shipping_methods') ||\n              Session.hasPermission('app.inventory.configuration.tags') ||\n              Session.hasPermission('app.inventory.configuration.webhooks') ||\n              Session.hasPermission('app.inventory.configuration.stocks')\n      },\n      PRICING_TIERS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.pricing_tiers',\n        icon: 'icon-layers',\n        title: 'PRICING_TIERS',\n        newButtonPermission: 'inventory.configuration.pricing_tiers.create',\n        newButtonLabel: 'CONFIGURATION.NEW_PRICING_TIER',\n        show: Session.hasPermission('inventory.configuration.pricing_tiers.create')\n      },\n      BRANDS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.brands',\n        icon: 'icon-tag-text-outline',\n        title: 'BRANDS',\n        newButtonLabel: 'CONFIGURATION.NEW_BRAND',\n        newButtonPermission: 'inventory.configuration.brands.create',\n        show: Session.hasPermission('inventory.configuration.brands.create')\n      },\n      SEASONS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.seasons',\n        icon: 'icon-weather-sunny',\n        title: 'SEASONS',\n        newButtonLabel: 'CONFIGURATION.NEW_SEASON',\n        newButtonPermission: 'inventory.configuration.seasons.create',\n        show: Session.hasPermission('inventory.configuration.seasons.create')\n      },\n      CATEGORIES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.categories',\n        icon: 'icon-folder-multiple',\n        title: 'CATEGORIES',\n        newButtonLabel: 'CONFIGURATION.NEW_CATEGORY',\n        title2: 'SUBCATEGORIES',\n        newButtonLabel2: 'CONFIGURATION.NEW_SUBCATEGORY',\n        newButtonPermission: 'inventory.configuration.categories.create',\n        show: Session.hasPermission('inventory.configuration.categories.create')\n      },\n      ATTRIBUTES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.attributes',\n        icon: 'icon-tag-outline',\n        title: 'ATTRIBUTE_CATEGORIES',\n        newButtonLabel: 'CONFIGURATION.NEW_ATTRIBUTE_CATEGORY',\n        title2: 'ATTRIBUTES',\n        newButtonLabel2: 'CONFIGURATION.NEW_ATTRIBUTE',\n        newButtonPermission: 'inventory.configuration.attributes.create',\n        show: Session.hasPermission('inventory.configuration.attributes.create')\n      },\n      VARIANTS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.variants',\n        icon: 'icon-book-variant',\n        title: 'VARIANT_CATEGORIES',\n        newButtonLabel: 'CONFIGURATION.NEW_VARIANT_CATEGORY',\n        title2: 'VARIANTS',\n        newButtonLabel2: 'CONFIGURATION.NEW_VARIANT',\n        newButtonPermission: 'inventory.configuration.variants.create',\n        show: Session.hasPermission('inventory.configuration.variants.create')\n      },\n      COMPOSITIONS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.compositions',\n        icon: 'icon-beaker-empty-outline',\n        title: 'COMPOSITIONS',\n        newButtonLabel: 'CONFIGURATION.NEW_COMPOSITION',\n        newButtonPermission: 'inventory.configuration.compositions.create',\n        show: Session.hasPermission('inventory.configuration.compositions.create')\n      },\n      BARCODES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.barcodes',\n        icon: 'icon-barcode',\n        title: 'BARCODES',\n        show: Session.hasPermission('app.inventory.configuration.barcodes')\n      },\n      SERIAL_NUMBER_TYPES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.serial_number_types',\n        icon: 'icon-numeric',\n        title: 'SERIAL_NUMBER_TYPES',\n        newButtonLabel: 'CONFIGURATION.NEW_SERIAL_NUMBER_TYPE',\n        newButtonPermission: 'inventory.configuration.serial_number_types.create',\n        show: Session.hasPermission('inventory.configuration.serial_number_types.create')\n      },\n      DEFAULT_SERIAL_NUMBERS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.default_serial_numbers',\n        icon: 'icon-star',\n        title: 'DEFAULT_SERIAL_NUMBERS',\n        show: Session.hasPermission('app.inventory.configuration.default_serial_numbers')\n      },\n      PAYMENT_METHODS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.payment_methods',\n        icon: 'icon-cash',\n        title: 'PAYMENT_METHODS',\n        newButtonLabel: 'CONFIGURATION.NEW_PAYMENT_METHOD',\n        newButtonPermission: 'inventory.configuration.payment_methods.create',\n        show: Session.hasPermission('inventory.configuration.payment_methods.create')\n      },\n      SHIPPING_METHODS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.shipping_methods',\n        icon: 'icon-truck',\n        title: 'SHIPPING_METHODS',\n        newButtonLabel: 'CONFIGURATION.NEW_SHIPPING_METHOD',\n        newButtonPermission: 'inventory.configuration.shipping_methods.create',\n        show: Session.hasPermission('inventory.configuration.shipping_methods.create')\n      },\n      SHIPPING_BOXES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.shipping_boxes',\n        icon: 'icon-package-variant-closed\\n',\n        title: 'SHIPPING_BOXES',\n        newButtonLabel: 'CONFIGURATION.NEW_SHIPPING_BOX',\n        newButtonPermission: 'inventory.configuration.shipping_boxes.create',\n        show: Session.hasPermission('inventory.configuration.shipping_boxes.create')\n      },\n      TAGS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.tags',\n        icon: 'icon-tag-multiple',\n        title: 'TAGS',\n        show: Session.hasPermission('app.inventory.configuration.tags')\n      },\n      WEBHOOKS: {\n        type: 'button',\n        serf: 'app.inventory.configuration.webhooks',\n        svg_icon: 'assets/images/custom-material-design-icons/webhook.0eafbdff.svg',\n        title: 'WEBHOOKS',\n        newButtonLabel: 'WEBHOOKS.NEW_WEBHOOK',\n        newButtonPermission: 'inventory.configuration.webhooks.create',\n        show: Session.hasPermission('app.inventory.configuration.webhooks')\n      },\n      PLANNING: {\n        type: 'button',\n        serf: 'app.inventory.configuration.stocks_optimization',\n        title: 'PLANNING',\n        show: Session.hasPermission('app.inventory.configuration.stocks_optimization') && Session.company.has_inventory_analytics\n      },\n      RETAIL_CONFIGURATION: {\n        type: 'title',\n        title: 'RETAIL',\n        show: Session.hasPermission('app.inventory.configuration.ticket_templates') ||\n              Session.hasPermission('app.inventory.configuration.mail_templates') ||\n              Session.hasPermission('app.inventory.configuration.loyalty')\n      },\n      TICKET_TEMPLATES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.ticket_templates',\n        icon: 'icon-receipt',\n        title: 'TICKET_TEMPLATES',\n        newButtonLabel: 'CONFIGURATION.NEW_TICKET_TEMPLATE',\n        newButtonPermission: 'inventory.configuration.ticket_templates.create',\n        show: Session.hasPermission('app.inventory.configuration.ticket_templates')\n      },\n      EMAIL_TEMPLATES: {\n        type: 'button',\n        serf: 'app.inventory.configuration.mail_templates',\n        icon: 'icon-email',\n        title: 'EMAIL_TEMPLATES',\n        show: Session.hasPermission('app.inventory.configuration.mail_templates')\n      },\n      LOYALTY_CONFIGURATION: {\n        type: 'button',\n        serf: 'app.inventory.configuration.loyalty',\n        icon: 'icon-percent',\n        title: 'LOYALTY_CONFIGURATION_TITLE',\n        show: Session.hasPermission('app.inventory.configuration.loyalty')\n      }\n    };\n\n    vm.currentOption = vm.configurationOptions.COMPANY;\n\n    vm.toggleSidenav = toggleSidenav;\n    vm.goTo = goTo;\n    vm.isActive = isActive;\n    vm.createClicked = createClicked;\n    vm.create2Clicked = create2Clicked;\n\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function goTo(newOption) {\n      vm.currentOption = newOption;\n      $state.go(vm.currentOption.serf);\n    }\n\n    function isActive(option) {\n      return option == vm.currentOption;\n    }\n\n    function createClicked() {\n      $scope.$broadcast('createClicked');\n    }\n\n    function create2Clicked() {\n      $scope.$broadcast('create2Clicked');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryCollectionsController', InventoryCollectionsController);\n\n  /** @ngInject */\n  function InventoryCollectionsController($scope, $state, $timeout, $filter, $mdSidenav, $compile, $mdDialog, api,\n                                          Session, DTColumnBuilder, BrandsData, SeasonsData, $translate, SEARCH_MAX_LENGTH) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.brands = {};\n    vm.seasons = {};\n    BrandsData.results.forEach(function(brand) {\n      vm.brands[brand.id] = brand;\n    });\n    SeasonsData.results.forEach(function(season) {\n      vm.seasons[season.id] = season;\n    });\n\n    vm.filterBrands = '';\n    vm.brandsList = BrandsData.results;\n    vm.filterSeasons = '';\n    vm.seasonsList = SeasonsData.results;\n    vm.filtersNotifications = 0;\n    vm.storageLabel = 'CollectionsInventory::season';\n\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.manufactures.collections.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('code').withTitle($filter('translate')('COLLECTIONS.COLLECTION'))\n        .renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.inventory.collections.collection.details({idCollection:' + full.id + '})\">' + full.code + '</a>';\n        }),\n      DTColumnBuilder.newColumn('season__name')\n        .withTitle($filter('translate')('COLLECTIONS.SEASON'))\n        .renderWith(function(data, type, full) {\n          return full.season_name;\n        }),\n      DTColumnBuilder.newColumn('total_products').withTitle($filter('translate')('COLLECTIONS.PRODUCTS')).notSortable()\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.filterByColumn = filterByColumn;\n    vm.newCollection = newCollection;\n    vm.toggleSidenav = toggleSidenav;\n    vm.clearFilter = clearFilter;\n    vm.reloadCollections = reloadCollections;\n\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      $scope.$watch('vm.filterSeasons', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterSeasons, 1);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n      loadStatus();\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function clearFilter() {\n      vm.filtersNotifications = 0;\n      vm.filterSeasons = '';\n    }\n\n    function saveStatus() {\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.filterSeasons));\n    }\n\n    function reloadCollections() {\n      if (vm.reloadCollectionsTimeout) {\n        $timeout.cancel(vm.reloadCollectionsTimeout);\n      }\n      vm.reloadCollectionsTimeout = $timeout(function() {\n        getCollections();\n      }, 1000);\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      if (loadedStatus) {\n        vm.filterSeasons = loadedStatus;\n        updateFilterNotifications();\n      }\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n\n      var result = 0;\n      if (vm.filterSeasons !== '') {\n        result += 1;\n      }\n      vm.filtersNotifications = result;\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#collection-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    /**\n     * http://l-lin.github.io/angular-datatables/archives/#!/bindAngularDirective\n     */\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    /**\n     * Funcion to define the callback of a row\n     * @param nRow\n     * @param aData\n     * @param iDisplayIndex\n     * @param iDisplayIndexFull\n     * @returns {*}\n     */\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.inventory.collections.collection.details', { idCollection: aData.id });\n      });\n      return nRow;\n    }\n\n    /**\n     * Filters by filter param in datatable's column parameter\n     * @param filter\n     * @param column\n     */\n    function filterByColumn(filter, column) {\n      vm.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function newCollection(ev) {\n      if (Session.hasPermission('inventory.collections.create')) {\n        $mdDialog.show({\n          controller: 'NewInventoryCollectionDialogController as vm',\n          templateUrl: 'app/main/apps/inventory/views/collections/dialogs/new-collection.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          resolve: {\n            collection: function() {\n              return {};\n            },\n            seasons: function() {\n              return SeasonsData.results;\n            }\n          }\n        }).then(function(response) {\n          // Save buton clicked\n          // Add the new season to the dict\n          if (response.newSeason && response.newSeason.id)\n            vm.seasons[response.newSeason.id] = response.newSeason;\n\n          // Refresh the table\n          vm.dtInstance.rerender();\n        }, function() {\n          // Cancel button clicked\n        });\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryCollectionController', InventoryCollectionController);\n\n  /** @ngInject */\n  function InventoryCollectionController($state, CollectionData, $mdDialog, $filter, api, $mdToast, Session) {\n    var vm = this;\n\n\n    // Data\n    vm.collection = CollectionData;\n    vm.currentNavItem = \"\";\n\n    // Methods\n    vm.deleteCollection = deleteCollection;\n\n    // Functions\n    function deleteCollection(ev) {\n      if (Session.hasPermission('manufacture.collections.delete')) {\n\n        $mdDialog.show({\n          controller: function ($scope, $mdDialog, $filter) {\n\n            $scope.text = '';\n            $scope.securityWord = $filter('translate')('COLLECTION.DELETE_COLLECTION').toLowerCase();\n\n            $scope.cancel = cancel;\n            $scope.hide = hide;\n\n            function cancel() {\n              $mdDialog.cancel();\n            }\n\n            function hide() {\n              $mdDialog.hide();\n            }\n\n          },\n          templateUrl: 'app/main/apps/manufacture/views/collection/dialogs/delete-collection.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          fullscreen: false\n        })\n          .then(function (answer) {\n            api.manufactures.collections.delete(\n              vm.collection,\n              function (result) {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')(\"COLLECTION.COLLECTION_DELETED\")).position('top right'));\n                $state.go('app.manufacture.collections');\n              }\n            );\n          }, function () {\n          });\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n  angular\n    .module('app.inventory')\n    .controller('AdjustmentsController', AdjustmentsController);\n\n  /** @ngInject */\n  function AdjustmentsController($scope, $compile, $state, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils,\n                                 Session, ADJUSTMENT_ORDER_STATUSES, ADJUSTMENT_ORDER_STATUS_COLORS, $translate,\n                                 WarehousesData, ADJUSTMENT_ORDER_REASONS, ADJUSTMENT_ORDER_OPERATIONS,\n                                 ADJUSTMENT_ORDER_REASONS_REVERSE, ADJUSTMENT_ORDER_OPERATIONS_REVERSE,\n                                 SEARCH_MAX_LENGTH) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.dtInstance = {};\n    vm.orderStatuses = ADJUSTMENT_ORDER_STATUSES;\n    vm.orderStatusColors = ADJUSTMENT_ORDER_STATUS_COLORS;\n    vm.search = null;\n\n    vm.status = {\n      filters: {\n        filterStatus: '',\n        filterSourceWarehouse: ''\n      }\n    };\n\n    vm.statusList = getStatusListByDict();\n    vm.filterByReplenishment = null;\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesById = {};\n    vm.dicFilterColumns = {\n      filterStatus: 1,\n      filterSourceWarehouse: 2,\n      filterTargetWarehouse: 3\n    };\n    vm.reasons = ADJUSTMENT_ORDER_REASONS;\n    vm.reasons_reverse = ADJUSTMENT_ORDER_REASONS_REVERSE;\n    vm.operations = ADJUSTMENT_ORDER_OPERATIONS;\n    vm.operations_reverse = ADJUSTMENT_ORDER_OPERATIONS_REVERSE;\n    vm.filtersNotifications = 0;\n    vm.storageLabel = 'AdjustmentsInventory::filters';\n\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.inventories.adjustmentOrders.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      order: [[0, 'desc']],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      autoWidth: false,\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      stateSaveCallback: function(settings, data) {\n        localStorage.setItem(Session.company.id + '::dataTableAdjustmentsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function(settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableAdjustmentsController'));\n        if (state) {\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('ADJUSTMENTS.SERIAL_NUMBER'))\n        .renderWith(function(data, type, full) {\n          return '<a ui-sref=\"app.inventory.adjustments.adjustment.products({id:' + full.id + '})\">' + data + '</a>';\n        }),\n      DTColumnBuilder.newColumn('status')\n        .withTitle($filter('translate')('PURCHASES.STATUS'))\n        .renderWith(function(data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('ADJUSTMENTS.' + ADJUSTMENT_ORDER_STATUSES[data]) + '</span>';\n        }),\n      DTColumnBuilder.newColumn('source_warehouse__name')\n        .withTitle($filter('translate')('ADJUSTMENTS.SOURCE_WAREHOUSE'))\n        .renderWith(function(data, type, full) {\n          //return vm.warehousesById[full.source_warehouse].name;\n          return full.source_warehouse_name;\n        }),\n      DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('ADJUSTMENTS.CREATION_DATE'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n      DTColumnBuilder.newColumn('created_by')\n        .withTitle($filter('translate')('ADJUSTMENTS.USER'))\n        .renderWith(function(data, type, full) {\n          return full.created_by_username;\n        }).notSortable(),\n      DTColumnBuilder.newColumn('reason').withTitle($filter('translate')('ADJUSTMENTS.REASON')).renderWith(function(data, type, full) {\n        return $filter('translate')('ADJUSTMENT.' + vm.reasons[data]);\n      }),\n      DTColumnBuilder.newColumn('operation').withTitle($filter('translate')('ADJUSTMENTS.OPERATION')).renderWith(function(data, type, full) {\n        if (data == 1) {\n          return '<span class=\"status-badge md-green-500-bg\">+</span>';\n        } else {\n          return '<span class=\"status-badge md-yellow-500-bg\">-</span>';\n        }\n      }),\n      DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('ADJUSTMENTS.ITEMS')).notSortable()\n    ];\n\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.rowCallback = rowCallback;\n    vm.createdRow = createdRow;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.getStatusListByDict = getStatusListByDict;\n    vm.reloadTable = reloadTable;\n    vm.clearFilter = clearFilter;\n    vm.saveStatus = saveStatus;\n\n\n    // Initialization\n    initialize();\n\n\n    // Functions\n    function initialize() {\n\n      vm.warehouses.map(function(warehouse) {\n        vm.warehousesById[warehouse.id] = warehouse;\n      });\n\n      $scope.$watch('vm.status.filters.filterStatus', function(newValue, oldValue) {7\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterStatus, vm.dicFilterColumns.filterStatus);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n\n      $scope.$watch('vm.status.filters.filterSourceWarehouse', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.status.filters.filterSourceWarehouse, vm.dicFilterColumns.filterSourceWarehouse);\n          saveStatus();\n        }\n        updateFilterNotifications();\n      }, false);\n      loadStatus();\n    }\n\n    function clearFilter() {\n      vm.status.filters = {\n        filterStatus: '',\n        filterSourceWarehouse: ''\n      };\n    }\n\n    function saveStatus() {\n      localStorage.setItem(Session.company.id + '::' + vm.storageLabel, JSON.stringify(vm.status));\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + vm.storageLabel));\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        updateFilterNotifications();\n      }\n    }\n\n    function updateFilterNotifications() {\n      if (angular.isUndefined(vm.filtersNotifications)) {\n        return;\n      }\n      var result = 0;\n      Object.keys(vm.status.filters).forEach(function(filter) {\n        if (typeof vm.status.filters[filter] === 'string') {\n          result += vm.status.filters[filter] === '' ? 0 : 1;\n        } else if (typeof vm.status.filters[filter] === 'boolean') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'number') {\n          result += vm.status.filters[filter] ? 1 : 0;\n        } else if (typeof vm.status.filters[filter] === 'object') {\n          result += vm.status.filters[filter] && vm.status.filters[filter].length ? 1 : 0;\n        }\n      });\n      vm.filtersNotifications = result;\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#adjustment-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = vm.search;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.inventory.adjustments.adjustment.products', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function filterByColumn(filter, column) {\n      if (vm.dtInstance && vm.dtInstance.DataTable) {\n        vm.dtInstance.DataTable.column(column).search(filter).draw();\n      }\n    }\n\n    function getStatusListByDict() {\n      var result = [];\n      for (var id in ADJUSTMENT_ORDER_STATUSES) {\n        result.push({ code: id, name: ADJUSTMENT_ORDER_STATUSES[id] });\n      }\n      return result;\n    }\n\n    function reloadTable(option) {\n      vm.dtInstance.reloadData();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('InventoryAdjustmentController', InventoryAdjustmentController);\n\n  /** @ngInject */\n  function InventoryAdjustmentController(api, $state, $mdMedia, $mdSidenav, $filter, ADJUSTMENT_ORDER_STATUSES, ADJUSTMENT_ORDER_STATUSES_REVERSE, Session) {\n\n    // Data\n    var vm = this;\n    vm.isNewAdjustment = !$state.params.id;\n    vm.adjustment = null;\n    vm.currentNavItem = \"\";\n    vm.ADJUSTMENT_ORDER_STATUSES_REVERSE = ADJUSTMENT_ORDER_STATUSES_REVERSE;\n    vm.pendingBarcodes = [];\n    \n    // Methods\n    vm.gotoAdjustments = gotoAdjustments;\n    vm.getStatusLabel = getStatusLabel;\n    vm.delete = deleteAdjustment;\n    vm.toggleSidenav = toggleSidenav;\n\n    // Functions\n    function gotoAdjustments() {\n      $state.go('app.inventory.adjustments');\n    }\n\n    function getStatusLabel(status) {\n      return $filter('translate')('ADJUSTMENTS.' + ADJUSTMENT_ORDER_STATUSES[status]);\n    }\n\n    function toggleSidenav(sidenavId){\n      if(!$mdMedia('gt-md')){\n        $mdSidenav(sidenavId).toggle();\n      }else{\n        vm.barcodeLogOpened = !vm.barcodeLogOpened;\n      }\n    }\n\n    function deleteAdjustment() {\n      if (Session.hasPermission('inventory.adjustments.delete')) {\n        api.inventories.adjustmentOrders.delete(\n          vm.adjustment,\n          function (response) {\n            $state.go('app.inventory.adjustments');\n          }\n        )\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('VeriFactuController', VeriFactuController);\n\n  /** @ngInject */\n  function VeriFactuController(\n    $scope,\n    $filter,\n    $state,\n    api,\n    $mdToast,\n    IntegrationAppData,\n    FiscalAddressesData,\n    HTTP_STATUS\n  ) {\n    var vm = this;\n\n    // Data\n    vm.integrationApp = IntegrationAppData;\n    vm.currentNavItem = 'details';\n\n    // Methods\n    vm.goBack = goBack;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n    }\n\n    function goBack() {\n      $state.go('app.integration_apps.apps');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.integration_apps')\n    .controller('AppsController', AppsController);\n\n  /** @ngInject */\n  function AppsController($scope, $filter, api, $mdToast, HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.integrationApps = [];\n\n    // Methods\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      api.integrationApps.apps.list({}, function (response, fn, status) {\n        if (status !== HTTP_STATUS.HTTP_200_OK) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          return;\n        }\n\n        vm.integrationApps = response.results;\n      });\n    }\n\n    $scope.$on('reload_cards', function () {\n      initialize();\n    });\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('EcommerceSortingController', EcommerceSortingController);\n\n  /** @ngInject */\n  function EcommerceSortingController($scope, $mdMenu, $mdToast, $state, $timeout, $mdSidenav, $mdMedia, $filter, SitesData,\n                                      $mdDialog, $document, $compile, $stateParams, api, Session, DTColumnBuilder, CategoriesData,\n                                      SubcategoriesData, BrandsData, SeasonsData, $translate,\n                                      PERMISSIONS, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n    var vm = this;\n    // Cons\n    vm.PERMISSIONS = PERMISSIONS;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.timeout = null;\n    vm.dtInstanceProducts = {};\n    vm.changes = false;\n    vm.items = [];\n    vm.selected = [];\n    vm.saving = false;\n    vm.filterBrands = null;\n    vm.brandsList = BrandsData.results;\n    vm.filterCategories = null;\n    vm.categoriesList = CategoriesData.results;\n    vm.filterSubcategories = null;\n    vm.subcategoriesList = SubcategoriesData.results;\n    vm.filterSeasons = null;\n    vm.seasonsList = SeasonsData.results;\n    vm.sitesList = SitesData.results;\n    vm.filterSites = null;\n    vm.duplicatedProducts = false;\n    vm.isNoos = false;\n    vm.discountActive = false;\n    vm.productsDict = {};\n    vm.orderedProductsDict = {};\n    vm.orderedProductsList = [];\n    vm.gridOpts = {\n      columns: 6\n    };\n\n    vm.dtOptionsProducts = {\n      ajax: {\n        dataSrc: \"data\",\n        url: api.baseUrl + 'inventories/products',\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function (d) {\n          d.pagination = 'datatable';\n          d.serializer = 'ProductSortingSerializer';\n          d.is_raw_material = false;\n          d.long_url_get = true;\n\n          if (vm.filterBrands) {\n            d.brand = vm.filterBrands;\n          }\n          if (vm.filterCategories) {\n            d.category = vm.filterCategories;\n          }\n          if (vm.filterSubcategories) {\n            d.subcategory = vm.filterSubcategories;\n          }\n          if (vm.filterSeasons) {\n            d.season = vm.filterSeasons;\n          }\n          if (vm.filterSites) {\n            d.site_id = vm.filterSites;\n          }\n          if (vm.duplicatedProducts) {\n            d.duplicated = true;\n          }\n          if (vm.isNoos) {\n            d.is_noos = true;\n          }\n          if (vm.discountActive) {\n            d.discount_active = true;\n          }\n        }\n      },\n      rowId: 'id',\n      //order: [9, 'desc'],\n      dom: 'rt<\"bottom\"<\"right\"<\"pagination\"p>>>',\n      createdRow: createdRow,\n      initComplete: initComplete,\n      pagingType: 'simple',\n      lengthMenu: [100, 500],\n      pageLength: 100,\n      responsive: false,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      stateSave: true,\n      scrollY: true,\n      //scrollX: true,\n      //scrollCollapse: true,\n      //autoWidth: true,\n      //fixedColumns:   {\n      //  leftColumns: 1\n      //},\n      stateSaveCallback: function (settings, data) {\n        data.brand = vm.filterBrands;\n        data.category = vm.filterCategories;\n        data.subcategory = vm.filterSubcategories;\n        data.season = vm.filterSeasons;\n        data.site_id = vm.filterSites;\n        data.duplicated = vm.duplicatedProducts;\n        data.is_noos = vm.isNoos;\n        data.discount_active = vm.discountActive;\n        localStorage.setItem(Session.company.id + '::dataTableEcommerceSortingController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableEcommerceSortingController'));\n        if (state) {\n          vm.filterBrands = state.brand;\n          vm.filterCategories = state.category;\n          vm.filterSubcategories = state.subcategory;\n          vm.filterSeasons = state.season;\n          vm.filterSites = state.site_id;\n          vm.duplicatedProducts = state.duplicated;\n          vm.isNoos = state.is_noos;\n          vm.discountActive = state.discount_active;\n        }\n        return state;\n      }\n    };\n\n    vm.dtColumnsProducts = [\n      DTColumnBuilder.newColumn('id').renderWith(function (data, type, full) {\n\n        vm.productsDict[data] = full;\n\n        if (full.cover_thumbnail) {\n          return '<div class=\"product\" layout=\"row\" dnd-dragend=\"vm.dragEnd(vm.productsDict[' + data + '])\" layout-align=\"start center\" ng-class=\"{\\'exists\\': vm.exists(' + data + ')}\" ' +\n            'dnd-draggable=\"vm.productsDict[' + data + ']\">' +\n            '<img class=\"w-50 h-50\" src=\"' + full.cover_thumbnail + '\">' +\n            '<span class=\"p-5 pl-10\">' + full.code + '</span>' +\n            '</div>';\n        } else {\n          return '<div class=\"product\" layout=\"row\" dnd-dragend=\"vm.dragEnd(vm.productsDict[' + data + '])\" layout-align=\"start center\" ng-class=\"{\\'exists\\': vm.exists(' + data + ')}\" ' +\n            'dnd-draggable=\"vm.productsDict[' + data + ']\">' +\n            '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg w-50 h-50 m-5\"></md-icon>' +\n            '<span class=\"p-5 pl-10\">' + full.code + '</span>' +\n            '</div>';\n        }\n      })\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.toggleSidenav = toggleSidenav;\n    vm.addProduct = addProduct;\n    vm.savePositions = savePositions;\n    vm.clearPositions = clearPositions;\n    vm.dragEnd = dragEnd;\n    vm.exists = exists;\n    vm.cleanProduct = cleanProduct;\n    vm.addAllList = addAllList;\n    vm.sortProducts = sortProducts;\n    vm.openMenu = openMenu;\n    vm.checkSubcategory = checkSubcategory;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function dragEnd(product) {\n      vm.changes = true;\n      vm.orderedProductsDict[product.id] = product;\n      return product;\n    }\n\n    function cleanProduct(product) {\n\n      vm.changes = true;\n\n      for (var i = 0; i < vm.orderedProductsList.length; i++) {\n        if (product.id == vm.orderedProductsList[i].id) {\n          vm.orderedProductsList.splice(i, 1);\n          delete vm.orderedProductsDict[product.id];\n        }\n      }\n\n      /*if(vm.saving){\n        return true;\n      }\n\n      vm.saving = true;\n\n      api.inventories.products.save({\n        option: 'clean-sorting',\n        id: product.id\n      }, function(response, callback, status){\n\n        for(var i=0; i<vm.orderedProductsList.length; i++){\n          if(product.id == vm.orderedProductsList[i].id){\n            vm.orderedProductsList.splice(i, 1);\n            delete vm.orderedProductsDict[product.id];\n          }\n        }\n        vm.saving = false;\n      });*/\n    }\n\n    function savePositions() {\n\n      if (vm.saving) {\n        return true;\n      }\n\n      vm.saving = true;\n\n      vm.orderedProductsList.forEach(function (product, index) {\n        product.position = index;\n      });\n\n      api.inventories.products.save({\n        option: 'sorting',\n        products: vm.orderedProductsList\n      }, function (response, callback, status) {\n        vm.saving = false;\n        vm.changes = false;\n      });\n    }\n\n    function clearPositions() {\n\n      vm.changes = true;\n      vm.orderedProductsList = [];\n      vm.orderedProductsDict = {};\n\n      /*if(vm.saving){\n        return true;\n      }\n\n      vm.saving = true;\n\n      vm.orderedProductsList.forEach(function(product, index){\n        product.position = null;\n      });\n\n      api.inventories.products.save({\n        option: 'sorting',\n        products: vm.orderedProductsList\n      }, function(response, callback, status){\n        vm.orderedProductsList = [];\n        vm.saving = false;\n      });*/\n    }\n\n    function addProduct(product) {\n      vm.changes = true;\n      vm.orderedProductsDict[product.id] = product;\n      vm.orderedProductsList.push(product);\n    }\n\n    function addAllList() {\n      vm.changes = true;\n      for (var key in vm.productsDict) {\n        var product = vm.productsDict[key];\n        if (!vm.orderedProductsDict[product.id]) {\n          vm.orderedProductsDict[product.id] = product;\n          vm.orderedProductsList.push(product);\n        }\n      }\n    }\n\n    function exists(productId) {\n      return !!vm.orderedProductsDict[productId];\n    }\n\n    function initialize() {\n\n      var filters = {};\n      filters.serializer = 'ProductSortingSerializer';\n      filters.position = true;\n\n      /*filters.is_raw_material = false;\n\n      if(vm.filterBrands){\n        filters.brand = vm.filterBrands;\n      }\n      if(vm.filterCategories){\n        filters.category = vm.filterCategories;\n      }\n      if(vm.filterSubcategories){\n        filters.subctegory = vm.filterSubcategories;\n      }\n      if(vm.filterSeasons){\n        filters.season = vm.filterSeasons;\n      }\n      if (vm.filterSites) {\n        filters.site_id = vm.filterSites;\n      }\n      if (vm.duplicatedProducts) {\n        filters.duplicated = true;\n      }\n      if (vm.isNoos) {\n        filters.is_noos = true;\n      }\n      if (vm.discountActive) {\n        filters.discount_active = true;\n      }*/\n\n      api.inventories.products.get(filters, function (response, callback, status) {\n        vm.orderedProductsList = response.results;\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.position < b.position) return -1;\n          if (a.position > b.position) return 1;\n          return 0;\n        });\n        vm.orderedProductsList.forEach(function (product) {\n          vm.orderedProductsDict[product.id] = product;\n        });\n      });\n\n      $scope.$watch('vm.filterBrands', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSeasons', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterCategories', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSubcategories', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSites', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.isNoos', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.discountActive', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      $scope.$watch('vm.duplicatedProducts', function (newValue, oldValue) {\n        if (newValue !== oldValue) {\n          vm.dtInstanceProducts.DataTable.draw()\n        }\n      }, false);\n\n      /*var loadedColumns = JSON.parse(localStorage.getItem(Session.company.id + '::dataTableInventoryProductsColumnsController'));\n      if (loadedColumns) {\n        for (var key in loadedColumns) {\n          if (vm.columns[key]) {\n            vm.columns[key].selected = loadedColumns[key].selected;\n          }\n        }\n      }*/\n\n    }\n\n    function initComplete() {\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#product-search');\n\n      vm.dtInstanceProducts.DataTable.columns.adjust();\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function (event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function () {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function openMenu($mdMenu, ev) {\n      $mdMenu.open(ev);\n    }\n\n    function sortProducts(type) {\n      if (type == 'category') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.category_position == b.category_position) {\n            if (a.subcategory_position > b.subcategory_position) {\n              return 1;\n            }\n            if (a.subcategory_position < b.subcategory_position) {\n              return -1;\n            }\n            return 0;\n          } else {\n            if (a.category_position > b.category_position) {\n              return 1;\n            }\n            if (a.category_position < b.category_position) {\n              return -1;\n            }\n            return 0;\n          }\n        });\n      } else if (type == 'subcategory') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.subcategory_position > b.subcategory_position) {\n            return 1;\n          }\n          if (a.subcategory_position < b.subcategory_position) {\n            return -1;\n          }\n          return 0;\n        });\n      } else if (type == 'brand') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.brand_position > b.brand_position) {\n            return 1;\n          }\n          if (a.brand_position < b.brand_position) {\n            return -1;\n          }\n          return 0;\n        });\n      } else if (type == 'season') {\n        vm.orderedProductsList.sort(function (a, b) {\n          if (a.season_position > b.season_position) {\n            return 1;\n          }\n          if (a.season_position < b.season_position) {\n            return -1;\n          }\n          return 0;\n        });\n      }\n    }\n\n    function checkSubcategory(category) {\n      var subcategories = $filter('filter')(vm.subcategoriesList, {'category': {'id': category}});\n      var hasSubcategory = $filter('filter')(subcategories, {'id': vm.filterSubcategories});\n      vm.filterSubcategories = hasSubcategory.length == 0 ? null : vm.filterSubcategories;\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceSitesController', EcommerceSitesController);\n\n  /** @ngInject */\n  function EcommerceSitesController(\n    $scope,\n    $state,\n    $timeout,\n    $filter,\n    $compile,\n    $mdDialog,\n    api,\n    DTColumnBuilder,\n    $translate,\n    Session,\n    SEARCH_MAX_LENGTH,\n    ContractedPlanLimit,\n    ContractedPlanLimitData\n  ) {\n    var vm = this;\n\n    //Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n    vm.hasSubscription = Session.hasSubscription;\n    vm.contractedPlanLimit = null;\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.dtOptions = {\n      ajax: {\n        dataSrc: 'data',\n        url: api.urls.ecommerce.sites.replace('/:id', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n        }\n      },\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      initComplete: initComplete,\n      pagingType: 'full_numbers',\n      lengthMenu: [10, 25, 50, 100],\n      pageLength: 25,\n      scrollY: 'auto',\n      responsive: true,\n      serverSide: true,\n      processing: true,\n      searchDelay: 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      }\n    };\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('SITES.SITE_NAME'))\n        .renderWith(function(data, type, full) {\n          var result = '<div layout=\"row\" layout-align=\"start center\"><nd-ecommerce-icon class=\"mr-8\" platform=\"' + full.platform + '\"></nd-ecommerce-icon>' + data;\n          if (full.sync_stock_only) {\n            result += '<span class=\"text-boxed yellow-bg black-fg ml-16\">{{ \"SITE.SYNC_STOCK_ONLY\" | translate}}</span>';\n          }\n          result += '</div>';\n          return result;\n        }),\n      DTColumnBuilder.newColumn('site_products')\n        .notSortable()\n        .withTitle($filter('translate')('SITE.PRODUCTS')),\n      DTColumnBuilder.newColumn('created_at').withTitle($filter('translate')('SITES.CREATED_AT'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'short');\n        }),\n      DTColumnBuilder.newColumn('last_sync').withTitle($filter('translate')('SITES.LAST_SYNC'))\n        .renderWith(function(data, type, full) {\n          return $filter('date')(data, 'short');\n        }),\n      DTColumnBuilder.newColumn('enabled').withTitle($filter('translate')('SITE.ENABLED'))\n        .notSortable()\n        .renderWith(function(data) {\n          if (data) {\n            return '<md-icon md-font-icon=\"icon-check\" class=\"s20 green-fg\"></md-icon>';\n          }\n          return '<md-icon md-font-icon=\"icon-close\" class=\"s20 red-fg\"></md-icon>';\n        })\n\n    ];\n\n    // Methods\n    vm.filterByColumn = filterByColumn;\n    vm.newSite = newSite;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (ContractedPlanLimitData.results.length) {\n        vm.contractedPlanLimit = new ContractedPlanLimit(ContractedPlanLimitData.results[0]);\n      }\n\n      $scope.$watch('vm.filterBrands', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterBrands, 1);\n        }\n      }, false);\n\n      $scope.$watch('vm.filterSeasons', function(newValue, oldValue) {\n        if (newValue !== oldValue) {\n          filterByColumn(vm.filterSeasons, 2);\n        }\n      }, false);\n    }\n\n    function initComplete() {\n      var api = this.api(),\n        searchBox = angular.element('body').find('#site-search');\n\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      // Recompiling so we can bind Angular directive to the DT\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)\n      $('td', nRow).unbind('click');\n      $('td', nRow).bind('click', function() {\n        $state.go('app.ecommerce.sites.site.details', { id: aData.id });\n      });\n      return nRow;\n    }\n\n    function filterByColumn(filter, column) {\n      vm.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function newSite(ev) {\n      if (Session.hasPermission('app.ecommerce.sites.new-site')) {\n        if (vm.contractedPlanLimit === null || vm.contractedPlanLimit.allowsCreation()) {\n          $state.go('app.ecommerce.sites.new-site');\n        } else {\n          $state.go('app.account.upgrade_plan', {\n            source: 'app.ecommerce.sites.new-site'\n          });\n        }\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceSiteController', EcommerceSiteController);\n\n  /** @ngInject */\n  function EcommerceSiteController(\n    $state,\n    $mdDialog,\n    $filter,\n    api,\n    $mdToast,\n    Session,\n    SiteData,\n    $interval,\n    $scope,\n    ECOMMERCE_PLATFORMS,\n    HTTP_STATUS) {\n    var vm = this;\n\n    // Data\n    vm.currentNavItem = '';\n    vm.INTERVAL_MS = 7500;\n    vm.ECOMMERCE_PLATFORMS = ECOMMERCE_PLATFORMS;\n    vm.site = angular.copy(SiteData);\n    vm.siteCopy = angular.copy(SiteData);\n    vm.synchronizing = false;\n    vm.importing = vm.site.importing;\n    vm.importingVariantCategories = false;\n\n    // Methods\n    vm.deleteSite = deleteSite;\n    vm.sync = sync;\n    vm.showSyncProducts = showSyncProducts;\n    vm.showAdminActions = showAdminActions;\n    vm.importProducts = importProducts;\n    vm.importOrder = importOrder;\n    vm.importMissingProducts = importMissingProducts;\n    vm.importVariantCategories = importVariantCategories;\n    vm.getSyncStockClass = getSyncStockClass;\n    vm.importVariantCategoriesDisabled = importVariantCategoriesDisabled;\n    vm.startPullingStatus = startPullingStatus;\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      if (vm.pullingInterval) {\n        $interval.cancel(vm.pullingInterval);\n      }\n    });\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      $scope.$on('$destroy', function() {\n        if (vm.interval) {\n          $interval.cancel(vm.interval);\n        }\n      });\n\n      if (vm.importing) {\n        startPullingStatus();\n      }\n\n      if (\n        vm.siteCopy.site_products_synchronizing ||\n        vm.siteCopy.site_products_waiting_to_synchronize\n      ) {\n        vm.synchronizing = true;\n        checkSyncSiteProductFinished();\n      }\n    }\n\n    function startPullingStatus() {\n      vm.pullingInterval = $interval(function() {\n        api.ecommerce.sites.get({\n          id: vm.site.id, option: 'check-status'\n        }, function(result, callback, status) {\n          if (result.importing === false) {\n            $interval.cancel(vm.pullingInterval);\n            $mdDialog.hide();\n            vm.importing = false;\n          }\n        });\n      }, vm.INTERVAL_MS);\n    }\n\n    function sync(action) {\n      if (vm.synchronizing) {\n        vm.synchronizing = false;\n        vm.syncProducts = false;\n        vm.syncStock = false;\n        vm.syncPrices = false;\n\n        api.ecommerce.sites.save(\n          {\n            id: vm.site.id,\n            option: 'stop-sync'\n          },\n          function(results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('PRODUCT.SYNC_STOPPED_' + action.split('-')[1].toUpperCase()))\n                  .position('top right')\n              );\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n              );\n            }\n            $interval.cancel(vm.interval);\n          }\n        );\n        return 0;\n      }\n      if (action === 'sync-products') {\n        vm.syncProducts = true;\n        vm.syncStock = false;\n        vm.syncPrices = false;\n      }\n      if (action === 'sync-stock') {\n        vm.syncProducts = false;\n        vm.syncStock = true;\n        vm.syncPrices = false;\n      }\n      if (action === 'sync-prices') {\n        vm.syncProducts = false;\n        vm.syncStock = false;\n        vm.syncPrices = true;\n      }\n\n      vm.synchronizing = true;\n\n      api.ecommerce.sites.save(\n        {\n          id: vm.site.id,\n          option: action\n        },\n        function(results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.site = results;\n            vm.siteCopy = angular.copy(results);\n            SiteData = results;\n            checkSyncSiteProductFinished();\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('PRODUCT.SYNC_STARTED'))\n                .position('top right')\n            );\n          } else {\n            if (results.error) {\n              $scope.$broadcast('EcommerceSiteController::setSyncErrors',\n                {\n                  errors: results.error\n                }\n              );\n            }\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n            vm.synchronizing = false;\n          }\n        }\n      );\n    }\n\n    function importVariantCategoriesDisabled() {\n      return vm.site.platform !== 10;\n    }\n\n    function showSyncProducts() {\n      return !vm.site.sync_stock_only && vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO &&\n        vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX;\n    }\n\n    function showAdminActions() {\n      return !!Session.user.isSuperAdmin();\n    }\n\n    function checkSyncSiteProductFinished() {\n      vm.interval = $interval(function() {\n        api.ecommerce.sites.get({\n            id: vm.siteCopy.id\n          }, function(response, callback, status) {\n            if (status === 200) {\n              vm.siteCopy = response;\n\n              vm.site.site_products = vm.siteCopy.site_products;\n              vm.site.last_sync = vm.siteCopy.last_sync;\n              vm.site.site_products_synchronizing =\n                vm.siteCopy.site_products_synchronizing;\n              vm.site.site_products_waiting_to_synchronize =\n                vm.siteCopy.site_products_waiting_to_synchronize;\n              SiteData = vm.site;\n\n              if (\n                response &&\n                !vm.siteCopy.site_products_synchronizing &&\n                !vm.siteCopy.site_products_waiting_to_synchronize\n              ) {\n                $interval.cancel(vm.interval);\n                vm.synchronizing = false;\n                $mdToast.show(\n                  $mdToast\n                    .simple()\n                    .textContent($filter('translate')('PRODUCT.SYNC_FINISHED'))\n                    .position('top right')\n                );\n              }\n            } else {\n              // TODO\n            }\n          }\n        );\n      }, vm.INTERVAL_MS);\n    }\n\n    function importMissingProducts() {\n      if (vm.importing) {\n        return;\n      }\n\n      $mdDialog\n        .show({\n          controller: 'ImportMissingProductsDialogController',\n          controllerAs: 'vm',\n          clickOutsideToClose: true,\n          templateUrl:\n            'app/main/apps/ecommerce/views/site/dialogs/import-missing-products.html',\n          parent: angular.element(document.body)\n        })\n        .then(\n          function(result) {\n            vm.importing = true;\n            var object = {\n              id: vm.site.id,\n              option: 'import-missing-products'\n            };\n\n            api.ecommerce.sites.save(\n              object,\n              function(results, fn, status, message) {\n                startPullingStatus();\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  $mdToast.show(\n                    $mdToast\n                      .simple()\n                      .textContent($filter('translate')('SITE.IMPORT_STARTED'))\n                      .position('top right')\n                  );\n                } else {\n                  $mdToast.show(\n                    $mdToast\n                      .simple()\n                      .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                      .position('top right')\n                  );\n                }\n              }\n            );\n          },\n          function() {\n            // Nothing to do\n          }\n        );\n    }\n\n    function importOrder() {\n      if (!vm.showAdminActions()) {\n        return;\n      }\n\n      $mdDialog\n        .show({\n          controller: 'SyncOrderFromSiteDialogController',\n          controllerAs: 'vm',\n          locals: {\n            siteId: vm.site.id\n          },\n          templateUrl:\n            'app/main/apps/ecommerce/views/site/dialogs/sync-order-from-site/sync-order-from-site.html',\n          parent: angular.element(document.body)\n        })\n        .then(\n          function(result) {\n          },\n          function() {\n            // Nothing to do\n          }\n        );\n    }\n\n    function importProducts() {\n      if (vm.importing) {\n        return;\n      }\n\n      $mdDialog\n        .show({\n          controller: 'ImportProductsDialogController',\n          controllerAs: 'vm',\n          templateUrl:\n            'app/main/apps/ecommerce/views/site/dialogs/import-products.html',\n          parent: angular.element(document.body)\n        })\n        .then(\n          function(result) {\n            vm.importing = true;\n            var object = {\n              id: vm.site.id,\n              option: 'import-products'\n            };\n\n            if (result.maxProducts) {\n              object['max_amount'] = result.maxProducts;\n            }\n\n            if (result.externalIds) {\n              object['external_ids'] = result.externalIds;\n            }\n\n            api.ecommerce.sites.save(\n              object,\n              function(results, fn, status, message) {\n                startPullingStatus();\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  $mdToast.show(\n                    $mdToast\n                      .simple()\n                      .textContent($filter('translate')('SITE.IMPORT_STARTED'))\n                      .position('top right')\n                  );\n                } else {\n                  $mdToast.show(\n                    $mdToast\n                      .simple()\n                      .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                      .position('top right')\n                  );\n                }\n              }\n            );\n          },\n          function() {\n            // Nothing to do\n          }\n        );\n    }\n\n\n    function importVariantCategories() {\n      if (showAdminActions() && !vm.importingVariantCategories) {\n        vm.importingVariantCategories = true;\n        api.ecommerce.sites.save(\n          {\n            id: vm.site.id,\n            option: 'import-variant-categories'\n          },\n          function(results, fn, status, message) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('SITE.IMPORT_STARTED'))\n                  .position('top right')\n              );\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n              );\n            }\n\n            vm.importingVariantCategories = false;\n          }\n        );\n      }\n    }\n\n    function getSyncStockClass() {\n      if (showSyncProducts()) {\n        return 'md-primary stroked md-button md-default-theme md-ink-ripple';\n      }\n      return 'md-primary md-raised md-button md-default-theme md-ink-ripple';\n    }\n\n\n    function deleteSite(ev) {\n\n      /*\n      $mdDialog.show({\n        controller: function($scope, $mdDialog, $filter){\n\n          $scope.text = '';\n          $scope.securityWord = $filter('translate')('COLLECTION.DELETE_COLLECTION').toLowerCase();\n\n          $scope.cancel = cancel;\n          $scope.hide = hide;\n\n          function cancel() {\n            $mdDialog.cancel();\n          }\n\n          function hide() {\n            $mdDialog.hide();\n          }\n\n        },\n        templateUrl: 'app/main/apps/manufacture/views/collection/dialogs/delete-collection.html',\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose:true,\n        fullscreen: false\n      })\n        .then(function(answer) {\n          api.manufactures.collections.delete(\n            vm.collection,\n            function(result) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')(\"COLLECTION.COLLECTION_DELETED\")).position('top right'));\n              $state.go('app.manufacture.collections');\n            }\n          );\n        }, function() {\n      });\n      */\n    }\n\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('EcommerceScanAndGoController', EcommerceScanAndGoController);\n\n  /** @ngInject */\n  function EcommerceScanAndGoController(\n    $scope,\n    $state,\n    $stateParams,\n    $mdDialog,\n    $document,\n    $translate,\n    $filter,\n    $mdToast,\n    $compile,\n    $timeout,\n    $rootScope,\n    api,\n    $http,\n    Session,\n    BarcodeService,\n    WarehousesData,\n    PaymentMethodsData,\n    ShippingBoxesData,\n    PosOrderData,\n    PosOrder,\n    HTTP_STATUS,\n    INTEGRATION_APP_TYPE,\n    SENDCLOUD_SHIPPING_METHODS\n  ) {\n\n    var vm = this;\n\n    // vm.posOrder = $scope.state.params.order ? new PosOrder($scope.state.params.order) : null;\n    vm.posOrder = PosOrderData ? new PosOrder(PosOrderData) : null;\n    vm.scanning = false;\n    vm.saving = false;\n    vm.warehouses = WarehousesData.results;\n    vm.paymentMethods = PaymentMethodsData.results;\n    vm.shippingBoxes = ShippingBoxesData.results;\n    vm.orderTypes = [\n      {\n        hasMultiple: false,\n        name: 'ORDERS.1_PRODUCT'\n      }, {\n        hasMultiple: true,\n        name: 'ORDERS.MULTIPLE_PRODUCTS'\n      }\n    ];\n    vm.multipleProductsOrder = false;\n    vm.selectedWarehouseId = null;\n    vm.bannerMessage = null;\n    vm.bannerBarcode = null;\n    vm.selectedFulfillment = null;\n    vm.sendcloudShippingMethodsDict = {};\n    vm.previousState = {\n      name: $stateParams.previousState,\n      params: $stateParams.previousStateParams\n    };\n\n    // Methods\n    vm.closeBanner = closeBanner;\n    vm.warehouseChanged = warehouseChanged;\n    vm.setOderTypeChanged = setOderTypeChanged;\n    vm.selectFulfillment = selectFulfillment;\n    vm.openScanner = openScanner;\n\n\n    // Initialization\n    initialize();\n\n    // Functions\n\n    function initialize() {\n      vm.selectedWarehouseId = getDefaultWarehouse();\n\n      vm.multipleProductsOrder = localStorage.getItem(Session.company.id + '::ScanAndGoController::multipleProductsOrder') === 'true';\n      vm.barcodeListenerCallbackId = BarcodeService.subscribeBarcode(barcodeListenerCallback);\n      vm.deregisterBarcodeNotFound = $scope.$on('ndPosOrderFulfillmentCardController::barcodeNotFound', onBarcodeNotFound);\n      vm.deregisterBarcodeAlreadyScanned = $scope.$on('ndPosOrderFulfillmentCardController::barcodeAlreadyScanned', onBarcodeAlreadyScanned);\n      vm.deregisterPickingFinished = $scope.$on('ndPosOrderFulfillmentCardController::pickingFinished', cancel);\n\n\n      $scope.$on('$destroy', function() {\n        BarcodeService.unsubscribeBarcode(vm.barcodeListenerCallbackId);\n        vm.deregisterBarcodeNotFound();\n        vm.deregisterBarcodeAlreadyScanned();\n        vm.deregisterPickingFinished();\n      });\n\n      if (PosOrderData) {\n        setPosOrder(new PosOrder(PosOrderData));\n      }\n    }\n\n    function getDefaultWarehouse() {\n      var selectedWarehouseId = localStorage.getItem(Session.company.id + '::ScanAndGoController::selectedWarehouseId');\n      if (selectedWarehouseId) {\n        return +selectedWarehouseId;\n      }\n      var principal = vm.warehouses.find(function(warehouse) {\n        return warehouse.is_principal;\n      });\n      return principal ? principal.id : vm.warehouses[0].id;\n    }\n\n    function cancel() {\n      if (vm.previousState.name) {\n        $state.go(vm.previousState.name, vm.previousState.params);\n      } else {\n        vm.posOrder = null;\n        vm.scanning = false;\n        setBanner(null, null);\n        vm.selectedFulfillment = null;\n      }\n    }\n\n    function warehouseChanged() {\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::selectedWarehouseId', vm.selectedWarehouseId);\n    }\n\n    function setOderTypeChanged(value) {\n      vm.multipleProductsOrder = value;\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::multipleProductsOrder', vm.multipleProductsOrder);\n    }\n\n    function closeBanner() {\n      setBanner(null, null);\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (!barcode || vm.scanning || vm.posOrder) {\n        return;\n      }\n      vm.scanning = true;\n      api.ecommerce.orders.get({\n        id: null,\n        option: 'scan',\n        barcode: barcode,\n        sourceWarehouse: vm.selectedWarehouseId,\n        hasMultiple: vm.multipleProductsOrder\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          setPosOrder(new PosOrder(response), barcode);\n        } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.PRODUCT_NOT_FOUND')).position('top right'));\n        }\n        vm.scanning = false;\n      });\n    }\n\n    function onBarcodeNotFound(event, params) {\n      showBanner(params.fulfillmentId, 'SCAN_AND_GO.BARCODE_NOT_FOUND', params.barcode);\n    }\n\n    function onBarcodeAlreadyScanned(event, params) {\n      showBanner(params.fulfillmentId, 'SCAN_AND_GO.BARCODE_ALREADY_SCANNED', params.barcode);\n    }\n\n    function showBanner(fulfillmentId, message, barcode) {\n      if (vm.posOrder.pos_order_fulfillments.length > 1 && vm.selectedFulfillment !== fulfillmentId) {\n        return;\n      }\n\n      setBanner(message, barcode);\n\n      if (vm.bannerTimeout) {\n        $timeout.cancel(vm.bannerTimeout);\n        vm.bannerTimeout = null;\n      }\n\n      vm.bannerTimeout = $timeout(function() {\n        setBanner(null, null);\n      }, 3000);\n    }\n\n    function setBanner(message, barcode) {\n      vm.bannerMessage = message;\n      vm.bannerBarcode = barcode;\n    }\n\n    function setPosOrder(posOrder, barcode) {\n      vm.posOrder = posOrder;\n      if (vm.posOrder.canShipItems() && vm.posOrder.allowToFulfillOnPlatform() && vm.posOrder.hasOrderEditPermission()) {\n        vm.posOrder.pos_order_fulfillments.every(function(posOrderFulfillment) {\n          if (posOrderFulfillment.allowShip() && !isExternalShipment(vm.posOrder, posOrderFulfillment)) {\n            if (!vm.selectedFulfillment) {\n              selectFulfillment(posOrderFulfillment);\n            }\n            posOrderFulfillment.setUpdateActionShip();\n            posOrderFulfillment.getVisiblePosOrderFulfillmentProductVariantInstances().forEach(function(pofpv) {\n              pofpv.uploadAmount = 0;\n              if (pofpv.pos_order_product_variant_instance && pofpv.pos_order_product_variant_instance.barcode === barcode) {\n                pofpv.uploadAmount = 1;\n                pofpv.amountChanged();\n              }\n            });\n            return false;\n          }\n          return true;\n        });\n      }\n    }\n\n    function isExternalShipment(posOrder, fulfillment) {\n      return (fulfillment.sendcloud_pos_order_fulfillment_data || fulfillment.isSendcloudShipment) && Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n    }\n\n    function selectFulfillment(fulfillment) {\n      vm.selectedFulfillment = fulfillment.id;\n      if (!vm.sendcloudShippingMethodsDict[fulfillment.id]) {\n        api.inventories.posOrderFulfillment.list(\n          {\n            id: fulfillment.id,\n            action: 'get-sendcloud-shipping-methods'\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              response.every(function(shippingMethod){\n                if(shippingMethod.id === SENDCLOUD_SHIPPING_METHODS.SENDCLOUD_UNSTAMPED_LETTER){\n                  shippingMethod.name = $filter('translate')('SCAN_AND_GO.' + SENDCLOUD_SHIPPING_METHODS[shippingMethod.id]);\n                  return true;\n                }\n                return false;\n              });\n              if(vm.posOrder.pos_order_shipping_methods.length){\n                response.splice(0, 0, {\n                  id: SENDCLOUD_SHIPPING_METHODS.CUSTOM_SHIPPING_METHOD_CHECKOUT,\n                  name: $filter('translate')('SCAN_AND_GO.CUSTOM_SHIPPING_METHOD_CHECKOUT') + ' (' + vm.posOrder.pos_order_shipping_methods[0].shipping_method_name + ')'\n                });\n              }\n              vm.sendcloudShippingMethodsDict[fulfillment.id] = response;\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ERROR_GETTING_SEND_CLOUD_SHIPPING_METHODS')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function openScanner(){\n      $rootScope.$broadcast('BarcodeService::requestBarcode');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('EcommerceOrdersController', EcommerceOrdersController);\n\n  /** @ngInject */\n  function EcommerceOrdersController(byteArrayBufferService, $scope, $state, $mdDialog, $document, $translate, $filter,\n                                     $mdToast, $compile, $timeout, api, $http, UiGridService, $window, $mdMenu,\n                                     WarehousesData, ShippingMethodsData, SitesData, Session,\n                                     SALES_STATUS_COLORS_BG, POS_ORDER_PAYMENT_STATUSES, POS_ORDER_SHIPPING_STATUSES,\n                                     HTTP_STATUS, POS_ORDER_SHIPPING_STATUSES_COLORS, POS_ORDER_PAYMENT_STATUSES_COLORS,\n                                     ERROR_CODES, SEARCH_MAX_LENGTH, COUNTRIES_DICT, POS_ORDER_FULFILLMENTS,\n                                     INTEGRATION_APP_TYPE, CountriesData, $stateParams) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.COUNTRIES_DICT = COUNTRIES_DICT;\n    vm.POS_ORDER_PAYMENT_STATUSES = POS_ORDER_PAYMENT_STATUSES;\n\n    // Data\n    vm.orders = $scope.state.params.orders || [];\n    vm.selectedOrders = vm.orders.map(function(orderDto) {\n      return orderDto.id;\n    });\n    vm.selectedWarehouse = '';\n    vm.selectedFulfillmentsDict = {};\n    vm.selectedFulfillments = [];\n    vm.currentNavItem = $stateParams.tab ? $stateParams.tab : getCurrentNavItem();\n    vm.timeout = null;\n    vm.warehousesDict = {};\n    vm.creating = false;\n    vm.loading = false;\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.generating_items_pdf = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        replenishmentStatuses: [],\n        sites: [],\n        warehouses: [],\n        stockWarehouses: [],\n        fulfillmentTypes: [],\n        shippingMethods: [],\n        countries: [],\n        warnings: [],\n        stockLocations: [],\n        currentNavItem: [],\n        stockAvailability: null,\n        unitsFilter: null\n      },\n      dynamicFilters: {\n        sites: {\n          icon: 'icon-laptop',\n          title: 'PICKING.FILTER_BY_SITE',\n          visible: false\n        },\n        paymentStatus: {\n          icon: 'icon-credit-card',\n          title: 'ORDER.PAYMENT_STATUS',\n          visible: false\n        },\n        warehouses: {\n          svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n          title: 'PICKING.FILTER_BY_WAREHOUSE',\n          visible: false\n        },\n        stockWarehouses: {\n          svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n          title: 'ORDERS.FILTER_BY_WAREHOUSE_STOCK',\n          visible: false\n        },\n        fulfillmentTypes: {\n          icon: 'icon-package-variant-closed',\n          title: 'PICKING.FILTER_BY_FULFILLMENT_TYPE',\n          visible: false\n        },\n        shippingMethods: {\n          svgIcon: 'assets/images/custom-material-design-icons/truck-outline.a4d963ff.svg',\n          title: 'CONFIGURATION.SHIPPING_METHODS',\n          visible: false\n        },\n        countries: {\n          svgIcon: 'assets/images/custom-material-design-icons/location-outline.6aae76c0.svg',\n          title: 'SIGNUP.COUNTRY',\n          visible: false\n        },\n        stockLocations: {\n          svgIcon: 'assets/images/custom-material-design-icons/map-marker-path.053c000f.svg',\n          title: 'PICKING.WAREHOUSE',\n          visible: false\n        },\n        replenishmentStatuses: {\n          svgIcon: 'assets/images/custom-material-design-icons/truck-outline.a4d963ff.svg',\n          title: 'PICKING.FILTER_BY_REPLENISHMENT_STATUS',\n          visible: false\n        },\n        stockAvailability: {\n          svgIcon: 'assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg',\n          title: 'ORDERS.FILTER_BY_STOCK_AVAILABILITY',\n          visible: false\n        },\n        unitsFilter: {\n          svgIcon: 'assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg',\n          title: 'ORDERS.FILTER_BY_UNITS',\n          visible: false\n        }\n      },\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    if (isOrdersState()) {\n      vm.status.dynamicFilters.warnings = {\n        svgIcon: 'assets/images/custom-material-design-icons/alert-outline.74ba4705.svg',\n        title: 'SALES_LOG.WITH_WARNING',\n        visible: false\n      };\n    }\n    vm.warehouses = WarehousesData.results;\n    vm.stockWarehouses = WarehousesData.results;\n    vm.sites = SitesData.results;\n    vm.shippingMethods = ShippingMethodsData.results;\n    vm.orderTypes = [\n      { hasMultiple: false, name: 'ORDERS.1_PRODUCT' },\n      { hasMultiple: true, name: 'ORDERS.MULTIPLE_PRODUCTS' }\n    ];\n    vm.stockAvailabilityOptions = [\n      { value: 'with_stock', labelKey: 'ORDERS.WITH_STOCK_TO_SERVE' },\n      { value: 'without_stock', labelKey: 'ORDERS.WITHOUT_STOCK_TO_SERVE' }\n    ];\n    vm.unitsFilterOptions = [\n      { value: 'single', labelKey: 'ORDERS.ORDERS_WITH_SINGLE_PRODUCT' },\n      { value: 'multiple', labelKey: 'ORDERS.ORDERS_WITH_MULTIPLE_PRODUCTS' }\n    ];\n    vm.warnings = [\n      { withWarning: true, name: 'SALES_LOG.WITH_WARNING' },\n      { withWarning: false, name: 'SALES_LOG.WITHOUT_WARNING' }\n    ];\n    vm.fulfillmentTypes = [\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING,\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED,\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_SHIPPED,\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PICKED_UP,\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_RETURNED,\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_RETURNED_RECEIVED,\n      POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_CANCELLED\n    ];\n    vm.countries = CountriesData.countries;\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableColumnMenus: false,\n      enableSorting: false,\n      enableRowSelection: true,\n      exporterCsvFilename: $filter('translate')('ORDERS.ORDERS') + '.csv',\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ]\n    });\n    vm.totalOrders = 0;\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    vm.hasSendcloudInstalledAppEnabled = Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n    vm.hasPickingAndPacking = false;\n    vm.mappedShippingMethods = [];\n    vm.exportingOrdersByShippingMethod = false;\n\n    // Methods\n    vm.initialize = initialize;\n    vm.getPaymentStatusColorClass = getPaymentStatusColorClass;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.filterChanged = filterChanged;\n    vm.handleNavClick = handleNavClick;\n    vm.toggleFilterVisibility = toggleFilterVisibility;\n    vm.removeOrderFilter = removeOrderFilter;\n    vm.printDeliveriesPdf = getDeliveriesPdf;\n    vm.exportOrdersByShippingMethod = exportOrdersByShippingMethod;\n    vm.noneChecked = noneChecked;\n    vm.printItemsListPdf = printItemsListPdf;\n    vm.showItemsListPdf = showItemsListPdf;\n    vm.showMarkAsShippedDialog = showMarkAsShippedDialog;\n    vm.areSourceWarehouseUnique = areSourceWarehouseUnique;\n    vm.isOrdersState = isOrdersState;\n    vm.isPickingState = isPickingState;\n    vm.isPickableOnPickingOrder = isPickableOnPickingOrder;\n    vm.copyToClipboard = copyToClipboard;\n    vm.createPickingOrder = createPickingOrder;\n    vm.showCancelItemButton = showCancelItemButton;\n    vm.cancelItem = cancelItem;\n    vm.hasMultipleScanAndGoFeature = hasMultipleScanAndGoFeature;\n    vm.openMultipleScanAndGoDialog = openMultipleScanAndGoDialog;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    var controller = new AbortController();\n\n    function initialize() {\n      if (Session.hasSubscription) {\n        if (Session.hasFeature('app.inventory.pickings')) {\n          vm.hasPickingAndPacking = true;\n        }\n      } else {\n        vm.hasPickingAndPacking = Session.company.has_picking_and_packing;\n      }\n\n      if (Session.company.has_shipping_method_mappings) {\n        api.inventories.shippingMethods.list(\n          {},\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.mappedShippingMethods = response.results.filter(function(shippingMethod) {\n                return !!shippingMethod.mapper;\n              });\n            }\n          }\n        );\n      }\n\n      WarehousesData.results.forEach(function(warehouse) {\n        vm.warehousesDict[warehouse.id] = warehouse;\n      });\n\n      initCounters();\n    }\n\n    function initCounters() {\n      if (isOrdersState()) {\n        api.ecommerce.fulfillments.get({\n          option: 'count-fulfillments'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalItemsToPrepareCount = response.to_prepare_count;\n            vm.totalItemsPreparedCount = response.prepared_count;\n            vm.totalItemsIncidenceCount = response.with_incidences_count;\n            vm.totalItemsPickingCount = response.picking_count;\n            vm.totalItemsPickedCount = response.picked_count;\n            vm.totalItemsReturnedCount = response.returned_count;\n            vm.totalItemsFinishedCount = response.finished_count;\n            vm.totalItemsDeletedCount = response.deleted_count;\n            vm.totalItemsInRepositionCount = response.in_reposition_count;\n            vm.totalItemsList = response.all_count;\n          }\n          vm.loading = false;\n        });\n      }\n\n      if (isPickingState()) {\n        api.inventories.posOrderFulfillmentProductVariants.get({\n          id: null,\n          option: 'pos-order-fulfillment-product-variant-count'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalItemsToPrepareCount = response.to_prepare_count;\n            vm.totalItemsPreparedCount = response.prepared_count;\n            vm.totalItemsIncidenceCount = response.with_incidences_count;\n            vm.totalItemsReturnedCount = response.returned_count;\n            vm.totalItemsFinishedCount = response.finished_count;\n            vm.totalItemsDeletedCount = response.deleted_count;\n            vm.totalItemsInRepositionCount = response.in_reposition_count;\n            vm.totalItemsList = response.all_count;\n          }\n          vm.loading = false;\n        });\n      }\n    }\n\n    function getCurrentNavItem() {\n      if (localStorage.getItem(Session.company.id + '::' + $state.current.name + '::EcommerceOrdersController::currentNavItem')) {\n        return localStorage.getItem(Session.company.id + '::' + $state.current.name + '::EcommerceOrdersController::currentNavItem');\n      }\n      return 'to_prepare';\n    }\n\n    function initializeUidGrid(gridApi) {\n\n      vm.gridApi = gridApi;\n\n      vm.gridOptions.exporterFieldCallback = function (grid, row, col, value) {\n        var entity = row.entity || {};\n        switch (col.field) {\n          case 'type':\n            if (angular.isFunction(entity.getTranslation)) {\n              return $filter('translate')(entity.getTranslation());\n            }\n            if (entity.type != null && POS_ORDER_FULFILLMENTS[entity.type]) {\n              return $filter('translate')('ORDER.' + POS_ORDER_FULFILLMENTS[entity.type]);\n            }\n            return value;\n          case 'picking_order':\n            return entity.picking_order && entity.picking_order.autocode ? entity.picking_order.autocode : '';\n          case 'shipping_method':\n            return entity.shipping_method_name || entity.shipping_method || '';\n          case 'products':\n            return entity.product_variants_count != null ? entity.product_variants_count : (entity.products_count || '');\n          case 'amount':\n            return entity.amount != null ? entity.amount : '';\n          case 'pos_order_product_variants__product_variant__stock_locations__location': // orders view\n            if (Array.isArray(entity.stock_locations)) {\n              return entity.stock_locations.map(function (sl) { return sl.location || sl; }).join(' | ');\n            }\n            return entity.stock_locations || '';\n          case 'pos_order_product_variant__product_variant__stock_locations__location': // picking view\n            if (entity.product_variant) {\n              if (Array.isArray(entity.product_variant.stock_locations)) {\n                return entity.product_variant.stock_locations.map(function (sl) { return sl.location || sl; }).join(' | ');\n              }\n              return entity.product_variant.stock_location || entity.product_variant.stock_locations || '';\n            }\n            return '';\n          default:\n            if (angular.isObject(value)) {\n              if (value.autocode) { return value.autocode; }\n              if (value.name) { return value.name; }\n              try { return JSON.stringify(value); } catch (e) { return ''; }\n            }\n            return value;\n        }\n      };\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            if (isOrdersState()) {\n              getGridOrdersPage();\n            }\n            if (isPickingState()) {\n              getGridPickingPage();\n            }\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          if (isOrdersState()) {\n            getGridOrdersPage();\n          }\n          if (isPickingState()) {\n            getGridPickingPage();\n          }\n        }\n      });\n\n\n      vm.gridApi.pinning.on.columnPinned($scope, function() {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function() {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          if (isOrdersState()) {\n            getGridOrdersPage();\n          }\n          if (isPickingState()) {\n            getGridPickingPage();\n          }\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function(row) {\n        if (!vm.selectedWarehouse && row.isSelected) {\n          vm.selectedWarehouse = row.entity.source_warehouse_id;\n        } else if (vm.gridApi.selection.getSelectedGridRows().length === 0) {\n          vm.selectedWarehouse = null;\n        } else if (vm.selectedWarehouse) {\n          if (vm.selectedWarehouse !== row.entity.source_warehouse_id) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ONLY_ONE_WAREHOUSE')).position('top right'));\n            row.isSelected = false;\n          }\n        }\n        toggleFulfillment(row.entity);\n      });\n\n      gridApi.selection.on.rowSelectionChangedBatch($scope, function() {\n        var isAllSelected = gridApi.selection.getSelectAllState();\n        if (isAllSelected) {\n          gridApi.selection.getSelectedGridRows().forEach(function(row) {\n            selectFulfillment(row.entity);\n            if (!vm.selectedWarehouse && row.isSelected) {\n              vm.selectedWarehouse = row.entity.source_warehouse_id;\n            } else if (vm.gridApi.selection.getSelectedGridRows().length === 0) {\n              vm.selectedWarehouse = null;\n            } else if (vm.selectedWarehouse) {\n              if (vm.selectedWarehouse !== row.entity.source_warehouse_id) {\n                row.isSelected = false;\n                deselectFulfillment(row.entity);\n              }\n            }\n          });\n        } else {\n          gridApi.grid.rows.forEach(function(row) {\n            deselectFulfillment(row.entity);\n          });\n          vm.selectedWarehouse = null;\n        }\n      });\n\n\n      gridApi.grid.registerDataChangeCallback(function() {\n        //gridApi.treeBase.expandAllRows();\n      });\n\n      if (isOrdersState()) {\n        setGridOrdersColumns();\n      }\n      if (isPickingState()) {\n        setGridPickingColumns();\n      }\n\n      $timeout(function() {\n        loadStatus();\n        if (isOrdersState()) {\n          getGridOrdersPage();\n        }\n        if (isPickingState()) {\n          getGridPickingPage();\n        }\n      }, 200);\n    }\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n\n      if (isOrdersState()) {\n        setGridOrdersColumns(true);\n      }\n      if (isPickingState()) {\n        setGridPickingColumns(true);\n      }\n      if (isOrdersState()) {\n        getGridOrdersPageGetData(true);\n      }\n      if (isPickingState()) {\n        getGridPickingPageGetData(true);\n      }\n      $timeout(function() {\n        saveStatus();\n      }, 100);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      if (isOrdersState()) {\n        localStorage.setItem(Session.company.id + '::UIGridEcommerceOrdersControllerV3', JSON.stringify(vm.status));\n      }\n      if (isPickingState()) {\n        localStorage.setItem(Session.company.id + '::UIGridEcommercePickingControllerV3', JSON.stringify(vm.status));\n      }\n    }\n\n    function loadStatus() {\n      var loadedStatus = null;\n      if (isOrdersState()) {\n        loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridEcommerceOrdersControllerV3'));\n      }\n      if (isPickingState()) {\n        loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridEcommercePickingControllerV3'));\n      }\n      if (loadedStatus) {\n        angular.merge(vm.status, loadedStatus);\n        if (vm.gridApi) {\n          vm.gridApi.saveState.restore($scope, vm.status.state);\n        }\n      }\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function(column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function constructObject(title, name, permission, avoidState, minWidth, width, enablePinning, pinLeft, enableHiding, cellTemplate, cellClass, grouping, enableSorting) {\n      return {\n        displayName: $filter('translate')(title),\n        headerTooltip: $filter('translate')(title),\n        field: name,\n        permission: permission,\n        visible: getColumnStatusVisibility(name, true, avoidState),\n        minWidth: minWidth,\n        width: width,\n        enablePinning: enablePinning,\n        pinnedLeft: pinLeft,\n        enableHiding: enableHiding, //headerCellClass: 'header-cell-center',\n        cellTemplate: cellTemplate,\n        cellClass: cellClass,\n        grouping: grouping,\n        enableSorting: enableSorting\n      };\n    }\n\n\n    function getPaymentStatusColorClass(status) {\n      if (status === 1) {\n        return 'pending';\n      }\n      if (status === 2) {\n        return 'paid';\n      }\n      if (status === 3 || status === 4) {\n        return 'unpaid';\n      }\n      if (status === 5) {\n        return 'refunded';\n      }\n    }\n\n    function setGridOrdersColumns(avoidState) {\n      var siteTemplate = '<div class=\"cell-middle\" layout=\"row\" layout-align=\"start center\"> ' +\n        '<img class=\"ecommerce-image\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.entity.site_platform_id}}.svg\">' +\n        '<span>{{row.entity.site_name}}</span>' +\n        '</div>';\n\n      var autocodeTemplate = '<div class=\"cell-middle\">' +\n        '<div layout=\"row\" layout-align=\"start center\">' +\n        '<a ui-sref=\"app.ecommerce.orders.order({id:row.entity.pos_order})\">{{row.entity.autocode}}</a><br>' +\n        '<md-icon ng-if=\"row.entity.warning\" md-font-icon=\"icon-alert\" class=\"s18 mh-5 amber-fg\"></md-icon>' +\n        '</div>' +\n        '<small class=\"secondary-text nowrap\" ng-if=\"row.entity.origin_code !== null\"> <span class=\"secondary-text\">{{row.entity.origin_code}}</span> <md-icon class=\"cursor-pointer\" md-font-icon=\"icon-content-copy\" ng-click=\"grid.appScope.vm.copyToClipboard(row.entity.origin_code)\"></md-icon> </small>' +\n        '</div>';\n\n      var fulfillmentType = '<nd-fulfillment-text-box type=\"row.entity.type\"></nd-fulfillment-text-box>';\n\n      var dateTemplate = '<div class=\"cell-middle\">' +\n        '{{row.entity.created_at | date: \"dd/MM/yyyy\"}}<br>' +\n        '<small class=\"ng-binding\">{{row.entity.created_at | date: \"HH:mm\"}}h</small>' +\n        '</div>';\n\n      var customerNameTemplate = '<div class=\"cell-middle\">' + '{{row.entity.customer_name}}</div>';\n      var shippingMethodTemplate = '<div layout=\"row\" class=\"cell-middle\">' +\n        '<div ng-if=\"grid.appScope.vm.hasSendcloudInstalledAppEnabled\" class=\"mr-4\">' +\n        '<md-icon class=\"s24 label-generated\" ng-if=\"row.entity.tracking_number\" md-svg-src=\"assets/images/custom-material-design-icons/etiqueta-envio.08b02db0.svg\"></md-icon>' +\n        '<md-icon class=\"s24\" ng-if=\"!row.entity.tracking_number\" md-svg-src=\"assets/images/custom-material-design-icons/etiqueta-envio.08b02db0.svg\"></md-icon>' +\n        '<md-tooltip ng-if=\"row.entity.tracking_number\"><span>{{\\'ORDERS.LABEL_PRINTED\\' | translate}}: {{row.entity.tracking_number}}</span></md-tooltip>' +\n        '<md-tooltip ng-if=\"!row.entity.tracking_number\"><span>{{\\'ORDERS.LABEL_NOT_PRINTED\\' | translate}}</span></md-tooltip>' +\n        '</div>' +\n        '{{row.entity.shipping_method_name}}' +\n        '</div>';\n      var countryTemplate = '<div class=\"cell-middle\">' + '{{grid.appScope.vm.COUNTRIES_DICT[row.entity.country]}}</div>';\n      var productsTemplate = '<div class=\"cell-middle text-center\">' + '{{row.entity.product_variants_count}}</div>';\n      var sourceWarehouseNameTemplate = '<div class=\"cell-middle\">' + '{{row.entity.source_warehouse_name}}</div>';\n      var sourceWarehouseNamesTemplate = '<div class=\"cell-middle\">' + '{{row.entity.source_warehouse_names}}</div>';\n      var stockLocationsTemplate = '<div class=\"cell-middle\">' + '{{row.entity.stock_locations}}</div>';\n\n      var totalTemplate = '<div layout=\"row\" layout-align=\"start center\" class=\"cell-middle\">' +\n        '<div class=\"mr-4\">' + '{{row.entity.total|price}}' + vm.currencyCharacter + '</div>' +\n        '<div class=\"payment-status\" ng-class=\"grid.appScope.vm.getPaymentStatusColorClass(row.entity.payment_status)\"></div>' +\n        '</div>';\n\n      var pickingOrderTemplate = '<div class=\"cell-middle\">' +\n        '<div layout=\"row\" layout-align=\"start center\">' +\n        '<a ui-sref=\"app.inventory.picking_packing.picking_order({id:row.entity.picking_order.id, previousState: \\'' + $state.current.name + '\\'})\">{{row.entity.picking_order.autocode}}</a><br>' +\n        '</div>';\n\n      var actionTemplate = '<div class=\"cell-middle\" layout=\"row\">';\n      var numberOfButtons = 1;\n      if (Session.company.has_scan_and_go) {\n        numberOfButtons += 1;\n        actionTemplate += '<md-button ng-disabled=\"grid.appScope.vm.idRowCreated\" ' +\n          'layout=\"row\" layout-align=\"center center\" ' +\n          'ng-if=\"grid.appScope.vm.currentNavItem === \\'picked\\'\" ' +\n          'ui-sref=\"app.ecommerce.scan_and_go({orderId: row.entity.pos_order, ' +\n          'previousState: \\'' + $state.current.name + '\\', previousStateParams: {\\'tab\\': grid.appScope.vm.currentNavItem}})\"' +\n          'class=\"m-0 p-0 mr-5 md-primary md-raised compact\">' +\n          '<md-icon md-font-icon=\"icon-plus\" class=\"s16 p-0 m-0\"></md-icon>' +\n          '<span class=\"ml-5\" translate=\"NAVIGATION.SCAN_AND_GO\"></span></md-button>';\n      }\n      actionTemplate += '<md-button ng-disabled=\"grid.appScope.vm.idRowCreated\" ' +\n        'layout=\"row\" layout-align=\"center center\" ' +\n        'ng-click=\"grid.appScope.vm.cancelItem(row.index, row.entity)\"' +\n        'ng-if=\"grid.appScope.vm.showCancelItemButton()\" ' +\n        'class=\"m-0 stroked compact\">' +\n        '<span translate=\"GENERAL.CANCEL\"></span></md-button>';\n      actionTemplate += '</div>';\n      var actionWidth = numberOfButtons * 110 + 20;\n\n      var privateNotesTemplate = '<div class=\"cell-middle\">{{row.entity.private_notes}}</div>';\n\n      var dict = {\n        site: constructObject('ORDERS.CHANNEL', 'site_name', 1, avoidState, 50, 70, 0, false, 0, siteTemplate, 'no-wrap'),\n        autocode: constructObject('ORDERS.ORDER', 'autocode', 1, avoidState, 100, 160, 0, false, 0, autocodeTemplate, null),\n        picking_order: constructObject('PICKING.PICKING_ORDER', 'picking_order', 1, avoidState, 100, 160, 0, false, 0, pickingOrderTemplate, null, null, false),\n        type: constructObject('ORDERS.STATUS', 'type', 1, avoidState, 100, 160, 0, false, 0, fulfillmentType, 'no-wrap'),\n        created_at: constructObject('ORDERS.DATE', 'created_at', 1, avoidState, 100, 160, 0, false, 0, dateTemplate, null, null, false),\n        customer_name: constructObject('ORDERS.CUSTOMER', 'customer_name', 1, avoidState, 100, 160, 0, false, 0, customerNameTemplate, 'no-wrap'),\n        shipping_method: constructObject('ORDERS.SHIPPING_METHOD', 'shipping_method', 1, avoidState, 100, 160, 0, false, 0, shippingMethodTemplate, 'no-wrap'),\n        country: constructObject('ORDERS.COUNTRY', 'country', 1, avoidState, 100, 160, 0, false, 0, countryTemplate),\n        products: constructObject('PICKING.AMOUNT', 'products', 1, avoidState, 50, 160, 0, false, 0, productsTemplate, 'cell-right'),\n        total: constructObject('ORDERS.TOTAL', 'total', 1, avoidState, 100, 160, 0, false, 0, totalTemplate, 'cell-right'),\n        source_warehouse_name: constructObject('ORDERS.WAREHOUSE', 'source_warehouse_name', 1, avoidState, 100, 160, 0, false, 0, sourceWarehouseNameTemplate),\n        pos_order__private_notes: constructObject('INVOICE.PRIVATE_NOTES', 'private_notes', 1, avoidState, 100, 160, 0, false, 0, privateNotesTemplate, null, null, false),\n        stock_locations: constructObject('PICKING.WAREHOUSE', 'pos_order_product_variants__product_variant__stock_locations__location', 1, avoidState, 100, 160, 0, false, 0, stockLocationsTemplate, null, null, false),\n        action: constructObject('GENERAL.ACTIONS', 'action', 1, avoidState, actionWidth, actionWidth, 1, false, 0, actionTemplate, null, null, false)\n      };\n      dict.action.exporterSuppressExport = true;\n      dict.action.pinnedRight = true;\n\n      angular.extend(vm.columns, dict);\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function setGridPickingColumns(avoidState) {\n      // Setting columns default configuration\n      // http://ui-grid.info/docs/#!/api/ui.grid.class:GridOptions.columnDef\n\n      var saleNumberTemplate = '<div class=\"cell-middle\">' +\n        '<a ui-sref=\"app.ecommerce.picking.order({id:row.entity.pos_order.id})\">{{row.entity.pos_order.autocode}} <em class=\"secondary-text mr-5\" translate=\"ORDER.ORDER_DRAFT\" ng-if=\"!row.entity.pos_order.autocode\"></em></a><br>' +\n        '<small class=\"secondary-text\" ng-if=\"row.entity.pos_order.origin_code !== null\"> <span class=\"secondary-text\">{{row.entity.pos_order.origin_code}}</span> <md-icon class=\"cursor-pointer\" md-font-icon=\"icon-content-copy\" ng-click=\"grid.appScope.vm.copyToClipboard(row.entity.pos_order.origin_code)\"></md-icon> </small>' +\n        '</div>';\n\n      var createdAtTemplate = '<div class=\"cell-middle\">' +\n        '{{row.entity.pos_order_fulfillment.created_at | date: \"HH:mm\"}}h<br>' +\n        '<small class=\"ng-binding\">{{row.entity.pos_order_fulfillment.created_at | date: \"dd/MM/yyyy\"}}</small>' +\n        '</div>';\n\n      var productTemplate = '<div layout=\"row\" class=\"cell-middle\" layout-align=\"start center\">' +\n        '<div layout=\"column\">' +\n        '<img class=\"thumbnail-40 mr-8\" ng-src=\"{{row.entity.product.cover}}\" ng-if=\"row.entity.product.cover\">' +\n        '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg mr-8\" ng-if=\"!row.entity.product.cover\"></md-icon>' +\n        '</div>' +\n        '<div layout=\"column\">' +\n        '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product.id})\">' +\n        '{{row.entity.product.name}} ({{row.entity.product_variant.color_name}}/{{row.entity.product_variant.size_name}})' +\n        '</a>' +\n        '<div layout=\"row\" layout-align=\"start center\">' +\n        '<small class=\"secondary-text\">' +\n        '{{row.entity.product_variant.sku ? row.entity.product_variant.sku + \" - \" : \"\"}} <span class=\"barcode-text\"> {{row.entity.product_variant.barcode}}</span>' +\n        '</small>' +\n        '</div>' +\n        '</div>' +\n        '</div>';\n\n      var fulfillmentTemplate = '<nd-fulfillment-text-box type=\"row.entity.pos_order_fulfillment.type\"></nd-fulfillment-text-box>';\n\n      var warehouseTemplate = '<div class=\"cell-middle\">' +\n        '{{row.entity.pos_order_fulfillment.source_warehouse}}' +\n        '</div>';\n\n      var stockLocationTemplate = '<div class=\"cell-middle\">' +\n        '{{row.entity.product_variant.stock_location}}' +\n        '</div>';\n\n      var siteTemplate = '<div layout=\"row\" class=\"cell-middle\" layout-align=\"start center\">' +\n        '<img class=\"thumbnail-40 mr-8 w-32\" style=\"vertical-align: inherit !important;\" ng-src=\"/assets/images/ecommerces/{{row.entity.pos_order.site.platform}}.svg\">' +\n        '<md-tooltip><span>{{row.entity.pos_order.site.name}}</span></md-tooltip>' +\n        '</div>';\n\n      var shippingMethodTemplate = '<div layout=\"row\" class=\"cell-middle\">' +\n        '<div class=\"mr-4\" ng-if=\"grid.appScope.vm.hasSendcloudInstalledAppEnabled\">' +\n        '<md-icon class=\"s24 label-generated\" ng-if=\"row.entity.tracking_number\" md-svg-src=\"assets/images/custom-material-design-icons/etiqueta-envio.08b02db0.svg\"></md-icon>' +\n        '<md-icon class=\"s24\" ng-if=\"!row.entity.tracking_number\" md-svg-src=\"assets/images/custom-material-design-icons/etiqueta-envio.08b02db0.svg\"></md-icon>' +\n        '<md-tooltip ng-if=\"row.entity.tracking_number\"><span>{{\\'ORDERS.LABEL_PRINTED\\' | translate}}: {{row.entity.tracking_number}}</span></md-tooltip>' +\n        '<md-tooltip ng-if=\"!row.entity.tracking_number\"><span>{{\\'ORDERS.LABEL_NOT_PRINTED\\' | translate}}</span></md-tooltip>' +\n        '</div>' +\n        '{{row.entity.shipping_method_name}}' +\n        '</div>';\n\n      var countryTemplate = '<div class=\"cell-middle\">' + '{{grid.appScope.vm.COUNTRIES_DICT[row.entity.country]}}</div>';\n      var dict = {\n        site: constructObject('ORDER.CHANNEL', 'site', 1, avoidState, 50, 70, 0, false, 0, siteTemplate, 'no-wrap'),\n        pos_order_autocode: constructObject('ORDERS.ORDER', 'pos_order_autocode', 1, avoidState, 100, 150, 0, false, 0, saleNumberTemplate),\n        created_at: constructObject('ORDERS.DATE', 'pos_order_fulfillment__created_at', 1, avoidState, 100, 150, 0, false, 0, createdAtTemplate, null, null, false),\n        product_id: constructObject('PRODUCT.PRODUCT', 'product_id', 1, avoidState, 400, 400, 0, false, 0, productTemplate),\n        amount: constructObject('PICKING.AMOUNT', 'amount', 1, avoidState, 100, 150, 0, false, 0, null, 'cell-right'),\n        pos_order_fulfillment: constructObject('ORDERS.STATUS', 'type', 1, avoidState, 100, 150, 0, false, 0, fulfillmentTemplate, 'no-wrap'),\n        warehouse: constructObject('ORDERS.WAREHOUSE_STOCK', 'warehouse', 1, avoidState, 100, 150, 0, false, 0, warehouseTemplate),\n        stock_location: constructObject('PICKING.WAREHOUSE', 'pos_order_product_variant__product_variant__stock_locations__location', 1, avoidState, 100, 150, 0, false, 0, stockLocationTemplate, null, null, false),\n        shipping_method: constructObject('ORDERS.SHIPPING_METHOD', 'shipping_method', 1, avoidState, 100, 150, 0, false, 0, shippingMethodTemplate),\n        country: constructObject('ORDERS.COUNTRY', 'country', 1, avoidState, 100, 150, 0, false, 0, countryTemplate)\n      };\n\n      angular.extend(vm.columns, dict);\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridOrdersPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n      fetch(api.urls.ecommerce.fulfillments + '?' + new URLSearchParams(getGridOrdersPageGetData()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function(response) {\n          return response.json();\n        })\n        .then(function(data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          $scope.$apply();\n          markSelectedRows();\n          $scope.$apply();\n        })\n        .catch(function(error) {\n          throw error;\n        });\n\n    }\n\n    function getGridPickingPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.posOrderFulfillmentProductVariants.replace('/:id/', '').replace(':option', '');\n      fetch(url + '?' + new URLSearchParams(getGridPickingPageGetData()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function(response) {\n          return response.json();\n        })\n        .then(function(data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          $scope.$apply();\n        })\n        .catch(function(error) {\n          throw error;\n        });\n\n    }\n\n    function getGridOrdersPageGetData() {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.page = vm.status.pageNumber;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Search\n      if (vm.status.search) {\n        d.search = vm.status.search;\n      }\n      if (vm.status.filters.replenishmentStatuses && vm.status.filters.replenishmentStatuses.length) {\n        d.replenishmentStatuses = vm.status.filters.replenishmentStatuses;\n      }\n      if (vm.status.filters.sites && vm.status.filters.sites.length) {\n        d.sites = vm.status.filters.sites;\n      }\n      if (vm.status.filters.warehouses && vm.status.filters.warehouses.length) {\n        d.warehouses = vm.status.filters.warehouses;\n      }\n      if (vm.status.filters.stockWarehouses && vm.status.filters.stockWarehouses.length) {\n        d.stockWarehouses = vm.status.filters.stockWarehouses;\n      }\n      if (vm.status.filters.fulfillmentTypes && vm.status.filters.fulfillmentTypes.length) {\n        d.fulfillmentTypes = vm.status.filters.fulfillmentTypes;\n      }\n      if (vm.status.filters.shippingMethods && vm.status.filters.shippingMethods.length) {\n        d.shippingMethods = vm.status.filters.shippingMethods;\n      }\n      if (vm.status.filters.countries && vm.status.filters.countries.length) {\n        d.countries = vm.status.filters.countries;\n      }\n      if (vm.status.filters.warnings && vm.status.filters.warnings.length) {\n        d.warnings = vm.status.filters.warnings;\n      }\n      if (vm.status.filters.stockLocations && vm.status.filters.stockLocations.length) {\n        d.stockLocations = vm.status.filters.stockLocations;\n      }\n      if (vm.currentNavItem) {\n        d.view = vm.currentNavItem;\n      }\n      if (vm.status.filters.paymentStatus && vm.status.filters.paymentStatus.length) {\n        d.paymentStatus = vm.status.filters.paymentStatus;\n      }\n      if (vm.status.filters.stockAvailability !== null && vm.status.filters.stockAvailability !== undefined && vm.status.filters.stockAvailability !== '') {\n        d.stockAvailability = vm.status.filters.stockAvailability;\n      } else {\n        d.stockAvailability = '';\n      }\n      if (vm.status.filters.unitsFilter !== null && vm.status.filters.unitsFilter !== undefined && vm.status.filters.unitsFilter !== '') {\n        d.unitsFilter = vm.status.filters.unitsFilter;\n      } else {\n        d.unitsFilter = '';\n      }\n\n      return d;\n    }\n\n    function getGridPickingPageGetData() {\n      var d = {};\n\n      // Configuration\n      d.pagination = 'datatable';\n\n      // Pagination\n      d.length = vm.status.pageSize;\n      d.page = vm.status.pageNumber;\n      d.start = vm.status.pageSize * (vm.status.pageNumber - 1);\n\n      // Ordering\n      d.ordering = vm.status.ordering;\n\n      // Search\n      d.search = vm.status.search;\n\n      d.sites = vm.status.filters.sites;\n      d.source_warehouses = vm.status.filters.warehouses;\n      d.fulfillment_types = vm.status.filters.fulfillmentTypes;\n      d.shipping_methods = vm.status.filters.shippingMethods;\n      d.countries = vm.status.filters.countries;\n      if (vm.selectedOrders.length) {\n        d.order_ids = vm.selectedOrders.join(',');\n      }\n      d.currentNavItem = vm.currentNavItem;\n\n      if (vm.status.filters.stockAvailability !== null && vm.status.filters.stockAvailability !== undefined && vm.status.filters.stockAvailability !== '') {\n        d.stockAvailability = vm.status.filters.stockAvailability;\n      } else {\n        d.stockAvailability = '';\n      }\n      if (vm.status.filters.unitsFilter !== null && vm.status.filters.unitsFilter !== undefined && vm.status.filters.unitsFilter !== '') {\n        d.unitsFilter = vm.status.filters.unitsFilter;\n      } else {\n        d.unitsFilter = '';\n      }\n\n      return d;\n    }\n\n\n    /**\n     * Function that's executed when a barcode has been listened\n     */\n    function barcodeListenerCallback(barcode, sourceWarehouse, hasMultiple) {\n      api.ecommerce.orders.get(\n        {\n          id: null,\n          option: 'scan',\n          barcode: barcode,\n          sourceWarehouse: sourceWarehouse,\n          hasMultiple: hasMultiple\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $state.go('app.ecommerce.scan_and_go', { order: response });\n          } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.PRODUCT_NOT_FOUND')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function resetPagination() {\n      vm.gridApi.grid.options.paginationCurrentPage = 1;\n    }\n\n    function handleNavClick(option) {\n      vm.currentNavItem = option;\n      localStorage.setItem(Session.company.id + '::' + $state.current.name + '::EcommerceOrdersController::currentNavItem', option);\n      filterChanged();\n      clearFulfillmentSelection();\n    }\n\n    function filterChanged() {\n      resetPagination();\n      saveStatus();\n      getPage();\n    }\n\n    function getPage() {\n      if (isOrdersState()) {\n        getGridOrdersPage();\n      }\n      if (isPickingState()) {\n        getGridPickingPage();\n      }\n    }\n\n    function toggleFilterVisibility(property, filter) {\n      filter.visible = !filter.visible;\n      if (!filter.visible && vm.status.filters[property].length) {\n        vm.status.filters[property] = [];\n        vm.filterChanged();\n      }\n      saveStatus();\n    }\n\n    function removeOrderFilter() {\n      vm.orders = [];\n      vm.selectedOrders = [];\n      vm.filterChanged();\n    }\n\n    function getDeliveriesPdf() {\n      if (vm.deliveryUrl) {\n        downloadDeliveriesPdf();\n        return;\n      }\n      var order_ids = getSelectedOrderIds();\n      vm.generatingDeliveriesPdf = true;\n      api.ecommerce.orders.get(\n        {\n          id: null,\n          option: 'create-deliveries-pdf-file',\n          order_ids: order_ids\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            pullingPdfFileUrl(order_ids);\n          } else {\n            if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.POS_ORDER_NOT_CHECKED')).position('top right'));\n            }\n            vm.generatingDeliveriesPdf = false;\n          }\n        }\n      );\n    }\n\n    function exportOrdersByShippingMethod(shippingMethodId) {\n      var orderIds = vm.gridApi.selection.getSelectedRows().map(function(row) {\n        return row.id;\n      });\n\n      if (vm.exportingOrdersByShippingMethod) {\n        return;\n      }\n\n      if (orderIds.length === 0) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.POS_ORDER_NOT_CHECKED')).position('top right'));\n        return;\n      }\n\n      vm.exportingOrdersByShippingMethod = true;\n      api.ecommerce.orders.get(\n        {\n          id: null,\n          option: 'export-orders-by-shipping-method',\n          shipping_method_id: shippingMethodId,\n          order_ids: orderIds.join(',')\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var link = document.createElement('a');\n            link.href = response.url;\n            link.target = '_blank';\n            link.dispatchEvent(new MouseEvent('click'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exportingOrdersByShippingMethod = false;\n        }\n      );\n    }\n\n    function pullingPdfFileUrl(order_ids) {\n      api.ecommerce.orders.get(\n        {\n          id: null,\n          option: 'check-pdf-status',\n          order_ids: order_ids\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            //start pulling\n            vm.deliveryUrl = response.url;\n            vm.generatingDeliveriesPdf = false;\n            downloadDeliveriesPdf();\n          } else if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $timeout(function() {\n              pullingPdfFileUrl(order_ids);\n            }, 5000);\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n            vm.generatingDeliveriesPdf = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.POS_ORDER_NOT_CHECKED')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function downloadDeliveriesPdf() {\n      var link = document.createElement('a');\n      link.href = vm.deliveryUrl;\n      // order_ids = order_ids.join('_');\n      // link.download = order_ids + '.pdf';\n      link.dispatchEvent(new MouseEvent('click'));\n      vm.deliveryUrl = null;\n    }\n\n    function noneChecked() {\n      return vm.selectedFulfillments.length === 0;\n    }\n\n    function printItemsListPdf() {\n      vm.generating_items_pdf = true;\n      if (!areSourceWarehouseUnique()) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.SOURCE_WAREHOUSE_IS_NOT_EQUAL')).position('top right'));\n        vm.generating_items_pdf = false;\n        return;\n      }\n      api.ecommerce.orders.get(\n        {\n          id: null,\n          option: 'get-pdf-file-roadmap',\n          order_ids: getSelectedOrderIds()\n        },\n        function(response, fn, status) {\n          var b64 = '';\n          for (var i = 0; response[i] !== undefined; i++) {\n            b64 += response[i];\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var sampleArr = byteArrayBufferService.base64ToArrayBuffer(b64);\n            byteArrayBufferService.saveByteArray('Order roadmap', sampleArr);\n          }\n          vm.generating_items_pdf = false;\n        }\n      );\n    }\n\n    function getSelectedOrderIds() {\n      var orderIds = vm.gridApi.selection.getSelectedRows().map(function(row) {\n        return row.pos_order;\n      });\n      return orderIds.join(',');\n    }\n\n    function getSelectedOrderDto() {\n      return vm.gridApi.selection.getSelectedRows().map(function(row) {\n        return {\n          id: row.pos_order,\n          autocode: row.autocode\n        };\n      });\n    }\n\n\n    function countSelectedOrderIds() {\n      var orderIds = vm.gridApi.selection.getSelectedRows().map(function(row) {\n        return row.id;\n      });\n\n      return orderIds.length;\n    }\n\n    function areSourceWarehouseUnique() {\n      var sourceWarehouseIds = vm.gridApi.selection.getSelectedRows().map(function(row, index, array) {\n        return row.source_warehouse_id === array[0].source_warehouse_id;\n      });\n\n      return !sourceWarehouseIds.includes(false);\n    }\n\n    function showItemsListPdf() {\n      if (!areSourceWarehouseUnique()) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.SOURCE_WAREHOUSE_IS_NOT_EQUAL')).position('top right'));\n        return;\n      }\n      var orderIds = getSelectedOrderIds();\n      if (orderIds === '') {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.POS_ORDER_NOT_CHECKED')).position('top right'));\n      } else {\n        $state.go('app.ecommerce.picking', {\n          order_ids: orderIds,\n          orders: getSelectedOrderDto()\n        });\n      }\n    }\n\n    function showMarkAsShippedDialog() {\n      var orderIds = getSelectedOrderIds();\n      var count = countSelectedOrderIds();\n      if (count === 0) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.POS_ORDER_NOT_CHECKED')).position('top right'));\n        return;\n      }\n      var twoOptions = {\n        controller: 'TwoOptionsDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/two-options-dialog/two-options-dialog.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        locals: {\n          params: {\n            title: $filter('translate')('ORDERS.MARK_AS_SHIPPED_TITLE'),\n            body: $filter('translate')('ORDERS.MARK_AS_SHIPPED_MSG', { count: count }),\n            option1Text: $filter('translate')('ORDERS.MARK_AS_SHIPPED'),\n            option1Callback: function() {\n              api.ecommerce.orders.save(\n                {\n                  id: null,\n                  option: 'mark-as-shipped',\n                  order_ids: orderIds\n                },\n                function(response, fn, status) {\n                  if (status === HTTP_STATUS.HTTP_200_OK) {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.MARK_AS_SHIPPED_TOAST')).position('top right'));\n                    filterChanged();\n                  } else {\n                    $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                  }\n                  $mdDialog.cancel();\n                }\n              );\n            },\n            option1Classes: 'md-raised',\n            cancelClasses: 'stroked'\n          }\n        }\n      };\n\n      $mdDialog.show(twoOptions);\n    }\n\n    function isOrdersState() {\n      return $state.current.name === 'app.ecommerce.orders';\n    }\n\n    function isPickingState() {\n      return $state.current.name === 'app.ecommerce.picking';\n    }\n\n    function isPickableOnPickingOrder() {\n      return vm.currentNavItem === 'to_prepare' && Session.company.has_picking_and_packing && isOrdersState();\n    }\n\n    function copyToClipboard(value) {\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({ position: 'fixed', opacity: '0' });\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n\n    function createPickingOrder() {\n      vm.creating = true;\n      var posOrderFulfillments = vm.selectedFulfillments.map(function(posOrderFulfillment) {\n        return posOrderFulfillment.id;\n      });\n      api.inventories.pickingOrder.save({\n          pos_order_fulfillment_ids: posOrderFulfillments,\n          warehouse_id: vm.selectedWarehouse\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            $state.go('app.inventory.picking_packing.picking_order', {\n              // todo check if picking_activity_id is correct or its pickingorderid id because its no sense\n              id: response.picking_order.id, previousState: $state.current.name\n            });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.creating = false;\n        }\n      );\n    }\n\n    function showCancelItemButton() {\n      return vm.currentNavItem === 'picking' ||\n        vm.currentNavItem === 'picked' ||\n        vm.currentNavItem === 'prepared';\n    }\n\n    function cancelItem(index, order) {\n      if (vm.currentNavItem === 'picking') {\n        var title = $filter('translate')('ORDERS.CANCEL_PICKING_ORDER_ITEM', { register: order.autocode });\n        var message = $filter('translate')('ORDERS.CANCEL_PICKING_ORDER_ITEM_MSG', { register: order.autocode });\n        var okButton = $filter('translate')('ORDERS.CANCEL_PICKING_ORDER_ITEM_BUTTON');\n        showCancelDialog(index, order, cancelPicking, title, message, okButton);\n      } else if (vm.currentNavItem === 'picked') {\n        var title = $filter('translate')('ORDERS.CANCEL_PICKED_ORDER_ITEM', { register: order.autocode });\n        var message = $filter('translate')('ORDERS.CANCEL_PICKED_ORDER_ITEM_MSG', { register: order.autocode });\n        var okButton = $filter('translate')('ORDERS.CANCEL_PICKED_ORDER_ITEM_BUTTON');\n        showCancelDialog(index, order, cancelPicked, title, message, okButton);\n      } else if (vm.currentNavItem === 'prepared') {\n        var title = $filter('translate')('ORDERS.CANCEL_PREPARATION', { register: order.autocode });\n        var message = $filter('translate')('ORDERS.CANCEL_PREPARATION_MSG', { register: order.autocode });\n        var okButton = $filter('translate')('ORDERS.CANCEL_PREPARATION_BUTTON');\n        showCancelDialog(index, order, cancelPrepared, title, message, okButton);\n      }\n    }\n\n    function showCancelDialog(index, order, callback, title, message, ok) {\n      var confirm = $mdDialog.confirm()\n        .title(title)\n        .htmlContent(message)\n        .ok(ok || title)\n        .cancel($filter('translate')('GENERAL.CLOSE'));\n      $mdDialog.show(confirm).then(function() {\n        callback(index, order);\n      }, function() {\n      });\n    }\n\n    function cancelPicking(index, fulfillment) {\n      api.ecommerce.fulfillments.save(\n        {\n          id: fulfillment.id,\n          option: 'delete-from-picking'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.CANCEL_PICKING_ORDER_ITEM_SUCCESS')).position('top right'));\n            vm.gridOptions.data.splice(index, 1);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function cancelPicked(index, fulfillment) {\n      api.ecommerce.fulfillments.save(\n        {\n          id: fulfillment.id,\n          option: 'delete-from-picked'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.CANCEL_PICKED_ORDER_ITEM_SUCCESS')).position('top right'));\n            vm.gridOptions.data.splice(index, 1);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function cancelPrepared(index, fulfillment) {\n      api.inventories.pickingPackingPackingOrders.save(\n        {\n          id: fulfillment.packing_order,\n          option: 'cancel-parcels'\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.CANCEL_PREPARATION_SUCCESS')).position('top right'));\n            vm.gridOptions.data.splice(index, 1);\n          }\n          else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function hasMultipleScanAndGoFeature() {\n      return vm.hasSendcloudInstalledAppEnabled &&\n        Session.company.has_scan_and_go &&\n        (vm.currentNavItem === 'picked' ||\n          vm.currentNavItem === 'prepared') &&\n        isOrdersState();\n    }\n\n    function openMultipleScanAndGoDialog() {\n      $mdDialog.show({\n        controller: 'GenerateLabelsWithSendcloudController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/ecommerce/views/orders/dialogs/generate-labels-with-sendcloud/generate-labels-with-sendcloud-dialog.html',\n        clickOutsideToClose: true,\n        locals: {\n          tab: vm.currentNavItem,\n          posOrdersFulfillments: vm.gridApi.selection.getSelectedRows(),\n          onLabelsGenerated: function() {\n            initCounters();\n            getPage();\n          }\n        }\n      })\n    }\n\n    function clearFulfillmentSelection() {\n      vm.selectedFulfillmentsDict = {};\n      vm.selectedFulfillments = [];\n    }\n\n    function toggleFulfillment(fulfillment) {\n      if(vm.initializingPage){\n        return;\n      }\n      if (vm.selectedFulfillmentsDict[fulfillment.id]) {\n        deselectFulfillment(fulfillment);\n      } else {\n        selectFulfillment(fulfillment);\n      }\n    }\n\n    function selectFulfillment(fulfillment) {\n      vm.selectedFulfillmentsDict[fulfillment.id] = fulfillment;\n      vm.selectedFulfillments.push(fulfillment);\n    }\n\n    function deselectFulfillment(fulfillment) {\n      delete vm.selectedFulfillmentsDict[fulfillment.id];\n      var index = vm.selectedFulfillments.indexOf(fulfillment);\n      vm.selectedFulfillments.splice(index, 1);\n    }\n\n    function markSelectedRows(){\n      vm.initializingPage = true;\n      vm.gridOptions.data.forEach(function(row){\n        if(vm.selectedFulfillmentsDict[row.id]){\n          vm.gridApi.selection.selectRow(row);\n        }\n      });\n      vm.initializingPage = false;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.inventory')\n    .controller('EcommerceOrderController', EcommerceOrderController);\n\n  /** @ngInject */\n  function EcommerceOrderController(\n    api,\n    Utils,\n    apiResolver,\n    Session,\n    $mdToast,\n    $window,\n    $mdDialog,\n    $filter,\n    $scope,\n    $sce,\n    $state,\n    $stateParams,\n    $document,\n    $http,\n    $timeout,\n    $rootScope,\n    OrderData,\n    WarehousesData,\n    SitesData,\n    ShippingMethodsData,\n    TaxesData,\n    ShippingBoxesData,\n    PosOrderProductVariant,\n    PosOrder,\n    POS_ORDER_SHIPPING_STATUSES,\n    POS_ORDER_PAYMENT_STATUSES,\n    HTTP_STATUS,\n    POS_ORDER_SHIPPING_STATUSES_COLORS,\n    POS_ORDER_PAYMENT_STATUSES_COLORS,\n    POS_ORDER_FULFILLMENTS,\n    ERROR_CODES,\n    ECOMMERCE_PLATFORMS,\n    AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY,\n    StockoutService,\n    FeatureFlagService,\n    PRINTER_TYPES,\n    PAGE_SIZES\n  ) {\n    var vm = this;\n    const FULFILLMENT_DEPLOY_DATE = new Date('2022-10-05 05:00:00 GMT+0200');\n    vm.POS_ORDER_SHIPPING_STATUSES = POS_ORDER_SHIPPING_STATUSES;\n    vm.POS_ORDER_SHIPPING_STATUSES_COLORS = POS_ORDER_SHIPPING_STATUSES_COLORS;\n    vm.POS_ORDER_PAYMENT_STATUSES = POS_ORDER_PAYMENT_STATUSES;\n    vm.POS_ORDER_PAYMENT_STATUSES_COLORS = POS_ORDER_PAYMENT_STATUSES_COLORS;\n    vm.POS_ORDER_FULFILLMENTS = POS_ORDER_FULFILLMENTS;\n    vm.AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY = AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY;\n    vm.BANNER_ACADEMY_URL = 'https://stockagile.com/blog/gestion-avanzada-de-pedidos/';\n    vm.BANNER_VIDEO_URL = '';\n\n    vm.order = new PosOrder(angular.copy(OrderData));\n    vm.orderBackup = null;\n    vm.warehouses = WarehousesData.results;\n    vm.warehousesDict = {};\n    vm.sites = SitesData.results;\n    vm.sitesDict = {};\n    vm.shippingMethods = ShippingMethodsData.results;\n    vm.taxes = TaxesData.results;\n    vm.paymentMethods = [];\n    vm.shippingBoxes = ShippingBoxesData.results;\n    vm.showStockDetails = false;\n    vm.selectedProductStock = null;\n    vm.selectedProductVariant = null;\n    vm.loading = false;\n    vm.paymentMethodsDict = {};\n    vm.updateActivity = null;\n    vm.saving = false;\n    vm.addProductsEnabled = false;\n    vm.showNewScreenBanner = false;\n    vm.showUploadFulfillmentsDisabled = false;\n    vm.showOldOrdersBanner = false;\n    vm.posOrderPaymentStatusDisabled = true;\n    vm.registerId = vm.order.register_instance\n      ? vm.order.register_instance.warehouse.id\n      : null;\n    vm.siteHasReplenishmentPolicy = false;\n\n    vm.autoAssignReplenishmentWarehousePolicies = [\n      AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY.AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_BY_WAREHOUSE_ID_SELECTED_BY_SITE,\n      AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY.AUTO_ASSIGN_PURCHASE_POLICY\n    ];\n\n    vm.posOrderPaymentStatuses = [\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_PENDING,\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_PAID,\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_UNPAID,\n      POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_FAILED\n    ];\n\n    vm.posOrderShippingStatuses = [\n      POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_PENDING,\n      POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_ALLOCATED,\n      POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_PICKED_UP,\n      POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_SHIPPED\n    ];\n\n    // Methods\n    vm.goBack = goBack;\n    vm.printTicket = printTicket;\n    vm.printPosTicket = printPosTicket;\n    vm.printDevolutionCard = printDevolutionCard;\n    vm.sendPosTicket = sendPosTicket;\n    vm.createInvoice = createInvoice;\n    vm.delete = deleteOrder;\n    vm.customerChanged = customerChanged;\n    vm.shippingAddressChanged = shippingAddressChanged;\n    vm.billingAddressChanged = billingAddressChanged;\n    vm.addProduct = addProduct;\n    vm.addProducts = addProducts;\n    vm.removeCustomer = removeCustomer;\n    vm.goToRegisterActivity = goToRegisterActivity;\n    vm.dismissNewOrderBanner = dismissNewOrderBanner;\n    vm.dismissWarningOrderBanner = dismissWarningOrderBanner;\n    vm.openSendEmailDialog = openSendEmailDialog;\n\n    vm.createDevolution = createDevolution;\n    vm.markAsIncidence = markAsIncidence;\n    vm.deleteDevolutionCard = deleteDevolutionCard;\n\n    vm.updateOrder = updateOrder;\n    vm.updateDebounce = updateDebounce;\n\n    vm.saveOrder = saveOrder;\n    vm.saveAndCloseOrder = saveAndCloseOrder;\n    vm.saveAndAllocateDraft = saveAndAllocateDraft;\n    vm.showSaveDraftButton = showSaveDraftButton;\n    vm.showSaveDraftAndAllocateButton = showSaveDraftAndAllocateButton;\n    vm.showSaveButton = showSaveButton;\n    vm.showSaveAndCloseButton = showSaveAndCloseButton;\n    vm.cancelProductsEdition = cancelProductsEdition;\n    vm.hasEposItalyActive = hasEposItalyActive;\n    vm.executeSupplyingPolicy = executeSupplyingPolicy;\n    vm.updateFulfillmentProductVariantsStockoutData = updateFulfillmentProductVariantsStockoutData;\n    vm.hasStockouts = hasStockouts;\n    vm.showAdminActions = showAdminActions;\n    vm.importOrderFromSite = importOrderFromSite;\n    vm.downloadInvoice = downloadInvoice;\n    vm.goToInvoice = goToInvoice;\n\n    vm.toggleSidenav = function(a) {\n    };\n\n    // Initialize\n    init();\n    initApiVersion();\n\n    // Functions\n    function init() {\n      vm.sites.forEach(function(site) {\n        vm.sitesDict[site.id] = site;\n      });\n\n      if (vm.order.site) {\n        vm.posOrderPaymentStatusDisabled =\n          vm.order.site.platform !==\n          ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP;\n        vm.posOrderShippingStatuses.push(\n          POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_CANCELLED\n        );\n      }\n\n      vm.updateActivity = vm.order.register_activity_closed;\n\n      var paymentMethodParams = {};\n      if (vm.order.register) {\n        paymentMethodParams.register_id = vm.order.register;\n      }\n      api.accounting.paymentMethods.list(paymentMethodParams,\n        function(response, fn, status) {\n          // Update the vm.paymentMethods without breaking the reference\n          vm.paymentMethods.splice.apply(vm.paymentMethods, [0, vm.paymentMethods.length].concat(response.results.filter(function(pm) {\n            return !pm.payment_gateway;\n          })));\n          response.results.forEach(function(paymentMethod) {\n            vm.paymentMethodsDict[paymentMethod.id] = paymentMethod;\n          });\n        });\n\n      var today = new Date();\n      vm.showNewScreenBanner = localStorage.getItem('EcommerceOrderController::showNewScreenBanner') !== today.toLocaleDateString();\n      vm.showUploadFulfillmentsDisabled = vm.order.site && !vm.order.site.upload_fulfillments;\n      vm.showOldOrdersBanner = !vm.showUploadFulfillmentsDisabled && !!vm.order.site && vm.order.created_at < FULFILLMENT_DEPLOY_DATE;\n      vm.showWarningOrderBanner = vm.order.warning;\n      vm.siteHasReplenishmentPolicy = siteHasReplenishmentPolicyCheck();\n    }\n\n    function initApiVersion() {\n      vm.createPosOrderApiVersion = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n    }\n\n    function goBack() {\n      if ($state.current.name === 'app.sale.sales_log.order') {\n        $state.go('app.sale.sales_log');\n      } else if ($state.current.name === 'app.ecommerce.picking.order') {\n        $state.go('app.ecommerce.picking');\n      } else {\n        $state.go('app.ecommerce.orders');\n      }\n    }\n\n    function showAdminActions() {\n      return !!Session.user.isSuperAdmin();\n    }\n\n    function importOrderFromSite() {\n      if (!vm.showAdminActions()) {\n        return;\n      }\n\n      api.inventories.posOrders.save(\n        {\n          id: vm.order.id,\n          option: 'sync-order-from-site'\n        }, function(results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('SITES.SYNC_ORDER_IN_PROGRESS'))\n                .position('top right')\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right'));\n          }\n        }\n      );\n    }\n\n    function customerChanged() {\n      if (!vm.order.customer || !vm.order.customer_instance) {\n        vm.order.customer = null;\n        vm.order.customer_instance = null;\n        vm.order.shipping_address = null;\n        vm.order.shipping_address_instance = null;\n        vm.order.billing_address = null;\n        vm.order.billing_address_instance = null;\n      } else {\n        vm.assignCustomerError = false;\n      }\n\n      updateDebounce();\n    }\n\n    function goToRegisterActivity() {\n      if (vm.order.register_activity) {\n        $state.go('app.sale.register_closure', { id: vm.order.register_activity });\n      }\n    }\n\n    function removeCustomer() {\n      vm.order.customer = null;\n      vm.customerChanged();\n    }\n\n    function shippingAddressChanged() {\n      vm.order.shipping_address_instance =\n        vm.order.customer_instance.postal_addresses.find(function(\n          postalAddress\n        ) {\n          return postalAddress.id == vm.order.shipping_address;\n        });\n\n      updateDebounce();\n    }\n\n    function billingAddressChanged() {\n      vm.order.billing_address_instance =\n        vm.order.customer_instance.postal_addresses.find(function(\n          postalAddress\n        ) {\n          return postalAddress.id == vm.order.billing_address;\n        });\n\n      updateDebounce();\n    }\n\n    function deleteOrder(createNegativePaymentMethods, registerId) {\n      if (Session.hasPermission('sale.sales_log.delete')) {\n        if (vm.loading) {\n          return;\n        }\n\n        var confirm = $mdDialog\n          .confirm()\n          .title($filter('translate')('ORDER.DELETE_ORDER_TITLE'))\n          .htmlContent(\n            $filter('translate')(\n              vm.order.autocode\n                ? 'ORDER.DELETE_ORDER_MESSAGE_NEGATIVE'\n                : 'ORDER.DELETE_ORDER_MESSAGE_DELETE'\n            )\n          )\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.DELETE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n        $mdDialog.show(confirm).then(function() {\n          vm.loading = true;\n          vm.createPosOrderApiVersion.delete({\n              id: vm.order.id,\n              create_negative_payment_methods: createNegativePaymentMethods,\n              register_id: registerId\n            },\n            function(results, fn, status) {\n              if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n                goBack();\n                $mdToast.show(\n                  $mdToast\n                    .simple()\n                    .textContent(\n                      $filter('translate')('SALES_LOG.POS_ORDER_DELETED')\n                    )\n                    .position('top right')\n                );\n              } else {\n                if (\n                  results.Error ===\n                  ERROR_CODES.ERROR_04003_DELETING_POS_ORDER_REGISTER_ACTIVITY_CLOSED\n                ) {\n                  $mdToast.show(\n                    $mdToast\n                      .simple()\n                      .textContent(\n                        $filter('translate')(\n                          'SALES_LOG.ERROR_DELETE_ACTIVITY_CLOSED'\n                        )\n                      )\n                      .hideDelay(10000)\n                      .position('top right')\n                  );\n                } else {\n                  $mdToast.show(\n                    $mdToast\n                      .simple()\n                      .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                      .position('top right')\n                  );\n                }\n              }\n              vm.deletting = false;\n            }\n          );\n        });\n      }\n    }\n\n    function printTicket() {\n      var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n      if (flag_enabled && vm.order.pos_order_invoices.length > 0) {\n        var url = api.urls.accounting.printer.replace(':option', 'pos-order-invoices');\n\n        var params = {\n          pos_order_invoice_ids: vm.order.pos_order_invoices.map(function(invoice) {\n            return invoice.id;\n          }),\n          pos_order_ids: vm.order.id,\n          printer_type: PRINTER_TYPES.PRINTER_TYPE_PDF,\n          page_size: PAGE_SIZES.PAGE_SIZE_A4,\n          register_id: vm.order.register_instance ? vm.order.register_instance.id : null\n        };\n        $http.get(url, { params: params }).then(function(response) {\n          var file = new Blob([response.data], { type: 'application/pdf' });\n          var fileURL = URL.createObjectURL(file);\n          window.open(fileURL, '_blank');\n        }).catch(function(error) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n              .position('top right')\n              .hideDelay(3000)\n          );\n        });\n      } else {\n        var url = api.urls.inventories.posOrdersPrintPdf.replace(':id', vm.order.id);\n        $http.get(url).then(function(response) {\n          if (response.status === HTTP_STATUS.HTTP_200_OK) {\n            Session.setTokenCookie();\n            window.open(url);\n          } else {\n            var content = 'WAREHOUSE.TICKET_CONFIGURATION_TOAST_ERROR_MESSAGE';\n            if (vm.order.site && vm.order.site.id && response.data.site_id) {\n              content = 'SITE.TICKET_CONFIGURATION_TOAST_ERROR_MESSAGE';\n            }\n\n            if (response.status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              $mdToast.show($mdToast.simple()\n                .textContent($filter('translate')(content))\n                .action($filter('translate')('WAREHOUSE.TICKET_CONFIGURATION_BUTTON'))\n                .hideDelay(5000)\n                .highlightAction(true)\n                .position('top right')).then(function(toast_response) {\n                if (toast_response === 'ok') {\n                  if (!vm.order.site && response.data.warehouse_id) {\n                    $mdDialog.hide();\n                    $state.go('app.inventory.warehouses.warehouse.details', { id: response.data.warehouse_id });\n                  } else if (vm.order.site && vm.order.site.id && response.data.site_id) {\n                    $mdDialog.hide();\n                    $state.go('app.ecommerce.sites.site.details', { id: response.data.site_id });\n                  }\n                }\n              });\n\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n                  .hideDelay(3000)\n              );\n            }\n          }\n        });\n      }\n    }\n\n    function hasEposItalyActive() {\n      return vm.order && vm.order.hasEposItalyActive();\n    }\n\n    function siteHasReplenishmentPolicyCheck() {\n      if (!vm.order.site) {\n        return false;\n      }\n\n      return vm.autoAssignReplenishmentWarehousePolicies.includes(vm.order.site.auto_assign_replenishment_warehouse_policy);\n    }\n\n    function executeSupplyingPolicy() {\n      if (!vm.siteHasReplenishmentPolicy) {\n        return;\n      }\n\n      $mdDialog.show({\n        controller: 'ExecuteSupplyingPolicyController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/ecommerce/views/order/dialogs/execute-supplying-policy/execute-supplying-policy.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          posOrder: vm.order,\n          warehousesResults: WarehousesData.results\n        }\n      }).then(function(result) {\n        if (result) {\n          var url = api.urls.inventories.posOrdersExecuteSupplyingPolicy.replace(':id', vm.order.id);\n          $http.post(url, result).then(function(response) {\n            if (response.status === HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')('ORDERS.SUPPLYING_POLICY_EXECUTED'))\n                  .position('top right')\n              );\n              updateFulfillmentProductVariantsStockoutData();\n              $rootScope.$broadcast('replenishmentPolicyExecuted');\n            } else {\n              $mdToast.show(\n                $mdToast.simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n              );\n            }\n          });\n        }\n      });\n    }\n\n    function printPosTicket(isGiftTicket) {\n      var siteObj = null;\n      if (vm.order.site) {\n        siteObj = vm.sitesDict[vm.order.site.id];\n      }\n\n      if (vm.order.hasEposItalyActive()) {\n        return;\n      }\n\n      $scope.$emit('ndPrinter::printPosOrder', {\n        posOrder: vm.order,\n        register: vm.order.register_instance,\n        site: siteObj,\n        openDrawer: false,\n        giftTicket: isGiftTicket,\n        avoidNormalTicket: isGiftTicket\n      });\n    }\n\n    function printDevolutionCard() {\n      if (\n        vm.order.generated_devolution_card &&\n        vm.order.generated_devolution_card.length > 0\n      ) {\n        $scope.$emit('ndPrinter::printDevolutionCard', {\n          posOrder: vm.order,\n          register: vm.order.register_instance,\n          site: vm.sitesDict[vm.order.site.id]\n        });\n      }\n    }\n\n    function sendPosTicket(isGiftTicket) {\n      if (vm.fetching) {\n        return;\n      }\n\n      if (!vm.order.customer) {\n        // TODO control it\n        alert('Seleccione un cliente');\n        return;\n      }\n\n\n      var tempSale = angular.copy(vm.order);\n      tempSale.option = 'send_pdf';\n\n      if (isGiftTicket) {\n        // If gift, select the desired amounts to print\n        $mdDialog\n          .show({\n            controller: 'EscPosPrinterDialogController',\n            controllerAs: 'vm',\n            templateUrl:\n              'app/main/services/dialogs/esc-pos-printer-dialog/esc-pos-printer-dialog.html',\n            parent: angular.element(document.body),\n            clickOutsideToClose: false,\n            multiple: true,\n            locals: {\n              products: tempSale.pos_order_product_variants,\n              isEco: true\n            }\n          })\n          .then(function(result) {\n            var giftAmounts = result.map(function(posOrderProductVariant) {\n              return {\n                id: posOrderProductVariant.id,\n                amount: posOrderProductVariant.selected\n                  ? posOrderProductVariant.gift_amount\n                  : 0\n              };\n            });\n\n            tempSale.is_gift = true;\n            tempSale.gift_amounts = giftAmounts;\n\n            vm.fetching = true;\n            api.inventories.posOrders.update(tempSale, function(response) {\n              if (response.success) {\n                $mdToast.show(\n                  $mdToast\n                    .simple()\n                    .textContent($filter('translate')('SALES_LOG.TICKET_SENT'))\n                    .position('top right')\n                );\n              } else {\n                $mdToast.show(\n                  $mdToast\n                    .simple()\n                    .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                    .position('top right')\n                );\n              }\n              vm.fetching = false;\n            });\n          });\n      } else {\n        vm.fetching = true;\n        api.inventories.posOrders.update(tempSale, function(response) {\n          if (response.success) {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('SALES_LOG.TICKET_SENT'))\n                .position('top right')\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n          vm.fetching = false;\n        });\n      }\n    }\n\n    function createInvoice(closeInvoice) {\n      if (vm.generatingInvoice || !vm.order.canCreateInvoice()) {\n        return;\n      }\n\n      if (checkCreateInvoiceErrors()) {\n        return;\n      }\n\n      vm.assignCustomerError = false;\n      vm.generatingInvoice = true;\n\n      var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n      var params = {\n        id: vm.order.id\n      };\n\n      if (apiToUse === api.private.v2.inventories.posOrders) {\n        params.option = 'create-replacement-invoice';\n        params.pos_order_invoice_ids = vm.order.pos_order_invoices.map(function(pos_order_invoice) {\n          return pos_order_invoice.id;\n        });\n      } else {\n        params.option = 'invoice';\n        params.close = !!closeInvoice;\n      }\n\n      apiToUse.save(\n        params,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (params.option === 'create-replacement-invoice') {\n              vm.order.substitutive_invoices = vm.order.substitutive_invoices || [];\n              vm.order.substitutive_invoices.push(results.invoice);\n            } else {\n              if (apiToUse === api.inventories.posOrders) {\n                vm.order = new PosOrder(results);\n              } else {\n                vm.order.invoice = results.invoice;\n              }\n            }\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('SALES_LOG.INVOICE_GENERATED_SUCCESSFULLY'))\n                .position('top right')\n            );\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n            var message = results.detail || $filter('translate')('GENERAL.ERROR_TOAST');\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent(message)\n                .position('top right')\n            );\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (results.error_code === 'ERROR_01020_ALL_INVOICES_ALREADY_REPLACED') {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('SALES_LOG.ERROR_01020_ALL_INVOICES_ALREADY_REPLACED'))\n                  .position('top right')\n              );\n            }\n          } else if (status === HTTP_STATUS.HTTP_500_INTERNAL_SERVER_ERROR) {\n            var message = results.detail || $filter('translate')('GENERAL.ERROR_TOAST');\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent(message)\n                .position('top right')\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n\n          vm.generatingInvoice = false;\n        }\n      );\n    }\n\n    function checkCreateInvoiceErrors() {\n      var errors = [];\n      if (!vm.order.customer) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_CUSTOMER_INFORMATION'));\n      }\n\n      var customer = vm.order.customer_instance || {};\n      var postal_address = customer.postal_addresses && customer.postal_addresses.length ? customer.postal_addresses[0] : {};\n\n      if (!customer.vat) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_VAT'));\n      }\n      if (!customer.name && (!customer.first_name && !customer.last_name)) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_COMPANY_NAME_OR_CONTACT_NAME'));\n      }\n      if (!postal_address.address_1) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_ADDRESS'));\n      }\n      if (!postal_address.city) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_CITY'));\n      }\n      if (!postal_address.country) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_COUNTRY'));\n      }\n      if (!postal_address.zip) {\n        errors.push($filter('translate')('SALES_LOG.ERROR_MISSING_ZIP'));\n      }\n\n      if (errors.length === 0) {\n        return false;\n      }\n\n      var error_text = '<ul>';\n      errors.forEach(function(error) {\n        error_text += '<li class=\"red-500-fg\">' + error + '</li>';\n      });\n      error_text += '</ul>';\n\n      $mdDialog.show(\n        $mdDialog.alert().parent(angular.element($document.find('#dialogContent_pos-order-dialog')))\n          .clickOutsideToClose(true)\n          .title($filter('translate')('SALES_LOG.ERROR_MISSING_CUSTOMER_INFORMATION'))\n          .htmlContent(error_text)\n          .multiple(true)\n          .ariaLabel($filter('translate')('SALES_LOG.ERROR_MISSING_CUSTOMER_INFORMATION'))\n          .ok($filter('translate')('SALES_LOG.UNDERSTOOD'))\n      );\n      return true;\n    }\n\n    function addProduct(product, productVariant) {\n      if (vm.order.deleted || vm.saving || !vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      api.inventories.posOrderProductVariants.save(\n        {\n          product_variant: productVariant.id,\n          warehouse: vm.order.source_warehouse,\n          save: false\n        },\n        function(result, fn, status) {\n          vm.order.addPosOrderProductVariant(\n            new PosOrderProductVariant(result)\n          );\n        }\n      );\n\n    }\n\n    function showEcommerceAddProductsDialog() {\n      var confirm = $mdDialog\n        .confirm()\n        .title($filter('translate')('ORDER.CANNOT_ADD_PRODUCTS_TITLE'))\n        .htmlContent($filter('translate')('ORDER.CANNOT_ADD_PRODUCTS_BODY'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.OK'));\n\n      $mdDialog.show(confirm);\n    }\n\n    function enableAddProductsCard() {\n      vm.orderBackup = angular.copy(vm.order);\n      vm.addProductsEnabled = true;\n    }\n\n    function addProducts() {\n      if (vm.order.site || vm.order.register == null) {\n        showEcommerceAddProductsDialog();\n      } else {\n        enableAddProductsCard();\n      }\n    }\n\n    function cancelProductsEdition() {\n      vm.addProductsEnabled = false;\n      vm.order = vm.orderBackup;\n      vm.orderBackup = null;\n    }\n\n    function setSaving(value) {\n      if (value) {\n        vm.saving = true;\n      } else {\n        vm.saving = false;\n      }\n    }\n\n    // TODO rename to update() and simplify code\n    function updateDebounce() {\n      vm.order.updateTotals();\n      updateOrder();\n    }\n\n    function updateOrder() {\n      if (vm.order.deleted || vm.saving) {\n        return;\n      }\n      vm.order.updateTotals();\n    }\n\n    function saveAndCloseOrder() {\n      var confirm = $mdDialog\n        .confirm()\n        .title($filter('translate')('ORDER.SAVE_AND_CLOSE_ORDER'))\n        .htmlContent($filter('translate')('ORDER.SAVE_AND_CLOSE_ORDER_MSG'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('ORDER.SAVE_AND_CLOSE_ORDER'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(\n        function() {\n          saveOrder(true);\n        },\n        function() {\n        }\n      );\n    }\n\n    function saveAndAllocateDraft() {\n      var confirm = $mdDialog\n        .confirm()\n        .title($filter('translate')('ORDER.SAVE_DRAFT_AND_ALLOCATE'))\n        .htmlContent($filter('translate')('ORDER.SAVE_DRAFT_AND_ALLOCATE_MSG'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('ORDER.SAVE_DRAFT_AND_ALLOCATE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(\n        function() {\n          saveOrder(false, false, true);\n        },\n        function() {\n        }\n      );\n    }\n\n    function saveOrder(closeOrder, forceUpdate, allocateDraft) {\n      setSaving(true);\n      vm.addProductsEnabled = false;\n      vm.orderBackup = null;\n      vm.order.force_update = !!forceUpdate;\n\n      var tempSale = angular.copy(vm.order);\n      tempSale.extra_actions = [];\n\n      if (closeOrder) {\n        tempSale.extra_actions.push('close');\n      }\n      if (allocateDraft) {\n        tempSale.extra_actions.push('allocate_draft');\n      }\n\n      vm.createPosOrderApiVersion.update(tempSale,\n        function(result, fn, status) {\n          setSaving(false);\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.order = Object.assign(vm.order, new PosOrder(result));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (result.Error === ERROR_CODES.ERROR_04002_REGISTER_CLOSED) {\n              var confirm = $mdDialog\n                .confirm()\n                .title(\n                  $filter('translate')(\n                    'ORDER.SAVE_AND_RECALCULATE_REGISTER_ACTIVITY'\n                  )\n                )\n                .htmlContent(\n                  $filter('translate')(\n                    'ORDER.SAVE_AND_RECALCULATE_REGISTER_ACTIVITY_MSG'\n                  )\n                )\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .ok($filter('translate')('GENERAL.OK'))\n                .cancel($filter('translate')('GENERAL.CANCEL'));\n\n              $mdDialog.show(confirm).then(\n                function() {\n                  saveOrder(false, true, false);\n                },\n                function() {\n                }\n              );\n            } else if (result.Error === ERROR_CODES.ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER) {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('ORDER.ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER'))\n                  .position('top right')\n              );\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n              );\n            }\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        });\n    }\n\n    function createDevolution() {\n      if (!vm.order.isAllowedToCreateDevolution()) {\n        return;\n      }\n      // Check if browser's localStorage has defaultRegister\n      var defaultRegister = localStorage.getItem(\n        Session.company.id + '::defaultRegister'\n      );\n\n      if (defaultRegister) {\n        // If exists, start a devolution\n        createDevolutionByRegister(defaultRegister);\n      } else {\n        // Otherwise, show register selector dialog\n        $mdDialog\n          .show({\n            controller: 'SelectRegisterDialogController',\n            controllerAs: 'vm',\n            templateUrl:\n              'app/main/apps/sale/views/registers/dialogs/select-register/select-register-dialog.html',\n            parent: angular.element($document.find('#content-container')),\n            clickOutsideToClose: false,\n            resolve: {\n              RegistersData: function(apiResolver) {\n                return apiResolver.resolve('sales.registers@list');\n              }\n            },\n            locals: {\n              message: 'SELECT_REGISTER.SELECT_REGISTER_MSG'\n            }\n          })\n          .then(\n            function(result) {\n              // Start a devolution again\n              createDevolutionByRegister(result.id);\n            },\n            function() {\n              // Nothing to do\n            }\n          );\n      }\n    }\n\n    function createDevolutionByRegister(registerId) {\n      var apiToUse = FeatureFlagService.selectEndpoint('CREATE_POS_ORDER_V2', api.inventories.posOrders, api.private.v2.inventories.posOrders);\n\n      var devolution = angular.extend(vm.order, {\n        option: 'create-devolution-draft',\n        register: registerId\n      });\n\n      apiToUse.update(\n        devolution,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $state.go('app.sale.sell', {\n              posOrder: results,\n              isDevolution: true\n            });\n          } else if (status === HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n            // If 405, register it's closed\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent(\n                  $filter('translate')(\n                    'SALES_LOG.DEVOLUTION_REGISTER_CLOSED_ERROR'\n                  )\n                )\n                .position('top right')\n            );\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n            );\n          }\n        }\n      );\n    }\n\n    function markAsIncidence() {\n      vm.order.incidence = !!!vm.order.incidence;\n      updateDebounce();\n    }\n\n    function deleteDevolutionCard(devolutionCard) {\n      // TODO\n    }\n\n    function showSaveDraftButton() {\n      return vm.order.allowedToClose();\n    }\n\n    function showSaveDraftAndAllocateButton() {\n      return vm.order.allowedToClose();\n    }\n\n    function showSaveButton() {\n      return vm.order.autocode && !vm.order.is_negated;\n    }\n\n    function showSaveAndCloseButton() {\n      return vm.order.allowedToClose();\n    }\n\n    function dismissNewOrderBanner() {\n      vm.showNewScreenBanner = false;\n      var today = new Date();\n      localStorage.setItem('EcommerceOrderController::showNewScreenBanner', today.toLocaleDateString());\n    }\n\n    function dismissWarningOrderBanner() {\n      vm.showWarningOrderBanner = false;\n    }\n\n    function openSendEmailDialog(invoice) {\n      if (!invoice) {\n        return;\n      }\n      $mdDialog.show({\n        controller: 'SendEmailDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/send-email-dialog/send-email-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          document: invoice,\n          documentName: invoice.autocode,\n          documentType: 'Invoice',\n          invoiceType: invoice.type\n        },\n        resolve: {\n          ContactData: function (apiResolver) {\n            return apiResolver.resolve('inventories.contacts@get', {id: invoice.customer});\n          }\n        }\n      });\n    }\n\n    function updateFulfillmentProductVariantsStockoutData() {\n      vm.order.pos_order_fulfillments.forEach(function(fulfillment) {\n        StockoutService.setStockoutDataFromFulfillment(fulfillment);\n      });\n    }\n\n    function hasStockouts() {\n      return vm.order.pos_order_fulfillments.some(function(fulfillment) {\n        return fulfillment.pos_order_fulfillment_product_variant_instances.some(function(pofpv) {\n          return pofpv.maxStockoutAmount > 0;\n        });\n      });\n    }\n\n    function downloadInvoice(invoiceId) {\n      api.private.v2.accounting.invoices.print({\n        id: invoiceId\n      });\n    }\n\n    function goToInvoice(invoiceId) {\n      $state.go('app.accounting.invoices.invoice', { id: invoiceId });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('NewEcommerceSiteController', NewEcommerceSiteController);\n\n  /** @ngInject */\n  function NewEcommerceSiteController(\n    $rootScope,\n    $location,\n    $scope,\n    $mdDialog,\n    $document,\n    $mdToast,\n    $filter,\n    $window,\n    $interval,\n    api,\n    $sce,\n    $state,\n    HTTP_STATUS,\n    Session,\n    PricingTiersData,\n    SerialNumberTypesData,\n    TicketConfigurationsData,\n    WarehousesData) {\n    var vm = this;\n\n    $scope.Session = Session;\n\n    // Data\n    vm.site = {};\n    vm.warehouses = WarehousesData.results;\n    vm.ticketConfigurations = TicketConfigurationsData.results;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.pricingTiers = PricingTiersData.results;\n\n    // Methods\n    vm.save = save;\n    vm.gotoSites = gotoSites;\n\n    // Functions\n    function gotoSites() {\n      $state.go('app.ecommerce.sites');\n    }\n\n    function save(site) {\n\n      if (vm.saving) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        return;\n      }\n\n      vm.saving = true;\n      api.ecommerce.sites.save(\n        site,\n        function(results, fn, status, message) {\n          if (status == HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.SITE_CREATED')).position('top right'));\n            $state.go('app.ecommerce.sites.site.details', { id: results.id });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        }\n      );\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactsController', ContactsController);\n\n  /** @ngInject */\n  function ContactsController($scope, $rootScope, $state, $compile, $mdSidenav, $timeout, $filter, api, DTColumnBuilder, msUtils, $mdDialog,\n                              $document, Session, ContactGroupsData, CONTACT_TYPES, CONTACT_PERSON_TYPES, CONTACT_TYPES_REVERSE, SEARCH_MAX_LENGTH, UiGridService) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.status = null;\n    vm.listType = 'all';\n    vm.types = CONTACT_TYPES;\n    vm.groups = ContactGroupsData.results;\n    vm.isContactsPage = $state.current.name == 'app.contacts' ? true : false;\n    vm.view = vm.isContactsPage ? 'contacts' : 'customers';\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.reloadContacts = reloadContacts;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.openContactDialog = openContactDialog;\n    vm.importContactsDialog = importContactsDialog;\n    vm.newCustomer = newCustomer;\n\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      $scope.$on('contact-updated', reloadContacts);\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          groups: [],\n          types: []\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      if(!vm.isContactsPage){\n        vm.status.filters.types = ['4'];\n      }\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function reloadContacts() {\n      if(!vm.isContactsPage){\n        vm.status.filters.types = ['4'];\n      }\n      if (vm.reloadContactsTimeout) {\n        $timeout.cancel(vm.reloadContactsTimeout);\n      }\n      vm.reloadContactsTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 1000);\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      if(vm.isContactsPage) {\n        result += vm.status.filters.types && vm.status.filters.types.length > 0 ? 1 : 0;\n      }\n      result += vm.status.filters.groups && vm.status.filters.groups.length > 0 ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      if(vm.isContactsPage) {\n        vm.status.filters.types = [];\n      }\n      vm.status.filters.groups = [];\n      reloadContacts();\n    }\n\n    function openContactDialog(ev, contact) {\n\n      ev.preventDefault();\n      ev.stopPropagation();\n\n      if (Session.hasPermission('app.contacts.contact')) {\n        $mdDialog.show({\n          controller: 'ContactDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            forceCustomer: false,\n            forceNaturalPersonType: false\n          },\n          resolve: {\n            ContactsData: function (apiResolver) {\n              if (contact){\n                return apiResolver.resolve('inventories.contacts@get', {id: contact.id});\n              }\n              return false;\n            },\n            PricingTiersData: function (apiResolver) {\n              return apiResolver.resolve('inventories.pricingTiers@get');\n            },\n            PaymentMethodsData: function (apiResolver) {\n              return apiResolver.resolve('accounting.paymentMethods@get');\n            }\n          }\n        });\n      }\n    }\n\n    function importContactsDialog(ev) {\n      if (Session.hasPermission('contacts.contacts.import')) {\n        $mdDialog.show({\n          controller: 'ImportContactsDialogController as vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/import/import.html',\n          parent: angular.element(document.body),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          //fullscreen: $scope.customFullscreen,\n          resolve: { }\n        }).then(function (response) {\n          reloadContacts();\n        }, function () {\n          // Cancel button clicked\n        });\n      }\n    }\n\n    function newCustomer(contact) {\n      if (Session.hasPermission('sale.customers.create')) {\n        $mdDialog.show({\n          controller: 'ContactDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            forceCustomer: true,\n            forceNaturalPersonType: true\n          },\n          resolve: {\n            ContactsData: function (apiResolver) {\n              if (contact) {\n                return apiResolver.resolve('inventories.contacts@get', {id: contact.id});\n              }\n              return false;\n            },\n            PricingTiersData: function (apiResolver) {\n              return apiResolver.resolve('inventories.pricingTiers@list');\n            },\n            PaymentMethodsData: function (apiResolver) {\n              return apiResolver.resolve('accounting.paymentMethods@get');\n            }\n          }\n        }).then(function () {\n          reloadContacts();\n        });\n      }\n    }\n\n    /*function downloadCSV() {\n\n      if(vm.exporting){\n        return;\n      }\n\n      vm.exporting = true;\n\n      var url = api.urls.inventories.contacts.replace('/:id', '').replace(':option', 'store-customers-csv');\n      var params = angular.element.param({\n        //filter_1: filter_1_value\n        search: vm.search\n      })\n      Session.setTokenCookie();\n      window.open(url + '?' + params);\n\n      vm.exporting = false;\n    }*/\n\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.ecommerce')\n    .controller('ConnectSiteController', ConnectSiteController);\n\n  /** @ngInject */\n  function ConnectSiteController($scope, $mdToast, $filter, api, $state, HTTP_STATUS, Session) {\n    $scope.Session = Session;\n    init();\n    function init() {\n      const urlSearchParams = new URLSearchParams(window.location.search);\n      const params = Object.fromEntries(urlSearchParams.entries());\n      console.log(params);\n      api.ecommerce.sitesConnect.get(\n        {\n          selling_partner_id: params.selling_partner_id,\n          spapi_oauth_code: params.spapi_oauth_code,\n          state: params.state\n        },\n        function (results, fn, status, message) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('SITE.SITE_CREATED')).position('top right'));\n            $state.go('app.ecommerce.sites.site.details', {id: results.site_id});\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n  angular\n    .module('app.contacts')\n    .controller('ContactController', ContactController);\n\n  /** @ngInject */\n  function ContactController($scope, $state, $mdSidenav, $filter, $mdToast, ContactData, $mdDialog, Session, CONTACT_TYPES, CONTACT_TYPES_REVERSE, api) {\n\n    var vm = this;\n    $scope.$state = $state;\n    $scope.CONTACT_TYPE_CUSTOMER = CONTACT_TYPES_REVERSE.CONTACT_TYPE_CUSTOMER;\n    vm.contact = ContactData;\n    vm.contactType = CONTACT_TYPES[vm.contact.type];\n    vm.isNew = $state.params.id === 'add';\n\n    vm.personDeletedWatcher = $scope.$on('personDeleted', function(event, deletedPersonId) {\n      if (vm.contact && Array.isArray(vm.contact.persons)) {\n        vm.contact.persons = vm.contact.persons.filter(function(person) {\n          return person.id !== deletedPersonId;\n        });\n      }\n    });\n\n    vm.personSavedWatcher = $scope.$on('personSaved', function(event, newPerson) {\n      if (vm.contact && Array.isArray(vm.contact.persons)) {\n        var existingPersonIndex = vm.contact.persons.findIndex(function(person) {\n          return person.id === newPerson.id;\n        });\n        if (existingPersonIndex !== -1) {\n          vm.contact.persons[existingPersonIndex] = newPerson;\n        }\n        else if (newPerson.id) {\n          vm.contact.persons.push(newPerson);\n        }\n      } else if (vm.contact) {\n        vm.contact.persons = [newPerson];\n      }\n    });\n    $scope.$on('$destroy', function() {\n        vm.personDeletedWatcher();\n        vm.personSavedWatcher();\n      });\n\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsWholesaleDashboardController', AnalyticsWholesaleDashboardController);\n\n    /** @ngInject */\n    function AnalyticsWholesaleDashboardController($filter, $state, $scope, $timeout, $interval, $mdSidenav, WarehousesData, Session)\n    {\n\n        // Data\n        var vm = this;\n        vm.Session = Session;\n        vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n        vm.warehouseId = $state.params.warehouseId == undefined ? null : $state.params.warehouseId;\n\n        vm.warehouses = WarehousesData.results;\n        vm.date = new Date();\n        vm.channels = null;\n        vm.selectedChannel = null;\n        vm.selectStoreTimeout = null;\n\n        // Methods\n        vm.selectChannel = selectChannel;\n        vm.changeTabToRealtime = changeTabToRealtime;\n        vm.changeTabToPerformance = changeTabToPerformance;\n        vm.contains = contains;\n        vm.toggle = toggle;\n        vm.exists = exists;\n\n        // Initialization\n        initialize();\n\n        // Functions\n        function initialize(){\n\n            vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n\n            vm.channels = [\n                {type: 'global', id: null, name: 'ALL_CHANNELS', separator: true},\n                /*{type: 'is_wholesale_showroom', name: 'ALL_SHOWROOMS'},\n                {type: 'is_wholesale_b2b_ecommerce', name: 'ALL_B2BECOMMERCE'},*/\n            ];\n\n            vm.warehouses.map(function(warehouse){\n              var channel = {\n                  code:'store',\n                  id: warehouse.id,\n                  name: warehouse.name\n              };\n              vm.channels.push(channel);\n              if(vm.selectedWarehouses.length==1 && vm.selectedWarehouses[0] == warehouse.id){\n                  vm.selectedChannel = channel;\n              }\n            });\n\n            if(vm.selectedWarehouses.length == 0){\n                vm.selectedChannel = vm.channels[0];\n            }else if(vm.selectedWarehouses.length > 1){\n                vm.selectedChannel = null;\n            }\n        }\n\n        function selectChannel(channel){\n            vm.selectedChannel = channel;\n        }\n\n        function changeTabToRealtime(){\n            $state.go('app.analytics.wholesale_dashboard.realtime', {warehouseId:vm.warehouseId});\n        }\n\n        function changeTabToPerformance(){\n            $state.go('app.analytics.wholesale_dashboard.performance', {warehouseId:vm.warehouseId});\n        }\n\n        function contains(warehouse) {\n            for (var i=0; i<vm.selectedWarehouses.length; i++) {\n              if (vm.selectedWarehouses[i] == warehouse) {\n                  return i;\n              }\n            }\n            return -1;\n        }\n\n        function exists(warehouse) {\n            return contains(warehouse) > -1;\n        }\n\n        function toggle(warehouse, tab) {\n            var index = contains(warehouse);\n            if (index > -1) {\n                vm.selectedWarehouses.splice(index, 1);\n            }\n            else {\n                vm.selectedWarehouses.push(warehouse);\n            }\n\n            if (!!vm.timeout) {\n                $timeout.cancel(vm.timeout);\n            }\n\n            vm.timeout = $timeout(function () {\n                vm.timeout = null;\n                if(tab == 'realtime'){\n                    $state.go('app.analytics.wholesale_dashboard.realtime', {warehouseIds:vm.selectedWarehouses});\n                }\n            }, 1000);\n\n            localStorage.removeItem(Session.company.id + '::wholesaleDashboardSelectedWarehousesController');\n            localStorage.setItem(Session.company.id + '::wholesaleDashboardSelectedWarehousesController', JSON.stringify(vm.selectedWarehouses));\n        }\n    }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('AnalyticsStartController', AnalyticsStartController);\n\n  /** @ngInject */\n  function AnalyticsStartController($state, $scope, $mdSidenav, $mdMedia, COMPANY_PLANS,\n                                    StartBannersData, Session, DASHBOARD_ITEM_TYPES, StartDashboardData) {\n\n    // Data\n    var vm = this;\n    vm.user = Session.user;\n    vm.data = StartDashboardData;\n    vm.banners = StartBannersData.results;\n    vm.date = new Date();\n    vm.DASHBOARD_ITEM_TYPES = DASHBOARD_ITEM_TYPES;\n\n    // Methods\n    vm.bannerClicked = bannerClicked;\n    vm.getBannerFlex = getBannerFlex;\n    vm.getBannerImage = getBannerImage;\n    vm.isFreemium = isFreemium;\n    vm.isSuperAdmin = isSuperAdmin;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      if (vm.data.employees_working_list) {\n        vm.data.employees_working_list_str = vm.data.employees_working_list.sort(function(a, b) {\n          if (a.user__first_name < b.user__first_name) {\n            return -1;\n          }\n          if (a.user__first_name > b.user__first_name) {\n            return 1;\n          }\n          if (a.user__last_name < b.user__last_name) {\n            return -1;\n          }\n          if (a.user__last_name > b.user__last_name) {\n            return 1;\n          }\n          return 0;\n        }).map(function(user) {\n          return user.user__first_name + ' ' + user.user__last_name;\n        }).join(', ');\n      }\n    }\n\n    function isFreemium() {\n      return Session.company && Session.company.plan === COMPANY_PLANS.FREEMIUM;\n    }\n\n    function isSuperAdmin() {\n      return Session.company && !!Session.user.isSuperAdmin();\n    }\n\n    function bannerClicked(banner) {\n      if (banner.panel_sref) {\n        $state.go(banner.panel_sref);\n      } else if (banner.link) {\n        window.open(banner.link, '_blank').focus();\n      }\n    }\n\n    function getBannerFlex(banner) {\n      if ($mdMedia('xs') || $mdMedia('xs')) {\n        return banner.ui_flex_sm;\n      }\n      if ($mdMedia('xl')) {\n        return banner.ui_flex_xl;\n      }\n      return banner.ui_flex;\n    }\n\n    function getBannerImage(banner) {\n      if ($mdMedia('xs') || $mdMedia('xs')) {\n        return banner.image_sm;\n      }\n      if ($mdMedia('lg')) {\n        return banner.image_xl;\n      }\n      return banner.image;\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('SaleAnalyticsController', SaleAnalyticsController);\n\n  /** @ngInject */\n  function SaleAnalyticsController(DynamicReport, $filter, api, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.filters = [];\n    vm.dimensions = [];\n    vm.columnDimensions = [];\n    vm.metrics = [];\n    vm.dataLoaded = false;\n    vm.endpoint = api.analytics.salesDynamicReport;\n    vm.presets = [\n      getDefaultPreset(),\n      getSalesPreset(),\n      getSoldProductsPreset()\n    ];\n\n    // Methods\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      getMetaData()\n        .then(function() {\n          vm.dataLoaded = true;\n        })\n        .catch(function(error) {\n          console.error(error);\n        });\n    }\n\n    function getMetaData() {\n      return new Promise(function(resolve, reject) {\n        api.analytics.salesDynamicReport.get({\n          metadata: true\n        }, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.filters = response.filters;\n            vm.dimensions = response.dimensions;\n            vm.columnDimensions = response.column_dimensions;\n            vm.metrics = response.metrics;\n            resolve();\n          } else {\n            reject('Error fetching metadata');\n          }\n        });\n      });\n    }\n\n    function getDefaultPreset() {\n      return new DynamicReport({\n        name: 'DYNAMIC_REPORTS.SALES_PRESET_DEFAULT',\n        trans: $filter('translate')('DYNAMIC_REPORTS.SALES_PRESET_DEFAULT'),\n        filters: [],\n        dimensions: [\n          'pos_order_source_warehouse'\n        ],\n        metrics: [\n          'pos_order_amount',\n          'pos_order_total'\n        ]\n      });\n    }\n\n    function getSalesPreset() {\n      return new DynamicReport({\n        name: 'DYNAMIC_REPORTS.SALES_PRESET_SALES',\n        trans: $filter('translate')('DYNAMIC_REPORTS.SALES_PRESET_SALES'),\n        filters: [],\n        dimensions: [\n          'pos_order_date',\n          'pos_order_source_warehouse',\n          'pos_order_register',\n          'pos_order_code',\n          'pos_order_customer_email',\n          'pos_order_seller_first_name',\n          'pos_order_seller_last_name'\n        ],\n        metrics: [\n          'pos_order_total',\n          'pos_order_subtotal',\n          'pos_order_amount',\n          'pos_order_total_cash',\n          'pos_order_total_credit_card',\n          'pos_order_other_payment_methods',\n          'pos_order_total_vouchers',\n        ]\n      });\n    }\n\n    function getSoldProductsPreset() {\n      return new DynamicReport({\n        name: 'DYNAMIC_REPORTS.SALES_PRESET_SOLD_PRODUCTS',\n        trans: $filter('translate')('DYNAMIC_REPORTS.SALES_PRESET_SOLD_PRODUCTS'),\n        filters: [],\n        dimensions: [\n          'pos_order_date',\n          'pos_order_source_warehouse',\n          'pos_order_register',\n          'pos_order_code',\n          'product_code',\n          'product_variant_color',\n          'product_variant_size',\n          'product_category',\n          'product_subcategory',\n          'product_brand',\n          'product_season',\n          'pos_order_vendor',\n          'pos_order_customer_email',\n          'pos_order_seller_first_name',\n          'pos_order_seller_last_name'\n        ],\n        metrics: [\n          'pos_order_total',\n          'pos_order_subtotal',\n          'pos_order_amount',\n          'pos_order_total_cash',\n          'pos_order_total_credit_card',\n          'pos_order_other_payment_methods',\n          'pos_order_total_vouchers'\n        ]\n      });\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsRetailDashboardController', AnalyticsRetailDashboardController);\n\n    /** @ngInject */\n    function AnalyticsRetailDashboardController($filter, $state, $scope, $interval, $mdSidenav, $timeout, WarehousesData, Session,\n                                                WAREHOUSE_TYPES)\n    {\n\n        // Data\n        var vm = this;\n        vm.Session = Session;\n        vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n        vm.warehouses = WarehousesData.results;\n        vm.date = new Date();\n        vm.channels = null;\n        vm.selectedChannel = null;\n        vm.selectStoreTimeout = null;\n\n        // Methods\n        vm.selectChannel = selectChannel;\n        vm.changeTabToRealtime = changeTabToRealtime;\n        vm.changeTabToPerformance = changeTabToPerformance;\n        vm.changeTabToProducts = changeTabToProducts;\n        vm.changeTabToCategories = changeTabToCategories;\n        vm.initialize = initialize;\n        vm.contains = contains;\n        vm.toggle = toggle;\n        vm.exists = exists;\n\n        // Initialization\n        initialize();\n\n        // Functions\n        function initialize(){\n\n            vm.selectedWarehouses = $state.params.warehouseIds == undefined ? [] : ( $state.params.warehouseIds == \"\" ? [] : $state.params.warehouseIds.split(','));\n\n            vm.channels = [\n                {type: 'global', id: null, name: 'ALL_STORES', separator: true},\n            ];\n\n            vm.warehouses.map(function(warehouse){\n                if (warehouse.type === WAREHOUSE_TYPES.STORE) {\n                    var channel = {\n                        code:'store',\n                        id: warehouse.id,\n                        name: warehouse.name\n                    };\n                    vm.channels.push(channel);\n                    if(vm.selectedWarehouses.length==1 && vm.selectedWarehouses[0] == warehouse.id){\n                        vm.selectedChannel = channel;\n                    }\n                }\n            });\n\n            if(vm.selectedWarehouses.length == 0){\n                vm.selectedChannel = vm.channels[0];\n            }else if(vm.selectedWarehouses.length > 1){\n                vm.selectedChannel = null;\n            }\n        }\n\n        function selectChannel(channel){\n            vm.selectedChannel = channel;\n        }\n\n        function changeTabToRealtime(){\n            $state.go('app.analytics.retail_dashboard.realtime', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function changeTabToPerformance(){\n            $state.go('app.analytics.retail_dashboard.performance', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function changeTabToProducts(){\n            $state.go('app.analytics.retail_dashboard.products', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function changeTabToCategories(){\n            $state.go('app.analytics.retail_dashboard.categories', {warehouseIds:vm.selectedWarehouses});\n        }\n\n        function contains(warehouse) {\n            for (var i=0; i<vm.selectedWarehouses.length; i++) {\n              if (vm.selectedWarehouses[i] == warehouse) {\n                  return i;\n              }\n            }\n            return -1;\n        }\n\n        function exists(warehouse) {\n            return contains(warehouse) > -1;\n        }\n\n        function toggle(warehouse, tab) {\n            var index = contains(warehouse);\n            if (index > -1) {\n                vm.selectedWarehouses.splice(index, 1);\n            }\n            else {\n                vm.selectedWarehouses.push(warehouse);\n            }\n\n            if (!!vm.timeout) {\n                $timeout.cancel(vm.timeout);\n            }\n\n            vm.timeout = $timeout(function () {\n                vm.timeout = null;\n                if(tab === 'realtime'){\n                    $state.go('app.analytics.retail_dashboard.realtime', {warehouseIds:vm.selectedWarehouses});\n                }else if(tab === 'performance'){\n                    $state.go('app.analytics.retail_dashboard.performance', {warehouseIds:vm.selectedWarehouses});\n                }else if(tab === 'products'){\n                    $state.go('app.analytics.retail_dashboard.products', {warehouseIds:vm.selectedWarehouses});\n                }\n            }, 1000);\n\n            localStorage.removeItem(Session.company.id + '::retailDashboardSelectedWarehousesController');\n            localStorage.setItem(Session.company.id + '::retailDashboardSelectedWarehousesController', JSON.stringify(vm.selectedWarehouses));\n        }\n\n    }\n\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.analytics')\n      .controller('ReportsReportController', ReportsReportController);\n\n    /** @ngInject */\n    function ReportsReportController($mdSidenav, $state, $scope, $mdDateRangePicker, Session) {\n\n      $scope.Session = Session;\n\n      // Data\n      var vm = this;\n      vm.dateRange = {};\n      vm.reportTypes = {\n        INVENTORY_TITLE: {\n          type: 'title',\n          translate: 'REPORTS.INVENTORY',\n          permission: 'app.inventory',\n          buttons: {\n            CATALOG: {\n              type: 'button',\n              translate: 'REPORTS.CATALOG',\n              title: 'REPORTS.CATALOG',\n              icon: 'icon-tag-text-outline',\n              serf: 'app.analytics.report.catalog',\n              permission: 'app.analytics.report.catalog',\n              disabled: false\n            },\n            INVENTORY: {\n              type: 'button',\n              translate: 'REPORTS.INVENTORY',\n              title: 'REPORTS.INVENTORY',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.inventory',\n              permission: 'app.analytics.report.inventory',\n              disabled: false\n            },\n            INVOICES: {\n              type: 'button',\n              translate: 'REPORTS.INVOICES',\n              title: 'REPORTS.INVOICES',\n              icon: 'icon-receipt',\n              serf: 'app.analytics.report.invoices',\n              permission: 'app.analytics.report.invoices',\n              disabled: false\n            },\n\n            PURCHASE_ORDERS: {\n              type: 'button',\n              translate: 'REPORTS.PURCHASES',\n              title: 'REPORTS.PURCHASES',\n              icon: 'icon-basket-fill',\n              serf: 'app.analytics.report.purchase-orders',\n              permission: 'app.analytics.report.purchase-orders',\n              disabled: false\n            },\n\n            TRANSFER_ORDERS: {\n              type: 'button',\n              translate: 'REPORTS.TRANSFERS',\n              title: 'REPORTS.TRANSFERS',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.transfer-orders',\n              permission: 'app.analytics.report.transfer-orders',\n              disabled: false\n            },\n\n            WORKDAYS: {\n              type: 'button',\n              translate: 'REPORTS.WORKDAYS',\n              title: 'REPORTS.WORKDAYS',\n              icon: 'icon-clock',\n              serf: 'app.analytics.report.workdays',\n              permission: 'app.analytics.report.workdays',\n              disabled: false\n            },\n            STOCK_MOVEMENTS: {\n              type: 'button',\n              translate: 'REPORTS.STOCK_MOVEMENTS',\n              title: 'REPORTS.STOCK_MOVEMENTS',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.stock-movements',\n              permission: 'app.analytics.report.stock-movements',\n              disabled: false\n            },\n            UID_STOCK: {\n              type: 'button',\n              translate: 'REPORTS.UID_STOCK',\n              title: 'REPORTS.UID_STOCK',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.uid-stock',\n              permission: 'app.analytics.report.uid-stock',\n              disabled: false\n            },\n            UID_STOCK_MOVEMENTS: {\n              type: 'button',\n              translate: 'REPORTS.UID_STOCK_MOVEMENTS',\n              title: 'REPORTS.UID_STOCK_MOVEMENTS',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.uid-stock-movements',\n              permission: 'app.analytics.report.uid-stock-movements',\n              disabled: false\n            },\n          },\n        },\n        WHOLESALE_TITLE: {\n          type: 'title',\n          translate: 'REPORTS.WHOLESALE',\n          permission: 'app.wholesale',\n          buttons: {\n\n            WHOLESALE_SALES: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_SALES',\n              title: 'REPORTS.WHOLESALE_SALES',\n              icon: 'icon-basket',\n              serf: 'app.analytics.report.wholesale-sales',\n              permission: 'app.analytics.report.wholesale-sales',\n              disabled: false\n            },\n\n            WHOLESALE_PRODUCTS_SOLD: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_PRODUCTS_SOLD',\n              title: 'REPORTS.WHOLESALE_PRODUCTS_SOLD',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.wholesale-products-sold',\n              permission: 'app.analytics.report.wholesale-products-sold',\n              disabled: false\n            },\n\n            WHOLESALE_DELIVERY_NOTES: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_DELIVERY_NOTES',\n              title: 'REPORTS.WHOLESALE_DELIVERY_NOTES',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.wholesale-delivery-notes',\n              permission: 'app.analytics.report.wholesale-delivery-notes',\n              disabled: false\n            },\n\n            WHOLESALE_TRANSACTIONS: {\n              type: 'button',\n              translate: 'REPORTS.WHOLESALE_TRANSACTIONS',\n              title: 'REPORTS.WHOLESALE_TRANSACTIONS',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.wholesale-transactions',\n              permission: 'app.analytics.report.wholesale-transactions',\n              disabled: false\n            },\n\n            WHOLESALE_CUSTOMERS: {\n              type: 'button',\n              translate: 'REPORTS.CUSTOMERS',\n              title: 'REPORTS.CUSTOMERS',\n              icon: 'icon-account-multiple',\n              serf: 'app.analytics.report.wholesale-customers',\n              permission: 'app.analytics.report.wholesale-customers',\n              disabled: false\n            }\n          }\n        },\n        RETAIL_TITLE: {\n          type: 'title',\n          translate: 'REPORTS.RETAIL_AND_ECOMMERCE',\n          permission: 'app.sale',\n          buttons: {\n\n            /*TOP_SELLERS: {\n              type: 'button',\n              translate: 'REPORTS.TOP_SELLERS',\n              title: 'Top Sellers',\n              icon: 'icon-receipt',\n              serf: 'app.analytics.report.top-sellers',\n              permission: 'app.analytics.report.top-sellers',\n              disabled: true\n            },*/\n            CASH_MOVEMENT: {\n              type: 'button',\n              translate: 'REPORTS.CASH_MOVEMENT',\n              title: 'REPORTS.CASH_MOVEMENT',\n              icon: 'icon-outbox',\n              serf: 'app.analytics.report.cash-movement',\n              permission: 'app.analytics.report.cash-movement',\n              disabled: false\n            },\n            TICKETS: {\n              type: 'button',\n              translate: 'REPORTS.SALES',\n              title: 'REPORTS.SALES',\n              icon: 'icon-basket',\n              serf: 'app.analytics.report.tickets',\n              permission: 'app.analytics.report.tickets',\n              disabled: false\n            },\n            RETAIL_TRANSACTIONS: {\n              type: 'button',\n              translate: 'REPORTS.PRODUCTS_SOLD',\n              title: 'REPORTS.PRODUCTS_SOLD',\n              icon: 'icon-package-variant',\n              serf: 'app.analytics.report.retail-transactions',\n              permission: 'app.analytics.report.retail-transactions',\n              disabled: false\n            },\n            PRODUCTS_STATUS: {\n              type: 'button',\n              translate: 'REPORTS.PRODUCTS_STATUS',\n              title: 'REPORTS.PRODUCTS_STATUS',\n              svgIcon: 'assets/images/custom-material-design-icons/calendar-product.fbd1033d.svg',\n              serf: 'app.analytics.report.product-status',\n              permission: 'app.analytics.report.product-status',\n              disabled: false\n            },\n            PAYMENTS: {\n              type: 'button',\n              translate: 'REPORTS.PAYMENTS',\n              title: 'REPORTS.PAYMENTS',\n              icon: 'icon-cash-multiple',\n              serf: 'app.analytics.report.payments',\n              permission: 'app.analytics.report.payments',\n              disabled: false\n            },\n            SELLER_TRANSACTIONS: {\n              type: 'button',\n              translate: 'REPORTS.SELLER_TRANSACTIONS',\n              title: 'REPORTS.SELLER_TRANSACTIONS',\n              icon: 'icon-chart-pie',\n              serf: 'app.analytics.report.seller-transactions',\n              permission: 'app.analytics.report.seller-transactions',\n              disabled: false\n            },\n\n            RETAIL_CUSTOMERS: {\n              type: 'button',\n              translate: 'REPORTS.CUSTOMERS',\n              title: 'REPORTS.CUSTOMERS',\n              icon: 'icon-account-multiple',\n              serf: 'app.analytics.report.retail-customers',\n              permission: 'app.analytics.report.retail-customers',\n              disabled: false\n            },\n\n            DAILY_BILLINGS: {\n              type: 'button',\n              translate: 'REPORTS.DAILY_BILLINGS',\n              title: 'REPORTS.DAILY_BILLINGS',\n              icon: 'icon-calendar-today',\n              serf: 'app.analytics.report.daily-billings',\n              permission: 'app.analytics.report.taxes',\n              disabled: false\n            },\n\n            REGISTER_CLOSURES: {\n              type: 'button',\n              translate: 'REPORTS.REGISTER_CLOSURES',\n              title: 'REPORTS.REGISTER_CLOSURES',\n              icon: 'icon-script',\n              serf: 'app.analytics.report.register-closures',\n              permission: 'app.analytics.report.register-closures',\n              disabled: false\n            },\n            TAXES: {\n              type: 'button',\n              translate: 'REPORTS.TAXES',\n              title: 'REPORTS.TAXES',\n              icon: 'icon-bank',\n              serf: 'app.analytics.report.taxes',\n              permission: 'app.analytics.report.taxes',\n              disabled: false\n            },\n            STOCK_REPLENISHMENT: {\n              type: 'button',\n              translate: 'REPORTS.STOCK_REPLENISHMENT',\n              title: 'REPORTS.STOCK_REPLENISHMENT',\n              icon: 'icon-truck',\n              serf: 'app.analytics.report.stock-replenishment',\n              permission: 'app.analytics.report.stock-replenishment',\n              disabled: false\n            }\n          }\n        }\n      };\n\n      vm.currentOption = vm.reportTypes.RETAIL_SALES;\n      vm.downloading = false;\n\n\n      // Methods\n      vm.toggleSidenav = toggleSidenav;\n      vm.goTo = goTo;\n      vm.isActive = isActive;\n      vm.createClicked = createClicked;\n      vm.download = download;\n      vm.downloadReport = null;\n      vm.filterData = null;\n      vm.checkboxValue = null;\n      vm.checkboxName = null;\n      vm.filterDates = filterDates;\n      vm.toggleCheckboxValue = toggleCheckboxValue;\n      vm.showHeaderItems = showHeaderItems;\n      // Functions\n      function toggleSidenav(sidenavId) {\n        $mdSidenav(sidenavId).toggle();\n      }\n\n      function goTo(newOption) {\n        vm.currentOption = newOption;\n        $state.go(vm.currentOption.serf);\n      }\n\n      function showHeaderItems(title){\n        if (!title){\n          return false;\n        }\n        else{\n            if (title == \"REPORTS.TAXES\"){\n              return false;\n            }\n            if (title == \"REPORTS.DAILY_BILLINGS\"){\n              return false;\n            }\n            if (title == \"REPORTS.REGISTER_CLOSURES\"){\n              return false;\n            }\n            if (title == \"REPORTS.PRODUCTS_STATUS\"){\n              return false;\n            }\n            if (title == \"REPORTS.PRODUCTS_SOLD\"){\n              return false;\n            }\n            if (title == \"REPORTS.ECOMMERCE_SALES\"){\n              return false;\n            }\n            if (title == \"REPORTS.CASH_MOVEMENT\"){\n              return false;\n            }\n            if (title == \"REPORTS.WHOLESALE_SALES\"){\n              return false;\n            }\n            if (title == \"REPORTS.WHOLESALE_PRODUCTS_SOLD\"){\n              return false;\n            }\n            return true;\n        }\n      }\n\n      function isActive(option) {\n        return option == vm.currentOption;\n      }\n\n      function createClicked() {\n        $scope.$broadcast('createClicked');\n      }\n\n      function filterDates() {\n\n        $mdDateRangePicker.show({\n          model: vm.dateRange,\n        }).then(function (result) {\n          vm.dateRange = result;\n          vm.filterData(result);\n\n        }).catch(function () {\n          console.log('Cancelled');\n        });\n\n      }\n\n      function download(fileFormat) {\n        vm.downloadReport(fileFormat);\n      }\n\n      function toggleCheckboxValue() {\n        vm.checkboxValue = !vm.checkboxValue;\n      }\n    }\n  }\n\n)();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ProductAnalyticsController', ProductAnalyticsController);\n\n  /** @ngInject */\n  function ProductAnalyticsController(DynamicReport, api, $filter, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.filters = [];\n    vm.dimensions = [];\n    vm.columnDimensions = [];\n    vm.metrics = [];\n    vm.metricHeaders = {};\n    vm.dataLoaded = false;\n    vm.endpoint = api.analytics.productsDynamicReport;\n\n    // Initialize presets (each one is a DynamicReport)\n    vm.presets = [];\n    vm.staticPresetFilters = {};\n    addPresets();\n\n    // Methods\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      getMetaData()\n        .then(function() {\n          vm.dataLoaded = true;\n        })\n        .catch(function(error) {\n          console.error(error);\n        });\n    }\n\n    function getMetaData() {\n      return new Promise(function(resolve, reject) {\n        api.analytics.productsDynamicReport.get({ metadata: true }, function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.filters = response.filters;\n            vm.dimensions = response.dimensions;\n            vm.columnDimensions = response.column_dimensions;\n            vm.metrics = response.metrics;\n            vm.metricHeaders = response.metric_headers;\n            resolve();\n          } else {\n            reject('Error fetching metadata');\n          }\n        });\n      });\n    }\n\n    // --- Presets unified definition ---\n    function addPresets() {\n      var PRESET_DEFS = [\n        {\n          code: 'PRESET_PRODUCTS',\n          dimensions: [\n            'product_cover_thumbnail',\n            'product_code',\n            'product_name',\n            'product_brand',\n            'product_category',\n            'product_subcategory',\n            'product_season',\n            'product_provider'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand',\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PRODUCT_VARIANTS',\n          dimensions: [\n            'product_cover_thumbnail',\n            'product_code',\n            'product_name',\n            'product_brand',\n            'product_category',\n            'product_subcategory',\n            'product_season',\n            'product_provider',\n            'product_variant_name',\n            'product_variant_sku',\n            'product_variant_barcode'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand',   // current available stock\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PURCHASE_ORDERS',\n          dimensions: [\n            'purchase_order_code', 'purchase_order_status_name',\n            'purchase_order_provider', 'purchase_order_target_warehouse',\n            'purchase_order_ordered_at', 'purchase_order_received_at'\n          ],\n          metrics: [\n            'purchase_order_ordered_amount',\n            'purchase_order_received_amount',\n            'purchase_order_pending_to_receive_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PURCHASE_ORDERS_BY_PROVIDER',\n          dimensions: [\n            'purchase_order_provider',\n          ],\n          metrics: [\n            'purchase_order_ordered_amount',\n            'purchase_order_received_amount',\n            'purchase_order_pending_to_receive_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PURCHASE_ORDERS_BY_PRODUCT',\n          dimensions: [\n            'product_code', 'product_name'\n          ],\n          metrics: [\n            'purchase_order_ordered_amount',\n            'purchase_order_received_amount',\n            'purchase_order_pending_to_receive_amount'\n          ],\n          filters: [],\n          sorts: [\n            { field: 'product_code', direction: 'asc' }\n          ]\n        },\n        {\n          code: 'PRESET_TRANSFER_ORDERS',\n          dimensions: [\n            'transfer_order_code', 'transfer_order_status_name',\n            'transfer_order_source_warehouse', 'transfer_order_target_warehouse',\n            'transfer_order_created_at', 'transfer_order_ordered_at',\n            'transfer_order_shipped_at', 'transfer_order_received_at'\n          ],\n          metrics: [\n            'transfer_order_draft_amount', 'transfer_order_ordered_amount',\n            'transfer_order_prepared_amount', 'transfer_order_shipped_amount',\n            'transfer_order_received_amount', 'transfer_order_discrepancies_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_SALE_ORDERS',\n          dimensions: [\n            'sale_order_code', 'sale_order_status_name',\n            'sale_order_customer', 'sale_order_sales_agent',\n            'sale_order_source_warehouse', 'sale_order_ordered_at'\n          ],\n          metrics: [\n            'sale_order_draft_amount', 'sale_order_ordered_amount',\n            'sale_order_prepared_amount', 'sale_order_shipped_amount',\n            'sale_order_received_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_SALE_ORDERS_BY_PRODUCT',\n          dimensions: [\n            'product_cover_thumbnail',\n            'product_code',\n            'product_name'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'sale_order_ordered_amount',\n            'sale_order_shipped_amount',\n            'sale_order_received_amount',\n          ],\n          filters: [\n            //{ name: 'sale_order_ordered_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            //{ field: 'sale_order_total', direction: 'desc' }\n          ]\n        },\n        {\n          code: 'PRESET_SALE_ORDERS_BY_CUSTOMER',\n          dimensions: [\n            'sale_order_customer',\n          ],\n          columnDimensions: [],\n          metrics: [\n            'sale_order_ordered_amount',\n            'sale_order_shipped_amount',\n            'sale_order_received_amount',\n          ],\n          filters: [\n            //{ name: 'sale_order_ordered_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            //{ field: 'sale_order_total', direction: 'desc' }\n          ]\n        },\n        {\n          code: 'PRESET_POS_ORDERS',\n          dimensions: [\n            'pos_order_code', 'pos_order_date',\n            'pos_order_register',\n            'pos_order_seller_username'\n          ],\n          metrics: [\n            'pos_order_amount', 'pos_order_subtotal',\n            'pos_order_total', 'pos_order_cost',\n            'pos_order_margin'\n          ],\n          filters: [\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'week').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'pos_order_date',  direction: 'desc' },\n          ]\n        },\n        // Advanced entities\n        {\n          code: 'PRESET_RETAIL_SALES_BY_PRODUCT',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          // NOTE: \"inventory cost value\" does not exist as a metric.\n          // Using product_cost_price as dimension (unit cost).\n          columnDimensions: [],\n          metrics: [\n            'purchase_order_received_amount',    // units received\n            'stock_available_on_hand',           // stock available\n            'pos_order_amount',                  // sold units (retail)\n            'pos_order_total',                   // sold total retail (€ incl. VAT)\n            'pos_order_cost',                    // retail cost (€)\n            'pos_order_margin',                  // retail margin (€)\n            //'sale_order_shipped_amount',         // sold units wholesale [no € metric available]\n            'pos_order_sell_through'             // sell-through % (retail vs received purchase)\n          ],\n          // Filter: sales >= 1 (retail only)\n          filters: [\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'week').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            //{ field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- SALES BY PRODUCT AND STORE ---\n        {\n          code: 'PRESET_RETAIL_SALES_BY_PRODUCT_AND_STORE',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name', 'stock_warehouse'],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand',\n            'pos_order_amount',\n            'pos_order_total',\n            'pos_order_cost',\n            'pos_order_margin'\n          ],\n          filters: [\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'week').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            //{ field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS WITH STOCK AND NO SALES ---\n        {\n          code: 'PRESET_RETAIL_PRODUCTS_WITH_STOCK_NO_SALES',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount'],\n          // Filters: stock >= 1 and sales = 0\n          filters: [\n            { name: 'stock_available_on_hand', type: 'int', operation: 'gt', value: 0 },\n            { name: 'pos_order_amount', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'stock_available_on_hand', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS WITH STOCK AND NO SALES BY STORE ---\n        {\n          code: 'PRESET_RETAIL_PRODUCTS_WITH_STOCK_NO_SALES_BY_STORE',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name', 'product_variant_name','stock_warehouse'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount'],\n          filters: [\n            { name: 'stock_available_on_hand', type: 'int', operation: 'gt', value: 0 },\n            { name: 'pos_order_amount', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'stock_available_on_hand', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS STOCK OUT (STOCKOUTS) ---\n        {\n          code: 'PRESET_RETAIL_PRODUCTS_STOCK_OUT',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount', 'pos_order_total'],\n          // Sales > 0 and stock = 0\n          filters: [\n            { name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 },\n            { name: 'stock_available_on_hand', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- PRODUCTS PRODUCTS STOCK OUT BY STORE ---\n        {\n          code: 'PRESET_PRODUCTS_STOCK_OUT_BY_STORE',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name', 'stock_warehouse'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'pos_order_amount', 'pos_order_total'],\n          filters: [\n            { name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 },\n            { name: 'stock_available_on_hand', type: 'int', operation: 'eq', value: 0 },\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            { field: 'pos_order_amount', direction: 'desc' }\n          ]\n        },\n\n        // --- STOCK REPORT ---\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT',\n          dimensions: ['product_cover_thumbnail', 'product_code', 'product_name'],\n          columnDimensions: [], // unit cost as dimension\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n            // TODO: inventory cost value = stock * cost (not available yet)\n            // TODO: tariffs (retail prices with/without VAT, discounts) also missing\n          ],\n          filters: [\n             //{ name: 'stock_available_on_hand', type: 'int', operation: 'neq', value: 0 }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT_AND_WAREHOUSE',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'stock_warehouse'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n          ],\n          filters: [\n            //{ name: 'stock_available_on_hand', type: 'int', operation: 'neq', value: 0 }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT_VARIANT',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'product_variant_color'\n          ],\n          columnDimensions: [\n            'product_variant_size'\n          ],\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_PRODUCT_VARIANT_AND_WAREHOUSE',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'product_variant_color',\n            'stock_warehouse'\n          ],\n          columnDimensions: [\n            'product_variant_size'\n          ],\n          metrics: [\n            'stock_available_on_hand', 'stock_cost',\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_SEASON',\n          dimensions: ['product_season'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_CATEGORY',\n          dimensions: ['product_category'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_CATEGORY_AND_SUBCATEGORY',\n          dimensions: ['product_category', 'product_subcategory'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_BRAND',\n          dimensions: ['product_brand'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_STOCK_BY_WAREHOUSE',\n          dimensions: ['stock_warehouse'],\n          columnDimensions: [],\n          metrics: ['stock_available_on_hand', 'stock_cost'],\n          filters: [],\n          sorts: []\n        },\n\n        // --- ROI REPORT BY PRODUCT ---\n        {\n          code: 'PRESET_ROI_REPORT_BY_PRODUCT',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'purchase_order_received_amount',\n            'purchase_order_received_cost',\n            'pos_order_amount',\n            'pos_order_subtotal',\n            'pos_order_sell_through',\n            'return_on_investment',\n          ],\n          filters: [\n            //{ name: 'purchase_order_received_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            { field: 'product_code', direction: 'asc' }\n          ]\n        },\n\n        // --- ROI REPORT BY SUPPLIER ---\n        {\n          code: 'PRESET_ROI_REPORT_BY_SUPPLIER',\n          dimensions: ['product_provider'], // group by supplier\n          columnDimensions: [],\n          metrics: [\n            'purchase_order_received_amount',\n            'purchase_order_received_cost',\n            'pos_order_amount',\n            'pos_order_subtotal',\n            'pos_order_sell_through',\n            'return_on_investment',\n          ],\n          filters: [\n            //{ name: 'purchase_order_received_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: []\n        },\n\n        // --- LOCATIONS REPORT BY PRODUCT ---\n        //{\n        //  code: 'PRESET_LOCATIONS_BY_PRODUCT',\n        //  dimensions: ['product_code', 'product_name', 'stock_warehouse'],\n        //  metrics: ['stock_available_on_hand'],\n        //  filters: [],\n        //  sorts: []\n        //},\n\n        // --- PRODUCTION ---\n        {\n          code: 'PRESET_PRODUCTION_ORDERS',\n          dimensions: [\n            'production_order_code',\n            'production_order_status_name',\n            'production_order_season',\n            'production_order_ordered_at',\n            'production_order_produced_at'\n          ],\n          metrics: [\n            'production_order_ordered_amount',\n            'production_order_produced_amount',\n            'production_order_pending_to_produce_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PRODUCTION_PIPELINE',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'production_order_ordered_amount',\n            'production_order_produced_amount',\n            'production_order_pending_to_produce_amount'\n          ],\n          filters: [{ name: 'production_order_pending_to_produce_amount', type: 'int', operation: 'gt', value: 0 }],\n          sorts: []\n        },\n        {\n          code: 'PRESET_PRODUCTION_BY_PRODUCT',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'production_order_ordered_amount',\n            'production_order_produced_amount',\n            'production_order_pending_to_produce_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n\n        // --- ADJUSTMENTS ---\n        {\n          code: 'PRESET_ADJUSTMENT_ORDERS',\n          dimensions: [\n            'adjustment_order_code',\n            'adjustment_order_status_name',\n            'adjustment_order_source_warehouse',\n            'adjustment_order_ordered_at',\n            'adjustment_order_ordered_by'\n          ],\n          metrics: [\n            'adjustment_order_adjusted_in_amount',\n            'adjustment_order_adjusted_out_amount',\n            'adjustment_order_adjusted_net_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_ADJUSTMENTS_BY_PRODUCT',\n          dimensions: ['product_code', 'product_name'],\n          columnDimensions: [],\n          metrics: [\n            'adjustment_order_adjusted_in_amount',\n            'adjustment_order_adjusted_out_amount',\n            'adjustment_order_adjusted_net_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_ADJUSTMENTS_BY_WAREHOUSE',\n          dimensions: ['adjustment_order_source_warehouse'],\n          metrics: [\n            'adjustment_order_adjusted_in_amount',\n            'adjustment_order_adjusted_out_amount',\n            'adjustment_order_adjusted_net_amount'\n          ],\n          filters: [],\n          sorts: []\n        },\n        {\n          code: 'PRESET_LAST_MOVEMENTS',\n          dimensions: [\n            'stock_movement_datetime',\n            'stock_movement_user',\n            'product_code',\n            'product_name',\n            'product_variant_name',\n            'stock_movement_warehouse',\n            'stock_movement_autocode',\n            'stock_movement_type',\n            'stock_movement_reason',\n            'stock_movement_notes'\n          ],\n          metrics: [\n            'stock_movement_net_units' // signed units (+/-)\n          ],\n          filters: [\n            // Tip: you can prefill a time window in the UI (e.g., last 7 days)\n            // { name: 'date_start', type: 'date', operation: 'eq', value: '2025-09-20' }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_MOVEMENTS_BY_PRODUCT',\n          dimensions: [\n            'product_code',\n            'product_name',\n            'product_variant_name',\n            'stock_movement_type',\n          ],\n          metrics: [\n            'stock_movement_net_units'\n          ],\n          filters: [],\n          sorts: []\n        },\n        // --- MOVEMENTS BY USER (who’s moving what)\n        {\n          code: 'PRESET_MOVEMENTS_BY_USER',\n          dimensions: [\n            'stock_movement_user',\n            'stock_movement_type',\n          ],\n          columnDimensions: [\n            // Optional: surface product context if you want to drill down\n            // 'movement_product_code', 'movement_product_name'\n          ],\n          metrics: [\n            'stock_movement_net_units'  // net balance\n          ],\n          filters: [\n            // Example filters (optional):\n            // { name: 'stock_movement_user_ids', type: 'int', operation: 'in', value: [123,456] },\n            // { name: 'warehouse_ids', type: 'int', operation: 'in', value: [1,2,3] }\n          ],\n          sorts: []\n        },\n        {\n          code: 'PRESET_RETAIL_SALES_BY_SELLER',\n          dimensions: [\n            'pos_order_seller_first_name',\n            'pos_order_seller_last_name',\n            'pos_order_register',\n            'pos_order_site'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'pos_order_amount',  // units\n            'pos_order_total',   // € incl. VAT\n          ],\n          filters: [\n            //{ name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 }\n            {\n              name: 'pos_order_date',\n              type: 'date',\n              value: {\n                dateStart: moment().subtract(1, 'month').add(1, 'day').startOf('day').toDate(),\n                dateEnd: moment().endOf('day').toDate()\n              }\n            }\n          ],\n          sorts: [\n            //{ field: 'pos_order_total', direction: 'desc' }\n          ]\n        },\n        {\n          code: 'PRESET_RETAIL_SALES_BY_SELLER_AND_MONTH',\n          dimensions: [\n            'pos_order_year',\n            'pos_order_month',\n            'pos_order_seller_first_name',\n            'pos_order_seller_last_name',\n            'pos_order_register'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'pos_order_amount',  // units\n            'pos_order_total',   // € incl. VAT\n            'pos_order_cost',    // € cost\n            'pos_order_margin'   // € margin\n          ],\n          filters: [\n            //{ name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            { field: 'pos_order_year',  direction: 'desc' },\n            { field: 'pos_order_month', direction: 'desc' },\n          ]\n        },\n        {\n          code: 'PRESET_RETAIL_SALES_BY_SELLER_AND_DAY',\n          dimensions: [\n            'pos_order_date',\n            'pos_order_seller_first_name',\n            'pos_order_seller_last_name',\n            'pos_order_register'\n          ],\n          columnDimensions: [],\n          metrics: [\n            'pos_order_amount',\n            'pos_order_total',\n            'pos_order_cost',\n            'pos_order_margin'\n          ],\n          filters: [\n            //{ name: 'pos_order_amount', type: 'int', operation: 'gt', value: 0 }\n          ],\n          sorts: [\n            { field: 'pos_order_date',  direction: 'desc' },\n            //{ field: 'pos_order_total', direction: 'desc' }\n          ]\n        }\n      ];\n\n      PRESET_DEFS.forEach(function(def) {\n        vm.presets.push(new DynamicReport({\n          name: 'DYNAMIC_REPORTS.' + def.code,\n          trans: $filter('translate')('DYNAMIC_REPORTS.' + def.code),\n          filters: def.filters || [],          // array of plain filter objects\n          dimensions: def.dimensions,\n          columnDimensions: def.columnDimensions || [],\n          metrics: def.metrics,\n          sorts: def.sorts || []\n        }));\n      });\n    }\n  }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsInventoryController', AnalyticsInventoryController);\n\n    /** @ngInject */\n    function AnalyticsInventoryController($scope, Session)\n    {\n\n        // Data\n        var vm = this;\n        vm.date = new Date();\n        $scope.$parent.vm.currentNavItem = \"\";\n\n        // Methods\n\n        vm.isABCAnalysisEnabled = isABCAnalysisEnabled;\n        vm.isReplenishmentsEnabled = isReplenishmentsEnabled;\n\n        // Initialization\n        // initialize();\n\n        // Functions\n        function initialize(){\n\n        }\n\n        function isABCAnalysisEnabled(){\n          return Session.company.has_inventory_analytics;\n        }\n\n        function isReplenishmentsEnabled(){\n          return Session.company.has_inventory_analytics;\n        }\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.analytics')\n        .controller('AnalyticsHealthController', AnalyticsHealthController);\n\n    /** @ngInject */\n    function AnalyticsHealthController($scope)\n    {\n        // Data\n        var vm = this;\n        vm.date = new Date();\n        $scope.$parent.vm.currentNavItem = '';\n    }\n})();\n\n(function ()\n{\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('PaymentsController', PaymentsController);\n\n  /** @ngInject */\n  function PaymentsController($scope, $mdDateRangePicker, $mdMedia, $state, $mdSidenav, $document, $http, $timeout, $filter, $compile, $mdDialog, api,\n                              Session, SEARCH_MAX_LENGTH, DTColumnBuilder, $translate)\n  {\n    var vm = this;\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Dataapi\n    vm.timeout = null;\n    vm.dtInstance = {};\n    vm.selected = [];\n    vm.toggle = toggle;\n    vm.sidenavLockedOpen = true;\n    vm.filter = '';\n    vm.dateRange = {};\n    vm.waiting = false;\n    vm.dtOptions = {\n      ajax        : {\n        dataSrc: \"data\",\n        url: api.urls.accounting.payments.replace('/:id/', ''),\n        type: 'get',\n        headers: {\n          \"Authorization\": \"Token \" + Session.token\n        },\n        data: function(d){\n          d.pagination = 'datatable';\n          d.dateStart = vm.dateRange.dateStart ? vm.dateRange.dateStart.getTime() : '';\n          d.dateEnd = vm.dateRange.dateEnd ? vm.dateRange.dateEnd.getTime() : '';\n        }\n      },\n      order: [[ 1, 'desc' ]],\n      rowId: 'id',\n      dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n      createdRow: createdRow,\n      rowCallback: rowCallback,\n      headerCallback: headerCallback,\n      initComplete: initComplete,\n      pagingType  : 'full_numbers',\n      lengthMenu  : [25, 50, 100],\n      pageLength  : 50,\n      scrollY     : 'auto',\n      responsive  : true,\n      serverSide  : true,\n      processing  : true,\n      searchDelay : 750,\n      language: {\n        url: 'app/main/apps/manufacture/i18n/datatables/' + $translate.use() + '.json'\n      },\n      stateSave: true,\n      stateSaveCallback: function (settings, data) {\n        if(vm.dateRange.dateStart){\n          data.dateStart = vm.dateRange.dateStart.getTime();\n        }\n        if(vm.dateRange.dateEnd){\n          data.dateEnd = vm.dateRange.dateEnd.getTime();\n        }\n        localStorage.setItem(Session.company.id + '::dataTablePaymentsController', JSON.stringify(data));\n      },\n      stateLoadCallback: function (settings, callback) {\n        var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTablePaymentsController'));\n        if (state) {\n          if(state.dateStart){\n            vm.dateRange.dateStart = new Date(state.dateStart);\n          }\n          if(state.dateEnd){\n            vm.dateRange.dateEnd = new Date(state.dateEnd);\n          }\n          if (state.search && state.search.search) {\n            vm.search = state.search.search;\n          }\n          vm.filter = state.columns[0].search.search;\n        }\n        return state;\n      }\n    };\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    vm.dtColumns = [\n      DTColumnBuilder.newColumn('id').notVisible(),\n      DTColumnBuilder.newColumn('date').withTitle($filter('translate')('PAYMENTS.DATE'))\n      .renderWith(function(data, type, full) {\n        return $filter('date')(data, 'dd/MM/yy');\n      }),\n      DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('PAYMENTS.AMOUNT'))\n        .renderWith(function(data, type, full) {\n          if(data < 0){\n            return '<div class=\"text-center red-500-fg\">' + data + vm.currencyCharacter + '</div>';\n          }else{\n            return '<div class=\"text-center green-500-fg\">' + data + vm.currencyCharacter + '</div>';\n          }\n        }),\n      DTColumnBuilder.newColumn('payment_method__name').withTitle($filter('translate')('PAYMENTS.PAYMENT_METHOD'))\n        .renderWith(function(data, type, full) {\n          if (full.payment_method_instance){\n            return full.payment_method_instance.name;\n          }\n          return '';\n        }),\n      DTColumnBuilder.newColumn('invoice__customer').withTitle($filter('translate')('PAYMENTS.CUSTOMER'))\n        .renderWith(function(data, type, full) {\n          return full.customer_name;\n        }),\n      DTColumnBuilder.newColumn('invoice__autocode').withTitle($filter('translate')('INVOICE.INVOICE'))\n        .renderWith(function(data, type, full) {\n          return full.invoice_autocode;\n        })\n\n\n    ];\n\n    // Methods\n    vm.initialize = initialize;\n    vm.filterByColumn = filterByColumn;\n    vm.exists = exists;\n    vm.selectAll = selectAll;\n    vm.toggle = toggle;\n    vm.toggleSidenav = toggleSidenav;\n    vm.isFilterActive = isFilterActive;\n    vm.filterDates = filterDates;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize(){\n\n    }\n\n    function filterDates() {\n\n      $mdDateRangePicker.show({\n        model: vm.dateRange,\n      }).then(function (result) {\n        vm.dateRange = result;\n        vm.dtInstance.DataTable.draw();\n      }).catch(function () {\n\n      });\n\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function headerCallback(header) {\n      if (!$scope.headerCompiled) {\n          // Use this headerCompiled field to only compile header once\n          $scope.headerCompiled = true;\n          $compile(angular.element(header).contents())($scope);\n      }\n    }\n\n    function initComplete(){\n\n      var api = this.api(),\n        searchBox = angular.element('body').find('#payments-search');\n      // Bind an external input as a table wide search box\n      if (searchBox.length > 0) {\n        searchBox.on('keyup', function(event) {\n          var vm = $scope.vm;\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n          }\n          vm.timeout = $timeout(function() {\n            var input = event.target.value;\n            var regex = false;\n            var smart = false;\n            var caseInsen = true;\n            api.search(input, regex, smart, caseInsen).draw();\n          }, 500);\n        });\n      }\n\n    }\n\n    function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n      return nRow;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function filterByColumn(filter, column){\n      vm.dtInstance.DataTable.column(column).search(filter).draw();\n    }\n\n    function exists(item) {\n      return vm.selected.indexOf(item) > -1;\n    }\n\n    function toggle(item, list) {\n      var idx = vm.selected.indexOf(item);\n      if (idx > -1) {\n        vm.selected.splice(idx, 1);\n      }\n      else {\n        vm.selected.push(item);\n      }\n    }\n\n    function selectAll(){\n      if(vm.selected.length){\n        while (vm.selected.length) {\n          vm.selected.pop();\n        }\n      }else{\n        vm.dtInstance.DataTable.rows().data().map(function(product){\n          vm.selected.push(product.id);\n        });\n      }\n    }\n\n    function isFilterActive(status){\n      return vm.filter == status;\n    }\n\n  }\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.accounting')\n      .controller('InvoiceController', InvoiceController);\n\n    /** @ngInject */\n    function InvoiceController(api, $mdToast, $mdDialog, $filter, $scope, $sce, $state, $stateParams, $document, $q, InvoiceData, SerialNumberType, $http, FeatureFlagService, SerialNumberTypesData, ConfigurationData, TaxesData, PaymentMethodsData, FiscalAddressesData, PAYMENT_TERM_TYPES, CONTACT_TYPES, CONTACT_INVOICING_TYPES, PAYMENT_STATUS_TYPES, Invoice, OrderDelivery, LANGUAGES, Session, InvoiceType, PricingTiers, Utils, CURRENCIES, INVOICE_TYPES, HTTP_STATUS, INSTALLED_INTEGRATION_APP_STATUS, ERROR_CODES, SEARCH_MAX_LENGTH, SERIAL_NUMBER_TYPES, CORRECTIVE_INVOICE_TYPES, INVOICE_PAYMENT_STATUSES) {\n\n      // Data\n      var vm = this;\n      vm.CORRECTIVE_INVOICE_TYPES = CORRECTIVE_INVOICE_TYPES;\n      vm.SERIAL_NUMBER_TYPES = SERIAL_NUMBER_TYPES;\n      vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n      vm.INVOICE_TYPES = INVOICE_TYPES;\n      vm.INVOICE_PAYMENT_STATUSES = INVOICE_PAYMENT_STATUSES;\n      vm.type = InvoiceType;\n      vm.isNewInvoice = $stateParams.id === 'new';\n      vm.invoice = new Invoice(InvoiceData);\n      vm.taxes = TaxesData.results;\n      vm.defaultTaxId = null;\n      vm.searchSelectHeader = new Array(3);\n      vm.contactTypes = CONTACT_TYPES;\n      vm.contactInvoicingTypes = CONTACT_INVOICING_TYPES;\n      vm.paymentStatusTypes = PAYMENT_STATUS_TYPES;\n      vm.serialNumberTypes = SerialNumberTypesData.results;\n      vm.serialNumberTypeType = vm.invoice.getSerialNumberTypeType();\n      vm.currencies = CURRENCIES;\n      vm.languages = LANGUAGES;\n      vm.paymentMethodsData = PaymentMethodsData.results;\n      vm.previousPricingTier = null;\n      vm.pricingTiersById = {};\n      vm.waiting = false;\n      vm.discount_as_percentage = vm.invoice.discount;\n      vm.early_payment_discount_as_percentage = vm.invoice.early_payment_discount;\n      vm.fiscalAddresses = FiscalAddressesData.results;\n      vm.orderedIcon = {\n        label: 'icon-unfold-more',\n        description: 'icon-unfold-more',\n        quantity: 'icon-unfold-more',\n        price_excl_tax: 'icon-unfold-more',\n        discount: 'icon-unfold-more',\n        total_price_excl_tax: 'icon-unfold-more',\n        total_price_incl_tax: 'icon-unfold-more',\n        object_delivery_autocode: 'object_delivery_autocode'\n      };\n\n      // Methods\n      vm.addLine = addLine;\n      vm.removeLine = removeLine;\n      vm.refreshTotalPrice = refreshTotalPrice;\n      vm.refreshAllTotalPrices = refreshAllTotalPrices;\n      vm.addExpirationDays = addExpirationDays;\n      vm.saveInvoice = saveInvoice;\n      vm.addDeliveryNote = addDeliveryNote;\n      vm.removeDeliveryNote = removeDeliveryNote;\n      vm.delete = deleteInvoice;\n      vm.cancelInvoice = cancelInvoice;\n      vm.contactChanged = contactChanged;\n      vm.savePayment = savePayment;\n      vm.removePayment = removePayment;\n      vm.addProductLine = addProductLine;\n      vm.openProductSearchDialog = openProductSearchDialog;\n      vm.openMenu = openMenu;\n      vm.createInvoiceFromProforma = createInvoiceFromProforma;\n      vm.createSaleOrder = createSaleOrder;\n      vm.saveInvoiceLine = saveInvoiceLine;\n      vm.newDocument = newDocument;\n      vm.getPdfName = getPdfName;\n      vm.orderBy = orderBy;\n      vm.duplicate = duplicate;\n      vm.excludeTaxesHasChanged = excludeTaxesHasChanged;\n      vm.confirmInvoicePricingTierUpdate = confirmInvoicePricingTierUpdate;\n      vm.isDisabledInvoice = isDisabledInvoice;\n      vm.canAddPayments = canAddPayments;\n      vm.canDuplicateInvoice = canDuplicateInvoice;\n      vm.isInvoiceLineDisabled = isInvoiceLineDisabled;\n      vm.kubibaiInstalledAndActive = kubibaiInstalledAndActive;\n      vm.isMissingRequiredHoldedData = isMissingRequiredHoldedData;\n      vm.isValidKubiBaiInvoice = isValidKubiBaiInvoice;\n      vm.isNotPrintablePurchaseOrderInvoice = isNotPrintablePurchaseOrderInvoice;\n      vm.getOrderDeliveryProductAmount = getOrderDeliveryProductAmount;\n      vm.getOrderDeliveryProductPriceExclTax = getOrderDeliveryProductPriceExclTax;\n      vm.openConflictDeletedProductsDialog = openConflictDeletedProductsDialog;\n      vm.openSendEmailDialog = openSendEmailDialog;\n      vm.closeInvoice = closeInvoice;\n      vm.createReplacementInvoice = createReplacementInvoice;\n      vm.createCorrectiveInvoice = createCorrectiveInvoice;\n      vm.showEmitButton = showEmitButton;\n      vm.downloadInvoice = downloadInvoice;\n      vm.isSendButtonDisabled = isSendButtonDisabled;\n      vm.isSaveButtonDisabled = isSaveButtonDisabled;\n      vm.isDownloadButtonDisabled = isDownloadButtonDisabled;\n      vm.isCloseButtonDisabled = isCloseButtonDisabled;\n      vm.showSaveButton = showSaveButton;\n      vm.isInvoiceType = isInvoiceType;\n      vm.fiscalAddressChanged = fiscalAddressChanged;\n\n\n      // Initialization\n      initialize();\n\n      $scope.$watch('vm.invoice.billing_date', function(newVal, oldVal) {\n        if (newVal && newVal !== oldVal) {\n          calculateExpirationDateFromCustomerPaymentMethod();\n        }\n      });\n\n      function initApiVersion() {\n        vm.invoiceAPI = FeatureFlagService.selectEndpoint(FeatureFlagService.FEATURE_FLAG_ACCOUNTING_INVOICE_V2, api.accounting.invoices, api.private.v2.accounting.invoices);\n      }\n\n      // Functions\n      function openMenu($mdMenu, ev) {\n        $mdMenu.open(ev);\n      }\n\n      function initialize() {\n        initApiVersion();\n        $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n        $document.find('md-select-header input[type=\"search\"]').on('keydown', function(e) {\n          e.stopPropagation();\n        });\n\n        if (vm.isNewInvoice) {\n          this.addLine();\n        } else {\n          refreshAllTotalPrices();\n        }\n\n        // Initializing a dictionary to access to the delivery from the color and size\n        if (vm.invoice.sale_order_deliveries) {\n          vm.invoice.sale_order_deliveries.forEach(function(saleOrderDelivery) {\n            initializeSaleOrderDelivery(saleOrderDelivery);\n          });\n        }\n\n        if (vm.invoice.purchase_order_deliveries) {\n          vm.invoice.purchase_order_deliveries.forEach(function(purchaseOrderDelivery) {\n            initializePurchaseOrderDelivery(purchaseOrderDelivery);\n          });\n        }\n\n        PricingTiers.results.forEach(function(pricingTier) {\n          vm.pricingTiersById[pricingTier.id] = pricingTier;\n          if (!vm.invoice.pricing_tier) {\n            vm.invoice.pricing_tier = pricingTier.id;\n          }\n        });\n\n        vm.previousPricingTier = vm.invoice.pricing_tier;\n\n        vm.temporalPayment = {\n          id: null,\n          payment_method: vm.invoice.customer_instance && vm.invoice.customer_instance.payment_method ? vm.invoice.customer_instance.payment_method : null,\n          amount: null,\n          date: new Date(),\n          invoice: vm.isNewInvoice ? null : vm.invoice.id,\n          purchase_order: vm.isNewInvoice ? null : vm.invoice.purchase_order\n        };\n\n        var defaultTaxIndex = vm.taxes.findIndex(function(tax) {\n          return tax.default;\n        });\n        vm.defaultTaxId = defaultTaxIndex !== -1 ? vm.taxes[defaultTaxIndex].id : null;\n\n        $scope.$on('$destroy', function() {\n        });\n\n        filterSerialNumberTypesByIntegrationInstalledApp();\n        initializeInvoiceSerialNumberType();\n      }\n\n      function initializePurchaseOrderDelivery(purchase_order_delivery) {\n        if (!purchase_order_delivery.loaded) {\n          purchase_order_delivery.loaded = true;\n\n          var odpvByOpvIds = {};\n          purchase_order_delivery.odpvByColorAndSize = {};\n          purchase_order_delivery.order_delivery_product_variants.forEach(function(odpv) {\n            odpvByOpvIds[odpv.order_product_variant] = odpv;\n          });\n\n          purchase_order_delivery.loading = true;\n          api.inventories.purchaseOrderProducts.list({\n            purchase_order: purchase_order_delivery.purchase_order, purchase_order_delivery: purchase_order_delivery.id\n          }, function(response, callback, status) {\n            purchase_order_delivery.order_products = response.results;\n            purchase_order_delivery.order_products.forEach(function(orderProduct) {\n              purchase_order_delivery.odpvByColorAndSize[orderProduct.id] = {};\n              var product_ddp_price = 0;\n              var product_provider_price = null;\n\n              orderProduct.order_product_variants.forEach(function(orderProductVariant) {\n                if (angular.isUndefined(odpvByOpvIds[orderProductVariant.id])) {\n                  return;\n                }\n                orderProductVariant.odpv = odpvByOpvIds[orderProductVariant.id];\n\n                var amount = odpvByOpvIds[orderProductVariant.id].prepared_amount || odpvByOpvIds[orderProductVariant.id].received_amount;\n                if (orderProductVariant.provider_price) {\n                  product_provider_price += amount * orderProductVariant.provider_price;\n                }\n                if (orderProductVariant.ddp_price) {\n                  product_ddp_price += amount * orderProductVariant.ddp_price;\n                } else {\n                  product_ddp_price += amount * orderProduct.ddp_price;\n                }\n\n                if (angular.isUndefined(purchase_order_delivery.odpvByColorAndSize[orderProduct.id][orderProductVariant.color])) {\n                  purchase_order_delivery.odpvByColorAndSize[orderProduct.id][orderProductVariant.color] = {};\n                }\n                purchase_order_delivery.odpvByColorAndSize[orderProduct.id][orderProductVariant.color][orderProductVariant.size] = odpvByOpvIds[orderProductVariant.id];\n              });\n              orderProduct.ddp_price = product_ddp_price;\n              orderProduct.product_provider_price = product_provider_price;\n            });\n            purchase_order_delivery.loading = false;\n          });\n        }\n      }\n\n      function initializeSaleOrderDelivery(sale_order_delivery) {\n        if (!sale_order_delivery.loaded) {\n          sale_order_delivery.loaded = true;\n\n          var odpvByOpvIds = {};\n          sale_order_delivery.odpvByColorAndSize = {};\n          sale_order_delivery.order_delivery_product_variants.forEach(function(odpv) {\n            odpvByOpvIds[odpv.order_product_variant] = odpv;\n          });\n\n          sale_order_delivery.loading = true;\n          sale_order_delivery.order_products.forEach(function(op) {\n            sale_order_delivery.odpvByColorAndSize[op.id] = {};\n\n            op.total_price_excl_tax = 0;\n            op.total_price_incl_tax = 0;\n            op.order_product_variants.forEach(function(opv) {\n              if (angular.isUndefined(odpvByOpvIds[opv.id])) return;\n              var amount = odpvByOpvIds[opv.id].prepared_amount || odpvByOpvIds[opv.id].received_amount;\n\n              op.total_price_excl_tax += amount * (opv.price_excl_tax || op.price_excl_tax);\n              op.total_price_incl_tax += amount * (opv.price_incl_tax || op.price_incl_tax);\n              if (angular.isUndefined(sale_order_delivery.odpvByColorAndSize[op.id][opv.color])) {\n                sale_order_delivery.odpvByColorAndSize[op.id][opv.color] = {};\n              }\n\n              sale_order_delivery.odpvByColorAndSize[op.id][opv.color][opv.size] = odpvByOpvIds[opv.id];\n            });\n          });\n\n          sale_order_delivery.loading = false;\n\n          refreshAllTotalPrices();\n        }\n      }\n\n      function initializeInvoiceSerialNumberType() {\n        if (vm.invoice.is_closed || vm.invoice.serial_number_type) {\n          return;\n        }\n        if (vm.serialNumberTypes.length === 1) {\n          vm.invoice.serial_number_type = vm.serialNumberTypes[0].id;\n        }\n        var defaultSerialNumberType = vm.serialNumberTypes.find(function(snt) {\n          return snt.id === ConfigurationData.results[0].wholesale_invoice_default_serial_number_type;\n        });\n        if (defaultSerialNumberType) {\n          vm.invoice.serial_number_type = defaultSerialNumberType.id;\n        }\n      }\n\n      function getOrderDeliveryProductPriceExclTax(saleOrderDelivery, order_product_price_excl_tax) {\n        if (order_product_price_excl_tax === null || angular.isUndefined(order_product_price_excl_tax)) {\n          return '-';\n        }\n        if (saleOrderDelivery.sale_order_is_devolution && order_product_price_excl_tax != 0) {\n          return $filter('price')(-order_product_price_excl_tax) + $filter('currencyCharacter')(vm.invoice.currency);\n        }\n        return $filter('price')(order_product_price_excl_tax) + $filter('currencyCharacter')(vm.invoice.currency);\n      }\n\n      function getOrderDeliveryProductAmount(saleOrderDelivery, product_id, color_id, size_id) {\n        if (saleOrderDelivery.odpvByColorAndSize && saleOrderDelivery.odpvByColorAndSize[product_id] && saleOrderDelivery.odpvByColorAndSize[product_id][color_id] && saleOrderDelivery.odpvByColorAndSize[product_id][color_id][size_id]) {\n          var odpvByColorAndSize = saleOrderDelivery.odpvByColorAndSize[product_id][color_id][size_id];\n          if (saleOrderDelivery.sale_order_is_devolution && odpvByColorAndSize.received_amount != 0) {\n            return -odpvByColorAndSize.received_amount;\n          }\n          return odpvByColorAndSize.prepared_amount || 0;\n        }\n        return 0;\n      }\n\n      function addLine() {\n        if (Session.hasPermission('accounting.invoices.invoice.add_line')) {\n          vm.invoice.addLine(vm.defaultTaxId);\n          refreshTotalPrice(vm.invoice.invoice_lines[vm.invoice.invoice_lines.length - 1]);\n        }\n      }\n\n      function removeLine(line) {\n        if (Session.hasPermission('accounting.invoices.invoice.remove_line')) {\n          vm.invoice.removeLine(line);\n          refreshAllTotalPrices();\n        }\n      }\n\n      function addExpirationDays(days) {\n        vm.invoice.expiration_date = new Date();\n        var result = new Date(vm.invoice.billing_date);\n        vm.invoice.expiration_date.setDate(result.getDate() + days);\n      }\n\n      function refreshTotalPrice(invoiceLine, avoidRefreshTotals) {\n        invoiceLine.tax_instance = getTaxById(invoiceLine.tax);\n        invoiceLine.updatePrices(vm.invoice.exclude_taxes, vm.invoice.surcharge);\n\n        var discountedSubtotal = 0;\n        var total = 0;\n        var price_excl_tax = invoiceLine.price_excl_tax;\n        var has_custom_price_excl_tax = invoiceLine.custom_price_excl_tax && invoiceLine.custom_price_excl_tax !== null || invoiceLine.custom_price_excl_tax === 0;\n        if (has_custom_price_excl_tax) {\n          price_excl_tax = invoiceLine.custom_price_excl_tax;\n        }\n\n        /*if(!invoiceLine.price_excl_tax || invoiceLine.price_excl_tax < 0){\n          price_excl_tax = 0;\n        }*/\n\n        if (!invoiceLine.quantity) {\n          invoiceLine.quantity = 0;\n        }\n\n        if (!invoiceLine.discount) {\n          invoiceLine.discount = 0;\n        }\n\n        if (invoiceLine.discount && invoiceLine.discount > 0 && invoiceLine.discount <= 100) {\n          invoiceLine.total_price_excl_tax = Math.round((price_excl_tax * invoiceLine.quantity * (100 - invoiceLine.discount) / 100) * 100) / 100;\n        } else {\n          invoiceLine.total_price_excl_tax = Math.round(price_excl_tax * invoiceLine.quantity * 100) / 100;\n        }\n\n        if (!vm.invoice.exclude_taxes && invoiceLine.tax) {\n          var tax = getTaxById(invoiceLine.tax);\n          if (tax) {\n            invoiceLine.taxName = tax.name;\n            invoiceLine.taxPercentage = tax.percent_value;\n            invoiceLine.taxSurcharge = tax.surcharge;\n          }\n          invoiceLine.price_incl_tax = price_excl_tax * (1 + (invoiceLine.taxPercentage / 100));\n          invoiceLine.total_price_incl_tax = Math.round(invoiceLine.total_price_excl_tax * (1 + (invoiceLine.taxPercentage / 100)) * 100) / 100;\n\n          if (has_custom_price_excl_tax) {\n            invoiceLine.custom_price_incl_tax = invoiceLine.custom_price_excl_tax * (1 + (invoiceLine.taxPercentage / 100));\n          }\n\n          if (vm.invoice.surcharge) {\n            invoiceLine.price_incl_tax += price_excl_tax * ((invoiceLine.taxSurcharge / 100));\n            invoiceLine.total_price_incl_tax += Math.round(invoiceLine.total_price_excl_tax * ((invoiceLine.taxSurcharge / 100)) * 100) / 100;\n          }\n          invoiceLine.total_price_incl_tax = Math.round(invoiceLine.total_price_incl_tax * 100) / 100;\n\n        } else {\n          invoiceLine.price_incl_tax = price_excl_tax;\n          invoiceLine.total_price_incl_tax = Math.round(invoiceLine.total_price_incl_tax * 100) / 100;\n        }\n\n        if (!avoidRefreshTotals) {\n          refreshAllTotalPrices();\n        }\n      }\n\n      function refreshAllTotalPrices() {\n        vm.invoice.updatePrices(vm.taxes);\n      }\n\n      function getTaxById(taxId) {\n        for (var i = 0; i < vm.taxes.length; i++) {\n          if (vm.taxes[i].id === taxId) {\n            return vm.taxes[i];\n          }\n        }\n        return null;\n      }\n\n      function isValid() {\n        if (!$scope.invoiceForm.$valid) {\n          return false;\n        }\n\n        for (var i = 0; i < vm.invoice.invoice_lines.length; i++) {\n          var line = vm.invoice.invoice_lines[i];\n          if (!line.product_variant && (line.price_excl_tax === null || line.price_excl_tax === undefined || line.price_excl_tax === '')) {\n            return false;\n          }\n        }\n\n        if (vm.invoice.holded_invoice_data && !vm.invoice.is_received) {\n          return vm.invoice.isValidForHolded();\n        }\n        return true;\n      }\n\n      function saveInvoice(close) {\n        if (Session.hasPermission('accounting.invoices.invoice.update')) {\n          if (!isValid()) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('INVOICES.MISSING_REQUIRED_FIELDS')).position('top right'));\n          } else {\n            save(close);\n          }\n        }\n      }\n\n      function addDeliveryNote(ev) {\n        $mdDialog.show({\n          controller: 'AddDeliveryNoteDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/accounting/views/invoice/dialogs/add-delivery-note/add-delivery-note.html',\n          parent: angular.element($document.find('body')),\n          //targetEvent: ev,\n          clickOutsideToClose: true,\n          locals: {\n            receivedInvoice: vm.invoice.is_received,\n            customerId: vm.invoice.customer,\n            purchaseOrder: vm.invoice.purchase_order,\n            selectedDeliveries: vm.invoice.sale_order_deliveries ? vm.invoice.sale_order_deliveries : vm.invoice.purchase_order_deliveries\n          }\n        }).then(function(response) {\n\n          var filteredSaleOrderDeliveryNotes = response.sales;\n          filteredSaleOrderDeliveryNotes.forEach(function(filteredDeliveryNoteId) {\n            api.inventories.saleOrderDeliveries.get({\n              id: filteredDeliveryNoteId\n            }, function(response) {\n              var order_delivery = new OrderDelivery(response);\n              vm.invoice.sale_order_deliveries.push(order_delivery);\n              initializeSaleOrderDelivery(order_delivery);\n            });\n          });\n\n          if (response.transfers.length > 0) {\n            api.accounting.invoices.save({\n              id: vm.invoice.id,\n              option: 'add-fiscal-address-transfer-order-deliveries',\n              transfer_order_deliveries: response.transfers\n            }, function(response) {\n              vm.invoice.updateLines(response.invoice_lines);\n              refreshAllTotalPrices();\n            });\n          }\n\n          var filteredPurchaseOrderDeliveryNotes = response.purchases;\n          filteredPurchaseOrderDeliveryNotes.forEach(function(filteredDeliveryNoteId) {\n            api.inventories.purchaseOrderDeliveries.get({\n              id: filteredDeliveryNoteId,\n              serializer: 'PurchaseOrderDeliveryWithProductsSerializer'\n            }, function(response) {\n              initializePurchaseOrderDelivery(response);\n              if (vm.invoice.purchase_order_deliveries == null) {\n                vm.invoice.purchase_order_deliveries = [];\n              }\n              vm.invoice.purchase_order_deliveries.push(response);\n            });\n          });\n\n          if (response.fiscalAddressPosOrders.length > 0) {\n            api.accounting.invoices.save({\n              id: vm.invoice.id,\n              option: 'add-fiscal-address-pos-orders',\n              pos_orders: response.fiscalAddressPosOrders\n            }, function(response) {\n              vm.invoice.updateLines(response.invoice_lines);\n              refreshAllTotalPrices();\n            });\n          }\n        });\n      }\n\n      function removeDeliveryNote(deliveryNote) {\n        for (var i = 0; i < vm.invoice.sale_order_deliveries.length; i++) {\n          if (deliveryNote.id === vm.invoice.sale_order_deliveries[i].id) {\n            vm.invoice.sale_order_deliveries.splice(i, 1);\n            refreshAllTotalPrices();\n          }\n        }\n\n        for (var i = 0; i < vm.invoice.purchase_order_deliveries.length; i++) {\n          if (deliveryNote.id === vm.invoice.purchase_order_deliveries[i].id) {\n            vm.invoice.purchase_order_deliveries.splice(i, 1);\n            refreshAllTotalPrices();\n          }\n        }\n      }\n\n      function saveInvoiceLine(invoice_line) {\n        if (invoice_line.label && invoice_line.quantity && invoice_line.price_excl_tax) {\n          save();\n        }\n      }\n\n      function closeInvoice() {\n        if (!Session.hasPermission('accounting.invoices.invoice.update')) {\n          return;\n        }\n        if (!isValid()) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('INVOICES.MISSING_REQUIRED_FIELDS')).position('top right'));\n          return;\n        }\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('INVOICE.EMIT_INVOICE'))\n          .htmlContent($filter('translate')('INVOICE.EMIT_INVOICE_MSG'))\n          .ok($filter('translate')('INVOICE.YES_EMIT'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          save(true);\n        }, function() {\n        });\n      }\n\n      function save(close) {\n        var deferred = $q.defer();\n\n        if (!$scope.invoiceForm.$valid) {\n          return;\n        }\n\n        if (vm.saving) {\n          return;\n        }\n\n        vm.saving = true;\n\n        var invoiceCopy = {};\n        angular.copy(vm.invoice, invoiceCopy);\n\n        var sale_order_deliveries = [];\n        if (vm.invoice.sale_order_deliveries) {\n          vm.invoice.sale_order_deliveries.map(function(sale_order_delivery) {\n            sale_order_deliveries.push(sale_order_delivery.id);\n          });\n        }\n        invoiceCopy.sale_order_deliveries = sale_order_deliveries;\n\n        var purchase_order_deliveries = [];\n        if (vm.invoice.purchase_order_deliveries) {\n          vm.invoice.purchase_order_deliveries.map(function(purchase_order_delivery) {\n            purchase_order_deliveries.push(purchase_order_delivery.id);\n          });\n        }\n        invoiceCopy.purchase_order_deliveries = purchase_order_deliveries;\n\n        // Parse DateTimes into Date\n        if (invoiceCopy.expiration_date) {\n          invoiceCopy.expiration_date = moment(invoiceCopy.expiration_date).format('YYYY-MM-DD');\n        }\n\n        invoiceCopy.billing_date = moment(invoiceCopy.billing_date).format('YYYY-MM-DD');\n        if (close) {\n          invoiceCopy.close = true;\n        }\n\n        if (vm.isNewInvoice) {\n          invoiceCopy.type = vm.type;\n          vm.invoiceAPI.save(invoiceCopy, function(response, callback, status) {\n            if (status === 201) {\n\n              if (vm.type === INVOICE_TYPES.INVOICE) {\n                $state.go('app.accounting.invoices.invoice', { id: response.id });\n              } else if (vm.type === INVOICE_TYPES.PROFORMA) {\n                $state.go('app.accounting.proformas.proforma', { id: response.id });\n              } else if (vm.type === INVOICE_TYPES.QUOTE) {\n                $state.go('app.accounting.quotes.quote', { id: response.id });\n              }\n\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.saving = false;\n            deferred.resolve();\n          });\n\n        } else {\n          vm.invoiceAPI.update(invoiceCopy, function(response, callback, status) {\n            if (status === 200) {\n              vm.invoice = new Invoice(response);\n              initialize();\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n            vm.saving = false;\n            $scope.invoiceForm.$setPristine();\n            deferred.resolve();\n          });\n        }\n        return deferred.promise;\n      }\n\n      function confirmInvoicePricingTierUpdate(ev) {\n        if (!vm.invoice.invoice_lines.length && !vm.invoice.sale_order_deliveries.length && !vm.invoice.is_received) {\n          save();\n          return;\n        }\n\n        if (!vm.invoice.invoice_lines.length && !vm.invoice.purchase_order_deliveries.length && vm.invoice.is_received) {\n          save();\n          return;\n        }\n\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('INVOICE.CONFIRM_PRICING_TIER_TITLE'))\n          .htmlContent($filter('translate')('INVOICE.CONFIRM_PRICING_TIER_BODY'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .targetEvent(ev)\n          .ok($filter('translate')('GENERAL.OK'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          save().then(function() {\n            updateInvoicePricingTier();\n          });\n        }, function() {\n          vm.invoice.pricing_tier = vm.previousPricingTier;\n        });\n      }\n\n      function updateInvoicePricingTier() {\n        var payload = angular.copy(vm.invoice);\n        vm.saving = true;\n        angular.extend(payload, {\n          option: 'recompute'\n        });\n\n        api.accounting.invoices.update(payload, function(response, callback, status) {\n          if (status === 200) {\n            vm.invoice = new Invoice(response);\n            initialize(false);\n          } else {\n            vm.invoice.pricing_tier = vm.previousPricingTier;\n\n            var confirm = $mdDialog.confirm()\n              .title($filter('translate')('INVOICE.COULD_NOT_APPLY_PRICING_TIER_TITLE'))\n              .htmlContent($filter('translate')('INVOICE.COULD_NOT_APPLY_PRICING_TIER_BODY'))\n              .clickOutsideToClose(true)\n              .parent(angular.element(document.body))\n              .ok($filter('translate')('GENERAL.OK'));\n\n            $mdDialog.show(confirm);\n          }\n\n          vm.saving = false;\n        });\n      }\n\n      function createSaleOrder(force) {\n        if (vm.saving) {\n          return;\n        }\n\n        vm.saving = true;\n\n        api.accounting.invoices.save({\n          id: vm.invoice.id, pricing_tier_id: vm.invoice.pricing_tier, option: 'create-sale-order', force: force\n        }, function(response, callback, status) {\n          if (status === 201) {\n            $state.go('app.wholesale.sales.sale.details', { id: response.id });\n          } else if (status === 409 && response.Error == ERROR_CODES.ERROR_01017_CANT_CREATE_SALE_ORDER_FROM_PROFORMA_WITH_DELETED_PRODUCT_EXCEPTION) {\n            vm.openConflictDeletedProductsDialog(response.deleted_products);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        });\n\n      }\n\n      function openConflictDeletedProductsDialog(deletedProducts) {\n        $mdDialog.show({\n          controller: 'ConflictDeletedProductsDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/accounting/views/invoice/dialogs/conflict-deleted-products/conflict-deleted-products-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          locals: {\n            deletedProducts: deletedProducts\n          }\n        }).then(function() {\n          vm.createSaleOrder(true);\n        });\n\n      }\n\n      function createInvoiceFromProforma() {\n\n        if (vm.saving) {\n          return;\n        }\n\n        vm.saving = true;\n\n        api.accounting.invoices.save({\n          id: vm.invoice.id, option: 'create-invoice'\n        }, function(response, callback, status) {\n          if (status === 201) {\n            $state.go('app.accounting.invoices.invoice', { id: response.id });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        });\n\n      }\n\n      function calculateExpirationDateFromCustomerPaymentMethod() {\n        if (vm.invoice.customer_instance && vm.invoice.customer_instance.payment_method_days && vm.invoice.billing_date && !vm.invoice.expiration_date) {\n          var paymentMethodDays = vm.invoice.customer_instance.payment_method_days;\n          if (paymentMethodDays > 0) {\n            var billingDate = new Date(vm.invoice.billing_date);\n            var expirationDate = new Date(billingDate);\n            expirationDate.setDate(billingDate.getDate() + paymentMethodDays);\n            vm.invoice.expiration_date = expirationDate;\n          }\n        }\n      }\n\n      function contactChanged() {\n        if (vm.invoice.customer_instance == null) {\n          vm.invoice.billing_address = null;\n          vm.invoice.discount = null;\n          vm.invoice.surcharge = false;\n          vm.refreshAllTotalPrices();\n          return;\n        }\n\n        var toastMessages = [];\n        if (!vm.invoice.invoice_lines.length && vm.invoice.customer_instance.pricing_tier && vm.invoice.customer_instance.pricing_tier !== vm.invoice.pricing_tier) {\n          vm.invoice.pricing_tier = vm.invoice.customer_instance.pricing_tier;\n          toastMessages.push('INVOICES.CUSTOMER_DEFAULT_PRICING_TIER_SET');\n        }\n\n        if (vm.invoice.customer_instance.discount) {\n          vm.invoice.discount = vm.invoice.customer_instance.discount;\n          toastMessages.push('INVOICES.CUSTOMER_DEFAULT_DISCOUNT_APPLIED');\n        }\n\n        if (vm.invoice.customer_instance.early_payment_discount) {\n          vm.invoice.early_payment_discount = vm.invoice.customer_instance.early_payment_discount;\n          toastMessages.push('INVOICES.CUSTOMER_DEFAULT_EARLY_PAYMENT_DISCOUNT_APPLIED');\n        }\n\n        if (vm.invoice.customer_instance.surcharge) {\n          vm.invoice.surcharge = vm.invoice.customer_instance.surcharge;\n          vm.refreshAllTotalPrices();\n        }\n\n        if (vm.invoice.customer_instance.postal_addresses.length > 0) {\n          var found = false;\n          vm.invoice.customer_instance.postal_addresses.forEach(function(address) {\n            if (address.id === vm.invoice.billing_address) {\n              found = true;\n            }\n          });\n          if (!found) {\n            vm.invoice.billing_address = vm.invoice.customer_instance.postal_addresses[0].id;\n            toastMessages.push('INVOICES.CUSTOMER_DEFAULT_BILLING_ADDRESS_SET');\n          }\n        } else {\n          vm.invoice.billing_address = null;\n        }\n\n        if (vm.invoice.customer_instance.lang !== vm.invoice.mutable_fields.language && vm.languages.hasOwnProperty(vm.invoice.customer_instance.lang)) {\n          vm.invoice.mutable_fields.language = vm.invoice.customer_instance.lang;\n          toastMessages.push('INVOICES.CUSTOMER_DEFAULT_LANGUAGE_SET');\n        }\n\n        calculateExpirationDateFromCustomerPaymentMethod();\n\n        if (toastMessages.length) {\n          var simple = $mdToast.simple().position('bottom right').hideDelay(5000);\n          var message = '';\n          toastMessages.forEach(function(msg) {\n            message += $filter('translate')(msg) + '<br>';\n          });\n          simple._options.template = simple._options.template.replace('{{ toast.content }}', '<span ng-bind-html=\"toast.content\" style=\"padding: 8px 0; display: inline-block\"></span>');\n          simple = simple.textContent(message);\n\n          $mdToast.show(simple);\n        }\n      }\n\n      function orderBy(column) {\n        var newIcon;\n        if (vm.orderedIcon[column] == 'icon-chevron-up') {\n          newIcon = 'icon-chevron-down';\n          vm.invoice.invoice_lines = vm.invoice.invoice_lines.sort(function(a, b) {\n            if (a[column] < b[column]) {\n              return -1;\n            }\n            if (a[column] > b[column]) {\n              return 1;\n            }\n            return 0;\n          });\n        } else {\n          newIcon = 'icon-chevron-up';\n          vm.invoice.invoice_lines = vm.invoice.invoice_lines.sort(function(a, b) {\n            if (a[column] < b[column]) {\n              return 1;\n            }\n            if (a[column] > b[column]) {\n              return -1;\n            }\n            return 0;\n          });\n        }\n        vm.orderedIcon = {\n          label: 'icon-unfold-more',\n          description: 'icon-unfold-more',\n          quantity: 'icon-unfold-more',\n          price_excl_tax: 'icon-unfold-more',\n          discount: 'icon-unfold-more',\n          total_price_excl_tax: 'icon-unfold-more',\n          total_price_incl_tax: 'icon-unfold-more',\n          object_delivery_autocode: 'object_delivery_autocode'\n        };\n        vm.orderedIcon[column] = newIcon;\n      }\n\n      function cancelInvoice() {\n        if (Session.hasPermission('accounting.invoices.delete')) {\n\n          if (vm.saving) {\n            return;\n          }\n\n          vm.saving = true;\n\n          var delete_title = '';\n          var delete_text = '';\n\n          if (vm.type === INVOICE_TYPES.INVOICE) {\n            delete_title = $filter('translate')('INVOICE.CANCEL_INVOICE');\n            delete_text = $filter('translate')('INVOICE.CANCEL_INVOICE_MESSAGE');\n          }\n\n          var confirm = $mdDialog.confirm()\n            .title(delete_title)\n            .htmlContent(delete_text)\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('GENERAL.OK'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n\n          $mdDialog.show(confirm).then(function() {\n            api.accounting.invoices.save({\n              id: vm.invoice.id, option: 'cancel-invoice'\n            }, function(response, callback, status) {\n              if (vm.type === INVOICE_TYPES.INVOICE) {\n                $state.go('app.accounting.invoices');\n              } else if (vm.type === INVOICE_TYPES.PROFORMA) {\n                $state.go('app.accounting.proformas');\n              } else if (vm.type === INVOICE_TYPES.QUOTE) {\n                $state.go('app.accounting.quotes');\n              }\n            });\n          }, function() {\n            vm.saving = false;\n          });\n\n        }\n      }\n\n      function deleteInvoice() {\n        if (Session.hasPermission('accounting.invoices.delete')) {\n\n          if (vm.saving) {\n            return;\n          }\n\n          vm.saving = true;\n\n          var delete_title = '';\n          var delete_text = '';\n\n          if (vm.type === INVOICE_TYPES.INVOICE) {\n            delete_title = $filter('translate')('INVOICE.DELETE_INVOICE');\n            delete_text = $filter('translate')('INVOICE.DELETE_INVOICE_MESSAGE');\n          } else if (vm.type === INVOICE_TYPES.PROFORMA) {\n            delete_title = $filter('translate')('INVOICE.DELETE_PROFORMA');\n            delete_text = $filter('translate')('INVOICE.DELETE_PROFORMA_MESSAGE');\n          } else if (vm.type === INVOICE_TYPES.QUOTE) {\n            delete_title = $filter('translate')('INVOICE.DELETE_QUOTE');\n            delete_text = $filter('translate')('INVOICE.DELETE_QUOTE_MESSAGE');\n          }\n\n          var confirm = $mdDialog.confirm()\n            .title(delete_title)\n            .htmlContent(delete_text)\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('GENERAL.DELETE'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n\n          $mdDialog.show(confirm).then(function() {\n            api.accounting.invoices.delete({ id: vm.invoice.id }, function(response, callback, status) {\n              if (vm.type === INVOICE_TYPES.INVOICE) {\n                $state.go('app.accounting.invoices');\n              } else if (vm.type === INVOICE_TYPES.PROFORMA) {\n                $state.go('app.accounting.proformas');\n              } else if (vm.type === INVOICE_TYPES.QUOTE) {\n                $state.go('app.accounting.quotes');\n              }\n            });\n          }, function() {\n            vm.saving = false;\n          });\n\n        }\n      }\n\n      function savePayment() {\n        if (vm.saving || vm.temporalPayment.payment_method == null || (vm.temporalPayment.amount == 0 || vm.temporalPayment.amount == null)) {\n          return;\n        }\n        vm.saving = true;\n\n        api.accounting.payments.save(vm.temporalPayment, function(response, callback, status) {\n          vm.saving = false;\n          if (status === 201) {\n            vm.invoice.payments.push(response);\n            vm.temporalPayment = {\n              id: null,\n              payment_method: null,\n              amount: null,\n              date: new Date(),\n              invoice: vm.invoice.id,\n              purchase_order: vm.invoice.purchase_order\n            };\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.SAVED_SUCCESSFULLY')).position('top right'));\n            save();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n\n      function removePayment(payment) {\n        if (vm.saving) {\n          return;\n        }\n        vm.saving = true;\n\n        api.accounting.payments.delete(payment, function(response, callback, status) {\n          vm.saving = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            for (var i = 0; i < vm.invoice.payments.length; i++) {\n              if (vm.invoice.payments[i].id === payment.id) {\n                vm.invoice.payments.splice(i, 1);\n                break;\n              }\n            }\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DELETED_SUCCESSFULLY')).position('top right'));\n            save();\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        });\n      }\n\n      function openProductSearchDialog(ev, invoiceLineIndex) {\n        if (Session.hasPermission('inventory.purchases.purchase.products.add_product')) {\n          $mdDialog.show({\n            controller: 'ProductSearchController',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n            parent: angular.element($document.find('body')),\n            targetEvent: ev,\n            clickOutsideToClose: true,\n            locals: {\n              params: {\n                multiple: true, getVariants: true\n              }\n            }\n          }).then(function(result) {\n            addProductLine(invoiceLineIndex, result.products, result.productVariants);\n          });\n        }\n      }\n\n      function addProductLine(invoiceLineIndex, products, productVariants) {\n        if (Session.hasPermission('accounting.invoices.invoice.add_line')) {\n\n          var requests = [];\n          productVariants.forEach(function(productVariant) {\n            var promise = $q.defer();\n            api.inventories.productVariants.get({\n              id: productVariant.id, option: 'price', pricing_tier: vm.invoice.pricing_tier\n            }, function(response, callback, status) {\n              promise.resolve({\n                response: response, callback: callback, status: status\n              });\n            });\n            requests.push(promise.promise);\n          });\n\n          $q.all(requests).then(function(results) {\n            results.forEach(function(result, index) {\n              if (index > 0) {\n                addLine();\n                invoiceLineIndex = vm.invoice.invoice_lines.length - 1;\n              }\n\n              var productVariant = productVariants.find(function(pv) {\n                return pv.id === result.response.id;\n              });\n\n              var product = products.find(function(p) {\n                return p.id === productVariant.product_id;\n              });\n\n              var description = '';\n              if (product.name) {\n                description = product.name + ', ';\n              }\n              if (productVariant) {\n                description += productVariant.color_name + '/' + productVariant.size_name;\n              }\n\n              vm.invoice.invoice_lines[invoiceLineIndex].label = product.code;\n              vm.invoice.invoice_lines[invoiceLineIndex].product_variant = productVariant.id;\n              vm.invoice.invoice_lines[invoiceLineIndex].description = description;\n              vm.invoice.invoice_lines[invoiceLineIndex].quantity = 1;\n              vm.invoice.invoice_lines[invoiceLineIndex].price_excl_tax = result.response.price_excl_tax;\n              vm.invoice.invoice_lines[invoiceLineIndex].discount = 0;\n              vm.invoice.invoice_lines[invoiceLineIndex].tax = result.response.tax_id;\n              vm.invoice.invoice_lines[invoiceLineIndex].total_price_incl_tax = '';\n\n              refreshTotalPrice(vm.invoice.invoice_lines[invoiceLineIndex], false);\n            });\n          });\n        }\n      }\n\n      function newDocument() {\n        if (vm.waiting) {\n          return;\n        }\n\n        vm.waiting = true;\n        api.accounting.invoices.save({\n          option: 'create-empty',\n          type: vm.invoice.type\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $state.go($state.current.name, { id: response.id });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n          }\n          vm.waiting = false;\n        });\n      }\n\n      function isDisabledInvoice() {\n        return isValidKubiBaiInvoice() || vm.invoice.is_closed || !!vm.saving || vm.invoice.corrective_of;\n      }\n\n      function canAddPayments() {\n        return !vm.saving && !vm.waiting && !isValidKubiBaiInvoice();\n      }\n\n      function canDuplicateInvoice() {\n        return !vm.saving && !vm.waiting;\n      }\n\n      function isInvoiceLineDisabled(invoiceLine) {\n        return isValidKubiBaiInvoice() || vm.invoice.is_closed || !!vm.saving;\n      }\n\n      function isNotPrintablePurchaseOrderInvoice() {\n        return vm.invoice.purchase_order && !vm.invoice.autocode;\n      }\n\n      function isMissingRequiredHoldedData() {\n        if (vm.invoice.holded_invoice_data && !vm.invoice.is_received) {\n          if (!vm.invoice.customer) {\n            return true;\n          } else if (vm.invoice.customer_instance.vat == '') {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      function kubibaiInstalledAndActive() {\n        var isInstalledAndActive = false;\n\n        if (typeof Session.company.installed_integration_apps !== 'undefined') {\n          Session.company.installed_integration_apps.forEach(function(installedApp) {\n            if (installedApp.integration_app.type === 'kubibai') {\n              isInstalledAndActive = installedApp.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED;\n            }\n          });\n        }\n\n        return isInstalledAndActive;\n      }\n\n      function isValidKubiBaiInvoice() {\n        return vm.invoice.kubibai_invoice_data && !!vm.invoice.kubibai_invoice_data.is_valid && !vm.invoice.is_received;\n      }\n\n      /*\n      function generateInvoice(avoidDialog) {\n        if (kubibaiInstalledAndActive() && vm.invoice.send_to_kubibai && !vm.invoice.serial_number_type) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent(\n                $filter('translate')('ORDER.THIS_FIELD_IS_REQUIRED') +\n                ': ' +\n                $filter('translate')('CONFIGURATION.SERIAL_NUMBER_TYPE')\n              )\n              .position('top right')\n          );\n          return;\n        }\n\n        if ($scope.invoiceForm && $scope.invoiceForm.$invalid) {\n          $scope.invoiceForm.$setSubmitted();\n          try {\n            var firstInvalid = $document[0].querySelector('#accounting-invoice .ng-invalid');\n            if (firstInvalid && typeof firstInvalid.focus === 'function') {\n              firstInvalid.focus();\n            }\n          } catch (e) {\n          }\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('INVOICES.MISSING_REQUIRED_FIELDS'))\n              .position('top right')\n          );\n          return;\n        }\n      }\n      */\n\n      function duplicate() {\n\n        if (Session.hasPermission('accounting.invoices.invoice.update')) {\n\n          if (vm.waiting) {\n            return;\n          }\n\n          vm.waiting = true;\n          var title = 'INVOICE.DUPLICATE_INVOICE';\n          if (vm.invoice.type === INVOICE_TYPES.PROFORMA) {\n            title = 'INVOICE.DUPLICATE_PROFORMA';\n          } else if (vm.invoice.type === INVOICE_TYPES.QUOTE) {\n            title = 'INVOICE.DUPLICATE_QUOTE';\n          }\n\n          var message_body;\n          if (vm.invoice.type === INVOICE_TYPES.INVOICE && ((vm.invoice.sale_order || vm.invoice.sale_order_deliveries && vm.invoice.sale_order_deliveries.length) || (vm.invoice.purchase_order || vm.invoice.purchase_order_deliveries && vm.invoice.purchase_order_deliveries.length))) {\n            message_body = 'INVOICE.DUPLICATE_INVOICE_WITH_DELIVERY_MESSAGE';\n          } else {\n            message_body = 'INVOICE.DUPLICATE_INVOICE_MESSAGE';\n            if (vm.invoice.type === INVOICE_TYPES.PROFORMA) {\n              message_body = 'INVOICE.DUPLICATE_PROFORMA_MESSAGE';\n            } else if (vm.invoice.type === INVOICE_TYPES.QUOTE) {\n              message_body = 'INVOICE.DUPLICATE_QUOTE_MESSAGE';\n            }\n          }\n\n          var confirm = $mdDialog.confirm()\n            .title($filter('translate')(title))\n            .htmlContent($filter('translate')(message_body))\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('GENERAL.DUPLICATE'))\n            .cancel($filter('translate')('GENERAL.CANCEL'));\n\n          $mdDialog.show(confirm).then(function() {\n            api.accounting.invoices.save({\n              id: vm.invoice.id, option: 'duplicate'\n            }, function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                if (vm.invoice.type === INVOICE_TYPES.INVOICE) {\n                  $state.go('app.accounting.invoices.invoice', { id: response.id });\n                } else if (vm.invoice.type === INVOICE_TYPES.PROFORMA) {\n                  $state.go('app.accounting.proformas.proforma', { id: response.id });\n                } else if (vm.invoice.type === INVOICE_TYPES.QUOTE) {\n                  $state.go('app.accounting.quotes.quote', { id: response.id });\n                }\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n              }\n              vm.waiting = false;\n            });\n          }, function() {\n            vm.waiting = false;\n          });\n        }\n      }\n\n      function reloadInvoice() {\n        api.accounting.invoices.get({\n          id: vm.invoice.id\n        }, function(response, callback, status) {\n          if (status === 200) {\n            vm.invoice = new Invoice(response);\n            for (var saleOrderDelivery in vm.invoice.sale_order_deliveries) {\n              initializeSaleOrderDelivery(vm.invoice.sale_order_deliveries[saleOrderDelivery]);\n            }\n            refreshAllTotalPrices();\n          }\n        });\n      }\n\n      function getPdfName() {\n        return vm.invoice.getAutocodeOrDraft() || '';\n      }\n\n      function excludeTaxesHasChanged() {\n        // Note that the value of vm.invoice.exclude_taxes is not updated yet, so the if condition is the opposite\n        if (!vm.invoice.exclude_taxes) {\n          restoreTaxes();\n        }\n        vm.refreshAllTotalPrices();\n      }\n\n      function restoreTaxes() {\n        var requests = [];\n        vm.invoice.invoice_lines.forEach(function(invoice_line) {\n          if (invoice_line.product_variant) {\n            var promise = $q.defer();\n            api.inventories.productVariants.get({\n              id: invoice_line.product_variant, option: 'price', pricing_tier: vm.invoice.pricing_tier\n            }, function(response, callback, status) {\n              promise.resolve({\n                response: response, callback: callback, status: status, invoice_line: invoice_line\n              });\n            });\n            requests.push(promise.promise);\n          }\n        });\n\n        $q.all(requests).then(function(results) {\n\n          results.forEach(function(result) {\n            if (result['status'] !== 200) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n              return;\n            }\n\n            result['invoice_line'].price_excl_tax = result['response'].price_excl_tax;\n\n            result['invoice_line'].tax_instance = getTaxById(result['response'].tax_id);\n            if (result['invoice_line'].tax_instance) {\n              result['invoice_line'].updatePrices();\n            }\n          });\n          vm.refreshAllTotalPrices();\n        });\n      }\n\n      function openSendEmailDialog() {\n        if (!isValid()) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('INVOICES.MISSING_REQUIRED_FIELDS')).position('top right'));\n          return;\n        }\n        save().then(function() {\n          $mdDialog.show({\n            controller: 'SendEmailDialogController',\n            controllerAs: 'vm',\n            templateUrl: 'app/directives/send-email-dialog/send-email-dialog.html',\n            parent: angular.element($document.find('body')),\n            clickOutsideToClose: false,\n            focusOnOpen: false,\n            locals: {\n              document: vm.invoice,\n              documentName: vm.invoice.getAutocodeOrDraft(),\n              documentType: 'Invoice',\n              invoiceType: vm.type\n            },\n            resolve: {\n              ContactData: function (apiResolver) {\n                return apiResolver.resolve('inventories.contacts@get', {id: vm.invoice.customer});\n              }\n            }\n          });\n        });\n      }\n\n      function createInvoice(option, successMessageKey, extraData) {\n        if (vm.saving) {\n          return;\n        }\n        if (vm.invoice.type !== INVOICE_TYPES.INVOICE) {\n          return;\n        }\n        if (!Session.hasPermission('accounting.invoices.invoice.update')) {\n          return;\n        }\n        var data = {\n          id: vm.invoice.id, option: option\n        };\n        if (extraData) {\n          angular.extend(data, extraData);\n        }\n        vm.saving = true;\n        api.accounting.invoices.save(data, function(response, callback, status) {\n          if (status === 200 || status === HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')(successMessageKey)).position('top right'));\n            $state.go('app.accounting.invoices.invoice', { id: response.id });\n          } else {\n            if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              if (response.error === ERROR_CODES.ERROR_01021_MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE) {\n                showMissingSerialNumberTypeDialog();\n              }\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n          vm.saving = false;\n        });\n      }\n\n      function showMissingSerialNumberTypeDialog() {\n        $mdDialog\n          .show({\n            templateUrl: 'app/main/apps/accounting/views/invoice/dialogs/missing-corrective-serial-number-type-dialog/missing-corrective-serial-number-type-dialog.html',\n            parent: angular.element(document.body),\n            clickOutsideToClose: true,\n            escapeToClose: true,\n            multiple: false\n          })\n          .then(function() {\n          }, function() {\n          });\n      }\n\n      function createReplacementInvoice() {\n        createInvoice('create-replacement-invoice', 'INVOICE.REPLACEMENT_INVOICE_SUCCESSFULLY_CREATED');\n      }\n\n      function createCorrectiveInvoice(reason) {\n        createInvoice('create-corrective-invoice', 'INVOICE.CORRECTIVE_INVOICE_SUCCESSFULLY_CREATED', {\n          reason: reason\n        });\n      }\n\n      function showEmitButton() {\n        return !vm.invoice.is_closed && !vm.invoice.isPurchaseInvoice() && isInvoiceType();\n      }\n\n      function showSaveButton() {\n        return (!showEmitButton() && !isInvoiceType()) || vm.invoice.isPurchaseInvoice();\n      }\n\n      function isInvoiceType() {\n        return vm.invoice.type === INVOICE_TYPES.INVOICE;\n      }\n\n      function downloadInvoice() {\n        if (!vm.invoice.id || vm.downloading) {\n          return;\n        }\n        vm.downloading = true;\n        api.private.v2.accounting.invoices.print({\n          id: vm.invoice.id\n        }, function() {\n          vm.downloading = false;\n        });\n      }\n\n      function isSendButtonDisabled() {\n        return vm.saving || !vm.invoice.customer;\n      }\n\n      function isSaveButtonDisabled() {\n        return vm.saving || isMissingRequiredHoldedData();\n      }\n\n      function isDownloadButtonDisabled() {\n        return vm.saving || vm.downloading;\n      }\n\n      function isCloseButtonDisabled() {\n        return vm.isInvoiceLineDisabled() || isMissingRequiredHoldedData();\n      }\n\n      function fiscalAddressChanged() {\n        if (vm.invoice.is_closed) {\n          return;\n        }\n        filterSerialNumberTypesByIntegrationInstalledApp();\n      }\n\n      function filterSerialNumberTypesByIntegrationInstalledApp() {\n        if (vm.invoice.is_closed) {\n          return;\n        }\n        if (vm.invoice.type !== INVOICE_TYPES.INVOICE) {\n          return;\n        }\n        filterSerialNumberTypesByVerifactuIntegrationInstalledApp();\n        // Add here other integration apps filters if needed in the future\n      }\n\n      function filterSerialNumberTypesByVerifactuIntegrationInstalledApp() {\n        var verifactuApp = Session.company.getVerifactuApp(vm.invoice.fiscal_address);\n        if (verifactuApp) {\n          vm.serialNumberTypes = SerialNumberTypesData.results.filter(function(serialNumberType) {\n            return verifactuApp.id === serialNumberType.verifactu_app;\n          });\n        } else {\n          vm.serialNumberTypes = SerialNumberTypesData.results.filter(function(serialNumberType) {\n            return serialNumberType.verifactu_app === null;\n          });\n        }\n      }\n    }\n  }\n\n)\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.accounting')\n    .controller('InvoicesController', InvoicesController);\n\n  /** @ngInject */\n  function InvoicesController($scope, $rootScope, $mdDateRangePicker, $mdMedia, $state, $mdSidenav, $mdToast, $document,\n                              $http, $timeout, $filter, $compile, $mdDialog, api, Session, DTColumnBuilder, CONTACT_TYPES,\n                              $translate, SerialNumberTypesData, InvoiceType, HTTP_STATUS, INVOICE_TYPES,\n                              SEARCH_MAX_LENGTH, DTO_ORDER_TYPES, UiGridService, Utils, FeatureFlagService) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.INVOICE_TYPES = INVOICE_TYPES;\n    vm.type = InvoiceType;\n    vm.timeout = null;\n    vm.selected = [];\n    vm.sidenavLockedOpen = false;\n    vm.serialNumberTypes = SerialNumberTypesData.results;\n    vm.waiting = false;\n    vm.serialNumberTypeIdFilter = null;\n    vm.contactTypes = CONTACT_TYPES;\n    vm.selectedContactType = null;\n    vm.dateRange = {};\n    vm.mdLocalizationMap = Utils.GetMdDatePickerLocalizationMap();\n\n    // Methods\n    vm.initialize = initialize;\n    vm.reloadInvoices = reloadInvoices;\n    vm.generateInvoices = generateInvoices;\n    vm.downloadZip = downloadZip;\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.createDocument = createDocument;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.setDateRangeFilters = setDateRangeFilters;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          type: vm.type, customers: [], contactTypes: [], serialNumberTypes: [], startDate: null, endDate: null\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      initApiVersion();\n\n    }\n\n    function initApiVersion() {\n      vm.invoiceAPI = FeatureFlagService.selectEndpoint(FeatureFlagService.FEATURE_FLAG_ACCOUNTING_INVOICE_V2, api.accounting.invoices, api.private.v2.accounting.invoices);\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function reloadInvoices() {\n      if (vm.reloadInvoicesTimeout) {\n        $timeout.cancel(vm.reloadInvoicesTimeout);\n      }\n      vm.reloadInvoicesTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 1000);\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.status.filters.contactTypes && vm.status.filters.contactTypes.length > 0 ? 1 : 0;\n      result += vm.status.filters.serialNumberTypes && vm.status.filters.serialNumberTypes.length > 0 ? 1 : 0;\n      result += (vm.status.filters.startDate || vm.status.filters.endDate) ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      vm.status.filters.contactTypes = [];\n      vm.status.filters.serialNumberTypes = [];\n      vm.status.filters.startDate = null;\n      vm.status.filters.endDate = null;\n      vm.dateRange = {};\n      reloadInvoices();\n    }\n\n    function setDateRangeFilters() {\n      vm.status.filters.startDate = vm.dateRange.dateStart;\n      vm.status.filters.endDate = vm.dateRange.dateEnd;\n      reloadInvoices();\n    }\n\n    function generateInvoices(ev) {\n\n      if (vm.waiting) {\n        return;\n      }\n\n      vm.waiting = true;\n\n      $mdDialog.show({\n        controller: 'GenerateInvoicesDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/accounting/views/invoices/dialogs/generate-invoices/generate-invoices.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {}\n      }).then(function(result) {\n\n        vm.waiting = false;\n        reloadInvoices();\n      });\n    }\n\n    function base64ToBlob(base64, mimetype, slicesize) {\n      if (!window.atob || !window.Uint8Array) {\n        // The current browser doesn't have the atob function. Cannot continue\n        return null;\n      }\n      mimetype = mimetype || '';\n      slicesize = slicesize || 512;\n      var bytechars = atob(base64);\n      var bytearrays = [];\n      for (var offset = 0; offset < bytechars.length; offset += slicesize) {\n        var slice = bytechars.slice(offset, offset + slicesize);\n        var bytenums = new Array(slice.length);\n        for (var i = 0; i < slice.length; i++) {\n          bytenums[i] = slice.charCodeAt(i);\n        }\n        var bytearray = new Uint8Array(bytenums);\n        bytearrays[bytearrays.length] = bytearray;\n      }\n      return new Blob(bytearrays, { type: mimetype });\n    }\n\n    function downloadZip() {\n\n      if (vm.waiting) return;\n\n      vm.waiting = true;\n\n      var url = api.urls.accounting.invoicesDownloadZip;\n      var data = {\n        invoices_ids: vm.selected\n      };\n      var config = {};\n\n      $http.post(url, data, { responseType: 'arraybuffer' }).then(function(response) {\n\n        // create a download anchor tag\n        var downloadLink = document.createElement('a');\n        downloadLink.target = '_blank';\n        downloadLink.download = 'invoices.zip';\n\n        // convert downloaded data to a Blob\n        var blob = new Blob([response.data], { type: 'application/octet-stream' });\n\n        // create an object URL from the Blob\n        var URL = window.URL || window.webkitURL;\n        var downloadUrl = URL.createObjectURL(blob);\n\n        // set object URL as the anchor's href\n        downloadLink.href = downloadUrl;\n\n        // append the anchor to document body\n        document.body.appendChild(downloadLink);\n\n        // fire a click event on the anchor\n        downloadLink.click();\n\n        // cleanup: remove element and revoke object URL\n        document.body.removeChild(downloadLink);\n        URL.revokeObjectURL(downloadUrl);\n\n        vm.waiting = false;\n        $mdDialog.hide();\n      }, function(response) {\n        vm.waiting = false;\n        $mdDialog.cancel();\n      });\n    }\n\n    function createDocument() {\n      if (vm.creatingDocument) {\n        return;\n      }\n\n      vm.creatingDocument = true;\n      var data = {\n        type: vm.type\n      };\n      if (!FeatureFlagService.isFeatureFlagEnabled(FeatureFlagService.FEATURE_FLAG_ACCOUNTING_INVOICE_V2)) {\n        data.option = 'create-empty';\n      }\n      vm.invoiceAPI.save(data, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED || status === HTTP_STATUS.HTTP_200_OK) {\n          if (vm.type === INVOICE_TYPES.PROFORMA) {\n            $state.go('app.accounting.proformas.proforma', { id: response.id });\n          } else if (vm.type === INVOICE_TYPES.QUOTE) {\n            $state.go('app.accounting.quotes.quote', { id: response.id });\n          } else if (vm.type === INVOICE_TYPES.INVOICE) {\n            $state.go('app.accounting.invoices.invoice', { id: response.id });\n          }\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.ERROR_TOAST')).position('top right'));\n          vm.creatingDocument = false;\n        }\n      });\n\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.account')\n    .controller('UsersController', usersController);\n\n  function usersController($q, $scope, $compile, $mdSidenav, $timeout, $filter, $rootScope, api, DTColumnBuilder, msUtils, $mdDialog,\n                           $document, WarehousesData, Session, USER_ROLES, CONTACT_TYPES, CONTACT_PERSON_TYPES, SEARCH_MAX_LENGTH,\n                           RolesData, FiscalAddressesData, Role, UiGridService, ContractedPlanLimit, PLAN_LIMIT_CODES, HTTP_STATUS) {\n    var vm = this;\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.status = {};\n    vm.contacts = [];\n    vm.filter = '';\n    vm.search = null;\n    vm.listType = 'all';\n    vm.listOrder = 'name';\n    vm.listOrderAsc = false;\n    vm.selectedContacts = [];\n    vm.newGroupName = '';\n    vm.filters = [];\n    vm.USER_ROLES = USER_ROLES;\n    vm.userRoles = RolesData.results.filter(function(role) {\n      return role.id !== USER_ROLES.USER_ROLE_SUPERUSER;\n    }).map(function(role) {\n      return new Role(role);\n    });\n    vm.fiscalAddresses = FiscalAddressesData.results;\n    vm.userRolesDict = {};\n    vm.table = null;\n    vm.selectedRole = null;\n    vm.toggleInArray = msUtils.toggleInArray;\n    vm.exists = msUtils.exists;\n    vm.contractedPlanLimits = [];\n    vm.userLimit = null;\n    vm.hasSubscription = Session.hasSubscription;\n\n    // Methods\n    vm.initialize = initialize;\n    vm.openUserDialog = openUserDialog;\n    vm.toggleSidenav = toggleSidenav;\n    vm.toggleSidenavDesktop = toggleSidenavDesktop;\n    vm.reloadUsers = reloadUsers;\n    vm.getFilterNotifications = getFilterNotifications;\n    vm.clearFilter = clearFilter;\n    vm.allowUserCreation = allowUserCreation;\n    vm.blockUserCreation = blockUserCreation;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.status = {\n        state: {}, ordering: '', search: '', filtersParams: {}, filters: {\n          roles: null\n        }, pageNumber: 1, pageSize: UiGridService.DEFAULT_PAGE_SIZE\n      };\n\n      vm.userRoles.forEach(function(role) {\n        vm.userRolesDict[role.id] = role;\n      });\n\n      vm.filters = [\n        USER_ROLES.USER_ROLE_RETAIL_VENDOR,\n        USER_ROLES.USER_ROLE_RETAIL_MANAGER,\n        USER_ROLES.USER_ROLE_PRODUCTS_EDITOR,\n        USER_ROLES.USER_ROLE_OWNER\n      ];\n\n      if (Session.hasPermission('app.wholesale')) {\n        vm.filters = vm.filters.concat([\n          USER_ROLES.USER_ROLE_WHOLESALE_VENDOR,\n          USER_ROLES.USER_ROLE_WHOLESALE_MANAGER\n        ]);\n      }\n\n      loadContractedPlanLimits();\n      $scope.$on('contact-updated', reloadUsers);\n\n    }\n\n    function loadContractedPlanLimits() {\n      api.account.contractedPlanLimits.list(\n        {\n          codes: PLAN_LIMIT_CODES.USER_LIMIT\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && results.results.length) {\n            results.results.forEach(function(cpl) {\n              vm.contractedPlanLimits.push(new ContractedPlanLimit(cpl));\n            });\n            vm.userLimit = vm.contractedPlanLimits.find(function(cpl) {\n              return cpl.code === PLAN_LIMIT_CODES.USER_LIMIT;\n            });\n          }\n        }\n      );\n    }\n\n    function allowUserCreation() {\n      return vm.userLimit && vm.userLimit.allowsCreation();\n    }\n\n    function blockUserCreation() {\n      return vm.userLimit && !vm.userLimit.allowsCreation();\n    }\n\n    function openUserDialog(user) {\n      if (Session.hasPermission('account.users.create') || Session.hasPermission('account.users.update')) {\n        $mdDialog.show({\n          controller: 'UserDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/account/views/users/dialogs/user/user-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          multiple: true,\n          resolve: {\n            UserData: function() {\n              return $q.resolve(user);\n            },\n            WarehousesData: function() {\n              return $q.resolve(WarehousesData.results);\n            },\n            FiscalAddressesData: function() {\n              return $q.resolve(FiscalAddressesData.results);\n            },\n            RolesData: function() {\n              return $q.resolve(vm.userRoles);\n            }\n          },\n          locals: {\n            params: {\n              contractedPlanLimit: vm.userLimit,\n              hideDelete: false\n            }\n          }\n        }).finally(function() {\n          reloadUsers();\n        });\n      }\n    }\n\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function toggleSidenavDesktop(sidenavId) {\n      vm.sidenavLockedOpen = !vm.sidenavLockedOpen;\n      $timeout(function() {\n        $rootScope.$broadcast('ndGrid::sizeChanged');\n      }, 400);\n    }\n\n    function reloadUsers() {\n      if (vm.reloadUsersTimeout) {\n        $timeout.cancel(vm.reloadUsersTimeout);\n      }\n      vm.reloadUsersTimeout = $timeout(function() {\n        $rootScope.$broadcast('ndGrid::filtersChanged');\n      }, 1000);\n    }\n\n    function getFilterNotifications() {\n      var result = 0;\n      result += vm.status.filters.roles && vm.status.filters.roles.length > 0 ? 1 : 0;\n      return result;\n    }\n\n    function clearFilter() {\n      vm.status.filters.roles = [];\n      reloadUsers();\n    }\n\n  }\n\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.account')\n      .controller('RolesController', RolesController);\n\n    /** @ngInject */\n    function RolesController(api, $q, $mdDialog, $mdToast, $filter, HTTP_STATUS, USER_ROLES, SEARCH_MAX_LENGTH, Session, $document, $state) {\n      var vm = this;\n\n      // Cons\n      vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n      // Data\n      vm.fetching = false;\n      vm.roles = [];\n      vm.permissions = [];\n      vm.rolesMatrix = {}; // roleId, permissionId\n      vm.rolesChanged = {}; // dict of roles than have changed\n      vm.backupRolesMatrix = {};\n      vm.search = '';\n\n      // Methods\n      vm.save = save;\n      vm.cancel = cancel;\n      vm.openRoleDialog = openRoleDialog;\n\n      // Initialize\n      init();\n\n      // Functions\n      function init() {\n        fetchData();\n      }\n\n      function fetchData() {\n        vm.fetching = true;\n        vm.fetchingRoles = true;\n        vm.fetchingPermissions = true;\n\n        api.account.roles.list({\n            serializer: 'RoleEditSerializer',\n            exclude_superadmin: true\n          },\n          function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.roles = results.results.map(function(role) {\n                role.title = getRoleTitle(role);\n                return role;\n              });\n              vm.fetchingRoles = false;\n              createMatrix();\n            }\n          });\n\n        getPermissions();\n      }\n\n      function getPermissions(page) {\n        page = page ? page : 1;\n        api.account.permissions.list({\n            page: page\n          },\n          function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.permissions = vm.permissions.concat(results.results);\n              if (results.next) {\n                getPermissions(page + 1);\n              } else {\n                vm.fetchingPermissions = false;\n                createMatrix();\n              }\n            }\n          });\n      }\n\n      function createMatrix() {\n        if (vm.fetchingPermissions || vm.fetchingRoles) {\n          return;\n        }\n\n        vm.rolesMatrix = {};\n\n        vm.roles.forEach(function(role) {\n          vm.rolesMatrix[role.id] = {};\n          vm.rolesChanged[role.id] = false;\n\n          vm.permissions.forEach(function(permission) {\n            vm.rolesMatrix[role.id][permission.id] = false;\n          });\n\n          role.permissions.forEach(function(permission) {\n            vm.rolesMatrix[role.id][permission] = true;\n          });\n        });\n\n        vm.permissions = vm.permissions.map(function(permission) {\n          permission.name = $filter('translate')('VIEWS.' + permission.code.replaceAll('.', '_'));\n          permission.sortText = '' + permission.code;\n          if (permission.sortText.substring(0, 3) !== 'app') {\n            permission.sortText = 'app.' + permission.sortText;\n          }\n          permission.tabIndex = permission.sortText.split('.').length - 1;\n          permission.class = 'tab-index-' + permission.tabIndex;\n          return permission;\n        });\n\n        vm.permissions = vm.permissions.sort(function(a, b) {\n          if (a.sortText <= b.sortText) {\n            return -1;\n          }\n          return 1;\n        });\n\n        vm.fetching = false;\n        createBackup();\n      }\n\n      function save() {\n        if (Session.hasPermission('account.roles.update')) {\n          var requests = [];\n\n          Object.keys(vm.rolesChanged)\n            .filter(function(roleId) {\n              return vm.rolesChanged[roleId];\n            }).forEach(function(roleId) {\n\n            vm.saving = true;\n            var role = vm.roles.find(function(role) {\n              return role.id === +roleId;\n            });\n\n            role.permissions = Object.keys(vm.rolesMatrix[roleId]).filter(function(permissionId) {\n              return vm.rolesMatrix[roleId][permissionId];\n            }).map(function(permissionId) {\n              return +permissionId;\n            });\n\n            var promise = $q.defer();\n            api.account.roles.update(\n              role,\n              function(results, fn, status) {\n                promise.resolve({\n                  response: results,\n                  fn: fn,\n                  status: status\n                });\n              });\n            requests.push(promise.promise);\n          });\n\n          if (requests.length) {\n            $q.all(requests).then(function(results) {\n              results.forEach(function(result) {\n                if (result.status === HTTP_STATUS.HTTP_200_OK) {\n                  recycleRole(result.response);\n                } else {\n                  // TODO show error toast\n                }\n              });\n              vm.saving = false;\n            });\n          }\n        }\n      }\n\n      function cancel() {\n        vm.rolesMatrix = angular.copy(vm.backupRolesMatrix);\n      }\n\n      function openRoleDialog(ev, role, option) {\n        if (Session.hasSubscription && !Session.hasFeatureOrAddon('account.roles.create')) {\n          $state.go('app.account.upgrade_plan', {\n            source: 'account.roles.create'\n          });\n        } else if (Session.hasPermission('account.roles.create')) {\n          $mdDialog.show({\n            controller: 'RoleEditorDialog',\n            controllerAs: 'vm',\n            templateUrl: 'app/main/apps/account/views/roles/dialogs/role-editor/role-editor.html',\n            parent: angular.element($document.find('#content-container')),\n            targetEvent: ev,\n            locals: {\n              roles: vm.roles,\n              option: role ? option : 'create',\n              role: role\n            }\n          }).then(function(result) {\n            switch (result.option) {\n              case 'create':\n                var origin = result.role.isDuplicate ? result.role.origin : null;\n                createNewRole(result.role.name, origin);\n                break;\n              case 'rename':\n                updateRoleName(role, result.role.name);\n                break;\n              case 'delete':\n                deleteRoleAndReplace(role, result.role.origin);\n                break;\n            }\n          }, function() {\n            // dialog canceled\n          });\n        }\n      }\n\n      function createNewRole(name, origin) {\n        vm.saving = true;\n        api.account.roles.save({\n          name: name,\n          duplicate: origin\n        }, function(response, fn, status) {\n          if (status != HTTP_STATUS.HTTP_201_CREATED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n\n          response.title = getRoleTitle(response);\n          vm.roles.push(response);\n\n          vm.rolesMatrix[response.id] = {};\n          vm.rolesChanged[response.id] = false;\n\n          vm.permissions.forEach(function(permission) {\n            vm.rolesMatrix[response.id][permission.id] = false;\n          });\n\n          response.permissions.forEach(function(permission) {\n            vm.rolesMatrix[response.id][permission] = true;\n          });\n\n          vm.saving = false;\n        });\n      }\n\n      function updateRoleName(role, newName) {\n        var updatedRole = angular.copy(role);\n        updatedRole.name = newName;\n        vm.saving = true;\n        api.account.roles.update(updatedRole,\n          function(response, fn, status) {\n            if (status != HTTP_STATUS.HTTP_200_OK) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              return;\n            }\n            var foundRole = vm.roles.find(function(r) {\n              return r.id === role.id;\n            });\n            if (foundRole) {\n              foundRole.title = getRoleTitle(response);\n            }\n            vm.saving = false;\n          });\n      }\n\n      function deleteRoleAndReplace(role, replaceFor) {\n        vm.saving = true;\n        api.account.roles.delete({\n          id: role.id,\n          replace_for: replaceFor\n        }, function(response, fn, status) {\n          if (status != HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            return;\n          }\n\n          vm.roles = vm.roles.filter(function(current) {\n            return current.id != role.id;\n          });\n          vm.saving = false;\n        });\n      }\n\n      function recycleRole(role) {\n        vm.rolesChanged[role.id] = false;\n        createBackup();\n      }\n\n      function createBackup() {\n        vm.backupRolesMatrix = angular.copy(vm.rolesMatrix);\n      }\n\n      function getRoleTitle(role) {\n        if (role.company) {\n          return role.name;\n        }\n        return $filter('translate')('USERS.' + USER_ROLES[role.id]);\n      }\n    }\n  }\n\n)();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('RequestPinDialogController', RequestPinDialogController);\n\n  /** @ngInject */\n  function RequestPinDialogController($scope, $mdDialog, $mdToast, $filter, Session, user, hotkeys, HTTP_STATUS) {\n    var vm = this;\n\n    vm.pin = '';\n    vm.user = user;\n    vm.checking = false;\n    vm.valid = true;\n    var scopedHotKeys = hotkeys.bindTo($scope);\n    scopedHotKeys.add({\n      combo: 'enter',\n      allowIn: ['INPUT'],\n      callback: function(event) {\n        checkPin();\n      }\n    });\n    scopedHotKeys.add({\n      combo: 'backspace',\n      allowIn: ['INPUT'],\n      callback: function(event) {\n        clearValue();\n      }\n    });\n    for (var i = 0; i < 10; i++) {\n      scopedHotKeys.add({\n        combo: i.toString(),\n        allowIn: ['INPUT'],\n        callback: function(event) {\n          insertValue(parseInt(event.key));\n        }\n      });\n    }\n\n    vm.setFormValidity = setFormValidity;\n    vm.cancel = cancel;\n    vm.checkPin = checkPin;\n    vm.insertValue = insertValue;\n    vm.clearValue = clearValue;\n\n    function cancel() {\n      $mdDialog.hide(false);\n    }\n\n    function checkPin() {\n      if (user.data.pin === vm.pin) {\n        $mdDialog.hide(true);\n        setFormValidity(true);\n      } else {\n        setFormValidity(false);\n      }\n    }\n\n    function setFormValidity(value) {\n      vm.valid = value;\n    }\n\n    function insertValue(value) {\n      setFormValidity(true);\n      if (vm.pin.length < 4) {\n        vm.pin += value.toString();\n      }\n      if (vm.pin.length === 4) {\n        checkPin();\n      }\n    }\n\n    function clearValue() {\n      if (vm.pin.length) {\n        vm.pin = vm.pin.slice(0, -1);\n        setFormValidity(true);\n      }\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.nd-printer-utils', [])\n    .service('ndPrinterUtilsService', ndPrinterUtilsService);\n\n  /** @ngInject */\n  function ndPrinterUtilsService($filter, $mdDialog, $document, CASH_MOVEMENT_TYPES, Utils,\n                                 POS_ORDER_PAYMENT_STATUSES, Session, PRODUCT_IDENTIFIER_TYPES,\n                                 VARIANT_IDENTIFIER_TYPES, PRODUCT_PRICE_POSITION_TYPES,\n                                 BARCODE_DESIGN_TYPES, TOTAL_DESIGN_TYPES) {\n\n    var service = this;\n\n\n    // Data\n    var WIDTH = 42;\n    var DOUBLE_WIDTH_TEXT_WIDTH = 21;\n    // https://github.com/fvdsn/py-xml-escpos/blob/master/xmlescpos/constants.py\n    var characters = {\n      INIT: '\\x1B' + '\\x40',                      // Clear data in bugger and reset modes\n      TXT_ENC_WPC1252: '\\x1B' + '\\x74' + '\\x10',  // WPC1252\n      BR: '\\x0A',\n      BR_2: '\\x0A',\n      BR_3: '\\x0A',\n      BOND_ON: '\\x1B' + '\\x45' + '\\x0D',\n      BOND_OFF: '\\x1B' + '\\x45' + '\\x0A',\n\n      LEFT_ALIGN: '\\x1B' + '\\x61' + '\\x30',\n      RIGHT_ALIGN: '\\x1B' + '\\x61' + '\\x32',\n      CENTER_ALIGN: '\\x1B' + '\\x61' + '\\x31',\n\n      DOULE_FONT_SIZE: '\\x1D' + '\\x21' + '\\x11',\n      NORMAL_FONT_SIZE: '\\x1D' + '\\x21' + '\\x00',\n\n      SMALL_TEXT: '\\x1B' + '\\x4D' + '\\x31',\n      NORMAL_TEXT_SIZE: '\\x1B' + '\\x4D' + '\\x30',\n\n      BOLD_ON: '\\x1B' + '\\x45' + '\\x0D',\n      BOLD_OFF: '\\x1B' + '\\x45' + '\\x0A',\n\n      CUT: '\\x0A' + '\\x0A' + '\\x0A' + '\\x0A' + '\\x0A' + '\\x0A' + '\\x0A' + '\\x0A' + '\\x1B' + '\\x69',\n      OPEN_CASH_DRAWER: '\\x10' + '\\x14' + '\\x01' + '\\x00' + '\\x05',\n      PRODUCTS_SPACE: '                         ',\n      LINE: '------------------------------------------------' + '\\x0A',\n      LINE_2: '------------------------------------------' + '\\x0A',\n      LINE_2_: {\n        type: 'raw',\n        format: 'image',\n        data: 'assets/stockagile/pos-printer-line.a706dbeb.jpg',\n        options: { language: 'ESCPOS', dotDensity: 'double' }\n      },\n      SPACE: ' ',\n      COMA: ', '\n    };\n\n    // Feed control sequences\n    var commands = {\n      CTL_LF: '\\x0a',             // Print and line feed\n      CTL_FF: '\\x0c',             // Form feed\n      CTL_CR: '\\x0d',             // Carriage return\n      CTL_HT: '\\x09',             // Horizontal tab\n      CTL_VT: '\\x0b',             // Vertical tab\n\n      // RT Status commands\n      DLE_EOT_PRINTER: '\\x10\\x04\\x01',  // Transmit printer status\n      DLE_EOT_OFFLINE: '\\x10\\x04\\x02',\n      DLE_EOT_ERROR: '\\x10\\x04\\x03',\n      DLE_EOT_PAPER: '\\x10\\x04\\x04',\n\n      // Printer hardware\n      HW_INIT: '\\x1b\\x40',         // Clear data in buffer and reset modes\n      HW_SELECT: '\\x1b\\x3d\\x01',    // Printer select\n      HW_RESET: '\\x1b\\x3f\\x0a\\x00', // Reset printer hardware\n\n      // Cash Drawer\n      CD_KICK_2: '\\x1b\\x70\\x00',    // Sends a pulse to pin 2 []\n      CD_KICK_5: '\\x1b\\x70\\x01',    // Sends a pulse to pin 5 []\n\n      // Paper\n      CUSTOM_PAPER_FULL_CUT: '\\x0A\\x0A\\x0A\\x0A\\x1B\\x69',\n      PAPER_FULL_CUT: '\\x1d\\x56\\x00',// Full cut paper\n      PAPER_PART_CUT: '\\x1d\\x56\\x01',// Partial cut paper\n      SHEET_SLIP_MODE: '\\x1B\\x63\\x30\\x04',// Print ticket on injet slip paper\n      SHEET_ROLL_MODE: '\\x1B\\x63\\x30\\x01', // Print ticket on paper roll\n\n      // Text format\n      TXT_NORMAL: '\\x1b\\x21\\x00',// Normal text\n      TXT_2HEIGHT: '\\x1b\\x21\\x10', // Double height text\n      TXT_2WIDTH: '\\x1b\\x21\\x20', // Double width text\n      TXT_DOUBLE: '\\x1b\\x21\\x30', // Double height & Width\n      TXT_UNDERL_ON: '\\x1b\\x2d\\x01',// Underline font 1-dot ON\n      TXT_UNDERL_OFF: '\\x1b\\x2d\\x00',// Underline font OFF\n      TXT_UNDERL2_ON: '\\x1b\\x2d\\x02',// Underline font 2-dot ON\n      TXT_BOLD_OFF: '\\x1b\\x45\\x00',// Bold font OFF\n      TXT_BOLD_ON: '\\x1b\\x45\\x01',// Bold font ON\n      TXT_FONT_A: '\\x1b\\x4d\\x00',// Font type A\n      TXT_FONT_B: '\\x1b\\x4d\\x01', // Font type B\n      TXT_ALIGN_LT: '\\x1b\\x61\\x00',// Left justification\n      TXT_ALIGN_CT: '\\x1b\\x61\\x01',// Centering\n      TXT_ALIGN_RT: '\\x1b\\x61\\x02',// Right justification\n      TXT_COLOR_BLACK: '\\x1b\\x72\\x00',// Default Color\n      TXT_COLOR_RED: '\\x1b\\x72\\x01',// Alternative Color ( Usually Red )\n      TXT_SMALL_SIZE: '\\x1b\\x4d\\x31',\n      TXT_NORMAL_SIZE: '\\x1b\\x4d\\x30',\n\n      // Text Encoding\n      TXT_ENC_PC437: '\\x1b\\x74\\x00',// PC437 USA\n      TXT_ENC_KATAKANA: '\\x1b\\x74\\x01',// KATAKANA (JAPAN)\n      TXT_ENC_PC850: '\\x1b\\x74\\x02',// PC850 Multilingual\n      TXT_ENC_PC860: '\\x1b\\x74\\x03',// PC860 Portuguese\n      TXT_ENC_PC863: '\\x1b\\x74\\x04',// PC863 Canadian-French\n      TXT_ENC_PC865: '\\x1b\\x74\\x05',// PC865 Nordic\n      TXT_ENC_KANJI6: '\\x1b\\x74\\x06',// One-pass Kanji, Hiragana\n      TXT_ENC_KANJI7: '\\x1b\\x74\\x07',// One-pass Kanji\n      TXT_ENC_KANJI8: '\\x1b\\x74\\x08',// One-pass Kanji\n      TXT_ENC_PC851: '\\x1b\\x74\\x0b',// PC851 Greek\n      TXT_ENC_PC853: '\\x1b\\x74\\x0c',// PC853 Turkish\n      TXT_ENC_PC857: '\\x1b\\x74\\x0d',// PC857 Turkish\n      TXT_ENC_PC737: '\\x1b\\x74\\x0e',// PC737 Greek\n      TXT_ENC_8859_7: '\\x1b\\x74\\x0f',// ISO8859-7 Greek\n      TXT_ENC_WPC1252: '\\x1b\\x74\\x10',// WPC1252\n      TXT_ENC_PC866: '\\x1b\\x74\\x11',// PC866 Cyrillic 2\n      TXT_ENC_PC852: '\\x1b\\x74\\x12',// PC852 Latin2\n      TXT_ENC_PC858: '\\x1b\\x74\\x13',// PC858 Euro\n      TXT_ENC_KU42: '\\x1b\\x74\\x14',// KU42 Thai\n      TXT_ENC_TIS11: '\\x1b\\x74\\x15',// TIS11 Thai\n      TXT_ENC_TIS18: '\\x1b\\x74\\x1a',// TIS18 Thai\n      TXT_ENC_TCVN3: '\\x1b\\x74\\x1e',// TCVN3 Vietnamese\n      TXT_ENC_TCVN3B: '\\x1b\\x74\\x1f',// TCVN3 Vietnamese\n      TXT_ENC_PC720: '\\x1b\\x74\\x20',// PC720 Arabic\n      TXT_ENC_WPC775: '\\x1b\\x74\\x21',// WPC775 Baltic Rim\n      TXT_ENC_PC855: '\\x1b\\x74\\x22',// PC855 Cyrillic\n      TXT_ENC_PC861: '\\x1b\\x74\\x23',// PC861 Icelandic\n      TXT_ENC_PC862: '\\x1b\\x74\\x24',// PC862 Hebrew\n      TXT_ENC_PC864: '\\x1b\\x74\\x25',// PC864 Arabic\n      TXT_ENC_PC869: '\\x1b\\x74\\x26',// PC869 Greek\n      TXT_ENC_PC936: '\\x1C\\x21\\x00',// PC936 GBK(Guobiao Kuozhan)\n      TXT_ENC_8859_2: '\\x1b\\x74\\x27',// ISO8859-2 Latin2\n      TXT_ENC_8859_9: '\\x1b\\x74\\x28',// ISO8859-2 Latin9\n      TXT_ENC_PC1098: '\\x1b\\x74\\x29',// PC1098 Farsi\n      TXT_ENC_PC1118: '\\x1b\\x74\\x2a',// PC1118 Lithuanian\n      TXT_ENC_PC1119: '\\x1b\\x74\\x2b',// PC1119 Lithuanian\n      TXT_ENC_PC1125: '\\x1b\\x74\\x2c',// PC1125 Ukrainian\n      TXT_ENC_WPC1250: '\\x1b\\x74\\x2d',// WPC1250 Latin2\n      TXT_ENC_WPC1251: '\\x1b\\x74\\x2e',// WPC1251 Cyrillic\n      TXT_ENC_WPC1253: '\\x1b\\x74\\x2f',// WPC1253 Greek\n      TXT_ENC_WPC1254: '\\x1b\\x74\\x30',// WPC1254 Turkish\n      TXT_ENC_WPC1255: '\\x1b\\x74\\x31',// WPC1255 Hebrew\n      TXT_ENC_WPC1256: '\\x1b\\x74\\x32',// WPC1256 Arabic\n      TXT_ENC_WPC1257: '\\x1b\\x74\\x33',// WPC1257 Baltic Rim\n      TXT_ENC_WPC1258: '\\x1b\\x74\\x34',// WPC1258 Vietnamese\n      TXT_ENC_KZ1048: '\\x1b\\x74\\x35'// KZ-1048 Kazakhstan\n    };\n\n    var bin2Hex = {\n      0: '\\x00',\n      1: '\\x01',\n      2: '\\x02',\n      3: '\\x03',\n      4: '\\x04',\n      5: '\\x05',\n      6: '\\x06',\n      7: '\\x07',\n      8: '\\x08',\n      9: '\\x09',\n      10: '\\x0A',\n      11: '\\x0B',\n      12: '\\x0C',\n      13: '\\x0D',\n      14: '\\x0E',\n      15: '\\x0F',\n      16: '\\x10',\n      17: '\\x11',\n      18: '\\x12',\n      19: '\\x13',\n      20: '\\x14',\n      21: '\\x15',\n      22: '\\x16',\n      23: '\\x17',\n      24: '\\x18',\n      25: '\\x19',\n      26: '\\x1A',\n      27: '\\x1B',\n      28: '\\x1C',\n      29: '\\x1D',\n      30: '\\x1E',\n      31: '\\x1F',\n      32: '\\x20',\n      33: '\\x21',\n      34: '\\x22',\n      35: '\\x23',\n      36: '\\x24',\n      37: '\\x25',\n      38: '\\x26',\n      39: '\\x27',\n      40: '\\x28',\n      41: '\\x29',\n      42: '\\x2A',\n      43: '\\x2B',\n      44: '\\x2C',\n      45: '\\x2D',\n      46: '\\x2E',\n      47: '\\x2F',\n      48: '\\x30',\n      49: '\\x31',\n      50: '\\x32',\n      51: '\\x33',\n      52: '\\x34',\n      53: '\\x35',\n      54: '\\x36',\n      55: '\\x37',\n      56: '\\x38',\n      57: '\\x39',\n      58: '\\x3A',\n      59: '\\x3B',\n      60: '\\x3C',\n      61: '\\x3D',\n      62: '\\x3E',\n      63: '\\x3F',\n      64: '\\x40',\n      65: '\\x41',\n      66: '\\x42',\n      67: '\\x43',\n      68: '\\x44',\n      69: '\\x45',\n      70: '\\x46',\n      71: '\\x47',\n      72: '\\x48',\n      73: '\\x49',\n      74: '\\x4A',\n      75: '\\x4B',\n      76: '\\x4C',\n      77: '\\x4D',\n      78: '\\x4E',\n      79: '\\x4F',\n      80: '\\x50',\n      81: '\\x51',\n      82: '\\x52',\n      83: '\\x53',\n      84: '\\x54',\n      85: '\\x55',\n      86: '\\x56',\n      87: '\\x57',\n      88: '\\x58',\n      89: '\\x59',\n      90: '\\x5A',\n      91: '\\x5B',\n      92: '\\x5C',\n      93: '\\x5D',\n      94: '\\x5E',\n      95: '\\x5F',\n      96: '\\x60',\n      97: '\\x61',\n      98: '\\x62',\n      99: '\\x63',\n      100: '\\x64',\n      101: '\\x65',\n      102: '\\x66',\n      103: '\\x67',\n      104: '\\x68',\n      105: '\\x69',\n      106: '\\x6A',\n      107: '\\x6B',\n      108: '\\x6C',\n      109: '\\x6D',\n      110: '\\x6E',\n      111: '\\x6F',\n      112: '\\x70',\n      113: '\\x71',\n      114: '\\x72',\n      115: '\\x73',\n      116: '\\x74',\n      117: '\\x75',\n      118: '\\x76',\n      119: '\\x77',\n      120: '\\x78',\n      121: '\\x79',\n      122: '\\x7A',\n      123: '\\x7B',\n      124: '\\x7C',\n      125: '\\x7D',\n      126: '\\x7E',\n      127: '\\x7F',\n      128: '\\x80',\n      129: '\\x81',\n      130: '\\x82',\n      131: '\\x83',\n      132: '\\x84',\n      133: '\\x85',\n      134: '\\x86',\n      135: '\\x87',\n      136: '\\x88',\n      137: '\\x89',\n      138: '\\x8A',\n      139: '\\x8B',\n      140: '\\x8C',\n      141: '\\x8D',\n      142: '\\x8E',\n      143: '\\x8F',\n      144: '\\x90',\n      145: '\\x91',\n      146: '\\x92',\n      147: '\\x93',\n      148: '\\x94',\n      149: '\\x95',\n      150: '\\x96',\n      151: '\\x97',\n      152: '\\x98',\n      153: '\\x99',\n      154: '\\x9A',\n      155: '\\x9B',\n      156: '\\x9C',\n      157: '\\x9D',\n      158: '\\x9E',\n      159: '\\x9F',\n      160: '\\xA0',\n      161: '\\xA1',\n      162: '\\xA2',\n      163: '\\xA3',\n      164: '\\xA4',\n      165: '\\xA5',\n      166: '\\xA6',\n      167: '\\xA7',\n      168: '\\xA8',\n      169: '\\xA9',\n      170: '\\xAA',\n      171: '\\xAB',\n      172: '\\xAC',\n      173: '\\xAD',\n      174: '\\xAE',\n      175: '\\xAF',\n      176: '\\xB0',\n      177: '\\xB1',\n      178: '\\xB2',\n      179: '\\xB3',\n      180: '\\xB4',\n      181: '\\xB5',\n      182: '\\xB6',\n      183: '\\xB7',\n      184: '\\xB8',\n      185: '\\xB9',\n      186: '\\xBA',\n      187: '\\xBB',\n      188: '\\xBC',\n      189: '\\xBD',\n      190: '\\xBE',\n      191: '\\xBF',\n      192: '\\xC0',\n      193: '\\xC1',\n      194: '\\xC2',\n      195: '\\xC3',\n      196: '\\xC4',\n      197: '\\xC5',\n      198: '\\xC6',\n      199: '\\xC7',\n      200: '\\xC8',\n      201: '\\xC9',\n      202: '\\xCA',\n      203: '\\xCB',\n      204: '\\xCC',\n      205: '\\xCD',\n      206: '\\xCE',\n      207: '\\xCF',\n      208: '\\xD0',\n      209: '\\xD1',\n      210: '\\xD2',\n      211: '\\xD3',\n      212: '\\xD4',\n      213: '\\xD5',\n      214: '\\xD6',\n      215: '\\xD7',\n      216: '\\xD8',\n      217: '\\xD9',\n      218: '\\xDA',\n      219: '\\xDB',\n      220: '\\xDC',\n      221: '\\xDD',\n      222: '\\xDE',\n      223: '\\xDF',\n      224: '\\xE0',\n      225: '\\xE1',\n      226: '\\xE2',\n      227: '\\xE3',\n      228: '\\xE4',\n      229: '\\xE5',\n      230: '\\xE6',\n      231: '\\xE7',\n      232: '\\xE8',\n      233: '\\xE9',\n      234: '\\xEA',\n      235: '\\xEB',\n      236: '\\xEC',\n      237: '\\xED',\n      238: '\\xEE',\n      239: '\\xEF',\n      240: '\\xF0',\n      241: '\\xF1',\n      242: '\\xF2',\n      243: '\\xF3',\n      244: '\\xF4',\n      245: '\\xF5',\n      246: '\\xF6',\n      247: '\\xF7',\n      248: '\\xF8',\n      249: '\\xF9',\n      250: '\\xFA',\n      251: '\\xFB',\n      252: '\\xFC',\n      253: '\\xFD',\n      254: '\\xFE',\n      255: '\\xFF'\n    };\n\n    // Methods\n    service.openCashDrawer = openCashDrawer;\n    service.printWidthDiscover = printWidthDiscover;\n    service.printPosOrder = printPosOrder;\n    service.printDevolutionCard = printDevolutionCard;\n    service.printGiftCard = printGiftCard;\n    service.printRegisterActivitySummary = printRegisterActivitySummary;\n    service.printRegisterActivitySoldProductsSummary = printRegisterActivitySoldProductsSummary;\n    service.getTotalTaxByGroup = getTotalTaxByGroup;\n    service.getPrice = getPrice;\n    service.showVariantIdentifier = showVariantIdentifier;\n    service.getVariantIdentifier = getVariantIdentifier;\n    service.getProductIdentifier = getProductIdentifier;\n    service.printVerificationTicket = printVerificationTicket;\n\n    // Functions\n    function price(value) {\n      return $filter('price')(value);\n    }\n\n    function translate(value) {\n      return $filter('translate')(value);\n    }\n\n    function repeatCharacter(character, numberTimes) {\n      if (typeof numberTimes !== 'number' || isNaN(numberTimes)) {\n        return Array(1).join(character);\n      }\n      return Array(numberTimes + 1).join(character);\n    }\n\n    function pullRight(value) {\n      if (WIDTH - value.length > 0)\n        return repeatCharacter(' ', WIDTH - value.length) + value;\n      return value;\n    }\n\n    function centerText(value) {\n      if (value.length > WIDTH)\n        return value;\n      return repeatCharacter(' ', Math.floor((WIDTH - value.length) / 2)) + value;\n    }\n\n    function justify2Text(textLeft, textRight) {\n      if (typeof textRight == 'number') {\n        textRight = textRight.toString();\n      }\n      if (textLeft.length + textRight.length > WIDTH) {\n        return textLeft + '\\n' + repeatCharacter(' ', WIDTH - textRight.length) + textRight;\n      }\n      return textLeft + repeatCharacter(' ', WIDTH - (textLeft ? textLeft.length : 0) - (textRight ? textRight.length : 0)) + textRight;\n    }\n\n    function justify3Text(textLeft, textCenter, textRight) {\n      var spaces = Math.floor((WIDTH - textLeft.length - textRight.length - textCenter.length) / 2);\n      spaces = (textLeft.length + textRight.length + textCenter.length) % 2 == 1 ? spaces + 1 : spaces;\n\n      return textLeft + repeatCharacter(' ', spaces) + textCenter + repeatCharacter(' ', spaces) + textRight;\n    }\n\n    function justify_long_payment_methods(totalPaymentAmounts, result, name) {\n      // If the payment method name is too long, we split it in two or more lines\n      var caracteresPorLinea = WIDTH;\n      var textoFormateado = [];\n      var linea = '';\n\n      name.split(' ').forEach(function(palabra) {\n        if (linea.length + palabra.length + totalPaymentAmounts.total.toString().length + 7 <= caracteresPorLinea) {\n          linea += palabra + ' ';\n        } else {\n          textoFormateado.push(linea.trim());\n          linea = palabra + ' ';\n        }\n      });\n\n      textoFormateado.push(linea.trim());\n\n      textoFormateado.forEach(function(linea) {\n        result.push(justify2Text(linea, '') + '\\n');\n      });\n      var res = result.pop();\n      res = res.trim();\n      result.push(justify2Text(res, price(totalPaymentAmounts.total)) + '\\n');\n      return result;\n    }\n\n    function createParagraphText(value, double_width_text) {\n      var paragraphs = value.split('\\n');\n\n      for (var i = 0; i < paragraphs.length; i++) {\n        paragraphs[i] = paragraphs[i].replace('\\n', '');\n        paragraphs[i] = processParagraphText(paragraphs[i], double_width_text);\n      }\n\n      for (var i = 0; i < paragraphs.length; i++) {\n        if (paragraphs[i] instanceof Array) {\n          paragraphs[i] = paragraphs[i].join('');\n        }\n      }\n\n      return paragraphs.join('');\n    }\n\n    function processParagraphText(value, double_width_text) {\n       double_width_text = typeof double_width_text !== 'undefined' ? double_width_text : false;\n\n      var result = [];\n      var line = '';\n      var width = WIDTH;\n      if (double_width_text) {\n        width = DOUBLE_WIDTH_TEXT_WIDTH;\n      }\n\n      value.split(' ').forEach(function(word) {\n        if (line.length + word.length + 1 > width) {\n          line += '\\n';\n          result.push(line);\n\n          line = '';\n        }\n        line += word + ' ';\n      });\n      result.push(line);\n      result.push('\\n');\n\n      return result;\n    }\n\n    function createParagraphLongText(value, double_width_text) {\n      double_width_text = typeof double_width_text !== 'undefined' ? double_width_text : false;\n\n      var result = [];\n      var line = '';\n      var width = WIDTH;\n      if (double_width_text) {\n        width = DOUBLE_WIDTH_TEXT_WIDTH;\n      }\n\n      value.split(' ').forEach(function(word) {\n        if (line.length + word.length + 1 > width) {\n          line += '\\n';\n          result.push(line);\n\n          line = '';\n        }\n        line += word + ' ';\n      });\n      result.push(line);\n      result.push('\\n');\n      if (result[0].includes('\\n')) {\n        result.shift();\n      }\n      result[0] = '  ' + result[0];\n      return result;\n    }\n\n    /**\n     * Returns the prices applying the discount and the amount\n     * @param posOrderProductVariant\n     * @param inclTax\n     */\n    function getPrice(posOrderProductVariant, inclTax, includeReturns) {\n      // The custom_price_incl_tax may be 0 in some cases, only null value means no custom_price was set\n      var amount = posOrderProductVariant.amount;\n      if (includeReturns) {\n        amount = (posOrderProductVariant.amount - posOrderProductVariant.returned_amount - posOrderProductVariant.canceled_amount);\n      }\n      if (posOrderProductVariant.custom_price_incl_tax !== null) {\n        if (inclTax) {\n          return amount * posOrderProductVariant.custom_price_incl_tax;\n        }\n        return amount * posOrderProductVariant.custom_price_excl_tax;\n      }\n      if (posOrderProductVariant.discount) {\n        if (inclTax) {\n          return amount * posOrderProductVariant.discount_price_incl_tax;\n        }\n        return amount * posOrderProductVariant.discount_price_excl_tax;\n      }\n      if (inclTax) {\n        return amount * posOrderProductVariant.price_incl_tax;\n      }\n      return amount * posOrderProductVariant.price_excl_tax;\n    }\n\n    /**\n     * Returns the total tax of the given sale\n     * @param groupedProductVariants\n     * @param discountAsPercentage\n     * @returns {*}\n     */\n    function getTotalTaxByGroup(groupedProductVariants, discountAsPercentage) {\n      var totalExcTaxByTax = 0;\n\n      if (groupedProductVariants) {\n        groupedProductVariants.forEach(function(productVariant) {\n          totalExcTaxByTax += productVariant.getTotal(true, true) - productVariant.getSubtotal(true, true);\n        });\n      }\n\n      if (discountAsPercentage) {\n        totalExcTaxByTax = totalExcTaxByTax * (1 - discountAsPercentage);\n      }\n      return price(totalExcTaxByTax);\n    }\n\n    function createPosOrderHeader(posOrder, register, extraTitle, site) {\n\n      var result = [\n        commands.HW_INIT,\n        commands.TXT_ENC_WPC1252\n      ];\n\n      var ticket_configuration_object = register ?\n        register.warehouse.ticket_configuration_object ?\n          register.warehouse.ticket_configuration_object :\n          posOrder.source_warehouse_instance.ticket_configuration_object :\n        site.ticket_configuration_instance;\n\n      var location = register ?\n        register.warehouse :\n        posOrder.source_warehouse_instance ?\n          posOrder.source_warehouse_instance :\n          posOrder.source_warehouse;\n      if (ticket_configuration_object && ticket_configuration_object.print_logo && ticket_configuration_object.logo_b64) {\n        result.push(commands.TXT_ALIGN_CT);\n        result.push({\n          type: 'raw', format: 'image', data: 'data:image/png;base64,' + ticket_configuration_object.logo_b64,\n          options: { language: 'ESCPOS', dotDensity: 'double' }\n        });\n      }\n      else {\n        result.push(commands.TXT_DOUBLE);\n        result.push(commands.TXT_ALIGN_CT);\n        result.push({\n          type: 'raw',\n          format: 'image',\n          data: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=',\n          options: { language: 'ESCPOS', dotDensity: 'double' }\n        });\n        if (ticket_configuration_object && ticket_configuration_object.name) {\n          result = result.concat(createParagraphText(ticket_configuration_object.name, true));\n        } else {\n          result = result.concat(createParagraphText(Session.company.name, true));\n        }\n\n        result.push(commands.TXT_NORMAL);\n      }\n\n      result.push('\\n');\n\n      // Warehouse full address\n      var mainAddress = $filter('location')(location);\n      result = result.concat(createParagraphText(mainAddress));\n      // Warehouse telephone\n      if (location.phone) {\n        result.push(translate('SALES.TEL_') + ' ' + location.phone + '\\n');\n      }\n\n      // Fiscal address\n      var fiscalAddress = '';\n      if (location.fiscal_address_instance) {\n        // Warehouse data\n        result.push('\\n');\n        result.push(location.fiscal_address_instance.legal_name + '\\n');\n        fiscalAddress = $filter('location')(location.fiscal_address_instance);\n        if (mainAddress !== fiscalAddress) {\n          result = result.concat(createParagraphText(fiscalAddress));\n        }\n        result.push(translate('SALES.VAT') + ': ' + location.fiscal_address_instance.vat + '\\n');\n      } else {\n        // Company data\n        result.push('\\n');\n        result.push(Session.company.legal_name + '\\n');\n        fiscalAddress = $filter('location')(Session.company);\n        if (mainAddress !== fiscalAddress) {\n          result = result.concat(createParagraphText(fiscalAddress));\n        }\n        result.push(translate('SALES.VAT') + ': ' + Session.company.vat + '\\n');\n      }\n\n      // PosOrder creation date\n      result.push('\\n');\n      result.push(commands.TXT_ALIGN_LT);\n\n      posOrder.created_at = new Date(posOrder.created_at);\n      result.push(Utils.dateToLocalString(posOrder.created_at) + '\\n');\n\n      // PosOrder autocode and register code\n      result.push(translate('SALES.SIMPLIFIED_INVOICE') + ': #' + posOrder.autocode + '\\n');\n      if (register) {\n        result.push(translate('SALES.REGISTER') + ': ' + register.code + '\\n');\n        if (posOrder.created_by_instance) {\n          result.push(translate('SALES.ATTENDED_BY') + ': ' + posOrder.created_by_instance.first_name + '\\n');\n        }\n        if (posOrder.customer_instance) {\n          result.push(translate('SALES.CUSTOMER') + ': ' + $filter('personname')(posOrder.customer_instance) + '\\n');\n        }\n      } else {\n        result.push(translate('SALES.REGISTER') + ': ' + site.url + '\\n');\n        if (posOrder.customer_instance && posOrder.customer_instance.email) {\n          result.push(translate('SALES.CUSTOMER') + ': ' + $filter('personname')(posOrder.customer_instance) + '\\n');\n        }\n      }\n\n      if (extraTitle) {\n        result.push(commands.TXT_DOUBLE);\n        result.push('\\n\\n\\n');\n        result.push(commands.TXT_ALIGN_CT);\n        result.push(translate(extraTitle));\n        result.push(commands.TXT_ALIGN_LT);\n        result.push('\\n');\n        result.push(commands.TXT_NORMAL);\n      }\n\n      result.push('\\n');\n      return result;\n    }\n\n    function createHeaderByFactory(ticketConfiguration, extraTitle) {\n      var result = initResult();\n      result = addLogo(result, ticketConfiguration);\n      if (extraTitle) {\n        result = addExtraTitle(result, extraTitle);\n      }\n      result = addEmptyLine(result);\n      return result\n    }\n\n    function createGiftCardBody(giftCard, currency) {\n      var ticket = [];\n      ticket.push(translate('SALES.VALUE') + ': ' + price(giftCard.amountInclTax) + ' ' + currency + '\\n');\n      ticket.push(translate('SALES.NUMBER') + ': ' + giftCard.barcode + '\\n');\n      return ticket;\n    }\n\n    function addExtraTitle(result, extraTitle) {\n      result.push(commands.TXT_DOUBLE);\n      result.push('\\n\\n\\n');\n      result.push(commands.TXT_ALIGN_CT);\n      result.push(translate(extraTitle));\n      result.push(commands.TXT_ALIGN_LT);\n      result.push('\\n');\n      result.push(commands.TXT_NORMAL);\n      return result\n    }\n\n    function addEmptyLine(result) {\n      result.push('\\n');\n      return result;\n    }\n\n    function initResult() {\n      return [\n        commands.HW_INIT,\n        commands.TXT_ENC_WPC1252\n      ];\n    }\n\n    function addLogo(result, ticketConfiguration) {\n      if (ticketConfiguration && ticketConfiguration.printLogo && ticketConfiguration.logoBase64) {\n        result.push(commands.TXT_ALIGN_CT);\n        result.push({\n          type: 'raw', format: 'image', data: 'data:image/png;base64,' + ticketConfiguration.logoBase64,\n          options: {language: 'ESCPOS', dotDensity: 'double'}\n        });\n      } else {\n        result.push(commands.TXT_DOUBLE);\n        result.push(commands.TXT_ALIGN_CT);\n        result.push({\n          type: 'raw',\n          format: 'image',\n          data: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=',\n          options: {language: 'ESCPOS', dotDensity: 'double'}\n        });\n        if (ticketConfiguration && ticketConfiguration.name) {\n          result = result.concat(createParagraphText(ticketConfiguration.name, true));\n        } else {\n          result = result.concat(createParagraphText(Session.company.name, true));\n        }\n        result.push(commands.TXT_NORMAL);\n      }\n      result = addEmptyLine(result);\n      return result;\n    }\n\n    function addBarcode(result, barcode, ticketConfiguration) {\n      if (ticketConfiguration.barcodeDesign) {\n        var canvas = document.createElement('canvas');\n        var barcodeOptions = {\n          format: 'CODE128',\n          displayValue: true,\n          fontSize: 28,\n          font: 'Sans-serif'\n        };\n\n        if (ticketConfiguration.barcodeDesign === BARCODE_DESIGN_TYPES.SMALL) {\n          barcodeOptions.height = 25;  // ~ 5-7mm\n        }\n\n        JsBarcode(canvas, barcode, barcodeOptions);\n        var base64 = canvas.toDataURL('image/png');\n        result.push(commands.TXT_ALIGN_CT);\n        result.push({\n          type: 'raw',\n          format: 'image',\n          data: base64,\n          options: {language: 'ESCPOS', dotDensity: 'double'},\n          print_barcode: true,\n          barcode_design: ticketConfiguration.barcodeDesign\n        });\n        result.push('\\n');\n        result.push(commands.TXT_ALIGN_LT);\n      }\n      return result;\n    }\n\n    function addTicketConfigurationFooter(result, ticketConfiguration, isDevolution) {\n      result.push(commands.TXT_ALIGN_CT);\n      if (ticketConfiguration.footer) {\n        result = result.concat(createParagraphText(ticketConfiguration.footer));\n        result.push('\\n');\n      } else if (ticketConfiguration.footer_devolution_card && isDevolution) {\n        result = result.concat(createParagraphText(ticketConfiguration.footerDevolutionCard));\n        result.push('\\n');\n      }\n      if (ticketConfiguration.closure) {\n        result = result.concat(createParagraphText(ticketConfiguration.closure));\n        result.push('\\n');\n      }\n      return result;\n    }\n\n    function createFooterByFactory(barcode, ticketConfiguration, isDevolution) {\n      var result = [];\n      result = addBarcode(result, barcode, ticketConfiguration);\n      result = addTicketConfigurationFooter(result, ticketConfiguration, isDevolution)\n      result.push(commands.CUSTOM_PAPER_FULL_CUT);\n      return result;\n    }\n\n    function createFooter(barcode, ticket_configuration, isDevolution, kubibaiTicketData) {\n      var result = [];\n\n      if (ticket_configuration.barcode_design) {\n        var canvas = document.createElement('canvas');\n        var barcodeOptions = {\n          format: 'CODE128',\n          displayValue: true,\n          fontSize: 28,\n          font: 'Sans-serif'\n        };\n\n        if (ticket_configuration.barcode_design === BARCODE_DESIGN_TYPES.SMALL) {\n          barcodeOptions.height = 25;  // ~ 5-7mm\n        }\n\n        JsBarcode(canvas, barcode, barcodeOptions);\n        var base64 = canvas.toDataURL('image/png');\n        result.push(commands.TXT_ALIGN_CT);\n        result.push({\n          type: 'raw',\n          format: 'image',\n          data: base64,\n          options: { language: 'ESCPOS', dotDensity: 'double' },\n          print_barcode: true,\n          barcode_design: ticket_configuration.barcode_design\n        });\n        result.push('\\n');\n        result.push(commands.TXT_ALIGN_LT);\n      }\n\n      result.push(commands.TXT_ALIGN_CT);\n\n      if (isDevolution && ticket_configuration.footer_devolution_card) {\n        result = result.concat(createParagraphText(ticket_configuration.footer_devolution_card));\n        result.push('\\n');\n      } else if (ticket_configuration.footer) {\n        result = result.concat(createParagraphText(ticket_configuration.footer));\n        result.push('\\n');\n      }\n\n      if (ticket_configuration.closure) {\n        result = result.concat(createParagraphText(ticket_configuration.closure));\n        result.push('\\n');\n      }\n\n      if (kubibaiTicketData != null) {\n        result.push(commands.TXT_ALIGN_CT);\n        result.push(kubibaiTicketData.tbai_code + '\\n');\n        result.push({\n          type: 'raw', format: 'image', data: 'data:image/png;base64,' + kubibaiTicketData.batuz_qr_image,\n          options: { language: 'ESCPOS', dotDensity: 'double' }\n        });\n      }\n\n      result.push(commands.CUSTOM_PAPER_FULL_CUT);\n\n      return result;\n    }\n\n    function printWidthDiscover() {\n      var result = [\n        commands.HW_INIT,\n        commands.TXT_ENC_WPC1252\n      ];\n\n      result.push(translate('REGISTERS.TICKET_WIDTH_TEST') + '\\n');\n      result.push('\\n');\n\n      for (var i = 40; i < 64; ++i) {\n        result.push(translate('REGISTERS.TICKET_WIDTH_TEST') + ' ' + i + ':\\n');\n        result.push(repeatCharacter('-', i) + '\\n');\n      }\n\n      result.push(commands.CUSTOM_PAPER_FULL_CUT);\n\n      return result;\n    }\n\n    function pushOrGetPrice(amount, posOrderProductVariant, plainTicket, returnPrice) {\n      var priceText;\n\n      var push = typeof returnPrice === 'undefined' || returnPrice === false;\n\n      if (amount > 1 || amount < -1) {\n        if (posOrderProductVariant.custom_price_incl_tax !== null) {\n          var price_diff = posOrderProductVariant.custom_price_incl_tax - posOrderProductVariant.price_incl_tax;\n          if (price_diff < 0 && posOrderProductVariant.custom_price_incl_tax >= 0) {\n            priceText = amount + ' X (' + price(posOrderProductVariant.price_incl_tax) + ' - ' + translate('SALES.DISCOUNT_ABBR') + ' ' + price(Math.abs(price_diff)) + ')  ' + price(posOrderProductVariant.custom_price_incl_tax * posOrderProductVariant.amount);\n          } else {\n            priceText = amount + ' X ' + price(posOrderProductVariant.custom_price_incl_tax) + '  ' + price(posOrderProductVariant.custom_price_incl_tax * posOrderProductVariant.amount);\n          }\n\n          if (push)\n            plainTicket.push(pullRight(priceText));\n\n        } else if (posOrderProductVariant.discount) {\n          priceText = amount + ' X (' + price(posOrderProductVariant.price_incl_tax) + ' - ' + price(posOrderProductVariant.discount) + '%)  ' + price(posOrderProductVariant.discount_price_incl_tax * posOrderProductVariant.amount);\n          if (push)\n            plainTicket.push(pullRight(priceText));\n        } else {\n          priceText = amount + ' X ' + price(posOrderProductVariant.price_incl_tax) + '  ' + price(posOrderProductVariant.price_incl_tax * posOrderProductVariant.amount);\n          if (push)\n            plainTicket.push(pullRight(priceText));\n        }\n      } else {\n        if (posOrderProductVariant.custom_price_incl_tax !== null) {\n          var price_diff = posOrderProductVariant.custom_price_incl_tax - posOrderProductVariant.price_incl_tax;\n\n          if (price_diff < 0) {\n            priceText = price(posOrderProductVariant.price_incl_tax) + ' - ' + translate('SALES.DISCOUNT_ABBR') + ' ' + price(Math.abs(price_diff)) + '  ' + price(posOrderProductVariant.custom_price_incl_tax * posOrderProductVariant.amount);\n          } else {\n            priceText = price(posOrderProductVariant.custom_price_incl_tax * amount);\n          }\n          if (push)\n            plainTicket.push(pullRight(priceText));\n        } else if (posOrderProductVariant.discount) {\n          priceText = price(posOrderProductVariant.price_incl_tax) + ' - ' + price(posOrderProductVariant.discount) + '%  ' + price(posOrderProductVariant.discount_price_incl_tax * posOrderProductVariant.amount);\n          if (push)\n            plainTicket.push(pullRight(priceText));\n        } else {\n          priceText = price(posOrderProductVariant.price_incl_tax * amount);\n          if (push)\n            plainTicket.push(pullRight(priceText));\n        }\n      }\n\n      return !push ? priceText : plainTicket;\n    }\n\n    function printPosOrder(posOrder, register, openDrawer, isGiftTicket, site) {\n      WIDTH = register ? register.printer_characters_per_line || WIDTH : WIDTH;\n\n      // Join the taxes to generate the tax resume\n      if (!posOrder.taxes && !isGiftTicket) {\n        posOrder.taxes = {};\n        posOrder.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n          if (!posOrder.taxes[posOrderProductVariant.tax])\n            posOrder.taxes[posOrderProductVariant.tax] = [];\n          posOrder.taxes[posOrderProductVariant.tax].push(posOrderProductVariant);\n        });\n      }\n\n      var plainTicket = [];\n\n      if (openDrawer) {\n        plainTicket.push(getCashDrawerCharacter(register));\n      }\n\n      var ticket_configuration = register ?\n        register.warehouse.ticket_configuration_object ?\n          register.warehouse.ticket_configuration_object :\n          posOrder.source_warehouse_instance.ticket_configuration_object :\n        site.ticket_configuration_instance;\n\n      plainTicket = plainTicket.concat(createPosOrderHeader(posOrder, register, isGiftTicket ? 'SALES.GIFT_TICKET' : null, site));\n\n      // Products\n      plainTicket.push(repeatCharacter('-', WIDTH) + '\\n');\n      posOrder.pos_order_product_variants.filter(function(posOrderProductVariant) {\n        if (posOrderProductVariant.amount_less_returns === 0) {\n          return false;\n        }\n        return !posOrderProductVariant.consumed_gift_card && !posOrderProductVariant.charged_gift_card ||\n          (posOrderProductVariant.charged_gift_card && !posOrderProductVariant.charged_gift_card_is_voucher);\n      }).forEach(function(posOrderProductVariant) {\n        // Amount and product name and variant\n        var amount = posOrderProductVariant.amount - posOrderProductVariant.canceled_amount;\n        if (amount !== 0) {\n          if (!isGiftTicket) {\n            // PRODUCT IDENTIFIER\n            var productIdentifier;\n            if (posOrderProductVariant.gift_card_code) {\n              productIdentifier = amount + ' ' + getProductIdentifier(ticket_configuration.product_identifier, posOrderProductVariant) + ' (' + posOrderProductVariant.gift_card_code + ')';\n            } else {\n              productIdentifier = amount + ' ' + getProductIdentifier(ticket_configuration.product_identifier, posOrderProductVariant);\n            }\n\n            if (inlineProductAndPrice(ticket_configuration.product_price_position)) {\n              // Adding price to the product identifier\n              var priceString = pushOrGetPrice(amount, posOrderProductVariant, plainTicket, true);\n              var availableSpaceForName = WIDTH - priceString.length - 1;\n              if (productIdentifier.length > availableSpaceForName) {\n                productIdentifier = productIdentifier.substring(0, availableSpaceForName - 3) + '...';\n                productIdentifier = productIdentifier + ' ' + priceString;\n              } else {\n                var spacesNeeded = WIDTH - productIdentifier.length - priceString.length;\n                var spaces = ' '.repeat(spacesNeeded);\n                productIdentifier = productIdentifier + spaces + priceString;\n              }\n              plainTicket.push(productIdentifier + '\\n');\n            } else {\n              plainTicket = plainTicket.concat(createParagraphText(productIdentifier));\n            }\n\n            // VARIANT IDENTIFIER\n            if (showVariantIdentifier(ticket_configuration.variant_identifier)) {\n              plainTicket = plainTicket.concat(createParagraphText('  ' + commands.TXT_SMALL_SIZE + getVariantIdentifier(ticket_configuration.variant_identifier, posOrderProductVariant) + commands.TXT_NORMAL_SIZE));\n              if (posOrderProductVariant.uid_stock_uid) {\n                plainTicket = plainTicket.concat(createParagraphLongText('  ' + commands.TXT_SMALL_SIZE + posOrderProductVariant.uid_stock_uid + commands.TXT_NORMAL_SIZE));\n              }\n            }\n            // PROMOTION NAME\n            if (posOrderProductVariant.promotion_name) {\n              plainTicket.push('  ' + commands.TXT_SMALL_SIZE + (posOrderProductVariant.promotion_public_name || posOrderProductVariant.promotion_name) + commands.TXT_NORMAL_SIZE + '\\n');\n            }\n\n            // PRODUCT PRICE\n            if (!inlineProductAndPrice(ticket_configuration.product_price_position)) {\n              plainTicket = pushOrGetPrice(amount, posOrderProductVariant, plainTicket);\n              plainTicket.push('\\n');\n            }\n\n          } else if (posOrderProductVariant.selected) {\n            plainTicket.push(posOrderProductVariant.gift_amount + ' ' + posOrderProductVariant.product_name + '\\n');\n            plainTicket.push('  ' + commands.TXT_SMALL_SIZE + posOrderProductVariant.product_variant_color_name + '-' + posOrderProductVariant.product_variant_size_name + commands.TXT_NORMAL_SIZE + '\\n');\n            plainTicket.push('\\n');\n          }\n        }\n      });\n\n      plainTicket.push('\\n');\n\n      if (!isGiftTicket) {\n        // Consumed gift cards\n        if (posOrder.is_old_devolution_cards) {\n          posOrder.devolution_cards.forEach(function(devolutionCard) {\n            var translate_gift_card =  translate('SALES.VOUCHER');\n            plainTicket.push(justify2Text(translate_gift_card + ' ' + devolutionCard.barcode, price(devolutionCard.amount)) + '\\n');\n          });\n        } else {\n          posOrder.pos_order_product_variants.filter(function(posOrderProductVariant) {\n            return !!posOrderProductVariant.consumed_gift_card;\n          }).forEach(function(posOrderProductVariant) {\n            var translate_gift_card = posOrderProductVariant.consumed_gift_card_is_voucher ? translate('SALES.VOUCHER') : translate('SALES.GIFT_CARD');\n            var pv_price = posOrderProductVariant.custom_price_incl_tax ? posOrderProductVariant.custom_price_incl_tax : posOrderProductVariant.price_incl_tax;\n            plainTicket.push(justify2Text(translate_gift_card + ' ' + posOrderProductVariant.gift_card_code, price(pv_price)) + '\\n');\n          });\n        }\n\n        // Balance Discount\n        var discountAsPercentage = null;\n        if (posOrder.balance_discount !== undefined && posOrder.balance_discount !== null && posOrder.balance_discount !== 0 && !posOrder.is_devolution) {\n          discountAsPercentage = posOrder.balance_discount / (posOrder.balance_discount + parseFloat(posOrder.total));\n        }\n\n        if (posOrder.balance_discount !== undefined && posOrder.balance_discount !== null && posOrder.balance_discount !== 0 && !posOrder.is_devolution) {\n          var total_with_disc = parseFloat(posOrder.balance_discount) + parseFloat(posOrder.total);\n          plainTicket.push(justify2Text(translate('SALES.TOTAL_WITHOUT_DISCOUNT'), price(total_with_disc)) + '\\n');\n          plainTicket.push(justify2Text(translate('SALES.APPLIED_BALANCE'), price(-posOrder.balance_discount)) + '\\n');\n          plainTicket.push(repeatCharacter('-', WIDTH) + '\\n');\n        }\n\n        plainTicket.push(justify2Text(translate('SALES.SUBTOTAL'), price(posOrder.subtotal)) + '\\n');\n\n        for (var taxId in posOrder.taxes) {\n          // Tax type percent amount\n          plainTicket.push(justify2Text(translate('SALES.TAX') + ' ' + posOrder.taxes[taxId][0].tax_percent_value + '%', getTotalTaxByGroup(posOrder.taxes[taxId], discountAsPercentage)) + '\\n');\n        }\n\n        // Total taxes\n        if (posOrder.taxes.length > 1) {\n          plainTicket.push(justify2Text(translate('SALES.TOTAL_TAXES'), price(posOrder.total_taxes)) + '\\n');\n        }\n        plainTicket.push(repeatCharacter('-', WIDTH) + '\\n');\n\n        // Total\n        if (ticket_configuration.total_design === TOTAL_DESIGN_TYPES['BIG']) {\n          plainTicket.push(commands.TXT_2HEIGHT);\n        }\n        plainTicket.push(commands.TXT_BOLD_ON);\n        plainTicket.push(justify2Text(translate('SALES.TOTAL') + ' ' + posOrder.currency, price(posOrder.total)) + '\\n\\n');\n        plainTicket.push(commands.TXT_BOLD_OFF);\n\n        if (ticket_configuration.total_design === TOTAL_DESIGN_TYPES['BIG']) {\n          plainTicket.push(commands.TXT_NORMAL);\n        }\n        // Payment methods\n        posOrder.pos_order_payment_methods.forEach(function(posOrderPaymentMethod) {\n          plainTicket.push(justify2Text(posOrderPaymentMethod.payment_method_instance.name, price(posOrderPaymentMethod.given_amount)) + '\\n');\n        });\n\n        // Charged gift cards as voucher\n        if (posOrder.is_old_generated_devolution_cards && posOrder.generated_devolution_card) {\n          plainTicket.push(justify2Text(translate('SALES.REFUND_BY_DEVOLUTION_CARD'), price(posOrder.generated_devolution_card.amount * -1)) + '\\n');\n        } else {\n          posOrder.pos_order_product_variants.filter(function(posOrderProductVariant) {\n            return posOrderProductVariant.charged_gift_card && posOrderProductVariant.charged_gift_card_is_voucher;\n          }).forEach(function(posOrderProductVariant) {\n            plainTicket.push(justify2Text(translate('SALES.REFUND_BY_DEVOLUTION_CARD') + ' ' + posOrderProductVariant.gift_card_code, price(posOrderProductVariant.total)) + '\\n');\n          });\n        }\n\n        // Balance\n        if (posOrder.output_amount !== null) {\n          plainTicket.push(justify2Text(translate('SALES.BALANCE'), price(posOrder.output_amount)) + '\\n');\n        }\n      }\n\n      // Pending amount\n      if (!isGiftTicket) {\n        var pending = Utils.posOrderPendingAmount(posOrder);\n        if (pending > 0) {\n          plainTicket.push(justify2Text(translate('SALES.PENDING'), price(pending)) + '\\n');\n        }\n      }\n\n      plainTicket.push('\\n');\n\n      return plainTicket.concat(createFooter(posOrder.barcode, ticket_configuration, false, posOrder.kubibai_ticket_data));\n    }\n\n    function getSkuIdentifier(posOrderProductVariant) {\n      if (posOrderProductVariant.sku) {\n        return posOrderProductVariant.sku;\n      } else if (posOrderProductVariant.barcode) {\n        return posOrderProductVariant.barcode;\n      } else {\n        return posOrderProductVariant.product_variant_color_name + ' - ' + posOrderProductVariant.product_variant_size_name;\n      }\n    }\n\n    function getProductIdentifier(product_identifier_type, posOrderProductVariant) {\n      if (product_identifier_type === PRODUCT_IDENTIFIER_TYPES['NAME_IDENTIFIER']) {\n        return posOrderProductVariant.product_name;\n      } else if (product_identifier_type === PRODUCT_IDENTIFIER_TYPES['CODE_IDENTIFIER']) {\n        return posOrderProductVariant.product_code;\n      } else if (product_identifier_type === PRODUCT_IDENTIFIER_TYPES['NAME_CODE_IDENTIFIER']) {\n        return posOrderProductVariant.product_name + ' - ' + posOrderProductVariant.product_code;\n      } else if (product_identifier_type === PRODUCT_IDENTIFIER_TYPES['CODE_NAME_IDENTIFIER']) {\n        return posOrderProductVariant.product_code + ' - ' + posOrderProductVariant.product_name;\n      } else {\n        return posOrderProductVariant.product_name;\n      }\n    }\n\n    function getVariantIdentifier(variant_identifier_type, posOrderProductVariant, isBundle) {\n      if (variant_identifier_type === VARIANT_IDENTIFIER_TYPES['COLOR_AND_SIZE_IDENTIFIER']) {\n        if (isBundle){\n          return posOrderProductVariant.color_name + ' - ' + posOrderProductVariant.size_name;\n        }\n        return posOrderProductVariant.product_variant_color_name + ' - ' + posOrderProductVariant.product_variant_size_name;\n      } else if (variant_identifier_type === VARIANT_IDENTIFIER_TYPES['SKU_IDENTIFIER']) {\n        return getSkuIdentifier(posOrderProductVariant);\n      } else {\n        if (isBundle){\n          return posOrderProductVariant.color_name + ' - ' + posOrderProductVariant.size_name;\n        }\n        return posOrderProductVariant.product_variant_color_name + ' - ' + posOrderProductVariant.product_variant_size_name;\n      }\n    }\n\n    function showVariantIdentifier(variant_identifier_type) {\n      return variant_identifier_type !== VARIANT_IDENTIFIER_TYPES['DO_NOT_SHOW'];\n    }\n\n    function inlineProductAndPrice(product_price_position) {\n      return product_price_position === PRODUCT_PRICE_POSITION_TYPES['SAME_LINE_AS_PRODUCT'];\n    }\n\n    function printGiftCard(giftCard, register) {\n      var ticketConfiguration = register.warehouse.ticketConfiguration;\n      WIDTH = register ? register.printerCharactersPerLine || WIDTH : WIDTH;\n      var ticket = [];\n      ticket = ticket.concat(createHeaderByFactory(ticketConfiguration, 'SALES.VOUCHER'));\n      ticket = ticket.concat(createGiftCardBody(giftCard, register.currency));\n      return ticket.concat(createFooterByFactory(giftCard.barcode, ticketConfiguration, true));\n    }\n\n    function printDevolutionCard(posOrder, register, site) {\n      WIDTH = register ? register.printer_characters_per_line || WIDTH : WIDTH;\n      var ticket = [];\n\n      ticket = ticket.concat(createPosOrderHeader(posOrder, register, 'SALES.VOUCHER', site));\n\n      var generated_devolution_card = null;\n      if (Array.isArray(posOrder.generated_devolution_card)) {\n        generated_devolution_card = posOrder.generated_devolution_card[posOrder.generated_devolution_card.length - 1];\n      } else {\n        generated_devolution_card = posOrder.generated_devolution_card;\n      }\n      if (posOrder.is_old_generated_devolution_cards) {\n        ticket.push(translate('SALES.VALUE') + ': ' + price(generated_devolution_card.actual_gift_card_amount) + ' ' + posOrder.currency + '\\n');\n      } else {\n        ticket.push(translate('SALES.VALUE') + ': ' + price(generated_devolution_card.amount) + ' ' + posOrder.currency + '\\n');\n      }\n      ticket.push(translate('SALES.NUMBER') + ': ' + generated_devolution_card.barcode + '\\n');\n\n      var ticket_configuration = register ?\n        register.warehouse.ticket_configuration_object ?\n          register.warehouse.ticket_configuration_object :\n          posOrder.source_warehouse_instance.ticket_configuration_object :\n        site.ticket_configuration_instance;\n\n      posOrder.is_devolution = true;\n      return ticket.concat(createFooter(generated_devolution_card.barcode, ticket_configuration, true));\n    }\n\n    function createRegisterActivityHeader(registerActivity, title) {\n\n      var result = [\n        commands.HW_INIT,\n        commands.TXT_ENC_WPC1252\n      ];\n\n      if (registerActivity.register.warehouse.ticket_configuration_object.logo_b64 && registerActivity.register.warehouse.ticket_configuration_object.print_logo) {\n        result.push({\n          type: 'raw',\n          format: 'image',\n          data: 'data:image/png;base64,' + registerActivity.register.warehouse.ticket_configuration_object.logo_b64,\n          options: { language: 'ESCPOS', dotDensity: 'double' }\n        });\n      } else {\n        result.push(registerActivity.register.warehouse.name);\n      }\n\n      result.push('\\n');\n      result.push('\\n');\n      // Warehouse full address\n      result.push(centerText(registerActivity.register.warehouse.address_1 + ', ' + registerActivity.register.warehouse.zip + ', ' + registerActivity.register.warehouse.city + '\\n'));\n      // Warehouse telephone\n      result.push(centerText(translate('SALES.TEL_') + ' ' + registerActivity.register.warehouse.phone + '\\n'));\n      // PosOrder creation date\n      result.push(centerText(moment(new Date()).format('MMMM Do YYYY, h:mm:ss a') + '\\n'));\n\n      result.push('\\n');\n\n      result.push(commands.TXT_DOUBLE);\n      result.push(commands.TXT_ALIGN_CT);\n      result.push(title);\n      result.push(commands.TXT_ALIGN_LT);\n      result.push(commands.TXT_NORMAL);\n\n      result.push('\\n');\n      result.push('\\n');\n\n      return result;\n    }\n\n    function createRegisterActivitySummaryHeader(registerActivity) {\n      return createRegisterActivityHeader(registerActivity, translate('REGISTER_CLOSURE.REGISTER_ACTIVITY_SUMMARY'));\n    }\n\n    function createRegisterActivitySoldProductsHeader(registerActivity) {\n      return createRegisterActivityHeader(registerActivity, translate('REGISTER_CLOSURE.SOLD_PRODUCTS'));\n    }\n\n    function createRegisterActivitySummaryMainInformation(registerActivity) {\n      var result = [];\n\n      result.push(translate('REGISTER_CLOSURE.MAIN_INFORMATION') + '\\n');\n      result.push(repeatCharacter('-', WIDTH) + '\\n');\n\n      result.push(justify2Text(translate('REGISTERS.REGISTER'), registerActivity.register.code) + '\\n');\n      result.push(justify2Text(translate('REGISTERS.OPENED_AT'), $filter('date')(registerActivity.opened_at, 'medium')) + '\\n');\n      result.push(justify2Text(translate('REGISTER_CLOSURE.OPENED_BY'), $filter('personname')(registerActivity.opened_by)) + '\\n');\n      if (registerActivity.is_closed) {\n        result.push(justify2Text(translate('REGISTERS.CLOSED_AT'), $filter('date')(registerActivity.closed_at, 'medium')) + '\\n');\n        result.push(justify2Text(translate('REGISTER_CLOSURE.CLOSED_BY'), $filter('personname')(registerActivity.closed_by)) + '\\n');\n      }\n\n      result.push('\\n');\n\n      return result;\n    }\n\n    function createRegisterActivitySummaryPayments(registerActivity, paymentMethodsDict) {\n      var result = [];\n\n      result.push(translate('REGISTER_CLOSURE.PAYMENTS') + '\\n');\n      result.push(repeatCharacter('-', WIDTH) + '\\n');\n\n      registerActivity.total_payment_amounts = registerActivity.total_payment_amounts.sort(function(a, b) {\n        return a.payment_method - b.payment_method;\n      });\n\n      registerActivity.total_payment_amounts.forEach(function(totalPaymentAmounts) {\n        var name = paymentMethodsDict[totalPaymentAmounts.payment_method].name;\n        if (name.length >= WIDTH) {\n          result = justify_long_payment_methods(totalPaymentAmounts, result, name);\n        } else {\n          result.push(justify2Text(paymentMethodsDict[totalPaymentAmounts.payment_method].name, price(totalPaymentAmounts.total)) + '\\n');\n        }\n      });\n\n      result.push(justify2Text(translate('REGISTERS.USED_VOUCHERS'), price(registerActivity.total_used_devolution_cards)) + '\\n');\n      result.push(justify2Text(translate('REGISTERS.GENERATED_VOUCHERS'), price(registerActivity.total_generated_devolution_cards)) + '\\n');\n      result.push('\\n');\n\n      return result;\n    }\n\n    function createRegisterActivitySummaryGiftCards(registerActivity, paymentMethodsDict) {\n      var result = [];\n\n      result.push(translate('GIFT_CARDS.VOUCHERS_AND_GIFT_CARDS') + '\\n');\n      result.push(repeatCharacter('-', WIDTH) + '\\n');\n\n      result.push(justify2Text(translate('REGISTERS.USED_VOUCHERS'), price(registerActivity.total_used_devolution_cards)) + '\\n');\n      result.push(justify2Text(translate('REGISTERS.GENERATED_VOUCHERS'), price(registerActivity.total_generated_devolution_cards)) + '\\n');\n      result.push(justify2Text(translate('REPORTS.USED_GIFT_CARDS'), price(registerActivity.total_used_gift_cards)) + '\\n');\n      result.push(justify2Text(translate('REPORTS.GENERATED_GIFT_CARDS'), price(registerActivity.total_generated_gift_cards)) + '\\n');\n\n      result.push('\\n');\n      return result;\n    }\n\n    function createRegisterActivitySummaryTransactions(registerActivity) {\n      var result = [];\n\n      result.push(translate('REGISTER_CLOSURE.REGISTER_ACTIVITY_SUMMARY') + '\\n');\n      result.push(repeatCharacter('-', WIDTH) + '\\n');\n\n      result.push(justify2Text(translate('REGISTER_CLOSURE.TRANSACTIONS'), registerActivity.total_transactions) + '\\n');\n      result.push(justify2Text(translate('REGISTER_CLOSURES.UNTIS_SOLD'), registerActivity.units_sold) + '\\n');\n      result.push(justify2Text(translate('REGISTER_CLOSURES.UNITS_RETURNED'), registerActivity.units_returned) + '\\n');\n      result.push(justify2Text(translate('REGISTER_CLOSURE.TOTAL'), price(registerActivity.total_revenue)) + '\\n');\n      result.push('\\n');\n\n      return result;\n    }\n\n    function createRegisterActivitySummaryCashMovements(registerActivity) {\n      var result = [];\n\n      result.push(translate('REGISTER_CLOSURE.CASH_MOVEMENTS') + '\\n');\n      result.push(repeatCharacter('-', WIDTH) + '\\n');\n\n      registerActivity.cash_movements.sort(function(a, b) {\n        return b.id - a.id;\n      });\n\n      for (var i = 0; i < registerActivity.cash_movements.length; ++i) {\n\n        var label = '';\n\n        if (registerActivity.cash_movements[i].is_opening) {\n          label = translate('REGISTER_CLOSURE.OPENING');\n        } else if (registerActivity.cash_movements[i].is_closure) {\n          label = translate('REGISTER_CLOSURE.CLOSURE');\n        } else {\n          label = \"\";\n          if(registerActivity.cash_movements[i].amount > 0){\n            label = translate('REGISTER_CLOSURE.CASH_MOVEMENT_TYPE_INPUT');\n          } else if (registerActivity.cash_movements[i].amount < 0){\n            label = translate('REGISTER_CLOSURE.CASH_MOVEMENT_TYPE_OUTPUT');\n          }\n        }\n        result.push(justify2Text(label, price(registerActivity.cash_movements[i].amount)) + '\\n');\n      }\n      result.push('\\n');\n\n      return result;\n\n    }\n\n    function printRegisterActivitySummary(registerActivity, paymentMethodsDict) {\n      WIDTH = registerActivity.register.printer_characters_per_line || WIDTH;\n\n      var ticket = [];\n\n      ticket = ticket.concat(createRegisterActivitySummaryHeader(registerActivity));\n      ticket = ticket.concat(createRegisterActivitySummaryMainInformation(registerActivity));\n      ticket = ticket.concat(createRegisterActivitySummaryPayments(registerActivity, paymentMethodsDict));\n      ticket = ticket.concat(createRegisterActivitySummaryGiftCards(registerActivity, paymentMethodsDict));\n      ticket = ticket.concat(createRegisterActivitySummaryTransactions(registerActivity));\n      ticket = ticket.concat(createRegisterActivitySummaryCashMovements(registerActivity));\n\n      ticket.push(commands.CUSTOM_PAPER_FULL_CUT);\n\n      return ticket;\n    }\n\n    function createRegisterActivitySoldProducts(posOrderProductVariants) {\n\n      var usersDict = {};\n      posOrderProductVariants.forEach(function(posOrderProductVariant) {\n        if (!usersDict[posOrderProductVariant.created_by.id]) {\n          usersDict[posOrderProductVariant.created_by.id] = posOrderProductVariant.created_by;\n        }\n      });\n\n      var result = [];\n      result.push(translate('REGISTER_CLOSURE.SOLD_PRODUCTS') + '\\n');\n      result.push(repeatCharacter('-', WIDTH) + '\\n');\n\n      Object.keys(usersDict).forEach(function(userId) {\n\n        result.push(centerText('*** ' + usersDict[userId].first_name + ' ' + usersDict[userId].last_name + ' ***') + '\\n\\n');\n\n        posOrderProductVariants.filter(function(posOrderProductVariant) {\n          return posOrderProductVariant.created_by.id === userId;\n        }).forEach(function(posOrderProductVariant) {\n          result = result.concat(createParagraphText(posOrderProductVariant.product_code + ' ' + posOrderProductVariant.product_name + ' ' + posOrderProductVariant.product_variant_name));\n          result.push(pullRight(posOrderProductVariant.amount + '\\n'));\n        });\n      });\n\n      return result;\n    }\n\n    function printRegisterActivitySoldProductsSummary(registerActivity, posOrderProductVariants) {\n      WIDTH = registerActivity.register.printer_characters_per_line || WIDTH;\n\n      var ticket = [];\n\n      ticket = ticket.concat(createRegisterActivitySoldProductsHeader(registerActivity));\n      ticket = ticket.concat(createRegisterActivitySummaryMainInformation(registerActivity));\n      ticket = ticket.concat(createRegisterActivitySoldProducts(posOrderProductVariants));\n\n      ticket.push(commands.CUSTOM_PAPER_FULL_CUT);\n\n      return ticket;\n    }\n\n    function getCashDrawerCharacter(register) {\n      if (register && register.open_drawer_signal) {\n        return parseSignal(register.open_drawer_signal);\n      }\n      return characters.OPEN_CASH_DRAWER;\n    }\n\n    function openCashDrawer(register) {\n      return [getCashDrawerCharacter(register)];\n    }\n\n    function parseSignal(signal) {\n      if (!signal) {\n        return characters.OPEN_CASH_DRAWER;\n      }\n\n      var result = [];\n      signal = signal.trim();\n      var signalArray = signal.split(',');\n      signalArray.forEach(function(signal) {\n        var decimalNumber = parseInt(signal);\n        result.push(bin2Hex[decimalNumber]);\n      });\n      return result.join('');\n    }\n\n    function printVerificationTicket(ip) {\n      var result = [];\n      result.push(translate('PRINTER_DIRECTIVE.VERIFICATION_TICKET_1'));\n      result.push('\\n');\n      result.push($filter('translate')('PRINTER_DIRECTIVE.VERIFICATION_TICKET_2', { ip: ip }));\n      result.push('\\n');\n      result.push(translate('PRINTER_DIRECTIVE.VERIFICATION_TICKET_3'));\n      result.push('\\n');\n      result.push('\\n');\n      result.push('\\n');\n      result.push('\\n');\n      result.push('\\n');\n      result.push('\\n');\n      result.push(commands.CUSTOM_PAPER_FULL_CUT);\n      return result;\n    }\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.nd-printer-utils')\n    .controller('EscPosPrinterDialogController', EscPosPrinterDialogController);\n\n  /** @ngInject */\n  function EscPosPrinterDialogController($mdDialog, $mdToast, $filter, products, isEco) {\n    var vm = this;\n\n    // Data\n    vm.products = products;\n    vm.isEco = isEco;\n\n    // Methods\n    vm.hide = hide;\n    vm.addGiftAmount = addGiftAmount;\n    vm.removeGiftAmount = removeGiftAmount;\n\n    // Initialize\n    init();\n\n    //Functions\n    function init() {\n      vm.products.map(function (product) {\n        product.selected = true;\n        product.gift_amount = product.amount;\n      });\n    }\n\n    function hide() {\n      $mdDialog.hide(vm.products);\n    }\n\n    function addGiftAmount(product){\n      product.selected = true;\n\n      if(product.amount > product.gift_amount){\n        ++product.gift_amount;\n      }\n    }\n\n    function removeGiftAmount(product){\n      if(product.gift_amount > 1){\n        --product.gift_amount;\n      }\n      else{\n        product.selected = false;\n        product.gift_amount = 0;\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.picking-packing.packing-order', [])\n    .factory('PackingOrder', _PackingOrder);\n\n  function _PackingOrder(Factory, Warehouse, PackingActivity, PACKING_STATUS, PosOrderFulfillment, PosOrderFulfillmentShippingBox) {\n\n    function PackingOrder(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.createdAt = this._getValue(value, 'created_at', null);\n      this.createdBy = this._getValue(value, 'created_by', null);\n      this.createdByInstance = this._getValue(value, 'created_by_instance', null);\n      this.autocode = this._getValue(value, 'autocode', null);\n      this.orderAutocode = this._getValue(value, 'order_autocode', null);\n      this.ordersAutocode = this._getValue(value, 'orders_autocode', null);\n      this.orderType = this._getValue(value, 'order_type', null);\n      this.packingActivity = new PackingActivity(this._getValue(value, 'packing_activity', null));\n      this.pickingOrder = this._getValue(value, 'picking_order', null);\n      this.pickingActivity = this._getValue(value, 'picking_activity', null);\n      this.status = this._getValue(value, 'status', null);\n      this.warehouse = this._getValue(value, 'warehouse', null);\n      this.destination = this._getValue(value, 'destination', null);\n      this.amount = this._getValue(value, 'amount', null);\n      this.deliveryOrder = this._getValue(value, 'delivery_order', null);\n      this.hasSendcloudData = this._getValue(value, 'has_sendcloud_data', null);\n      this.packingOrderShippingBoxes = this._getValue(value, 'packing_order_shipping_boxes', []).map(function (shippingBox) {\n        return new PosOrderFulfillmentShippingBox(shippingBox);\n      });\n\n      if (this.destination) {\n        this.warehouse = new Warehouse(this.warehouse);\n      }\n\n      if (this.deliveryOrder) {\n        if (this.orderType === 'PosOrderFulfillment') { // todo: extract to constant\n          this.deliveryOrder = new PosOrderFulfillment(this.deliveryOrder);\n        }\n      }\n    }\n\n    PackingOrder.prototype = Object.create(Factory.prototype);\n    PackingOrder.prototype.constructor = PackingOrder;\n\n    PackingOrder.prototype.isPendingToPack = function () {\n      return this.status === PACKING_STATUS.PENDING_TO_PACK;\n    };\n\n    PackingOrder.prototype.isInProgress = function () {\n      return this.status === PACKING_STATUS.IN_PROGRESS;\n    };\n\n    PackingOrder.prototype.isPacked = function () {\n      return this.status === PACKING_STATUS.PACKED;\n    };\n\n    PackingOrder.prototype.isPendingToShip = function () {\n      return this.status === PACKING_STATUS.PENDING_TO_SHIP;\n    };\n\n    PackingOrder.prototype.isShipped = function () {\n      return this.status === PACKING_STATUS.SHIPPED;\n    };\n\n    PackingOrder.prototype.canEditItemStatus = function () {\n      return this.isPendingToPack() || this.isInProgress();\n    };\n\n    PackingOrder.prototype.isFulfillmentType = function () {\n      return this.orderType === 'PosOrderFulfillment';\n    };\n\n    PackingOrder.prototype.hasParcels = function () {\n      for (var i = 0; i < this.packingOrderShippingBoxes.length; i++) {\n        if (this.packingOrderShippingBoxes[i].packingOrderSendcloudData) {\n          return true;\n        }\n      }\n    };\n\n\n    return PackingOrder;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.picking-packing.packing-activity', [])\n    .factory('PackingActivity', _PackingActivity);\n\n  function _PackingActivity(Factory) {\n\n    function PackingActivity(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.startedAt = this._getValue(value, 'started_at', null);\n      this.finishedAt = this._getValue(value, 'finished_at', null);\n      this.packedBy = this._getValue(value, 'packed_by', null);\n    }\n\n    PackingActivity.prototype = Object.create(Factory.prototype);\n    PackingActivity.prototype.constructor = PackingActivity;\n\n    PackingActivity.prototype.toJson = function () {\n      return {\n        id: this.id,\n        started_at: this.startedAt,\n        finished_at: this.finishedAt,\n        packed_by: this.packedBy\n      };\n    };\n\n    return PackingActivity;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.validate-sign-up-two')\n    .controller('ValidateSignUpTwoController', ValidateSignUpTwoController);\n\n  /** @ngInject */\n  function ValidateSignUpTwoController($mdDialog, $timeout, $http, api, HTTP_STATUS, SignupTwo, $stateParams, $document) {\n    var vm = this;\n\n    // Data\n    vm.date = new Date();\n    vm.stocks = {};\n    vm.token = $stateParams.token;\n    vm.categoriesWidget = {\n      init: false\n    };\n    vm.seasonsWidget = {\n      init: false\n    };\n\n    // Initialize\n    init();\n\n    //Functions\n    function init() {\n      initMockCharts();\n      showDialog();\n    }\n\n    function showDialog() {\n      api.account.signupTwo.get({\n        token: vm.token,\n      }, function(result, callback, status) {\n        $mdDialog.show({\n          controller: 'CompleteSignUpTwoDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/pages/sign-up/validate-sign-up-two/dialogs/complete-sign-up-two-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          escapeToClose: false,\n          locals: {\n            SignupGetResult: result,\n            SignupGetStatus: status,\n          }\n        });\n      });\n    }\n\n    function initMockCharts() {\n      vm.stocks = {\n        \"total\": 1990,\n        \"total_cost\": 23154.75,\n        \"purchased_pending_to_receive\": 16,\n        \"sold_pending_to_prepare\": 1,\n        \"sold_pending_to_ship\": 4,\n        \"transferred_pending_to_prepare\": 0,\n        \"transferred_pending_to_ship\": 16,\n        \"transferred_pending_to_receive\": 319\n      };\n\n      $http.get('assets/data/mock_ndv3_chart_categories_data.07dcc6e6.json').then(function (response) {\n        vm.categoriesWidget = addFunctions(response.data);\n      });\n\n      $http.get('assets/data/mock_ndv3_chart_seasons_data.20708d1a.json').then(function (response) {\n        vm.seasonsWidget = addFunctions(response.data);\n      });\n    }\n\n    function addFunctions(data) {\n      data.mainChart.options.chart.x = function (d) {\n        return d.label;\n      };\n      data.mainChart.options.chart.y = function (d) {\n        return d.value;\n      };\n      data.mainChart.options.chart.valueFormat = function (d) {\n        return d3.format(',.0f')(d);\n      };\n      data.init = true;\n      return data;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.validate-sign-up', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('signup.pages_validate_sign_up', {\n      url: '/validate-sign-up/:lang/:token',\n      views: {\n        'content@signup': {\n          templateUrl: 'app/main/pages/sign-up/validate-sign-up/validate-sign-up.html',\n          controller: 'ValidateSignUpController as vm'\n        }\n      }\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/sign-up');\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.validate-sign-up')\n    .controller('ValidateSignUpController', ValidateSignUpController);\n\n  /** @ngInject */\n  function ValidateSignUpController($mdDialog,\n                                    $stateParams,\n                                    $translate,\n                                    $location,\n                                    $state,\n                                    AuthService,\n                                    api,\n                                    HTTP_STATUS,\n                                    ERROR_CODES) {\n\n    var vm = this;\n    // Data\n    vm.ERROR_CODES = ERROR_CODES;\n    vm.lang = $stateParams.lang;\n    vm.token = $stateParams.token;\n    vm.error = null;\n    vm.errorVerifiedAt = new Date();\n    vm.generatingData = false;\n\n    //Methods\n    init();\n\n    //Functions\n    function init() {\n      $translate.use($stateParams.lang || 'es');\n\n      $mdDialog.show({\n        contentElement: '#validate-sing-up-dialog',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: false,\n        escapeToClose: false\n      }).then(function () {\n        // Nothing to do\n      }, function () {\n        // Nothing to do\n      });\n\n      if (vm.token) {\n        vm.generatingData = true;\n        api.signup.get({\n          option: 'validate',\n          token: vm.token,\n        }, function (result, callback, status) {\n\n          if(status === HTTP_STATUS.HTTP_200_OK){\n            AuthService.postLogIn(result);\n            $state.go('app.analytics.start');\n            // $location.path('/analytics/start');\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST){\n            if (result.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL){\n              vm.error = ERROR_CODES.ERROR_01003_TOKEN_IS_NULL;\n            } else if (result.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND){\n              vm.error = ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND;\n            } else if (result.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED){\n              vm.error = ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED;\n              vm.errorVerifiedAt = new Date(result.verified_at);\n            } else if (result.error === ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS){\n              vm.error = ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS;\n            }\n          }\n        });\n      } else {\n        vm.error = ERROR_CODES.ERROR_01003_TOKEN_IS_NULL;\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.sign-up-two', [])\n    .config(config);\n\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider) {\n    // State\n    $stateProvider.state('signuptwo.pages_sign_up_two', {\n      url: '/sign-up',\n      views: {\n        'content@signuptwo': {\n          templateUrl: 'app/main/pages/sign-up/sign-up-two/sign-up-two.html',\n          controller: 'SignUpTwoController as vm'\n        }\n      },\n      bodyClass: 'signuptwo'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/sign-up');\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.sign-up-two')\n    .controller('SignUpTwoController', SignUpTwoController);\n\n  /** @ngInject */\n  function SignUpTwoController($mdDialog, $timeout, $http, $location, SignupTwo) {\n\n    var vm = this;\n\n    // Data\n    vm.signUp = new SignupTwo();\n    vm.date = new Date();\n    vm.stocks = {};\n    vm.categoriesWidget = {\n      init: false\n    };\n    vm.seasonsWidget = {\n      init: false\n    };\n\n    vm.getEmail = getEmail;\n    vm.getFormVersion = getFormVersion;\n\n    //Initialize\n    init();\n\n    //Functions\n    function init() {\n      initMockCharts();\n      $mdDialog.show({\n        contentElement: '#sign-up-two-dialog',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: false,\n        escapeToClose: false\n      }).then(function () {\n        // Nothing to do\n      }, function () {\n        // Nothing to do\n      });\n    }\n\n    function initMockCharts() {\n      vm.stocks = {\n        \"total\": 1990,\n        \"total_cost\": 23154.75,\n        \"purchased_pending_to_receive\": 16,\n        \"sold_pending_to_prepare\": 1,\n        \"sold_pending_to_ship\": 4,\n        \"transferred_pending_to_prepare\": 0,\n        \"transferred_pending_to_ship\": 16,\n        \"transferred_pending_to_receive\": 319\n      };\n\n      $http.get('assets/data/mock_ndv3_chart_categories_data.07dcc6e6.json').then(function (response) {\n        vm.categoriesWidget = addFunctions(response.data);\n      });\n\n      $http.get('assets/data/mock_ndv3_chart_seasons_data.20708d1a.json').then(function (response) {\n        vm.seasonsWidget = addFunctions(response.data);\n      });\n    }\n\n\n    function addFunctions(data) {\n      data.mainChart.options.chart.x = function (d) {\n        return d.label;\n      };\n      data.mainChart.options.chart.y = function (d) {\n        return d.value;\n      };\n      data.mainChart.options.chart.valueFormat = function (d) {\n        return d3.format(',.0f')(d);\n      };\n      data.init = true;\n      return data\n    }\n\n    function getEmail() {\n      return vm.signUp.email;\n    }\n\n    function getFormVersion() {\n      return vm.signUp.form_version;\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.sign-up', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider) {\n    // State\n    $stateProvider.state('signup.pages_sign_up', {\n      url: '/sign-up-old',\n      views: {\n        'content@signup': {\n          templateUrl: 'app/main/pages/sign-up/sign-up/sign-up.html',\n          controller: 'SignUpController as vm'\n        }\n      }\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/sign-up');\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.sign-up')\n    .controller('SignUpController', SignUpController);\n\n  /** @ngInject */\n  function SignUpController($mdDialog) {\n\n    var vm = this;\n    // Data\n\n    //Methods\n    init();\n\n    //Functions\n    function init() {\n      $mdDialog.show({\n        contentElement: '#sing-up-dialog',\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: false,\n        escapeToClose: false\n      }).then(function () {\n        // Nothing to do\n      }, function () {\n        // Nothing to do\n      });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.hub', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_hub', {\n      url: '/hub', views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html', controller: 'MainController as vm'\n        }, 'content@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/hub.html', controller: 'HubController as vm'\n        }\n      }, resolve: {\n        ContactData: function(apiResolver) {\n          return apiResolver.resolve('hub.contacts@get');\n        }\n      }, bodyClass: 'hub'\n    });\n\n    $stateProvider.state('app.pages_hub.receipts', {\n      url: '/receipts', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/documents/documents.html', controller: 'HubDocumentsController as vm'\n        }\n      }, params: { documentType: 'receipts' }, bodyClass: 'hub-receipts'\n    });\n\n    $stateProvider.state('app.pages_hub.receipts.receipt', {\n      url: '/:id', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/document/document.html', controller: 'HubDocumentController as vm'\n        }\n      }, bodyClass: 'hub-receipt'\n    });\n\n    $stateProvider.state('app.pages_hub.invoices', {\n      url: '/invoices', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/documents/documents.html', controller: 'HubDocumentsController as vm'\n        }\n      }, params: { documentType: 'invoices', type: 30 }, resolve: {}, bodyClass: 'hub-invoices'\n    });\n\n    $stateProvider.state('app.pages_hub.proformas', {\n      url: '/proformas', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/documents/documents.html', controller: 'HubDocumentsController as vm'\n        }\n      }, params: { documentType: 'proformas', type: 10 }, resolve: {}, bodyClass: 'hub-invoices'\n    });\n\n    $stateProvider.state('app.pages_hub.quotes', {\n      url: '/quotes', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/documents/documents.html', controller: 'HubDocumentsController as vm'\n        }\n      }, params: { documentType: 'quotes', type: 20 }, resolve: {}, bodyClass: 'hub-invoices'\n    });\n\n    $stateProvider.state('app.pages_hub.invoices.invoice', {\n      url: '/:id?t', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/document/document.html', controller: 'HubDocumentController as vm'\n        }\n      }, resolve: {}, bodyClass: 'hub-invoice',\n      params: {\n        t: null\n      }\n    });\n\n    $stateProvider.state('app.pages_hub.proformas.proforma', {\n      url: '/:id', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/document/document.html', controller: 'HubDocumentController as vm'\n        }\n      }, resolve: {}, bodyClass: 'hub-invoice'\n    });\n\n    $stateProvider.state('app.pages_hub.quotes.quote', {\n      url: '/:id', views: {\n        'subcontent@app.pages_hub': {\n          templateUrl: 'app/main/pages/hub/document/document.html', controller: 'HubDocumentController as vm'\n        }\n      }, resolve: {}, bodyClass: 'hub-invoice'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/hub');\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.hub')\n    .controller('HubDocumentsController', HubDocumentsController);\n\n  /** @ngInject */\n  function HubDocumentsController($location, $stateParams, $state, $mdMedia, Session, api, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.documents = [];\n    vm.documentType = $stateParams.documentType;\n    vm.documentPageUrl = '';\n    vm.loading = false;\n\n    // Methods\n    vm.mediaLtLg = mediaLtLg;\n\n\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.loading = true;\n      api.hub[vm.documentType].list({}, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.documents = response.results;\n          vm.documents.forEach(function(document){\n            if (vm.documentType === 'receipts') {\n              document.pageUrl = 'app.pages_hub.receipts.receipt({id:' + document.id + '})';\n            } else if (vm.documentType === 'invoices') {\n              document.pageUrl = 'app.pages_hub.invoices.invoice({id:' + document.id + '})';\n            } else if (vm.documentType === 'proformas') {\n              document.pageUrl = 'app.pages_hub.proformas.proforma({id:' + document.id + '})';\n            } else if (vm.documentType === 'quotes') {\n              document.pageUrl = 'app.pages_hub.quotes.quote({id:' + document.id + '})';\n            }\n          });\n        }\n        vm.loading = false;\n      });\n\n\n\n    }\n\n    function mediaLtLg() {\n      return $mdMedia('xs') || $mdMedia('sm') || $mdMedia('md');\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.hub')\n    .controller('HubDocumentController', HubDocumentController);\n\n  /** @ngInject */\n  function HubDocumentController(\n    $filter,\n    $http,\n    $location,\n    $mdMedia,\n    $mdToast,\n    $sce,\n    $scope,\n    $state,\n    $stateParams,\n    $timeout,\n    api,\n    Session,\n    Utils,\n    HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.document = null;\n    vm.documentType = $stateParams.documentType;\n    vm.loading = false;\n    vm.pdfData = null; // Store original PDF data for download\n\n    // Methods\n    vm.printPDF = printPDF;\n    vm.downloadPDF = downloadPDF;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.loading = true;\n      api.hub[vm.documentType].get({\n        id: $stateParams.id\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.document = response;\n          $scope.$parent.vm.company = vm.document.company;\n          loadPDF();\n        }\n        vm.loading = true;\n      });\n    }\n\n    function loadPDF() {\n      $http({\n        method: 'GET',\n        withCredentials: true,\n        url: api.urls.hub[vm.documentType].replace(':id', vm.document.id).replace(':options', 'print'),\n        responseType: 'arraybuffer'\n      }).then(function(response) {\n        vm.loading = false;\n        if (response.status === HTTP_STATUS.HTTP_200_OK) {\n          // Store original PDF data for download\n          vm.pdfData = response.data;\n\n          var filename = vm.document.autocode + '.pdf';\n          var file = new File([response.data], filename, { type: 'application/pdf' });\n          var objectUrl = URL.createObjectURL(file);\n          // Add PDF viewer parameters: close sidebar and fit to width\n          objectUrl += '#pagemode=none&view=FitH&toolbar=1';\n          vm.content = $sce.trustAsResourceUrl(objectUrl);\n          $timeout(recalculatePDFHeight);\n        } else if (response.status === HTTP_STATUS.HTTP_429_TOO_MANY_REQUESTS) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.THROTTLE_ERROR')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      }).catch(function(error) {\n        vm.loading = false;\n        if (error.status === HTTP_STATUS.HTTP_429_TOO_MANY_REQUESTS) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.THROTTLE_ERROR')).position('top right'));\n        }\n      });\n    }\n\n    function recalculatePDFHeight() {\n      var aspectRatio = 1.4142;\n      var iframeElement = document.getElementById('pdf-canvas');\n      var currentWidth = iframeElement.offsetWidth;\n      var newHeight = currentWidth * aspectRatio;\n      iframeElement.style.height = newHeight + 'px';\n    }\n\n    function printPDF() {\n      var iframe = document.getElementById('pdf-canvas');\n      if (iframe) {\n        iframe.contentWindow.print();\n      }\n    }\n\n    function downloadPDF() {\n      if (vm.pdfData && vm.document) {\n        var filename = vm.document.autocode + '.pdf';\n        Utils.downloadFile(filename, 'application/pdf', vm.pdfData);\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.error-500', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_errors_error-500', {\n      url: '/pages/errors/error-500',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_errors_error-500': {\n          templateUrl: 'app/main/pages/errors/500/error-500.html',\n          controller: 'Error500Controller as vm'\n        }\n      },\n      bodyClass: 'error-500'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/errors/500');\n\n    // Navigation\n    msNavigationServiceProvider.saveItem('pages.errors.error-500', {\n      title: '500',\n      state: 'app.pages_errors_error-500',\n      weight: 2\n    });\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.error-500')\n    .controller('Error500Controller', Error500Controller);\n\n  /** @ngInject */\n  function Error500Controller() {\n    // Data\n\n    // Methods\n\n    //////////\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.error-404', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_errors_error-404', {\n      url: '/pages/errors/error-404',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_errors_error-404': {\n          templateUrl: 'app/main/pages/errors/404/error-404.html',\n          controller: 'Error404Controller as vm'\n        }\n      },\n      bodyClass: 'error-404'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/errors/404');\n\n    // Navigation\n    msNavigationServiceProvider.saveItem('pages.errors', {\n      title: 'Errors',\n      icon: 'icon-alert',\n      weight: 3\n    });\n\n    msNavigationServiceProvider.saveItem('pages.errors.error-404', {\n      title: '404',\n      state: 'app.pages_errors_error-404',\n      weight: 1\n    });\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.error-404')\n    .controller('Error404Controller', Error404Controller);\n\n  /** @ngInject */\n  function Error404Controller() {\n    // Data\n\n    // Methods\n\n    //////////\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.reset-password', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_reset-password', {\n      url: '/reset-password/:uid/:token',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_reset-password': {\n          templateUrl: 'app/main/pages/auth/reset-password/reset-password.html',\n          controller: 'ResetPasswordController as vm'\n        }\n      },\n      bodyClass: 'reset-password'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/reset-password');\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.reset-password')\n    .controller('ResetPasswordController', ResetPasswordController);\n\n  /** @ngInject */\n  function ResetPasswordController($stateParams, $location, AuthService, $mdDialog, $filter) {\n    var vm = this;\n\n    // Data\n    vm.authService = AuthService;\n    vm.uid = $stateParams.uid;\n    vm.token = $stateParams.token;\n    vm.password = null;\n    vm.showPassword = false;\n    vm.repeatPassword = null;\n    vm.showRepeatPassword = false;\n    vm.resetPasswordForm = null;\n    vm.disabled = true;\n\n    // Methods\n    init();\n    vm.resetPassword = resetPassword;\n    vm.showDialog = showDialog;\n    vm.checkPasswordMismatch = checkPasswordMismatch;\n\n    // Functions\n    function init() {\n      if (!vm.uid || !vm.token) {\n        vm.showDialog();\n      }\n\n      AuthService.passwordReset(vm.uid, vm.token).then(\n        // Success\n        function() {\n          // Nothing to do, we can proceed\n        },\n        // Error\n        function() {\n          vm.showDialog();\n        });\n    }\n\n    function resetPassword() {\n      if (vm.password && vm.repeatPassword) {\n        vm.recovering = true;\n\n        vm.authService.passwordResetComplete(vm.uid, vm.token, vm.password).then(\n          function() {\n            showDialog($filter('translate')('RESET_PASSWORD.PASSWORD_CHANGED'));\n            vm.recovering = false;\n          }, function() {\n            showDialog($filter('translate')('RESET_PASSWORD.ERRORS.SOMETHING_WENT_WRONG'));\n            vm.recovering = false;\n          }\n        );\n\n      } else {\n        checkPasswordMismatch();\n      }\n    }\n\n    function checkPasswordMismatch() {\n      if (vm.password !== vm.repeatPassword) {\n        vm.resetPasswordForm.repeatPassword.$setValidity('mismatch', false);\n      } else {\n        vm.resetPasswordForm.repeatPassword.$setValidity('mismatch', true);\n      }\n\n      vm.disabled = !((vm.resetPasswordForm.password.$valid && vm.resetPasswordForm.repeatPassword.$valid) && vm.password !== null);\n    }\n\n    function showDialog(text) {\n      if (!text) {\n        text = $filter('translate')('RESET_PASSWORD.ERRORS.INVALID_TOKEN');\n      }\n\n      var confirm = $mdDialog.alert()\n        .textContent(text)\n        .ariaLabel('Invalid token')\n        .ok($filter('translate')('RESET_PASSWORD.GO_BACK'));\n\n      $mdDialog.show(confirm).then(function() {\n        $location.path('/login');\n      });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.register-v2', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_register-v2', {\n      url: '/register',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_register-v2': {\n          templateUrl: 'app/main/pages/auth/register-v2/register-v2.html',\n          controller: 'RegisterV2Controller as vm'\n        }\n      },\n      bodyClass: 'register-v2'\n    });\n\n    // To show the module in the nav menu\n    // Translate\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/register-v2');\n\n    // Navigation\n    /*\n    msNavigationServiceProvider.saveItem('pages.auth.register-v2', {\n        title : 'Register v2',\n        state : 'app.pages_auth_register-v2',\n        weight: 4\n    });\n    */\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.register-v2')\n    .controller('RegisterV2Controller', RegisterV2Controller);\n\n  /** @ngInject */\n  function RegisterV2Controller($scope, $location, AuthService, AUTH_EVENTS) {\n\n    var vm = this;\n\n    // Data\n    vm.registerForm = $scope.registerForm;\n\n    // Methods\n    vm.signup = signup;\n\n    // Functions\n    function signup(){\n      AuthService.signup(\n        registerForm.username.value,\n        registerForm.email.value,\n        registerForm.password.value\n      ).then(function(user) {\n\n          // vm.rootScope.$broadcast(vm.authEvents.loginSuccess);\n          //a $location.path('/');\n          //TODO: $state.go('home', {foo: true, bar: 1});\n\n        }, function() {\n          vm.rootScope.$broadcast(vm.authEvents.loginFailed);\n\n        })\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.register', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_register', {\n      url: '/pages/auth/register',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_register': {\n          templateUrl: 'app/main/pages/auth/register/register.html',\n          controller: 'RegisterController as vm'\n        }\n      },\n      bodyClass: 'register'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/register');\n\n    // Navigation\n    msNavigationServiceProvider.saveItem('pages.auth.register', {\n      title: 'Register',\n      state: 'app.pages_auth_register',\n      weight: 3\n    });\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.register')\n    .controller('RegisterController', RegisterController);\n\n  /** @ngInject */\n  function RegisterController() {\n    // Data\n\n    // Methods\n\n    //////////\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login-v3', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_login-v3', {\n      url: '/login',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_login-v3': {\n          templateUrl: 'app/main/pages/auth/login-v3/login-v3.html',\n          controller: 'LoginV3Controller as vm'\n        }\n      },\n      bodyClass: 'login-v3'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/login-v3');\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login-v3')\n    .controller('LoginV3Controller', LoginV3Controller);\n\n  /** @ngInject */\n  function LoginV3Controller($scope, $state, $rootScope, $location, AUTH_EVENTS, AuthService, Session) {\n    var vm = this;\n\n    // Data\n    vm.rootScope = $rootScope;\n    vm.location = $location;\n    vm.authEvents = AUTH_EVENTS;\n    vm.authService = AuthService;\n    vm.logging = false;\n\n    //Methods\n    vm.login = login;\n    vm.typingUsername = typingUsername;\n    vm.passwordRecovery = passwordRecovery;\n\n    //Functions\n    function login() {\n      if (!vm.form.username || !vm.form.password) {\n        return;\n      }\n\n      vm.logging = true;\n      vm.authService.login(\n        // Data\n        {\n          username: vm.form.username,\n          password: vm.form.password\n        },\n        // Remember login\n        vm.form.rememberPassword\n      ).then(function(user) {\n\n        if (user.user && user.token) {\n          if (Session.redirectFreemiumPage()) {\n            $location.path('/trial-expired');\n          } else if (sessionStorage.getItem('afterLoginUrl')) {\n            $location.path(sessionStorage.getItem('afterLoginUrl'));\n            sessionStorage.removeItem('afterLoginUrl');\n          } else {\n            $location.path('/analytics/start');\n          }\n          vm.rootScope.$broadcast(vm.authEvents.loginSuccess);\n        } else {\n          vm.logging = false;\n          $scope.loginForm.username.$setValidity('invalid', false);\n          vm.rootScope.$broadcast(vm.authEvents.loginFailed);\n        }\n      });\n    }\n\n    function typingUsername() {\n      // TODO: fer-ho mes ben fet:\n      $scope.loginForm.username.$setValidity('invalid', true);\n    }\n\n    function passwordRecovery() {\n      if (vm.form && vm.form.username) {\n        sessionStorage.setItem('username', vm.form.username);\n      }\n\n      $location.path('/forgot-password');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login-v2', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_login-v2', {\n      url: '/login-v2',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_login-v2': {\n          templateUrl: 'app/main/pages/auth/login-v2/login-v2.html',\n          controller: 'LoginV2Controller as vm'\n        }\n      },\n      bodyClass: 'login-v2'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/login-v2');\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login-v2')\n    .controller('LoginV2Controller', LoginV2Controller);\n\n  /** @ngInject */\n  function LoginV2Controller($scope, $state, $rootScope, $location, AUTH_EVENTS, AuthService, Session) {\n    var vm = this;\n\n    // Data\n    vm.rootScope = $rootScope;\n    vm.location = $location;\n    vm.authEvents = AUTH_EVENTS;\n    vm.authService = AuthService;\n    vm.logging = false;\n\n    //Methods\n    vm.login = login;\n    vm.typingUsername = typingUsername;\n\n    //Functions\n    function login() {\n      vm.logging = true;\n      vm.authService.login(\n        // Data\n        {\n          username: vm.form.username,\n          password: vm.form.password\n        },\n        // Remember login\n        vm.form.rememberPassword\n      ).then(function (user) {\n\n        if (user.user && user.token) {\n          if(sessionStorage.getItem('afterLoginUrl')){\n            $location.path(sessionStorage.getItem('afterLoginUrl'));\n            sessionStorage.removeItem('afterLoginUrl');\n          } else {\n            $location.path('/analytics/start');\n          }\n          vm.rootScope.$broadcast(vm.authEvents.loginSuccess);\n        }\n        else {\n          vm.logging = false;\n          $scope.loginForm.username.$setValidity('invalid', false);\n          vm.rootScope.$broadcast(vm.authEvents.loginFailed);\n        }\n      });\n    }\n\n    function typingUsername() {\n      // TODO: fer-ho mes ben fet:\n      $scope.loginForm.username.$setValidity('invalid', true);\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_login', {\n      url: '/login',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_login': {\n          templateUrl: 'app/main/pages/auth/login/login.html',\n          controller: 'LoginController as vm'\n        }\n      },\n      bodyClass: 'login'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/login');\n\n    // Navigation\n    msNavigationServiceProvider.saveItem('pages.auth', {\n      title: 'Authentication',\n      icon: 'icon-lock',\n      weight: 1\n    });\n\n    msNavigationServiceProvider.saveItem('pages.auth.login', {\n      title: 'Login',\n      state: 'app.pages_auth_login',\n      weight: 1\n    });\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.login')\n    .controller('LoginController', LoginController);\n\n  /** @ngInject */\n  function LoginController() {\n    // Data\n\n    // Methods\n\n    //////////\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.lock', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_lock', {\n      url: '/lock',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_lock': {\n          templateUrl: 'app/main/pages/auth/lock/lock.html',\n          controller: 'LockController as vm'\n        }\n      },\n      bodyClass: 'lock'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/lock');\n\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.lock')\n    .controller('LockController', LockController);\n\n  /** @ngInject */\n  function LockController() {\n    var vm = this;\n\n    // Data\n    vm.form = {\n      username: 'Jane Doe'\n    };\n\n    // Methods\n\n    //////////\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.forgot-password', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_auth_forgot-password', {\n      url: '/forgot-password',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_auth_forgot-password': {\n          templateUrl: 'app/main/pages/auth/forgot-password/forgot-password.html',\n          controller: 'ForgotPasswordController as vm'\n        }\n      },\n      bodyClass: 'forgot-password'\n    });\n\n    // To show the module in the nav menu\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/auth/forgot-password');\n\n    // Navigation\n    /*\n    msNavigationServiceProvider.saveItem('pages.auth.forgot-password', {\n        title : 'Forgot Password',\n        state : 'app.pages_auth_forgot-password',\n        weight: 5\n    });\n    */\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.auth.forgot-password')\n    .controller('ForgotPasswordController', ForgotPasswordController);\n\n  /** @ngInject */\n  function ForgotPasswordController($scope, $mdToast, $mdDialog, $filter, $location, AuthService) {\n    var vm = this;\n\n    // Data\n    vm.recovering = false;\n    vm.email = '';\n    vm.authService = AuthService;\n\n    // Methods\n    vm.resetPasswordRequest = resetPasswordRequest;\n    vm.typingEmail = typingEmail;\n    vm.isValidEmail = isValidEmail;\n\n    // Listeners\n    $scope.$on('$viewContentLoaded', function() {\n      var username = sessionStorage.getItem('username');\n      sessionStorage.removeItem('username');\n\n      if (username && isValidEmail(username)) {\n        vm.email = username;\n      }\n    });\n\n    // Functions\n    function resetPasswordRequest() {\n      vm.authService.resetPasswordRequest(vm.email).then(function(result) {\n        showEmailHasBeenSentDialog();\n      });\n    }\n\n    function typingEmail() {\n      $scope.forgotPasswordForm.email.$setValidity('invalid', isValidEmail(vm.email));\n    }\n\n    function isValidEmail(email) {\n      if (!email && !vm.email) {\n        return false;\n      }\n\n      if (!email && vm.email) {\n        email = vm.email;\n      }\n\n      var emailRegexp = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n\n      return emailRegexp.test(email);\n    }\n\n    function showEmailHasBeenSentDialog() {\n      var confirm = $mdDialog.alert()\n        .textContent($filter('translate')('FORGOT_PASSWORD.EMAIL_SENT'))\n        .ariaLabel('Email sent')\n        .ok($filter('translate')('FORGOT_PASSWORD.GO_BACK'));\n\n      $mdDialog.show(confirm).then(function() {\n        $location.path('/login');\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndFilter', {\n    transclude: true,\n    require: {\n      parent: '^ndFilterSelector'\n    },\n    bindings: {\n      name: '@',\n      label: '@?',\n      icon: '@?'\n    },\n    templateUrl: 'app/main/components/filter-selector/filter/filter.html',\n    controllerAs: 'vm',\n    controller: function ($scope, $element, $timeout) {\n      var vm = this;\n      var filter = {};\n      vm.$onInit = function () {\n        filter = {\n          name: vm.name,\n          label: vm.label || ('FILTERS.' + vm.name.toUpperCase()),\n          icon: vm.icon\n        };\n\n        vm.parent.registerFilter(filter);\n\n        $scope.$watch(function () {\n          return vm.parent.isFilterActive(vm.name);\n        }, function (active) {\n          $element.css('display', active ? 'block' : 'none');\n        });\n\n        $scope.$on('ndFilter::clear', function (event, data) {\n          if (data && data.filterName === vm.name) {\n            $timeout(function () {\n              var mdSelects = $element.find('md-select');\n              mdSelects.each(function () {\n                var mdSelect = angular.element(this);\n                var ngModel = mdSelect.controller('ngModel');\n                if (ngModel) {\n                  ngModel.$setViewValue(null);\n                  ngModel.$render();\n                }\n              });\n            }, 0);\n          }\n        });\n      };\n\n      vm.clear = function () {\n        $scope.$root.$broadcast('ndFilter::clear', vm.name);\n        vm.parent.toggleFilter(vm.name);\n      };\n\n    }\n  });\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SelectDefaultPrinterDialogController', SelectDefaultPrinterDialogController);\n\n  /** @ngInject */\n  function SelectDefaultPrinterDialogController($mdDialog, $mdToast, $document, $filter, listPrinters) {\n    var vm = this;\n\n    // Data\n    vm.printer = null;\n    vm.listPrinters = listPrinters;\n\n    // Methods\n    vm.select = select;\n    vm.cancel = cancel;\n\n    //Functions\n    function select(){\n      $mdDialog.hide(vm.printer);\n    }\n\n    function cancel(){\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('SelectDefaultRegisterDialogController', SelectDefaultRegisterDialogController);\n\n  /** @ngInject */\n  function SelectDefaultRegisterDialogController($mdDialog, $mdToast, $document, $filter, RegistersData) {\n    var vm = this;\n\n    // Data\n    vm.register = null;\n    vm.registers = RegistersData.results;\n\n    // Methods\n    vm.select = select;\n    vm.cancel = cancel;\n\n    //Functions\n    function select() {\n      if(vm.register){\n        $mdDialog.hide(vm.register);\n      }\n    }\n\n    function cancel(){\n      $mdDialog.cancel();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('IpEpsonPrinterDialogController', IpEpsonPrinterDialogController);\n\n  /** @ngInject */\n  function IpEpsonPrinterDialogController(\n    $mdDialog,\n    $mdToast,\n    $document,\n    $filter,\n    $scope,\n    eposdev,\n    Session,\n    api,\n    ndPrinterUtilsService,\n    DefaultRegisterService,\n    EpsonPrinterService,\n    $rootScope,\n    HTTP_STATUS\n  ) {\n\n    var vm = this;\n\n    // Data\n    vm.ipEpsonForm = {};\n    vm.register = angular.copy(DefaultRegisterService.defaultRegister);\n    vm.eposdev = eposdev;\n    vm.error = false;\n    vm.connecting = false;\n    vm.success = false;\n    vm.printer = null;\n    vm.testing = false;\n\n    // Methods\n    vm.save = save;\n    vm.cancel = cancel;\n    vm.printVerificationTicket = printVerificationTicket;\n    vm.isValidIp = isValidIp;\n\n    function changeStatus(event, state) {\n      switch (state) {\n        case EpsonPrinterService.STATES.ERROR:\n          vm.error = true;\n          vm.connecting = false;\n          vm.testing = false;\n          $scope.$apply();\n          break;\n        case EpsonPrinterService.STATES.READY:\n          vm.error = false;\n          vm.connecting = false;\n          vm.success = true;\n          if (vm.testing === true) {\n            DefaultRegisterService.saveDefaultRegister(vm.register)\n            vm.testing = false;\n          }\n          $scope.$apply();\n          break;\n      }\n    }\n\n    function save() {\n      vm.connecting = true;\n      vm.error = false;\n      vm.printersate = $rootScope.$on('ndPrinter::setState', changeStatus);\n      // Unregister Events\n      $rootScope.$on('$destroy', function () {\n        vm.printersate();\n      });\n\n      vm.testing = true;\n      EpsonPrinterService.testConnection(vm.register);\n    }\n\n    function cancel() {\n      if (vm.printer) {\n        $mdDialog.hide(vm.printer);\n        return;\n      }\n      $mdDialog.cancel();\n    }\n\n    function printVerificationTicket() {\n      EpsonPrinterService.printVerificationTicket();\n    }\n\n    function isValidIp() {\n      if (!vm.register.printer_ip) {\n        return true;\n      }\n      var regex = /^([0-9]{1,3}\\.){3}[0-9]{1,3}$/;\n      return regex.test(vm.register.printer_ip);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.analytics')\n    .controller('ndSetupDialogController', ndSetupDialogController)\n\n  /** @ngInject */\n  function ndSetupDialogController($scope, $mdDialog, $mdToast, $filter, api, options, delayInSeconds, HTTP_STATUS, Session) {\n\n    $scope.DELETE_DEMO_DATA = 0;\n    $scope.KEEP_DEMO_DATA = 1;\n\n    // data\n    $scope.delay = delayInSeconds;\n    $scope.options = options;\n    $scope.action = $scope.DELETE_DEMO_DATA;\n    $scope.confirmation = false;\n    $scope.selectAll = false;\n    $scope.showList = false;\n    $scope.session = Session;\n\n    // methods\n    $scope.onOptionChanged = onOptionChanged;\n    $scope.getOptionDynClass = getOptionDynClass;\n    $scope.setOption = setOption;\n    $scope.disableAcceptButton = disableAcceptButton;\n    $scope.getOkButtonTranslationKey = getOkButtonTranslationKey;\n    $scope.onSelectAllChange = onSelectAllChange;\n    $scope.accept = accept;\n    $scope.cancel = cancel;\n\n\n    function onOptionChanged(option) {\n      $scope.action = option;\n    }\n\n    function getOptionDynClass(expected) {\n      return expected == $scope.action ? 'blue-500-fg active' : '';\n    }\n\n    function setOption(value) {\n      onOptionChanged(value);\n    }\n\n    function hasOptionsSelected() {\n      return $scope.options.some(function (option) {\n        return option.status;\n      });\n    }\n\n    function disableAcceptButton() {\n      if ($scope.action === $scope.DELETE_DEMO_DATA) {\n        if ($scope.showList) {\n          if (!$scope.confirmation) {\n            return true;\n          }\n          return !hasOptionsSelected();\n        }\n      }\n      return false;\n    }\n\n    function getOkButtonTranslationKey() {\n      if ($scope.action === $scope.DELETE_DEMO_DATA) {\n        if ($scope.showList) {\n          return 'SETUP.DELETE_DATA';\n        }\n        return 'GENERAL.CONTINUE'\n      }\n      return 'SETUP.KEEP_DATA';\n    }\n\n    function onSelectAllChange() {\n      $scope.options.forEach(function (option) {\n        option.status = $scope.selectAll;\n      });\n    }\n\n    function activeRequestStatusObserver() {\n      api.account.company.get({\n        option: 'hard-delete-demo-data-status',\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          setTimeout(activeRequestStatusObserver, $scope.delay * 1000);\n          return\n        }\n\n        if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('SETUP.DELETED_OK')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n\n        $scope.fetching = false;\n        $mdDialog.hide();\n      });\n    }\n\n    function performRequest(selected) {\n      $scope.fetching = true;\n\n      api.account.company.update({\n        id: $scope.session.company.id,\n        option: 'hard-delete-demo-data',\n        selected: selected.join(',')\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          activeRequestStatusObserver();\n          return;\n        }\n\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        $scope.fetching = false;\n        $mdDialog.hide();\n      });\n    }\n\n    function accept() {\n      if ($scope.action == $scope.KEEP_DEMO_DATA) {\n        cancel();\n        return;\n      }\n\n      if (!$scope.showList) {\n        $scope.showList = true;\n        return;\n      }\n\n      var selected = $scope.options.filter(function (option) {\n        return option.status;\n      }).map(function (option) {\n        return option.id;\n      })\n\n      performRequest(selected);\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    $scope.applyChanges = function (confirmation) {\n      $scope.confirmation = confirmation;\n      $scope.$apply();\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.preview-panel', [\n            \n        ])\n        .config(config);\n\n    /** @ngInject */\n    function config($translatePartialLoaderProvider, $stateProvider, msApiProvider)\n    {\n        // Translation\n        $translatePartialLoaderProvider.addPart('app/preview-panel');\n\n    }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.preview-panel')\n    .controller('ProductVariantTransfersPreviewController', ProductVariantTransfersPreviewController);\n\n  /** @ngInject */\n  function ProductVariantTransfersPreviewController(msApi,\n                                $scope,\n                                api,\n                                $window,\n                                $timeout,\n                                $http,\n                                $state,\n                                $rootScope\n                                ) {\n    var vm = this;\n\n    vm.params = {};\n    vm.creating = false;\n    vm.updating = false;\n    vm.productVariantId = null;\n    vm.productVariant = null;\n    vm.colorById = {};\n    vm.sizeById = {};\n    vm.product = null;\n    vm.warehouses = [];\n    vm.newTOPV = {\n      amount: 1,\n      product_variant: null,\n      source_warehouse: null,\n      target_warehouse: null\n    };\n\n    // Methods\n    vm.updateAmount = updateAmount;\n\n    // Initialization\n    initialize();\n\n    // functions\n    function initialize(){\n      vm.params = $scope.$parent.$parent.$parent.vm.params;\n      vm.productVariantId = vm.params.productVariantId;\n      vm.newTOPV.product_variant = vm.productVariantId;\n      vm.newTOPV.source_warehouse = vm.params.sourceWarehouseId;\n      vm.newTOPV.target_warehouse = vm.params.targetWarehouseId;\n      vm.product = vm.params.productInstance;\n      vm.product.product_variants.forEach(function(productVariant){\n        if(productVariant.id == vm.productVariantId){\n          vm.productVariant = productVariant;\n        }\n      });\n      vm.product.color_variants.forEach(function(color){\n        vm.colorById[color.id] = color;\n      });\n      vm.product.size_variants.forEach(function(size){\n        vm.sizeById[size.id] = size;\n      });\n      api.inventories.transferOrderProductVariants.list({\n        product_variant_id: vm.productVariantId,\n        statuses: [1].join(',')\n      }, function (response) {\n        vm.transferOrderProductVariants = response.results;\n        $rootScope.$broadcast('previewPanel::loaded');\n      });\n\n      api.inventories.warehouses.list(function (response) {\n        vm.warehouses = response.results;\n      });\n\n    }\n\n    function updateAmount(transferOrderProductVariant) {\n\n      if(vm.creating || vm.updating){\n        return;\n      }\n\n      if (angular.isUndefined(transferOrderProductVariant.id)) {\n        vm.creating = true;\n        api.inventories.transferOrderProductVariants.save(transferOrderProductVariant, function (response) {\n          for(var i=0; i<vm.transferOrderProductVariants.length; i++){\n            if(vm.transferOrderProductVariants[i].id == response.id){\n              vm.transferOrderProductVariants.splice(i, 1);\n              break;\n            }\n          }\n          vm.transferOrderProductVariants.unshift(response)\n          vm.newTOPV = {\n            amount: 1,\n            product_variant: vm.productVariantId,\n            source_warehouse: null,\n            target_warehouse: null\n          };\n          vm.creating = false;\n        });\n      } else {\n        vm.updating = true;\n        api.inventories.transferOrderProductVariants.update(transferOrderProductVariant, function (response) {\n          vm.updating = false;\n        });\n      }\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.epson-printer', [])\n    .service('EpsonPrinterService', epsonPrinterService);\n\n  /** @ngInject */\n  function epsonPrinterService(DefaultRegisterService, $mdMenu, $mdDialog, $document, $rootScope, $http, $mdToast, $filter, ndPrinterUtilsService,\n                               BARCODE_DESIGN_TYPES, FeatureFlagService,\n                               PRINTER_TYPES, PAGE_SIZES, api) {\n    var service = this;\n    service.eposdev = new epson.ePOSDevice();\n    service.printer = null;\n    service.queue = [];\n    service.register = null;\n    service.force_new_device = false;\n    service.logo = null;\n    service.logo_width = null;\n    service.logo_height = null;\n    service.is_printing = false;\n\n    service.STATES = {\n      DISABLED: 'DISABLED',\n      WAITING: 'WAITING',\n      ACTIVE: 'ACTIVE',\n      CONNECTING_TO_PRINTER: 'CONNECTING_TO_PRINTER',\n      SETTING_DEFAULT_PRINTER: 'SETTING_DEFAULT_PRINTER',\n      SETTING_DEFAULT_REGISTER: 'SETTING_DEFAULT_REGISTER',\n      READY: 'READY',\n      READY_UPDATE_NEEDED: 'READY_UPDATE_NEEDED',\n\n      CLOSING: 'CLOSING',\n      CLOSED: 'CLOSED',\n      ERROR: 'ERROR'\n    };\n\n    service.startConnection = function() {\n      DefaultRegisterService.getDefaultRegister().then(function(defaultRegister) {\n        if (defaultRegister) {\n          service.connectPrinter();\n        } else {\n          DefaultRegisterService.requestDefaultRegister().then(function(defaultRegister) {\n            if (defaultRegister) {\n              service.connectPrinter();\n            } else {\n              emitState(service.STATES.ERROR);\n            }\n          });\n        }\n      });\n    };\n\n    service.connectPrinter = function() {\n      var defaultRegister = DefaultRegisterService.defaultRegister;\n      if (!defaultRegister.printer_ip) {\n        service.openPrinterDialog();\n      } else {\n        service.connectEpsonPrinter();\n      }\n    };\n\n    service.openPrinterDialog = function() {\n      $mdMenu.hide();\n      $mdDialog.show({\n        controller: 'IpEpsonPrinterDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/printer/dialogs/ip-epson-printer/ip-epson-printer-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        locals: {\n          eposdev: new epson.ePOSDevice()\n        }\n      });\n    };\n\n    service.testConnection = function(register) {\n      emitState(service.STATES.CONNECTING_TO_PRINTER);\n      service.is_printing = false;\n      service.register = register;\n\n      var printerIp = service.register.printer_ip;\n      var printerPort = service.register.use_ssl ? '8043' : '8008';\n      service.eposdev.connect(printerIp, printerPort, callbackEpsonConnect);\n    };\n\n    service.connectEpsonPrinter = function() {\n      service.is_printing = false;\n      createDevice();\n    };\n\n    service.print = function() {\n      if (service.is_printing === false) {\n        service.connectPrinter();\n      } else {\n        setTimeout(function() {\n          service.connectPrinter();\n        }, 100);\n      }\n      service.is_printing = true;\n    };\n\n    function printFromQueue() {\n      if (service.queue && service.queue.length > 0) {\n        var callback = service.queue.pop();\n        printWithRawData(callback.raw_data, callback.options);\n      } else {\n        disconnectDevice();\n      }\n    }\n\n    function createDevice() {\n      var deviceId = service.register ? (service.register.printer_device_id || 'Epson') : DefaultRegisterService.defaultRegister.printer_device_id || 'Epson';\n      var options = { 'crypto': false, 'buffer': false };\n      if (service.printer === null || service.force_new_device) {\n        service.eposdev.createDevice(deviceId, service.eposdev.DEVICE_TYPE_PRINTER, options,\n          callbackCreateEpsonDevice);\n      } else {\n        printFromQueue();\n      }\n    }\n\n    function callbackEpsonConnect(resultConnect) {\n      if ((resultConnect === 'OK') || (resultConnect === 'SSL_CONNECT_OK')) {\n        createDevice();\n      } else {\n        service.queue = [];\n        emitState(service.STATES.ERROR);\n      }\n      service.register = null;\n    }\n\n    function callbackCreateEpsonDevice(deviceObj, errorCode) {\n      if (deviceObj === null && errorCode !== 'DEVICE_IN_USE') {\n        emitState(service.STATES.CONNECTING_TO_PRINTER);\n        setTimeout(function() {\n          service.force_new_device = true;\n          service.eposdev.connect(\n            DefaultRegisterService.defaultRegister.printer_ip,\n            DefaultRegisterService.defaultRegister.use_ssl ? '8043' : '8008',\n            callbackEpsonConnect\n          );\n        }, 100);\n        return;\n      } else if (deviceObj === null) {\n        emitState(service.STATES.ERROR);\n        return;\n      }\n      service.force_new_device = false;\n      service.printer = deviceObj;\n      emitState(service.STATES.READY);\n      printFromQueue();\n    }\n\n    function disconnectDevice() {\n      if (service.queue.length === 0) {\n        service.eposdev.deleteDevice(service.printer, callbackDeleteDevice);\n      }\n    }\n\n    function callbackDeleteDevice() {\n      service.printer = null;\n      service.is_printing = false;\n    }\n\n    function emitState(state) {\n      $rootScope.$emit('ndPrinter::setState',\n        state\n      );\n    }\n\n    function send() {\n      service.printer.onreceive = function() {\n        service.is_printing = false;\n        disconnectDevice();\n      };\n\n      service.printer.onerror = function() {\n        service.queue = [];\n        service.is_printing = false;\n        emitState(service.STATES.CONNECTING_TO_PRINTER);\n        disconnectDevice();\n      };\n      service.printer.ondisconnect = function() {\n        service.queue = [];\n        service.is_printing = false;\n        disconnectDevice();\n      };\n\n      service.printer.send(Math.random().toString().replace('0.', ''));\n    }\n\n    service.printVerificationTicket = function() {\n      service.queue.push(\n        {\n          options: null,\n          raw_data: ndPrinterUtilsService.printVerificationTicket(DefaultRegisterService.defaultRegister.printer_ip)\n        }\n      );\n\n      service.print();\n    };\n\n    service.printPosOrder = function(options) {\n      var flagEnabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n      if (flagEnabled && options && options.posOrder && options.posOrder.pos_order_invoices) {\n        var url = api.urls.accounting.printer.replace(':option', 'pos-order-invoices');\n        var params = {\n          pos_order_invoice_ids: options.posOrder.pos_order_invoices.map(function(invoice) {\n            return invoice.id;\n          }),\n          pos_order_ids: options.posOrder.id,\n          printer_type: PRINTER_TYPES.PRINTER_TYPE_QZ,\n          page_size: PAGE_SIZES.PAGE_SIZE_A4,\n          register_id: options.register ? options.register.id : null\n        };\n\n        $http.get(url, { params: params }).then(function(response) {\n          var rawData = response.data;\n\n          service.queue.push({\n            options: options,\n            raw_data: rawData\n          });\n\n          service.print();\n        }).catch(function(error) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n            .position('top right'));\n        });\n      } else {\n        service.queue.push(\n          {\n            options: options,\n            raw_data: ndPrinterUtilsService.printPosOrder(options.posOrder, options.register, false, false, options.site)\n          }\n        );\n\n        service.print();\n      }\n    };\n\n    service.printGiftCard = function(giftCard, register, options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.printGiftCard(giftCard, register)\n        }\n      );\n      service.print();\n    };\n\n    service.printGiftTicket = function(options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.printPosOrder(options.posOrder, options.register, false, true, options.site)\n        }\n      );\n\n      service.print();\n    };\n\n    service.printDevolutionCard = function(options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.printDevolutionCard(options.posOrder, options.register, options.site)\n        }\n      );\n      service.print();\n    };\n\n    service.openCashDrawer = function(options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.openCashDrawer(options.register)\n        }\n      );\n      service.print();\n    };\n\n    service.prePrintTicket = function() {\n      service.openCashDrawer({ register: service.register });\n    };\n\n    service.printRegisterActivitySoldProductsSummary = function(options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.printRegisterActivitySoldProductsSummary(options.registerActivity, options.posOrderProductVariants)\n        }\n      );\n\n      service.print();\n    };\n\n    service.printRegisterActivitySummary = function(options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.printRegisterActivitySummary(options.registerActivity, options.paymentMethodsDict)\n        }\n      );\n\n      service.print();\n    };\n\n    service.printWidthDiscover = function(options) {\n      service.queue.push(\n        {\n          options: options,\n          raw_data: ndPrinterUtilsService.printWidthDiscover(options.register)\n\n        }\n      );\n\n      service.print();\n    };\n\n    function processImages(imageCommands, raw_data, options, callback) {\n      if (imageCommands.length === 0) {\n        callback(raw_data, options);\n        return;\n      }\n      var processed = 0;\n      var lastBaseImage = null;\n      var lastCanvas = null;\n      imageCommands.forEach(function(command, index) {\n        var canvas = document.createElement('canvas');\n        var baseImage = new Image();\n        baseImage.onload = function() {\n          canvas.width = baseImage.naturalWidth;\n          canvas.height = baseImage.naturalHeight;\n          service.logo_width = baseImage.width;\n          service.logo_height = baseImage.height;\n          service.logo = canvas.getContext('2d');\n          service.logo.drawImage(baseImage, 0, 0);\n          lastBaseImage = baseImage;\n          lastCanvas = canvas;\n          processed++;\n          if (processed === imageCommands.length) {\n            callback(raw_data, options, service.logo, lastBaseImage.width, lastBaseImage.height);\n          }\n        };\n        baseImage.src = command.data;\n      });\n    }\n\n    function printWithRawData(raw_data, options) {\n      var flagEnabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n      var imageCommands = [];\n      if (flagEnabled && options && options.posOrder && options.posOrder.pos_order_invoices) {\n        imageCommands = raw_data.filter(function(command) {\n          return command.format === 'image';\n        });\n      } else {\n        imageCommands = raw_data.filter(function(command) {\n          return command.data && !command.print_barcode && service.logo === null;\n        });\n      }\n      if (imageCommands.length > 0) {\n        processImages(imageCommands, raw_data, options, __print);\n      } else {\n        __print(raw_data, options);\n      }\n    }\n\n    function __print(raw_data, options) {\n      var featureFlagAndPosOrderInvoice = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE') && options && options.posOrder && options.posOrder.pos_order_invoices;\n      for (var i in raw_data) {\n        if (featureFlagAndPosOrderInvoice) {\n          if (raw_data[i].data && raw_data[i].format === 'image' && service.logo !== null) {\n            service.printer.addImage(service.logo, 0, 0, service.logo_width, service.logo_height);\n          } else {\n            service.printer.addCommand(raw_data[i].data);\n          }\n        } else {\n          if (raw_data[i].data && !raw_data[i].print_barcode && service.logo !== null) {\n            service.printer.addImage(service.logo, 0, 0, service.logo_width, service.logo_height);\n          } else if (raw_data[i].data && raw_data[i].print_barcode) {\n            var barcode = options.generated_devolution_card ? options.generated_devolution_card.barcode : options.posOrder.barcode;\n            barcode = '{B'.concat(barcode);\n            var height;\n\n            if (raw_data[i].barcode_design === BARCODE_DESIGN_TYPES.SMALL) {\n              height = 50;\n            }\n\n            service.printer.addBarcode(barcode, service.printer.BARCODE_CODE128, service.printer.HRI_BELOW, undefined, undefined, height);\n          } else {\n            service.printer.addCommand(raw_data[i]);\n          }\n        }\n      }\n\n      if (options && options.openDrawer) {\n        service.printer.addPulse();\n      }\n\n      send();\n    }\n  }\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.verifactu-integration-installed-app', [])\n    .factory('VerifactuIntegrationInstalledApp', _VerifactuIntegrationInstalledApp);\n\n  /** @ngInject */\n  function _VerifactuIntegrationInstalledApp(\n    $filter,\n    InstalledIntegrationApp,\n    INSTALLED_INTEGRATION_APP_STATUS,\n    VERIFACTU_DOCUMENTS_STATUS,\n    VERIFACTU_ENVIRONMENT_STATUS\n  ) {\n\n    function VerifactuIntegrationInstalledApp(value) {\n      InstalledIntegrationApp.call(this, value);\n      this.integration_app = this._getValue(value, 'integration_app', {});\n      this.fiscal_address = this._getValue(value, 'fiscal_address', null);\n      this.vat = this._getValue(value, 'vat', null);\n      this.identity_card = this._getValue(value, 'identity_card', null);\n      this.contract = this._getValue(value, 'contract', null);\n      this.documents_status = this._getValue(value, 'documents_status', VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_PENDING_TO_UPLOAD);\n      this.rejected_reason = this._getValue(value, 'rejected_reason', null);\n      this.rejected_at = this._getValue(value, 'rejected_at', null);\n      this.rejected_by = this._getValue(value, 'rejected_by', null);\n      this.approved_at = this._getValue(value, 'approved_at', null);\n      this.approved_by = this._getValue(value, 'approved_by', null);\n      this.environment_status = this._getValue(value, 'environment_status', VERIFACTU_ENVIRONMENT_STATUS.ENVIRONMENT_STATUS_TEST);\n\n      this.getName = function() {\n        if (!this.id) {\n          return $filter('translate')('VERIFACTU.NEW_VERIFACTU_INTEGRATION');\n        }\n        if (this.vat) {\n          return 'VeriFactu (' + this.vat + ')';\n        }\n        return 'VeriFactu';\n      };\n\n      this.getDocumentsStatusName = function() {\n        return 'VERIFACTU.' + VERIFACTU_DOCUMENTS_STATUS[this.documents_status];\n      };\n\n      this.getContractFileName = function() {\n        if (!this.contract) {\n          return '';\n        }\n        var parts = this.contract.split('/');\n        return parts[parts.length - 1].substring(0, parts[parts.length - 1].indexOf('?'));\n      };\n\n      this.toJson = function() {\n        return {\n          id: this.id,\n          fiscal_address: this.fiscal_address\n        };\n      };\n\n      this.isRejected = function() {\n        return this.documents_status === VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_REJECTED;\n      };\n\n      this.isPendingToUpload = function() {\n        return this.documents_status === VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_PENDING_TO_UPLOAD;\n      };\n\n      this.isPendingToReview = function() {\n        return this.documents_status === VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_PENDING_TO_REVIEW;\n      };\n\n      this.isApproved = function() {\n        return this.documents_status === VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_APPROVED;\n      };\n\n      this.canUploadDocuments = function() {\n        return this.isPendingToUpload() || this.isPendingToReview() || this.isRejected();\n      };\n\n      this.isEnabled = function() {\n        return this.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED;\n      };\n\n      this.isDisabled = function() {\n        return this.status === INSTALLED_INTEGRATION_APP_STATUS.DISABLED;\n      };\n\n      this.canEnableTestMode = function() {\n        return this.isApproved() && this.isDisabled();\n      };\n\n      this.canEnableRealMode = function() {\n        return false;\n      };\n\n      this.isTestEnvironment = function() {\n        return this.environment_status === VERIFACTU_ENVIRONMENT_STATUS.ENVIRONMENT_STATUS_TEST;\n      };\n    }\n\n    VerifactuIntegrationInstalledApp.prototype = Object.create(InstalledIntegrationApp.prototype);\n    VerifactuIntegrationInstalledApp.prototype.constructor = VerifactuIntegrationInstalledApp;\n\n    return VerifactuIntegrationInstalledApp;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.installed-integration-app', [])\n    .factory('InstalledIntegrationApp', _InstalledIntegrationApp);\n\n  /** @ngInject */\n  function _InstalledIntegrationApp(\n    $filter,\n    Factory,\n    INSTALLED_INTEGRATION_APP_STATUS\n  ) {\n\n    function InstalledIntegrationApp(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.status = this._getValue(value, 'status', INSTALLED_INTEGRATION_APP_STATUS.DISABLED);\n      this.start_at = this._getValue(value, 'start_at', null);\n      this.end_at = this._getValue(value, 'end_at', null);\n      this.created_at = this._getValue(value, 'created_at', null);\n      this.updated_at = this._getValue(value, 'updated_at', null);\n      this.installed_at = this._getValue(value, 'installed_at', null);\n    }\n\n    InstalledIntegrationApp.prototype = Object.create(Factory.prototype);\n    InstalledIntegrationApp.prototype.constructor = InstalledIntegrationApp;\n\n    return InstalledIntegrationApp;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.installed-integration-app-factory', [])\n    .factory('InstalledIntegrationAppFactory', _InstalledIntegrationAppFactory);\n\n  /** @ngInject */\n  function _InstalledIntegrationAppFactory(\n    VerifactuIntegrationInstalledApp,\n    INTEGRATION_APP_TYPE\n  ) {\n\n    function InstalledIntegrationAppFactory() {\n      this.getInstalledIntegrationAppClass = function(integrationApp) {\n        if (integrationApp.type === INTEGRATION_APP_TYPE.VERIFACTU) {\n          return VerifactuIntegrationInstalledApp;\n        }\n      };\n    }\n\n    return InstalledIntegrationAppFactory;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.warehouse', [])\n    .factory('Warehouse', _Warehouse);\n\n  function _Warehouse(\n    TicketConfiguration,\n    WAREHOUSE_TYPES\n  ) {\n\n    function Warehouse(value) {\n      this.id = value && value.id ? value.id : null;\n      this.code = value && value.code ? value.code : null;\n      this.name = value && value.name ? value.name : null;\n      this.position = value && value.position ? value.position : null;\n      this.currency = value && value.currency ? value.currency : null;\n      this.ticket_configuration = value ? value.ticket_configuration : null;\n      this.ticketConfiguration = value && value.ticket_configuration_object ? new TicketConfiguration(value.ticket_configuration_object) : null;\n      this.type = value ? value.type : null;\n      this.address_1 = value ? value.address_1 : null;\n      this.address_2 = value ? value.address_2 : null;\n      this.zip = value ? value.zip : null;\n      this.city = value ? value.city : null;\n      this.country = value ? value.country : null;\n      this.phone = value ? value.phone : null;\n      this.is_principal = value ? value.is_principal : null;\n      this.pricing_tier = value ? value.pricing_tier : null;\n\n      this.latitude = value ? value.latitude : null;\n      this.longitude = value ? value.longitude : null;\n\n      this.fiscal_address = value ? value.fiscal_address : null;\n      this.fiscal_address_instance = value ? value.fiscal_address_instance : null;\n\n      this.simplified_invoice_serial_number_type = value ? value.simplified_invoice_serial_number_type : null;\n      this.corrective_simplified_invoice_serial_number_type = value ? value.corrective_simplified_invoice_serial_number_type : null;\n      this.custom_invoice_serial_number_type = value ? value.custom_invoice_serial_number_type : null;\n      this.create_register_activity_invoices = value ? value.create_register_activity_invoices : null;\n      this.register_activity_invoice_serial_number_type = value ? value.register_activity_invoice_serial_number_type : null;\n      this.register_activity_invoice_contact = value ? value.register_activity_invoice_contact : null;\n      this.register_activity_invoice_contact_instance = value ? value.register_activity_invoice_contact_instance : null;\n\n      this.replenishment_warehouse = value ? value.replenishment_warehouse : null;\n      this.transfer_lead_time = value ? value.transfer_lead_time : null;\n      this.order_frequency = value ? value.order_frequency : null;\n      this.expansion_percentage = value ? value.expansion_percentage : null;\n      this.sendcloud_warehouse_sender_address = value ? value.sendcloud_warehouse_sender_address : null;\n      this.contact_person = value ? value.contact_person : null;\n      this.default_tax = value ? value.default_tax : null;\n      this.default_tax_instance = value ? value.default_tax_instance : null;\n      this.total_area = value ? value.total_area : null;\n      this.total_volume = value ? value.total_volume : null;\n\n      this.isWarehouse = function() {\n        return this.type === WAREHOUSE_TYPES.WAREHOUSE;\n      };\n\n      this.isStore = function() {\n        return this.type === WAREHOUSE_TYPES.STORE;\n      };\n    }\n\n    return Warehouse;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.ticket-configuration', [])\n    .factory('TicketConfiguration', _TicketConfiguration);\n\n  function _TicketConfiguration(BARCODE_DESIGN_TYPES) {\n\n    function TicketConfiguration(value) {\n      this.id = value && value.id ? value.id : null;\n      this.name = value && value.name ? value.name : null;\n      this.logo = value && value.logo ? value.logo : null;\n      this.printLogo = value && value.print_logo ? value.print_logo : null;\n      this.footer = value && value.footer ? value.footer : null;\n      this.footerDevolutionCard = value && value.footer_devolution_card ? value.footer_devolution_card : null;\n      this.closure = value && value.closure ? value.closure : null;\n      this.returnPolicy = value && value.return_policy ? value.return_policy : null;\n      this.returnInstructions = value && value.return_instructions ? value.return_instructions : null;\n      this.printBarcode = value && value.print_barcode ? value.print_barcode : null;\n      this.systemPrinter = value && value.system_printer ? value.system_printer : null;\n      this.logoBase64 = value && value.logo_b64 ? value.logo_b64 : null;\n      this.productIdentifier = value && value.product_identifier ? value.product_identifier : null;\n      this.variantIdentifier = value && value.variant_identifier ? value.variant_identifier : null;\n      this.posOrderEmailSubject = value && value.pos_order_email_subject ? value.pos_order_email_subject : null;\n      this.posOrderEmailBody = value && value.pos_order_email_body ? value.pos_order_email_body : null;\n      this.posOrderInvoiceEmailSubject = value && value.pos_order_invoice_email_subject ? value.pos_order_invoice_email_subject : null;\n      this.posOrderInvoiceEmailBody = value && value.pos_order_invoice_email_body ? value.pos_order_invoice_email_body : null;\n      this.productPricePosition = value && value.product_price_position ? value.product_price_position : null;\n      this.barcodeDesign = value && value.barcode_design ? value.barcode_design : null;\n      this.totalDesign = value && value.total_design ? value.total_design : null;\n\n      this.getBarcodeHeight = function() {\n        if (this.barcodeDesign === BARCODE_DESIGN_TYPES.SMALL) {\n            return 24;\n          }\n          return 48;\n      };\n\n    }\n\n    return TicketConfiguration;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.register', [])\n    .factory('Register', _Register);\n\n  function _Register(Warehouse) {\n\n    function Register(value) {\n      this.id = value && value.id ? value.id : null;\n      this.code = value && value.code ? value.code : null;\n      this.is_closed = value && value.is_closed ? value.is_closed : null;\n      this.warehouse = value && value.warehouse ? new Warehouse(value.warehouse) : null;\n      this.printName = value && value.print_name ? value.print_name : null;\n      this.printDeviceId = value && value.print_device_id ? value.print_device_id : null;\n      this.printerCharactersPerLine = value && value.printer_characters_per_line ? value.printer_characters_per_line : null;\n      this.printerIp = value && value.printer_ip ? value.printer_ip : null;\n      this.useSSL = value && value.use_ssl ? value.use_ssl : null;\n      this.currency = value && value.currency ? value.currency : null;\n      this.paymentMethods = value && value.payment_methods ? value.payment_methods : null;\n      this.relatedIntegrationApp = value && value.related_integration_app ? value.related_integration_app : null;\n    }\n\n    return Register;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.product-planning-configuration', [])\n    .factory('ProductPlanningConfiguration', _ProductPlanningConfiguration);\n\n  function _ProductPlanningConfiguration() {\n\n    function ProductPlanningConfiguration(value) {\n       // todo: refactor to camelcase when product factory is refactored\n      this.id = value && value.id ? value.id : null;\n      this.is_limit_min = value && value.is_limit_min != undefined ? value.is_limit_min : false;\n      this.limit_min_qty = value && value.limit_min_qty ? value.limit_min_qty : null;\n      this.is_limit_max = value && value.is_limit_max != undefined ? value.is_limit_max : false;\n      this.max_type = value && value.max_type ? value.max_type : null;\n      this.max_percentage_value = value && value.max_percentage_value ? value.max_percentage_value : null;\n      this.max_fixed_amount_value = value && value.max_fixed_amount_value ? value.max_fixed_amount_value : null;\n      this.is_limit_max_to_min_stock_origin = value && value.is_limit_max_to_min_stock_origin != undefined ? value.is_limit_max_to_min_stock_origin : false;\n    }\n\n    return ProductPlanningConfiguration;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.packing-order-sendcloud-data', [])\n    .factory('PackingOrderSendcloudData', _PackingOrderSendcloudData);\n\n  /** @ngInject */\n  function _PackingOrderSendcloudData() {\n\n    function PackingOrderSendcloudData(value) {\n      var SENDCLOUD_PARCEL_URL = 'https://app.sendcloud.com/v2/shipping/PARCEL_ID/details/';\n      this.id = value ? value.id : null;\n      this.createdAt = value && value.created_at ? new Date(value.created_at) : null;\n      this.updatedAt = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.externalId = value ? value.external_id : null;\n      this.externalParcelId = value ? value.external_parcel_id : null;\n      this.orderNumber = value ? value.order_number : null;\n      this.externalStatus = value ? value.external_status : null;\n      this.externalStatusMsg = value ? value.external_status_msg : null;\n      this.trackingNumber = value ? value.tracking_number : null;\n      this.labelPrinted = value ? value.label_printed : false;\n\n      // UI properties\n      this.parcelUrl = null;\n      if(this.externalParcelId){\n        this.parcelUrl = SENDCLOUD_PARCEL_URL.replace('PARCEL_ID', this.externalParcelId);\n      }\n    }\n\n    return PackingOrderSendcloudData;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.inventory-configuration', [])\n    .factory('InventoryConfiguration', _InventoryConfiguration);\n\n  function _InventoryConfiguration() {\n\n    function InventoryConfiguration(value) {\n      value = value || {};\n\n      this.id = value.id || null;\n      this.company = value.company || null;\n      this.tags = value.tags || null;\n      this.code_128_product_counter = value.code_128_product_counter || null;\n      this.ean_13_company_prefix = value.ean_13_company_prefix || null;\n      this.ean_13_product_counter = value.ean_13_product_counter || null;\n      this.ean_8_company_prefix = value.ean_8_company_prefix || null;\n      this.ean_8_product_counter = value.ean_8_product_counter || null;\n      this.upc_a_company_prefix = value.upc_a_company_prefix || null;\n      this.upc_a_product_counter = value.upc_a_product_counter || null;\n      this.pos_order_default_serial_number_type = value.pos_order_default_serial_number_type || null;\n      this.sale_order_default_serial_number_type = value.sale_order_default_serial_number_type || null;\n      this.sale_order_devolution_default_serial_number_type = value.sale_order_devolution_default_serial_number_type || null;\n      this.transfer_order_default_serial_number_type = value.transfer_order_default_serial_number_type || null;\n      this.purchase_order_default_serial_number_type = value.purchase_order_default_serial_number_type || null;\n      this.sale_order_delivery_default_serial_number_type = value.sale_order_delivery_default_serial_number_type || null;\n      this.sale_order_delivery_devolution_default_serial_number_type = value.sale_order_delivery_devolution_default_serial_number_type || null;\n      this.transfer_order_delivery_default_serial_number_type = value.transfer_order_delivery_default_serial_number_type || null;\n      this.purchase_order_delivery_default_serial_number_type = value.purchase_order_delivery_default_serial_number_type || null;\n      this.retail_simplified_invoice_default_serial_number_type = value.retail_simplified_invoice_default_serial_number_type || null;\n      this.retail_invoice_default_serial_number_type = value.retail_invoice_default_serial_number_type || null;\n      this.corrective_invoice_default_serial_number_type = value.corrective_invoice_default_serial_number_type || null;\n      this.wholesale_invoice_default_serial_number_type = value.wholesale_invoice_default_serial_number_type || null;\n      this.wholesale_proforma_invoice_default_serial_number_type = value.wholesale_proforma_invoice_default_serial_number_type || null;\n      this.wholesale_quote_invoice_default_serial_number_type = value.wholesale_quote_invoice_default_serial_number_type || null;\n      this.production_order_default_serial_number_type = value.production_order_default_serial_number_type || null;\n      this.adjustment_order_default_serial_number_type = value.adjustment_order_default_serial_number_type || null;\n      this.stocktaking_default_serial_number_type = value.stocktaking_default_serial_number_type || null;\n      this.picking_order_default_serial_number_type = value.picking_order_default_serial_number_type || null;\n      this.packing_order_default_serial_number_type = value.packing_order_default_serial_number_type || null;\n      this.pos_order_email_subject = value.pos_order_email_subject || null;\n      this.pos_order_email_body = value.pos_order_email_body || null;\n      this.pos_order_invoice_email_subject = value.pos_order_invoice_email_subject || null;\n      this.pos_order_invoice_email_body = value.pos_order_invoice_email_body || null;\n      this.product_default_serial_number_type = value.product_default_serial_number_type || null;\n      this.use_product_default_serial_number_type = value.use_product_default_serial_number_type || null;\n      this.product_code_template = value.product_code_template || null;\n      this.product_code_template_counter_length = value.product_code_template_counter_length || null;\n      this.product_variant_sku_template = value.product_variant_sku_template || null;\n      this.product_variant_sku_template_counter_length = value.product_variant_sku_template_counter_length || null;\n      this.default_contact_balance_ratio = value.default_contact_balance_ratio || null;\n      this.default_contact_balance_ratio_active = value.default_contact_balance_ratio_active || null;\n      this.accumulate_balance_when_balance_discount = value.accumulate_balance_when_balance_discount || null;\n      this.loyalty_rounding = value.loyalty_rounding || null;\n      this.tpv_dialog_product_not_found = value.tpv_dialog_product_not_found || null;\n      this.analysis_period_days = value.analysis_period_days || null;\n      this.transfer_lead_time_days = value.transfer_lead_time_days || null;\n      this.order_frequency_days = value.order_frequency_days || null;\n      this.replenishment_warehouse = value.replenishment_warehouse || null;\n      this.replenishment_warehouse_name = value.replenishment_warehouse_name || null;\n      this.purchase_lead_time_days = value.purchase_lead_time_days || null;\n      this.purchase_order_frequency_days = value.purchase_order_frequency_days || null;\n      this.replenishment_max_total_overexceed_percentage = value.replenishment_max_total_overexceed_percentage || null;\n      this.delivery_days = value.delivery_days || null;\n      this.only_replenishment_stock_for_coverage = value.only_replenishment_stock_for_coverage || null;\n      this.invoice_data_protection = value.invoice_data_protection || null;\n      this.quote_data_protection = value.quote_data_protection || null;\n      this.proforma_data_protection = value.proforma_data_protection || null;\n    }\n\n    return InventoryConfiguration;\n  }\n})();\n\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.inventories.gift-card', [])\n    .factory('GiftCard', _GIftCard);\n\n  function _GIftCard(Warehouse) {\n\n    function GiftCard(value) {\n      this.id = value && value.id ? value.id : null;\n     this.posOrderProductVariant = value && value.pos_order_product_variant ? value.pos_order_product_variant : null;\n     this.createdBy = value && value.created_by ? value.created_by : null;\n     this.customer = value && value.customer ? value.customer : null;\n     this.barcode = value && value.barcode ? value.barcode : null;\n     this.amountInclTax = value && value.amount_incl_tax !== undefined ? value.amount_incl_tax : null;\n     this.amountExclTax = value && value.amount_excl_tax  !== undefined ? value.amount_excl_tax : null;\n     this.tax = value && value.tax ? value.tax : null;\n     this.taxName = value && value.tax_name ? value.tax_name : null;\n     this.taxPercentValue = value && value.tax_percent_value ? value.tax_percent_value : null;\n     this.isValid = value && value.is_valid ? value.is_valid : null;\n     this.createdAt = value && value.created_at ? value.created_at : null;\n     this.updatedAt = value && value.updated_at ? value.updated_at : null;\n     this.isVoucher = value && value.is_voucher ? value.is_voucher : null;\n    }\n\n    return GiftCard;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.spain-fiscal-profile', [])\n    .factory('SpainFiscalProfile', _SpainFiscalProfile);\n\n  /** @ngInject */\n  function _SpainFiscalProfile(FiscalProfile, SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES) {\n    function SpainFiscalProfile(value) {\n      FiscalProfile.call(this, value);\n      this.verifactu_type = value ? value.verifactu_type : SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES.VERIFACTU_TYPE_UNKNOWN;\n      this.fiscal_address = value ? value.fiscal_address : null;\n\n      this.isSpainFiscalProfile = function(){\n        return true;\n      };\n    }\n\n    SpainFiscalProfile.prototype = Object.create(FiscalProfile.prototype);\n    SpainFiscalProfile.prototype.constructor = SpainFiscalProfile;\n    return SpainFiscalProfile;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.fiscal-profile', [])\n    .factory('FiscalProfile', _FiscalProfile);\n\n  /** @ngInject */\n  function _FiscalProfile() {\n    function FiscalProfile(value) {\n      this.id = value ? value.id : null;\n      this.requires_completion = value ? value.requires_completion : false;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.profile_type = value ? value.profile_type : null;\n\n      this.isSpainFiscalProfile = function(){\n        return false;\n      };\n    }\n\n    return FiscalProfile;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.fiscal-profile-factory', [])\n    .factory('FiscalProfileFactory', _FiscalProfileFactory);\n\n  /** @ngInject */\n  function _FiscalProfileFactory(\n    FiscalProfile,\n    SpainFiscalProfile\n  ) {\n    return {\n      create: function(data) {\n        switch (data.profile_type) {\n          case 'SpainFiscalProfile':\n            return new SpainFiscalProfile(data);\n          default:\n            return new FiscalProfile(data);\n        }\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.accounting.mutable-invoice-fields', [])\n    .factory('MutableInvoiceFields', _MutableInvoiceFields);\n\n  function _MutableInvoiceFields(Factory, Session) {\n\n    function MutableInvoiceFields(value) {\n      Factory.call(this);\n      this.id = this._getValue(value, 'id', null);\n      this.notes = this._getValue(value, 'notes', null);\n      this.payment_status = this._getValue(value, 'payment_status', null);\n      this.payment_method = this._getValue(value, 'payment_method', null);\n      this.tags = this._getValue(value, 'tags', []);\n      this.credit_note_of = this._getValue(value, 'credit_note_of', null);\n      this.language = this._getValue(value, 'language', Session.user.lang);\n      this.private_notes = this._getValue(value, 'private_notes', null);\n    }\n\n    MutableInvoiceFields.prototype = Object.create(Factory.prototype);\n    MutableInvoiceFields.prototype.constructor = MutableInvoiceFields;\n\n    MutableInvoiceFields.prototype.toJson = function () {\n      return {\n        id: this.id,\n        notes: this.notes,\n        private_notes: this.private_notes,\n        payment_status: this.payment_status,\n        payment_method: this.payment_method,\n        tags: this.tags,\n        credit_note_of: this.credit_note_of,\n        language: this.language,\n      };\n    };\n\n    return MutableInvoiceFields;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.trial-expired', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_trial_expired', {\n      url: '/trial-expired',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-with-toolbar.html',\n          controller: 'MainController as vm'\n        },\n        'toolbar@app.pages_trial_expired': {\n          templateUrl: 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html',\n          controller: 'ToolbarController as vm'\n        },\n        'content@app.pages_trial_expired': {\n          templateUrl: 'app/main/pages/trial-expired/trial-expired.html',\n          controller: 'TrialExpiredController as vm'\n        },\n        'quickPanel@app.pages_trial_expired': {\n          templateUrl: 'app/quick-panel/quick-panel.html',\n          controller: 'QuickPanelController as vm'\n        }\n      }\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/trial-expired');\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.pages.trial-expired')\n    .controller('TrialExpiredController', TrialExpiredController);\n\n  /** @ngInject */\n  function TrialExpiredController(Session, $state) {\n    if (!Session.redirectFreemiumPage()) {\n      $state.go('app.analytics.start');\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.shopify', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_shopify', {\n      url: '/shopify/:type',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_shopify': {\n          templateUrl: 'app/main/pages/shopify/shopify.html',\n          controller: 'ShopifyController as vm'\n        }\n      },\n      bodyClass: 'shopify'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/shopify');\n\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.shopify')\n    .controller('ShopifyController', ShopifyController);\n\n  /** @ngInject */\n  function ShopifyController($location, $state, Session) {\n\n    // Data\n    var vm = this;\n    vm.type = $state.params.type;\n    // Methods\n    initialize();\n\n    // Functions\n    function initialize(){\n      //if($location.search().site && Session.isAuthenticated()){\n      //  $state.go('app.ecommerce.sites.site.details', {id: $location.search().site});\n      //}\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.maintenance', [])\n    .config(config);\n\n  /** @ngInject */\n  function config($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n    // State\n    $stateProvider.state('app.pages_maintenance', {\n      url: '/maintenance',\n      views: {\n        'main@': {\n          templateUrl: 'app/core/layouts/content-only.html',\n          controller: 'MainController as vm'\n        },\n        'content@app.pages_maintenance': {\n          templateUrl: 'app/main/pages/maintenance/maintenance.html',\n          controller: 'MaintenanceController as vm'\n        }\n      },\n      bodyClass: 'maintenance'\n    });\n\n    // Translation\n    $translatePartialLoaderProvider.addPart('app/main/pages/maintenance');\n\n  }\n\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.maintenance')\n    .controller('MaintenanceController', MaintenanceController);\n\n  /** @ngInject */\n  function MaintenanceController() {\n    // Data\n\n    // Methods\n\n    //////////\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.pages.hub')\n    .controller('HubController', HubController);\n\n  /** @ngInject */\n  function HubController(\n    $location,\n    $state,\n    $mdMedia,\n    $mdSidenav,\n    msNavigationService,\n    ContactData,\n    Session,\n    api,\n    HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.company = null;\n    vm.navigation = null;\n    vm.contact = ContactData.results[0];\n    vm.logoUrl = 'https://stockagile.com?utm_source=stockagile&' +\n      'utm_medium=panel&' +\n      'utm_campaign=hub&' +\n      'utm_term=' + vm.contact.company + '&' +\n      // 'utm_content=' + vm.contact.company + '&' +\n      'contact_id=' + vm.contact.id + '&' +\n      'contact_type=' + vm.contact.type;\n\n    // Methods\n    vm.isActive = isActive;\n    vm.toggleSidenav = toggleSidenav;\n    vm.goToStockagile = goToStockagile;\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      //api.hub.company.get({}, function (response, callback, status) {\n      //  if (status === HTTP_STATUS.HTTP_200_OK) {\n      //    vm.company = response;\n      //  }\n      //});\n\n      /*msNavigationService.saveItem('sales', {\n        title: 'NAVIGATION.SALES',\n        permission: 'hub',\n        icon: 'icon-tag-text-outline',\n        class: 'catalog'\n      });*/\n\n      msNavigationService.saveItem('receipts', {\n        title: 'HUB.RECEIPTS',\n        state: 'app.pages_hub.receipts',\n        permission: 'hub',\n        svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg'\n      });\n\n      msNavigationService.saveItem('invoices', {\n        title: 'NAVIGATION.INVOICES',\n        state: 'app.pages_hub.invoices',\n        permission: 'hub',\n        svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg'\n      });\n\n      msNavigationService.saveItem('proformas', {\n        title: 'NAVIGATION.PROFORMAS',\n        state: 'app.pages_hub.proformas',\n        permission: 'hub',\n        svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg'\n      });\n\n      msNavigationService.saveItem('quotes', {\n        title: 'NAVIGATION.QUOTES',\n        state: 'app.pages_hub.quotes',\n        permission: 'hub',\n        svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg'\n      });\n\n      /*msNavigationService.saveItem('purchases', {\n        title: 'NAVIGATION.PURCHASES',\n        permission: 'hub',\n        icon: 'icon-tag-text-outline',\n        class: 'catalog'\n      });\n\n      msNavigationService.saveItem('purchases.purchases', {\n        title: 'NAVIGATION.PURCHASES',\n        state: 'app.pages_hub.purchases',\n        permission: 'hub',\n        svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg',\n      });*/\n\n      vm.navigation = msNavigationService.getNavigation();\n\n    }\n\n    function isActive(route) {\n      return $state.current.name === route;\n    }\n\n    function toggleSidenav() {\n      $mdSidenav('navigation').toggle();\n    }\n\n    function goToStockagile() {\n      window.open(vm.logoUrl, '_blank');\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndTopBar', {\n    bindings: {\n      leading: '@',\n      barTitle: '@',\n      actions: '@',\n    },\n    transclude: {\n      leadingSlot: '?leading',\n      barTitleSlot: '?barTitle',\n      actionsSlot: '?actions'\n    },\n    templateUrl: 'app/main/components/top-bar/top-bar.html',\n    controller: function ($scope) {\n      var vm = this;\n      // Controller logic here\n    }\n  });\n})();\n\n(function () {\n  'use strict';\n\n  angular.module('app.core')\n    .component('ndTabs', {\n      bindings: {\n        tabs: '<', // [{name: 'locations', label: 'WAREHOUSE.LOCATIONS'}, ...]\n        selected: '=', // ng-model for selected tab\n        onTabChange: '&?' // optional callback\n      },\n      templateUrl: 'app/main/components/tabs/tabs.html',\n      controllerAs: 'vm',\n      controller: function () {\n        var vm = this;\n\n        vm.selectTab = function(tab) {\n          if (vm.selected !== tab.name) {\n            vm.selected = tab.name;\n            if (vm.onTabChange) {\n              vm.onTabChange({tab: tab});\n            }\n          }\n        };\n      }\n    });\n})();\n\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndScreenTitle', {\n    bindings: {\n      headerTitle: '@',\n      subtitle: '@',\n      status: '@',\n      statusColors: '<',\n      statusLabels: '<',\n      statusTranslate: '@'\n    },\n    templateUrl: 'app/main/components/screen-title/screen-title.html',\n    controller: function ($scope, $filter) {\n      var vm = this;\n\n\n      $scope.getStatusColor = function(status) {\n        if (vm.statusColors && vm.statusColors[status]) {\n          return vm.statusColors[status];\n        }\n      };\n\n      $scope.getStatusLabel = function(status) {\n        if (vm.statusLabels && vm.statusColors[status]) {\n          return $filter('translate')(vm.statusTranslate+ '.' +vm.statusLabels[status]);\n        }\n      };\n\n    }\n  });\n})();\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndPaginatedDropdown', {\n    bindings: {\n      url: '<', // function to fetch data\n      items: '=?', // array of items to display in the dropdown\n      transformCallback: '&', // function to transform the item, probably we should swap this to the constructor class. p.e Warehouse()\n      search: '<?', // indicates if the dropdown has a search input\n      clearable: '<?', // indicates if the dropdown has a clear button\n      selectedItems: '=', // array of selected items\n      onChanged: '&?', // function to call when the selected items change\n      selectPlaceholder: '@', // placeholder for the select input\n      variant: '@?', // type of paginated dropdown -> types availables: nd-input | nd-form,\n      additionalClass: '@?', // additional class for the container\n      isMultiple: '<?', // indicates if the dropdown is multiple or not\n      icon: '@?', // icon for the dropdown\n    },\n    transclude: {\n      itemTemplate: '?itemTemplate',\n    },\n    templateUrl: 'app/main/components/paginated-dropdown/paginated-dropdown.html',\n    controllerAs: 'vm',\n    controller: function ($scope, $transclude) {\n      var vm = this;\n      vm.items = vm.items || null;\n      vm.loading = false;\n      vm.searchText = '';\n      vm.clearable = angular.isDefined(vm.clearable) ? vm.clearable : false;\n      vm.$transclude = $transclude;\n\n      vm.getContainerClass = function () {\n        var classes = [];\n\n        if (vm.variant === 'nd-input' || !vm.variant) {\n          classes.push('nd-search-input nd-filter-input');\n        }\n        if (vm.additionalClass) {\n          classes.push(vm.additionalClass);\n        }\n        return classes.join(' ');\n      };\n\n      vm.loadData = function () {\n        vm.loading = true;\n        vm.url({}, function (response) {\n          vm.items = response.results.map(function (item) {\n            // return vm.transformCallback({item: item});\n            return item;\n          });\n          vm.loading = false;\n        });\n      };\n\n      vm.onDropdownChanged = function () {\n        if (vm.onChanged) {\n          vm.onChanged();\n        } else {\n          $scope.$emit('ndPaginatedDropdown::changed');\n        }\n      };\n\n      vm.clear = function () {\n        vm.selectedItems = [];\n        vm.onDropdownChanged();\n      };\n\n      vm.isSvgIcon = function () {\n        if (!vm.icon){\n          return false;\n        }\n        return vm.icon.endsWith('.svg');\n      };\n\n      vm.$onInit = function () {\n        vm.isMultiple = angular.isDefined(vm.isMultiple) ? vm.isMultiple : true;\n        vm.showLabel = isLabelVisible();\n        if(!vm.items) {\n          vm.loadData();\n        }\n        $scope.$on('ndFilter::clear', function () {\n          vm.clear();\n        });\n      };\n\n      function isLabelVisible() {\n        return vm.variant === 'nd-form';\n      }\n\n    }\n  });\n})();\n\n(function() {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.directive('ndMenuButton', function($compile) {\n    return {\n      restrict: 'E',\n      transclude: true,\n      scope: {\n        mdClass: '=?'\n      },\n      templateUrl: 'app/main/components/menu-button/menu-button.html',\n      controllerAs: 'vm',\n      controller: function($scope) {\n        var vm = this;\n        vm.mdClass = $scope.mdClass;\n        vm.openMenu = function($mdMenu, ev) {\n          $mdMenu.open(ev);\n        };\n      },\n      link: function(scope, element, attrs, ctrl, transclude) {\n        var mainTarget = element[0].querySelector('.left-button-slot');\n        var actionsTarget = element[0].querySelector('.actions-slot');\n        var mainButtonNode = null;\n\n        transclude(scope.$parent, function(clone) {\n          angular.forEach(clone, function(node) {\n            if (node.nodeType !== Node.ELEMENT_NODE) return;\n\n            var isMain = node.hasAttribute('main-action');\n            var isAction = node.hasAttribute('action');\n\n            if (isAction) {\n              var originalNode = isMain ? node.cloneNode(true) : node;\n              var compiledNode = $compile(originalNode)(scope.$parent);\n\n              var wrapper = document.createElement('md-menu-item');\n              wrapper.appendChild(compiledNode[0]);\n              actionsTarget.appendChild(wrapper);\n            }\n\n            if (isMain) {\n              node.classList.add('left-button');\n              if (scope.mdClass) {\n                scope.mdClass.split(' ').forEach(function(className) {\n                  node.classList.add(className);\n                });\n              }\n              mainButtonNode = node;\n              mainTarget.appendChild(node);\n            }\n\n          });\n\n          // If main button has no ng-click, make it open the menu\n          if (mainButtonNode && !mainButtonNode.hasAttribute('ng-click')) {\n            var mdMenu = element[0].querySelector('md-menu');\n            angular.element(mainButtonNode).on('click', function(ev) {\n              var mdMenuCtrl = angular.element(mdMenu).controller('mdMenu');\n              if (mdMenuCtrl) {\n                mdMenuCtrl.open(ev);\n              }\n            });\n          }\n        });\n      }\n\n\n    };\n  });\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .component('ndInformationPanel', {\n      bindings: {\n        variation: '@', // 'info', 'warning', 'error', 'success'\n      },\n      transclude: {\n        content: 'informationContent',\n        title: '?informationTitle',\n        action: '?action'\n      },\n      controller: InformationPanelController,\n      templateUrl: 'app/main/components/information-panel/information-panel.html',\n    });\n\n  function InformationPanelController() {\n    var vm = this;\n\n    vm.getPanelClass = function () {\n      switch (vm.variation) {\n        case 'success':\n          return 'green';\n        case 'error':\n          return 'red';\n        case 'warning':\n          return 'yellow';\n        case 'info':\n        default:\n          return 'blue';\n      }\n    };\n\n    vm.getIcon = function () {\n      if (vm.variation === 'success') {\n        return 'icon-check-circle';\n      }\n     if (vm.variation === 'info') {\n        return 'icon-information-outline';\n      }\n      return 'icon-alert';\n    };\n\n    vm.getIconClass = function () {\n      switch (vm.variation) {\n        case 'success':\n          return 'green-fg';\n        case 'error':\n          return 'red-fg';\n        case 'warning':\n          return 'yellow-fg';\n        case 'info':\n        default:\n          return 'blue-fg';\n      }\n    };\n  }\n})();\n\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndInput', {\n    bindings: {\n      clearable: '<?', // indicates if the dropdown has a clear button\n      onChanged: '&?', // function to call when the selected items change\n      selectPlaceholder: '@', // placeholder for the select input\n      additionalClass: '@?', // additional class for the container\n      icon: '@?', // icon for the dropdown\n      model: '=', // two-way binding for the input model\n    },\n    templateUrl: 'app/main/components/input/input.html',\n    controllerAs: 'vm',\n    controller: function ($scope, $timeout) {\n      var vm = this;\n      vm.clearable = angular.isDefined(vm.clearable) ? vm.clearable : false;\n\n      vm.getContainerClass = function () {\n        var classes = [];\n        classes.push('nd-search-input nd-filter-input');\n        if (vm.additionalClass) {\n          classes.push(vm.additionalClass);\n        }\n        return classes.join(' ');\n      };\n\n      vm.clear = function () {\n        vm.model = null;\n        vm.onInputChange();\n      };\n\n      vm.onInputChange = function () {\n        if (vm.onChanged) {\n          $timeout(function () {\n            vm.onChanged();\n          });\n        } else {\n          $scope.$emit('ndInput::changed');\n        }\n      };\n\n      vm.isSvgIcon = function () {\n        if (!vm.icon){\n          return false;\n        }\n        return vm.icon.endsWith('.svg');\n      };\n\n      vm.$onInit = function () {\n        $scope.$on('ndFilter::clear', function () {\n          vm.clear();\n        });\n      };\n\n\n    }\n  });\n})();\n\n(function() {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  /**\n   * @example <nd-coupon-input model=\"vm.planCoupon\" on-changed=\"vm.onCouponChanged()\"></nd-coupon-input>\n   */\n  app.component('ndCouponInput', {\n    bindings: {\n      model: '=',\n      onChanged: '&?',\n      disabled: '=?',\n      oneRow: '=?',\n      period: '=?'\n    },\n    templateUrl: 'app/main/components/coupon-input/coupon-input.html',\n    controllerAs: 'vm',\n    controller: function($scope, $timeout) {\n      var vm = this;\n\n      vm.disabled = $scope.disabled;\n      vm.layout = 'column';\n      vm.$onInit = $onInit;\n      vm.onValueChange = onValueChange;\n      vm.emitChanged = emitChanged;\n      vm.isPercent = isPercent;\n      vm.onClick = onClick;\n      vm.onDurationChange = onDurationChange;\n      vm.onDurationMonthsChange = onDurationMonthsChange;\n\n      function $onInit() {\n        if (vm.model) {\n          if (typeof vm.model.discount_value === 'undefined') {\n            vm.model.discount_value = null;\n          }\n          if (typeof vm.model.discount_is_percentage === 'undefined') {\n            vm.model.discount_is_percentage = false;\n          }\n          if (!vm.model.duration) {\n            vm.model.duration = 'forever';\n          }\n          if (vm.model.duration !== 'repeating') {\n            vm.model.duration_in_months = null;\n          }\n        }\n        vm.layout = vm.oneRow ? 'row' : 'column';\n      }\n\n      function onValueChange() {\n        if (!vm.model) {\n          return;\n        }\n        var value = vm.model.discount_value;\n        if (value === '' || value === null || value === undefined) {\n          vm.model.discount_value = null;\n        } else {\n          var parsed = parseFloat(value);\n          if (isNaN(parsed) || parsed < 0) {\n            vm.model.discount_value = null;\n          } else {\n            vm.model.discount_value = parsed;\n          }\n        }\n        emitChanged();\n      }\n\n      function emitChanged() {\n        if (vm.onChanged) {\n          $timeout(function() {\n            vm.onChanged();\n          });\n        } else {\n          $scope.$emit('ndCouponInput::changed');\n        }\n      }\n\n      function isPercent() {\n        return vm.model && !!vm.model.discount_is_percentage;\n      }\n\n      function onClick(event) {\n        event.stopPropagation();\n      }\n\n      function onDurationChange() {\n        if (!vm.model) {\n          return;\n        }\n        if (vm.model.duration !== 'repeating') {\n          vm.model.duration_in_months = null;\n        }\n        emitChanged();\n      }\n\n      function onDurationMonthsChange() {\n        if (!vm.model) {\n          return;\n        }\n        var value = vm.model.duration_in_months;\n        if (vm.model.duration === 'repeating') {\n          if (value === '' || value === null || value === undefined) {\n            vm.model.duration_in_months = null;\n          } else {\n            var parsed = parseInt(value);\n            if (isNaN(parsed) || parsed <= 0) {\n              vm.model.duration_in_months = null;\n            } else {\n              vm.model.duration_in_months = parsed;\n            }\n          }\n        } else {\n          vm.model.duration_in_months = null;\n        }\n        emitChanged();\n      }\n    }\n  });\n})();\n\n\n\n(function () {\n  'use strict';\n\n  var app = angular.module('app.core');\n\n  app.component('ndFilterSelector', {\n    transclude: true,\n    controllerAs: 'vm',\n    templateUrl: 'app/main/components/filter-selector/filter-selector.html',\n    bindings: {\n      filterStorageLabel: '@',\n      onChanged: '&?', // function to call when the filters change\n    },\n    controller: function ($scope, $timeout) {\n      var vm = this;\n\n      vm.availableFilters = [];\n      vm.activeFilters = {};\n\n      vm.$onInit = function () {\n        vm.loadActiveFIlters();\n      };\n\n      vm.registerFilter = function (filter) {\n        var exists = vm.availableFilters.some(function (f) {\n          return f.name === filter.name;\n        });\n\n        if (!exists) {\n          vm.availableFilters.push({\n            name: filter.name,\n            label: filter.label || ('FILTERS.' + name.toUpperCase()),\n            icon: filter.icon\n          });\n        }\n      };\n\n      vm.toggleFilter = function (name) {\n        vm.activeFilters[name] = !vm.activeFilters[name];\n        vm.saveActiveFilters();\n      };\n\n      vm.saveActiveFilters = function () {\n        var activeFilters = Object.keys(vm.activeFilters).filter(function (key) {\n          return vm.activeFilters[key];\n        });\n        localStorage.setItem(vm.filterStorageLabel, JSON.stringify(activeFilters));\n      };\n\n      vm.loadActiveFIlters = function () {\n        var activeFilters = JSON.parse(localStorage.getItem(vm.filterStorageLabel));\n        if (activeFilters) {\n          activeFilters.forEach(function (filter) {\n            vm.activeFilters[filter] = true;\n          });\n        }\n      };\n\n      vm.isSvgIcon = function (filter) {\n        if (!filter || !filter.icon){\n          return false;\n        }\n        return filter.icon.endsWith('.svg');\n      };\n\n      vm.isFilterActive = function (name) {\n        return !!vm.activeFilters[name];\n      };\n\n      vm.onFiltersChanged = function () {\n        $timeout(function () {\n          vm.onChanged();\n        });\n      };\n\n      vm.ndInputChanged = $scope.$on('ndInput::changed', function () {\n        vm.onFiltersChanged();\n      });\n      $scope.$on('$destroy', function () {\n        vm.ndInputChanged();\n      });\n\n      vm.ndPaginatedDropdownChanged = $scope.$on('ndPaginatedDropdown::changed', function () {\n        vm.onFiltersChanged();\n      });\n      $scope.$on('$destroy', function () {\n        vm.ndPaginatedDropdownChanged();\n      });\n\n    },\n  });\n})();\n\n(function() {\n  'use strict';\n\n  angular\n  .module('app.core')\n  .directive('wbUpgradePlan', wbUpgradePlan);\n\n  /** @ngInject */\n  function wbUpgradePlan($sce, $document, $mdSidenav) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/upgrade/wbUpgradePlan/wbUpgradePlan.html',\n      scope: {\n        plan: '='\n      },\n      controller: ['$scope', function($scope) {\n        $scope.plan = $scope.plan || {};\n        $scope.features = $sce.trustAsHtml($scope.plan.features);\n      }],\n      link: function(scope, $mdDialog) {\n\n      }\n    };\n  }\n})();\n\n/*!\n * @overview  SHA-256 implementation in JavaScript\n * @copyright Copyright (c) Chris Veness 2002-2014\n * @license   Licensed under MIT license\n *            See http://www.movable-type.co.uk/scripts/sha1.html\n */\n\n//@formatter:off\n\"use strict\";var Sha256={};Sha256.hash=function(t){t=t.utf8Encode();var r=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],e=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];t+=String.fromCharCode(128);for(var n=t.length/4+2,o=Math.ceil(n/16),a=new Array(o),h=0;o>h;h++){a[h]=new Array(16);for(var S=0;16>S;S++)a[h][S]=t.charCodeAt(64*h+4*S)<<24|t.charCodeAt(64*h+4*S+1)<<16|t.charCodeAt(64*h+4*S+2)<<8|t.charCodeAt(64*h+4*S+3)}a[o-1][14]=8*(t.length-1)/Math.pow(2,32),a[o-1][14]=Math.floor(a[o-1][14]),a[o-1][15]=8*(t.length-1)&4294967295;for(var u,f,c,i,d,R,p,y,x=new Array(64),h=0;o>h;h++){for(var O=0;16>O;O++)x[O]=a[h][O];for(var O=16;64>O;O++)x[O]=Sha256.σ1(x[O-2])+x[O-7]+Sha256.σ0(x[O-15])+x[O-16]&4294967295;u=e[0],f=e[1],c=e[2],i=e[3],d=e[4],R=e[5],p=e[6],y=e[7];for(var O=0;64>O;O++){var T=y+Sha256.Σ1(d)+Sha256.Ch(d,R,p)+r[O]+x[O],s=Sha256.Σ0(u)+Sha256.Maj(u,f,c);y=p,p=R,R=d,d=i+T&4294967295,i=c,c=f,f=u,u=T+s&4294967295}e[0]=e[0]+u&4294967295,e[1]=e[1]+f&4294967295,e[2]=e[2]+c&4294967295,e[3]=e[3]+i&4294967295,e[4]=e[4]+d&4294967295,e[5]=e[5]+R&4294967295,e[6]=e[6]+p&4294967295,e[7]=e[7]+y&4294967295}return Sha256.toHexStr(e[0])+Sha256.toHexStr(e[1])+Sha256.toHexStr(e[2])+Sha256.toHexStr(e[3])+Sha256.toHexStr(e[4])+Sha256.toHexStr(e[5])+Sha256.toHexStr(e[6])+Sha256.toHexStr(e[7])},Sha256.ROTR=function(t,r){return r>>>t|r<<32-t},Sha256.Σ0=function(t){return Sha256.ROTR(2,t)^Sha256.ROTR(13,t)^Sha256.ROTR(22,t)},Sha256.Σ1=function(t){return Sha256.ROTR(6,t)^Sha256.ROTR(11,t)^Sha256.ROTR(25,t)},Sha256.σ0=function(t){return Sha256.ROTR(7,t)^Sha256.ROTR(18,t)^t>>>3},Sha256.σ1=function(t){return Sha256.ROTR(17,t)^Sha256.ROTR(19,t)^t>>>10},Sha256.Ch=function(t,r,e){return t&r^~t&e},Sha256.Maj=function(t,r,e){return t&r^t&e^r&e},Sha256.toHexStr=function(t){for(var r,e=\"\",n=7;n>=0;n--)r=t>>>4*n&15,e+=r.toString(16);return e},\"undefined\"==typeof String.prototype.utf8Encode&&(String.prototype.utf8Encode=function(){return unescape(encodeURIComponent(this))}),\"undefined\"==typeof String.prototype.utf8Decode&&(String.prototype.utf8Decode=function(){try{return decodeURIComponent(escape(this))}catch(t){return this}}),\"undefined\"!=typeof module&&module.exports&&(module.exports=Sha256),\"function\"==typeof define&&define.amd&&define([],function(){return Sha256});\n\n/*!\n * @overview  RSVP - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/tildeio/rsvp.js/master/LICENSE\n * @version   3.1.0\n */\n\n//@formatter:off\n(function(){\"use strict\";function lib$rsvp$utils$$objectOrFunction(x){return typeof x===\"function\"||typeof x===\"object\"&&x!==null}function lib$rsvp$utils$$isFunction(x){return typeof x===\"function\"}function lib$rsvp$utils$$isMaybeThenable(x){return typeof x===\"object\"&&x!==null}var lib$rsvp$utils$$_isArray;if(!Array.isArray){lib$rsvp$utils$$_isArray=function(x){return Object.prototype.toString.call(x)===\"[object Array]\"}}else{lib$rsvp$utils$$_isArray=Array.isArray}var lib$rsvp$utils$$isArray=lib$rsvp$utils$$_isArray;var lib$rsvp$utils$$now=Date.now||function(){return(new Date).getTime()};function lib$rsvp$utils$$F(){}var lib$rsvp$utils$$o_create=Object.create||function(o){if(arguments.length>1){throw new Error(\"Second argument not supported\")}if(typeof o!==\"object\"){throw new TypeError(\"Argument must be an object\")}lib$rsvp$utils$$F.prototype=o;return new lib$rsvp$utils$$F};function lib$rsvp$events$$indexOf(callbacks,callback){for(var i=0,l=callbacks.length;i<l;i++){if(callbacks[i]===callback){return i}}return-1}function lib$rsvp$events$$callbacksFor(object){var callbacks=object._promiseCallbacks;if(!callbacks){callbacks=object._promiseCallbacks={}}return callbacks}var lib$rsvp$events$$default={mixin:function(object){object[\"on\"]=this[\"on\"];object[\"off\"]=this[\"off\"];object[\"trigger\"]=this[\"trigger\"];object._promiseCallbacks=undefined;return object},on:function(eventName,callback){if(typeof callback!==\"function\"){throw new TypeError(\"Callback must be a function\")}var allCallbacks=lib$rsvp$events$$callbacksFor(this),callbacks;callbacks=allCallbacks[eventName];if(!callbacks){callbacks=allCallbacks[eventName]=[]}if(lib$rsvp$events$$indexOf(callbacks,callback)===-1){callbacks.push(callback)}},off:function(eventName,callback){var allCallbacks=lib$rsvp$events$$callbacksFor(this),callbacks,index;if(!callback){allCallbacks[eventName]=[];return}callbacks=allCallbacks[eventName];index=lib$rsvp$events$$indexOf(callbacks,callback);if(index!==-1){callbacks.splice(index,1)}},trigger:function(eventName,options,label){var allCallbacks=lib$rsvp$events$$callbacksFor(this),callbacks,callback;if(callbacks=allCallbacks[eventName]){for(var i=0;i<callbacks.length;i++){callback=callbacks[i];callback(options,label)}}}};var lib$rsvp$config$$config={instrument:false};lib$rsvp$events$$default[\"mixin\"](lib$rsvp$config$$config);function lib$rsvp$config$$configure(name,value){if(name===\"onerror\"){lib$rsvp$config$$config[\"on\"](\"error\",value);return}if(arguments.length===2){lib$rsvp$config$$config[name]=value}else{return lib$rsvp$config$$config[name]}}var lib$rsvp$instrument$$queue=[];function lib$rsvp$instrument$$scheduleFlush(){setTimeout(function(){var entry;for(var i=0;i<lib$rsvp$instrument$$queue.length;i++){entry=lib$rsvp$instrument$$queue[i];var payload=entry.payload;payload.guid=payload.key+payload.id;payload.childGuid=payload.key+payload.childId;if(payload.error){payload.stack=payload.error.stack}lib$rsvp$config$$config[\"trigger\"](entry.name,entry.payload)}lib$rsvp$instrument$$queue.length=0},50)}function lib$rsvp$instrument$$instrument(eventName,promise,child){if(1===lib$rsvp$instrument$$queue.push({name:eventName,payload:{key:promise._guidKey,id:promise._id,eventName:eventName,detail:promise._result,childId:child&&child._id,label:promise._label,timeStamp:lib$rsvp$utils$$now(),error:lib$rsvp$config$$config[\"instrument-with-stack\"]?new Error(promise._label):null}})){lib$rsvp$instrument$$scheduleFlush()}}var lib$rsvp$instrument$$default=lib$rsvp$instrument$$instrument;function lib$rsvp$$internal$$withOwnPromise(){return new TypeError(\"A promises callback cannot return that same promise.\")}function lib$rsvp$$internal$$noop(){}var lib$rsvp$$internal$$PENDING=void 0;var lib$rsvp$$internal$$FULFILLED=1;var lib$rsvp$$internal$$REJECTED=2;var lib$rsvp$$internal$$GET_THEN_ERROR=new lib$rsvp$$internal$$ErrorObject;function lib$rsvp$$internal$$getThen(promise){try{return promise.then}catch(error){lib$rsvp$$internal$$GET_THEN_ERROR.error=error;return lib$rsvp$$internal$$GET_THEN_ERROR}}function lib$rsvp$$internal$$tryThen(then,value,fulfillmentHandler,rejectionHandler){try{then.call(value,fulfillmentHandler,rejectionHandler)}catch(e){return e}}function lib$rsvp$$internal$$handleForeignThenable(promise,thenable,then){lib$rsvp$config$$config.async(function(promise){var sealed=false;var error=lib$rsvp$$internal$$tryThen(then,thenable,function(value){if(sealed){return}sealed=true;if(thenable!==value){lib$rsvp$$internal$$resolve(promise,value)}else{lib$rsvp$$internal$$fulfill(promise,value)}},function(reason){if(sealed){return}sealed=true;lib$rsvp$$internal$$reject(promise,reason)},\"Settle: \"+(promise._label||\" unknown promise\"));if(!sealed&&error){sealed=true;lib$rsvp$$internal$$reject(promise,error)}},promise)}function lib$rsvp$$internal$$handleOwnThenable(promise,thenable){if(thenable._state===lib$rsvp$$internal$$FULFILLED){lib$rsvp$$internal$$fulfill(promise,thenable._result)}else if(thenable._state===lib$rsvp$$internal$$REJECTED){thenable._onError=null;lib$rsvp$$internal$$reject(promise,thenable._result)}else{lib$rsvp$$internal$$subscribe(thenable,undefined,function(value){if(thenable!==value){lib$rsvp$$internal$$resolve(promise,value)}else{lib$rsvp$$internal$$fulfill(promise,value)}},function(reason){lib$rsvp$$internal$$reject(promise,reason)})}}function lib$rsvp$$internal$$handleMaybeThenable(promise,maybeThenable){if(maybeThenable.constructor===promise.constructor){lib$rsvp$$internal$$handleOwnThenable(promise,maybeThenable)}else{var then=lib$rsvp$$internal$$getThen(maybeThenable);if(then===lib$rsvp$$internal$$GET_THEN_ERROR){lib$rsvp$$internal$$reject(promise,lib$rsvp$$internal$$GET_THEN_ERROR.error)}else if(then===undefined){lib$rsvp$$internal$$fulfill(promise,maybeThenable)}else if(lib$rsvp$utils$$isFunction(then)){lib$rsvp$$internal$$handleForeignThenable(promise,maybeThenable,then)}else{lib$rsvp$$internal$$fulfill(promise,maybeThenable)}}}function lib$rsvp$$internal$$resolve(promise,value){if(promise===value){lib$rsvp$$internal$$fulfill(promise,value)}else if(lib$rsvp$utils$$objectOrFunction(value)){lib$rsvp$$internal$$handleMaybeThenable(promise,value)}else{lib$rsvp$$internal$$fulfill(promise,value)}}function lib$rsvp$$internal$$publishRejection(promise){if(promise._onError){promise._onError(promise._result)}lib$rsvp$$internal$$publish(promise)}function lib$rsvp$$internal$$fulfill(promise,value){if(promise._state!==lib$rsvp$$internal$$PENDING){return}promise._result=value;promise._state=lib$rsvp$$internal$$FULFILLED;if(promise._subscribers.length===0){if(lib$rsvp$config$$config.instrument){lib$rsvp$instrument$$default(\"fulfilled\",promise)}}else{lib$rsvp$config$$config.async(lib$rsvp$$internal$$publish,promise)}}function lib$rsvp$$internal$$reject(promise,reason){if(promise._state!==lib$rsvp$$internal$$PENDING){return}promise._state=lib$rsvp$$internal$$REJECTED;promise._result=reason;lib$rsvp$config$$config.async(lib$rsvp$$internal$$publishRejection,promise)}function lib$rsvp$$internal$$subscribe(parent,child,onFulfillment,onRejection){var subscribers=parent._subscribers;var length=subscribers.length;parent._onError=null;subscribers[length]=child;subscribers[length+lib$rsvp$$internal$$FULFILLED]=onFulfillment;subscribers[length+lib$rsvp$$internal$$REJECTED]=onRejection;if(length===0&&parent._state){lib$rsvp$config$$config.async(lib$rsvp$$internal$$publish,parent)}}function lib$rsvp$$internal$$publish(promise){var subscribers=promise._subscribers;var settled=promise._state;if(lib$rsvp$config$$config.instrument){lib$rsvp$instrument$$default(settled===lib$rsvp$$internal$$FULFILLED?\"fulfilled\":\"rejected\",promise)}if(subscribers.length===0){return}var child,callback,detail=promise._result;for(var i=0;i<subscribers.length;i+=3){child=subscribers[i];callback=subscribers[i+settled];if(child){lib$rsvp$$internal$$invokeCallback(settled,child,callback,detail)}else{callback(detail)}}promise._subscribers.length=0}function lib$rsvp$$internal$$ErrorObject(){this.error=null}var lib$rsvp$$internal$$TRY_CATCH_ERROR=new lib$rsvp$$internal$$ErrorObject;function lib$rsvp$$internal$$tryCatch(callback,detail){try{return callback(detail)}catch(e){lib$rsvp$$internal$$TRY_CATCH_ERROR.error=e;return lib$rsvp$$internal$$TRY_CATCH_ERROR}}function lib$rsvp$$internal$$invokeCallback(settled,promise,callback,detail){var hasCallback=lib$rsvp$utils$$isFunction(callback),value,error,succeeded,failed;if(hasCallback){value=lib$rsvp$$internal$$tryCatch(callback,detail);if(value===lib$rsvp$$internal$$TRY_CATCH_ERROR){failed=true;error=value.error;value=null}else{succeeded=true}if(promise===value){lib$rsvp$$internal$$reject(promise,lib$rsvp$$internal$$withOwnPromise());return}}else{value=detail;succeeded=true}if(promise._state!==lib$rsvp$$internal$$PENDING){}else if(hasCallback&&succeeded){lib$rsvp$$internal$$resolve(promise,value)}else if(failed){lib$rsvp$$internal$$reject(promise,error)}else if(settled===lib$rsvp$$internal$$FULFILLED){lib$rsvp$$internal$$fulfill(promise,value)}else if(settled===lib$rsvp$$internal$$REJECTED){lib$rsvp$$internal$$reject(promise,value)}}function lib$rsvp$$internal$$initializePromise(promise,resolver){var resolved=false;try{resolver(function resolvePromise(value){if(resolved){return}resolved=true;lib$rsvp$$internal$$resolve(promise,value)},function rejectPromise(reason){if(resolved){return}resolved=true;lib$rsvp$$internal$$reject(promise,reason)})}catch(e){lib$rsvp$$internal$$reject(promise,e)}}function lib$rsvp$enumerator$$makeSettledResult(state,position,value){if(state===lib$rsvp$$internal$$FULFILLED){return{state:\"fulfilled\",value:value}}else{return{state:\"rejected\",reason:value}}}function lib$rsvp$enumerator$$Enumerator(Constructor,input,abortOnReject,label){var enumerator=this;enumerator._instanceConstructor=Constructor;enumerator.promise=new Constructor(lib$rsvp$$internal$$noop,label);enumerator._abortOnReject=abortOnReject;if(enumerator._validateInput(input)){enumerator._input=input;enumerator.length=input.length;enumerator._remaining=input.length;enumerator._init();if(enumerator.length===0){lib$rsvp$$internal$$fulfill(enumerator.promise,enumerator._result)}else{enumerator.length=enumerator.length||0;enumerator._enumerate();if(enumerator._remaining===0){lib$rsvp$$internal$$fulfill(enumerator.promise,enumerator._result)}}}else{lib$rsvp$$internal$$reject(enumerator.promise,enumerator._validationError())}}var lib$rsvp$enumerator$$default=lib$rsvp$enumerator$$Enumerator;lib$rsvp$enumerator$$Enumerator.prototype._validateInput=function(input){return lib$rsvp$utils$$isArray(input)};lib$rsvp$enumerator$$Enumerator.prototype._validationError=function(){return new Error(\"Array Methods must be provided an Array\")};lib$rsvp$enumerator$$Enumerator.prototype._init=function(){this._result=new Array(this.length)};lib$rsvp$enumerator$$Enumerator.prototype._enumerate=function(){var enumerator=this;var length=enumerator.length;var promise=enumerator.promise;var input=enumerator._input;for(var i=0;promise._state===lib$rsvp$$internal$$PENDING&&i<length;i++){enumerator._eachEntry(input[i],i)}};lib$rsvp$enumerator$$Enumerator.prototype._eachEntry=function(entry,i){var enumerator=this;var c=enumerator._instanceConstructor;if(lib$rsvp$utils$$isMaybeThenable(entry)){if(entry.constructor===c&&entry._state!==lib$rsvp$$internal$$PENDING){entry._onError=null;enumerator._settledAt(entry._state,i,entry._result)}else{enumerator._willSettleAt(c.resolve(entry),i)}}else{enumerator._remaining--;enumerator._result[i]=enumerator._makeResult(lib$rsvp$$internal$$FULFILLED,i,entry)}};lib$rsvp$enumerator$$Enumerator.prototype._settledAt=function(state,i,value){var enumerator=this;var promise=enumerator.promise;if(promise._state===lib$rsvp$$internal$$PENDING){enumerator._remaining--;if(enumerator._abortOnReject&&state===lib$rsvp$$internal$$REJECTED){lib$rsvp$$internal$$reject(promise,value)}else{enumerator._result[i]=enumerator._makeResult(state,i,value)}}if(enumerator._remaining===0){lib$rsvp$$internal$$fulfill(promise,enumerator._result)}};lib$rsvp$enumerator$$Enumerator.prototype._makeResult=function(state,i,value){return value};lib$rsvp$enumerator$$Enumerator.prototype._willSettleAt=function(promise,i){var enumerator=this;lib$rsvp$$internal$$subscribe(promise,undefined,function(value){enumerator._settledAt(lib$rsvp$$internal$$FULFILLED,i,value)},function(reason){enumerator._settledAt(lib$rsvp$$internal$$REJECTED,i,reason)})};function lib$rsvp$promise$all$$all(entries,label){return new lib$rsvp$enumerator$$default(this,entries,true,label).promise}var lib$rsvp$promise$all$$default=lib$rsvp$promise$all$$all;function lib$rsvp$promise$race$$race(entries,label){var Constructor=this;var promise=new Constructor(lib$rsvp$$internal$$noop,label);if(!lib$rsvp$utils$$isArray(entries)){lib$rsvp$$internal$$reject(promise,new TypeError(\"You must pass an array to race.\"));return promise}var length=entries.length;function onFulfillment(value){lib$rsvp$$internal$$resolve(promise,value)}function onRejection(reason){lib$rsvp$$internal$$reject(promise,reason)}for(var i=0;promise._state===lib$rsvp$$internal$$PENDING&&i<length;i++){lib$rsvp$$internal$$subscribe(Constructor.resolve(entries[i]),undefined,onFulfillment,onRejection)}return promise}var lib$rsvp$promise$race$$default=lib$rsvp$promise$race$$race;function lib$rsvp$promise$resolve$$resolve(object,label){var Constructor=this;if(object&&typeof object===\"object\"&&object.constructor===Constructor){return object}var promise=new Constructor(lib$rsvp$$internal$$noop,label);lib$rsvp$$internal$$resolve(promise,object);return promise}var lib$rsvp$promise$resolve$$default=lib$rsvp$promise$resolve$$resolve;function lib$rsvp$promise$reject$$reject(reason,label){var Constructor=this;var promise=new Constructor(lib$rsvp$$internal$$noop,label);lib$rsvp$$internal$$reject(promise,reason);return promise}var lib$rsvp$promise$reject$$default=lib$rsvp$promise$reject$$reject;var lib$rsvp$promise$$guidKey=\"rsvp_\"+lib$rsvp$utils$$now()+\"-\";var lib$rsvp$promise$$counter=0;function lib$rsvp$promise$$needsResolver(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function lib$rsvp$promise$$needsNew(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}function lib$rsvp$promise$$Promise(resolver,label){var promise=this;promise._id=lib$rsvp$promise$$counter++;promise._label=label;promise._state=undefined;promise._result=undefined;promise._subscribers=[];if(lib$rsvp$config$$config.instrument){lib$rsvp$instrument$$default(\"created\",promise)}if(lib$rsvp$$internal$$noop!==resolver){if(!lib$rsvp$utils$$isFunction(resolver)){lib$rsvp$promise$$needsResolver()}if(!(promise instanceof lib$rsvp$promise$$Promise)){lib$rsvp$promise$$needsNew()}lib$rsvp$$internal$$initializePromise(promise,resolver)}}var lib$rsvp$promise$$default=lib$rsvp$promise$$Promise;lib$rsvp$promise$$Promise.cast=lib$rsvp$promise$resolve$$default;lib$rsvp$promise$$Promise.all=lib$rsvp$promise$all$$default;lib$rsvp$promise$$Promise.race=lib$rsvp$promise$race$$default;lib$rsvp$promise$$Promise.resolve=lib$rsvp$promise$resolve$$default;lib$rsvp$promise$$Promise.reject=lib$rsvp$promise$reject$$default;lib$rsvp$promise$$Promise.prototype={constructor:lib$rsvp$promise$$Promise,_guidKey:lib$rsvp$promise$$guidKey,_onError:function(reason){var promise=this;lib$rsvp$config$$config.after(function(){if(promise._onError){lib$rsvp$config$$config[\"trigger\"](\"error\",reason,promise._label)}})},then:function(onFulfillment,onRejection,label){var parent=this;var state=parent._state;if(state===lib$rsvp$$internal$$FULFILLED&&!onFulfillment||state===lib$rsvp$$internal$$REJECTED&&!onRejection){if(lib$rsvp$config$$config.instrument){lib$rsvp$instrument$$default(\"chained\",parent,parent)}return parent}parent._onError=null;var child=new parent.constructor(lib$rsvp$$internal$$noop,label);var result=parent._result;if(lib$rsvp$config$$config.instrument){lib$rsvp$instrument$$default(\"chained\",parent,child)}if(state){var callback=arguments[state-1];lib$rsvp$config$$config.async(function(){lib$rsvp$$internal$$invokeCallback(state,child,callback,result)})}else{lib$rsvp$$internal$$subscribe(parent,child,onFulfillment,onRejection)}return child},\"catch\":function(onRejection,label){return this.then(undefined,onRejection,label)},\"finally\":function(callback,label){var promise=this;var constructor=promise.constructor;return promise.then(function(value){return constructor.resolve(callback()).then(function(){return value})},function(reason){return constructor.resolve(callback()).then(function(){throw reason})},label)}};function lib$rsvp$all$settled$$AllSettled(Constructor,entries,label){this._superConstructor(Constructor,entries,false,label)}lib$rsvp$all$settled$$AllSettled.prototype=lib$rsvp$utils$$o_create(lib$rsvp$enumerator$$default.prototype);lib$rsvp$all$settled$$AllSettled.prototype._superConstructor=lib$rsvp$enumerator$$default;lib$rsvp$all$settled$$AllSettled.prototype._makeResult=lib$rsvp$enumerator$$makeSettledResult;lib$rsvp$all$settled$$AllSettled.prototype._validationError=function(){return new Error(\"allSettled must be called with an array\")};function lib$rsvp$all$settled$$allSettled(entries,label){return new lib$rsvp$all$settled$$AllSettled(lib$rsvp$promise$$default,entries,label).promise}var lib$rsvp$all$settled$$default=lib$rsvp$all$settled$$allSettled;function lib$rsvp$all$$all(array,label){return lib$rsvp$promise$$default.all(array,label)}var lib$rsvp$all$$default=lib$rsvp$all$$all;var lib$rsvp$asap$$len=0;var lib$rsvp$asap$$toString={}.toString;var lib$rsvp$asap$$vertxNext;function lib$rsvp$asap$$asap(callback,arg){lib$rsvp$asap$$queue[lib$rsvp$asap$$len]=callback;lib$rsvp$asap$$queue[lib$rsvp$asap$$len+1]=arg;lib$rsvp$asap$$len+=2;if(lib$rsvp$asap$$len===2){lib$rsvp$asap$$scheduleFlush()}}var lib$rsvp$asap$$default=lib$rsvp$asap$$asap;var lib$rsvp$asap$$browserWindow=typeof window!==\"undefined\"?window:undefined;var lib$rsvp$asap$$browserGlobal=lib$rsvp$asap$$browserWindow||{};var lib$rsvp$asap$$BrowserMutationObserver=lib$rsvp$asap$$browserGlobal.MutationObserver||lib$rsvp$asap$$browserGlobal.WebKitMutationObserver;var lib$rsvp$asap$$isNode=typeof self===\"undefined\"&&typeof process!==\"undefined\"&&{}.toString.call(process)===\"[object process]\";var lib$rsvp$asap$$isWorker=typeof Uint8ClampedArray!==\"undefined\"&&typeof importScripts!==\"undefined\"&&typeof MessageChannel!==\"undefined\";function lib$rsvp$asap$$useNextTick(){var nextTick=process.nextTick;var version=process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);if(Array.isArray(version)&&version[1]===\"0\"&&version[2]===\"10\"){nextTick=setImmediate}return function(){nextTick(lib$rsvp$asap$$flush)}}function lib$rsvp$asap$$useVertxTimer(){return function(){lib$rsvp$asap$$vertxNext(lib$rsvp$asap$$flush)}}function lib$rsvp$asap$$useMutationObserver(){var iterations=0;var observer=new lib$rsvp$asap$$BrowserMutationObserver(lib$rsvp$asap$$flush);var node=document.createTextNode(\"\");observer.observe(node,{characterData:true});return function(){node.data=iterations=++iterations%2}}function lib$rsvp$asap$$useMessageChannel(){var channel=new MessageChannel;channel.port1.onmessage=lib$rsvp$asap$$flush;return function(){channel.port2.postMessage(0)}}function lib$rsvp$asap$$useSetTimeout(){return function(){setTimeout(lib$rsvp$asap$$flush,1)}}var lib$rsvp$asap$$queue=new Array(1e3);function lib$rsvp$asap$$flush(){for(var i=0;i<lib$rsvp$asap$$len;i+=2){var callback=lib$rsvp$asap$$queue[i];var arg=lib$rsvp$asap$$queue[i+1];callback(arg);lib$rsvp$asap$$queue[i]=undefined;lib$rsvp$asap$$queue[i+1]=undefined}lib$rsvp$asap$$len=0}function lib$rsvp$asap$$attemptVertex(){try{var r=require;var vertx=r(\"vertx\");lib$rsvp$asap$$vertxNext=vertx.runOnLoop||vertx.runOnContext;return lib$rsvp$asap$$useVertxTimer()}catch(e){return lib$rsvp$asap$$useSetTimeout()}}var lib$rsvp$asap$$scheduleFlush;if(lib$rsvp$asap$$isNode){lib$rsvp$asap$$scheduleFlush=lib$rsvp$asap$$useNextTick()}else if(lib$rsvp$asap$$BrowserMutationObserver){lib$rsvp$asap$$scheduleFlush=lib$rsvp$asap$$useMutationObserver()}else if(lib$rsvp$asap$$isWorker){lib$rsvp$asap$$scheduleFlush=lib$rsvp$asap$$useMessageChannel()}else if(lib$rsvp$asap$$browserWindow===undefined&&typeof require===\"function\"){lib$rsvp$asap$$scheduleFlush=lib$rsvp$asap$$attemptVertex()}else{lib$rsvp$asap$$scheduleFlush=lib$rsvp$asap$$useSetTimeout()}function lib$rsvp$defer$$defer(label){var deferred={};deferred[\"promise\"]=new lib$rsvp$promise$$default(function(resolve,reject){deferred[\"resolve\"]=resolve;deferred[\"reject\"]=reject},label);return deferred}var lib$rsvp$defer$$default=lib$rsvp$defer$$defer;function lib$rsvp$filter$$filter(promises,filterFn,label){return lib$rsvp$promise$$default.all(promises,label).then(function(values){if(!lib$rsvp$utils$$isFunction(filterFn)){throw new TypeError(\"You must pass a function as filter's second argument.\")}var length=values.length;var filtered=new Array(length);for(var i=0;i<length;i++){filtered[i]=filterFn(values[i])}return lib$rsvp$promise$$default.all(filtered,label).then(function(filtered){var results=new Array(length);var newLength=0;for(var i=0;i<length;i++){if(filtered[i]){results[newLength]=values[i];newLength++}}results.length=newLength;return results})})}var lib$rsvp$filter$$default=lib$rsvp$filter$$filter;function lib$rsvp$promise$hash$$PromiseHash(Constructor,object,label){this._superConstructor(Constructor,object,true,label)}var lib$rsvp$promise$hash$$default=lib$rsvp$promise$hash$$PromiseHash;lib$rsvp$promise$hash$$PromiseHash.prototype=lib$rsvp$utils$$o_create(lib$rsvp$enumerator$$default.prototype);lib$rsvp$promise$hash$$PromiseHash.prototype._superConstructor=lib$rsvp$enumerator$$default;lib$rsvp$promise$hash$$PromiseHash.prototype._init=function(){this._result={}};lib$rsvp$promise$hash$$PromiseHash.prototype._validateInput=function(input){return input&&typeof input===\"object\"};lib$rsvp$promise$hash$$PromiseHash.prototype._validationError=function(){return new Error(\"Promise.hash must be called with an object\")};lib$rsvp$promise$hash$$PromiseHash.prototype._enumerate=function(){var enumerator=this;var promise=enumerator.promise;var input=enumerator._input;var results=[];for(var key in input){if(promise._state===lib$rsvp$$internal$$PENDING&&Object.prototype.hasOwnProperty.call(input,key)){results.push({position:key,entry:input[key]})}}var length=results.length;enumerator._remaining=length;var result;for(var i=0;promise._state===lib$rsvp$$internal$$PENDING&&i<length;i++){result=results[i];enumerator._eachEntry(result.entry,result.position)}};function lib$rsvp$hash$settled$$HashSettled(Constructor,object,label){this._superConstructor(Constructor,object,false,label)}lib$rsvp$hash$settled$$HashSettled.prototype=lib$rsvp$utils$$o_create(lib$rsvp$promise$hash$$default.prototype);lib$rsvp$hash$settled$$HashSettled.prototype._superConstructor=lib$rsvp$enumerator$$default;lib$rsvp$hash$settled$$HashSettled.prototype._makeResult=lib$rsvp$enumerator$$makeSettledResult;lib$rsvp$hash$settled$$HashSettled.prototype._validationError=function(){return new Error(\"hashSettled must be called with an object\")};function lib$rsvp$hash$settled$$hashSettled(object,label){return new lib$rsvp$hash$settled$$HashSettled(lib$rsvp$promise$$default,object,label).promise}var lib$rsvp$hash$settled$$default=lib$rsvp$hash$settled$$hashSettled;function lib$rsvp$hash$$hash(object,label){return new lib$rsvp$promise$hash$$default(lib$rsvp$promise$$default,object,label).promise}var lib$rsvp$hash$$default=lib$rsvp$hash$$hash;function lib$rsvp$map$$map(promises,mapFn,label){return lib$rsvp$promise$$default.all(promises,label).then(function(values){if(!lib$rsvp$utils$$isFunction(mapFn)){throw new TypeError(\"You must pass a function as map's second argument.\")}var length=values.length;var results=new Array(length);for(var i=0;i<length;i++){results[i]=mapFn(values[i])}return lib$rsvp$promise$$default.all(results,label)})}var lib$rsvp$map$$default=lib$rsvp$map$$map;function lib$rsvp$node$$Result(){this.value=undefined}var lib$rsvp$node$$ERROR=new lib$rsvp$node$$Result;var lib$rsvp$node$$GET_THEN_ERROR=new lib$rsvp$node$$Result;function lib$rsvp$node$$getThen(obj){try{return obj.then}catch(error){lib$rsvp$node$$ERROR.value=error;return lib$rsvp$node$$ERROR}}function lib$rsvp$node$$tryApply(f,s,a){try{f.apply(s,a)}catch(error){lib$rsvp$node$$ERROR.value=error;return lib$rsvp$node$$ERROR}}function lib$rsvp$node$$makeObject(_,argumentNames){var obj={};var name;var i;var length=_.length;var args=new Array(length);for(var x=0;x<length;x++){args[x]=_[x]}for(i=0;i<argumentNames.length;i++){name=argumentNames[i];obj[name]=args[i+1]}return obj}function lib$rsvp$node$$arrayResult(_){var length=_.length;var args=new Array(length-1);for(var i=1;i<length;i++){args[i-1]=_[i]}return args}function lib$rsvp$node$$wrapThenable(then,promise){return{then:function(onFulFillment,onRejection){return then.call(promise,onFulFillment,onRejection)}}}function lib$rsvp$node$$denodeify(nodeFunc,options){var fn=function(){var self=this;var l=arguments.length;var args=new Array(l+1);var arg;var promiseInput=false;for(var i=0;i<l;++i){arg=arguments[i];if(!promiseInput){promiseInput=lib$rsvp$node$$needsPromiseInput(arg);if(promiseInput===lib$rsvp$node$$GET_THEN_ERROR){var p=new lib$rsvp$promise$$default(lib$rsvp$$internal$$noop);lib$rsvp$$internal$$reject(p,lib$rsvp$node$$GET_THEN_ERROR.value);return p}else if(promiseInput&&promiseInput!==true){arg=lib$rsvp$node$$wrapThenable(promiseInput,arg)}}args[i]=arg}var promise=new lib$rsvp$promise$$default(lib$rsvp$$internal$$noop);args[l]=function(err,val){if(err)lib$rsvp$$internal$$reject(promise,err);else if(options===undefined)lib$rsvp$$internal$$resolve(promise,val);else if(options===true)lib$rsvp$$internal$$resolve(promise,lib$rsvp$node$$arrayResult(arguments));else if(lib$rsvp$utils$$isArray(options))lib$rsvp$$internal$$resolve(promise,lib$rsvp$node$$makeObject(arguments,options));else lib$rsvp$$internal$$resolve(promise,val)};if(promiseInput){return lib$rsvp$node$$handlePromiseInput(promise,args,nodeFunc,self)}else{return lib$rsvp$node$$handleValueInput(promise,args,nodeFunc,self)}};fn.__proto__=nodeFunc;return fn}var lib$rsvp$node$$default=lib$rsvp$node$$denodeify;function lib$rsvp$node$$handleValueInput(promise,args,nodeFunc,self){var result=lib$rsvp$node$$tryApply(nodeFunc,self,args);if(result===lib$rsvp$node$$ERROR){lib$rsvp$$internal$$reject(promise,result.value)}return promise}function lib$rsvp$node$$handlePromiseInput(promise,args,nodeFunc,self){return lib$rsvp$promise$$default.all(args).then(function(args){var result=lib$rsvp$node$$tryApply(nodeFunc,self,args);if(result===lib$rsvp$node$$ERROR){lib$rsvp$$internal$$reject(promise,result.value)}return promise})}function lib$rsvp$node$$needsPromiseInput(arg){if(arg&&typeof arg===\"object\"){if(arg.constructor===lib$rsvp$promise$$default){return true}else{return lib$rsvp$node$$getThen(arg)}}else{return false}}var lib$rsvp$platform$$platform;if(typeof self===\"object\"){lib$rsvp$platform$$platform=self}else if(typeof global===\"object\"){lib$rsvp$platform$$platform=global}else{throw new Error(\"no global: `self` or `global` found\")}var lib$rsvp$platform$$default=lib$rsvp$platform$$platform;function lib$rsvp$race$$race(array,label){return lib$rsvp$promise$$default.race(array,label)}var lib$rsvp$race$$default=lib$rsvp$race$$race;function lib$rsvp$reject$$reject(reason,label){return lib$rsvp$promise$$default.reject(reason,label)}var lib$rsvp$reject$$default=lib$rsvp$reject$$reject;function lib$rsvp$resolve$$resolve(value,label){return lib$rsvp$promise$$default.resolve(value,label)}var lib$rsvp$resolve$$default=lib$rsvp$resolve$$resolve;function lib$rsvp$rethrow$$rethrow(reason){setTimeout(function(){throw reason});throw reason}var lib$rsvp$rethrow$$default=lib$rsvp$rethrow$$rethrow;lib$rsvp$config$$config.async=lib$rsvp$asap$$default;lib$rsvp$config$$config.after=function(cb){setTimeout(cb,0)};var lib$rsvp$$cast=lib$rsvp$resolve$$default;function lib$rsvp$$async(callback,arg){lib$rsvp$config$$config.async(callback,arg)}function lib$rsvp$$on(){lib$rsvp$config$$config[\"on\"].apply(lib$rsvp$config$$config,arguments)}function lib$rsvp$$off(){lib$rsvp$config$$config[\"off\"].apply(lib$rsvp$config$$config,arguments)}if(typeof window!==\"undefined\"&&typeof window[\"__PROMISE_INSTRUMENTATION__\"]===\"object\"){var lib$rsvp$$callbacks=window[\"__PROMISE_INSTRUMENTATION__\"];lib$rsvp$config$$configure(\"instrument\",true);for(var lib$rsvp$$eventName in lib$rsvp$$callbacks){if(lib$rsvp$$callbacks.hasOwnProperty(lib$rsvp$$eventName)){lib$rsvp$$on(lib$rsvp$$eventName,lib$rsvp$$callbacks[lib$rsvp$$eventName])}}}var lib$rsvp$umd$$RSVP={race:lib$rsvp$race$$default,Promise:lib$rsvp$promise$$default,allSettled:lib$rsvp$all$settled$$default,hash:lib$rsvp$hash$$default,hashSettled:lib$rsvp$hash$settled$$default,denodeify:lib$rsvp$node$$default,on:lib$rsvp$$on,off:lib$rsvp$$off,map:lib$rsvp$map$$default,filter:lib$rsvp$filter$$default,resolve:lib$rsvp$resolve$$default,reject:lib$rsvp$reject$$default,all:lib$rsvp$all$$default,rethrow:lib$rsvp$rethrow$$default,defer:lib$rsvp$defer$$default,EventTarget:lib$rsvp$events$$default,configure:lib$rsvp$config$$configure,async:lib$rsvp$$async};if(typeof define===\"function\"&&define[\"amd\"]){define(function(){return lib$rsvp$umd$$RSVP})}else if(typeof module!==\"undefined\"&&module[\"exports\"]){module[\"exports\"]=lib$rsvp$umd$$RSVP}else if(typeof lib$rsvp$platform$$default!==\"undefined\"){lib$rsvp$platform$$default[\"RSVP\"]=lib$rsvp$umd$$RSVP}}).call(this);\n\n'use strict';\n\n/**\n * @version 2.2.2\n * @overview QZ Tray Connector\n * <p/>\n * Connects a web client to the QZ Tray software.\n * Enables printing and device communication from javascript.\n */\nvar qz = (function() {\n\n///// POLYFILLS /////\n\n  if (!Array.isArray) {\n    Array.isArray = function(arg) {\n      return Object.prototype.toString.call(arg) === '[object Array]';\n    };\n  }\n\n  if (!Number.isInteger) {\n    Number.isInteger = function(value) {\n      return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n    };\n  }\n\n\n  // from SHA implementation\n  if (typeof String.prototype.utf8Encode == 'undefined') {\n    String.prototype.utf8Encode = function() { return unescape(encodeURIComponent(this)); };\n  }\n  if (typeof String.prototype.utf8Decode == 'undefined') {\n    String.prototype.utf8Decode = function() {\n      try { return decodeURIComponent(escape(this)); }\n      catch(e) { return this; } // invalid UTF-8? return as-is\n    };\n  }\n\n///// PRIVATE METHODS /////\n\n  var _qz = {\n    VERSION: \"2.2.2\",                              //must match @version above\n    DEBUG: false,\n\n    log: {\n      /** Debugging messages */\n      trace: function() { if (_qz.DEBUG) { console.log.apply(console, arguments); } },\n      /** General messages */\n      info: function() { console.info.apply(console, arguments); },\n      /** General warnings */\n      warn: function() { console.warn.apply(console, arguments); },\n      /** Debugging errors */\n      allay: function() { if (_qz.DEBUG) { console.warn.apply(console, arguments); } },\n      /** General errors */\n      error: function() { console.error.apply(console, arguments); }\n    },\n\n\n    //stream types\n    streams: {\n      serial: 'SERIAL', usb: 'USB', hid: 'HID', printer: 'PRINTER', file: 'FILE', socket: 'SOCKET'\n    },\n\n\n    websocket: {\n      /** The actual websocket object managing the connection. */\n      connection: null,\n\n      /** Default parameters used on new connections. Override values using options parameter on {@link qz.websocket.connect}. */\n      connectConfig: {\n        host: [\"localhost\", \"localhost.qz.io\"], //hosts QZ Tray can be running on\n        hostIndex: 0,                           //internal var - index on host array\n        usingSecure: true,                      //boolean use of secure protocol\n        protocol: {\n          secure: \"wss://\",                   //secure websocket\n          insecure: \"ws://\"                   //insecure websocket\n        },\n        port: {\n          secure: [8181, 8282, 8383, 8484],   //list of secure ports QZ Tray could be listening on\n          insecure: [8182, 8283, 8384, 8485], //list of insecure ports QZ Tray could be listening on\n          portIndex: 0                        //internal var - index on active port array\n        },\n        keepAlive: 60,                          //time between pings to keep connection alive, in seconds\n        retries: 0,                             //number of times to reconnect before failing\n        delay: 0                                //seconds before firing a connection\n      },\n\n      setup: {\n        /** Loop through possible ports to open connection, sets web socket calls that will settle the promise. */\n        findConnection: function(config, resolve, reject) {\n          //force flag if missing ports\n          if (!config.port.secure.length) {\n            if (!config.port.insecure.length) {\n              reject(new Error(\"No ports have been specified to connect over\"));\n              return;\n            } else if (config.usingSecure) {\n              _qz.log.error(\"No secure ports specified - forcing insecure connection\");\n              config.usingSecure = false;\n            }\n          } else if (!config.port.insecure.length && !config.usingSecure) {\n            _qz.log.trace(\"No insecure ports specified - forcing secure connection\");\n            config.usingSecure = true;\n          }\n\n          var deeper = function() {\n            config.port.portIndex++;\n\n            if ((config.usingSecure && config.port.portIndex >= config.port.secure.length)\n              || (!config.usingSecure && config.port.portIndex >= config.port.insecure.length)) {\n              if (config.hostIndex >= config.host.length - 1) {\n                //give up, all hope is lost\n                reject(new Error(\"Unable to establish connection with QZ\"));\n                return;\n              } else {\n                config.hostIndex++;\n                config.port.portIndex = 0;\n              }\n            }\n\n            // recursive call until connection established or all ports are exhausted\n            _qz.websocket.setup.findConnection(config, resolve, reject);\n          };\n\n          var address;\n          if (config.usingSecure) {\n            address = config.protocol.secure + config.host[config.hostIndex] + \":\" + config.port.secure[config.port.portIndex];\n          } else {\n            address = config.protocol.insecure + config.host[config.hostIndex] + \":\" + config.port.insecure[config.port.portIndex];\n          }\n\n          try {\n            _qz.log.trace(\"Attempting connection\", address);\n            _qz.websocket.connection = new _qz.tools.ws(address);\n          }\n          catch(err) {\n            _qz.log.error(err);\n            deeper();\n            return;\n          }\n\n          if (_qz.websocket.connection != null) {\n            _qz.websocket.connection.established = false;\n\n            //called on successful connection to qz, begins setup of websocket calls and resolves connect promise after certificate is sent\n            _qz.websocket.connection.onopen = function(evt) {\n              if (!_qz.websocket.connection.established) {\n                _qz.log.trace(evt);\n                _qz.log.info(\"Established connection with QZ Tray on \" + address);\n\n                _qz.websocket.setup.openConnection({ resolve: resolve, reject: reject });\n\n                if (config.keepAlive > 0) {\n                  var interval = setInterval(function() {\n                    if (!_qz.tools.isActive()) {\n                      clearInterval(interval);\n                      return;\n                    }\n\n                    _qz.websocket.connection.send(\"ping\");\n                  }, config.keepAlive * 1000);\n                }\n              }\n            };\n\n            //called during websocket close during setup\n            _qz.websocket.connection.onclose = function() {\n              // Safari compatibility fix to raise error event\n              if (_qz.websocket.connection && typeof navigator !== 'undefined' && navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {\n                _qz.websocket.connection.onerror();\n              }\n            };\n\n            //called for errors during setup (such as invalid ports), reject connect promise only if all ports have been tried\n            _qz.websocket.connection.onerror = function(evt) {\n              _qz.log.trace(evt);\n\n              _qz.websocket.connection = null;\n\n              deeper();\n            };\n          } else {\n            reject(new Error(\"Unable to create a websocket connection\"));\n          }\n        },\n\n        /** Finish setting calls on successful connection, sets web socket calls that won't settle the promise. */\n        openConnection: function(openPromise) {\n          _qz.websocket.connection.established = true;\n\n          //called when an open connection is closed\n          _qz.websocket.connection.onclose = function(evt) {\n            _qz.log.trace(evt);\n\n            _qz.websocket.connection = null;\n            _qz.websocket.callClose(evt);\n            _qz.log.info(\"Closed connection with QZ Tray\");\n\n            for(var uid in _qz.websocket.pendingCalls) {\n              if (_qz.websocket.pendingCalls.hasOwnProperty(uid)) {\n                _qz.websocket.pendingCalls[uid].reject(new Error(\"Connection closed before response received\"));\n              }\n            }\n\n            //if this is set, then an explicit close call was made\n            if (this.promise != undefined) {\n              this.promise.resolve();\n            }\n          };\n\n          //called for any errors with an open connection\n          _qz.websocket.connection.onerror = function(evt) {\n            _qz.websocket.callError(evt);\n          };\n\n          //send JSON objects to qz\n          _qz.websocket.connection.sendData = function(obj) {\n            _qz.log.trace(\"Preparing object for websocket\", obj);\n\n            if (obj.timestamp == undefined) {\n              obj.timestamp = Date.now();\n              if (typeof obj.timestamp !== 'number') {\n                obj.timestamp = new Date().getTime();\n              }\n            }\n            if (obj.promise != undefined) {\n              obj.uid = _qz.websocket.setup.newUID();\n              _qz.websocket.pendingCalls[obj.uid] = obj.promise;\n            }\n\n            // track requesting monitor\n            obj.position = {\n              x: typeof screen !== 'undefined' ? ((screen.availWidth || screen.width) / 2) + (screen.left || screen.availLeft || 0) : 0,\n              y: typeof screen !== 'undefined' ? ((screen.availHeight || screen.height) / 2) + (screen.top || screen.availTop || 0) : 0\n            };\n\n            try {\n              if (obj.call != undefined && obj.signature == undefined && _qz.security.needsSigned(obj.call)) {\n                var signObj = {\n                  call: obj.call,\n                  params: obj.params,\n                  timestamp: obj.timestamp\n                };\n\n                //make a hashing promise if not already one\n                var hashing = _qz.tools.hash(_qz.tools.stringify(signObj));\n                if (!hashing.then) {\n                  hashing = _qz.tools.promise(function(resolve) {\n                    resolve(hashing);\n                  });\n                }\n\n                hashing.then(function(hashed) {\n                  return _qz.security.callSign(hashed);\n                }).then(function(signature) {\n                  _qz.log.trace(\"Signature for call\", signature);\n                  obj.signature = signature || \"\";\n                  obj.signAlgorithm = _qz.security.signAlgorithm;\n\n                  _qz.signContent = undefined;\n                  _qz.websocket.connection.send(_qz.tools.stringify(obj));\n                });\n              } else {\n                _qz.log.trace(\"Signature for call\", obj.signature);\n\n                //called for pre-signed content and (unsigned) setup calls\n                _qz.websocket.connection.send(_qz.tools.stringify(obj));\n              }\n            }\n            catch(err) {\n              _qz.log.error(err);\n\n              if (obj.promise != undefined) {\n                obj.promise.reject(err);\n                delete _qz.websocket.pendingCalls[obj.uid];\n              }\n            }\n          };\n\n          //receive message from qz\n          _qz.websocket.connection.onmessage = function(evt) {\n            var returned = JSON.parse(evt.data);\n\n            if (returned.uid == null) {\n              if (returned.type == null) {\n                //incorrect response format, likely connected to incompatible qz version\n                _qz.websocket.connection.close(4003, \"Connected to incompatible QZ Tray version\");\n\n              } else {\n                //streams (callbacks only, no promises)\n                switch(returned.type) {\n                  case _qz.streams.serial:\n                    if (!returned.event) {\n                      returned.event = JSON.stringify({ portName: returned.key, output: returned.data });\n                    }\n\n                    _qz.serial.callSerial(JSON.parse(returned.event));\n                    break;\n                  case _qz.streams.socket:\n                    _qz.socket.callSocket(JSON.parse(returned.event));\n                    break;\n                  case _qz.streams.usb:\n                    if (!returned.event) {\n                      returned.event = JSON.stringify({ vendorId: returned.key[0], productId: returned.key[1], output: returned.data });\n                    }\n\n                    _qz.usb.callUsb(JSON.parse(returned.event));\n                    break;\n                  case _qz.streams.hid:\n                    _qz.hid.callHid(JSON.parse(returned.event));\n                    break;\n                  case _qz.streams.printer:\n                    _qz.printers.callPrinter(JSON.parse(returned.event));\n                    break;\n                  case _qz.streams.file:\n                    _qz.file.callFile(JSON.parse(returned.event));\n                    break;\n                  default:\n                    _qz.log.allay(\"Cannot determine stream type for callback\", returned);\n                    break;\n                }\n              }\n\n              return;\n            }\n\n            _qz.log.trace(\"Received response from websocket\", returned);\n\n            var promise = _qz.websocket.pendingCalls[returned.uid];\n            if (promise == undefined) {\n              _qz.log.allay('No promise found for returned response');\n            } else {\n              if (returned.error != undefined) {\n                promise.reject(new Error(returned.error));\n              } else {\n                promise.resolve(returned.result);\n              }\n            }\n\n            delete _qz.websocket.pendingCalls[returned.uid];\n          };\n\n\n          //send up the certificate before making any calls\n          //also gives the user a chance to deny the connection\n          function sendCert(cert) {\n            if (cert === undefined) { cert = null; }\n\n            //websocket setup, query what version is connected\n            qz.api.getVersion().then(function(version) {\n              _qz.websocket.connection.version = version;\n              _qz.websocket.connection.semver = version.toLowerCase().replace(/-rc\\./g, \"-rc\").split(/[\\\\+\\\\.-]/g);\n              for(var i = 0; i < _qz.websocket.connection.semver.length; i++) {\n                try {\n                  if (i == 3 && _qz.websocket.connection.semver[i].toLowerCase().indexOf(\"rc\") == 0) {\n                    // Handle \"rc1\" pre-release by negating build info\n                    _qz.websocket.connection.semver[i] = -(_qz.websocket.connection.semver[i].replace(/\\D/g, \"\"));\n                    continue;\n                  }\n                  _qz.websocket.connection.semver[i] = parseInt(_qz.websocket.connection.semver[i]);\n                }\n                catch(ignore) {}\n\n                if (_qz.websocket.connection.semver.length < 4) {\n                  _qz.websocket.connection.semver[3] = 0;\n                }\n              }\n\n              //algorithm can be declared before a connection, check for incompatibilities now that we have one\n              _qz.compatible.algorithm(true);\n            }).then(function() {\n              _qz.websocket.connection.sendData({ certificate: cert, promise: openPromise });\n            });\n          }\n\n          _qz.security.callCert().then(sendCert).catch(function(error) {\n            _qz.log.warn(\"Failed to get certificate:\", error);\n            sendCert(null);\n          });\n        },\n\n        /** Generate unique ID used to map a response to a call. */\n        newUID: function() {\n          var len = 6;\n          return (new Array(len + 1).join(\"0\") + (Math.random() * Math.pow(36, len) << 0).toString(36)).slice(-len)\n        }\n      },\n\n      dataPromise: function(callName, params, signature, signingTimestamp) {\n        return _qz.tools.promise(function(resolve, reject) {\n          var msg = {\n            call: callName,\n            promise: { resolve: resolve, reject: reject },\n            params: params,\n            signature: signature,\n            timestamp: signingTimestamp\n          };\n\n          _qz.websocket.connection.sendData(msg);\n        });\n      },\n\n      /** Library of promises awaiting a response, uid -> promise */\n      pendingCalls: {},\n\n      /** List of functions to call on error from the websocket. */\n      errorCallbacks: [],\n      /** Calls all functions registered to listen for errors. */\n      callError: function(evt) {\n        if (Array.isArray(_qz.websocket.errorCallbacks)) {\n          for(var i = 0; i < _qz.websocket.errorCallbacks.length; i++) {\n            _qz.websocket.errorCallbacks[i](evt);\n          }\n        } else {\n          _qz.websocket.errorCallbacks(evt);\n        }\n      },\n\n      /** List of function to call on closing from the websocket. */\n      closedCallbacks: [],\n      /** Calls all functions registered to listen for closing. */\n      callClose: function(evt) {\n        if (Array.isArray(_qz.websocket.closedCallbacks)) {\n          for(var i = 0; i < _qz.websocket.closedCallbacks.length; i++) {\n            _qz.websocket.closedCallbacks[i](evt);\n          }\n        } else {\n          _qz.websocket.closedCallbacks(evt);\n        }\n      }\n    },\n\n\n    printing: {\n      /** Default options used for new printer configs. Can be overridden using {@link qz.configs.setDefaults}. */\n      defaultConfig: {\n        //value purposes are explained in the qz.configs.setDefaults docs\n\n        bounds: null,\n        colorType: 'color',\n        copies: 1,\n        density: 0,\n        duplex: false,\n        fallbackDensity: null,\n        interpolation: 'bicubic',\n        jobName: null,\n        legacy: false,\n        margins: 0,\n        orientation: null,\n        paperThickness: null,\n        printerTray: null,\n        rasterize: false,\n        rotation: 0,\n        scaleContent: true,\n        size: null,\n        units: 'in',\n\n        forceRaw: false,\n        encoding: null,\n        spool: null\n      }\n    },\n\n\n    serial: {\n      /** List of functions called when receiving data from serial connection. */\n      serialCallbacks: [],\n      /** Calls all functions registered to listen for serial events. */\n      callSerial: function(streamEvent) {\n        if (Array.isArray(_qz.serial.serialCallbacks)) {\n          for(var i = 0; i < _qz.serial.serialCallbacks.length; i++) {\n            _qz.serial.serialCallbacks[i](streamEvent);\n          }\n        } else {\n          _qz.serial.serialCallbacks(streamEvent);\n        }\n      }\n    },\n\n\n    socket: {\n      /** List of functions called when receiving data from network socket connection. */\n      socketCallbacks: [],\n      /** Calls all functions registered to listen for network socket events. */\n      callSocket: function(socketEvent) {\n        if (Array.isArray(_qz.socket.socketCallbacks)) {\n          for(var i = 0; i < _qz.socket.socketCallbacks.length; i++) {\n            _qz.socket.socketCallbacks[i](socketEvent);\n          }\n        } else {\n          _qz.socket.socketCallbacks(socketEvent);\n        }\n      }\n    },\n\n\n    usb: {\n      /** List of functions called when receiving data from usb connection. */\n      usbCallbacks: [],\n      /** Calls all functions registered to listen for usb events. */\n      callUsb: function(streamEvent) {\n        if (Array.isArray(_qz.usb.usbCallbacks)) {\n          for(var i = 0; i < _qz.usb.usbCallbacks.length; i++) {\n            _qz.usb.usbCallbacks[i](streamEvent);\n          }\n        } else {\n          _qz.usb.usbCallbacks(streamEvent);\n        }\n      }\n    },\n\n\n    hid: {\n      /** List of functions called when receiving data from hid connection. */\n      hidCallbacks: [],\n      /** Calls all functions registered to listen for hid events. */\n      callHid: function(streamEvent) {\n        if (Array.isArray(_qz.hid.hidCallbacks)) {\n          for(var i = 0; i < _qz.hid.hidCallbacks.length; i++) {\n            _qz.hid.hidCallbacks[i](streamEvent);\n          }\n        } else {\n          _qz.hid.hidCallbacks(streamEvent);\n        }\n      }\n    },\n\n\n    printers: {\n      /** List of functions called when receiving data from printer connection. */\n      printerCallbacks: [],\n      /** Calls all functions registered to listen for printer events. */\n      callPrinter: function(streamEvent) {\n        if (Array.isArray(_qz.printers.printerCallbacks)) {\n          for(var i = 0; i < _qz.printers.printerCallbacks.length; i++) {\n            _qz.printers.printerCallbacks[i](streamEvent);\n          }\n        } else {\n          _qz.printers.printerCallbacks(streamEvent);\n        }\n      }\n    },\n\n\n    file: {\n      /** List of functions called when receiving info regarding file changes. */\n      fileCallbacks: [],\n      /** Calls all functions registered to listen for file events. */\n      callFile: function(streamEvent) {\n        if (Array.isArray(_qz.file.fileCallbacks)) {\n          for(var i = 0; i < _qz.file.fileCallbacks.length; i++) {\n            _qz.file.fileCallbacks[i](streamEvent);\n          }\n        } else {\n          _qz.file.fileCallbacks(streamEvent);\n        }\n      }\n    },\n\n\n    security: {\n      /** Function used to resolve promise when acquiring site's public certificate. */\n      certHandler: function(resolve, reject) { reject(); },\n      /** Called to create new promise (using {@link _qz.security.certHandler}) for certificate retrieval. */\n      callCert: function() {\n        if (typeof _qz.security.certHandler.then === 'function') {\n          //already a promise\n          return _qz.security.certHandler;\n        } else if (_qz.security.certHandler.constructor.name === \"AsyncFunction\") {\n          //already callable as a promise\n          return _qz.security.certHandler();\n        } else {\n          //turn into a promise\n          return _qz.tools.promise(_qz.security.certHandler);\n        }\n      },\n\n      /** Function used to create promise resolver when requiring signed calls. */\n      signatureFactory: function() { return function(resolve) { resolve(); } },\n      /** Called to create new promise (using {@link _qz.security.signatureFactory}) for signed calls. */\n      callSign: function(toSign) {\n        if (_qz.security.signatureFactory.constructor.name === \"AsyncFunction\") {\n          //use directly\n          return _qz.security.signatureFactory(toSign);\n        } else {\n          //use in a promise\n          return _qz.tools.promise(_qz.security.signatureFactory(toSign));\n        }\n      },\n\n      /** Signing algorithm used on signatures */\n      signAlgorithm: \"SHA1\",\n\n      needsSigned: function(callName) {\n        const undialoged = [\n          \"printers.getStatus\",\n          \"printers.stopListening\",\n          \"usb.isClaimed\",\n          \"usb.closeStream\",\n          \"usb.releaseDevice\",\n          \"hid.stopListening\",\n          \"hid.isClaimed\",\n          \"hid.closeStream\",\n          \"hid.releaseDevice\",\n          \"file.stopListening\",\n          \"getVersion\"\n        ];\n\n        return callName != null && undialoged.indexOf(callName) === -1;\n      }\n    },\n\n\n    tools: {\n      /** Create a new promise */\n      promise: function(resolver) {\n        //prefer global object for historical purposes\n        if (typeof RSVP !== 'undefined') {\n          return new RSVP.Promise(resolver);\n        } else if (typeof Promise !== 'undefined') {\n          return new Promise(resolver);\n        } else {\n          _qz.log.error(\"Promise/A+ support is required.  See qz.api.setPromiseType(...)\");\n        }\n      },\n\n      /** Stub for rejecting with an Error from withing a Promise */\n      reject: function(error) {\n        return _qz.tools.promise(function(resolve, reject) {\n          reject(error);\n        });\n      },\n\n      stringify: function(object) {\n        //old versions of prototype affect stringify\n        var pjson = Array.prototype.toJSON;\n        delete Array.prototype.toJSON;\n\n        function skipKeys(key, value) {\n          if (key === \"promise\") {\n            return undefined;\n          }\n\n          return value;\n        }\n\n        var result = JSON.stringify(object, skipKeys);\n\n        if (pjson) {\n          Array.prototype.toJSON = pjson;\n        }\n\n        return result;\n      },\n\n      hash: function(data) {\n        //prefer global object for historical purposes\n        if (typeof Sha256 !== 'undefined') {\n          return Sha256.hash(data);\n        } else {\n          return _qz.SHA.hash(data);\n        }\n      },\n\n      ws: typeof WebSocket !== 'undefined' ? WebSocket : null,\n\n      absolute: function(loc) {\n        if (typeof window !== 'undefined' && typeof document.createElement === 'function') {\n          var a = document.createElement(\"a\");\n          a.href = loc;\n          return a.href;\n        } else if (typeof exports === 'object') {\n          //node.js\n          require('path').resolve(loc);\n        }\n        return loc;\n      },\n\n      relative: function(data) {\n        for(var i = 0; i < data.length; i++) {\n          if (data[i].constructor === Object) {\n            var absolute = false;\n\n            if (data[i].data && data[i].data.search(/data:image\\/\\w+;base64,/) === 0) {\n              //upgrade from old base64 behavior\n              data[i].flavor = \"base64\";\n              data[i].data = data[i].data.replace(/^data:image\\/\\w+;base64,/, \"\");\n            } else if (data[i].flavor) {\n              //if flavor is known, we can directly check for absolute flavor types\n              if ([\"FILE\", \"XML\"].indexOf(data[i].flavor.toUpperCase()) > -1) {\n                absolute = true;\n              }\n            } else if (data[i].format && [\"HTML\", \"IMAGE\", \"PDF\", \"FILE\", \"XML\"].indexOf(data[i].format.toUpperCase()) > -1) {\n              //if flavor is not known, all valid pixel formats default to file flavor\n              //previous v2.0 data also used format as what is now flavor, so we check for those values here too\n              absolute = true;\n            } else if (data[i].type && (([\"PIXEL\", \"IMAGE\", \"PDF\"].indexOf(data[i].type.toUpperCase()) > -1 && !data[i].format)\n              || ([\"HTML\", \"PDF\"].indexOf(data[i].type.toUpperCase()) > -1 && (!data[i].format || data[i].format.toUpperCase() === \"FILE\")))) {\n              //if all we know is pixel type, then it is image's file flavor\n              //previous v2.0 data also used type as what is now format, so we check for those value here too\n              absolute = true;\n            }\n\n            if (absolute) {\n              //change relative links to absolute\n              data[i].data = _qz.tools.absolute(data[i].data);\n            }\n            if (data[i].options && typeof data[i].options.overlay === 'string') {\n              data[i].options.overlay = _qz.tools.absolute(data[i].options.overlay);\n            }\n          }\n        }\n      },\n\n      /** Performs deep copy to target from remaining params */\n      extend: function(target) {\n        //special case when reassigning properties as objects in a deep copy\n        if (typeof target !== 'object') {\n          target = {};\n        }\n\n        for(var i = 1; i < arguments.length; i++) {\n          var source = arguments[i];\n          if (!source) { continue; }\n\n          for(var key in source) {\n            if (source.hasOwnProperty(key)) {\n              if (target === source[key]) { continue; }\n\n              if (source[key] && source[key].constructor && source[key].constructor === Object) {\n                var clone;\n                if (Array.isArray(source[key])) {\n                  clone = target[key] || [];\n                } else {\n                  clone = target[key] || {};\n                }\n\n                target[key] = _qz.tools.extend(clone, source[key]);\n              } else if (source[key] !== undefined) {\n                target[key] = source[key];\n              }\n            }\n          }\n        }\n\n        return target;\n      },\n\n      versionCompare: function(major, minor, patch, build) {\n        if (_qz.tools.assertActive()) {\n          var semver = _qz.websocket.connection.semver;\n          if (semver[0] != major) {\n            return semver[0] - major;\n          }\n          if (minor != undefined && semver[1] != minor) {\n            return semver[1] - minor;\n          }\n          if (patch != undefined && semver[2] != patch) {\n            return semver[2] - patch;\n          }\n          if (build != undefined && semver.length > 3 && semver[3] != build) {\n            return Number.isInteger(semver[3]) && Number.isInteger(build) ? semver[3] - build : semver[3].toString().localeCompare(build.toString());\n          }\n          return 0;\n        }\n      },\n\n      isVersion: function(major, minor, patch, build) {\n        return _qz.tools.versionCompare(major, minor, patch, build) == 0;\n      },\n\n      isActive: function() {\n        return _qz.websocket.connection != null && _qz.websocket.connection.established;\n      },\n\n      assertActive: function() {\n        if (_qz.tools.isActive()) {\n          return true;\n        }\n        // Promise won't reject on throw; yet better than 'undefined'\n        throw new Error(\"A connection to QZ has not been established yet\");\n      }\n    },\n\n    compatible: {\n      /** Converts message format to a previous version's */\n      data: function(printData) {\n        if (_qz.tools.isVersion(2, 0)) {\n          /*\n          2.0.x conversion\n          -----\n          type=pixel -> use format as 2.0 type (unless 'command' format, which forces 2.0 'raw' type)\n          type=raw -> 2.0 type has to be 'raw'\n                      if format is 'image' -> force 2.0 'image' format, ignore everything else (unsupported in 2.0)\n\n           flavor translates straight to 2.0 format (unless forced to 'raw'/'image')\n           */\n          _qz.log.trace(\"Converting print data to v2.0 for \" + _qz.websocket.connection.version);\n          for(var i = 0; i < printData.length; i++) {\n            if (printData[i].constructor === Object) {\n              if (printData[i].type && printData[i].type.toUpperCase() === \"RAW\" && printData[i].format && printData[i].format.toUpperCase() === \"IMAGE\") {\n                if (printData[i].flavor && printData[i].flavor.toUpperCase() === \"BASE64\") {\n                  //special case for raw base64 images\n                  printData[i].data = \"data:image/compat;base64,\" + printData[i].data;\n                }\n                printData[i].flavor = \"IMAGE\"; //forces 'image' format when shifting for conversion\n              }\n              if ((printData[i].type && printData[i].type.toUpperCase() === \"RAW\") || (printData[i].format && printData[i].format.toUpperCase() === \"COMMAND\")) {\n                printData[i].format = \"RAW\"; //forces 'raw' type when shifting for conversion\n              }\n\n              printData[i].type = printData[i].format;\n              printData[i].format = printData[i].flavor;\n              delete printData[i].flavor;\n            }\n          }\n        }\n      },\n\n      /* Converts config defaults to match previous version */\n      config: function(config, dirty) {\n        if (_qz.tools.isVersion(2, 0)) {\n          if (!dirty.rasterize) {\n            config.rasterize = true;\n          }\n        }\n        if(_qz.tools.versionCompare(2, 2) < 0) {\n          if(config.forceRaw !== 'undefined') {\n            config.altPrinting = config.forceRaw;\n            delete config.forceRaw;\n          }\n        }\n        if(_qz.tools.versionCompare(2, 1, 2, 11) < 0) {\n          if(config.spool) {\n            if(config.spool.size) {\n              config.perSpool = config.spool.size;\n              delete config.spool.size;\n            }\n            if(config.spool.end) {\n              config.endOfDoc = config.spool.end;\n              delete config.spool.end;\n            }\n            delete config.spool;\n          }\n        }\n        return config;\n      },\n\n      /** Compat wrapper with previous version **/\n      networking: function(hostname, port, signature, signingTimestamp, mappingCallback) {\n        // Use 2.0\n        if (_qz.tools.isVersion(2, 0)) {\n          return _qz.tools.promise(function(resolve, reject) {\n            _qz.websocket.dataPromise('websocket.getNetworkInfo', {\n              hostname: hostname,\n              port: port\n            }, signature, signingTimestamp).then(function(data) {\n              if (typeof mappingCallback !== 'undefined') {\n                resolve(mappingCallback(data));\n              } else {\n                resolve(data);\n              }\n            }, reject);\n          });\n        }\n        // Wrap 2.1\n        return _qz.tools.promise(function(resolve, reject) {\n          _qz.websocket.dataPromise('networking.device', {\n            hostname: hostname,\n            port: port\n          }, signature, signingTimestamp).then(function(data) {\n            resolve({ ipAddress: data.ip, macAddress: data.mac });\n          }, reject);\n        });\n      },\n\n      /** Check if QZ version supports chosen algorithm */\n      algorithm: function(quiet) {\n        //if not connected yet we will assume compatibility exists for the time being\n        if (_qz.tools.isActive()) {\n          if (_qz.tools.isVersion(2, 0)) {\n            if (!quiet) {\n              _qz.log.warn(\"Connected to an older version of QZ, alternate signature algorithms are not supported\");\n            }\n            return false;\n          }\n        }\n\n        return true;\n      }\n    },\n\n    /**\n     * Adapted from Chris Veness's code under MIT Licence (C) 2002\n     * see http://www.movable-type.co.uk/scripts/sha256.html\n     */\n    SHA: {\n      //@formatter:off - keep this block compact\n      hash: function(msg) {\n        // add trailing '1' bit (+ 0's padding) to string [§5.1.1]\n        msg = msg.utf8Encode() + String.fromCharCode(0x80);\n\n        // constants [§4.2.2]\n        var K = [\n          0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n          0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n          0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n          0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n          0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n          0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n          0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n          0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n        ];\n        // initial hash value [§5.3.1]\n        var H = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];\n\n        // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]\n        var l = msg.length / 4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length\n        var N = Math.ceil(l / 16);  // number of 16-integer-blocks required to hold 'l' ints\n        var M = new Array(N);\n\n        for(var i = 0; i < N; i++) {\n          M[i] = new Array(16);\n          for(var j = 0; j < 16; j++) {  // encode 4 chars per integer, big-endian encoding\n            M[i][j] = (msg.charCodeAt(i * 64 + j * 4) << 24) | (msg.charCodeAt(i * 64 + j * 4 + 1) << 16) |\n              (msg.charCodeAt(i * 64 + j * 4 + 2) << 8) | (msg.charCodeAt(i * 64 + j * 4 + 3));\n          } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0\n        }\n        // add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]\n        // note: most significant word would be (len-1)*8 >>> 32, but since JS converts\n        // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators\n        M[N-1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32);\n        M[N-1][14] = Math.floor(M[N-1][14]);\n        M[N-1][15] = ((msg.length - 1) * 8) & 0xffffffff;\n\n        // HASH COMPUTATION [§6.1.2]\n        var W = new Array(64); var a, b, c, d, e, f, g, h;\n        for(var i = 0; i < N; i++) {\n          // 1 - prepare message schedule 'W'\n          for(var t = 0; t < 16; t++) { W[t] = M[i][t]; }\n          for(var t = 16; t < 64; t++) { W[t] = (_qz.SHA._dev1(W[t-2]) + W[t-7] + _qz.SHA._dev0(W[t-15]) + W[t-16]) & 0xffffffff; }\n          // 2 - initialise working variables a, b, c, d, e, f, g, h with previous hash value\n          a = H[0]; b = H[1]; c = H[2]; d = H[3]; e = H[4]; f = H[5]; g = H[6]; h = H[7];\n          // 3 - main loop (note 'addition modulo 2^32')\n          for(var t = 0; t < 64; t++) {\n            var T1 = h + _qz.SHA._sig1(e) + _qz.SHA._ch(e, f, g) + K[t] + W[t];\n            var T2 = _qz.SHA._sig0(a) + _qz.SHA._maj(a, b, c);\n            h = g; g = f; f = e; e = (d + T1) & 0xffffffff;\n            d = c; c = b; b = a; a = (T1 + T2) & 0xffffffff;\n          }\n          // 4 - compute the new intermediate hash value (note 'addition modulo 2^32')\n          H[0] = (H[0]+a) & 0xffffffff; H[1] = (H[1]+b) & 0xffffffff; H[2] = (H[2]+c) & 0xffffffff; H[3] = (H[3]+d) & 0xffffffff;\n          H[4] = (H[4]+e) & 0xffffffff; H[5] = (H[5]+f) & 0xffffffff; H[6] = (H[6]+g) & 0xffffffff; H[7] = (H[7]+h) & 0xffffffff;\n        }\n\n        return _qz.SHA._hexStr(H[0]) + _qz.SHA._hexStr(H[1]) + _qz.SHA._hexStr(H[2]) + _qz.SHA._hexStr(H[3]) +\n          _qz.SHA._hexStr(H[4]) + _qz.SHA._hexStr(H[5]) + _qz.SHA._hexStr(H[6]) + _qz.SHA._hexStr(H[7]);\n      },\n\n      // Rotates right (circular right shift) value x by n positions\n      _rotr: function(n, x) { return (x >>> n) | (x << (32 - n)); },\n      // logical functions\n      _sig0: function(x) { return _qz.SHA._rotr(2, x) ^ _qz.SHA._rotr(13, x) ^ _qz.SHA._rotr(22, x); },\n      _sig1: function(x) { return _qz.SHA._rotr(6, x) ^ _qz.SHA._rotr(11, x) ^ _qz.SHA._rotr(25, x); },\n      _dev0: function(x) { return _qz.SHA._rotr(7, x) ^ _qz.SHA._rotr(18, x) ^ (x >>> 3); },\n      _dev1: function(x) { return _qz.SHA._rotr(17, x) ^ _qz.SHA._rotr(19, x) ^ (x >>> 10); },\n      _ch: function(x, y, z) { return (x & y) ^ (~x & z); },\n      _maj: function(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); },\n      // note can't use toString(16) as it is implementation-dependant, and in IE returns signed numbers when used on full words\n      _hexStr: function(n) { var s = \"\", v; for(var i = 7; i >= 0; i--) { v = (n >>> (i * 4)) & 0xf; s += v.toString(16); } return s; },\n      //@formatter:on\n    },\n  };\n\n\n///// CONFIG CLASS ////\n\n  /** Object to handle configured printer options. */\n  function Config(printer, opts) {\n\n    this.config = _qz.tools.extend({}, _qz.printing.defaultConfig); //create a copy of the default options\n    this._dirtyOpts = {}; //track which config options have changed from the defaults\n\n    /**\n     * Set the printer assigned to this config.\n     * @param {string|Object} newPrinter Name of printer. Use object type to specify printing to file or host.\n     *  @param {string} [newPrinter.name] Name of printer to send printing.\n     *  @param {string} [newPrinter.file] DEPRECATED: Name of file to send printing.\n     *  @param {string} [newPrinter.host] IP address or host name to send printing.\n     *  @param {string} [newPrinter.port] Port used by &lt;printer.host>.\n     */\n    this.setPrinter = function(newPrinter) {\n      if (typeof newPrinter === 'string') {\n        newPrinter = { name: newPrinter };\n      }\n\n      if(newPrinter && newPrinter.file) {\n        // TODO: Warn for UNC paths too https://github.com/qzind/tray/issues/730\n        if(newPrinter.file.indexOf(\"\\\\\\\\\") != 0) {\n          _qz.log.warn(\"Printing to file is deprecated.  See https://github.com/qzind/tray/issues/730\");\n        }\n      }\n\n      this.printer = newPrinter;\n    };\n\n    /**\n     *  @returns {Object} The printer currently assigned to this config.\n     */\n    this.getPrinter = function() {\n      return this.printer;\n    };\n\n    /**\n     * Alter any of the printer options currently applied to this config.\n     * @param newOpts {Object} The options to change. See <code>qz.configs.setDefaults</code> docs for available values.\n     *\n     * @see qz.configs.setDefaults\n     */\n    this.reconfigure = function(newOpts) {\n      for(var key in newOpts) {\n        if (newOpts[key] !== undefined) {\n          this._dirtyOpts[key] = true;\n        }\n      }\n\n      _qz.tools.extend(this.config, newOpts);\n    };\n\n    /**\n     * @returns {Object} The currently applied options on this config.\n     */\n    this.getOptions = function() {\n      return _qz.compatible.config(this.config, this._dirtyOpts);\n    };\n\n    // init calls for new config object\n    this.setPrinter(printer);\n    this.reconfigure(opts);\n  }\n\n  /**\n   * Shortcut method for calling <code>qz.print</code> with a particular config.\n   * @param {Array<Object|string>} data Array of data being sent to the printer. See <code>qz.print</code> docs for available values.\n   * @param {boolean} [signature] Pre-signed signature of JSON string containing <code>call</code>, <code>params</code>, and <code>timestamp</code>.\n   * @param {number} [signingTimestamp] Required with <code>signature</code>. Timestamp used with pre-signed content.\n   *\n   * @example\n   * qz.print(myConfig, ...); // OR\n   * myConfig.print(...);\n   *\n   * @see qz.print\n   */\n  Config.prototype.print = function(data, signature, signingTimestamp) {\n    qz.print(this, data, signature, signingTimestamp);\n  };\n\n\n///// PUBLIC METHODS /////\n\n  /** @namespace qz */\n  var qz = {\n\n    /**\n     * Calls related specifically to the web socket connection.\n     * @namespace qz.websocket\n     */\n    websocket: {\n      /**\n       * Check connection status. Active connection is necessary for other calls to run.\n       *\n       * @returns {boolean} If there is an active connection with QZ Tray.\n       *\n       * @see connect\n       *\n       * @memberof  qz.websocket\n       */\n      isActive: function() {\n        return _qz.tools.isActive();\n      },\n\n      /**\n       * Call to setup connection with QZ Tray on user's system.\n       *\n       * @param {Object} [options] Configuration options for the web socket connection.\n       *  @param {string|Array<string>} [options.host=['localhost', 'localhost.qz.io']] Host running the QZ Tray software.\n       *  @param {Object} [options.port] Config options for ports to cycle.\n       *   @param {Array<number>} [options.port.secure=[8181, 8282, 8383, 8484]] Array of secure (WSS) ports to try\n       *   @param {Array<number>} [options.port.insecure=[8182, 8283, 8384, 8485]] Array of insecure (WS) ports to try\n       *  @param {boolean} [options.usingSecure=true] If the web socket should try to use secure ports for connecting.\n       *  @param {number} [options.keepAlive=60] Seconds between keep-alive pings to keep connection open. Set to 0 to disable.\n       *  @param {number} [options.retries=0] Number of times to reconnect before failing.\n       *  @param {number} [options.delay=0] Seconds before firing a connection.  Ignored if <code>options.retries</code> is 0.\n       *\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.websocket\n       */\n      connect: function(options) {\n        return _qz.tools.promise(function(resolve, reject) {\n          if (_qz.tools.isActive()) {\n            reject(new Error(\"An open connection with QZ Tray already exists\"));\n            return;\n          } else if (_qz.websocket.connection != null) {\n            reject(new Error(\"The current connection attempt has not returned yet\"));\n            return;\n          }\n\n          if (!_qz.tools.ws) {\n            reject(new Error(\"WebSocket not supported by this browser\"));\n            return;\n          } else if (!_qz.tools.ws.CLOSED || _qz.tools.ws.CLOSED == 2) {\n            reject(new Error(\"Unsupported WebSocket version detected: HyBi-00/Hixie-76\"));\n            return;\n          }\n\n          //ensure some form of options exists for value checks\n          if (options == undefined) { options = {}; }\n\n          //disable secure ports if page is not secure\n          if (typeof location === 'undefined' || location.protocol !== 'https:') {\n            //respect forcing secure ports if it is defined, otherwise disable\n            if (typeof options.usingSecure === 'undefined') {\n              _qz.log.trace(\"Disabling secure ports due to insecure page\");\n              options.usingSecure = false;\n            }\n          }\n\n          //ensure any hosts are passed to internals as an array\n          if (typeof options.host !== 'undefined' && !Array.isArray(options.host)) {\n            options.host = [options.host];\n          }\n\n          var attempt = function(count) {\n            var tried = false;\n            var nextAttempt = function() {\n              if (!tried) {\n                tried = true;\n\n                if (options && count < options.retries) {\n                  attempt(count + 1);\n                } else {\n                  _qz.websocket.connection = null;\n                  reject.apply(null, arguments);\n                }\n              }\n            };\n\n            var delayed = function() {\n              var config = _qz.tools.extend({}, _qz.websocket.connectConfig, options);\n              _qz.websocket.setup.findConnection(config, resolve, nextAttempt)\n            };\n            if (count == 0) {\n              delayed(); // only retries will be called with a delay\n            } else {\n              setTimeout(delayed, options.delay * 1000);\n            }\n          };\n\n          attempt(0);\n        });\n      },\n\n      /**\n       * Stop any active connection with QZ Tray.\n       *\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.websocket\n       */\n      disconnect: function() {\n        return _qz.tools.promise(function(resolve, reject) {\n          if (_qz.tools.isActive()) {\n            _qz.websocket.connection.close();\n            _qz.websocket.connection.promise = { resolve: resolve, reject: reject };\n          } else {\n            reject(new Error(\"No open connection with QZ Tray\"))\n          }\n        });\n      },\n\n      /**\n       * List of functions called for any connections errors outside of an API call.<p/>\n       * Also called if {@link websocket#connect} fails to connect.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Event} event)</code> calls.\n       *\n       * @memberof qz.websocket\n       */\n      setErrorCallbacks: function(calls) {\n        _qz.websocket.errorCallbacks = calls;\n      },\n\n      /**\n       * List of functions called for any connection closing event outside of an API call.<p/>\n       * Also called when {@link websocket#disconnect} is called.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Event} event)</code> calls.\n       *\n       * @memberof qz.websocket\n       */\n      setClosedCallbacks: function(calls) {\n        _qz.websocket.closedCallbacks = calls;\n      },\n\n      /**\n       * @deprecated Since 2.1.0.  Please use qz.networking.device() instead\n       *\n       * @param {string} [hostname] Hostname to try to connect to when determining network interfaces, defaults to \"google.com\"\n       * @param {number} [port] Port to use with custom hostname, defaults to 443\n       * @param {string} [signature] Pre-signed signature of hashed JSON string containing <code>call='websocket.getNetworkInfo'</code>, <code>params</code> object, and <code>timestamp</code>.\n       * @param {number} [signingTimestamp] Required with <code>signature</code>. Timestamp used with pre-signed content.\n       *\n       * @returns {Promise<Object<{ipAddress: string, macAddress: string}>|Error>} Connected system's network information.\n       *\n       * @memberof qz.websocket\n       */\n      getNetworkInfo: _qz.compatible.networking,\n\n      /**\n       * @returns {Object<{socket: String, host: String, port: Number}>} Details of active websocket connection\n       *\n       * @memberof qz.websocket\n       */\n      getConnectionInfo: function() {\n        if (_qz.tools.assertActive()) {\n          var url = _qz.websocket.connection.url.split(/[:\\/]+/g);\n          return { socket: url[0], host: url[1], port: +url[2] };\n        }\n      }\n    },\n\n\n    /**\n     * Calls related to getting printer information from the connection.\n     * @namespace qz.printers\n     */\n    printers: {\n      /**\n       * @param {string} [signature] Pre-signed signature of hashed JSON string containing <code>call='printers.getDefault</code>, <code>params</code>, and <code>timestamp</code>.\n       * @param {number} [signingTimestamp] Required with <code>signature</code>. Timestamp used with pre-signed content.\n       *\n       * @returns {Promise<string|Error>} Name of the connected system's default printer.\n       *\n       * @memberof qz.printers\n       */\n      getDefault: function(signature, signingTimestamp) {\n        return _qz.websocket.dataPromise('printers.getDefault', null, signature, signingTimestamp);\n      },\n\n      /**\n       * @param {string} [query] Search for a specific printer. All printers are returned if not provided.\n       * @param {string} [signature] Pre-signed signature of hashed JSON string containing <code>call='printers.find'</code>, <code>params</code>, and <code>timestamp</code>.\n       * @param {number} [signingTimestamp] Required with <code>signature</code>. Timestamp used with pre-signed content.\n       *\n       * @returns {Promise<Array<string>|string|Error>} The matched printer name if <code>query</code> is provided.\n       *                                                Otherwise an array of printer names found on the connected system.\n       *\n       * @memberof qz.printers\n       */\n      find: function(query, signature, signingTimestamp) {\n        return _qz.websocket.dataPromise('printers.find', { query: query }, signature, signingTimestamp);\n      },\n\n      /**\n       * Provides a list, with additional information, for each printer available to QZ.\n       *\n       * @returns {Promise<Array<Object>|Object|Error>}\n       *\n       * @memberof qz.printers\n       */\n      details: function() {\n        return _qz.websocket.dataPromise('printers.detail');\n      },\n\n      /**\n       * Start listening for printer status events, such as paper_jam events.\n       * Reported under the ACTION type in the streamEvent on callbacks.\n       *\n       * @returns {Promise<null|Error>}\n       * @since 2.1.0\n       *\n       * @see qz.printers.setPrinterCallbacks\n       *\n       * @param {null|string|Array<string>} printers Printer or list of printers to listen to, null listens to all.\n       * @param {Object|null} [options] Printer listener options\n       *  @param {null|boolean} [options.jobData=false] Flag indicating if raw spool file content should be return as well as status information (Windows only)\n       *  @param {null|number} [options.maxJobData=-1] Maximum number of bytes to returns for raw spooled file content (Windows only)\n       *  @param {null|string} [options.flavor=\"plain\"] Flavor of data format returned. Valid flavors are <code>[base64 | hex | plain*]</code> (Windows only)\n       *\n       * @memberof qz.printers\n       */\n      startListening: function(printers, options) {\n        if (!Array.isArray(printers)) {\n          printers = [printers];\n        }\n        var params = {\n          printerNames: printers\n        };\n        if (options && options.jobData == true) params.jobData = true;\n        if (options && options.maxJobData) params.maxJobData = options.maxJobData;\n        if (options && options.flavor) params.flavor = options.flavor;\n        return _qz.websocket.dataPromise('printers.startListening', params);\n      },\n\n      /**\n       * Stop listening for printer status actions.\n       *\n       * @returns {Promise<null|Error>}\n       * @since 2.1.0\n       *\n       * @see qz.printers.setPrinterCallbacks\n       *\n       * @memberof qz.printers\n       */\n      stopListening: function() {\n        return _qz.websocket.dataPromise('printers.stopListening');\n      },\n\n      /**\n       * Retrieve current printer status from any active listeners.\n       *\n       * @returns {Promise<null|Error>}\n       * @since 2.1.0\n       *\n       * @see qz.printers.startListening\n       *\n       * @memberof qz.printers\n       */\n      getStatus: function() {\n        return _qz.websocket.dataPromise('printers.getStatus');\n      },\n\n      /**\n       * List of functions called for any printer status change.\n       * Event data will contain <code>{string} printerName</code> and <code>{string} status</code> for all types.\n       *  For RECEIVE types, <code>{Array} output</code> (in hexadecimal format).\n       *  For ERROR types, <code>{string} exception</code>.\n       *  For ACTION types, <code>{string} actionType</code>.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Object} eventData)</code> calls.\n       * @since 2.1.0\n       *\n       * @memberof qz.printers\n       */\n      setPrinterCallbacks: function(calls) {\n        _qz.printers.printerCallbacks = calls;\n      }\n    },\n\n    /**\n     * Calls related to setting up new printer configurations.\n     * @namespace qz.configs\n     */\n    configs: {\n      /**\n       * Default options used by new configs if not overridden.\n       * Setting a value to NULL will use the printer's default options.\n       * Updating these will not update the options on any created config.\n       *\n       * @param {Object} options Default options used by printer configs if not overridden.\n       *\n       *  @param {Object} [options.bounds=null] Bounding box rectangle.\n       *   @param {number} [options.bounds.x=0] Distance from left for bounding box starting corner\n       *   @param {number} [options.bounds.y=0] Distance from top for bounding box starting corner\n       *   @param {number} [options.bounds.width=0] Width of bounding box\n       *   @param {number} [options.bounds.height=0] Height of bounding box\n       *  @param {string} [options.colorType='color'] Valid values <code>[color | grayscale | blackwhite]</code>\n       *  @param {number} [options.copies=1] Number of copies to be printed.\n       *  @param {number|Array<number>|Object|Array<Object>|string} [options.density=0] Pixel density (DPI, DPMM, or DPCM depending on <code>[options.units]</code>).\n       *      If provided as an array, uses the first supported density found (or the first entry if none found).\n       *      If provided as a string, valid values are <code>[best | draft]</code>, corresponding to highest or lowest reported density respectively.\n       *  @param {number} [options.density.cross=0] Asymmetric pixel density for the cross feed direction.\n       *  @param {number} [options.density.feed=0] Asymmetric pixel density for the feed direction.\n       *  @param {boolean|string} [options.duplex=false] Double sided printing, Can specify duplex style by passing a string value: <code>[one-sided | duplex | long-edge | tumble | short-edge]</code>\n       *  @param {number} [options.fallbackDensity=null] Value used when default density value cannot be read, or in cases where reported as \"Normal\" by the driver, (in DPI, DPMM, or DPCM depending on <code>[options.units]</code>).\n       *  @param {string} [options.interpolation='bicubic'] Valid values <code>[bicubic | bilinear | nearest-neighbor]</code>. Controls how images are handled when resized.\n       *  @param {string} [options.jobName=null] Name to display in print queue.\n       *  @param {boolean} [options.legacy=false] If legacy style printing should be used.\n       *  @param {Object|number} [options.margins=0] If just a number is provided, it is used as the margin for all sides.\n       *   @param {number} [options.margins.top=0]\n       *   @param {number} [options.margins.right=0]\n       *   @param {number} [options.margins.bottom=0]\n       *   @param {number} [options.margins.left=0]\n       *  @param {string} [options.orientation=null] Valid values <code>[portrait | landscape | reverse-landscape | null]</code>.\n       *                                             If set to <code>null</code>, orientation will be determined automatically.\n       *  @param {number} [options.paperThickness=null]\n       *  @param {string|number} [options.printerTray=null] Printer tray to pull from. The number N assumes string equivalent of 'Tray N'. Uses printer default if NULL.\n       *  @param {boolean} [options.rasterize=false] Whether documents should be rasterized before printing.\n       *                                             Specifying <code>[options.density]</code> for PDF print formats will set this to <code>true</code>.\n       *  @param {number} [options.rotation=0] Image rotation in degrees.\n       *  @param {boolean} [options.scaleContent=true] Scales print content to page size, keeping ratio.\n       *  @param {Object} [options.size=null] Paper size.\n       *   @param {number} [options.size.width=null] Page width.\n       *   @param {number} [options.size.height=null] Page height.\n       *  @param {string} [options.units='in'] Page units, applies to paper size, margins, and density. Valid value <code>[in | cm | mm]</code>\n       *\n       *  @param {boolean} [options.forceRaw=false] Print the specified raw data using direct method, skipping the driver.  Not yet supported on Windows.\n       *  @param {string|Object} [options.encoding=null] Character set for commands. Can be provided as an object for converting encoding types for RAW types.\n       *   @param {string} [options.encoding.from] If this encoding type is provided, RAW type commands will be parsed from this for the purpose of being converted to the <code>encoding.to</code> value.\n       *   @param {string} [options.encoding.to] Encoding RAW type commands will be converted into. If <Code>encoding.from</code> is not provided, this will be treated as if a string was passed for encoding.\n       *  @param {string} [options.endOfDoc=null] DEPRECATED Raw only: Character(s) denoting end of a page to control spooling.\n       *  @param {number} [options.perSpool=1] DEPRECATED: Raw only: Number of pages per spool.\n       *  @param {boolean} [options.retainTemp=false] Retain any temporary files used.  Ignored unless <code>forceRaw</code> <code>true</code>.\n       *  @param {Object} [options.spool=null] Advanced spooling options.\n       *   @param {number} [options.spool.size=null] Number of pages per spool.  Default is no limit.  If <code>spool.end</code> is provided, defaults to <code>1</code>\n       *   @param {string} [options.spool.end=null] Raw only: Character(s) denoting end of a page to control spooling.\n       *\n       * @memberof qz.configs\n       */\n      setDefaults: function(options) {\n        _qz.tools.extend(_qz.printing.defaultConfig, options);\n      },\n\n      /**\n       * Creates new printer config to be used in printing.\n       *\n       * @param {string|object} printer Name of printer. Use object type to specify printing to file or host.\n       *  @param {string} [printer.name] Name of printer to send printing.\n       *  @param {string} [printer.file] Name of file to send printing.\n       *  @param {string} [printer.host] IP address or host name to send printing.\n       *  @param {string} [printer.port] Port used by &lt;printer.host>.\n       * @param {Object} [options] Override any of the default options for this config only.\n       *\n       * @returns {Config} The new config.\n       *\n       * @see configs.setDefaults\n       *\n       * @memberof qz.configs\n       */\n      create: function(printer, options) {\n        return new Config(printer, options);\n      }\n    },\n\n\n    /**\n     * Send data to selected config for printing.\n     * The promise for this method will resolve when the document has been sent to the printer. Actual printing may not be complete.\n     * <p/>\n     * Optionally, print requests can be pre-signed:\n     * Signed content consists of a JSON object string containing no spacing,\n     * following the format of the \"call\" and \"params\" keys in the API call, with the addition of a \"timestamp\" key in milliseconds\n     * ex. <code>'{\"call\":\"<callName>\",\"params\":{...},\"timestamp\":1450000000}'</code>\n     *\n     * @param {Object<Config>|Array<Object<Config>>} configs Previously created config object or objects.\n     * @param {Array<Object|string>|Array<Array<Object|string>>} data Array of data being sent to the printer.<br/>\n     *      String values are interpreted as <code>{type: 'raw', format: 'command', flavor: 'plain', data: &lt;string>}</code>.\n     *  @param {string} data.data\n     *  @param {string} data.type Printing type. Valid types are <code>[pixel | raw*]</code>. *Default\n     *  @param {string} data.format Format of data type used. *Default per type<p/>\n     *      For <code>[pixel]</code> types, valid formats are <code>[html | image* | pdf]</code>.<p/>\n     *      For <code>[raw]</code> types, valid formats are <code>[command* | html | image | pdf]</code>.\n     *  @param {string} data.flavor Flavor of data format used. *Default per format<p/>\n     *      For <code>[command]</code> formats, valid flavors are <code>[base64 | file | hex | plain* | xml]</code>.<p/>\n     *      For <code>[html]</code> formats, valid flavors are <code>[file* | plain]</code>.<p/>\n     *      For <code>[image]</code> formats, valid flavors are <code>[base64 | file*]</code>.<p/>\n     *      For <code>[pdf]</code> formats, valid flavors are <code>[base64 | file*]</code>.\n     *  @param {Object} [data.options]\n     *   @param {string} [data.options.language] Required with <code>[raw]</code> type + <code>[image]</code> format. Printer language.\n     *   @param {number} [data.options.x] Optional with <code>[raw]</code> type + <code>[image]</code> format. The X position of the image.\n     *   @param {number} [data.options.y] Optional with <code>[raw]</code> type + <code>[image]</code> format. The Y position of the image.\n     *   @param {string|number} [data.options.dotDensity] Optional with <code>[raw]</code> type + <code>[image]</code> format.\n     *   @param {number} [data.precision=128] Optional with <code>[raw]</code> type <code>[image]</code> format. Bit precision of the ribbons.\n     *   @param {boolean|string|Array<Array<number>>} [data.options.overlay=false] Optional with <code>[raw]</code> type <code>[image]</code> format.\n     *       Boolean sets entire layer, string sets mask image, Array sets array of rectangles in format <code>[x1,y1,x2,y2]</code>.\n     *   @param {string} [data.options.xmlTag] Required with <code>[xml]</code> flavor. Tag name containing base64 formatted data.\n     *   @param {number} [data.options.pageWidth] Optional with <code>[html | pdf]</code> formats. Width of the rendering.\n     *       Defaults to paper width.\n     *   @param {number} [data.options.pageHeight] Optional with <code>[html | pdf]</code> formats. Height of the rendering.\n     *       Defaults to paper height for <code>[pdf]</code>, or auto sized for <code>[html]</code>.\n     *   @param {string} [data.options.pageRanges] Optional with <code>[pdf]</code> formats. Comma-separated list of page ranges to include.\n     *   @param {boolean} [data.options.ignoreTransparency=false] Optional with <code>[pdf]</code> formats. Instructs transparent PDF elements to be ignored.\n     *       Transparent PDF elements are known to degrade performance and quality when printing.\n     * @param {...*} [arguments] Additionally three more parameters can be specified:<p/>\n     *     <code>{boolean} [resumeOnError=false]</code> Whether the chain should continue printing if it hits an error on one the the prints.<p/>\n     *     <code>{string|Array<string>} [signature]</code> Pre-signed signature(s) of the JSON string for containing <code>call</code>, <code>params</code>, and <code>timestamp</code>.<p/>\n     *     <code>{number|Array<number>} [signingTimestamps]</code> Required to match with <code>signature</code>. Timestamps for each of the passed pre-signed content.\n     *\n     * @returns {Promise<null|Error>}\n     *\n     * @see qz.configs.create\n     *\n     * @memberof qz\n     */\n    print: function(configs, data) {\n      var resumeOnError = false,\n        signatures = [],\n        signaturesTimestamps = [];\n\n      //find optional parameters\n      if (arguments.length >= 3) {\n        if (typeof arguments[2] === 'boolean') {\n          resumeOnError = arguments[2];\n\n          if (arguments.length >= 5) {\n            signatures = arguments[3];\n            signaturesTimestamps = arguments[4];\n          }\n        } else if (arguments.length >= 4) {\n          signatures = arguments[2];\n          signaturesTimestamps = arguments[3];\n        }\n\n        //ensure values are arrays for consistency\n        if (signatures && !Array.isArray(signatures)) { signatures = [signatures]; }\n        if (signaturesTimestamps && !Array.isArray(signaturesTimestamps)) { signaturesTimestamps = [signaturesTimestamps]; }\n      }\n\n      if (!Array.isArray(configs)) { configs = [configs]; } //single config -> array of configs\n      if (!Array.isArray(data[0])) { data = [data]; } //single data array -> array of data arrays\n\n      //clean up data formatting\n      for(var d = 0; d < data.length; d++) {\n        _qz.tools.relative(data[d]);\n        _qz.compatible.data(data[d]);\n      }\n\n      var sendToPrint = function(mapping) {\n        var params = {\n          printer: mapping.config.getPrinter(),\n          options: mapping.config.getOptions(),\n          data: mapping.data\n        };\n\n        return _qz.websocket.dataPromise('print', params, mapping.signature, mapping.timestamp);\n      };\n\n      //chain instead of Promise.all, so resumeOnError can collect each error\n      var chain = [];\n      for(var i = 0; i < configs.length || i < data.length; i++) {\n        (function(i_) {\n          var map = {\n            config: configs[Math.min(i_, configs.length - 1)],\n            data: data[Math.min(i_, data.length - 1)],\n            signature: signatures[i_],\n            timestamp: signaturesTimestamps[i_]\n          };\n\n          chain.push(function() { return sendToPrint(map) });\n        })(i);\n      }\n\n      //setup to catch errors if needed\n      var fallThrough = null;\n      if (resumeOnError) {\n        var fallen = [];\n        fallThrough = function(err) { fallen.push(err); };\n\n        //final promise to reject any errors as a group\n        chain.push(function() {\n          return _qz.tools.promise(function(resolve, reject) {\n            fallen.length ? reject(fallen) : resolve();\n          });\n        });\n      }\n\n      var last = null;\n      chain.reduce(function(sequence, link) {\n        last = sequence.catch(fallThrough).then(link); //catch is ignored if fallThrough is null\n        return last;\n      }, _qz.tools.promise(function(r) { r(); })); //an immediately resolved promise to start off the chain\n\n      //return last promise so users can chain off final action or catch when stopping on error\n      return last;\n    },\n\n\n    /**\n     * Calls related to interaction with serial ports.\n     * @namespace qz.serial\n     */\n    serial: {\n      /**\n       * @returns {Promise<Array<string>|Error>} Communication (RS232, COM, TTY) ports available on connected system.\n       *\n       * @memberof qz.serial\n       */\n      findPorts: function() {\n        return _qz.websocket.dataPromise('serial.findPorts');\n      },\n\n      /**\n       * List of functions called for any response from open serial ports.\n       * Event data will contain <code>{string} portName</code> for all types.\n       *  For RECEIVE types, <code>{string} output</code>.\n       *  For ERROR types, <code>{string} exception</code>.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({object} streamEvent)</code> calls.\n       *\n       * @memberof qz.serial\n       */\n      setSerialCallbacks: function(calls) {\n        _qz.serial.serialCallbacks = calls;\n      },\n\n      /**\n       * Opens a serial port for sending and receiving data\n       *\n       * @param {string} port Name of serial port to open.\n       * @param {Object} [options] Serial port configurations.\n       *  @param {number} [options.baudRate=9600] Serial port speed. Set to 0 for auto negotiation.\n       *  @param {number} [options.dataBits=8] Serial port data bits. Set to 0 for auto negotiation.\n       *  @param {number} [options.stopBits=1] Serial port stop bits. Set to 0 for auto negotiation.\n       *  @param {string} [options.parity='NONE'] Serial port parity. Set to AUTO for auto negotiation. Valid values <code>[NONE | EVEN | ODD | MARK | SPACE | AUTO]</code>\n       *  @param {string} [options.flowControl='NONE'] Serial port flow control. Set to AUTO for auto negotiation. Valid values <code>[NONE | XONXOFF | XONXOFF_OUT | XONXOFF_IN | RTSCTS | RTSCTS_OUT | RTSCTS_IN | AUTO]</code>\n       *  @param {string} [options.encoding='UTF-8'] Character set for communications.\n       *  @param {string} [options.start=0x0002] DEPRECATED: Legacy character denoting start of serial response. Use <code>options.rx.start</code> instead.\n       *  @param {string} [options.end=0x000D] DEPRECATED: Legacy character denoting end of serial response. Use <code>options.rx.end</code> instead.\n       *  @param {number} [options.width] DEPRECATED: Legacy use for fixed-width response serial communication. Use <code>options.rx.width</code> instead.\n       *  @param {Object} [options.rx] Serial communications response definitions. If an object is passed but no options are defined, all response data will be sent back as it is received unprocessed.\n       *   @param {string|Array<string>} [options.rx.start] Character(s) denoting start of response bytes. Used in conjunction with `end`, `width`, or `lengthbit` property.\n       *   @param {string} [options.rx.end] Character denoting end of response bytes. Used in conjunction with `start` property.\n       *   @param {number} [options.rx.width] Fixed width size of response bytes (not including header if `start` is set). Used alone or in conjunction with `start` property.\n       *   @param {boolean} [options.rx.untilNewline] Returns data between newline characters (`\\n` or `\\r`) Truncates empty responses.  Overrides `start`, `end`, `width`.\n       *   @param {number|Object} [options.rx.lengthBytes] If a number is passed it is treated as the length index. Other values are left as their defaults.\n       *    @param {number} [options.rx.lengthBytes.index=0] Position of the response byte (not including response `start` bytes) used to denote the length of the remaining response data.\n       *    @param {number} [options.rx.lengthBytes.length=1] Length of response length bytes after response header.\n       *    @param {string} [options.rx.lengthBytes.endian='BIG'] Byte endian for multi-byte length values. Valid values <code>[BIG | LITTLE]</code>\n       *   @param {number|Object} [options.rx.crcBytes] If a number is passed it is treated as the crc length. Other values are left as their defaults.\n       *    @param {number} [options.rx.crcBytes.index=0] Position after the response data (not including length or data bytes) used to denote the crc.\n       *    @param {number} [options.rx.crcBytes.length=1] Length of response crc bytes after the response data length.\n       *   @param {boolean} [options.rx.includeHeader=false] Whether any of the header bytes (`start` bytes and any length bytes) should be included in the processed response.\n       *   @param {string} [options.rx.encoding] Override the encoding used for response data. Uses the same value as <code>options.encoding</code> otherwise.\n       *\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.serial\n       */\n      openPort: function(port, options) {\n        var params = {\n          port: port,\n          options: options\n        };\n        return _qz.websocket.dataPromise('serial.openPort', params);\n      },\n\n      /**\n       * Send commands over a serial port.\n       * Any responses from the device will be sent to serial callback functions.\n       *\n       * @param {string} port An open serial port to send data.\n       * @param {string|Array<string>|Object} data Data to be sent to the serial device.\n       *  @param {string} [data.type='PLAIN'] Valid values <code>[FILE | PLAIN | HEX | BASE64]</code>\n       *  @param {string|Array<string>} data.data Data to be sent to the serial device.\n       * @param {Object} options Serial port configuration updates. See <code>qz.serial.openPort</code> `options` docs for available values.\n       *     For best performance, it is recommended to only set these values on the port open call.\n       *\n       * @returns {Promise<null|Error>}\n       *\n       * @see qz.serial.setSerialCallbacks\n       *\n       * @memberof qz.serial\n       */\n      sendData: function(port, data, options) {\n        if (_qz.tools.versionCompare(2, 1, 0, 12) >= 0) {\n          if (typeof data !== 'object') {\n            data = {\n              data: data,\n              type: \"PLAIN\"\n            }\n          }\n\n          if (data.type && data.type.toUpperCase() == \"FILE\") {\n            data.data = _qz.tools.absolute(data.data);\n          }\n        }\n\n        var params = {\n          port: port,\n          data: data,\n          options: options\n        };\n        return _qz.websocket.dataPromise('serial.sendData', params);\n      },\n\n      /**\n       * @param {string} port Name of port to close.\n       *\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.serial\n       */\n      closePort: function(port) {\n        return _qz.websocket.dataPromise('serial.closePort', { port: port });\n      }\n    },\n\n    /**\n     * Calls related to interaction with communication sockets.\n     * @namespace qz.socket\n     */\n    socket: {\n      /**\n       * Opens a network port for sending and receiving data.\n       *\n       * @param {string} host The connection hostname.\n       * @param {number} port The connection port number.\n       * @param {Object} [options] Network socket configuration.\n       *  @param {string} [options.encoding='UTF-8'] Character set for communications.\n       *\n       * @memberof qz.socket\n       */\n      open: function(host, port, options) {\n        var params = {\n          host: host,\n          port: port,\n          options: options\n        };\n        return _qz.websocket.dataPromise(\"socket.open\", params);\n      },\n\n      /**\n       * @param {string} host The connection hostname.\n       * @param {number} port The connection port number.\n       *\n       * @memberof qz.socket\n       */\n      close: function(host, port) {\n        var params = {\n          host: host,\n          port: port\n        };\n        return _qz.websocket.dataPromise(\"socket.close\", params);\n      },\n\n      /**\n       * Send data over an open socket.\n       *\n       * @param {string} host The connection hostname.\n       * @param {number} port The connection port number.\n       * @param {string|Object} data Data to be sent over the port.\n       *  @param {string} [data.type='PLAIN'] Valid values <code>[PLAIN]</code>\n       *  @param {string} data.data Data to be sent over the port.\n       *\n       * @memberof qz.socket\n       */\n      sendData: function(host, port, data) {\n        if (typeof data !== 'object') {\n          data = {\n            data: data,\n            type: \"PLAIN\"\n          };\n        }\n\n        var params = {\n          host: host,\n          port: port,\n          data: data\n        };\n        return _qz.websocket.dataPromise(\"socket.sendData\", params);\n      },\n\n      /**\n       * List of functions called for any response from open network sockets.\n       * Event data will contain <code>{string} host</code> and <code>{number} port</code> for all types.\n       *  For RECEIVE types, <code>{string} response</code>.\n       *  For ERROR types, <code>{string} exception</code>.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Object} eventData)</code> calls.\n       *\n       * @memberof qz.socket\n       */\n      setSocketCallbacks: function(calls) {\n        _qz.socket.socketCallbacks = calls;\n      }\n    },\n\n    /**\n     * Calls related to interaction with USB devices.\n     * @namespace qz.usb\n     */\n    usb: {\n      /**\n       * List of available USB devices. Includes (hexadecimal) vendor ID, (hexadecimal) product ID, and hub status.\n       * If supported, also returns manufacturer and product descriptions.\n       *\n       * @param includeHubs Whether to include USB hubs.\n       * @returns {Promise<Array<Object>|Error>} Array of JSON objects containing information on connected USB devices.\n       *\n       * @memberof qz.usb\n       */\n      listDevices: function(includeHubs) {\n        return _qz.websocket.dataPromise('usb.listDevices', { includeHubs: includeHubs });\n      },\n\n      /**\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       * @returns {Promise<Array<string>|Error>} List of available (hexadecimal) interfaces on a USB device.\n       *\n       * @memberof qz.usb\n       */\n      listInterfaces: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('usb.listInterfaces', deviceInfo);\n      },\n\n      /**\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       *  @param deviceInfo.iface Hex string of interface on the USB device to search.\n       * @returns {Promise<Array<string>|Error>} List of available (hexadecimal) endpoints on a USB device's interface.\n       *\n       * @memberof qz.usb\n       */\n      listEndpoints: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            interface: arguments[2]\n          };\n        }\n\n        return _qz.websocket.dataPromise('usb.listEndpoints', deviceInfo);\n      },\n\n      /**\n       * List of functions called for any response from open usb devices.\n       * Event data will contain <code>{string} vendorId</code> and <code>{string} productId</code> for all types.\n       *  For RECEIVE types, <code>{Array} output</code> (in hexadecimal format).\n       *  For ERROR types, <code>{string} exception</code>.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Object} eventData)</code> calls.\n       *\n       * @memberof qz.usb\n       */\n      setUsbCallbacks: function(calls) {\n        _qz.usb.usbCallbacks = calls;\n      },\n\n      /**\n       * Claim a USB device's interface to enable sending/reading data across an endpoint.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       *  @param deviceInfo.interface Hex string of interface on the USB device to claim.\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.usb\n       */\n      claimDevice: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            interface: arguments[2]\n          };\n        }\n\n        return _qz.websocket.dataPromise('usb.claimDevice', deviceInfo);\n      },\n\n      /**\n       * Check the current claim state of a USB device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       * @returns {Promise<boolean|Error>}\n       *\n       * @since 2.0.2\n       * @memberOf qz.usb\n       */\n      isClaimed: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('usb.isClaimed', deviceInfo);\n      },\n\n      /**\n       * Send data to a claimed USB device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       *  @param deviceInfo.endpoint Hex string of endpoint on the claimed interface for the USB device.\n       *  @param deviceInfo.data Bytes to send over specified endpoint.\n       *  @param {string} [deviceInfo.type='PLAIN'] Valid values <code>[FILE | PLAIN | HEX | BASE64]</code>\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.usb\n       */\n      sendData: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            endpoint: arguments[2],\n            data: arguments[3]\n          };\n        }\n\n        if (_qz.tools.versionCompare(2, 1, 0, 12) >= 0) {\n          if (typeof deviceInfo.data !== 'object') {\n            deviceInfo.data = {\n              data: deviceInfo.data,\n              type: \"PLAIN\"\n            }\n          }\n\n          if (deviceInfo.data.type && deviceInfo.data.type.toUpperCase() == \"FILE\") {\n            deviceInfo.data.data = _qz.tools.absolute(deviceInfo.data.data);\n          }\n        }\n\n        return _qz.websocket.dataPromise('usb.sendData', deviceInfo);\n      },\n\n      /**\n       * Read data from a claimed USB device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       *  @param deviceInfo.endpoint Hex string of endpoint on the claimed interface for the USB device.\n       *  @param deviceInfo.responseSize Size of the byte array to receive a response in.\n       * @returns {Promise<Array<string>|Error>} List of (hexadecimal) bytes received from the USB device.\n       *\n       * @memberof qz.usb\n       */\n      readData: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            endpoint: arguments[2],\n            responseSize: arguments[3]\n          };\n        }\n\n        return _qz.websocket.dataPromise('usb.readData', deviceInfo);\n      },\n\n      /**\n       * Provides a continuous stream of read data from a claimed USB device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       *  @param deviceInfo.endpoint Hex string of endpoint on the claimed interface for the USB device.\n       *  @param deviceInfo.responseSize Size of the byte array to receive a response in.\n       *  @param deviceInfo.interval=100 Frequency to send read data back, in milliseconds.\n       * @returns {Promise<null|Error>}\n       *\n       * @see qz.usb.setUsbCallbacks\n       *\n       * @memberof qz.usb\n       */\n      openStream: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            endpoint: arguments[2],\n            responseSize: arguments[3],\n            interval: arguments[4]\n          };\n        }\n\n        return _qz.websocket.dataPromise('usb.openStream', deviceInfo);\n      },\n\n      /**\n       * Stops the stream of read data from a claimed USB device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       *  @param deviceInfo.endpoint Hex string of endpoint on the claimed interface for the USB device.\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.usb\n       */\n      closeStream: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            endpoint: arguments[2]\n          };\n        }\n\n        return _qz.websocket.dataPromise('usb.closeStream', deviceInfo);\n      },\n\n      /**\n       * Release a claimed USB device to free resources after sending/reading data.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of USB device's vendor ID.\n       *  @param deviceInfo.productId Hex string of USB device's product ID.\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.usb\n       */\n      releaseDevice: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('usb.releaseDevice', deviceInfo);\n      }\n    },\n\n\n    /**\n     * Calls related to interaction with HID USB devices<br/>\n     * Many of these calls can be accomplished from the <code>qz.usb</code> namespace,\n     * but HID allows for simpler interaction\n     * @namespace qz.hid\n     * @since 2.0.1\n     */\n    hid: {\n      /**\n       * List of available HID devices. Includes (hexadecimal) vendor ID and (hexadecimal) product ID.\n       * If available, also returns manufacturer and product descriptions.\n       *\n       * @returns {Promise<Array<Object>|Error>} Array of JSON objects containing information on connected HID devices.\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      listDevices: function() {\n        return _qz.websocket.dataPromise('hid.listDevices');\n      },\n\n      /**\n       * Start listening for HID device actions, such as attach / detach events.\n       * Reported under the ACTION type in the streamEvent on callbacks.\n       *\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @see qz.hid.setHidCallbacks\n       *\n       * @memberof qz.hid\n       */\n      startListening: function() {\n        return _qz.websocket.dataPromise('hid.startListening');\n      },\n\n      /**\n       * Stop listening for HID device actions.\n       *\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @see qz.hid.setHidCallbacks\n       *\n       * @memberof qz.hid\n       */\n      stopListening: function() {\n        return _qz.websocket.dataPromise('hid.stopListening');\n      },\n\n      /**\n       * List of functions called for any response from open usb devices.\n       * Event data will contain <code>{string} vendorId</code> and <code>{string} productId</code> for all types.\n       *  For RECEIVE types, <code>{Array} output</code> (in hexadecimal format).\n       *  For ERROR types, <code>{string} exception</code>.\n       *  For ACTION types, <code>{string} actionType</code>.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Object} eventData)</code> calls.\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      setHidCallbacks: function(calls) {\n        _qz.hid.hidCallbacks = calls;\n      },\n\n      /**\n       * Claim a HID device to enable sending/reading data across.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      claimDevice: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('hid.claimDevice', deviceInfo);\n      },\n\n      /**\n       * Check the current claim state of a HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       * @returns {Promise<boolean|Error>}\n       *\n       * @since 2.0.2\n       * @memberOf qz.hid\n       */\n      isClaimed: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('hid.isClaimed', deviceInfo);\n      },\n\n      /**\n       * Send data to a claimed HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       *  @param deviceInfo.data Bytes to send over specified endpoint.\n       *  @param deviceInfo.endpoint=0x00 First byte of the data packet signifying the HID report ID.\n       *                             Must be 0x00 for devices only supporting a single report.\n       *  @param deviceInfo.reportId=0x00 Alias for <code>deviceInfo.endpoint</code>. Not used if endpoint is provided.\n       *  @param {string} [deviceInfo.type='PLAIN'] Valid values <code>[FILE | PLAIN | HEX | BASE64]</code>\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      sendData: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            data: arguments[2],\n            endpoint: arguments[3]\n          };\n        }\n\n        if (_qz.tools.versionCompare(2, 1, 0, 12) >= 0) {\n          if (typeof deviceInfo.data !== 'object') {\n            deviceInfo.data = {\n              data: deviceInfo.data,\n              type: \"PLAIN\"\n            }\n          }\n\n          if (deviceInfo.data.type && deviceInfo.data.type.toUpperCase() == \"FILE\") {\n            deviceInfo.data.data = _qz.tools.absolute(deviceInfo.data.data);\n          }\n        } else {\n          if (typeof deviceInfo.data === 'object') {\n            if (deviceInfo.data.type.toUpperCase() !== \"PLAIN\"\n              || typeof deviceInfo.data.data !== \"string\") {\n              return _qz.tools.reject(new Error(\"Data format is not supported with connected QZ Tray version \" + _qz.websocket.connection.version));\n            }\n\n            deviceInfo.data = deviceInfo.data.data;\n          }\n        }\n\n        return _qz.websocket.dataPromise('hid.sendData', deviceInfo);\n      },\n\n      /**\n       * Read data from a claimed HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       *  @param deviceInfo.responseSize Size of the byte array to receive a response in.\n       * @returns {Promise<Array<string>|Error>} List of (hexadecimal) bytes received from the HID device.\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      readData: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            responseSize: arguments[2]\n          };\n        }\n\n        return _qz.websocket.dataPromise('hid.readData', deviceInfo);\n      },\n\n      /**\n       * Send a feature report to a claimed HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       *  @param deviceInfo.data Bytes to send over specified endpoint.\n       *  @param deviceInfo.endpoint=0x00 First byte of the data packet signifying the HID report ID.\n       *                             Must be 0x00 for devices only supporting a single report.\n       *  @param deviceInfo.reportId=0x00 Alias for <code>deviceInfo.endpoint</code>. Not used if endpoint is provided.\n       *  @param {string} [deviceInfo.type='PLAIN'] Valid values <code>[FILE | PLAIN | HEX | BASE64]</code>\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.hid\n       */\n      sendFeatureReport: function(deviceInfo) {\n        return _qz.websocket.dataPromise('hid.sendFeatureReport', deviceInfo);\n      },\n\n      /**\n       * Get a feature report from a claimed HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       *  @param deviceInfo.responseSize Size of the byte array to receive a response in.\n       * @returns {Promise<Array<string>|Error>} List of (hexadecimal) bytes received from the HID device.\n       *\n       * @memberof qz.hid\n       */\n      getFeatureReport: function(deviceInfo) {\n        return _qz.websocket.dataPromise('hid.getFeatureReport', deviceInfo);\n      },\n\n      /**\n       * Provides a continuous stream of read data from a claimed HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       *  @param deviceInfo.responseSize Size of the byte array to receive a response in.\n       *  @param deviceInfo.interval=100 Frequency to send read data back, in milliseconds.\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @see qz.hid.setHidCallbacks\n       *\n       * @memberof qz.hid\n       */\n      openStream: function(deviceInfo) {\n        //backwards compatibility\n        if (typeof deviceInfo !== 'object') {\n          deviceInfo = {\n            vendorId: arguments[0],\n            productId: arguments[1],\n            responseSize: arguments[2],\n            interval: arguments[3]\n          };\n        }\n\n        return _qz.websocket.dataPromise('hid.openStream', deviceInfo);\n      },\n\n      /**\n       * Stops the stream of read data from a claimed HID device.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      closeStream: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('hid.closeStream', deviceInfo);\n      },\n\n      /**\n       * Release a claimed HID device to free resources after sending/reading data.\n       *\n       * @param {object} deviceInfo Config details of the HID device.\n       *  @param deviceInfo.vendorId Hex string of HID device's vendor ID.\n       *  @param deviceInfo.productId Hex string of HID device's product ID.\n       *  @param deviceInfo.usagePage Hex string of HID device's usage page when multiple are present.\n       *  @param deviceInfo.serial Serial ID of HID device.\n       * @returns {Promise<null|Error>}\n       * @since 2.0.1\n       *\n       * @memberof qz.hid\n       */\n      releaseDevice: function(deviceInfo) {\n        if (typeof deviceInfo !== 'object') { deviceInfo = { vendorId: arguments[0], productId: arguments[1] }; } //backwards compatibility\n\n        return _qz.websocket.dataPromise('hid.releaseDevice', deviceInfo);\n      }\n    },\n\n\n    /**\n     * Calls related to interactions with the filesystem\n     * @namespace qz.file\n     * @since 2.1\n     */\n    file: {\n      /**\n       * List of files available at the given directory.<br/>\n       * Due to security reasons, paths are limited to the qz data directory unless overridden via properties file.\n       *\n       * @param {string} path Relative or absolute directory path. Must reside in qz data directory or a white-listed location.\n       * @param {Object} [params] Object containing file access parameters\n       *  @param {boolean} [params.sandbox=true] If relative location from root is only available to the certificate's connection, otherwise all connections\n       *  @param {boolean} [params.shared=true] If relative location from root is accessible to all users on the system, otherwise just the current user\n       * @returns {Promise<Array<String>|Error>} Array of files at the given path\n       *\n       * @memberof qz.file\n       */\n      list: function(path, params) {\n        var param = _qz.tools.extend({ path: path }, params);\n        return _qz.websocket.dataPromise('file.list', param);\n      },\n\n      /**\n       * Reads contents of file at the given path.<br/>\n       * Due to security reasons, paths are limited to the qz data directory unless overridden via properties file.\n       *\n       * @param {string} path Relative or absolute file path. Must reside in qz data directory or a white-listed location.\n       * @param {Object} [params] Object containing file access parameters\n       *  @param {boolean} [params.sandbox=true] If relative location from root is only available to the certificate's connection, otherwise all connections\n       *  @param {boolean} [params.shared=true] If relative location from root is accessible to all users on the system, otherwise just the current user\n       *  @param {string} [params.flavor='plain'] Flavor of data format used, valid flavors are <code>[base64 | hex | plain]</code>.\n       * @returns {Promise<String|Error>} String containing the file contents\n       *\n       * @memberof qz.file\n       */\n      read: function(path, params) {\n        var param = _qz.tools.extend({ path: path }, params);\n        return _qz.websocket.dataPromise('file.read', param);\n      },\n\n      /**\n       * Writes data to the file at the given path.<br/>\n       * Due to security reasons, paths are limited to the qz data directory unless overridden via properties file.\n       *\n       * @param {string} path Relative or absolute file path. Must reside in qz data directory or a white-listed location.\n       * @param {Object} params Object containing file access parameters\n       *  @param {string} params.data File data to be written\n       *  @param {boolean} [params.sandbox=true] If relative location from root is only available to the certificate's connection, otherwise all connections\n       *  @param {boolean} [params.shared=true] If relative location from root is accessible to all users on the system, otherwise just the current user\n       *  @param {boolean} [params.append=false] Appends to the end of the file if set, otherwise overwrites existing contents\n       *  @param {string} [params.flavor='plain'] Flavor of data format used, valid flavors are <code>[base64 | file | hex | plain]</code>.\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.file\n       */\n      write: function(path, params) {\n        var param = _qz.tools.extend({ path: path }, params);\n        return _qz.websocket.dataPromise('file.write', param);\n      },\n\n      /**\n       * Deletes a file at given path.<br/>\n       * Due to security reasons, paths are limited to the qz data directory unless overridden via properties file.\n       *\n       * @param {string} path Relative or absolute file path. Must reside in qz data directory or a white-listed location.\n       * @param {Object} [params] Object containing file access parameters\n       *  @param {boolean} [params.sandbox=true] If relative location from root is only available to the certificate's connection, otherwise all connections\n       *  @param {boolean} [params.shared=true] If relative location from root is accessible to all users on the system, otherwise just the current user\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.file\n       */\n      remove: function(path, params) {\n        var param = _qz.tools.extend({ path: path }, params);\n        return _qz.websocket.dataPromise('file.remove', param);\n      },\n\n      /**\n       * Provides a continuous stream of events (and optionally data) from a local file.\n       *\n       * @param {string} path Relative or absolute directory path. Must reside in qz data directory or a white-listed location.\n       * @param {Object} [params] Object containing file access parameters\n       *  @param {boolean} [params.sandbox=true] If relative location from root is only available to the certificate's connection, otherwise all connections\n       *  @param {boolean} [params.shared=true] If relative location from root is accessible to all users on the system, otherwise just the current user\n       *  @param {Object} [params.listener] If defined, file data will be returned on events\n       *   @param {number} [params.listener.bytes=-1] Number of bytes to return or -1 for all\n       *   @param {number} [params.listener.lines=-1] Number of lines to return or -1 for all\n       *   @param {boolean} [params.listener.reverse] Controls whether data should be returned from the bottom of the file.  Default value is true for line mode and false for byte mode.\n       *   @param {string|Array<string>} [params.include] File patterns to match.  Blank values will be ignored.\n       *   @param {string|Array<string>} [params.exclude] File patterns to exclude.  Blank values will be ignored.  Takes priority over <code>params.include</code>.\n       *   @param {boolean} [params.ignoreCase=true] Whether <code>params.include</code> or <code>params.exclude</code> are case-sensitive.\n       * @returns {Promise<null|Error>}\n       * @since 2.1.0\n       *\n       * @see qz.file.setFileCallbacks\n       *\n       * @memberof qz.file\n       */\n      startListening: function(path, params) {\n        if (params && typeof params.include !== 'undefined' && !Array.isArray(params.include)) {\n          params.include = [params.include];\n        }\n        if (params && typeof params.exclude !== 'undefined' && !Array.isArray(params.exclude)) {\n          params.exclude = [params.exclude];\n        }\n        var param = _qz.tools.extend({ path: path }, params);\n        return _qz.websocket.dataPromise('file.startListening', param);\n      },\n\n      /**\n       * Closes listeners with the provided settings. Omitting the path parameter will result in all listeners closing.\n       *\n       * @param {string} [path] Previously opened directory path of listener to close, or omit to close all.\n       * @param {Object} [params] Object containing file access parameters\n       *  @param {boolean} [params.sandbox=true] If relative location from root is only available to the certificate's connection, otherwise all connections\n       *  @param {boolean} [params.shared=true] If relative location from root is accessible to all users on the system, otherwise just the current user\n       * @returns {Promise<null|Error>}\n       *\n       * @memberof qz.file\n       */\n      stopListening: function(path, params) {\n        var param = _qz.tools.extend({ path: path }, params);\n        return _qz.websocket.dataPromise('file.stopListening', param);\n      },\n\n      /**\n       * List of functions called for any response from a file listener.\n       *  For ERROR types event data will contain, <code>{string} message</code>.\n       *  For ACTION types event data will contain, <code>{string} file {string} eventType {string} [data]</code>.\n       *\n       * @param {Function|Array<Function>} calls Single or array of <code>Function({Object} eventData)</code> calls.\n       * @since 2.1.0\n       *\n       * @memberof qz.file\n       */\n      setFileCallbacks: function(calls) {\n        _qz.file.fileCallbacks = calls;\n      }\n    },\n\n    /**\n     * Calls related to networking information\n     * @namespace qz.networking\n     * @since 2.1.0\n     */\n    networking: {\n      /**\n       * @param {string} [hostname] Hostname to try to connect to when determining network interfaces, defaults to \"google.com\"\n       * @param {number} [port] Port to use with custom hostname, defaults to 443\n       * @returns {Promise<Object|Error>} Connected system's network information.\n       *\n       * @memberof qz.networking\n       * @since 2.1.0\n       */\n      device: function(hostname, port) {\n        // Wrap 2.0\n        if (_qz.tools.isVersion(2, 0)) {\n          return _qz.compatible.networking(hostname, port, null, null, function(data) {\n            return { ip: data.ipAddress, mac: data.macAddress };\n          });\n        }\n        // Use 2.1\n        return _qz.websocket.dataPromise('networking.device', {\n          hostname: hostname,\n          port: port\n        });\n      },\n\n      /**\n       * Get computer hostname\n       *\n       * @param {string} [hostname] DEPRECATED Hostname to try to connect to when determining network interfaces, defaults to \"google.com\"\n       * @param {number} [port] DEPRECATED Port to use with custom hostname, defaults to 443\n       * @returns {Promise<string|Error>} Connected system's hostname.\n       *\n       * @memberof qz.networking\n       * @since 2.2.2\n       */\n      hostname: function(hostname, port) {\n        // Wrap < 2.2.2\n        if (_qz.tools.versionCompare(2, 2, 2) < 0) {\n          return _qz.tools.promise(function(resolve, reject) {\n            _qz.websocket.dataPromise('networking.device', { hostname: hostname, port: port }).then(function(device) {\n              console.log(device);\n              resolve(device.hostname);\n            });\n          });\n        } else {\n          return _qz.websocket.dataPromise('networking.hostname');\n        }\n      },\n\n      /**\n       * @param {string} [hostname] Hostname to try to connect to when determining network interfaces, defaults to \"google.com\"\n       * @param {number} [port] Port to use with custom hostname, defaults to 443\n       * @returns {Promise<Array<Object>|Error>} Connected system's network information.\n       *\n       * @memberof qz.networking\n       * @since 2.1.0\n       */\n      devices: function(hostname, port) {\n        // Wrap 2.0\n        if (_qz.tools.isVersion(2, 0)) {\n          return _qz.compatible.networking(hostname, port, null, null, function(data) {\n            return [{ ip: data.ipAddress, mac: data.macAddress }];\n          });\n        }\n        // Use 2.1\n        return _qz.websocket.dataPromise('networking.devices', {\n          hostname: hostname,\n          port: port\n        });\n      }\n    },\n\n\n    /**\n     * Calls related to signing connection requests.\n     * @namespace qz.security\n     */\n    security: {\n      /**\n       * Set promise resolver for calls to acquire the site's certificate.\n       *\n       * @param {Function|AsyncFunction|Promise<string>} promiseHandler Either a function that will be used as a promise resolver (of format <code>Function({function} resolve, {function}reject)</code>),\n       *     an async function, or a promise. Any of which should return the public certificate via their respective <code>resolve</code> call.\n       *\n       * @memberof qz.security\n       */\n      setCertificatePromise: function(promiseHandler) {\n        _qz.security.certHandler = promiseHandler;\n      },\n\n      /**\n       * Set promise factory for calls to sign API calls.\n       *\n       * @param {Function|AsyncFunction} promiseFactory Either a function that accepts a string parameter of the data to be signed\n       *     and returns a function to be used as a promise resolver (of format <code>Function({function} resolve, {function}reject)</code>),\n       *     or an async function that can take a string parameter of the data to be signed. Either of which should return the signed contents of\n       *     the passed string parameter via their respective <code>resolve</code> call.\n       *\n       * @example\n       *  qz.security.setSignaturePromise(function(dataToSign) {\n       *    return function(resolve, reject) {\n       *      $.ajax(\"/signing-url?data=\" + dataToSign).then(resolve, reject);\n       *    }\n       *  })\n       *\n       * @memberof qz.security\n       */\n      setSignaturePromise: function(promiseFactory) {\n        _qz.security.signatureFactory = promiseFactory;\n      },\n\n      /**\n       * Set which signing algorithm QZ will check signatures against.\n       *\n       * @param {string} algorithm The algorithm used in signing. Valid values: <code>[SHA1 | SHA256 | SHA512]</code>\n       * @since 2.1.0\n       *\n       * @memberof qz.security\n       */\n      setSignatureAlgorithm: function(algorithm) {\n        //warn for incompatibilities if known\n        if (!_qz.compatible.algorithm()) {\n          return;\n        }\n\n        if ([\"SHA1\", \"SHA256\", \"SHA512\"].indexOf(algorithm.toUpperCase()) < 0) {\n          _qz.log.error(\"Signing algorithm '\" + algorithm + \"' is not supported.\");\n        } else {\n          _qz.security.signAlgorithm = algorithm;\n        }\n      },\n\n      /**\n       * Get the signing algorithm QZ will be checking signatures against.\n       *\n       * @returns {string} The algorithm used in signing.\n       * @since 2.1.0\n       *\n       * @memberof qz.security\n       */\n      getSignatureAlgorithm: function() {\n        return _qz.security.signAlgorithm;\n      }\n    },\n\n    /**\n     * Calls related to compatibility adjustments\n     * @namespace qz.api\n     */\n    api: {\n      /**\n       * Show or hide QZ api debugging statements in the browser console.\n       *\n       * @param {boolean} show Whether the debugging logs for QZ should be shown. Hidden by default.\n       * @returns {boolean} Value of debugging flag\n       * @memberof qz.api\n       */\n      showDebug: function(show) {\n        return (_qz.DEBUG = show);\n      },\n\n      /**\n       * Get version of connected QZ Tray application.\n       *\n       * @returns {Promise<string|Error>} Version number of QZ Tray.\n       *\n       * @memberof qz.api\n       */\n      getVersion: function() {\n        return _qz.websocket.dataPromise('getVersion');\n      },\n\n      /**\n       * Checks for the specified version of connected QZ Tray application.\n       *\n       * @param {string|number} [major] Major version to check\n       * @param {string|number} [minor] Minor version to check\n       * @param {string|number} [patch] Patch version to check\n       *\n       * @memberof qz.api\n       */\n      isVersion: _qz.tools.isVersion,\n\n      /**\n       * Checks if the connected QZ Tray application is greater than the specified version.\n       *\n       * @param {string|number} major Major version to check\n       * @param {string|number} [minor] Minor version to check\n       * @param {string|number} [patch] Patch version to check\n       * @param {string|number} [build] Build version to check\n       * @returns {boolean} True if connected version is greater than the version specified.\n       *\n       * @memberof qz.api\n       * @since 2.1.0-4\n       */\n      isVersionGreater: function(major, minor, patch, build) {\n        return _qz.tools.versionCompare(major, minor, patch, build) > 0;\n      },\n\n      /**\n       * Checks if the connected QZ Tray application is less than the specified version.\n       *\n       * @param {string|number} major Major version to check\n       * @param {string|number} [minor] Minor version to check\n       * @param {string|number} [patch] Patch version to check\n       * @param {string|number} [build] Build version to check\n       * @returns {boolean} True if connected version is less than the version specified.\n       *\n       * @memberof qz.api\n       * @since 2.1.0-4\n       */\n      isVersionLess: function(major, minor, patch, build) {\n        return _qz.tools.versionCompare(major, minor, patch, build) < 0;\n      },\n\n      /**\n       * Change the promise library used by QZ API.\n       * Should be called before any initialization to avoid possible errors.\n       *\n       * @param {Function} promiser <code>Function({function} resolver)</code> called to create new promises.\n       *\n       * @memberof qz.api\n       */\n      setPromiseType: function(promiser) {\n        _qz.tools.promise = promiser;\n      },\n\n      /**\n       * Change the SHA-256 hashing function used by QZ API.\n       * Should be called before any initialization to avoid possible errors.\n       *\n       * @param {Function} hasher <code>Function({function} message)</code> called to create hash of passed string.\n       *\n       * @memberof qz.api\n       */\n      setSha256Type: function(hasher) {\n        _qz.tools.hash = hasher;\n      },\n\n      /**\n       * Change the WebSocket handler.\n       * Should be called before any initialization to avoid possible errors.\n       *\n       * @param {Function} ws <code>Function({function} WebSocket)</code> called to override the internal WebSocket handler.\n       *\n       * @memberof qz.api\n       */\n      setWebSocketType: function(ws) {\n        _qz.tools.ws = ws;\n      }\n    },\n\n    /**\n     * Version of this JavaScript library\n     *\n     * @constant {string}\n     *\n     * @memberof qz\n     */\n    version: _qz.VERSION\n  };\n\n  return qz;\n})();\n\n\n(function() {\n  if (typeof define === 'function' && define.amd) {\n    define(qz);\n  } else if (typeof exports === 'object') {\n    module.exports = qz;\n  } else {\n    window.qz = qz;\n  }\n})();\n\n/*! Epson ePOS SDK Version 2.24.0 Copyright(C) Seiko Epson Corporation 2016 - 2023 All rights reserved. */\n(function(window,undefined){function callbackInfo(){this.callbackInfoList=new Object()}callbackInfo.prototype={addCallback:function(callback,sq){this.callbackInfoList[sq]=callback},removeCallback:function(sq){for(var i in this.callbackInfoList){if(i==sq){delete this.callbackInfoList[i];return}}},getCallback:function(sq){if(this.callbackInfoList[sq]!=null){return this.callbackInfoList[sq]}return null}};function CommBox(boxID,commBoxManager,callbackInfo){this.ERROR_OK=\"OK\";this.ERROR_NOT_OPENED=\"NOT_OPENED\";this.ERROR_MEMBER_NOT_FOUND=\"MEMBER_NOT_FOUND\";this.ERROR_SYSTEM_ERROR=\"SYSTEM_ERROR\";this.boxID=boxID;this.commBoxManager=commBoxManager;this.callbackInfo=callbackInfo;this.onreceive=null;this.connectionObj=this.commBoxManager.connectionObj}CommBox.prototype={getCommHistory:function(option,callback){var _option=(typeof(option)==\"function\")?null:option;var _callback=(typeof(option)==\"function\")?option:callback;var allHistory=((_option==null)||(_option.allHistory==null))?false:option.allHistory;var data={type:\"getcommhistory\",box_id:this.boxID,all_history:allHistory};var eposmsg=MessageFactory.getCommBoxDataMessage(data);if(!this.commBoxManager.isOpened(this.getBoxId())){if(_callback!=null){_callback(this.ERROR_NOT_OPENED,null,eposmsg.sequence)}return eposmsg.sequence}this.callbackInfo.addCallback(_callback,eposmsg.sequence);this.connectionObj.emit(eposmsg);return eposmsg.sequence},send:function(message,memberID,callback){var data={type:\"send\",box_id:this.boxID,message:message,member_id:memberID};var eposmsg=MessageFactory.getCommBoxDataMessage(data);if(!this.commBoxManager.isOpened(this.getBoxId())){if(callback!=null){callback(this.ERROR_NOT_OPENED,0,eposmsg.sequence)}return eposmsg.sequence}this.callbackInfo.addCallback(callback,eposmsg.sequence);this.connectionObj.emit(eposmsg);return eposmsg.sequence},client_getcommhistory:function(data,sq){var code=data.code;var historyList=data.history_list;var getCommHistoryCB=this.callbackInfo.getCallback(sq);this.callbackInfo.removeCallback(sq);if(getCommHistoryCB!=null){getCommHistoryCB(code,historyList,sq)}return},client_send:function(data,sq){var code=data.code;var count=data.count;var sendCB=this.callbackInfo.getCallback(sq);this.callbackInfo.removeCallback(sq);if(sendCB!=null){sendCB(code,count,sq)}return},client_onreceive:function(data,sq){var rcvData=new Object();rcvData.senderId=data.sender_id;rcvData.receiverId=data.receiver_id;rcvData.message=data.message;if(this.onreceive!=null){this.onreceive(rcvData)}return},getBoxId:function(){return this.boxID}};function CommBoxManager(){this.ERROR_OK=\"OK\";this.ERROR_BOX_COUNT_OVER=\"BOX_COUNT_OVER\";this.ERROR_BOX_CLIENT_OVER=\"BOX_CLIENT_OVER\";this.ERROR_MEMBERID_ALREADY_USED=\"MEMBERID_ALREADY_USED\";this.ERROR_ALREADY_OPENED=\"ALREADY_OPENED\";this.ERROR_NOT_OPENED=\"NOT_OPENED\";this.ERROR_PARAMETER_ERROR=\"PARAMETER_ERROR\";this.ERROR_SYSTEM_ERROR=\"SYSTEM_ERROR\";this.callbackInfo=new callbackInfo();this.commBoxList=new Array();this.connectionObj=null}CommBoxManager.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},openCommBox:function(boxID,option,callback){var memberID=\"\";if(option!=null&&option.memberID!=null){memberID=option.memberID}var data={box_id:boxID,member_id:memberID};var eposmsg=MessageFactory.getOpenCommBoxMessage(data);if(!this.connectionObj.isUsableDeviceIF()){callback(null,this.ERROR_SYSTEM_ERROR,eposmsg.sequence);return eposmsg.sequence}this.connectionObj.emit(eposmsg);this.callbackInfo.addCallback(callback,eposmsg.sequence);return eposmsg.sequence},closeCommBox:function(boxObj,callback){var data={box_id:boxID};var eposmsg=MessageFactory.getCloseCommBoxMessage(data);try{var boxID=boxObj.getBoxId();data.box_id=boxID;eposmsg=MessageFactory.getCloseCommBoxMessage(data);if(!this.isOpened(boxID)){if(callback!=null){callback(this.ERROR_NOT_OPENED,eposmsg.sequence)}return eposmsg.sequence}this.connectionObj.emit(eposmsg)}catch(e){if(callback!=null){callback(this.ERROR_PARAMETER_ERROR,eposmsg.sequence)}}this.callbackInfo.addCallback(callback,eposmsg.sequence);return eposmsg.sequence},client_opencommbox:function(data,sq){var boxID=data.box_id;var code=data.code;var commBoxObj=null;if(code==this.ERROR_OK&&this.getCommBox(boxID)==null){commBoxObj=new CommBox(boxID,this,this.callbackInfo)}if(commBoxObj!=null){this.commBoxList.push(commBoxObj)}var openCommBoxCB=this.callbackInfo.getCallback(sq);this.callbackInfo.removeCallback(sq);if(openCommBoxCB!=null){openCommBoxCB(commBoxObj,code,sq)}return},client_closecommbox:function(data,sq){var boxID=data.box_id;var code=data.code;this.removeCommBox(boxID);var closeCommBoxCB=this.callbackInfo.getCallback(sq);this.callbackInfo.removeCallback(sq);if(closeCommBoxCB!=null){closeCommBoxCB(code,sq)}return},executeCommDataCallback:function(data,sq){var boxID=data.box_id;var commBoxObj=this.getCommBox(boxID);var method=\"client_\"+data.type;try{eval(\"commBoxObj.\"+method+\"(data, sq)\")}catch(e){throw new Error(\"\")}return},getCommBox:function(boxID){var commBoxObj=null;for(var i=0;i<this.commBoxList.length;i++){if(this.commBoxList[i].getBoxId()==boxID){commBoxObj=this.commBoxList[i];break}}return commBoxObj},removeCommBox:function(boxID){var result=false;for(var i=0;i<this.commBoxList.length;i++){if(this.commBoxList[i].getBoxId()==boxID){this.commBoxList.splice(i,1);result=true;break}}return result},isOpened:function(boxID){var result=false;for(var i=0;i<this.commBoxList.length;i++){if(this.commBoxList[i].getBoxId()==boxID){result=true;break}}return result}};function DeviceObjectSelector(){this.type2objectMap={type_scanner:\"Scanner\",type_keyboard:\"Keyboard\",type_poskeyboard:\"POSKeyboard\",type_msr:\"MSR\",type_cat:\"CAT\",type_cash_changer:\"CashChanger\",type_printer:\"Printer\",type_display:\"Display\",type_simple_serial:\"SimpleSerial\",type_hybrid_printer:\"HybridPrinter\",type_hybrid_printer2:\"HybridPrinter2\",type_dt:\"DeviceTerminal\",type_other_peripheral:\"OtherPeripheral\",type_storage:\"GermanyFiscalElement\"};this.connectionObj=null}DeviceObjectSelector.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},isSelectable:function(deviceType){if(this.connectionObj.isUsableDeviceIF()){return true}else{if(deviceType==\"type_printer\"&&this.connectionObj.isUsablePrintIF()){return true}else{if(deviceType==\"type_display\"&&this.connectionObj.isUsableDisplayIF()){return true}}}return false},select:function(deviceId,deviceType,specificDevice,isCrypto,ePOSDeviceContext){var deviceObjectName=\"\";if(typeof(specificDevice)==\"string\"){deviceObjectName=specificDevice}else{deviceObjectName=this.type2objectMap[deviceType]}var templateObject=null;try{templateObject=eval(deviceObjectName)}catch(e){throw new Error(\"ERROR_PARAMETER\")}if(typeof(templateObject)!=\"function\"){throw new Error(\"ERROR_PARAMETER\")}if((deviceObjectName==\"Printer\")||(deviceObjectName==\"Display\")||(deviceObjectName==\"HybridPrinter\")||(deviceObjectName==\"HybridPrinter2\")){return new templateObject(deviceId,isCrypto,ePOSDeviceContext)}else{return new templateObject(deviceId,isCrypto)}}};function CashChanger(deviceID,isCrypto){this.CONFIG_LEFT_CASH=\"CONFIG_LEFT_CASH\";this.CONFIG_COUNT_MODE=\"CONFIG_COUNT_MODE\";this.MODE_MANUAL_INPUT=\"MODE_MANUAL_INPUT\";this.MODE_AUTOCOUNT=\"MODE_AUTO_COUNT\";this.DEPOSIT_CHANGE=\"DEPOSIT_CHANGE\";this.DEPOSIT_NOCHANGE=\"DEPOSIT_NOCHANGE\";this.DEPOSIT_REPAY=\"DEPOSIT_REPAY\";this.COLLECT_ALL_CASH=\"ALL_CASH\";this.COLLECT_PART_OF_CASH=\"PART_OF_CASH\";this.SUE_POWER_ONLINE=2001;this.SUE_POWER_OFF=2002;this.SUE_POWER_OFFLINE=2003;this.SUE_POWER_OFF_OFFLINE=2004;this.SUE_STATUS_EMPTY=11;this.SUE_STATUS_NEAREMPTY=12;this.SUE_STATUS_EMPTYOK=13;this.SUE_STATUS_FULL=21;this.SUE_STATUS_NEARFULL=22;this.SUE_STATUS_FULLOK=23;this.SUE_STATUS_JAM=31;this.SUE_STATUS_JAMOK=32;this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}CashChanger.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},client_oncashcounts:function(data){try{if(this.oncashcounts==null){return}this.oncashcounts(data)}catch(e){}return},client_onstatuschange:function(data){try{if(this.onstatuschange==null){return}this.onstatuschange(data)}catch(e){}return},client_ondeposit:function(data){try{if(this.ondeposit==null){return}this.ondeposit(data)}catch(e){}return},client_ondispense:function(data){try{if(this.ondispense==null){return}this.ondispense(data)}catch(e){}return},client_oncollect:function(data){try{if(this.oncollect==null){return}this.oncollect(data)}catch(e){}return},client_onconfigchange:function(data){try{if(this.onconfigchange==null){return}this.onconfigchange(data)}catch(e){}return},client_oncommandreply:function(data){try{if(this.oncommandreply==null){return}if(typeof data.command!=\"\"){}else{var hexData=data.data;hexData=hexData.replace(/[0-9a-fA-F]{2}/g,function(c){var hexNum=parseInt(c,16);return String.fromCharCode(hexNum)});data.data=hexData}this.oncommandreply(data)}catch(e){}return},client_ondirectio:function(data){try{if(this.ondirectio==null){return}this.ondirectio(data)}catch(e){}return},client_onstatusupdate:function(data){try{if(this.onstatusupdate==null){return}this.onstatusupdate(data)}catch(e){}return},readCashCounts:function(){var data={type:\"readcashcounts\"};return this.send(data)},beginDeposit:function(){var data={type:\"begindeposit\"};return this.send(data)},pauseDeposit:function(){var data={type:\"pausedeposit\"};return this.send(data)},restartDeposit:function(){var data={type:\"restartdeposit\"};return this.send(data)},endDeposit:function(cmd){var data={type:\"enddeposit\",cmd:cmd};return this.send(data)},dispenseCash:function(data){var data_;if(typeof data==\"object\"){data_=data;data_.type=\"dispensecash\"}else{data_={type:\"dispensecash\",cash:data}}return this.send(data_)},dispenseChange:function(cash){var data_;if(typeof cash==\"object\"){data_=cash;data_.type=\"dispensechange\"}else{data_={type:\"dispensechange\",cash:cash}}return this.send(data_)},openDrawer:function(){var data={type:\"opendrawer\"};return this.send(data)},collectCash:function(collectMode){var data={type:\"collectcash\",collectmode:collectMode};return this.send(data)},setConfig:function(config,value){var data=null;switch(config){case this.CONFIG_COUNT_MODE:data={type:\"setconfig\",config:config,mode:value.mode};break;case this.CONFIG_LEFT_CASH:if((value.bills==null)||(value.bills==\"\")){value.bills=\"0\"}if((value.coins==null)||(value.coins==\"\")){value.coins=\"0\"}data={type:\"setconfig\",config:config,bills:value.bills,coins:value.coins};break;default:break}var sq=-1;if(data!=null){sq=this.send(data)}return sq},sendCommand:function(command){var data;if(typeof command==\"object\"){data=command;data.type=\"sendcommand\"}else{data={type:\"sendcommand\",command:toHexBinary(command)}}return this.send(data)},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;return this.send(eventReq)},send:function(data){var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function CAT(deviceID,isCrypto){this.SUE_LOGSTATUS_OK=0;this.SUE_LOGSTATUS_NEARFULL=1;this.SUE_LOGSTATUS_FULL=2;this.SUE_POWER_ONLINE=2001;this.SUE_POWER_OFF_OFFLINE=2004;this.deviceID=deviceID;this.isCrypto=isCrypto;this.timeout=0;this.trainingMode=false;this.connectionObj=null}CAT.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},authorizeSales:function(data){var _data={service:data.service,total_amount:data.totalAmount,amount:data.amount,tax:data.tax,sequence:data.sequence,additional_security_information:data.additionalSecurityInformation};_data.type=\"authorizesales\";_data.training=this.trainingMode;_data.timeout=this.timeout;return this.send(_data)},authorizeVoid:function(data){var _data={service:data.service,total_amount:data.totalAmount,amount:data.amount,tax:data.tax,sequence:data.sequence,additional_security_information:data.additionalSecurityInformation};_data.type=\"authorizevoid\";_data.training=this.trainingMode;_data.timeout=this.timeout;return this.send(_data)},authorizeRefund:function(data){var _data={service:data.service,total_amount:data.totalAmount,amount:data.amount,tax:data.tax,sequence:data.sequence,additional_security_information:data.additionalSecurityInformation};_data.type=\"authorizerefund\";_data.training=this.trainingMode;_data.timeout=this.timeout;return this.send(_data)},authorizeCompletion:function(data){var _data={service:data.service,total_amount:data.totalAmount,amount:data.amount,tax:data.tax,sequence:data.sequence,additional_security_information:data.additionalSecurityInformation};_data.type=\"authorizecompletion\";_data.training=this.trainingMode;_data.timeout=this.timeout;return this.send(_data)},accessDailyLog:function(data){var _data={service:data.service,total_amount:data.totalAmount,sequence:data.sequence,dailylog_type:data.dailylogType,additional_security_information:data.additionalSecurityInformation};_data.type=\"accessdailylog\";_data.training=this.trainingMode;_data.timeout=this.timeout;return this.send(_data)},sendCommand:function(data){var _data={service:data.service,command:data.command,data:data.data,string:data.string,additional_security_information:data.additionalSecurityInformation};_data.type=\"sendcommand\";_data.training=this.trainingMode;return this.send(_data)},checkConnection:function(data){var _data={type:\"checkconnection\",additional_security_information:data.additionalSecurityInformation};_data.timeout=this.timeout;return this.send(_data)},clearOutput:function(){var _data={type:\"clearoutput\"};return this.send(_data)},scanCode:function(){var _timeout;if(this.timeout==0){_timeout=60000}else{_timeout=this.timeout}var _data={type:\"scancode\"};_data.training=this.trainingMode;_data.timeout=_timeout;return this.send(_data)},scanData:function(data){var _timeout;if(this.timeout==0){_timeout=150000}else{_timeout=this.timeout}var _data={command:data.command,string:data.string};_data.type=\"scandata\";_data.training=this.trainingMode;_data.timeout=_timeout;return this.send(_data)},send:function(data){var tmp=this.deviceID;var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence},client_onauthorizesales:function(data){try{if(this.onauthorizesales==null){return}this.onauthorizesales(this.getResultObject(data))}catch(e){}return},client_onauthorizevoid:function(data){try{if(this.onauthorizevoid==null){return}this.onauthorizevoid(this.getResultObject(data))}catch(e){}return},client_onauthorizerefund:function(data){try{if(this.onauthorizerefund==null){return}this.onauthorizerefund(this.getResultObject(data))}catch(e){}return},client_onauthorizecompletion:function(data){try{if(this.onauthorizecompletion==null){return}this.onauthorizecompletion(this.getResultObject(data))}catch(e){}return},client_onaccessdailylog:function(data){try{if(this.onaccessdailylog==null){return}this.onaccessdailylog(this.getDailyLogObject(data))}catch(e){}return},client_oncommandreply:function(data){try{if(this.oncommandreply==null){return}this.oncommandreply(this.getCommandReplyObject(data))}catch(e){}return},client_oncheckconnection:function(data){try{if(this.oncheckconnection==null){return}this.oncheckconnection(data)}catch(e){}return},client_onclearoutput:function(data){try{if(this.onclearoutput==null){return}this.onclearoutput(data)}catch(e){}return},client_onscancode:function(data){try{if(this.onscancode==null){return}this.onscancode(data)}catch(e){}return},client_onscandata:function(data){try{if(this.onscandata==null){return}this.onscandata(data)}catch(e){}return},client_ondirectio:function(data){try{if(this.ondirectio==null){return}this.ondirectio(data)}catch(e){}return},client_onstatusupdate:function(data){try{if(this.onstatusupdate==null){return}this.onstatusupdate(data)}catch(e){}return},getResultObject:function(data){return({status:data.status,sequence:data.sequence,service:data.service,accountNumber:data.account_number,settledAmount:data.settled_amount,slipNumber:data.slip_number,kid:data.kid,approvalCode:data.approval_code,transactionNumber:data.transaction_number,paymentCondition:data.payment_condition,voidSlipNumber:data.void_slip_number,balance:data.balance,transactionType:data.transaction_type,additionalSecurityInformation:data.additional_security_information})},getDailyLogObject:function(data){var dailylogData={};dailylogData.status=data.status;dailylogData.service=data.service;dailylogData.sequence=data.sequence;var logList=[];try{data.daily_log.forEach(function(log){var logData={};if(log===0){throw logList}logData.kid=log.kid;logData.salesCount=log.sales_count;logData.salesAmount=log.sales_amount;logData.voidCount=log.void_count;logData.voidAmount=log.void_amount;logList.push(logData)})}catch(e){}dailylogData.dailyLog=logList;return dailylogData},getCommandReplyObject:function(data){return({status:data.status,command:data.command,data:data.data,string:data.string,service:data.service,sequence:data.sequence,accountNumber:data.account_number,settledAmount:data.settled_amount,slipNumber:data.slip_number,transactionNumber:data.transaction_number,paymentCondition:data.payment_condition,balance:data.balance,additionalSecurityInformation:data.additional_security_information,})},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;return this.send(eventReq)}};function DeviceTerminal(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.onshutdown=null;this.onrestart=null;this.connectionObj=null}DeviceTerminal.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},shutdown:function(password,callback){this.onshutdown=callback;var data={type:\"shutdown\",password:password};return this.send(data)},client_onshutdown:function(data){try{if(typeof(this.onshutdown)!=\"function\"){return}this.onshutdown(data)}catch(e){}return},restart:function(password,callback){this.onrestart=callback;var data={type:\"restart\",password:password};return this.send(data)},client_onrestart:function(data){try{if(typeof(this.onrestart)!=\"function\"){return}this.onrestart(data)}catch(e){}return},send:function(data){var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function Display(deviceID,isCrypto,ePOSDeviceContext){this.message=\"\";this.deviceID=deviceID;this.isCrypto=isCrypto;this.ePosDev=ePOSDeviceContext;this.timeout=10000;this.onreceive=null;this.onerror=null;this.ASB_NO_RESPONSE=1;this.ASB_DISPLAY_SUCCESS=2;this.SCROLL_OVERWRITE=\"overwrite\";this.SCROLL_VERTICAL=\"v_scroll\";this.SCROLL_HORIZONTAL=\"h_scroll\";this.MOVE_TOP_LEFT=\"top_left\";this.MOVE_TOP_RIGHT=\"top_right\";this.MOVE_BOTTOM_LEFT=\"bottom_left\";this.MOVE_BOTTOM_RIGHT=\"bottom_right\";this.CURSOR_NONE=\"none\";this.CURSOR_UNDERLINE=\"underline\";this.BRIGHTNESS_20=20;this.BRIGHTNESS_40=40;this.BRIGHTNESS_60=60;this.BRIGHTNESS_100=100;this.MARQUEE_WALK=\"walk\";this.MARQUEE_PLACE=\"place\";this.connectionObj=null;this.LAYOUT_MODE_1=1;this.LAYOUT_MODE_2=2;this.LAYOUT_MODE_3=3;this.LAYOUT_MODE_4=4;this.LAYOUT_MODE_5=5;this.LAYOUT_MODE_6=6;this.LAYOUT_MODE_7=7;this.LAYOUT_MODE_8=8;this.LAYOUT_MODE_9=9;this.LAYOUT_MODE_10=10;this.LAYOUT_MODE_11=11;this.LAYOUT_MODE_12=12;this.LAYOUT_MODE_13=13;this.LAYOUT_MODE_14=14;this.LAYOUT_MODE_15=15;this.LANDSCAPE_LAYOUT_MODE_1=20;this.LANDSCAPE_LAYOUT_MODE_2=22;this.LANDSCAPE_LAYOUT_MODE_3=23;this.LANDSCAPE_LAYOUT_MODE_4=24;this.LANDSCAPE_LAYOUT_MODE_5=25;this.PORTRAIT_LAYOUT_MODE_1=21;this.PORTRAIT_LAYOUT_MODE_2=26;this.PORTRAIT_LAYOUT_MODE_3=27;this.PORTRAIT_LAYOUT_MODE_4=28;this.PORTRAIT_LAYOUT_MODE_5=29;this.PORTRAIT_LAYOUT_MODE_6=30;this.PORTRAIT_LAYOUT_MODE_7=31;this.EVEN_ROWS=\"even\";this.ODD_ROWS=\"odd\";this.ALL_ROWS=\"all\";this.SYMBOL_QRCODE_MODEL_1=\"qrcode_model_1\";this.SYMBOL_QRCODE_MODEL_2=\"qrcode_model_2\";this.LEVEL_L=\"level_l\";this.LEVEL_M=\"level_m\";this.LEVEL_Q=\"level_q\";this.LEVEL_H=\"level_h\";this.LEVEL_DEFAULT=\"default\"}Display.prototype.setConnectionObject=function(connectionObj){this.connectionObj=connectionObj};Display.prototype.reset=function(){try{this.message+=\"<reset />\"}catch(e){throw e}return this};Display.prototype.createWindow=function(number,x,y,width,hight,scrollMode){try{var s=\"\";s+=getIntAttr(\"number\",number,1,4);s+=getIntAttr(\"x\",x,1,44);s+=getIntAttr(\"y\",y,1,19);s+=getIntAttr(\"width\",width,1,44);s+=getIntAttr(\"height\",hight,1,19);s+=getEnumAttr(\"scrollmode\",scrollMode,regexScrollMode);this.message+=\"<window\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.destroyWindow=function(number){try{var s=\"\";s+=getIntAttr(\"number\",number,1,4);this.message+=\"<window\"+s+' destroy=\"true\"/>'}catch(e){throw e}return this};Display.prototype.setCurrentWindow=function(number){try{var s=\"\";s+=getIntAttr(\"number\",number,1,4);this.message+=\"<window\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.setCursorPosition=function(){try{var s=\"\";s+=getIntAttr(\"x\",arguments[0],1,44);s+=getIntAttr(\"y\",arguments[1],1,19);this.message+=\"<cursor\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.moveCursorPosition=function(){try{var s=\"\";s+=getEnumAttr(\"moveto\",arguments[0],regexMoveto);this.message+=\"<cursor\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.setCursorType=function(underline){try{var s=\"\";s+=getEnumAttr(\"type\",underline,regexUnderline);this.message+=\"<cursor\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addText=function(){try{var s=\"\";switch(arguments.length){case 1:break;case 2:if(arguments[1]!=undefined){s+=' lang=\"'+arguments[1]+'\"'}break;case 3:if((arguments[1]!=undefined)&&(arguments[2]!=undefined)){s+=getIntAttr(\"x\",arguments[1],1,44);s+=getIntAttr(\"y\",arguments[2],1,19)}break;case 4:if((arguments[1]!=undefined)&&(arguments[2]!=undefined)){s+=getIntAttr(\"x\",arguments[1],1,44);s+=getIntAttr(\"y\",arguments[2],1,19)}if(arguments[3]!=undefined){s+=' lang=\"'+arguments[3]+'\"'}break;case 7:if((arguments[1]!=undefined)&&(arguments[2]!=undefined)){s+=getIntAttr(\"x\",arguments[1],1,44);s+=getIntAttr(\"y\",arguments[2],1,19)}if(arguments[3]!=undefined){s+=' lang=\"'+arguments[3]+'\"'}if((arguments[4]!=undefined)&&(arguments[5]!=undefined)&&(arguments[6]!=undefined)){var tmp=getIntAttr(\"r\",arguments[4],0,255);tmp=getIntAttr(\"g\",arguments[5],0,255);tmp=getIntAttr(\"b\",arguments[6],0,255);var rHex=(\"00\"+Number(arguments[4]).toString(16)).slice(-2);var gHex=(\"00\"+Number(arguments[5]).toString(16)).slice(-2);var bHex=(\"00\"+Number(arguments[6]).toString(16)).slice(-2);var color=\"#\"+rHex+gHex+bHex;s+=' color=\"'+color+'\"'}break;default:throw new Error(\"Parameters are invalid\");break}this.message+=\"<text\"+s+\">\"+escapeMarkup(arguments[0])+\"</text>\"}catch(e){throw e}return this};Display.prototype.addReverseText=function(){try{var s=\"\";switch(arguments.length){case 1:s+=getBoolAttr(\"reverse\",true);break;case 2:s+=' lang=\"'+arguments[1]+'\"';s+=getBoolAttr(\"reverse\",true);break;case 3:s+=getIntAttr(\"x\",arguments[1],1,20);s+=getIntAttr(\"y\",arguments[2],1,2);s+=getBoolAttr(\"reverse\",true);break;case 4:s+=getIntAttr(\"x\",arguments[1],1,20);s+=getIntAttr(\"y\",arguments[2],1,2);s+=' lang=\"'+arguments[3]+'\"';s+=getBoolAttr(\"reverse\",true);break;default:throw new Error(\"Parameters are invalid\");break}this.message+=\"<text\"+s+\">\"+escapeMarkup(arguments[0])+\"</text>\"}catch(e){throw e}return this};Display.prototype.clearWindow=function(){try{this.message+=\"<clear/>\"}catch(e){throw e}return this};Display.prototype.setBlink=function(interval){try{var s=\"\";s+=getUShortAttr(\"interval\",interval);this.message+=\"<blink\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.setBrightness=function(value){try{var s=\"\";s+=getEnumAttr(\"value\",value,regexBrightness);this.message+=\"<brightness\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addMarquee=function(text,format,uwait,rwait,repeat,lang){try{var s=\"\";s+=getEnumAttr(\"format\",format,regexMarquee);s+=getIntAttr(\"uwait\",uwait,0,2000);s+=getIntAttr(\"rwait\",rwait,100,2000);s+=getIntAttr(\"repeat\",repeat,0,127);if((typeof lang)!==\"undefined\"){s+=' lang=\"'+lang+'\"'}this.message+=\"<marquee\"+s+\">\"+escapeMarkup(text)+\"</marquee>\"}catch(e){throw e}return this};Display.prototype.showClock=function(){try{this.message+=\"<clock/>\"}catch(e){throw e}return this};Display.prototype.addCommand=function(text){try{this.message+=\"<command>\"+toHexBinary(text)+\"</command>\"}catch(e){throw e}return this};Display.prototype.addCreateScreen=function(mode){try{var s=\"\";s+=getIntAttr(\"mode\",mode,1,15);this.message+=\"<screen\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addCreateScreenCustom=function(mode,column,row){try{var s=\"\";s+=getIntAttr(\"mode\",mode,20,31);s+=getIntAttr(\"column\",column,1,44);s+=getIntAttr(\"row\",row,1,19);this.message+=\"<screen\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addBackgroundColor=function(row,r,g,b){try{var s=\"\";s+=getEnumAttr(\"row\",row,regexRow);var tmp=getIntAttr(\"r\",r,0,255);tmp=getIntAttr(\"g\",g,0,255);tmp=getIntAttr(\"b\",b,0,255);var rHex=(\"00\"+Number(r).toString(16)).slice(-2);var gHex=(\"00\"+Number(g).toString(16)).slice(-2);var bHex=(\"00\"+Number(b).toString(16)).slice(-2);var color=\"#\"+rHex+gHex+bHex;s+=' color=\"'+color+'\"';this.message+=\"<backgroundcolor\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addStartSlideShow=function(interval){try{var s=\"\";s+=getIntAttr(\"interval\",interval,200,51000);this.message+=\"<slideshow\"+s+' stop=\"false\"/>'}catch(e){throw e}return this};Display.prototype.addStopSlideShow=function(){try{this.message+='<slideshow stop=\"true\"/>'}catch(e){throw e}return this};Display.prototype.addSymbol=function(data,type,level,width,height,dotX,dotY,quietZone){try{var s=\"\";s+=getEnumAttr(\"type\",type,regexSymbol);s+=getEnumAttr(\"level\",level,regexLevel);s+=getIntAttr(\"width\",width,1,255);s+=getIntAttr(\"dotx\",dotX,0,799);s+=getIntAttr(\"doty\",dotY,0,799);s+=getEnumAttr(\"quietzone\",quietZone,regexQuietZone);this.message+=\"<symbol\"+s+\">\"+escapeControl(escapeMarkup(data))+\"</symbol>\"}catch(e){throw e}return this};Display.prototype.addDownloadImage=function(key1,key2,dotX,dotY,width,height){try{var s=\"\";s+=getIntAttr(\"key1\",key1,0,255);s+=getIntAttr(\"key2\",key2,0,255);s+=getIntAttr(\"dotx\",dotX,0,799);s+=getIntAttr(\"doty\",dotY,0,799);s+=getIntAttr(\"width\",width,0,1440);s+=getIntAttr(\"height\",height,0,1440);this.message+=\"<downloadimage\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addRegisterDownloadImage=function(data,key1,key2){try{var s=\"\";s+=getIntAttr(\"key1\",key1,0,255);s+=getIntAttr(\"key2\",key2,0,255);this.message+=\"<registerdownloadimage\"+s+\">\"+toBase64Binary(data)+\"</registerdownloadimage>\"}catch(e){throw e}return this};Display.prototype.addNVImage=function(key1,key2,dotX,dotY,width,height){try{var s=\"\";s+=getIntAttr(\"key1\",key1,0,255);s+=getIntAttr(\"key2\",key2,0,255);s+=getIntAttr(\"dotx\",dotX,0,799);s+=getIntAttr(\"doty\",dotY,0,799);s+=getIntAttr(\"width\",width,0,1440);s+=getIntAttr(\"height\",height,0,1440);this.message+=\"<nvimage\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.addClearImage=function(){try{this.message+=\"<clearimage/>\"}catch(e){throw e}return this};Display.prototype.addClearSymbol=function(){try{this.message+=\"<clearsymbol/>\"}catch(e){throw e}return this};Display.prototype.createTextArea=function(number,x,y,width,height,scrollMode){try{var s=\"\";s+=getIntAttr(\"number\",number,1,4);s+=getIntAttr(\"x\",x,1,44);s+=getIntAttr(\"y\",y,1,19);s+=getIntAttr(\"width\",width,1,44);s+=getIntAttr(\"height\",height,1,19);s+=getEnumAttr(\"scrollmode\",scrollMode,regexScrollMode);this.message+=\"<textarea\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.destroyTextArea=function(number){try{var s=\"\";s+=getIntAttr(\"number\",number,1,4);this.message+=\"<textarea\"+s+' destroy=\"true\"/>'}catch(e){throw e}return this};Display.prototype.setCurrentTextArea=function(number){try{var s=\"\";s+=getIntAttr(\"number\",number,1,4);this.message+=\"<textarea\"+s+\"/>\"}catch(e){throw e}return this};Display.prototype.clearTextArea=function(){try{this.message+=\"<clear/>\"}catch(e){throw e}return this};Display.prototype.send=function(){var sq=-1;if((!this.ePosDev.eposprint)&&(this.connectionObj.isUsableDeviceIF())){try{var xml=this.toString();var data={type:\"display\",timeout:this.timeout,displaydata:xml};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);this.connectionObj.emit(eposmsg);sq=eposmsg.sequence;this.message=\"\"}catch(e){sq=-1}}else{var self=this,address=this.connectionObj.getAddressWithProtocol()+\"/cgi-bin/eposDisp/service.cgi?devid=\"+this.deviceID+\"&timeout=\"+this.timeout,soap,xhr,tid,res,success,code,status;res={};soap='<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">';soap+=\"<s:Body>\"+this.toString()+\"</s:Body></s:Envelope>\";if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(!(\"withCredentials\" in xhr)&&window.XDomainRequest){xhr=new XDomainRequest();xhr.open(\"POST\",address,true);xhr.onload=function(){res=xhr.responseText;if(/response/.test(res)){success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(res);code=res.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/)?RegExp.$1:\"\";status=res.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/)?parseInt(RegExp.$1):0;self.fireReceiveEvent(success,code,status,0)}else{self.fireErrorEvent(0,xhr.responseText,0)}};xhr.onerror=function(){self.fireErrorEvent(0,xhr.responseText,0)};xhr.onprogress=function(){};xhr.ontimeout=xhr.onerror;xhr.timeout=self.timeout;xhr.send(soap)}else{xhr.open(\"POST\",address,true);xhr.setRequestHeader(\"Content-Type\",\"text/xml; charset=utf-8\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jan 1970 00:00:00 GMT\");xhr.setRequestHeader(\"SOAPAction\",'\"\"');xhr.onreadystatechange=function(){if(xhr.readyState==4){clearTimeout(tid);if(xhr.status==200&&xhr.responseXML){res=xhr.responseXML.getElementsByTagName(\"response\");if(res.length>0){success=/^(1|true)$/.test(res[0].getAttribute(\"success\"));code=res[0].hasAttribute(\"code\")?res[0].getAttribute(\"code\"):\"\";status=res[0].hasAttribute(\"status\")?parseInt(res[0].getAttribute(\"status\")):0;self.fireReceiveEvent(success,code,status,0)}else{self.fireErrorEvent(xhr.status,xhr.responseText,0)}}else{self.fireErrorEvent(xhr.status,xhr.responseText,0)}}};tid=setTimeout(function(){xhr.abort()},this.timeout);xhr.send(soap)}this.message=\"\"}else{throw new Error(\"XMLHttpRequest is not supported\")}sq=0}return sq};Display.prototype.fireReceiveEvent=function(success,code,status,sq){if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}if(this.onreceive){this.onreceive({success:success,code:code,status:status},sq)}};Display.prototype.fireErrorEvent=function(status,responseText,sq){if(this.onerror){this.onerror({status:0,responseText:this.ASB_NO_RESPONSE},sq)}this.ePosDev.cleanup()};Display.prototype.client_onxmlresult=function(res,sq){if(res){var xml=res.resultdata;var success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(xml);xml.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/);var code=RegExp.$1;xml.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/);var status=parseInt(RegExp.$1);if(this.onreceive){this.onreceive({success:success,code:code,status:status},sq)}}else{if(this.onerror){this.onerror({status:0,responseText:this.ASB_NO_RESPONSE},sq)}this.ePosDev.cleanup()}};Display.prototype.toString=function(){var epos='<epos-display xmlns=\"http://www.epson-pos.com/schemas/2012/09/epos-display\">'+this.message+\"</epos-display>\";return epos};Display.prototype.setXmlString=function(xml){this.message=xml};Display.prototype.getXmlString=function(){return this.message};Display.prototype.callEvent=function(eventName,data){var eventReq={type:eventName,data:data};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence};var regexBrightness=/^(20|40|60|100)$/;var regexScrollMode=/^(overwrite|v_scroll|h_scroll)$/;var regexMoveto=/^(top_left|top_right|bottom_left|bottom_right)$/;var regexUnderline=/^(none|underline)$/;var regexMarquee=/^(walk|place)$/;var regexRow=/^([1-9]|1[0-9]|even|odd|all)$/;var regexSymbol=/^(qrcode_(model_[12]))$/;var regexLevel=/^(level_[lmqh]|default)$/;var regexQuietZone=/^(true|false)$/;function OtherPeripheral(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}OtherPeripheral.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},send:function(methodName,data){var _data={};for(var key in data){_data[key]=data[key]}_data.type=methodName;var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,_data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence},client_onreceive:function(data){try{var eventData=data;delete eventData.type;this.onreceive(data.type,eventData)}catch(e){}return},callEvent:function(eventName,data){var eventReq={type:eventName,data:data};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function Keyboard(deviceID,isCrypto){this.VK_CANCEL=3;this.VK_BACK=8;this.VK_TAB=9;this.VK_RETURN=13;this.VK_SHIFT=16;this.VK_CONTROL=17;this.VK_MENU=18;this.VK_PAUSE=19;this.VK_CAPITAL=20;this.VK_KANA=21;this.VK_ESCAPE=27;this.VK_CONVERT=28;this.VK_NONCONVERT=29;this.VK_SPACE=32;this.VK_PRIOR=33;this.VK_NEXT=34;this.VK_END=35;this.VK_HOME=36;this.VK_LEFT=37;this.VK_UP=38;this.VK_RIGHT=39;this.VK_DOWN=40;this.VK_INSERT=45;this.VK_DELETE=46;this.VK_0=48;this.VK_1=49;this.VK_2=50;this.VK_3=51;this.VK_4=52;this.VK_5=53;this.VK_6=54;this.VK_7=55;this.VK_8=56;this.VK_9=57;this.VK_A=65;this.VK_B=66;this.VK_C=67;this.VK_D=68;this.VK_E=69;this.VK_F=70;this.VK_G=71;this.VK_H=72;this.VK_I=73;this.VK_J=74;this.VK_K=75;this.VK_L=76;this.VK_M=77;this.VK_N=78;this.VK_O=79;this.VK_P=80;this.VK_Q=81;this.VK_R=82;this.VK_S=83;this.VK_T=84;this.VK_U=85;this.VK_V=86;this.VK_W=87;this.VK_X=88;this.VK_Y=89;this.VK_Z=90;this.VK_LWIN=91;this.VK_RWIN=92;this.VK_APPS=93;this.VK_NUMPAD0=96;this.VK_NUMPAD1=97;this.VK_NUMPAD2=98;this.VK_NUMPAD3=99;this.VK_NUMPAD4=100;this.VK_NUMPAD5=101;this.VK_NUMPAD6=102;this.VK_NUMPAD7=103;this.VK_NUMPAD8=104;this.VK_NUMPAD9=105;this.VK_MULTIPLY=106;this.VK_ADD=107;this.VK_SEPARATOR=108;this.VK_SUBTRACT=109;this.VK_DECIMAL=110;this.VK_DIVIDE=111;this.VK_F1=112;this.VK_F2=113;this.VK_F3=114;this.VK_F4=115;this.VK_F5=116;this.VK_F6=117;this.VK_F7=118;this.VK_F8=119;this.VK_F9=120;this.VK_F10=121;this.VK_F11=122;this.VK_F12=123;this.VK_NUMLOCK=144;this.VK_SCROLL=145;this.VK_LSHIFT=160;this.VK_RSHIFT=161;this.VK_LCONTROL=162;this.VK_RCONTROL=163;this.VK_LMENU=164;this.VK_RMENU=165;this.VK_OEM_1=186;this.VK_OEM_PLUS=187;this.VK_OEM_COMMA=188;this.VK_OEM_MINUS=189;this.VK_OEM_PERIOD=190;this.VK_OEM_2=191;this.VK_OEM_3=192;this.VK_OEM_4=219;this.VK_OEM_5=220;this.VK_OEM_6=221;this.VK_OEM_7=222;this.VK_OEM_102=226;this.VK_OEM_ATTN=240;this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}Keyboard.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},client_onkeypress:function(data){try{if(this.onkeypress==null){return}this.onkeypress(data)}catch(e){}return},client_onstring:function(data){try{if(this.onstring==null){return}this.onstring(data)}catch(e){}return},setPrefix:function(keycodes){var data={type:\"setprefix\"};if(typeof keycodes==\"object\"){if((keycodes.length==0)){return -1}data.keycodes=keycodes}else{if((keycodes==null)||(keycodes==\"\")){return -1}data.keycodes=[keycodes]}var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,eventReq,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function MSR(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}MSR.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},client_ondata:function(data){try{if(this.ondata==null){return}this.ondata(data)}catch(e){}return},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,eventReq,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};\n/*! Based JavaScript is ePOS-Print API Version 5.0.0 */\nfunction ePOSBuilder(){this.message=\"\";this.halftone=0;this.brightness=1;this.force=false;this.FONT_A=\"font_a\";this.FONT_B=\"font_b\";this.FONT_C=\"font_c\";this.FONT_D=\"font_d\";this.FONT_E=\"font_e\";this.FONT_SPECIAL_A=\"special_a\";this.FONT_SPECIAL_B=\"special_b\";this.ALIGN_LEFT=\"left\";this.ALIGN_CENTER=\"center\";this.ALIGN_RIGHT=\"right\";this.COLOR_NONE=\"none\";this.COLOR_1=\"color_1\";this.COLOR_2=\"color_2\";this.COLOR_3=\"color_3\";this.COLOR_4=\"color_4\";this.FEED_PEELING=\"peeling\";this.FEED_CUTTING=\"cutting\";this.FEED_CURRENT_TOF=\"current_tof\";this.FEED_NEXT_TOF=\"next_tof\";this.MODE_MONO=\"mono\";this.MODE_GRAY16=\"gray16\";this.BARCODE_UPC_A=\"upc_a\";this.BARCODE_UPC_E=\"upc_e\";this.BARCODE_EAN13=\"ean13\";this.BARCODE_JAN13=\"jan13\";this.BARCODE_EAN8=\"ean8\";this.BARCODE_JAN8=\"jan8\";this.BARCODE_CODE39=\"code39\";this.BARCODE_ITF=\"itf\";this.BARCODE_CODABAR=\"codabar\";this.BARCODE_CODE93=\"code93\";this.BARCODE_CODE128=\"code128\";this.BARCODE_GS1_128=\"gs1_128\";this.BARCODE_GS1_DATABAR_OMNIDIRECTIONAL=\"gs1_databar_omnidirectional\";this.BARCODE_GS1_DATABAR_TRUNCATED=\"gs1_databar_truncated\";this.BARCODE_GS1_DATABAR_LIMITED=\"gs1_databar_limited\";this.BARCODE_GS1_DATABAR_EXPANDED=\"gs1_databar_expanded\";this.BARCODE_CODE128_AUTO=\"code128_auto\";this.HRI_NONE=\"none\";this.HRI_ABOVE=\"above\";this.HRI_BELOW=\"below\";this.HRI_BOTH=\"both\";this.SYMBOL_PDF417_STANDARD=\"pdf417_standard\";this.SYMBOL_PDF417_TRUNCATED=\"pdf417_truncated\";this.SYMBOL_QRCODE_MODEL_1=\"qrcode_model_1\";this.SYMBOL_QRCODE_MODEL_2=\"qrcode_model_2\";this.SYMBOL_QRCODE_MICRO=\"qrcode_micro\";this.SYMBOL_MAXICODE_MODE_2=\"maxicode_mode_2\";this.SYMBOL_MAXICODE_MODE_3=\"maxicode_mode_3\";this.SYMBOL_MAXICODE_MODE_4=\"maxicode_mode_4\";this.SYMBOL_MAXICODE_MODE_5=\"maxicode_mode_5\";this.SYMBOL_MAXICODE_MODE_6=\"maxicode_mode_6\";this.SYMBOL_GS1_DATABAR_STACKED=\"gs1_databar_stacked\";this.SYMBOL_GS1_DATABAR_STACKED_OMNIDIRECTIONAL=\"gs1_databar_stacked_omnidirectional\";this.SYMBOL_GS1_DATABAR_EXPANDED_STACKED=\"gs1_databar_expanded_stacked\";this.SYMBOL_AZTECCODE_FULLRANGE=\"azteccode_fullrange\";this.SYMBOL_AZTECCODE_COMPACT=\"azteccode_compact\";this.SYMBOL_DATAMATRIX_SQUARE=\"datamatrix_square\";this.SYMBOL_DATAMATRIX_RECTANGLE_8=\"datamatrix_rectangle_8\";this.SYMBOL_DATAMATRIX_RECTANGLE_12=\"datamatrix_rectangle_12\";this.SYMBOL_DATAMATRIX_RECTANGLE_16=\"datamatrix_rectangle_16\";this.LEVEL_0=\"level_0\";this.LEVEL_1=\"level_1\";this.LEVEL_2=\"level_2\";this.LEVEL_3=\"level_3\";this.LEVEL_4=\"level_4\";this.LEVEL_5=\"level_5\";this.LEVEL_6=\"level_6\";this.LEVEL_7=\"level_7\";this.LEVEL_8=\"level_8\";this.LEVEL_L=\"level_l\";this.LEVEL_M=\"level_m\";this.LEVEL_Q=\"level_q\";this.LEVEL_H=\"level_h\";this.LEVEL_DEFAULT=\"default\";this.LINE_THIN=\"thin\";this.LINE_MEDIUM=\"medium\";this.LINE_THICK=\"thick\";this.LINE_THIN_DOUBLE=\"thin_double\";this.LINE_MEDIUM_DOUBLE=\"medium_double\";this.LINE_THICK_DOUBLE=\"thick_double\";this.DIRECTION_LEFT_TO_RIGHT=\"left_to_right\";this.DIRECTION_BOTTOM_TO_TOP=\"bottom_to_top\";this.DIRECTION_RIGHT_TO_LEFT=\"right_to_left\";this.DIRECTION_TOP_TO_BOTTOM=\"top_to_bottom\";this.CUT_NO_FEED=\"no_feed\";this.CUT_FEED=\"feed\";this.CUT_RESERVE=\"reserve\";this.FULL_CUT_NO_FEED=\"no_feed_fullcut\";this.FULL_CUT_FEED=\"feed_fullcut\";this.FULL_CUT_RESERVE=\"reserve_fullcut\";this.DRAWER_1=\"drawer_1\";this.DRAWER_2=\"drawer_2\";this.PULSE_100=\"pulse_100\";this.PULSE_200=\"pulse_200\";this.PULSE_300=\"pulse_300\";this.PULSE_400=\"pulse_400\";this.PULSE_500=\"pulse_500\";this.PATTERN_NONE=\"none\";this.PATTERN_0=\"pattern_0\";this.PATTERN_1=\"pattern_1\";this.PATTERN_2=\"pattern_2\";this.PATTERN_3=\"pattern_3\";this.PATTERN_4=\"pattern_4\";this.PATTERN_5=\"pattern_5\";this.PATTERN_6=\"pattern_6\";this.PATTERN_7=\"pattern_7\";this.PATTERN_8=\"pattern_8\";this.PATTERN_9=\"pattern_9\";this.PATTERN_10=\"pattern_10\";this.PATTERN_A=\"pattern_a\";this.PATTERN_B=\"pattern_b\";this.PATTERN_C=\"pattern_c\";this.PATTERN_D=\"pattern_d\";this.PATTERN_E=\"pattern_e\";this.PATTERN_ERROR=\"error\";this.PATTERN_PAPER_END=\"paper_end\";this.LAYOUT_RECEIPT=\"receipt\";this.LAYOUT_RECEIPT_BM=\"receipt_bm\";this.LAYOUT_LABEL=\"label\";this.LAYOUT_LABEL_BM=\"label_bm\";this.HALFTONE_DITHER=0;this.HALFTONE_ERROR_DIFFUSION=1;this.HALFTONE_THRESHOLD=2}ePOSBuilder.prototype.addText=function(data){this.message+=\"<text>\"+escapeMarkup(data)+\"</text>\";return this};ePOSBuilder.prototype.addTextLang=function(lang){this.message+='<text lang=\"'+lang+'\"/>';return this};ePOSBuilder.prototype.addTextAlign=function(align){var s=\"\";s+=getEnumAttr(\"align\",align,regexAlign);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextRotate=function(rotate){var s=\"\";s+=getBoolAttr(\"rotate\",rotate);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextLineSpace=function(linespc){var s=\"\";s+=getUByteAttr(\"linespc\",linespc);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextFont=function(font){var s=\"\";s+=getEnumAttr(\"font\",font,regexFont);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextSmooth=function(smooth){var s=\"\";s+=getBoolAttr(\"smooth\",smooth);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextDouble=function(dw,dh){var s=\"\";if(dw!==undefined){s+=getBoolAttr(\"dw\",dw)}if(dh!==undefined){s+=getBoolAttr(\"dh\",dh)}this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextSize=function(width,height){var s=\"\";if(width!==undefined){s+=getIntAttr(\"width\",width,1,8)}if(height!==undefined){s+=getIntAttr(\"height\",height,1,8)}this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextStyle=function(reverse,ul,em,color){var s=\"\";if(reverse!==undefined){s+=getBoolAttr(\"reverse\",reverse)}if(ul!==undefined){s+=getBoolAttr(\"ul\",ul)}if(em!==undefined){s+=getBoolAttr(\"em\",em)}if(color!==undefined){s+=getEnumAttr(\"color\",color,regexColor)}this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextPosition=function(x){var s=\"\";s+=getUShortAttr(\"x\",x);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addTextVPosition=function(y){var s=\"\";s+=getUShortAttr(\"y\",y);this.message+=\"<text\"+s+\"/>\";return this};ePOSBuilder.prototype.addFeedUnit=function(unit){var s=\"\";s+=getUByteAttr(\"unit\",unit);this.message+=\"<feed\"+s+\"/>\";return this};ePOSBuilder.prototype.addFeedLine=function(line){var s=\"\";s+=getUByteAttr(\"line\",line);this.message+=\"<feed\"+s+\"/>\";return this};ePOSBuilder.prototype.addFeed=function(){this.message+=\"<feed/>\";return this};ePOSBuilder.prototype.addFeedPosition=function(pos){var s=\"\";s+=getEnumAttr(\"pos\",pos,regexFeed);this.message+=\"<feed\"+s+\"/>\";return this};ePOSBuilder.prototype.addImage=function(context,x,y,width,height,color,mode){var s=\"\",ht=this.halftone,br=this.brightness,imgdata,raster;getUShortAttr(\"x\",x);getUShortAttr(\"y\",y);s+=getUShortAttr(\"width\",width);s+=getUShortAttr(\"height\",height);if(color!==undefined){s+=getEnumAttr(\"color\",color,regexColor)}if(mode!==undefined){s+=getEnumAttr(\"mode\",mode,regexMode)}if(isNaN(ht)||ht<0||ht>2){throw new Error('Property \"halftone\" is invalid')}if(isNaN(br)||br<0.1||br>10){throw new Error('Property \"brightness\" is invalid')}imgdata=context.getImageData(x,y,width,height);raster=(mode==this.MODE_GRAY16)?toGrayImage(imgdata,br):toMonoImage(imgdata,ht,br);this.message+=\"<image\"+s+\">\"+toBase64Binary(raster)+\"</image>\";return this};ePOSBuilder.prototype.addLogo=function(key1,key2){var s=\"\";s+=getUByteAttr(\"key1\",key1);s+=getUByteAttr(\"key2\",key2);this.message+=\"<logo\"+s+\"/>\";return this};ePOSBuilder.prototype.addBarcode=function(data,type,hri,font,width,height){var s=\"\";s+=getEnumAttr(\"type\",type,regexBarcode);if(hri!==undefined){s+=getEnumAttr(\"hri\",hri,regexHri)}if(font!==undefined){s+=getEnumAttr(\"font\",font,regexFont)}if(width!==undefined){s+=getUByteAttr(\"width\",width)}if(height!==undefined){s+=getUByteAttr(\"height\",height)}this.message+=\"<barcode\"+s+\">\"+escapeControl(escapeMarkup(data))+\"</barcode>\";return this};ePOSBuilder.prototype.addSymbol=function(data,type,level,width,height,size){var s=\"\";s+=getEnumAttr(\"type\",type,regexSymbol);if(level!==undefined){s+=getEnumIntAttr(\"level\",level,regexLevel,0,255)}if(width!==undefined){s+=getUByteAttr(\"width\",width)}if(height!==undefined){s+=getUByteAttr(\"height\",height)}if(size!==undefined){s+=getUShortAttr(\"size\",size)}this.message+=\"<symbol\"+s+\">\"+escapeControl(escapeMarkup(data))+\"</symbol>\";return this};ePOSBuilder.prototype.addHLine=function(x1,x2,style){var s=\"\";s+=getUShortAttr(\"x1\",x1);s+=getUShortAttr(\"x2\",x2);if(style!==undefined){s+=getEnumAttr(\"style\",style,regexLine)}this.message+=\"<hline\"+s+\"/>\";return this};ePOSBuilder.prototype.addVLineBegin=function(x,style){var s=\"\";s+=getUShortAttr(\"x\",x);if(style!==undefined){s+=getEnumAttr(\"style\",style,regexLine)}this.message+=\"<vline-begin\"+s+\"/>\";return this};ePOSBuilder.prototype.addVLineEnd=function(x,style){var s=\"\";s+=getUShortAttr(\"x\",x);if(style!==undefined){s+=getEnumAttr(\"style\",style,regexLine)}this.message+=\"<vline-end\"+s+\"/>\";return this};ePOSBuilder.prototype.addPageBegin=function(){this.message+=\"<page>\";return this};ePOSBuilder.prototype.addPageEnd=function(){this.message+=\"</page>\";return this};ePOSBuilder.prototype.addPageArea=function(x,y,width,height){var s=\"\";s+=getUShortAttr(\"x\",x);s+=getUShortAttr(\"y\",y);s+=getUShortAttr(\"width\",width);s+=getUShortAttr(\"height\",height);this.message+=\"<area\"+s+\"/>\";return this};ePOSBuilder.prototype.addPageDirection=function(dir){var s=\"\";s+=getEnumAttr(\"dir\",dir,regexDirection);this.message+=\"<direction\"+s+\"/>\";return this};ePOSBuilder.prototype.addPagePosition=function(x,y){var s=\"\";s+=getUShortAttr(\"x\",x);s+=getUShortAttr(\"y\",y);this.message+=\"<position\"+s+\"/>\";return this};ePOSBuilder.prototype.addPageLine=function(x1,y1,x2,y2,style){var s=\"\";s+=getUShortAttr(\"x1\",x1);s+=getUShortAttr(\"y1\",y1);s+=getUShortAttr(\"x2\",x2);s+=getUShortAttr(\"y2\",y2);if(style!==undefined){s+=getEnumAttr(\"style\",style,regexLine)}this.message+=\"<line\"+s+\"/>\";return this};ePOSBuilder.prototype.addPageRectangle=function(x1,y1,x2,y2,style){var s=\"\";s+=getUShortAttr(\"x1\",x1);s+=getUShortAttr(\"y1\",y1);s+=getUShortAttr(\"x2\",x2);s+=getUShortAttr(\"y2\",y2);if(style!==undefined){s+=getEnumAttr(\"style\",style,regexLine)}this.message+=\"<rectangle\"+s+\"/>\";return this};ePOSBuilder.prototype.addRotateBegin=function(){this.message+=\"<rotate-begin/>\";return this};ePOSBuilder.prototype.addRotateEnd=function(){this.message+=\"<rotate-end/>\";return this};ePOSBuilder.prototype.addCut=function(type){var s=\"\";if(type!==undefined){s+=getEnumAttr(\"type\",type,regexCut)}this.message+=\"<cut\"+s+\"/>\";return this};ePOSBuilder.prototype.addPulse=function(drawer,time){var s=\"\";if(drawer!==undefined){s+=getEnumAttr(\"drawer\",drawer,regexDrawer)}if(time!==undefined){s+=getEnumAttr(\"time\",time,regexPulse)}this.message+=\"<pulse\"+s+\"/>\";return this};ePOSBuilder.prototype.addSound=function(pattern,repeat,cycle){var s=\"\";if(pattern!==undefined){s+=getEnumAttr(\"pattern\",pattern,regexPattern)}if(repeat!==undefined){s+=getUByteAttr(\"repeat\",repeat)}if(cycle!==undefined){s+=getUShortAttr(\"cycle\",cycle)}this.message+=\"<sound\"+s+\"/>\";return this};ePOSBuilder.prototype.addLayout=function(type,width,height,margin_top,margin_bottom,offset_cut,offset_label){var s=\"\";s+=getEnumAttr(\"type\",type,regexLayout);if(width!==undefined){s+=getUShortAttr(\"width\",width)}if(height!==undefined){s+=getUShortAttr(\"height\",height)}if(margin_top!==undefined){s+=getShortAttr(\"margin-top\",margin_top)}if(margin_bottom!==undefined){s+=getShortAttr(\"margin-bottom\",margin_bottom)}if(offset_cut!==undefined){s+=getShortAttr(\"offset-cut\",offset_cut)}if(offset_label!==undefined){s+=getShortAttr(\"offset-label\",offset_label)}this.message+=\"<layout\"+s+\"/>\";return this};ePOSBuilder.prototype.addRecovery=function(){this.message+=\"<recovery/>\";return this};ePOSBuilder.prototype.addReset=function(){this.message+=\"<reset/>\";return this};ePOSBuilder.prototype.addCommand=function(data){this.message+=\"<command>\"+toHexBinary(data)+\"</command>\";return this};ePOSBuilder.prototype.toString=function(){var s=\"\";if(this.force){s+=getBoolAttr(\"force\",true)}return'<epos-print xmlns=\"http://www.epson-pos.com/schemas/2011/03/epos-print\"'+s+\">\"+this.message+\"</epos-print>\"};function toHexBinary(s){var l=s.length,r=new Array(l),i;for(i=0;i<l;i++){r[i]=(\"0\"+s.charCodeAt(i).toString(16)).slice(-2)}return r.join(\"\")}function toBase64Binary(s){var l=s.length,r=new Array((l+2)/3<<2),t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",p=(3-l%3)%3,j=0,i=0,n;s+=\"\\x00\\x00\";while(i<l){n=s.charCodeAt(i++)<<16|s.charCodeAt(i++)<<8|s.charCodeAt(i++);r[j++]=t.charAt(n>>18&63);r[j++]=t.charAt(n>>12&63);r[j++]=t.charAt(n>>6&63);r[j++]=t.charAt(n&63)}while(p--){r[--j]=\"=\"}return r.join(\"\")}function toMonoImage(imgdata,s,g){var x=String.fromCharCode,m8=[[2,130,34,162,10,138,42,170],[194,66,226,98,202,74,234,106],[50,178,18,146,58,186,26,154],[242,114,210,82,250,122,218,90],[14,142,46,174,6,134,38,166],[206,78,238,110,198,70,230,102],[62,190,30,158,54,182,22,150],[254,126,222,94,246,118,214,86]],d=imgdata.data,w=imgdata.width,h=imgdata.height,r=new Array((w+7>>3)*h),n=0,p=0,q=0,t=128,e=new Array(),e1,e2,b,v,f,i,j;if(s==1){i=w;while(i--){e.push(0)}}for(j=0;j<h;j++){e1=0;e2=0;i=0;while(i<w){b=i&7;if(s==0){t=m8[j&7][b]}v=Math.pow(((d[p++]*0.29891+d[p++]*0.58661+d[p++]*0.11448)*d[p]/255+255-d[p++])/255,1/g)*255|0;if(s==1){v+=e[i]+e1>>4;f=v-(v<t?0:255);if(i>0){e[i-1]+=f}e[i]=f*7+e2;e1=f*5;e2=f*3}if(v<t){n|=128>>b}i++;if(b==7||i==w){r[q++]=x(n==16?32:n);n=0}}}return r.join(\"\")}function toGrayImage(imgdata,g){var x=String.fromCharCode,m4=[[0,9,2,11],[13,4,15,6],[3,12,1,10],[16,7,14,5]],thermal=[0,7,13,19,23,27,31,35,40,44,49,52,54,55,57,59,61,62,64,66,67,69,70,70,71,72,73,74,75,76,77,78,79,80,81,82,83,83,84,85,86,86,87,88,88,89,90,90,91,91,92,93,93,94,94,95,96,96,97,98,98,99,99,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,120,121,121,122,122,123,123,123,124,124,125,125,125,126,126,127,127,127,128,128,129,129,130,130,130,131,131,132,132,132,133,133,134,134,135,135,135,136,136,137,137,137,138,138,139,139,139,140,140,141,141,141,142,142,143,143,143,144,144,145,145,146,146,146,147,147,148,148,148,149,149,150,150,150,151,151,152,152,152,153,153,154,154,155,155,155,156,156,157,157,158,158,159,159,160,160,161,161,161,162,162,163,163,164,164,165,165,166,166,166,167,167,168,168,169,169,170,170,171,171,172,173,173,174,175,175,176,177,178,178,179,180,180,181,182,182,183,184,184,185,186,186,187,189,191,193,195,198,200,202,255],d=imgdata.data,w=imgdata.width,h=imgdata.height,r=new Array((w+1>>1)*h),n=0,p=0,q=0,b,v,v1,i,j;for(j=0;j<h;j++){i=0;while(i<w){b=i&1;v=thermal[Math.pow(((d[p++]*0.29891+d[p++]*0.58661+d[p++]*0.11448)*d[p]/255+255-d[p++])/255,1/g)*255|0];v1=v/17|0;if(m4[j&3][i&3]<v%17){v1++}n|=v1<<((1-b)<<2);i++;if(b==1||i==w){r[q++]=x(n);n=0}}}return r.join(\"\")}function escapeMarkup(s){var markup=/[<>&'\"\\t\\n\\r]/g;if(markup.test(s)){s=s.replace(markup,function(c){var r=\"\";switch(c){case\"<\":r=\"&lt;\";break;case\">\":r=\"&gt;\";break;case\"&\":r=\"&amp;\";break;case\"'\":r=\"&apos;\";break;case'\"':r=\"&quot;\";break;case\"\\t\":r=\"&#9;\";break;case\"\\n\":r=\"&#10;\";break;case\"\\r\":r=\"&#13;\";break;default:break}return r})}return s}function escapeControl(s){var control=/[\\\\\\x00-\\x1f\\x7f-\\xff]/g;if(control.test(s)){s=s.replace(control,function(c){return(c==\"\\\\\")?\"\\\\\\\\\":\"\\\\x\"+(\"0\"+c.charCodeAt(0).toString(16)).slice(-2)})}return s}var regexFont=/^(font_[a-e]|special_[ab])$/,regexAlign=/^(left|center|right)$/,regexColor=/^(none|color_[1-4])$/,regexFeed=/^(peeling|cutting|current_tof|next_tof)$/,regexMode=/^(mono|gray16)$/,regexBarcode=/^(upc_[ae]|[ej]an13|[ej]an8|code(39|93|128|128_auto)|itf|codabar|gs1_128|gs1_databar_(omnidirectional|truncated|limited|expanded))$/,regexHri=/^(none|above|below|both)$/,regexSymbol=/^(pdf417_(standard|truncated)|qrcode_(model_[12]|micro)|maxicode_mode_[2-6]|gs1_databar_(stacked(_omnidirectional)?|expanded_stacked)|azteccode_(fullrange|compact)|datamatrix_(square|rectangle_(8|12|16)))$/,regexLevel=/^(level_[0-8lmqh]|default)$/,regexLine=/^(thin|medium|thick)(_double)?$/,regexDirection=/^(left_to_right|bottom_to_top|right_to_left|top_to_bottom)$/,regexCut=/^(no_feed|feed|reserve|no_feed_fullcut|feed_fullcut|reserve_fullcut)$/,regexDrawer=/^drawer_[12]$/,regexPulse=/^pulse_[1-5]00$/,regexPattern=/^(none|pattern_(10|[0-9a-e])|error|paper_end)$/,regexLayout=/^(receipt|label)(_bm)?$/;function getEnumAttr(name,value,regex){if(!regex.test(value)){throw new Error('Parameter \"'+name+'\" is invalid')}return\" \"+name+'=\"'+value+'\"'}function getBoolAttr(name,value){return\" \"+name+'=\"'+!!value+'\"'}function getIntAttr(name,value,min,max){if(isNaN(value)||value<min||value>max){throw new Error('Parameter \"'+name+'\" is invalid')}return\" \"+name+'=\"'+value+'\"'}function getUByteAttr(name,value){return getIntAttr(name,value,0,255)}function getUShortAttr(name,value){return getIntAttr(name,value,0,65535)}function getShortAttr(name,value){return getIntAttr(name,value,-32768,32767)}function getEnumIntAttr(name,value,regex,min,max){if(!regex.test(value)){if(isNaN(value)||value<min||value>max){throw new Error('Parameter \"'+name+'\" is invalid')}}return\" \"+name+'=\"'+value+'\"'}function ePOSPrint(address){this.address=address;this.enabled=false;this.interval=3000;this.timeout=300000;this.status=0;this.battery=0;this.drawerOpenLevel=0;this.onreceive=null;this.onerror=null;this.onstatuschange=null;this.ononline=null;this.onoffline=null;this.onpoweroff=null;this.oncoverok=null;this.oncoveropen=null;this.onpaperok=null;this.onpaperend=null;this.onpapernearend=null;this.ondrawerclosed=null;this.ondraweropen=null;this.onbatterylow=null;this.onbatteryok=null;this.onbatterystatuschange=null;this.ASB_NO_RESPONSE=1;this.ASB_PRINT_SUCCESS=2;this.ASB_DRAWER_KICK=4;this.ASB_BATTERY_OFFLINE=4;this.ASB_OFF_LINE=8;this.ASB_COVER_OPEN=32;this.ASB_PAPER_FEED=64;this.ASB_WAIT_ON_LINE=256;this.ASB_PANEL_SWITCH=512;this.ASB_MECHANICAL_ERR=1024;this.ASB_AUTOCUTTER_ERR=2048;this.ASB_UNRECOVER_ERR=8192;this.ASB_AUTORECOVER_ERR=16384;this.ASB_RECEIPT_NEAR_END=131072;this.ASB_RECEIPT_END=524288;this.ASB_BUZZER=16777216;this.ASB_WAIT_REMOVE_LABEL=16777216;this.ASB_NO_LABEL=67108864;this.ASB_SPOOLER_IS_STOPPED=2147483648;this.DRAWER_OPEN_LEVEL_LOW=0;this.DRAWER_OPEN_LEVEL_HIGH=1}ePOSPrint.prototype=new ePOSBuilder();ePOSPrint.prototype.constructor=ePOSPrint;ePOSPrint.prototype.open=function(){if(!this.enabled){this.enabled=true;this.status=0;this.battery=0;this.send()}};ePOSPrint.prototype.close=function(){this.enabled=false;if(this.intervalid){clearTimeout(this.intervalid);delete this.intervalid}if(this.intervalxhr){this.intervalxhr.abort();delete this.intervalxhr}};ePOSPrint.prototype.getPrintJobStatus=function(printjobid){this.send(printjobid)};ePOSPrint.prototype.send=function(request,printjobid){var args=arguments.length,epos=this,address=epos.address,soap,xhr,tid,res,success,code,status,battery;if(!/^<epos/.test(request)){if(args<2){printjobid=request;request=new ePOSBuilder().toString()}else{address=request;request=printjobid;printjobid=arguments[2]}}soap='<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">';if(printjobid){soap+='<s:Header><parameter xmlns=\"http://www.epson-pos.com/schemas/2011/03/epos-print\"><printjobid>'+printjobid+\"</printjobid></parameter></s:Header>\"}soap+=\"<s:Body>\"+request+\"</s:Body></s:Envelope>\";if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(!(\"withCredentials\" in xhr)&&window.XDomainRequest){xhr=new XDomainRequest();xhr.open(\"POST\",address,true);xhr.onload=function(){res=xhr.responseText;if(/response/.test(res)){success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(res);code=res.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/)?RegExp.$1:\"\";status=res.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/)?parseInt(RegExp.$1):0;battery=res.match(/battery\\s*=\\s*\"\\s*(\\d+)\\s*\"/)?parseInt(RegExp.$1):0;printjobid=res.match(/<printjobid>\\s*(\\S*)\\s*<\\/printjobid>/)?RegExp.$1:\"\";if(args>0){fireReceiveEvent(epos,success,code,status,battery,printjobid)}else{fireStatusEvent(epos,status,battery)}}else{if(args>0){fireErrorEvent(epos,0,xhr.responseText)}else{fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0)}}if(args<1){updateStatus(epos)}};xhr.onerror=function(){if(args>0){fireErrorEvent(epos,0,xhr.responseText)}else{fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0);updateStatus(epos)}};xhr.onprogress=function(){};xhr.ontimeout=xhr.onerror;xhr.timeout=epos.timeout;xhr.send(soap)}else{xhr.open(\"POST\",address,true);xhr.setRequestHeader(\"Content-Type\",\"text/xml; charset=utf-8\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jan 1970 00:00:00 GMT\");xhr.setRequestHeader(\"SOAPAction\",'\"\"');xhr.onreadystatechange=function(){if(xhr.readyState==4){clearTimeout(tid);if(xhr.status==200&&xhr.responseXML){res=xhr.responseXML.getElementsByTagName(\"response\");if(res.length>0){success=/^(1|true)$/.test(res[0].getAttribute(\"success\"));code=res[0].hasAttribute(\"code\")?res[0].getAttribute(\"code\"):\"\";status=res[0].hasAttribute(\"status\")?parseInt(res[0].getAttribute(\"status\")):0;battery=res[0].hasAttribute(\"battery\")?parseInt(res[0].getAttribute(\"battery\")):0;res=xhr.responseXML.getElementsByTagName(\"printjobid\");printjobid=res.length>0?res[0].textContent:\"\";if(args>0){fireReceiveEvent(epos,success,code,status,battery,printjobid)}else{fireStatusEvent(epos,status,battery)}}else{if(args>0){fireErrorEvent(epos,xhr.status,xhr.responseText)}else{fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0)}}}else{if(args>0){fireErrorEvent(epos,xhr.status,xhr.responseText)}else{fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0)}}if(args<1){updateStatus(epos)}}};tid=setTimeout(function(){xhr.abort()},epos.timeout);xhr.send(soap)}if(args<1){epos.intervalxhr=xhr}}else{throw new Error(\"XMLHttpRequest is not supported\")}};function fireReceiveEvent(epos,success,code,status,battery,printjobid){if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}if(epos.onreceive){epos.onreceive({success:success,code:code,status:status,battery:battery,printjobid:printjobid})}}function fireStatusEvent(epos,status,battery){var diff,difb;if(status==0||status==epos.ASB_NO_RESPONSE){status=epos.status|epos.ASB_NO_RESPONSE}diff=epos.status==0?~0:epos.status^status;difb=epos.status==0?~0:epos.battery^battery;epos.status=status;epos.battery=battery;if(diff&&epos.onstatuschange){epos.onstatuschange(status)}if(difb&&epos.onbatterystatuschange){epos.onbatterystatuschange(battery)}if(diff&(epos.ASB_NO_RESPONSE|epos.ASB_OFF_LINE)){if(status&epos.ASB_NO_RESPONSE){if(epos.onpoweroff){epos.onpoweroff()}}else{if(status&epos.ASB_OFF_LINE){if(epos.onoffline){epos.onoffline()}}else{if(epos.ononline){epos.ononline()}}}}if(diff&epos.ASB_COVER_OPEN){if(status&epos.ASB_NO_RESPONSE){}else{if(status&epos.ASB_COVER_OPEN){if(epos.oncoveropen){epos.oncoveropen()}}else{if(epos.oncoverok){epos.oncoverok()}}}}if(diff&(epos.ASB_RECEIPT_END|epos.ASB_RECEIPT_NEAR_END)){if(status&epos.ASB_NO_RESPONSE){}else{if(status&epos.ASB_RECEIPT_END){if(epos.onpaperend){epos.onpaperend()}}else{if(status&epos.ASB_RECEIPT_NEAR_END){if(epos.onpapernearend){epos.onpapernearend()}}else{if(epos.onpaperok){epos.onpaperok()}}}}}if(diff&epos.ASB_DRAWER_KICK){if(status&epos.ASB_NO_RESPONSE){}else{if(status&epos.ASB_DRAWER_KICK){if(epos.drawerOpenLevel==epos.DRAWER_OPEN_LEVEL_HIGH){if(epos.ondraweropen){epos.ondraweropen()}}else{if(epos.ondrawerclosed){epos.ondrawerclosed()}}if(epos.onbatterylow){epos.onbatterylow()}}else{if(epos.drawerOpenLevel==epos.DRAWER_OPEN_LEVEL_HIGH){if(epos.ondrawerclosed){epos.ondrawerclosed()}}else{if(epos.ondraweropen){epos.ondraweropen()}}if(epos.onbatteryok){epos.onbatteryok()}}}}}function fireErrorEvent(epos,status,responseText){if(epos.onerror){epos.onerror({status:status,responseText:responseText})}}function updateStatus(epos){var delay=epos.interval;if(epos.enabled){if(isNaN(delay)||delay<1000){delay=3000}epos.intervalid=setTimeout(function(){delete epos.intervalid;if(epos.enabled){epos.send()}},delay)}delete epos.intervalxhr}function CanvasPrint(address){this.address=address;this.mode=\"mono\";this.halftone=0;this.brightness=1;this.align=\"left\";this.color=\"color_1\";this.paper=\"receipt\";this.feed=\"current_tof\";this.cut=false;this.layout=null;this.ALIGN_LEFT=\"left\";this.ALIGN_CENTER=\"center\";this.ALIGN_RIGHT=\"right\";this.COLOR_NONE=\"none\";this.COLOR_1=\"color_1\";this.COLOR_2=\"color_2\";this.COLOR_3=\"color_3\";this.COLOR_4=\"color_4\";this.FEED_PEELING=\"peeling\";this.FEED_CUTTING=\"cutting\";this.FEED_CURRENT_TOF=\"current_tof\";this.FEED_NEXT_TOF=\"next_tof\";this.HALFTONE_DITHER=0;this.HALFTONE_ERROR_DIFFUSION=1;this.HALFTONE_THRESHOLD=2;this.MODE_MONO=\"mono\";this.MODE_GRAY16=\"gray16\";this.PAPER_RECEIPT=\"receipt\";this.PAPER_RECEIPT_BM=\"receipt_bm\";this.PAPER_LABEL=\"label\";this.PAPER_LABEL_BM=\"label_bm\";this.connectionObj=null}CanvasPrint.prototype=new ePOSPrint();CanvasPrint.prototype.constructor=CanvasPrint;CanvasPrint.prototype.setConnectionObject=function(connectionObj){this.connectionObj=connectionObj};CanvasPrint.prototype.print=function(){var args=arguments.length;var address=this.address,layout=this.layout,paper=this.paper;var canvas=arguments[0],cut=this.cut,mode=this.mode,printjobid=undefined;switch(args){case 2:printjobid=arguments[1];break;case 4:printjobid=arguments[3];case 3:cut=arguments[1];mode=arguments[2];break}if((typeof(canvas)==\"undefined\")||(canvas==null)){throw new Error(\"Canvas is not supported\")}if(!canvas.getContext){throw new Error(\"Canvas is not supported\")}if(layout){this.addLayout(paper,layout.width,layout.height,layout.margin_top,layout.margin_bottom,layout.offset_cut,layout.offset_label)}if(paper!=this.PAPER_RECEIPT){this.addFeedPosition(this.FEED_CURRENT_TOF);if(layout){this.addFeedPosition(this.FEED_NEXT_TOF)}}this.addTextAlign(this.align);this.addImage(canvas.getContext(\"2d\"),0,0,canvas.width,canvas.height,this.color,mode);if(paper!=this.PAPER_RECEIPT){this.addFeedPosition(this.feed);if(cut){this.addCut(this.CUT_NO_FEED)}}else{if(cut){this.addCut(this.CUT_FEED)}}this.send(printjobid)};CanvasPrint.prototype.recover=function(){this.force=true;this.addRecovery();this.send()};CanvasPrint.prototype.reset=function(){this.addReset();this.send()};if(!window.epson){window.epson={}}window.epson.ePOSBuilder=ePOSBuilder;window.epson.ePOSPrint=ePOSPrint;window.epson.CanvasPrint=CanvasPrint;function POSKeyboard(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}POSKeyboard.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},client_onkeypress:function(data){try{if(this.onkeypress==null){return}this.onkeypress(data)}catch(e){}return},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,eventReq,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function Printer(deviceID,isCrypto,ePOSDeviceContext){this.deviceID=deviceID;this.isCrypto=isCrypto;this.ePosDev=ePOSDeviceContext;this.timeout=10000}Printer.prototype=new CanvasPrint();Printer.prototype.finalize=function(){this.stopMonitor()};Printer.prototype.toString=function(){var str=ePOSBuilder.prototype.toString.apply(this);return str};Printer.prototype.addFeedUnit=function(unit){try{ePOSBuilder.prototype.addFeedUnit.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addFeedLine=function(line){try{ePOSBuilder.prototype.addFeedLine.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addFeed=function(unit){try{ePOSBuilder.prototype.addFeed.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addFeedPosition=function(line){try{ePOSBuilder.prototype.addFeedPosition.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addText=function(text){try{ePOSBuilder.prototype.addText.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextLang=function(lang){try{ePOSBuilder.prototype.addTextLang.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextAlign=function(align){try{ePOSBuilder.prototype.addTextAlign.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextRotate=function(rotate){try{ePOSBuilder.prototype.addTextRotate.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextLineSpace=function(linespc){try{ePOSBuilder.prototype.addTextLineSpace.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextFont=function(font){try{ePOSBuilder.prototype.addTextFont.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextSmooth=function(smooth){try{ePOSBuilder.prototype.addTextSmooth.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextDouble=function(dw,dh){try{ePOSBuilder.prototype.addTextDouble.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextSize=function(width,height){try{ePOSBuilder.prototype.addTextSize.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextStyle=function(reverse,ul,em,color){try{ePOSBuilder.prototype.addTextStyle.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextPosition=function(x){try{ePOSBuilder.prototype.addTextPosition.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addTextVPosition=function(y){try{ePOSBuilder.prototype.addTextVPosition.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addImage=function(context,x,y,width,height,color,mode){try{ePOSBuilder.prototype.addImage.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addLogo=function(key1,key2){try{ePOSBuilder.prototype.addLogo.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addBarcode=function(barCodeData,type,hri,font,width,height){try{ePOSBuilder.prototype.addBarcode.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addSymbol=function(symbolData,type,level,width,height,size){try{ePOSBuilder.prototype.addSymbol.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addCommand=function(data){try{ePOSBuilder.prototype.addCommand.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addHLine=function(x1,x2,style){try{ePOSBuilder.prototype.addHLine.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addVLineBegin=function(x,style){try{ePOSBuilder.prototype.addVLineBegin.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addVLineEnd=function(x,style){try{ePOSBuilder.prototype.addVLineEnd.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addPageBegin=function(){try{ePOSBuilder.prototype.addPageBegin.apply(this)}catch(e){throw e}return this};Printer.prototype.addPageEnd=function(){try{ePOSBuilder.prototype.addPageEnd.apply(this)}catch(e){throw e}return this};Printer.prototype.addPageArea=function(x,y,width,height){try{ePOSBuilder.prototype.addPageArea.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addPageDirection=function(dir){try{ePOSBuilder.prototype.addPageDirection.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addPagePosition=function(x,y){try{ePOSBuilder.prototype.addPagePosition.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addPageLine=function(x1,y1,x2,y2,style){try{ePOSBuilder.prototype.addPageLine.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addPageRectangle=function(x1,y1,x2,y2,style){try{ePOSBuilder.prototype.addPageRectangle.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addRotateBegin=function(){try{ePOSBuilder.prototype.addRotateBegin.apply(this)}catch(e){throw e}return this};Printer.prototype.addRotateEnd=function(){try{ePOSBuilder.prototype.addRotateEnd.apply(this)}catch(e){throw e}return this};Printer.prototype.addCut=function(type){try{ePOSBuilder.prototype.addCut.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addPulse=function(drawer,time){try{ePOSBuilder.prototype.addPulse.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addSound=function(pattern,repeat,cycle){try{ePOSBuilder.prototype.addSound.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.addLayout=function(type,width,height,margin_top,margin_bottom,offset_cut,offset_label){try{ePOSBuilder.prototype.addLayout.apply(this,arguments)}catch(e){throw e}return this};Printer.prototype.setXmlString=function(xml){this.message=xml};Printer.prototype.getXmlString=function(){return this.message};Printer.prototype.getPrintJobStatus=function(printjobid){this.setXmlString(\"\");this.send(printjobid)};Printer.prototype.send=function(printjobid){var sq=-1;if((!this.ePosDev.eposprint)&&(this.connectionObj.isUsableDeviceIF())){try{var data={type:\"print\",timeout:this.timeout,printdata:this.toString()};switch(arguments.length){case 0:data.printdata=this.toString();break;case 1:data.printdata=this.toString();data.printjobid=printjobid;break;case 2:case 3:data.printdata=arguments[1];data.printjobid=arguments[2]}var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}this.force=false;this.setXmlString(\"\")}catch(e){sq=-1}}else{var self=this,address=this.connectionObj.getAddressWithProtocol()+\"/cgi-bin/epos/service.cgi?devid=\"+this.deviceID+\"&timeout=\"+this.timeout,soap,xhr,tid,res,success,code,status,battery;soap='<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">';if(printjobid){soap+='<s:Header><parameter xmlns=\"http://www.epson-pos.com/schemas/2011/03/epos-print\"><printjobid>'+printjobid+\"</printjobid></parameter></s:Header>\"}soap+=\"<s:Body>\"+this.toString()+\"</s:Body></s:Envelope>\";if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(!(\"withCredentials\" in xhr)&&window.XDomainRequest){xhr=new XDomainRequest();xhr.open(\"POST\",address,true);xhr.onload=function(){res=xhr.responseText;if(/response/.test(res)){success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(res);code=res.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/)?RegExp.$1:\"\";status=res.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/)?parseInt(RegExp.$1):0;battery=res.match(/battery\\s*=\\s*\"\\s*(\\d+)\\s*\"/)?parseInt(RegExp.$1):0;printjobid=res.match(/<printjobid>\\s*(\\S*)\\s*<\\/printjobid>/)?RegExp.$1:\"\";self.fireReceiveEvent(success,code,status,battery,printjobid,0)}else{self.fireErrorEvent(0,xhr.responseText,0)}};xhr.onerror=function(){self.fireErrorEvent(0,xhr.responseText,0)};xhr.onprogress=function(){};xhr.ontimeout=xhr.onerror;xhr.timeout=self.timeout;xhr.send(soap)}else{xhr.open(\"POST\",address,true);xhr.setRequestHeader(\"Content-Type\",\"text/xml; charset=utf-8\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jan 1970 00:00:00 GMT\");xhr.setRequestHeader(\"SOAPAction\",'\"\"');xhr.onreadystatechange=function(){if(xhr.readyState==4){clearTimeout(tid);if(xhr.status==200&&xhr.responseXML){res=xhr.responseXML.getElementsByTagName(\"response\");if(res.length>0){success=/^(1|true)$/.test(res[0].getAttribute(\"success\"));code=res[0].hasAttribute(\"code\")?res[0].getAttribute(\"code\"):\"\";status=res[0].hasAttribute(\"status\")?parseInt(res[0].getAttribute(\"status\")):0;battery=res[0].hasAttribute(\"battery\")?parseInt(res[0].getAttribute(\"battery\")):0;res=xhr.responseXML.getElementsByTagName(\"printjobid\");printjobid=res.length>0?res[0].textContent:\"\";self.fireReceiveEvent(success,code,status,battery,printjobid,0)}else{self.fireErrorEvent(xhr.status,xhr.responseText,0)}}else{self.fireErrorEvent(xhr.status,xhr.responseText,0)}}};tid=setTimeout(function(){xhr.abort()},this.timeout);xhr.send(soap)}this.setXmlString(\"\")}else{throw new Error(\"XMLHttpRequest is not supported\")}sq=0}return sq};Printer.prototype.client_onxmlresult=function(res,sq){if(res){var xml=res.resultdata;var success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(xml);xml.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/);var code=RegExp.$1;xml.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/);var status=parseInt(RegExp.$1);xml.match(/battery\\s*=\\s*\"\\s*(\\d+)\\s*\"/);var battery=parseInt(RegExp.$1);this.fireReceiveEvent(success,code,status,battery,res.printjobid,sq)}else{this.fireErrorEvent(0,this.ASB_NO_RESPONSE,sq)}};Printer.prototype.startMonitor=function(){var result=false;var address=this.connectionObj.getAddressWithProtocol()+\"/cgi-bin/epos/service.cgi?devid=\"+this.deviceID+\"&timeout=10000\";try{if(!this.enabled){this.address=address;this.enabled=true;this.status=this.ASB_DRAWER_KICK;this.sendStartMonitorCommand()}result=true}catch(e){throw e}return result};Printer.prototype.sendStartMonitorCommand=function(){var self=this;var address=this.address;var request=new ePOSBuilder().toString();var soap='<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body>'+request+\"</s:Body></s:Envelope>\";var epos=this;if(window.XDomainRequest){var xdr=new XDomainRequest();xdr.open(\"POST\",address,true);xdr.onload=function(){var res=xdr.responseText;if(/response/.test(res)){var success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(res);res.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/);var code=RegExp.$1;res.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/);var status=parseInt(RegExp.$1);res.match(/battery\\s*=\\s*\"\\s*(\\d+)\\s*\"/);var battery=parseInt(RegExp.$1);self.fireStatusEvent(epos,status,battery)}else{self.fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0)}self.updateStatus(epos)};xdr.onerror=function(){self.fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0);self.updateStatus(epos)};xdr.onprogress=function(){};xdr.ontimeout=xdr.onerror;xdr.send(soap)}else{if(window.XMLHttpRequest){var xhr=new XMLHttpRequest();xhr.open(\"POST\",address,true);xhr.setRequestHeader(\"Content-Type\",\"text/xml; charset=utf-8\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jan 1970 00:00:00 GMT\");xhr.setRequestHeader(\"SOAPAction\",'\"\"');xhr.onreadystatechange=function(){if(xhr.readyState==4){if(xhr.status==200&&xhr.responseXML){var res=xhr.responseXML.getElementsByTagName(\"response\");if(res.length>0){var success=/^(1|true)$/.test(res[0].getAttribute(\"success\"));var code=res[0].getAttribute(\"code\");var status=parseInt(res[0].getAttribute(\"status\"));var battery=res[0].hasAttribute(\"battery\")?parseInt(res[0].getAttribute(\"battery\")):0;self.fireStatusEvent(epos,status,battery)}else{self.fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0)}}else{self.fireStatusEvent(epos,epos.ASB_NO_RESPONSE,0)}self.updateStatus(epos)}};xhr.send(soap)}else{throw new Error(\"XMLHttpRequest is not supported\")}}};Printer.prototype.stopMonitor=function(){var result=false;try{this.enabled=false;if(this.timeoutid){clearTimeout(this.timeoutid);delete this.timeoutid}result=true}catch(e){throw e}return result};Printer.prototype.fireReceiveEvent=function(success,code,status,battery,printjobid,sq){delete this.isPrint;if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}if(this.onreceive){this.onreceive({success:success,code:code,status:status,battery:battery,printjobid:printjobid},sq)}};Printer.prototype.fireErrorEvent=function(status,responseText,sq){if(this.onerror){this.onerror({status:status,responseText:responseText},sq)}this.ePosDev.cleanup()};Printer.prototype.fireStatusEvent=function(epos,status,battery){if(status==0||status==this.ASB_NO_RESPONSE){status=this.status|this.ASB_NO_RESPONSE}var diff=this.status==this.ASB_DRAWER_KICK?~0:this.status^status;var difb=this.status==0?~0:this.battery^battery;this.status=status;this.battery=battery;if(diff&&this.onstatuschange){this.onstatuschange(status)}if(difb&&this.onbatterystatuschange){this.onbatterystatuschange(battery)}if(diff&(this.ASB_NO_RESPONSE|this.ASB_OFF_LINE)){if(status&this.ASB_NO_RESPONSE){if(this.onpoweroff){this.onpoweroff()}}else{if(status&this.ASB_OFF_LINE){if(this.onoffline){this.onoffline()}}else{if(this.ononline){this.ononline()}}}}if(diff&this.ASB_COVER_OPEN){if(status&this.ASB_NO_RESPONSE){}else{if(status&this.ASB_COVER_OPEN){if(this.oncoveropen){this.oncoveropen()}}else{if(this.oncoverok){this.oncoverok()}}}}if(diff&(this.ASB_RECEIPT_END|this.ASB_RECEIPT_NEAR_END)){if(status&this.ASB_NO_RESPONSE){}else{if(status&this.ASB_RECEIPT_END){if(this.onpaperend){this.onpaperend()}}else{if(status&this.ASB_RECEIPT_NEAR_END){if(this.onpapernearend){this.onpapernearend()}}else{if(this.onpaperok){this.onpaperok()}}}}}if(diff&this.ASB_DRAWER_KICK){if(status&this.ASB_NO_RESPONSE){}else{if(status&this.ASB_DRAWER_KICK){if(this.drawerOpenLevel==this.DRAWER_OPEN_LEVEL_HIGH){if(this.ondraweropen){this.ondraweropen()}}else{if(this.ondrawerclosed){this.ondrawerclosed()}}if(this.onbatterylow){this.onbatterylow()}}else{if(this.drawerOpenLevel==this.DRAWER_OPEN_LEVEL_HIGH){if(this.ondrawerclosed){this.ondrawerclosed()}}else{if(this.ondraweropen){this.ondraweropen()}}if(this.onbatteryok){this.onbatteryok()}}}}};Printer.prototype.updateStatus=function(){var self=this;if(this.enabled){var delay=this.interval;if(isNaN(delay)||delay<1000){delay=3000}this.timeoutid=setTimeout(function(){delete self.timeoutid;if(self.enabled){self.sendStartMonitorCommand()}},delay)}};Printer.prototype.print=function(canvas,cut,mode,printjobid){try{CanvasPrint.prototype.print.apply(this,arguments)}catch(e){throw e}};Printer.prototype.reset=function(){try{CanvasPrint.prototype.reset.apply(this,arguments)}catch(e){throw e}};Printer.prototype.recover=function(){try{CanvasPrint.prototype.recover.apply(this,arguments)}catch(e){throw e}};function HybridPrinter(deviceID,isCrypto,ePOSDeviceContext){this.deviceID=deviceID;this.isCrypto=isCrypto;this.ePosDev=ePOSDeviceContext;this.connectionObj=null;this.ReceiptPrinter;this.SlipPrinter;this.EndorsePrinter;this.MICRReader;this.force=false;this.onstatuschange;this.ononline;this.onoffline;this.onpoweroff;this.oncoveropen;this.onpaperok;this.onpapernearend;this.onpaperend;this.ondrawerclosed;this.ondraweropen;this.ASB_NO_RESPONSE=1;this.ASB_PRINT_SUCCESS=2;this.ASB_DRAWER_KICK=4;this.ASB_OFF_LINE=8;this.ASB_COVER_OPEN=32;this.ASB_PAPER_FEED=64;this.ASB_WAIT_ON_LINE=256;this.ASB_PANEL_SWITCH=512;this.ASB_MECHANICAL_ERR=1024;this.ASB_AUTOCUTTER_ERR=2048;this.ASB_UNRECOVER_ERR=8192;this.ASB_AUTORECOVER_ERR=16384;this.ASB_RECEIPT_NEAR_END=131072;this.ASB_RECEIPT_END=524288;this.ASB_TOF_NOPAPER=2097152;this.ASB_BOF_NOPAPER=4194304;this.ASB_SLIP_NO_SELECT=16777216;this.ASB_SLIP_IMPOSSIBLE_PRINT=33554432;this.ASB_SPOOLER_IS_STOPPED=2147483648;this.SUCCESS=\"SUCCESS\";this.CANCEL=\"CANCEL\";this.ERROR_PARAMMETER=\"ERROR_PARAMMETER\";this.ERROR_COMMAND=\"ERROR_COMMAND\";this.ERROR_DEVICE_NOT_FOUND=\"ERROR_DEVICE_NOT_FOUND\";this.ERROR_DEVICE_BUSY=\"ERROR_DEVICE_BUSY\";this.ERROR_NOT_SUPPORTED=\"ERROR_NOT_SUPPORTED\";this.ERROR_COVER_OPEN=\"ERROR_COVER_OPEN\";this.ERROR_TIMEOUT=\"ERROR_TIMEOUT\";this.ERROR_AUTOMATICAL=\"ERROR_AUTOMATICAL\";this.ERROR_UNRECOVERABLE=\"ERROR_UNRECOVERABLE\";this.ERROR_BADPORT=\"ERROR_BADPORT\";this.SYSTEM_ERROR=\"SYSTEM_ERROR\";this.init(deviceID)}HybridPrinter.prototype={init:function(deviceID){var obj=this;obj.deviceID=deviceID;obj.ReceiptPrinter=new ReceiptPrinter(this);obj.SlipPrinter=new SlipPrinter(this);obj.EndorsePrinter=new EndorsePrinter(this);obj.MICRReader=new MICRReader(this);obj.ReceiptPrinter.onstatuschange=function(status){if(obj.onstatuschange!=null){obj.onstatuschange(status)}};obj.ReceiptPrinter.ononline=function(){if(obj.ononline!=null){obj.ononline()}};obj.ReceiptPrinter.onoffline=function(){if(obj.onoffline!=null){obj.onoffline()}};obj.ReceiptPrinter.onpoweroff=function(){if(obj.onpoweroff!=null){obj.onpoweroff()}};obj.ReceiptPrinter.oncoveropen=function(){if(obj.oncoveropen!=null){obj.oncoveropen()}};obj.ReceiptPrinter.onpaperok=function(){if(obj.onpaperok!=null){obj.onpaperok()}};obj.ReceiptPrinter.onpapernearend=function(){if(obj.onpapernearend!=null){obj.onpapernearend()}};obj.ReceiptPrinter.onpaperend=function(){if(obj.onpaperend!=null){obj.onpaperend()}};obj.ReceiptPrinter.ondrawerclosed=function(){if(obj.ondrawerclosed!=null){obj.ondrawerclosed()}};obj.ReceiptPrinter.ondraweropen=function(){if(obj.ondraweropen!=null){obj.ondraweropen()}}},setConnectionObject:function(connectionObj){this.connectionObj=connectionObj;this.ReceiptPrinter.setConnectionObject(this.connectionObj)},lock:function(){var data={type:\"lock\"};return this.send(data)},unlock:function(){var data={type:\"unlock\"};return this.send(data)},eject:function(){var data={type:\"eject\"};return this.send(data)},recover:function(){return this.ReceiptPrinter.recover()},reset:function(){this.ReceiptPrinter.force=this.force;var ret=this.ReceiptPrinter.reset();this.force=false;return ret},startMonitor:function(){return this.ReceiptPrinter.startMonitor()},stopMonitor:function(){return this.ReceiptPrinter.stopMonitor()},client_onreceive:function(res,sq){switch(res.eventtype){case\"slipprint\":case\"slipcancel\":this.SlipPrinter.fireOnReceive(res,sq);break;case\"endorseprint\":case\"endorsecancel\":this.EndorsePrinter.fireOnReceive(res,sq);break;case\"micrread\":case\"micrcleaning\":case\"micrcancel\":this.MICRReader.fireOnReceive(res,sq);break;case\"print\":var tmp=res;tmp.eventtype=this.ReceiptPrinter.methodName;this.fireOnReceive(tmp,sq);break;default:this.fireOnReceive(res,sq);break}},client_onxmlresult:function(res,sq){this.ReceiptPrinter.fireOnReceive(res,sq)},fireOnReceive:function(res,sq){if(this.onreceive==null){return}if(res==null){return}this.onreceive({eventtype:res.eventtype,success:res.success,code:res.code,status:res.status},sq)},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;return this.send(eventReq)},send:function(data){var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function ReceiptPrinter(parent){this.parent=parent;this.methodName=\"\";this.deviceID=this.parent.deviceID;this.ePosDev=this.parent.ePosDev;this.connectionObj=null;this.SUCCESS=\"SUCCESS\";this.CANCEL=\"CANCEL\";this.ERROR_PARAMMETER=\"ERROR_PARAMMETER\";this.ERROR_COMMAND=\"ERROR_COMMAND\";this.ERROR_DEVICE_NOT_FOUND=\"DeviceNotFound\";this.ERROR_DEVICE_BUSY=\"ERROR_DEVICE_BUSY\";this.ERROR_NOT_SUPPORTED=\"ERROR_NOT_SUPPORTED\";this.ERROR_COVER_OPEN=\"EPTR_COVER_OPEN\";this.ERROR_TIMEOUT=\"EX_TIMEOUT\";this.ERROR_AUTOMATICAL=\"EPTR_AUTOMATICAL\";this.ERROR_UNRECOVERABLE=\"EPTR_UNRECOVERABLE\";this.ERROR_BADPORT=\"EX_BADPORT\";this.SYSTEM_ERROR=\"SYSTEM_ERROR\";this.EPTR_CUTTER=\"EPTR_CUTTER\";this.EPTR_MECHANICAL=\"EPTR_MECHANICAL\";this.EPTR_REC_EMPTY=\"EPTR_REC_EMPTY\";this.EPTR_SCHEMAERROR=\"SchemaError\";this.EPTR_PRINT_SYSTEM_ERROR=\"PrintSystemError\"}ReceiptPrinter.prototype.setConnectionObject=function(connectionObj){this.connectionObj=connectionObj};ReceiptPrinter.prototype=new Printer();ReceiptPrinter.prototype.send=function(){if(this.methodName==\"\"){this.methodName=\"send\"}return Printer.prototype.send.apply(this,arguments)};ReceiptPrinter.prototype.print=function(canvas,cut,mode){this.methodName=\"print\";return Printer.prototype.print.apply(this,arguments)};ReceiptPrinter.prototype.recover=function(){this.methodName=\"recover\";return Printer.prototype.recover.apply(this,arguments)};ReceiptPrinter.prototype.reset=function(){this.methodName=\"reset\";return Printer.prototype.reset.apply(this,arguments)};ReceiptPrinter.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}var eventtype=this.methodName;var success=\"false\";var code=\"\";var status=this.ASB_NO_RESPONSE;if(res){var xml=res.resultdata;success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(xml);xml.match(/code\\s*=\\s*\"\\s*(\\S*)\\s*\"/);code=RegExp.$1;if(code==\"\"){code=(success)?\"SUCCESS\":\"ERROR_DEVICE_NOT_FOUND\"}xml.match(/status\\s*=\\s*\"\\s*(\\d+)\\s*\"/);status=parseInt(RegExp.$1)}if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}this.onreceive({eventtype:eventtype,success:success,code:code,status:status},sq);this.methodName=\"\"};function SlipPrinter(parent){this.parent=parent;this.SUCCESS=\"SUCCESS\";this.CANCEL=\"CANCEL\";this.ERROR_PARAMMETER=\"ERROR_PARAMMETER\";this.ERROR_COMMAND=\"ERROR_COMMAND\";this.ERROR_DEVICE_NOT_FOUND=\"ERROR_DEVICE_NOT_FOUND\";this.ERROR_DEVICE_BUSY=\"ERROR_DEVICE_BUSY\";this.ERROR_NOT_SUPPORTED=\"ERROR_NOT_SUPPORTED\";this.ERROR_COVER_OPEN=\"ERROR_COVER_OPEN\";this.ERROR_TIMEOUT=\"ERROR_TIMEOUT\";this.ERROR_AUTOMATICAL=\"ERROR_AUTOMATICAL\";this.ERROR_UNRECOVERABLE=\"ERROR_UNRECOVERABLE\";this.ERROR_BADPORT=\"ERROR_BADPORT\";this.SYSTEM_ERROR=\"SYSTEM_ERROR\";this.EPTR_CUTTER=\"EPTR_CUTTER\";this.EPTR_MECHANICAL=\"EPTR_MECHANICAL\";this.EPTR_REC_EMPTY=\"EPTR_REC_EMPTY\";this.EPTR_SCHEMAERROR=\"EPTR_SCHEMAERROR\";this.EPTR_PRINT_SYSTEM_ERROR=\"EPTR_PRINT_SYSTEM_ERROR\"}SlipPrinter.prototype=new ePOSBuilder();SlipPrinter.prototype.timeout=60000;SlipPrinter.prototype.send=function(){var xml=(arguments.length<1)?this.toString():arguments[1];var data={type:\"slipprint\",timeout:this.timeout,printdata:xml};var sequence=this.parent.send(data);this.setXmlString(\"\");return sequence};SlipPrinter.prototype.setXmlString=function(xml){this.message=xml};SlipPrinter.prototype.getXmlString=function(){return this.message};SlipPrinter.prototype.cancel=function(){var data={type:\"slipcancel\"};return this.parent.send(data)};SlipPrinter.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}if(res==null){return}var eventtype=\"\";switch(res.eventtype){case\"slipprint\":eventtype=\"send\";break;case\"slipcancel\":eventtype=\"cancel\";break;default:break}var code=res.code;if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}this.onreceive({eventtype:eventtype,success:res.success,code:code,status:res.status},sq)};function EndorsePrinter(parent){this.parent=parent;this.mode40cpl=false;this.SUCCESS=\"SUCCESS\";this.CANCEL=\"CANCEL\";this.ERROR_PARAMMETER=\"ERROR_PARAMMETER\";this.ERROR_COMMAND=\"ERROR_COMMAND\";this.ERROR_DEVICE_NOT_FOUND=\"ERROR_DEVICE_NOT_FOUND\";this.ERROR_DEVICE_BUSY=\"ERROR_DEVICE_BUSY\";this.ERROR_NOT_SUPPORTED=\"ERROR_NOT_SUPPORTED\";this.ERROR_COVER_OPEN=\"ERROR_COVER_OPEN\";this.ERROR_TIMEOUT=\"ERROR_TIMEOUT\";this.ERROR_AUTOMATICAL=\"ERROR_AUTOMATICAL\";this.ERROR_UNRECOVERABLE=\"ERROR_UNRECOVERABLE\";this.ERROR_BADPORT=\"ERROR_BADPORT\";this.SYSTEM_ERROR=\"SYSTEM_ERROR\";this.EPTR_CUTTER=\"EPTR_CUTTER\";this.EPTR_MECHANICAL=\"EPTR_MECHANICAL\";this.EPTR_REC_EMPTY=\"EPTR_REC_EMPTY\";this.EPTR_SCHEMAERROR=\"EPTR_SCHEMAERROR\";this.EPTR_PRINT_SYSTEM_ERROR=\"EPTR_PRINT_SYSTEM_ERROR\"}EndorsePrinter.prototype=new ePOSBuilder();EndorsePrinter.prototype.timeout=60000;EndorsePrinter.prototype.send=function(){var xml=(arguments.length<1)?this.toString():arguments[1];var data={type:\"endorseprint\",is40cplmode:this.mode40cpl,timeout:this.timeout,printdata:xml};var sequence=this.parent.send(data);this.setXmlString(\"\");return sequence};EndorsePrinter.prototype.setXmlString=function(xml){this.message=xml};EndorsePrinter.prototype.getXmlString=function(){return this.message};EndorsePrinter.prototype.cancel=function(){var data={type:\"endorsecancel\"};return this.parent.send(data)};EndorsePrinter.prototype.enable40cplmode=function(flag){this.mode40cpl=flag};EndorsePrinter.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}if(res==null){return}var eventtype=\"\";switch(res.eventtype){case\"endorseprint\":eventtype=\"send\";break;case\"endorsecancel\":eventtype=\"cancel\";break;default:break}var code=res.code;if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}this.onreceive({eventtype:eventtype,success:res.success,code:code,status:res.status},sq)};function MICRReader(parent){this.parent=parent;this.timeout=60000;this.FONT_E13B=\"MICR_E13B\";this.FONT_CMC7=\"MICR_CMC7\";this.SUCCESS=\"SUCCESS\";this.CANCEL=\"CANCEL\";this.ERROR_PARAMMETER=\"ERROR_PARAMMETER\";this.ERROR_COMMAND=\"ERROR_COMMAND\";this.ERROR_DEVICE_NOT_FOUND=\"ERROR_DEVICE_NOT_FOUND\";this.ERROR_DEVICE_BUSY=\"ERROR_DEVICE_BUSY\";this.ERROR_NOT_SUPPORTED=\"ERROR_NOT_SUPPORTED\";this.ERROR_COVER_OPEN=\"ERROR_COVER_OPEN\";this.ERROR_TIMEOUT=\"ERROR_TIMEOUT\";this.ERROR_AUTOMATICAL=\"ERROR_AUTOMATICAL\";this.ERROR_UNRECOVERABLE=\"ERROR_UNRECOVERABLE\";this.ERROR_BADPORT=\"ERROR_BADPORT\";this.SYSTEM_ERROR=\"SYSTEM_ERROR\";this.EMICR_ILLEGAL_LENGTH=\"EMICR_ILLEGAL_LENGTH\";this.EMICR_NO_MICR=\"EMICR_NO_MICR\";this.EMICR_RECOGNITION=\"EMICR_RECOGNITION\";this.EMICR_READ=\"EMICR_READ\";this.EMICR_NOISE_DETECTED=\"EMICR_NOISE_DETECTED\";this.EMICR_COVER_OPENED=\"EMICR_COVER_OPENED\";this.EMICR_PAPER_JAM=\"EMICR_PAPER_JAM\"}MICRReader.prototype.read=function(ignoreerror,font){var data={type:\"micrread\",ignoreerror:ignoreerror,font:font,timeout:this.timeout};return this.parent.send(data)};MICRReader.prototype.cleaning=function(){var data={type:\"micrcleaning\",timeout:this.timeout};return this.parent.send(data)};MICRReader.prototype.cancel=function(){var data={type:\"micrcancel\"};return this.parent.send(data)};MICRReader.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}if(res==null){return}var eventtype=\"\";switch(res.eventtype){case\"micrread\":eventtype=\"read\";break;case\"micrcleaning\":eventtype=\"cleaning\";break;case\"micrcancel\":eventtype=\"cancel\";break;default:break}var code=res.code;if(code==\"EX_ENPC_TIMEOUT\"){code=\"ERROR_DEVICE_BUSY\"}this.onreceive({eventtype:eventtype,success:res.success,code:code,status:res.status,data:res.data},sq)};function HybridPrinter2(deviceID,isCrypto,ePOSDeviceContext){this.deviceID=deviceID;this.isCrypto=isCrypto;this.ePosDev=ePOSDeviceContext;this.connectionObj=null;this.ReceiptPrinter=null;this.SlipPrinter2=null;this.ValidationPrinter=null;this.EndorsePrinter2=null;this.MICRReader2=null;this.currentPrinter=null;this.isMicrMode=false;this.FONT_A=\"font_a\";this.FONT_B=\"font_b\";this.FONT_C=\"font_c\";this.FONT_D=\"font_d\";this.FONT_E=\"font_e\";this.FONT_SPECIAL_A=\"special_a\";this.FONT_SPECIAL_B=\"special_b\";this.ALIGN_LEFT=\"left\";this.ALIGN_CENTER=\"center\";this.ALIGN_RIGHT=\"right\";this.COLOR_NONE=\"none\";this.COLOR_1=\"color_1\";this.COLOR_2=\"color_2\";this.COLOR_3=\"color_3\";this.COLOR_4=\"color_4\";this.FEED_PEELING=\"peeling\";this.FEED_CUTTING=\"cutting\";this.FEED_CURRENT_TOF=\"current_tof\";this.FEED_NEXT_TOF=\"next_tof\";this.MODE_MONO=\"mono\";this.MODE_GRAY16=\"gray16\";this.BARCODE_UPC_A=\"upc_a\";this.BARCODE_UPC_E=\"upc_e\";this.BARCODE_EAN13=\"ean13\";this.BARCODE_JAN13=\"jan13\";this.BARCODE_EAN8=\"ean8\";this.BARCODE_JAN8=\"jan8\";this.BARCODE_CODE39=\"code39\";this.BARCODE_ITF=\"itf\";this.BARCODE_CODABAR=\"codabar\";this.BARCODE_CODE93=\"code93\";this.BARCODE_CODE128=\"code128\";this.BARCODE_GS1_128=\"gs1_128\";this.BARCODE_GS1_DATABAR_OMNIDIRECTIONAL=\"gs1_databar_omnidirectional\";this.BARCODE_GS1_DATABAR_TRUNCATED=\"gs1_databar_truncated\";this.BARCODE_GS1_DATABAR_LIMITED=\"gs1_databar_limited\";this.BARCODE_GS1_DATABAR_EXPANDED=\"gs1_databar_expanded\";this.BARCODE_CODE128_AUTO=\"code128_auto\";this.HRI_NONE=\"none\";this.HRI_ABOVE=\"above\";this.HRI_BELOW=\"below\";this.HRI_BOTH=\"both\";this.SYMBOL_PDF417_STANDARD=\"pdf417_standard\";this.SYMBOL_PDF417_TRUNCATED=\"pdf417_truncated\";this.SYMBOL_QRCODE_MODEL_1=\"qrcode_model_1\";this.SYMBOL_QRCODE_MODEL_2=\"qrcode_model_2\";this.SYMBOL_QRCODE_MICRO=\"qrcode_micro\";this.SYMBOL_MAXICODE_MODE_2=\"maxicode_mode_2\";this.SYMBOL_MAXICODE_MODE_3=\"maxicode_mode_3\";this.SYMBOL_MAXICODE_MODE_4=\"maxicode_mode_4\";this.SYMBOL_MAXICODE_MODE_5=\"maxicode_mode_5\";this.SYMBOL_MAXICODE_MODE_6=\"maxicode_mode_6\";this.SYMBOL_GS1_DATABAR_STACKED=\"gs1_databar_stacked\";this.SYMBOL_GS1_DATABAR_STACKED_OMNIDIRECTIONAL=\"gs1_databar_stacked_omnidirectional\";this.SYMBOL_GS1_DATABAR_EXPANDED_STACKED=\"gs1_databar_expanded_stacked\";this.SYMBOL_AZTECCODE_FULLRANGE=\"azteccode_fullrange\";this.SYMBOL_AZTECCODE_COMPACT=\"azteccode_compact\";this.SYMBOL_DATAMATRIX_SQUARE=\"datamatrix_square\";this.SYMBOL_DATAMATRIX_RECTANGLE_8=\"datamatrix_rectangle_8\";this.SYMBOL_DATAMATRIX_RECTANGLE_12=\"datamatrix_rectangle_12\";this.SYMBOL_DATAMATRIX_RECTANGLE_16=\"datamatrix_rectangle_16\";this.LEVEL_0=\"level_0\";this.LEVEL_1=\"level_1\";this.LEVEL_2=\"level_2\";this.LEVEL_3=\"level_3\";this.LEVEL_4=\"level_4\";this.LEVEL_5=\"level_5\";this.LEVEL_6=\"level_6\";this.LEVEL_7=\"level_7\";this.LEVEL_8=\"level_8\";this.LEVEL_L=\"level_l\";this.LEVEL_M=\"level_m\";this.LEVEL_Q=\"level_q\";this.LEVEL_H=\"level_h\";this.LEVEL_DEFAULT=\"default\";this.LINE_THIN=\"thin\";this.LINE_MEDIUM=\"medium\";this.LINE_THICK=\"thick\";this.LINE_THIN_DOUBLE=\"thin_double\";this.LINE_MEDIUM_DOUBLE=\"medium_double\";this.LINE_THICK_DOUBLE=\"thick_double\";this.DIRECTION_LEFT_TO_RIGHT=\"left_to_right\";this.DIRECTION_BOTTOM_TO_TOP=\"bottom_to_top\";this.DIRECTION_RIGHT_TO_LEFT=\"right_to_left\";this.DIRECTION_TOP_TO_BOTTOM=\"top_to_bottom\";this.CUT_NO_FEED=\"no_feed\";this.CUT_FEED=\"feed\";this.CUT_RESERVE=\"reserve\";this.DRAWER_1=\"drawer_1\";this.DRAWER_2=\"drawer_2\";this.PULSE_100=\"pulse_100\";this.PULSE_200=\"pulse_200\";this.PULSE_300=\"pulse_300\";this.PULSE_400=\"pulse_400\";this.PULSE_500=\"pulse_500\";this.PATTERN_NONE=\"none\";this.PATTERN_0=\"pattern_0\";this.PATTERN_1=\"pattern_1\";this.PATTERN_2=\"pattern_2\";this.PATTERN_3=\"pattern_3\";this.PATTERN_4=\"pattern_4\";this.PATTERN_5=\"pattern_5\";this.PATTERN_6=\"pattern_6\";this.PATTERN_7=\"pattern_7\";this.PATTERN_8=\"pattern_8\";this.PATTERN_9=\"pattern_9\";this.PATTERN_10=\"pattern_10\";this.PATTERN_A=\"pattern_a\";this.PATTERN_B=\"pattern_b\";this.PATTERN_C=\"pattern_c\";this.PATTERN_D=\"pattern_d\";this.PATTERN_E=\"pattern_e\";this.PATTERN_ERROR=\"error\";this.PATTERN_PAPER_END=\"paper_end\";this.LAYOUT_RECEIPT=\"receipt\";this.LAYOUT_RECEIPT_BM=\"receipt_bm\";this.LAYOUT_LABEL=\"label\";this.LAYOUT_LABEL_BM=\"label_bm\";this.HALFTONE_DITHER=0;this.HALFTONE_ERROR_DIFFUSION=1;this.HALFTONE_THRESHOLD=2;this.ASB_NO_RESPONSE=1;this.ASB_PRINT_SUCCESS=2;this.ASB_DRAWER_KICK=4;this.ASB_OFF_LINE=8;this.ASB_COVER_OPEN=32;this.ASB_PAPER_FEED=64;this.ASB_WAIT_ON_LINE=256;this.ASB_PANEL_SWITCH=512;this.ASB_MECHANICAL_ERR=1024;this.ASB_AUTOCUTTER_ERR=2048;this.ASB_UNRECOVER_ERR=8192;this.ASB_AUTORECOVER_ERR=16384;this.ASB_INSERTION_WAIT_PAPER=65536;this.ASB_RECEIPT_NEAR_END=131072;this.ASB_REMOVAL_WAIT_PAPER=262144;this.ASB_RECEIPT_END=524288;this.ASB_TOF_NOPAPER=2097152;this.ASB_BOF_NOPAPER=4194304;this.ASB_SLIP_NO_SELECT=16777216;this.ASB_SLIP_IMPOSSIBLE_PRINT=33554432;this.ASB_EJD_NOPAPER=1073741824;this.ASB_VALIDATION_NO_SELECT=67108864;this.ASB_VALIDATION_IMPOSSIBLE_PRINT=134217728;this.ASB_SPOOLER_IS_STOPPED=2147483648;this.DRAWER_OPEN_LEVEL_LOW=0;this.DRAWER_OPEN_LEVEL_HIGH=1;this.SUCCESS=\"SUCCESS\";this.CANCEL=\"CANCEL\";this.ERROR_CANCEL_FAILED=\"ERROR_CANCEL_FAILED\";this.ERROR_PARAMMETER=\"ERROR_PARAMMETER\";this.ERROR_COMMAND=\"ERROR_COMMAND\";this.ERROR_DEVICE_NOT_FOUND=\"ERROR_DEVICE_NOT_FOUND\";this.ERROR_DEVICE_BUSY=\"ERROR_DEVICE_BUSY\";this.ERROR_NOT_SUPPORTED=\"ERROR_NOT_SUPPORTED\";this.ERROR_COVER_OPEN=\"ERROR_COVER_OPEN\";this.ERROR_TIMEOUT=\"ERROR_TIMEOUT\";this.ERROR_AUTOMATICAL=\"ERROR_AUTOMATICAL\";this.ERROR_UNRECOVERABLE=\"ERROR_UNRECOVERABLE\";this.ERROR_BADPORT=\"ERROR_BADPORT\";this.SYSTEM_ERROR=\"SYSTEM_ERROR\";this.EPTR_AUTOMATICAL=\"EPTR_AUTOMATICAL\";this.EPTR_COVER_OPEN=\"EPTR_COVER_OPEN\";this.EPTR_CUTTER=\"EPTR_CUTTER\";this.EPTR_MECHANICAL=\"EPTR_MECHANICAL\";this.EPTR_REC_EMPTY=\"EPTR_REC_EMPTY\";this.EPTR_UNRECOVERABLE=\"EPTR_UNRECOVERABLE\";this.EPTR_SCHEMAERROR=\"EPTR_SCHEMAERROR\";this.EPTR_PRINT_SYSTEM_ERROR=\"EPTR_PRINT_SYSTEM_ERROR\";this.EPTR_PAPER_PULLED_OUT=\"EPTR_PAPER_PULLED_OUT\";this.EMICR_ILLEGAL_LENGTH=\"EMICR_ILLEGAL_LENGTH\";this.EMICR_NO_MICR=\"EMICR_NO_MICR\";this.EMICR_RECOGNITION=\"EMICR_RECOGNITION\";this.EMICR_READ=\"EMICR_READ\";this.EMICR_NOISE_DETECTED=\"EMICR_NOISE_DETECTED\";this.EMICR_COVER_OPENED=\"EMICR_COVER_OPENED\";this.EMICR_PAPER_JAM=\"EMICR_PAPER_JAM\";this.EMICR_PAPER_PULLED_OUT=\"EMICR_PAPER_PULLED_OUT\";this.DeviceNotFound=\"DeviceNotFound\";this.EX_TIMEOUT=\"EX_TIMEOUT\";this.EX_BADPORT=\"EX_BADPORT\";this.SchemaError=\"SchemaError\";this.PrintSystemError=\"PrintSystemError\";this.PAPERTYPE_RECEIPT=0;this.PAPERTYPE_SLIP=1;this.PAPERTYPE_ENDORSE=2;this.PAPERTYPE_VALIDATION=3;this.FONT_E13B=\"MICR_E13B\";this.FONT_CMC7=\"MICR_CMC7\";this.halftone=this.HALFTONE_DITHER;this.brightness=1;this.force=false;this.drawerOpenLevel=this.DRAWER_OPEN_LEVEL_LOW;this.paperType=this.PAPERTYPE_RECEIPT;this.interval=3000;this.waitTime=500;this.enable40cplMode=true;this.onstatuschange=null;this.ononline=null;this.onoffline=null;this.onpoweroff=null;this.oncoveropen=null;this.onpaperok=null;this.onpapernearend=null;this.onpaperend=null;this.ondrawerclosed=null;this.ondraweropen=null;this.init(deviceID)}HybridPrinter2.prototype.init=function(deviceID){this.deviceID=deviceID;this.ReceiptPrinter=new ReceiptPrinter(this);this.SlipPrinter2=new SlipPrinter2(this);this.ValidationPrinter=new ValidationPrinter(this);this.EndorsePrinter2=new EndorsePrinter2(this);this.MICRReader2=new MICRReader2(this);this.currentPrinter=this.ReceiptPrinter;this.ReceiptPrinter.onstatuschange=function(status){if(this.parent.onstatuschange!=null){this.parent.onstatuschange(status)}};this.ReceiptPrinter.ononline=function(){if(this.parent.ononline!=null){this.parent.ononline()}};this.ReceiptPrinter.onoffline=function(){if(this.parent.onoffline!=null){this.parent.onoffline()}};this.ReceiptPrinter.onpoweroff=function(){if(this.parent.onpoweroff!=null){this.parent.onpoweroff()}};this.ReceiptPrinter.oncoveropen=function(){if(this.parent.oncoveropen!=null){this.parent.oncoveropen()}};this.ReceiptPrinter.oncoverok=function(){if(this.parent.oncoverok!=null){this.parent.oncoverok()}};this.ReceiptPrinter.onpaperok=function(){if(this.parent.onpaperok!=null){this.parent.onpaperok()}};this.ReceiptPrinter.onpapernearend=function(){if(this.parent.onpapernearend!=null){this.parent.onpapernearend()}};this.ReceiptPrinter.onpaperend=function(){if(this.parent.onpaperend!=null){this.parent.onpaperend()}};this.ReceiptPrinter.ondrawerclosed=function(){if(this.parent.ondrawerclosed!=null){this.parent.ondrawerclosed()}};this.ReceiptPrinter.ondraweropen=function(){if(this.parent.ondraweropen!=undefined){this.parent.ondraweropen()}};this.ReceiptPrinter.onreceive=function(res,sq){this.parent.fireOnReceive(res,sq)};this.SlipPrinter2.onreceive=function(res,sq){this.parent.fireOnReceive(res,sq)};this.EndorsePrinter2.onreceive=function(res,sq){this.parent.fireOnReceive(res,sq)};this.ValidationPrinter.onreceive=function(res,sq){this.parent.fireOnReceive(res,sq)};this.MICRReader2.onreceive=function(res,sq){this.parent.fireOnReceive(res,sq)}};HybridPrinter2.prototype.setConnectionObject=function(connectionObj){this.connectionObj=connectionObj;this.ReceiptPrinter.setConnectionObject(this.connectionObj)};HybridPrinter2.prototype.isValidFunction=function(paperType,supportPaperTypes){var isValid=false;var index=0;if(supportPaperTypes.length!=0){for(index=0;index<supportPaperTypes.length;index++){if(paperType==supportPaperTypes[index]){isValid=true;break}}}return isValid};HybridPrinter2.prototype.addText=function(data){this.currentPrinter.addText.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextLang=function(lang){this.currentPrinter.addTextLang.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextAlign=function(align){this.currentPrinter.addTextAlign.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextRotate=function(rotate){this.currentPrinter.addTextRotate.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextLineSpace=function(linespc){this.currentPrinter.addTextLineSpace.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextFont=function(font){this.currentPrinter.addTextFont.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextSmooth=function(smooth){this.currentPrinter.addTextSmooth.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextDouble=function(dw,dh){this.currentPrinter.addTextDouble.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextSize=function(width,height){this.currentPrinter.addTextSize.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextStyle=function(reverse,ul,em,color){this.currentPrinter.addTextStyle.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextPosition=function(x){this.currentPrinter.addTextPosition.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addTextVPosition=function(y){this.currentPrinter.addTextVPosition.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addFeedUnit=function(unit){this.currentPrinter.addFeedUnit.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addFeedLine=function(line){this.currentPrinter.addFeedLine.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addFeed=function(){this.currentPrinter.addFeed.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addFeedPosition=function(pos){this.currentPrinter.addFeedPosition.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addImage=function(context,x,y,width,height,color,mode){this.currentPrinter.halftone=this.halftone;this.currentPrinter.brightness=this.brightness;this.currentPrinter.addImage.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addLogo=function(key1,key2){this.currentPrinter.addLogo.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addBarcode=function(data,type,hri,font,width,height){this.currentPrinter.addBarcode.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addSymbol=function(data,type,level,width,height,size){this.currentPrinter.addSymbol.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addHLine=function(x1,x2,style){this.currentPrinter.addHLine.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addVLineBegin=function(x,style){this.currentPrinter.addVLineBegin.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addVLineEnd=function(x,style){this.currentPrinter.addVLineEnd.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPageBegin=function(){this.currentPrinter.addPageBegin.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPageEnd=function(){this.currentPrinter.addPageEnd.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPageArea=function(x,y,width,height){this.currentPrinter.addPageArea.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPageDirection=function(dir){this.currentPrinter.addPageDirection.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPagePosition=function(x,y){this.currentPrinter.addPagePosition.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPageLine=function(x1,y1,x2,y2,style){this.currentPrinter.addPageLine.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addPageRectangle=function(x1,y1,x2,y2,style){this.currentPrinter.addPageRectangle.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addCut=function(type){this.ReceiptPrinter.addCut.apply(this.ReceiptPrinter,arguments);return this};HybridPrinter2.prototype.addPulse=function(drawer,time){this.currentPrinter.addPulse.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addSound=function(pattern,repeat,cycle){this.currentPrinter.addSound.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.addLayout=function(type,width,height,margin_top,margin_bottom,offset_cut,offset_label){this.ReceiptPrinter.addLayout.apply(this.ReceiptPrinter,arguments);return this};HybridPrinter2.prototype.addRecovery=function(){this.ReceiptPrinter.addRecovery.apply(this.ReceiptPrinter,arguments);return this};HybridPrinter2.prototype.addReset=function(){this.ReceiptPrinter.addReset.apply(this.ReceiptPrinter,arguments);return this};HybridPrinter2.prototype.addCommand=function(data){this.currentPrinter.addCommand.apply(this.currentPrinter,arguments);return this};HybridPrinter2.prototype.recover=function(){this.ReceiptPrinter.recover.apply(this.ReceiptPrinter,arguments);return this};HybridPrinter2.prototype.reset=function(){this.ReceiptPrinter.force=this.force;var ret=this.ReceiptPrinter.reset.apply(this.ReceiptPrinter,arguments);this.force=false;return ret};HybridPrinter2.prototype.setMessage=function(message){this.currentPrinter.message=message};HybridPrinter2.prototype.getMessage=function(){return this.currentPrinter.message};HybridPrinter2.prototype.startMonitor=function(){var delay=this.interval;if((typeof(this.interval)!=\"number\")||delay<1000||6000<delay){delay=3000}this.ReceiptPrinter.interval=delay;return this.ReceiptPrinter.startMonitor()};HybridPrinter2.prototype.stopMonitor=function(){return this.ReceiptPrinter.stopMonitor()};HybridPrinter2.prototype.lock=function(){var data={type:\"lock\"};return this.send(data)};HybridPrinter2.prototype.unlock=function(){var data={type:\"unlock\"};return this.send(data)};HybridPrinter2.prototype.selectPaperType=function(paperType){if(this.isValidFunction(paperType,[this.PAPERTYPE_RECEIPT,this.PAPERTYPE_SLIP,this.PAPERTYPE_ENDORSE,this.PAPERTYPE_VALIDATION])!=true){throw new Error('Property \"paperType\" is invalid')}switch(paperType){case this.PAPERTYPE_RECEIPT:this.currentPrinter=this.ReceiptPrinter;break;case this.PAPERTYPE_SLIP:this.currentPrinter=this.SlipPrinter2;break;case this.PAPERTYPE_ENDORSE:this.currentPrinter=this.EndorsePrinter2;break;case this.PAPERTYPE_VALIDATION:this.currentPrinter=this.ValidationPrinter;break;default:this.currentPrinter=this.ReceiptPrinter;break}this.paperType=paperType;return this};HybridPrinter2.prototype.waitInsertion=function(timeout){if(this.isValidFunction(this.paperType,[this.PAPERTYPE_SLIP,this.PAPERTYPE_ENDORSE,this.PAPERTYPE_VALIDATION])!=true){throw new Error('Property \"paperType\" is invalid')}this.currentPrinter.waitTime=this.waitTime;var ret=this.currentPrinter.waitInsertion.apply(this.currentPrinter,arguments);return ret};HybridPrinter2.prototype.cancelInsertion=function(){var ret=null;if(this.isMicrMode){ret=this.MICRReader2.cancel.apply(this.MICRReader2,arguments)}else{if(this.isValidFunction(this.paperType,[this.PAPERTYPE_SLIP,this.PAPERTYPE_ENDORSE,this.PAPERTYPE_VALIDATION])!=true){throw new Error('Property \"paperType\" is invalid')}ret=this.currentPrinter.cancel.apply(this.currentPrinter,arguments)}return ret};HybridPrinter2.prototype.ejectPaper=function(){var data={type:\"eject\"};return this.send(data)};HybridPrinter2.prototype.sendData=function(timeout){this.currentPrinter.isCrypto=this.isCrypto;if((typeof(timeout)!=\"number\")||(timeout<1)||(timeout>1000000)){this.currentPrinter.timeout=0}else{this.currentPrinter.timeout=timeout}this.EndorsePrinter2.enable40cplmode(this.enable40cplMode);this.currentPrinter.force=this.force;var ret=this.currentPrinter.send();this.force=false;return ret};HybridPrinter2.prototype.print=function(canvas,cut,mode,timeout){if((typeof(timeout)!=\"number\")||(timeout<1)||(timeout>1000000)){this.ReceiptPrinter.timeout=0}else{this.ReceiptPrinter.timeout=timeout}this.ReceiptPrinter.print.apply(this.ReceiptPrinter,[canvas,cut,mode]);return this};HybridPrinter2.prototype.readMicrData=function(ignoreerror,micrFont,timeout){var ignoreerrorMicr=ignoreerror;var micrFontMicr=micrFont;if(typeof(ignoreerror)==\"undefined\"){ignoreerrorMicr=true}if(typeof(micrFont)==\"undefined\"){micrFontMicr=this.FONT_E13B}this.MICRReader2.timeout=timeout;this.MICRReader2.waitTime=this.waitTime;this.MICRReader2.read.apply(this.MICRReader2,[ignoreerrorMicr,micrFontMicr]);this.isMicrMode=true;return this};HybridPrinter2.prototype.cleanMicrReader=function(timeout){this.MICRReader2.timeout=timeout;this.MICRReader2.cleaning.apply(this.MICRReader2,[]);this.isMicrMode=true;return this};HybridPrinter2.prototype.client_onreceive=function(res,sq){switch(res.eventtype){case\"slipprint2\":case\"slipcancel\":case\"slipwaitinsertion\":this.SlipPrinter2.fireOnReceive(res,sq);break;case\"endorseprint2\":case\"endorsecancel\":case\"endorsewaitinsertion\":this.EndorsePrinter2.fireOnReceive(res,sq);break;case\"validationprint2\":case\"validationcancel\":case\"validationwaitinsertion\":this.ValidationPrinter.fireOnReceive(res,sq);break;case\"micrread\":case\"micrcleaning\":case\"micrcancel\":this.MICRReader2.fireOnReceive(res,sq);break;case\"print\":var tmp=res;tmp.eventtype=this.ReceiptPrinter.methodName;this.fireOnReceive(tmp,sq);break;default:this.fireOnReceive(res,sq);break}};HybridPrinter2.prototype.client_onxmlresult=function(res,sq){this.ReceiptPrinter.fireOnReceive(res,sq)};HybridPrinter2.prototype.fireOnReceive=function(res,sq){if(typeof(this.onreceive)==undefined){return}if(res==null){return}var eventtype=res.eventtype;var success=res.success;var code=res.code;var status=res.status;var data=res.data;switch(res.eventtype){case\"send\":eventtype=\"sendData\";if(code==this.SUCCESS){this.isMicrMode=false}break;case\"waitinsertion\":eventtype=\"waitInsertion\";if(code==this.SUCCESS){this.isMicrMode=false}break;case\"read\":eventtype=\"readMicrData\";if(code==this.SUCCESS){this.isMicrMode=true}break;case\"cleaning\":eventtype=\"cleanMicrReader\";if(code==this.SUCCESS){this.isMicrMode=true}break;case\"cancel\":eventtype=\"cancelInsertion\";break;case\"eject\":eventtype=\"ejectPaper\";if(code==this.SUCCESS){this.isMicrMode=false}break;default:break}switch(code){case\"EX_ENPC_TIMEOUT\":code=\"ERROR_DEVICE_BUSY\";break;case\"CANCEL\":this.isMicrMode=false;break;default:break}this.onreceive({method:eventtype,success:success,code:code,status:status,data:data},sq)};HybridPrinter2.prototype.callEvent=function(eventName,data){var eventReq=data;eventReq.type=eventName;return this.send(eventReq)};HybridPrinter2.prototype.send=function(data){var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence};function SlipPrinter2(parent){this.parent=parent}SlipPrinter2.prototype=new SlipPrinter();SlipPrinter2.prototype.timeout=60000;SlipPrinter2.prototype.waitTime=500;SlipPrinter2.prototype.send=function(){var xml=null;if(arguments.length<1){xml=this.toString()}else{xml=arguments[1]}if((typeof(this.timeout)!=\"number\")||(this.timeout<5000)||(this.timeout>1000000)){this.timeout=10000}var data={type:\"slipprint2\",timeout:this.timeout,printdata:xml};var sequence=this.parent.send(data);this.setXmlString(\"\");return sequence};SlipPrinter2.prototype.setXmlString=function(xml){this.message=xml};SlipPrinter2.prototype.getXmlString=function(){return this.message};SlipPrinter2.prototype.waitInsertion=function(timeout){if((typeof(timeout)!=\"number\")||(timeout<5000)||(timeout>900000)){this.timeout=60000}else{this.timeout=timeout}var slipWaitTime=this.waitTime;if((typeof(this.waitTime)!=\"number\")||(this.waitTime<0)||(this.waitTime>6400)){slipWaitTime=500}var data={type:\"slipwaitinsertion\",timeout:this.timeout,waittime:slipWaitTime};return this.parent.send(data)};SlipPrinter2.prototype.cancel=function(){var data={type:\"slipcancel\"};return this.parent.send(data)};SlipPrinter2.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}if(res==null){return}var eventtype=\"\";switch(res.eventtype){case\"slipprint2\":eventtype=\"send\";break;case\"slipcancel\":eventtype=\"cancel\";break;case\"slipwaitinsertion\":eventtype=\"waitinsertion\";break;default:break}this.onreceive({eventtype:eventtype,success:res.success,code:res.code,status:res.status},sq)};function EndorsePrinter2(parent){this.parent=parent;this.mode40cpl=false}EndorsePrinter2.prototype=new EndorsePrinter();EndorsePrinter2.prototype.timeout=60000;EndorsePrinter2.prototype.waitTime=500;EndorsePrinter2.prototype.send=function(){var xml=null;if(arguments.length<1){xml=this.toString()}else{xml=arguments[1]}if((typeof(this.timeout)!=\"number\")||(this.timeout<60000)||(this.timeout>900000)){this.timeout=60000}var data={type:\"endorseprint2\",is40cplmode:this.mode40cpl,timeout:this.timeout,printdata:xml};var sequence=this.parent.send(data);this.setXmlString(\"\");return sequence};EndorsePrinter2.prototype.setXmlString=function(xml){this.message=xml};EndorsePrinter2.prototype.getXmlString=function(){return this.message};EndorsePrinter2.prototype.waitInsertion=function(timeout){if((typeof(timeout)!=\"number\")||(timeout<5000)||(timeout>900000)){this.timeout=60000}else{this.timeout=timeout}var endorseWaitTime=this.waitTime;if((typeof(this.waitTime)!=\"number\")||(this.waitTime<0)||(this.waitTime>6400)){endorseWaitTime=500}var data={type:\"endorsewaitinsertion\",timeout:this.timeout,waittime:endorseWaitTime};return this.parent.send(data)};EndorsePrinter2.prototype.cancel=function(){var data={type:\"endorsecancel\"};return this.parent.send(data)};EndorsePrinter2.prototype.enable40cplmode=function(flag){this.mode40cpl=flag};EndorsePrinter2.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}if(res==null){return}var eventtype=\"\";switch(res.eventtype){case\"endorseprint2\":eventtype=\"send\";break;case\"endorsecancel\":eventtype=\"cancel\";break;case\"endorsewaitinsertion\":eventtype=\"waitinsertion\";break;default:break}this.onreceive({eventtype:eventtype,success:res.success,code:res.code,status:res.status},sq)};function MICRReader2(parent){this.parent=parent}MICRReader2.prototype=new MICRReader();MICRReader2.prototype.waitTime=500;MICRReader2.prototype.read=function(ignoreerror,font){if((typeof(this.timeout)!=\"number\")||(this.timeout<5000)||(this.timeout>900000)){this.timeout=60000}var micrWaitTime=this.waitTime;if((typeof(this.waitTime)!=\"number\")||(this.waitTime<0)||(this.waitTime>6400)){micrWaitTime=500}var data={type:\"micrread\",ignoreerror:ignoreerror,font:font,timeout:this.timeout,waittime:micrWaitTime};return this.parent.send(data)};MICRReader2.prototype.cleaning=function(){var micrWaitTime=this.waitTime;this.timeout=60000;if((typeof(this.waitTime)!=\"number\")||(this.waitTime<0)||(this.waitTime>6400)){micrWaitTime=500}var data={type:\"micrcleaning\",timeout:this.timeout,waittime:micrWaitTime};return this.parent.send(data)};function ValidationPrinter(parent){this.parent=parent}ValidationPrinter.prototype=new ePOSBuilder();ValidationPrinter.prototype.timeout=10000;ValidationPrinter.prototype.waitTime=500;ValidationPrinter.prototype.send=function(){var xml=null;if(arguments.length<1){xml=this.toString()}else{xml=arguments[1]}if((typeof(this.timeout)!=\"number\")||(this.timeout<5000)||(this.timeout>1000000)){this.timeout=10000}var data={type:\"validationprint2\",timeout:this.timeout,printdata:xml};var sequence=this.parent.send(data);this.setXmlString(\"\");return sequence};ValidationPrinter.prototype.setXmlString=function(xml){this.message=xml};ValidationPrinter.prototype.getXmlString=function(){return this.message};ValidationPrinter.prototype.waitInsertion=function(timeout){if((typeof(timeout)!=\"number\")||(timeout<5000)||(timeout>900000)){this.timeout=60000}else{this.timeout=timeout}var validationWaitTime=this.waitTime;if((typeof(this.waitTime)!=\"number\")||(this.waitTime<0)||(this.waitTime>6400)){validationWaitTime=500}var data={type:\"validationwaitinsertion\",timeout:this.timeout,waittime:validationWaitTime};return this.parent.send(data)};ValidationPrinter.prototype.cancel=function(){var data={type:\"validationcancel\"};return this.parent.send(data)};ValidationPrinter.prototype.fireOnReceive=function(res,sq){if(this.onreceive==null){return}if(res==null){return}var eventtype=\"\";switch(res.eventtype){case\"validationprint2\":eventtype=\"send\";break;case\"validationcancel\":eventtype=\"cancel\";break;case\"validationwaitinsertion\":eventtype=\"waitinsertion\";break;default:break}this.onreceive({eventtype:eventtype,success:res.success,code:res.code,status:res.status},sq)};function Scanner(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}Scanner.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},client_ondata:function(data){try{if(this.ondata==null){return}this.ondata(data)}catch(e){}return},client_onbinarydata:function(data){try{if(this.onbinarydata==null){return}this.onbinarydata(data)}catch(e){}return},client_setbinarymode:function(data){try{if(this.onbinarymode==null){return}this.onbinarymode(data)}catch(e){}return},setBinaryMode:function(enable){var str=\"\";if(enable==true){str=\"true\"}else{str=\"false\"}var data={type:\"setbinarymode\",binarymode:str};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence},callEvent:function(eventName,data){var eventReq=data;eventReq.type=eventName;var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,eventReq,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function SimpleSerial(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null}SimpleSerial.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},sendCommand:function(command){var data={type:\"sendcommand\",command:toHexBinary(command)};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence},client_oncommandreply:function(data){try{if(this.oncommandreply==null){return}var hexData=data.data;hexData=hexData.replace(/[0-9a-fA-F]{2}/g,function(c){var hexNum=parseInt(c,16);return String.fromCharCode(hexNum)});data.data=hexData;this.oncommandreply(data)}catch(e){}return}};function GermanyFiscalElement(deviceID,isCrypto){this.deviceID=deviceID;this.isCrypto=isCrypto;this.connectionObj=null;this.ongfereceive=null;this.onerror=null}GermanyFiscalElement.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},operate:function(jsonString,timeout){var data={type:\"operate\",timeout:timeout,requestdata:jsonString};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){throw e}return sequence},client_operateresult:function(data){if(this.ongfereceive==null){return}if(data.resultformat==\"Base64-encoded\"){try{data.resultdata=window.atob(data.resultdata);var uint8array=new Uint8Array(data.resultdata.length);for(var i=0;i<data.resultdata.length;i++){uint8array[i]=data.resultdata.charCodeAt(i)}var inflate=new Zlib.Inflate(uint8array);var charData=inflate.decompress();data.resultdata=[];for(var j=0;j<charData.length;j++){data.resultdata=data.resultdata+String.fromCharCode(charData[j])}}catch(e){if(this.onerror){this.onerror(e)}return}}try{this.ongfereceive(this.getResultObject(data))}catch(e){if(this.onerror){this.onerror(e)}}return},getResultObject:function(data){return({success:data.success,code:data.code,resultdata:data.resultdata,})},callEvent:function(eventName,data){var eventReq={type:eventName,data:data};var eposmsg=MessageFactory.getDeviceDataMessage(this.deviceID,data,this.isCrypto);var sequence=-1;try{this.connectionObj.emit(eposmsg);sequence=eposmsg.sequence}catch(e){}return sequence}};function Ofsc(){this.SERVICE_ID=\"OFSC\";this.callback=null;this.connectionObj=null}Ofsc.prototype={setConnectionObject:function(connectionObj){this.connectionObj=connectionObj},send:function(xml,timeout,crypto,callback){this.callback=callback;try{if(this.connectionObj.isUsableDeviceIF()){var data={type:\"print\",timeout:timeout,printdata:xml};var eposmsg=MessageFactory.getServiceMessage(this.SERVICE_ID,crypto,data);this.connectionObj.emit(eposmsg)}}catch(e){return}},notify:function(eposmsg){var data=null;if(eposmsg.isCrypto==\"1\"){data=MessageFactory.decrypt(eposmsg.data)}else{data=eposmsg.data}if(this.callback!=null){this.callback(data.resultdata)}},onxmlresult:function(xml){if(this.callback!=null){this.callback(xml)}}};function CookieIO(){this.TAG=\"EPSON_EPOSDEVICE_CLIENTID\";this.EXPIRES_MINUTES=5}CookieIO.prototype={writeId:function(value,address){if(address==\"\"){return}var encodedAddress=encodeURIComponent(address);var encodedTitle=encodeURIComponent(document.title);var hostname=location.hostname;var expired=this.getExpiredDate();document.cookie=this.TAG+\"_\"+hostname+\"_\"+encodedAddress+\"_\"+encodedTitle+\"=\"+encodeURIComponent(value)+\"; expires=\"+expired},readId:function(address){var id=\"\";var strCookie=document.cookie+\";\";var encodedAddress=encodeURIComponent(address);var encodedTitle=encodeURIComponent(document.title);var hostname=location.hostname;var searchKey=this.TAG+\"_\"+hostname+\"_\"+encodedAddress+\"_\"+encodedTitle+\"=\";var keyValueFrom=strCookie.indexOf(searchKey);if(keyValueFrom!=-1){keyValueFrom+=searchKey.length;var keyValueTo=strCookie.indexOf(\";\",keyValueFrom);id=decodeURIComponent(strCookie.substring(keyValueFrom,keyValueTo))}return id},getExpiredDate:function(){var expire=new Date();var nTime=expire.getTime();expire.setTime(nTime+(1000*60*this.EXPIRES_MINUTES));return expire.toUTCString()}};function DeviceObjElement(deviceId,isCrypto,deviceObject,callback){this.deviceId=deviceId;this.isCrypto=isCrypto;this.deviceObject=deviceObject;this.callback=callback}function DeviceObjElementMap(){this.elementList=new Array()}DeviceObjElementMap.prototype={add:function(element){this.elementList.push(element)},get:function(deviceId){var element=null;for(var i=0;i<this.elementList.length;i++){if(this.elementList[i].deviceId==deviceId){element=this.elementList[i];break}}return element},getByObj:function(deviceObject){var element=null;for(var i=0;i<this.elementList.length;i++){if(this.elementList[i].deviceObject==deviceObject){element=this.elementList[i];break}}return element},remove:function(deviceId){for(var i=0;i<this.elementList.length;i++){if(this.elementList[i].deviceId==deviceId){this.elementList.splice(i,1);break}}},removeAll:function(){this.elementList=[]},getElementList:function(){return this.elementList},};function ePOSDevice(){this.DEVICE_TYPE_SCANNER=\"type_scanner\";this.DEVICE_TYPE_KEYBOARD=\"type_keyboard\";this.DEVICE_TYPE_POSKEYBOARD=\"type_poskeyboard\";this.DEVICE_TYPE_MSR=\"type_msr\";this.DEVICE_TYPE_CAT=\"type_cat\";this.DEVICE_TYPE_CASH_CHANGER=\"type_cash_changer\";this.DEVICE_TYPE_PRINTER=\"type_printer\";this.DEVICE_TYPE_DISPLAY=\"type_display\";this.DEVICE_TYPE_SIMPLE_SERIAL=\"type_simple_serial\";this.DEVICE_TYPE_HYBRID_PRINTER=\"type_hybrid_printer\";this.DEVICE_TYPE_HYBRID_PRINTER2=\"type_hybrid_printer2\";this.DEVICE_TYPE_DT=\"type_dt\";this.DEVICE_TYPE_OTHER_PERIPHERAL=\"type_other_peripheral\";this.DEVICE_TYPE_GFE=\"type_storage\";this.RESULT_OK=\"OK\";this.ERROR_SYSTEM=\"SYSTEM_ERROR\";this.ERROR_DEVICE_IN_USE=\"DEVICE_IN_USE\";this.ERROR_DEVICE_OPEN=\"DEVICE_OPEN_ERROR\";this.ERROR_DEVICE_CLOSE=\"DEVICE_CLOSE_ERROR\";this.ERROR_DEVICE_NOT_OPEN=\"DEVICE_NOT_OPEN\";this.ERROR_DEVICE_NOT_FOUND=\"DEVICE_NOT_FOUND\";this.ERROR_PARAMETER=\"ERROR_PARAMETER\";this.IFPORT_EPOSDEVICE=8008;this.IFPORT_EPOSDEVICE_S=8043;this.CONNECT_TIMEOUT=15000;this.RECONNECT_TIMEOUT=3000;this.MAX_RECONNECT_RETRY=5;this.socket=null;this.connectionId=null;this.reconnectTimerId=null;this.reconnectTryCount=0;this.admin=\"\";this.location=\"\";this.recievedDataId=0;this.connectStartTime=0;this.waitRetryConnectId=0;this.conectionObj=new Connection();this.commBoxManager=new CommBoxManager();this.commBoxManager.setConnectionObject(this.conectionObj);this.devObjSelector=new DeviceObjectSelector();this.devObjSelector.setConnectionObject(this.conectionObj);this.devObjElmMap=new DeviceObjElementMap();this.ofsc=new Ofsc();this.ofsc.setConnectionObject(this.conectionObj);this.cookieIo=new CookieIO();this.gbox=new SocketGarbageBox();this.eposprint=false;this.cbCheckEposPrintService=null;var self=this;window.onbeforeunload=function(){self.disconnect()};window.onpagehide=function(){self.disconnect()}}ePOSDevice.prototype={connect:function(address,port,callback,options){if((this.conectionObj.status(this.conectionObj.IF_EPOSDEVICE)!=this.conectionObj.DISCONNECT)||(this.conectionObj.status(this.conectionObj.IF_EPOSPRINT)!=this.conectionObj.DISCONNECT)){this.disconnect()}this.connectStartTime=new Date().getTime();var protocol=(port==this.IFPORT_EPOSDEVICE)?\"http\":\"https\";this.conectionObj.setAddress(protocol,address,port);this.conectionObj.registCallback(callback);if(arguments.length>=4){this.eposprint=options.eposprint}else{this.eposprint=false}var self=this;if(this.eposprint){var selfofProb=this.conectionObj;this.conectionObj.probeWebServiceIF(function(accessTime){var result=self.ERROR_PARAMETER;if(selfofProb.isUsablePrintIF()){result=self.RESULT_OK}callback(result)})}else{this.connectBySocketIo(this.CONNECT_TIMEOUT)}},isConnected:function(){var devIsConnect=false;var wsIsConnect=false;switch(this.conectionObj.status(this.conectionObj.IF_EPOSDEVICE)){case this.conectionObj.CONNECT:case this.conectionObj.RECONNECTING:devIsConnect=true;break;case this.conectionObj.DISCONNECT:break}if(this.conectionObj.status(this.conectionObj.IF_EPOSPRINT)==this.conectionObj.CONNECT){wsIsConnect=true}return devIsConnect|wsIsConnect},disconnect:function(){var eposmsg=MessageFactory.getDisconnectMessage(this.connectionId);this.conectionObj.emit(eposmsg);this.cleanup()},createDevice:function(deviceId,deviceType,options,callback){try{if(!this.isConnected()){throw new Error(this.ERROR_SYSTEM)}if(this.devObjElmMap.get(deviceId)!=null){throw new Error(this.ERROR_DEVICE_IN_USE)}if(!this.devObjSelector.isSelectable(deviceType)){throw new Error(this.ERROR_DEVICE_NOT_FOUND)}var isCrypto=false;var isBufferEnable=false;if(typeof(options)==\"boolean\"){isCrypto=options}else{if(typeof(options.crypto)==\"boolean\"){isCrypto=options.crypto}if(typeof(options.buffer)==\"boolean\"){isBufferEnable=options.buffer}}if(deviceType==this.DEVICE_TYPE_DT){isCrypto=true;deviceId=\"local_dt\"}var deviceObject=this.devObjSelector.select(deviceId,deviceType,options.driver,isCrypto,this);deviceObject.setConnectionObject(this.conectionObj);var element=new DeviceObjElement(deviceId,isCrypto,deviceObject,callback);this.devObjElmMap.add(element);if(this.conectionObj.isUsableDeviceIF()){var eposmsg=MessageFactory.getOpenDeviceMessage(deviceId,deviceType,isCrypto,isBufferEnable);this.conectionObj.emit(eposmsg)}else{var self=this;this.checkEposPrintService(deviceId,deviceType,function(result){if(result==self.RESULT_OK){callback(deviceObject,self.RESULT_OK)}else{callback(null,self.ERROR_DEVICE_NOT_FOUND)}})}}catch(e){var message=e.message;if((message==null)||(message==\"\")){message=this.ERROR_DEVICE_OPEN}if(callback!=null){callback(null,message)}}},deleteDevice:function(deviceObject,callback){try{var element=this.devObjElmMap.getByObj(deviceObject);if(element==null){throw new Error(this.ERROR_DEVICE_NOT_OPEN)}if(this.conectionObj.isUsableDeviceIF()){element.callback=callback;var eposmsg=MessageFactory.getCloseDeviceMessage(element.deviceId);this.conectionObj.emit(eposmsg)}else{try{deviceObject.finalize()}catch(e){}this.devObjElmMap.remove(element.deviceId);callback(this.RESULT_OK)}}catch(e){var message=e.message;if((message==null)||(message==\"\")){message=this.ERROR_DEVICE_CLOSE}if(callback!=null){callback(message)}}},getAdmin:function(){return this.admin},getLocation:function(){return this.location},sendOfscXml:function(xml,timeout,crypto,callback){this.ofsc.send(xml,timeout,crypto,callback)},getCommBoxManager:function(){if(this.conectionObj.status(this.conectionObj.IF_EPOSDEVICE)!=this.conectionObj.CONNECT){return null}return this.commBoxManager},cleanup:function(){if(this.waitRetryConnectId!=0){clearTimeout(this.waitRetryConnectId);this.waitRetryConnectId=0}this.connectStartTime=0;this.gbox.stock(this.socket);this.gbox.dispose();var devObjList=this.devObjElmMap.getElementList();devObjList.forEach(function(obj){try{obj.deviceObject.finalize()}catch(e){}});devObjList=null;this.devObjElmMap.removeAll();if((this.ondisconnect!=null)&&(this.conectionObj.status(this.conectionObj.IF_EPOSDEVICE)!=this.conectionObj.DISCONNECT||this.conectionObj.status(this.conectionObj.IF_EPOSPRINT)!=this.conectionObj.DISCONNECT)){this.ondisconnect()}this.cookieIo.writeId(\"\",this.conectionObj.address_p);this.conectionObj.changeStatus(this.conectionObj.IF_ALL,this.conectionObj.DISCONNECT);this.socket=null;this.conectionObj.setSocket(null);this.connectionId=null;this.conectionObj.setAddress(\"\",\"\",\"\");if(this.reconnectTimerId!=null){clearInterval(this.reconnectTimerId)}this.reconnectTimerId=null;this.reconnectTryCount=0;this.admin=\"\";this.location=\"\";this.recievedDataId=0;this.eposprint=false},connectBySocketIo:function(timeout){var selfofProb=this.conectionObj;var url=selfofProb.getSocketIoURL();this.socket=io.connect(url,{reconnect:false,\"connect timeout\":timeout,\"force new connection\":true});this.conectionObj.setSocket(this.socket);var self=this;this.socket.on(\"connect\",function(data){try{self.gbox.dispose()}catch(e){}});this.socket.on(\"close\",function(){selfofProb.changeStatus(selfofProb.IF_EPOSDEVICE,tselfofProb.DISCONNECT)});this.socket.on(\"disconnect\",function(data){try{if(selfofProb.status(selfofProb.IF_EPOSDEVICE)==selfofProb.RECONNECTING){return}else{if(self.cookieIo.readId(self.conectionObj.address_p)==\"\"&&self.connectionId==null){self.cleanup()}else{self.startReconnectAction()}}}catch(e){}});this.socket.on(\"error\",function(){try{selfofProb.probeWebServiceIF(function(accessTime){if(selfofProb.isUsablePrintIF()){self.eposprint=true;selfofProb.registIFAccessResult(selfofProb.IF_EPOSDEVICE,selfofProb.ACCESS_NONE)}else{selfofProb.changeStatus(selfofProb.IF_EPOSDEVICE,selfofProb.DISCONNECT);selfofProb.registIFAccessResult(selfofProb.IF_EPOSDEVICE,selfofProb.ACCESS_TIMEOUT)}})}catch(e){}});this.socket.on(\"connect_failed\",function(){try{selfofProb.probeWebServiceIF(function(accessTime){if(selfofProb.isUsablePrintIF()){self.eposprint=true;selfofProb.registIFAccessResult(selfofProb.IF_EPOSDEVICE,selfofProb.ACCESS_NONE)}else{selfofProb.changeStatus(selfofProb.IF_EPOSDEVICE,selfofProb.DISCONNECT);selfofProb.registIFAccessResult(selfofProb.IF_EPOSDEVICE,selfofProb.ACCESS_TIMEOUT)}})}catch(e){}});this.socket.on(\"message\",function(data){try{var eposmsg=MessageFactory.parseRequestMessage(data);if(eposmsg.data_id!=\"\"){self.recievedDataId=eposmsg.data_id}switch(eposmsg.request){case eposmsg.REQUEST.CONNECT:self.procConnect(eposmsg);break;case eposmsg.REQUEST.PUBKEY:self.procPubkey(eposmsg);break;case eposmsg.REQUEST.ADMININFO:self.procAdminInfo(eposmsg);break;case eposmsg.REQUEST.RECONNECT:self.procReconnect(eposmsg);break;case eposmsg.REQUEST.DISCONNECT:self.procDisconnect(eposmsg);break;case eposmsg.REQUEST.OPENDEVICE:self.procOpenDevice(eposmsg);break;case eposmsg.REQUEST.CLOSEDEVICE:self.procCloseDevice(eposmsg);break;case eposmsg.REQUEST.DEVICEDATA:self.procDeviceData(eposmsg);break;case eposmsg.REQUEST.SERVICEDATA:self.procServiceData(eposmsg);break;case eposmsg.REQUEST.OPENCOMMBOX:self.procOpenCommBox(eposmsg);break;case eposmsg.REQUEST.CLOSECOMMBOX:self.procCloseCommBox(eposmsg);break;case eposmsg.REQUEST.COMMDATA:self.procCommBoxData(eposmsg);break;case eposmsg.REQUEST.ERROR:self.procError(eposmsg);break;default:return}}catch(e){}})},procConnect:function(eposmsg){try{if(this.reconnectTimerId!=null){clearInterval(this.reconnectTimerId);this.reconnectTimerId=null}var response=null;var prevConnectionId=this.cookieIo.readId(this.conectionObj.address_p);if(eposmsg.data.protocol_version<2){response=MessageFactory.getPubkeyMessage(eposmsg.data.prime,eposmsg.data.key);this.conectionObj.emit(response)}else{if(this.connectionId!=null){response=MessageFactory.getReconnectMessage(this.connectionId,eposmsg.data.client_id,this.recievedDataId);this.conectionObj.emit(response)}else{if(prevConnectionId!=\"\"){response=MessageFactory.getDisconnectMessage(prevConnectionId);this.conectionObj.emit(response);response=MessageFactory.getPubkeyMessage(eposmsg.data.prime,eposmsg.data.key);this.conectionObj.emit(response)}else{response=MessageFactory.getPubkeyMessage(eposmsg.data.prime,eposmsg.data.key);this.conectionObj.emit(response)}}}this.cookieIo.writeId(eposmsg.data.client_id,this.conectionObj.address_p);this.connectionId=eposmsg.data.client_id}catch(e){this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_ERROR);this.cleanup()}},procPubkey:function(eposmsg){try{if(eposmsg.code==\"SHARED_KEY_MISMATCH_ERROR\"){var mismatchErrTime=new Date().getTime();var mismatchTimeout=0;if(this.connectStartTime!=0){mismatchTimeout=mismatchErrTime-this.connectStartTime;if(mismatchTimeout<this.CONNECT_TIMEOUT){var self=this;this.gbox.stock(this.socket);this.connectionId=null;this.waitRetryConnectId=setTimeout(function(){self.connectBySocketIo(self.CONNECT_TIMEOUT-mismatchTimeout)},100)}else{this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_TIMEOUT);this.cleanup()}}else{this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_TIMEOUT);this.cleanup()}}else{if(eposmsg.code==\"PARAM_ERROR\"){this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_ERROR);this.cleanup()}else{var response=MessageFactory.getAdminInfoMessage();this.conectionObj.emit(response)}}}catch(e){this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_ERROR);this.cleanup()}},procAdminInfo:function(eposmsg){if(this.eposprint){return}if(eposmsg.code!=this.RESULT_OK){this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_ERROR);return}this.admin=eposmsg.data.admin_name;this.location=eposmsg.data.location;this.conectionObj.registIFAccessResult(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.ACCESS_OK)},procReconnect:function(eposmsg){if(this.conectionObj.status(this.conectionObj.IF_EPOSDEVICE)!=this.conectionObj.RECONNECTING){return}if(eposmsg.code==this.RESULT_OK){this.conectionObj.changeStatus(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.CONNECT);if(this.onreconnect!=null){this.onreconnect()}}else{this.cleanup()}},procDisconnect:function(eposmsg){},procOpenDevice:function(eposmsg){var deviceId=eposmsg.deviceId;try{var element=this.devObjElmMap.get(deviceId);if(eposmsg.code==this.RESULT_OK){if(element.callback!=null){element.callback(element.deviceObject,eposmsg.code)}}else{if(element.callback!=null){element.callback(null,eposmsg.code)}this.devObjElmMap.remove(deviceId)}}catch(e){if(this.onerror!=null){this.onerror(\"0\",deviceId,this.ERROR_SYSTEM,null)}}},procCloseDevice:function(eposmsg){var deviceId=eposmsg.deviceId;try{if(eposmsg.code==this.RESULT_OK){var element=this.devObjElmMap.get(deviceId);if(element.callback!=null){element.callback(eposmsg.code)}try{element.deviceObject.finalize()}catch(e){}this.devObjElmMap.remove(deviceId)}}catch(e){if(this.onerror!=null){this.onerror(\"0\",deviceId,this.ERROR_SYSTEM,null)}}},procDeviceData:function(eposmsg){var deviceId=eposmsg.deviceId;var sequence=eposmsg.sequence;var data=eposmsg.data;try{var devObjElm=this.devObjElmMap.get(deviceId);if(devObjElm.isCrypto){data=MessageFactory.decrypt(data)}var deviceObject=devObjElm.deviceObject;var method=\"client_\"+data.type;try{if(deviceObject instanceof OtherPeripheral){deviceObject.client_onreceive(data,sequence)}else{eval(\"deviceObject.\"+method+\"(data, sequence)\")}}catch(e){eval(\"deviceObject.\"+data.type+\"(data, sequence)\")}}catch(e){if(this.onerror!=null){this.onerror(sequence,deviceId,this.ERROR_SYSTEM,null)}}},procServiceData:function(eposmsg){try{switch(eposmsg.serviceId){case\"OFSC\":this.ofsc.notify(eposmsg);break;default:break}}catch(e){if(this.onerror!=null){this.onerror(eposmsg.sequence,eposmsg.serviceId,this.ERROR_SYSTEM,null)}}},procOpenCommBox:function(eposmsg){var sequence=eposmsg.sequence;try{this.commBoxManager.client_opencommbox(eposmsg.data,sequence)}catch(e){if(this.onerror!=null){this.onerror(sequence,\"\",this.ERROR_SYSTEM,null)}}},procCloseCommBox:function(eposmsg){var sequence=eposmsg.sequence;try{this.commBoxManager.client_closecommbox(eposmsg.data,sequence)}catch(e){if(this.onerror!=null){this.onerror(sequence,\"\",this.ERROR_SYSTEM,null)}}},procCommBoxData:function(eposmsg){var sequence=eposmsg.sequence;try{this.commBoxManager.executeCommDataCallback(eposmsg.data,sequence)}catch(e){if(this.onerror!=null){this.onerror(sequence,\"\",this.ERROR_SYSTEM,null)}}},procError:function(eposmsg){try{if(this.onerror!=null){this.onerror(eposmsg.sequence,eposmsg.deviceId,eposmsg.code,eposmsg.data)}}catch(e){}},startReconnectAction:function(){if(this.conectionObj.status(this.conectionObj.IF_EPOSDEVICE)==this.conectionObj.RECONNECTING){return}this.conectionObj.changeStatus(this.conectionObj.IF_EPOSDEVICE,this.conectionObj.RECONNECTING);this.reconnectTryCount=0;var self=this;this.reconnectTimerId=setInterval(function(){if(self.socket!=null){self.gbox.stock(self.socket)}if(self.reconnectTryCount==self.MAX_RECONNECT_RETRY){clearInterval(self.reconnectTimerId);self.cleanup();return}if(self.conectionObj.status(self.conectionObj.IF_EPOSDEVICE)==self.conectionObj.RECONNECTING){self.connectBySocketIo(self.RECONNECT_TIMEOUT)}self.reconnectTryCount++},self.RECONNECT_TIMEOUT);if(this.reconnectTryCount==0&&this.onreconnecting!=null){this.onreconnecting()}},checkEposPrintService:function(deviceId,deviceType,callback){this.cbCheckEposPrintService=callback;var self=this;var OK=\"OK\";var SSL_CONNECT_OK=\"SSL_CONNECT_OK\";var ERROR_TIMEOUT=\"ERROR_TIMEOUT\";var ERROR_PARAMETER=\"ERROR_PARAMETER\";var ERROR_SYSTEM=\"SYSTEM_ERROR\";var postUrl=null;var printUrl=this.conectionObj.getAddressWithProtocol()+\"/cgi-bin/epos/service.cgi?devid=\"+deviceId+\"&timeout=10000\";var displayUrl=this.conectionObj.getAddressWithProtocol()+\"/cgi-bin/eposDisp/service.cgi?devid=\"+deviceId+\"&timeout=10000\";var postData=null;var printData='<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><epos-print xmlns=\"http://www.epson-pos.com/schemas/2011/03/epos-print\"></epos-print></s:Body></s:Envelope>';var displayData='<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><epos-display xmlns=\"http://www.epson-pos.com/schemas/2012/09/epos-display\"></epos-display></s:Body></s:Envelope>';var xhr=null;var tid;var success;if(deviceType==this.DEVICE_TYPE_DISPLAY){postUrl=displayUrl;postData=displayData}else{postUrl=printUrl;postData=printData}if(window.XDomainRequest){try{xhr=new XDomainRequest();xhr.open(\"POST\",postUrl);xhr.onload=function(){if(self.cbCheckEposPrintService!=null){if(/response/.test(xhr.responseText)){success=/success\\s*=\\s*\"\\s*(1|true)\\s*\"/.test(xhr.responseText);if(success){self.cbCheckEposPrintService(OK);self.cbCheckEposPrintService=null}else{self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}}else{self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}}};xhr.onerror=function(){if(self.cbCheckEposPrintService!=null){self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}};xhr.ontimeout=function(){if(self.cbCheckEposPrintService!=null){self.cbCheckEposPrintService(ERROR_TIMEOUT);self.cbCheckEposPrintService=null}};xhr.onprogress=function(){};xhr.send(postData)}catch(e){if(self.cbCheckEposPrintService!=null){self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}}}else{try{xhr=new XMLHttpRequest();xhr.open(\"POST\",postUrl,true);xhr.setRequestHeader(\"Content-Type\",\"text/xml; charset=utf-8\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jun 1970 00:00:00 GMT\");xhr.setRequestHeader(\"SOAPAction\",'\"\"');xhr.onreadystatechange=function(){if(xhr.readyState==4){clearTimeout(tid);if(self.cbCheckEposPrintService!=null){if((xhr.status==200)&&(xhr.responseXML)){var res=xhr.responseXML.getElementsByTagName(\"response\");if(res.length<=0){success=false}else{success=/^(1|true)$/.test(res[0].getAttribute(\"success\"))}if(success){self.cbCheckEposPrintService(OK);self.cbCheckEposPrintService=null}else{self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}}else{self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}}}};tid=setTimeout(function(){xhr.abort();if(self.cbCheckEposPrintService!=null){self.cbCheckEposPrintService(ERROR_TIMEOUT);self.cbCheckEposPrintService=null}},5000);xhr.timeout=10000;xhr.send(postData)}catch(e){if(self.cbCheckEposPrintService!=null){self.cbCheckEposPrintService(ERROR_PARAMETER);self.cbCheckEposPrintService=null}}}}};function SocketGarbageBox(){this.box=new Array()}SocketGarbageBox.prototype={stock:function(socket){if(socket==null){return}socket.removeAllListeners(\"connect\");socket.removeAllListeners(\"close\");socket.removeAllListeners(\"disconnect\");socket.removeAllListeners(\"error\");socket.removeAllListeners(\"connect_failed\");socket.removeAllListeners(\"message\");var clone=function(){};clone.prototype=socket;this.box.push(clone)},dispose:function(){while(0<this.box.length){var socket=this.box.pop();try{socket.disconnect();delete socket}catch(e){}}}};function Connection(){this.OK=\"OK\";this.SSL_CONNECT_OK=\"SSL_CONNECT_OK\";this.ERROR_TIMEOUT=\"ERROR_TIMEOUT\";this.ERROR_PARAMETER=\"ERROR_PARAMETER\";this.ERROR_SYSTEM=\"SYSTEM_ERROR\";this.socket_p=null;this.address_p=\"\";this.protocol_p=\"\";this.port_p=\"\";this.callback_p=null;this.usableIF_p=0;this.ws_status_p=2;this.dev_status_p=2;this.IF_EPOSDEVICE=1;this.IF_EPOSPRINT=2;this.IF_EPOSDISPLAY=4;this.IF_ALL=7;this.ACCESS_OK=\"OK\";this.ACCESS_ERROR=\"ERROR\";this.ACCESS_TIMEOUT=\"TIMEOUT\";this.ACCESS_NONE=\"NONE\";this.CONNECT=1;this.DISCONNECT=2;this.RECONNECTING=4}Connection.prototype.probe=function(url,postdata,callback){var probeSelf=this;var xhr=null;var tid;if(window.XDomainRequest){try{xhr=new XDomainRequest();xhr.open(\"POST\",url);xhr.onload=function(){callback(probeSelf.OK)};xhr.onerror=function(){callback(probeSelf.ERROR_PARAMETER)};xhr.ontimeout=function(){callback(probeSelf.ERROR_TIMEOUT)};xhr.onprogress=function(){};xhr.send(postdata)}catch(e){callback(this.ERROR_PARAMETER)}}else{try{xhr=new XMLHttpRequest();xhr.open(\"POST\",url,true);xhr.setRequestHeader(\"Content-Type\",\"text/xml; charset=utf-8\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jun 1970 00:00:00 GMT\");xhr.setRequestHeader(\"SOAPAction\",'\"\"');xhr.onreadystatechange=function(){if(xhr.readyState==4){clearTimeout(tid);if(xhr.status==200){callback(probeSelf.OK)}else{callback(probeSelf.ERROR_PARAMETER)}}};tid=setTimeout(function(){xhr.abort();callback(probeSelf.ERROR_TIMEOUT)},5000);xhr.timeout=10000;xhr.send(postdata)}catch(e){callback(this.ERROR_PARAMETER)}}};Connection.prototype.probeWebServiceIF=function(callback){var startTime=(new Date()).getTime();var isPrintReceive=false;var isDisplayReceive=false;var isNotified=false;var probeSelf=this;var printUrl=this.getAddressWithProtocol()+\"/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000\";var printData='<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><epos-print xmlns=\"http://www.epson-pos.com/schemas/2011/03/epos-print\"></epos-print></s:Body></s:Envelope>';this.probe(printUrl,printData,function(code){var result=probeSelf.ACCESS_ERROR;if(code==probeSelf.OK){result=probeSelf.ACCESS_OK}probeSelf.registIFAccessResult(probeSelf.IF_EPOSPRINT,result);isPrintReceive=true;if(isPrintReceive&&isDisplayReceive){if(!isNotified){isNotified=true;callback(new Date().getTime()-startTime)}}});var displayUrl=this.getAddressWithProtocol()+\"/cgi-bin/eposDisp/service.cgi?devid=local_display&timeout=10000\";var displayData='<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><epos-display xmlns=\"http://www.epson-pos.com/schemas/2012/09/epos-display\"></epos-display></s:Body></s:Envelope>';this.probe(displayUrl,displayData,function(code){var result=probeSelf.ACCESS_ERROR;if(code==probeSelf.OK){result=probeSelf.ACCESS_OK}probeSelf.registIFAccessResult(probeSelf.IF_EPOSDISPLAY,result);isDisplayReceive=true;if(isPrintReceive&&isDisplayReceive){if(!isNotified){isNotified=true;callback(new Date().getTime()-startTime)}}})};Connection.prototype.setSocket=function(socket){this.socket_p=socket};Connection.prototype.emit=function(eposmsg){try{if(this.socket_p==null){return}this.socket_p.emit(\"message\",eposmsg.toTransmissionForm())}catch(e){throw new Error(this.ERROR_SYSTEM)}};Connection.prototype.setAddress=function(protocol,address,port){this.protocol_p=protocol;this.address_p=address;this.port_p=port;this.usableIF_p=0};Connection.prototype.getAddressWithProtocol=function(){return this.protocol_p+\"://\"+this.address_p};Connection.prototype.getSocketIoURL=function(){return this.getAddressWithProtocol()+\":\"+this.port_p};Connection.prototype.registCallback=function(callback){if(typeof(callback)==\"function\"){this.callback_p=callback}};Connection.prototype.changeStatus=function(target,status){switch(target){case this.IF_ALL:this.dev_status_p=status;this.ws_status_p=status;break;case this.IF_EPOSDEVICE:this.dev_status_p=status;break;default:this.ws_status_p=status;break}};Connection.prototype.status=function(target){if(target==this.IF_EPOSDEVICE){return this.dev_status_p}else{return this.ws_status_p}};Connection.prototype.isUsableDeviceIF=function(){return((this.usableIF_p&this.IF_EPOSDEVICE)==this.IF_EPOSDEVICE)};Connection.prototype.isUsablePrintIF=function(){if(this.isUsableDeviceIF()){return true}return((this.usableIF_p&this.IF_EPOSPRINT)==this.IF_EPOSPRINT)};Connection.prototype.isUsableDisplayIF=function(){if(this.isUsableDeviceIF()){return true}return((this.usableIF_p&this.IF_EPOSDISPLAY)==this.IF_EPOSDISPLAY)};Connection.prototype.registIFAccessResult=function(type,code){if(code==this.ACCESS_OK){this.changeStatus(type,this.CONNECT);this.usableIF_p|=type}if(type==this.IF_EPOSDEVICE){var result=this.ERROR_PARAMETER;if(this.usableIF_p&this.IF_ALL){if(this.protocol_p==\"http\"){result=this.OK}else{result=this.SSL_CONNECT_OK}}if(code==this.ACCESS_TIMEOUT){result=this.ERROR_TIMEOUT}if(this.callback_p!=null){try{this.callback_p(result)}catch(e){}this.callback_p=null}}};function ePosCrypto(){this.pubkey_c=\"\";this.secretKey=\"\"}ePosCrypto.prototype={genClientKeys:function(arg_prime_s,arg_pubkey_s){var g=str2bigInt(\"2\",10);var prime_c=str2bigInt(arg_prime_s,16);var privkey_c=randBigInt(64,0);this.pubkey_c=powMod(g,privkey_c,prime_c);var intPubkey=str2bigInt(arg_pubkey_s,16);var modNum=powMod(intPubkey,privkey_c,prime_c);var strModNum=bigInt2str(modNum,16);var strSecretKey=strModNum.toLowerCase();while(strSecretKey.length<192){strSecretKey=\"0\"+strSecretKey}this.secretKey=md5.bin(strSecretKey)},bfEncrypt:function(data){try{var enc_req={data:data,key:this.secretKey,mode:\"cbc\",round:16,iv:blowfish.mkIV()};var enc_data=blowfish.encrypt(enc_req);var cdata=base64.encode(enc_data)}catch(e){return\"\"}return cdata},bfDecrypt:function(data){try{var dec_req={data:base64.decode(data),key:this.secretKey,mode:\"cbc\"};var ddata=blowfish.decrypt(dec_req)}catch(e){return\"\"}return ddata}};function ePosDeviceMessage(){this.REQUEST={CONNECT:\"connect\",PUBKEY:\"pubkey\",ADMININFO:\"admin_info\",RECONNECT:\"reconnect\",DISCONNECT:\"disconnect\",OPENDEVICE:\"open_device\",CLOSEDEVICE:\"close_device\",DEVICEDATA:\"device_data\",SERVICEDATA:\"service_data\",ERROR:\"error\",OPENCOMMBOX:\"open_commbox\",CLOSECOMMBOX:\"close_commbox\",COMMDATA:\"commbox_data\"};this.request=null;this.sequence=0;this.deviceId=\"\";this.serviceId=\"\";this.data={};this.isCrypto=\"0\";this.code=\"\";this.data_id=0}ePosDeviceMessage.prototype={toTransmissionForm:function(){var message=null;switch(this.request){case this.REQUEST.PUBKEY:case this.REQUEST.ADMININFO:case this.REQUEST.RECONNECT:case this.REQUEST.DISCONNECT:message=[this.request,this.data];break;case this.REQUEST.OPENDEVICE:case this.REQUEST.CLOSEDEVICE:message=[this.request,this.deviceId,this.data,this.data_id];break;case this.REQUEST.DEVICEDATA:message=[this.request,this.sequence,this.deviceId,this.data,this.data_id];break;case this.REQUEST.SERVICEDATA:message=[this.request,this.sequence,this.serviceId,this.isCrypto,this.data,this.data_id];break;case this.REQUEST.OPENCOMMBOX:case this.REQUEST.CLOSECOMMBOX:case this.REQUEST.COMMDATA:message=[this.request,this.sequence,this.data,this.data_id];break;default:message=null}return message},};var MessageFactory=(function(){var PUBKEY_TEST_TEXT=\"hello\";var sequence=0;var cipher=new ePosCrypto();getNextSequence=function(){sequence++;if(Number.MAX_VALUE==sequence){sequence=1}return String(sequence)};return{parseRequestMessage:function(message){var eposmsg=new ePosDeviceMessage();eposmsg.request=message[0];switch(eposmsg.request){case eposmsg.REQUEST.CONNECT:eposmsg.data=message[1];break;case eposmsg.REQUEST.PUBKEY:case eposmsg.REQUEST.ADMININFO:case eposmsg.REQUEST.RECONNECT:case eposmsg.REQUEST.DISCONNECT:eposmsg.code=message[1];eposmsg.data=message[2];break;case eposmsg.REQUEST.OPENDEVICE:case eposmsg.REQUEST.CLOSEDEVICE:eposmsg.deviceId=message[1];eposmsg.code=message[2];eposmsg.data=message[3];eposmsg.data_id=message[4];break;case eposmsg.REQUEST.DEVICEDATA:eposmsg.sequence=message[1];eposmsg.deviceId=message[2];eposmsg.data=message[3];eposmsg.data_id=message[4];break;case eposmsg.REQUEST.SERVICEDATA:eposmsg.sequence=message[1];eposmsg.serviceId=message[2];eposmsg.isCrypto=message[3];eposmsg.data=message[4];eposmsg.data_id=message[5];break;case eposmsg.REQUEST.OPENCOMMBOX:case eposmsg.REQUEST.CLOSECOMMBOX:case eposmsg.REQUEST.COMMDATA:eposmsg.sequence=message[1];eposmsg.data=message[2];eposmsg.data_id=message[3];break;case eposmsg.REQUEST.ERROR:eposmsg.sequence=message[1];eposmsg.deviceId=message[2];eposmsg.code=message[3];eposmsg.data=message[4];eposmsg.data_id=message[5];break;default:eposmsg=null}return eposmsg},getPubkeyMessage:function(prime,key){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.PUBKEY;cipher.genClientKeys(prime,key);var testData=cipher.bfEncrypt(PUBKEY_TEST_TEXT);var pubkey=bigInt2str(cipher.pubkey_c,16);while(pubkey.length<192){pubkey=\"0\"+pubkey}eposmsg.data={key:pubkey,testData:testData};return eposmsg},getAdminInfoMessage:function(){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.ADMININFO;eposmsg.data={};return eposmsg},getReconnectMessage:function(prevId,curId,dataId){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.RECONNECT;eposmsg.data={old_client_id:prevId,new_client_id:curId,received_id:dataId};return eposmsg},getDisconnectMessage:function(connectionId){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.DISCONNECT;eposmsg.data={client_id:connectionId};return eposmsg},getOpenDeviceMessage:function(deviceId,deviceType,isCrypto,isBufferEnable){var eposmsg=new ePosDeviceMessage();var deviceTypeName=deviceType;if(deviceTypeName==\"type_hybrid_printer2\"){deviceTypeName=\"type_hybrid_printer\"}eposmsg.request=eposmsg.REQUEST.OPENDEVICE;eposmsg.deviceId=deviceId;eposmsg.data={type:deviceTypeName,crypto:isCrypto,buffer:isBufferEnable};return eposmsg},getCloseDeviceMessage:function(deviceId){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.CLOSEDEVICE;eposmsg.deviceId=deviceId;eposmsg.data={};return eposmsg},getDeviceDataMessage:function(deviceId,data,crypto){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.DEVICEDATA;eposmsg.sequence=getNextSequence();eposmsg.deviceId=deviceId;if(crypto){eposmsg.data=cipher.bfEncrypt(JSON.stringify(data))}else{eposmsg.data=data}return eposmsg},getServiceMessage:function(serviceId,isCrypt,data){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.SERVICEDATA;eposmsg.sequence=getNextSequence();eposmsg.serviceId=serviceId;eposmsg.isCrypto=isCrypt;if(isCrypt){eposmsg.data=cipher.bfEncrypt(JSON.stringify(data))}else{eposmsg.data=data}return eposmsg},getOpenCommBoxMessage:function(data){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.OPENCOMMBOX;eposmsg.sequence=getNextSequence();eposmsg.data=data;return eposmsg},getCloseCommBoxMessage:function(data){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.CLOSECOMMBOX;eposmsg.sequence=getNextSequence();eposmsg.data=data;return eposmsg},getCommBoxDataMessage:function(data){var eposmsg=new ePosDeviceMessage();eposmsg.request=eposmsg.REQUEST.COMMDATA;eposmsg.sequence=getNextSequence();eposmsg.data=data;return eposmsg},decrypt:function(data){var decryptoData=cipher.bfDecrypt(data);return JSON.parse(decryptoData)},}}());function ePOSDeviceConfiguration(address){this.DEVICE_GROUP_ALL=\"group_all\";this.DEVICE_GROUP_PRINTER=\"group_printer\";this.DEVICE_GROUP_DISPLAY=\"group_display\";this.DEVICE_GROUP_HID=\"group_hid\";this.DEVICE_GROUP_SERIAL=\"group_serial\";this.DEVICE_GROUP_OTHER=\"group_other\";this.DEVICE_TYPE_PRINTER=\"type_printer\";this.DEVICE_TYPE_HYBRID_PRINTER=\"type_hybrid_printer\";this.DEVICE_TYPE_DISPLAY=\"type_display\";this.DEVICE_TYPE_KEYBOARD=\"type_keyboard\";this.DEVICE_TYPE_SCANNER=\"type_scanner\";this.DEVICE_TYPE_MSR=\"type_msr\";this.DEVICE_TYPE_CASH_CHANGER=\"type_cash_changer\";this.DEVICE_TYPE_SIMPLE_SERIAL=\"type_simple_serial\";this.DEVICE_TYPE_CASH_DRAWER=\"type_cash_drawer\";this.DEVICE_TYPE_PIN_PAD=\"type_pin_pad\";this.DEVICE_TYPE_CAT=\"type_cat\";this.DEVICE_TYPE_SMARTCARD_RW=\"type_smartcard_rw\";this.CGI_PATH=\"/epson_eposdevice/getDeviceList.cgi\";this.RESULT_OK=\"OK\";this.UNKNOWN=\"unknown\";this.ONLINE=\"online\";this.OFFLINE=\"offline\";this.INTERVAL=500;this.TIMEOUT=60*1000;this.address=address;this.cb=null;this.message=null;this.WEBSOCKET_PORT=8008;this.SSLWEBSOCKET_PORT=8043}ePOSDeviceConfiguration.prototype.getRegisterdDevices=function(type,callback){this.cb=callback;var self=this;var xhr=null;var protocol=window.location.protocol+\"//\";var param=\"?group=\"+type;var url=protocol+this.address+this.CGI_PATH+param;if(window.XDomainRequest){xhr=new XDomainRequest();xhr.open(\"GET\",url);xhr.onload=function(){self.message=self.RESULT_OK;var jsonObj=JSON.parse(xhr.responseText);self.checkDevice(jsonObj,function(resultList){for(var key in resultList){for(var i=0;i<jsonObj.length;i++){if(jsonObj[i].deviceId!=key){continue}jsonObj[i].status=resultList[key]}}if(self.cb!=null){self.cb(self,jsonObj);self.cb=null}})};xhr.onerror=function(){self.message=\"Failed to get device list.\";if(self.cb!=null){self.cb(self,null);self.cb=null}}}else{xhr=new XMLHttpRequest();xhr.open(\"GET\",url,true);xhr.setRequestHeader(\"Pragma\",\"no-cache\");xhr.setRequestHeader(\"Cache-Control\",\"no-cache\");xhr.setRequestHeader(\"If-Modified-Since\",\"Thu, 01 Jun 1970 00:00:00 GMT\");xhr.onreadystatechange=function(){if(xhr.readyState==4){if(xhr.status==200){self.message=self.RESULT_OK;var jsonObj=JSON.parse(xhr.responseText);self.checkDevice(jsonObj,function(resultList){for(var key in resultList){for(var i=0;i<jsonObj.length;i++){if(jsonObj[i].deviceId!=key){continue}jsonObj[i].status=resultList[key]}}if(self.cb!=null){self.cb(self,jsonObj);self.cb=null}})}else{self.message=\"Failed to get device list.\";if(self.cb!=null){self.cb(self,null);self.cb=null}}}}}xhr.send(null)};ePOSDeviceConfiguration.prototype.checkDevice=function(obj,callback){var self=this;var protocol=window.location.protocol;var port=(protocol.match(/^(https:)/))?this.SSLWEBSOCKET_PORT:this.WEBSOCKET_PORT;var ePosDev=new epson.ePOSDevice();var resultList=new Array();for(var i=0;i<obj.length;i++){resultList[obj[i].deviceId]=self.UNKNOWN}ePosDev.onerror=function(sq,deviceId,result){if(deviceId!=\"\"){resultList[deviceId]=self.OFFLINE}};ePosDev.connect(this.address,port,function(data){if((data==\"OK\")||(data==\"SSL_CONNECT_OK\")){for(var i=0;i<obj.length;i++){ePosDev.createDevice(obj[i].deviceId,obj[i].deviceType,{},function(data,code){resultList[data.deviceID]=(code==\"OK\")?self.ONLINE:self.OFFLINE;ePosDev.deleteDevice(data,null)})}}});var timer;timer=window.setInterval(function(){for(var key in resultList){if(resultList[key]==self.UNKNOWN){return}}clearInterval(timer);if(callback!=null){callback(resultList)}},self.INTERVAL);window.setTimeout(function(){clearInterval(timer);if(callback!=null){callback(resultList)}},self.TIMEOUT)};if(typeof JSON!==\"object\"){JSON={}}(function(){function f(n){return n<10?\"0\"+n:n}if(typeof Date.prototype.toJSON!==\"function\"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+\"-\"+f(this.getUTCMonth()+1)+\"-\"+f(this.getUTCDate())+\"T\"+f(this.getUTCHours())+\":\"+f(this.getUTCMinutes())+\":\"+f(this.getUTCSeconds())+\"Z\":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'\"'+string.replace(escapable,function(a){var c=meta[a];return typeof c===\"string\"?c:\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+string+'\"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value===\"object\"&&typeof value.toJSON===\"function\"){value=value.toJSON(key)}if(typeof rep===\"function\"){value=rep.call(holder,key,value)}switch(typeof value){case\"string\":return quote(value);case\"number\":return isFinite(value)?String(value):\"null\";case\"boolean\":case\"null\":return String(value);case\"object\":if(!value){return\"null\"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)===\"[object Array]\"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||\"null\"}v=partial.length===0?\"[]\":gap?\"[\\n\"+gap+partial.join(\",\\n\"+gap)+\"\\n\"+mind+\"]\":\"[\"+partial.join(\",\")+\"]\";gap=mind;return v}if(rep&&typeof rep===\"object\"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]===\"string\"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?\": \":\":\")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?\": \":\":\")+v)}}}}v=partial.length===0?\"{}\":gap?\"{\\n\"+gap+partial.join(\",\\n\"+gap)+\"\\n\"+mind+\"}\":\"{\"+partial.join(\",\")+\"}\";gap=mind;return v}}if(typeof JSON.stringify!==\"function\"){JSON.stringify=function(value,replacer,space){var i;gap=\"\";indent=\"\";if(typeof space===\"number\"){for(i=0;i<space;i+=1){indent+=\" \"}}else{if(typeof space===\"string\"){indent=space}}rep=replacer;if(replacer&&typeof replacer!==\"function\"&&(typeof replacer!==\"object\"||typeof replacer.length!==\"number\")){throw new Error(\"JSON.stringify\")}return str(\"\",{\"\":value})}}if(typeof JSON.parse!==\"function\"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value===\"object\"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\"))){j=eval(\"(\"+text+\")\");return typeof reviver===\"function\"?walk({\"\":j},\"\"):j}throw new SyntaxError(\"JSON.parse\")}}}());\n/*! Socket.IO.js build:0.8.7, development. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */\n(function(exports,global){var io=exports;io.version=\"0.8.7\";io.protocol=1;io.transports=[];io.j=[];io.sockets={};io.connect=function(host,details){var uri=io.util.parseUri(host),uuri,socket;if(global&&global.location){uri.protocol=uri.protocol||global.location.protocol.slice(0,-1);uri.host=uri.host||(global.document?global.document.domain:global.location.hostname);uri.port=uri.port||global.location.port}uuri=io.util.uniqueUri(uri);var options={host:uri.host,secure:\"https\"==uri.protocol,port:uri.port||(\"https\"==uri.protocol?443:80),query:uri.query||\"\"};io.util.merge(options,details);if(options[\"force new connection\"]||!io.sockets[uuri]){socket=new io.Socket(options)}if(!options[\"force new connection\"]&&socket){io.sockets[uuri]=socket}socket=socket||io.sockets[uuri];return socket.of(uri.path.length>1?uri.path:\"\")}})(\"object\"===typeof module?module.exports:(this.io={}),this);(function(exports,global){var util=exports.util={};var re=/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;var parts=[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"];util.parseUri=function(str){var m=re.exec(str||\"\"),uri={},i=14;while(i--){uri[parts[i]]=m[i]||\"\"}return uri};util.uniqueUri=function(uri){var protocol=uri.protocol,host=uri.host,port=uri.port;if(\"document\" in global){host=host||document.domain;port=port||(protocol==\"https\"&&document.location.protocol!==\"https:\"?443:document.location.port)}else{host=host||\"localhost\";if(!port&&protocol==\"https\"){port=443}}return(protocol||\"http\")+\"://\"+host+\":\"+(port||80)};util.query=function(base,addition){var query=util.chunkQuery(base||\"\"),components=[];util.merge(query,util.chunkQuery(addition||\"\"));for(var part in query){if(query.hasOwnProperty(part)){components.push(part+\"=\"+query[part])}}return components.length?\"?\"+components.join(\"&\"):\"\"};util.chunkQuery=function(qs){var query={},params=qs.split(\"&\"),i=0,l=params.length,kv;for(;i<l;++i){kv=params[i].split(\"=\");if(kv[0]){query[kv[0]]=decodeURIComponent(kv[1])}}return query};var pageLoaded=false;util.load=function(fn){if(\"document\" in global&&document.readyState===\"complete\"||pageLoaded){return fn()}util.on(global,\"load\",fn,false)};util.on=function(element,event,fn,capture){if(element.attachEvent){element.attachEvent(\"on\"+event,fn)}else{if(element.addEventListener){element.addEventListener(event,fn,capture)}}};util.request=function(xdomain){if(xdomain&&\"undefined\"!=typeof XDomainRequest){return new XDomainRequest()}if(\"undefined\"!=typeof XMLHttpRequest&&(!xdomain||util.ua.hasCORS)){return new XMLHttpRequest()}if(!xdomain){try{return new ActiveXObject(\"Microsoft.XMLHTTP\")}catch(e){}}return null};if(\"undefined\"!=typeof window){util.load(function(){pageLoaded=true})}util.defer=function(fn){if(!util.ua.webkit||\"undefined\"!=typeof importScripts){return fn()}util.load(function(){setTimeout(fn,100)})};util.merge=function merge(target,additional,deep,lastseen){var seen=lastseen||[],depth=typeof deep==\"undefined\"?2:deep,prop;for(prop in additional){if(additional.hasOwnProperty(prop)&&util.indexOf(seen,prop)<0){if(typeof target[prop]!==\"object\"||!depth){target[prop]=additional[prop];seen.push(additional[prop])}else{util.merge(target[prop],additional[prop],depth-1,seen)}}}return target};util.mixin=function(ctor,ctor2){util.merge(ctor.prototype,ctor2.prototype)};util.inherit=function(ctor,ctor2){function f(){}f.prototype=ctor2.prototype;ctor.prototype=new f};util.isArray=Array.isArray||function(obj){return Object.prototype.toString.call(obj)===\"[object Array]\"};util.intersect=function(arr,arr2){var ret=[],longest=arr.length>arr2.length?arr:arr2,shortest=arr.length>arr2.length?arr2:arr;for(var i=0,l=shortest.length;i<l;i++){if(~util.indexOf(longest,shortest[i])){ret.push(shortest[i])}}return ret};util.indexOf=function(arr,o,i){if(Array.prototype.indexOf){return Array.prototype.indexOf.call(arr,o,i)}for(var j=arr.length,i=i<0?i+j<0?0:i+j:i||0;i<j&&arr[i]!==o;i++){}return j<=i?-1:i};util.toArray=function(enu){var arr=[];for(var i=0,l=enu.length;i<l;i++){arr.push(enu[i])}return arr};util.ua={};util.ua.hasCORS=\"undefined\"!=typeof XMLHttpRequest&&(function(){try{var a=new XMLHttpRequest()}catch(e){return false}return a.withCredentials!=undefined})();util.ua.webkit=\"undefined\"!=typeof navigator&&/webkit/i.test(navigator.userAgent)})(\"undefined\"!=typeof io?io:module.exports,this);(function(exports,io){exports.EventEmitter=EventEmitter;function EventEmitter(){}EventEmitter.prototype.on=function(name,fn){if(!this.$events){this.$events={}}if(!this.$events[name]){this.$events[name]=fn}else{if(io.util.isArray(this.$events[name])){this.$events[name].push(fn)}else{this.$events[name]=[this.$events[name],fn]}}return this};EventEmitter.prototype.addListener=EventEmitter.prototype.on;EventEmitter.prototype.once=function(name,fn){var self=this;function on(){self.removeListener(name,on);fn.apply(this,arguments)}on.listener=fn;this.on(name,on);return this};EventEmitter.prototype.removeListener=function(name,fn){if(this.$events&&this.$events[name]){var list=this.$events[name];if(io.util.isArray(list)){var pos=-1;for(var i=0,l=list.length;i<l;i++){if(list[i]===fn||(list[i].listener&&list[i].listener===fn)){pos=i;break}}if(pos<0){return this}list.splice(pos,1);if(!list.length){delete this.$events[name]}}else{if(list===fn||(list.listener&&list.listener===fn)){delete this.$events[name]}}}return this};EventEmitter.prototype.removeAllListeners=function(name){if(this.$events&&this.$events[name]){this.$events[name]=null}return this};EventEmitter.prototype.listeners=function(name){if(!this.$events){this.$events={}}if(!this.$events[name]){this.$events[name]=[]}if(!io.util.isArray(this.$events[name])){this.$events[name]=[this.$events[name]]}return this.$events[name]};EventEmitter.prototype.emit=function(name){if(!this.$events){return false}var handler=this.$events[name];if(!handler){return false}var args=Array.prototype.slice.call(arguments,1);if(\"function\"==typeof handler){handler.apply(this,args)}else{if(io.util.isArray(handler)){var listeners=handler.slice();for(var i=0,l=listeners.length;i<l;i++){listeners[i].apply(this,args)}}else{return false}}return true}})(\"undefined\"!=typeof io?io:module.exports,\"undefined\"!=typeof io?io:module.parent.exports);(function(exports,nativeJSON){if(nativeJSON&&nativeJSON.parse){return exports.JSON={parse:nativeJSON.parse,stringify:nativeJSON.stringify}}var JSON=exports.JSON={};function f(n){return n<10?\"0\"+n:n}function date(d,key){return isFinite(d.valueOf())?d.getUTCFullYear()+\"-\"+f(d.getUTCMonth()+1)+\"-\"+f(d.getUTCDate())+\"T\"+f(d.getUTCHours())+\":\"+f(d.getUTCMinutes())+\":\"+f(d.getUTCSeconds())+\"Z\":null}var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'\"'+string.replace(escapable,function(a){var c=meta[a];return typeof c===\"string\"?c:\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+string+'\"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value instanceof Date){value=date(key)}if(typeof rep===\"function\"){value=rep.call(holder,key,value)}switch(typeof value){case\"string\":return quote(value);case\"number\":return isFinite(value)?String(value):\"null\";case\"boolean\":case\"null\":return String(value);case\"object\":if(!value){return\"null\"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)===\"[object Array]\"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||\"null\"}v=partial.length===0?\"[]\":gap?\"[\\n\"+gap+partial.join(\",\\n\"+gap)+\"\\n\"+mind+\"]\":\"[\"+partial.join(\",\")+\"]\";gap=mind;return v}if(rep&&typeof rep===\"object\"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]===\"string\"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?\": \":\":\")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?\": \":\":\")+v)}}}}v=partial.length===0?\"{}\":gap?\"{\\n\"+gap+partial.join(\",\\n\"+gap)+\"\\n\"+mind+\"}\":\"{\"+partial.join(\",\")+\"}\";gap=mind;return v}}JSON.stringify=function(value,replacer,space){var i;gap=\"\";indent=\"\";if(typeof space===\"number\"){for(i=0;i<space;i+=1){indent+=\" \"}}else{if(typeof space===\"string\"){indent=space}}rep=replacer;if(replacer&&typeof replacer!==\"function\"&&(typeof replacer!==\"object\"||typeof replacer.length!==\"number\")){throw new Error(\"JSON.stringify\")}return str(\"\",{\"\":value})};JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value===\"object\"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\"))){j=eval(\"(\"+text+\")\");return typeof reviver===\"function\"?walk({\"\":j},\"\"):j}throw new SyntaxError(\"JSON.parse\")}})(\"undefined\"!=typeof io?io:module.exports,typeof JSON!==\"undefined\"?JSON:undefined);(function(exports,io){var parser=exports.parser={};var packets=parser.packets=[\"disconnect\",\"connect\",\"heartbeat\",\"message\",\"json\",\"event\",\"ack\",\"error\",\"noop\"];var reasons=parser.reasons=[\"transport not supported\",\"client not handshaken\",\"unauthorized\"];var advice=parser.advice=[\"reconnect\"];var JSON=io.JSON,indexOf=io.util.indexOf;parser.encodePacket=function(packet){var type=indexOf(packets,packet.type),id=packet.id||\"\",endpoint=packet.endpoint||\"\",ack=packet.ack,data=null;switch(packet.type){case\"error\":var reason=packet.reason?indexOf(reasons,packet.reason):\"\",adv=packet.advice?indexOf(advice,packet.advice):\"\";if(reason!==\"\"||adv!==\"\"){data=reason+(adv!==\"\"?(\"+\"+adv):\"\")}break;case\"message\":if(packet.data!==\"\"){data=packet.data}break;case\"event\":var ev={name:packet.name};if(packet.args&&packet.args.length){ev.args=packet.args}data=JSON.stringify(ev);break;case\"json\":data=JSON.stringify(packet.data);break;case\"connect\":if(packet.qs){data=packet.qs}break;case\"ack\":data=packet.ackId+(packet.args&&packet.args.length?\"+\"+JSON.stringify(packet.args):\"\");break}var encoded=[type,id+(ack==\"data\"?\"+\":\"\"),endpoint];if(data!==null&&data!==undefined){encoded.push(data)}return encoded.join(\":\")};parser.encodePayload=function(packets){var decoded=\"\";if(packets.length==1){return packets[0]}for(var i=0,l=packets.length;i<l;i++){var packet=packets[i];decoded+=\"\\ufffd\"+packet.length+\"\\ufffd\"+packets[i]}return decoded};var regexp=/([^:]+):([0-9]+)?(\\+)?:([^:]+)?:?([\\s\\S]*)?/;parser.decodePacket=function(data){var pieces=data.match(regexp);if(!pieces){return{}}var id=pieces[2]||\"\",data=pieces[5]||\"\",packet={type:packets[pieces[1]],endpoint:pieces[4]||\"\"};if(id){packet.id=id;if(pieces[3]){packet.ack=\"data\"}else{packet.ack=true}}switch(packet.type){case\"error\":var pieces=data.split(\"+\");packet.reason=reasons[pieces[0]]||\"\";packet.advice=advice[pieces[1]]||\"\";break;case\"message\":packet.data=data||\"\";break;case\"event\":try{var opts=JSON.parse(data);packet.name=opts.name;packet.args=opts.args}catch(e){}packet.args=packet.args||[];break;case\"json\":try{packet.data=JSON.parse(data)}catch(e){}break;case\"connect\":packet.qs=data||\"\";break;case\"ack\":var pieces=data.match(/^([0-9]+)(\\+)?(.*)/);if(pieces){packet.ackId=pieces[1];packet.args=[];if(pieces[3]){try{packet.args=pieces[3]?JSON.parse(pieces[3]):[]}catch(e){}}}break;case\"disconnect\":case\"heartbeat\":break}return packet};parser.decodePayload=function(data){if(data.charAt(0)==\"\\ufffd\"){var ret=[];for(var i=1,length=\"\";i<data.length;i++){if(data.charAt(i)==\"\\ufffd\"){ret.push(parser.decodePacket(data.substr(i+1).substr(0,length)));i+=Number(length)+1;length=\"\"}else{length+=data.charAt(i)}}return ret}else{return[parser.decodePacket(data)]}}})(\"undefined\"!=typeof io?io:module.exports,\"undefined\"!=typeof io?io:module.parent.exports);(function(exports,io){exports.Transport=Transport;function Transport(socket,sessid){this.socket=socket;this.sessid=sessid}io.util.mixin(Transport,io.EventEmitter);Transport.prototype.onData=function(data){this.clearCloseTimeout();if(this.socket.connected||this.socket.connecting||this.socket.reconnecting){this.setCloseTimeout()}if(data!==\"\"){var msgs=io.parser.decodePayload(data);if(msgs&&msgs.length){for(var i=0,l=msgs.length;i<l;i++){this.onPacket(msgs[i])}}}return this};Transport.prototype.onPacket=function(packet){if(packet.type==\"heartbeat\"){return this.onHeartbeat()}if(packet.type==\"connect\"&&packet.endpoint==\"\"){this.onConnect()}this.socket.onPacket(packet);return this};Transport.prototype.setCloseTimeout=function(){if(!this.closeTimeout){var self=this;this.closeTimeout=setTimeout(function(){self.onDisconnect()},this.socket.closeTimeout)}};Transport.prototype.onDisconnect=function(){if(this.close&&this.open){this.close()}this.clearTimeouts();this.socket.onDisconnect();return this};Transport.prototype.onConnect=function(){this.socket.onConnect();return this};Transport.prototype.clearCloseTimeout=function(){if(this.closeTimeout){clearTimeout(this.closeTimeout);this.closeTimeout=null}};Transport.prototype.clearTimeouts=function(){this.clearCloseTimeout();if(this.reopenTimeout){clearTimeout(this.reopenTimeout)}};Transport.prototype.packet=function(packet){this.send(io.parser.encodePacket(packet))};Transport.prototype.onHeartbeat=function(heartbeat){this.packet({type:\"heartbeat\"})};Transport.prototype.onOpen=function(){this.open=true;this.clearCloseTimeout();this.socket.onOpen()};Transport.prototype.onClose=function(){var self=this;this.open=false;this.socket.onClose();this.onDisconnect()};Transport.prototype.prepareUrl=function(){var options=this.socket.options;return this.scheme()+\"://\"+options.host+\":\"+options.port+\"/\"+options.resource+\"/\"+io.protocol+\"/\"+this.name+\"/\"+this.sessid};Transport.prototype.ready=function(socket,fn){fn.call(this)}})(\"undefined\"!=typeof io?io:module.exports,\"undefined\"!=typeof io?io:module.parent.exports);(function(exports,io,global){exports.Socket=Socket;function Socket(options){this.options={port:80,secure:false,document:\"document\" in global?document:false,resource:\"socket.io\",transports:io.transports,\"connect timeout\":10000,\"try multiple transports\":true,reconnect:true,\"reconnection delay\":500,\"reconnection limit\":Infinity,\"reopen delay\":3000,\"max reconnection attempts\":10,\"sync disconnect on unload\":true,\"auto connect\":true,\"flash policy port\":10843};io.util.merge(this.options,options);this.connected=false;this.open=false;this.connecting=false;this.reconnecting=false;this.namespaces={};this.buffer=[];this.doBuffer=false;if(this.options[\"sync disconnect on unload\"]&&(!this.isXDomain()||io.util.ua.hasCORS)){var self=this;io.util.on(global,\"beforeunload\",function(){self.disconnectSync()},false)}if(this.options[\"auto connect\"]){this.connect()}}io.util.mixin(Socket,io.EventEmitter);Socket.prototype.of=function(name){if(!this.namespaces[name]){this.namespaces[name]=new io.SocketNamespace(this,name);if(name!==\"\"){this.namespaces[name].packet({type:\"connect\"})}}return this.namespaces[name]};Socket.prototype.publish=function(){this.emit.apply(this,arguments);var nsp;for(var i in this.namespaces){if(this.namespaces.hasOwnProperty(i)){nsp=this.of(i);nsp.$emit.apply(nsp,arguments)}}};function empty(){}Socket.prototype.handshake=function(fn){var self=this,options=this.options;function complete(data){if(data instanceof Error){self.onError(data.message)}else{fn.apply(null,data.split(\":\"))}}var url=[\"http\"+(options.secure?\"s\":\"\")+\":/\",options.host+\":\"+options.port,options.resource,io.protocol,io.util.query(this.options.query,\"t=\"+ +new Date)].join(\"/\");var loadTimeout=setTimeout(function(){if(typeof script!==\"undefined\"){try{var srcIndex=script.src.lastIndexOf(\"=\")+1;var arrayIndex=script.src.substring(srcIndex);io.j[arrayIndex]=function(data){script.parentNode.removeChild(script)}}catch(e){}}self.publish(\"connect_failed\")},this.options[\"connect timeout\"]);if(this.isXDomain()&&!io.util.ua.hasCORS){var insertAt=document.getElementsByTagName(\"script\")[0],script=document.createElement(\"script\");script.src=url+\"&jsonp=\"+io.j.length;insertAt.parentNode.insertBefore(script,insertAt);io.j.push(function(data){clearTimeout(loadTimeout);complete(data);script.parentNode.removeChild(script)})}else{var xhr=io.util.request();xhr.open(\"GET\",url,true);xhr.onreadystatechange=function(){if(xhr.readyState==4){xhr.onreadystatechange=empty;clearTimeout(loadTimeout);if(xhr.status==200){complete(xhr.responseText)}else{!self.reconnecting&&self.onError(xhr.responseText)}}};xhr.timeout=this.options[\"connect timeout\"];xhr.send(null)}};Socket.prototype.getTransport=function(override){var transports=override||this.transports,match;for(var i=0,transport;transport=transports[i];i++){if(io.Transport[transport]&&io.Transport[transport].check(this)&&(!this.isXDomain()||io.Transport[transport].xdomainCheck())){return new io.Transport[transport](this,this.sessionid)}}return null};Socket.prototype.connect=function(fn){if(this.connecting){return this}var self=this;this.handshake(function(sid,heartbeat,close,transports){self.sessionid=sid;self.closeTimeout=close*1000;self.heartbeatTimeout=heartbeat*1000;self.transports=io.util.intersect(transports.split(\",\"),self.options.transports);function connect(transports){if(self.transport){self.transport.clearTimeouts()}self.transport=self.getTransport(transports);if(!self.transport){return self.publish(\"connect_failed\")}self.transport.ready(self,function(){self.connecting=true;self.publish(\"connecting\",self.transport.name);self.transport.open();if(self.options[\"connect timeout\"]){self.connectTimeoutTimer=setTimeout(function(){if(!self.connected){self.connecting=false;if(self.options[\"try multiple transports\"]){if(!self.remainingTransports){self.remainingTransports=self.transports.slice(0)}var remaining=self.remainingTransports;while(remaining.length>0&&remaining.splice(0,1)[0]!=self.transport.name){}if(remaining.length){connect(remaining)}else{self.publish(\"connect_failed\")}}}},self.options[\"connect timeout\"])}})}connect();self.once(\"connect\",function(){clearTimeout(self.connectTimeoutTimer);fn&&typeof fn==\"function\"&&fn()})});return this};Socket.prototype.packet=function(data){if(this.connected&&!this.doBuffer){this.transport.packet(data)}else{this.buffer.push(data)}return this};Socket.prototype.setBuffer=function(v){this.doBuffer=v;if(!v&&this.connected&&this.buffer.length){this.transport.payload(this.buffer);this.buffer=[]}};Socket.prototype.disconnect=function(){if(this.connected){if(this.open){this.of(\"\").packet({type:\"disconnect\"})}this.onDisconnect(\"booted\")}return this};Socket.prototype.disconnectSync=function(){var xhr=io.util.request(),uri=this.resource+\"/\"+io.protocol+\"/\"+this.sessionid;xhr.open(\"GET\",uri,true);this.onDisconnect(\"booted\")};Socket.prototype.isXDomain=function(){var port=global.location.port||(\"https:\"==global.location.protocol?443:80);return this.options.host!==global.location.hostname||this.options.port!=port};Socket.prototype.onConnect=function(){if(!this.connected){this.connected=true;this.connecting=false;if(!this.doBuffer){this.setBuffer(false)}this.emit(\"connect\")}};Socket.prototype.onOpen=function(){this.open=true};Socket.prototype.onClose=function(){this.open=false};Socket.prototype.onPacket=function(packet){this.of(packet.endpoint).onPacket(packet)};Socket.prototype.onError=function(err){if(err&&err.advice){if(err.advice===\"reconnect\"&&this.connected){this.disconnect()}}this.publish(\"error\",err&&err.reason?err.reason:err)};Socket.prototype.onDisconnect=function(reason){var wasConnected=this.connected;this.connected=false;this.connecting=false;this.open=false;if(wasConnected){this.transport.close();this.transport.clearTimeouts();this.publish(\"disconnect\",reason)}}})(\"undefined\"!=typeof io?io:module.exports,\"undefined\"!=typeof io?io:module.parent.exports,this);(function(exports,io){exports.SocketNamespace=SocketNamespace;function SocketNamespace(socket,name){this.socket=socket;this.name=name||\"\";this.flags={};this.json=new Flag(this,\"json\");this.ackPackets=0;this.acks={}}io.util.mixin(SocketNamespace,io.EventEmitter);SocketNamespace.prototype.$emit=io.EventEmitter.prototype.emit;SocketNamespace.prototype.of=function(){return this.socket.of.apply(this.socket,arguments)};SocketNamespace.prototype.packet=function(packet){packet.endpoint=this.name;this.socket.packet(packet);this.flags={};return this};SocketNamespace.prototype.send=function(data,fn){var packet={type:this.flags.json?\"json\":\"message\",data:data};if(\"function\"==typeof fn){packet.id=++this.ackPackets;packet.ack=true;this.acks[packet.id]=fn}return this.packet(packet)};SocketNamespace.prototype.emit=function(name){var args=Array.prototype.slice.call(arguments,1),lastArg=args[args.length-1],packet={type:\"event\",name:name};if(\"function\"==typeof lastArg){packet.id=++this.ackPackets;packet.ack=\"data\";this.acks[packet.id]=lastArg;args=args.slice(0,args.length-1)}packet.args=args;return this.packet(packet)};SocketNamespace.prototype.disconnect=function(){if(this.name===\"\"){this.socket.disconnect()}else{this.packet({type:\"disconnect\"});this.$emit(\"disconnect\")}return this};SocketNamespace.prototype.onPacket=function(packet){var self=this;function ack(){self.packet({type:\"ack\",args:io.util.toArray(arguments),ackId:packet.id})}switch(packet.type){case\"connect\":this.$emit(\"connect\");break;case\"disconnect\":if(this.name===\"\"){this.socket.onDisconnect(packet.reason||\"booted\")}else{this.$emit(\"disconnect\",packet.reason)}break;case\"message\":case\"json\":var params=[\"message\",packet.data];if(packet.ack==\"data\"){params.push(ack)}else{if(packet.ack){this.packet({type:\"ack\",ackId:packet.id})}}this.$emit.apply(this,params);break;case\"event\":var params=[packet.name].concat(packet.args);if(packet.ack==\"data\"){params.push(ack)}this.$emit.apply(this,params);break;case\"ack\":if(this.acks[packet.ackId]){this.acks[packet.ackId].apply(this,packet.args);delete this.acks[packet.ackId]}break;case\"error\":if(packet.advice){this.socket.onError(packet)}else{if(packet.reason==\"unauthorized\"){this.$emit(\"connect_failed\",packet.reason)}else{this.$emit(\"error\",packet.reason)}}break}};function Flag(nsp,name){this.namespace=nsp;this.name=name}Flag.prototype.send=function(){this.namespace.flags[this.name]=true;this.namespace.send.apply(this.namespace,arguments)};Flag.prototype.emit=function(){this.namespace.flags[this.name]=true;this.namespace.emit.apply(this.namespace,arguments)}})(\"undefined\"!=typeof io?io:module.exports,\"undefined\"!=typeof io?io:module.parent.exports);(function(exports,io,global){exports.websocket=WS;function WS(socket){io.Transport.apply(this,arguments)}io.util.inherit(WS,io.Transport);WS.prototype.name=\"websocket\";WS.prototype.open=function(){var query=io.util.query(this.socket.options.query),self=this,Socket;if(!Socket){Socket=global.MozWebSocket||global.WebSocket}this.websocket=new Socket(this.prepareUrl()+query);this.websocket.onopen=function(){self.onOpen();self.socket.setBuffer(false)};this.websocket.onmessage=function(ev){self.onData(ev.data)};this.websocket.onclose=function(){self.onClose();self.socket.setBuffer(true)};this.websocket.onerror=function(e){self.onError(e)};return this};WS.prototype.send=function(data){this.websocket.send(data);return this};WS.prototype.payload=function(arr){for(var i=0,l=arr.length;i<l;i++){this.packet(arr[i])}return this};WS.prototype.close=function(){this.websocket.close();return this};WS.prototype.onError=function(e){this.socket.onError(e)};WS.prototype.scheme=function(){return this.socket.options.secure?\"wss\":\"ws\"};WS.check=function(){return(\"WebSocket\" in global&&!(\"__addTask\" in WebSocket))||\"MozWebSocket\" in global};WS.xdomainCheck=function(){return true};io.transports.push(\"websocket\")})(\"undefined\"!=typeof io?io.Transport:module.exports,\"undefined\"!=typeof io?io:module.parent.exports,this);(function(exports,io){exports.flashsocket=Flashsocket;function Flashsocket(){io.Transport.websocket.apply(this,arguments)}io.util.inherit(Flashsocket,io.Transport.websocket);Flashsocket.prototype.name=\"flashsocket\";Flashsocket.prototype.open=function(){var self=this,args=arguments;WebSocket.__addTask(function(){io.Transport.websocket.prototype.open.apply(self,args)});return this};Flashsocket.prototype.send=function(){var self=this,args=arguments;WebSocket.__addTask(function(){io.Transport.websocket.prototype.send.apply(self,args)});return this};Flashsocket.prototype.close=function(){WebSocket.__tasks.length=0;io.Transport.websocket.prototype.close.call(this);return this};Flashsocket.prototype.ready=function(socket,fn){function init(){var options=socket.options,port=options[\"flash policy port\"],path=[\"http\"+(options.secure?\"s\":\"\")+\":/\",options.host+\":\"+options.port,options.resource,\"static/flashsocket\",\"WebSocketMain\"+(socket.isXDomain()?\"Insecure\":\"\")+\".swf\"];if(!Flashsocket.loaded){if(typeof WEB_SOCKET_SWF_LOCATION===\"undefined\"){WEB_SOCKET_SWF_LOCATION=path.join(\"/\")}if(port!==843){WebSocket.loadFlashPolicyFile(\"xmlsocket://\"+options.host+\":\"+port)}WebSocket.__initialize();Flashsocket.loaded=true}fn.call(self)}var self=this;if(document.body){return init()}io.util.load(init)};Flashsocket.xdomainCheck=function(){return true};if(typeof window!=\"undefined\"){WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=true}io.transports.push(\"flashsocket\")})(\"undefined\"!=typeof io?io.Transport:module.exports,\"undefined\"!=typeof io?io:module.parent.exports);(function(){if(\"undefined\"==typeof window||window.WebSocket){return}var console=window.console;if(!console||!console.log||!console.error){console={log:function(){},error:function(){}}}if(location.protocol==\"file:\"){console.error(\"WARNING: web-socket-js doesn't work in file:///... URL unless you set Flash Security Settings properly. Open the page via Web server i.e. http://...\")}WebSocket=function(url,protocols,proxyHost,proxyPort,headers){var self=this;self.__id=WebSocket.__nextId++;WebSocket.__instances[self.__id]=self;self.readyState=WebSocket.CONNECTING;self.bufferedAmount=0;self.__events={};if(!protocols){protocols=[]}else{if(typeof protocols==\"string\"){protocols=[protocols]}}setTimeout(function(){WebSocket.__addTask(function(){WebSocket.__flash.create(self.__id,url,protocols,proxyHost||null,proxyPort||0,headers||null)})},0)};WebSocket.prototype.send=function(data){if(this.readyState==WebSocket.CONNECTING){throw\"INVALID_STATE_ERR: Web Socket connection has not been established\"}var result=WebSocket.__flash.send(this.__id,encodeURIComponent(data));if(result<0){return true}else{this.bufferedAmount+=result;return false}};WebSocket.prototype.close=function(){if(this.readyState==WebSocket.CLOSED||this.readyState==WebSocket.CLOSING){return}this.readyState=WebSocket.CLOSING;WebSocket.__flash.close(this.__id)};WebSocket.prototype.addEventListener=function(type,listener,useCapture){if(!(type in this.__events)){this.__events[type]=[]}this.__events[type].push(listener)};WebSocket.prototype.removeEventListener=function(type,listener,useCapture){if(!(type in this.__events)){return}var events=this.__events[type];for(var i=events.length-1;i>=0;--i){if(events[i]===listener){events.splice(i,1);break}}};WebSocket.prototype.dispatchEvent=function(event){var events=this.__events[event.type]||[];for(var i=0;i<events.length;++i){events[i](event)}var handler=this[\"on\"+event.type];if(handler){handler(event)}};WebSocket.prototype.__handleEvent=function(flashEvent){if(\"readyState\" in flashEvent){this.readyState=flashEvent.readyState}if(\"protocol\" in flashEvent){this.protocol=flashEvent.protocol}var jsEvent;if(flashEvent.type==\"open\"||flashEvent.type==\"error\"){jsEvent=this.__createSimpleEvent(flashEvent.type)}else{if(flashEvent.type==\"close\"){jsEvent=this.__createSimpleEvent(\"close\")}else{if(flashEvent.type==\"message\"){var data=decodeURIComponent(flashEvent.message);jsEvent=this.__createMessageEvent(\"message\",data)}else{throw\"unknown event type: \"+flashEvent.type}}}this.dispatchEvent(jsEvent)};WebSocket.prototype.__createSimpleEvent=function(type){if(document.createEvent&&window.Event){var event=document.createEvent(\"Event\");event.initEvent(type,false,false);return event}else{return{type:type,bubbles:false,cancelable:false}}};WebSocket.prototype.__createMessageEvent=function(type,data){if(document.createEvent&&window.MessageEvent&&!window.opera){var event=document.createEvent(\"MessageEvent\");event.initMessageEvent(\"message\",false,false,data,null,null,window,null);return event}else{return{type:type,data:data,bubbles:false,cancelable:false}}};WebSocket.CONNECTING=0;WebSocket.OPEN=1;WebSocket.CLOSING=2;WebSocket.CLOSED=3;WebSocket.__flash=null;WebSocket.__instances={};WebSocket.__tasks=[];WebSocket.__nextId=0;WebSocket.loadFlashPolicyFile=function(url){WebSocket.__addTask(function(){WebSocket.__flash.loadManualPolicyFile(url)})};WebSocket.__initialize=function(){if(WebSocket.__flash){return}if(WebSocket.__swfLocation){window.WEB_SOCKET_SWF_LOCATION=WebSocket.__swfLocation}if(!window.WEB_SOCKET_SWF_LOCATION){console.error(\"[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf\");return}var container=document.createElement(\"div\");container.id=\"webSocketContainer\";container.style.position=\"absolute\";if(WebSocket.__isFlashLite()){container.style.left=\"0px\";container.style.top=\"0px\"}else{container.style.left=\"-100px\";container.style.top=\"-100px\"}var holder=document.createElement(\"div\");holder.id=\"webSocketFlash\";container.appendChild(holder);document.body.appendChild(container)};WebSocket.__onFlashInitialized=function(){setTimeout(function(){WebSocket.__flash=document.getElementById(\"webSocketFlash\");WebSocket.__flash.setCallerUrl(location.href);WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG);for(var i=0;i<WebSocket.__tasks.length;++i){WebSocket.__tasks[i]()}WebSocket.__tasks=[]},0)};WebSocket.__onFlashEvent=function(){setTimeout(function(){try{var events=WebSocket.__flash.receiveEvents();for(var i=0;i<events.length;++i){WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i])}}catch(e){console.error(e)}},0);return true};WebSocket.__log=function(message){console.log(decodeURIComponent(message))};WebSocket.__error=function(message){console.error(decodeURIComponent(message))};WebSocket.__addTask=function(task){if(WebSocket.__flash){task()}else{WebSocket.__tasks.push(task)}};WebSocket.__isFlashLite=function(){if(!window.navigator||!window.navigator.mimeTypes){return false}var mimeType=window.navigator.mimeTypes[\"application/x-shockwave-flash\"];if(!mimeType||!mimeType.enabledPlugin||!mimeType.enabledPlugin.filename){return false}return mimeType.enabledPlugin.filename.match(/flashlite/i)?true:false};if(!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION){if(window.addEventListener){window.addEventListener(\"load\",function(){WebSocket.__initialize()},false)}else{window.attachEvent(\"onload\",function(){WebSocket.__initialize()})}}})();(function(exports,io,global){exports.XHR=XHR;function XHR(socket){if(!socket){return}io.Transport.apply(this,arguments);this.sendBuffer=[]}io.util.inherit(XHR,io.Transport);XHR.prototype.open=function(){this.socket.setBuffer(false);this.onOpen();this.get();this.setCloseTimeout();return this};XHR.prototype.payload=function(payload){var msgs=[];for(var i=0,l=payload.length;i<l;i++){msgs.push(io.parser.encodePacket(payload[i]))}this.send(io.parser.encodePayload(msgs))};XHR.prototype.send=function(data){this.post(data);return this};function empty(){}XHR.prototype.post=function(data){var self=this;this.socket.setBuffer(true);function stateChange(){if(this.readyState==4){this.onreadystatechange=empty;self.posting=false;if(this.status==200){self.socket.setBuffer(false)}else{self.onClose()}}}function onload(){this.onload=empty;self.socket.setBuffer(false)}this.sendXHR=this.request(\"POST\");if(global.XDomainRequest&&this.sendXHR instanceof XDomainRequest){this.sendXHR.onload=this.sendXHR.onerror=onload}else{this.sendXHR.onreadystatechange=stateChange}this.sendXHR.send(data)};XHR.prototype.close=function(){this.onClose();return this};XHR.prototype.request=function(method){var req=io.util.request(this.socket.isXDomain()),query=io.util.query(this.socket.options.query,\"t=\"+ +new Date);req.open(method||\"GET\",this.prepareUrl()+query,true);if(method==\"POST\"){try{if(req.setRequestHeader){req.setRequestHeader(\"Content-type\",\"text/plain;charset=UTF-8\")}else{req.contentType=\"text/plain\"}}catch(e){}}return req};XHR.prototype.scheme=function(){return this.socket.options.secure?\"https\":\"http\"};XHR.check=function(socket,xdomain){try{if(io.util.request(xdomain)){return true}}catch(e){}return false};XHR.xdomainCheck=function(){return XHR.check(null,true)}})(\"undefined\"!=typeof io?io.Transport:module.exports,\"undefined\"!=typeof io?io:module.parent.exports,this);(function(exports,io){exports.htmlfile=HTMLFile;function HTMLFile(socket){io.Transport.XHR.apply(this,arguments)}io.util.inherit(HTMLFile,io.Transport.XHR);HTMLFile.prototype.name=\"htmlfile\";HTMLFile.prototype.get=function(){this.doc=new ActiveXObject(\"htmlfile\");this.doc.open();this.doc.write(\"<html></html>\");this.doc.close();this.doc.parentWindow.s=this;var iframeC=this.doc.createElement(\"div\");iframeC.className=\"socketio\";this.doc.body.appendChild(iframeC);this.iframe=this.doc.createElement(\"iframe\");iframeC.appendChild(this.iframe);var self=this,query=io.util.query(this.socket.options.query,\"t=\"+ +new Date);this.iframe.src=this.prepareUrl()+query;io.util.on(window,\"unload\",function(){self.destroy()})};HTMLFile.prototype._=function(data,doc){this.onData(data);try{var script=doc.getElementsByTagName(\"script\")[0];script.parentNode.removeChild(script)}catch(e){}};HTMLFile.prototype.destroy=function(){if(this.iframe){try{this.iframe.src=\"about:blank\"}catch(e){}this.doc=null;this.iframe.parentNode.removeChild(this.iframe);this.iframe=null;CollectGarbage()}};HTMLFile.prototype.close=function(){this.destroy();return io.Transport.XHR.prototype.close.call(this)};HTMLFile.check=function(){if(\"ActiveXObject\" in window){try{var a=new ActiveXObject(\"htmlfile\");return a&&io.Transport.XHR.check()}catch(e){}}return false};HTMLFile.xdomainCheck=function(){return false};io.transports.push(\"htmlfile\")})(\"undefined\"!=typeof io?io.Transport:module.exports,\"undefined\"!=typeof io?io:module.parent.exports);(function(exports,io,global){exports[\"xhr-polling\"]=XHRPolling;function XHRPolling(){io.Transport.XHR.apply(this,arguments)}io.util.inherit(XHRPolling,io.Transport.XHR);io.util.merge(XHRPolling,io.Transport.XHR);XHRPolling.prototype.name=\"xhr-polling\";XHRPolling.prototype.open=function(){var self=this;io.Transport.XHR.prototype.open.call(self);return false};function empty(){}XHRPolling.prototype.get=function(){if(!this.open){return}var self=this;function stateChange(){if(this.readyState==4){this.onreadystatechange=empty;if(this.status==200){self.onData(this.responseText);self.get()}else{self.onClose()}}}function onload(){this.onload=empty;self.onData(this.responseText);self.get()}this.xhr=this.request();if(global.XDomainRequest&&this.xhr instanceof XDomainRequest){this.xhr.onload=this.xhr.onerror=onload}else{this.xhr.onreadystatechange=stateChange}this.xhr.send(null)};XHRPolling.prototype.onClose=function(){io.Transport.XHR.prototype.onClose.call(this);if(this.xhr){this.xhr.onreadystatechange=this.xhr.onload=empty;try{this.xhr.abort()}catch(e){}this.xhr=null}};XHRPolling.prototype.ready=function(socket,fn){var self=this;io.util.defer(function(){fn.call(self)})};io.transports.push(\"xhr-polling\")})(\"undefined\"!=typeof io?io.Transport:module.exports,\"undefined\"!=typeof io?io:module.parent.exports,this);(function(exports,io,global){var indicator=global.document&&\"MozAppearance\" in global.document.documentElement.style;exports[\"jsonp-polling\"]=JSONPPolling;function JSONPPolling(socket){io.Transport[\"xhr-polling\"].apply(this,arguments);this.index=io.j.length;var self=this;io.j.push(function(msg){self._(msg)})}io.util.inherit(JSONPPolling,io.Transport[\"xhr-polling\"]);JSONPPolling.prototype.name=\"jsonp-polling\";JSONPPolling.prototype.post=function(data){var self=this,query=io.util.query(this.socket.options.query,\"t=\"+(+new Date)+\"&i=\"+this.index);if(!this.form){var form=document.createElement(\"form\"),area=document.createElement(\"textarea\"),id=this.iframeId=\"socketio_iframe_\"+this.index,iframe;form.className=\"socketio\";form.style.position=\"absolute\";form.style.top=\"-1000px\";form.style.left=\"-1000px\";form.target=id;form.method=\"POST\";form.setAttribute(\"accept-charset\",\"utf-8\");area.name=\"d\";form.appendChild(area);document.body.appendChild(form);this.form=form;this.area=area}this.form.action=this.prepareUrl()+query;function complete(){initIframe();self.socket.setBuffer(false)}function initIframe(){if(self.iframe){self.form.removeChild(self.iframe)}try{iframe=document.createElement('<iframe name=\"'+self.iframeId+'\">')}catch(e){iframe=document.createElement(\"iframe\");iframe.name=self.iframeId}iframe.id=self.iframeId;self.form.appendChild(iframe);self.iframe=iframe}initIframe();this.area.value=io.JSON.stringify(data);try{this.form.submit()}catch(e){}if(this.iframe.attachEvent){iframe.onreadystatechange=function(){if(self.iframe.readyState==\"complete\"){complete()}}}else{this.iframe.onload=complete}this.socket.setBuffer(true)};JSONPPolling.prototype.get=function(){var self=this,script=document.createElement(\"script\"),query=io.util.query(this.socket.options.query,\"t=\"+(+new Date)+\"&i=\"+this.index);if(this.script){this.script.parentNode.removeChild(this.script);this.script=null}script.async=true;script.src=this.prepareUrl()+query;script.onerror=function(){self.onClose()};var insertAt=document.getElementsByTagName(\"script\")[0];insertAt.parentNode.insertBefore(script,insertAt);this.script=script;if(indicator){setTimeout(function(){var iframe=document.createElement(\"iframe\");document.body.appendChild(iframe);document.body.removeChild(iframe)},100)}};JSONPPolling.prototype._=function(msg){this.onData(msg);if(this.open){this.get()}return this};JSONPPolling.prototype.ready=function(socket,fn){var self=this;if(!indicator){return fn.call(this)}io.util.load(function(){fn.call(self)})};JSONPPolling.check=function(){return\"document\" in global};JSONPPolling.xdomainCheck=function(){return true};io.transports.push(\"jsonp-polling\")})(\"undefined\"!=typeof io?io.Transport:module.exports,\"undefined\"!=typeof io?io:module.parent.exports,this);var JSON;if(!JSON){JSON={}}(function(){function f(n){return n<10?\"0\"+n:n}if(typeof Date.prototype.toJSON!==\"function\"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+\"-\"+f(this.getUTCMonth()+1)+\"-\"+f(this.getUTCDate())+\"T\"+f(this.getUTCHours())+\":\"+f(this.getUTCMinutes())+\":\"+f(this.getUTCSeconds())+\"Z\":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'\"'+string.replace(escapable,function(a){var c=meta[a];return typeof c===\"string\"?c:\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+string+'\"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value===\"object\"&&typeof value.toJSON===\"function\"){value=value.toJSON(key)}if(typeof rep===\"function\"){value=rep.call(holder,key,value)}switch(typeof value){case\"string\":return quote(value);case\"number\":return isFinite(value)?String(value):\"null\";case\"boolean\":case\"null\":return String(value);case\"object\":if(!value){return\"null\"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)===\"[object Array]\"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||\"null\"}v=partial.length===0?\"[]\":gap?\"[\\n\"+gap+partial.join(\",\\n\"+gap)+\"\\n\"+mind+\"]\":\"[\"+partial.join(\",\")+\"]\";gap=mind;return v}if(rep&&typeof rep===\"object\"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]===\"string\"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?\": \":\":\")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?\": \":\":\")+v)}}}}v=partial.length===0?\"{}\":gap?\"{\\n\"+gap+partial.join(\",\\n\"+gap)+\"\\n\"+mind+\"}\":\"{\"+partial.join(\",\")+\"}\";gap=mind;return v}}if(typeof JSON.stringify!==\"function\"){JSON.stringify=function(value,replacer,space){var i;gap=\"\";indent=\"\";if(typeof space===\"number\"){for(i=0;i<space;i+=1){indent+=\" \"}}else{if(typeof space===\"string\"){indent=space}}rep=replacer;if(replacer&&typeof replacer!==\"function\"&&(typeof replacer!==\"object\"||typeof replacer.length!==\"number\")){throw new Error(\"JSON.stringify\")}return str(\"\",{\"\":value})}}if(typeof JSON.parse!==\"function\"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value===\"object\"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\"))){j=eval(\"(\"+text+\")\");return typeof reviver===\"function\"?walk({\"\":j},\"\"):j}throw new SyntaxError(\"JSON.parse\")}}}());var base64=(function(undefined){var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",u={},v=0;while(v<64){u[t.charAt(v)]=v;v++}return{encode:function(d){var i=0,j=0,n,s=d+\"\\0\\0\",l=s.length-2,r=new Array((l+2)/3<<2);while(i<l){n=(s.charCodeAt(i++)&255)<<16|(s.charCodeAt(i++)&255)<<8|(s.charCodeAt(i++)&255);r[j++]=t.charAt(n>>18&63);r[j++]=t.charAt(n>>12&63);r[j++]=t.charAt(n>>6&63);r[j++]=t.charAt(n&63)}while(i>l){r[--j]=\"=\";i--}return r.join(\"\")},decode:function(d){var i=0,j=0,n,s=d.replace(/[^A-Za-z0-9\\+\\/]/g,\"\")+\"AAA\",l=s.length-3,r=new Array((l+3>>2)*3),x=String.fromCharCode;while(i<l){n=u[s.charAt(i++)]<<18|u[s.charAt(i++)]<<12|u[s.charAt(i++)]<<6|u[s.charAt(i++)];r[j++]=x(n>>16&255);r[j++]=x(n>>8&255);r[j++]=x(n&255)}r.length=j-i+l;return r.join(\"\")}}})();bpe=0;mask=0;radix=mask+1;digitsStr=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\\\'\\\"+-\";for(bpe=0;(1<<(bpe+1))>(1<<bpe);bpe++){}bpe>>=1;mask=(1<<bpe)-1;radix=mask+1;one=int2bigInt(1,1,1);t=new Array(0);ss=t;s0=t;s1=t;s2=t;s3=t;s4=t;s5=t;s6=t;s7=t;T=t;sa=t;mr_x1=t;mr_r=t;mr_a=t;eg_v=t;eg_u=t;eg_A=t;eg_B=t;eg_C=t;eg_D=t;md_q1=t;md_q2=t;md_q3=t;md_r=t;md_r1=t;md_r2=t;md_tt=t;primes=t;pows=t;s_i=t;s_i2=t;s_R=t;s_rm=t;s_q=t;s_n1=t;s_a=t;s_r2=t;s_n=t;s_b=t;s_d=t;s_x1=t;s_x2=t,s_aa=t;rpprb=t;function adapterMathRandom(){var crypto=window.crypto||window.msCrypto;var rand;try{rand=crypto.getRandomValues(new Uint32Array(1))[0]/4294967296}catch(e){console.log(\"GetRandomValues is not supported on your browser\")}return rand}function findPrimes(n){var i,s,p,ans;s=new Array(n);for(i=0;i<n;i++){s[i]=0}s[0]=2;p=0;for(;s[p]<n;){for(i=s[p]*s[p];i<n;i+=s[p]){s[i]=1}p++;s[p]=s[p-1]+1;for(;s[p]<n&&s[s[p]];s[p]++){}}ans=new Array(p);for(i=0;i<p;i++){ans[i]=s[i]}return ans}function millerRabinInt(x,b){if(mr_x1.length!=x.length){mr_x1=dup(x);mr_r=dup(x);mr_a=dup(x)}copyInt_(mr_a,b);return millerRabin(x,mr_a)}function millerRabin(x,b){var i,j,k,s;if(mr_x1.length!=x.length){mr_x1=dup(x);mr_r=dup(x);mr_a=dup(x)}copy_(mr_a,b);copy_(mr_r,x);copy_(mr_x1,x);addInt_(mr_r,-1);addInt_(mr_x1,-1);k=0;for(i=0;i<mr_r.length;i++){for(j=1;j<mask;j<<=1){if(x[i]&j){s=(k<mr_r.length+bpe?k:0);i=mr_r.length;j=mask}else{k++}}}if(s){rightShift_(mr_r,s)}powMod_(mr_a,mr_r,x);if(!equalsInt(mr_a,1)&&!equals(mr_a,mr_x1)){j=1;while(j<=s-1&&!equals(mr_a,mr_x1)){squareMod_(mr_a,x);if(equalsInt(mr_a,1)){return 0}j++}if(!equals(mr_a,mr_x1)){return 0}}return 1}function bitSize(x){var j,z,w;for(j=x.length-1;(x[j]==0)&&(j>0);j--){}for(z=0,w=x[j];w;(w>>=1),z++){}z+=bpe*j;return z}function expand(x,n){var ans=int2bigInt(0,(x.length>n?x.length:n)*bpe,0);copy_(ans,x);return ans}function randTruePrime(k){var ans=int2bigInt(0,k,0);randTruePrime_(ans,k);return trim(ans,1)}function randProbPrime(k){if(k>=600){return randProbPrimeRounds(k,2)}if(k>=550){return randProbPrimeRounds(k,4)}if(k>=500){return randProbPrimeRounds(k,5)}if(k>=400){return randProbPrimeRounds(k,6)}if(k>=350){return randProbPrimeRounds(k,7)}if(k>=300){return randProbPrimeRounds(k,9)}if(k>=250){return randProbPrimeRounds(k,12)}if(k>=200){return randProbPrimeRounds(k,15)}if(k>=150){return randProbPrimeRounds(k,18)}if(k>=100){return randProbPrimeRounds(k,27)}return randProbPrimeRounds(k,40)}function randProbPrimeRounds(k,n){var ans,i,divisible,B;B=30000;ans=int2bigInt(0,k,0);if(primes.length==0){primes=findPrimes(30000)}if(rpprb.length!=ans.length){rpprb=dup(ans)}for(;;){randBigInt_(ans,k,0);ans[0]|=1;divisible=0;for(i=0;(i<primes.length)&&(primes[i]<=B);i++){if(modInt(ans,primes[i])==0&&!equalsInt(ans,primes[i])){divisible=1;break}}for(i=0;i<n&&!divisible;i++){randBigInt_(rpprb,k,0);while(!greater(ans,rpprb)){randBigInt_(rpprb,k,0)}if(!millerRabin(ans,rpprb)){divisible=1}}if(!divisible){return ans}}}function mod(x,n){var ans=dup(x);mod_(ans,n);return trim(ans,1)}function addInt(x,n){var ans=expand(x,x.length+1);addInt_(ans,n);return trim(ans,1)}function mult(x,y){var ans=expand(x,x.length+y.length);mult_(ans,y);return trim(ans,1)}function powMod(x,y,n){var ans=expand(x,n.length);powMod_(ans,trim(y,2),trim(n,2),0);return trim(ans,1)}function sub(x,y){var ans=expand(x,(x.length>y.length?x.length+1:y.length+1));sub_(ans,y);return trim(ans,1)}function add(x,y){var ans=expand(x,(x.length>y.length?x.length+1:y.length+1));add_(ans,y);return trim(ans,1)}function inverseMod(x,n){var ans=expand(x,n.length);var s;s=inverseMod_(ans,n);return s?trim(ans,1):null}function multMod(x,y,n){var ans=expand(x,n.length);multMod_(ans,y,n);return trim(ans,1)}function randTruePrime_(ans,k){var c,m,pm,dd,j,r,B,divisible,z,zz,recSize;if(primes.length==0){primes=findPrimes(30000)}if(pows.length==0){pows=new Array(512);for(j=0;j<512;j++){pows[j]=Math.pow(2,j/511-1)}}c=0.1;m=20;recLimit=20;if(s_i2.length!=ans.length){s_i2=dup(ans);s_R=dup(ans);s_n1=dup(ans);s_r2=dup(ans);s_d=dup(ans);s_x1=dup(ans);s_x2=dup(ans);s_b=dup(ans);s_n=dup(ans);s_i=dup(ans);s_rm=dup(ans);s_q=dup(ans);s_a=dup(ans);s_aa=dup(ans)}if(k<=recLimit){pm=(1<<((k+2)>>1))-1;copyInt_(ans,0);for(dd=1;dd;){dd=0;ans[0]=1|(1<<(k-1))|Math.floor(adapterMathRandom()*(1<<k));for(j=1;(j<primes.length)&&((primes[j]&pm)==primes[j]);j++){if(0==(ans[0]%primes[j])){dd=1;break}}}carry_(ans);return}B=c*k*k;if(k>2*m){for(r=1;k-k*r<=m;){r=pows[Math.floor(adapterMathRandom()*512)]}}else{r=0.5}recSize=Math.floor(r*k)+1;randTruePrime_(s_q,recSize);copyInt_(s_i2,0);s_i2[Math.floor((k-2)/bpe)]|=(1<<((k-2)%bpe));divide_(s_i2,s_q,s_i,s_rm);z=bitSize(s_i);for(;;){for(;;){randBigInt_(s_R,z,0);if(greater(s_i,s_R)){break}}addInt_(s_R,1);add_(s_R,s_i);copy_(s_n,s_q);mult_(s_n,s_R);multInt_(s_n,2);addInt_(s_n,1);copy_(s_r2,s_R);multInt_(s_r2,2);for(divisible=0,j=0;(j<primes.length)&&(primes[j]<B);j++){if(modInt(s_n,primes[j])==0&&!equalsInt(s_n,primes[j])){divisible=1;break}}if(!divisible){if(!millerRabinInt(s_n,2)){divisible=1}}if(!divisible){addInt_(s_n,-3);for(j=s_n.length-1;(s_n[j]==0)&&(j>0);j--){}for(zz=0,w=s_n[j];w;(w>>=1),zz++){}zz+=bpe*j;for(;;){randBigInt_(s_a,zz,0);if(greater(s_n,s_a)){break}}addInt_(s_n,3);addInt_(s_a,2);copy_(s_b,s_a);copy_(s_n1,s_n);addInt_(s_n1,-1);powMod_(s_b,s_n1,s_n);addInt_(s_b,-1);if(isZero(s_b)){copy_(s_b,s_a);powMod_(s_b,s_r2,s_n);addInt_(s_b,-1);copy_(s_aa,s_n);copy_(s_d,s_b);GCD_(s_d,s_n);if(equalsInt(s_d,1)){copy_(ans,s_aa);return}}}}}function randBigInt(n,s){var a,b;a=Math.floor((n-1)/bpe)+2;b=int2bigInt(0,0,a);randBigInt_(b,n,s);return b}function randBigInt_(b,n,s){var i,a;for(i=0;i<b.length;i++){b[i]=0}a=Math.floor((n-1)/bpe)+1;for(i=0;i<a;i++){b[i]=Math.floor(adapterMathRandom()*(1<<(bpe-1)))}b[a-1]&=(2<<((n-1)%bpe))-1;if(s==1){b[a-1]|=(1<<((n-1)%bpe))}}function GCD(x,y){var xc,yc;xc=dup(x);yc=dup(y);GCD_(xc,yc);return xc}function GCD_(x,y){var i,xp,yp,A,B,C,D,q,sing;if(T.length!=x.length){T=dup(x)}sing=1;while(sing){sing=0;for(i=1;i<y.length;i++){if(y[i]){sing=1;break}}if(!sing){break}for(i=x.length;!x[i]&&i>=0;i--){}xp=x[i];yp=y[i];A=1;B=0;C=0;D=1;while((yp+C)&&(yp+D)){q=Math.floor((xp+A)/(yp+C));qp=Math.floor((xp+B)/(yp+D));if(q!=qp){break}t=A-q*C;A=C;C=t;t=B-q*D;B=D;D=t;t=xp-q*yp;xp=yp;yp=t}if(B){copy_(T,x);linComb_(x,y,A,B);linComb_(y,T,D,C)}else{mod_(x,y);copy_(T,x);copy_(x,y);copy_(y,T)}}if(y[0]==0){return}t=modInt(x,y[0]);copyInt_(x,y[0]);y[0]=t;while(y[0]){x[0]%=y[0];t=x[0];x[0]=y[0];y[0]=t}}function inverseMod_(x,n){var k=1+2*Math.max(x.length,n.length);if(!(x[0]&1)&&!(n[0]&1)){copyInt_(x,0);return 0}if(eg_u.length!=k){eg_u=new Array(k);eg_v=new Array(k);eg_A=new Array(k);eg_B=new Array(k);eg_C=new Array(k);eg_D=new Array(k)}copy_(eg_u,x);copy_(eg_v,n);copyInt_(eg_A,1);copyInt_(eg_B,0);copyInt_(eg_C,0);copyInt_(eg_D,1);for(;;){while(!(eg_u[0]&1)){halve_(eg_u);if(!(eg_A[0]&1)&&!(eg_B[0]&1)){halve_(eg_A);halve_(eg_B)}else{add_(eg_A,n);halve_(eg_A);sub_(eg_B,x);halve_(eg_B)}}while(!(eg_v[0]&1)){halve_(eg_v);if(!(eg_C[0]&1)&&!(eg_D[0]&1)){halve_(eg_C);halve_(eg_D)}else{add_(eg_C,n);halve_(eg_C);sub_(eg_D,x);halve_(eg_D)}}if(!greater(eg_v,eg_u)){sub_(eg_u,eg_v);sub_(eg_A,eg_C);sub_(eg_B,eg_D)}else{sub_(eg_v,eg_u);sub_(eg_C,eg_A);sub_(eg_D,eg_B)}if(equalsInt(eg_u,0)){if(negative(eg_C)){add_(eg_C,n)}copy_(x,eg_C);if(!equalsInt(eg_v,1)){copyInt_(x,0);return 0}return 1}}}function inverseModInt(x,n){var a=1,b=0,t;for(;;){if(x==1){return a}if(x==0){return 0}b-=a*Math.floor(n/x);n%=x;if(n==1){return b}if(n==0){return 0}a-=b*Math.floor(x/n);x%=n}}function inverseModInt_(x,n){return inverseModInt(x,n)}function eGCD_(x,y,v,a,b){var g=0;var k=Math.max(x.length,y.length);if(eg_u.length!=k){eg_u=new Array(k);eg_A=new Array(k);eg_B=new Array(k);eg_C=new Array(k);eg_D=new Array(k)}while(!(x[0]&1)&&!(y[0]&1)){halve_(x);halve_(y);g++}copy_(eg_u,x);copy_(v,y);copyInt_(eg_A,1);copyInt_(eg_B,0);copyInt_(eg_C,0);copyInt_(eg_D,1);for(;;){while(!(eg_u[0]&1)){halve_(eg_u);if(!(eg_A[0]&1)&&!(eg_B[0]&1)){halve_(eg_A);halve_(eg_B)}else{add_(eg_A,y);halve_(eg_A);sub_(eg_B,x);halve_(eg_B)}}while(!(v[0]&1)){halve_(v);if(!(eg_C[0]&1)&&!(eg_D[0]&1)){halve_(eg_C);halve_(eg_D)}else{add_(eg_C,y);halve_(eg_C);sub_(eg_D,x);halve_(eg_D)}}if(!greater(v,eg_u)){sub_(eg_u,v);sub_(eg_A,eg_C);sub_(eg_B,eg_D)}else{sub_(v,eg_u);sub_(eg_C,eg_A);sub_(eg_D,eg_B)}if(equalsInt(eg_u,0)){if(negative(eg_C)){add_(eg_C,y);sub_(eg_D,x)}multInt_(eg_D,-1);copy_(a,eg_C);copy_(b,eg_D);leftShift_(v,g);return}}}function negative(x){return((x[x.length-1]>>(bpe-1))&1)}function greaterShift(x,y,shift){var i,kx=x.length,ky=y.length;k=((kx+shift)<ky)?(kx+shift):ky;for(i=ky-1-shift;i<kx&&i>=0;i++){if(x[i]>0){return 1}}for(i=kx-1+shift;i<ky;i++){if(y[i]>0){return 0}}for(i=k-1;i>=shift;i--){if(x[i-shift]>y[i]){return 1}else{if(x[i-shift]<y[i]){return 0}}}return 0}function greater(x,y){var i;var k=(x.length<y.length)?x.length:y.length;for(i=x.length;i<y.length;i++){if(y[i]){return 0}}for(i=y.length;i<x.length;i++){if(x[i]){return 1}}for(i=k-1;i>=0;i--){if(x[i]>y[i]){return 1}else{if(x[i]<y[i]){return 0}}}return 0}function divide_(x,y,q,r){var kx,ky;var i,j,y1,y2,c,a,b;copy_(r,x);for(ky=y.length;y[ky-1]==0;ky--){}b=y[ky-1];for(a=0;b;a++){b>>=1}a=bpe-a;leftShift_(y,a);leftShift_(r,a);for(kx=r.length;r[kx-1]==0&&kx>ky;kx--){}copyInt_(q,0);while(!greaterShift(y,r,kx-ky)){subShift_(r,y,kx-ky);q[kx-ky]++}for(i=kx-1;i>=ky;i--){if(r[i]==y[ky-1]){q[i-ky]=mask}else{q[i-ky]=Math.floor((r[i]*radix+r[i-1])/y[ky-1])}for(;;){y2=(ky>1?y[ky-2]:0)*q[i-ky];c=y2>>bpe;y2=y2&mask;y1=c+q[i-ky]*y[ky-1];c=y1>>bpe;y1=y1&mask;if(c==r[i]?y1==r[i-1]?y2>(i>1?r[i-2]:0):y1>r[i-1]:c>r[i]){q[i-ky]--}else{break}}linCombShift_(r,y,-q[i-ky],i-ky);if(negative(r)){addShift_(r,y,i-ky);q[i-ky]--}}rightShift_(y,a);rightShift_(r,a)}function carry_(x){var i,k,c,b;k=x.length;c=0;for(i=0;i<k;i++){c+=x[i];b=0;if(c<0){b=-(c>>bpe);c+=b*radix}x[i]=c&mask;c=(c>>bpe)-b}}function modInt(x,n){var i,c=0;for(i=x.length-1;i>=0;i--){c=(c*radix+x[i])%n}return c}function int2bigInt(t,bits,minSize){var i,k;k=Math.ceil(bits/bpe)+1;k=minSize>k?minSize:k;buff=new Array(k);copyInt_(buff,t);return buff}function str2bigInt(s,base,minSize){var d,i,j,x,y,kk;var k=s.length;if(base==-1){x=new Array(0);for(;;){y=new Array(x.length+1);for(i=0;i<x.length;i++){y[i+1]=x[i]}y[0]=parseInt(s,10);x=y;d=s.indexOf(\",\",0);if(d<1){break}s=s.substring(d+1);if(s.length==0){break}}if(x.length<minSize){y=new Array(minSize);copy_(y,x);return y}return x}x=int2bigInt(0,base*k,0);for(i=0;i<k;i++){d=digitsStr.indexOf(s.substring(i,i+1),0);if(base<=36&&d>=36){d-=26}if(d>=base||d<0){break}multInt_(x,base);addInt_(x,d)}for(k=x.length;k>0&&!x[k-1];k--){}k=minSize>k+1?minSize:k+1;y=new Array(k);kk=k<x.length?k:x.length;for(i=0;i<kk;i++){y[i]=x[i]}for(;i<k;i++){y[i]=0}return y}function equalsInt(x,y){var i;if(x[0]!=y){return 0}for(i=1;i<x.length;i++){if(x[i]){return 0}}return 1}function equals(x,y){var i;var k=x.length<y.length?x.length:y.length;for(i=0;i<k;i++){if(x[i]!=y[i]){return 0}}if(x.length>y.length){for(;i<x.length;i++){if(x[i]){return 0}}}else{for(;i<y.length;i++){if(y[i]){return 0}}}return 1}function isZero(x){var i;for(i=0;i<x.length;i++){if(x[i]){return 0}}return 1}function bigInt2str(x,base){var i,t,s=\"\";if(s6.length!=x.length){s6=dup(x)}else{copy_(s6,x)}if(base==-1){for(i=x.length-1;i>0;i--){s+=x[i]+\",\"}s+=x[0]}else{while(!isZero(s6)){t=divInt_(s6,base);s=digitsStr.substring(t,t+1)+s}}if(s.length==0){s=\"0\"}return s}function dup(x){var i;buff=new Array(x.length);copy_(buff,x);return buff}function copy_(x,y){var i;var k=x.length<y.length?x.length:y.length;for(i=0;i<k;i++){x[i]=y[i]}for(i=k;i<x.length;i++){x[i]=0}}function copyInt_(x,n){var i,c;for(c=n,i=0;i<x.length;i++){x[i]=c&mask;c>>=bpe}}function addInt_(x,n){var i,k,c,b;x[0]+=n;k=x.length;c=0;for(i=0;i<k;i++){c+=x[i];b=0;if(c<0){b=-(c>>bpe);c+=b*radix}x[i]=c&mask;c=(c>>bpe)-b;if(!c){return}}}function rightShift_(x,n){var i;var k=Math.floor(n/bpe);if(k){for(i=0;i<x.length-k;i++){x[i]=x[i+k]}for(;i<x.length;i++){x[i]=0}n%=bpe}for(i=0;i<x.length-1;i++){x[i]=mask&((x[i+1]<<(bpe-n))|(x[i]>>n))}x[i]>>=n}function halve_(x){var i;for(i=0;i<x.length-1;i++){x[i]=mask&((x[i+1]<<(bpe-1))|(x[i]>>1))}x[i]=(x[i]>>1)|(x[i]&(radix>>1))}function leftShift_(x,n){var i;var k=Math.floor(n/bpe);if(k){for(i=x.length;i>=k;i--){x[i]=x[i-k]}for(;i>=0;i--){x[i]=0}n%=bpe}if(!n){return}for(i=x.length-1;i>0;i--){x[i]=mask&((x[i]<<n)|(x[i-1]>>(bpe-n)))}x[i]=mask&(x[i]<<n)}function multInt_(x,n){var i,k,c,b;if(!n){return}k=x.length;c=0;for(i=0;i<k;i++){c+=x[i]*n;b=0;if(c<0){b=-(c>>bpe);c+=b*radix}x[i]=c&mask;c=(c>>bpe)-b}}function divInt_(x,n){var i,r=0,s;for(i=x.length-1;i>=0;i--){s=r*radix+x[i];x[i]=Math.floor(s/n);r=s%n}return r}function linComb_(x,y,a,b){var i,c,k,kk;k=x.length<y.length?x.length:y.length;kk=x.length;for(c=0,i=0;i<k;i++){c+=a*x[i]+b*y[i];x[i]=c&mask;c>>=bpe}for(i=k;i<kk;i++){c+=a*x[i];x[i]=c&mask;c>>=bpe}}function linCombShift_(x,y,b,ys){var i,c,k,kk;k=x.length<ys+y.length?x.length:ys+y.length;kk=x.length;for(c=0,i=ys;i<k;i++){c+=x[i]+b*y[i-ys];x[i]=c&mask;c>>=bpe}for(i=k;c&&i<kk;i++){c+=x[i];x[i]=c&mask;c>>=bpe}}function addShift_(x,y,ys){var i,c,k,kk;k=x.length<ys+y.length?x.length:ys+y.length;kk=x.length;for(c=0,i=ys;i<k;i++){c+=x[i]+y[i-ys];x[i]=c&mask;c>>=bpe}for(i=k;c&&i<kk;i++){c+=x[i];x[i]=c&mask;c>>=bpe}}function subShift_(x,y,ys){var i,c,k,kk;k=x.length<ys+y.length?x.length:ys+y.length;kk=x.length;for(c=0,i=ys;i<k;i++){c+=x[i]-y[i-ys];x[i]=c&mask;c>>=bpe}for(i=k;c&&i<kk;i++){c+=x[i];x[i]=c&mask;c>>=bpe}}function sub_(x,y){var i,c,k,kk;k=x.length<y.length?x.length:y.length;for(c=0,i=0;i<k;i++){c+=x[i]-y[i];x[i]=c&mask;c>>=bpe}for(i=k;c&&i<x.length;i++){c+=x[i];x[i]=c&mask;c>>=bpe}}function add_(x,y){var i,c,k,kk;k=x.length<y.length?x.length:y.length;for(c=0,i=0;i<k;i++){c+=x[i]+y[i];x[i]=c&mask;c>>=bpe}for(i=k;c&&i<x.length;i++){c+=x[i];x[i]=c&mask;c>>=bpe}}function mult_(x,y){var i;if(ss.length!=2*x.length){ss=new Array(2*x.length)}copyInt_(ss,0);for(i=0;i<y.length;i++){if(y[i]){linCombShift_(ss,x,y[i],i)}}copy_(x,ss)}function mod_(x,n){if(s4.length!=x.length){s4=dup(x)}else{copy_(s4,x)}if(s5.length!=x.length){s5=dup(x)}divide_(s4,n,s5,x)}function multMod_(x,y,n){var i;if(s0.length!=2*x.length){s0=new Array(2*x.length)}copyInt_(s0,0);for(i=0;i<y.length;i++){if(y[i]){linCombShift_(s0,x,y[i],i)}}mod_(s0,n);copy_(x,s0)}function squareMod_(x,n){var i,j,d,c,kx,kn,k;for(kx=x.length;kx>0&&!x[kx-1];kx--){}k=kx>n.length?2*kx:2*n.length;if(s0.length!=k){s0=new Array(k)}copyInt_(s0,0);for(i=0;i<kx;i++){c=s0[2*i]+x[i]*x[i];s0[2*i]=c&mask;c>>=bpe;for(j=i+1;j<kx;j++){c=s0[i+j]+2*x[i]*x[j]+c;s0[i+j]=(c&mask);c>>=bpe}s0[i+kx]=c}mod_(s0,n);copy_(x,s0)}function trim(x,k){var i,y;for(i=x.length;i>0&&!x[i-1];i--){}y=new Array(i+k);copy_(y,x);return y}function powMod_(x,y,n){var k1,k2,kn,np;if(s7.length!=n.length){s7=dup(n)}if((n[0]&1)==0){copy_(s7,x);copyInt_(x,1);while(!equalsInt(y,0)){if(y[0]&1){multMod_(x,s7,n)}divInt_(y,2);squareMod_(s7,n)}return}copyInt_(s7,0);for(kn=n.length;kn>0&&!n[kn-1];kn--){}np=radix-inverseModInt(modInt(n,radix),radix);s7[kn]=1;multMod_(x,s7,n);if(s3.length!=x.length){s3=dup(x)}else{copy_(s3,x)}for(k1=y.length-1;k1>0&!y[k1];k1--){}if(y[k1]==0){copyInt_(x,1);return}for(k2=1<<(bpe-1);k2&&!(y[k1]&k2);k2>>=1){}for(;;){if(!(k2>>=1)){k1--;if(k1<0){mont_(x,one,n,np);return}k2=1<<(bpe-1)}mont_(x,x,n,np);if(k2&y[k1]){mont_(x,s3,n,np)}}}function mont_(x,y,n,np){var i,j,c,ui,t,ks;var kn=n.length;var ky=y.length;if(sa.length!=kn){sa=new Array(kn)}copyInt_(sa,0);for(;kn>0&&n[kn-1]==0;kn--){}for(;ky>0&&y[ky-1]==0;ky--){}ks=sa.length-1;for(i=0;i<kn;i++){t=sa[0]+x[i]*y[0];ui=((t&mask)*np)&mask;c=(t+ui*n[0])>>bpe;t=x[i];j=1;for(;j<ky-4;){c+=sa[j]+ui*n[j]+t*y[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j]+t*y[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j]+t*y[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j]+t*y[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j]+t*y[j];sa[j-1]=c&mask;c>>=bpe;j++}for(;j<ky;){c+=sa[j]+ui*n[j]+t*y[j];sa[j-1]=c&mask;c>>=bpe;j++}for(;j<kn-4;){c+=sa[j]+ui*n[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j];sa[j-1]=c&mask;c>>=bpe;j++;c+=sa[j]+ui*n[j];sa[j-1]=c&mask;c>>=bpe;j++}for(;j<kn;){c+=sa[j]+ui*n[j];sa[j-1]=c&mask;c>>=bpe;j++}for(;j<ks;){c+=sa[j];sa[j-1]=c&mask;c>>=bpe;j++}sa[j-1]=c&mask}if(!greater(n,sa)){sub_(sa,n)}copy_(x,sa)}var blowfish=(function(undefined){var P=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],S1=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],S2=[1266315497,3048417604,3681880366,3289982499,2909710000,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],S3=[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],S4=[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409000,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],p,s1,s2,s3,s4;function i2s(i){return String.fromCharCode(i>>24&255,i>>16&255,i>>8&255,i&255)}function s2i(s,j){return(s.charCodeAt(j++)&255)<<24|(s.charCodeAt(j++)&255)<<16|(s.charCodeAt(j++)&255)<<8|(s.charCodeAt(j++)&255)}function xor(a,b){return i2s(s2i(a,0)^s2i(b,0))+i2s(s2i(a,4)^s2i(b,4))}function f(x){return(s1[x>>24&255]+s2[x>>16&255]^s3[x>>8&255])+s4[x&255]^0}function encipher(x){var i=0,t,l=s2i(x,0),r=s2i(x,4);while(i<16){l^=p[i++];r^=f(l);t=l;l=r;r=t}l^=p[i++];r^=p[i];return i2s(r)+i2s(l)}function decipher(x){var i=17,t,l=s2i(x,0),r=s2i(x,4);while(i>1){l^=p[i--];r^=f(l);t=l;l=r;r=t}l^=p[i--];r^=p[i];return i2s(r)+i2s(l)}function subkey(k){var i,x=\"\\0\\0\\0\\0\\0\\0\\0\\0\";p=P.slice();s1=S1.slice();s2=S2.slice();s3=S3.slice();s4=S4.slice();while(k.length<72){k+=k}i=0;while(i<18){p[i]^=s2i(k,i<<2);i++}i=0;while(i<18){x=encipher(x);p[i++]=s2i(x,0);p[i++]=s2i(x,4)}i=0;while(i<256){x=encipher(x);s1[i++]=s2i(x,0);s1[i++]=s2i(x,4)}i=0;while(i<256){x=encipher(x);s2[i++]=s2i(x,0);s2[i++]=s2i(x,4)}i=0;while(i<256){x=encipher(x);s3[i++]=s2i(x,0);s3[i++]=s2i(x,4)}i=0;while(i<256){x=encipher(x);s4[i++]=s2i(x,0);s4[i++]=s2i(x,4)}}function utf8(s){var i=0,l=s.length,x=String.fromCharCode,c,r=[];while(i<l){c=s.charCodeAt(i++);if(c<128){r.push(x(c))}else{if(c<2048){r.push(x(c>>6&31|192,c&63|128))}else{if(c<65536){r.push(x(c>>12&15|224,c>>6&63|128,c&63|128))}else{if(c<2097152){r.push(x(c>>18&7|240,c>>12&63|128,c>>6&63|128,c&63|128))}else{}}}}}return r.join(\"\")}function utf16(s){var i=0,l=s.length,x=String.fromCharCode,c,r=[];while(i<l){c=s.charCodeAt(i++);if((c&128)==0){r.push(x(c&255))}else{if((c&224)==192){if(i<l){r.push(x((c<<6&1984)|(s.charCodeAt(i++)&63)))}}else{if((c&240)==224){if(i+1<l){r.push(x((c<<12&61440)|(s.charCodeAt(i++)<<6&4032)|(s.charCodeAt(i++)&63)))}}else{if((c&248)==240){if(i+2<l){r.push(x((c<<18&1835008)|(s.charCodeAt(i++)<<12&258048)|(s.charCodeAt(i++)<<6&4032)|(s.charCodeAt(i++)&63)))}}else{}}}}}return r.join(\"\")}return{encrypt:function(param){var i,c,v,block=[],data=param.data||\"\",key=param.key||\"\\0\",mode=param.mode||\"ecb\",pchar=param.pchar||\"\\x05\";subkey(key);data=utf8(data);data+=new Array((8-data.length%8)%8+1).join(pchar);if(mode==\"cbc\"){v=param.iv||\"\\0\\0\\0\\0\\0\\0\\0\\0\";block.push(v);i=0;while(i<data.length){c=encipher(xor(data.substr(i,8),v));block.push(c);v=c;i+=8}}else{i=0;while(i<data.length){block.push(encipher(data.substr(i,8)));i+=8}}return block.join(\"\")},decrypt:function(param){var i,c,v,block=[],data=param.data||\"\",key=param.key||\"\\0\",mode=param.mode||\"ecb\",pchar=param.pchar||\"\\x05\";subkey(key);data+=new Array((8-data.length%8)%8+1).join(\"\\0\");if(mode==\"cbc\"){v=data.substr(0,8)||\"\\0\\0\\0\\0\\0\\0\\0\\0\";i=8;while(i<data.length){c=data.substr(i,8);block.push(xor(decipher(c),v));v=c;i+=8}}else{i=0;while(i<data.length){block.push(decipher(data.substr(i,8)));i+=8}}data=block.join(\"\").replace(new RegExp(pchar+\"+$\"),\"\");return utf16(data)},mkIV:function(){function adapterMathRandom(){var crypto=window.crypto||window.msCrypto;var rand;try{rand=crypto.getRandomValues(new Uint32Array(1))[0]/4294967296}catch(e){console.log(\"GetRandomValues is not supported on your browser\")}return rand}return i2s(adapterMathRandom()*4294967296)+i2s(adapterMathRandom()*4294967296)}}})();var md5=(function(undefined){var s=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],k=[3614090360,3905402710,606105819,3250441966,4118548399,1200080426,2821735955,4249261313,1770035416,2336552879,4294925233,2304563134,1804603682,4254626195,2792965006,1236535329,4129170786,3225465664,643717713,3921069994,3593408605,38016083,3634488961,3889429448,568446438,3275163606,4107603335,1163531501,2850285829,4243563512,1735328473,2368359562,4294588738,2272392833,1839030562,4259657740,2763975236,1272893353,4139469664,3200236656,681279174,3936430074,3572445317,76029189,3654602809,3873151461,530742520,3299628645,4096336452,1126891415,2878612391,4237533241,1700485571,2399980690,4293915773,2240044497,1873313359,4264355552,2734768916,1309151649,4149444226,3174756917,718787259,3951481745],p=\"\\x80\"+new Array(64).join(\"\\0\");function i2s(i){return String.fromCharCode(i&255,i>>8&255,i>>16&255,i>>24&255)}function s2i(s,j){return(s.charCodeAt(j++)&255)|(s.charCodeAt(j++)&255)<<8|(s.charCodeAt(j++)&255)<<16|(s.charCodeAt(j++))<<24}return{bin:function(data){var a0=1732584193,b0=4023233417,c0=2562383102,d0=271733878,a,b,c,d,f,g,r,i,j,m=new Array(16);data+=p.slice(0,64-(data.length+8)%64)+i2s(data.length<<3)+i2s(0);for(i=0;i<data.length;i+=64){for(j=0;j<16;j++){m[j]=s2i(data,i+(j<<2))}a=a0;b=b0;c=c0;d=d0;for(j=0;j<64;j++){if(j<16){f=(b&c)|(~b&d);g=j}else{if(j<32){f=(d&b)|(~d&c);g=j*5+1&15}else{if(j<48){f=b^c^d;g=j*3+5&15}else{f=c^(b|~d);g=j*7&15}}}r=a+f+k[j]+m[g]|0;r=(r<<s[j])|(r>>>32-s[j]);a=d;d=c;c=b;b=r+b|0}a0=a0+a|0;b0=b0+b|0;c0=c0+c|0;d0=d0+d|0}return i2s(a0)+i2s(b0)+i2s(c0)+i2s(d0)}}})();(function(){var l=void 0,aa=this;function r(c,d){var a=c.split(\".\"),b=aa;!(a[0] in b)&&b.execScript&&b.execScript(\"var \"+a[0]);for(var e;a.length&&(e=a.shift());){!a.length&&d!==l?b[e]=d:b=b[e]?b[e]:b[e]={}}}var t=\"undefined\"!==typeof Uint8Array&&\"undefined\"!==typeof Uint16Array&&\"undefined\"!==typeof Uint32Array&&\"undefined\"!==typeof DataView;function v(c){var d=c.length,a=0,b=Number.POSITIVE_INFINITY,e,f,g,h,k,m,n,p,s,x;for(p=0;p<d;++p){c[p]>a&&(a=c[p]),c[p]<b&&(b=c[p])}e=1<<a;f=new (t?Uint32Array:Array)(e);g=1;h=0;for(k=2;g<=a;){for(p=0;p<d;++p){if(c[p]===g){m=0;n=h;for(s=0;s<g;++s){m=m<<1|n&1,n>>=1}x=g<<16|p;for(s=m;s<e;s+=k){f[s]=x}++h}}++g;h<<=1;k<<=1}return[f,a,b]}function w(c,d){this.g=[];this.h=32768;this.d=this.f=this.a=this.l=0;this.input=t?new Uint8Array(c):c;this.m=!1;this.i=y;this.r=!1;if(d||!(d={})){d.index&&(this.a=d.index),d.bufferSize&&(this.h=d.bufferSize),d.bufferType&&(this.i=d.bufferType),d.resize&&(this.r=d.resize)}switch(this.i){case A:this.b=32768;this.c=new (t?Uint8Array:Array)(32768+this.h+258);break;case y:this.b=0;this.c=new (t?Uint8Array:Array)(this.h);this.e=this.z;this.n=this.v;this.j=this.w;break;default:throw Error(\"invalid inflate mode\")}}var A=0,y=1,B={t:A,s:y};w.prototype.k=function(){for(;!this.m;){var c=C(this,3);c&1&&(this.m=!0);c>>>=1;switch(c){case 0:var d=this.input,a=this.a,b=this.c,e=this.b,f=d.length,g=l,h=l,k=b.length,m=l;this.d=this.f=0;if(a+1>=f){throw Error(\"invalid uncompressed block header: LEN\")}g=d[a++]|d[a++]<<8;if(a+1>=f){throw Error(\"invalid uncompressed block header: NLEN\")}h=d[a++]|d[a++]<<8;if(g===~h){throw Error(\"invalid uncompressed block header: length verify\")}if(a+g>d.length){throw Error(\"input buffer is broken\")}switch(this.i){case A:for(;e+g>b.length;){m=k-e;g-=m;if(t){b.set(d.subarray(a,a+m),e),e+=m,a+=m}else{for(;m--;){b[e++]=d[a++]}}this.b=e;b=this.e();e=this.b}break;case y:for(;e+g>b.length;){b=this.e({p:2})}break;default:throw Error(\"invalid inflate mode\")}if(t){b.set(d.subarray(a,a+g),e),e+=g,a+=g}else{for(;g--;){b[e++]=d[a++]}}this.a=a;this.b=e;this.c=b;break;case 1:this.j(ba,ca);break;case 2:for(var n=C(this,5)+257,p=C(this,5)+1,s=C(this,4)+4,x=new (t?Uint8Array:Array)(D.length),S=l,T=l,U=l,u=l,M=l,F=l,z=l,q=l,V=l,q=0;q<s;++q){x[D[q]]=C(this,3)}if(!t){q=s;for(s=x.length;q<s;++q){x[D[q]]=0}}S=v(x);u=new (t?Uint8Array:Array)(n+p);q=0;for(V=n+p;q<V;){switch(M=E(this,S),M){case 16:for(z=3+C(this,2);z--;){u[q++]=F}break;case 17:for(z=3+C(this,3);z--;){u[q++]=0}F=0;break;case 18:for(z=11+C(this,7);z--;){u[q++]=0}F=0;break;default:F=u[q++]=M}}T=t?v(u.subarray(0,n)):v(u.slice(0,n));U=t?v(u.subarray(n)):v(u.slice(n));this.j(T,U);break;default:throw Error(\"unknown BTYPE: \"+c)}}return this.n()};var G=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=t?new Uint16Array(G):G,H=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],I=t?new Uint16Array(H):H,J=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],K=t?new Uint8Array(J):J,L=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],da=t?new Uint16Array(L):L,ea=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],N=t?new Uint8Array(ea):ea,O=new (t?Uint8Array:Array)(288),P,fa;P=0;for(fa=O.length;P<fa;++P){O[P]=143>=P?8:255>=P?9:279>=P?7:8}var ba=v(O),Q=new (t?Uint8Array:Array)(30),R,ga;R=0;for(ga=Q.length;R<ga;++R){Q[R]=5}var ca=v(Q);function C(c,d){for(var a=c.f,b=c.d,e=c.input,f=c.a,g=e.length,h;b<d;){if(f>=g){throw Error(\"input buffer is broken\")}a|=e[f++]<<b;b+=8}h=a&(1<<d)-1;c.f=a>>>d;c.d=b-d;c.a=f;return h}function E(c,d){for(var a=c.f,b=c.d,e=c.input,f=c.a,g=e.length,h=d[0],k=d[1],m,n;b<k&&!(f>=g);){a|=e[f++]<<b,b+=8}m=h[a&(1<<k)-1];n=m>>>16;if(n>b){throw Error(\"invalid code length: \"+n)}c.f=a>>n;c.d=b-n;c.a=f;return m&65535}w.prototype.j=function(c,d){var a=this.c,b=this.b;this.o=c;for(var e=a.length-258,f,g,h,k;256!==(f=E(this,c));){if(256>f){b>=e&&(this.b=b,a=this.e(),b=this.b),a[b++]=f}else{g=f-257;k=I[g];0<K[g]&&(k+=C(this,K[g]));f=E(this,d);h=da[f];0<N[f]&&(h+=C(this,N[f]));b>=e&&(this.b=b,a=this.e(),b=this.b);for(;k--;){a[b]=a[b++-h]}}}for(;8<=this.d;){this.d-=8,this.a--}this.b=b};w.prototype.w=function(c,d){var a=this.c,b=this.b;this.o=c;for(var e=a.length,f,g,h,k;256!==(f=E(this,c));){if(256>f){b>=e&&(a=this.e(),e=a.length),a[b++]=f}else{g=f-257;k=I[g];0<K[g]&&(k+=C(this,K[g]));f=E(this,d);h=da[f];0<N[f]&&(h+=C(this,N[f]));b+k>e&&(a=this.e(),e=a.length);for(;k--;){a[b]=a[b++-h]}}}for(;8<=this.d;){this.d-=8,this.a--}this.b=b};w.prototype.e=function(){var c=new (t?Uint8Array:Array)(this.b-32768),d=this.b-32768,a,b,e=this.c;if(t){c.set(e.subarray(32768,c.length))}else{a=0;for(b=c.length;a<b;++a){c[a]=e[a+32768]}}this.g.push(c);this.l+=c.length;if(t){e.set(e.subarray(d,d+32768))}else{for(a=0;32768>a;++a){e[a]=e[d+a]}}this.b=32768;return e};w.prototype.z=function(c){var d,a=this.input.length/this.a+1|0,b,e,f,g=this.input,h=this.c;c&&(\"number\"===typeof c.p&&(a=c.p),\"number\"===typeof c.u&&(a+=c.u));2>a?(b=(g.length-this.a)/this.o[2],f=258*(b/2)|0,e=f<h.length?h.length+f:h.length<<1):e=h.length*a;t?(d=new Uint8Array(e),d.set(h)):d=h;return this.c=d};w.prototype.n=function(){var c=0,d=this.c,a=this.g,b,e=new (t?Uint8Array:Array)(this.l+(this.b-32768)),f,g,h,k;if(0===a.length){return t?this.c.subarray(32768,this.b):this.c.slice(32768,this.b)}f=0;for(g=a.length;f<g;++f){b=a[f];h=0;for(k=b.length;h<k;++h){e[c++]=b[h]}}f=32768;for(g=this.b;f<g;++f){e[c++]=d[f]}this.g=[];return this.buffer=e};w.prototype.v=function(){var c,d=this.b;t?this.r?(c=new Uint8Array(d),c.set(this.c.subarray(0,d))):c=this.c.subarray(0,d):(this.c.length>d&&(this.c.length=d),c=this.c);return this.buffer=c};function W(c,d){var a,b;this.input=c;this.a=0;if(d||!(d={})){d.index&&(this.a=d.index),d.verify&&(this.A=d.verify)}a=c[this.a++];b=c[this.a++];switch(a&15){case ha:this.method=ha;break;default:throw Error(\"unsupported compression method\")}if(0!==((a<<8)+b)%31){throw Error(\"invalid fcheck flag:\"+((a<<8)+b)%31)}if(b&32){throw Error(\"fdict flag is not supported\")}this.q=new w(c,{index:this.a,bufferSize:d.bufferSize,bufferType:d.bufferType,resize:d.resize})}W.prototype.k=function(){var c=this.input,d,a;d=this.q.k();this.a=this.q.a;if(this.A){a=(c[this.a++]<<24|c[this.a++]<<16|c[this.a++]<<8|c[this.a++])>>>0;var b=d;if(\"string\"===typeof b){var e=b.split(\"\"),f,g;f=0;for(g=e.length;f<g;f++){e[f]=(e[f].charCodeAt(0)&255)>>>0}b=e}for(var h=1,k=0,m=b.length,n,p=0;0<m;){n=1024<m?1024:m;m-=n;do{h+=b[p++],k+=h}while(--n);h%=65521;k%=65521}if(a!==(k<<16|h)>>>0){throw Error(\"invalid adler-32 checksum\")}}return d};var ha=8;r(\"Zlib.Inflate\",W);r(\"Zlib.Inflate.prototype.decompress\",W.prototype.k);var X={ADAPTIVE:B.s,BLOCK:B.t},Y,Z,$,ia;if(Object.keys){Y=Object.keys(X)}else{for(Z in Y=[],$=0,X){Y[$++]=Z}}$=0;for(ia=Y.length;$<ia;++$){Z=Y[$],r(\"Zlib.Inflate.BufferType.\"+Z,X[Z])}}).call(this);if(!window.epson){window.epson={}}window.epson.ePOSDevice=ePOSDevice;window.epson.ePOSDeviceConfiguration=ePOSDeviceConfiguration})(window);\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('PendingInvoicesDialogController', PendingInvoicesDialogController);\n\n  /** @ngInject */\n  function PendingInvoicesDialogController($mdDialog, params) {\n    var vm = this;\n    vm.now = new Date();\n    vm.invoices = params.invoices.map(function(invoice) {\n      invoice.invoice_date = new Date(invoice.invoice_date);\n      invoice.due_date = new Date(invoice.due_date);\n      return invoice;\n    });\n\n    vm.close = close;\n\n    function close() {\n      $mdDialog.cancel();\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('orderProductsStockDetailsController', orderProductsStockDetailsController)\n    .directive('orderProductsStockDetails', orderProductsStockDetails);\n\n  /** @ngInject */\n  function orderProductsStockDetails() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/order-products-stock-details/order-products-stock-details.html',\n      scope: {\n        order: '=',\n        type: '='\n      },\n      controller: 'orderProductsStockDetailsController',\n      controllerAs: 'vm'\n    };\n\n  }\n\n  /** @ngInject */\n  function orderProductsStockDetailsController($scope,\n                                               OrderProductDTO,\n                                               api,\n                                               HTTP_STATUS,\n                                               DTColumnBuilder,\n                                               $mdToast,\n                                               $translate,\n                                               uiGridGroupingService,\n                                               $timeout,\n                                               $http,\n                                               uiGridTreeViewConstants,\n                                               ORDER_LOG_CHANGE_TYPES,\n                                               Session,\n                                               UiGridService,\n                                               uiGridGroupingConstants,\n                                               StockDetailDTO,\n                                               $compile,\n                                               $mdDialog,\n                                               $filter) {\n\n    var vm = this;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.ORDER_LOG_CHANGE_TYPES = ORDER_LOG_CHANGE_TYPES;\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.isEditable = $scope.order.is_editable;\n    vm.loading = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n    vm.contextDataByProductDict = {};\n    vm.newUidStock = {\n      uid: '',\n      amount: 1,\n      warehouse_id: vm.warehouseId,\n      product_variant_id: null,\n      received: false,\n      purchase_order_delivery_id: $scope.order.id\n    };\n\n    vm.searchText = '';\n    vm.showProductAutocompleteInput = false;\n\n    vm.getGridDetailPage = getGridDetailPage;\n    vm.deleteStockDetailFromOrder = deleteStockDetailFromOrder;\n    vm.addNewUidEmptyRow = addNewUidEmptyRow;\n    vm.updateUidStock = updateUidStock;\n    vm.autocompleteCallback = autocompleteCallback;\n    vm.copyFieldInClipboard = copyFieldInClipboard;\n    vm.uidFieldsEditable = uidFieldsEditable;\n    vm.showUIDsDialogAndAdd = showUIDsDialogAndAdd;\n    vm.isStockDetailEditable = isStockDetailEditable;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      treeRowHeaderAlwaysVisible: false,\n      onRegisterApi: initializeUidGrid,\n      enableGridMenu: false\n    });\n\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridDetailPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridDetailPage();\n        }\n      });\n\n      vm.gridApi.grid.registerDataChangeCallback(function() {\n        vm.gridApi.treeBase.expandAllRows();\n      });\n\n      setGridColumns();\n\n      $timeout(function() {\n        getGridDetailPage();\n      }, 200);\n    }\n\n    function getProductRowClass(row) {\n      if (row.treeLevel === 0) {\n        return 'product-header border-top';\n      }\n      return '';\n    }\n\n    function setGridColumns(avoidState) {\n      angular.extend(vm.columns, {\n        product_code: {\n          displayName: $filter('translate')('PRODUCT.PRODUCT'),\n          field: 'product_code',\n          grouping: { groupPriority: 0 },\n          permission: true,\n          visible: true,\n          groupHeader: true,\n          enableColumnMenu: false,\n          width: 390,\n          sort: { priority: 0, direction: 'desc' },\n          enableSorting: false,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row);\n          },\n          cellTemplate: '<div ng-show=\"row.treeLevel === 0\" class=\"full-width stock-detail-product\">' +\n            '<div layout=\"row\" layout-align=\"start center\">' +\n            '<div class=\"pr-8\">' +\n            '<md-icon ng-if=\"row.treeNode.children[0].row.entity.cover_thumbnail === null\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '<img ng-if=\"row.treeNode.children[0].row.entity.product_cover_thumbnail !== null\" ng-src=\"{{row.treeNode.children[0].row.entity.product_cover_thumbnail}}\">' +\n            '</div>' +\n            '<div layout=\"column\" layout-align=\"start start\">' +\n            '<div><a class=\"mr-10\" tabindex=\"-1\" href=\"/inventory/products/{{row.treeNode.children[0].row.entity.product_id}}/overview\">{{row.treeNode.children[0].row.entity.product_code}}</a></div>' +\n            '<div><span class=\"mr-10\" style=\"font-weight: normal;\">{{row.treeNode.children[0].row.entity.product_name}}</span></div>' +\n            '</div>' +\n            '<div flex layout=\"row\" layout-align=\"end center\">' +\n            '<span flex></span>' +\n            '<div class=\"show-stock-button\">' +\n            '<md-icon class=\"cursor-pointer\" ng-click=\"grid.appScope.vm.copyFieldInClipboard(row.treeNode.children[0].row.entity.product_code)\" md-font-icon=\"icon-content-copy\">' +\n            '<md-tooltip>{{\"PRODUCT.COPY_PRODUCT_CODE\" | translate }}</md-tooltip></md-icon>' +\n            '</div>' +\n            '</div>' +\n            '</div>' +\n            '</div>' +\n            '<div flex layout=\"row\" layout-align=\"start start\" ng-show=\"row.treeLevel !== 0\">' +\n            '<span class=\"cell-middle boldNameClass\">{{row.entity.product_variant_code}}</span>' +\n            '<div><md-icon ng-if=\"row.entity.is_devolution\" class=\"refund-icon refund-position\" md-svg-src=\"assets/images/custom-material-design-icons/refund.221d6d4a.svg\">' +\n            '<md-tooltip>{{\"SALES.DEVOLUTION\" | translate }}</md-tooltip></md-icon>' +\n            '</md-icon></div>' +\n            '</div>'\n        },\n        ordered: {\n          displayName: $filter('translate')('ORDER.ORDERED'),\n          field: 'ordered_amount',\n          permission: true,\n          visible: showOrderedColumn(),\n          maxWidth: 100,\n          enableColumnMenu: false,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row) + ' cell-right cell-padding';\n          },\n          cellTemplate: '<div ng-show=\"row.treeLevel === 0\" class=\"cell-middle\">{{row.treeNode.children[0].row.entity.ordered_amount}}</div>'\n        },\n        product_variant_name: {\n          displayName: $filter('translate')('PRODUCT.PRODUCT_VARIANT'),\n          field: 'product_variant_name',\n          permission: true,\n          visible: true,\n          maxWidth: 200,\n          enableSorting: false,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableColumnMenu: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row);\n          },\n          cellTemplate: '<div ng-show=\"row.treeLevel !== 0\" ng-disabled=\"!grid.appScope.vm.isEditable\" class=\"cell-middle full-width\">' +\n            '<md-input-container ng-if=\"grid.appScope.type === \\'PurchaseOrderDelivery\\'\" ng-disabled=\"!grid.appScope.vm.isEditable\" class=\"full-width\">' +\n            '<md-select ng-disabled=\"grid.appScope.vm.uidFieldsEditable(row.entity.is_devolution) || row.entity.id\" class=\"nd-input\" ng-model=\"row.entity.product_variant\" ng-change=\"grid.appScope.vm.updateUidStock(row.entity, row.entity.product_variant, \\'product-variant\\')\">' +\n            '<md-option ng-repeat=\"productVariant in row.entity.product_variants\" ng-value=\"productVariant.id\">' +\n            '{{productVariant.name}}' +\n            '</md-option>' +\n            '</md-select>' +\n            '</md-input-container>' +\n            '<div ng-if=\"grid.appScope.type !== \\'PurchaseOrderDelivery\\'\">{{row.entity.product_variant_name}}</div>' +\n            '</div>'\n        },\n        identifier: {\n          displayName: $filter('translate')('STOCK_DETAILS.IDENTIFIER'),\n          field: 'identifier',\n          permission: true,\n          visible: true,\n          enableColumnMenu: false,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row);\n          },\n          cellTemplate: '<div ng-show=\"row.treeLevel === 0\">' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.manage_uids && !row.treeNode.children[0].row.entity.manage_lots\" translate=\"STOCK_DETAILS.UID\"></span>' +\n            '<span ng-if=\"row.treeNode.children[0].row.entity.manage_lots\" translate=\"STOCK_DETAILS.BATCH\"></span>' +\n            '</div>' +\n            '<div class=\"cell-middle full-width stock-detail-identifier\" ng-show=\"row.treeLevel !== 0\" layout=\"row\">' +\n            '<input ng-if=\"grid.appScope.vm.isStockDetailEditable()\" nd-mute-barcode-callbacks ng-disabled=\"grid.appScope.vm.uidFieldsEditable(row.entity.is_devolution)\" class=\"ml-8 mr-8 nd-input\" ng-blur=\"grid.appScope.vm.updateUidStock(row.entity, row.entity.uid, \\'uid\\')\" ng-model=\"row.entity.uid\"/>' +\n            '<span ng-if=\"!grid.appScope.vm.isStockDetailEditable()\">{{row.entity.uid}}</span>' +\n            '<div class=\"pl-5 pr-5 show-stock-button\">' +\n            '<md-icon class=\"cursor-pointer copy-uid-icon-format\" ng-click=\"grid.appScope.vm.copyFieldInClipboard(row.entity.uid)\" md-font-icon=\"icon-content-copy\">' +\n            '<md-tooltip>{{\"PRODUCT.COPY_UID\" | translate }}</md-tooltip></md-icon>' +\n            '</div>' +\n            '</div>'\n        },\n        amount: {\n          displayName: $filter('translate')('PRODUCT.AMOUNT'),\n          field: 'amount',\n          permission: true,\n          visible: true,\n          enableColumnMenu: false,\n          maxWidth: 130,\n          treeAggregationType: uiGridTreeViewConstants.aggregation.SUM,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row) + ' cell-right cell-padding';\n          },\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-show=\"row.treeLevel === 0\">{{grid.appScope.vm.receivedAmountByProductDict[row.treeNode.children[0].row.entity.product_id]}}</span>' +\n            '<div ng-show=\"row.treeLevel !== 0\">' +\n            '<span ng-if=\"!grid.appScope.vm.isStockDetailEditable()\">{{row.entity.amount}}</span>' +\n            '<span ng-if=\"row.entity.is_devolution && grid.appScope.vm.isStockDetailEditable()\">-{{row.entity.amount}}</span>' +\n            '<input ng-if=\"!row.entity.is_devolution && grid.appScope.vm.isStockDetailEditable()\" class=\"nd-input text-right\" type=\\'number\\' nd-mute-barcode-callbacks ng-disabled=\"!grid.appScope.vm.isEditable || (row.entity.manage_uids && !row.entity.manage_lots) || row.entity.is_devolution\" ng-blur=\"grid.appScope.vm.updateUidStock(row.entity, row.entity.amount, \\'amount\\')\" ng-model=\"row.entity.amount\"/>' +\n            '</div>' +\n            '</div>'\n        },\n        expiration_date: {\n          displayName: $filter('translate')('PRODUCT.EXPIRATION_DATE'),\n          field: 'expiration_date',\n          permission: true,\n          enableColumnMenu: false,\n          visible: true,\n          maxWidth: 160,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row);\n          },\n          cellTemplate: '<div ng-show=\"row.treeLevel !== 0\">' +\n            '<div ng-if=\"grid.appScope.vm.isStockDetailEditable()\" ng-disabled=\"grid.appScope.vm.uidFieldsEditable(row.entity.is_devolution)\" class=\"ml-8 mr-8 cell-middle nd-input datepicker-div\">' +\n            '<md-datepicker nd-mute-barcode-callbacks ng-disabled=\"grid.appScope.vm.uidFieldsEditable(row.entity.is_devolution)\" ng-blur=\"grid.appScope.vm.updateUidStock(row.entity, row.entity.expiration_date, \\'expiration-date\\')\" md-placeholder=\"{{ \\'PRODUCT.EXPIRATION_DATE\\' | translate}}\"' +\n            'md-hide-icons=\"calendar\" flex ng-model=\"row.entity.expiration_date\"' +\n            'md-open-on-focus>' +\n            '</md-datepicker>' +\n            '</div>' +\n            '<div class=\"cell-middle\" ng-if=\"!grid.appScope.vm.isStockDetailEditable()\">{{row.entity.expiration_date | date:\\'dd/MM/yyyy\\'}}</div>' +\n            '</div>'\n        },\n        delete: {\n          displayName: '',\n          field: 'action',\n          permission: true,\n          visible: true,\n          width: 55,\n          enablePinning: false,\n          enableSorting: false,\n          enableColumnMenu: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getProductRowClass(row);\n          },\n          cellTemplate: '<div ng-if=\"!row.treeNode.children[0].row.entity.is_devolution\" ng-show=\"row.treeLevel === 0\" class=\"full-width p-0\" layout=\"row\" layout-align=\"center center\">' +\n            '<md-button ng-if=\"grid.appScope.vm.isStockDetailEditable()\" ng-disabled=\"!grid.appScope.vm.isEditable\" class=\"md-icon-button\" ng-click=\"grid.appScope.vm.addNewUidEmptyRow(row.treeNode.children[row.treeNode.children.length - 1].row.entity)\" class=\"md-raised\">' +\n            '<md-icon style=\"position:relative; right: 10px\" md-font-icon=\"icon-plus\"></md-icon>' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'PRODUCT.ADD_UID_STOCK\\' | translate}}</md-tooltip>' +\n            '</md-button>' +\n            '<md-button ng-if=\"!grid.appScope.vm.isStockDetailEditable()\" ng-disabled=\"!grid.appScope.vm.isEditable\" class=\"md-icon-button\" ng-click=\"grid.appScope.vm.showUIDsDialogAndAdd(row.treeNode.children[row.treeNode.children.length - 1].row.entity)\" class=\"md-raised\">' +\n            '<md-icon style=\"position:relative; right: 10px\" md-font-icon=\"icon-plus\"></md-icon>' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'PRODUCT.ADD_UID_STOCK\\' | translate}}</md-tooltip>' +\n            '</md-button>' +\n            '</div><div ng-show=\"row.treeLevel !== 0\" class=\"full-width\" layout=\"row\" layout-align=\"center center\"><md-button ng-disabled=\"!grid.appScope.vm.isEditable\" class=\"md-icon-button\"' +\n            'aria-label=\"delete\"' +\n            'ng-click=\"grid.appScope.vm.deleteStockDetailFromOrder(row.index, row.entity)\">' +\n            '<md-icon md-font-icon=\"icon-trash\"></md-icon>' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'GENERAL.DELETE\\' | translate}}</md-tooltip>' +\n            '</md-button>' +\n            '</div>'\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function isStockDetailEditable() {\n      return $scope.type === 'PurchaseOrderDelivery' || ($scope.type === 'SaleOrderDelivery' && $scope.order.sale_order_is_devolution)\n    }\n\n    function getGridDetailPage() {\n      vm.loading = true;\n      $http({\n        url: api.urls.inventories.stockDetail.replace('/:id/', '').replace(':option', ''),\n        method: 'GET',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        params: {\n          pagination: 'datatable',\n          order_type: $scope.type,\n          order_id: $scope.order.id,\n          search: vm.searchText,\n          length: vm.status.pageSize,\n          page: vm.status.pageNumber,\n          start: vm.status.pageSize * (vm.status.pageNumber - 1)\n        }\n      }).then(function(response) {\n        vm.uiGridInitialized = true;\n        vm.gridOptions.data = [];\n\n        for (var i = 0; i < response.data.data.length; i++) {\n          var stockDetailDTO = new StockDetailDTO(response.data.data[i]);\n          vm.gridOptions.data.push(stockDetailDTO);\n          updateReceivedAmountByProductDict(stockDetailDTO);\n        }\n\n        vm.gridOptions.totalItems = response.data.recordsFiltered;\n        vm.loading = false;\n      })\n        .catch(function(error) {\n          throw error;\n        });\n\n    }\n\n    function updateReceivedAmountByProductDict(stockDetail) {\n      vm.contextDataByProductDict[stockDetail.product_id] = {\n        amount: stockDetail.received_amount_by_product,\n        order_delivery_product_variant_id: stockDetail.transfer_order_delivery_product_variant_id,\n        product_variant_id: stockDetail.product_variant,\n        warehouse_id: stockDetail.stock_warehouse_id\n      };\n    }\n\n    function callAddStockDetailToOrder(newUidEmptyRow, stockDetailInstance) {\n      if (newUidEmptyRow.uid === '' || !newUidEmptyRow.product_variant) {\n        return\n      }\n\n      api.inventories.stockDetail.save(\n        newUidEmptyRow,\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var stockDetailDto = new StockDetailDTO(response);\n            if (stockDetailInstance) {\n              window.angular.extend(stockDetailInstance, stockDetailDto);\n            } else {\n              vm.gridOptions.data.push(stockDetailDto);\n            }\n          } else {\n            if (response.error) {\n              var errorMessage = 'ERRORS.' + response.error;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage, { status: response.order_status })).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        }\n      );\n    }\n\n    function addNewUidEmptyRow(row) {\n      vm.gridOptions.data.push(new StockDetailDTO({\n        uid: '',\n        product_id: row.product_id,\n        product_name: row.product_name,\n        product_variant: row.product_variant,\n        product_variants: row.product_variants,\n        product_variant_name: row.product_variant_name,\n        product_code: row.product_code,\n        amount: 1,\n        id: null,\n        warehouse: row.stock_warehouse_id,\n        order_id: $scope.order.id,\n        order_type: $scope.type,\n        option: 'add-to-order',\n        log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL'],\n        transfer_order_delivery_product_variant_id: row.transfer_order_delivery_product_variant_id,\n        received: false\n      }));\n    }\n\n    function autocompleteCallback(product) {\n      callAddStockDetailToOrder({\n        product_id: product.id,\n        product_name: product.name,\n        product_variant_name: null,\n        product_code: null,\n        id: null,\n        warehouse: $scope.order.target_warehouse_id,\n        received: false,\n        log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL'],\n        order_id: $scope.order.id,\n        order_type: $scope.type,\n        option: 'add-to-order',\n        amount: 1,\n        uid: ''\n      });\n    }\n\n    function uidFieldsEditable(isDevolution) {\n      return !vm.isEditable || isDevolution;\n    }\n\n    function showUIDsDialogAndAdd(row) {\n      var productContextData = vm.contextDataByProductDict[row.product_id];\n\n      $mdDialog.show({\n        controller: 'UidsSearchDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-search/uids-search.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        locals: {\n          operation: 'prepare-transfer',\n          orderDeliveryProductVariant: {\n            id: productContextData['order_delivery_product_variant_id'],\n            ordered_amount: 10,\n            prepared_amount: 0\n          },\n          orderProductVariant: null,\n          productVariantId: productContextData['product_variant_id'],\n          warehouseId: productContextData['warehouse_id'],\n          allowCreate: false,\n          showAll: false,\n          excludeUids: [],\n          initSearch: null,\n          manageLots: null,\n          manageUids: null,\n          warehouseName: null,\n          product: null\n        }\n      }).then(function(results) {\n        results.forEach(function(UIDId) {\n          callAddStockDetailToOrder({\n            amount: 1,\n            stock_detail_id: UIDId,\n            warehouse: productContextData['warehouse_id'],\n            order_id: $scope.order.id,\n            order_type: $scope.type,\n            option: 'add-to-order',\n            log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL'],\n            transfer_order_delivery_product_variant_id: productContextData['order_delivery_product_variant_id'],\n            received: false\n          });\n        });\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function showOrderedColumn() {\n      return !($scope.type === 'TransferOrderDelivery' && !$scope.order.is_replenishment);\n    }\n\n    function copyFieldInClipboard(value) {\n      var body = angular.element(document.body);\n      var textarea = angular.element('<textarea/>');\n      textarea.css({ position: 'fixed', opacity: '0' });\n      textarea.val(value);\n      body.append(textarea);\n      textarea[0].select();\n      try {\n        var successful = document.execCommand('copy');\n        if (successful) {\n          $mdToast.show(\n            $mdToast\n              .simple()\n              .textContent($filter('translate')('GENERAL.COPIED'))\n              .position('top right')\n              .hideDelay(500)\n          );\n        } else {\n          throw successful;\n        }\n      } catch (err) {\n      }\n      textarea.remove();\n    }\n\n    function updateUidStock(stockDetail, fieldValue, fieldName) {\n      if (!fieldValue || !fieldName || !stockDetail.product_variant) {\n        return;\n      }\n      if (!stockDetail.id) {\n        callAddStockDetailToOrder({\n          uid: stockDetail.uid || '',\n          product_id: stockDetail.product_id,\n          product_name: stockDetail.product_name,\n          product_variant: stockDetail.product_variant,\n          product_variant_name: stockDetail.product_variant_name,\n          product_code: stockDetail.product_code,\n          amount: stockDetail.amount || 1,\n          id: null,\n          warehouse: stockDetail.stock_warehouse_id,\n          order_id: $scope.order.id,\n          order_type: $scope.type,\n          option: 'add-to-order',\n          log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL'],\n          transfer_order_delivery_product_variant_id: stockDetail.transfer_order_delivery_product_variant_id,\n          received: false\n        }, stockDetail);\n      } else {\n        api.inventories.stockDetail.save(\n          {\n            id: stockDetail.id,\n            option: 'update-field',\n            field_value: fieldValue,\n            field_name: fieldName,\n            order_type: $scope.type,\n            order_id: $scope.order.id,\n          },\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              // Update table's treeNode received_amount header\n              vm.contextDataByProductDict[stockDetail.product_id].amount = response.received_amount_by_product;\n              if (fieldName === 'product-variant') {\n                stockDetail.product_variant_code = response.product_variant_code;\n              }\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              var errorMessage = 'ERRORS.' + response.error;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage)).position('top right'));\n            } else {\n              showErrorToast();\n            }\n          }\n        );\n      }\n    }\n\n    function deleteStockDetailFromOrder(rowIndex, stockDetail) {\n      if (!stockDetail.id) {\n        vm.gridOptions.data.splice(rowIndex, 1);\n        return;\n      }\n\n      api.inventories.stockDetail.delete({\n          order_id: $scope.order.id,\n          order_type: $scope.type,\n          id: stockDetail.id,\n          log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_DELETED']\n        },\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            if (vm.gridOptions.data[rowIndex].uid) {\n              vm.contextDataByProductDict[stockDetail.product_id].amount--;\n            }\n            vm.gridOptions.data.splice(rowIndex, 1);\n          } else {\n            showErrorToast();\n          }\n        }\n      );\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('orderProductsLogController', orderProductsLogController)\n    .directive('orderProductsLog', orderProductsLog);\n\n  /** @ngInject */\n  function orderProductsLog() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/order-products-log/order-products-log.html',\n      scope: {\n        order: '=',\n        type: '=',\n      },\n      controller: 'orderProductsLogController',\n      controllerAs: 'vm'\n    };\n\n  }\n\n  /** @ngInject */\n  function orderProductsLogController($scope,\n                                      api,\n                                      OrderLogChange,\n                                      HTTP_STATUS,\n                                      $mdToast,\n                                      $timeout,\n                                      Session,\n                                      UiGridService,\n                                      PRODUCT_NOT_FOUND_REASONS,\n                                      ORDER_LOG_CHANGE_TYPES,\n                                      $filter) {\n\n    var vm = this;\n\n    vm.PRODUCT_NOT_FOUND_REASONS = PRODUCT_NOT_FOUND_REASONS;\n    vm.ORDER_LOG_CHANGE_TYPES = ORDER_LOG_CHANGE_TYPES;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.loading = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {},\n      pageNumber: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    vm.getGridLogsPage = getGridLogsPage;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeUidGrid,\n      enableRowHeaderSelection: false,\n      enableColumnMenus: false\n    });\n\n    initialize();\n\n    function initialize() {\n      $scope.addLogChangeEvent = $scope.$on('add-log-change::orderProductsLog', function (event, data) {\n        addLogChange(data.log_change);\n      });\n\n      // Unregister Events\n      $scope.$on('$destroy', function () {\n        $scope.addLogChangeEvent();\n      });\n\n      loadStatus();\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::UIGridOrderProductsLogController'));\n      if (loadedStatus) {\n        angular.extend(vm.status, loadedStatus);\n        if (vm.gridApi) {\n          vm.gridApi.saveState.restore($scope, vm.status.state);\n        }\n      }\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridOrderProductsLogController', JSON.stringify(vm.status));\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridLogsPage();\n          }, 500);\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage;\n          vm.status.pageSize = pageSize;\n          getGridLogsPage();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function() {\n        getGridLogsPage();\n      }, 200);\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n    function getFirstRowClass(rowRenderIndex, row) {\n      if (rowRenderIndex === 0 && vm.status.search === '') {\n        if (row.type === ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_DELETED']) {\n          return 'yellow-50-bg';\n        }\n        else if (row.type === ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_REFUND']) {\n          return 'orange-50-bg';\n        }\n        return row.not_found_reason === null ? 'green-50-bg' : 'red-50-bg';\n      }\n      return '';\n    }\n\n    function setGridColumns(avoidState) {\n      angular.extend(vm.columns, {\n        not_found_reason: {\n          displayName: \"\",\n          field: 'not_found_reason',\n          permission: true,\n          visible: true,\n          enableSorting: false,\n          width: 45,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<md-icon ng-if=\"row.entity.not_found_reason == null\"' +\n            'md-font-icon=\"icon-check-circle\"' +\n            'class=\"mr-5 ml-5 green-fg\"></md-icon>\\n' +\n            '<md-icon ng-if=\"row.entity.not_found_reason != null\" md-font-icon=\"icon-close-circle-outline\"' +\n            'class=\"mr-5 ml-5 red-fg\"></md-icon>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        type: {\n          displayName: $filter('translate')('PRODUCT.TYPE'),\n          field: 'type',\n          permission: true,\n          visible: getColumnStatusVisibility('type', true, avoidState),\n          enableSorting: false,\n          width: 70,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<md-icon ng-if=\"grid.appScope.vm.ORDER_LOG_CHANGE_TYPES[\\'ORDER_LOG_TYPE_SCAN\\'] === row.entity.type\"' +\n              'class=\"mh-8 \" md-font-icon=\"icon-barcode\">' +\n              '<md-tooltip md-direction=\"bottom\">{{\\'ORDER_LOG_CHANGE_TYPES.SCAN\\' | translate}}</md-tooltip>' +\n            '</md-icon>' +\n            '<md-icon ng-if=\"grid.appScope.vm.ORDER_LOG_CHANGE_TYPES[\\'ORDER_LOG_TYPE_MANUAL\\'] === row.entity.type\"' +\n              'class=\"mh-8 \" md-font-icon=\"icon-cursor-default-outline\">' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'ORDER_LOG_CHANGE_TYPES.MANUAL\\' | translate}}</md-tooltip>' +\n            '</md-icon>' +\n            '<md-icon ng-if=\"grid.appScope.vm.ORDER_LOG_CHANGE_TYPES[\\'ORDER_LOG_TYPE_DELETED\\'] === row.entity.type\"' +\n              'class=\"mh-8 \" md-font-icon=\"icon-trash\">' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'ORDER_LOG_CHANGE_TYPES.DELETED\\' | translate}}</md-tooltip>' +\n            '</md-icon>' +\n            '<md-icon ng-if=\"grid.appScope.vm.ORDER_LOG_CHANGE_TYPES[\\'ORDER_LOG_TYPE_IMPORT\\'] === row.entity.type\"' +\n              'class=\"mh-8 \" md-svg-src=\"assets/images/custom-material-design-icons/publish.6e703bc5.svg\">' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'ORDER_LOG_CHANGE_TYPES.IMPORT\\' | translate}}</md-tooltip>' +\n            '</md-icon>' +\n            '<md-icon ng-if=\"grid.appScope.vm.ORDER_LOG_CHANGE_TYPES[\\'ORDER_LOG_TYPE_REFUND\\'] === row.entity.type\"' +\n              'class=\"mh-8 refund-icon refund-position\" md-svg-src=\"assets/images/custom-material-design-icons/refund.221d6d4a.svg\">' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'ORDER_LOG_CHANGE_TYPES.REFUND\\' | translate}}</md-tooltip>' +\n            '</md-icon>' +\n            '<md-icon ng-if=\"grid.appScope.vm.ORDER_LOG_CHANGE_TYPES[\\'ORDER_LOG_TYPE_AI\\'] === row.entity.type\"' +\n              'class=\"mh-8\" md-svg-src=\"assets/images/custom-material-design-icons/sa-automation.de8fd6e8.svg\">' +\n            '<md-tooltip md-direction=\"bottom\">{{\\'ORDER_LOG_CHANGES.ORDER_LOG_TYPE_AI\\' | translate}}</md-tooltip>' +\n            '</md-icon>' +\n            '</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: getColumnStatusVisibility('cover_thumbnail', true, avoidState),\n          enableSorting: false,\n          minWidth: 48,\n          width: 48,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<md-icon ng-if=\"!row.entity.cover_thumbnail\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '<img  ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{row.entity.cover_thumbnail}}\" lazy-src>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        product_name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          field: 'product_name',\n          permission: true,\n          visible: getColumnStatusVisibility('product_name', true, avoidState),\n          minWidth: 100,\n          enableSorting: false,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<span ng-if=\"row.entity.not_found_reason == null\" class=\"cell-middle boldNameClass\">{{row.entity.product_name}}</span>' +\n            '<span ng-if=\"row.entity.not_found_reason != null\" class=\"cell-middle\" translate=\"ORDER_LOG_CHANGES.{{grid.appScope.vm.PRODUCT_NOT_FOUND_REASONS[row.entity.not_found_reason]}}\"></span>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'barcode',\n          permission: true,\n          visible: getColumnStatusVisibility('barcode', true, avoidState),\n          minWidth: 100,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div layout=\"column\" class=\"cell-middle\"><span ng-if=\"row.entity.barcode\">{{row.entity.barcode}}</span>'+\n            '<span ng-if=\"row.entity.stock_detail_identifier\" class=\"secondary-text\">{{row.entity.stock_detail_identifier}}</span></div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        variant_1: {\n          displayName: $filter('translate')('PRODUCT.VARIANT_1'),\n          field: 'color',\n          permission: true,\n          visible: getColumnStatusVisibility('color', true, avoidState),\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.color_name}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        variant_2: {\n          displayName: $filter('translate')('PRODUCT.VARIANT_2'),\n          field: 'size',\n          permission: true,\n          visible: getColumnStatusVisibility('size', true, avoidState),\n          minWidth: 100,\n          enableSorting: false,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.size_name}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        before: {\n          displayName: $filter('translate')('PRODUCT.BEFORE'),\n          field: 'before',\n          permission: true,\n          visible: getColumnStatusVisibility('before', true, avoidState),\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.before}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity) + ' cell-right cell-padding';\n          }\n        },\n        after: {\n          displayName: $filter('translate')('PRODUCT.AFTER'),\n          field: 'after',\n          permission: true,\n          visible: getColumnStatusVisibility('after', true, avoidState),\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.after}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity) + ' cell-right cell-padding';\n          }\n        },\n        datetime: {\n          displayName: $filter('translate')('PRODUCT.DATE'),\n          field: 'datetime',\n          permission: true,\n          visible: getColumnStatusVisibility('datetime', true, avoidState),\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.datetime | date: \"dd/MM/yyyy HH:mm\"}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        pos_order_detail: {\n          displayName: $filter('translate')('PRODUCT.ORIGIN'),\n          field: 'pos_order_detail',\n          permission: true,\n          visible: getColumnStatusVisibility('pos_order_detail', true, avoidState),\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div ng-if=\"!row.entity.pos_order_id\" class=\"cell-middle\">-</div>'+\n            '<div ng-if=\"row.entity.pos_order_id\" class=\"cell-middle center-vertically\">' +\n            '<nd-picking-icon className=\"mh-8\" ng-if=\"row.entity.site_platform\" platform=\"row.entity.site_platform\"></nd-picking-icon>' +\n            '<a has-permission=\"app.sale,app.sale.sales_log\"' +\n            ' ui-sref=\"app.sale.sales_log.order({id:row.entity.pos_order_id})\">' +\n            '{{row.entity.pos_order_autocode}}</a>' +\n            '<span has-not-permission=\"app.sale,app.sale.sales_log\">'+\n            '{{row.entity.pos_order_autocode}}</span>'+\n            '</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity);\n          }\n        },\n        stock_amount: {\n          displayName: $filter('translate')('PRODUCT.STOCK_AMOUNT'),\n          field: 'stock_amount',\n          permission: true,\n          visible: getColumnStatusVisibility('stock_amount', true, avoidState)  && $scope.order.has_ia_movements,\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.stock_amount}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity) + ' cell-right cell-padding';\n          }\n        },\n        not_linked_amount_in_purchase: {\n          displayName: $filter('translate')('PRODUCT.NOT_LINKED_AMOUNT_IN_PURCHASE'),\n          field: 'not_linked_amount_in_purchase',\n          permission: true,\n          visible: getColumnStatusVisibility('not_linked_amount_in_purchase', true, avoidState)  && $scope.order.has_ia_movements,\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.not_linked_amount_in_purchase}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity) + ' cell-right cell-padding';\n          }\n        },\n        ordered_amount: {\n          displayName: $filter('translate')('PRODUCT.ORDERED_AMOUNT'),\n            field: 'ordered_amount',\n          permission: true,\n          visible: getColumnStatusVisibility('ordered_amount', true, avoidState)  && $scope.order.has_ia_movements,\n          enableSorting: false,\n          minWidth: 100,\n          enablePinning: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.ordered_amount}}</div>',\n          cellClass: function (grid, row, col, rowRenderIndex, colRenderIndex) {\n            return getFirstRowClass(rowRenderIndex, row.entity) + ' cell-right cell-padding';\n          }\n        },\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridLogsPage() {\n      vm.loading = true;\n      api.inventories.orderLogs.get({\n        order_id: $scope.order.id,\n        order_type: $scope.type,\n        search: vm.status.search,\n        pagination: 'datatable',\n        length: vm.status.pageSize,\n        page: vm.status.pageNumber,\n        start: vm.status.pageSize * (vm.status.pageNumber - 1)\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.gridOptions.data = []\n          vm.uiGridInitialized = true;\n          for (var i = 0; i < response.data.length; i++) {\n            vm.gridOptions.data.push(new OrderLogChange(response.data[i]));\n          }\n          vm.gridOptions.totalItems = response.count;\n          vm.loading = false;\n        } else {\n          showErrorToast();\n        }\n      });\n    }\n\n    function addLogChange(log_change) {\n      vm.gridOptions.data.unshift(new OrderLogChange(log_change));\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('orderProductsListController', orderProductsListController)\n    .directive('orderProductsList', orderProductsList);\n\n  /** @ngInject */\n  function orderProductsList() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/order-products-list/order-products-list.html',\n      scope: {\n        order: '=',\n        type: '=',\n        options: '=',\n        showPrices: '=',\n        editPrices: '=',\n        disableTaxes: '=',\n        taxes: '='\n      },\n      controller: 'orderProductsListController'\n    };\n\n  }\n\n  /** @ngInject */\n  function orderProductsListController($scope,\n                                       api,\n                                       $mdToast,\n                                       $filter,\n                                       $translate,\n                                       $stateParams,\n                                       OrderProductDTO,\n                                       HTTP_STATUS,\n                                       DTColumnBuilder,\n                                       $rootScope,\n                                       Session,\n                                       $mdDialog,\n                                       $compile) {\n\n\n    // Data\n    $scope.orderProducts = {};\n    $scope.dtInstance = {};\n    $scope.dtColumns = null;\n    $scope.dtOptions = null;\n    $scope.ajax = null;\n    $scope.session = Session;\n    $scope.fetching = false;\n    $scope.recordsTotal = 0;\n    $scope.lastAddedByBarcodeScan = false;\n    $scope.searchText = null;\n    $scope.orderBy = '-created_at';\n    $scope.reverseOrder = false;\n    $scope.loading = false;\n\n    // Methods\n    $scope.createdRow = createdRow;\n    $scope.searchProduct = searchProduct;\n\n    // Initialization\n    initialize();\n\n    // Functions\n    function initialize() {\n      $scope.loading = true;\n      $scope.reloadTableEvent = $scope.$on('reload-table::orderProductsList', function(event, data) {\n        $scope.searchText = data && data.searchText ? data.searchText : null;\n        reloadTable();\n      });\n      $scope.reloadTableEvent = $scope.$on('order-by::orderProductsList', function(event, data) {\n        $scope.orderBy = data;\n        reloadTable();\n      });\n      if ($scope.type === 'PurchaseOrderDelivery') {\n        $rootScope.$broadcast('get-summary::purchaseOrderDeliveryController');\n      }\n\n      // Unregister Events\n      $scope.$on('$destroy', function() {\n        $scope.reloadTableEvent();\n      });\n\n      if($stateParams.search){\n        $scope.searchText = $stateParams.search;\n      }\n\n      $scope.ajax = {\n        dataSrc: function(response) {\n          return response.data;\n        },\n        url: api.urls.inventories.orderProducts.replace('/:id/', '').replace(':option', ''),\n        type: 'get',\n        headers: {\n          'Authorization': 'Token ' + Session.token\n        },\n        data: function(d) {\n          d.pagination = 'datatable';\n          d.order_type = $scope.type;\n          d.order_id = $scope.order.id;\n          d.search = $scope.searchText;\n          d.order_by = $scope.orderBy;\n          if($scope.options.filters){\n            d.pending = $scope.options.filters.pending;\n          }\n        }\n      };\n      $scope.dtOptions = {\n        ajax: $scope.ajax,\n        className: 'text-center',\n        rowId: 'id',\n        dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n        createdRow: createdRow,\n        initComplete: initComplete,\n        pagingType: 'full_numbers',\n        lengthMenu: [5, 10, 25, 50, 100],\n        pageLength: 5,\n        responsive: true,\n        serverSide: true,\n        processing: true,\n        searchDelay: 750,\n        displayStart: 0,\n        order: [[0, 'desc']],\n        language: {\n          emptyTable: $filter('translate')('ORDER.EMPTY_TABLE')\n        },\n        stateSave: true,\n        stateSaveCallback: function(settings, data) {\n          localStorage.setItem(Session.company.id + '::dataTable' + $scope.orderType + 'ProductsController', JSON.stringify(data));\n        },\n        stateLoadCallback: function(settings, callback) {\n          var state = JSON.parse(localStorage.getItem(Session.company.id + '::dataTable' + $scope.orderType + 'ProductsController'));\n          return state;\n        }\n      };\n\n      $scope.dtColumns = [\n        DTColumnBuilder.newColumn('updated_at')\n          .withOption('className', 'no-padding')\n          .renderWith(function(data, type, full) {\n            $scope.orderProducts[full.id] = new OrderProductDTO(full);\n            return '<order-product ' +\n              'type=\"type\" ' +\n              'options=\"options\" ' +\n              'order=\"order\" ' +\n              'show-prices=\"showPrices\" ' +\n              'edit-prices=\"editPrices\" ' +\n              'disable-taxes=\"disableTaxes\" ' +\n              'order-product=\"orderProducts[' + full.id + ']\" ' +\n              'taxes=\"taxes\"' +\n              '></order-product>';\n          })\n      ];\n    }\n\n    function initComplete() {\n      $scope.loading = false;\n    }\n\n    function reloadTable() {\n      $scope.loading = true;\n      $scope.dtInstance.DataTable.draw();\n      $scope.loading = false;\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n\n    function searchProduct() {\n      $scope.loading = true;\n      $scope.dtInstance.DataTable.draw();\n      $scope.loading = false;\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('orderProductController', orderProductController)\n    .directive('orderProduct', orderProduct);\n\n  /** @ngInject */\n  function orderProduct() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/order-product/order-product.html',\n      scope: {\n        type: '=',\n        options: '=?',\n        order: '=',\n        orderProduct: '=',\n        taxes: '=',\n        showPrices: '=',\n        editPrices: '=',\n        disableTaxes: '='\n      },\n      controller: 'orderProductController'\n    };\n\n  }\n\n  /** @ngInject */\n  function orderProductController($scope,\n                                  OrderProductVariantDTO,\n                                  OrderProductDTO,\n                                  $rootScope,\n                                  api,\n                                  $q,\n                                  $mdToast,\n                                  $filter,\n                                  $state,\n                                  Utils,\n                                  HTTP_STATUS,\n                                  DTO_ORDER_DELIVERY_TYPES,\n                                  ORDER_LOG_CHANGE_TYPES,\n                                  $mdDialog,\n                                  $document,\n                                  $translate,\n                                  DTColumnBuilder,\n                                  Session\n  ) {\n\n\n    initialize();\n    $scope.changingStatus = false;\n    $scope.dtoOrderDeliveryTypes = DTO_ORDER_DELIVERY_TYPES;\n    $scope.ORDER_LOG_CHANGE_TYPES = ORDER_LOG_CHANGE_TYPES;\n    $scope.session = Session;\n\n    $scope.mapPriceHeight = {\n      0: 'default-height',\n      1: 'plus-option',\n      2: 'plus-two-options'\n    };\n\n    // Methods\n    $scope.saveOrderProductVariant = saveOrderProductVariant;\n    $scope.createOrUpdateOrderProductVariantPrice = createOrUpdateOrderProductVariantPrice;\n    $scope.deleteOrderProductWrapper = deleteOrderProductWrapper;\n    $scope.autocompleteProduct = autocompleteProduct;\n    $scope.isDeliveryType = isDeliveryType;\n    $scope.openStockDialog = openStockDialog;\n    $scope.getTotalProductAmountByColor = getTotalProductAmountByColor;\n    $scope.getTotalProductPriceByColor = getTotalProductPriceByColor;\n    $scope.getInputTextColor = getInputTextColor;\n    $scope.getLeftBackgroundColor = getLeftBackgroundColor;\n    $scope.getRightBackgroundColor = getRightBackgroundColor;\n    $scope.getSku = getSku;\n    $scope.getDisabledBackground = getDisabledBackground;\n    $scope.getPriceHeightClass = getPriceHeightClass;\n    $scope.manageStockDetail = manageStockDetail;\n    $scope.sendReloadTotalsEvent = sendReloadTotalsEvent;\n    $scope.sendReloadAllEvent = sendReloadAllEvent;\n    $scope.editableInputAmount = editableInputAmount;\n    $scope.editablePriceAmount = editablePriceAmount;\n    $scope.getEnabledProductVariantByColorAndSize = getEnabledProductVariantByColorAndSize;\n    $scope.getAmountBackgroundColor = getAmountBackgroundColor;\n    $scope.showAmountInput = showAmountInput;\n    $scope.getLeftAmount = getLeftAmount;\n    $scope.getRightAmount = getRightAmount;\n    $scope.getPrice = getPrice;\n    $scope.showOrderProductPriceActions = showOrderProductPriceActions;\n    $scope.showPriceTaxes = showPriceTaxes;\n    $scope.hasStock = hasStock;\n    $scope.isLot = isLot;\n    $scope.showUidLotOutOfStockAlert = showUidLotOutOfStockAlert;\n    $scope.showOutOfStockDialog = showOutOfStockDialog;\n    $scope.updateOrderProductAndTotals = updateOrderProductAndTotals;\n    $scope.showDialogNoPricingTier = showDialogNoPricingTier;\n    $scope.filterColorByStatusAndAmount = filterColorByStatusAndAmount;\n    $scope.isDisabledDeleteProductOption = isDisabledDeleteProductOption;\n    $scope.shouldShowTaxes = shouldShowTaxes;\n\n    function initialize() {\n      $scope.showPrices = !!$scope.showPrices;\n      $scope.editPrices = !!$scope.editPrices;\n      $scope.disableTaxes = !!$scope.disableTaxes;\n    }\n\n    function isDisabledDeleteProductOption() {\n      return !$scope.order.is_editable || (isDeliveryType() && $scope.type !== 'TransferOrderDelivery');\n    }\n\n    function shouldShowTaxes() {\n      return $scope.options.productOptions.show_tax_select.visible && $scope.options.productOptions.show_tax_select.selected;\n    }\n\n    function filterColorByStatusAndAmount(color) {\n      if ($scope.order.is_editable) {\n        return true;\n      }\n      return getTotalProductAmountByColor(color.id) !== 0;\n    }\n\n    function hasStock(colorId, sizeId) {\n      return $scope.orderProduct.getContext(colorId, sizeId).stock > 0;\n    }\n\n    function isLot() {\n      return $scope.orderProduct.manage_lots || $scope.orderProduct.manage_uids;\n    }\n\n    function showUidLotOutOfStockAlert(colorId, sizeId) {\n      if ($scope.type === 'SaleOrder' || $scope.type === 'SaleOrderDelivery' && $scope.order.sale_order_is_devolution) {\n        return false;\n      }\n\n      return !hasStock(colorId, sizeId) && isLot() && ($scope.type === 'TransferOrder' || $scope.type === 'TransferOrderDelivery' || $scope.type === 'SaleOrder' || $scope.type === 'SaleOrderDelivery');\n    }\n\n    function showDialogNoPricingTier() {\n      var textContent = $filter('translate')('SALE.PRODUCT_WITH_NO_TAX_DIALOG_TEXT', { pricin_tier: $scope.order.pricing_tier_name });\n\n      if (Session.hasPermission('app.inventory.products.product.pricing-tiers')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('SALE.PRODUCT_WITH_NO_TAX'))\n          .htmlContent(textContent)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('SALE.SEE_PRICING_TIERS'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          $state.go('app.inventory.products.product.pricing-tiers', { id: $scope.orderProduct.product_id });\n        });\n      } else {\n        var confirm = $mdDialog.alert()\n          .title($filter('translate')('PURCHASE.PRODUCT_WITH_NO_TAX'))\n          .htmlContent(textContent)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.OK'));\n\n        $mdDialog.show(confirm);\n      }\n\n    }\n\n    function showOutOfStockDialog() {\n      var productType = $scope.orderProduct.manage_lots ? $filter('translate')('PRODUCT.LOT') : $filter('translate')('PRODUCT.SERIES');\n      var textContent = $filter('translate')('PRODUCT.NO_STOCK_DIALOG_DESCRIPTION', { productType: productType });\n\n      if (Session.hasPermission('app.inventory.products.product.stock-movements.update')) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('PRODUCT.NO_STOCK_DIALOG_TITLE'))\n          .textContent(textContent)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('ORDER.SEE_STOCK'))\n          .cancel($filter('translate')('GENERAL.CANCEL'));\n\n        $mdDialog.show(confirm).then(function() {\n          $state.go('app.inventory.products.product.stock', { id: $scope.orderProduct.product_id });\n        });\n      } else {\n        var confirm = $mdDialog.alert()\n          .title($filter('translate')('PRODUCT.NO_STOCK_DIALOG_TITLE'))\n          .textContent(textContent)\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.OK'));\n\n        $mdDialog.show(confirm);\n      }\n    }\n\n    function createEmptyStockDetail(orderDeliveryProductVariant, color_id, size_id) {\n      var amount = orderDeliveryProductVariant.left_amount || $scope.orderProduct.getContext(color_id, size_id);\n      if (amount < 0) {\n        orderDeliveryProductVariant.ordered_amount = Math.abs(orderDeliveryProductVariant.left_amount);\n        orderDeliveryProductVariant.prepared_amount = 0;\n        showUIDsDialogAndAdd(\n          orderDeliveryProductVariant,\n          'prepare-purchase-order-delivery-devolution',\n          $scope.order.target_warehouse_id\n        );\n      } else {\n        var productVariantId = $scope.orderProduct.getOrderProductVariantByVariantIds(color_id, size_id).product_variant_id;\n\n        var newUidEmptyRow = {\n          uid: '',\n          product_id: $scope.orderProduct.product_id,\n          product_name: $scope.orderProduct.product_name,\n          product_variant: productVariantId,\n          color_id: color_id,\n          size_id: size_id,\n          product_variant_name: null,\n          product_code: $scope.orderProduct.product_code,\n          amount: 1,\n          warehouse: $scope.order.target_warehouse_id,\n          purchase_order_delivery_id: $scope.order.id,\n          option: 'add-to-order',\n          order_id: $scope.order.id,\n          order_type: $scope.type,\n          log_type: $scope.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL'],\n          received: false\n        };\n\n        api.inventories.stockDetail.save(\n          newUidEmptyRow,\n          function(response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $rootScope.$broadcast('orderProduct::goToDetails', response);\n            } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n              var errorMessage = 'ERRORS.' + response.error;\n              $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage)).position('top right'));\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      }\n    }\n\n    function manageStockDetail(color_id, size_id, orderDeliveryProductVariant) {\n      if (!$scope.orderProduct.manage_uids && !$scope.orderProduct.manage_lots) {\n        return;\n      }\n      if ($scope.type === 'PurchaseOrderDelivery' || ($scope.type === 'SaleOrderDelivery' && $scope.order.sale_order_is_devolution && $scope.orderProduct.manage_lots)) {\n        createEmptyStockDetail(orderDeliveryProductVariant, color_id, size_id);\n      } else {\n        var context = $scope.orderProduct.getContext(color_id, size_id);\n        orderDeliveryProductVariant.product_variant_id = context.product_variant_id;\n        orderDeliveryProductVariant.ordered_amount = orderDeliveryProductVariant.left_amount;\n        orderDeliveryProductVariant.prepared_amount = 0;\n        orderDeliveryProductVariant.source_warehouse = $scope.order.source_warehouse_id;\n\n        orderDeliveryProductVariant.order_delivery_id = $scope.order.id;\n\n        var operation = '';\n        var warehouse_id = null;\n        if ($scope.type === 'SaleOrderDelivery') {\n          operation = 'prepare-sale';\n        } else if ($scope.type === 'TransferOrderDelivery') {\n          warehouse_id = $scope.order.source_warehouse_id;\n          operation = 'prepare-transfer';\n        }\n        showUIDsDialogAndAdd(orderDeliveryProductVariant, operation, warehouse_id);\n      }\n    }\n\n    function showUIDsDialogAndAdd(orderDeliveryProductVariant, operation, warehouse_id) {\n      $mdDialog.show({\n        controller: 'UidsSearchDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/uids-search/uids-search.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: false,\n        locals: {\n          operation: operation,\n          orderDeliveryProductVariant: orderDeliveryProductVariant,\n          orderProductVariant: null,\n          productVariantId: orderDeliveryProductVariant.product_variant_id,\n          warehouseId: warehouse_id,\n          allowCreate: false,\n          showAll: false,\n          excludeUids: [],\n          initSearch: null,\n          manageLots: $scope.orderProduct.manage_lots,\n          manageUids: $scope.orderProduct.manage_uids,\n          warehouseName: $scope.order.source_warehouse_name,\n          product: null\n        }\n      }).then(function(results) {\n        results.forEach(function(selectedUid) {\n          callAddStockDetailToOrder({\n            stock_detail_id: selectedUid.id,\n            split_amount: selectedUid.split_amount,\n            order_id: $scope.order.id,\n            order_type: $scope.type,\n            product_variant: orderDeliveryProductVariant.product_variant_id,\n            option: 'add-to-order',\n            log_type: $scope.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_REFUND'],\n            order_delivery_product_variant_id: orderDeliveryProductVariant.id\n          }, orderDeliveryProductVariant);\n        });\n      }, function() {\n        // Nothing to do\n      });\n    }\n\n    function callAddStockDetailToOrder(newUidEmptyRow, orderDeliveryProductVariant) {\n      api.inventories.stockDetail.save(\n        newUidEmptyRow,\n        function(response, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            // $rootScope.$broadcast('orderProduct::goToDetails', response);\n            sendReloadAllEvent(response);\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function saveOrderProductVariant(orderProductVariant, color_id, size_id) {\n      if ($scope.orderProduct.manage_uids && $scope.type === 'PurchaseOrderDelivery') {\n        orderProductVariant.amount = null;\n        return;\n      }\n      var order_log_type = $scope.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL'];\n      if (orderProductVariant.amount && orderProductVariant.amount < 0) {\n        order_log_type = $scope.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_REFUND'];\n      }\n      if (orderProductVariant.id) {\n        api.inventories.orderProductVariants.patch({\n            id: orderProductVariant.id,\n            option: 'save-order-product-variant',\n            order_id: $scope.order.id,\n            amount: (!orderProductVariant.amount && orderProductVariant.amount !== 0) ? 0 : orderProductVariant.amount,\n            order_product_variant_id: orderProductVariant.id,\n            order_type: $scope.type,\n            log_type: order_log_type\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              updateOrderProductVariantAndTotals(response);\n            } else {\n              manageErrors(status, response);\n            }\n          }\n        );\n      } else {\n        api.inventories.orderProductVariants.save({\n            order_id: $scope.order.id,\n            color: color_id,\n            size: size_id,\n            amount: orderProductVariant.amount,\n            order_type: $scope.type,\n            order_product: $scope.orderProduct.id,\n            log_type: order_log_type\n          }, function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              updateOrderProductVariantAndTotals(response);\n            } else {\n              manageErrors(status, response);\n            }\n          }\n        );\n      }\n    }\n\n    function getTotalProductAmountByColor(colorId) {\n      return $scope.orderProduct && $scope.orderProduct.getTotals()[colorId] ? $scope.orderProduct.getTotals()[colorId].amount : 0;\n    }\n\n    function getTotalProductPriceByColor(colorId) {\n      var context = $scope.orderProduct && $scope.orderProduct.getTotals()[colorId] ? $scope.orderProduct.getTotals()[colorId] : 0;\n      if ($scope.options.productOptions.show_prices_incl_tax.selected) {\n        return Utils.roundPrice(context.price_incl_tax, 2);\n      }\n      return Utils.roundPrice(context.price_excl_tax, 2);\n    }\n\n    function getInputTextColor(amount) {\n      if (amount > 0) {\n        return 'blue-500-fg';\n      }\n      if (amount < 0) {\n        return 'red-500-fg';\n      }\n      return 'grey-500-fg';\n    }\n\n    function getRightBackgroundColor(orderProductVariant) {\n      if (!orderProductVariant) {\n        return '';\n      }\n\n      if (orderProductVariant.safe_right_amount !== null && orderProductVariant.safe_right_amount === true) {\n        return 'success';\n      }\n      if (orderProductVariant.danger_right_amount !== null && orderProductVariant.danger_right_amount === true) {\n        return 'warning';\n      }\n      return '';\n    }\n\n    function editableInputAmount(colorId, sizeId) {\n      if ($scope.order.hasOwnProperty('changing_status') && $scope.order.hasOwnProperty('pending_to_change_status') && ($scope.order.changing_status || $scope.order.pending_to_change_status)) {\n        return false;\n      }\n\n      if ($scope.type === 'TransferOrderDelivery' && $scope.order.status === 4 && ($scope.orderProduct.manage_uids || $scope.orderProduct.manage_lots)) {\n        return false;\n      }\n      return $scope.order.is_editable && getEnabledProductVariantByColorAndSize(colorId, sizeId);\n    }\n\n    function editablePriceAmount(amount, colorId, sizeId) {\n      return amount !== 0 && editableInputAmount(colorId, sizeId);\n    }\n\n    function getEnabledProductVariantByColorAndSize(colorId, sizeId) {\n      return $scope.orderProduct.getEnabledProductVariantByColorAndSize(colorId, sizeId);\n    }\n\n    function showAmountInput() {\n      var manageUIDs = $scope.orderProduct.manage_uids;\n      var manageLots = $scope.orderProduct.manage_lots;\n      if (isDeliveryType()) {\n        if ($scope.type === 'PurchaseOrderDelivery' && (manageUIDs || manageLots)) {\n          return false;\n        } else if ($scope.type === 'TransferOrderDelivery'  && (manageUIDs || manageLots)) {\n            return false;\n        } else if ($scope.type === 'SaleOrderDelivery') {\n          var isDevolution = $scope.order.sale_order_is_devolution;\n          if (manageUIDs && (isDevolution || !manageLots)) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    }\n\n    function getLeftAmount(orderProductVariant, colorId, sizeId) {\n      return orderProductVariant && orderProductVariant.left_amount ? orderProductVariant.left_amount : $scope.orderProduct.getContext(colorId, sizeId).left_amount;\n    }\n\n    function getRightAmount(orderProductVariant, colorId, sizeId) {\n      return orderProductVariant && orderProductVariant.right_amount ? orderProductVariant.right_amount : $scope.orderProduct.getContext(colorId, sizeId).right_amount;\n    }\n\n    function getAmountBackgroundColor(orderProductVariant) {\n      if (!orderProductVariant) {\n        return '';\n      }\n      if (orderProductVariant.danger_amount !== null && orderProductVariant.danger_amount === true) {\n        return 'danger';\n      }\n\n      if (orderProductVariant.amount < 0) {\n        return 'danger';\n      }\n    }\n\n    function getLeftBackgroundColor(orderProductVariant, colorId, sizeId) {\n      if (!orderProductVariant) {\n        return '';\n      }\n\n      if (angular.isUndefined(orderProductVariant.id)) {\n        try {\n          var context = $scope.orderProduct.getContext(colorId, sizeId);\n          if (context.stock < context.minimum_stock) {\n            return 'danger';\n          }\n        } catch (ignore) {\n        }\n      }\n\n      if (orderProductVariant.danger_left_amount === true) {\n        return 'danger';\n      }\n      if (orderProductVariant.safe_left_amount === true) {\n        return 'filled';\n      }\n\n      return getDisabledBackground();\n    }\n\n    function getDisabledBackground() {\n      return $scope.order.is_editable ? '' : 'md-grey-50-bg';\n    }\n\n    function getPriceHeightClass() {\n      var numberVisualizeOptionsSelected = 0;\n\n      if ($scope.options.productVariantOptions.sku.selected) {\n        numberVisualizeOptionsSelected++;\n      }\n      if ($scope.options.productVariantOptions.leftAmount.selected || $scope.options.productVariantOptions.rightAmount.selected) {\n        numberVisualizeOptionsSelected++;\n      }\n      var priceOption = '';\n      if ($scope.options.productOptions.price.selected) {\n        priceOption = ' price-option';\n      }\n\n      return $scope.mapPriceHeight[numberVisualizeOptionsSelected] + priceOption;\n\n    }\n\n    function getSku(colorId, sizeId) {\n      if ($scope.orderProduct && $scope.orderProduct.skus && $scope.orderProduct.skus[colorId] && $scope.orderProduct.skus[colorId][sizeId]) {\n        return $scope.orderProduct.skus[colorId][sizeId];\n      }\n      return '-';\n    }\n\n    function createOrUpdateOrderProductVariantPrice(orderProductVariant) {\n      var price = $scope.options.productOptions.show_prices_incl_tax.visible && $scope.options.productOptions.show_prices_incl_tax.selected ? orderProductVariant.price_incl_tax : orderProductVariant.price_excl_tax;\n\n      if (isNaN(price)) {\n        return;\n      }\n      if (price === null) {\n        price = $scope.orderProduct.price_excl_tax;\n      }\n\n      api.inventories.orderProductVariants.save({\n        id: orderProductVariant.order_product_variant_id,\n        incl_tax: $scope.options.productOptions.show_prices_incl_tax.visible && $scope.options.productOptions.show_prices_incl_tax.selected,\n        price: price,\n        order_id: $scope.order.id,\n        order_type: $scope.type,\n        option: 'set-price'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          updateOrderProductVariantAndTotals(response);\n          orderProductVariant.price_incl_tax = response.price_incl_tax;\n          orderProductVariant.price_excl_tax = response.price_excl_tax;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function openStockDialog() {\n      $mdDialog.show({\n        controller: 'FulFillmentStockDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/pos-order-fulfillment-card/fulfillment-stock-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          params: {\n            selectedProductStock: null,\n            selectedProductId: $scope.orderProduct.product_id,\n            selectedProductVariant: null,\n            showStockDetails: true,\n            warehouses: null\n          }\n        }\n      });\n    }\n\n    function isDeliveryType() {\n      return $scope.dtoOrderDeliveryTypes.hasOwnProperty($scope.type);\n    }\n\n    function autocompleteProduct() {\n      if ($scope.changingStatus) {\n        return;\n      }\n\n      $scope.changingStatus = true;\n\n      api.inventories.orderProducts.update(\n        {\n          id: $scope.orderProduct.id,\n          order_id: $scope.order.id,\n          order_type: $scope.type,\n          option: 'autocomplete'\n\n        },\n        function(response, callback, status) {\n          $scope.changingStatus = false;\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            sendReloadAllEvent(response);\n          } else {\n            showErrorToast();\n          }\n        }\n      );\n    }\n\n    function deleteOrderProductWrapper(orderProduct) {\n      if ($scope.saving)\n        return;\n      $scope.saving = true;\n      $scope.changed = true;\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('PURCHASE.DELETE_PRODUCT_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('PURCHASE.DELETE_PRODUCT_DIALOG_DESCRIPTION', { product: orderProduct.product_name }))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.DELETE'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        api.inventories.orderProducts.delete(\n          {\n            id: orderProduct.id,\n            order_id: $scope.order.id,\n            order_type: $scope.type\n          },\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n              $scope.fetching = false;\n              $scope.saving = false;\n              $scope.changed = false;\n              sendReloadAllEvent(response);\n            } else {\n              manageErrors(status, response);\n            }\n          });\n      }, function() {\n        $scope.saving = false;\n        $scope.changed = false;\n      });\n    }\n\n    function updateOrderProductAndTotals(response) {\n      $scope.orderProduct = new OrderProductDTO(response);\n      sendReloadTotalsEvent(response);\n    }\n\n    function updateOrderProductVariantAndTotals(response) {\n      $scope.orderProduct.updateOrderProductVariant(new OrderProductVariantDTO(response));\n      sendReloadTotalsEvent(response);\n    }\n\n    function manageErrors(status, response) {\n      if (response.error) {\n        var errorMessage = 'ERRORS.' + response.error;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage, { status: response.order_status })).position('top right'));\n      } else {\n        showErrorToast();\n      }\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function sendReloadTotalsEvent(response) {\n\n      var dictResponse = null;\n      if (response) {\n        dictResponse = {\n          'total_order_price': response.total_order_price,\n          'total_order_amount': response.total_order_amount,\n          'total_order_volume': response.total_order_volume,\n        };\n      }\n      $rootScope.$broadcast('reload-totals::orderProductsList', dictResponse);\n\n      if ($scope.type === 'PurchaseOrderDelivery') {\n        // Used to update the purchase summary at the bottom of the page\n        $rootScope.$broadcast('get-summary::purchaseOrderDeliveryController', response);\n      }\n    }\n\n    function sendReloadAllEvent(response) {\n      sendReloadTableEvent(response);\n      sendReloadTotalsEvent(response);\n    }\n\n    function getPrice(color_id, size_id) {\n      var excl_tax = true;\n      if ($scope.options.productOptions.show_prices_incl_tax.visible && $scope.options.productOptions.show_prices_incl_tax.selected) {\n        excl_tax = false;\n      }\n      return $scope.orderProduct.getPrice(color_id, size_id, excl_tax);\n    }\n\n    function showOrderProductPriceActions() {\n      return $scope.type === 'PurchaseOrder' || $scope.type === 'PurchaseOrderDelivery' ||\n        $scope.type === 'SaleOrder' || $scope.type === 'SaleOrderDelivery';\n    }\n\n    function showPriceTaxes() {\n      return $scope.type === 'PurchaseOrder' || $scope.type === 'PurchaseOrderDelivery';\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSearchProductInOrderController', ndSearchProductInOrderController)\n    .directive('ndSearchProductInOrder', ndSearchProductInOrder);\n\n  /** @ngInject */\n  function ndSearchProductInOrder() {\n    return {\n      restrict: 'E',\n      controller: 'ndSearchProductInOrderController',\n      controllerAs: 'vm',\n      scope: {},\n      templateUrl: 'app/directives/order-products/nd-search-product-in-order/nd-search-product-in-order.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSearchProductInOrderController($rootScope, $stateParams) {\n    var vm= this;\n\n    vm.searchText = \"\";\n    vm.searchProduct = searchProduct;\n\n    initialize();\n\n    function initialize() {\n      if($stateParams.search){\n        vm.searchText = $stateParams.search;\n      }\n    }\n\n    function searchProduct() {\n      $rootScope.$broadcast('reload-table::orderProductsList', {searchText: vm.searchText});\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndOrderProductVisualizationOptionsController', ndOrderProductVisualizationOptionsController)\n    .directive('ndOrderProductVisualizationOptions', ndOrderProductVisualizationOptions);\n\n  /** @ngInject */\n  function ndOrderProductVisualizationOptions() {\n    return {\n      restrict: 'E',\n      scope: {\n        options: '=',\n        type: '='\n      },\n      controller: 'ndOrderProductVisualizationOptionsController',\n      templateUrl: 'app/directives/order-products/nd-order-product-visualization-options/nd-order-product-visualization-options.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndOrderProductVisualizationOptionsController($scope, Session, $rootScope) {\n    $scope.localStorageKey = Session.company.id + '::' + $scope.type + '::visualizationOptionsForOrderProducts';\n    $scope.orderBy = '-created_at';\n    $scope.orderByDict = [\n      { value: '-created_at', name: 'SALE.LAST_SCANNED' },\n      { value: 'created_at', name: 'SALE.FIRST_SCANNED' },\n      { value: 'product_code', name: 'SALE.PRODUCT_CODE_ASC' },\n      { value: '-product_code', name: 'SALE.PRODUCT_CODE_DESC' }\n    ];\n    $scope.showProductOptions = true;\n\n    $scope.openViewOptionsMenu = openViewOptionsMenu;\n    $scope.saveVisualizationOptionsFromLocalStorage = saveVisualizationOptionsFromLocalStorage;\n    $scope.changeProductsOrder = changeProductsOrder;\n    $scope.changeProductsFilters = changeProductsFilters;\n    $scope.sendTaxEvent = sendTaxEvent;\n\n    initialize();\n\n    function initialize() {\n      try {\n        if (!angular.isUndefined($scope.options.productOptions.visible)) {\n          $scope.showProductOptions = !!$scope.options.productOptions.visible;\n        }\n        getVisualizationOptionsFromLocalStorage();\n      } catch (e) {\n        resetLocalStorage();\n      }\n\n    }\n\n    function openViewOptionsMenu($mdMenu, ev) {\n      $mdMenu.open(ev);\n    }\n\n    function saveVisualizationOptionsFromLocalStorage(option) {\n      setTimeout(function() {\n        localStorage.setItem($scope.localStorageKey, JSON.stringify($scope.options));\n      }, 250);\n\n      if (option.id === 'reverse') {\n        changeProductsOrder();\n      }\n      if (option.id === 'show_prices_incl_tax') {\n        sendTaxEvent();\n      }\n\n    }\n\n    function sendTaxEvent() {\n      setTimeout(function() {\n        var taxesSelected = null;\n        try {\n          taxesSelected = $scope.options.productOptions.show_prices_incl_tax.selected;\n        } catch (err) {\n          resetLocalStorage();\n        }\n        $rootScope.$broadcast('reload-totals::showTaxesEvent', taxesSelected);\n      }, 250);\n    }\n\n    function getVisualizationOptionsFromLocalStorage() {\n      try {\n        var state = JSON.parse(localStorage.getItem($scope.localStorageKey));\n        if (state) {\n          $scope.options.productOptions.price.selected = state.productOptions.price.selected;\n          $scope.options.productOptions.discount.selected = state.productOptions.discount.selected;\n          $scope.options.productOptions.shippingDate.selected = state.productOptions.shippingDate.selected;\n          $scope.options.productOptions.show_prices_incl_tax.selected = state.productOptions.show_prices_incl_tax.selected;\n          $scope.options.productOptions.show_tax_select.selected = state.productOptions.show_tax_select.selected;\n\n          $scope.options.productVariantOptions.sku.selected = state.productVariantOptions.sku.selected;\n          $scope.options.productVariantOptions.leftAmount.selected = state.productVariantOptions.leftAmount.selected;\n          $scope.options.productVariantOptions.rightAmount.selected = state.productVariantOptions.rightAmount.selected;\n        }\n      } catch (err) {\n        resetLocalStorage();\n      }\n\n      if ($scope.options.productOptions && $scope.options.productOptions.show_prices_incl_tax.selected) {\n        sendTaxEvent();\n      }\n    }\n\n    function resetLocalStorage() {\n      localStorage.setItem($scope.localStorageKey, {});\n    }\n\n    function changeProductsOrder(value) {\n      $rootScope.$broadcast('order-by::orderProductsList', value);\n    }\n\n    function changeProductsFilters(value) {\n      $rootScope.$broadcast('reload-table::orderProductsList', value);\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndGetOrderTotalsController', ndGetOrderTotalsController)\n    .directive('ndGetOrderTotals', ndGetOrderTotals);\n\n  /** @ngInject */\n  function ndGetOrderTotals() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        showCost: '=',\n        showTaxes: '='\n      },\n      controller: 'ndGetOrderTotalsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/order-products/nd-get-order-totals/nd-get-order-totals.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndGetOrderTotalsController($scope,\n                                      HTTP_STATUS,\n                                      api,\n                                      $mdToast,\n                                      $rootScope,\n                                      Session,\n                                      $filter) {\n\n    var vm = this;\n    vm.totalAmount = null;\n    vm.totalPriceExclTax = null;\n    vm.totalPriceInclTax = null;\n    vm.showCost = !!$scope.showCost;\n    vm.session = Session;\n    vm.currency = $scope.order.pricing_tier_currency ? $scope.order.pricing_tier_currency : Session.company.currency;\n\n    initialize();\n\n    function initialize() {\n      $scope.getShowTaxesEvent = $scope.$on('reload-totals::showTaxesEvent', function(event, showTaxes) {\n        $scope.showTaxes = showTaxes;\n      });\n\n      $scope.getTotalsEvent = $scope.$on('reload-totals::orderProductsList', function(event, data) {\n        try {\n          if (data.total_order_price) {\n            if (data.total_order_price.total_price_excl_tax === 0 || data.total_order_price.total_price_excl_tax) {\n              setTotalPriceExclTax(data.total_order_price, true);\n            }\n            if (data.total_order_price.total_price_incl_tax === 0 || data.total_order_price.total_price_incl_tax) {\n              setTotalPriceInclTax(data.total_order_price, true);\n            }\n          }\n          if (data.total_order_volume === 0 || data.total_order_volume) {\n            setTotalVolume(parseFloat(data.total_order_volume));\n          }\n          if (data.total_order_amount === 0 || data.total_order_amount) {\n            setTotalAmount(data.total_order_amount);\n          } else {\n            getTotalOrderProductVariants(false);\n          }\n        } catch (error) {\n          getTotalOrderProductVariants(false);\n        }\n\n      });\n\n      $scope.$on('$destroy', function() {\n        $scope.getTotalsEvent();\n        $scope.getShowTaxesEvent();\n      });\n\n      getTotalOrderProductVariants(true);\n    }\n\n    function setTotalAmount(totalAmount) {\n      vm.totalAmount = totalAmount;\n    }\n\n    function setTotalVolume(totalVolume) {\n      vm.totalVolume = parseFloat(totalVolume);\n    }\n\n    function setTotalAvailableVolume(totalAvailableVolume){\n      vm.totalAvailableVolume = parseFloat(totalAvailableVolume);\n    }\n\n    function setTotalPriceExclTax(totalOrderPrice, sendEvent) {\n      vm.totalPriceExclTax = totalOrderPrice.total_price_excl_tax;\n      if (sendEvent) {\n        $rootScope.$broadcast('update-total-price::orderDeliveryController', totalOrderPrice);\n      }\n    }\n\n    function setTotalPriceInclTax(totalOrderPrice, sendEvent) {\n      vm.totalPriceInclTax = totalOrderPrice.total_price_incl_tax;\n      if (sendEvent) {\n        $rootScope.$broadcast('update-total-price::orderDeliveryController', totalOrderPrice);\n      }\n    }\n\n    function getTotalOrderProductVariants(sendEvent) {\n      api.inventories.order.get({\n        option: 'get-total-order-product-variants',\n        order_id: $scope.order.id,\n        order_type: $scope.type\n      }, function(response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          if (response.total_amount === 0 || response.total_amount) {\n            setTotalAmount(response.total_amount);\n          }\n          if (response.total_volume === 0 || response.total_volume) {\n            setTotalVolume(response.total_volume);\n          }\n          if (response.total_available_volume === 0 || response.total_available_volume) {\n            setTotalAvailableVolume(response.total_available_volume);\n          }\n          if (response.total_price_excl_tax === 0 || response.total_price_excl_tax) {\n            setTotalPriceExclTax(response, sendEvent);\n          }\n          if (response.total_price_incl_tax === 0 || response.total_price_incl_tax) {\n            setTotalPriceInclTax(response, sendEvent);\n          }\n        } else {\n          $mdToast\n            .show($mdToast.simple()\n              .textContent($filter('translate')('GENERAL.ERROR'))\n              .position('top right'));\n        }\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAddOrderProductController', ndAddOrderProductController)\n    .directive('ndAddOrderProduct', ndAddOrderProduct);\n\n  /** @ngInject */\n  function ndAddOrderProduct() {\n    return {\n      restrict: 'E',\n      scope: {\n        order: '=',\n        type: '=',\n        currentTab: '=',\n        showDialogWhenAdding: '='\n      },\n      controller: 'ndAddOrderProductController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/order-products/nd-add-order-product/nd-add-order-product.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndAddOrderProductController($scope,\n                                       HTTP_STATUS,\n                                       $rootScope,\n                                       PURCHASE_ORDER_STATUSES_REVERSE,\n                                       api,\n                                       $state,\n                                       Audio,\n                                       ORDER_LOG_CHANGE_TYPES,\n                                       $mdDialog,\n                                       $document,\n                                       $mdToast,\n                                       $filter,\n                                       DTO_ORDER_TYPES) {\n\n    var vm = this;\n    vm.order = $scope.order;\n    vm.type = $scope.type;\n    vm.showDialogWhenAdding = false;\n    vm.enableStockDetailScan = false;\n    vm.ORDER_LOG_CHANGE_TYPES = ORDER_LOG_CHANGE_TYPES;\n\n    vm.searchProduct = searchProduct;\n    vm.openProductSearchDialog = openProductSearchDialog;\n    vm.newProductAddedCallback = newProductAddedCallback;\n\n    initialize();\n\n    function initialize() {\n      vm.showDialogWhenAdding = !!$scope.showDialogWhenAdding;\n    }\n\n    function openProductSearchDialog(ev) {\n      var hideBundles = vm.type === DTO_ORDER_TYPES.PURCHASE_ORDER || vm.type === DTO_ORDER_TYPES.TRANSFER_ORDER;\n\n      $mdDialog.show({\n        controller: 'ProductSearchController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-search/product-search.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          params: {\n            collectionId: vm.order.collection,\n            multiple: true,\n            targetWarehouse: vm.order.target_warehouse,\n            hideBundles: hideBundles\n          }\n        }\n      }).then(function(result) {\n        searchProduct(result.product, null, result.products.map(function(p) {\n          return p.id;\n        }));\n      });\n    }\n\n    function showAlertDialog(product, barcode, products) {\n        $mdDialog.show($mdDialog.confirm()\n          .title($filter('translate')('ORDER.ADD_PRODUCTS_TO_ORDER_DIALOG_TITLE'))\n          .htmlContent($filter('translate')('ORDER.ADD_PRODUCTS_TO_ORDER_DIALOG_MESSAGE'))\n          .clickOutsideToClose(true)\n          .parent(angular.element(document.body))\n          .ok($filter('translate')('GENERAL.CONTINUE'))\n          .cancel($filter('translate')('GENERAL.CANCEL'))\n        ).then(function () {\n          callAddProductApi(product, barcode, products)\n        }, function() {\n        });\n    }\n\n    function searchProduct(product, barcode, products) {\n      if (vm.showDialogWhenAdding) {\n        showAlertDialog(product, barcode, products);\n      }\n      else {\n        callAddProductApi(product, barcode, products);\n      }\n    }\n\n    function callAddProductApi(product, barcode, products) {\n      api.inventories.orderProducts.save({\n        product: product ? product.id : null,\n        products: products,\n        order_id: vm.order.id,\n        order_type: vm.type,\n        order_product_variants: [],\n        log_type: vm.ORDER_LOG_CHANGE_TYPES['ORDER_LOG_TYPE_MANUAL']\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          sendReloadTableEvent();\n        } else {\n          manageErrors(status, response);\n        }\n      });\n    }\n\n    function manageErrors(status, response) {\n      if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n        var errorMessage = 'ERRORS.' + response.error;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage, { status: response.order_status })).position('top right'));\n      } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('SALES.PRODUCT_NOT_FOUND')).position('top right'));\n        $rootScope.$broadcast('add-log-change::orderProductsLog', { 'log_change': response });\n      } else {\n        showErrorToast();\n      }\n      Audio.playErrorSound();\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n    }\n\n    function newProductAddedCallback(product) {\n      callAddProductApi(product, null, null);\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndActionsOrderSelectorController', ndActionsOrderSelectorController)\n    .directive('ndActionsOrderSelector', ndActionsOrderSelector);\n\n  /** @ngInject */\n  function ndActionsOrderSelector() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/nd-actions-order-selector/nd-actions-order-selector.html',\n      scope: {\n        type: '=',\n        order: '=',\n        options: '=',\n      },\n      controller: 'ndActionsOrderSelectorController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndActionsOrderSelectorController($scope) {\n\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStockLocationsByWarehouseListController', ndStockLocationsByWarehouseListController)\n    .directive('ndStockLocationsByWarehouseList', ndStockLocationsByWarehouseList);\n\n  /** @ngInject */\n  function ndStockLocationsByWarehouseList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?'\n      },\n      controller: 'ndStockLocationsByWarehouseListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-stock-locations/nd-stock-locations-by-warehouse/nd-stock-locations-by-warehouse-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStockLocationsByWarehouseListController($scope, api, $filter, $mdDialog, $mdToast, $document) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.stockLocations.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryStockLocationsByWarehouseControllerV1';\n    vm.searchFields = ['locations'];\n\n    $scope.openProductVariantSearchDialog = openProductVariantSearchDialog;\n    $scope.removeProductVariantFromStockLocation = removeProductVariantFromStockLocation;\n    $scope.handleStockLocationDialog = handleStockLocationDialog;\n    $scope.goToProductsView = goToProductsView;\n\n    function openProductVariantSearchDialog($event, stockLocation) {\n      $mdDialog.show({\n        controller: 'ProductVariantSelectorGridController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/product/dialogs/product-variant-selector-grid/product-variant-selector-grid.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        locals: {\n          selectedVariants: stockLocation.product_variants_ids || []\n        }\n      }).then(function (result) {\n        if (!result || result.length === 0) {\n          return;\n        }\n\n        var variantIds = result.map(function (variant) {\n            if (typeof variant === 'object') {\n              return variant.id;\n            } else if (typeof variant === 'number') {\n              return variant;\n            }\n          }\n        );\n\n        api.inventories.stockLocations.update({\n          id: stockLocation.id,\n          product_variants: variantIds,\n          option: 'add-product-variants'\n        }, function (response) {\n          stockLocation.product_variants = (response.product_variants || []).slice(0, 3);\n          stockLocation.product_variants_count = response.product_variants_count;\n          stockLocation.product_variants_ids = response.product_variants_ids || [];\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_UPDATED')).position('top right'));\n        }, function (error) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        });\n      });\n    }\n\n    function removeProductVariantFromStockLocation($event, stockLocation, variantId) {\n      api.inventories.stockLocations.update({\n        id: stockLocation.id,\n        product_variants: [variantId],\n        option: 'remove-product-variants'\n      }, function (response) {\n        stockLocation.product_variants = (response.product_variants || []).slice(0, 3);\n        stockLocation.product_variants_count = response.product_variants_count;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.STOCK_LOCATION_UPDATED')).position('top right'));\n      }, function (error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n      $event.stopPropagation();\n    }\n\n    function goToProductsView(stockLocation) {\n      $scope.$parent.vm.statusByProducts.search = stockLocation.location;\n      $scope.$parent.vm.currentNavItem = 'products';\n    }\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        location: {\n          displayName: $filter('translate')('PRODUCT.STOCK_LOCATIONS'),\n          field: 'location',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div class=\"full-width\" layout=\"row\" layout-align=\"start center\" ' +\n            'ng-mouseenter=\"row.entity._showEditBtn = true\" ng-mouseleave=\"row.entity._showEditBtn = false\">' +\n            '<span>{{row.entity.location}}</span>' +\n            '<span flex></span>' +\n            '<md-button class=\"md-icon-button no-margin no-padding\" ng-show=\"row.entity._showEditBtn\" ng-click=\"grid.appScope.$parent.handleStockLocationDialog(row.entity)\">' +\n            '<md-icon md-font-icon=\"icon-pencil\"></md-icon>' +\n            '</md-button>' +\n            '</div>'\n        },\n        position: {\n          displayName: $filter('translate')('CONFIGURATION.POSITION'),\n          field: 'position',\n          permission: true,\n          visible: true,\n          minWidth: 50,\n          width: 50,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<span class=\"full-width text-center\">{{row.entity.position}}</span>'\n        },\n        product_variants: {\n          displayName: $filter('translate')('PRODUCTS.PRODUCTS'),\n          field: 'product_variants',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div style=\"overflow-y: auto;\" layout=\"row\" layout-align=\"start center\">' +\n            '<span ng-repeat=\"pv in row.entity.product_variants\" layout=\"row\" layout-align=\"start center\" class=\"product-variant-item\">' +\n            '<img ng-if=\"pv.cover\" ng-src=\"{{::pv.cover}}\" />' +\n            '<md-icon ng-if=\"!pv.cover\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '<div layout=\"column\" layout-align=\"start start\" class=\"ml-5\">' +\n            '<nd-a state=\"\\'app.inventory.products.product.overview\\'\" state-params=\"{id: pv.product_id}\" class=\"md-caption\">{{::pv.code}}</nd-a>' +\n            '<span class=\"md-caption secondary-text\">{{::pv.color_name}} / {{::pv.size_name}}</span>' +\n            '</div>' +\n            '<md-button class=\"md-icon-button no-margin no-padding\" ng-click=\"grid.appScope.$parent.removeProductVariantFromStockLocation($event, row.entity, pv.id)\">' +\n            '<md-icon md-font-icon=\"icon-close\"></md-icon>' +\n            '</md-button>' +\n            '</span>' +\n            '<md-button ng-if=\"row.entity.product_variants_count > 3\" class=\"md-primary no-margin no-padding\" ng-click=\"grid.appScope.$parent.goToProductsView(row.entity)\">' +\n            '+ {{row.entity.product_variants_count - 3}} más' +\n            '</md-button>' +\n            '<span class=\"secondary-text\" ng-if=\"row.entity.product_variants.length === 0\">' +\n            '{{ \"WAREHOUSE.EMPTY_PRODUCT_VARIANTS_HINT\" | translate }}' +\n            '</span>' +\n            '</div>'\n        },\n        actions: {\n          displayName: '',\n          field: 'actions',\n          permission: true,\n          visible: true,\n          minWidth: 60,\n          maxWidth: 60,\n          width: 60,\n          enablePinning: false,\n          enableHiding: false,\n          pinnedRight: true,\n          enableColumnMenu: false,\n          enableSorting: false,\n          enableFiltering: false,\n          cellTemplate: '<md-button class=\"md-primary md-icon-button\" ng-click=\"grid.appScope.$parent.openProductVariantSearchDialog($event, row.entity)\"><md-icon md-svg-src=\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\"></md-icon></md-button>'\n        }\n      };\n    }\n\n    function handleStockLocationDialog(stockLocation) {\n      $scope.$emit('WarehouseController::newStockLocation', stockLocation);\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStockLocationsByProductsListController', ndStockLocationsByProductsListController)\n    .directive('ndStockLocationsByProductsList', ndStockLocationsByProductsList);\n\n  /** @ngInject */\n  function ndStockLocationsByProductsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?',\n      },\n      controller: 'ndStockLocationsByProductsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-stock-locations/nd-stock-locations-by-products/nd-stock-locations-by-products-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndStockLocationsByProductsListController($scope, api, $filter, $mdDialog, $mdToast, $document) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.productVariants.replace('/:id/', '').replace(':option', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryStockLocationsByProductsControllerV1';\n    vm.searchFields = ['locations'];\n\n    // Initialize\n    initialize();\n\n    $scope.removeProductVariantFromStockLocation = removeProductVariantFromStockLocation;\n    $scope.openStockLocationSearchDialog = openStockLocationSearchDialog;\n\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        product_variants: {\n          displayName: $filter('translate')('PRODUCTS.PRODUCTS'),\n          field: 'product_variants',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 350,\n          enablePinning: false,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: getProductVariantTemplate()\n        },\n        location: {\n          displayName: $filter('translate')('PRODUCT.STOCK_LOCATIONS'),\n          field: 'location',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div layout=\"row\" layout-align=\"start center\" style=\"overflow-y: auto;\">' +\n            '<span ng-repeat=\"stock_location in row.entity.stock_locations\" layout=\"row\" layout-align=\"start center\" class=\"product-variant-item\">' +\n            '<span class=\"md-caption\">{{stock_location.location}}</span>' +\n            '<md-button class=\"md-icon-button no-margin no-padding\" ng-click=\"grid.appScope.$parent.removeProductVariantFromStockLocation($event, row.entity, stock_location.id)\">' +\n            '<md-icon md-font-icon=\"icon-close\"></md-icon>' +\n            '</md-button>' +\n            '</span>' +\n            '<span class=\"secondary-text\" ng-if=\"row.entity.stock_locations.length === 0\">' +\n            '{{ \"WAREHOUSE.EMPTY_STOCK_LOCATIONS_HINT\" | translate }}' +\n            '</span>' +\n            '</div>'\n        },\n        actions: {\n          displayName: '',\n          field: 'actions',\n          permission: true,\n          visible: true,\n          minWidth: 60,\n          maxWidth: 60,\n          width: 60,\n          enablePinning: false,\n          enableHiding: false,\n          pinnedRight: true,\n          enableColumnMenu: false,\n          enableSorting: false,\n          enableFiltering: false,\n          cellTemplate: '<md-button class=\"md-primary md-icon-button\" ng-click=\"grid.appScope.$parent.openStockLocationSearchDialog($event, row.entity)\"><md-icon md-svg-src=\"assets/images/custom-material-design-icons/pin_drop.06b09ee2.svg\"></md-icon></md-button>'\n        }\n      };\n    }\n\n    function getProductVariantTemplate() {\n      return '<div layout=\"row\" layout-align=\"start center\">' +\n        '<div layout=\"column\">' +\n        '<img class=\"mr-8\" ng-src=\"{{row.entity.cover}}\" ng-if=\"row.entity.cover\">' +\n        '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s32 grey-300-fg mr-8\" ng-if=\"!row.entity.cover\"></md-icon>' +\n        '</div>' +\n        '<div layout=\"column\">' +\n        '<a ui-sref=\"app.inventory.products.product.overview({id:row.entity.product_id})\">' +\n        '{{row.entity.product_name}} ({{row.entity.color_name}}/{{row.entity.size_name}})' +\n        '</a>' +\n        '<div layout=\"row\" layout-align=\"start center\">' +\n        '<small class=\"secondary-text\">' +\n        '{{row.entity.sku ? row.entity.sku + \" - \" : \"\"}} <span class=\"barcode-text\"> {{row.entity.barcode}}</span>' +\n        '</small>' +\n        '</div>' +\n        '</div>' +\n        '</div>';\n    }\n\n    function removeProductVariantFromStockLocation($event, productVariant, stockLocationId) {\n      api.inventories.stockLocations.update({\n        id: stockLocationId,\n        product_variants: [productVariant.id],\n        option: 'remove-product-variants'\n      }, function (response) {\n        productVariant.stock_locations = productVariant.stock_locations.filter(function (location) {\n          return location.id !== stockLocationId;\n        });\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('PRODUCT.PRODUCT_UPDATED')).position('top right'));\n      }, function (error) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      });\n      $event.stopPropagation();\n    }\n\n    function openStockLocationSearchDialog($event, productVariant) {\n      $mdDialog.show({\n        controller: 'StockLocationSearchDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/warehouse/dialogs/stock-location-search-dialog/stock-location-search-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: true,\n        multiple: true,\n        locals: {\n          warehouseId: vm.status.nonStorableFilters.warehouse_id,\n          productVariant: productVariant,\n        }\n      }).then(function (stockLocations) {\n        productVariant.stock_locations = stockLocations;\n      });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbItemDetail', wbItemDetail);\n\n  /** @ngInject */\n  function wbItemDetail($document, $mdSidenav, materialUiColorsMin, CLOTH_MATERIALS) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/item/wbItemDetail/wbItemDetail.html',\n      scope: {\n        item: '=',\n        company: '='\n      },\n      controller: ['$scope', function($scope) {\n        $scope.item = $scope.item || {};\n        $scope.company = $scope.company || {};\n        $scope.materialUiColorsMin = materialUiColorsMin;\n        $scope.clothMaterials = [];\n\n        for(var i = 0; i < CLOTH_MATERIALS.length; ++i){\n          var auxMaterial = {};\n          auxMaterial.material = CLOTH_MATERIALS[i];\n          auxMaterial.selected = $scope.item.material && $scope.item.material.indexOf(auxMaterial.material) != -1;\n          $scope.clothMaterials.push(auxMaterial);\n        }\n\n      }],\n      link: function(scope, $mdDialog) {\n\n        scope.setToolbarBackgroundColor = function(color) {\n          scope.selectedColor = color;\n          scope.item.color = color;\n        }\n\n\n        /**\n         * Retorna el preu del item amb el descompte aplicat\n         *\n         * @returns {*}\n         */\n        scope.getFinalPrice = function() {\n          var value = Math.round((scope.item.price * (1 - scope.item.percentage_discount / 100)) * 100) / 100;\n          if (isNaN(value))\n            return scope.item.price;\n          return value;\n        }\n\n        scope.addOrRemoveMaterial = function(material){\n          if(!scope.item.material)\n            scope.item.material = [];\n\n          if(material.selected)\n            scope.item.material.push(material.material);\n          else{\n            for(var i = 0; i < scope.item.material.length; ++i)\n              if(scope.item.material[i] == material.material){\n                scope.item.material.splice(i, 1);\n                break;\n              }\n          }\n        }\n\n        scope.getFinalMaterials = function(){\n          var materials = \"\";\n          var separator = \"\";\n          for(var i = 0; i < scope.clothMaterials.length; ++i){\n            if(scope.clothMaterials[i].selected){\n              materials += scope.clothMaterials.material + separator;\n              separator = \",\";\n            }\n          }\n          return materials;\n        }\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbListItemsRow', wbListItemsRow);\n\n  /** @ngInject */\n  function wbListItemsRow($document, $mdSidenav, STATUS_COLORS) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/item/wbListItemsRow/wbListItemsRow.html',\n      scope: {\n        item: '=',\n        showStatusTags: '='\n      },\n      controller: ['$scope', function($scope) {\n        $scope.item = $scope.item || {};\n        $scope.showStatusTags = $scope.showStatusTags || false;\n        $scope.isOpen = false;\n        $scope.statusColors = STATUS_COLORS;\n      }],\n      link: function(scope) {}\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbListItems', wbListItems);\n\n  /** @ngInject */\n  function wbListItems($document, $mdSidenav) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/item/wbListItems/wbListItems.html',\n      scope: {\n        orderItems: '=?',\n        initializeSelected: '=?',\n        outputSelectedOrderItems: '=?',\n        showStatusTags: '=?'\n      },\n      controller: ['$scope', function($scope) {\n        $scope.ORDERBY_NAME = 'item.item_type.name';\n        $scope.ORDERBY_ACTION = 'item.action.name';\n        $scope.ORDERBY_PAID = 'paid';\n        $scope.showStatusTags = $scope.showStatusTags || false;\n        $scope.orderItems = $scope.orderItems || [];\n        if ($scope.initializeSelected) {\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            $scope.orderItems[i].selected = true;\n        }\n\n        $scope.filterIds = null;\n        $scope.listType = 'all';\n        $scope.listOrder = $scope.ORDERBY_NAME;\n        $scope.listOrderAsc = false;\n        $scope.findString = '';\n\n        $scope.$on('deselect-order-items', function(event, args) {\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            $scope.orderItems[i].selected = false;\n        });\n\n        $scope.$on('select-all-order-items', function(event, args) {\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            $scope.orderItems[i].selected = true;\n        });\n\n        /**\n         * Es defineix un watch per analitzar quan se seleccionen o es desseleccionen objectes\n         * de la llista d'orderItems per tenir un valor de sortida de la directiva\n         */\n        $scope.$watch('orderItems', function() {\n          var auxArray = [];\n          for (var i = 0; i < $scope.orderItems.length; ++i)\n            if ($scope.orderItems[i].selected)\n              auxArray.push($scope.orderItems[i]);\n\n          $scope.outputSelectedOrderItems = auxArray;\n        }, true)\n\n      }],\n      link: function(scope, $mdDialog, msUtils) {\n\n        /**\n         * Filtra per el paràmetre type. Si type és igual al paràmetre ja utilitzat per buscar,\n         * li inverteix l'ordre\n         *\n         * @param type\n         */\n        scope.sortAndToggleIf = function(type) {\n          scope.listOrderAsc = scope.listOrder == type ? !scope.listOrderAsc : false;\n          scope.listOrder = type;\n        }\n\n        /**\n         * Delete Order Item Confirm Dialog\n         *\n         * @param orderItem\n         * @param ev\n         */\n        function deleteOrderItemConfirm(orderItem, ev) {\n          var confirm = $mdDialog.confirm()\n            .title('Are you sure want to delete the order item?')\n            .htmlContent('<b>' + orderItem.name + ' ' + orderItem.lastName + '</b>' + ' will be deleted.')\n            .ariaLabel('delete order item')\n            .targetEvent(ev)\n            .ok('OK')\n            .cancel('CANCEL');\n\n          $mdDialog.show(confirm).then(function() {\n\n            deleteOrderItem(orderItem);\n\n          }, function() {\n\n          });\n        }\n      }\n    };\n  }\n})();\n\n/**\n * Created by joansubiratssalvans on 04/11/2016.\n */\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbNewOrderInvoice', wbNewOrderInvoice);\n\n  /** @ngInject */\n  function wbNewOrderInvoice($document, $mdSidenav) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/invoice/neworderinvoice/wbNewOrderInvoice.html',\n      scope: {\n        list: '=',\n        order: '=',\n        company: '=',\n        showSubtotal: '=?',\n        outputTotal: '=?',\n        hideTitle: '=?'\n      },\n      controller: ['$scope', function($scope) {\n        $scope.list = $scope.list;\n        $scope.order = $scope.order;\n        $scope.company = $scope.company;\n        $scope.showSubtotal = $scope.showSubtotal || false;\n        $scope.hideTitle = $scope.hideTitle || false;\n      }],\n      link: function(scope) {\n\n        scope.getTotal = function() {\n          var total = 0;\n          for (var i = 0; i < scope.list.length; ++i)\n            total += scope.list[i].final_price;\n          total = total.toFixed(2);\n          scope.outputTotal = total;\n          return total;\n        }\n\n        scope.getSubTotal = function() {\n\n        }\n\n        scope.getTotalTax = function() {\n          var totalTax = scope.getTotal();\n          return (totalTax * scope.company.vat / 100.0).toFixed(2);\n        }\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndDashboardItemsCardController', ndDashboardItemsCardController)\n    .directive('ndDashboardItemsCard', ndDashboardItemsCard);\n\n  /** @ngInject */\n  function ndDashboardItemsCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/dashboard-items/nd-dashboard-items-card/nd-dashboard-items-card.html',\n      controller: 'ndDashboardItemsCardController as vm',\n      scope: {\n        type: '='\n      }\n    };\n\n  }\n\n  /** @ngInject */\n  function ndDashboardItemsCardController($scope, $mdDialog, api, HTTP_STATUS, $translate, $state, Session,\n                                          DASHBOARD_ITEM_TYPES) {\n\n    // Data\n    var vm = this;\n    vm.title = '';\n    vm.loading = true;\n    vm.dashboardItems = [];\n\n    // Functions\n    vm.getDashboardItemTitle = getDashboardItemTitle;\n    vm.getDashboardItemBody = getDashboardItemBody;\n    vm.dashboardItemClicked = dashboardItemClicked;\n\n    // Methods\n    initialize();\n\n    function initialize() {\n      vm.title = getCardTitle();\n      vm.loading = true;\n      api.support.dashboardItems.list({\n        type: $scope.type\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.dashboardItems = response.results;\n        }\n        vm.loading = false;\n      });\n    }\n\n    function getCardTitle() {\n      if ($scope.type === DASHBOARD_ITEM_TYPES.DASHBOARD_ITEM_TYPE_VIDEO_DEMO) {\n        return 'START.GO_TO_OUR_DEMOS';\n      } else if ($scope.type === DASHBOARD_ITEM_TYPES.DASHBOARD_ITEM_TYPE_COURSE) {\n        return 'START.GO_TO_OUR_COURSES';\n      } else if ($scope.type === DASHBOARD_ITEM_TYPES.DASHBOARD_ITEM_TYPE_WEBINAR) {\n        return 'START.PREVIOUS_WEBINARS';\n      }\n    }\n\n    function getDashboardItemTitle(dashboardItem) {\n      return dashboardItem.title[$translate.use()];\n    }\n\n    function getDashboardItemBody(dashboardItem) {\n      return dashboardItem.body[$translate.use()];\n    }\n\n    function dashboardItemClicked(dashboardItem) {\n      if (dashboardItem.link) {\n        window.open(dashboardItem.link, '_blank');\n      } else if (dashboardItem.panel_sref && Session.hasPermission(dashboardItem.panel_sref)) {\n        $state.go(dashboardItem.panel_sref);\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbCustomerDetail', wbCustomerDetail);\n\n  /** @ngInject */\n  function wbCustomerDetail($document, wbConstGenders, api, $mdToast, $mdDialog, $window, $resource, $http) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/customer/wbCustomerDetail/wbCustomerDetail.html',\n      scope: {\n        customer: '=?',\n        hideComments: '=?',\n        hideGender: '=?',\n        hideSaveButton: \"=?\",\n        hideDeleteButton: \"=?\",\n        afterSave: '&?'\n      },\n      controller: ['$scope', function($scope) {\n\n        $scope.isNewCustomer = $scope.customer == undefined;\n        $scope.customer = $scope.customer || {};\n\n        $scope.constGenders = angular.copy(wbConstGenders);\n        $scope.creation_date = new Date($scope.customer.created_at);\n        $scope.afterSave = $scope.afterSave;\n\n        $scope.hideComments = $scope.showComments == undefined ? false : $scope.showComments;\n        $scope.hideGender = $scope.showGender == undefined ? false : $scope.showGender;\n        $scope.hideSaveButton = $scope.hideSaveButton == undefined ? false : $scope.hideSaveButton;\n        $scope.hideDeleteButton = $scope.hideDeleteButton == undefined ? false : $scope.hideDeleteButton;\n\n      }],\n      link: function(scope) {\n\n        scope.$on('saveEvent', function(event, data) {\n          scope.isNewCustomer = data.isNewCustomer;\n          scope.saveCustomer();\n        });\n\n        // Functions\n        scope.saveCustomer = function() {\n          if (scope.isNewCustomer) {\n            api.customers.save.save(\n              scope.customer,\n              function(response) {\n                // Si l'objecte té ID s'ha guardat a la BDD\n                if (response.id) {\n                  scope.showToast('Customer Created', null);\n                  scope.customer = response;\n\n                  // Si ens passen el callback afterSave, l'executem passant-li el nou customer\n                  if (scope.afterSave != undefined)\n                    scope.afterSave({\n                      'customer': scope.customer\n                    });\n                }\n                // Sinó hi ha hagut un error\n                else {\n                  scope.showToast('Something went wrong', 'error');\n                }\n              }\n            );\n\n          } else {\n            api.customers.update.update(\n              scope.customer,\n              function(response) {\n                // Si l'objecte té ID s'ha guardat a la BDD\n                if (response.id) {\n                  scope.showToast('Customer Created', null);\n                  scope.customer = response;\n\n                  // Si ens passen el callback afterSave, l'executem passant-li el nou customer\n                  if (scope.afterSave != undefined)\n                    scope.afterSave({\n                      'customer': scope.customer\n                    });\n                }\n                // Sinó hi ha hagut un error\n                else {\n                  scope.showToast('Something went wrong', 'error');\n                }\n              });\n          }\n        };\n\n        scope.deleteCustomer = function(ev) {\n          // Appending dialog to document.body to cover sidenav in docs app\n          var confirm = $mdDialog.confirm()\n            .title('Delete customer?')\n            .textContent('Do you really want to delete this customer? This action is not reversible')\n            .ariaLabel('Lucky day')\n            .targetEvent(ev)\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok('Delete')\n            .cancel('Cancel');\n\n          $mdDialog.show(confirm).then(function() {\n\n            scope.customer.deleted = true;\n\n            api.customers.update.update(\n              scope.customer,\n              // Success\n              function(response) {\n                $window.history.back();\n                scope.showToast('Customer Deleted', null);\n              },\n              // Error\n              function(response) {\n                console.error(response);\n              }\n            );\n          });\n        };\n\n        // Toast Functions:\n        scope.showToast = function(message, type) {\n\n          $mdToast.show({\n            template: '<md-toast class=\\\"md-toast ' + type + '\\\">' + message + '</md-toast>',\n            position: 'bottom right'\n          });\n        };\n      }\n    };\n  }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsWidgetController', MsWidgetController)\n        .directive('msWidget', msWidgetDirective)\n        .directive('msWidgetFront', msWidgetFrontDirective)\n        .directive('msWidgetBack', msWidgetBackDirective);\n\n    /** @ngInject */\n    function MsWidgetController($scope, $element)\n    {\n        var vm = this;\n\n        // Data\n        vm.flipped = false;\n\n        // Methods\n        vm.flip = flip;\n\n        //////////\n\n        /**\n         * Flip the widget\n         */\n        function flip()\n        {\n            if ( !isFlippable() )\n            {\n                return;\n            }\n\n            // Toggle flipped status\n            vm.flipped = !vm.flipped;\n\n            // Toggle the 'flipped' class\n            $element.toggleClass('flipped', vm.flipped);\n        }\n\n        /**\n         * Check if widget is flippable\n         *\n         * @returns {boolean}\n         */\n        function isFlippable()\n        {\n            return (angular.isDefined($scope.flippable) && $scope.flippable === true);\n        }\n    }\n\n    /** @ngInject */\n    function msWidgetDirective()\n    {\n        return {\n            restrict  : 'E',\n            scope     : {\n                flippable: '=?'\n            },\n            controller: 'MsWidgetController',\n            transclude: true,\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-widget');\n\n                return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n                {\n                    // Custom transclusion\n                    transcludeFn(function (clone)\n                    {\n                        iElement.empty();\n                        iElement.append(clone);\n                    });\n\n                    //////////\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msWidgetFrontDirective()\n    {\n        return {\n            restrict  : 'E',\n            require   : '^msWidget',\n            transclude: true,\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-widget-front');\n\n                return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n                {\n                    // Custom transclusion\n                    transcludeFn(function (clone)\n                    {\n                        iElement.empty();\n                        iElement.append(clone);\n                    });\n\n                    // Methods\n                    scope.flipWidget = MsWidgetCtrl.flip;\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msWidgetBackDirective()\n    {\n        return {\n            restrict  : 'E',\n            require   : '^msWidget',\n            transclude: true,\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-widget-back');\n\n                return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n                {\n                    // Custom transclusion\n                    transcludeFn(function (clone)\n                    {\n                        iElement.empty();\n                        iElement.append(clone);\n                    });\n\n                    // Methods\n                    scope.flipWidget = MsWidgetCtrl.flip;\n                };\n            }\n        };\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsStepperController', MsStepperController)\n        .directive('msHorizontalStepper', msHorizontalStepperDirective)\n        .directive('msHorizontalStepperStep', msHorizontalStepperStepDirective)\n        .directive('msVerticalStepper', msVerticalStepperDirective)\n        .directive('msVerticalStepperStep', msVerticalStepperStepDirective);\n\n    /** @ngInject */\n    function MsStepperController($timeout)\n    {\n        var vm = this;\n\n        // Data\n        vm.mainForm = undefined;\n\n        vm.orientation = 'horizontal';\n        vm.steps = [];\n        vm.currentStep = undefined;\n        vm.currentStepNumber = 1;\n\n        // Methods\n        vm.setOrientation = setOrientation;\n        vm.registerMainForm = registerMainForm;\n        vm.registerStep = registerStep;\n        vm.setupSteps = setupSteps;\n        vm.resetForm = resetForm;\n\n        vm.setCurrentStep = setCurrentStep;\n\n        vm.gotoStep = gotoStep;\n        vm.gotoPreviousStep = gotoPreviousStep;\n        vm.gotoNextStep = gotoNextStep;\n        vm.gotoFirstStep = gotoFirstStep;\n        vm.gotoLastStep = gotoLastStep;\n\n        vm.isFirstStep = isFirstStep;\n        vm.isLastStep = isLastStep;\n\n        vm.isStepCurrent = isStepCurrent;\n        vm.isStepDisabled = isStepDisabled;\n        vm.isStepOptional = isStepOptional;\n        vm.isStepHidden = isStepHidden;\n        vm.filterHiddenStep = filterHiddenStep;\n        vm.isStepValid = isStepValid;\n        vm.isStepNumberValid = isStepNumberValid;\n\n        vm.isFormValid = isFormValid;\n\n        //////////\n\n        /**\n         * Set the orientation of the stepper\n         *\n         * @param orientation\n         */\n        function setOrientation(orientation)\n        {\n            vm.orientation = orientation || 'horizontal';\n        }\n\n        /**\n         * Register the main form\n         *\n         * @param form\n         */\n        function registerMainForm(form)\n        {\n            vm.mainForm = form;\n        }\n\n        /**\n         * Register a step\n         *\n         * @param element\n         * @param scope\n         * @param form\n         */\n        function registerStep(element, scope, form)\n        {\n            var step = {\n                element           : element,\n                scope             : scope,\n                form              : form,\n                stepNumber        : scope.step || (vm.steps.length + 1),\n                stepTitle         : scope.stepTitle,\n                stepTitleTranslate: scope.stepTitleTranslate\n            };\n\n            // Push the step into steps array\n            vm.steps.push(step);\n\n            // Sort steps by stepNumber\n            vm.steps.sort(function (a, b)\n            {\n                return a.stepNumber - b.stepNumber;\n            });\n\n            return step;\n        }\n\n        /**\n         * Setup steps for the first time\n         */\n        function setupSteps()\n        {\n            vm.setCurrentStep(vm.currentStepNumber);\n        }\n\n        /**\n         * Reset steps and the main form\n         */\n        function resetForm()\n        {\n            // Timeout is required here because we need to\n            // let form model to reset before setting the\n            // statuses\n            $timeout(function ()\n            {\n                // Reset all the steps\n                for ( var x = 0; x < vm.steps.length; x++ )\n                {\n                    vm.steps[x].form.$setPristine();\n                    vm.steps[x].form.$setUntouched();\n                }\n\n                // Reset the main form\n                vm.mainForm.$setPristine();\n                vm.mainForm.$setUntouched();\n\n                // Go to first step\n                gotoFirstStep();\n            });\n        }\n\n        /**\n         * Set current step\n         *\n         * @param stepNumber\n         */\n        function setCurrentStep(stepNumber)\n        {\n            // If the stepNumber is not a valid step number, bail...\n            if ( !isStepNumberValid(stepNumber) )\n            {\n                return;\n            }\n\n            // Update the current step number\n            vm.currentStepNumber = stepNumber;\n\n            if ( vm.orientation === 'horizontal' )\n            {\n                // Hide all steps\n                for ( var i = 0; i < vm.steps.length; i++ )\n                {\n                    vm.steps[i].element.hide();\n                }\n\n                // Show the current step\n                vm.steps[vm.currentStepNumber - 1].element.show();\n            }\n            else if ( vm.orientation === 'vertical' )\n            {\n                // Hide all step content\n                for ( var j = 0; j < vm.steps.length; j++ )\n                {\n                    vm.steps[j].element.find('.ms-stepper-step-content').hide();\n                }\n\n                // Show the current step content\n                vm.steps[vm.currentStepNumber - 1].element.find('.ms-stepper-step-content').show();\n            }\n        }\n\n        /**\n         * Go to a step\n         *\n         * @param stepNumber\n         */\n        function gotoStep(stepNumber)\n        {\n            // If the step we are about to go\n            // is hidden, bail...\n            if ( isStepHidden(stepNumber) )\n            {\n                return;\n            }\n\n            vm.setCurrentStep(stepNumber);\n        }\n\n        /**\n         * Go to the previous step\n         */\n        function gotoPreviousStep()\n        {\n            var stepNumber = vm.currentStepNumber - 1;\n\n            // Test the previous steps and make sure we\n            // will land to the one that is not hidden\n            for ( var s = stepNumber; s >= 1; s-- )\n            {\n                if ( !isStepHidden(s) )\n                {\n                    stepNumber = s;\n                    break;\n                }\n            }\n\n            vm.setCurrentStep(stepNumber);\n        }\n\n        /**\n         * Go to the next step\n         */\n        function gotoNextStep()\n        {\n            var stepNumber = vm.currentStepNumber + 1;\n\n            // Test the following steps and make sure we\n            // will land to the one that is not hidden\n            for ( var s = stepNumber; s <= vm.steps.length; s++ )\n            {\n                if ( !isStepHidden(s) )\n                {\n                    stepNumber = s;\n                    break;\n                }\n            }\n\n            vm.setCurrentStep(stepNumber);\n        }\n\n        /**\n         * Go to the first step\n         */\n        function gotoFirstStep()\n        {\n            vm.setCurrentStep(1);\n        }\n\n        /**\n         * Go to the last step\n         */\n        function gotoLastStep()\n        {\n            vm.setCurrentStep(vm.steps.length);\n        }\n\n        /**\n         * Check if the current step is the first step\n         *\n         * @returns {boolean}\n         */\n        function isFirstStep()\n        {\n            return vm.currentStepNumber === 1;\n        }\n\n        /**\n         * Check if the current step is the last step\n         *\n         * @returns {boolean}\n         */\n        function isLastStep()\n        {\n            return vm.currentStepNumber === vm.steps.length;\n        }\n\n        /**\n         * Check if the given step is the current one\n         *\n         * @param stepNumber\n         * @returns {null|boolean}\n         */\n        function isStepCurrent(stepNumber)\n        {\n            // If the stepNumber is not a valid step number, bail...\n            if ( !isStepNumberValid(stepNumber) )\n            {\n                return null;\n            }\n\n            return vm.currentStepNumber === stepNumber;\n        }\n\n        /**\n         * Check if the given step should be disabled\n         *\n         * @param stepNumber\n         * @returns {null|boolean}\n         */\n        function isStepDisabled(stepNumber)\n        {\n            // If the stepNumber is not a valid step number, bail...\n            if ( !isStepNumberValid(stepNumber) )\n            {\n                return null;\n            }\n\n            var disabled = false;\n\n            for ( var i = 1; i < stepNumber; i++ )\n            {\n                if ( !isStepValid(i) )\n                {\n                    disabled = true;\n                    break;\n                }\n            }\n\n            return disabled;\n        }\n\n        /**\n         * Check if the given step is optional\n         *\n         * @param stepNumber\n         * @returns {null|boolean}\n         */\n        function isStepOptional(stepNumber)\n        {\n            // If the stepNumber is not a valid step number, bail...\n            if ( !isStepNumberValid(stepNumber) )\n            {\n                return null;\n            }\n\n            return vm.steps[stepNumber - 1].scope.optionalStep;\n        }\n\n        /**\n         * Check if the given step is hidden\n         *\n         * @param stepNumber\n         * @returns {null|boolean}\n         */\n        function isStepHidden(stepNumber)\n        {\n            // If the stepNumber is not a valid step number, bail...\n            if ( !isStepNumberValid(stepNumber) )\n            {\n                return null;\n            }\n\n            return !!vm.steps[stepNumber - 1].scope.hideStep;\n        }\n\n        /**\n         * Check if the given step is hidden as a filter\n         *\n         * @param step\n         * @returns {boolean}\n         */\n        function filterHiddenStep(step)\n        {\n            return !isStepHidden(step.stepNumber);\n        }\n\n        /**\n         * Check if the given step is valid\n         *\n         * @param stepNumber\n         * @returns {null|boolean}\n         */\n        function isStepValid(stepNumber)\n        {\n            // If the stepNumber is not a valid step number, bail...\n            if ( !isStepNumberValid(stepNumber) )\n            {\n                return null;\n            }\n\n            // If the step is optional, always return true\n            if ( isStepOptional(stepNumber) )\n            {\n                return true;\n            }\n\n            return vm.steps[stepNumber - 1].form.$valid;\n        }\n\n        /**\n         * Check if the given step number is a valid step number\n         *\n         * @param stepNumber\n         * @returns {boolean}\n         */\n        function isStepNumberValid(stepNumber)\n        {\n            return !(angular.isUndefined(stepNumber) || stepNumber < 1 || stepNumber > vm.steps.length);\n        }\n\n        /**\n         * Check if the entire form is valid\n         *\n         * @returns {boolean}\n         */\n        function isFormValid()\n        {\n            return vm.mainForm.$valid;\n        }\n    }\n\n    /** @ngInject */\n    function msHorizontalStepperDirective()\n    {\n        return {\n            restrict        : 'A',\n            scope           : {},\n            require         : ['form', 'msHorizontalStepper'],\n            priority        : 1001,\n            controller      : 'MsStepperController as MsStepper',\n            bindToController: {\n                model: '=ngModel'\n            },\n            transclude      : true,\n            templateUrl     : 'app/core/directives/ms-stepper/templates/horizontal/horizontal.html',\n            compile         : function (tElement)\n            {\n                tElement.addClass('ms-stepper');\n\n                return function postLink(scope, iElement, iAttrs, ctrls)\n                {\n                    var FormCtrl = ctrls[0],\n                        MsStepperCtrl = ctrls[1];\n\n                    // Register the main form and setup\n                    // the steps for the first time\n                    MsStepperCtrl.setOrientation('horizontal');\n                    MsStepperCtrl.registerMainForm(FormCtrl);\n                    MsStepperCtrl.setupSteps();\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msHorizontalStepperStepDirective()\n    {\n        return {\n            restrict: 'E',\n            require : ['form', '^msHorizontalStepper'],\n            priority: 1000,\n            scope   : {\n                step              : '=?',\n                stepTitle         : '=?',\n                stepTitleTranslate: '=?',\n                optionalStep      : '=?',\n                hideStep          : '=?'\n            },\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-stepper-step');\n\n                return function postLink(scope, iElement, iAttrs, ctrls)\n                {\n                    var FormCtrl = ctrls[0],\n                        MsStepperCtrl = ctrls[1];\n\n                    // Is it an optional step?\n                    scope.optionalStep = angular.isDefined(iAttrs.optionalStep);\n\n                    // Register the step\n                    MsStepperCtrl.registerStep(iElement, scope, FormCtrl);\n\n                    // Hide the step by default\n                    iElement.hide();\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msVerticalStepperDirective($timeout)\n    {\n        return {\n            restrict        : 'A',\n            scope           : {},\n            require         : ['form', 'msVerticalStepper'],\n            priority        : 1001,\n            controller      : 'MsStepperController as MsStepper',\n            bindToController: {\n                model: '=ngModel'\n            },\n            transclude      : true,\n            templateUrl     : 'app/core/directives/ms-stepper/templates/vertical/vertical.html',\n            compile         : function (tElement)\n            {\n                tElement.addClass('ms-stepper');\n\n                return function postLink(scope, iElement, iAttrs, ctrls)\n                {\n                    var FormCtrl = ctrls[0],\n                        MsStepperCtrl = ctrls[1];\n\n                    // Register the main form and setup\n                    // the steps for the first time\n\n                    // Timeout is required in vertical stepper\n                    // as we are using transclusion in steps.\n                    // We have to wait for them to be transcluded\n                    // and registered to the controller\n                    $timeout(function ()\n                    {\n                        MsStepperCtrl.setOrientation('vertical');\n                        MsStepperCtrl.registerMainForm(FormCtrl);\n                        MsStepperCtrl.setupSteps();\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msVerticalStepperStepDirective()\n    {\n        return {\n            restrict   : 'E',\n            require    : ['form', '^msVerticalStepper'],\n            priority   : 1000,\n            scope      : {\n                step              : '=?',\n                stepTitle         : '=?',\n                stepTitleTranslate: '=?',\n                optionalStep      : '=?',\n                hideStep          : '=?'\n            },\n            transclude : true,\n            templateUrl: 'app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html',\n            compile    : function (tElement)\n            {\n                tElement.addClass('ms-stepper-step');\n\n                return function postLink(scope, iElement, iAttrs, ctrls)\n                {\n                    var FormCtrl = ctrls[0],\n                        MsStepperCtrl = ctrls[1];\n\n                    // Is it an optional step?\n                    scope.optionalStep = angular.isDefined(iAttrs.optionalStep);\n\n                    // Register the step\n                    scope.stepInfo = MsStepperCtrl.registerStep(iElement, scope, FormCtrl);\n\n                    // Expose the controller to the scope\n                    scope.MsStepper = MsStepperCtrl;\n\n                    // Hide the step content by default\n                    iElement.find('.ms-stepper-step-content').hide();\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsTimelineController', MsTimelineController)\n        .directive('msTimeline', msTimelineDirective)\n        .directive('msTimelineItem', msTimelineItemDirective);\n\n    /** @ngInject */\n    function MsTimelineController()\n    {\n        var vm = this;\n\n        // Data\n        vm.scrollEl = undefined;\n\n        // Methods\n        vm.setScrollEl = setScrollEl;\n        vm.getScrollEl = getScrollEl;\n\n        //////////\n\n        /**\n         * Set scroll element\n         *\n         * @param scrollEl\n         */\n        function setScrollEl(scrollEl)\n        {\n            vm.scrollEl = scrollEl;\n        }\n\n        /**\n         * Get scroll element\n         *\n         * @returns {undefined|*}\n         */\n        function getScrollEl()\n        {\n            return vm.scrollEl;\n        }\n    }\n\n    /** @ngInject */\n    function msTimelineDirective()\n    {\n        return {\n            scope     : {\n                msTimeline: '=?',\n                loadMore  : '&?msTimelineLoadMore'\n            },\n            controller: 'MsTimelineController',\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-timeline');\n\n                return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\n                {\n                    // Create an element for triggering the load more action and append it\n                    var loadMoreEl = angular.element('<div class=\"ms-timeline-loader md-accent-bg md-whiteframe-4dp\"><span class=\"spinner animate-rotate\"></span></div>');\n                    iElement.append(loadMoreEl);\n\n                    // Default config\n                    var config = {\n                        scrollEl: '#content'\n                    };\n\n                    // Extend the configuration\n                    config = angular.extend(config, scope.msTimeline, {});\n                    \n                    // Grab the scrollable element and store it in the controller for general use\n                    var scrollEl = angular.element(config.scrollEl);\n                    MsTimelineCtrl.setScrollEl(scrollEl);\n\n                    // Threshold\n                    var threshold = 144;\n\n                    // Register onScroll event for the first time\n                    registerOnScroll();\n\n                    /**\n                     * onScroll Event\n                     */\n                    function onScroll()\n                    {\n                        if ( scrollEl.scrollTop() + scrollEl.height() + threshold > loadMoreEl.position().top )\n                        {\n                            // Show the loader\n                            loadMoreEl.addClass('show');\n\n                            // Unregister scroll event to prevent triggering the function over and over again\n                            unregisterOnScroll();\n\n                            // Trigger load more event\n                            scope.loadMore().then(\n                                // Success\n                                function ()\n                                {\n                                    // Hide the loader\n                                    loadMoreEl.removeClass('show');\n\n                                    // Register the onScroll event again\n                                    registerOnScroll();\n                                },\n\n                                // Error\n                                function ()\n                                {\n                                    // Remove the loader completely\n                                    loadMoreEl.remove();\n                                }\n                            );\n                        }\n                    }\n\n                    /**\n                     * onScroll event registerer\n                     */\n                    function registerOnScroll()\n                    {\n                        scrollEl.on('scroll', onScroll);\n                    }\n\n                    /**\n                     * onScroll event unregisterer\n                     */\n                    function unregisterOnScroll()\n                    {\n                        scrollEl.off('scroll', onScroll);\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        unregisterOnScroll();\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msTimelineItemDirective($timeout, $q)\n    {\n        return {\n            scope  : true,\n            require: '^msTimeline',\n            compile: function (tElement)\n            {\n                tElement.addClass('ms-timeline-item').addClass('hidden');\n\n                return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\n                {\n                    var threshold = 72,\n                        itemLoaded = false,\n                        itemInViewport = false,\n                        scrollEl = MsTimelineCtrl.getScrollEl();\n\n                    //////////\n\n                    init();\n\n                    /**\n                     * Initialize\n                     */\n                    function init()\n                    {\n                        // Check if the timeline item has ms-card\n                        if ( iElement.find('ms-card') )\n                        {\n                            // If the ms-card template loaded...\n                            scope.$on('msCard::cardTemplateLoaded', function (event, args)\n                            {\n                                var cardEl = angular.element(args[0]);\n\n                                // Test the card to see if there is any image on it\n                                testForImage(cardEl).then(function ()\n                                {\n                                    $timeout(function ()\n                                    {\n                                        itemLoaded = true;\n                                    });\n                                });\n                            });\n                        }\n                        else\n                        {\n                            // Test the element to see if there is any image on it\n                            testForImage(iElement).then(function ()\n                            {\n                                $timeout(function ()\n                                {\n                                    itemLoaded = true;\n                                });\n                            });\n                        }\n\n                        // Check if the loaded element also in the viewport\n                        scrollEl.on('scroll', testForVisibility);\n\n                        // Test for visibility for the first time without waiting for the scroll event\n                        testForVisibility();\n                    }\n\n                    // Item ready watcher\n                    var itemReadyWatcher = scope.$watch(\n                        function ()\n                        {\n                            return itemLoaded && itemInViewport;\n                        },\n                        function (current, old)\n                        {\n                            if ( angular.equals(current, old) )\n                            {\n                                return;\n                            }\n\n                            if ( current )\n                            {\n                                iElement.removeClass('hidden').addClass('animate');\n\n                                // Unbind itemReadyWatcher\n                                itemReadyWatcher();\n                            }\n                        }, true);\n\n                    /**\n                     * Test the given element for image\n                     *\n                     * @param element\n                     * @returns promise\n                     */\n                    function testForImage(element)\n                    {\n                        var deferred = $q.defer(),\n                            imgEl = element.find('img');\n\n                        if ( imgEl.length > 0 )\n                        {\n                            imgEl.on('load', function ()\n                            {\n                                deferred.resolve('Image is loaded');\n                            });\n                        }\n                        else\n                        {\n                            deferred.resolve('No images');\n                        }\n\n                        return deferred.promise;\n                    }\n\n                    /**\n                     * Test the element for visibility\n                     */\n                    function testForVisibility()\n                    {\n                        if ( scrollEl.scrollTop() + scrollEl.height() > iElement.position().top + threshold )\n                        {\n                            $timeout(function ()\n                            {\n                                itemInViewport = true;\n                            });\n\n                            // Unbind the scroll event\n                            scrollEl.off('scroll', testForVisibility);\n                        }\n                    }\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msSplashScreen', msSplashScreenDirective);\n\n    /** @ngInject */\n    function msSplashScreenDirective($animate)\n    {\n        return {\n            restrict: 'E',\n            link    : function (scope, iElement)\n            {\n                var splashScreenRemoveEvent = scope.$on('msSplashScreen::remove', function ()\n                {\n                    $animate.leave(iElement).then(function ()\n                    {\n                        // De-register scope event\n                        splashScreenRemoveEvent();\n\n                        // Null-ify everything else\n                        scope = iElement = null;\n                    });\n                });\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsShortcutsController', MsShortcutsController)\n        .directive('msShortcuts', msShortcutsDirective);\n\n    /** @ngInject */\n    function MsShortcutsController($scope, $cookies, $document, $timeout, $q, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        vm.query = '';\n        vm.queryOptions = {\n            debounce: 300\n        };\n        vm.resultsLoading = false;\n        vm.selectedResultIndex = 0;\n        vm.ignoreMouseEvents = false;\n        vm.mobileBarActive = false;\n\n        vm.results = null;\n        vm.shortcuts = [];\n\n        vm.sortableOptions = {\n            ghostClass   : 'ghost',\n            forceFallback: true,\n            fallbackClass: 'dragging',\n            onSort       : function ()\n            {\n                vm.saveShortcuts();\n            }\n        };\n\n        // Methods\n        vm.populateResults = populateResults;\n        vm.loadShortcuts = loadShortcuts;\n        vm.saveShortcuts = saveShortcuts;\n        vm.addShortcut = addShortcut;\n        vm.removeShortcut = removeShortcut;\n        vm.handleResultClick = handleResultClick;\n\n        vm.absorbEvent = absorbEvent;\n        vm.handleKeydown = handleKeydown;\n        vm.handleMouseenter = handleMouseenter;\n        vm.temporarilyIgnoreMouseEvents = temporarilyIgnoreMouseEvents;\n        vm.ensureSelectedResultIsVisible = ensureSelectedResultIsVisible;\n        vm.toggleMobileBar = toggleMobileBar;\n\n        //////////\n\n        init();\n\n        function init()\n        {\n            // Load the shortcuts\n            vm.loadShortcuts().then(\n                // Success\n                function (response)\n                {\n                    vm.shortcuts = response;\n\n                    // Add shortcuts as results by default\n                    if ( vm.shortcuts.length > 0 )\n                    {\n                        vm.results = response;\n                    }\n                }\n            );\n\n            // Watch the model changes to trigger the search\n            $scope.$watch('MsShortcuts.query', function (current, old)\n            {\n                if ( angular.isUndefined(current) )\n                {\n                    return;\n                }\n\n                if ( angular.equals(current, old) )\n                {\n                    return;\n                }\n\n                // Show the loader\n                vm.resultsLoading = true;\n\n                // Populate the results\n                vm.populateResults().then(\n                    // Success\n                    function (response)\n                    {\n                        vm.results = response;\n                    },\n                    // Error\n                    function ()\n                    {\n                        vm.results = [];\n                    }\n                ).finally(\n                    function ()\n                    {\n                        // Hide the loader\n                        vm.resultsLoading = false;\n                    }\n                );\n            });\n        }\n\n        /**\n         * Populate the results\n         */\n        function populateResults()\n        {\n            var results = [],\n                flatNavigation = msNavigationService.getFlatNavigation(),\n                deferred = $q.defer();\n\n            // Iterate through the navigation array and\n            // make sure it doesn't have any groups or\n            // none ui-sref items\n            for ( var x = 0; x < flatNavigation.length; x++ )\n            {\n                if ( flatNavigation[x].uisref )\n                {\n                    results.push(flatNavigation[x]);\n                }\n            }\n\n            // If there is a query, filter the results\n            if ( vm.query )\n            {\n                results = results.filter(function (item)\n                {\n                    if ( angular.lowercase(item.title).search(angular.lowercase(vm.query)) > -1 )\n                    {\n                        return true;\n                    }\n                });\n\n                // Iterate through one last time and\n                // add required properties to items\n                for ( var i = 0; i < results.length; i++ )\n                {\n                    // Add false to hasShortcut by default\n                    results[i].hasShortcut = false;\n\n                    // Test if the item is in the shortcuts list\n                    for ( var y = 0; y < vm.shortcuts.length; y++ )\n                    {\n                        if ( vm.shortcuts[y]._id === results[i]._id )\n                        {\n                            results[i].hasShortcut = true;\n                            break;\n                        }\n                    }\n                }\n            }\n            else\n            {\n                // If the query is empty, that means\n                // there is nothing to search for so\n                // we will populate the results with\n                // current shortcuts if there is any\n                if ( vm.shortcuts.length > 0 )\n                {\n                    results = vm.shortcuts;\n                }\n            }\n\n            // Reset the selected result\n            vm.selectedResultIndex = 0;\n\n            // Fake the service delay\n            $timeout(function ()\n            {\n                // Resolve the promise\n                deferred.resolve(results);\n            }, 250);\n\n            // Return a promise\n            return deferred.promise;\n        }\n\n        /**\n         * Load shortcuts\n         */\n        function loadShortcuts()\n        {\n            var deferred = $q.defer();\n\n            // For the demo purposes, we will\n            // load the shortcuts from the cookies.\n            // But here you can make an API call\n            // to load them from the DB.\n            var shortcuts = angular.fromJson($cookies.get('FUSE.shortcuts'));\n\n            // No cookie available. Generate an empty list\n            if ( angular.isUndefined(shortcuts) )\n            {\n                shortcuts = [];\n                /*\n                shortcuts = [\n                    {\n                        'title'      : 'Sample',\n                        'icon'       : 'icon-tile-four',\n                        'state'      : 'app.sample',\n                        'weight'     : 1,\n                        'children'   : [],\n                        '_id'        : 'sample',\n                        '_path'      : 'apps.sample',\n                        'uisref'     : 'app.sample',\n                        'hasShortcut': true\n                    }\n                ];\n                */\n\n                $cookies.put('FUSE.shortcuts', angular.toJson(shortcuts));\n            }\n\n            // Resolve the promise\n            deferred.resolve(shortcuts);\n\n            return deferred.promise;\n        }\n\n        /**\n         * Save the shortcuts\n         */\n        function saveShortcuts()\n        {\n            var deferred = $q.defer();\n\n            // For the demo purposes, we will\n            // keep the shortcuts in the cookies.\n            // But here you can make an API call\n            // to save them to the DB.\n            $cookies.put('FUSE.shortcuts', angular.toJson(vm.shortcuts));\n\n            // Fake the service delay\n            $timeout(function ()\n            {\n                deferred.resolve({'success': true});\n            }, 250);\n\n            return deferred.promise;\n        }\n\n        /**\n         * Add item as shortcut\n         *\n         * @param item\n         */\n        function addShortcut(item)\n        {\n            // Update the hasShortcut status\n            item.hasShortcut = true;\n\n            // Add as a shortcut\n            vm.shortcuts.push(item);\n\n            // Save the shortcuts\n            vm.saveShortcuts();\n        }\n\n        /**\n         * Remove item from shortcuts\n         *\n         * @param item\n         */\n        function removeShortcut(item)\n        {\n            // Update the hasShortcut status\n            item.hasShortcut = false;\n\n            // Remove the shortcut\n            for ( var x = 0; x < vm.shortcuts.length; x++ )\n            {\n                if ( vm.shortcuts[x]._id === item._id )\n                {\n                    // Remove the x-th item from the array\n                    vm.shortcuts.splice(x, 1);\n\n                    // If we aren't searching for anything...\n                    if ( !vm.query )\n                    {\n                        // If all the shortcuts have been removed,\n                        // null-ify the results\n                        if ( vm.shortcuts.length === 0 )\n                        {\n                            vm.results = null;\n                        }\n                        // Otherwise update the selected index\n                        else\n                        {\n                            if ( x >= vm.shortcuts.length )\n                            {\n                                vm.selectedResultIndex = vm.shortcuts.length - 1;\n                            }\n                        }\n                    }\n                }\n            }\n\n            // Save the shortcuts\n            vm.saveShortcuts();\n        }\n\n        /**\n         * Handle the result click\n         *\n         * @param item\n         */\n        function handleResultClick(item)\n        {\n            // Add or remove the shortcut\n            if ( item.hasShortcut )\n            {\n                vm.removeShortcut(item);\n            }\n            else\n            {\n                vm.addShortcut(item);\n            }\n        }\n\n        /**\n         * Absorb the given event\n         *\n         * @param event\n         */\n        function absorbEvent(event)\n        {\n            event.preventDefault();\n        }\n\n        /**\n         * Handle keydown\n         *\n         * @param event\n         */\n        function handleKeydown(event)\n        {\n            var keyCode = event.keyCode,\n                keys = [38, 40];\n\n            // Prevent the default action if\n            // one of the keys are pressed that\n            // we are listening\n            if ( keys.indexOf(keyCode) > -1 )\n            {\n                event.preventDefault();\n            }\n\n            switch ( keyCode )\n            {\n                // Enter\n                case 13:\n\n                    // Trigger result click\n                    vm.handleResultClick(vm.results[vm.selectedResultIndex]);\n\n                    break;\n\n                // Up Arrow\n                case 38:\n\n                    // Decrease the selected result index\n                    if ( vm.selectedResultIndex - 1 >= 0 )\n                    {\n                        // Decrease the selected index\n                        vm.selectedResultIndex--;\n\n                        // Make sure the selected result is in the view\n                        vm.ensureSelectedResultIsVisible();\n                    }\n\n                    break;\n\n                // Down Arrow\n                case 40:\n\n                    // Increase the selected result index\n                    if ( vm.selectedResultIndex + 1 < vm.results.length )\n                    {\n                        // Increase the selected index\n                        vm.selectedResultIndex++;\n\n                        // Make sure the selected result is in the view\n                        vm.ensureSelectedResultIsVisible();\n                    }\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n\n        /**\n         * Handle mouseenter\n         *\n         * @param index\n         */\n        function handleMouseenter(index)\n        {\n            if ( vm.ignoreMouseEvents )\n            {\n                return;\n            }\n\n            // Update the selected result index\n            // with the given index\n            vm.selectedResultIndex = index;\n        }\n\n        /**\n         * Set a variable for a limited time\n         * to make other functions to ignore\n         * the mouse events\n         */\n        function temporarilyIgnoreMouseEvents()\n        {\n            // Set the variable\n            vm.ignoreMouseEvents = true;\n\n            // Cancel the previous timeout\n            $timeout.cancel(vm.mouseEventIgnoreTimeout);\n\n            // Set the timeout\n            vm.mouseEventIgnoreTimeout = $timeout(function ()\n            {\n                vm.ignoreMouseEvents = false;\n            }, 250);\n        }\n\n        /**\n         * Ensure the selected result will\n         * always be visible on the results\n         * area\n         */\n        function ensureSelectedResultIsVisible()\n        {\n            var resultsEl = $document.find('#ms-shortcut-add-menu').find('.results'),\n                selectedItemEl = angular.element(resultsEl.find('.result')[vm.selectedResultIndex]);\n\n            if ( resultsEl && selectedItemEl )\n            {\n                var top = selectedItemEl.position().top - 8,\n                    bottom = selectedItemEl.position().top + selectedItemEl.outerHeight() + 8;\n\n                // Start ignoring mouse events\n                vm.temporarilyIgnoreMouseEvents();\n\n                if ( resultsEl.scrollTop() > top )\n                {\n                    resultsEl.scrollTop(top);\n                }\n\n                if ( bottom > (resultsEl.height() + resultsEl.scrollTop()) )\n                {\n                    resultsEl.scrollTop(bottom - resultsEl.height());\n                }\n            }\n        }\n\n        /**\n         * Toggle mobile bar\n         */\n        function toggleMobileBar()\n        {\n            vm.mobileBarActive = !vm.mobileBarActive;\n        }\n    }\n\n    /** @ngInject */\n    function msShortcutsDirective()\n    {\n        return {\n            restrict        : 'E',\n            scope           : {},\n            require         : 'msShortcuts',\n            controller      : 'MsShortcutsController as MsShortcuts',\n            bindToController: {},\n            templateUrl     : 'app/core/directives/ms-shortcuts/ms-shortcuts.html',\n            compile         : function (tElement)\n            {\n                // Add class\n                tElement.addClass('ms-shortcuts');\n\n                return function postLink(scope, iElement)\n                {\n                    // Data\n\n                };\n            }\n        };\n    }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msSidenavHelper', msSidenavHelperDirective);\n\n    /** @ngInject */\n    function msSidenavHelperDirective()\n    {\n        return {\n            restrict: 'A',\n            require : '^mdSidenav',\n            link    : function (scope, iElement, iAttrs, MdSidenavCtrl)\n            {\n                // Watch md-sidenav open & locked open statuses\n                // and add class to the \".page-layout\" if only\n                // the sidenav open and NOT locked open\n                scope.$watch(function ()\n                {\n                    return MdSidenavCtrl.isOpen() && !MdSidenavCtrl.isLockedOpen();\n                }, function (current)\n                {\n                    if ( angular.isUndefined(current) )\n                    {\n                        return;\n                    }\n\n                    iElement.parent().toggleClass('full-height', current);\n                    angular.element('html').toggleClass('sidenav-open', current);\n                });\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsSearchBarController', MsSearchBarController)\n        .directive('msSearchBar', msSearchBarDirective);\n\n    /** @ngInject */\n    function MsSearchBarController($scope, $element, $timeout)\n    {\n        var vm = this;\n\n        // Data\n        vm.collapsed = true;\n        vm.query = '';\n        vm.queryOptions = {\n            debounce: vm.debounce || 0\n        };\n        vm.resultsLoading = false;\n        vm.results = null;\n        vm.selectedResultIndex = 0;\n        vm.ignoreMouseEvents = false;\n\n        // Methods\n        vm.populateResults = populateResults;\n\n        vm.expand = expand;\n        vm.collapse = collapse;\n\n        vm.absorbEvent = absorbEvent;\n        vm.handleKeydown = handleKeydown;\n        vm.handleMouseenter = handleMouseenter;\n        vm.temporarilyIgnoreMouseEvents = temporarilyIgnoreMouseEvents;\n        vm.handleResultClick = handleResultClick;\n        vm.ensureSelectedResultIsVisible = ensureSelectedResultIsVisible;\n\n        //////////\n\n        init();\n\n        function init()\n        {\n            // Watch the model changes to trigger the search\n            $scope.$watch('MsSearchBar.query', function (current, old)\n            {\n                if ( angular.isUndefined(current) )\n                {\n                    return;\n                }\n\n                if ( angular.equals(current, old) )\n                {\n                    return;\n                }\n\n                if ( vm.collapsed )\n                {\n                    return;\n                }\n\n                // Evaluate the onSearch function to access the\n                // function itself\n                var onSearchEvaluated = $scope.$parent.$eval(vm.onSearch, {query: current}),\n                    isArray = angular.isArray(onSearchEvaluated),\n                    isPromise = (onSearchEvaluated && !!onSearchEvaluated.then);\n\n                if ( isArray )\n                {\n                    // Populate the results\n                    vm.populateResults(onSearchEvaluated);\n                }\n\n                if ( isPromise )\n                {\n                    // Show the loader\n                    vm.resultsLoading = true;\n\n                    onSearchEvaluated.then(\n                        // Success\n                        function (response)\n                        {\n                            // Populate the results\n                            vm.populateResults(response);\n                        },\n                        // Error\n                        function ()\n                        {\n                            // Assign an empty array to show\n                            // the no-results screen\n                            vm.populateResults([]);\n                        }\n                    ).finally(function ()\n                        {\n                            // Hide the loader\n                            vm.resultsLoading = false;\n                        }\n                    );\n                }\n            });\n        }\n\n        /**\n         * Populate the results\n         *\n         * @param results\n         */\n        function populateResults(results)\n        {\n            // Before doing anything,\n            // make sure the search bar is expanded\n            if ( vm.collapsed )\n            {\n                return;\n            }\n\n            var isArray = angular.isArray(results),\n                isNull = results === null;\n\n            // Only accept arrays and null values\n            if ( !isArray && !isNull )\n            {\n                return;\n            }\n\n            // Reset the selected result\n            vm.selectedResultIndex = 0;\n\n            // Populate the results\n            vm.results = results;\n        }\n\n        /**\n         * Expand\n         */\n        function expand()\n        {\n            // Set collapsed status\n            vm.collapsed = false;\n\n            // Call expand on scope\n            $scope.expand();\n\n            // Callback\n            if ( vm.onExpand && angular.isFunction(vm.onExpand) )\n            {\n                vm.onExpand();\n            }\n        }\n\n        /**\n         * Collapse\n         */\n        function collapse()\n        {\n            // Empty the query\n            vm.query = '';\n\n            // Empty results to hide the results view\n            vm.populateResults(null);\n\n            // Set collapsed status\n            vm.collapsed = true;\n\n            // Call collapse on scope\n            $scope.collapse();\n\n            // Callback\n            if ( vm.onCollapse && angular.isFunction(vm.onCollapse) )\n            {\n                vm.onCollapse();\n            }\n        }\n\n        /**\n         * Absorb the given event\n         *\n         * @param event\n         */\n        function absorbEvent(event)\n        {\n            event.preventDefault();\n        }\n\n        /**\n         * Handle keydown\n         *\n         * @param event\n         */\n        function handleKeydown(event)\n        {\n            var keyCode = event.keyCode,\n                keys = [27, 38, 40];\n\n            // Prevent the default action if\n            // one of the keys are pressed that\n            // we are listening\n            if ( keys.indexOf(keyCode) > -1 )\n            {\n                event.preventDefault();\n            }\n\n            switch ( keyCode )\n            {\n                // Enter\n                case 13:\n\n                    // Trigger result click\n                    vm.handleResultClick(vm.results[vm.selectedResultIndex]);\n\n                    break;\n\n                // Escape\n                case 27:\n\n                    // Collapse the search bar\n                    vm.collapse();\n\n                    break;\n\n                // Up Arrow\n                case 38:\n\n                    // Decrease the selected result index\n                    if ( vm.selectedResultIndex - 1 >= 0 )\n                    {\n                        // Decrease the selected index\n                        vm.selectedResultIndex--;\n\n                        // Make sure the selected result is in the view\n                        vm.ensureSelectedResultIsVisible();\n                    }\n\n                    break;\n\n                // Down Arrow\n                case 40:\n\n                    if ( !vm.results )\n                    {\n                        return;\n                    }\n\n                    // Increase the selected result index\n                    if ( vm.selectedResultIndex + 1 < vm.results.length )\n                    {\n                        // Increase the selected index\n                        vm.selectedResultIndex++;\n\n                        // Make sure the selected result is in the view\n                        vm.ensureSelectedResultIsVisible();\n                    }\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n\n        /**\n         * Handle mouseenter\n         *\n         * @param index\n         */\n        function handleMouseenter(index)\n        {\n            if ( vm.ignoreMouseEvents )\n            {\n                return;\n            }\n\n            // Update the selected result index\n            // with the given index\n            vm.selectedResultIndex = index;\n        }\n\n        /**\n         * Set a variable for a limited time\n         * to make other functions to ignore\n         * the mouse events\n         */\n        function temporarilyIgnoreMouseEvents()\n        {\n            // Set the variable\n            vm.ignoreMouseEvents = true;\n\n            // Cancel the previous timeout\n            $timeout.cancel(vm.mouseEventIgnoreTimeout);\n\n            // Set the timeout\n            vm.mouseEventIgnoreTimeout = $timeout(function ()\n            {\n                vm.ignoreMouseEvents = false;\n            }, 250);\n        }\n\n        /**\n         * Handle the result click\n         *\n         * @param item\n         */\n        function handleResultClick(item)\n        {\n            if ( vm.onResultClick )\n            {\n                vm.onResultClick({item: item});\n            }\n\n            // Collapse the search bar\n            vm.collapse();\n        }\n\n        /**\n         * Ensure the selected result will\n         * always be visible on the results\n         * area\n         */\n        function ensureSelectedResultIsVisible()\n        {\n            var resultsEl = $element.find('.ms-search-bar-results'),\n                selectedItemEl = angular.element(resultsEl.find('.result')[vm.selectedResultIndex]);\n\n            if ( resultsEl && selectedItemEl )\n            {\n                var top = selectedItemEl.position().top - 8,\n                    bottom = selectedItemEl.position().top + selectedItemEl.outerHeight() + 8;\n\n                // Start ignoring mouse events\n                vm.temporarilyIgnoreMouseEvents();\n\n                if ( resultsEl.scrollTop() > top )\n                {\n                    resultsEl.scrollTop(top);\n                }\n\n                if ( bottom > (resultsEl.height() + resultsEl.scrollTop()) )\n                {\n                    resultsEl.scrollTop(bottom - resultsEl.height());\n                }\n            }\n        }\n    }\n\n    /** @ngInject */\n    function msSearchBarDirective($document)\n    {\n        return {\n            restrict        : 'E',\n            scope           : {},\n            require         : 'msSearchBar',\n            controller      : 'MsSearchBarController as MsSearchBar',\n            bindToController: {\n                debounce     : '=?',\n                onSearch     : '@',\n                onResultClick: '&?',\n                onExpand     : '&?',\n                onCollapse   : '&?'\n            },\n            templateUrl     : 'app/core/directives/ms-search-bar/ms-search-bar.html',\n            compile         : function (tElement)\n            {\n                // Add class\n                tElement.addClass('ms-search-bar');\n\n                return function postLink(scope, iElement)\n                {\n                    // Data\n                    var inputEl,\n                        bodyEl = $document.find('body');\n\n                    // Methods\n                    scope.collapse = collapse;\n                    scope.expand = expand;\n\n                    //////////\n\n                    // Initialize\n                    init();\n\n                    /**\n                     * Initialize\n                     */\n                    function init()\n                    {\n                        // Grab the input element\n                        inputEl = iElement.find('#ms-search-bar-input');\n                    }\n\n                    /**\n                     * Expand action\n                     */\n                    function expand()\n                    {\n                        // Add expanded class\n                        iElement.addClass('expanded');\n\n                        // Add helper class to the body\n                        bodyEl.addClass('ms-search-bar-expanded');\n\n                        // Focus on the input\n                        inputEl.focus();\n                    }\n\n                    /**\n                     * Collapse action\n                     */\n                    function collapse()\n                    {\n                        // Remove expanded class\n                        iElement.removeClass('expanded');\n\n                        // Remove helper class from the body\n                        bodyEl.removeClass('ms-search-bar-expanded');\n                    }\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .provider('msScrollConfig', msScrollConfigProvider)\n        .directive('msScroll', msScrollDirective);\n\n    /** @ngInject */\n    function msScrollConfigProvider()\n    {\n        // Default configuration\n        var defaultConfiguration = {\n            wheelSpeed            : 1,\n            wheelPropagation      : false,\n            swipePropagation      : true,\n            minScrollbarLength    : null,\n            maxScrollbarLength    : null,\n            useBothWheelAxes      : false,\n            useKeyboard           : true,\n            suppressScrollX       : false,\n            suppressScrollY       : false,\n            scrollXMarginOffset   : 0,\n            scrollYMarginOffset   : 0,\n            stopPropagationOnClick: true\n        };\n\n        // Methods\n        this.config = config;\n\n        //////////\n\n        /**\n         * Extend default configuration with the given one\n         *\n         * @param configuration\n         */\n        function config(configuration)\n        {\n            defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\n        }\n\n        /**\n         * Service\n         */\n        this.$get = function ()\n        {\n            var service = {\n                getConfig: getConfig\n            };\n\n            return service;\n\n            //////////\n\n            /**\n             * Return the config\n             */\n            function getConfig()\n            {\n                return defaultConfiguration;\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msScrollDirective($timeout, msScrollConfig, msUtils, fuseConfig)\n    {\n        return {\n            restrict: 'AE',\n            compile : function (tElement)\n            {\n                // Do not replace scrollbars if\n                // 'disableCustomScrollbars' config enabled\n                if ( fuseConfig.getConfig('disableCustomScrollbars') )\n                {\n                    return;\n                }\n\n                // Do not replace scrollbars on mobile devices\n                // if 'disableCustomScrollbarsOnMobile' config enabled\n                if ( fuseConfig.getConfig('disableCustomScrollbarsOnMobile') && msUtils.isMobile() )\n                {\n                    return;\n                }\n\n                // Add class\n                tElement.addClass('ms-scroll');\n\n                return function postLink(scope, iElement, iAttrs)\n                {\n                    var options = {};\n\n                    // If options supplied, evaluate the given\n                    // value. This is because we don't want to\n                    // have an isolated scope but still be able\n                    // to use scope variables.\n                    // We don't want an isolated scope because\n                    // we should be able to use this everywhere\n                    // especially with other directives\n                    if ( iAttrs.msScroll )\n                    {\n                        options = scope.$eval(iAttrs.msScroll);\n                    }\n\n                    // Extend the given config with the ones from provider\n                    options = angular.extend({}, msScrollConfig.getConfig(), options);\n\n                    // Initialize the scrollbar\n                    $timeout(function ()\n                    {\n                        PerfectScrollbar.initialize(iElement[0], options);\n                    }, 0);\n\n                    // Update the scrollbar on element mouseenter\n                    iElement.on('mouseenter', updateScrollbar);\n\n                    // Watch scrollHeight and update\n                    // the scrollbar if it changes\n                    scope.$watch(function ()\n                    {\n                        return iElement.prop('scrollHeight');\n                    }, function (current, old)\n                    {\n                        if ( angular.isUndefined(current) || angular.equals(current, old) )\n                        {\n                            return;\n                        }\n\n                        updateScrollbar();\n                    });\n\n                    // Watch scrollWidth and update\n                    // the scrollbar if it changes\n                    scope.$watch(function ()\n                    {\n                        return iElement.prop('scrollWidth');\n                    }, function (current, old)\n                    {\n                        if ( angular.isUndefined(current) || angular.equals(current, old) )\n                        {\n                            return;\n                        }\n\n                        updateScrollbar();\n                    });\n\n                    /**\n                     * Update the scrollbar\n                     */\n                    function updateScrollbar()\n                    {\n                        PerfectScrollbar.update(iElement[0]);\n                    }\n\n                    // Cleanup on destroy\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.off('mouseenter');\n                        PerfectScrollbar.destroy(iElement[0]);\n                    });\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msResponsiveTable', msResponsiveTableDirective);\n\n    /** @ngInject */\n    function msResponsiveTableDirective()\n    {\n        return {\n            restrict: 'A',\n            link    : function (scope, iElement)\n            {\n                // Wrap the table\n                var wrapper = angular.element('<div class=\"ms-responsive-table-wrapper\"></div>');\n                iElement.after(wrapper);\n                wrapper.append(iElement);\n\n                //////////\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msRandomClass', msRandomClassDirective);\n\n    /** @ngInject */\n    function msRandomClassDirective()\n    {\n        return {\n            restrict: 'A',\n            scope   : {\n                msRandomClass: '='\n            },\n            link    : function (scope, iElement)\n            {\n                var randomClass = scope.msRandomClass[Math.floor(Math.random() * (scope.msRandomClass.length))];\n                iElement.addClass(randomClass);\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .provider('msNavigationService', msNavigationServiceProvider)\n        .controller('MsNavigationController', MsNavigationController)\n        // Vertical\n        .directive('msNavigation', msNavigationDirective)\n        .controller('MsNavigationNodeController', MsNavigationNodeController)\n        .directive('msNavigationNode', msNavigationNodeDirective)\n        .directive('msNavigationItem', msNavigationItemDirective)\n        //Horizontal\n        .directive('msNavigationHorizontal', msNavigationHorizontalDirective)\n        .controller('MsNavigationHorizontalNodeController', MsNavigationHorizontalNodeController)\n        .directive('msNavigationHorizontalNode', msNavigationHorizontalNodeDirective)\n        .directive('msNavigationHorizontalItem', msNavigationHorizontalItemDirective);\n\n    /** @ngInject */\n    function msNavigationServiceProvider()\n    {\n        // Inject $log service\n        var $log = angular.injector(['ng']).get('$log');\n\n        // Navigation array\n        var navigation = [];\n\n        var service = this;\n\n        // Methods\n        service.saveItem = saveItem;\n        service.deleteItem = deleteItem;\n        service.sortByWeight = sortByWeight;\n\n        //////////\n\n        /**\n         * Create or update the navigation item\n         *\n         * @param path\n         * @param item\n         */\n        function saveItem(path, item)\n        {\n            if ( !angular.isString(path) )\n            {\n                $log.error('path must be a string (eg. `dashboard.project`)');\n                return;\n            }\n\n            var parts = path.split('.');\n\n            // Generate the object id from the parts\n            var id = parts[parts.length - 1];\n\n            // Get the parent item from the parts\n            var parent = _findOrCreateParent(parts);\n\n            // Decide if we are going to update or create\n            var updateItem = false;\n\n            for ( var i = 0; i < parent.length; i++ )\n            {\n                if ( parent[i]._id === id )\n                {\n                    updateItem = parent[i];\n\n                    break;\n                }\n            }\n\n            // Update\n            if ( updateItem )\n            {\n                angular.extend(updateItem, item);\n\n                // Add proper ui-sref\n                updateItem.uisref = _getUiSref(updateItem);\n            }\n            // Create\n            else\n            {\n                // Create an empty children array in the item\n                item.children = [];\n\n                // Add the default weight if not provided or if it's not a number\n                if ( angular.isUndefined(item.weight) || !angular.isNumber(item.weight) )\n                {\n                    item.weight = 1;\n                }\n\n                // Add the item id\n                item._id = id;\n\n                // Add the item path\n                item._path = path;\n\n                // Add proper ui-sref\n                item.uisref = _getUiSref(item);\n\n                // Push the item into the array\n                parent.push(item);\n            }\n        }\n\n        /**\n         * Delete navigation item\n         *\n         * @param path\n         */\n        function deleteItem(path)\n        {\n            if ( !angular.isString(path) )\n            {\n                $log.error('path must be a string (eg. `dashboard.project`)');\n                return;\n            }\n\n            // Locate the item by using given path\n            var item = navigation,\n                parts = path.split('.');\n\n            for ( var p = 0; p < parts.length; p++ )\n            {\n                var id = parts[p];\n\n                for ( var i = 0; i < item.length; i++ )\n                {\n                    if ( item[i]._id === id )\n                    {\n                        // If we have a matching path,\n                        // we have found our object:\n                        // remove it.\n                        if ( item[i]._path === path )\n                        {\n                            item.splice(i, 1);\n                            return true;\n                        }\n\n                        // Otherwise grab the children of\n                        // the current item and continue\n                        item = item[i].children;\n                        break;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Sort the navigation items by their weights\n         *\n         * @param parent\n         */\n        function sortByWeight(parent)\n        {\n            // If parent not provided, sort the root items\n            if ( !parent )\n            {\n                parent = navigation;\n                parent.sort(_byWeight);\n            }\n\n            // Sort the children\n            for ( var i = 0; i < parent.length; i++ )\n            {\n                var children = parent[i].children;\n\n                if ( children.length > 1 )\n                {\n                    children.sort(_byWeight);\n                }\n\n                if ( children.length > 0 )\n                {\n                    sortByWeight(children);\n                }\n            }\n        }\n\n        /* ----------------- */\n        /* Private Functions */\n        /* ----------------- */\n\n        /**\n         * Find or create parent\n         *\n         * @param parts\n         * @returns {Array|Boolean}\n         * @private\n         */\n        function _findOrCreateParent(parts)\n        {\n            // Store the main navigation\n            var parent = navigation;\n\n            // If it's going to be a root item\n            // return the navigation itself\n            if ( parts.length === 1 )\n            {\n                return parent;\n            }\n\n            // Remove the last element from the parts as\n            // we don't need that to figure out the parent\n            parts.pop();\n\n            // Find and return the parent\n            for ( var i = 0; i < parts.length; i++ )\n            {\n                var _id = parts[i],\n                    createParent = true;\n\n                for ( var p = 0; p < parent.length; p++ )\n                {\n                    if ( parent[p]._id === _id )\n                    {\n                        parent = parent[p].children;\n                        createParent = false;\n\n                        break;\n                    }\n                }\n\n                // If there is no parent found, create one, push\n                // it into the current parent and assign it as a\n                // new parent\n                if ( createParent )\n                {\n                    var item = {\n                        _id     : _id,\n                        _path   : parts.join('.'),\n                        title   : _id,\n                        weight  : 1,\n                        children: []\n                    };\n\n                    parent.push(item);\n                    parent = item.children;\n                }\n            }\n\n            return parent;\n        }\n\n        /**\n         * Sort by weight\n         *\n         * @param x\n         * @param y\n         * @returns {number}\n         * @private\n         */\n        function _byWeight(x, y)\n        {\n            return parseInt(x.weight) - parseInt(y.weight);\n        }\n\n        /**\n         * Setup the ui-sref using state & state parameters\n         *\n         * @param item\n         * @returns {string}\n         * @private\n         */\n        function _getUiSref(item)\n        {\n            var uisref = '';\n\n            if ( angular.isDefined(item.state) )\n            {\n                uisref = item.state;\n\n                if ( angular.isDefined(item.stateParams) && angular.isObject(item.stateParams) )\n                {\n                    uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n                }\n            }\n\n            return uisref;\n        }\n\n        /* ----------------- */\n        /* Service           */\n        /* ----------------- */\n\n        this.$get = function ()\n        {\n            var activeItem = null,\n                navigationScope = null,\n                folded = null,\n                foldedOpen = null;\n\n            var service = {\n                saveItem          : saveItem,\n                deleteItem        : deleteItem,\n                sort              : sortByWeight,\n                clearNavigation   : clearNavigation,\n                setActiveItem     : setActiveItem,\n                getActiveItem     : getActiveItem,\n                getNavigation     : getNavigation,\n                getFlatNavigation : getFlatNavigation,\n                setNavigationScope: setNavigationScope,\n                setFolded         : setFolded,\n                getFolded         : getFolded,\n                setFoldedOpen     : setFoldedOpen,\n                getFoldedOpen     : getFoldedOpen,\n                toggleFolded      : toggleFolded\n            };\n\n            return service;\n\n            //////////\n\n            /**\n             * Clear the entire navigation\n             */\n            function clearNavigation()\n            {\n                // Clear the navigation array\n                navigation = [];\n\n                // Clear the vm.navigation from main controller\n                if ( navigationScope )\n                {\n                    navigationScope.vm.navigation = navigation;\n                }\n            }\n\n            /**\n             * Set active item\n             *\n             * @param node\n             * @param scope\n             */\n            function setActiveItem(node, scope)\n            {\n                activeItem = {\n                    node : node,\n                    scope: scope\n                };\n            }\n\n            /**\n             * Return active item\n             */\n            function getActiveItem()\n            {\n                return activeItem;\n            }\n\n            /**\n             * Return navigation array\n             *\n             * @param root\n             * @returns Array\n             */\n            function getNavigation(root)\n            {\n                if ( root )\n                {\n                    for ( var i = 0; i < navigation.length; i++ )\n                    {\n                        if ( navigation[i]._id === root )\n                        {\n                            return [navigation[i]];\n                        }\n                    }\n\n                    return null;\n                }\n\n                return navigation;\n            }\n\n            /**\n             * Return flat navigation array\n             *\n             * @param root\n             * @returns Array\n             */\n            function getFlatNavigation(root)\n            {\n                // Get the correct navigation array\n                var navigation = getNavigation(root);\n\n                // Flatten the navigation object\n                return _flattenNavigation(navigation);\n            }\n\n            /**\n             * Store navigation's scope for later use\n             *\n             * @param scope\n             */\n            function setNavigationScope(scope)\n            {\n                navigationScope = scope;\n            }\n\n            /**\n             * Set folded status\n             *\n             * @param status\n             */\n            function setFolded(status)\n            {\n                folded = status;\n            }\n\n            /**\n             * Return folded status\n             *\n             * @returns {*}\n             */\n            function getFolded()\n            {\n                return folded;\n            }\n\n            /**\n             * Set folded open status\n             *\n             * @param status\n             */\n            function setFoldedOpen(status)\n            {\n                foldedOpen = status;\n            }\n\n            /**\n             * Return folded open status\n             *\n             * @returns {*}\n             */\n            function getFoldedOpen()\n            {\n                return foldedOpen;\n            }\n\n\n            /**\n             * Toggle fold on stored navigation's scope\n             */\n            function toggleFolded()\n            {\n                navigationScope.toggleFolded();\n            }\n\n            /**\n             * Flatten the given navigation\n             *\n             * @param navigation\n             * @private\n             */\n            function _flattenNavigation(navigation)\n            {\n                var flatNav = [];\n\n                for ( var x = 0; x < navigation.length; x++ )\n                {\n                    // Copy and clear the children of the\n                    // navigation that we want to push\n                    var navToPush = angular.copy(navigation[x]);\n                    navToPush.children = [];\n\n                    // Push the item\n                    flatNav.push(navToPush);\n\n                    // If there are child items in this navigation,\n                    // do some nested function magic\n                    if ( navigation[x].children.length > 0 )\n                    {\n                        flatNav = flatNav.concat(_flattenNavigation(navigation[x].children));\n                    }\n                }\n\n                return flatNav;\n            }\n        };\n    }\n\n    /** @ngInject */\n    function MsNavigationController($scope, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        if ( $scope.root )\n        {\n            vm.navigation = msNavigationService.getNavigation($scope.root);\n        }\n        else\n        {\n            vm.navigation = msNavigationService.getNavigation();\n        }\n\n        // Methods\n        vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n        //////////\n\n        init();\n\n        /**\n         * Initialize\n         */\n        function init()\n        {\n            // Sort the navigation before doing anything else\n            msNavigationService.sort();\n        }\n\n        /**\n         * Toggle horizontal mobile menu\n         */\n        function toggleHorizontalMobileMenu()\n        {\n            angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n        }\n    }\n\n    /** @ngInject */\n    function msNavigationDirective($rootScope, $timeout, $mdSidenav, msNavigationService)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {\n                folded: '=',\n                root  : '@'\n            },\n            controller : 'MsNavigationController as vm',\n            templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\n            transclude : true,\n            compile    : function (tElement)\n            {\n                tElement.addClass('ms-navigation');\n\n                return function postLink(scope, iElement)\n                {\n                    var bodyEl = angular.element('body'),\n                        foldExpanderEl = angular.element('<div id=\"ms-navigation-fold-expander\"></div>'),\n                        foldCollapserEl = angular.element('<div id=\"ms-navigation-fold-collapser\"></div>'),\n                        sidenav = $mdSidenav('navigation');\n\n                    // Store the navigation in the service for public access\n                    msNavigationService.setNavigationScope(scope);\n\n                    // Initialize\n                    init();\n\n                    /**\n                     * Initialize\n                     */\n                    function init()\n                    {\n                        // Set the folded status for the first time.\n                        // First, we have to check if we have a folded\n                        // status available in the service already. This\n                        // will prevent navigation to act weird if we already\n                        // set the fold status, remove the navigation and\n                        // then re-initialize it, which happens if we\n                        // change to a view without a navigation and then\n                        // come back with history.back() function.\n\n                        // If the service didn't initialize before, set\n                        // the folded status from scope, otherwise we\n                        // won't touch anything because the folded status\n                        // already set in the service...\n                        if ( msNavigationService.getFolded() === null )\n                        {\n                            msNavigationService.setFolded(scope.folded);\n                        }\n\n                        if ( msNavigationService.getFolded() )\n                        {\n                            // Collapse everything.\n                            // This must be inside a $timeout because by the\n                            // time we call this, the 'msNavigation::collapse'\n                            // event listener is not registered yet. $timeout\n                            // will ensure that it will be called after it is\n                            // registered.\n                            $timeout(function ()\n                            {\n                                $rootScope.$broadcast('msNavigation::collapse');\n                            });\n\n                            // Add class to the body\n                            bodyEl.addClass('ms-navigation-folded');\n\n                            // Set fold expander\n                            setFoldExpander();\n                        }\n                    }\n\n                    // Sidenav locked open status watcher\n                    scope.$watch(function ()\n                    {\n                        return sidenav.isLockedOpen();\n                    }, function (current, old)\n                    {\n                        if ( angular.isUndefined(current) || angular.equals(current, old) )\n                        {\n                            return;\n                        }\n\n                        var folded = msNavigationService.getFolded();\n\n                        if ( folded )\n                        {\n                            if ( current )\n                            {\n                                // Collapse everything\n                                $rootScope.$broadcast('msNavigation::collapse');\n                            }\n                            else\n                            {\n                                // Expand the active one and its parents\n                                var activeItem = msNavigationService.getActiveItem();\n                                if ( activeItem )\n                                {\n                                    activeItem.scope.$emit('msNavigation::stateMatched');\n                                }\n                            }\n                        }\n                    });\n\n                    // Folded status watcher\n                    scope.$watch('folded', function (current, old)\n                    {\n                        if ( angular.isUndefined(current) || angular.equals(current, old) )\n                        {\n                            return;\n                        }\n\n                        setFolded(current);\n                    });\n\n                    /**\n                     * Set folded status\n                     *\n                     * @param folded\n                     */\n                    function setFolded(folded)\n                    {\n                        // Store folded status on the service for global access\n                        msNavigationService.setFolded(folded);\n\n                        if ( folded )\n                        {\n                            // Collapse everything\n                            $rootScope.$broadcast('msNavigation::collapse');\n\n                            // Add class to the body\n                            bodyEl.addClass('ms-navigation-folded');\n\n                            // Set fold expander\n                            setFoldExpander();\n                        }\n                        else\n                        {\n                            // Expand the active one and its parents\n                            var activeItem = msNavigationService.getActiveItem();\n                            if ( activeItem )\n                            {\n                                activeItem.scope.$emit('msNavigation::stateMatched');\n                            }\n\n                            // Remove body class\n                            bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n                            // Remove fold collapser\n                            removeFoldCollapser();\n                        }\n                    }\n\n                    /**\n                     * Set fold expander\n                     */\n                    function setFoldExpander()\n                    {\n                        iElement.parent().append(foldExpanderEl);\n\n                        // Let everything settle for a moment\n                        // before registering the event listener\n                        $timeout(function ()\n                        {\n                            foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n                        });\n                    }\n\n                    /**\n                     * Set fold collapser\n                     */\n                    function setFoldCollapser()\n                    {\n                        bodyEl.find('#main').append(foldCollapserEl);\n                        foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n                    }\n\n                    /**\n                     * Remove fold collapser\n                     */\n                    function removeFoldCollapser()\n                    {\n                        foldCollapserEl.remove();\n                    }\n\n                    /**\n                     * onHover event of foldExpander\n                     */\n                    function onFoldExpanderHover(event)\n                    {\n                        if ( event )\n                        {\n                            event.preventDefault();\n                        }\n\n                        // Set folded open status\n                        msNavigationService.setFoldedOpen(true);\n\n                        // Expand the active one and its parents\n                        var activeItem = msNavigationService.getActiveItem();\n                        if ( activeItem )\n                        {\n                            activeItem.scope.$emit('msNavigation::stateMatched');\n                        }\n\n                        // Add class to the body\n                        bodyEl.addClass('ms-navigation-folded-open');\n\n                        // Remove the fold opener\n                        foldExpanderEl.remove();\n\n                        // Set fold collapser\n                        setFoldCollapser();\n                    }\n\n                    /**\n                     * onHover event of foldCollapser\n                     */\n                    function onFoldCollapserHover(event)\n                    {\n                        if ( event )\n                        {\n                            event.preventDefault();\n                        }\n\n                        // Set folded open status\n                        msNavigationService.setFoldedOpen(false);\n\n                        // Collapse everything\n                        $rootScope.$broadcast('msNavigation::collapse');\n\n                        // Remove body class\n                        bodyEl.removeClass('ms-navigation-folded-open');\n\n                        // Remove the fold collapser\n                        foldCollapserEl.remove();\n\n                        // Set fold expander\n                        setFoldExpander();\n                    }\n\n                    /**\n                     * Public access for toggling folded status externally\n                     */\n                    scope.toggleFolded = function ()\n                    {\n                        var folded = msNavigationService.getFolded();\n\n                        setFolded(!folded);\n                    };\n\n                    /**\n                     * On $stateChangeStart\n                     */\n                    scope.$on('$stateChangeStart', function ()\n                    {\n                        // Close the sidenav\n                        sidenav.close();\n                    });\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        foldCollapserEl.off('mouseenter touchstart');\n                        foldExpanderEl.off('mouseenter touchstart');\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function MsNavigationNodeController($scope, $element, $rootScope, $animate, $state, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        vm.element = $element;\n        vm.node = $scope.node;\n        vm.hasChildren = undefined;\n        vm.collapsed = undefined;\n        vm.collapsable = undefined;\n        vm.group = undefined;\n        vm.animateHeightClass = 'animate-height';\n\n        // Methods\n        vm.toggleCollapsed = toggleCollapsed;\n        vm.collapse = collapse;\n        vm.expand = expand;\n        vm.getClass = getClass;\n        vm.isHidden = isHidden;\n\n        //////////\n\n        init();\n\n        /**\n         * Initialize\n         */\n        function init()\n        {\n            // Setup the initial values\n\n            // Has children?\n            vm.hasChildren = vm.node.children.length > 0;\n\n            // Is group?\n            vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n            // Is collapsable?\n            if ( !vm.hasChildren || vm.group )\n            {\n                vm.collapsable = false;\n            }\n            else\n            {\n                vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n            }\n\n            // Is collapsed?\n            if ( !vm.collapsable )\n            {\n                vm.collapsed = false;\n            }\n            else\n            {\n                vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n            }\n\n            // Expand all parents if we have a matching state or\n            // the current state is a child of the node's state\n            if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n            {\n                // If state params are defined, make sure they are\n                // equal, otherwise do not set the active item\n                if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                {\n                    return;\n                }\n\n                $scope.$emit('msNavigation::stateMatched');\n\n                // Also store the current active menu item\n                msNavigationService.setActiveItem(vm.node, $scope);\n            }\n\n            $scope.$on('msNavigation::stateMatched', function ()\n            {\n                // Expand if the current scope is collapsable and is collapsed\n                if ( vm.collapsable && vm.collapsed )\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.collapsed = false;\n                    });\n                }\n            });\n\n            // Listen for collapse event\n            $scope.$on('msNavigation::collapse', function (event, path)\n            {\n                if ( vm.collapsed || !vm.collapsable )\n                {\n                    return;\n                }\n\n                // If there is no path defined, collapse\n                if ( angular.isUndefined(path) )\n                {\n                    vm.collapse();\n                }\n                // If there is a path defined, do not collapse\n                // the items that are inside that path. This will\n                // prevent parent items from collapsing\n                else\n                {\n                    var givenPathParts = path.split('.'),\n                        activePathParts = [];\n\n                    var activeItem = msNavigationService.getActiveItem();\n                    if ( activeItem )\n                    {\n                        activePathParts = activeItem.node._path.split('.');\n                    }\n\n                    // Test for given path\n                    if ( givenPathParts.indexOf(vm.node._id) > -1 )\n                    {\n                        return;\n                    }\n\n                    // Test for active path\n                    if ( activePathParts.indexOf(vm.node._id) > -1 )\n                    {\n                        return;\n                    }\n\n                    vm.collapse();\n                }\n            });\n\n            // Listen for $stateChangeSuccess event\n            $scope.$on('$stateChangeSuccess', function ()\n            {\n                if ( vm.node.state === $state.current.name )\n                {\n                    // If state params are defined, make sure they are\n                    // equal, otherwise do not set the active item\n                    if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                    {\n                        return;\n                    }\n\n                    // Update active item on state change\n                    msNavigationService.setActiveItem(vm.node, $scope);\n\n                    // Collapse everything except the one we're using\n                    $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n                }\n\n                // Expand the parents if we the current\n                // state is a child of the node's state\n                if ( $state.includes(vm.node.state) )\n                {\n                    // If state params are defined, make sure they are\n                    // equal, otherwise do not set the active item\n                    if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                    {\n                        return;\n                    }\n\n                    // Emit the stateMatched\n                    $scope.$emit('msNavigation::stateMatched');\n                }\n            });\n        }\n\n        /**\n         * Toggle collapsed\n         */\n        function toggleCollapsed()\n        {\n            if ( vm.collapsed )\n            {\n                vm.expand();\n            }\n            else\n            {\n                vm.collapse();\n            }\n        }\n\n        /**\n         * Collapse\n         */\n        function collapse()\n        {\n            // Grab the element that we are going to collapse\n            var collapseEl = vm.element.children('ul');\n\n            // Grab the height\n            var height = collapseEl[0].offsetHeight;\n\n            $scope.$evalAsync(function ()\n            {\n                // Set collapsed status\n                vm.collapsed = true;\n\n                // Add collapsing class to the node\n                vm.element.addClass('collapsing');\n\n                // Animate the height\n                $animate.animate(collapseEl,\n                    {\n                        'display': 'block',\n                        'height' : height + 'px'\n                    },\n                    {\n                        'height': '0px'\n                    },\n                    vm.animateHeightClass\n                ).then(\n                    function ()\n                    {\n                        // Clear the inline styles after animation done\n                        collapseEl.css({\n                            'display': '',\n                            'height' : ''\n                        });\n\n                        // Clear collapsing class from the node\n                        vm.element.removeClass('collapsing');\n                    }\n                );\n\n                // Broadcast the collapse event so child items can also be collapsed\n                $scope.$broadcast('msNavigation::collapse');\n            });\n        }\n\n        /**\n         * Expand\n         */\n        function expand()\n        {\n            // Grab the element that we are going to expand\n            var expandEl = vm.element.children('ul');\n\n            // Move the element out of the dom flow and\n            // make it block so we can get its height\n            expandEl.css({\n                'position'  : 'absolute',\n                'visibility': 'hidden',\n                'display'   : 'block',\n                'height'    : 'auto'\n            });\n\n            // Grab the height\n            var height = expandEl[0].offsetHeight;\n\n            // Reset the style modifications\n            expandEl.css({\n                'position'  : '',\n                'visibility': '',\n                'display'   : '',\n                'height'    : ''\n            });\n\n            $scope.$evalAsync(function ()\n            {\n                // Set collapsed status\n                vm.collapsed = false;\n\n                // Add expanding class to the node\n                vm.element.addClass('expanding');\n\n                // Animate the height\n                $animate.animate(expandEl,\n                    {\n                        'display': 'block',\n                        'height' : '0px'\n                    },\n                    {\n                        'height': height + 'px'\n                    },\n                    vm.animateHeightClass\n                ).then(\n                    function ()\n                    {\n                        // Clear the inline styles after animation done\n                        expandEl.css({\n                            'height': ''\n                        });\n\n                        // Clear expanding class from the node\n                        vm.element.removeClass('expanding');\n                    }\n                );\n\n                // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n                // can be collapsed. This is necessary for keeping only one parent expanded at any time\n                $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n            });\n        }\n\n        /**\n         * Return the class\n         *\n         * @returns {*}\n         */\n        function getClass()\n        {\n            return vm.node.class;\n        }\n\n        /**\n         * Check if node should be hidden\n         *\n         * @returns {boolean}\n         */\n        function isHidden()\n        {\n            if ( angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden) )\n            {\n                return vm.node.hidden();\n            }\n\n            return false;\n        }\n    }\n\n    /** @ngInject */\n    function msNavigationNodeDirective()\n    {\n        return {\n            restrict        : 'A',\n            bindToController: {\n                node: '=msNavigationNode'\n            },\n            controller      : 'MsNavigationNodeController as vm',\n            compile         : function (tElement)\n            {\n                tElement.addClass('ms-navigation-node');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\n                {\n                    // Add custom classes\n                    iElement.addClass(MsNavigationNodeCtrl.getClass());\n\n                    // Add group class if it's a group\n                    if ( MsNavigationNodeCtrl.group )\n                    {\n                        iElement.addClass('group');\n                    }\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavigationItemDirective()\n    {\n        return {\n            restrict: 'A',\n            require : '^msNavigationNode',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-navigation-item');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\n                {\n                    // If the item is collapsable...\n                    if ( MsNavigationNodeCtrl.collapsable )\n                    {\n                        iElement.on('click', MsNavigationNodeCtrl.toggleCollapsed);\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.off('click');\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavigationHorizontalDirective(msNavigationService)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {\n                root: '@'\n            },\n            controller : 'MsNavigationController as vm',\n            templateUrl: 'app/core/directives/ms-navigation/templates/horizontal.html',\n            transclude : true,\n            compile    : function (tElement)\n            {\n                tElement.addClass('ms-navigation-horizontal');\n\n                return function postLink(scope)\n                {\n                    // Store the navigation in the service for public access\n                    msNavigationService.setNavigationScope(scope);\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function MsNavigationHorizontalNodeController($scope, $element, $rootScope, $state, msNavigationService)\n    {\n        var vm = this;\n\n        // Data\n        vm.element = $element;\n        vm.node = $scope.node;\n        vm.hasChildren = undefined;\n        vm.group = undefined;\n\n        // Methods\n        vm.getClass = getClass;\n\n        //////////\n\n        init();\n\n        /**\n         * Initialize\n         */\n        function init()\n        {\n            // Setup the initial values\n\n            // Is active\n            vm.isActive = false;\n\n            // Has children?\n            vm.hasChildren = vm.node.children.length > 0;\n\n            // Is group?\n            vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n            // Mark all parents as active if we have a matching state\n            // or the current state is a child of the node's state\n            if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n            {\n                // If state params are defined, make sure they are\n                // equal, otherwise do not set the active item\n                if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                {\n                    return;\n                }\n\n                $scope.$emit('msNavigation::stateMatched');\n\n                // Also store the current active menu item\n                msNavigationService.setActiveItem(vm.node, $scope);\n            }\n\n            $scope.$on('msNavigation::stateMatched', function ()\n            {\n                // Mark as active if has children\n                if ( vm.hasChildren )\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.isActive = true;\n                    });\n                }\n            });\n\n            // Listen for clearActive event\n            $scope.$on('msNavigation::clearActive', function ()\n            {\n                if ( !vm.hasChildren )\n                {\n                    return;\n                }\n\n                var activePathParts = [];\n\n                var activeItem = msNavigationService.getActiveItem();\n                if ( activeItem )\n                {\n                    activePathParts = activeItem.node._path.split('.');\n                }\n\n                // Test for active path\n                if ( activePathParts.indexOf(vm.node._id) > -1 )\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.isActive = true;\n                    });\n                }\n                else\n                {\n                    $scope.$evalAsync(function ()\n                    {\n                        vm.isActive = false;\n                    });\n                }\n\n            });\n\n            // Listen for $stateChangeSuccess event\n            $scope.$on('$stateChangeSuccess', function ()\n            {\n                if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n                {\n                    // If state params are defined, make sure they are\n                    // equal, otherwise do not set the active item\n                    if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n                    {\n                        return;\n                    }\n\n                    // Update active item on state change\n                    msNavigationService.setActiveItem(vm.node, $scope);\n\n                    // Clear all active states except the one we're using\n                    $rootScope.$broadcast('msNavigation::clearActive');\n                }\n            });\n        }\n\n        /**\n         * Return the class\n         *\n         * @returns {*}\n         */\n        function getClass()\n        {\n            return vm.node.class;\n        }\n    }\n\n    /** @ngInject */\n    function msNavigationHorizontalNodeDirective()\n    {\n        return {\n            restrict        : 'A',\n            bindToController: {\n                node: '=msNavigationHorizontalNode'\n            },\n            controller      : 'MsNavigationHorizontalNodeController as vm',\n            compile         : function (tElement)\n            {\n                tElement.addClass('ms-navigation-horizontal-node');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\n                {\n                    // Add custom classes\n                    iElement.addClass(MsNavigationHorizontalNodeCtrl.getClass());\n\n                    // Add group class if it's a group\n                    if ( MsNavigationHorizontalNodeCtrl.group )\n                    {\n                        iElement.addClass('group');\n                    }\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavigationHorizontalItemDirective($mdMedia)\n    {\n        return {\n            restrict: 'A',\n            require : '^msNavigationHorizontalNode',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-navigation-horizontal-item');\n\n                return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\n                {\n                    iElement.on('click', onClick);\n\n                    function onClick()\n                    {\n                        if ( !MsNavigationHorizontalNodeCtrl.hasChildren || $mdMedia('gt-md') )\n                        {\n                            return;\n                        }\n\n                        iElement.toggleClass('expanded');\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.off('click');\n                    });\n                };\n            }\n        };\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .factory('msNavFoldService', msNavFoldService)\n        .directive('msNavIsFolded', msNavIsFoldedDirective)\n        .controller('MsNavController', MsNavController)\n        .directive('msNav', msNavDirective)\n        .directive('msNavTitle', msNavTitleDirective)\n        .directive('msNavButton', msNavButtonDirective)\n        .directive('msNavToggle', msNavToggleDirective);\n\n    /** @ngInject */\n    function msNavFoldService()\n    {\n        var foldable = {};\n\n        var service = {\n            setFoldable    : setFoldable,\n            isNavFoldedOpen: isNavFoldedOpen,\n            toggleFold     : toggleFold,\n            openFolded     : openFolded,\n            closeFolded    : closeFolded\n        };\n\n        return service;\n\n        //////////\n\n        /**\n         * Set the foldable\n         *\n         * @param scope\n         * @param element\n         */\n        function setFoldable(scope, element)\n        {\n            foldable = {\n                'scope'  : scope,\n                'element': element\n            };\n        }\n\n        /**\n         * Is folded open\n         */\n        function isNavFoldedOpen()\n        {\n            return foldable.scope.isNavFoldedOpen();\n        }\n\n        /**\n         * Toggle fold\n         */\n        function toggleFold()\n        {\n            foldable.scope.toggleFold();\n        }\n\n        /**\n         * Open folded navigation\n         */\n        function openFolded()\n        {\n            foldable.scope.openFolded();\n        }\n\n        /**\n         * Close folded navigation\n         */\n        function closeFolded()\n        {\n            foldable.scope.closeFolded();\n        }\n    }\n\n    /** @ngInject */\n    function msNavIsFoldedDirective($document, $rootScope, msNavFoldService)\n    {\n        return {\n            restrict: 'A',\n            link    : function (scope, iElement, iAttrs)\n            {\n                var isFolded = (iAttrs.msNavIsFolded === 'true'),\n                    isFoldedOpen = false,\n                    body = angular.element($document[0].body),\n                    openOverlay = angular.element('<div id=\"ms-nav-fold-open-overlay\"></div>'),\n                    closeOverlay = angular.element('<div id=\"ms-nav-fold-close-overlay\"></div>'),\n                    sidenavEl = iElement.parent();\n\n                // Initialize the service\n                msNavFoldService.setFoldable(scope, iElement, isFolded);\n\n                // Set the fold status for the first time\n                if ( isFolded )\n                {\n                    fold();\n                }\n                else\n                {\n                    unfold();\n                }\n\n                /**\n                 * Is nav folded open\n                 */\n                function isNavFoldedOpen()\n                {\n                    return isFoldedOpen;\n                }\n\n                /**\n                 * Toggle fold\n                 */\n                function toggleFold()\n                {\n                    isFolded = !isFolded;\n\n                    if ( isFolded )\n                    {\n                        fold();\n                    }\n                    else\n                    {\n                        unfold();\n                    }\n                }\n\n                /**\n                 * Fold the navigation\n                 */\n                function fold()\n                {\n                    // Add classes\n                    body.addClass('ms-nav-folded');\n\n                    // Collapse everything and scroll to the top\n                    $rootScope.$broadcast('msNav::forceCollapse');\n                    iElement.scrollTop(0);\n\n                    // Append the openOverlay to the element\n                    sidenavEl.append(openOverlay);\n\n                    // Event listeners\n                    openOverlay.on('mouseenter touchstart', function (event)\n                    {\n                        openFolded(event);\n                        isFoldedOpen = true;\n                    });\n                }\n\n                /**\n                 * Open folded navigation\n                 */\n                function openFolded(event)\n                {\n                    if ( angular.isDefined(event) )\n                    {\n                        event.preventDefault();\n                    }\n\n                    body.addClass('ms-nav-folded-open');\n\n                    // Update the location\n                    $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                    // Remove open overlay\n                    sidenavEl.find(openOverlay).remove();\n\n                    // Append close overlay and bind its events\n                    sidenavEl.parent().append(closeOverlay);\n                    closeOverlay.on('mouseenter touchstart', function (event)\n                    {\n                        closeFolded(event);\n                        isFoldedOpen = false;\n                    });\n                }\n\n                /**\n                 * Close folded navigation\n                 */\n                function closeFolded(event)\n                {\n                    if ( angular.isDefined(event) )\n                    {\n                        event.preventDefault();\n                    }\n\n                    // Collapse everything and scroll to the top\n                    $rootScope.$broadcast('msNav::forceCollapse');\n                    iElement.scrollTop(0);\n\n                    body.removeClass('ms-nav-folded-open');\n\n                    // Remove close overlay\n                    sidenavEl.parent().find(closeOverlay).remove();\n\n                    // Append open overlay and bind its events\n                    sidenavEl.append(openOverlay);\n                    openOverlay.on('mouseenter touchstart', function (event)\n                    {\n                        openFolded(event);\n                        isFoldedOpen = true;\n                    });\n                }\n\n                /**\n                 * Unfold the navigation\n                 */\n                function unfold()\n                {\n                    body.removeClass('ms-nav-folded ms-nav-folded-open');\n\n                    // Update the location\n                    $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                    iElement.off('mouseenter mouseleave');\n                }\n\n                // Expose functions to the scope\n                scope.toggleFold = toggleFold;\n                scope.openFolded = openFolded;\n                scope.closeFolded = closeFolded;\n                scope.isNavFoldedOpen = isNavFoldedOpen;\n\n                // Cleanup\n                scope.$on('$destroy', function ()\n                {\n                    openOverlay.off('mouseenter touchstart');\n                    closeOverlay.off('mouseenter touchstart');\n                    iElement.off('mouseenter mouseleave');\n                });\n            }\n        };\n    }\n\n\n    /** @ngInject */\n    function MsNavController()\n    {\n        var vm = this,\n            disabled = false,\n            toggleItems = [],\n            lockedItems = [];\n\n        // Data\n\n        // Methods\n        vm.isDisabled = isDisabled;\n        vm.enable = enable;\n        vm.disable = disable;\n        vm.setToggleItem = setToggleItem;\n        vm.getLockedItems = getLockedItems;\n        vm.setLockedItem = setLockedItem;\n        vm.clearLockedItems = clearLockedItems;\n\n        //////////\n\n        /**\n         * Is navigation disabled\n         *\n         * @returns {boolean}\n         */\n        function isDisabled()\n        {\n            return disabled;\n        }\n\n        /**\n         * Disable the navigation\n         */\n        function disable()\n        {\n            disabled = true;\n        }\n\n        /**\n         * Enable the navigation\n         */\n        function enable()\n        {\n            disabled = false;\n        }\n\n        /**\n         * Set toggle item\n         *\n         * @param element\n         * @param scope\n         */\n        function setToggleItem(element, scope)\n        {\n            toggleItems.push({\n                'element': element,\n                'scope'  : scope\n            });\n        }\n\n        /**\n         * Get locked items\n         *\n         * @returns {Array}\n         */\n        function getLockedItems()\n        {\n            return lockedItems;\n        }\n\n        /**\n         * Set locked item\n         *\n         * @param element\n         * @param scope\n         */\n        function setLockedItem(element, scope)\n        {\n            lockedItems.push({\n                'element': element,\n                'scope'  : scope\n            });\n        }\n\n        /**\n         * Clear locked items list\n         */\n        function clearLockedItems()\n        {\n            lockedItems = [];\n        }\n    }\n\n    /** @ngInject */\n    function msNavDirective($rootScope, $mdComponentRegistry, msNavFoldService)\n    {\n        return {\n            restrict  : 'E',\n            scope     : {},\n            controller: 'MsNavController',\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-nav');\n\n                return function postLink(scope)\n                {\n                    // Update toggle status according to the ui-router current state\n                    $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                    // Update toggles on state changes\n                    var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\n                    {\n                        $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n                        // Close navigation sidenav on stateChangeSuccess\n                        $mdComponentRegistry.when('navigation').then(function (navigation)\n                        {\n                            navigation.close();\n\n                            if ( msNavFoldService.isNavFoldedOpen() )\n                            {\n                                msNavFoldService.closeFolded();\n                            }\n                        });\n                    });\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        stateChangeSuccessEvent();\n                    });\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavTitleDirective()\n    {\n        return {\n            restrict: 'A',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-nav-title');\n\n                return function postLink()\n                {\n\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavButtonDirective()\n    {\n        return {\n            restrict: 'AE',\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-nav-button');\n\n                return function postLink()\n                {\n\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msNavToggleDirective($rootScope, $q, $animate, $state)\n    {\n        return {\n            restrict: 'A',\n            require : '^msNav',\n            scope   : true,\n            compile : function (tElement, tAttrs)\n            {\n                tElement.addClass('ms-nav-toggle');\n\n                // Add collapsed attr\n                if ( angular.isUndefined(tAttrs.collapsed) )\n                {\n                    tAttrs.collapsed = true;\n                }\n\n                tElement.attr('collapsed', tAttrs.collapsed);\n\n                return function postLink(scope, iElement, iAttrs, MsNavCtrl)\n                {\n                    var classes = {\n                        expanded         : 'expanded',\n                        expandAnimation  : 'expand-animation',\n                        collapseAnimation: 'collapse-animation'\n                    };\n\n                    // Store all related states\n                    var links = iElement.find('a');\n                    var states = [];\n                    var regExp = /\\(.*\\)/g;\n\n                    angular.forEach(links, function (link)\n                    {\n                        var state = angular.element(link).attr('ui-sref');\n\n                        if ( angular.isUndefined(state) )\n                        {\n                            return;\n                        }\n\n                        // Remove any parameter definition from the state name before storing it\n                        state = state.replace(regExp, '');\n\n                        states.push(state);\n                    });\n\n                    // Store toggle-able element and its scope in the main nav controller\n                    MsNavCtrl.setToggleItem(iElement, scope);\n\n                    // Click handler\n                    iElement.children('.ms-nav-button').on('click', toggle);\n\n                    // Toggle function\n                    function toggle()\n                    {\n                        // If navigation is disabled, do nothing...\n                        if ( MsNavCtrl.isDisabled() )\n                        {\n                            return;\n                        }\n\n                        // Disable the entire navigation to prevent spamming\n                        MsNavCtrl.disable();\n\n                        if ( isCollapsed() )\n                        {\n                            // Clear the locked items list\n                            MsNavCtrl.clearLockedItems();\n\n                            // Emit pushToLockedList event\n                            scope.$emit('msNav::pushToLockedList');\n\n                            // Collapse everything but locked items\n                            $rootScope.$broadcast('msNav::collapse');\n\n                            // Expand and then...\n                            expand().then(function ()\n                            {\n                                // Enable the entire navigation after animations completed\n                                MsNavCtrl.enable();\n                            });\n                        }\n                        else\n                        {\n                            // Collapse with all children\n                            scope.$broadcast('msNav::forceCollapse');\n                        }\n                    }\n\n                    // Cleanup\n                    scope.$on('$destroy', function ()\n                    {\n                        iElement.children('.ms-nav-button').off('click');\n                    });\n\n                    /*---------------------*/\n                    /* Scope Events        */\n                    /*---------------------*/\n\n                    /**\n                     * Collapse everything but locked items\n                     */\n                    scope.$on('msNav::collapse', function ()\n                    {\n                        // Only collapse toggles that are not locked\n                        var lockedItems = MsNavCtrl.getLockedItems();\n                        var locked = false;\n\n                        angular.forEach(lockedItems, function (lockedItem)\n                        {\n                            if ( angular.equals(lockedItem.scope, scope) )\n                            {\n                                locked = true;\n                            }\n                        });\n\n                        if ( locked )\n                        {\n                            return;\n                        }\n\n                        // Collapse and then...\n                        collapse().then(function ()\n                        {\n                            // Enable the entire navigation after animations completed\n                            MsNavCtrl.enable();\n                        });\n                    });\n\n                    /**\n                     * Collapse everything\n                     */\n                    scope.$on('msNav::forceCollapse', function ()\n                    {\n                        // Collapse and then...\n                        collapse().then(function ()\n                        {\n                            // Enable the entire navigation after animations completed\n                            MsNavCtrl.enable();\n                        });\n                    });\n\n                    /**\n                     * Expand toggles that match with the current states\n                     */\n                    scope.$on('msNav::expandMatchingToggles', function ()\n                    {\n                        var currentState = $state.current.name;\n                        var shouldExpand = false;\n\n                        angular.forEach(states, function (state)\n                        {\n                            if ( currentState === state )\n                            {\n                                shouldExpand = true;\n                            }\n                        });\n\n                        if ( shouldExpand )\n                        {\n                            expand();\n                        }\n                        else\n                        {\n                            collapse();\n                        }\n                    });\n\n                    /**\n                     * Add toggle to the locked list\n                     */\n                    scope.$on('msNav::pushToLockedList', function ()\n                    {\n                        // Set expanded item on main nav controller\n                        MsNavCtrl.setLockedItem(iElement, scope);\n                    });\n\n                    /*---------------------*/\n                    /* Internal functions  */\n                    /*---------------------*/\n\n                    /**\n                     * Is element collapsed\n                     *\n                     * @returns {bool}\n                     */\n                    function isCollapsed()\n                    {\n                        return iElement.attr('collapsed') === 'true';\n                    }\n\n                    /**\n                     * Is element expanded\n                     *\n                     * @returns {bool}\n                     */\n                    function isExpanded()\n                    {\n                        return !isCollapsed();\n                    }\n\n                    /**\n                     * Expand the toggle\n                     *\n                     * @returns $promise\n                     */\n                    function expand()\n                    {\n                        // Create a new deferred object\n                        var deferred = $q.defer();\n\n                        // If the menu item is already expanded, do nothing..\n                        if ( isExpanded() )\n                        {\n                            // Reject the deferred object\n                            deferred.reject({'error': true});\n\n                            // Return the promise\n                            return deferred.promise;\n                        }\n\n                        // Set element attr\n                        iElement.attr('collapsed', false);\n\n                        // Grab the element to expand\n                        var elementToExpand = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n                        // Move the element out of the dom flow and\n                        // make it block so we can get its height\n                        elementToExpand.css({\n                            'position'  : 'absolute',\n                            'visibility': 'hidden',\n                            'display'   : 'block',\n                            'height'    : 'auto'\n                        });\n\n                        // Grab the height\n                        var height = elementToExpand[0].offsetHeight;\n\n                        // Reset the style modifications\n                        elementToExpand.css({\n                            'position'  : '',\n                            'visibility': '',\n                            'display'   : '',\n                            'height'    : ''\n                        });\n\n                        // Animate the height\n                        scope.$evalAsync(function ()\n                        {\n                            $animate.animate(elementToExpand,\n                                {\n                                    'display': 'block',\n                                    'height' : '0px'\n                                },\n                                {\n                                    'height': height + 'px'\n                                },\n                                classes.expandAnimation\n                            ).then(\n                                function ()\n                                {\n                                    // Add expanded class\n                                    elementToExpand.addClass(classes.expanded);\n\n                                    // Clear the inline styles after animation done\n                                    elementToExpand.css({'height': ''});\n\n                                    // Resolve the deferred object\n                                    deferred.resolve({'success': true});\n                                }\n                            );\n                        });\n\n                        // Return the promise\n                        return deferred.promise;\n                    }\n\n                    /**\n                     * Collapse the toggle\n                     *\n                     * @returns $promise\n                     */\n                    function collapse()\n                    {\n                        // Create a new deferred object\n                        var deferred = $q.defer();\n\n                        // If the menu item is already collapsed, do nothing..\n                        if ( isCollapsed() )\n                        {\n                            // Reject the deferred object\n                            deferred.reject({'error': true});\n\n                            // Return the promise\n                            return deferred.promise;\n                        }\n\n                        // Set element attr\n                        iElement.attr('collapsed', true);\n\n                        // Grab the element to collapse\n                        var elementToCollapse = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n                        // Grab the height\n                        var height = elementToCollapse[0].offsetHeight;\n\n                        // Animate the height\n                        scope.$evalAsync(function ()\n                        {\n                            $animate.animate(elementToCollapse,\n                                {\n                                    'height': height + 'px'\n                                },\n                                {\n                                    'height': '0px'\n                                },\n                                classes.collapseAnimation\n                            ).then(\n                                function ()\n                                {\n                                    // Remove expanded class\n                                    elementToCollapse.removeClass(classes.expanded);\n\n                                    // Clear the inline styles after animation done\n                                    elementToCollapse.css({\n                                        'display': '',\n                                        'height' : ''\n                                    });\n\n                                    // Resolve the deferred object\n                                    deferred.resolve({'success': true});\n                                }\n                            );\n                        });\n\n                        // Return the promise\n                        return deferred.promise;\n                    }\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('msMasonryController', msMasonryController)\n        .directive('msMasonry', msMasonry)\n        .directive('msMasonryItem', msMasonryItem);\n\n    /** @ngInject */\n    function msMasonryController($scope, $window, $mdMedia, $timeout)\n    {\n        var vm = this,\n            defaultOpts = {\n                columnCount     : 5,\n                respectItemOrder: false,\n                reLayoutDebounce: 400,\n                responsive      : {\n                    md: 3,\n                    sm: 2,\n                    xs: 1\n                }\n            },\n            reLayoutTimeout = true;\n\n        vm.options = null;\n        vm.container = [];\n        vm.containerPos = '';\n        vm.columnWidth = '';\n        vm.items = [];\n\n        // Methods\n        vm.reLayout = reLayout;\n        vm.initialize = initialize;\n        vm.waitImagesLoaded = waitImagesLoaded;\n\n        function initialize()\n        {\n            vm.options = !vm.options ? defaultOpts : angular.extend(defaultOpts, vm.options);\n\n\n            watchContainerResize();\n        }\n\n        $scope.$on('msMasonry:relayout', function ()\n        {\n            reLayout();\n        });\n\n        function waitImagesLoaded(element, callback)\n        {\n            if ( typeof imagesLoaded !== 'undefined' )\n            {\n                var imgLoad = $window.imagesLoaded(element);\n\n                imgLoad.on('done', function ()\n                {\n                    callback();\n                });\n            }\n            else\n            {\n                callback();\n            }\n        }\n\n        function watchContainerResize()\n        {\n            $scope.$watch(\n                function ()\n                {\n                    return vm.container.width();\n                },\n                function (newValue, oldValue)\n                {\n                    if ( newValue !== oldValue )\n                    {\n                        reLayout();\n                    }\n                }\n            );\n        }\n\n        function reLayout()\n        {\n            // Debounce for relayout\n            if ( reLayoutTimeout )\n            {\n                $timeout.cancel(reLayoutTimeout);\n            }\n\n            reLayoutTimeout = $timeout(function ()\n            {\n                start();\n\n                $scope.$broadcast('msMasonry:relayoutFinished');\n\n            }, vm.options.reLayoutDebounce);\n\n            // Start relayout\n            function start()\n            {\n                vm.containerPos = vm.container[0].getBoundingClientRect();\n\n                updateColumnOptions();\n\n                $scope.$broadcast('msMasonry:relayoutStarted');\n\n                vm.items = vm.container.find('ms-masonry-item');\n\n                //initialize lastRowBottomArr\n                var referenceArr = Array.apply(null, new Array(vm.columnCount)).map(function ()\n                {\n                    return 0;\n                });\n\n                // set item positions\n                for ( var i = 0; i < vm.items.length; i++ )\n                {\n                    var item = vm.items[i],\n                        xPos, yPos, column, refTop;\n\n                    item = angular.element(item);\n\n                    if ( item.scope() )\n                    {\n                        item.scope().$broadcast('msMasonryItem:startReLayout');\n                    }\n\n                    item.css({'width': vm.columnWidth});\n\n                    if ( vm.options.respectItemOrder )\n                    {\n                        column = i % vm.columnCount;\n                        refTop = referenceArr[column];\n                    }\n                    else\n                    {\n                        refTop = Math.min.apply(Math, referenceArr);\n                        column = referenceArr.indexOf(refTop);\n                    }\n\n                    referenceArr[column] = refTop + item[0].getBoundingClientRect().height;\n\n                    xPos = Math.round(column * vm.columnWidth);\n                    yPos = refTop;\n\n                    item.css({'transform': 'translate3d(' + xPos + 'px,' + yPos + 'px,0px)'});\n                    item.addClass('placed');\n\n                    if ( item.scope() )\n                    {\n                        item.scope().$broadcast('msMasonryItem:finishReLayout');\n                    }\n                }\n            }\n        }\n\n        function updateColumnOptions()\n        {\n            vm.columnCount = vm.options.columnCount;\n\n            if ( $mdMedia('gt-md') )\n            {\n                vm.columnCount = vm.options.columnCount;\n            }\n            else if ( $mdMedia('md') )\n            {\n                vm.columnCount = (vm.columnCount > vm.options.responsive.md ? vm.options.responsive.md : vm.columnCount);\n            }\n            else if ( $mdMedia('sm') )\n            {\n                vm.columnCount = (vm.columnCount > vm.options.responsive.sm ? vm.options.responsive.sm : vm.columnCount);\n            }\n            else\n            {\n                vm.columnCount = vm.options.responsive.xs;\n            }\n\n            vm.columnWidth = vm.containerPos.width / vm.columnCount;\n\n        }\n    }\n\n    /** @ngInject */\n    function msMasonry($timeout)\n    {\n        return {\n            restrict  : 'AEC',\n            controller: 'msMasonryController',\n            compile   : compile\n        };\n        function compile(element, attributes)\n        {\n            return {\n                pre : function preLink(scope, iElement, iAttrs, controller)\n                {\n                    controller.options = angular.fromJson(attributes.options || '{}');\n                    controller.container = element;\n                },\n                post: function postLink(scope, iElement, iAttrs, controller)\n                {\n                    $timeout(function ()\n                    {\n                        controller.initialize();\n                    });\n                }\n            };\n        }\n    }\n\n    /** @ngInject */\n    function msMasonryItem()\n    {\n        return {\n            restrict: 'AEC',\n            require : '^msMasonry',\n            priority: 1,\n            link    : link\n        };\n\n        function link(scope, element, attributes, controller)\n        {\n            controller.waitImagesLoaded(element, function ()\n            {\n                controller.reLayout();\n\n            });\n\n            scope.$on('msMasonryItem:finishReLayout', function ()\n            {\n                scope.$watch(function ()\n                {\n                    return element.height();\n                }, function (newVal, oldVal)\n                {\n                    if ( newVal !== oldVal )\n                    {\n                        controller.reLayout();\n                    }\n                });\n            });\n\n            element.on('$destroy', function ()\n            {\n                controller.reLayout();\n            });\n        }\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('msMaterialColorPickerController', msMaterialColorPickerController)\n        .directive('msMaterialColorPicker', msMaterialColorPicker);\n\n    /** @ngInject */\n    function msMaterialColorPickerController($scope, $mdColorPalette, $mdMenu, fuseGenerator)\n    {\n        var vm = this;\n        vm.palettes = $mdColorPalette; // Material Color Palette\n        vm.selectedPalette = false;\n        vm.selectedHues = false;\n        $scope.$selectedColor = {};\n\n        // Methods\n        vm.activateHueSelection = activateHueSelection;\n        vm.selectColor = selectColor;\n        vm.removeColor = removeColor;\n\n        /**\n         * Initialize / Watch model changes\n         */\n        $scope.$watch('ngModel', setSelectedColor);\n\n        /**\n         * Activate Hue Selection\n         * @param palette\n         * @param hues\n         */\n        function activateHueSelection(palette, hues)\n        {\n            vm.selectedPalette = palette;\n            vm.selectedHues = hues;\n        }\n\n        /**\n         * Select Color\n         * @type {selectColor}\n         */\n        function selectColor(palette, hue)\n        {\n            // Update Selected Color\n            updateSelectedColor(palette, hue);\n\n            // Update Model Value\n            updateModel();\n\n            // Hide The picker\n            $mdMenu.hide();\n        }\n\n        function removeColor()\n        {\n            vm.selectedColor = {\n                palette: '',\n                hue    : '',\n                class  : ''\n            };\n\n            activateHueSelection(false, false);\n\n            updateModel();\n        }\n\n        /**\n         * Set SelectedColor by model type\n         */\n        function setSelectedColor()\n        {\n            if ( !vm.modelCtrl.$viewValue || vm.modelCtrl.$viewValue === '' )\n            {\n                removeColor();\n                return;\n            }\n\n            var palette, hue;\n\n            // If ModelType Class\n            if ( vm.msModelType === 'class' )\n            {\n                var color = vm.modelCtrl.$viewValue.split('-');\n                if ( color.length >= 5 )\n                {\n                    palette = color[1] + '-' + color[2];\n                    hue = color[3];\n                }\n                else\n                {\n                    palette = color[1];\n                    hue = color[2];\n                }\n            }\n\n            // If ModelType Object\n            else if ( vm.msModelType === 'obj' )\n            {\n                palette = vm.modelCtrl.$viewValue.palette;\n                hue = vm.modelCtrl.$viewValue.hue || 500;\n            }\n\n            // Update Selected Color\n            updateSelectedColor(palette, hue);\n        }\n\n        /**\n         * Update Selected Color\n         * @param palette\n         * @param hue\n         */\n        function updateSelectedColor(palette, hue)\n        {\n            vm.selectedColor = {\n                palette     : palette,\n                hue         : hue,\n                class       : 'md-' + palette + '-' + hue + '-bg',\n                bgColorValue: fuseGenerator.rgba(vm.palettes[palette][hue].value),\n                fgColorValue: fuseGenerator.rgba(vm.palettes[palette][hue].contrast)\n            };\n\n            // If Model object not Equals the selectedColor update it\n            // it can be happen when the model only have pallete and hue values\n            if ( vm.msModelType === 'obj' && !angular.equals(vm.selectedColor, vm.modelCtrl.$viewValue) )\n            {\n                // Update Model Value\n                updateModel();\n            }\n\n            activateHueSelection(palette, vm.palettes[palette]);\n\n            $scope.$selectedColor = vm.selectedColor;\n        }\n\n        /**\n         * Update Model Value by model type\n         */\n        function updateModel()\n        {\n            if ( vm.msModelType === 'class' )\n            {\n                vm.modelCtrl.$setViewValue(vm.selectedColor.class);\n            }\n            else if ( vm.msModelType === 'obj' )\n            {\n                vm.modelCtrl.$setViewValue(vm.selectedColor);\n            }\n        }\n    }\n\n    /** @ngInject */\n    function msMaterialColorPicker()\n    {\n        return {\n            require    : ['msMaterialColorPicker', 'ngModel'],\n            restrict   : 'E',\n            scope      : {\n                ngModel    : '=',\n                msModelType: '@?'\n            },\n            controller : 'msMaterialColorPickerController as vm',\n            transclude : true,\n            templateUrl: 'app/core/directives/ms-material-color-picker/ms-material-color-picker.html',\n            link       : function (scope, element, attrs, controllers, transclude)\n            {\n                var ctrl = controllers[0];\n\n                /**\n                 *  Pass model controller to directive controller\n                 */\n                ctrl.modelCtrl = controllers[1];\n\n                /**\n                 * ModelType: 'obj', 'class'(default)\n                 * @type {string|string}\n                 */\n                ctrl.msModelType = scope.msModelType || 'class';\n\n                transclude(scope, function (clone)\n                {\n                    clone = clone.filter(function (i, el)\n                    {\n                        return ( el.nodeType === 1 ) ? true : false;\n                    });\n\n                    if ( clone.length )\n                    {\n                        element.find('ms-color-picker-button').replaceWith(clone);\n                    }\n                });\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msInfoBar', msInfoBarDirective);\n\n    /** @ngInject */\n    function msInfoBarDirective($document)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {},\n            transclude : true,\n            templateUrl: 'app/core/directives/ms-info-bar/ms-info-bar.html',\n            link       : function (scope, iElement)\n            {\n                var body = $document.find('body'),\n                    bodyClass = 'ms-info-bar-active';\n\n                // Add body class\n                body.addClass(bodyClass);\n\n                /**\n                 * Remove the info bar\n                 */\n                function removeInfoBar()\n                {\n                    body.removeClass(bodyClass);\n                    iElement.remove();\n                    scope.$destroy();\n                }\n\n                // Expose functions\n                scope.removeInfoBar = removeInfoBar;\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsFormWizardController', MsFormWizardController)\n        .directive('msFormWizard', msFormWizardDirective)\n        .directive('msFormWizardForm', msFormWizardFormDirective)\n    ;\n\n    /** @ngInject */\n    function MsFormWizardController()\n    {\n        var vm = this;\n\n        // Data\n        vm.forms = [];\n        vm.selectedIndex = 0;\n\n        // Methods\n        vm.registerForm = registerForm;\n\n        vm.previousStep = previousStep;\n        vm.nextStep = nextStep;\n        vm.firstStep = firstStep;\n        vm.lastStep = lastStep;\n\n        vm.totalSteps = totalSteps;\n        vm.isFirstStep = isFirstStep;\n        vm.isLastStep = isLastStep;\n\n        vm.currentStepInvalid = currentStepInvalid;\n        vm.previousStepInvalid = previousStepInvalid;\n        vm.formsIncomplete = formsIncomplete;\n        vm.resetForm = resetForm;\n\n        //////////\n\n        /**\n         * Register form\n         *\n         * @param form\n         */\n        function registerForm(form)\n        {\n            vm.forms.push(form);\n        }\n\n        /**\n         * Go to previous step\n         */\n        function previousStep()\n        {\n            if ( isFirstStep() )\n            {\n                return;\n            }\n\n            vm.selectedIndex--;\n        }\n\n        /**\n         * Go to next step\n         */\n        function nextStep()\n        {\n            if ( isLastStep() )\n            {\n                return;\n            }\n\n            vm.selectedIndex++;\n        }\n\n        /**\n         * Go to first step\n         */\n        function firstStep()\n        {\n            vm.selectedIndex = 0;\n        }\n\n        /**\n         * Go to last step\n         */\n        function lastStep()\n        {\n            vm.selectedIndex = totalSteps() - 1;\n        }\n\n        /**\n         * Return total steps\n         *\n         * @returns {int}\n         */\n        function totalSteps()\n        {\n            return vm.forms.length;\n        }\n\n        /**\n         * Is first step?\n         *\n         * @returns {boolean}\n         */\n        function isFirstStep()\n        {\n            return vm.selectedIndex === 0;\n        }\n\n        /**\n         * Is last step?\n         *\n         * @returns {boolean}\n         */\n        function isLastStep()\n        {\n            return vm.selectedIndex === totalSteps() - 1;\n        }\n\n        /**\n         * Is current step invalid?\n         *\n         * @returns {boolean}\n         */\n        function currentStepInvalid()\n        {\n            return angular.isDefined(vm.forms[vm.selectedIndex]) && vm.forms[vm.selectedIndex].$invalid;\n        }\n\n        /**\n         * Is previous step invalid?\n         *\n         * @returns {boolean}\n         */\n        function previousStepInvalid()\n        {\n            return vm.selectedIndex > 0 && angular.isDefined(vm.forms[vm.selectedIndex - 1]) && vm.forms[vm.selectedIndex - 1].$invalid;\n        }\n\n        /**\n         * Check if there is any incomplete forms\n         *\n         * @returns {boolean}\n         */\n        function formsIncomplete()\n        {\n            for ( var x = 0; x < vm.forms.length; x++ )\n            {\n                if ( vm.forms[x].$invalid )\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Reset form\n         */\n        function resetForm()\n        {\n            // Go back to the first step\n            vm.selectedIndex = 0;\n\n            // Make sure all the forms are back in the $pristine & $untouched status\n            for ( var x = 0; x < vm.forms.length; x++ )\n            {\n                vm.forms[x].$setPristine();\n                vm.forms[x].$setUntouched();\n            }\n        }\n    }\n\n    /** @ngInject */\n    function msFormWizardDirective()\n    {\n        return {\n            restrict  : 'E',\n            scope     : true,\n            controller: 'MsFormWizardController as msWizard',\n            compile   : function (tElement)\n            {\n                tElement.addClass('ms-form-wizard');\n\n                return function postLink()\n                {\n\n                };\n            }\n        };\n    }\n\n    /** @ngInject */\n    function msFormWizardFormDirective()\n    {\n        return {\n            restrict: 'A',\n            require : ['form', '^msFormWizard'],\n            compile : function (tElement)\n            {\n                tElement.addClass('ms-form-wizard-form');\n\n                return function postLink(scope, iElement, iAttrs, ctrls)\n                {\n                    var formCtrl = ctrls[0],\n                        MsFormWizardCtrl = ctrls[1];\n\n                    MsFormWizardCtrl.registerForm(formCtrl);\n                };\n            }\n        };\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .provider('msDatepickerFixConfig', msDatepickerFixConfigProvider)\n        .directive('msDatepickerFix', msDatepickerFix);\n\n    /** @ngInject */\n    function msDatepickerFixConfigProvider()\n    {\n        var service = this;\n\n        // Default configuration\n        var defaultConfig = {\n            // To view\n            formatter: function (val)\n            {\n                if ( !val )\n                {\n                    return '';\n                }\n\n                return val === '' ? val : new Date(val);\n            },\n            // To model\n            parser   : function (val)\n            {\n                if ( !val )\n                {\n                    return '';\n                }\n\n                return moment(val).add(moment(val).utcOffset(), 'm').toDate();\n            }\n        };\n\n        // Methods\n        service.config = config;\n\n        //////////\n\n        /**\n         * Extend default configuration with the given one\n         *\n         * @param configuration\n         */\n        function config(configuration)\n        {\n            defaultConfig = angular.extend({}, defaultConfig, configuration);\n        }\n\n        /**\n         * Service\n         */\n        service.$get = function ()\n        {\n            return defaultConfig;\n        };\n    }\n\n    /** @ngInject */\n    function msDatepickerFix(msDatepickerFixConfig)\n    {\n        return {\n            require : 'ngModel',\n            priority: 1,\n            link    : function (scope, elem, attrs, ngModel)\n            {\n                ngModel.$formatters.push(msDatepickerFixConfig.formatter); // to view\n                ngModel.$parsers.push(msDatepickerFixConfig.parser); // to model\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('msCard', msCardDirective);\n\n    /** @ngInject */\n    function msCardDirective()\n    {\n        return {\n            restrict: 'E',\n            scope   : {\n                templatePath: '=template',\n                card        : '=ngModel',\n                vm          : '=viewModel'\n            },\n            template: '<div class=\"ms-card-content-wrapper\" ng-include=\"templatePath\" onload=\"cardTemplateLoaded()\"></div>',\n            compile : function (tElement)\n            {\n                // Add class\n                tElement.addClass('ms-card');\n\n                return function postLink(scope, iElement)\n                {\n                    // Methods\n                    scope.cardTemplateLoaded = cardTemplateLoaded;\n\n                    //////////\n\n                    /**\n                     * Emit cardTemplateLoaded event\n                     */\n                    function cardTemplateLoaded()\n                    {\n                        scope.$emit('msCard::cardTemplateLoaded', iElement);\n                    }\n                };\n            }\n        };\n    }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.workday', [])\n    .service('WorkdayService', WorkdayService);\n\n  /** @ngInject */\n  function WorkdayService($q, $rootScope, $interval, api, Session, WORKDAY_STATUSES, Workday) {\n\n    var service = this;\n\n    service.status = WORKDAY_STATUSES.NOT_STARTED;\n\n    service.start = function (notes) {\n      api.account.workday.save({option: 'start', notes: notes}, function (response, callback, status) {\n        angular.extend(Session.user.workday, new Workday(response));\n      });\n    };\n\n    service.pause = function (notes) {\n      api.account.workday.save({option: 'pause', notes: notes}, function (response, callback, status) {\n        angular.extend(Session.user.workday, new Workday(response));\n      });\n    };\n\n    service.finish = function (notes) {\n      api.account.workday.save({option: 'finish', notes: notes}, function (response, callback, status) {\n        angular.extend(Session.user.workday, new Workday(response));\n      });\n    };\n\n  }\n\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.version', [])\n    .service('Version', version);\n\n  /** @ngInject */\n  function version() {\n\n    var service = this;\n\n    service.major = 1;\n    service.minor = 12;\n    service.build = 2;\n\n    service.getVersion = function () {\n      return [service.major, service.minor, service.build].join('.');\n    };\n\n    service.isGrater = function (major, minor, build) {\n      if (service.major > major) {\n        return true;\n      }\n      if (service.minor > minor) {\n        return true;\n      }\n      if (service.true > build) {\n        return true;\n      }\n      return false;\n    };\n  }\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.utils', ['ng'])\n    .service('Utils', utils);\n\n  /** @ngInject */\n  function utils(\n    $filter\n  ) {\n\n    var service = this;\n\n    service.twoDecimals = function(num) {\n      if (isNaN(num)) {\n        return '0.00';\n      }\n\n      var precision = 2;\n      var fixed = (+(Math.round(+(num + 'e' + precision)) + 'e' + -precision)).toFixed(precision);\n\n      return isNaN(fixed) ? '0.00' : fixed;\n    };\n\n    service.roundPrice = function(number, precision) {\n      precision = typeof precision !== 'undefined' ? precision : 2;\n\n      if (typeof number === 'string') {\n        number = parseFloat(number);\n      }\n\n      if (typeof number !== 'number' || isNaN(number) || !isFinite(number)) {\n        return 0;\n      }\n\n      var isNegative = number < 0;\n      number = Math.abs(number);\n\n      var rounded = parseFloat(((number) + parseFloat('1e-7')).toFixed(precision));\n\n      return isNegative ? -rounded : rounded;\n    };\n\n    service.toUnixTimestamp = function(date) {\n      if (!date) {\n        return date;\n      }\n\n      return Math.round(date.getTime() / 1000);\n    };\n\n    /**\n     * Returns the given Date into dd-MM-yyyy HH:mm:ss string date.\n     * @param date\n     * @returns {string}\n     */\n    service.dateToLocalString = function(date) {\n      if (date instanceof Date) {\n        var year = date.getFullYear();\n        var month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1);\n        var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();\n        var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();\n        var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();\n        var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();\n\n        return day + '/' + month + '/' + year + ', ' + hours + ':' + minutes + ':' + seconds;\n      } else {\n        throw new TypeError('Argument must be a Date');\n      }\n    };\n\n    /**\n     * Returns the given datetime into YYYY-mm-dd string date. If applyOffset is true, the date is transform in UTC\n     * @param datetime\n     * @param applyOffset\n     * @returns {string}\n     */\n    service.dateToDateString = function(datetime, applyOffset) {\n      if (!(datetime instanceof Date)) {\n        return;\n      }\n\n      if (applyOffset) {\n        var tempDate = new Date(datetime.getTime() - datetime.getTimezoneOffset() * 60 * 1000);\n        return tempDate.toISOString().substring(0, 10);\n      }\n      return datetime.toISOString().substring(0, 10);\n    };\n\n    // TODO: This function belongs to PosOrder class (not implemented yet)\n    service.posOrderPendingAmount = function(posOrder) {\n      var pending = posOrder.total; // required by the pending field at the end of the statement\n      posOrder.pos_order_payment_methods.forEach(function(posOrderPaymentMethod) {\n        pending -= posOrderPaymentMethod.given_amount;\n      });\n\n      return pending > 0 ? pending : null;\n    };\n\n    service.sanitizeTags = function(dirty, allowedTags) {\n      // Ex.: Match all this labels that are not html, div or a (nor its closures)\n      //  <(?!([/]*html|[/]*div|[/]*a))[^>]*>\n\n      const closing_patter = '[/]*'; // in order to consider tags closures\n      const selector_begin = '<(?!('; // in order to match the begining of any tag\n      const selector_end = '))[^>]*>'; // in order to match the end of any tag\n\n      // building the regex\n      var pattern = selector_begin;\n      for (var i = 0; allowedTags && i < allowedTags.length; i++) {\n        pattern += (i > 0 ? '|' : '') +\n          closing_patter +\n          allowedTags[i];\n      }\n\n      pattern += selector_end; // closing the regex statement\n      const regex = new RegExp(pattern, 'g'); // 'g' enables the regex globally\n      const clean = dirty.replace(regex, '');\n      return clean;\n    };\n\n    service.purgeAttributes = function(dirty, allowedAttributes) {\n      // Ex.: the 'href' & 'id' attributes should be deleted\n      // <p>Short description<span href=\"hello-world\" style=\"color: rgba(0, 0, 0, 0.54);background-color: rgb(255, 255, 255);float: none;\" id='someID'>:</span><br></p>\n      const regex = RegExp('[a-zA-Z\\d-]*=[a-zA-Z\\d-]*', 'g');\n\n      var result;\n      var clean = dirty;\n      var padding = 0; // when some text is removed, the index provided by the regex is not the same in the 'clean' buffer\n\n      while ((result = regex.exec(dirty)) !== null) {\n        const index = result.index;\n        const subject = result[0];\n\n        const substr = subject.substr(0, subject.length - 1);\n        if (!allowedAttributes || !allowedAttributes.length || !allowedAttributes.includes(substr)) {\n          // if the label contains an unallowed attribute\n          const limit = dirty[index + subject.length]; // by sure the attribute body will be closed by the same character\n          const len = dirty.substring(index + subject.length + 1).indexOf(limit) + 2; // +2 to include both limits\n\n          clean = clean.slice(0, index - padding) +\n            clean.slice(index + subject.length + len - padding);\n\n          padding += subject.length + len; // add how many characters has been deleted\n        }\n      }\n\n      return clean;\n    };\n\n    service.getTagName = function(statement) {\n      var pattern = '[\\\\w-]+';\n      var regex = RegExp(pattern, 'g');\n\n      var result = regex.exec(statement);\n      if (result && result[0]) {\n        return result[0];\n      }\n\n      return '';\n    };\n\n    service.sanitizeAttributes = function(dirty, allowedAttributes) {\n      // Regex builder\n      const pattern = '<(?!/)[^>]*>';\n      const regex = RegExp(pattern, 'g');\n\n      // Scanning attributes\n      var result;\n      var clean = dirty;\n      var padding = 0; // released ammount of characters\n\n      while ((result = regex.exec(dirty)) !== null) {\n        const index = result.index;\n        const subject = result[0];\n        const label = service.getTagName(subject);\n\n        // just in case the current label has some rules to be applied; otherwise no attribute\n        // is allowed, so the tag must be empty\n        const rules = allowedAttributes ? allowedAttributes[label] :\n          {/* no attributes allowed */ };\n\n        const healthy = service.purgeAttributes(subject, rules);\n        clean = clean.slice(0, index - padding) +\n          healthy +\n          clean.slice(index + subject.length - padding);\n\n        padding += subject.length - healthy.length; // the diference between the input and the output\n      }\n\n      return clean;\n    };\n\n    service.purgeComments = function(dirty) {\n      const pattern = '<!--[^>]*-->'; // finds all tag openings (ignores all closures)\n      const regex = RegExp(pattern, 'g');\n\n      return dirty.replace(regex, '');\n    };\n\n    service.sanitizeHTML = function(dirty, rules) {\n      var healthy = service.purgeComments(dirty);\n      healthy = service.sanitizeTags(healthy, rules.allowedTags);\n      healthy = service.sanitizeAttributes(healthy, rules.allowedAttributes);\n      return healthy;\n    };\n\n    service.downloadFile = function(name, type, data) {\n      if (data !== null && navigator.msSaveBlob)\n        return navigator.msSaveBlob(new Blob([data], { type: type }), name);\n      var a = $('<a style=\\'display: none;\\'/>');\n      var url = window.URL.createObjectURL(new Blob([data], { type: type }));\n      a.attr('href', url);\n      a.attr('download', name);\n      $('body').append(a);\n      a[0].click();\n      window.URL.revokeObjectURL(url);\n      a.remove();\n    };\n\n    service.binaryStringToArrayBuffer = function(binaryString) { //https://stackoverflow.com/questions/34993292/how-to-save-xlsx-data-to-file-as-a-blob\n      var buf = new ArrayBuffer(binaryString.length);\n      var view = new Uint8Array(buf);\n      for (var i = 0; i != binaryString.length; ++i) view[i] = binaryString.charCodeAt(i) & 0xFF;\n      return buf;\n    };\n\n    service.resourceToBase64 = function(resource) {\n      var base64 = '';\n      for (var i = 0; resource[i] !== undefined; i++) {\n        base64 += resource[i];\n      }\n      return base64;\n    };\n\n    service.roundDigits = function(num, digits) {\n      num = parseFloat(num);\n      var multiplier = Math.pow(10, digits);\n      return Math.round((num + Number.EPSILON) * multiplier) / multiplier;\n    };\n\n    service.isDateToday = function(date) {\n      var today = new Date();\n      return date.getDate() === today.getDate() &&\n        date.getMonth() === today.getMonth() &&\n        date.getFullYear() === today.getFullYear();\n    };\n\n    service.isDateYesterday = function(date) {\n      var today = new Date();\n      return date.getDate() === today.getDate() - 1 &&\n        date.getMonth() === today.getMonth() &&\n        date.getFullYear() === today.getFullYear();\n    };\n\n    service.validateEmail = function(email) {\n      var re = /\\S+@\\S+\\.\\S+/;\n      return re.test(email);\n    };\n\n    service.getCompanyPlanName = function(plan) {\n      // FIXME cannot import COMPANY_PLANS from index.constants.js, it breaks the deploy\n      var COMPANY_PLANS = {\n        FREEMIUM: 1,\n        BUSINESS: 2,\n        DEMO: 10,\n        PARTNER: 11\n      };\n\n      var result = 'undefined';\n      if (plan === COMPANY_PLANS.FREEMIUM) {\n        result = 'freemium';\n      } else if (plan === COMPANY_PLANS.BUSINESS) {\n        result = 'business';\n      } else if (plan === COMPANY_PLANS.DEMO) {\n        result = 'demo';\n      } else if (plan === COMPANY_PLANS.PARTNER) {\n        result = 'partner';\n      }\n      return result;\n    };\n\n    service.GetMdDatePickerLocalizationMap = function() {\n      return {\n        'Mon': $filter('translate')('DATE_RANGE.MON'),\n        'Tue': $filter('translate')('DATE_RANGE.TUE'),\n        'Wed': $filter('translate')('DATE_RANGE.WED'),\n        'Thu': $filter('translate')('DATE_RANGE.THU'),\n        'Fri': $filter('translate')('DATE_RANGE.FRI'),\n        'Sat': $filter('translate')('DATE_RANGE.SAT'),\n        'Sun': $filter('translate')('DATE_RANGE.SUN'),\n        'Today': $filter('translate')('DATE_RANGE.TODAY'),\n        'Yesterday': $filter('translate')('DATE_RANGE.YESTERDAY'),\n        'This Week': $filter('translate')('DATE_RANGE.THIS_WEEK'),\n        'Last Week': $filter('translate')('DATE_RANGE.LAST_WEEK'),\n        'This Month': $filter('translate')('DATE_RANGE.THIS_MONTH'),\n        'Last Month': $filter('translate')('DATE_RANGE.LAST_MONTH'),\n        'This Year': $filter('translate')('DATE_RANGE.THIS_YEAR'),\n        'Last Year': $filter('translate')('DATE_RANGE.LAST_YEAR'),\n        'January': $filter('translate')('DATE_RANGE.JANUARY'),\n        'February': $filter('translate')('DATE_RANGE.FEBRUARY'),\n        'March': $filter('translate')('DATE_RANGE.MARCH'),\n        'April': $filter('translate')('DATE_RANGE.APRIL'),\n        'May': $filter('translate')('DATE_RANGE.MAY'),\n        'June': $filter('translate')('DATE_RANGE.JUNE'),\n        'July': $filter('translate')('DATE_RANGE.JULY'),\n        'August': $filter('translate')('DATE_RANGE.AUGUST'),\n        'September': $filter('translate')('DATE_RANGE.SEPTEMBER'),\n        'October': $filter('translate')('DATE_RANGE.OCTOBER'),\n        'November': $filter('translate')('DATE_RANGE.NOVEMBER'),\n        'December': $filter('translate')('DATE_RANGE.DECEMBER')\n      };\n    };\n\n    service.saveDateRangeToLocalStorage = function(key, dateRange) {\n      var rangeToSave = {\n        dateStart: dateRange.dateStart ? this.formatDateToString(dateRange.dateStart) : null,\n        dateEnd: dateRange.dateEnd ? this.formatDateToString(dateRange.dateEnd) : null\n      };\n      localStorage.setItem(key, JSON.stringify(rangeToSave));\n    };\n\n    service.getDateRangeFromLocalStorage = function(key) {\n      var rangeStr = localStorage.getItem(key);\n      if (!rangeStr) {\n        return null;\n      }\n      var parsedRange = JSON.parse(rangeStr);\n      return {\n        dateStart: parsedRange.dateStart ? new Date(parsedRange.dateStart + 'T00:00:00') : null,\n        dateEnd: parsedRange.dateEnd ? new Date(parsedRange.dateEnd + 'T00:00:00') : null\n      };\n    };\n\n    service.formatDateToString = function(date) {\n      var offsetMinutes = date.getTimezoneOffset();\n      var localDate = new Date(date.getTime() - offsetMinutes * 60 * 1000);\n      return localDate.toISOString().split('T')[0];\n    };\n\n    // Format to local string without timezone\n    service.formatDateToStringLocal = function(date) {\n      var year = date.getFullYear();\n      var month = (date.getMonth() + 1).toString();\n      if (month.length === 1) month = '0' + month;\n      var day = date.getDate().toString();\n      if (day.length === 1) day = '0' + day;\n      var hours = date.getHours().toString();\n      if (hours.length === 1) hours = '0' + hours;\n      var minutes = date.getMinutes().toString();\n      if (minutes.length === 1) minutes = '0' + minutes;\n      var seconds = date.getSeconds().toString();\n      if (seconds.length === 1) seconds = '0' + seconds;\n      var milliseconds = date.getMilliseconds().toString();\n      while (milliseconds.length < 3) milliseconds = '0' + milliseconds;\n\n      return year + '-' + month + '-' + day + 'T' + hours + ':' + minutes + ':' + seconds + '.' + milliseconds;\n    };\n\n    service.calculateDateByNumberDays = function(days, startDate) {\n      if (startDate === undefined) {\n        startDate = new Date();\n      }\n      if (typeof startDate === 'string') {\n        startDate = new Date(startDate);\n      }\n      return new Date(days * 86400000 + startDate.getTime());\n    };\n\n    service.downloadFileInterceptor = {\n      response: function(response) {\n        var $mdToast = angular.element(document.body).injector().get('$mdToast');\n        if (response.status === 200) {\n          var contentDisposition = response.headers()['content-disposition'];\n          var contentType = response.headers()['content-type'];\n          var fileName = $filter('translate')('GENERAL.DOWNLOADED_FILE').toLowerCase().replaceAll(' ', '_');\n          if (contentDisposition) {\n            var fileNameMatch = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n            if (fileNameMatch.length === 2) {\n              fileName = fileNameMatch[1];\n            }\n          }\n          service.downloadFile(fileName, contentType, service.resourceToBase64(response.data));\n        } else if (response.status === 429) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.THROTTLE_ERROR')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        return response.data;\n      }\n    };\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.ui-grid-service', [])\n    .service('UiGridService', _UiGridService);\n\n  /** @ngInject */\n  function _UiGridService(i18nService, Session) {\n    // http://ui-grid.info/docs/#!/tutorial\n    var service = this;\n\n    // Const\n    service.DEFAULT_PAGE_SIZE = 25;\n\n    // Data\n    service.defaultGridOptions = {\n      paginationPageSizes: [5, 10, 25, 50, 100, 250],\n      paginationPageSize: service.DEFAULT_PAGE_SIZE,\n      useExternalPagination: true,\n      useExternalSorting: true,\n      enableColumnResizing: true,\n      enablePaginationControls: true,\n      enableSorting: true,\n      enableGridMenu: true,\n      enableCellEdit: false,\n      suppressMultiSort: false,\n      fastWatch: false,\n      enableRowSelection: true,\n      enableSelectAll: true,\n      multiSelect: true,\n      selectionRowHeaderWidth: 42,\n      rowHeight: 40,\n      headerRowHeight: 40,\n      showGridFooter: false,\n      enableColumnMenus: true,\n      columnDefs: [],\n      data: [],\n      saveWidths: true,\n      saveOrder: true,\n      saveScroll: true,\n      saveFocus: true,\n      saveVisible: true,\n      saveSort: true,\n      saveFilter: true,\n      savePagination: true,\n      savePinning: true,\n      saveGrouping: true,\n      saveGroupingExpandedStates: true,\n      saveTreeView: true,\n      saveSelection: true,\n      exporterMenuAllData: false,\n      exporterMenuPdf: false,\n      exporterMenuExcel: false\n    };\n\n    // Methods\n    service.getGridOptions = getGridOptions;\n    service.getSortString = getSortString;\n    service.adjustAllColumns = adjustAllColumns;\n\n    // Methods\n    function getGridOptions(options) {\n      i18nService.setCurrentLang(Session.user.lang);\n      if (options) {\n        return angular.extend(angular.copy(service.defaultGridOptions), options);\n      }\n      return angular.copy(service.defaultGridOptions);\n    }\n\n    function getSortString(grid, sortColumns){\n      if (sortColumns.length === 0) {\n        return '';\n      }\n      var ordering = '';\n      sortColumns.forEach(function (column, index) {\n        if (column.sort.direction === 'desc') {\n          ordering += '-';\n        }\n        ordering += column.colDef.orderingField ? column.colDef.orderingField : column.colDef.field;\n        if (index < sortColumns.length - 1) {\n          ordering += ',';\n        }\n      });\n      return ordering;\n    }\n\n    function adjustAllColumns() {\n      // UiGrid does not allow any way to auto adjust the columns. This is a\n      // workaround to adjust all columns by double click every colum.\n      // There is no other way to do the same and this method works fine.\n      var columnElements = document.querySelectorAll('.ui-grid-column-resizer');\n      var doubleClickEvent = new MouseEvent('dblclick', {\n        bubbles: true,\n        cancelable: true,\n        view: window\n      });\n\n      columnElements.forEach(function(column) {\n        column.dispatchEvent(doubleClickEvent);\n      });\n    }\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.tracker', [])\n    .factory('TrackerService', trackerService);\n\n  /** @ngInject */\n  function trackerService(\n    Utils,\n    COMPANY_PLANS\n  ) {\n    const ALLOWED_COMPANY_PLANS = [\n      COMPANY_PLANS.FREEMIUM\n    ];\n\n    var trackerService = {\n      mixpanel: {\n        initialized: false,\n        registered: false,\n      },\n    };\n\n    // Generic methods\n    trackerService.registerAccount = function (user, company) {\n      if (!trackerService.allowedRegisterAccount(user, company)) {\n        return;\n      }\n      trackerService.registerMixpanelAccount(user, company);\n    };\n\n    trackerService.allowedRegisterAccount = function (user, company) {\n      if (ALLOWED_COMPANY_PLANS.indexOf(company.plan) === -1) {\n        return false;\n      }\n      if (window.location.href.indexOf('panel.stockagile.com') !== -1){\n        return false;\n      }\n      return true;\n    };\n\n    trackerService.track = function (event, params) {\n      if (!event) {\n        console.warn('Event to track not set');\n        return;\n      }\n      trackerService.trackMixpanelEvent(event, params);\n    };\n\n    // Mixpanel methods\n    trackerService.initMixpanel = function (token) {\n      // Chage debug true if you want to track on localhost\n      window.mixpanel.init(token, {debug: false});\n      trackerService.mixpanel.initialized = true;\n    };\n\n    trackerService.registerMixpanelAccount = function (user, company) {\n      var planName = Utils.getCompanyPlanName(company.plan);\n\n      window.mixpanel.identify(user.email);\n\n      window.mixpanel.register({\n        $name: user.getFullName(),\n        $email: user.email,\n        company_id: company.id,\n        company: company.name,\n        plan: planName,\n      });\n\n      window.mixpanel.people.set({\n        $name: user.getFullName(),\n        $email: user.email,\n        company_id: company.id,\n        company: company.name,\n        plan: planName,\n      });\n\n      window.mixpanel.add_group('company', company.name);\n      trackerService.mixpanel.registered = true;\n    };\n\n    trackerService.trackMixpanelEvent = function (event, params) {\n      if (trackerService.mixpanel.initialized) {\n        window.mixpanel.track(event, params);\n      }\n    };\n\n    return trackerService;\n  }\n\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.support', [])\n    .service('Support', _Support);\n\n  /** @ngInject */\n  function _Support() {\n\n    var support = this;\n    var INTERCOM_API = 'https://api-iam.intercom.io';\n    var INTERCOM_APP_ID = 'k015o33w';\n    support.visible = false;\n    support.userInitialized = false;\n\n    // Data\n\n    // Methods\n    support.initUser = initUser;\n    support.toggleChat = toggleChat;\n    support.hide = hide;\n    support.show = show;\n    support.open = open;\n    support.close = close;\n    support.openAcademy = openAcademy;\n\n    // Init\n    init();\n\n    // Functions\n    function init() {\n      window.Intercom('onHide', function() {\n        support.visible = false;\n      });\n\n      window.Intercom('onShow', function() {\n        support.visible = true;\n      });\n    }\n\n    function hide() {\n      window.Intercom('update', { hide_default_launcher: true });\n\n    }\n\n    function show() {\n      window.Intercom('update', { hide_default_launcher: false });\n    }\n\n    function open() {\n      window.Intercom('showSpace', 'home');\n    }\n\n    function close() {\n      window.Intercom('hide');\n    }\n\n    function initUser(user, company) {\n      if (support.userInitialized) {\n        window.Intercom('shutdown');\n      }\n      var base = {\n        api_base: INTERCOM_API,\n        app_id: INTERCOM_APP_ID\n      };\n      var data = {};\n      if (user) {\n        data = {\n          user_id: user.id,\n          name: user.getFullName(),\n          email: user.email,\n          created_at: user.date_joined,\n          \"Is owner\": user.isOwner()\n        };\n      }\n      if (company) {\n        angular.extend(data, {\n          company: {\n            id: company.id,\n            name: company.name,\n            \"Company partner ID\": company.partner,\n            \"Company partner name\": company.partner_name,\n            \"Account manager ID\": company.account_manager,\n          }\n        });\n      }\n      if (Object.keys(data).length) {\n        window.Intercom('boot', angular.extend(base, data));\n        support.hide();\n        support.userInitialized = true;\n      }\n    }\n\n    function toggleChat() {\n      if (support.visible) {\n        support.close();\n      } else {\n        support.open();\n      }\n    }\n\n    function openAcademy(){\n      window.Intercom('showSpace','help');\n    }\n  }\n\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.stockout', [])\n    .service('StockoutService', stockoutService);\n\n  /** @ngInject */\n  function stockoutService($http, api, HTTP_STATUS, $q) {\n    var service = this;\n\n    service.setStockoutDataFromFulfillment = function(fulfillment) {\n      fulfillment.getVisiblePosOrderFulfillmentProductVariantInstances().forEach(function(pofpv) {\n        service.setStockoutData(pofpv);\n      });\n    };\n\n    service.setStockoutData = function(pofpv) {\n      var deferred = $q.defer();\n      var url = api.urls.inventories.posOrderFulfillmentProductVariants\n        .replace(':id', pofpv.id)\n        .replace(':option', 'get-stockout-data');\n\n      $http.get(url).then(function(response) {\n        if (response.status === HTTP_STATUS.HTTP_200_OK) {\n          pofpv.stockout_data = response.data;\n          pofpv.stockoutAmount = pofpv.stockout_data ? pofpv.stockout_data['stockout_amount'] : null;\n          pofpv.maxStockoutAmount = pofpv.stockoutAmount;\n          pofpv.in_stockout = pofpv.stockoutAmount ? pofpv.stockoutAmount > 0 : null;\n          deferred.resolve(pofpv);\n        } else {\n          deferred.reject('Error fetching stockout data');\n        }\n      }, function(error) {\n        deferred.reject(error);\n      });\n\n      return deferred.promise;\n    };\n  }\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.session', [])\n    .service('Session', session);\n\n  /** @ngInject */\n  function session($q, $cookies, $translate, $rootScope, $injector, Support, User, COMPANY_PLANS, HTTP_STATUS, Utils,\n                   TrackerService, Company) {\n\n    var service = this;\n\n\n    // Const\n    var DEFAULT_PERMISSIONS = {\n      'app.pages_sign_up': true,\n      'app.pages_sign_up_two': true,\n      'app.pages_validate_sign_up': true,\n      'app.pages_validate_sign_up_two': true,\n      'app.pages_auth_login-v3': true,\n      'app.pages_shopify': true,\n      'app.support.videos': true,\n      'app.support.changelogs': true,\n      'app.support.performance': true,\n      'app.support.trial_status_details': true,\n      'app.pages_trial_expired': true,\n      'signup.pages_validate_sign_up_two': true,\n      'app.ecommerce.sites.site.routing_rules': true, // TODO add to permission\n      'app.pages_hub.receipts': true,\n      'app.pages_hub.receipts.receipt': true,\n      'app.pages_hub.invoices': true,\n      'app.pages_hub.proformas': true,\n      'app.pages_hub.quotes': true,\n      'app.ecommerce.scan_and_go': true, // TODO remove\n      'app.sale.display': true\n    };\n    var DEFAULT_FEATURES = {\n      'app.analytics.start': true\n    };\n\n    // Data\n    service.token = null;\n    service.user = null;\n    service.users = [];\n    service.company = null;\n    service.features = {};\n    service.permissions = {};\n    service.updates = false;\n    service.loadedFromServer = false;\n    service.loadFromServerDeferrer = null;\n\n    // Methods\n    service.create = create;\n    service.destroy = destroy;\n    service.loadFromStorage = loadFromStorage;\n    service.loadFromServer = loadFromServer;\n    service.subsribeNotifications = subsribeNotifications;\n    service.unsubscribeNotifications = unsubscribeNotifications;\n    service.initializeSessionPermissions = initializeSessionPermissions;\n    service.hasPermission = hasPermission;\n    service.hasPermissions = hasPermissions;\n    service.isTrial = isTrial;\n    service.getTrialRemainingDays = getTrialRemainingDays;\n    service.isAuthenticated = isAuthenticated;\n    service.getSession = getSession;\n    service.addUser = addUser;\n    service.listUsers = listUsers;\n    service.changeUser = changeUser;\n    service.removeUser = removeUser;\n    service.setTokenCookie = setTokenCookie;\n    service.hasUpdates = hasUpdates;\n    service.checkTerms = checkTerms;\n    service.checkNetPromoterScore = checkNetPromoterScore;\n    service.setTermsAndConditions = setTermsAndConditions;\n    service.redirectFreemiumPage = redirectFreemiumPage;\n    service.showFreemiumBanner = showFreemiumBanner;\n    service.hasFeature = hasFeature;\n    service.hasAnyFeature = hasAnyFeature;\n    service.hasMultipleB2B = hasMultipleB2B;\n    service.getDefaultB2B = getDefaultB2B;\n    service.hasAddOn = hasAddOn;\n    service.hasFeatureOrAddon = hasFeatureOrAddon;\n    service.isAddOn = isAddOn;\n    service.getAddOn = getAddOn;\n\n    // Init\n    service.users = listUsers();\n\n    // Functions\n    function create(token, user) {\n      service.token = token;\n      service.user = new User(user);\n\n      var dataLayer = window.dataLayer = window.dataLayer || [];\n      dataLayer.push({\n        userId: service.user.username\n      });\n    }\n\n    function destroy() {\n      service.token = null;\n      service.user = null;\n      service.company = null;\n      localStorage.removeItem('token');\n      sessionStorage.removeItem('token');\n    }\n\n    function loadFromStorage() {\n      if (localStorage.getItem('token') != null) {\n        service.create(localStorage.getItem('token'), null);\n      } else if (sessionStorage.getItem('token') != null) {\n        service.create(sessionStorage.getItem('token'), null);\n      }\n    }\n\n    function loadFromServer(apiResolver) {\n      service.loadFromServerDeferrer = $q.defer();\n\n      var result = $q.defer();\n      var userCallback = $q.defer();\n      var companyCallback = $q.defer();\n\n      apiResolver.resolve('account.user@get').then(function(response) {\n        service.user = new User(response);\n        userCallback.resolve();\n        if (service.user.company == null) {\n          companyCallback.resolve();\n        }\n      });\n\n      apiResolver.resolve('account.myCompany@get').then(function(response) {\n        service.company = new Company(response);\n        initializeCompanyFeatures();\n        companyCallback.resolve();\n      });\n\n      $q.all([\n        userCallback.promise,\n        companyCallback.promise\n      ]).then(function(data) {\n        // Checking if the session is expired\n        if (angular.isUndefined(service.user.company)) {\n          service.destroy();\n        } else {\n          initializeSessionPermissions();\n          checkTermsAndConditionDialog();\n          setSupportUser();\n          checkNetPromoterScore();\n          subsribeNotifications(apiResolver);\n          setDataLayer();\n          initializeTracker();\n\n          service.loadedFromServer = true;\n          service.loadFromServerDeferrer.resolve(service);\n        }\n\n        result.resolve();\n      });\n\n      return result.promise;\n    }\n\n    function initializeSessionPermissions() {\n      // Set false to avoid loosing binding when user changes\n      Object.keys(service.permissions).forEach(function(permissionId) {\n        service.permissions[permissionId] = false;\n      });\n      // Initializing permission tuple for access efficiency\n      for (var i = 0; i < service.user.roles.length; i++) {\n        for (var j = 0; j < service.user.roles[i].permissions.length; j++) {\n          service.permissions[service.user.roles[i].permissions[j].code] = true;\n        }\n      }\n      angular.extend(service.permissions, DEFAULT_PERMISSIONS);\n    }\n\n    function initializeCompanyFeatures() {\n      if (angular.isDefined(service.company)) {\n        service.hasSubscription = service.company.hasSubscription();\n        service.features = service.company.getFeaturesDict();\n        service.addOns = service.company.getAddOnsDict();\n        service.contractedAddOns = service.company.getContractedAddOnsDict();\n        angular.extend(service.features, DEFAULT_FEATURES);\n        angular.extend(service.features, DEFAULT_PERMISSIONS);\n      }\n    }\n\n    function hasFeature(feature) {\n      return !!service.features[feature];\n    }\n\n    function hasAnyFeature(features) {\n      for (var i = 0; i < features.length; i++) {\n        if (hasFeature(features[i])) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    function hasAddOn(feature) {\n      return !!service.contractedAddOns[feature];\n    }\n\n    function hasFeatureOrAddon(feature) {\n      return hasFeature(feature) || hasAddOn(feature);\n    }\n\n    function hasPermission(permission) {\n      return !!service.permissions[permission] || permission == 'hub';\n    }\n\n    function hasPermissions(permission) {\n      // Removing spaces and splitting by coma\n      var permissions = permission.replace(/ /g, '').split(',');\n      for (var i = 0; i < permissions.length; ++i) {\n        if (hasPermission(permissions[i])) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    function isAddOn(permission) {\n      return !!service.addOns[permission];\n    }\n\n    function getAddOn(permission) {\n      return service.addOns[permission];\n    }\n\n    function isTrial() {\n      if (service.company) {\n        return service.company.is_trial;\n      }\n      return false;\n    }\n\n    function getTrialRemainingDays() {\n      if (service.company) {\n        return service.company.trial_remaining_days;\n      }\n      return false;\n    }\n\n    function hasMultipleB2B() {\n      if (service.company) {\n        return service.company.has_multiple_b2b;\n      }\n      return false;\n    }\n\n    function getDefaultB2B() {\n      if (service.company) {\n        return service.company.default_b2b;\n      }\n      return false;\n    }\n\n    function isAuthenticated() {\n      checkTermsAndConditionDialog();\n      return !!service.token;\n    }\n\n    function checkTerms() {\n      return service.user && service.user.id && !service.user.terms_and_conditions_accepted;\n    }\n\n    function checkTermsAndConditionDialog() {\n      if (checkTerms()) {\n        $rootScope.$broadcast('runBlock::showTermsAndConditionsDialog');\n      }\n    }\n\n    function checkNetPromoterScore() {\n      if (service.user && service.user.id) {\n        $rootScope.$broadcast('runBlock::checkNetPromoterScore');\n      }\n    }\n\n    function setTermsAndConditions(value) {\n      if (service.user && service.user.id) {\n        service.user.terms_and_conditions_accepted = value;\n        saveUser(service.user);\n      }\n    }\n\n    function getSession() {\n      if (!isAuthenticated()) {\n        return service;\n      } else if (service.loadedFromServer) {\n        return service;\n      } else {\n        return service.loadFromServerDeferrer.promise;\n      }\n    }\n\n    function addUser(username, token, user, remember) {\n      var users;\n\n      if (remember) {\n        users = JSON.parse(localStorage.getItem('users'));\n        if (users == null) {\n          users = {};\n        }\n        users[username] = { username: username, token: token, data: user, remember: remember };\n        localStorage.setItem('users', JSON.stringify(users));\n\n        // Delete this user from sessionStorage if exists to avoid duplicates\n        var usersSessionStorage = JSON.parse(sessionStorage.getItem('users'));\n        if (usersSessionStorage && usersSessionStorage[username]) {\n          delete usersSessionStorage[username];\n          sessionStorage.setItem('users', JSON.stringify(usersSessionStorage));\n        }\n      } else {\n        users = JSON.parse(sessionStorage.getItem('users'));\n        if (users == null) {\n          users = {};\n        }\n        users[username] = { username: username, token: token, data: user, remember: remember };\n        sessionStorage.setItem('users', JSON.stringify(users));\n\n        // Delete this user from localStorage if exists to avoid duplicates\n        var usersLocalStorage = JSON.parse(localStorage.getItem('users'));\n        if (usersLocalStorage && usersLocalStorage[username]) {\n          delete usersLocalStorage[username];\n          localStorage.setItem('users', JSON.stringify(usersLocalStorage));\n        }\n      }\n\n      service.users = listUsers();\n    }\n\n    function saveUser(user) {\n      var localStorageUsersDict = JSON.parse(localStorage.getItem('users'));\n      for (var u in localStorageUsersDict) {\n        if (localStorageUsersDict[u].data.id === user.id) {\n          localStorageUsersDict[u].data = user;\n          localStorage.setItem('users', JSON.stringify(localStorageUsersDict));\n        }\n      }\n      localStorageUsersDict = JSON.parse(sessionStorage.getItem('users'));\n      for (var u in localStorageUsersDict) {\n        if (localStorageUsersDict[u].data.id === user.id) {\n          localStorageUsersDict[u].data = user;\n          sessionStorage.setItem('users', JSON.stringify(localStorageUsersDict));\n        }\n      }\n      service.users = listUsers();\n    }\n\n    function listUsers() {\n      var users = service.user ? [{\n        data: service.user,\n        username: service.user.username,\n        token: service.token\n      }] : [];\n\n      var presentUsernames = {};\n      if (service.user) {\n        presentUsernames[service.user.username] = true;\n      }\n\n      var localStorageUsersDict = JSON.parse(localStorage.getItem('users'));\n      for (var user in localStorageUsersDict) {\n        if (!presentUsernames[user]) {\n          presentUsernames[user] = true;\n          var tempUser = localStorageUsersDict[user];\n          tempUser.data = new User(tempUser.data);\n          users.push(tempUser);\n        }\n      }\n      var sessionStorageUsersDict = JSON.parse(sessionStorage.getItem('users'));\n      for (var user in sessionStorageUsersDict) {\n        if (!presentUsernames[user]) {\n          presentUsernames[user] = true;\n          var tempUser = sessionStorageUsersDict[user];\n          tempUser.data = new User(tempUser.data);\n          users.push(tempUser);\n        }\n      }\n      return users;\n    }\n\n    function changeUser(user) {\n      var result = $q.defer();\n      if (!!user.data.pin) {\n        requestUserPin(user).then(function(changedSuccessfully) {\n          if (changedSuccessfully) {\n            _changeUser(user);\n            result.resolve(true);\n          } else {\n            result.resolve(false);\n          }\n        });\n      } else {\n        _changeUser(user);\n        result.resolve(true);\n      }\n      return result.promise;\n    }\n\n    function requestUserPin(user) {\n      return $injector.invoke(['$mdDialog', function($mdDialog) {\n        return $mdDialog.show({\n          controller: 'RequestPinDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/services/dialogs/request-pin-dialog/request-pin-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          escapeToClose: true,\n          multiple: false,\n          locals: {\n            user: user\n          }\n        });\n      }]);\n    }\n\n    function _changeUser(user) {\n\n      localStorage.removeItem('token');\n      sessionStorage.removeItem('token');\n\n      if (user.remember) {\n        localStorage.setItem('token', user.token);\n      } else {\n        sessionStorage.setItem('token', user.token);\n      }\n\n      service.token = user.token;\n      service.user = new User(user.data);\n\n      var dataLayer = window.dataLayer = window.dataLayer || [];\n      dataLayer.push({\n        userId: user.username\n      });\n\n      if (service.user.lang) {\n        $translate.use(service.user.lang);\n      }\n\n      initializeSessionPermissions();\n      checkTermsAndConditionDialog();\n      setSupportUser();\n      checkNetPromoterScore();\n      setDataLayer();\n      initializeTracker();\n    }\n\n    function removeUser(username) {\n      var users = JSON.parse(localStorage.getItem('users'));\n      if (users != null)\n        delete users[username];\n      localStorage.setItem('users', JSON.stringify(users));\n\n      users = JSON.parse(sessionStorage.getItem('users'));\n      if (users != null)\n        delete users[username];\n      sessionStorage.setItem('users', JSON.stringify(users));\n\n      service.updates = true;\n    }\n\n    /**\n     * Used to access to api.stockagile.com to render pdfs, it will authenticate only during one minute.\n     * @param minutes\n     */\n    function setTokenCookie(minutes) {\n      if (!minutes) {\n        minutes = 5;\n      }\n      var expiration = new Date();\n      expiration.setMinutes(expiration.getMinutes() + minutes);\n\n      var baseDomain;\n      if (window.location.href.indexOf('localhost') !== -1) {\n        baseDomain = 'localhost';\n      } else if (window.location.href.indexOf('panel.stockagile.com') !== -1) {\n        baseDomain = 'stockagile.com';\n      } else if (window.location.href.indexOf('192.168') !== -1) {\n        baseDomain = window.location.href.split('//')[1].split(':')[0];\n      }\n\n      $cookies.put('token', service.token, { expires: expiration, domain: baseDomain });\n    }\n\n    function hasUpdates() {\n      if (service.updates) {\n        service.updates = false;\n        return true;\n      }\n\n      return false;\n    }\n\n    function redirectFreemiumPage() {\n      return service.showFreemiumBanner() && service.company && service.company.trial_remaining_days < 1;\n    }\n\n    function showFreemiumBanner() {\n      return service.company &&\n        service.company.plan === COMPANY_PLANS.FREEMIUM &&\n        service.company.is_trial;\n    }\n\n    function setDataLayer() {\n      var plan = Utils.getCompanyPlanName(service.company.plan);\n      var dataLayer = window.dataLayer = window.dataLayer || [];\n\n      dataLayer.push({\n        event: 'sa-session-loaded',\n        userFullName: service.user.first_name + ' ' + service.user.last_name,\n        userEmail: service.user.email,\n        userId: service.user.username,\n        userCompanyId: service.company.id,\n        userCompanyName: service.company.name,\n        userCompanyPlan: plan,\n        isTrial: service.isTrial()\n      });\n    }\n\n    function setSupportUser() {\n      Support.initUser(service.user, service.company);\n    }\n\n    function initializeTracker() {\n      TrackerService.registerAccount(service.user, service.company);\n    }\n\n    function subsribeNotifications(apiResolver) {\n      var config = {\n        pushKey: 'BF9CB2_IkArZ-8AlaMsZq2du0KIKlubdB4-1dnIvw669YNS6FrukzlDF0ZV48xqa7S9eiVoO7nwmkFw3CMRAfgA'\n      };\n\n      function subscribe() {\n        try {\n          navigator.serviceWorker.register('/sw.js', { scope: '/' });\n          navigator.serviceWorker.ready.then(\n            function(serviceWorkerRegistration) {\n              const options = {\n                userVisibleOnly: true,\n                applicationServerKey: urlB64ToUint8Array(config.pushKey)\n              };\n              serviceWorkerRegistration.pushManager.subscribe(options).then(\n                function(pushSubscription) {\n                  apiResolver.resolve(\n                    'account.subscriptions@save',\n                    { subscription: pushSubscription }\n                  ).then(function(response) {\n                    console.log(response);\n                  });\n                }).catch(function(err) {\n                console.log(err);\n              });\n            }\n          ).catch(function(err) {\n            console.log(err);\n          });\n        } catch (e) {\n          console.error(e);\n        }\n      }\n\n      function urlB64ToUint8Array(base64String) {\n        var padding = '='.repeat((4 - base64String.length % 4) % 4);\n        var base64 = (base64String + padding)\n          .replace(/\\-/g, '+')\n          .replace(/_/g, '/');\n\n        var rawData = window.atob(base64);\n        var outputArray = new Uint8Array(rawData.length);\n        return outputArray.map(\n          function(output, index) {\n            return rawData.charCodeAt(index);\n          }\n        );\n      }\n\n      subscribe();\n    }\n\n    function unsubscribeNotifications() {\n      if ('serviceWorker' in navigator) {\n        navigator.serviceWorker.getRegistrations().then(function(registrations) {\n          for (var i = 0; i < registrations.length; i++) {\n            registrations[i].unregister().catch(function(error) {\n              console.error(error);\n            });\n          }\n        }).catch(function(error) {\n          console.error(error);\n        });\n      }\n    }\n  }\n\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.scan-queue', [])\n    .service('ScanQueueService', ScanQueueService);\n\n  /** @ngInject */\n  function ScanQueueService($http, api, HTTP_STATUS, $q) {\n    var queue = $q.when();\n    var last = { key: null, ts: 0 };\n    var DUP_THRESHOLD = 250; // ms\n\n    this.run = function(taskFn, key) {\n      var now = Date.now();\n\n      if (key && key === last.key && (now - last.ts) < DUP_THRESHOLD) {\n        return $q.resolve({ status: HTTP_STATUS.HTTP_204_NO_CONTENT, data: { skipped: true } });\n      }\n      if (key) {\n        last = { key: key, ts: now };\n      }\n\n      queue = queue.catch(angular.noop).then(function() {\n        var d = $q.defer();\n        try {\n          if (taskFn.length >= 1) {\n            taskFn(function resolve(val) {\n                d.resolve(val);\n              },\n              function reject(err) {\n                d.reject(err);\n              });\n          } else {\n            $q.when(taskFn()).then(d.resolve, d.reject);\n          }\n        } catch (e) {\n          d.reject(e);\n        }\n        return d.promise;\n      })\n        .then(normalizeSuccess, normalizeError);\n\n      return queue;\n    };\n\n    function normalizeSuccess(res) {\n      if (res && angular.isObject(res) && 'response' in res) {\n        return { status: res.status || HTTP_STATUS.HTTP_200_OK, data: res.response };\n      }\n      if (res && angular.isObject(res) && 'status' in res && 'data' in res) {\n        return { status: res.status, data: res.data };\n      }\n      return { status: HTTP_STATUS.HTTP_200_OK, data: res };\n    }\n\n    function normalizeError(err) {\n      var status = (err && err.status) || HTTP_STATUS.HTTP_500_INTERNAL_SERVER_ERROR;\n      var data = (err && (err.data || err.response)) || err;\n      return $q.reject({ status: status, data: data });\n    }\n\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.performance', [])\n    .service('Performance', performance);\n\n  /** @ngInject */\n  function performance($q, $http, api) {\n    var service = this;\n    const MEGABIT = 1000000;\n\n    // data\n    service.randomBytes = [];\n    service.DEFAULT_OPTIONS = {\n      latencyTestUrl: api.urls.performance.latencyTest,\n      downloadUrl: api.urls.performance.download,\n      uploadUrl: api.urls.performance.upload,\n      uploadDataSize: 2 * 1024 * 1024, // 2Mb\n      uploadDataMaxSize: Number.MAX_VALUE\n    };\n\n    // Methods\n    service.testDownloadSpeed = testDownloadSpeed;\n    service.testUploadSpeed = testUploadSpeed;\n    service.testLatency = testLatency;\n    service.bandwidth = bandwidth;\n    service.avgBandwidth = avgBandwidth;\n    service.toMbps = toMbps;\n    service.benchmark = benchmark;\n\n    /**\n     * THIS LIBRARY HAS BEEN INSPIRED IN THE JSBANDWIDTH PROJECT\n     *\n     * GitHub repository: https://github.com/beradrian/jsbandwidth\n     *\n     */\n\n    /**\n     * Calculates the bandwidth in bps (bits per second)\n     * @param size the size in bytes to be transfered\n     * @param startTime the time when the transfer started. The end time is\n     * considered to be now.\n     */\n    function calculateBandwidth(size, start) {\n      return (size * 8) / ((new Date().getTime() - start) / 1000);\n    }\n\n    function truncate(data, maxSize) {\n      if (maxSize === undefined) {\n        return;\n      }\n\n      if (data.length > maxSize) {\n        if (data.substring) {\n          data = data.substring(0, maxSize);\n        } else {\n          data.length = maxSize;\n        }\n      }\n\n      return data;\n    }\n\n    function getRandomBytes(length) {\n      if (service.randomBytes && service.randomBytes.length >= length) {\n        return service.randomBytes;\n      }\n\n      if (!service.randomBytes) {\n        service.randomBytes = [];\n      }\n\n      for (var i = service.randomBytes.length; i < length; i++) {\n        service.randomBytes.push(Math.floor(Math.random() * 256));\n      }\n\n      return service.randomBytes;\n    }\n\n    function initializeOptions(options) {\n      // generate randomly the upload data\n      if (!options.uploadData) {\n        options.uploadData = truncate(getRandomBytes(options.uploadDataSize), options.uploadDataMaxSize);\n      } else {\n        options.uploadData = truncate(options.uploadData, options.uploadDataMaxSize);\n      }\n\n      return options;\n    }\n\n    function testDownloadSpeed(options) {\n      var start = new Date().getTime();\n      var httpPromise = $http({\n        method: \"GET\",\n        url: options.downloadUrl + \"?id=\" + start,\n        dataType: 'application/octet-stream',\n        headers: {\n          'Content-type': 'application/octet-stream'\n        }\n      });\n\n      var speedPromise = httpPromise.then(function (response) {\n        return {\n          downloadSpeed: calculateBandwidth((response.data || response).length, start),\n          data: response.data || response\n        };\n      });\n\n      speedPromise.cancel = httpPromise.cancel;\n      return speedPromise;\n    }\n\n    function testUploadSpeed(options) {\n      options = initializeOptions(options);\n      var start = new Date().getTime();\n\n      var httpPromise = $http({\n        method: \"POST\",\n        url: options.uploadUrl + \"?id=\" + start,\n        data: options.uploadData,\n        dataType: 'application/octet-stream',\n        headers: {'Content-type': 'application/octet-stream'}\n      });\n\n      var speedPromise = httpPromise.then(function (response) {\n        return {uploadSpeed: calculateBandwidth(options.uploadData.length, start)};\n      });\n\n      speedPromise.cancel = httpPromise.cancel;\n      return speedPromise;\n    }\n\n    function testLatency(options) {\n      options.latencyTestUrl = options.latencyTestUrl || options.downloadUrl;\n\n      var start = new Date().getTime();\n      var httpPromise = $http({\n        method: \"HEAD\",\n        url: options.latencyTestUrl + \"?id=\" + start,\n        dataType: 'application/octet-stream',\n        headers: {'Content-type': 'application/octet-stream'}\n      });\n\n      var speedPromise = httpPromise.then(function (response) {\n        // time divided by 2 because of 3-way TCP handshake\n        return {latency: (new Date().getTime() - start) / 2};\n      });\n\n      speedPromise.cancel = httpPromise.cancel;\n      return speedPromise;\n    }\n\n    function bandwidth(options) {\n      var httpPromise = service.testDownloadSpeed(options);\n      var speedPromise = httpPromise.then(function (downloadResult) {\n        options.uploadData = downloadResult.data;\n        httpPromise = service.testUploadSpeed(options);\n        var speedPromise = httpPromise.then(function (uploadResult) {\n          return {\n            downloadSpeed: service.toMbps(downloadResult.downloadSpeed),\n            uploadSpeed: service.toMbps(uploadResult.uploadSpeed)\n          };\n        });\n\n        speedPromise.cancel = httpPromise.cancel;\n        return speedPromise;\n      });\n\n      speedPromise.cancel = httpPromise.cancel;\n      return speedPromise;\n    }\n\n    function avgBandwidthImmersion(q, options, samples, n) {\n      if (samples.length >= n - 1) {\n        q.resolve(samples)\n        return;\n      }\n\n      bandwidth(options).then(function (result) {\n        avgBandwidthImmersion(q, options, samples, n);\n        samples.push(result);\n      })\n    }\n\n    function avgBandwidth(n, options) {\n      options = angular.extend(service.DEFAULT_OPTIONS, options);\n      options = initializeOptions(options);\n\n      var samples = []\n      var innerDeferred = $q.defer();\n      var deferred = $q.defer();\n\n      avgBandwidthImmersion(innerDeferred, options, samples, n);\n      innerDeferred.promise.then(function (samples) {\n        var average = {\n          downloadSpeed: 0,\n          uploadSpeed: 0\n        };\n\n        for (var i = 0; i < samples.length; i++) {\n          average.downloadSpeed += samples[i].downloadSpeed;\n          average.uploadSpeed += samples[i].uploadSpeed;\n        }\n\n        average.downloadSpeed = Math.floor((average.downloadSpeed / samples.length) * 100) / 100;\n        average.uploadSpeed = Math.floor((average.uploadSpeed / samples.length) * 100) / 100;\n\n        deferred.resolve(average);\n      });\n\n      return deferred.promise;\n    }\n\n    function toMbps(bps) {\n      return bps < 0 || isNaN(bps) ? 0 : Math.floor((bps / MEGABIT) * 100) / 100;\n    }\n\n    function benchmark(elementId, iterations, timeout) {\n      if (!elementId) elementId = 'non-existing-dom-element';\n      if (!iterations) iterations = 1000000000; // 1.000.000.000\n      if (!timeout) timeout = 10000; // 10s\n\n      var deferred = $q.defer();\n      setTimeout(function () {\n        var count = 0;\n        var start = new Date().getTime();\n        var end = new Date().getTime();\n\n        for (var i = 0; i < iterations && (end - start) < timeout; i++) {\n          document.getElementById(elementId);\n          count++;\n\n          end = new Date().getTime();\n        }\n\n\n        deferred.resolve({\n          iterations: count,\n          start: start,\n          end: end,\n          estimatedMilliseconds: end - start,\n          ratio: Math.floor((count / (end - start)) * 100) / 100,\n        });\n      }, 1000);\n\n      return deferred.promise;\n    }\n  }\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.order-actions', [])\n    .service('OrderActionsService', OrderActionsService);\n\n  /** @ngInject */\n  function OrderActionsService($mdDialog, $mdToast, $interval, $filter, api, HTTP_STATUS, Session, $rootScope) {\n    var service = this;\n    return {\n      initialize: initialize,\n      startPulling: startPulling,\n      changeStatus: changeStatus,\n      showProgressBar: showProgressBar,\n      showReloadToast: showReloadToast,\n      sendReloadTableEvent: sendReloadTableEvent,\n      sendChangeStatusEvent: sendChangeStatusEvent\n    };\n\n    function initialize(vm, order, endpoints, statusChangedCallbackOK, statusChangedCallbackKO) {\n      service.vm = vm;\n      service.order = order;\n      vm.changingStatus = order.changing_status || order.pending_to_change_status;\n      vm.endpoints = endpoints;\n      vm.statusChangedCallbackOK = statusChangedCallbackOK;\n      vm.statusChangedCallbackKO = statusChangedCallbackKO;\n      if (vm.changingStatus) {\n        startPulling();\n      }\n    }\n\n    function startPulling(option) {\n      var vm = service.vm;\n      var checkingStatusModule = vm.endpoints.checkStatus.split('.')[0];\n      var checkingStatusModel = vm.endpoints.checkStatus.split('.')[1];\n      vm.timeout = $interval(function() {\n        api[checkingStatusModule][checkingStatusModel].get({\n          id: service.order.id,\n          option: 'check-status'\n        }, function(result, callback, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK && !result.pending_to_change_status && !result.changing_status) {\n            $interval.cancel(vm.timeout);\n            $mdDialog.hide();\n            vm.statusChangedCallbackOK(option);\n          }\n\n          if (vm.statusChangedCallbackKO && status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n            $interval.cancel(vm.timeout);\n            $mdDialog.hide();\n            vm.statusChangedCallbackKO();\n          }\n\n        });\n      }, 2000);\n    }\n\n    function changeStatus(option) {\n      var vm = service.vm;\n\n      if (vm.changingStatus) return;\n      vm.changingStatus = true;\n      vm.saving = true;\n\n      var changeStatusModule = vm.endpoints.changeStatus.split('.')[0];\n      var changeStatusModel = vm.endpoints.changeStatus.split('.')[1];\n\n      api[changeStatusModule][changeStatusModel].update(\n        {\n          id: service.order.id,\n          option: option\n        },\n        function(response, callback, status) {\n          vm.saving = false;\n          vm.changed = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            startPulling(option);\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            showReloadToast();\n            vm.changingStatus = false;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.changingStatus = false;\n          }\n        }\n      );\n    }\n\n    function showProgressBar(title) {\n      if (!title) {\n        title = 'PURCHASE.PROCESSING_PURCHASE';\n      }\n      $mdDialog.show({\n        controller: 'LoadingBarDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html',\n        parent: angular.element(document.body),\n        clickOutsideToClose: true,\n        focusOnOpen: false,\n        locals: {\n          title: title,\n          body: 'PURCHASE.PROGRESS_BAR_DIALOG_BODY'\n        }\n      });\n    }\n\n    function showReloadToast() {\n      $mdToast.show($mdToast.simple()\n        .textContent($filter('translate')('ORDER.ERROR_ORDER_DELIVERY_STATUS_CHANGED'))\n        .action($filter('translate')('TOOLBAR.REFRESH'))\n        .hideDelay(5000)\n        .highlightAction(true)\n        .position('top right')).then(function(response) {\n        if (response === 'ok') {\n          location.reload();\n        }\n      });\n    }\n\n    function sendReloadTableEvent(response) {\n      $rootScope.$broadcast('reload-table::orderProductsList', response);\n      $rootScope.$broadcast('reload-totals::orderProductsList', response);\n    }\n\n    function sendChangeStatusEvent(status) {\n      $rootScope.$broadcast('changeOrderStatus::orderType', { status: status });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.inventory-product', [])\n    .service('InventoryProductService', InventoryProductService)\n\n  /** @ngInject */\n  function InventoryProductService() {\n\n    this.existsProductVariantWithVariant = existsProductVariantWithVariant;\n    this.existsProductVariantWithVariantByVariants = existsProductVariantWithVariantByVariants;\n\n    /**\n     * Returns true if any product_variants of the given product has the given variant\n     * Otherwise seturns false\n     * @param product\n     * @param variant\n     */\n    function existsProductVariantWithVariant(product, variant) {\n      return product.product_variants.some(function(pv){\n        return pv.variants.some(function(v){\n          return v.id == variant.id;\n        });\n      });\n    }\n\n    /**\n     * Returns true if any product_variants of the given product has the given variant\n     * Otherwise seturns false\n     * @param product\n     * @param variant\n     */\n    function existsProductVariantWithVariantByVariants(variants, variant) {\n      return variants.some(function(pv){\n        return pv.variants.some(function(v){\n          if(angular.isUndefined(v.id))\n            return v == variant.id;\n          return v.id == variant.id;\n        });\n      });\n    }\n  }\n\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.inventory-configuration', [])\n    .service('InventoryConfigurationService', InventoryConfigurationService);\n\n  /** @ngInject */\n  function InventoryConfigurationService($q, api, InventoryConfiguration, $filter, Session, INVOICE_TYPES, INVOICE_TYPES_REVERSE) {\n\n    this.get = function() {\n      var deferred = $q.defer();\n      api.inventories.inventoryConfiguration.get({}, function(response) {\n        var data = response && response.results && response.results.length ? response.results[0] : response;\n        deferred.resolve(new InventoryConfiguration(data));\n      }, function() {\n        deferred.reject();\n      });\n      return deferred.promise;\n    };\n\n\n    this.getEmailTemplate = function(invoiceType, documentName, contact) {\n      var deferred = $q.defer();\n\n      var contactName = '';\n      if (contact && contact.first_name) {\n        contactName = ' ' + contact.first_name;\n      } else if (contact && contact.name) {\n        contactName = ' ' + contact.name;\n      }\n\n      var defaultSubject = documentName + ' (' + Session.company.name + ')';\n      var defaultMessage = $filter('translate')('INVOICE.DEFAULT_EMAIL_MESSAGE', {\n        contactName: contactName,\n        documentText: $filter('translate')('INVOICE.DEFAULT_EMAIL_MESSAGE_' + INVOICE_TYPES_REVERSE[invoiceType || INVOICE_TYPES.INVOICE], {\n          documentName: documentName\n        }),\n        userName: Session.user.getFullName(),\n        companyName: Session.company.name\n      });\n\n      this.get().then(function(configuration) {\n        var subject = defaultSubject;\n        var message = defaultMessage;\n\n        if (configuration) {\n          if (invoiceType === INVOICE_TYPES.INVOICE) {\n            if (configuration.pos_order_invoice_email_subject) {\n              subject = configuration.pos_order_invoice_email_subject;\n            }\n            if (configuration.pos_order_invoice_email_body) {\n              message = configuration.pos_order_invoice_email_body;\n            }\n          } else {\n            if (configuration.pos_order_email_subject) {\n              subject = configuration.pos_order_email_subject;\n            }\n            if (configuration.pos_order_email_body) {\n              message = configuration.pos_order_email_body;\n            }\n          }\n        }\n\n        deferred.resolve({ subject: subject, message: message });\n      }, function() {\n        deferred.resolve({ subject: defaultSubject, message: defaultMessage });\n      });\n\n      return deferred.promise;\n    };\n  }\n})();\n\n\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.feature', [])\n    .factory('FeatureService', featureService);\n\n  /** @ngInject */\n  function featureService($http) {\n    var featureService = {\n      featuresData: {},\n      defaultFeature: {\n        name: 'UPGRADE_PLAN.FEATURE_NOT_ACTIVE',\n        description: null,\n        landingLink: 'https://stockagile.com/',\n        academyLink: null,\n        imageSrc: 'assets/images/features/feature-default.5f515e69.png'\n      }\n    };\n\n    $http.get('assets/data/feature_data.555463cc.json').then(function(response) {\n      if (response.data) {\n        featureService.featuresData = response.data;\n      }\n    });\n\n    featureService.getFeatureDict = function(feature) {\n      if (featureService.featuresData[feature]) {\n        // If it is an alias\n        if(typeof featureService.featuresData[feature] === \"string\"){\n          return featureService.featuresData[featureService.featuresData[feature]];\n        }\n        return featureService.featuresData[feature];\n      }\n      return featureService.defaultFeature;\n    };\n\n    featureService.getFeatureName = function(feature) {\n      if (featureService.featuresData[feature]) {\n        // If it is an alias\n        if(typeof featureService.featuresData[feature] === \"string\"){\n          return featureService.featuresData[feature];\n        }\n      }\n      return '';\n    };\n\n    return featureService;\n  }\n}());\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.services.feature-flag', [])\n      .service('FeatureFlagService', FeatureFlagService);\n\n    /** @ngInject */\n    function FeatureFlagService(Session) {\n      var service = this;\n      \n      service.FEATURE_FLAG_CREATE_POS_ORDER_V2 = 'CREATE_POS_ORDER_V2';\n      service.FEATURE_FLAG_ACCOUNTING_INVOICE_V2 = 'CREATE_INVOICE_V2';\n      service.FEATURE_FLAG_PRINTER_POS_ORDER_INVOICE = 'PRINTER_POS_ORDER_INVOICE';\n\n\n      service.selectEndpoint = function(flag, endpointIfFalse, endpointIfTrue) {\n        return service.isFeatureFlagEnabled(flag)\n          ? endpointIfTrue\n          : endpointIfFalse;\n      };\n\n      service.isFeatureFlagEnabled = function(flag) {\n        return Array.isArray(Session.company.feature_flags) &&\n               Session.company.feature_flags.includes(flag);\n      };\n\n    }\n  }());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.default-register-service', [])\n    .service('DefaultRegisterService', _DefaultRegisterService);\n\n  /** @ngInject */\n  function _DefaultRegisterService(\n    $mdDialog,\n    $q,\n    $document,\n    Session,\n    api,\n    HTTP_STATUS\n  ) {\n\n    var service = this;\n\n    // Data\n    service.defaultRegister = null;\n\n    // Methods\n    service.getDefaultRegister = getDefaultRegister;\n    service.requestDefaultRegister = requestDefaultRegister;\n    service.setDefaultRegister = setDefaultRegister;\n    service.getDefaultRegisterIdFromStorage = getDefaultRegisterIdFromStorage;\n    service.setDefaultRegisterIdToStorage = setDefaultRegisterIdToStorage;\n    service.saveDefaultRegister = saveDefaultRegister;\n\n    function getDefaultRegister() {\n      var deferred = $q.defer();\n      if (service.defaultRegister) {\n        deferred.resolve(service.defaultRegister);\n        return deferred.promise;\n      }\n      if(service.getDefaultRegisterIdFromStorage()){\n        api.sales.registers.get(\n        {\n          id: service.getDefaultRegisterIdFromStorage(),\n          serializer: 'RegisterSimpleSerializer'\n        }, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            setDefaultRegister(results);\n            deferred.resolve(results);\n          } else {\n            deferred.resolve(null);\n          }\n        });\n        return deferred.promise;\n      }\n      deferred.resolve(null);\n      return deferred.promise;\n    }\n\n    function requestDefaultRegister() {\n      var deferred = $q.defer();\n      $mdDialog.show({\n        controller: 'SelectDefaultRegisterDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/printer/dialogs/select-default-register/select-default-register-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        resolve: {\n          RegistersData: function(apiResolver) {\n            return apiResolver.resolve('sales.registers@list', { serializer: 'RegisterSimpleSerializer' });\n          }\n        }\n      }).then(function(defaultRegister) {\n        setDefaultRegister(defaultRegister);\n        deferred.resolve(defaultRegister);\n      }, function() {\n        deferred.resolve(null);\n      });\n      return deferred.promise;\n    }\n\n    // Private function\n    function setDefaultRegister(defaultRegister) {\n      service.defaultRegister = angular.copy(defaultRegister);\n      localStorage.setItem(Session.company.id + '::defaultRegister', defaultRegister.id);\n    }\n\n    function getDefaultRegisterIdFromStorage(){\n      return localStorage.getItem(Session.company.id + '::defaultRegister');\n    }\n\n    function setDefaultRegisterIdToStorage(defaultRegisterId){\n      localStorage.setItem(Session.company.id + '::defaultRegister', defaultRegisterId);\n    }\n\n    function saveDefaultRegister(defaultRegister) {\n\n      api.sales.registers.update(\n        {\n          id: defaultRegister.id,\n          option: 'set-printer-ip',\n          printer_ip: defaultRegister.printer_ip,\n          use_ssl: defaultRegister.use_ssl,\n          printer_device_id: defaultRegister.printer_device_id\n        },\n        function(results, fn, status) {\n          if (status !== HTTP_STATUS.HTTP_200_OK) {\n            console.error('Unable to put the defaultRegister');\n            return;\n          }\n          service.setDefaultRegister(defaultRegister);\n        });\n    }\n\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.comercia', [])\n    .service('Comercia', comercia);\n\n  /** @ngInject */\n  function comercia($http, $q, PAYMENT_METHOD_GATEWAYS, api) {\n    var service = this;\n    var controller = new AbortController();\n\n    function getUrl(pos_order_payment_method) {\n      var port = ':2000';\n      if (api.isProduction()) {\n        port = ':2000';\n      }\n      return 'http://' + pos_order_payment_method.payment_method_instance.payment_gateway.meta.device_ip + port;\n    }\n\n    service.abortPayment = function () {\n      controller.abort();\n    }\n\n    service.initPinPad = function (pos_order_payment_method) {\n      if (pos_order_payment_method.payment_method_instance.payment_gateway.gateway !== PAYMENT_METHOD_GATEWAYS.COMERCIA) {\n        var deffered = $q.defer();\n        deffered.reject({'error': true});\n        return deffered.promise;\n      }\n      var returnDto = {\n        'success': false,\n        'data': {},\n\n        'errors': false,\n        'cancel': false\n      };\n      return $http.post(\n        getUrl(pos_order_payment_method) + '/v1/transactions/init',\n        {\n          'user': pos_order_payment_method.payment_method_instance.payment_gateway.meta.user,\n          'password': pos_order_payment_method.payment_method_instance.payment_gateway.meta.password\n        }\n      ).then(function (response) {\n\n        if (response.status !== 200) {\n          returnDto.error = true;\n          returnDto.errors = response.statusText ? response.statusText : true;\n          return returnDto;\n        }\n        if (response.data.resultCode !== 1000) {\n          returnDto.error = true;\n          returnDto.errors = response.data.resultMessage ? response.data.resultMessage : true;\n          return returnDto;\n        }\n        returnDto.success = true;\n        returnDto.data = response.data;\n        return returnDto;\n      }, function (error) {\n        returnDto.error = true;\n        returnDto.errors = error;\n        return returnDto;\n      });\n    };\n\n    service.callPayComercia = function (pos_order_payment_method, pos_order) {\n      if (pos_order_payment_method.payment_method_instance.payment_gateway.gateway !== PAYMENT_METHOD_GATEWAYS.COMERCIA) {\n        var deffered = $q.defer();\n        deffered.reject({'error': true});\n        return deffered.promise;\n      }\n\n      return this.isLastTransactionFinished(pos_order_payment_method, pos_order).then(\n        function (response) {\n          var returnDto = {\n            'success': false,\n            'data': {},\n            'errors': false,\n            'cancel': false\n          };\n          if (response !== false && response.data.resultCode === 0) {\n            returnDto.success = true;\n            returnDto.data = response.data;\n            return returnDto;\n          }\n          controller = new AbortController();\n\n          return fetch(\n            getUrl(pos_order_payment_method) + '/v1/transactions/payment',\n            {\n              method: 'POST',\n              headers: {\n                'Content-Type': 'application/json'\n              },\n              body: JSON.stringify(\n                {\n                  'orderId': pos_order.id,\n                  'amount': pos_order_payment_method.amount,\n                  'description': pos_order_payment_method.name\n                }\n              ),\n              signal: controller.signal\n            }\n          ).then(function (response) {\n            return response.json();\n          }).then(function (response) {\n            if (response.resultCode !== 0) {\n              if (response.resultCode === 16) {\n                returnDto.error = true;\n                returnDto.cancel = true;\n                returnDto.errors = response.resultMessage ? response.resultMessage : true;\n                return returnDto;\n              } else {\n                returnDto.error = true;\n                returnDto.errors = response.resultMessage ? response.resultMessage : true;\n                return returnDto;\n              }\n            }\n            returnDto.success = true;\n            returnDto.data = response;\n            return returnDto;\n          }).catch(function (error) {\n            returnDto.error = true;\n            returnDto.errors = error;\n            return returnDto;\n          });\n        }\n      );\n    };\n\n    service.callRefundComerciaPayment = function (pos_order_payment_method, pos_order) {\n      if (pos_order_payment_method.payment_method_instance.payment_gateway.gateway !== PAYMENT_METHOD_GATEWAYS.COMERCIA) {\n        var deffered = $q.defer();\n        deffered.reject({'error': true});\n        return deffered.promise;\n      }\n\n      return this.isLastTransactionFinished(pos_order_payment_method, pos_order).then(\n        function (response) {\n          var returnDto = {\n            'success': false,\n            'data': {},\n            'errors': false,\n            'cancel': false\n          };\n\n          if (response !== false && response.data.resultCode === 0) {\n            returnDto.success = true;\n            returnDto.data = response.data;\n            return returnDto;\n          }\n\n          return $http.post(\n            getUrl(pos_order_payment_method) + '/v1/transactions/refund',\n            {\n              'orderId': pos_order.id,\n              'amount': pos_order_payment_method.amount * -1,\n              'description': pos_order_payment_method.name,\n              'transactionId': pos_order_payment_method.payment_gateway_data.meta.devolution_transaction_id\n            }\n          ).then(function (response) {\n            if (response.data.resultCode !== 0) {\n              if (response.data.resultCode === 16) {\n                returnDto.error = true;\n                returnDto.cancel = true;\n                returnDto.errors = response.data.resultMessage ? response.data.resultMessage : true;\n                return returnDto;\n              } else {\n                returnDto.error = true;\n                returnDto.errors = response.data.resultMessage ? response.data.resultMessage : true;\n                return returnDto;\n              }\n            }\n            returnDto.success = true;\n            returnDto.data = response.data;\n            return returnDto;\n          });\n        }\n      );\n    };\n\n    service.callCancel = function (posOrderPaymentMethod) {\n      if (posOrderPaymentMethod.payment_method_instance.payment_gateway.gateway !== PAYMENT_METHOD_GATEWAYS.COMERCIA) {\n        var deffered = $q.defer();\n        deffered.reject({'error': true});\n        return deffered.promise;\n      }\n\n      return $http.get(\n        getUrl(posOrderPaymentMethod) + '/v1/transactions/cancel'\n      );\n    };\n\n    service.isLastTransactionFinished = function (posOrderPaymentMethod, posOrder) {\n      var deferred = $q.defer();\n\n      if (posOrderPaymentMethod.payment_method_instance.payment_gateway.gateway !== PAYMENT_METHOD_GATEWAYS.COMERCIA) {\n        deferred.reject({'error': true});\n        return deferred.promise;\n      }\n\n      $http.get(\n        getUrl(posOrderPaymentMethod) + '/v1/transactions/last'\n      ).then(\n        function (response) {\n          if (response.data && +response.data.orderId === posOrder.id) {\n            deferred.resolve(response);\n          }\n          deferred.resolve(false);\n        }\n      );\n      return deferred.promise;\n    }\n  }\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.barcode', [])\n    .service('BarcodeService', barcodeService);\n\n  /** @ngInject */\n  function barcodeService(\n    $rootScope,\n    $document,\n    $timeout,\n    $filter,\n    ND_BARCODE_PREFIXES,\n    GS1Datamatrix\n  ) {\n    var service = this;\n\n    // Cons\n    service.MIN_LENGTH = 3;\n    service.BARCODE_MODES = {\n      BARCODE: 'BARCODE',\n      UID: 'UID'\n    };\n\n    // Data\n    service.value = '';\n    service.enabled = false;\n    service.inputDelay = 75;\n    service.mode = service.BARCODE_MODES.BARCODE;\n    service.subscriptions = {\n      barcode: {},\n      uid: {},\n      posOrder: {},\n      devolutionCard: {},\n      fulfillment: {},\n      gs1Datamatrix: {}\n    };\n\n    // Functions\n    service.onKeyDown = function(e) {\n      if (!service.enabled) {\n        return;\n      }\n      if (e.keyCode === 13) {\n        service.sendValue();\n      }\n    };\n\n    service.onKeyPress = function(e) {\n      if (!service.enabled) {\n        return;\n      }\n      service.cancelTimeout();\n      service.addValue(e);\n      service.timeout = $timeout(service.sendValue, service.inputDelay);\n    };\n\n    service.setDelayInput = function(delay) {\n      service.inputDelay = delay;\n    };\n\n    service.sendValue = function() {\n      service.cancelTimeout();\n\n      if (service.value.length < service.MIN_LENGTH) {\n        service.value = '';\n        return;\n      }\n\n      var sanitizedValue = service.getSanitizeValue();\n      service.value = '';\n      if (!sanitizedValue) {\n        return;\n      }\n\n      if (service.isPosOrderBarcode()) {\n        service.callCallbacks('posOrder', sanitizedValue);\n      } else if (service.isDevolutionCardBarcode()) {\n        service.callCallbacks('devolutionCard', sanitizedValue);\n      } else if (service.isFulfillmentBarcode()) {\n        service.callCallbacks('fulfillment', sanitizedValue);\n      } else if (service.isGS1Datamatrix(sanitizedValue)) {\n        var gs1Datamatrix = new GS1Datamatrix(sanitizedValue);\n        service.callCallbacks('gs1Datamatrix', gs1Datamatrix);\n      } else if (service.mode === service.BARCODE_MODES.BARCODE) {\n        service.callCallbacks('barcode', sanitizedValue);\n      } else if (service.mode === service.BARCODE_MODES.UID) {\n        service.callCallbacks('uid', sanitizedValue);\n      }\n    };\n\n    service.callCallbacks = function(attribute, value) {\n      Object.keys(service.subscriptions[attribute]).forEach(function(callbackId) {\n        service.subscriptions[attribute][callbackId](value);\n      });\n    };\n\n    service.cancelTimeout = function() {\n      if (service.timeout) {\n        $timeout.cancel(service.timeout);\n      }\n    };\n\n    service.addValue = function(e) {\n      if (service.isPrintableAsciiCharacter(e.keyCode)) {\n        service.value += e.key;\n      }\n    };\n\n    service.isPrintableAsciiCharacter = function(keycode) {\n      return keycode >= 32;\n    };\n\n    service.isPosOrderBarcode = function() {\n      return service.value.substring(0, 4).toLowerCase() === (ND_BARCODE_PREFIXES.POS_ORDER_BARCODE_PREFIX + '.');\n    };\n\n    service.isDevolutionCardBarcode = function() {\n      return service.value.substring(0, 4).toLowerCase() === (ND_BARCODE_PREFIXES.DEVOLUTION_CARD_BARCODE_PREFIX + '.');\n    };\n\n    service.isFulfillmentBarcode = function() {\n      return service.value.substring(0, 4).toLowerCase() === (ND_BARCODE_PREFIXES.FULFILLMENT_BARCODE_PREFIX + '.');\n    };\n\n    service.isGS1Datamatrix = function(value) {\n      return GS1Datamatrix.isGS1Datamatrix(value);\n    };\n\n    service.getLotNumberFromDatamatrix = function(value) {\n      return new GS1Datamatrix(value).getLot();\n    };\n\n    service.getSerialNumberFromDatamatrix = function(value) {\n      return new GS1Datamatrix(value).getSerialNumber();\n    };\n\n    service.getSkuFromDatamatrix = function(value) {\n      return new GS1Datamatrix(value).getSKU();\n    };\n\n    service.getAllParsedData = function(value) {\n      return new GS1Datamatrix(value).getAllParsedData();\n    };\n\n    service.sendBarcode = function() {};\n\n    service.getBarcodeEventId = function() {\n      return service.BARCEDE_EVENT_ID;\n    };\n\n    service.getSanitizeValue = function() {\n      var result = angular.copy(service.value);\n      result = result.trim();\n      return result;\n    };\n\n    service.setMode = function(mode) {\n      service.mode = mode;\n    };\n\n    service.setBarcodeMode = function() {\n      service.setMode(service.BARCODE_MODES.barcode);\n    };\n\n    service.setUidMode = function() {\n      service.setMode(service.BARCODE_MODES.uid);\n    };\n\n    service.isBarcodeMode = function() {\n      return service.mode === service.BARCODE_MODES.BARCODE;\n    };\n\n    service.isUidMode = function() {\n      return service.mode === service.BARCODE_MODES.UID;\n    };\n\n    service.subscribeCallback = function(attribute, callback) {\n      service.setEnabled(true);\n      var subscriptionId = Math.random();\n      service.subscriptions[attribute][subscriptionId] = callback;\n      return subscriptionId;\n    };\n\n    service.unsubscribe = function(attribute, subscriptionId) {\n      delete service.subscriptions[attribute][subscriptionId];\n      service.setEnabled(Object.keys(service.subscriptions.barcode).length ||\n        Object.keys(service.subscriptions.uid).length ||\n        Object.keys(service.subscriptions.posOrder).length ||\n        Object.keys(service.subscriptions.devolutionCard).length ||\n        Object.keys(service.subscriptions.fulfillment).length ||\n        Object.keys(service.subscriptions.gs1Datamatrix).length);\n    };\n\n    service.setEnabled = function(value) {\n      service.enabled = value;\n    };\n\n    service.subscribeBarcode = function(callback) {\n      return service.subscribeCallback('barcode', callback);\n    };\n\n    service.subscribeUid = function(callback) {\n      return service.subscribeCallback('uid', callback);\n    };\n\n    service.subscribePosOrder = function(callback) {\n      return service.subscribeCallback('posOrder', callback);\n    };\n\n    service.subscribeDevolutionCard = function(callback) {\n      return service.subscribeCallback('devolutionCard', callback);\n    };\n\n    service.subscribeFulfillment = function(callback) {\n      return service.subscribeCallback('fulfillment', callback);\n    };\n\n    service.subscribeGS1Datamatrix = function(callback) {\n      return service.subscribeCallback('gs1Datamatrix', callback);\n    };\n\n    service.unsubscribeBarcode = function(subscriptionId) {\n      service.unsubscribe('barcode', subscriptionId);\n    };\n\n    service.unsubscribeUid = function(subscriptionId) {\n      service.unsubscribe('uid', subscriptionId);\n    };\n\n    service.unsubscribePosOrder = function(subscriptionId) {\n      service.unsubscribe('posOrder', subscriptionId);\n    };\n\n    service.unsubscribeDevolutionCard = function(subscriptionId) {\n      service.unsubscribe('devolutionCard', subscriptionId);\n    };\n\n    service.unsubscribeFulfillment = function(subscriptionId) {\n      service.unsubscribe('fulfillment', subscriptionId);\n    };\n\n    service.unsubscribeGS1Datamatrix = function(subscriptionId) {\n      service.unsubscribe('gs1Datamatrix', subscriptionId);\n    };\n\n    service.toggleMode = function(modeA, modeB) {\n      if (service.mode === modeA) {\n        service.setMode(modeB);\n      } else {\n        service.setMode(modeA);\n      }\n    };\n\n    $document.bind('keydown.BarcodeService', service.onKeyDown);\n    $document.bind('keypress.BarcodeService', service.onKeyPress);\n    $rootScope.$on('BarcodeService::requestBarcode', function() {\n      service.value = window.prompt($filter('translate')('GENERAL.ENTER_A_BARCODE'));\n      if (service.value) {\n        service.sendValue();\n      }\n    });\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.auth', [])\n    .factory('AuthService', authService);\n\n  /** @ngInject */\n  function authService($q, $cookies, Session, api, apiResolver, User, HTTP_STATUS) {\n    var authService = {};\n    authService.rememberPassword = false;\n    authService.tempLoginPromise = null;\n\n    authService.login = function(credentials, remember) {\n      authService.rememberPassword = remember;\n      authService.tempLoginPromise = $q.defer();\n\n      api.account.login.save(\n        // Data\n        {\n          username: credentials.username,\n          password: credentials.password\n        },\n\n        // Success\n        authService.postLogIn,\n\n        // Error\n        function(response) {\n          Session.destroy();\n          authService.tempLoginPromise.resolve(response);\n        }\n      );\n\n      return authService.tempLoginPromise.promise;\n    };\n\n    authService.postLogIn = function(response) {\n      if (response.token) {\n        response.user = new User(response.user);\n\n        // Pass the user to Session service\n        if (authService.rememberPassword) {\n          localStorage.setItem('token', response.token);\n          Session.addUser(response.user.username, response.token, response.user, true);\n\n        } else {\n          sessionStorage.setItem('token', response.token);\n          Session.addUser(response.user.username, response.token, response.user, false);\n        }\n\n        // Remove contact user if exists\n        $cookies.remove('contact_token');\n\n        // Loading the session\n        Session.loadFromStorage();\n        Session.loadFromServer(apiResolver).then(function() {\n          if (authService.tempLoginPromise) {\n            authService.tempLoginPromise.resolve(response);\n          }\n        });\n      } else {\n        Session.destroy();\n        if (authService.tempLoginPromise) {\n          authService.tempLoginPromise.resolve(response);\n        }\n      }\n    };\n\n    authService.signup = function(username, email, password) {\n\n      return api.account.signup.save(\n        // Data\n        {\n          username: username,\n          email: email,\n          password: password\n        },\n\n        // Success\n        function(response) {\n          //localStorage.setItem('token', response.token);\n          //Session.create(response.token, response.user);\n          //return response.user;\n        },\n\n        // Error\n        function(response) {\n          Session.destroy();\n          return response;\n        }\n      ).$promise;\n\n    };\n\n    authService.logout = function() {\n      Session.unsubscribeNotifications();\n      Session.removeUser(Session.user.username);\n      Session.destroy();\n    };\n\n    authService.isAuthenticated = function() {\n      return !!Session.token;\n    };\n\n    authService.isAuthorized = function(authorizedRoles) {\n      if (!angular.isArray(authorizedRoles)) {\n        authorizedRoles = [authorizedRoles];\n      }\n      return (authService.isAuthenticated() &&\n        authorizedRoles.indexOf(Session.user.role) !== -1);\n    };\n\n    authService.changeUser = function(user) {\n      return Session.changeUser(user).then(function(changedSuccessfully){\n        if(changedSuccessfully){\n          // Call api to update Workday object\n          apiResolver.resolve('account.user@get').then(function(response) {\n            if (response.id) {\n              Session.user = new User(response);\n              return true;\n            }\n            return false;\n          });\n        }\n        return changedSuccessfully;\n      });\n    };\n\n    authService.resetPasswordRequest = function(email) {\n      var resetPasswordRequestPromise = $q.defer();\n\n      api.account.requestResetEmail.save(\n        // Data\n        {\n          email: email\n        },\n        // Success\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            resetPasswordRequestPromise.resolve(response);\n          } else {\n            resetPasswordRequestPromise.reject(response);\n          }\n        },\n        // Error\n        function(response) {\n          resetPasswordRequestPromise.reject(response);\n        }\n      );\n\n      return resetPasswordRequestPromise.promise;\n    };\n\n    authService.passwordReset = function(uid, token) {\n      var passwordResetPromise = $q.defer();\n\n      api.account.passwordReset.get(\n        // Data\n        {\n          uid: uid,\n          token: token\n        },\n        // Success\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            passwordResetPromise.resolve(response);\n          } else {\n            passwordResetPromise.reject(response);\n          }\n        },\n        // Error\n        function(response) {\n          passwordResetPromise.reject(response);\n        }\n      );\n\n      return passwordResetPromise.promise;\n    };\n\n    authService.passwordResetComplete = function(uid, token, password) {\n      var passwordResetCompletePromise = $q.defer();\n\n      api.account.passwordResetComplete.patch(\n        // Data\n        {\n          uid: uid,\n          token: token,\n          password: password\n        },\n        // Success\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            passwordResetCompletePromise.resolve(response);\n          } else {\n            passwordResetCompletePromise.reject(response);\n          }\n        },\n        // Error\n        function(response) {\n          passwordResetCompletePromise.reject(response);\n        }\n      );\n\n      return passwordResetCompletePromise.promise;\n    };\n\n    return authService;\n  }\n\n}());\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.services.audio', [])\n    .service('Audio', audio);\n\n  /** @ngInject */\n  function audio() {\n\n    var audio = this;\n\n    var errorAudio = new Audio('https://s3.eu-south-2.amazonaws.com/prod.media.stockagile.com/sounds/error-sound.wav');\n\n    audio.playErrorSound = function() {\n      errorAudio.play();\n    };\n\n\n  }\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.services.artifact', [])\n    .service('ArtifactService', artifactService);\n\n  /** @ngInject */\n  function artifactService(\n    $rootScope,\n    $timeout,\n    $interval,\n    $mdDialog,\n    $sce,\n    $mdToast,\n    $http,\n    $filter,\n    api,\n    ARTIFACT_STATUSES,\n    HTTP_STATUS\n  ) {\n    var service = this;\n\n    // Consts\n    service.PULLING_FREQUENCE = 2 * 1000;\n    service.timeout = null;\n\n    // Functions\n    service.startPulling = function (artifactId, callback) {\n      service.openInfoDialog();\n      service.timeout = $interval(function () {\n        api.inventories.artifacts.get({\n          id: artifactId,\n          option: 'get-status'\n        }, function (result, internalCallback, status) {\n          if (result.status === ARTIFACT_STATUSES.ARTIFACT_STATUS_FINISHED ||\n            result.status === ARTIFACT_STATUSES.ARTIFACT_STATUS_ERROR) {\n            $interval.cancel(service.timeout);\n            service.manageArtifact(artifactId, function (url) {\n              callback(url);\n            });\n          }\n        });\n      }, service.PULLING_FREQUENCE);\n    };\n\n    service.manageArtifact = function (artifactId, callback) {\n      api.inventories.artifacts.get({\n        id: artifactId\n      }, function (response, internalCallback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          if (response.url) {\n            $mdDialog.hide();\n            service.openUrl(response.url);\n            callback(response.url);\n          }\n          if (response.errors) {\n            service.openError(response.errors);\n          }\n        }\n      });\n    };\n\n    service.openInfoDialog = function () {\n      service.openAlertDialog(\n        $filter('translate')('GENERAL.ARTIFACT_STARTED_SUCCESSFULLY_TITLE'),\n        $filter('translate')('GENERAL.ARTIFACT_STARTED_SUCCESSFULLY_MSG')\n      );\n    };\n\n    service.openUrl = function (url) {\n      fetch(url)\n        .then(function (response) {\n          return response.text();\n        })\n        .then(function (data) {\n          $rootScope.$emit('ndPrinter::printSendcloudLabel', {\n            b64: data\n          });\n        });\n    };\n\n    service.downloadLabel = function (url) {\n      fetch(url)\n        .then(function (response) {\n          return response.text();\n        })\n        .then(function (data) {\n          var downloadLink = document.createElement('a');\n          downloadLink.href = 'data:application/pdf;base64,' + data;\n          var fileName = \"label\";\n          downloadLink.download = fileName + '.pdf';\n          document.body.appendChild(downloadLink);\n          downloadLink.click();\n          document.body.removeChild(downloadLink);\n        });\n    };\n\n    service.openError = function (errors) {\n      var htmlContent = $filter('translate')('GENERAL.SENDCLOUD_ARTIFACT_HAS_ERRORS_MSG');\n      htmlContent += '<br><br>' + errors.error;\n      service.openAlertDialog(\n        $filter('translate')('GENERAL.SENDCLOUD_ARTIFACT_HAS_ERRORS_TITLE'),\n        $sce.trustAsHtml(htmlContent)\n      );\n    };\n\n    service.openAlertDialog = function (title, body, buttonText) {\n      $mdDialog.show(\n        $mdDialog.alert()\n          .clickOutsideToClose(true)\n          .title(title)\n          .htmlContent(body)\n          .ok(buttonText || $filter('translate')('GENERAL.CLOSE'))\n      );\n    };\n  }\n\n}());\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.workday', [])\n    .factory('Workday', _Workday);\n\n  /** @ngInject */\n  function _Workday() {\n\n    function Workday(value) {\n      this.user = value ? value.user : null;\n      this.date = value && value.date ? new Date(value.date) : null;\n      this.start_time = value && value.start_time ? new Date(value.start_time) : null;\n      this.end_time = value && value.end_time ? new Date(value.end_time) : null;\n      this.work_time = value ? value.work_time : null;\n      this.pause_time = value ? value.pause_time : null;\n      this.status = value ? value.status : null; // :WORKDAY_STATUSES\n      this.activities = value ? value.activities : null;\n      this.start_notes = value ? value.start_notes : null;\n      this.end_notes = value ? value.end_notes : null;\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return Workday;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.workday-activity', [])\n    .factory('_WorkdayActivity', _WorkdayActivity);\n\n  /** @ngInject */\n  function _WorkdayActivity() {\n\n    function WorkdayActivity(value) {\n      this.duration = value ? value.duration : null;\n      this.end_time = value ? new Date(value.end_time) : null;\n      this.start_time = value ? new Date(value.start_time) : null;\n      this.type = value ? value.type : null; // :WORKDAY_ACTIVITY_TYPES\n      this.start_notes = value ? value.start_notes : null;\n      this.end_notes = value ? value.end_notes : null;\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return WorkdayActivity;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.variant', [])\n    .factory('Variant', _Variant);\n\n  /** @ngInject */\n  function _Variant() {\n\n    function Variant(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // Variant attributes\n\n      this.name = value ? value.name : null;\n      this.code = value ? value.code : null;\n      \n      this.category = value ? value.category : null;\n      this.category_position = value ? value.category_position : null;\n      \n      this.position = value ? value.position : null;\n      \n    }\n\n    return Variant;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.user', [])\n    .factory('User', _User);\n\n  /** @ngInject */\n  function _User(Workday, Role, USER_ROLES) {\n\n    function User(value) {\n      this.id = value ? value.id : null;\n      this.company = value ? value.company : null;\n\n      this.username = value ? value.username : null;\n      this.first_name = value ? value.first_name : null;\n      this.last_name = value ? value.last_name : null;\n      this.lang = value ? value.lang : null;\n      this.pin = value ? value.pin : null;\n      this.vat = value ? value.vat : null;\n      this.has_notifications = value ? value.has_notifications : false;\n\n      this.email = value ? value.email : null;\n      this.phone = value ? value.phone : null;\n\n      this.is_staff = value ? value.is_staff : null;\n      this.is_active = value ? value.is_active : null;\n      this.date_joined = value && value.date_joined ? new Date(value.date_joined) : null;\n      this.workday = value ? new Workday(value.workday) : new Workday();\n\n      this.terms_and_conditions_accepted = value ? value.terms_and_conditions_accepted : false;\n      this.terms_and_conditions_accepted_at = value && value.terms_and_conditions_accepted_at ? new Date(value.terms_and_conditions_accepted_at) : null;\n\n      // TODO create Warehouse factory\n      this.warehouses = value ? value.warehouses : [];\n      this.signup = value ? value.signup : null;\n      this.signup_finished = value ? value.signup_finished : null;\n      this.signup_token = value ? value.signup_token : null;\n\n      this.roles = [];\n      if (value && value.roles) {\n        this.roles = value.roles.map(function (role) {\n          return new Role(role);\n        });\n      }\n\n      this.has_multiple_companies = value ? value.has_multiple_companies : null;\n      this.companies = value ? value.companies : [];\n\n      // Methods\n      this.isSuperAdmin = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_SUPERUSER);\n      };\n\n      this.isOwner = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_OWNER);\n      };\n\n      this.isProductEditor = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_PRODUCTS_EDITOR);\n      };\n\n      this.isRetailManager = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_RETAIL_MANAGER);\n      };\n\n      this.isRetailVendor = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_RETAIL_VENDOR);\n      };\n\n      this.isWholesaleManager = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_WHOLESALE_MANAGER);\n      };\n\n      this.isWholesaleVendor = function(){\n        return this.__hasRole(USER_ROLES.USER_ROLE_WHOLESALE_VENDOR);\n      };\n\n      this.__hasRole = function(roleId){\n        return this.roles.findIndex(function(role) {\n          return role.id === roleId;\n        }) !== -1;\n      };\n\n      this.getFullName = function(){\n        return [this.first_name, this.last_name].join(' ');\n      };\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return User;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.uid-stock', [])\n    .factory('UidStock', _UidStock);\n\n  /** @ngInject */\n  function _UidStock() {\n\n    function UidStock(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.company_id = value ? value.company_id : null;\n      this.product_id = value ? value.product_id : null;\n      this.product_code = value ? value.product_code : null;\n      this.uid = value ? value.uid : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.product_variant_name = value ? value.product_variant_name : null;\n      this.stock = value ? value.stock : null;\n      this.expiration_date = value ? value.expiration_date : null;\n      this.warehouse = value ? value.stock_warehouse_id : null;\n      this.stock_warehouse_name = value ? value.stock_warehouse_name : null;\n      this.amount = value ? value.amount : 1;\n      this.received = value ? value.received : null;\n      this.notes = value ? value.notes : null;\n      this.reason = value ? value.reason : null;\n\n\n      // Invoice attributes\n      //TODO\n    }\n\n    return UidStock;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.subtotal-by-tax', [])\n    .factory('SubtotalByTax', _SubtotalByTax);\n\n  /** @ngInject */\n  function _SubtotalByTax(Utils) {\n\n    function SubtotalByTax(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // SubtotalByTax attributes\n      this.amount = value ? value.amount : null;\n      this.name = value ? value.name : null;\n      this.percent_value = value ? value.percent_value : null;\n      this.surcharge = value ? value.surcharge : null;\n      this.surcharge_amount = value ? value.surcharge_amount : null;\n      this.surcharge_difference = value ? value.surcharge_difference : null;\n      this.total_price_excl_tax_sum = value ? value.total_price_excl_tax_sum : null;\n\n      this.getTotalRoundedTax = function () {\n        var surcharge_difference = this.surcharge_difference;\n        if (surcharge_difference === null || surcharge_difference === undefined) {\n          surcharge_difference = this.surcharge_amount - this.amount;\n        }\n        return Utils.roundPrice(surcharge_difference, 2) + Utils.roundPrice(this.amount, 2);\n      }\n    }\n\n    return SubtotalByTax;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.subscription', [])\n    .factory('Subscription', _Subscription);\n\n  /** @ngInject */\n  function _Subscription(\n    ContractedPlan,\n    Coupon,\n    SUBSCRIPTION_PERIOD\n  ) {\n\n    function Subscription(value) {\n      // Data\n      this.id = value ? value.id : null;\n      this.subscription_period = value ? value.subscription_period : null;\n      this.payment_service_type = value ? value.payment_service_type : null;\n      this.has_changed = value ? value.has_changed : false;\n      this.contracted_plans = [];\n      if (value && value.contracted_plans) {\n        for (var i = 0; i < value.contracted_plans.length; ++i) {\n          if (!value.contracted_plans[i].cancelled_at) {\n            this.contracted_plans.push(new ContractedPlan(value.contracted_plans[i]));\n          }\n        }\n      }\n       this.coupon = new Coupon();\n      if (value && value.coupons && value.coupons.length) {\n        this.coupon = new Coupon.initializeFromCoupon(value.coupons[0]);\n      }\n\n      // Methods\n      this.getFeaturesDict = function() {\n        var featuresDict = {};\n        this.contracted_plans.forEach(function(contractedPlan) {\n          angular.extend(featuresDict, contractedPlan.getFeaturesDict());\n        });\n        return featuresDict;\n      };\n\n      this.getAddOnsDict = function() {\n        var addOnsDict = {};\n        this.contracted_plans.forEach(function(contractedPlan) {\n          angular.extend(addOnsDict, contractedPlan.getAddOnsDict());\n        });\n        return addOnsDict;\n      };\n\n      this.getContractedAddOnsDict = function() {\n        var addOnsDict = {};\n        this.contracted_plans.forEach(function(contractedPlan) {\n          angular.extend(addOnsDict, contractedPlan.getContractedAddOnsDict());\n        });\n        return addOnsDict;\n      };\n\n      this.getAddOn = function(permission) {\n        for (var i = 0; i < this.contracted_plans.length; ++i) {\n          var result = this.contracted_plans[i].getAddOn(permission);\n          if (result) {\n            return result;\n          }\n        }\n      };\n\n      this.getPlan = function(planId) {\n        var contractedPlan = this.contracted_plans.find(function(contractedPlan) {\n          return contractedPlan.plan.id === planId;\n        });\n        if (contractedPlan) {\n          return contractedPlan.plan;\n        }\n        return null;\n      };\n\n      this.getContractedPlan = function(planId) {\n        return this.contracted_plans.find(function(contractedPlan) {\n          return contractedPlan.plan.id === planId;\n        });\n      };\n\n      this.isMonthly = function(){\n        return this.subscription_period === SUBSCRIPTION_PERIOD.MONTHLY;\n      };\n\n      this.isYearly = function(){\n        return this.subscription_period === SUBSCRIPTION_PERIOD.YEARLY;\n      };\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return Subscription;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.stocktaking-order-product-variant-lot', [])\n    .factory('StocktakingOrderProductVariantLot', _StocktakingOrderProductVariantLot);\n\n  /** @ngInject */\n  function _StocktakingOrderProductVariantLot() {\n    function StocktakingOrderProductVariantLot(value) {\n\n      /**\n       * Public attributes\n       */\n\n      this.id = value ? value.id : null;\n      this.uid = value ? value.uid : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.product_variant_name = value ? value.product_variant_name : null;\n      this.product_variant_code = value ? value.product_variant_code : null;\n      this.sku = value ? value.sku : null;\n      this.barcode = value ? value.barcode : null;\n      this.expiration_date = value ? value.expiration_date : null;\n      this.amount = value ? value.amount : null;\n      this.new_amount = value ? value.new_amount : null;\n      this.total_product_amount = value ? value.total_product_amount : null;\n\n    }\n\n    return StocktakingOrderProductVariantLot;\n  }\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.stock-location', [])\n    .factory('StockLocation', _StockLocation);\n\n  /** @ngInject */\n  function _StockLocation() {\n\n    function StockLocation(value) {\n      this.id = value ? value.id : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.product_variants = value ? value.product_variants : [];\n      this.warehouse = value ? value.warehouse : null;\n      this.location = value ? value.location : null;\n      this.company = value ? value.company : null;\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return StockLocation;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.stock-detail-dto', [])\n    .factory('StockDetailDTO', _StockDetailDTO);\n\n  /** @ngInject */\n  function _StockDetailDTO() {\n    function StockDetailDTO(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.uid = value ? value.uid : null;\n      this.product_id = value ? value.product_id : null;\n      this.product_name = value ? value.product_name : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.product_variant_name = value ? value.product_variant_name : null;\n      this.product_variant_code = value ? value.product_variant_code : null;\n      this.barcode = value ? value.barcode : null;\n      this.product_code = value ? value.product_code : null;\n      this.expiration_date = value ? value.expiration_date : null;\n      this.amount = value ? value.amount : null;\n      this.purchase_order_delivery = value ? value.purchase_order_delivery : null;\n      this.purchase_order_delivery_product_variant = value ? value.purchase_order_delivery_product_variant : null;\n      this.transfer_order_delivery_product_variant_id = value ? value.transfer_order_delivery_product_variant_id : null;\n      this.purchase_order = value ? value.purchase_order : null;\n      this.stock_warehouse_id = value ? value.stock_warehouse_id : null;\n      this.stock_warehouse_name = value ? value.stock_warehouse_name : null;\n      this.received_amount = value ? value.received_amount : null;\n      this.received_amount_by_product = value ? value.received_amount_by_product : null;\n      this.ordered_amount = value ? value.ordered_amount : null;\n      this.product_cover_thumbnail = value ? value.product_cover_thumbnail : null;\n      this.product_cover = value ? value.product_cover : null;\n      this.is_devolution = value ? value.is_devolution : false;\n\n      this.manage_uids = value ? value.manage_uids : null;\n      this.manage_lots = value ? value.manage_lots : null;\n\n      this.product_variants = [];\n      if (value.product_variants) {\n        for (var i = 0; i < value.product_variants.length; i++) {\n          var productVariant = value.product_variants[i];\n          this.product_variants.push(\n            {\n              id: productVariant.id,\n              name: productVariant.product_variant_name || productVariant.name\n            });\n        }\n      }\n\n    }\n\n    return StockDetailDTO;\n  }\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.signup-two', [])\n    .factory('SignupTwo', _SignupTwo);\n\n  /** @ngInject */\n  function _SignupTwo($cookies, $location, COMPANY_SECTORS, COUNTRIES_PHONE_PREFIX_DICT) {\n\n    function SignupTwo(value) {\n      this.id = value ? value.id : null;\n      this.fullname = value ? value.fullname : null;\n      this.first_name = value ? value.first_name : null;\n      this.last_name = value ? value.last_name : null;\n      this.email = value ? value.email : null;\n      this.phone = value ? value.phone : null;\n      this.country = value ? value.country : 'ES';\n      this.lang = value ? value.lang : null;\n      this.password = value ? value.password : null;\n      this.created_at = value && value.created_at ? new Date(value.created_at) : null;\n      this.data_generated_at = value && value.data_generated_at ? new Date(value.data_generated_at) : null;\n      this.verified_at = value && value.verified_at ? new Date(value.verified_at) : null;\n      this.sal_at = value && value.sal_at ? new Date(value.sal_at) : null;\n      this.customer_at = value && value.customer_at ? new Date(value.customer_at) : null;\n      this.token = value ? value.token : null;\n      this.terms_and_conditions_accepted = value ? value.terms_and_conditions_accepted : false;\n      this.receive_content_accepted = value ? value.receive_content_accepted : false;\n\n      this.company_name = value && value.company_name ? value.company_name : '';\n      this.sells_products_without_expiration = value ? value.sells_products_without_expiration : false;\n      this.sells_products_with_expiration = value ? value.sells_products_with_expiration : false;\n      this.sells_products_with_lots = value ? value.sells_products_with_lots : false;\n      this.sells_products_with_uid = value ? value.sells_products_with_uid : false;\n      this.sells_services = value ? value.sells_services : false;\n      this.sector = value ? value.sector : COMPANY_SECTORS.FASHION_AND_ACCESSORIES;\n      this.channel_online = value ? value.channel_online : false;\n      this.total_online_stores = value ? value.total_online_stores : null;\n      this.channel_physical_store = value ? value.channel_physical_store : false;\n      this.total_physical_stores = value ? value.total_physical_stores : null;\n      this.channel_wholesale = value ? value.channel_wholesale : false;\n      this.total_commercial_agents = value ? value.total_commercial_agents : null;\n      this.channel_manage_stock = value ? value.channel_manage_stock : false;\n      this.total_warehouses = value ? value.total_warehouses : null;\n      this.interests = value ? value.interests : [];\n      this.interests_other = value ? value.interests_other : null;\n      this.finished = value ? value.finished : false;\n\n      this.meta = value ? value.meta : null;\n      this.hubspotutk = value ? value.hubspotutk : null;\n      this.msclkid = value ? value.msclkid : null;\n      this.gclid = value ? value.gclid : null;\n      this.twclid = value ? value.twclid : null;\n      this.fbclid = value ? value.fbclid : null;\n      this.utm_source = value ? value.utm_source : null;\n      this.utm_medium = value ? value.utm_medium : null;\n      this.utm_campaign = value ? value.utm_campaign : null;\n      this.utm_content = value ? value.utm_content : null;\n      this.utm_term = value ? value.utm_term : null;\n\n      this.form_version = value ? value.form_version : null;\n\n      /**\n       * Ui attributes\n       */\n      this.phonePrefix = value && value.phonePrefix ? value.phonePrefix : COUNTRIES_PHONE_PREFIX_DICT[this.country];\n      this.tempPhone = '';\n\n      /**\n       * Public methods\n       */\n      this.fillName = function () {\n        var fullNameArr = this.fullname.split(/\\s+/);\n        this.first_name = fullNameArr ? fullNameArr[0] : this.fullname;\n        if (fullNameArr) {\n          fullNameArr.shift();\n        }\n        this.last_name = fullNameArr ? fullNameArr.join(' ') : this.fullname;\n      };\n\n      this.fillPhone = function () {\n        if (this.phonePrefix && this.tempPhone.indexOf(this.phonePrefix) !== 0) {\n          this.phone = this.phonePrefix + this.tempPhone;\n        }\n      }\n\n      this.fillMetaFields = function () {\n        this.meta = {\n          params: $cookies.get('weburlparams') ? JSON.parse($cookies.get('weburlparams')) : $location.search()\n        };\n        this.hubspotutk = $cookies.get('hubspotutk');\n        this.msclkid = this.__getFromCookieOrUrl('msclkid');\n        this.gclid = this.__getFromCookieOrUrl('gclid');\n        this.twclid = this.__getFromCookieOrUrl('twclid');\n        this.fbclid = this.__getFromCookieOrUrl('fbclid');\n        this.utm_source = this.__getFromCookieOrUrl('utm_source');\n        this.utm_medium = this.__getFromCookieOrUrl('utm_medium');\n        this.utm_campaign = this.__getFromCookieOrUrl('utm_campaign');\n        this.utm_content = this.__getFromCookieOrUrl('utm_content');\n        this.utm_term = this.__getFromCookieOrUrl('utm_term');\n      };\n\n      this.fillFormVersion = function () {\n        var formVersion = this.__getFromCookieOrUrl('form_version');\n        if (formVersion) {\n          this.form_version = formVersion;\n        }\n        if (!this.form_version) {\n          this.form_version = '1';\n        }\n        this.form_version = String(this.form_version);\n      }\n\n      this.fillEmail = function () {\n        if (!this.email) {\n          this.email = this.__getFromCookieOrUrl('email');\n        }\n      }\n\n      /**\n       * Private methods\n       */\n      this.__getFromCookieOrUrl = function (cookieName) {\n        var cookie = null;\n        if ($cookies.get('weburlparams')) {\n          cookie = JSON.parse($cookies.get('weburlparams'));\n        }\n\n        var value = null;\n        if (cookie && cookie[cookieName]) {\n          value = cookie[cookieName];\n        } else {\n          value = $location.search()[cookieName];\n        }\n        return typeof value === 'object' ? value[0] : value;\n      };\n\n      /**\n       * Initialize\n       */\n      this.fillMetaFields();\n      this.fillFormVersion();\n      this.fillEmail();\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return SignupTwo;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.signup-step', [])\n    .factory('SignupStep', _SignupStep);\n\n  /** @ngInject */\n  function _SignupStep() {\n\n    function SignupStep(value) {\n      this.id = value ? value.id : null;\n      this.number = value ? value.number : null;\n      this.position = value ? value.position : null;\n      this.type = value ? value.type : null;\n      this.title = value ? value.title : null;\n      this.button = value ? value.button : null;\n      this.text = value ? value.text : null;\n      this.academy_url = value ? value.academy_url : null;\n      this.icon = value ? value.icon : null;\n      this.video = null;\n      this.active = false;\n      this.video_link = '';\n      if (value && value.video) {\n        this.video = value.video;\n        this.video_link = value.video.link;\n      }\n      this.panel_sref = value ? value.panel_sref : null;\n      this.module = value ? value.module : null;\n      this.permission = value ? value.permission : null;\n      this.company_plan = value ? value.company_plan : null;\n      this.done = false;\n\n      this.substeps = [];\n\n      var vm = this;\n      if (value.substeps) {\n        value.substeps.sort(function (a, b) {\n          return a.position - b.position;\n        }).forEach(function (substep, index) {\n          substep.number = index + 1;\n          var step = new SignupStep(substep);\n          vm.substeps.push(step);\n        })\n      }\n\n      this.getIcon = function () {\n        switch (this.type) {\n          case 'testing':\n            return 'icon-account-location';\n        }\n      }\n\n      this.getIconStyle = function () {\n        return this.done ? 'green-500-fg' : 'blue-500-fg';\n      }\n\n      this.completed = function () {\n        return this.done || (this.substeps.length && !this.substeps.some(function (step) {\n          return !step.done;\n        }))\n      }\n\n      this.setSubstepCompleted = function (id) {\n        var item = this.substeps.find(function (step) {\n          return step.id == id\n        })\n        item.done = true;\n      }\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return SignupStep;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.shipping-method', [])\n    .factory('ShippingMethod', _ShippingMethod);\n\n  /** @ngInject */\n  function _ShippingMethod() {\n\n    function ShippingMethod(instance) {\n\n      /**\n       * Public attributes\n       */\n      this.id = instance ? instance.id : null;\n      this.company = instance ? instance.company : null;\n      this.name = instance ? instance.name : null;\n      this.price_incl_tax = instance ? instance.price_incl_tax : null;\n    }\n\n    return ShippingMethod;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.shipping-box', [])\n    .factory('ShippingBox', _ShippingBox);\n\n  /** @ngInject */\n  function _ShippingBox(Session) {\n\n    function ShippingBox(value) {\n      this.COMMON_VOLUMETRIC_WEITHT_DIVISOR = 6000;\n      // Data\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.length = value ? value.length : null;\n      this.height = value ? value.height : null;\n      this.width = value ? value.width : null;\n      this.default = value ? value.default : false;\n      this.barcode = value ? value.barcode : false;\n\n      // UI attributes\n      this.measurementUnit = Session.company.measurement_unit.toLowerCase();\n\n      // Methods\n      this.getFullName = function() {\n        return this.name + ' (' + this.length + this.measurementUnit + ' x ' + this.width + this.measurementUnit + ' x ' + this.height + this.measurementUnit + ')';\n      };\n\n      this.getVolumetricWeight = function() {\n        if (this.length !== null && this.width !== null && this.height !== null) {\n          return (this.length * this.width * this.height) / this.COMMON_VOLUMETRIC_WEITHT_DIVISOR;\n        }\n        return null;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return ShippingBox;\n\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.models.serial-number-type', [])\n      .factory('SerialNumberType', _SerialNumberType);\n\n    /** @ngInject */\n    function _SerialNumberType() {\n\n      function SerialNumberType(value) {\n        this.id = value ? value.id : null;\n        this.company = value ? value.company : null;\n\n        this.name = value ? value.name : null;\n        this.counter = value ? value.counter : null;\n        this.counter_length = value ? value.counter_length : null;\n        this.prefix = value ? value.prefix : null;\n        this.suffix = value ? value.suffix : null;\n        this.company = value ? value.company : null;\n\n        // Methods\n        this._replaceYear = function (value) {\n          if (!value) {\n            return '';\n          }\n          if (value.indexOf('YY') !== -1) {\n            if (value.indexOf('YYYY') !== -1) {\n              var yyyy = new Date().getFullYear().toString();\n              return value.replace('YYYY', yyyy);\n            } else {\n              var yy = new Date().getFullYear().toString().substr(2)\n              return value.replace('YY', yy);\n            }\n          }\n          return value;\n        }\n\n        this._getPrefix = function () {\n          return this._replaceYear(this.prefix);\n        }\n\n        this._getSuffix = function () {\n          return this._replaceYear(this.suffix);\n        }\n\n        this._getCounter = function () {\n          if (!this.counter) {\n            return '';\n          }\n          if (this.counter.toString().length >= this.counter_length) {\n            return this.counter;\n          }\n          var zeros = '';\n          for (var i = 0; i < this.counter_length - this.counter.toString().length; ++i) {\n            zeros += '0';\n          }\n          return zeros + this.counter.toString();\n        }\n\n        this.getCurrent = function () {\n          return this._getPrefix() + this._getCounter() + this._getSuffix();\n        }\n\n      }\n\n      /**\n       * Return the constructor function\n       */\n      return SerialNumberType;\n\n    }\n  }\n)();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.sendcloud_pos_order_fulfillment_data', [])\n    .factory('SendcloudPosOrderFulfillmentData', _SendcloudPosOrderFulfillmentData);\n\n  /** @ngInject */\n  function _SendcloudPosOrderFulfillmentData() {\n\n    function SendcloudPosOrderFulfillmentData(value) {\n      var SENDCLOUD_PARCEL_URL = 'https://app.sendcloud.com/v2/shipping/PARCEL_ID/details/';\n      this.created_at = value && value.created_at ? new Date(value.created_at) : null;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.external_id = value ? value.external_id : null;\n      this.external_parcel_id = value ? value.external_parcel_id : null;\n      this.order_number = value ? value.order_number : null;\n      this.external_status = value ? value.external_status : null;\n      this.external_status_msg = value ? value.external_status_msg : null;\n      this.tracking_number = value ? value.tracking_number : null;\n      this.label_printed = value ? value.label_printed : false;\n\n      // UI properties\n      this.parcelUrl = null;\n      if(this.external_parcel_id){\n        this.parcelUrl = SENDCLOUD_PARCEL_URL.replace('PARCEL_ID', this.external_parcel_id);\n      }\n    }\n\n    return SendcloudPosOrderFulfillmentData;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.sell-matrix-data', [])\n    .factory('SellMatrixData', _SellMatrixData);\n\n  /** @ngInject */\n  function _SellMatrixData(api,\n                           $http,\n                           HTTP_STATUS) {\n\n    function SellMatrixData(value) {\n      this.warehouseId = value.warehouseId;\n      this.categories = [];\n      this.products = [];\n      this.fetching = false;\n      this.previousPageUrl = '';\n      this.nextPageUrl = '';\n\n      this.getProductsByCategory = getProductsByCategory;\n      this.getNextPage = getNextPage;\n      this.getPreviousPage = getPreviousPage;\n\n      this.fetching = true;\n      var _this = this;\n      api.inventories.categories.list(function (results) {\n        _this.fetching = false;\n        _this.categories = results.results;\n      });\n\n      function getProductsByCategory(category) {\n        this.fetching = true;\n        var _this = this;\n        api.inventories.products.list({\n          category__id: category.id,\n          register_warehouse: this.warehouseId,\n          serializer: 'ProductPosFinderSerializer',\n          pagination_class: 'FourteenObjectsPagination'\n        }, function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            _this.products = results.results;\n            _this.previousPageUrl = results.previous;\n            _this.nextPageUrl = results.next;\n          } else {\n            // TODO\n          }\n          _this.fetching = false;\n        })\n      }\n\n      function getNextPage() {\n        if (this.nextPageUrl) {\n          this.fetching = true;\n          var _this = this;\n          $http.get(this.nextPageUrl).then(\n            function (results) {\n              if (results.status === 200) {\n                _this.products = results.data.results;\n                _this.previousPageUrl = results.data.previous;\n                _this.nextPageUrl = results.data.next;\n              } else {\n                // TODO\n              }\n              _this.fetching = false;\n            });\n        }\n      }\n\n      function getPreviousPage() {\n        if(this.previousPageUrl){\n          this.fetching = true;\n          var _this = this;\n          $http.get(this.previousPageUrl).then(\n            function (results) {\n              if (results.status === 200) {\n                _this.products = results.data.results;\n                _this.previousPageUrl = results.data.previous;\n                _this.nextPageUrl = results.data.next;\n              } else {\n                // TODO\n              }\n              _this.fetching = false;\n            });\n        }\n      }\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return SellMatrixData;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.sales-goal', [])\n    .factory('SalesGoal', _SalesGoal);\n\n  /** @ngInject */\n  function _SalesGoal() {\n\n    function SalesGoal(value) {\n      this.id = value ? value.id : null;\n      this.created_at = value && value.created_at ? new Date(value.created_at) : null;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.warehouse = value && value.warehouse ? value.warehouse : null;\n      this.warehouse_name = value && value.warehouse_name ? value.warehouse_name : null;\n      this.goal = value && value.goal ? value.goal : null;\n      this.start = value && value.start ? new Date(value.start) : null;\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return SalesGoal;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.rule-line', [])\n    .factory('RuleLine', _RuleLine);\n\n  /** @ngInject */\n  function _RuleLine(\n    RuleCriteria,\n    RULE_ACTION_TYPES\n  ) {\n\n    function RuleLine(value) {\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : '';\n      this.order = value ? value.order : 0;\n      this.action_type = value ? value.action_type : null; // RULE_ACTION_TYPES\n      this.action_value = value && value.action_value ? +value.action_value : null; // For scoring\n      this.action_object_id = value ? value.action_object_id : null; // Warehouse id\n      this.action_object_name = value ? value.action_object_name : null; // Warehouse name\n      this.rule_criteria = [];\n      if (value && value.rule_criteria) {\n        for (var i = 0; i < value.rule_criteria.length; ++i) {\n          this.rule_criteria.push(new RuleCriteria(value.rule_criteria[i]));\n        }\n      } else {\n        this.rule_criteria.push(new RuleCriteria());\n      }\n\n      // Public methods\n      this.isValid = function () {\n        return this.action_is_valid() && this.rule_criteria.every(function (ruleCriteria) {\n          return ruleCriteria.isValid();\n        });\n      };\n\n      this.action_is_valid = function () {\n        if (this.rule_criteria.some(function (ruleCriteria) {\n            return ruleCriteria.isMoreStockType();\n          })) {\n          return this.action_type === RULE_ACTION_TYPES.FORCE_WAREHOSUE || (!!this.action_type && (!!this.action_value || !!this.action_object_id))\n        }\n\n        return !!this.action_type && (!!this.action_value || !!this.action_object_id);\n      }\n\n      this.addRuleCriteria = function () {\n        this.rule_criteria.push(new RuleCriteria());\n      };\n\n      this.allowedToRemoveRuleCriteria = function (index) {\n        return index !== 0 && this.rule_criteria.length > 1;\n      };\n\n      this.removeRuleCriteria = function (index) {\n        this.rule_criteria.splice(index, 1);\n        if (this.rule_criteria.length === 0) {\n          this.addRuleCriteria();\n        }\n      };\n\n      this.allowedToAddRuleCriteria = function () {\n        if (this.rule_criteria.length > 0) {\n          return this.rule_criteria[this.rule_criteria.length - 1].isValid();\n        }\n        return false;\n      };\n\n      this.getAvailableActionTypes = function () {\n        return Object.fromEntries(Object.entries(RULE_ACTION_TYPES).filter(function (key) {\n          return isNaN(parseInt(key));\n        }));\n      };\n\n      this.isAddScoring = function () {\n        return this.action_type === RULE_ACTION_TYPES.ADD_SCORING;\n      };\n\n      this.isForceOrDiscardWarehouse = function () {\n        if (this.action_type === RULE_ACTION_TYPES.FORCE_WAREHOSUE && this.rule_criteria.some(function (ruleCriteria) {\n            return ruleCriteria.isMoreStockType();\n          })) {\n          return false;\n        }\n\n        return this.action_type === RULE_ACTION_TYPES.FORCE_WAREHOSUE ||\n          this.action_type === RULE_ACTION_TYPES.DISCARD_WAREHOSUE;\n      };\n\n      this.resetActionValues = function () {\n        this.action_value = null;\n        this.action_object_id = null;\n        this.action_object_name = null;\n      };\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return RuleLine;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.rule-criteria', [])\n    .factory('RuleCriteria', _RuleCriteria);\n\n  /** @ngInject */\n  function _RuleCriteria(\n    $filter,\n    RULE_CRITERIA_TYPES,\n    COUNTIRES_ISO_APLPHA_2_EN\n  ) {\n\n    function RuleCriteria(value) {\n      // Methods (data at the end)\n      this.setCriteriaValue = function(value) {\n        if (this.isNumberInput()) {\n          this.criteria_value = +value;\n        } else {\n          this.criteria_value = value;\n        }\n      };\n\n      this.isValid = function() {\n        return !!this.criteria_type && !!this.operator &&\n          (!!this.criteria_value || !!this.criteria_object_id || !!this.criteria_value_list) || !this.hasOperations();\n      };\n\n      this.getAvailableCriteriaTypes = function() {\n        return Object.fromEntries(Object.entries(RULE_CRITERIA_TYPES).filter(function(key) {\n          return isNaN(parseInt(key));\n        }));\n      };\n\n      this.isMoreStockType = function() {\n        return this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_MORE_STOCK;\n      }\n\n      this.hasOperations = function() {\n        return this.criteria_type !== RULE_CRITERIA_TYPES.WAREHOUSE_MORE_STOCK\n      }\n\n      this.getOperatorByCriteria = function() {\n        if (this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_COUNTRY_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_COUNTRY_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_CATEGORY ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_SUBCATEGORY ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_PROVIDER ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_BRAND) {\n          return {\n            'EQUAL_CRITERIA': 'eq',\n            'NOT_EQUAL_CRITERIA': 'neq'\n          };\n        }\n        if (this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_ZIP_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_ZIP_CODE) {\n          return {\n            'EQUAL_CRITERIA': 'eq',\n            'NOT_EQUAL_CRITERIA': 'neq',\n            'START_WITH_CRITERIA': 'sw',\n            'END_WITH_CRITERIA': 'ew'\n          };\n        }\n        if (this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_PENDING_ORDERS ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_QUANTITY) {\n          return {\n            'LESS_THAN_CRITERIA': 'lt',\n            'LESS_THAN_OR_EQUAL_CRITERIA': 'lte',\n            'EQUAL_CRITERIA': 'eq',\n            'GREATER_THAN_OR_EQUAL_CRITERIA': 'gte',\n            'GREATER_THAN_CRITERIA': 'gt'\n          };\n        }\n      };\n\n      this.isMultiSelect = function() {\n        return this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_COUNTRY_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_COUNTRY_CODE;\n      };\n\n      this.isTextInput = function() {\n        return this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_ZIP_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_ZIP_CODE;\n      };\n\n      this.isNumberInput = function() {\n        return this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_PENDING_ORDERS ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_QUANTITY;\n      };\n\n      this.isAutocomplete = function() {\n        return this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_BRAND ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_CATEGORY ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_SUBCATEGORY ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_PRODUCT_PROVIDER;\n      };\n\n      this.getMultiselectOptions = function() {\n        if (this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_COUNTRY_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_COUNTRY_CODE) {\n          return COUNTIRES_ISO_APLPHA_2_EN;\n        }\n      };\n\n      this.getHintText = function() {\n        if (this.criteria_type === RULE_CRITERIA_TYPES.WAREHOUSE_ZIP_CODE ||\n          this.criteria_type === RULE_CRITERIA_TYPES.ORDER_ZIP_CODE) {\n          return $filter('translate')('ROUTING_RULES.USE_COMA_FOR_MULTI_VALUES', { example: '08, 28' });\n        }\n      };\n\n      this.resetCriteriaValues = function() {\n        this.operator = null;\n        this.criteria_value = null;\n        this.criteria_object_id = null;\n        this.criteria_object_name = null;\n        this.criteria_value_list = null;\n      };\n\n      // Data\n      this.id = value ? value.id : null;\n      this.criteria_type = value ? value.criteria_type : null;\n      this.operator = value ? value.operator : null;\n      if (value) {\n        this.setCriteriaValue(value.criteria_value);\n      }\n      this.criteria_object_id = value ? value.criteria_object_id : null; // The id of the object\n      this.criteria_object_name = value ? value.criteria_object_name : null; // The name of the object\n      this.criteria_value_list = value ? value.criteria_value_list : null; // For multiple choices\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return RuleCriteria;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.routing-rule', [])\n    .factory('RoutingRule', _RoutingRule);\n\n  /** @ngInject */\n  function _RoutingRule(RuleLine) {\n\n    function RoutingRule(value) {\n      this.id = value ? value.id : null;\n      this.company = value ? value.company : null;\n      this.site_id = value ? value.site_id : null;\n\n      this.created_at = value && value.created_at ? new Date(value.created_at) : null;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n\n      this.rule_lines = [];\n      if (value && value.rule_lines) {\n        for (var i = 0; i < value.rule_lines.length; ++i) {\n          this.rule_lines.push(new RuleLine(value.rule_lines[i]));\n        }\n      }\n\n      // Public methods\n      this.isValid = function(){\n        return this.rule_lines.every(function(ruleLine){\n          return ruleLine.isValid();\n        });\n      };\n\n      this.addRuleLine = function() {\n        var ruleLine = new RuleLine({\n          order: this.rule_lines.length\n        });\n        this.rule_lines.push(ruleLine);\n      };\n\n      this.removeRuleLine = function(index) {\n        this.rule_lines.splice(index, 1);\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return RoutingRule;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.role', [])\n    .factory('Role', _Role);\n\n  /** @ngInject */\n  function _Role() {\n\n    function Role(value) {\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.description = value ? value.description : null;\n      this.company = value ? value.company : null;\n\n      this.permissions = [];\n      if(value && value.permissions){\n        this.permissions = value.permissions;\n      }\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return Role;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.product-label-design', [])\n    .factory('ProductLabelDesign', _ProductLabelDesign);\n\n  /** @ngInject */\n  function _ProductLabelDesign($filter,\n                               ProductLabelDesignField) {\n\n    function ProductLabelDesign(value) {\n\n      this.AVAILABLE_FIELDS = {\n        'code': 'PRODUCT_CODE',\n        'name': 'PRODUCT_NAME',\n        'color': 'VARIANT_COLOR',\n        'color__code': 'VARIANT_COLOR_CODE',\n        'color__name_code': 'VARIANT_COLOR_NAME_CODE',\n        'size': 'VARIANT_SIZE',\n        'size__code': 'VARIANT_SIZE_CODE',\n        'size__name_code': 'VARIANT_SIZE_NAME_CODE',\n        'price': 'PRICE',\n        'barcode': 'BARCODE',\n        'barcode_number': 'BARCODE_NUMBER',\n        'sku': 'SKU',\n        'spacer': 'SPACER',\n        'image': 'COVER_IMAGE',\n        'origin_code': 'ORIGIN_CODE',\n        'description': 'DESCRIPTION',\n        'description_long': 'DESCRIPTION_LONG',\n        'brand': 'BRAND',\n        'category': 'CATEGORY',\n        'subcategory': 'SUBCATEGORY',\n        'variant_1_code_variant_2_name': 'VARIANT_1_CODE_VARIANT_2_NAME',\n        'variant_1_name_variant_2_code': 'VARIANT_1_NAME_VARIANT_2_CODE',\n        'custom_text': 'CUSTOM_TEXT',\n        'provider': 'PROVIDER'\n      };\n      this.AVAILABLE_FONT_SIZES = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];\n\n      this.isButterfly = function() {\n        return this.page_layout === 's_butterfly' || this.page_layout === 'c_butterfly' || this.page_layout === 'lc_butterfly';\n      };\n\n      this.initButterflyMultiWidths = function() {\n        if (this.isButterfly()) {\n          var DEFAULT_WIDTH = 80 - 3 * 2;\n          if (this.page_layout === 's_butterfly') {\n            return [Math.floor(DEFAULT_WIDTH / 2), Math.floor(DEFAULT_WIDTH / 4), Math.floor(DEFAULT_WIDTH / 4)];\n          }\n          if (this.page_layout === 'c_butterfly') {\n            return [Math.floor(DEFAULT_WIDTH / 4), Math.floor(DEFAULT_WIDTH / 2), Math.floor(DEFAULT_WIDTH / 4)];\n          }\n          if (this.page_layout === 'lc_butterfly') {\n            return [Math.floor(DEFAULT_WIDTH / 4), Math.floor(DEFAULT_WIDTH / 8), Math.floor(DEFAULT_WIDTH / 4), Math.floor(DEFAULT_WIDTH / 8), Math.floor(DEFAULT_WIDTH / 4)];\n          }\n        }\n        return [];\n      };\n\n      this.id = value ? value.id : null;\n      this.name = value && value.name ? value.name : $filter('translate')('LABELS_GENERATOR.DEFAULT_LABEL_DESIGN_NAME');\n      this.pricing_tier = value && value.pricing_tier ? value.pricing_tier : null;\n\n      this.start_at = value && value.start_at ? value.start_at : 1;\n      this.use_price_excl_tax = value && value.use_price_excl_tax ? value.use_price_excl_tax : false;\n      this.one_label_per_page = value && value.one_label_per_page ? value.one_label_per_page : false;\n      this.print_grid = value && value.print_grid ? value.print_grid : false;\n      this.print_barcode = value && value.print_barcode ? value.print_barcode : true;\n\n      this.label_width = value && value.label_width ? value.label_width : 80;\n      this.label_height = value && value.label_height ? value.label_height : 15;\n      this.multilabel_width = value && value.multilabel_width ? value.multilabel_width : this.initButterflyMultiWidths();\n\n      this.columns = value && value.columns ? value.columns : 4;\n      this.rows = value && value.rows ? value.rows : 10;\n\n      this.page_top_margin = value && value.page_top_margin != null ? value.page_top_margin : 0;\n      this.page_bottom_margin = value && value.page_bottom_margin != null ? value.page_bottom_margin : 0;\n      this.page_left_margin = value && value.page_left_margin != null ? value.page_left_margin : 0;\n      this.page_right_margin = value && value.page_right_margin != null ? value.page_right_margin : 0;\n\n      this.label_top_margin = 3; // fixed untill the server accepts values\n      this.label_right_margin = value && value.label_right_margin != null ? value.label_right_margin : 3;\n      this.label_bottom_margin = 3; // fixed untill the server accepts values\n      this.label_left_margin = value && value.label_left_margin != null ? value.label_left_margin : 3;\n\n      this.page_size = value && value.page_size ? value.page_size : 'a4';\n      this.page_layout = value && value.page_layout ? value.page_layout : 'portrait';\n\n\n      this.fields = [];\n      if (value && value.fields) {\n        var _this = this;\n        var hasZeroPosition = false;\n        value.fields.forEach(function(field, index) {\n          if (field.position === 0) {\n            hasZeroPosition = true;\n          }\n          _this.fields.push(new ProductLabelDesignField(field));\n        });\n\n        if (hasZeroPosition) {\n          _this.fields.forEach(function(field) {\n            field.position += 1;\n          });\n\n          var fieldAtZero = _this.fields.find(function(field) {\n            return field.position === 0;\n          });\n          if (fieldAtZero) {\n            fieldAtZero.position = 1;\n          }\n        }\n\n        this.fields.sort(function(a, b) {\n          return a.position - b.position;\n        });\n\n      } else {\n        // Create the default fields\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'code',\n          font_size: 13,\n          bold: true\n        }));\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'name',\n          font_size: 8,\n          italic: true\n        }));\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'color',\n          font_size: 8,\n          italic: true\n        }));\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'size',\n          font_size: 11,\n          bold: true,\n          custom_label: $filter('translate')('LABELS_GENERATOR.SIZE')\n        }));\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'price',\n          font_size: 11,\n          bold: true,\n          custom_label: $filter('translate')('LABELS_GENERATOR.PRICE')\n        }));\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'barcode',\n          barcode_align: 'right',\n          barcode_vertical: true\n        }));\n      }\n\n\n      this.getPageHeight = function() {\n        if (this.page_size === 'a4') {\n          if (this.page_layout === 'portrait') {\n            return 297;\n          }\n          return 210;\n        } else if (this.page_size === 'a5') {\n          if (this.page_layout === 'portrait') {\n            return 148.5;\n          }\n          return 105;\n        }\n      };\n\n      this.getPageWidth = function() {\n        if (this.page_size === 'a4') {\n          if (this.page_layout === 'portrait') {\n            return 210;\n          }\n          return 297;\n        } else if (this.page_size === 'a5') {\n          if (this.page_layout === 'portrait') {\n            return 105;\n          }\n          return 148.5;\n        }\n      };\n\n      this.getLabelHeight = function(floor) {\n        if (this.page_layout !== 'custom') {\n          if (floor) {\n            return Math.floor((this.getPageHeight() - this.page_top_margin - this.page_bottom_margin) / this.rows);\n          }\n          return (this.getPageHeight() - this.page_top_margin - this.page_bottom_margin) / this.rows;\n        } else {\n          return this.label_height;\n        }\n\n      };\n\n      this.getLabelWidth = function(floor) {\n        if (this.page_layout !== 'custom') {\n          if (floor) {\n            return Math.floor((this.getPageWidth() - this.page_left_margin - this.page_right_margin) / this.columns);\n          }\n          return (this.getPageWidth() - this.page_left_margin - this.page_right_margin) / this.columns;\n        } else {\n          return this.label_width;\n        }\n      };\n\n      this.removeField = function(index) {\n        this.fields.splice(index, 1);\n        this._setPositions();\n      };\n\n      this.addEmptyField = function() {\n        this.fields.push(new ProductLabelDesignField({\n          field_name: 'code'\n        }));\n        this._setPositions();\n      };\n\n      this.moveFieldForward = function(i) {\n        var tempField = new ProductLabelDesignField(this.fields[i - 1]);\n        this.fields[i - 1] = this.fields[i];\n        this.fields[i] = tempField;\n        this._setPositions();\n      };\n\n      this.moveFieldBackward = function(i) {\n        var tempField = new ProductLabelDesignField(this.fields[i + 1]);\n        this.fields[i + 1] = this.fields[i];\n        this.fields[i] = tempField;\n        this._setPositions();\n      };\n\n      this.getLabelsPerPage = function() {\n        return this.columns * this.rows;\n      };\n\n      this.getFieldByFieldName = function(field_name) {\n        return this.fields.find(function(field) {\n          return field.field_name === field_name;\n        });\n      };\n\n      this._setPositions = function() {\n        this.fields.forEach(function(field, index) {\n          field.position = index;\n        });\n      };\n\n      this.setStartAt = function(row, column) {\n        this.start_at = row * this.columns + column + 1;\n      };\n\n      this.isCustomLayout = function() {\n        return this.page_layout === 'custom';\n      };\n\n      this.isCustomLandscapeOrPortrait = function() {\n        return this.page_layout === 'landscape' || this.page_layout === 'portrait';\n      };\n\n\n      this.isValid = function() {\n        if (!this.pricing_tier) {\n          return false;\n        }\n        return !(this.isCustomLayout() && (!this.label_height || !this.label_width));\n      };\n\n      this.getPricingTier = function() {\n        return this.pricing_tier;\n      };\n\n      this.isLabelCenteredButterfly = function() {\n        return this.page_layout === 'lc_butterfly';\n      };\n\n      this.layoutChanged = function() {\n        if (this.isButterfly()) {\n          this.multilabel_width = this.initButterflyMultiWidths();\n        }\n      };\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return ProductLabelDesign;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.product-label-design-field', [])\n    .factory('ProductLabelDesignField', _ProductLabelDesignField);\n\n  /** @ngInject */\n  function _ProductLabelDesignField() {\n\n    function ProductLabelDesignField(value) {\n      this.id = value ? value.id : null;\n      this.field_name = value && value.field_name ? value.field_name : '';\n      this.position = value && value.position != null ? value.position : 0;\n\n      this.font_size = value && value.font_size ? value.font_size : 12;\n      this.text_align = value && value.text_align ? value.text_align : 'left';\n\n      this.bold = value && value.bold ? value.bold : false;\n      this.italic = value && value.italic ? value.italic : false;\n      this.underline = value && value.underline ? value.underline : false;\n\n      // Other attributes depending on fieldName\n      this.custom_label = value && value.custom_label ? value.custom_label : '';\n      this.price_excl_tax = value && value.price_excl_tax != null ? value.price_excl_tax : false;\n      this.barcode_align = value && value.barcode_align ? value.barcode_align : 'left';\n      this.barcode_vertical = value && value.barcode_vertical != null ? value.barcode_vertical : true;\n      this.spacer_height = value && value.spacer_height ? value.spacer_height : 3;\n\n      this.barcode_numbers = value && value.barcode_numbers != null ? value.barcode_numbers : true;\n      this.barcode_width = value && value.barcode_width ? value.barcode_width : null;\n      this.barcode_height = value && value.barcode_height ? value.barcode_height : null;\n      this.barcode_space = value && value.barcode_space ? value.barcode_space : null;\n\n      this.butterfly_position = value && value.butterfly_position ? value.butterfly_position : 'left';\n\n      // this.image_align = value && value.image_align ? value.image_align : 'right';\n\n      this.allowMove = function () {\n        return this.field_name !== 'barcode' && this.field_name !== 'image';\n      }\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return ProductLabelDesignField;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular.module('app.models.pos-order', []).factory('PosOrder', _PosOrder);\n\n  /** @ngInject */\n  function _PosOrder(\n    Utils,\n    Session,\n    Invoice,\n    PosOrderFulfillment,\n    PosOrderProductVariant,\n    PosOrderRefund,\n    DevolutionCard,\n    PosOrderPaymentMethod,\n    PAYMENT_STATUS_TYPES,\n    POS_ORDER_PAYMENT_STATUSES_COLORS,\n    POS_ORDER_PAYMENT_STATUSES,\n    ECOMMERCE_PLATFORMS,\n    $mdDialog,\n    $filter,\n    $window,\n    api,\n    apiResolver,\n    INTEGRATION_APP_TYPE,\n    HTTP_STATUS\n  ) {\n    function PosOrder(value) {\n      const FULFILLMENT_DEPLOY_DATE = new Date('2022-10-05 05:00:00 GMT+0200');\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.is_v2 = value ? value.is_v2 : false;\n      // Security Object\n      this.created_at =\n        value && value.created_at ? new Date(value.created_at) : null;\n      this.updated_at =\n        value && value.updated_at ? new Date(value.updated_at) : null;\n      this.deleted = value ? value.deleted : null;\n      this.deleted_at =\n        value && value.deleted_at ? new Date(value.deleted_at) : null;\n\n      // Autocode\n      this.autocode = value ? value.autocode : null;\n\n      // Order attributes\n      this.origin_code = value ? value.origin_code : null;\n      this.source_warehouse = value ? value.source_warehouse : null;\n      this.source_warehouse_instance = value ? value.source_warehouse_instance : null;\n\n      this.target_warehouse = value ? value.target_warehouse : null;\n      this.delivery_notes_serial_number_type = value\n        ? value.delivery_notes_serial_number_type\n        : null;\n      this.notes = value ? value.notes : null;\n      this.private_notes = value ? value.private_notes : null;\n      this.tags = value ? value.tags : null;\n      this.created_by = value ? value.created_by : null;\n      this.company = value ? value.company : null;\n      this.incidence = value ? value.incidence : null;\n      this.warning = value ? value.warning : null;\n\n\n      // PosOrder attributes\n      this.pos_order_invoices = [];\n      if (value && value.pos_order_invoices) {\n        for (var i = 0; i < value.pos_order_invoices.length; ++i) {\n          this.pos_order_invoices.push(new Invoice(value.pos_order_invoices[i]));\n        }\n      }\n      this.register = value ? value.register : null;\n      this.register_instance = value ? value.register_instance : null;\n      this.register_activity = value ? value.register_activity : null;\n      this.register_activity_closed = value ? value.register_activity_closed : null;\n      this.customer = value ? value.customer : null;\n      this.customer_instance = value ? value.customer_instance : null;\n      this.person = value ? value.person : null;\n      this.is_devolution = value ? value.is_devolution : null;\n      this.devolution_of = value ? value.devolution_of : null;\n      this.is_negative = value ? value.is_negative : null;\n      this.negative_of = value ? value.negative_of : null;\n      this.is_restored = value ? value.is_negative : null;\n      this.restored_of = value ? value.negative_of : null;\n      this.is_negated = value ? value.is_negated : null;\n      this.discount = value ? value.discount : null;\n      this.discount_incl_tax = value ? value.discount_incl_tax : null;\n      this.discount_excl_tax = value ? value.discount_excl_tax : null;\n      this.balance_discount = value ? value.balance_discount : null;\n      this.subtotal = value ? value.subtotal : null;\n      this.total_taxes = value ? value.total_taxes : null;\n      this.total_devolution_cards = value ? value.total_devolution_cards : null;\n      this.total = value ? value.total : null;\n      if (this.balance_discount && !this.is_devolution) {\n        this.discountAsPercentage = this.balance_discount / (this.balance_discount + this.total);\n      }\n      this.total_without_discount = this.total + this.balance_discount;\n      this.invoice = value && value.invoice ? new Invoice(value.invoice) : null;\n      this.substitutive_invoices = null;\n      if (value && value.substitutive_invoices && value.substitutive_invoices.length) {\n        this.substitutive_invoices = [];\n        for (var i = 0; i < value.substitutive_invoices.length; ++i) {\n          this.substitutive_invoices.push(new Invoice(value.substitutive_invoices[i]));\n        }\n      }\n      this.output_amount = value ? value.output_amount : null;\n      this.barcode = value ? value.barcode : null;\n      this.origin_id = value ? value.origin_id : null;\n      this.origin_code = value ? value.origin_code : null;\n      this.site = value ? value.site : null;\n      this.billing_address = value ? value.billing_address : null;\n      this.billing_address_instance = value\n        ? value.billing_address_instance\n        : null;\n      this.related_name = value ? value.related_name : null;\n      this.shipping_address = value ? value.shipping_address : null;\n      this.shipping_address_instance = value\n        ? value.shipping_address_instance\n        : null;\n      this.status = value ? value.status : null;\n      this.shipping_status = value ? value.shipping_status : null;\n      this.payment_status = value ? value.payment_status : null;\n\n      this.currency = value ? value.currency : Session.company.currency;\n\n      this.pending_amount = value ? value.pending_amount : null;\n      this.total_pending_to_refund = value ? value.total_pending_to_refund : null;\n\n      this.kubibai_ticket_data = value ? value.kubibai_ticket_data : null;\n      this.kubibai_cancelled_invoice_data = value ? value.kubibai_cancelled_invoice_data : null;\n\n      this.epos_italy_ticket_data = value ? value.epos_italy_ticket_data : null;\n\n      this.pos_order_shipping_methods =\n        value && value.pos_order_shipping_methods\n          ? value.pos_order_shipping_methods\n          : [];\n      this.generated_devolution_card =\n        value &&\n        value.generated_devolution_card &&\n        value.generated_devolution_card.length\n          ? new DevolutionCard(value.generated_devolution_card[0])\n          : null;\n\n      this.pos_order_payment_methods = [];\n      this.pos_order_payment_methods_dict = {};\n      if (value && value.pos_order_payment_methods) {\n        for (var i = 0; i < value.pos_order_payment_methods.length; ++i) {\n          var posOrderPaymentMethod = new PosOrderPaymentMethod(value.pos_order_payment_methods[i]);\n          this.pos_order_payment_methods.push(posOrderPaymentMethod);\n          this.pos_order_payment_methods_dict[value.pos_order_payment_methods[i].id] = posOrderPaymentMethod;\n        }\n      }\n\n      this.devolution_cards = [];\n      if (value && value.devolution_cards) {\n        for (var i = 0; i < value.devolution_cards.length; ++i) {\n          this.devolution_cards.push(\n            new DevolutionCard(value.devolution_cards[i])\n          );\n        }\n      }\n\n      this.pos_order_product_variants = [];\n      this.pos_order_product_variants_dict = {};\n      if (value && value.pos_order_product_variants) {\n        this.pos_order_product_variants = value.pos_order_product_variants.map(function(popv) {\n          return new PosOrderProductVariant(popv);\n        });\n\n        for (var i = 0; i < this.pos_order_product_variants.length; ++i) {\n          this.pos_order_product_variants_dict[\n            this.pos_order_product_variants[i].id\n            ] = this.pos_order_product_variants[i];\n        }\n      }\n\n      this.pos_order_fulfillments = [];\n      if (value && value.pos_order_fulfillments) {\n        for (var i = 0; i < value.pos_order_fulfillments.length; ++i) {\n          this.pos_order_fulfillments.push(\n            new PosOrderFulfillment(value.pos_order_fulfillments[i])\n          );\n        }\n\n        // Link the fk objects\n        for (var i = 0; i < this.pos_order_fulfillments.length; ++i) {\n          this.pos_order_fulfillments[i].fillPosOrderProductVariants(\n            this.pos_order_product_variants_dict\n          );\n        }\n      }\n\n      this.pos_order_refunds = [];\n      if (value && value.pos_order_refunds) {\n        for (var i = 0; i < value.pos_order_refunds.length; ++i) {\n          this.pos_order_refunds.push(\n            new PosOrderRefund(value.pos_order_refunds[i])\n          );\n        }\n\n        // Link the fk objects\n        for (var i = 0; i < this.pos_order_fulfillments.length; ++i) {\n          this.pos_order_fulfillments[i].fillPosOrderRefunds(\n            this.pos_order_refunds\n          );\n        }\n      }\n\n      // UI attributes\n      this.refundsDictByPosOrderFulfillmentProductVariantId = {};\n      for (var i = 0; i < this.pos_order_refunds.length; ++i) {\n        var por = this.pos_order_refunds[i];\n        for (\n          var j = 0;\n          j <\n          por.pos_order_refund_fulfillment_product_variants_instances.length;\n          ++j\n        ) {\n          var fulfillmentProductVariantId = por.pos_order_refund_fulfillment_product_variants_instances[j].pos_order_fulfillment_product_variant;\n          var refundTotal = por.pos_order_refund_fulfillment_product_variants_instances[j].total;\n\n          if (this.refundsDictByPosOrderFulfillmentProductVariantId[fulfillmentProductVariantId]) {\n            this.refundsDictByPosOrderFulfillmentProductVariantId[fulfillmentProductVariantId] += refundTotal;\n          } else {\n            this.refundsDictByPosOrderFulfillmentProductVariantId[fulfillmentProductVariantId] = refundTotal;\n          }\n        }\n      }\n      this.is_old_devolution_cards = value ? value.is_old_devolution_cards : false;\n      this.is_old_generated_devolution_cards = value ? value.is_old_generated_devolution_cards : false;\n\n      this.has_bundles = value ? value.has_bundles : false;\n      this.pricing_tier = value ? value.pricing_tier : false;\n\n      /**\n       * Public methods\n       */\n      this.allowedToClose = function() {\n        return !this.autocode && !this.deleted && !this.is_negated;\n      };\n\n      this.findProductVariantIndex = function(productVariantId) {\n        return this.pos_order_product_variants.findIndex(function(popv) {\n          return popv.product_variant === productVariantId;\n        });\n      };\n\n      this.addPosOrderProductVariant = function(popv) {\n        popv.pos_order = this.id;\n        popv.recentlyAdded = true;\n        this.pos_order_product_variants.push(popv);\n        this.updateTotals();\n      };\n\n      this.allowRefundAndReturn = function() {\n        return this.isPrestashopOrder() || this.isShopifyOrder();\n      };\n\n      this.allowReturn = function() {\n        return !(this.isPrestashopOrder() || this.isShopifyOrder() || !this.allowToFulfillOnPlatform());\n      };\n\n      this.allowReceiveReturn = function() {\n        return !this.isAmazonOrder();\n      };\n\n      this.allowToFulfillOnPlatform = function() {\n        return !(this.isAmazonOrder() || (this.isZalandoOrder() && this.created_at > FULFILLMENT_DEPLOY_DATE));\n      };\n\n      this.allowRefund = function() {\n        return !(this.isPrestashopOrder() || this.isShopifyOrder() || !this.allowToFulfillOnPlatform());\n      };\n\n      this.getTotal = function() {\n        var result = 0;\n        var gift_cards = [];\n        var is_v2 = this.is_v2;\n        if (this.pos_order_product_variants) {\n          this.pos_order_product_variants.forEach(function(popv) {\n            if (popv.charged_gift_card || popv.consumed_gift_card) {\n              gift_cards.push(popv);\n            } else {\n              result += popv.getTotal(true, true, is_v2);\n            }\n          });\n        }\n\n        if (this.pos_order_shipping_methods) {\n          this.pos_order_shipping_methods.forEach(function(\n            posOrderShippingMethod\n          ) {\n            result += posOrderShippingMethod.price_incl_tax;\n          });\n        }\n\n        if (this.discount_incl_tax) {\n          result -= this.discount_incl_tax;\n        }\n\n        if (gift_cards.length) {\n          gift_cards.forEach(function(popv) {\n            result += popv.getTotal(false);\n          });\n        }\n\n        if (this.balance_discount && !this.is_devolution) {\n          this.balance_discount = Math.abs(this.balance_discount) > Math.abs(result) ? result : this.balance_discount;\n          this.discountAsPercentage = this.balance_discount != result ? this.balance_discount / result : 1;\n          return Utils.roundPrice(result - this.balance_discount);\n        }\n\n        return Utils.roundPrice(result);\n      };\n\n      this.getSubtotal = function(ignoreDiscount) {\n        var result = 0;\n        var is_v2 = this.is_v2;\n        if (this.pos_order_product_variants) {\n          this.pos_order_product_variants.forEach(function(popv) {\n            result += popv.getSubtotal(true, true, is_v2);\n          });\n        }\n\n        if (this.pos_order_shipping_methods) {\n          this.pos_order_shipping_methods.forEach(function(\n            posOrderShippingMethod\n          ) {\n            result += posOrderShippingMethod.price_excl_tax;\n          });\n        }\n\n        if (!ignoreDiscount && this.discount_excl_tax) {\n          result -= this.discount_excl_tax;\n        }\n        if (this.discountAsPercentage) {\n          result = result * (1 - this.discountAsPercentage);\n        }\n        return Utils.roundPrice(result);\n      };\n\n      this.getTotalTaxes = function() {\n        return this.total - this.subtotal;\n      };\n\n      this.getPendingAmount = function() {\n        var pending = this.total; // required by the pending field at the end of the statement\n        this.pos_order_payment_methods.forEach(function(posOrderPaymentMethod) {\n          if (posOrderPaymentMethod.pos_order_refunds && !posOrderPaymentMethod.pos_order_refunds.length) {\n            pending -= posOrderPaymentMethod.given_amount;\n          }\n        });\n        if (this.is_old_devolution_cards) {\n          this.devolution_cards.forEach(function(devolutionCard) {\n            pending += devolutionCard.amount;\n          });\n        }\n        return pending > 0 ? pending : null;\n      };\n\n      this.getTotalPendingToRefund = function() {\n        var total_pending = 0;\n        var payment_method_available_left = {};\n        if (this.pos_order_refunds) {\n          var pos_order_payment_methods_dict = this.pos_order_payment_methods_dict;\n          this.pos_order_refunds.forEach(function(posOrderRefund) {\n            var amount_to_refund = Math.abs(posOrderRefund.total);\n            var posOrderPaymentMethod = pos_order_payment_methods_dict[posOrderRefund.pos_order_payment_method];\n            if (posOrderPaymentMethod) {\n              var available_left;\n              if (!(posOrderPaymentMethod.id in payment_method_available_left)) {\n                if (paymentMethod.payment_method_instance.is_default_cash) {\n                  available_left = Math.abs(posOrderPaymentMethod.given_amount);\n                } else {\n                  available_left = Math.abs(posOrderPaymentMethod.amount);\n                }\n              } else {\n                available_left = payment_method_available_left[posOrderPaymentMethod.id];\n              }\n              if (available_left >= amount_to_refund) {\n                available_left = available_left - amount_to_refund;\n              } else {\n                total_pending += amount_to_refund - available_left;\n                available_left = 0;\n              }\n              payment_method_available_left[posOrderPaymentMethod.id] = available_left;\n            } else {\n              total_pending += amount_to_refund;\n            }\n          });\n        }\n        return total_pending;\n      };\n\n      this.getTotalAssigned = function() {\n        var result = 0.0;\n        if (this.pos_order_payment_methods) {\n          this.pos_order_payment_methods.forEach(function(paymentMethod) {\n            if (paymentMethod.given_amount) {\n              result += parseFloat(paymentMethod.given_amount);\n            }\n          });\n        }\n        return Utils.roundPrice(result);\n      };\n\n      this.getPendingToAssigned = function(avoidConsumedGiftCards) {\n        return Utils.roundPrice(Math.max(this.total - this.getTotalAssigned(), 0));\n      };\n\n      this.getBalance = function() {\n        if (this.pos_order_payment_methods.length === 0) {\n          return 0;\n        }\n        return Utils.roundPrice(\n          Math.max(this.getTotalAssigned() - this.total, 0)\n        );\n      };\n\n      this.updateTotals = function() {\n        if (this.pos_order_product_variants) {\n          this.pos_order_product_variants.forEach(function(popv) {\n            popv.recalculate();\n          });\n        }\n\n        this.total = this.getTotal();\n        this.subtotal = this.getSubtotal();\n        this.total_taxes = this.getTotalTaxes();\n        this.output_amount = this.getBalance();\n        this.pending_amount = this.getPendingAmount();\n\n        this.updateTaxesDict();\n      };\n\n      this.updateTaxesDict = function() {\n        this.taxes = {};\n        for (var i = 0; i < this.pos_order_product_variants.length; ++i) {\n          if (!this.taxes[this.pos_order_product_variants[i].tax]) {\n            this.taxes[this.pos_order_product_variants[i].tax] = [];\n          }\n          this.taxes[this.pos_order_product_variants[i].tax].push(\n            this.pos_order_product_variants[i]\n          );\n        }\n      };\n\n      this.isAllowedToCreateDevolution = function() {\n        if (this.isEcommerceOrder()) {\n          if (!Session.hasPermissions('ecommerce.orders.edit')) {\n            return false;\n          }\n        } else {\n          if (!Session.hasPermissions('sale.sales_log.create_devolution')) {\n            return false;\n          }\n        }\n        if (this.is_negated) {\n          return false;\n        }\n        if (\n          !this.pos_order_product_variants ||\n          this.pos_order_product_variants.length === 0\n        ) {\n          return false;\n        }\n        return this.pos_order_product_variants.some(function(\n          posOrderProductVariant\n        ) {\n          return posOrderProductVariant.amount > 0;\n        });\n      };\n\n      this.isAllowedToAddProducts = function() {\n        if (this.isEcommerceOrder()) {\n          if (!Session.hasPermissions('ecommerce.orders.edit')) {\n            return false;\n          }\n        } else {\n          if (!Session.hasPermissions('sale.sales_log.update_sale')) {\n            return false;\n          }\n        }\n        return true;\n      };\n\n      this.canCreateInvoice = function() {\n        if (this.isEcommerceOrder()) {\n          return true;\n        } else {\n          if (!Session.hasPermissions('sale.sales_log.generate_invoice')) {\n            return false;\n          }\n        }\n        return true;\n      };\n\n      this.canEditPosOrderProductVariant = function() {\n        return !this.is_negated && this.hasOrderEditPermission();\n      };\n\n      this.canEditContact = function() {\n        var has_permission;\n        if (this.isEcommerceOrder()) {\n          has_permission = Session.hasPermissions('ecommerce.orders.edit');\n        } else {\n          has_permission = Session.hasPermissions('sale.sales_log.update_customer');\n        }\n        return !!this.register && !this.is_negated && this.hasOrderEditPermission() && has_permission;\n      };\n\n      this.canEditPosOrderPaymentMethods = function() {\n        //TODO keep this in mind for the sync orders refactor\n        return (!this.site || this.site && this.is_devolution) && !this.is_negated && this.hasOrderEditPermission();\n      };\n\n      this.canEditPosOrderShippingMethods = function() {\n        return !this.site && !this.is_negated && this.hasOrderEditPermission();\n      };\n\n      this.hasOrderEditPermission = function() {\n        var has_permission;\n        if (this.isEcommerceOrder()) {\n          has_permission = Session.hasPermissions('ecommerce.orders.edit');\n        } else {\n          has_permission = Session.hasPermissions('sale.sales_log.update_sale');\n        }\n        return has_permission;\n      };\n\n      this.isEcommerceOrder = function() {\n        return this.site != null;\n      };\n\n      this.canUpdateFulfillments = function() {\n        return !(this.isEcommerceOrder() && !this.site.upload_fulfillments) && this.hasOrderEditPermission();\n      };\n\n      this.isPrestashopOrder = function() {\n        return this.isEcommerceOrder() && this.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP;\n      };\n\n      this.isShopifyOrder = function() {\n        return this.isEcommerceOrder() && this.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY;\n      };\n\n      this.isZalandoOrder = function() {\n        return this.site && this.site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO;\n      };\n\n      this.isEciOrder = function() {\n        return this.site && this.site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI;\n      };\n\n      this.isAmazonOrder = function() {\n        return this.site && (this.site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES || this.site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US);\n      };\n\n      this.canAllocateItems = function() {\n        return this.canUpdateFulfillments();\n      };\n\n      this.canPickUpItems = function() {\n        return this.canUpdateFulfillments();\n      };\n\n      this.canShipItems = function() {\n        return this.canUpdateFulfillments();\n      };\n\n      this.canReturnItems = function() {\n        if (this.isEciOrder()) {\n          return false;\n        }\n        if (!this.isEcommerceOrder()) {\n          if (!Session.hasPermissions('sale.sales_log.create_devolution')) {\n            return false;\n          }\n        }\n        return !this.allowRefundAndReturn() && !this.is_negated && this.canUpdateFulfillments();\n      };\n\n      this.canReceiveReturnItems = function() {\n        return this.canUpdateFulfillments();\n      };\n\n      this.canBackToShippedFulfillment = function() {\n        return !this.site && this.canUpdateFulfillments() && !this.is_v2;\n      };\n\n      this.canBackToPickedUpFulfillment = function() {\n        return !this.site && this.canUpdateFulfillments() && !this.is_v2;\n      };\n\n      this.canBackToPendingFulfillment = function() {\n        return !this.site && this.canUpdateFulfillments();\n      };\n\n      this.canBackToReturnedFulfillment = function() {\n        return !this.site && this.canUpdateFulfillments();\n      };\n\n      this.canCancelFulfillment = function() {\n        return !this.site && this.canUpdateFulfillments();\n      };\n\n      this.canEditGiftCardCode = function(popv) {\n        return popv.is_gift_card && this.autocode && !this.autocode;\n      };\n\n      this.getPaymentStatusColor = function() {\n        return POS_ORDER_PAYMENT_STATUSES_COLORS[this.payment_status];\n      };\n\n      this.getPaymentStatusText = function() {\n        return 'ORDER.' + POS_ORDER_PAYMENT_STATUSES[this.payment_status];\n      };\n\n      this.isPopvFulfilled = function(popv_id) {\n        if (this.pos_order_fulfillments == []) {\n          return false;\n        } else {\n\n          for (var pof_id in this.pos_order_fulfillments) {\n            for (var pofpv_id in this.pos_order_fulfillments[pof_id].pos_order_fulfillment_product_variant_instances) {\n              if (this.pos_order_fulfillments[pof_id].pos_order_fulfillment_product_variant_instances[pofpv_id].pos_order_product_variant == popv_id) {\n                return true;\n              }\n            }\n          }\n\n          return false;\n        }\n      };\n\n      this.deletePosOrderAndCreateNegativePaymentMethods = function(deletePosOrderFunc, registerId) {\n        var posOrder = this;\n        api.sales.registers.get(\n          {\n            id: registerId,\n            serializer: 'RegisterSimpleSerializer'\n          },\n          function(results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              posOrder.deletePosOrderAndCreateNegativePaymentMethodsFromRegisterInstance(deletePosOrderFunc, results);\n            } else {\n              vm.state = vm.STATES.ERROR;\n              console.error('Unable to get the defaultRegister');\n            }\n          });\n      };\n\n      this.deletePosOrderAndCreateNegativePaymentMethodsFromRegisterInstance = function(deletePosOrderFunc, register) {\n        if (register.is_closed) {\n          var dialog = $mdDialog.alert()\n            .title($filter('translate')('SALES.CANNOT_DELETE_REGISTER_CLOSED_TITLE'))\n            .textContent($filter('translate')('SALES.CANNOT_DELETE_REGISTER_CLOSED_MSG'))\n            .clickOutsideToClose(true)\n            .parent(angular.element(document.body))\n            .ok($filter('translate')('GENERAL.CLOSE'));\n\n          $mdDialog.show(dialog);\n        } else {\n          deletePosOrderFunc(true, register.id);\n        }\n      };\n\n      this.hasPaymentMethodOnClosedRegisterActivity = function() {\n        for (posOrderPaymentMethod in this.pos_order_payment_methods) {\n          if (this.pos_order_payment_methods[posOrderPaymentMethod].register_activity_instance.closed_at) return true;\n        }\n        return false;\n      };\n\n      this.hasEposItalyActive = function() {\n        if (!this.register_instance) {\n          return false;\n        }\n        return this.register_instance.related_integration_app === INTEGRATION_APP_TYPE.EPOS_ITALY;\n      };\n\n      this.hasVerifactuInvoices = function() {\n        if (!this.pos_order_invoices || this.pos_order_invoices.length === 0) {\n          return false;\n        }\n        return this.pos_order_invoices.some(function(invoice) {\n          return !!invoice.verifactu_data;\n        });\n      };\n\n      this.deletePosOrderPre = function(deletePosOrderFunc) {\n        if (Session.hasPermission('sale.sales_log.delete')) {\n          if (!this.autocode && this.hasPaymentMethodOnClosedRegisterActivity()) {\n            var posOrder = this;\n            var confirm = $mdDialog.confirm()\n              .title($filter('translate')('SALES.CREATE_NEGATIVE_PAYMENT_METHODS_TITLE'))\n              .textContent($filter('translate')('SALES.CREATE_NEGATIVE_PAYMENT_METHODS_MSG'))\n              .clickOutsideToClose(false)\n              .parent(angular.element(document.body))\n              .ok($filter('translate')('GENERAL.YES'))\n              .cancel($filter('translate')('GENERAL.NO'));\n\n            $mdDialog.show(confirm).then(function() {\n              var defaultRegisterId = $window.localStorage.getItem(Session.company.id + '::defaultRegister');\n              if (defaultRegisterId) {\n                posOrder.deletePosOrderAndCreateNegativePaymentMethods(deletePosOrderFunc, defaultRegisterId);\n              } else {\n                $mdDialog.show({\n                  controller: 'SelectRegisterDialogController',\n                  controllerAs: 'vm',\n                  templateUrl: 'app/main/apps/sale/views/registers/dialogs/select-register/select-register-dialog.html',\n                  parent: angular.element(document.body),\n                  clickOutsideToClose: false,\n                  resolve: {\n                    RegistersData: function(apiResolver) {\n                      return apiResolver.resolve('sales.registers@list');\n                    }\n                  },\n                  locals: {\n                    message: 'SELECT_REGISTER.SELECT_REGISTER_MSG'\n                  }\n                }).then(function(result) {\n                  defaultRegisterId = JSON.stringify(result.id);\n                  localStorage.setItem(Session.company.id + '::defaultRegister', defaultRegisterId);\n                  posOrder.deletePosOrderAndCreateNegativePaymentMethodsFromRegisterInstance(deletePosOrderFunc, result);\n                }, function() {\n                  // Nothing to do\n                });\n              }\n            }, function() {\n              deletePosOrderFunc(false);\n            });\n          } else {\n            deletePosOrderFunc(false);\n          }\n        }\n      };\n\n      this.getChargedGiftCards = function() {\n        return this.pos_order_product_variants.filter(function(popv) {\n          return popv.charged_gift_card;\n        });\n      };\n\n      this.getConsumedGiftCards = function() {\n        return this.pos_order_product_variants.filter(function(popv) {\n          return popv.consumed_gift_card;\n        });\n      };\n\n      /**\n       * Initialize\n       */\n      this.updateTotals();\n    }\n\n    return PosOrder;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-shipping-method', [])\n    .factory('PosOrderShippingMethod', _PosOrderShippingMethod);\n\n  /** @ngInject */\n  function _PosOrderShippingMethod(ShippingMethod,\n                                   COMERCIAL_INVOICE_TYPES_OF_EXPORT,\n                                   COMERCIAL_INVOICE_TERMS_OF_TRADE) {\n\n    function PosOrderShippingMethod(value) {\n\n      /**\n       * Public attributes\n       */\n      // Commercial invoice fields\n      this.id = value ? value.id : null;\n      this.pos_order = value ? value.pos_order : null;\n      this.shipping_method = value ? value.shipping_method : null;\n      this.shipping_method_name = value ? value.shipping_method_name : null;\n      this.price_incl_tax = value ? value.price_incl_tax : null;\n      this.shipping_method_instance = value && value.shipping_method_instance ?\n        new ShippingMethod(value.shipping_method_instance) : null;\n      this.commercial_invoice = value ? value.commercial_invoice : null;\n      this.invoice_date = value && value.invoice_date ? new Date(value.invoice_date) : null;\n      this.tracking_code = value ? value.tracking_code : null;\n      this.carrier = value ? value.carrier : null;\n      this.total_net_weight = value ? value.total_net_weight : null;\n      this.total_declared_value = value ? value.total_declared_value : null;\n      this.total_gross_weight = value ? value.total_gross_weight : null;\n      this.freight_and_insurance_charges = value ? value.freight_and_insurance_charges : null;\n      this.freight_and_insurance_charges = value ? value.freight_and_insurance_charges : null;\n      this.total_shipment_pieces = value ? value.total_shipment_pieces : null;\n      this.other_charges = value ? value.other_charges : null;\n      this.currency = value ? value.currency : null;\n      this.total_invoice_amount = value ? value.total_invoice_amount : null;\n      this.type_of_export = value ? value.type_of_export : null;\n      this.terms_of_trade = value && value.terms_of_trade ?\n        value.terms_of_trade :\n        COMERCIAL_INVOICE_TERMS_OF_TRADE.TERM_OF_TRADE_DDU;\n      this.reason_for_export = value && value.reason_for_export ?\n        value.reason_for_export :\n        COMERCIAL_INVOICE_TYPES_OF_EXPORT.TYPE_OF_EXPORT_PERMANENT;\n      this.general_notes = value ? value.general_notes : null;\n    }\n\n    return PosOrderShippingMethod;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-refund', [])\n    .factory('PosOrderRefund', _PosOrderRefund);\n\n  /** @ngInject */\n  function _PosOrderRefund(PosOrderRefundFulfillmentProductVariant) {\n\n    function PosOrderRefund(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.number = value ? value.number : null;\n      this.created_by = value ? value.created_at : null;\n      this.created_at = value && value.created_by ? new Date(value.created_by) : null;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.notes = value ? value.notes : null;\n      this.pos_order_refund_fulfillment_product_variants = value ? value.pos_order_refund_fulfillment_product_variants : [];\n      this.subtotal = value ? value.subtotal : null;\n      this.total_taxes = value ? value.total_taxes : null;\n      this.total = value ? value.total : null;\n      this.pos_order_payment_method = value ? value.pos_order_payment_method : null;\n\n      this.pos_order_refund_fulfillment_product_variants_instances = [];\n      if (value && value.pos_order_refund_fulfillment_product_variants_instances) {\n        for (var i = 0; i < value.pos_order_refund_fulfillment_product_variants_instances.length; ++i) {\n          this.pos_order_refund_fulfillment_product_variants_instances.push(\n            new PosOrderRefundFulfillmentProductVariant(value.pos_order_refund_fulfillment_product_variants_instances[i]));\n        }\n      }\n\n      /**\n       * Public methods\n       */\n    }\n\n    return PosOrderRefund;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-refund-fulfillment-product-variant', [])\n    .factory('PosOrderRefundFulfillmentProductVariant', _PosOrderRefundFulfillmentProductVariant);\n\n  /** @ngInject */\n  function _PosOrderRefundFulfillmentProductVariant() {\n\n    function PosOrderRefundFulfillmentProductVariant(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.amount = value ? value.amount : null;\n      this.subtotal = value ? value.subtotal : null;\n      this.total_taxes = value ? value.total_taxes : null;\n      this.total = value ? value.total : null;\n      this.pos_order_fulfillment_product_variant = value ? value.pos_order_fulfillment_product_variant : null;\n\n      /**\n       * Public methods\n       */\n    }\n\n    return PosOrderRefundFulfillmentProductVariant;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-product-variant', [])\n    .factory('PosOrderProductVariant', _PosOrderProductVariant);\n\n  /** @ngInject */\n  function _PosOrderProductVariant(Utils, FeatureFlagService) {\n    function PosOrderProductVariant(value) {\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.pos_order = value ? value.pos_order : null;\n\n      this.product = value ? value.product : null;\n      this.product_name = value ? value.product_name : null;\n      this.product_code = value ? value.product_code : null;\n      this.tags = value ? value.tags : null;\n      this.description = value ? value.description : null;\n      this.notes = value ? value.notes : null;\n      this.ddp_price = value ? value.ddp_price : null;\n      this.category = value ? value.category : null;\n      this.category_name = value ? value.category_name : null;\n      this.category_code = value ? value.category_code : null;\n      this.subcategory = value ? value.subcategory : null;\n      this.subcategory_name = value ? value.subcategory_name : null;\n      this.subcategory_code = value ? value.subcategory_code : null;\n      this.composition = value ? value.composition : null;\n      this.composition_name = value ? value.composition_name : null;\n      this.composition_code = value ? value.composition_code : null;\n      this.brand = value ? value.brand : null;\n      this.brand_name = value ? value.brand_name : null;\n      this.brand_code = value ? value.brand_code : null;\n      this.season = value ? value.season : null;\n      this.season_name = value ? value.season_name : null;\n      this.season_code = value ? value.season_code : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.product_variant_size_name = value\n        ? value.product_variant_size_name\n        : null;\n      this.product_variant_color_name = value\n        ? value.product_variant_color_name\n        : null;\n      this.color_code = value ? value.color_code : null;\n      this.size_code = value ? value.size_code : null;\n      this.barcode = value ? value.barcode : null;\n      this.source_stock = value ? value.source_stock : null;\n      this.target_stock = value ? value.target_stock : null;\n      this.cover_thumbnail = value ? value.cover_thumbnail : null;\n      this.stock = value ? value.stock : null;\n      this.seller = value ? value.seller : null;\n      this.seller_instance = value ? value.seller_instance : null;\n\n      this.pricing_tier = value ? value.pricing_tier : null;\n      this.pricing_tier_name = value ? value.pricing_tier_name : null;\n      this.notes = value ? value.notes : null;\n      this.devolution_of = value ? value.devolution_of : null;\n      this.devolutions_of = value ? value.devolutions_of : null;\n\n      this.promotion = value ? value.promotion : null;\n      this.promotion_name = value ? value.promotion_name : null;\n      this.promotion_public_name = value ? value.promotion_public_name : null;\n\n      this.amount = value ? value.amount : null;\n      this.returned_amount = value ? value.returned_amount : null;\n      this.canceled_amount = value ? value.canceled_amount : null;\n      this.amount_less_returns = value ? value.amount_less_returns : null;\n\n      this.sku = value ? value.sku : null;\n\n      // Price\n      this.custom_price_incl_tax = value ? value.custom_price_incl_tax : null;\n      this.custom_price_excl_tax = value ? value.custom_price_excl_tax : null;\n      this.price_incl_tax = value ? value.price_incl_tax : null;\n      this.price_excl_tax = value ? value.price_excl_tax : null;\n      this.tax = value ? value.tax : null;\n      this.tax_name = value ? value.tax_name : null;\n      this.tax_percent_value = value ? value.tax_percent_value : null;\n      this.discount = value ? value.discount : null;\n      this.discount_price_incl_tax = value\n        ? value.discount_price_incl_tax\n        : null;\n      this.discount_price_excl_tax = value\n        ? value.discount_price_excl_tax\n        : null;\n\n      this.margin = value ? value.margin : null;\n      this.cost = value ? value.cost : null;\n      this.subtotal = value ? value.subtotal : null;\n      this.total = value ? value.total : null;\n\n      // Gift card\n      this.is_gift_card = value ? value.is_gift_card : false;\n      this.gift_card = value ? value.gift_card : null; // not used?\n      this.consumed_gift_card = value ? value.consumed_gift_card : null;\n      this.gift_card_code = value ? value.gift_card_code : null;\n      this.consumed_gift_card_is_voucher = value ? value.consumed_gift_card_is_voucher : false;\n      this.charged_gift_card = value ? value.charged_gift_card : null;\n      this.charged_gift_card_is_voucher = value ? value.charged_gift_card_is_voucher : false;\n\n      // Ecommerce\n      this.origin_id = value ? value.origin_id : null;\n\n      // UI attributes\n      this.editingPrice = false;\n      this.editingName = false;\n      this.recentlyAdded = false;\n      this.hide_from_lists = value ? value.hide_from_lists : false;\n\n      // Uid\n      this.uid_stock = value ? value.uid_stock : null;\n      this.uid_stock_uid = value ? value.uid_stock_uid : null;\n      this.uid_stock_best_before_date = value ? value.uid_stock_best_before_date : null;\n      this.uid_stock_expiration_date = value ? value.uid_stock_expiration_date : null;\n      this.uid_stocks = value ? value.uid_stocks: null;\n      this.is_batches_manager = value ? value.is_batches_manager : false;\n\n      // Bundles\n      this.bundle_content = value ? value.bundle_content : null;\n      this.pos_order_bundle_content = value ? value.pos_order_bundle_content : null;\n      this.is_bundle = value ? value.is_bundle : null;\n      this.showBundle = value ? value.showBundle : false;\n\n      this.getPopvCover = function () {\n        if (this.cover_thumbnail) {\n          return this.cover_thumbnail;\n        } else if (this.is_gift_card) {\n          return '/assets/images/wallet-giftcard.b55a1923.svg';\n        } else if (this.is_bundle) {\n          return '/assets/images/custom-material-design-icons/package-variant-closed-3.5badf57d.svg';\n        } else {\n          return '/assets/images/package-variant-closed.9c71cbbe.png';\n        }\n      }\n\n      /**\n       * Public methods\n       */\n      this.getUnitPrice = function (inclTax, round) {\n        var unitPrice;\n        if (\n          this.custom_price_incl_tax !== null &&\n          this.custom_price_excl_tax !== null\n        ) {\n          // Sometimes, when the user edits the custom price in the sell view, it could happen that\n          // custom_price_excl_tax and custom_price_incl_tax have the same value. In this case we need to recalculate\n          // the price taking into account the taxes\n          if (this.custom_price_excl_tax === this.custom_price_incl_tax) {\n            if (inclTax) {\n              unitPrice = this.custom_price_incl_tax;\n            } else {\n              unitPrice = (this.custom_price_incl_tax * 100) / (100 + this.tax_percent_value);\n            }\n          } else {\n            unitPrice = inclTax\n              ? this.custom_price_incl_tax\n              : this.custom_price_excl_tax;\n          }\n        } else if (this.discount !== null) {\n          unitPrice = inclTax\n            ? this.discount_price_incl_tax\n            : this.discount_price_excl_tax;\n        } else {\n          unitPrice = inclTax ? this.price_incl_tax : this.price_excl_tax;\n        }\n\n        if (round) {\n          unitPrice = Utils.roundPrice(unitPrice);\n        }\n\n        return unitPrice;\n      };\n\n      this.getTotal = function (includeReturns, round, is_v2) {\n        if (typeof round === \"undefined\") {\n          round = true;\n        }\n        if (is_v2 === undefined) {\n          is_v2 = false;\n        }\n        var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('CREATE_POS_ORDER_V2');\n        var unitPrice = this.getUnitPrice(true, false);\n        var total;\n        if (includeReturns) {\n          if (flag_enabled && is_v2) {\n            total = unitPrice * this.amount;\n          } else {\n            total = unitPrice * (this.amount - this.returned_amount - this.canceled_amount);\n          }\n        } else {\n          if (flag_enabled && is_v2) {\n            total = unitPrice * this.amount;\n          } else {\n            total = unitPrice * (this.amount - this.canceled_amount);\n          }\n        }\n\n        return round ? Utils.roundPrice(total) : Utils.roundPrice(total, 6);\n      };\n\n      this.getSubtotal = function (includeReturns, round, is_v2) {\n        if (typeof round === \"undefined\") {\n          round = true;\n        }\n        if (is_v2 === undefined) {\n          is_v2 = false;\n        }\n        var subtotal;\n        var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('CREATE_POS_ORDER_V2');\n        var unitPrice = this.getUnitPrice(false, false);\n        if (includeReturns) {\n          if (flag_enabled && is_v2) {\n            subtotal = unitPrice * this.amount;\n          } else {\n            subtotal = unitPrice * (this.amount - this.returned_amount - this.canceled_amount);\n          }\n        } else {\n          if (flag_enabled && is_v2) {\n            subtotal = unitPrice * this.amount;\n          } else {\n            subtotal = unitPrice * (this.amount - this.canceled_amount);\n          }\n        }\n        return round ? Utils.roundPrice(subtotal) : subtotal;\n      };\n\n      this.getTaxQuantity = function () {\n        return this.getTotal(true, true) - this.getSubtotal(true, true);\n      };\n\n      this.getTotalReturned = function () {\n        return this.getUnitPrice(true) * this.returned_amount;\n      };\n\n      this.recalculateDiscounts = function () {\n        // promotion.fixed_discount is more important than posOrderProductVariant.discount\n        if (this.promotion && this.promotion_discount) {\n          this.discount = this.promotion_fixed_discount;\n\n          this.discount_price_excl_tax = Utils.roundPrice(\n            this.price_excl_tax * (1.0 - parseFloat(this.discount) / 100.0)\n          );\n          this.discount_price_incl_tax = Utils.roundPrice(\n            this.price_incl_tax * (1.0 - parseFloat(this.discount) / 100.0)\n          );\n        } else if (this.discount) {\n          this.discount = Math.max(this.discount, 0);\n          this.discount = Math.min(this.discount, 100);\n\n          var price_excl_tax = this.price_incl_tax / (1.0 + (parseFloat(this.tax_percent_value) / 100.0));this.discount_price_excl_tax =\n            price_excl_tax * (1.0 - parseFloat(this.discount) / 100.0);\n          this.discount_price_incl_tax =\n            this.price_incl_tax * (1.0 - parseFloat(this.discount) / 100.0);\n\n          this.discount_price_excl_tax =\n            price_excl_tax * ((100.0 - parseFloat(this.discount)) / 100.0);\n          this.discount_price_incl_tax = this.discount_price_excl_tax * (1.0 + (parseFloat(this.tax_percent_value) / 100.0))\n        }\n      };\n\n      this.recalculate = function () {\n        this.recalculateDiscounts();\n        this.subtotal = this.getSubtotal();\n        this.total = this.getTotal();\n      };\n\n      /**\n       * Returs true if the old price (before customs and discounts) must be showed or not\n       * @returns {boolean}\n       */\n      this.showStrikePrice = function () {\n        this.recalculate();\n        return (\n          !!this.discount ||\n          (this.custom_price_incl_tax !== null &&\n            this.custom_price_incl_tax < this.price_incl_tax)\n        );\n      };\n\n      /**\n       * Returns the original price (normally to showed as strike text)\n       * @param avoidReturns\n       */\n      this.getOriginalTotal = function (avoidReturns) {\n        this.recalculate();\n        if (avoidReturns) {\n          return this.amount * this.price_incl_tax;\n        }\n        return (this.amount - this.returned_amount) * this.price_incl_tax;\n      };\n\n      this.setCustomPriceInclTax = function (custom_price_incl_tax) {\n        this.custom_price_incl_tax = custom_price_incl_tax;\n        if (\n          this.custom_price_incl_tax === null ||\n          this.custom_price_incl_tax === undefined\n        ) {\n          this.custom_price_excl_tax = null;\n        } else {\n          this.custom_price_excl_tax = Utils.roundPrice(\n            parseFloat(\n              this.custom_price_incl_tax / (1 + this.tax_percent_value / 100.0)\n            )\n          );\n        }\n        this.recalculate();\n      };\n\n      this.setDiscount = function (discount) {};\n\n      this.showDiscountInput = function () {\n        return (\n          (this.custom_price_incl_tax === null ||\n            this.custom_price_incl_tax === undefined) &&\n          !this.is_gift_card\n        );\n      };\n\n      this.showDiscountText = function () {\n        return (\n          this.discount && !this.is_gift_card\n        );\n      };\n\n      /**\n       * Initialize\n       */\n      this.recalculate();\n    }\n\n    return PosOrderProductVariant;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-payment-method', [])\n    .factory('PosOrderPaymentMethod', _PosOrderPaymentMethod);\n\n  /** @ngInject */\n  function _PosOrderPaymentMethod() {\n\n    function PosOrderPaymentMethod(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.payment_method_name = value ? value.payment_method_name : null;\n      this.amount = value ? value.amount : null;\n      this.given_amount = value ? value.given_amount : null;\n      this.payment_method = value ? value.payment_method : null;\n      this.register_activity = value ? value.register_activity : null;\n      this.register_activity_instance = value ? value.register_activity_instance : {};\n      this.pos_order_refunds = value ? value.pos_order_refunds : [];\n      this.payment_method_instance = value ? value.payment_method_instance : null;\n    }\n\n    return PosOrderPaymentMethod;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-fulfillment', [])\n    .factory('PosOrderFulfillment', _PosOrderFulfillment);\n\n  /** @ngInject */\n  function _PosOrderFulfillment(\n    PosOrderFulfillmentProductVariant,\n    PosOrderFulfillmentShippingBox,\n    PackingOrderSendcloudData,\n    POS_ORDER_FULFILLMENTS,\n    ECOMMERCE_PLATFORMS,\n    RETURN_MANAGEMENT_POLICY\n  ) {\n\n    function PosOrderFulfillment(value) {\n\n      var ACTION_SHIP = 'ship';\n      var ACTION_PICK_UP = 'pick_up';\n      var AVAILABLE_PLATFORMS_FOR_RETURN_MANAGEMENT_POLICY = [\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US,\n        ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES\n      ];\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.origin_code = value ? value.origin_code : null;\n      this.pos_order = value ? value.pos_order: null;\n      this.number = value ? value.number : null;\n      this.company = value ? value.company : null;\n      this.type = value ? value.type : null;\n      this.created_at = value && value.created_at ? new Date(value.created_at) : null;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.tracking_code = value ? value.tracking_code : null;\n      this.pos_order_fulfillment_product_variants = value ? value.pos_order_fulfillment_product_variants : null;\n      this.custom_source_warehouse = value ? value.custom_source_warehouse : null;\n      this.is_fulfillment_blocked = value ? value.is_fulfillment_blocked : null;\n      this.picking_order = value ? value.picking_order : null;\n      this.packing_order = value ? value.packing_order : null;\n\n      this.packing_order_sendcloud_data = [];\n      if (value && value.packing_order_sendcloud_data) {\n        for (var i = 0; i < value.packing_order_sendcloud_data.length; ++i) {\n          this.packing_order_sendcloud_data.push(new PackingOrderSendcloudData(value.packing_order_sendcloud_data[i]));\n        }\n      }\n\n      this.pos_order_fulfillment_product_variant_instances = [];\n      if (value && value.pos_order_fulfillment_product_variant_instances) {\n        for (var i = 0; i < value.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          this.pos_order_fulfillment_product_variant_instances.push(new PosOrderFulfillmentProductVariant(value.pos_order_fulfillment_product_variant_instances[i]));\n        }\n      }\n\n      this.pos_order_fulfillment_shipping_boxes = value ? value.pos_order_fulfillment_shipping_boxes : [];\n      this.pos_order_fulfillment_shipping_box_instances = [];\n      if (value && value.pos_order_fulfillment_shipping_box_instances) {\n        for (var i = 0; i < value.pos_order_fulfillment_shipping_box_instances.length; ++i) {\n          this.pos_order_fulfillment_shipping_box_instances.push(new PosOrderFulfillmentShippingBox(value.pos_order_fulfillment_shipping_box_instances[i]));\n        }\n      }\n\n      // UI attributes\n      this.updatingAmounts = false;\n      this.updatingAction = '';\n      this.refundAmount = null;\n      this.refundPaymentMethod = null;\n\n      this.refundPaymentMethodError = false;\n      this.refundAmountError = false;\n\n      /**\n       * Public methods\n       */\n      this.fillPosOrderProductVariants = function(popvDict) {\n        for (var i = 0; i < value.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          this.pos_order_fulfillment_product_variant_instances[i].fillPosOrderProductVariants(popvDict);\n        }\n      };\n\n      this.fillPosOrderRefunds = function(posOrderRefunds) {\n        // Create a dict of refund amounts by pos_order_fulfillment_product_variant\n        var refundsDict = {};\n        posOrderRefunds.forEach(function(posOrderRefund) {\n          posOrderRefund.pos_order_refund_fulfillment_product_variants_instances.forEach(function(porfpv) {\n            if (!refundsDict[porfpv.pos_order_fulfillment_product_variant]) {\n              refundsDict[porfpv.pos_order_fulfillment_product_variant] = 0;\n            }\n            refundsDict[porfpv.pos_order_fulfillment_product_variant] += porfpv.amount;\n          });\n        });\n\n        for (var i = 0; i < value.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          this.pos_order_fulfillment_product_variant_instances[i].setRefunds(refundsDict[this.pos_order_fulfillment_product_variant_instances[i].id]);\n        }\n      };\n\n      this.isPending = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING;\n      };\n\n      this.isAllocated = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED;\n      };\n\n      this.getTranslation = function() {\n        return 'ORDER.' + POS_ORDER_FULFILLMENTS[this.type];\n      };\n\n      this.allowWarehouseChange = function() {\n        return true;\n      };\n\n      this.allowCancel = function() {\n        return !this.updatingAction && this.type !== POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_CANCELLED;\n      };\n\n      this.allowAllocate = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING;\n      };\n\n      this.allowPickUp = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING || this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED;\n      };\n\n      this.allowShip = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING || this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED;\n      };\n\n      this.allowReturn = function() {\n        return (this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_SHIPPED || this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PICKED_UP);\n      };\n\n      this.allowReceiveReturn = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_RETURNED;\n      };\n\n      this.allowRefund = function() {\n        return this.type !== POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING && this.getTotalItems() > this.getTotalRefundedItems();\n      };\n\n      this.allowRefundAndReturn = function() {\n        return this.type !== POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING && this.getTotalItems() > this.getTotalRefundedItems() && (this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_SHIPPED || this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PICKED_UP);\n      };\n\n      this.allowBackToShipped = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_RETURNED;\n      };\n\n      this.allowBackToPickedUp = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_RETURNED;\n      };\n\n      this.allowBackToPending = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_SHIPPED ||\n          this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PICKED_UP;\n      };\n\n      this.allowBackToReturned = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_RETURNED_RECEIVED;\n      };\n\n      this.allowDeleteFromSendcloud = function() {\n        return this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED && this.sendcloud_pos_order_fulfillment_data && !this.is_fulfillment_blocked;\n      };\n\n      this.allowSendToSendcloud = function() {\n        return (this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING || this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED) && !this.sendcloud_pos_order_fulfillment_data;\n      };\n\n      this.getTotalItems = function() {\n        var result = 0;\n        for (var i = 0; i < value.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          result += this.pos_order_fulfillment_product_variant_instances[i].amount;\n        }\n        return result;\n      };\n\n      this.getTotalRefundedItems = function() {\n        var result = 0;\n        for (var i = 0; i < value.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          result += this.pos_order_fulfillment_product_variant_instances[i].refunds;\n        }\n        return result;\n      };\n\n      this.getTotalRefundUploadAmounts = function() {\n        var result = 0;\n        for (var i = 0; i < value.pos_order_fulfillment_product_variant_instances.length; ++i) {\n          result += this.pos_order_fulfillment_product_variant_instances[i].refundUploadAmount;\n        }\n        return result;\n      };\n\n      this.getUpdatingAmountsDict = function() {\n        var result = {};\n        var attribute = this.updatingAction === 'refund' || this.updatingAction === 'refund_return' ? 'refundUploadAmount' : 'uploadAmount';\n\n        this.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          if (pofpv.uploadAmount) {\n            result[pofpv.id] = pofpv[attribute];\n          }\n        });\n        return result;\n      };\n\n      this.getUpdatingWeightDict = function() {\n        var result = {};\n        this.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          result[pofpv.id] = pofpv.weight;\n        });\n        return result;\n      };\n\n      this.getUpdatingShippingBoxDict = function() {\n        var result = {};\n        this.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          result[pofpv.id] = pofpv.pos_order_fulfillment_shipping_box;\n        });\n        return result;\n      };\n\n      this.getUpdatingTotalRefundDict = function() {\n        var result = {};\n\n        this.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          if (pofpv.uploadAmount) {\n            result[pofpv.id] = pofpv.total_refund;\n          }\n        });\n        return result;\n      };\n\n      this.resetUpdatingAmounts = function() {\n        this.updatingAmounts = false;\n        this.refundAmount = null;\n        this.refundPaymentMethod = null;\n        this.updatingAction = '';\n        this.refundPaymentMethodError = false;\n        this.refundAmountError = false;\n\n        this.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          pofpv.resetUpdatingAmounts();\n        });\n      };\n\n      this.isUpdatingActionRefund = function() {\n        return this.updatingAction === 'refund' || this.updatingAction === 'refund_return';\n      };\n\n\n      this.isUpdatingActionCancel = function() {\n        return this.updatingAction === 'cancel';\n      };\n\n      this.isChangingWarehouseAction = function() {\n        return this.updatingAction === 'change_warehouse';\n      };\n\n      this.allowChangeWarehouse = function() {\n        if (this.isChangingWarehouseAction()) {\n          return true;\n        }\n\n        if (this.isUpdatingActionRefund() || this.isUpdatingActionCancel()) {\n          return false;\n        }\n\n        // if (this.pos_order.isShopifyOrder() && !this.isPending() && !this.isAllocated()) {\n        //   return false;\n        // }\n        return this.updatingAction !== '';\n      };\n\n      this.getVisiblePosOrderFulfillmentProductVariantInstances = function() {\n        return this.pos_order_fulfillment_product_variant_instances.filter(function(pofpv) {\n          return !pofpv.pos_order_product_variant_instance.hide_from_lists;\n        });\n      };\n\n      this.isInPickingPackingProcess = function() {\n        return (this.picking_order && this.picking_order.length) || this.packing_order;\n      };\n\n      this.isInPickingButNoPackingProcess = function () {\n        return (this.picking_order && this.picking_order.length) && !this.packing_order;\n      };\n\n      this.canEditShippingBoxes = function() {\n        return this.updatingAmounts &&\n          this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED &&\n          this.pos_order_fulfillment_shipping_boxes.length;\n      };\n\n      this.canEditShippingMethods = function() {\n        return this.updatingAmounts && this.type === POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED;\n      };\n\n      this.canLabelWithSendcloud = function() {\n        return this.canEditShippingBoxes && this.canEditShippingMethods();\n      };\n\n      this.addPosOrderFulfillmentShippingBox = function(pofsb) {\n        this.pos_order_fulfillment_shipping_box_instances.push(pofsb);\n        this.pos_order_fulfillment_shipping_boxes.push(pofsb.id);\n      };\n\n      this.removePosOrderFulfillmentShippingBox = function(pofsbId) {\n        var instanceIndex = this.pos_order_fulfillment_shipping_box_instances.findIndex(function(pofsb) {\n          return pofsb.id === pofsbId;\n        }, 1);\n        if (instanceIndex !== -1) {\n          this.pos_order_fulfillment_shipping_box_instances.splice(instanceIndex, 1);\n        }\n        var idIndex = this.pos_order_fulfillment_shipping_boxes.findIndex(function(pofsb) {\n          return pofsb === pofsbId;\n        });\n        if (idIndex !== -1) {\n          this.pos_order_fulfillment_shipping_boxes.splice(idIndex, 1);\n        }\n        this.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          if (pofpv.pos_order_fulfillment_shipping_box === pofsbId) {\n            pofpv.pos_order_fulfillment_shipping_box = null;\n          }\n        });\n      };\n\n      this.updatePosOrderFulfillmentShippingBox = function(pofsb) {\n        var index = this.pos_order_fulfillment_shipping_box_instances.findIndex(function(isntance) {\n          return pofsb.id === isntance.id;\n        });\n        if (index !== -1) {\n          this.pos_order_fulfillment_shipping_box_instances[index] = pofsb;\n        } else {\n          this.addPosOrderFulfillmentShippingBox(pofsb);\n        }\n      };\n\n      this.setUpdateAction = function(action) {\n        this.updatingAction = action;\n        this.updatingAmounts = true;\n      };\n\n      this.setUpdateActionShip = function() {\n        this.setUpdateAction(ACTION_SHIP);\n      };\n\n      this.isUpdateActionShip = function() {\n        return this.updatingAction === ACTION_SHIP;\n      };\n\n      this.setUpdateActionPickUp = function() {\n        this.setUpdateAction(ACTION_PICK_UP);\n      };\n\n      this.isUpdateActionPickUp = function() {\n        return this.updatingAction === ACTION_PICK_UP;\n      };\n\n      this.getRealWeight = function() {\n        return this.pos_order_fulfillment_product_variant_instances.reduce(function(acc, pofpv) {\n          return acc + pofpv.weight * pofpv.uploadAmount;\n        }, 0);\n      };\n\n      this.isPackingCompleted = function() {\n        return this.pos_order_fulfillment_product_variant_instances.every(function(pofpv) {\n          return pofpv.uploadAmount === pofpv.amount && pofpv.pos_order_fulfillment_shipping_box;\n        });\n      };\n\n      this.showTextAmounts = function(order) {\n        var someDevolution = this.pos_order_fulfillment_product_variant_instances.some(function(pofpv) {\n          return pofpv.amount < 0;\n        });\n        // Shopify orders are not allowed to change amounts\n        return !this.updatingAmounts || someDevolution;\n      };\n\n      this.showInputAmounts = function(order) {\n        return this.updatingAmounts && !this.showTextAmounts(order) && !this.isUpdatingActionRefund();\n      };\n\n      this.showRefundInputAmounts = function(order) {\n        return this.updatingAmounts &&  !this.showTextAmounts(order) && this.isUpdatingActionRefund();\n      };\n\n      this.hasManualReturnPolicy = function (order) {\n        return (\n          order && order.site && order.site.return_management_policy === RETURN_MANAGEMENT_POLICY.RETURN_MANAGEMENT_POLICY_MANUAL && AVAILABLE_PLATFORMS_FOR_RETURN_MANAGEMENT_POLICY.indexOf(order.site.platform) !== -1\n        );\n      };\n\n      this.canAssignBatches = function(order) {\n        var allowedStates = [\n          POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PENDING,\n          POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_ALLOCATED,\n          POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_PICKED_UP,\n          POS_ORDER_FULFILLMENTS.FULFILLMENT_STATUS_SHIPPED\n        ];\n        \n        return allowedStates.indexOf(this.type) !== -1 && \n               this.pos_order_fulfillment_product_variants && \n               this.pos_order_fulfillment_product_variants.length > 0 &&\n               order && order.hasOrderEditPermission();\n      };\n    }\n\n    return PosOrderFulfillment;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-fulfillment-shipping-box', [])\n    .factory('PosOrderFulfillmentShippingBox', _PosOrderFulfillmentShippingBox);\n\n  /** @ngInject */\n  function _PosOrderFulfillmentShippingBox(ShippingBox, PackingOrderSendcloudData) {\n\n    function PosOrderFulfillmentShippingBox(value) {\n      this.id = value ? value.id : null;\n      this.shipping_box = value ? value.shipping_box : null;\n      this.packing_order = value ? value.packing_order : null;\n      this.packingOrderSendcloudData = value && value.packing_order_sendcloud_data ? new PackingOrderSendcloudData(value.packing_order_sendcloud_data) : null;\n\n      // UI attributes\n      this.shipping_box_instance = value && value.shipping_box_instance ? new ShippingBox(value.shipping_box_instance) : null;\n\n      this.getShippingBoxName = function () {\n        if (!this.shipping_box_instance) {\n          return '';\n        }\n        return this.shipping_box_instance.getFullName();\n      };\n    }\n\n    return PosOrderFulfillmentShippingBox;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.pos-order-fulfillment-product-variant', [])\n    .factory('PosOrderFulfillmentProductVariant', _PosOrderFulfillmentProductVariant);\n\n  /** @ngInject */\n  function _PosOrderFulfillmentProductVariant($filter) {\n\n    function PosOrderFulfillmentProductVariant(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.company = value ? value.company : null;\n      this.pos_order_product_variant = value ? value.pos_order_product_variant : null;\n      this.amount = value ? value.amount : null;\n      this.total_refund = value ? value.total_refund : null;\n      this.pos_order_product_variant_instance = value ? value.pos_order_product_variant_instance : {};\n      this.weight = value ? value.weight : null;\n      this.weight_unit = value ? value.weight_unit : null;\n      this.pos_order_fulfillment_shipping_box = value ? value.pos_order_fulfillment_shipping_box : null;\n      this.custom_attributes = value ? value.custom_attributes : null;\n      this.uids = value ? value.uids : null;\n      this.assigned_uid_stocks = value ? value.assigned_uid_stocks : [];\n      this.can_edit_uid_stocks = value ? value.can_edit_uid_stocks : true;\n\n      // UI attributes\n      this.total = null;\n      this.maxReturnableAmount = value ? value.returnable_amount : null;\n      this.uploadAmount = this.maxReturnableAmount ? this.maxReturnableAmount : this.amount;\n      this.refundUploadAmount = null;\n      this.maxRefundUploadAmount = this.amount;\n      this.refunds = null;\n      this.isCheckedForReplenish = true;\n      this.stockout_data = null;\n      this.stockoutAmount = null;\n      this.maxStockoutAmount = null;\n      this.in_stockout = null;\n\n      /**\n       * Public methods\n       */\n      this.updateTotal = function() {\n        this.total = this.uploadAmount * this.pos_order_product_variant_instance.getUnitPrice(true);\n      };\n\n      this.fillPosOrderProductVariants = function(popvDict) {\n        if (popvDict[this.pos_order_product_variant]) {\n          this.pos_order_product_variant_instance = popvDict[this.pos_order_product_variant];\n          this.total = this.pos_order_product_variant_instance.total;\n          this.updateTotal();\n        }\n      };\n\n      this.getRefundString = function(order) {\n        if (this.refunds === undefined) {\n          return;\n        }\n        var text = '';\n        if (this.refunds === 0) {\n          text = $filter('translate')('ORDER.0_PRODUCT_REFUNDED');\n        } else if (this.refunds === 1) {\n          text = $filter('translate')('ORDER.1_PRODUCT_REFUNDED');\n        } else {\n          text = $filter('translate')('ORDER.N_PRODUCT_REFUNDED', { n: this.refunds });\n        }\n        text += ' | ' + order.refundsDictByPosOrderFulfillmentProductVariantId[this.id];\n        text += $filter('currencyCharacter')(order.currency);\n        return text;\n      };\n\n      this.setRefunds = function(refunds) {\n        if (refunds !== undefined) {\n          this.refunds = refunds;\n          this.refundUploadAmount = 0;\n          this.maxRefundUploadAmount = this.amount - this.refunds;\n        }\n      };\n\n      this.resetUpdatingAmounts = function() {\n        this.uploadAmount = this.amount;\n        this.refundUploadAmount = null;\n        this.maxRefundUploadAmount = this.amount;\n      };\n\n      this.setRefundUploadAmount = function(value) {\n        this.refundUploadAmount = value;\n        this.refundUploadAmount = Math.min(Math.max(this.refundUploadAmount, 0), this.maxRefundUploadAmount);\n        this.total_refund = this.refundUploadAmount * this.pos_order_product_variant_instance.getUnitPrice(true);\n      };\n\n      this.amountChanged = function() {\n        this.uploadAmount = Math.max(this.uploadAmount, 0);\n        this.uploadAmount = Math.min(this.uploadAmount, this.maxReturnableAmount);\n        this.updateTotal();\n      };\n\n      this.isValidUploadAmount = function(value) {\n        return value >= 0 && value <= this.amount;\n      };\n\n      this.getOriginalTotal = function() {\n        return this.pos_order_product_variant_instance.getOriginalTotal() * this.amount / this.pos_order_product_variant_instance.amount;\n      };\n\n      this.getProductInstanceFullName = function() {\n        var fullName = this.pos_order_product_variant_instance.product_name;\n        if (this.pos_order_product_variant_instance.product_variant_size_name || this.pos_order_product_variant_instance.product_variant_color_name) {\n          fullName += ' (';\n          if (this.pos_order_product_variant_instance.product_variant_color_name) {\n            fullName += this.pos_order_product_variant_instance.product_variant_color_name;\n          }\n          if (this.pos_order_product_variant_instance.product_variant_size_name) {\n            if (this.pos_order_product_variant_instance.product_variant_color_name) {\n              fullName += '/';\n            }\n            fullName += this.pos_order_product_variant_instance.product_variant_size_name;\n          }\n          fullName += ')';\n        }\n        return fullName;\n      };\n\n      this.getPosOrderProductVariantInstanceLots = function() {\n        var lots = this.uids;\n        return lots.join(' | ');\n      };\n\n      this.getTotalConsumedAmount = function() {\n        if (!this.assigned_uid_stocks || !Array.isArray(this.assigned_uid_stocks)) {\n          return 0;\n        }\n        return this.assigned_uid_stocks.reduce(function(total, batch) {\n          return total + (batch.consumed_amount || 0);\n        }, 0);\n      };\n\n      this.getRemainingAmount = function() {\n        return this.amount - this.getTotalConsumedAmount();\n      };\n    }\n\n    return PosOrderFulfillmentProductVariant;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.plan', [])\n    .factory('Plan', _Plan);\n\n  /** @ngInject */\n  function _Plan(\n    PlanFeature,\n    PlanLimit,\n    Hub,\n    SUBSCRIPTION_PERIOD\n  ) {\n\n    function Plan(value) {\n      this.CURRENCY = 'EUR';\n\n      // Data\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.code = value ? value.code : null;\n      this.order = value ? value.order : null;\n      this.hub = value ? new Hub(value.hub) : null;\n      this.is_active = value ? value.is_active : null;\n      this.base_monthly_price = value ? value.base_monthly_price : null;\n      this.base_yearly_price = value ? value.base_yearly_price : null;\n      this.plan_features = [];\n      if (value && value.plan_features) {\n        for (var i = 0; i < value.plan_features.length; ++i) {\n          this.plan_features.push(new PlanFeature(value.plan_features[i]));\n        }\n      }\n      this.plan_limits = [];\n      if (value && value.plan_limits) {\n        for (var i = 0; i < value.plan_limits.length; ++i) {\n          this.plan_limits.push(new PlanLimit(value.plan_limits[i]));\n        }\n      }\n      this.coupon = {};\n\n      // Methods\n      this.getFeaturesDict = function() {\n        var featuresDict = {};\n        this.plan_features.filter(function(planFeature) {\n          return !planFeature.is_add_on;\n        }).forEach(function(planFeature) {\n          angular.extend(featuresDict, planFeature.getPermissionDict());\n        });\n        return featuresDict;\n      };\n\n      this.getAddOnsDict = function() {\n        var addOnsDict = {};\n        this.plan_features.filter(function(planFeature) {\n          return planFeature.is_add_on;\n        }).forEach(function(planFeature) {\n          angular.extend(addOnsDict, planFeature.getPermissionDict());\n        });\n        return addOnsDict;\n      };\n\n      this.getPrice = function(subscriptionPeriod) {\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.YEARLY) {\n          return this.base_yearly_price;\n        }\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.MONTHLY) {\n          return this.base_monthly_price;\n        }\n        return null;\n      };\n\n      this.getPriceMonthly = function(subscriptionPeriod) {\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.YEARLY) {\n          return this.base_yearly_price / 12;\n        }\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.MONTHLY) {\n          return this.base_monthly_price;\n        }\n        return null;\n      };\n\n      this.getAddOns = function() {\n        return this.plan_features.filter(function(planFeature) {\n          return planFeature.is_add_on;\n        });\n      };\n\n      this.getIncludedLimits = function() {\n        return this.plan_limits.filter(function(planLimit) {\n          return planLimit.included_amount > 0;\n        });\n      };\n\n      this.getPlanLimit = function(code) {\n        var result = this.plan_limits.filter(function(planLimit) {\n          return planLimit.code === code;\n        });\n        if (result.length) {\n          return result[0];\n        }\n      };\n\n      this.getPlanFeatureByFeatureCode = function(featureCode, isAddOn) {\n        var result = this.plan_features.filter(function(planFeature) {\n          return planFeature.feature.code === featureCode && planFeature.is_add_on === !!isAddOn;\n        });\n        if (result.length) {\n          return result[0];\n        }\n      };\n\n      this.toJson = function() {\n        var json = {\n          id: this.id,\n          name: this.name,\n          code: this.code,\n          order: this.order,\n          hub: this.hub,\n          is_active: this.is_active,\n          base_monthly_price: this.base_monthly_price,\n          base_yearly_price: this.base_yearly_price,\n          plan_features: this.plan_features,\n          plan_limits: this.plan_limits,\n          coupons: []\n        };\n        if (this.coupon && this.coupon.discount_value) {\n          json.coupons.push(this.coupon.toJson());\n        }\n        return json;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return Plan;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.plan-limit', [])\n    .factory('PlanLimit', _PlanLimit);\n\n  /** @ngInject */\n  function _PlanLimit(\n    $filter,\n    SUBSCRIPTION_PERIOD\n  ) {\n\n    function PlanLimit(value) {\n      var CURRENCY = 'EUR';\n\n      // Data\n      this.id = value ? value.id : null;\n      this.code = value ? value.code : null;\n      this.name = value ? value.name : null;\n      this.included_amount = value ? value.included_amount : 0;\n      this.filter_per_month_field = value ? value.filter_per_month_field : false;\n      this.pack_amount = value ? value.pack_amount : 0;\n      this.pack_monthly_price = value ? value.pack_monthly_price : 0;\n      this.pack_yearly_price = value ? value.pack_yearly_price : 0;\n      this.exceed_limit_policy = value ? value.exceed_limit_policy : null;\n\n      this.format = function(subscriptionPeriod) {\n        var currencyCharacter = $filter('currencyCharacter')(CURRENCY);\n        return $filter('translate')('SUBSCRIPTION.' + this.code, {\n          included: this.included_amount,\n          pack_amount: this.pack_amount,\n          extra_price: $filter('simplePrice')(this.getPriceMonthly(subscriptionPeriod)) + ' ' + currencyCharacter,\n          currency: currencyCharacter\n        });\n      };\n\n      this.getPriceMonthly = function(subscriptionPeriod) {\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.YEARLY) {\n          return this.pack_yearly_price / 12;\n        }\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.MONTHLY) {\n          return this.pack_monthly_price;\n        }\n      };\n\n       this.getPrice = function(subscriptionPeriod) {\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.YEARLY) {\n          return this.pack_yearly_price;\n        }\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.MONTHLY) {\n          return this.pack_monthly_price;\n        }\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return PlanLimit;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.plan-feature', [])\n    .factory('PlanFeature', _PlanFeature);\n\n  /** @ngInject */\n  function _PlanFeature(\n    Feature,\n    SUBSCRIPTION_PERIOD\n  ) {\n\n    function PlanFeature(value) {\n      // Data\n      this.id = value ? value.id : null;\n      this.is_add_on = value ? value.is_add_on : false;\n      this.base_monthly_price = value ? value.base_monthly_price : false;\n      this.base_yearly_price = value ? value.base_yearly_price : false;\n      this.feature = value ? new Feature(value.feature) : null;\n\n      // Methods\n      this.getPermissionDict = function() {\n        if (this.feature) {\n          if (this.is_add_on) {\n            return this.feature.getPermissionDict(this.is_add_on, this.id);\n          }\n          return this.feature.getPermissionDict();\n        }\n        return {};\n      };\n\n      this.getPrice = function(subscriptionPeriod) {\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.YEARLY) {\n          return this.base_yearly_price;\n        }\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.MONTHLY) {\n          return this.base_monthly_price;\n        }\n      };\n\n      this.getPriceMonthly = function(subscriptionPeriod) {\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.YEARLY) {\n          return this.base_yearly_price/12;\n        }\n        if (subscriptionPeriod === SUBSCRIPTION_PERIOD.MONTHLY) {\n          return this.base_monthly_price;\n        }\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return PlanFeature;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular.module('app.models.payment', []).factory('Payment', _Payment);\n\n  /** @ngInject */\n  function _Payment() {\n    function Payment(value) {\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // Payment attributes\n      this.amount = value ? value.amount : null;\n\n      this.company = value ? value.company : null;\n\n      this.created_at = value ? value.created_at : null;\n      this.created_by = value ? value.created_by : null;\n\n      this.customer_name = value ? value.customer_name : null;\n\n      this.date = value ? value.date : null;\n\n      this.detail = value ? value.detail : null;\n\n      this.devolution_card = value ? value.devolution_card : null;\n      this.devolution_card_instance = value\n        ? value.devolution_card_instance\n        : null;\n\n      this.input_amount = value ? value.input_amount : null;\n\n      this.invoice = value ? value.invoice : null;\n      this.invoice_autocode = value ? value.invoice_autocode : null;\n      this.invoice_payment_status = value ? value.invoice_payment_status : null;\n\n      this.output_amount = value ? value.output_amount : null;\n\n      this.payment_method = value ? value.payment_method : null;\n      this.payment_method_instance = value\n        ? value.payment_method_instance\n        : null;\n\n      this.sale_order = value ? value.sale_order : null;\n      this.sale_order_autocode = value ? value.sale_order_autocode : null;\n\n      this.updated_at = value ? value.updated_at : null;\n\n      /**\n       * Public methods\n       */\n    }\n\n    return Payment;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.order-product', [])\n    .factory('OrderProduct', _OrderProduct);\n\n  /** @ngInject */\n  function _OrderProduct(OrderProductVariant, Variant) {\n\n    function OrderProduct(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // OrderProduct attributes\n\n\n      this.brand_name = value ? value.brand_name : null;\n      this.category_name = value ? value.category_name : null;\n      this.subcategory_name = value ? value.subcategory_name : null;\n\n      this.provider_price = value ? value.purchase_order_product_provider_price : null;\n\n      this.color_variants = [];\n      if (value && value.color_variants) {\n        for (let i = 0; i < value.color_variants.length; ++i) {\n          this.color_variants.push(new Variant(value.color_variants[i]));\n        }\n      }\n      this.size_variants = [];\n      if (value && value.size_variants) {\n        for (let i = 0; i < value.size_variants.length; ++i) {\n          this.size_variants.push(new Variant(value.size_variants[i]));\n        }\n      }\n\n      this.manage_uids = value ? value.manage_uids : null;\n\n      this.order_product_variants = [];\n      if (value && value.order_product_variants) {\n        for (let i = 0; i < value.order_product_variants.length; ++i) {\n          this.order_product_variants.push(new OrderProductVariant(value.order_product_variants[i]));\n        }\n      }\n\n      this.product_price = value ? value.product_price : null;\n      this.product_variant_prices = value ? value.product_variant_prices : null;\n      this.price_excl_tax = value ? value.price_excl_tax : null;\n      this.price_incl_tax = value ? value.price_incl_tax : null;\n\n      this.product = value ? value.product : null;\n      this.product_name = value ? value.product_name : null;\n      this.product_code = value ? value.product_code : null;\n      this.product_cover = value ? value.product_cover : null;\n      this.product_cover_thumbnail = value ? value.product_cover_thumbnail : null;\n\n    }\n\n    return OrderProduct;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.order-product-variant', [])\n    .factory('OrderProductVariant', _OrderProductVariant);\n\n  /** @ngInject */\n  function _OrderProductVariant() {\n\n    function OrderProductVariant(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // OrderProduct attributes\n\n      this.sale_order_product = value ? value.sale_order_product : null;\n\n      this.barcode = value ? value.barcode : null;\n      this.amount = value ? value.amount : null;\n\n      this.color = value ? value.color : null;\n      this.color_code = value ? value.color_code : null;\n      this.color_name = value ? value.color_name : null;\n\n      this.size = value ? value.size : null;\n      this.size_code = value ? value.size_code : null;\n      this.size_name = value ? value.size_name : null;\n\n      this.product_variant = value ? value.product_variant : null;\n      this.product_variant_code = value ? value.product_variant_code : null;\n      this.product_variant_name = value ? value.product_variant_name : null;\n\n      this.price_excl_tax = value ? value.price_excl_tax : null;\n      this.price_incl_tax = value ? value.price_incl_tax : null;\n\n      this.provider_price = value ? value.provider_price: null;\n\n      this.source_stock = value ? value.source_stock : null;\n\n      this.total_prepared_amount = value ? value.total_prepared_amount : null;\n      this.total_received_amount = value ? value.total_received_amount : null;\n      this.total_shipped_amount = value ? value.total_shipped_amount : null;\n\n    }\n\n    return OrderProductVariant;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.order-product-variant-dto', [])\n    .factory('OrderProductVariantDTO', _OrderProductVariantDTO);\n\n  /** @ngInject */\n  function _OrderProductVariantDTO(StockDetailDTO, Utils) {\n\n    function OrderProductVariantDTO(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // OrderProduct attributes\n\n      this.barcode = value ? value.barcode : null;\n      this.amount = value && value.amount !== 0 ? value.amount : null;\n      this.danger_amount = value ? value.danger_amount : null;\n      this.previous_amount = value ? value.amount : null;\n\n      this.color = value ? value.color : null;\n      this.color_id = value ? value.color_id : null;\n      this.color_code = value ? value.color_code : null;\n      this.color_name = value ? value.color_name : null;\n\n      this.size = value ? value.size : null;\n      this.size_id = value ? value.size_id : null;\n      this.size_code = value ? value.size_code : null;\n      this.size_name = value ? value.size_name : null;\n\n      this.product_variant_id = value ? value.product_variant_id : null;\n      this.product_variant_code = value ? value.product_variant_code : null;\n      this.product_variant_name = value ? value.product_variant_name : null;\n\n      this.price_excl_tax = value ? Utils.roundPrice(value.price_excl_tax, 2) : null;\n      this.price_incl_tax = value ? Utils.roundPrice(value.price_incl_tax, 2) : null;\n      // this.provider_price = value ? value.provider_price: null;\n      this.order_product_variant_id = value ? value.order_product_variant_id : null;\n\n      this.source_stock = value ? value.source_stock : null;\n\n      this.danger_left_amount = value.danger_left_amount;\n      this.safe_left_amount = value.safe_left_amount;\n      this.danger_right_amount = value.danger_right_amount;\n      this.safe_right_amount = value.safe_right_amount;\n\n      this.total_prepared_amount = value ? value.total_prepared_amount : null;\n      this.total_received_amount = value ? value.total_received_amount : null;\n      this.total_shipped_amount = value ? value.total_shipped_amount : null;\n\n      this.left_amount = value ? value.left_amount : null;\n      this.right_amount = value ? value.right_amount : null;\n\n      this.total_row_amount = value ? value.total_product_amount_by_color : null;\n      this.total_row_price = value ? value.total_product_price_by_color : null;\n    }\n\n    return OrderProductVariantDTO;\n  }\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('app.models.order-product-dto', [])\n      .factory('OrderProductDTO', _OrderProductDTO);\n\n    /** @ngInject */\n    function _OrderProductDTO(OrderProductVariantDTO, Variant, Utils, Session) {\n      function OrderProductDTO(value) {\n\n        /**\n         * Public attributes\n         */\n        this.id = value ? value.id : null;\n        this.skus = value ? value.skus : null;\n\n        // OrderProduct attributes\n        this.brand_name = value ? value.brand_name : null;\n        this.category_name = value ? value.category_name : null;\n        this.subcategory_name = value ? value.subcategory_name : null;\n\n        this.color_category_name = value ? value.color_category_name : null;\n        this.size_category_name = value ? value.size_category_name : null;\n        this.size_category_name = value ? value.size_category_name : null;\n\n        this.totals_by_color_ids = value ? value.order_product_totals_by_color : {};\n        this.context = value ? value.context : {};\n        this.enabled_variants_by_color = value ? value.enabled_variants_by_color : {};\n\n        this.size_variants = [];\n        if (value && value.size_variants) {\n          for (var i = 0; i < value.size_variants.length; ++i) {\n            this.size_variants.push(new Variant(value.size_variants[i]));\n          }\n        }\n\n        this.color_variants = [];\n        this.order_product_variants_by_variant_ids = {};\n        if (value && value.color_variants) {\n          for (var i = 0; i < value.color_variants.length; ++i) {\n            var color_variant = new Variant(value.color_variants[i]);\n            this.color_variants.push(color_variant);\n            this.order_product_variants_by_variant_ids[color_variant.id] = {};\n\n            if (!this.totals_by_color_ids[color_variant.id]) {\n              this.totals_by_color_ids[color_variant.id] = {\n                amount: 0,\n                price: 0\n              };\n            }\n\n            for (var j = 0; j < this.size_variants.length; ++j) {\n              var size_variant = this.size_variants[j];\n              this.order_product_variants_by_variant_ids[color_variant.id][size_variant.id] = { amount: null };\n            }\n          }\n        }\n\n        this.manage_uids = value ? value.manage_uids : null;\n        this.manage_lots = value ? value.manage_lots : null;\n\n        this.order_product_variants = [];\n        if (value && value.order_product_variants) {\n          for (var i = 0; i < value.order_product_variants.length; ++i) {\n            this.order_product_variants.push(new OrderProductVariantDTO(value.order_product_variants[i]));\n          }\n        }\n\n        this.price_excl_tax = value && value.price_excl_tax ? Utils.roundPrice(value.price_excl_tax, 2) : null;\n        this.price_incl_tax = value && value.price_incl_tax ? Utils.roundPrice(value.price_incl_tax, 2) : null;\n        this.tax = value ? value.tax : null;\n\n        this.discount = value ? value.discount : null;\n\n        this.product = value ? value.product : null;\n        this.product_id = value ? value.product_id : null;\n        this.product_name = value ? value.product_name : null;\n        this.product_code = value ? value.product_code : null;\n        this.product_cover = value ? value.product_cover : null;\n        this.product_cover_thumbnail = value ? value.product_cover_thumbnail : null;\n\n        this.total_amount = value ? value.total_amount : null;\n        this.total_price = value ? value.total_price : null;\n        this.has_pricing_tier = value ? value.has_pricing_tier : null;\n        this.currency = (value && value.currency) ? value.currency : Session.company.currency;\n\n        //Purchase attributes\n        this.start_date = value ? value.start_date : null;\n\n        /**\n         * Private attributes\n         */\n        for (var i = 0; i < this.order_product_variants.length; i++) {\n          var orderProductVariant = this.order_product_variants[i];\n          if (!this.order_product_variants_by_variant_ids[orderProductVariant.color_id]) {\n            this.order_product_variants_by_variant_ids[orderProductVariant.color_id] = {};\n          }\n          this.order_product_variants_by_variant_ids[orderProductVariant.color_id][orderProductVariant.size_id] = orderProductVariant;\n        }\n\n        /**\n         * Public functions\n         */\n        this.getOrderProductVariantByVariantIds = _getOrderProductVariantByVariantIds;\n        this.getPrice = _getPrice;\n        this.updateOrderProductVariant = _updateOrderProductVariant;\n        this.updateTotals = _updateTotals;\n        this.getTotals = _getTotals;\n        this.getContext = _getContext;\n        this.getEnabledProductVariantByColorAndSize = _getEnabledProductVariantByColorAndSize;\n      }\n\n      function _getEnabledProductVariantByColorAndSize(colorId, sizeId) {\n        if (this.enabled_variants_by_color[colorId] && this.enabled_variants_by_color[colorId][sizeId]) {\n          return this.enabled_variants_by_color[colorId][sizeId];\n        }\n        return false;\n      }\n\n      function _updateOrderProductVariant(orderProductVariant) {\n        var index =  this.order_product_variants.findIndex(function (opv) {\n          if (opv.id === orderProductVariant.id) {\n            return opv;\n          }\n        })\n        this.order_product_variants[index] = orderProductVariant\n\n        if (!this.order_product_variants_by_variant_ids[orderProductVariant.color_id]) {\n          this.order_product_variants_by_variant_ids[orderProductVariant.color_id] = {};\n        }\n        this.order_product_variants_by_variant_ids[orderProductVariant.color_id][orderProductVariant.size_id] = orderProductVariant;\n        this.updateTotals(orderProductVariant);\n      }\n\n      function _updateTotals(orderProductVariant) {\n        this.totals_by_color_ids[orderProductVariant.color_id].amount = orderProductVariant.total_row_amount;\n        this.totals_by_color_ids[orderProductVariant.color_id].price_incl_tax = orderProductVariant.total_row_price ? orderProductVariant.total_row_price.incl_tax : null;\n        this.totals_by_color_ids[orderProductVariant.color_id].price_excl_tax = orderProductVariant.total_row_price ? orderProductVariant.total_row_price.excl_tax : null;\n      }\n\n      function _getTotals() {\n        return this.totals_by_color_ids;\n      }\n\n      function _getContext(colorId, sizeId) {\n        if (!angular.isUndefined(this.context) && this.context && this.context[colorId] && this.context[colorId][sizeId]) {\n          return this.context[colorId][sizeId];\n        }\n        return 0;\n      }\n\n      function _getOrderProductVariantByVariantIds(colorId, sizeId) {\n        if (this.order_product_variants_by_variant_ids) {\n          return this.order_product_variants_by_variant_ids[colorId][sizeId];\n        }\n      }\n\n      function _getPrice(colorId, sizeId, excl_tax) {\n        if (this.context && this.context.hasOwnProperty(colorId) && this.context[colorId].hasOwnProperty(sizeId) &&\n          this.context[colorId][sizeId] !== null) {\n          return excl_tax ? this.context[colorId][sizeId].price_excl_tax : this.context[colorId][sizeId].price_incl_tax;\n        }\n        return null;\n      }\n\n      return OrderProductDTO;\n    }\n  }\n\n)\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.order-log-change', [])\n    .factory('OrderLogChange', _OrderLogChange);\n\n  /** @ngInject */\n  function _OrderLogChange() {\n    function OrderLogChange(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      this.type = value ? value.type : null;\n      this.product_name = value ? value.product_name : null;\n      this.product_code = value ? value.product_code : null;\n      this.color_name = value ? value.color_name : null;\n      this.size_name = value ? value.size_name : null;\n      this.datetime = value ? value.datetime : null;\n      this.before = value ? value.before : null;\n      this.after = value ? value.after : null;\n      this.barcode = value ? value.barcode : null;\n      this.found = value ? value.found : null;\n      this.not_found_reason = value ? value.not_found_reason : null;\n      this.cover_thumbnail = value ? value.cover_thumbnail : null;\n      this.stock_detail_identifier = value ? value.stock_detail_identifier : null;\n      this.pos_order_id = value ? value.pos_order_id : null;\n      this.pos_order_autocode = value ? value.pos_order_autocode : null;\n      this.site_platform = value ? value.site_platform : null;\n      this.stock_amount = value ? value.stock_amount : null;\n      this.ordered_amount = value ? value.ordered_amount : null;\n      this.not_linked_amount_in_purchase = value ? value.not_linked_amount_in_purchase : null;\n\n    }\n    return OrderLogChange;\n  }\n})\n();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.order-delivery', [])\n    .factory('OrderDelivery', _OrderDelivery);\n\n  /** @ngInject */\n  function _OrderDelivery(OrderDeliveryProductVariant,\n                          OrderProduct,\n                          SubtotalByTax,\n                          UidStock) {\n\n    function OrderDelivery(value, purchaseOrder) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // Autocode\n      this.autocode = value ? value.autocode : null;\n\n      // Invoice attributes\n      this.company = value ? value.company : null;\n      this.purchase_order = purchaseOrder ? purchaseOrder : null;\n      this.purchase_order_autocode = value ? value.purchase_order_autocode : null;\n\n      this.created_at = value ? value.created_at : null;\n      this.created_by = value ? value.created_by : null;\n      this.created_by_username = value ? value.created_by_username : null;\n      this.contact = value && value.contact ? value.contact : null;\n\n      this.invoice = value ? value.invoice : null;\n      this.invoice_pdf_file = value ? value.invoice_pdf_file : null;\n\n      this.notes = value ? value.notes : null;\n      this.sale_order_is_devolution = value ? value.sale_order_is_devolution : null;\n      this.sale_order_autocode = value ? value.sale_order_autocode : null;\n\n      this.order_delivery_product_variants = [];\n      if (value && value.order_delivery_product_variants) {\n        for (let i = 0; i < value.order_delivery_product_variants.length; ++i) {\n          this.order_delivery_product_variants.push(new OrderDeliveryProductVariant(value.order_delivery_product_variants[i]));\n        }\n      }\n\n      this.order_products = [];\n      if (value && value.order_products) {\n        for (let i = 0; i < value.order_products.length; ++i) {\n          this.order_products.push(new OrderProduct(value.order_products[i]));\n        }\n      }\n\n      this.prepared_at = value ? value.prepared_at : null;\n      this.prepared_by = value ? value.prepared_by : null;\n      this.prepared_by_username = value ? value.prepared_by_username : null;\n      this.private_notes = value ? value.private_notes : null;\n      this.sale_order = value ? value.sale_order : null;\n      this.shipped_at = value ? value.shipped_at : null;\n      this.shipped_by = value ? value.shipped_by : null;\n      this.shipped_by_username = value ? value.shipped_by_username : null;\n      this.status = value ? value.status : null;\n      this.subtotal = value ? value.subtotal : null;\n      this.subtotal_discount = value ? value.subtotal_discount : null;\n      this.subtotal_early_payment_discount = value ? value.subtotal_early_payment_discount : null;\n\n      this.subtotals_by_tax = {};\n      if (value && value.subtotals_by_tax) {\n\n        for (var subtotalByTaxId in value.subtotals_by_tax) {\n          var subtotalByTax = value.subtotals_by_tax[subtotalByTaxId];\n          if (!this.subtotals_by_tax[subtotalByTaxId]){\n            this.subtotals_by_tax[subtotalByTaxId] = new SubtotalByTax();\n            this.subtotals_by_tax[subtotalByTaxId].name = subtotalByTax.name;\n              this.subtotals_by_tax[subtotalByTaxId].percent_value = parseFloat(subtotalByTax.percent_value);\n              this.subtotals_by_tax[subtotalByTaxId].surcharge = parseFloat(subtotalByTax.surcharge);\n            }\n            this.subtotals_by_tax[subtotalByTaxId].total_price_excl_tax_sum += parseFloat(subtotalByTax.total_price_excl_tax_sum);\n        }\n      }\n\n      this.total_excl_tax = value ? value.total_excl_tax : null;\n      this.total_incl_tax = value ? value.total_incl_tax : null;\n      this.total_items = value ? value.total_items : null;\n\n      this.uid_stocks = [];\n      if (value && value.uid_stocks) {\n        for (let i = 0; i < value.uid_stocks.length; ++i) {\n          this.uid_stocks.push(new UidStock(value.uid_stocks[i]));\n        }\n      }\n\n      this.updatePrices = function () {\n        if (this.order_delivery_product_variants) {\n          for (let i = 0; i < this.order_delivery_product_variants.length; ++i) {\n            this.total_excl_tax += this.order_delivery_product_variants[i].total_excl_tax;\n            this.total_incl_tax += this.order_delivery_product_variants[i].total_incl_tax;\n          }\n        }\n      }\n    }\n\n    return OrderDelivery;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.order-delivery-product-variant', [])\n    .factory('OrderDeliveryProductVariant', _OrderDeliveryProductVariant);\n\n  /** @ngInject */\n  function _OrderDeliveryProductVariant() {\n\n    function OrderDeliveryProductVariant(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // Invoice attributes\n      this.order_product_variant = value ? value.order_product_variant : null;\n      this.prepared_amount = value ? value.prepared_amount : null;\n      this.shipped_amount = value ? value.shipped_amount : null;\n      this.received_amount = value ? value.received_amount : null;\n    }\n\n    return OrderDeliveryProductVariant;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.order-delivery-line', [])\n    .factory('OrderDeliveryLine', _OrderDeliveryLine);\n\n  /** @ngInject */\n  function _OrderDeliveryLine() {\n    function OrderDeliveryLine(value) {\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // Autocode\n      this.autocode = value ? value.autocode : null;\n\n      // Invoice attributes\n      this.custom_price_excl_tax = value ? value.custom_price_excl_tax : null;\n      this.custom_price_incl_tax = value ? value.custom_price_incl_tax : null;\n      this.price_excl_tax = value ? value.price_excl_tax : null;\n      this.price_incl_tax = value ? value.price_incl_tax : null;\n\n      this.description = value ? value.description : null;\n\n      this.discount = value ? value.discount : 0;\n      this.discount_price_excl_tax = value\n        ? value.discount_price_excl_tax\n        : null;\n      this.discount_price_incl_tax = value\n        ? value.discount_price_incl_tax\n        : null;\n\n      this.invoice = value ? value.invoice : null;\n      this.label = value ? value.label : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.quantity = value ? value.quantity : 1;\n\n      this.tax = value ? value.tax : null;\n      this.tax_instance = value ? value.tax_instance : null;\n      this.tax_name = value ? value.tax_name : null;\n      this.tax_percent_value = value ? value.tax_percent_value : null;\n\n      this.total_price_excl_tax = value\n        ? value.total_price_excl_tax\n        : this.quantity * (this.custom_price_excl_tax || this.price_excl_tax);\n      this.total_price_incl_tax = value\n        ? value.total_price_incl_tax\n        : this.quantity * (this.custom_price_incl_tax || this.price_incl_tax);\n      /**\n       * Public methods\n       */\n\n      this.totalPriceExclTax = function () {\n        var priceExclTax = this.custom_price_excl_tax || this.price_excl_tax;\n        if (this.discount && this.discount > 0 && this.discount <= 100) {\n          var discount = (100 - this.discount) / 100;\n          return priceExclTax * this.quantity * discount;\n        } else {\n          return priceExclTax * this.quantity;\n        }\n      };\n      this.totalPriceInclTax = function (surcharge) {\n        if (this.tax && this.tax_instance) {\n          var totalTaxesPercentValue = surcharge\n            ? this.tax_instance.percent_value + this.tax_instance.surcharge\n            : this.tax_instance.percent_value;\n          return this.total_price_excl_tax * (1 + totalTaxesPercentValue / 100);\n        } else {\n          return this.total_price_excl_tax;\n        }\n      };\n      this.priceInclTax = function (surcharge) {\n        if (this.tax && this.tax_instance) {\n          var totalTaxesPercentValue = surcharge\n            ? this.tax_instance.percent_value + this.tax_instance.surcharge\n            : this.tax_instance.percent_value;\n          return this.price_excl_tax * (1 + totalTaxesPercentValue / 100);\n        } else {\n          return this.price_excl_tax;\n        }\n      };\n      this.updatePrices = function (excludeTaxes, surcharge) {\n        if (!this.quantity) {\n          this.quantity = 0;\n        }\n\n        if (!this.discount) {\n          this.discount = 0;\n        }\n\n        this.total_price_excl_tax = this.totalPriceExclTax();\n\n        if (!excludeTaxes) {\n          this.total_price_incl_tax = this.totalPriceInclTax(surcharge);\n          this.price_incl_tax = this.priceInclTax(surcharge);\n        } else {\n          this.total_price_incl_tax = this.total_price_excl_tax;\n          this.price_incl_tax = this.price_excl_tax;\n        }\n      };\n      this.setTaxInstance = function(taxes){\n        if (this.tax){\n          var tax_id = this.tax;\n          this.tax_instance = taxes.find(function (tax) {\n            return tax.id == tax_id;\n          });\n        }\n      };\n    }\n\n    return OrderDeliveryLine;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.net-promoter-score', [])\n    .factory('NetPromoterScore', _NetPromoterScore);\n\n  /** @ngInject */\n  function _NetPromoterScore() {\n\n    function NetPromoterScore(value) {\n      this.user = value ? value.user : {};\n      this.net_promoter_score = value ? value.net_promoter_score : null;\n      this.created_at = value && value.created_at? new Date(value.created_at) : null;\n      this.notes = value ? value.notes : null;\n    }\n\n    return NetPromoterScore;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular.module('app.models.invoice', []).factory('Invoice', _Invoice);\n\n  /** @ngInject */\n  function _Invoice(\n    $filter,\n    InvoiceLine,\n    OrderDelivery,\n    Payment,\n    Utils,\n    SubtotalByTax,\n    MutableInvoiceFields,\n    INVOICE_MODELS,\n    INVOICE_PAYMENT_STATUSES,\n    INVOICE_TYPES,\n    SERIAL_NUMBER_TYPES\n  ) {\n    function Invoice(value) {\n      /**\n       * Public attributes\n       */\n      // Id\n      this.id = value ? value.id : null;\n\n      // Autocode\n      this.autocode = value ? value.autocode : null;\n      this.is_closed = value ? value.is_closed : null;\n      this.invoice_model = value ? value.invoice_model : null;\n      this.corrective_of = value ? value.corrective_of : null;\n      this.corrected_by = value ? value.corrected_by : [];\n      this.replaced_by = value ? value.replaced_by : null;\n      this.replacement_of = value ? value.replacement_of : [];\n      this.verifactu_data = value ? value.verifactu_data : null;\n      this.qr_code_url = value ? value.qr_code_url : null;\n\n      // Invoice attributesV\n      this.exclude_taxes = value ? value.exclude_taxes : false;\n      this.surcharge = value ? value.surcharge : null;\n      this.type = value ? value.type : null;\n      this.invoice_type = value ? value.invoice_type : null;\n      this.content_type = value ? value.content_type : null;\n      this.pricing_tier = value ? value.pricing_tier : null;\n      this.object_id = value ? value.object_id : null;\n\n      this.discount = value ? value.discount : null;\n      this.subtotal_discount = value ? value.subtotal_discount : null;\n      this.early_payment_discount = value ? value.early_payment_discount : null;\n      this.subtotal_early_payment_discount = value\n        ? value.subtotal_early_payment_discount\n        : null;\n\n      this.discount_as_absolut = value ? value.discount_as_absolut : null;\n\n      // Company info\n      this.company_address_1 = value ? value.company_address_1 : null;\n      this.company_address_2 = value ? value.company_address_2 : null;\n      this.company_city = value ? value.company_city : null;\n      this.company_country = value ? value.company_country : null;\n      this.company_email = value ? value.company_email : null;\n      this.company_legal_name = value ? value.company_legal_name : null;\n      this.company_phone = value ? value.company_phone : null;\n      this.company_state = value ? value.company_state : null;\n      this.company_vat = value ? value.company_vat : null;\n      this.company_zip = value ? value.company_zip : null;\n\n      // Customer info\n      this.customer_instance = value ? value.customer_instance : null;\n      this.customer = value ? value.customer : null;\n      this.customer_email = value ? value.customer_email : null;\n      this.customer_first_name = value ? value.customer_first_name : null;\n      this.customer_instance = value ? value.customer_instance : null;\n      this.customer_last_name = value ? value.customer_last_name : null;\n      this.customer_name = value ? value.customer_name : null;\n      this.customer_phone = value ? value.customer_phone : null;\n      this.customer_vat = value ? value.customer_vat : null;\n\n      // Billing info\n      this.fiscal_address = value ? value.fiscal_address : null;\n      this.billing_address = value ? value.billing_address : null;\n      this.billing_address_1 = value ? value.billing_address_1 : null;\n      this.billing_address_2 = value ? value.billing_address_2 : null;\n      this.billing_city = value ? value.billing_city : null;\n      this.billing_country = value ? value.billing_country : null;\n      this.billing_state = value ? value.billing_state : null;\n      this.billing_zip = value ? value.billing_zip : null;\n\n      this.billing_date = value && value.billing_date\n        ? new Date(value.billing_date)\n        : null;\n      this.expiration_date = value && value.expiration_date\n        ? new Date(value.expiration_date)\n        : null;\n\n      this.concept = value ? value.concept : null;\n\n      this.language = value ? value.language : 'es';\n      this.currency = value ? value.currency : 'EUR';\n\n      this.serial_number_type = value ? value.serial_number_type : null;\n\n      this.payments = [];\n      if (value && value.payments) {\n        for (var i = 0; i < value.payments.length; ++i) {\n          this.payments.push(new Payment(value.payments[i]));\n        }\n      }\n      this.payment_method = value ? value.payment_method : null;\n      this.payment_status = value && value.payment_status ? value.payment_status : INVOICE_PAYMENT_STATUSES.PAYMENT_STATUS_PENDING;\n      this.notes = value ? value.notes : null;\n      this.private_notes = value ? value.private_notes : null;\n\n      this.purchase_order = value ? value.purchase_order : null;\n\n      this.invoice_lines = [];\n      if (value && value.invoice_lines) {\n        for (var i = 0; i < value.invoice_lines.length; ++i) {\n          this.invoice_lines.push(new InvoiceLine(value.invoice_lines[i]));\n        }\n      }\n      this.sale_order_deliveries = [];\n      if (value && value.sale_order_deliveries) {\n        for (var i = 0; i < value.sale_order_deliveries.length; ++i) {\n          this.sale_order_deliveries.push(\n            new OrderDelivery(value.sale_order_deliveries[i])\n          );\n        }\n      }\n      this.purchase_order_deliveries = [];\n      if (value && value.purchase_order_deliveries) {\n        for (var i = 0; i < value.purchase_order_deliveries.length; ++i) {\n          this.purchase_order_deliveries.push(\n            new OrderDelivery(value.purchase_order_deliveries[i], this.purchase_order)\n          );\n        }\n      }\n\n      this.is_received = value ? value.is_received : false;\n      this.is_retail = value ? value.is_retail : null;\n      this.pos_order = value ? value.pos_order : null;\n      this.subtotals_by_tax = value ? value.subtotals_by_tax : {};\n      if (value.subtotals_by_tax) {\n        Object.keys(this.subtotals_by_tax).forEach(function(key) {\n          this.subtotals_by_tax[key] = new SubtotalByTax(\n            this.subtotals_by_tax[key]\n          );\n        }, this);\n      }\n\n      this.total_excl_tax = value && value.total_excl_tax ? Number.parseFloat(value.total_excl_tax) : null;\n      this.total_incl_tax = value && value.total_incl_tax ? Number.parseFloat(value.total_incl_tax) : null;\n      this.total_tax = value && value.total_tax ? Number.parseFloat(value.total_tax) : null;\n\n      this.holded_invoice_data = value ? value.holded_invoice_data : null;\n      this.kubibai_invoice_data = value ? value.kubibai_invoice_data : null;\n      this.send_to_kubibai = value ? value.send_to_kubibai : false;\n\n      this.mutable_fields = value ? new MutableInvoiceFields(value.mutable_fields) : null;\n\n      /**\n       * Public methods\n       */\n      // Getters\n      this.getDiscount = function() {\n        if (this.discount) {\n          var totalToApply = this.is_retail\n            ? this.total_incl_tax\n            : this.total_excl_tax;\n          return Utils.roundPrice((this.discount * totalToApply) / 100);\n        }\n        return 0;\n      };\n\n      this.getEarlyPaymentDiscount = function() {\n\n        if (this.early_payment_discount) {\n          var totalToApply = this.is_retail\n            ? this.total_incl_tax\n            : this.total_excl_tax;\n          return Utils.roundPrice((this.early_payment_discount * totalToApply) / 100);\n        }\n      };\n\n      this.getDiscountPercentage = function() {\n        var totalToApply = this.is_retail\n          ? this.total_incl_tax\n          : this.total_excl_tax;\n        if (this.subtotal_discount && totalToApply != 0) {\n          return (this.subtotal_discount / totalToApply) * 100;\n        } else {\n          return 0;\n        }\n      };\n\n      this.isPurchaseInvoice = function() {\n        return this.invoice_model === INVOICE_MODELS.PURCHASE_INVOICE;\n      };\n\n      this.isDefaultInvoice = function() {\n        return this.invoice_model === INVOICE_MODELS.INVOICE;\n      };\n\n      this.canBeCorrected = function() {\n        return this.type === INVOICE_TYPES.INVOICE && this.autocode && !(this.corrective_of || this.corrected_by.length) && this.isDefaultInvoice() && !(this.replaced_by || this.replacement_of.length);\n      };\n\n      this.getEarlyPaymentDiscountPercentage = function() {\n        var totalToApply = this.is_retail\n          ? this.total_incl_tax\n          : this.total_excl_tax;\n        if (this.subtotal_early_payment_discount && totalToApply != 0) {\n          return (this.subtotal_early_payment_discount / totalToApply) * 100;\n        } else {\n          return 0;\n        }\n      };\n\n      this.addLine = function(taxId) {\n        this.invoice_lines.push(new InvoiceLine({\n          tax: taxId\n        }));\n      };\n\n      this.updateLines = function(newLines) {\n        this.invoice_lines = [];\n        if (newLines) {\n          for (var i = 0; i < newLines.length; ++i) {\n            this.invoice_lines.push(new InvoiceLine(newLines[i]));\n          }\n        }\n      };\n\n      this.removeLine = function(line) {\n        var index = this.invoice_lines.indexOf(line);\n        this.invoice_lines.splice(index, 1);\n      };\n\n      this.applyDiscount = function(price) {\n        if (\n          this.discount ||\n          this.early_payment_discount\n        ) {\n          var totalDiscountPercentage = (this.discount || 0) + (this.early_payment_discount || 0);\n          return price * (1 - totalDiscountPercentage / 100);\n        }\n        return price;\n      };\n\n      this.updateSubtotalsByTax = function(taxes) {\n        this.subtotals_by_tax = {};\n        if (this.invoice_lines) {\n          for (var i = 0; i < this.invoice_lines.length; ++i) {\n            var invoiceLine = this.invoice_lines[i];\n            var invoiceLineTax = taxes.find(function(tax) {\n              return tax.id == invoiceLine.tax;\n            });\n            if (!invoiceLineTax) {\n              invoiceLineTax = {\n                id: invoiceLine.tax_id ? invoiceLine.tax_id : invoiceLine.tax_name,\n                name: invoiceLine.tax_name,\n                percent_value: invoiceLine.tax_percent_value,\n                surcharge: 0\n              };\n            }\n            if (invoiceLineTax) {\n              if (!this.subtotals_by_tax[invoiceLineTax.id]) {\n                this.subtotals_by_tax[invoiceLineTax.id] = new SubtotalByTax(\n                  {\n                    id: invoiceLineTax.id,\n                    name: invoiceLineTax.name,\n                    percent_value: invoiceLineTax.percent_value,\n                    surcharge: invoiceLineTax.surcharge,\n                    amount: null,\n                    surcharge_amount: null,\n                    surcharge_difference: null,\n                    total_price_excl_tax_sum: null\n                  }\n                );\n              }\n              var totalPriceExclTax = invoiceLine.totalPriceExclTax(true);\n              var totalPriceInclTax = invoiceLine.totalPriceInclTax(true);\n              this.subtotals_by_tax[invoiceLineTax.id].total_price_excl_tax_sum += totalPriceExclTax;\n              var amount = 0;\n              if (totalPriceInclTax) {\n                amount = totalPriceInclTax - totalPriceExclTax;\n              } else {\n                amount = Utils.roundPrice(totalPriceExclTax * invoiceLineTax.percent_value / 100);\n              }\n\n              this.subtotals_by_tax[invoiceLineTax.id].amount += amount;\n              if (this.surcharge) {\n                var surchargeAmount = invoiceLine.total_price_excl_tax * ((invoiceLineTax.percent_value + invoiceLineTax.surcharge) / 100);\n                this.subtotals_by_tax[invoiceLineTax.id].surcharge_amount += Utils.roundPrice(surchargeAmount);\n              } else {\n                this.subtotals_by_tax[invoiceLineTax.id].surcharge_amount += amount;\n              }\n              this.subtotals_by_tax[invoiceLineTax.id].surcharge_difference = Utils.roundPrice(this.subtotals_by_tax[invoiceLineTax.id].surcharge_amount - this.subtotals_by_tax[invoiceLineTax.id].amount);\n            }\n          }\n        }\n        if (this.sale_order_deliveries) {\n          for (var i = 0; i < this.sale_order_deliveries.length; ++i) {\n            var subtotalsByTax = this.sale_order_deliveries[i].subtotals_by_tax;\n            Object.keys(subtotalsByTax).forEach(function(taxId) {\n              var subtotal_by_tax = subtotalsByTax[taxId];\n              if (!this.subtotals_by_tax[taxId]) {\n                this.subtotals_by_tax[taxId] = new SubtotalByTax(\n                  {\n                    id: taxId,\n                    name: subtotal_by_tax.name,\n                    percent_value: subtotal_by_tax.percent_value,\n                    surcharge: subtotal_by_tax.surcharge,\n                    amount: null,\n                    surcharge_amount: null,\n                    surcharge_difference: null,\n                    total_price_excl_tax_sum: null\n                  }\n                );\n              }\n              this.subtotals_by_tax[taxId].total_price_excl_tax_sum += subtotal_by_tax.total_price_excl_tax_sum;\n              var amount = Utils.roundPrice(subtotal_by_tax.total_price_excl_tax_sum * subtotal_by_tax.percent_value / 100);\n              this.subtotals_by_tax[taxId].amount += amount;\n\n              if (this.surcharge) {\n                this.subtotals_by_tax[taxId].surcharge_amount += subtotal_by_tax.total_price_excl_tax_sum *\n                  ((subtotal_by_tax.surcharge + subtotal_by_tax.percent_value) / 100);\n              } else {\n                this.subtotals_by_tax[taxId].surcharge_amount += amount;\n              }\n              this.subtotals_by_tax[taxId].surcharge_difference = this.subtotals_by_tax[taxId].surcharge_amount - this.subtotals_by_tax[taxId].amount;\n            }, this);\n          }\n        }\n        if (this.purchase_order_deliveries) {\n          for (var i = 0; i < this.purchase_order_deliveries.length; ++i) {\n            var subtotalsByTax = this.purchase_order_deliveries[i].subtotals_by_tax;\n            Object.keys(subtotalsByTax).forEach(function(taxId) {\n              var subtotal_by_tax = subtotalsByTax[taxId];\n              if (!this.subtotals_by_tax[taxId]) {\n                this.subtotals_by_tax[taxId] = new SubtotalByTax(\n                  {\n                    id: taxId,\n                    name: subtotal_by_tax.name,\n                    percent_value: subtotal_by_tax.percent_value,\n                    surcharge: subtotal_by_tax.surcharge,\n                    amount: null,\n                    surcharge_amount: null,\n                    surcharge_difference: null,\n                    total_price_excl_tax_sum: null\n                  }\n                );\n              }\n\n              this.subtotals_by_tax[taxId].total_price_excl_tax_sum += subtotal_by_tax.total_price_excl_tax_sum;\n              var amount = subtotal_by_tax.total_price_excl_tax_sum * subtotal_by_tax.percent_value / 100;\n              this.subtotals_by_tax[taxId].amount += amount;\n\n              if (this.surcharge) {\n                this.subtotals_by_tax[taxId].surcharge_amount += subtotal_by_tax.total_price_excl_tax_sum *\n                  ((subtotal_by_tax.surcharge + subtotal_by_tax.percent_value) / 100);\n              } else {\n                this.subtotals_by_tax[taxId].surcharge_amount += amount;\n              }\n              this.subtotals_by_tax[taxId].surcharge_difference = this.subtotals_by_tax[taxId].surcharge_amount - this.subtotals_by_tax[taxId].amount;\n            }, this);\n          }\n        }\n        this.roundSubtotalTaxesSurchargeAmount();\n      };\n\n      this.roundSubtotalTaxesSurchargeAmount = function() {\n        var subtotals_by_tax_list = Object.values(this.subtotals_by_tax);\n        subtotals_by_tax_list.forEach(function(tax) {\n          this.subtotals_by_tax[tax.id].surcharge_amount = Utils.roundPrice(this.subtotals_by_tax[tax.id].surcharge_amount);\n          this.subtotals_by_tax[tax.id].surcharge_difference = Utils.roundPrice(this.subtotals_by_tax[tax.id].surcharge_difference);\n          this.subtotals_by_tax[tax.id].total_price_excl_tax_sum = Utils.roundPrice(this.subtotals_by_tax[tax.id].total_price_excl_tax_sum);\n          this.subtotals_by_tax[tax.id].amount = Utils.roundPrice(this.subtotals_by_tax[tax.id].amount);\n        }, this);\n      };\n\n      this.getTotalRoundedTax = function() {\n        var subtotals_by_tax_list = Object.values(this.subtotals_by_tax);\n        var total = subtotals_by_tax_list.reduce(\n          function(total, subtotal_by_tax) {\n            return total + subtotal_by_tax.getTotalRoundedTax();\n          },\n          0\n        );\n        return total;\n      };\n\n      this.updateSubtotalsByTaxWithDiscount = function() {\n        this.total_tax = 0;\n        var subtotals_by_tax_list = Object.values(this.subtotals_by_tax);\n        subtotals_by_tax_list.forEach(function(subtotal_by_tax) {\n          subtotal_by_tax.amount = this.applyDiscount(subtotal_by_tax.amount);\n          subtotal_by_tax.surcharge_amount = this.applyDiscount(subtotal_by_tax.surcharge_amount);\n          subtotal_by_tax.surcharge_difference = this.applyDiscount(subtotal_by_tax.surcharge_difference);\n          if (!this.exclude_taxes) {\n            this.total_tax += subtotal_by_tax.getTotalRoundedTax();\n          }\n        }, this);\n      };\n\n      this.updateTotals = function() {\n        this.total_excl_tax = 0;\n        this.total_incl_tax = 0;\n        // Check if no taxes, second condition is for old purchases\n        if (this.invoice_lines) {\n          for (var i = 0; i < this.invoice_lines.length; ++i) {\n            this.total_excl_tax += this.invoice_lines[i].total_price_excl_tax;\n            this.total_incl_tax += this.invoice_lines[i].total_price_incl_tax;\n          }\n        }\n        if (this.sale_order_deliveries) {\n          for (var i = 0; i < this.sale_order_deliveries.length; ++i) {\n            if (this.invoice_lines || Object.keys(this.subtotals_by_tax).length === 0 && typeof this.subtotals_by_tax === 'object') {\n              this.total_excl_tax += parseFloat(this.sale_order_deliveries[i].subtotal);\n            } else {\n              this.total_excl_tax += parseFloat(this.sale_order_deliveries[i].total_excl_tax);\n            }\n          }\n        }\n\n        if (this.purchase_order_deliveries) {\n          for (var i = 0; i < this.purchase_order_deliveries.length; ++i) {\n            this.total_excl_tax +=\n              parseFloat(this.purchase_order_deliveries[i].subtotal);\n          }\n        }\n\n        this.total_tax = 0;\n        if (!this.exclude_taxes) {\n          this.total_tax = Utils.roundPrice(this.total_incl_tax - this.total_excl_tax);\n        }\n        this.total_incl_tax = Utils.roundPrice(this.total_incl_tax);\n        this.total_excl_tax = Utils.roundPrice(this.total_excl_tax);\n        this.updateDiscount();\n        this.total_incl_tax = (this.total_excl_tax - this.getDiscount()) + this.total_tax;\n        this.updateSubtotalsByTaxWithDiscount();\n      };\n\n      this.getFinalTotalInclTax = function() {\n        var finalTotalInclTax = this.applyDiscount(this.total_excl_tax);\n        if (!this.exclude_taxes) {\n          finalTotalInclTax += this.total_tax;\n        }\n        return finalTotalInclTax;\n      };\n\n      this.updateDiscount = function() {\n        if (this.discount_as_absolut) {\n          this.discount = this.getDiscountPercentage();\n          this.early_payment_discount =\n            this.getEarlyPaymentDiscountPercentage();\n        } else {\n          this.subtotal_discount = this.getDiscount();\n          this.subtotal_early_payment_discount = this.getEarlyPaymentDiscount();\n        }\n      };\n\n      this.updatePrices = function(taxes) {\n        for (var i = 0; i < this.invoice_lines.length; ++i) {\n          this.invoice_lines[i].setTaxInstance(taxes);\n          this.invoice_lines[i].updatePrices(\n            this.exclude_taxes,\n            this.surcharge\n          );\n        }\n        if (!this.exclude_taxes) {\n          this.updateSubtotalsByTax(taxes);\n        }\n        this.updateTotals();\n      };\n\n      // Validations\n      this.isValidForHolded = function() {\n        if (!this.customer) {\n          return false;\n        }\n        return this.billing_date;\n\n      };\n\n      this.isCorrective = function() {\n        return this.corrective_of !== null;\n      };\n\n      this.getSerialNumberTypeType = function() {\n        if (this.isCorrective()) {\n          return SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE;\n        } else if (this.type === INVOICE_TYPES.INVOICE) {\n          return SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE;\n        } else if (this.type === INVOICE_TYPES.PROFORMA) {\n          return SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PROFORMA_INVOICE;\n        } else {\n          return SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_QUOTE;\n        }\n      };\n\n      this.getAutocodeOrDraft = function() {\n        return Invoice.getAutocodeOrDraft(this.autocode);\n      };\n\n      this.getFileName = function() {\n        return Invoice.getFileName(this.autocode);\n      };\n    }\n\n    Invoice.getAutocodeOrDraft = function(autocode) {\n      return autocode || $filter('translate')('INVOICE.DRAFT').toLowerCase();\n    };\n\n    Invoice.getFileName = function(autocode) {\n      return Invoice.getAutocodeOrDraft(autocode) + '.pdf';\n    };\n\n    return Invoice;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.invoice-line', [])\n    .factory('InvoiceLine', _InvoiceLine);\n\n  /** @ngInject */\n  function _InvoiceLine(Utils) {\n    function InvoiceLine(value) {\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n\n      // Autocode\n      this.autocode = value ? value.autocode : null;\n\n      // Invoice attributes\n      this.custom_price_excl_tax = value ? value.custom_price_excl_tax : null;\n      this.custom_price_incl_tax = value ? value.custom_price_incl_tax : null;\n      this.price_excl_tax = value ? value.price_excl_tax : null;\n      this.price_incl_tax = value ? value.price_incl_tax : null;\n\n      this.description = value ? value.description : null;\n\n      this.discount = value ? value.discount : 0;\n      this.discount_price_excl_tax = value\n        ? value.discount_price_excl_tax\n        : null;\n      this.discount_price_incl_tax = value\n        ? value.discount_price_incl_tax\n        : null;\n\n      this.invoice = value ? value.invoice : null;\n      this.label = value ? value.label : null;\n      this.product_variant = value ? value.product_variant : null;\n      this.remaining_amount_to_correct_from_original = value ? value.remaining_amount_to_correct_from_original : null;\n      this.corrective_of = value ? value.corrective_of : false;\n      this.quantity = value ? value.quantity : null;\n\n      this.tax = value ? value.tax : null;\n      this.tax_instance = value ? value.tax_instance : null;\n      this.tax_name = value ? value.tax_name : null;\n      this.tax_percent_value = value ? value.tax_percent_value : null;\n\n      var priceExclTax = (this.custom_price_excl_tax !== null && this.custom_price_excl_tax !== undefined) ? this.custom_price_excl_tax : this.price_excl_tax;\n      var priceInclTax = (this.custom_price_incl_tax !== null && this.custom_price_incl_tax !== undefined) ? this.custom_price_incl_tax : this.price_incl_tax;\n\n      this.total_price_excl_tax = value\n        ? value.total_price_excl_tax\n        : this.quantity * priceExclTax;\n      this.total_price_incl_tax = value\n        ? value.total_price_incl_tax\n        : this.quantity * priceInclTax;\n\n      this.related_orders = value ? value.related_orders : null;\n\n      this.related_object_type = value ? value.related_object_type : null;\n      this.related_object_id = value ? value.related_object_id : null;\n      this.related_object_autocode = value ? value.related_object_autocode : null;\n\n      /**\n       * Public methods\n       */\n      this.initQuantity = function() {\n        if (this.corrective_of && this.quantity > 0){\n          return -this.remaining_amount_to_correct_from_original;\n        } else {\n          return this.quantity;\n        }\n      };\n\n      this.quantity = this.initQuantity();\n\n      this.totalPriceExclTax = function (avoidRound) {\n        var total = null;\n        var priceExclTax = (this.custom_price_excl_tax !== null && this.custom_price_excl_tax !== undefined) ? this.custom_price_excl_tax  : this.price_excl_tax;\n        if (this.discount && this.discount > 0 && this.discount <= 100) {\n          var discount = (100 - this.discount) / 100;\n          total =priceExclTax * discount * this.quantity;\n        } else {\n          total = priceExclTax * this.quantity;\n        }\n        if(avoidRound){\n          return total;\n        }else{\n          return Utils.roundPrice(total);\n        }\n      };\n\n      this.totalPriceInclTax = function (surcharge) {\n        var price;\n        if (this.tax && this.tax_instance) {\n          price = this.totalPriceExclTax(true) * (1 + this.tax_instance.percent_value / 100);\n          /*var priceInclTax = (this.custom_price_incl_tax !== null && this.custom_price_incl_tax !== undefined) ? this.custom_price_incl_tax  : this.price_incl_tax;\n          if (this.discount && this.discount > 0 && this.discount <= 100) {\n            var discount = (100 - this.discount) / 100;\n            price = Utils.roundPrice(priceInclTax * discount * this.quantity);\n          } else {\n            price = Utils.roundPrice(priceInclTax * this.quantity);\n          }*/\n        } else if (this.tax_percent_value) {\n          //price = this.total_price_incl_tax;\n          price = this.totalPriceExclTax(true) * (1 + this.tax_percent_value / 100);\n        } else {\n          price = this.total_price_excl_tax;\n        }\n        return Utils.roundPrice(price);\n      };\n\n      this.priceInclTax = function (surcharge) {\n        var price;\n        if (this.tax && this.tax_instance) {\n          var totalTaxesPercentValue = this.tax_instance.percent_value;\n          price = Utils.roundPrice(this.price_excl_tax * (1 + totalTaxesPercentValue / 100));\n        } else if (this.tax_percent_value) {\n          price = this.price_incl_tax;\n        } else {\n          price = this.price_excl_tax;\n        }\n          return Utils.roundPrice(price, 6);\n      };\n\n      this.updatePrices = function (excludeTaxes, surcharge) {\n        if (!this.quantity) {\n          this.quantity = 0;\n        }\n\n        if (!this.discount) {\n          this.discount = 0;\n        }\n        this.total_price_excl_tax = this.totalPriceExclTax();\n        if (!excludeTaxes) {\n          this.price_incl_tax = this.priceInclTax(surcharge);\n          this.total_price_incl_tax = this.totalPriceInclTax(surcharge);\n        } else {\n          this.total_price_incl_tax = this.total_price_excl_tax;\n          this.price_incl_tax = this.price_excl_tax;\n        }\n      };\n\n      this.setTaxInstance = function (taxes) {\n        if (this.tax) {\n          var tax_id = this.tax;\n          this.tax_instance = taxes.find(function (tax) {\n            return tax.id == tax_id;\n          });\n        }\n      };\n    }\n\n    return InvoiceLine;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.hub', [])\n    .factory('Hub', _Hub);\n\n  /** @ngInject */\n  function _Hub() {\n\n    function Hub(value) {\n      // Data\n      this.id = value ? value.id : null;\n      this.code = value ? value.code : null;\n      this.name = value ? value.name : null;\n      this.order = value ? value.order : null;\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return Hub;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.gs1datamatrix', [])\n    .factory('GS1Datamatrix', GS1DatamatrixFactory);\n\n  /** @ngInject */\n  function GS1DatamatrixFactory() {\n    var GS1ApplicationIdentifiers = {\n      GTIN: '01',\n      LOT: '10',\n      PRODUCTION_DATE: '11',\n      DUE_DATE: '12',\n      PACK_DATE: '13',\n      BEST_BEFORE_DATE: '15',\n      EXPIRY_DATE: '17',\n      SERIAL_NUMBER: '21',\n      ADDITIONAL_ID: '240',\n      NET_WEIGHT_KG: '310',\n      LENGTH_M: '311',\n      WIDTH_M: '312',\n      HEIGHT_M: '313',\n      AREA_SQM: '314',\n      NET_VOLUME_L: '315',\n      NET_VOLUME_CBM: '316',\n      COUNT_OF_ITEMS: '30',\n      ORDER_NUMBER: '400',\n      GINC: '401',\n      GIN: '402',\n      ROUTE: '403',\n      SHIP_TO_LOCATION: '410',\n      BILL_TO_LOCATION: '411',\n      PURCHASE_FROM_LOCATION: '412',\n      SHIP_FOR_LOCATION: '413',\n      SHIP_TO_POSTAL_CODE: '420',\n      SHIP_TO_COUNTRY: '421',\n      ORIGIN: '422',\n      INTERNAL_PRODUCT_VARIANT: '423',\n      CUSTOMER_PART_NUMBER: '8012',\n      COMPONENT_PART_NUMBER: '8013'\n    };\n\n    var delimiterPairs = [\n      { open: '\\\\(', close: '\\\\)' },\n      { open: '\\\\)', close: '=' }\n    ];\n\n    function buildRegex(pairs) {\n      var regexParts = pairs.map(function(pair) {\n        return pair.open + '(\\\\d{2,4})' + pair.close + '([^' + pair.open + pair.close + ']+)';\n      });\n      return new RegExp(regexParts.join('|'), 'g');\n    }\n\n    function GS1Datamatrix(value) {\n      this.value = value;\n      this.parsedData = this.parseValue(value);\n    }\n\n    GS1Datamatrix.gs1DatamatrixRegex = buildRegex(delimiterPairs);\n\n    GS1Datamatrix.prototype.parseValue = function(value) {\n      var match;\n      var data = {};\n      GS1Datamatrix.gs1DatamatrixRegex.lastIndex = 0;\n\n      while ((match = GS1Datamatrix.gs1DatamatrixRegex.exec(value)) !== null) {\n        for (var i = 1; i < match.length; i += 2) {\n          if (match[i]) {\n            data[match[i]] = match[i + 1].trim();\n            break;\n          }\n        }\n      }\n      return data;\n    };\n\n    GS1Datamatrix.isGS1Datamatrix = function(value) {\n      var GS_CHAR_CODE = 29;\n      if (value.includes(String.fromCharCode(GS_CHAR_CODE))) {\n        return true;\n      }\n\n      GS1Datamatrix.gs1DatamatrixRegex.lastIndex = 0;\n      return GS1Datamatrix.gs1DatamatrixRegex.exec(value);\n    };\n\n    GS1Datamatrix.prototype.getSKU = function() {\n      return this.parsedData[GS1ApplicationIdentifiers.ADDITIONAL_ID] || null;\n    };\n\n    GS1Datamatrix.prototype.getLotOrSeries = function() {\n      return this.parsedData[GS1ApplicationIdentifiers.LOT] || this.parsedData[GS1ApplicationIdentifiers.SERIAL_NUMBER] || null;\n    };\n\n    GS1Datamatrix.prototype.getLot = function() {\n      return this.parsedData[GS1ApplicationIdentifiers.LOT] || null;\n    };\n\n    GS1Datamatrix.prototype.getSerialNumber = function() {\n      return this.parsedData[GS1ApplicationIdentifiers.SERIAL_NUMBER] || null;\n    };\n\n    GS1Datamatrix.prototype.getAllParsedData = function() {\n      return Object.values(this.parsedData).join('');\n    };\n\n    return GS1Datamatrix;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.feature', [])\n    .factory('Feature', _Feature);\n\n  /** @ngInject */\n  function _Feature() {\n\n    function Feature(value) {\n      // Data\n      this.id = value ? value.id : null;\n      this.code = value ? value.code : null;\n      this.name = value ? value.name : null;\n      this.permissions = value ? value.permissions : [];\n\n      // Methods\n      this.getPermissionDict = function(isAddOn, planFeatureId) {\n        var permissionDict = {};\n        if (isAddOn) {\n          for (var i = 0; i < this.permissions.length; ++i) {\n            permissionDict[this.permissions[i]] = {\n              id: planFeatureId,\n              code: this.code\n            };\n          }\n        } else {\n          this.permissions.forEach(function(permission) {\n            permissionDict[permission] = true;\n          });\n        }\n        return permissionDict;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return Feature;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.factory', [])\n    .factory('Factory', _Factory);\n\n  function _Factory() {\n\n    function Factory() {\n    }\n\n    Factory.prototype._getValue = function (value, key, defaultValue) {\n      var v = value && value[key] !== undefined ? value[key] : defaultValue;\n      if (typeof v === 'string' && !isNaN(Date.parse(v))) {\n        return new Date(v);\n      }\n      return v;\n    };\n\n    Factory.prototype.toJson = function () {\n      throw new Error('Method toJson not implemented');\n    };\n\n    return Factory;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.dynamic-report', [])\n    .factory('DynamicReport', _DynamicReport);\n\n  /** @ngInject */\n  function _DynamicReport(\n    DynamicReportFilter\n  ) {\n\n    function DynamicReport(value) {\n      var CHART_TYPE_LINE = 'line';\n      var CHART_TYPE_BAR = 'bar';\n\n      var CHART_GRANULARITY_DAY = 'day';\n      var CHART_GRANULARITY_WEEK = 'week';\n      var CHART_GRANULARITY_MONTH = 'month';\n      var CHART_GRANULARITY_YEAR = 'year';\n\n      // Data\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.trans = value ? value.trans : null;\n      this.chartType = CHART_TYPE_LINE;\n      this.chartGranularity = CHART_GRANULARITY_DAY;\n      this.dimensions = value ? value.dimensions : [];\n      this.columnDimensions = value ? value.columnDimensions : [];\n      this.metrics = value ? value.metrics : [];\n      this.sorts = value ? value.sorts : [];\n      this.totals = value ? value.totals : false;\n\n      this.filters = [];\n      if (value && value.filters) {\n        for (var i = 0; i < value.filters.length; i++) {\n          this.filters.push(new DynamicReportFilter(value.filters[i]));\n        }\n      }\n\n      // Methods\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return DynamicReport;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.dynamic-report-filter', [])\n    .factory('DynamicReportFilter', _DynamicReportFilter);\n\n  /** @ngInject */\n  function _DynamicReportFilter(DYNAMIC_REPORT_OPERATIONS, DYNAMIC_REPORT_FILTERS) {\n\n    function asISODate(d) {\n      if (!d) { return null; }\n      if (window.moment && window.moment(d).isValid()) {\n        return window.moment(d).format('YYYY-MM-DD');\n      }\n      var dd = new Date(d);\n      if (isNaN(dd.getTime())) { return null; }\n      var y = dd.getFullYear();\n      var m = (dd.getMonth() + 1).toString().padStart(2, '0');\n      var day = dd.getDate().toString().padStart(2, '0');\n      return y + '-' + m + '-' + day;\n    }\n\n    function toDate(x){\n      if (!x) { return null; }\n      if (Object.prototype.toString.call(x) === '[object Date]') { return x; }\n      var d = new Date(x);\n      return isNaN(d.getTime()) ? null : d;\n    }\n\n    function DynamicReportFilter(value) {\n      // Data\n      this.id         = value ? value.id : null;\n      this.name       = value ? value.name : null;\n      this.type       = (value && value.type) ? value.type : DYNAMIC_REPORT_FILTERS.FILTER_TYPE_DATE;\n      this.operation  = (value && value.operation) ? value.operation : DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_EQUAL;\n      this.endpoint   = value ? value.endpoint : null;\n      this.serializer = value ? value.serializer : null;\n      this.value      = value ? value.value : null;\n\n      if (this.type === DYNAMIC_REPORT_FILTERS.FILTER_TYPE_DATE) {\n        var v = (this.value && typeof this.value === 'object') ? this.value : {};\n          this.value = {\n            dateStart: toDate(v.dateStart),\n            dateEnd:   toDate(v.dateEnd)\n          };\n          if (!this.value.dateStart && !this.value.dateEnd) {\n            var today = new Date();\n            var past = new Date();\n            past.setDate(today.getDate() - 7);\n            this.value.dateStart = past;\n            this.value.dateEnd = today;\n          }\n      }\n\n      // Methods\n      this.getName = function() {\n        return 'DYNAMIC_REPORTS.FIELD_' + this.name.toUpperCase();\n      };\n\n      this.getAvailableOperations = function() {\n        if (this.type === DYNAMIC_REPORT_FILTERS.FILTER_TYPE_FK) {\n          return [ DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_EQUAL ];\n        }\n        return [\n          DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_EQUAL,\n          DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_NOT_EQUAL,\n          DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_GREATER_THAN,\n          DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_LESS_THAN,\n          DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_GREATER_THAN_OR_EQUAL,\n          DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_LESS_THAN_OR_EQUAL\n        ];\n      };\n\n      this.formatName = function() {\n        if (this.operation === DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_EQUAL) { return this.name; }\n        if (this.operation === DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_NOT_EQUAL) { return this.name + '__neq'; }\n        if (this.operation === DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_GREATER_THAN) { return this.name + '__gt'; }\n        if (this.operation === DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_LESS_THAN) { return this.name + '__lt'; }\n        if (this.operation === DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_GREATER_THAN_OR_EQUAL) { return this.name + '__gte'; }\n        if (this.operation === DYNAMIC_REPORT_OPERATIONS.FILTER_OPERATION_LESS_THAN_OR_EQUAL) { return this.name + '__lte'; }\n      };\n\n      this.formatValue = function() {\n        if (this.value instanceof Array) {\n          return this.value.map(function(object){ return object.id; }).join(',');\n        }\n        return this.value;\n      };\n\n      this.toParams = function() {\n\n        if (this.type === DYNAMIC_REPORT_FILTERS.FILTER_TYPE_DATE) {\n          var s = asISODate(this.value && this.value.dateStart);\n          var e = asISODate(this.value && this.value.dateEnd);\n          var out = {};\n          if (s) { out[this.name + '__gte'] = s; }\n          if (e) { out[this.name + '__lte'] = e; }\n          return Object.keys(out).length ? out : null;\n        }\n\n        if (this.type === DYNAMIC_REPORT_FILTERS.FILTER_TYPE_FK) {\n          var v = this.formatValue();\n          if (v === null || v === undefined || v === '') { return null; }\n          var o = {}; o[this.formatName()] = v; return o;\n        }\n\n        var k = this.formatName();\n        var vv = this.formatValue();\n        if (vv === null || vv === undefined || vv === '') { return null; }\n        var obj = {}; obj[k] = vv; return obj;\n      };\n    }\n\n    return DynamicReportFilter;\n  }\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.devolution-card', [])\n    .factory('DevolutionCard', _DevolutionCard);\n\n  /** @ngInject */\n  function _DevolutionCard() {\n\n    function DevolutionCard(value) {\n\n      /**\n       * Public attributes\n       */\n      this.id = value ? value.id : null;\n      // Security Object\n      this.created_at = value && value.created_at ? new Date(value.created_at) : null;\n      this.updated_at = value && value.updated_at ? new Date(value.updated_at) : null;\n      this.deleted = value ? value.deleted : null;\n      this.deleted_at = value && value.deleted_at ? new Date(value.deleted_at) : null;\n\n      this.source_pos_order = value ? value.source_pos_order : null;\n      this.target_pos_order = value ? value.target_pos_order : null;\n      this.created_by = value ? value.created_by : null;\n      this.warehouse = value ? value.warehouse : null;\n      this.register = value ? value.register : null;\n      this.barcode = value ? value.barcode : null;\n      this.amount = value ? value.amount : null;\n      this.is_valid = value ? value.is_valid : null;\n      this.actual_gift_card_amount = value ? value.actual_gift_card_amount : null;\n\n    }\n\n    return DevolutionCard;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.coupon', [])\n    .factory('Coupon', _Coupon);\n\n  /** @ngInject */\n  function _Coupon() {\n\n    function Coupon(value) {\n      this.id = value ? value.id : null;\n      this.code = value ? value.code : null;\n      this.discount_value = value ? value.discount_value : null;\n      this.discount_is_percentage = value ? !!value.discount_is_percentage : false;\n      this.duration = value && value.duration ? value.duration : 'forever';\n      this.duration_in_months = value ? value.duration_in_months : null;\n      this.applies_until = value ? value.applies_until : null;\n\n      this.getDiscountAmount = function(value) {\n        if (this.discount_is_percentage) {\n          return value * this.discount_value / 100 || 0;\n        }\n        return this.discount_value || 0;\n      };\n\n      this.toJson = function() {\n        return {\n          id: this.id,\n          name: this.code,\n          percent_off: this.discount_is_percentage ? this.discount_value : null,\n          amount_off: this.discount_is_percentage ? null : this.discount_value,\n          duration: this.duration || 'forever',\n          duration_in_months: this.duration === 'repeating' ? this.duration_in_months : null\n        };\n      };\n    }\n\n    Coupon.initializeFromCoupon = function(coupon) {\n      if (!coupon) {\n        return new Coupon();\n      }\n      return new Coupon({\n        id: coupon.id,\n        code: coupon.code,\n        discount_is_percentage: !!coupon.percent_off,\n        discount_value: !!coupon.percent_off ? coupon.percent_off : coupon.amount_off,\n        duration: coupon.duration || 'forever',\n        duration_in_months: coupon.duration_in_months || null,\n        applies_until: coupon.applies_until || null\n      });\n    };\n\n    return Coupon;\n  }\n})();\n\n\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.contracted-plan', [])\n    .factory('ContractedPlan', _ContractedPlan);\n\n  /** @ngInject */\n  function _ContractedPlan(\n    Coupon,\n    Plan,\n    ContractedPlanLimit,\n    ContractedAddOn\n  ) {\n\n    function ContractedPlan(value) {\n      // Data\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.contracted_at = value && value.contracted_at ? new Date(value.contracted_at) : null;\n      this.plan = value ? new Plan(value.plan) : null;\n      this.contracted_plan_add_ons = [];\n      if (value && value.contracted_plan_add_ons) {\n        for (var i = 0; i < value.contracted_plan_add_ons.length; ++i) {\n          this.contracted_plan_add_ons.push(new ContractedAddOn(value.contracted_plan_add_ons[i]));\n        }\n      }\n      this.contracted_plan_limits = [];\n      if( value && value.contracted_plan_limits) {\n        for (var i = 0; i < value.contracted_plan_limits.length; ++i) {\n          this.contracted_plan_limits.push(new ContractedPlanLimit(value.contracted_plan_limits[i]));\n        }\n      }\n      this.coupon = {};\n      if (value && value.coupons && value.coupons.length) {\n        this.coupon = new Coupon.initializeFromCoupon(value.coupons[0]);\n      }\n\n      // Methods\n      this.getFeaturesDict = function() {\n        return this.plan.getFeaturesDict();\n      };\n\n      this.getAddOnsDict = function() {\n        return this.plan.getAddOnsDict();\n      };\n\n      this.getContractedAddOnsDict = function() {\n        var contractedAddOnsDict = {};\n        this.contracted_plan_add_ons.forEach(function(contractedAddOn) {\n          angular.extend(contractedAddOnsDict, contractedAddOn.plan_feature.getPermissionDict());\n        });\n        return contractedAddOnsDict;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return ContractedPlan;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.contracted-plan-limit', [])\n    .factory('ContractedPlanLimit', _ContractedPlanLimit);\n\n  /** @ngInject */\n  function _ContractedPlanLimit(\n    $filter,\n    Coupon,\n    PLAN_LIMIT_EXCEED_LIMIT_POLICIES,\n    SUBSCRIPTION_PERIOD) {\n\n    function ContractedPlanLimit(value) {\n\n      // Data\n      this.id = value.id;\n      this.code = value.code;\n      this.name = value.name;\n      this.model = value.model;\n      this.model_name = value.model_name;\n      this.included_amount = value.included_amount;\n      this.current_amount = value.current_amount;\n      this.pack_monthly_price = value.pack_monthly_price;\n      this.pack_yearly_price = value.pack_yearly_price;\n      this.price_excl_tax = value.price_excl_tax;\n      this.exceed_limit_policy = value.exceed_limit_policy;\n      this.contracted_packs = value.contracted_packs;\n      this.plan_id = value.plan_id;\n      this.plan_limit_id = value.plan_limit_id;\n      this.coupon = new Coupon();\n      if(value.coupons && value.coupons.length){\n        this.coupon = Coupon.initializeFromCoupon(value.coupons[0]);\n      }\n\n      this.showIncreaseSubscription = function() {\n        return this.included_amount <= this.current_amount;\n      };\n\n      this.getAlertTitleMessage = function() {\n        if (this.code) {\n          var key = 'CONTRACTED_PLAN_LIMIT_ALERT.' + this.code.toUpperCase() + '.TITLE';\n          return $filter('translate')(key);\n        }\n      };\n\n      this.getAlertBodyMessage = function() {\n        if (this.code) {\n          var key = 'CONTRACTED_PLAN_LIMIT_ALERT.' + this.code.toUpperCase() + '.BODY';\n          var price = $filter('price')(this.price_excl_tax) + '€';\n          return $filter('translate')(key, {\n            price: price\n          });\n        }\n      };\n\n      this.blocksCreation = function() {\n        return this.exceed_limit_policy === PLAN_LIMIT_EXCEED_LIMIT_POLICIES.BLOCK_CREATION &&\n          this.included_amount >= this.current_amount;\n      };\n\n      this.allowsCreation = function() {\n        return this.exceed_limit_policy === PLAN_LIMIT_EXCEED_LIMIT_POLICIES.ALLOW_CREATION;\n      };\n\n      this.getExtraAmount = function(){\n        return Math.max(0, this.current_amount - this.included_amount);\n      };\n\n      this.getDiscountAmount = function(subscriptionPeriod){\n        if (this.coupon){\n          var unitPrice = this.getPrice(subscriptionPeriod);\n          var subtotal = this.contracted_packs * unitPrice;\n          return this.coupon.getDiscountAmount(subtotal);\n        }\n        return 0;\n      };\n\n      this.getPrice = function(period) {\n        var price = null;\n        if (period === SUBSCRIPTION_PERIOD.YEARLY) {\n          price = this.pack_yearly_price;\n        }\n        if (period === SUBSCRIPTION_PERIOD.MONTHLY) {\n          price = this.pack_monthly_price;\n        }\n        return price;\n      };\n\n      this.getTotal = function(period, withDiscount){\n        var unitPrice = this.getPrice(period, false);\n        var subtotal = this.contracted_packs * unitPrice;\n        if (withDiscount && this.coupon) {\n          var discount = 0;\n          if (this.coupon.discount_is_percentage) {\n            discount = this.coupon.getDiscountAmount(subtotal);\n          } else {\n            discount = this.coupon.getDiscountAmount(subtotal);\n          }\n          return Math.max(0, subtotal - discount);\n        }\n        return subtotal;\n      };\n\n      this.toJson = function() {\n        var json = {\n          id: this.id,\n          code: this.code,\n          name: this.name,\n          model: this.model,\n          model_name: this.model_name,\n          included_amount: this.included_amount,\n          current_amount: this.current_amount,\n          price_excl_tax: this.price_excl_tax,\n          exceed_limit_policy: this.exceed_limit_policy,\n          contracted_packs: this.contracted_packs,\n          plan_id: this.plan_id,\n          plan_limit_id: this.plan_limit_id,\n          coupons: []\n        };\n        if (this.coupon && this.coupon.discount_value) {\n          json.coupons.push(this.coupon.toJson());\n        }\n        return json;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return ContractedPlanLimit;\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.contracted-add-on', [])\n    .factory('ContractedAddOn', _ContractedAddOn);\n\n  /** @ngInject */\n  function _ContractedAddOn(\n    Coupon,\n    PlanFeature\n  ) {\n\n    function ContractedAddOn(value) {\n      // Data\n      this.id = value ? value.id : null;\n      this.coupon = new Coupon();\n      if (value && value.coupons && value.coupons.length) {\n        this.coupon = new Coupon.initializeFromCoupon(value.coupons[0]);\n      }\n      this.plan_feature = value ? new PlanFeature(value.plan_feature) : null;\n      // UI attributes\n      this.selected = false;\n\n      // Methods\n      this.getPrice = function(period, withDiscount) {\n        if(withDiscount){\n          return this.plan_feature.getPrice(period) - this.getDiscountAmount(period);\n        }\n        return this.plan_feature.getPrice(period);\n      };\n\n      this.getDiscountAmount = function(period) {\n        return this.coupon.getDiscountAmount(this.plan_feature.getPrice(period));\n      };\n\n      this.toJson = function() {\n        var json = {\n          id: this.id,\n          plan_feature: null,\n          coupons: []\n        };\n        if (this.coupon && this.coupon.discount_value) {\n          json.coupons.push(this.coupon.toJson());\n        }\n        if(this.plan_feature){\n          json.plan_feature = this.plan_feature.id;\n        }\n        return json;\n      };\n\n      this.toApplyJson = function() {\n        var json = {\n          plan_feature_id: this.plan_feature ? this.plan_feature.id : null\n        };\n        var c = this.coupon && this.coupon.discount_value ? this.coupon.toJson() : null;\n        if (c) {\n          json.coupons = [c];\n        }\n        return json;\n      };\n\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return ContractedAddOn;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.company', [])\n    .factory('Company', _Company);\n\n  /** @ngInject */\n  function _Company(\n    Subscription,\n    FiscalProfileFactory,\n    InstalledIntegrationAppFactory,\n    INTEGRATION_APP_TYPE,\n    INSTALLED_INTEGRATION_APP_STATUS\n  ) {\n\n    function Company(value) {\n      // Data\n      // TODO: type all the attributes and remove the loop\n      if (value) {\n        var keys = Object.keys(value);\n        for (var i = 0; i < keys.length; ++i) {\n          this[keys[i]] = angular.copy(value[keys[i]]);\n        }\n      }\n      this.hide_upgrade_features_in_menu = value ? value.hide_upgrade_features_in_menu : false;\n      this.subscription = value && value.subscription ? new Subscription(value.subscription) : null;\n      this.fiscal_profile = value && value.fiscal_profile ? FiscalProfileFactory.create(value.fiscal_profile) : null;\n\n      this.installed_integration_apps = [];\n      if (value && value.installed_integration_apps) {\n        var factory = new InstalledIntegrationAppFactory();\n        for (var j = 0; j < value.installed_integration_apps.length; ++j) {\n          var installedIntegrationAppClass = factory.getInstalledIntegrationAppClass(value.installed_integration_apps[j].integration_app);\n          if (installedIntegrationAppClass) {\n            this.installed_integration_apps.push(new installedIntegrationAppClass(value.installed_integration_apps[j]));\n          } else {\n            this.installed_integration_apps.push(value.installed_integration_apps[j]);\n          }\n        }\n      }\n\n\n      // Methods\n      this.getFeaturesDict = function() {\n        if (this.subscription) {\n          return this.subscription.getFeaturesDict();\n        }\n        return {};\n      };\n\n      this.getAddOnsDict = function() {\n        if (this.subscription) {\n          return this.subscription.getAddOnsDict();\n        }\n        return {};\n      };\n\n      this.getContractedAddOnsDict = function() {\n        if (this.subscription) {\n          return this.subscription.getContractedAddOnsDict();\n        }\n        return {};\n      };\n\n      this.hasSubscription = function() {\n        return !!this.subscription;\n      };\n\n      this.getAddOn = function(permission) {\n        return this.subscription.getAddOn(permission);\n      };\n\n      this.hasInstalledAppEnabled = function(INTEGRATION_APP_TYPE) {\n        return !!this.getInstalledApp(INTEGRATION_APP_TYPE);\n      };\n\n      this.getInstalledApp = function(INTEGRATION_APP_TYPE) {\n        if (!this.installed_integration_apps) {\n          return null;\n        }\n        return this.installed_integration_apps.find(function(installedApp) {\n          return installedApp.integration_app.type === INTEGRATION_APP_TYPE &&\n            installedApp.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED;\n        });\n      };\n\n      this.getInstalledAppByFiscalAddress = function(INTEGRATION_APP_TYPE, fiscalAddressId) {\n        if (!this.installed_integration_apps) {\n          return null;\n        }\n        return this.installed_integration_apps.find(function(installedApp) {\n          if (fiscalAddressId === null || fiscalAddressId === undefined) {\n            return installedApp.integration_app.type === INTEGRATION_APP_TYPE &&\n              installedApp.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED &&\n              installedApp.fiscal_address === null;\n          }\n          return installedApp.integration_app.type === INTEGRATION_APP_TYPE &&\n            installedApp.status === INSTALLED_INTEGRATION_APP_STATUS.ENABLED &&\n            installedApp.fiscal_address === fiscalAddressId;\n        });\n      };\n\n      this.getVerifactuApp = function(fiscalAddressId) {\n        return this.getInstalledAppByFiscalAddress(INTEGRATION_APP_TYPE.VERIFACTU, fiscalAddressId);\n      };\n\n      this.hasFiscalProfile = function() {\n        return !!this.fiscal_profile;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return Company;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.changelog', [])\n    .factory('Changelog', _Changelog);\n\n  /** @ngInject */\n  function _Changelog() {\n\n    function Changelog(value) {\n      this.id = value ? value.id : null;\n      this.build = value ? value.build : null;\n      this.minor = value ? value.minor : null;\n      this.major = value ? value.major : null;\n      this.number = value ? value.number : null;\n      this.released_at = value && value.released_at ? new Date(value.released_at) : null;\n\n      this.new_features = value ? value.new_features : null;\n      this.improved_features = value ? value.improved_features : null;\n      this.fixed_features = value ? value.fixed_features : null;\n      this.removed_features = value ? value.removed_features : null;\n    }\n\n    return Changelog;\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.basic-retail-kpi', [])\n    .factory('BasicRetailKpi', _BasicRetailKpi);\n\n  /** @ngInject */\n  function _BasicRetailKpi() {\n\n    function BasicRetailKpi(value) {\n      this.date = value && value.date ? new Date(value.date) : null;\n      this.day = value ? value.day : null;\n      this.week_day = value ? value.week_day : null;\n      this.week = value ? value.week : null;\n      this.month = value ? value.month : null;\n      this.year = value ? value.year : null;\n\n      // this.gross_sales_actual = value ? value.gross_sales_actual : 0;\n      this.net_sales_actual = value ? value.net_sales_actual : 0;\n      this.net_sales_last_year = value ? value.net_sales_last_year : 0;\n\n      this.gross_sales_actual = value ? value.gross_sales_actual : 0;\n      this.gross_sales_plan = value ? value.gross_sales_plan : 0;\n      this.gross_sales_percentage_to_plan = value ? value.gross_sales_percentage_to_plan : 0;\n      this.gross_sales_last_year = value ? value.gross_sales_last_year : 0;\n      this.gross_sales_percentage_last_year = value ? value.gross_sales_percentage_last_year : 0;\n\n      this.gross_sale_per_transaction = value ? value.gross_sale_per_transaction : 0;\n      this.gross_profit_margin_per_transaction = value ? value.gross_profit_margin_per_transaction : 0;\n\n      this.returns = value ? value.returns : 0;\n      this.net_returns = value ? value.net_returns : 0;\n      this.units_returned = value ? value.units_returned : 0;\n      this.units_returned_cost = value ? value.units_returned_cost : 0;\n      this.units_sold = value ? value.units_sold : 0;\n      this.units_sold_cost = value ? value.units_sold_cost : 0;\n      this.transactions = value ? value.transactions : 0;\n\n      this.units_per_transaction = value ? value.units_per_transaction : 0;\n      this.average_unit_retail = value ? value.average_unit_retail : 0;\n      this.average_unit_cost = value ? value.average_unit_cost : 0;\n      this.units_sold_with_cost = value ? value.units_sold_with_cost : 0;\n\n      this.traffic = value ? value.traffic : 0;\n      this.conversion = value ? value.conversion : 0;\n\n      this.units_sold_cost = value ? value.units_sold_cost : 0;\n      this.gross_profit_margin = value ? value.gross_profit_margin : 0;\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return BasicRetailKpi;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.b2b-ecommerce', [])\n    .factory('B2BEcommerce', _B2BEcommerce);\n\n  /** @ngInject */\n  function _B2BEcommerce(B2B_ECOMMECE_MENU_TYPES) {\n\n    function B2BEcommerce(value) {\n      this.id = value ? value.id : null;\n      this.slug = value ? value.slug : null;\n      this.domain = value ? value.domain : null;\n      this.warehouse = value ? value.warehouse : null;\n      this.warehouses = value ? value.warehouses : null;\n      // this.season = value ? value.season : null;\n      this.pricing_tier = value ? value.pricing_tier : null;\n      this.menu_type = value ? value.menu_type : B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_CATEGORIES;\n      this.selected_categories = value ? value.selected_categories : [];\n      this.selected_collections = value ? value.selected_collections : [];\n      this.selected_seasons = value ? value.selected_seasons : [];\n      this.show_menu_option_all = value ? value.show_menu_option_all : false;\n      this.show_menu_option_new_in = value ? value.show_menu_option_new_in : false;\n      this.login_required = value ? value.login_required : false;\n\n      this.email = value ? value.email : null;\n      this.phone = value ? value.phone : null;\n      this.twitter_link = value ? value.twitter_link : null;\n      this.facebook_link = value ? value.facebook_link : null;\n      this.instagram_link = value ? value.instagram_link : null;\n      this.youtube_link = value ? value.youtube_link : null;\n\n      this.filter_by_category = value ? value.filter_by_category : false;\n      this.filter_by_subcategory = value ? value.filter_by_subcategory : false;\n      this.filter_by_season = value ? value.filter_by_season : false;\n      this.filter_by_collection = value ? value.filter_by_collection : false;\n      this.filter_by_color = value ? value.filter_by_color : false;\n      this.filter_by_size = value ? value.filter_by_size : false;\n      this.filter_by_weight = value ? value.filter_by_weight : false;\n      this.filter_by_brand = value ? value.filter_by_brand : false;\n      this.filter_by_price = value ? value.filter_by_price : false;\n      this.filter_by_attributes = value ? value.filter_by_attributes : false;\n      this.filter_by_stock = value ? value.filter_by_stock : false;\n\n      this.allocate_orders = value ? value.allocate_orders : false;\n      this.show_stock = value ? value.show_stock : false;\n      this.show_attributes = value ? value.show_attributes : false;\n      this.show_retail_prices = value ? value.show_retail_prices : false;\n      this.show_products_without_stock = value ? value.show_products_without_stock : false;\n      this.crop_product_images = value ? value.crop_product_images : false;\n      this.infinite_scroll = value ? value.infinite_scroll : false;\n      this.quick_add_products = value ? value.quick_add_products : false;\n      this.show_color_images_in_product_list = value ? value.show_color_images_in_product_list : false;\n\n      this.display_lead_times_out_of_stock = value ? value.display_lead_times_out_of_stock : false;\n      this.display_lead_times_on_backorder = value ? value.display_lead_times_on_backorder : false;\n      this.global_lead_time_prefix = value ? value.global_lead_time_prefix : false;\n      this.global_lead_time = value ? value.global_lead_time : false;\n      this.global_lead_time_units = value ? value.global_lead_time_units : false;\n\n      // Methods\n      this.getFullUrl = function () {\n        var tempDomain = this.slug ? this.slug : '______';\n        return 'https://<strong>' + tempDomain + '</strong>.b2b.stockagile.com';\n      };\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return B2BEcommerce;\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.models.attribute', [])\n    .factory('Attribute', _Attribute);\n\n  /** @ngInject */\n  function _Attribute(){\n\n    function Attribute(value) {\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.company = value ? value.company : null;\n      this.attribute_category = value ? value.attribute_category : null;\n    }\n\n\n    /**\n     * Return the constructor function\n     */\n    return Attribute;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.attribute-category', [])\n    .factory('AttributeCategory', _AttributeCategory);\n\n  /** @ngInject */\n  function _AttributeCategory(ATTRIBUTE_CATEGORY_TYPES) {\n\n    function AttributeCategory(value) {\n      this.id = value ? value.id : null;\n      this.name = value ? value.name : null;\n      this.company = value ? value.company : null;\n      this.type = value ? value.type : null;\n      this.attributes = value && value.attributes ? value.attributes : [];\n\n      this.isSingleAttribute = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.SINGLE_ATTRIBUTE;\n      };\n\n      this.isMultipleAttribute = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.MULTIPLE_ATTRIBUTES;\n      };\n\n      this.isText = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.TEXT;\n      };\n\n      this.isHtmlText = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.HTML_TEXT;\n      };\n\n      this.isJson = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.JSON;\n      };\n\n      this.isInt = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.INT;\n      };\n\n      this.isDecimal = function() {\n        return this.type === ATTRIBUTE_CATEGORY_TYPES.DECIMAL;\n      };\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return AttributeCategory;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.models.attribute-category-value', [])\n    .factory('AttributeCategoryValue', _AttributeCategoryValue);\n\n  /** @ngInject */\n  function _AttributeCategoryValue(Attribute, AttributeCategory) {\n\n    function AttributeCategoryValue(value) {\n      this.id = value ? value.id : null;\n      this.product = value ? value.product : null;\n      this.attributecategory = value ? value.attributecategory : null;\n      this.attributecategory_instance = value && value.attributecategory_instance ?\n        new AttributeCategory(value.attributecategory_instance) : null;\n      this.attributes = value ? value.attributes : [];\n      this.attribute_instances = [];\n      this.value = '';\n\n      // UI properties\n      this.singleAttributeInstance = null;\n      this.multipleAttributeInstances = [];\n\n      if (value.attribute_instances) {\n        for (var i = 0; i < value.attribute_instances.length; i++) {\n          this.attribute_instances.push(new Attribute(value.attribute_instances[i]));\n        }\n        if(this.attributecategory_instance.isSingleAttribute() && value.attribute_instances.length ){\n          this.singleAttributeInstance = this.attribute_instances[0];\n        } else if (this.attributecategory_instance.isMultipleAttribute()  && value.attribute_instances.length ){\n          this.multipleAttributeInstances = this.attribute_instances;\n        }\n      }\n\n      // Public methods\n      this.isSingleAttribute = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isSingleAttribute();\n        }\n        return false;\n      };\n\n      this.isMultipleAttribute = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isMultipleAttribute();\n        }\n        return false;\n      };\n\n      this.isText = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isText();\n        }\n        return false;\n      };\n\n      this.isHtmlText = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isHtmlText();\n        }\n        return false;\n      };\n\n      this.isJson = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isJson();\n        }\n        return false;\n      };\n\n      this.isInt = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isInt();\n        }\n        return false;\n      };\n\n      this.isDecimal = function() {\n        if(this.attributecategory_instance){\n          return this.attributecategory_instance.isDecimal();\n        }\n        return false;\n      };\n\n      this.value = value ? value.value : '';\n      if(this.value && this.isInt()){\n        this.value = parseInt(this.value);\n      } else if(this.value && this.isDecimal()){\n        this.value = parseFloat(this.value);\n      }\n    }\n\n    /**\n     * Return the constructor function\n     */\n    return AttributeCategoryValue;\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndWorkingActivityListController', ndWorkingActivityListController)\n    .directive('ndWorkingActivityList', ndWorkingActivityList);\n\n  /** @ngInject */\n  function ndWorkingActivityListController(\n    $scope,\n    WorkdayService,\n    Session,\n    WORKDAY_STATUSES\n  ) {\n    var vm = this;\n    $scope.WORKDAY_STATUSES = WORKDAY_STATUSES;\n    $scope.session = Session;\n\n    // Data\n    vm.date = new Date();\n    vm.workdayService = WorkdayService;\n\n    // Methods\n    vm.start = start;\n    vm.pause = pause;\n    vm.finish = finish;\n\n    // Functions\n    function start() {\n      vm.workdayService.start(window.angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function pause() {\n      vm.workdayService.pause(window.angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function finish() {\n      vm.workdayService.finish(window.angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n  }\n\n  /** @ngInject */\n  function ndWorkingActivityList() {\n    return {\n      restrict: 'E',\n      scope: {\n        banner: '='\n      },\n      controller: 'ndWorkingActivityListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/working-activity-list/nd-working-activity-list.html'\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndWorkingActivityCardController', ndWorkingActivityCardController)\n    .directive('ndWorkingActivityCard', ndWorkingActivityCard);\n\n  /** @ngInject */\n  function ndWorkingActivityCardController() {\n    var vm = this;\n\n  }\n\n  /** @ngInject */\n  function ndWorkingActivityCard() {\n    return {\n      restrict: 'E',\n      replace: false,\n      scope: {\n        banner: '='\n      },\n      controller: 'ndWorkingActivityCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/working-activity-card/nd-working-activity-card.html',\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndUserPicture', ndUserPicture);\n\n  /** @ngInject */\n  function ndUserPicture() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/user-picture/nd-user-picture.html',\n      scope: {\n        user: '=?',\n        fullname: '=?'\n      },\n      controller: ['$scope', function ($scope) {\n\n        // $scope.user = $scope.user || {first_name: ' ', last_name: ' '};\n        // Material colors 500's\n        $scope.backgrounds = ['E91E63', '8852A0', '673AB7', '3F51B5', '4A5ff0', '4A5ff0', '00BCD4', '009688', '00bb80', 'CDDC39', 'F1AF2F', 'FFC107', 'FF9800', 'FF5722', '795548'];\n        $scope.foregrounds = ['FFFFFF', 'FFFFFF', 'FFFFFF', 'FFFFFF', '000000', '000000', '000000', 'FFFFFF', 'FFFFFF', 'OOOOOO', 'OOOOOO', 'OOOOOO', 'OOOOOO', 'OOOOOO', 'FFFFFF'];\n\n        $scope.getCapitals = getCapitals;\n        $scope.getBackgroundColor = getBackgroundColor;\n        $scope.getForegroundColor = getForegroundColor;\n\n        function getHash() {\n          if(!$scope.user && !$scope.fullname){\n            return;\n          }\n          var fullname = $scope.user ? $scope.user.first_name + $scope.user.last_name : $scope.fullname.replace(' ', '');\n          var result = 0;\n\n          for (var i = 0; i < fullname.length; ++i) {\n            result += fullname.charCodeAt(i);\n          }\n\n          return result % $scope.backgrounds.length;\n        }\n\n        function getBackgroundColor() {\n          var hash = getHash();\n          if (hash) {\n            return $scope.backgrounds[getHash()];\n          }\n          return 'FAFAFA';\n        }\n\n        function getForegroundColor() {\n          var hash = getHash();\n          if (hash) {\n            return $scope.foregrounds[getHash()];\n          }\n        }\n\n        function getCapitals() {\n          if ($scope.user) {\n            var first = $scope.user.first_name ? $scope.user.first_name[0].toLocaleUpperCase() : '';\n            var last = $scope.user.last_name ? $scope.user.last_name[0].toLocaleUpperCase() : '';\n            return first + last;\n          }\n          if ($scope.fullname) {\n            if ($scope.fullname.split(' ').length === 1 || $scope.fullname.split(' ')[1][0] === '') {\n              return $scope.fullname.split(' ')[0][0].toLocaleUpperCase();\n            }\n            return $scope.fullname.split(' ')[0][0].toLocaleUpperCase() + $scope.fullname.split(' ')[1][0].toLocaleUpperCase();\n          }\n          return '';\n        }\n      }]\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndUserAvatar', ndUserAvatar);\n\n  /** @ngInject */\n  function ndUserAvatar() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/user-avatar/nd-user-avatar.html',\n      scope:{\n        user: '=?',\n        fullname: '=?',\n        date: '=?',\n        defaultDate: '=?',\n        secondaryText: '=?',\n        isAi: '=?',\n        infoTooltip: '=?'\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndUserAutocompleteController', ndUserAutocompleteController)\n    .directive('ndUserAutocomplete', ndUserAutocomplete);\n\n  /** @ngInject */\n  function ndUserAutocomplete() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/user-autocomplete/nd-user-autocomplete.html',\n      scope: {\n        excludeMe: '=?',\n        userChanged: '&'\n      },\n      controller: 'ndUserAutocompleteController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndUserAutocompleteController(\n    $scope,\n    $rootScope,\n    api,\n    $q,\n    $filter,\n    Session,\n    SEARCH_MAX_LENGTH\n  ) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Methods\n    $scope.querySearch = querySearch;\n    $scope.selectItem = selectItem;\n    $scope.displayFunction = displayFunction;\n    $scope.getPlaceholder = getPlaceholder;\n    $scope.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n\n    function getPlaceholder() {\n      return $filter('translate')('USERS.SEARCH_USER');\n    }\n\n    function querySearch() {\n\n      var deferred = $q.defer();\n      $scope.searchText = $scope.searchText.substring(0, $scope.SEARCH_MAX_LENGTH);\n\n      api.account.users.get(\n        {\n          search: $scope.searchText,\n          serializer: 'UserNameSerializer'\n        },\n        function(results) {\n          if (results.results) {\n            if ($scope.excludeMe) {\n              results.results = results.results.filter(function(user) {\n                return user.id !== Session.user.id;\n              });\n            }\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectItem(item) {\n      if (typeof item === 'object') {\n        $scope.userChanged({ seller: item });\n      }\n    }\n\n    function displayFunction(value) {\n      return value.name ? value.name : (value.first_name + ' ' + value.last_name);\n    }\n\n    function setNdBarcodeListenerEnabled(value) {\n      $rootScope.ndBarcodeListenerEnabled = value;\n    }\n  }\n})\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('UpgradeSubscriptionPlanBannerController', UpgradeSubscriptionPlanBannerController)\n    .directive('ndUpgradeSubscriptionPlanBanner', ndUpgradeSubscriptionPlanBanner);\n\n  /** @ngInject */\n  function UpgradeSubscriptionPlanBannerController(\n    $scope,\n    $state,\n    $translate,\n    $filter,\n    Session,\n    FeatureService\n  ) {\n    // Data\n    var vm = this;\n    vm.title = '';\n    vm.body = '';\n    vm.buttonBelow = !!$scope.buttonBelow;\n\n    // Methods\n    vm.upgradePlan = upgradePlan;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      $translate.onReady(function() {\n        vm.title = $filter('translate')($scope.title);\n        vm.body = $filter('translate')($scope.body);\n      });\n    }\n\n    function upgradePlan() {\n      var addOn = Session.getAddOn($scope.source);\n      $state.go('app.account.upgrade_plan', {\n        source: $scope.source,\n        addOnId: addOn ? addOn.id : null,\n        addOnCode: addOn ? addOn.code : null,\n        feature: FeatureService.getFeatureName($scope.source)\n      });\n\n      if ($scope.clickCallback) {\n        $scope.clickCallback();\n      }\n    }\n  }\n\n  /** @ngInject */\n  function ndUpgradeSubscriptionPlanBanner() {\n    return {\n      restrict: 'E',\n      scope: {\n        title: '=',\n        body: '=',\n        source: '=',\n        buttonBelow: '=?',\n        clickCallback: '&?'\n      },\n      controller: 'UpgradeSubscriptionPlanBannerController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/upgrade-subscription-plan-banner/nd-upgrade-subscription-plan-banner.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTrialStatusController', ndTrialStatusController)\n    .directive('ndTrialStatus', ndTrialStatus);\n\n  /** @ngInject */\n  function ndTrialStatus() {\n    return {\n      replace: false,\n      restrict: 'E',\n      templateUrl: 'app/directives/trial-status/nd-trial-status.html',\n      controller: 'ndTrialStatusController as vm'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndTrialStatusController($filter,\n                                   $location,\n                                   Session,\n                                   TRIAL_CONTACT) {\n    // Data\n    var vm = this;\n    vm.trialDays = Session.company.trial_period_days;\n    vm.trialRemainingDays = Session.company.trial_remaining_days;\n    vm.emailHref = '';\n\n    // Methods\n    vm.getColor = getColor;\n    vm.sendEmail = sendEmail;\n    initialize();\n\n    // Functions\n    function initialize() {\n      if (!Session.showFreemiumBanner()) {\n        $location.path('/');\n        return;\n      }\n\n      vm.trialPercentage = vm.trialRemainingDays / vm.trialDays * 100;\n    }\n\n    function getColor() {\n      if (vm.trialRemainingDays === 1) {\n        return 'red';\n      }\n      var trialPercentage = vm.trialRemainingDays / vm.trialDays;\n      if (trialPercentage <= 0.5) {\n        return 'orange';\n      }\n      return 'green';\n    }\n\n    function sendEmail() {\n      var subject = $filter('translate')('TRIAL_EXPIRED.SEND_AN_EMAIL_SUBJECT');\n      var body = $filter('translate')('TRIAL_EXPIRED.SEND_AN_EMAIL_BODY', {\n        company: Session.company.name,\n        user: Session.user.email\n      });\n      body = body.replace('<br>', '\\r');\n      vm.emailHref = 'mailto:' + TRIAL_CONTACT.MAILTO;\n      vm.emailHref += '?subject=' + subject;\n      vm.emailHref += '&body=' + body;\n      window.open(vm.emailHref);\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndTrackType', ndTrackType);\n\n  /** @ngInject */\n  function ndTrackType(TrackerService, $state) {\n    return {\n      restrict: 'A',\n      scope: true,\n      link: function (scope, element, attrs) {\n        var trackId = attrs.ndTrackType;\n        var typed = false;\n\n        function onKeyDown(event) {\n          typed = true;\n        }\n\n        function trackEvent(event) {\n          if (event.target.value && typed) {\n            TrackerService.track($state.current.name, {\n              type: trackId\n            });\n          }\n        }\n\n        element.on('keydown', onKeyDown);\n        element.on('focusout', trackEvent);\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndTrackClick', ndTrackClick);\n\n  /** @ngInject */\n  function ndTrackClick(TrackerService, $state) {\n    return {\n      restrict: 'A',\n      scope: true,\n      link: function (scope, element, attrs) {\n        var trackId = attrs.ndTrackClick;\n\n        function trackClick(event) {\n          var eventName = $state.current.name;\n          TrackerService.track(eventName, {\n            click: trackId\n          });\n        }\n\n        element.on('click', trackClick);\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndStartBannerController', ndStartBannerController)\n    .directive('ndStartBanner', ndStartBanner);\n\n  /** @ngInject */\n  function ndStartBannerController($scope, $translate, $mdMedia, $sce) {\n    var vm = this;\n\n    // Data\n    vm.banner = $scope.banner;\n\n    // Methods\n    vm.getStyle = getStyle;\n    vm.getTitle = getTitle;\n    vm.getBody = getBody;\n    vm.getButton = getButton;\n\n    // Functions\n    function getStyle() {\n      if ($mdMedia('xs') || $mdMedia('sm')) {\n        return;\n      }\n\n      if (vm.banner.image_background) {\n        return {\n          'background-image': 'url(' + vm.banner.image_background + ')'\n        };\n      }\n    }\n\n    function getTitle() {\n      return vm.banner.title[$translate.use()];\n    }\n\n    function getBody() {\n      return $sce.trustAsHtml(vm.banner.body[$translate.use()]);\n    }\n\n    function getButton() {\n      return vm.banner.button[$translate.use()];\n    }\n  }\n\n  /** @ngInject */\n  function ndStartBanner() {\n    return {\n      restrict: 'E',\n      replace: false,\n      scope: {\n        banner: '='\n      },\n      controller: 'ndStartBannerController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/start-banner/nd-start-banner.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSignupWizardController', ndSignupWizardController)\n    .directive('ndSignupWizard', ndSignupWizard);\n\n  /** @ngInject */\n  function ndSignupWizardController(COUNTRIES_DICT,\n                                    COMPANY_SECTORS,\n                                    HTTP_STATUS,\n                                    ERROR_CODES,\n                                    SEARCH_MAX_LENGTH,\n                                    $scope,\n                                    $location,\n                                    $cookies,\n                                    $document,\n                                    $translate,\n                                    $filter,\n                                    api) {\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // data\n\n    vm.countries = [];\n    vm.sectors = [];\n    vm.countrySearch = '';\n    vm.sectorSearch = '';\n    vm.checking = false;\n    vm.creating = false;\n    vm.isUserDataValidated = false;\n    vm.isCompanyDataValidated = true;\n    vm.emailSent = false;\n    vm.emailError = false;\n    vm.forms = {};\n    vm.finalUserContract = 'https://stockagile.com/contrato-electronico-licencia-usuario-final/';\n    vm.availableSortedSectors = [\n      COMPANY_SECTORS.FASHION_AND_ACCESSORIES, COMPANY_SECTORS.FOOT_WEAR, COMPANY_SECTORS.LUXURY_GOODS_AND_JEWELRY, COMPANY_SECTORS.CHILDCARE, COMPANY_SECTORS.LINGERIE, COMPANY_SECTORS.LUGGAGE_AND_TRAVEL_ACCESSORIES, COMPANY_SECTORS.SPORTS, COMPANY_SECTORS.TOYS, COMPANY_SECTORS.COSMETICS, COMPANY_SECTORS.PERSONAL_CARE, COMPANY_SECTORS.HEALTH_WELLNESS_AND_FITNESS, COMPANY_SECTORS.PHARMACY_AND_HERBALISTS, COMPANY_SECTORS.HOME, COMPANY_SECTORS.FURNITURE, COMPANY_SECTORS.LIGHTING, COMPANY_SECTORS.KITCHENWARE, COMPANY_SECTORS.GARDENING, COMPANY_SECTORS.GLASS_CERAMICS_AND_CONCRETE, COMPANY_SECTORS.FLOWERS, COMPANY_SECTORS.MUSIC, COMPANY_SECTORS.PHOTOGRAPHY, COMPANY_SECTORS.OFFICE_SUPPLIES_AND_STATIONERY, COMPANY_SECTORS.LIBRARIES, COMPANY_SECTORS.ARTS_AND_CRAFTS, COMPANY_SECTORS.PETS, COMPANY_SECTORS.CONSUMER_ELECTRONICS, COMPANY_SECTORS.COMPUTER_GAMES, COMPANY_SECTORS.COMPUTER_HARDWARE, COMPANY_SECTORS.MEDICAL_DEVICES, COMPANY_SECTORS.MACHINERY, COMPANY_SECTORS.HARDWARE, COMPANY_SECTORS.SUPERMARKETS, COMPANY_SECTORS.FOOD_AND_BEVERAGES, COMPANY_SECTORS.WINE_AND_SPIRITS, COMPANY_SECTORS.UTILITIES, COMPANY_SECTORS.OTHER\n    ];\n\n\n    //vm.availableSortedSectors = vm.availableSortedSectors.concat([\n    //  COMPANY_SECTORS.ALTERNATIVE_MEDICINE, COMPANY_SECTORS.ARTS_AND_CRAFTS, COMPANY_SECTORS.AUTOMOTIVE, COMPANY_SECTORS.BUILDING_MATERIALS, COMPANY_SECTORS.BUSINESS_SUPPLIES_AND_EQUIPMENT, COMPANY_SECTORS.CHEMICALS, COMPANY_SECTORS.COMPUTER_AND_NETWORK_SECURITY, COMPANY_SECTORS.COMPUTER_HARDWARE, COMPANY_SECTORS.COMPUTER_SOFTWARE, COMPANY_SECTORS.CONSTRUCTION, COMPANY_SECTORS.CONSUMER_ELECTRONICS, COMPANY_SECTORS.DESIGN, COMPANY_SECTORS.ELECTRICAL_ELECTRONIC_MANUFACTURING, COMPANY_SECTORS.FACILITIES_SERVICES, COMPANY_SECTORS.FINE_ART, COMPANY_SECTORS.FOOD_PRODUCTION, COMPANY_SECTORS.FURNITURE, COMPANY_SECTORS.HEALTH_WELLNESS_AND_FITNESS, COMPANY_SECTORS.IMPORT_AND_EXPORT, COMPANY_SECTORS.INFORMATION_TECHNOLOGY_AND_SERVICES, COMPANY_SECTORS.INTERNATIONAL_TRADE_AND_DEVELOPMENT, COMPANY_SECTORS.LIBRARIES, COMPANY_SECTORS.LOGISTICS_AND_SUPPLY_CHAIN, COMPANY_SECTORS.MACHINERY, COMPANY_SECTORS.MEDIA_PRODUCTION, COMPANY_SECTORS.MEDICAL_DEVICES, COMPANY_SECTORS.MOTION_PICTURES_AND_FILM, COMPANY_SECTORS.MUSIC, COMPANY_SECTORS.NON_PROFIT_ORGANIZATION_MANAGEMENT, COMPANY_SECTORS.ONLINE_MEDIA, COMPANY_SECTORS.PACKAGING_AND_CONTAINERS, COMPANY_SECTORS.PHOTOGRAPHY, COMPANY_SECTORS.REAL_ESTATE, COMPANY_SECTORS.RESTAURANTS, COMPANY_SECTORS.TEXTILES, COMPANY_SECTORS.TRAVEL, COMPANY_SECTORS.UTILITIES, COMPANY_SECTORS.WAREHOUSING, COMPANY_SECTORS.OTHER\n    //]);\n\n    vm.user = {\n      firstName: '',\n      lastName: '',\n      password: '',\n      repeatPassword: '',\n      terms_and_conditions_accepted: false\n    };\n    vm.contact = {\n      email: '',\n      phone: '',\n      country: 'ES'\n    };\n    vm.company = {\n      name: '',\n      //legalName: '',\n      //vat: '',\n      sector: null,\n      amount: null,\n      billing: null\n    };\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Español',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Català',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n\n    // functions\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.validateCurrentStep = validateCurrentStep;\n    vm.changeLanguage = changeLanguage;\n    vm.submit = submit;\n    vm.removeFormErrors = removeFormErrors;\n    vm.checkPasswordMismatch = checkPasswordMismatch;\n\n    initialize();\n\n    function initialize() {\n      changeLanguage(vm.languages.es);\n\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n\n      vm.countries = Object.keys(COUNTRIES_DICT).map(function (key) {\n        return {\n          code: key,\n          name: COUNTRIES_DICT[key]\n        }\n      });\n    }\n\n    function validateCurrentStep(step, callback) {\n      switch (step) {\n        case 1:\n          checkUserData(callback);\n          break;\n\n        case 2: // company data\n          // checkCompanyData(callback);\n          callback();\n          break;\n\n        default:\n          callback();\n      }\n    }\n\n    function checkUserData(callback) {\n      vm.checking = true;\n      api.signup.save({\n          option: 'check-user',\n          email: vm.contact.email,\n          phone: vm.contact.phone,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.isUserDataValidated = true;\n            callback();\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n            if (response.error === ERROR_CODES.ERROR_01001_USER_MAIL_ALREADY_EXISTS) {\n              vm.forms.wizardStep2.email.$setValidity(\"unique\", false);\n              vm.forms.wizardStep2.email.$setTouched();\n            } else if (response.error === ERROR_CODES.ERROR_01002_USER_PHONE_ALREADY_EXISTS) {\n              vm.forms.wizardStep2.phone.$setValidity(\"unique\", false);\n              vm.forms.wizardStep2.phone.$setTouched();\n            }\n            vm.isUserDataValidated = false;\n          } else {\n            vm.isUserDataValidated = false;\n            console.log(response)\n          }\n          vm.checking = false;\n        })\n    }\n\n    function checkCompanyData(callback) {\n      api.signup.save({\n          option: 'check-company',\n          company_legal_name: vm.company.legalName,\n          vat: vm.company.vat,\n        },\n        function (response, fn, status) {\n          vm.isCompanyDataValidated = status === HTTP_STATUS.HTTP_200_OK;\n          if (vm.isCompanyDataValidated) {\n            callback();\n          } else {\n            console.log(response)\n          }\n        })\n    }\n\n    function getFromCookieOrUrl(cookieName) {\n      var cookie = null;\n      if ($cookies.get('weburlparams')) {\n        cookie = JSON.parse($cookies.get('weburlparams'));\n      }\n\n      var value = null;\n      if (cookie && cookie[cookieName]) {\n        value = cookie[cookieName];\n      } else {\n        value = $location.search()[cookieName];\n      }\n      return typeof value == 'object' ? value[0] : value;\n    }\n\n    function submit(callback) {\n      vm.creating = true;\n\n      api.signup.save({\n          first_name: vm.user.firstName,\n          last_name: vm.user.lastName,\n          password: vm.user.password,\n          email: vm.contact.email,\n          phone: vm.contact.phone,\n          country: vm.contact.country,\n          company_name: vm.company.name,\n          sector: vm.company.sector,\n          number_of_warehouses: vm.company.amount,\n          annual_income: vm.company.billing,\n          lang: vm.lang.code,\n          terms_and_conditions_accepted: vm.user.terms_and_conditions_accepted,\n          meta: {\n            params: $cookies.get('weburlparams') || $location.search(),\n          },\n          hubspotutk: $cookies.get('hubspotutk'),\n          msclkid: getFromCookieOrUrl('msclkid'),\n          gclid: getFromCookieOrUrl('gclid'),\n          twclid: getFromCookieOrUrl('twclid'),\n          fbclid: getFromCookieOrUrl('fbclid'),\n          utm_source: getFromCookieOrUrl('utm_source'),\n          utm_medium: getFromCookieOrUrl('utm_medium'),\n          utm_campaign: getFromCookieOrUrl('utm_campaign'),\n          utm_content: getFromCookieOrUrl('utm_content'),\n          utm_term: getFromCookieOrUrl('utm_term'),\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.emailSent = true;\n            callback();\n          } else {\n            vm.emailError = true;\n          }\n          vm.creating = false;\n        });\n    }\n\n    function changeLanguage(lang) {\n      $translate.use(lang.code).then(function (data) {\n        // Update the array of sectors once the promise says that the language is changed\n        vm.sectors = vm.availableSortedSectors.map(function (key) {\n          return {\n            code: key,\n            name: $translate.instant('SECTORS.' + COMPANY_SECTORS[key]),\n          }\n        });\n      });\n      vm.lang = lang;\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function removeFormErrors(form, field, error) {\n      vm.forms[form][field].$setValidity(error, true);\n    }\n\n    function checkPasswordMismatch() {\n      if (vm.user.password !== vm.user.repeatPassword) {\n        vm.forms.wizardStep4.repeatPassword.$setValidity('mismatch', false);\n      } else {\n        vm.forms.wizardStep4.repeatPassword.$setValidity('mismatch', true);\n      }\n    }\n  }\n\n  /** @ngInject */\n  function ndSignupWizard() {\n    return {\n      restrict: 'E',\n      scope: {},\n      controller: 'ndSignupWizardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/signup-wizard/nd-signup-wizard.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSignupCreationFormController', ndSignupCreationFormController)\n    .directive('ndSignupCreationForm', ndSignupCreationForm);\n\n  /** @ngInject */\n  function ndSignupCreationFormController($scope,\n                                          $translate,\n                                          $document,\n                                          SignupTwo,\n                                          COUNTRIES_DICT,\n                                          COUNTRIES_PHONE_PREFIX_DICT,\n                                          $cookies,\n                                          api,\n                                          SEARCH_MAX_LENGTH,\n                                          HTTP_STATUS,\n                                          $location,\n                                          $mdToast,\n                                          $filter,\n                                          ERROR_CODES,\n                                          Utils) {\n    var vm = this;\n\n    // Cons\n    vm.TRIAL_DAYS = 14;\n    vm.TERMS_URL = 'https://stockagile.com/contrato-electronico-licencia-usuario-final/';\n    vm.PRIVACY_URL = 'https://stockagile.com/politica-de-privacidad/?';\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.ONLY_EMAIL_STEP = 0;\n    vm.ADDITIONAL_INFO_STEP = 1;\n    vm.SHOW_EMAIL_SENT_STEP = 2;\n\n    // Data\n    vm.signUp = $scope.signup;\n    vm.formVersion = String($scope.formVersion);\n    vm.countries = [];\n    vm.creationForm = {};\n    vm.showPassword = false;\n    vm.showEmailSent = false;\n    vm.sending = false;\n    vm.minimalSignupDone = false;\n    vm.step = getStepOrder()[0];\n\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Español',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Català',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n\n    vm.lang = vm.languages.es;\n\n    // Methods\n    vm.changeLanguage = changeLanguage;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.submitCreationForm = submitCreationForm;\n    vm.sendValidationEmail = sendValidationEmail;\n    vm.setValidityFalse = setValidityFalse;\n    vm.submitMinimalSignup = submitMinimalSignup;\n    vm.getStepOrder = getStepOrder;\n    vm.nextStep = nextStep;\n    vm.openGmail = openGmail;\n    vm.openOutlook = openOutlook;\n    vm.validateEmail = Utils.validateEmail;\n\n    // Init\n    initialize();\n\n    // Functions\n    function initialize() {\n      changeLanguage(vm.languages.es);\n\n      vm.countries = Object.keys(COUNTRIES_DICT).map(function (key) {\n        return {\n          code: key,\n          name: COUNTRIES_DICT[key],\n          prefix: COUNTRIES_PHONE_PREFIX_DICT[key]\n        };\n      });\n\n      if ($scope.email) {\n        vm.signUp.email = $scope.email;\n        if (Utils.validateEmail(vm.signUp.email)) {\n          vm.step = vm.ADDITIONAL_INFO_STEP;\n        }\n      }\n    }\n\n    function submitMinimalSignup() {\n      if (Utils.validateEmail(vm.signUp.email)) {\n        vm.creating = true;\n        vm.signUp.lang = vm.lang.code;\n        vm.signUp.fillMetaFields();\n\n        api.account.signupTwo.save(\n          vm.signUp,\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              vm.signUp.id = response.id;\n              vm.signUp.token = response.token;\n              vm.minimalSignupDone = true;\n            } else {\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                  .position('top right')\n                  .hideDelay(5000)\n              );\n            }\n            vm.creating = false;\n          }\n        );\n      }\n    }\n\n    function submitCreationForm() {\n      if (vm.creationForm.$valid) {\n        vm.creating = true;\n        vm.signUp.lang = vm.lang.code;\n        vm.signUp.fillName();\n        vm.signUp.fillPhone();\n        vm.signUp.fillMetaFields();\n\n        var apiFunc = vm.minimalSignupDone ? api.account.signupTwo.update : api.account.signupTwo.save;\n\n        apiFunc(\n          vm.signUp,\n          function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED || status === HTTP_STATUS.HTTP_200_OK) {\n              if (!vm.minimalSignupDone) {\n                vm.signUp.id = response.id;\n                vm.signUp.token = response.token;\n              }\n              sendValidationEmail();\n            } else {\n              if (response.message) {\n                response = $filter('translate')('SIGNUP.' + response.message);\n              } else {\n                response = $filter('translate')('GENERAL.ERROR_TOAST');\n              }\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent(response)\n                  .position('top right')\n                  .hideDelay(5000)\n              );\n            }\n            vm.creating = false;\n          });\n\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: 'sa-sign-up-step-1'\n        });\n      }\n    }\n\n    function sendValidationEmail() {\n      if (vm.signUp.token) {\n        vm.sending = true;\n        api.account.signupTwo.save({\n          querytoken: vm.signUp.token,\n          option: 'send-validation-email'\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.showEmailSent = true;\n            vm.step = vm.SHOW_EMAIL_SENT_STEP;\n          } else {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n                .hideDelay(5000)\n            );\n          }\n          vm.sending = false;\n        });\n      }\n    }\n\n    function changeLanguage(lang) {\n      $translate.use(lang.code);\n      vm.lang = lang;\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function setValidityFalse(formField) {\n      if(vm.creationForm[formField]){\n        vm.creationForm[formField].$setValidity('unique', true);\n      }\n    }\n\n    function openGmail() {\n      var url = 'https://mail.google.com/mail/u/0/#inbox';\n      window.open(url, '_blank');\n    }\n\n    function openOutlook() {\n      var url = 'https://outlook.live.com/mail/inbox';\n      window.open(url, '_blank');\n    }\n\n    function getStepOrder() {\n      if (vm.formVersion === '1') {\n        return [vm.ADDITIONAL_INFO_STEP, vm.SHOW_EMAIL_SENT_STEP];\n      }\n      else if (vm.formVersion === '2') {\n        return [vm.ONLY_EMAIL_STEP, vm.ADDITIONAL_INFO_STEP, vm.SHOW_EMAIL_SENT_STEP];\n      }\n      else {\n        return [vm.ADDITIONAL_INFO_STEP, vm.SHOW_EMAIL_SENT_STEP];\n      }\n    }\n\n    function nextStep() {\n      if (vm.step === vm.ONLY_EMAIL_STEP) {\n        if (!Utils.validateEmail(vm.signUp.email)) {\n          return;\n        }\n      }\n      var currentStepIndex = vm.getStepOrder().indexOf(vm.step);\n      if (currentStepIndex < vm.getStepOrder().length - 1) {\n        vm.step = vm.getStepOrder()[currentStepIndex + 1];\n      }\n    }\n  }\n\n  /** @ngInject */\n  function ndSignupCreationForm() {\n    return {\n      restrict: 'E',\n      scope: {\n        signup: '=?',\n        email: '=?',\n        formVersion: '=?'\n      },\n      controller: 'ndSignupCreationFormController',\n      controllerAs: 'vm',\n      templateUrl: function(element, attrs) {\n        var formVersion = attrs.formVersion || '1';\n        return 'app/directives/signup-creation-form/v' + formVersion + '/nd-signup-creation-form-v' + formVersion + '.html';\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSignupCompleteFormController', ndSignupCompleteFormController)\n    .directive('ndSignupCompleteForm', ndSignupCompleteForm);\n\n  /** @ngInject */\n  function ndSignupCompleteForm() {\n    return {\n      restrict: 'E',\n      scope: {\n        signup: '=?',\n        generationInProgress: '=?',\n        formVersion: '@?',\n        formDoneCallback: '=?'\n      },\n      controller: 'ndSignupCompleteFormController',\n      controllerAs: 'vm',\n      templateUrl: function (element, attrs) {\n        var formVersion = attrs.formVersion || '1';\n        return 'app/directives/signup-complete-form/v' + formVersion + '/nd-signup-complete-form-v' + formVersion + '.html';\n      }\n    };\n  }\n\n  /** @ngInject */\n  function ndSignupCompleteFormController($scope,\n                                          $translate,\n                                          $document,\n                                          SignupTwo,\n                                          $cookies,\n                                          $stateParams,\n                                          $interval,\n                                          $state,\n                                          $location,\n                                          $mdToast,\n                                          $filter,\n                                          api,\n                                          AuthService,\n                                          TrackerService,\n                                          SEARCH_MAX_LENGTH,\n                                          HTTP_STATUS,\n                                          COMPANY_SECTORS,\n                                          ERROR_CODES,\n                                          COUNTRIES_DICT,\n                                          COUNTRIES_PHONE_PREFIX_DICT,\n                                          SIGNUP_INTERESTED_IN,\n                                          $window,\n                                          $q,\n                                          Session) {\n    var vm = this;\n\n    // Cons\n    var STEP_1 = 1;\n    var STEP_2 = 2;\n    var STEP_3 = 3;\n    var STEP_4 = 4;\n    var STEP_5 = 5;\n    var TOTAL_STEPS = 5;\n    var PULLING_FREQUENCE = 5000; // milliseconds\n    var GENERATION_MESSAGE_FREQUENCY = 5000; // milliseconds\n    var GENERATION_BAR_FREQUENCY = 100; // milliseconds\n    var GENERATION_BAR_TIME = 120; // seconds\n    vm.ERROR_CODES = ERROR_CODES;\n    vm.COMPANY_SECTORS = COMPANY_SECTORS;\n    vm.SIGNUP_INTERESTED_IN = SIGNUP_INTERESTED_IN;\n\n    // Data\n    vm.signUp = $scope.signup;\n    vm.generationInProgress = $scope.generationInProgress;\n    vm.formVersion = $scope.formVersion;\n    vm.lang = $stateParams.lang || 'es';\n    vm.tempAuth = null;\n    vm.error = null;\n    vm.step = 0;\n    vm.progress = 0;\n    vm.completeForm = {};\n    vm.completeForm2 = {};\n    vm.completeForm3 = {};\n    vm.completeForm4 = {};\n    vm.generationProgress = 0;\n    vm.generationMessageIndex = 0;\n    vm.generationMessages = [\n      'SIGNUP.LOADING_INVENTORY_MODULE',\n      'SIGNUP.LOADING_WHOLESALE_MODULE',\n      'SIGNUP.LOADING_SHOPS_MODULE',\n      'SIGNUP.LOADING_ANALYTICS_MODULE',\n      'SIGNUP.LOADING_MANUFACTURE_MODULE',\n      'SIGNUP.LOADING_ECOMMERCE_MODULE',\n      'SIGNUP.LOADING_BILLING_MODULE',\n      'SIGNUP.LOADING_AMAZON_INTEGRATION',\n      'SIGNUP.LOADING_SHOPIFY_INTEGRATION',\n      'SIGNUP.LOADING_PRESTASHOP_INTEGRATION',\n      'SIGNUP.LOADING_WOOCOMMERCE_INTEGRATION',\n      'SIGNUP.LOADING_ZALANDO_INTEGRATION',\n    ];\n    vm.generationMessage = vm.generationMessages[vm.generationMessageIndex];\n    vm.sectors = [\n      COMPANY_SECTORS.FASHION_AND_ACCESSORIES, COMPANY_SECTORS.FOOT_WEAR, COMPANY_SECTORS.LUXURY_GOODS_AND_JEWELRY, COMPANY_SECTORS.CHILDCARE, COMPANY_SECTORS.LINGERIE, COMPANY_SECTORS.LUGGAGE_AND_TRAVEL_ACCESSORIES, COMPANY_SECTORS.SPORTS, COMPANY_SECTORS.TOYS, COMPANY_SECTORS.COSMETICS, COMPANY_SECTORS.PERSONAL_CARE, COMPANY_SECTORS.HEALTH_WELLNESS_AND_FITNESS, COMPANY_SECTORS.PHARMACY_AND_HERBALISTS, COMPANY_SECTORS.HOME, COMPANY_SECTORS.FURNITURE, COMPANY_SECTORS.LIGHTING, COMPANY_SECTORS.KITCHENWARE, COMPANY_SECTORS.GARDENING, COMPANY_SECTORS.GLASS_CERAMICS_AND_CONCRETE, COMPANY_SECTORS.FLOWERS, COMPANY_SECTORS.MUSIC, COMPANY_SECTORS.PHOTOGRAPHY, COMPANY_SECTORS.OFFICE_SUPPLIES_AND_STATIONERY, COMPANY_SECTORS.LIBRARIES, COMPANY_SECTORS.ARTS_AND_CRAFTS, COMPANY_SECTORS.PETS, COMPANY_SECTORS.CONSUMER_ELECTRONICS, COMPANY_SECTORS.COMPUTER_GAMES, COMPANY_SECTORS.COMPUTER_HARDWARE, COMPANY_SECTORS.MEDICAL_DEVICES, COMPANY_SECTORS.MACHINERY, COMPANY_SECTORS.HARDWARE, COMPANY_SECTORS.SUPERMARKETS, COMPANY_SECTORS.FOOD_AND_BEVERAGES, COMPANY_SECTORS.WINE_AND_SPIRITS, COMPANY_SECTORS.UTILITIES, COMPANY_SECTORS.OTHER\n    ];\n    vm.interestsIn = [\n      SIGNUP_INTERESTED_IN.INVENTORY_MANAGEMENT,\n      SIGNUP_INTERESTED_IN.REAL_TIME_SYNCHRONIZATION_WITH_ECOMMERCE_AND_MARKETPLACES,\n      SIGNUP_INTERESTED_IN.MANAGEMENT_OF_STORES_AND_POINTS_OF_SALE,\n      SIGNUP_INTERESTED_IN.WORK_IN_THE_CLOUD_AND_FROM_MULTIPLE_DEVICES,\n      SIGNUP_INTERESTED_IN.WHOLESALE_AND_B2B_STORE_MANAGEMENT,\n      SIGNUP_INTERESTED_IN.BILLING,\n      SIGNUP_INTERESTED_IN.ANALYTICS_AND_DASHBOARDS,\n      SIGNUP_INTERESTED_IN.CUSTOMER_LOYALTY,\n      SIGNUP_INTERESTED_IN.OTHER,\n    ];\n    vm.interestsInDict = {};\n    // TODO:\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Español',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Català',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n\n    // Methods\n    vm.getErrorTitle = getErrorTitle;\n    vm.getErrorClass = getErrorClass;\n    vm.changeLanguage = changeLanguage;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.onSelectorClose = onSelectorClose;\n    vm.setStep = setStep;\n    vm.generateData = generateData;\n    vm.nextButtonDisabled = nextButtonDisabled;\n    vm.bookDemo = bookDemo;\n    vm.startGenerationBarAndMessages = startGenerationBarAndMessages;\n    vm.sendValidationSMS = sendValidationSMS;\n    vm.formDoneCallback = $scope.formDoneCallback;\n\n    // Init\n    initialize();\n\n    // Functions\n    function initialize() {\n      setStep(STEP_1);\n      changeLanguage('es');\n      if (!vm.generationInProgress) {\n        changeLanguage(vm.signUp.lang);\n        initInterests();\n        for (var i = 1; i <= 3; i++) {\n          if (!isStepCompleted(i)) {\n            setStep(i);\n            break;\n          }\n        }\n        if (vm.step === 0) {\n          setStep(STEP_1);\n        }\n      } else {\n        setStep(STEP_5);\n        startPulling();\n      }\n\n      vm.countries = Object.keys(COUNTRIES_DICT).map(function (key) {\n        return {\n          code: key,\n          name: COUNTRIES_DICT[key],\n          prefix: COUNTRIES_PHONE_PREFIX_DICT[key]\n        };\n      });\n    }\n\n    function initInterests() {\n      vm.interestsIn.forEach(function (interestIn) {\n        vm.interestsInDict[interestIn] = {\n          name: 'SIGNUP.INTERESTED_IN_' + SIGNUP_INTERESTED_IN[interestIn],\n          selected: vm.signUp.interests.indexOf(interestIn) !== -1\n        }\n      });\n    }\n\n    function getErrorTitle() {\n      if (vm.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL || vm.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND) {\n        return 'SIGNUP.URL_NOT_VALID';\n      }\n      if (vm.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED) {\n        return 'SIGNUP.TOKEN_ALREADY_VALIDATED';\n      }\n      if (vm.error === ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS) {\n        return 'GENERAL.ERROR_TOAST';\n      }\n      /*if (vm.error === ERROR_CODES.ERROR_01010_DATA_GENERATION_IN_PROGRESS) {\n        return 'SIGNUP.THERE_IS_A_VALIDATION_IN_PROGRESS';\n      }*/\n      if (vm.error === ERROR_CODES.ERROR_01011_DATA_ALREADY_GENERATED) {\n        return 'GENERAL.ERROR_TOAST';\n      }\n      return ''\n    }\n\n    function getErrorClass() {\n      if (vm.error === ERROR_CODES.ERROR_01003_TOKEN_IS_NULL ||\n        vm.error === ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND ||\n        vm.error === ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED) {\n        return 'yellow';\n      }\n      return 'red';\n    }\n\n    function finalRedirect() {\n      if (Session.isAuthenticated()) {\n        $state.go('app.analytics.start');\n      } else {\n        $state.go('app.pages_auth_login-v3');\n      }\n    }\n\n    function submitForm(form) {\n      return $q(function (resolve, reject) {\n        if (form.$valid) {\n          vm.signUp.interests = vm.interestsIn.filter(function (interestIn) {\n            return vm.interestsInDict[interestIn].selected;\n          });\n\n          api.account.signupTwo.update(\n            vm.signUp,\n            function (response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                vm.signUp.finished = response.finished;\n                resolve();\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n                reject();\n              }\n            });\n        } else {\n          reject();\n        }\n      });\n    }\n\n    function generateData() {\n      if (vm.completeForm.$valid &&\n        vm.completeForm2.$valid &&\n        vm.completeForm3.$valid &&\n        vm.completeForm4.$valid &&\n        !vm.signUp.data_generated_at) {\n        vm.completing = true;\n\n        api.account.signupTwo.update(\n          {\n            id: vm.signUp.id,\n            option: 'generate-data'\n          },\n          function (response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              vm.tempAuth = response;\n              startPulling();\n            } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST) {\n              if (response.error === ERROR_CODES.ERROR_01010_DATA_GENERATION_IN_PROGRESS) {\n                startPulling();\n              } else if (response.error === ERROR_CODES.ERROR_01011_DATA_ALREADY_GENERATED) {\n                vm.completing = false;\n                vm.formDoneCallback();\n                finalRedirect();\n              }\n            } else {\n              vm.completing = false;\n              vm.formDoneCallback();\n              $mdToast.show(\n                $mdToast\n                  .simple()\n                  .textContent($filter('translate')('GENERAL.EMAIL_ERROR_MSG'))\n                  .position('top right')\n                  .hideDelay(3000)\n              );\n            }\n          }\n        );\n      }\n    }\n\n    function startPulling() {\n      vm.timeout = $interval(function () {\n        api.account.signupTwo.update({\n          id: vm.signUp.id,\n          option: 'check-generation'\n        }, function (result, callback, status) {\n          if (!result.generating_data) {\n            vm.generationInProgress = false;\n            vm.generationProgress = 100;\n            $interval.cancel(vm.timeout);\n            vm.formDoneCallback();\n            if (vm.tempAuth) {\n              AuthService.rememberPassword = true;\n              AuthService.postLogIn(vm.tempAuth);\n              $state.go('app.analytics.start');\n            } else {\n              $state.go('app.pages_auth_login-v3');\n            }\n          }\n        });\n      }, PULLING_FREQUENCE);\n    }\n\n    function changeLanguage(lang) {\n      $translate.use(lang);\n      vm.lang = lang;\n    }\n\n    function onSelectorOpen() {\n      // The md-select directive eats keydown events for some quick select\n      // logic. Since we have a search input here, we don't need that logic.\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function onSelectorClose(filter) {\n      // Clear the filter\n      filter = '';\n      // Unbind the input event\n      $document.find('md-select-header input[type=\"search\"]').unbind('keydown');\n    }\n\n    function setStep(newStep, submit) {\n      var updateProgress = function () {\n        if (vm.formVersion === '1') {\n          vm.progress = vm.step / TOTAL_STEPS * 100;\n        } else if (vm.formVersion === '2') {\n          vm.progress = vm.step / (TOTAL_STEPS - 1) * 100;\n        } else if (vm.formVersion === '3') {\n          vm.progress = vm.step / (TOTAL_STEPS - 1) * 100;\n        } else {\n          vm.progress = vm.step / TOTAL_STEPS * 100;\n        }\n      };\n\n      var updateStep = function (newStep) {\n        TrackerService.track($state.current.name, {\n          step: newStep\n        });\n\n        vm.step = newStep;\n        updateProgress();\n      };\n\n      if (submit) {\n        var form = null;\n        var submitSuccessCallback = function () {\n          updateStep(newStep);\n        };\n\n        if (newStep === STEP_2) {\n          validateSMSCode(vm.signUp.phoneValidationCode);\n        } else if (newStep === STEP_3) {\n          form = vm.completeForm2;\n        } else if (newStep === STEP_4) {\n          form = vm.completeForm3;\n        } else if (newStep === TOTAL_STEPS) {\n          form = vm.completeForm4;\n          submitSuccessCallback = function () {\n            if (!vm.signUp.data_generated_at) {\n              updateStep(newStep);\n              generateData();\n            } else {\n              vm.formDoneCallback();\n              finalRedirect();\n            }\n          };\n        }\n        if (form) {\n          submitForm(form).then(submitSuccessCallback);\n        }\n      } else {\n        updateStep(newStep);\n      }\n    }\n\n    function getCompleteForm2Valid() {\n      var fullValidation = vm.completeForm2.$valid &&\n        (vm.signUp.sells_products_without_expiration ||\n          vm.signUp.sells_products_with_expiration ||\n          vm.signUp.sells_products_with_lots ||\n          vm.signUp.sells_products_with_uid ||\n          vm.signUp.sells_services);\n\n      if (vm.formVersion === '1') {\n        return fullValidation;\n      } else if (vm.formVersion === '2') {\n        return vm.completeForm2.$valid;\n      }\n\n      return fullValidation;\n    }\n\n    function getCompleteForm3Valid() {\n      var fullValidation = vm.completeForm3.$valid &&\n        (vm.signUp.channel_online ||\n          vm.signUp.channel_physical_store ||\n          vm.signUp.channel_wholesale ||\n          vm.signUp.channel_manage_stock);\n\n      if (vm.formVersion === '1') {\n        return fullValidation;\n      } else if (vm.formVersion === '2') {\n        return vm.completeForm3.$valid;\n      }\n\n      return fullValidation;\n    }\n\n    function nextButtonDisabled() {\n      if (vm.step === 1) {\n        return !vm.signUp.phone || !vm.signUp.phoneValidationCode;\n      }\n      if (vm.step === 2) {\n        return !getCompleteForm2Valid();\n      }\n      if (vm.step === 3) {\n        return !getCompleteForm3Valid();\n      }\n      if (vm.step === 4) {\n        return !vm.completeForm4.$valid;\n      }\n      return false;\n    }\n\n    function startGenerationBarAndMessages() {\n      $interval(function () {\n        vm.generationMessageIndex += 1;\n        if (vm.generationMessageIndex >= vm.generationMessages.length) {\n          vm.generationMessageIndex = 0;\n        }\n        vm.generationMessage = vm.generationMessages[vm.generationMessageIndex];\n      }, GENERATION_MESSAGE_FREQUENCY, vm.generationMessages.length - 1);\n\n      vm.generationStartTime = new Date();\n      vm.generationBarInterval = $interval(function () {\n        var elapsedTime = new Date() - vm.generationStartTime;\n        vm.generationProgress = elapsedTime / (GENERATION_BAR_TIME * 1000) * 100;\n        if (vm.generationProgress >= 100) {\n          vm.generationProgress = 100;\n          $interval.cancel(vm.generationBarInterval);\n        }\n      }, GENERATION_BAR_FREQUENCY);\n    }\n\n    function bookDemo() {\n      $window.open('https://stockagile.com/solicitar-una-demo/', '_blank');\n    }\n\n    function channelAmountsSpecified() {\n      if (vm.signUp.channel_online && !vm.signUp.total_online_stores) {\n        return false;\n      }\n      if (vm.signUp.channel_physical_store && !vm.signUp.total_physical_stores) {\n        return false;\n      }\n      if (vm.signUp.channel_wholesale && !vm.signUp.total_commercial_agents) {\n        return false;\n      }\n      if (vm.signUp.channel_manage_stock && !vm.signUp.total_warehouses) {\n        return false;\n      }\n      return true;\n    }\n\n    function isStepCompleted(step) {\n      if (step === 1) {\n        var productTypeSelected = vm.signUp.sells_products_without_expiration ||\n          vm.signUp.sells_products_with_expiration ||\n          vm.signUp.sells_products_with_lots ||\n          vm.signUp.sells_products_with_uid ||\n          vm.signUp.sells_services;\n        return vm.signUp.company_name && productTypeSelected && vm.signUp.country;\n      } else if (step === 2) {\n        var channelSelected = vm.signUp.channel_online ||\n          vm.signUp.channel_physical_store ||\n          vm.signUp.channel_wholesale ||\n          vm.signUp.channel_manage_stock;\n        return vm.signUp.sector && channelSelected;\n      } else if (step === 3) {\n        return channelAmountsSpecified();\n      }\n      return true;\n    }\n\n    function sendValidationSMS() {\n      if (vm.signUp.phone) {\n        vm.sending = true;\n        api.account.signupTwo.save({\n          querytoken: vm.signUp.token,\n          phone: vm.signUp.phone,\n          option: 'send-validation-sms'\n        }, function (response, fn, status) {\n          vm.sending = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent($filter('translate')('SIGNUP.SMS_SENT'))\n                .position('top right')\n                .hideDelay(5000)\n            );\n          } else {\n            if (response.message) {\n              response = $filter('translate')('SIGNUP.' + response.message);\n            } else {\n              response = $filter('translate')('GENERAL.ERROR_TOAST');\n            }\n            $mdToast.show(\n              $mdToast\n                .simple()\n                .textContent(response)\n                .position('top right')\n                .hideDelay(5000)\n            );\n          }\n          vm.sending = false;\n        });\n      }\n    }\n\n    function validateSMSCode(code) {\n      if (vm.signUp.phone) {\n        vm.checking = true;\n        api.account.signupTwo.save({\n          querytoken: vm.signUp.token,\n          code: code,\n          option: 'validate-sms-code'\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.completeForm.phone_verification_code.$setValidity('wrongcode', true);\n            setStep(STEP_2);\n          } else {\n            vm.completeForm.phone_verification_code.$setValidity('wrongcode', false);\n          }\n          vm.checking = false;\n        });\n      }\n    }\n\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('SendEmailDialogController', SendEmailDialogController);\n\n  /** @ngInject */\n  function SendEmailDialogController($mdDialog,\n                                     $mdToast,\n                                     api,\n                                     InventoryConfigurationService,\n                                     document,\n                                     documentName,\n                                     documentType,\n                                     invoiceType,\n                                     ContactData,\n                                     HTTP_STATUS,\n                                     INVOICE_TYPES,\n                                     Utils,\n                                     $filter) {\n\n    var vm = this;\n    vm.INVOICE_TYPES = INVOICE_TYPES;\n    vm.emails = ContactData && ContactData.email ? [ContactData.email] : [];\n    vm.cc = [];\n    vm.bcc = [];\n    vm.documentName = documentName;\n    vm.documentType = documentType;\n    vm.subject = '';\n    vm.message = '';\n    vm.sending = false;\n    vm.invoiceType = invoiceType || INVOICE_TYPES.INVOICE;\n\n    // Functions\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.sendEmail = sendEmail;\n    vm.hasValidEmail = hasValidEmail;\n    vm.downloadDocument = downloadDocument;\n\n    initialize();\n\n    function initialize() {\n      InventoryConfigurationService.getEmailTemplate(vm.invoiceType, vm.documentName, ContactData)\n        .then(function(result) {\n          vm.subject = result.subject;\n          vm.message = result.message;\n        });\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    function sendEmail() {\n      vm.sending = true;\n      api.inventories.contacts.save(\n        {\n          id: ContactData.id,\n          emails: vm.emails,\n          cc: vm.cc,\n          bcc: vm.bcc,\n          subject: vm.subject,\n          message: vm.message,\n          option: 'send-email',\n          document_type: documentType,\n          document_id: document.id\n        },\n        function(response, fn, status) {\n          vm.sending = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            try {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.EMAIL_SENT')).position('top right'));\n            } catch (e) {\n            }\n            $mdDialog.hide();\n          } else {\n            try {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            } catch (e) {\n            }\n          }\n        },\n        function() {\n          vm.sending = false;\n        }\n      );\n    }\n\n    function hasValidEmail() {\n      if (!vm.sendEmail) {\n        return true;\n      }\n      if (vm.emails === null || vm.emails === '') {\n        return true;\n      }\n      var emails = [];\n\n      if (!vm.emails.includes(',')) {\n        emails.push(vm.emails);\n      } else {\n        emails = vm.emails.split(',');\n      }\n\n      for (var i = 0; i < emails.length; i++) {\n        var email = emails[i];\n        if (!Utils.validateEmail(email)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function downloadDocument() {\n      api.private.v2.accounting.invoices.print({\n        id: document.id\n      });\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ReplenishByWarehouseController', ReplenishByWarehouseController)\n    .directive('ndReplenishByWarehouse', ndReplenishByWarehouse);\n\n  /** @ngInject */\n  function ndReplenishByWarehouse() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/replenish-by-warehouse/nd-replenish-by-warehouse.html',\n      scope: {\n        performingAnalysis: '=?',\n        performAnalysis: '=?'\n      },\n      controller: 'ReplenishByWarehouseController',\n      controllerAs: 'vm'\n    };\n  }\n\n  /** @ngInject */\n  function ReplenishByWarehouseController(\n    $scope,\n    $filter,\n    $timeout,\n    Utils,\n    Session,\n    api,\n    UiGridService,\n    HTTP_STATUS,\n    $mdToast,\n    $mdDialog\n  ) {\n\n    var vm = this;\n    vm.scope = $scope;\n    vm.loading = $scope.loading;\n\n    var PULLING_DELAY_MS = 5000;\n\n    vm.company = Session.company;\n    vm.totalDraft = {};\n    vm.exporting = false;\n\n    // Grid Configuration\n    vm.columns = {};\n    vm.gridApi = null;\n    vm.uiGridInitialized = false;\n    vm.status = {\n      state: {},\n      ordering: '',\n      search: '',\n      filters: {\n        warehouses: [],\n        seasons: [],\n        brands: [],\n        categories: [],\n        subcategories: []\n      },\n      page: 1,\n      pageSize: UiGridService.DEFAULT_PAGE_SIZE\n    };\n\n    //Methods\n    vm.getGridPage = getGridPage;\n    vm.createReplenishmentDraft = createReplenishmentDraft;\n    vm.downloadCSV = downloadCSV;\n\n    vm.gridOptions = UiGridService.getGridOptions({\n      onRegisterApi: initializeGrid,\n      gridMenuCustomItems: [\n        {\n          title: $filter('translate')('PRODUCTS.RESTORE_COLUMNS'),\n          action: function ($event) {\n            restoreGridColumns();\n          },\n          order: 2\n        }\n      ],\n      useExternalPagination: true\n    });\n\n\n    function initializeGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function (changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.page = newPage;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridPage(false);\n        }\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridPage(false);\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function (colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      setGridColumns();\n\n      $timeout(function () {\n        getGridPage(true);\n      }, 200);\n    }\n\n    function saveStatus() {\n      vm.status.state = vm.gridApi.saveState.save();\n      localStorage.setItem(Session.company.id + '::UIGridReplenishByWarehouse', JSON.stringify(vm.status));\n    }\n\n    function getColumnStatusVisibility(field, defaultValue, avoidState) {\n      if (vm.status.state.columns) {\n        var column = vm.status.state.columns.find(function (column) {\n          return column.name === field;\n        });\n        if (!avoidState && column) {\n          return column.visible;\n        }\n      }\n      return defaultValue;\n    }\n\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      setGridColumns(true);\n      saveStatus();\n      getGridPage(false);\n    }\n\n    function setGridColumns(avoidState) {\n      var orderCellHtml =\n        '<md-button class=\"md-button md-primary\" ng-click=\"grid.appScope.vm.createReplenishmentDraft(row.entity.location_external_id)\">' +\n        '<div layout=\"row\" layout-align=\"center center\">' +\n        '<md-icon md-font-icon=\"icon-package-add-icon\" class=\"mr-5\" md-svg-src=\"assets/images/custom-material-design-icons/package-add.0bc557a5.svg\"></md-icon>' +\n        '<span translate=\"INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT\"></span>' +\n        '</md-button>';\n\n      angular.extend(vm.columns, {\n        name: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.NAME'),\n          field: 'location_name',\n          permission: true,\n          visible: getColumnStatusVisibility('location_name', true, avoidState),\n          cellClass: 'cell-padding',\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false\n        },\n        leadTime: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.LEAD_TIME'),\n          field: 'replenishment_lead_time',\n          permission: true,\n          visible: getColumnStatusVisibility('leadTime', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_lead_time | number: 0 }}</span>'\n        },\n        rotation: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.ROTATION'),\n          field: 'rotation',\n          permission: true,\n          visible: getColumnStatusVisibility('rotation', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.rotation | number: 0 }}</span>'\n        },\n        discontinuedStockValuePercentage: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.DISCONTINUED_STOCK_VALUE_PERCENTAGE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.DISCONTINUED_STOCK_VALUE_PERCENTAGE'),\n          field: 'discontinued_stock_value_percentage',\n          permission: true,\n          visible: getColumnStatusVisibility('discontinuedStockValuePercentage', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.discontinued_stock_value_percentage | number: 2 }}%</span>',\n          enableSorting: false\n        },\n        stockoutLosses: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.OOO_RISK'),\n          field: 'replenishment_stockout_losses',\n          permission: true,\n          visible: getColumnStatusVisibility('stockoutLosses', true, avoidState),\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ row.entity.replenishment_stockout_losses | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>' +\n            '<small class=\"text-right secondary-text\">' +\n            '{{\\'INVENTORY_DASHBOARD.UNTIL\\' | translate}} ' +\n            '{{row.entity.replenishment_stockout_losses_date | date: \\'dd/MM\\'}}' +\n            '</small></div>'\n        },\n        stock: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK'),\n          field: 'stock',\n          permission: true,\n          visible: getColumnStatusVisibility('stock', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock | number: 0}}</span>'\n        },\n        stockValue: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_VALUE'),\n          field: 'stock_value',\n          permission: true,\n          visible: getColumnStatusVisibility('stockValue', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{row.entity.stock_value | price}} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        stockToOrder: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER'),\n          field: 'replenishment_stock_to_order',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrder', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order | number: 0 }}</span>'\n        },\n        stockToOrderValue: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_VALUE'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.STOCK_TO_ORDER_VALUE'),\n          field: 'replenishment_stock_to_order_value',\n          permission: true,\n          visible: getColumnStatusVisibility('stockToOrderValue', true, avoidState),\n          cellClass: 'cell-right cell-padding',\n          cellTemplate: '<span>{{ row.entity.replenishment_stock_to_order_value | price }} {{grid.appScope.vm.company.currency | currencyCharacter}}</span>'\n        },\n        totalDraft: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.TOTAL_DRAFT'),\n          field: 'total_draft',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"column\" flex>' +\n            '<span class=\"text-right\">{{ grid.appScope.vm.totalDraft[row.entity.location_external_id][\"total\"]  }}</span>' +\n            '<a class=\"text-right reposition-link\" ng-if=\"grid.appScope.vm.totalDraft[row.entity.location_external_id][\\'transfer_order_autocode\\']\" target=\"_blank\" ng-href=\"/inventory/transfers/{{grid.appScope.vm.totalDraft[row.entity.location_external_id][\\'transfer_order_id\\']}}/products\">' +\n            '{{grid.appScope.vm.totalDraft[row.entity.location_external_id][\"transfer_order_autocode\"]}}' +\n            '<md-icon md-font-icon=\"icon-open-in-new\"></md-icon>' +\n            '</a></div>'\n        },\n        order: {\n          displayName: $filter('translate')('INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT'),\n          headerTooltip: $filter('translate')('INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT'),\n          field: 'order',\n          permission: true,\n          visible: getColumnStatusVisibility('order', true, avoidState),\n          cellTemplate: orderCellHtml,\n          editableCellTemplate: orderCellHtml,\n          enableSorting: false,\n          pinnedRight: true,\n          enablePinning: false,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          enableColumnMenu: false,\n        }\n      });\n\n      // Setting only the columns with permission to the grid\n      for (var key in vm.columns) {\n        if (vm.columns[key].permission) {\n          vm.gridOptions.columnDefs.push(vm.columns[key]);\n        }\n      }\n    }\n\n    function getGridPostBody() {\n      var d = {};\n\n      // Pagination\n      d.page = vm.status.page;\n      d.pageSize = vm.status.pageSize;\n\n      // Ordering\n      d.orderBy = vm.status.ordering;\n\n      // Search\n      d.search = vm.status.search;\n\n      // Columns\n      d.columns_names = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.displayName;\n        }\n      }).filter(Boolean);\n\n      d.columns_fields = Object.values(vm.columns).map(function (column) {\n        if (column.visible && column.field !== 'cover_thumbnail' && column.field !== 'total_draft' && column.field !== 'order') {\n          return column.field;\n        }\n      }).filter(Boolean);\n\n      return d;\n    }\n\n    var controller = new AbortController();\n\n    function getGridPage(performAnalysisIfEmpty, pullingIfEmpty) {\n      if (pullingIfEmpty === undefined) {\n        pullingIfEmpty = true;\n      }\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      vm.loading = true;\n\n      var url = api.urls.inventories.warehouses.replace(':id/', '').replace(':option', 'replenishment_report');\n\n      fetch(url, {\n        method: 'POST',\n        headers: {\n          'Authorization': 'Token ' + Session.token,\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(getGridPostBody()),\n        signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          vm.loading = false;\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n\n          vm.gridOptions.totalItems = data.recordsTotal;\n          if (performAnalysisIfEmpty && !data.data.length) {\n            $scope.performAnalysis();\n          }\n          if (data.data.length) {\n            vm.performingAnalysis = false;\n            vm.orderQuantities = {};\n            data.data.forEach(function (item) {\n              if (!vm.orderQuantities[item.item_external_id]) {\n                vm.orderQuantities[item.item_external_id] = {};\n              }\n              vm.orderQuantities[item.item_external_id][item.location_external_id] = item.replenishment_stock_to_order;\n            });\n            updateTotalDraft();\n            vm.gridApi.core.handleWindowResize(); // fix for grid not rendering correctly\n          }\n          $scope.$apply();\n          if (pullingIfEmpty && !data.data.length) {\n            $timeout(function () {\n              getGridPage(false, pullingIfEmpty);\n            }, PULLING_DELAY_MS);\n          }\n        })\n        .catch(function (error) {\n          throw error;\n        });\n    }\n\n    function createReplenishmentDraft(warehouse_id) {\n      api.inventories.warehouses.save({\n        id: warehouse_id,\n        option: 'create_replenishment_draft'\n      }, function (response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          updateTotalDraft();\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('INVENTORY_DASHBOARD.REPLENISHMENT_CREATED')).position('top right'));\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function updateTotalDraft() {\n      var warehouses = [];\n      vm.gridOptions.data.forEach(function (item) {\n        warehouses.push(item.location_external_id);\n      });\n      api.inventories.warehouses.save(\n        {\n          option: 'ai_replenishment_draft_orders_totals',\n          warehouse_ids: warehouses\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.totalDraft = response.data;\n          }\n        }\n      );\n    }\n\n    function downloadCSV() {\n      if (vm.exporting) {\n        return;\n      }\n      vm.exporting = true;\n\n      var url = api.urls.inventories.warehouses.replace('/:id', '').replace(':option', 'store-replenishments-by-warehouse-csv');\n      fetch(url + '?' + new URLSearchParams(getGridPostBody()), {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function (response) {\n          return response.json();\n        })\n        .then(function (data) {\n          if (data.success === true) {\n            $mdDialog.show(\n              $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('REPORTS.GENERATING_REPORT'))\n                .htmlContent($filter('translate')('REPORTS.GENERATING_REPORT_MESSAGE', {email: Session.user.email}))\n                .ok($filter('translate')('GENERAL.CLOSE'))\n            );\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.exporting = false;\n        });\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndRealCompanyBanner', ndRealCompanyBanner);\n\n  /** @ngInject */\n  function ndRealCompanyBanner() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/real-company-banner/nd-real-company-banner.html',\n      controller: ['$scope', '$window', '$mdToast', '$filter', '$mdDialog', 'api', 'Session', 'COMPANY_PLANS', 'HTTP_STATUS',\n        function(\n          $scope,\n          $window,\n          $mdToast,\n          $filter,\n          $mdDialog,\n          api,\n          Session,\n          COMPANY_PLANS,\n          HTTP_STATUS\n        ) {\n\n          $scope.showBanner = false;\n          $scope.npsHidden = false;\n          $scope.netPromoterScore = null;\n          $scope.npss = null;\n\n          if (Session.company) {\n            $scope.companyName = Session.company.name;\n            $scope.companyId = Session.company.id;\n            if (Session.user &&\n              Session.user.is_staff &&\n              Session.company.plan !== COMPANY_PLANS.DEMO &&\n              api.environment === 'production'\n            ) {\n              showBanner();\n            }\n          }\n\n          $scope.copyToClipboard = copyToClipboard;\n          $scope.openNpsMenu = openNpsMenu;\n          $scope.openNotes = openNotes;\n\n          function copyToClipboard(value) {\n            var body = angular.element($window.document.body);\n            var textarea = angular.element('<textarea/>');\n            textarea.css({ position: 'fixed', opacity: '0' });\n            textarea.val(value);\n            body.append(textarea);\n            textarea[0].select();\n            try {\n              var successful = document.execCommand('copy');\n              if (successful) {\n                $mdToast.show(\n                  $mdToast\n                    .simple()\n                    .textContent($filter('translate')('GENERAL.COPIED'))\n                    .position('top right')\n                    .hideDelay(500)\n                );\n              } else {\n                throw successful;\n              }\n            } catch (err) {\n            }\n            textarea.remove();\n          }\n\n          function showBanner() {\n            $scope.showBanner = true;\n            api.account.companyStatus.get({},\n              function(response, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  $scope.netPromoterScore = response.net_promoter_score;\n                }\n              });\n          }\n\n          function openNpsMenu(event) {\n            if ($scope.fetchingNpss || $scope.npss) {\n              return;\n            }\n\n            $scope.fetchingNpss = true;\n            api.account.netPromoterScores.list(\n              function(response, fn, status) {\n                $scope.fetchingNpss = false;\n                $scope.npss = response.results;\n              });\n          }\n\n          function openNotes(nps) {\n            var dialog = $mdDialog.alert()\n              .clickOutsideToClose(false)\n              .parent(angular.element(document.body))\n              .title($filter('personname')(nps.user))\n              .htmlContent(nps.notes)\n              .ok($filter('translate')('GENERAL.CLOSE'));\n\n            $mdDialog.show(dialog);\n          }\n        }]\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPrinterController', ndPrinterController)\n    .directive('ndPrinter', ndPrinter);\n\n  /** @ngInject */\n  function ndPrinterController($scope, $timeout, $rootScope, $document, $mdDialog, $mdToast, $mdMenu, $filter, $q,\n                               api, Session, HTTP_STATUS, ndPrinterUtilsService, Utils,\n                               CASH_MOVEMENT_TYPES, DefaultRegisterService, EpsonPrinterService,\n                               BARCODE_DESIGN_TYPES, Register, GiftCard, $http, FeatureFlagService,\n                               PRINTER_TYPES, PAGE_SIZES) {\n\n    var vm = this;\n    vm.ENCODING = 'Cp1252';\n\n    // Data\n    vm.printerType = null;\n    vm.eposdev = null;\n\n    vm.bufferPendingPrintings = [];\n\n    vm.defaultRegisterId = localStorage.getItem(Session.company.id + '::defaultRegister');\n    vm.registerPrinterName = localStorage.getItem(Session.company.id + '::registerPrinterName');\n    vm.registerPrinterIp = localStorage.getItem(Session.company.id + '::registerPrinterIp');\n    vm.listPrinters = [];\n    vm.qzConfiguration = null;\n    vm.alreadyLaunched = false;\n\n    vm.qzVersion = null;\n    vm.qzLibVersion = qz.version;\n    vm.defaultStartConfig = {\n      keepAlive: 3,\n      retries: 3,\n      delay: 1\n    };\n    vm.STATES = {\n      DISABLED: 'DISABLED',\n      WAITING: 'WAITING',\n      ACTIVE: 'ACTIVE',\n      CONNECTING_TO_PRINTER: 'CONNECTING_TO_PRINTER',\n      SETTING_DEFAULT_PRINTER: 'SETTING_DEFAULT_PRINTER',\n      SETTING_DEFAULT_REGISTER: 'SETTING_DEFAULT_REGISTER',\n      READY: 'READY',\n      READY_UPDATE_NEEDED: 'READY_UPDATE_NEEDED',\n\n      CLOSING: 'CLOSING',\n      CLOSED: 'CLOSED',\n      ERROR: 'ERROR'\n    };\n    vm.STATES_ICONS = {\n      DISABLED: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg',\n      },\n      WAITING: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-pause-outline.5aca2478.svg',\n      },\n      ACTIVE: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-check-outline.c196ab17.svg',\n      },\n      CONNECTING_TO_PRINTER: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-sync-outline.5075703e.svg',\n      },\n      SETTING_DEFAULT_PRINTER: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-sync-outline.5075703e.svg',\n      },\n      SETTING_DEFAULT_REGISTER: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-sync-outline.5075703e.svg',\n      },\n      READY: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-check-outline.c196ab17.svg',\n      },\n      READY_UPDATE_NEEDED: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-wrench-outline.2754b884.svg',\n      },\n      CLOSING: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg',\n      },\n      CLOSED: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg',\n      },\n      ERROR: {\n        svgIcon: 'assets/images/custom-material-design-icons/printer-pos-alert-outline.bf77100b.svg',\n      }\n    };\n    vm.PRINTER_TYPES = {\n      QZ: 'qz',\n      SYSTEM: 'system',\n      EPSON_IP: 'epson_ip'\n    };\n    vm.state = vm.STATES.DISABLED;\n\n    // Methods\n    vm.startConnection = startConnection;\n    vm.changeRegisterPrinter = changeRegisterPrinter;\n    vm.togglePrinterTypeQZ = togglePrinterTypeQZ;\n    vm.toggleSystemPrinterEnabled = toggleSystemPrinterEnabled;\n    vm.toggleEpsonPrinterEnabled = toggleEpsonPrinterEnabled;\n    vm.getWindowsDownloadUrl = getWindowsDownloadUrl;\n    vm.getMacDownloadUrl = getMacDownloadUrl;\n    vm.getLinuxDownloadUrl = getLinuxDownloadUrl;\n    vm.isPrinterTypeQZ = isPrinterTypeQZ;\n    vm.isPrinterTypeSystem = isPrinterTypeSystem;\n    vm.isPrinterTypeEpsonIp = isPrinterTypeEpsonIp;\n    vm.getDefaultPrinterIp = getDefaultPrinterIp;\n    vm.openEpsonPrinterDialog = EpsonPrinterService.openPrinterDialog;\n    vm.getVariantIdentifier = ndPrinterUtilsService.getVariantIdentifier;\n    vm.showVariantIdentifier = ndPrinterUtilsService.showVariantIdentifier;\n    vm.getProductIdentifier = ndPrinterUtilsService.getProductIdentifier;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      initializePrinterType();\n      startPrinterConnection();\n\n      // Event listeners\n      vm.printSendcloudTagEvent = $rootScope.$on('ndPrinter::printSendcloudLabel', printSendcloudLabel);\n      vm.printPosOrderEvent = $rootScope.$on('ndPrinter::printPosOrder', printPosOrder);\n      vm.warmUpConnectionEvent = $rootScope.$on('ndPrinter::warmUpConnection', warmUpConnection);\n      vm.printWidthDiscover = $rootScope.$on('ndPrinter::printWidthDiscover', printWidthDiscover);\n      vm.printDevolutionCardEvent = $rootScope.$on('ndPrinter::printDevolutionCard', printDevolutionCard);\n      vm.printGiftCardEvent = $rootScope.$on('ndPrinter::printGiftCard', printGiftCard);\n      vm.openCashDrawerEvent = $rootScope.$on('ndPrinter::openCashDrawer', openCashDrawer);\n      vm.printRegisterActivitySummaryEvent = $rootScope.$on('ndPrinter::printRegisterActivitySummary', printRegisterActivitySummary);\n      vm.printRegisterActivitySoldProductsSummaryEvent = $rootScope.$on('ndPrinter::printRegisterActivitySoldProductsSummary', printRegisterActivitySoldProductsSummary);\n      vm.printerStateChangedEvent = $rootScope.$on('ndPrinter::setState', handleEmitStateEvent);\n      // Unregister Events\n      $scope.$on('$destroy', function () {\n        vm.printSendcloudTagEvent();\n        vm.printPosOrderEvent();\n        vm.warmUpConnectionEvent();\n        vm.printWidthDiscover();\n        vm.printDevolutionCardEvent();\n        vm.openCashDrawerEvent();\n        vm.printRegisterActivitySummaryEvent();\n        vm.printRegisterActivitySoldProductsSummaryEvent();\n        vm.printerStateChangedEvent();\n      });\n    }\n\n    function initializePrinterType() {\n      var storedPrinterType = getPrinterTypeFromStorage();\n      if (storedPrinterType) {\n        setPrinterType(storedPrinterType);\n      }\n    }\n\n    function startPrinterConnection() {\n      if (isPrinterTypeQZ()) {\n        DefaultRegisterService.getDefaultRegister().then(function (defaultRegister) {\n          if (defaultRegister) {\n            connectPrinterTypeQz();\n          } else {\n            DefaultRegisterService.requestDefaultRegister().then(function (defaultRegister) {\n              if (defaultRegister) {\n                connectPrinterTypeQz();\n              } else {\n                setState(vm.STATES.ERROR);\n              }\n            });\n          }\n        });\n      } else if (isPrinterTypeSystem()) {\n        setState(vm.STATES.READY);\n      } else if (isPrinterTypeEpsonIp()) {\n        EpsonPrinterService.startConnection();\n      }\n    }\n\n    function connectPrinterTypeQz() {\n      setCertificateAndSignature();\n      startConnection(vm.defaultStartConfig);\n    }\n\n    function connectPrinterTypeEpsonIp() {\n      var defaultRegister = DefaultRegisterService.defaultRegister;\n      if (!defaultRegister.printer_ip) {\n        openEpsonPrinterDialog();\n      } else {\n        connectEpsonPrinter();\n      }\n    }\n\n    function callbackEpsonConnect(resultConnect) {\n      var deviceId = DefaultRegisterService.defaultRegister.printer_device_id || 'Epson';\n      var options = {'crypto': false, 'buffer': false};\n      if ((resultConnect === 'OK') || (resultConnect === 'SSL_CONNECT_OK')) {\n        vm.eposdev.createDevice(deviceId, vm.eposdev.DEVICE_TYPE_PRINTER, options,\n          callbackCreateEpsonDevice);\n      } else {\n        setState(vm.STATES.ERROR);\n      }\n    }\n\n    function callbackCreateEpsonDevice(deviceObj, errorCode) {\n      if (deviceObj === null) {\n        setState(vm.STATES.ERROR);\n        return;\n      }\n      vm.printer = deviceObj;\n      setState(vm.STATES.READY);\n      //Registers the print complete event\n      vm.printer.onreceive = function (response) {\n        if (response.success) {\n          //Displays the successful print message\n        } else {\n          //Displays error messages\n        }\n      };\n    }\n\n    /// Connection ///\n    function setCertificateAndSignature() {\n      qz.security.setCertificatePromise(function (resolve, reject) {\n        $.ajax('app/directives/printer/libs/digital-certificate.9acf2230.txt').then(resolve, reject);\n      });\n\n      qz.security.setSignaturePromise(function (toSign) {\n        return function (resolve, reject) {\n          $.ajax(api.urls.certificate + '?key=' + toSign).then(resolve, reject);\n        };\n      });\n    }\n\n    function launchQZ() {\n      if (!qz.websocket.isActive()) {\n        window.location.assign('qz:launch');\n        //Retry 3 times, pausing 1 second between each attempt\n        startConnection(vm.defaultStartConfig);\n      }\n    }\n\n    function startConnection(config) {\n      if (isPrinterTypeQZ()) {\n        if (!qz.websocket.isActive()) {\n          setState(vm.STATES.WAITING);\n\n          qz.websocket.connect(config).then(function () {\n            setState(vm.STATES.ACTIVE);\n            getListPrinters();\n            findVersion();\n            getDefaultRegister();\n          }).catch(handleConnectionError);\n        } else {\n          if (config) {\n            console.info('An active connection with QZ already exists. Trying again...');\n            qz.websocket.disconnect().then(function () {\n              startConnection(config);\n            }).catch(handleConnectionError);\n          } else {\n            // Normally is because a new user has logged in\n            // Ignoring when an active connection with QA already exists and continue the work flow\n            console.info('An active connection with QZ already exists. Ignoring and continuing the workflow');\n            setState(vm.STATES.ACTIVE);\n            getListPrinters();\n            findVersion();\n            getDefaultRegister();\n          }\n        }\n      } else {\n        setState(vm.STATES.DISABLED);\n      }\n    }\n\n\n    /**\n     * Async way to connect the the websocket. Inspired with qz example:\n     * https://gist.github.com/tresf/42a8f25124840a6c496b\n     * @returns {*}\n     */\n    function asyncConnection() {\n      return $q(function (resolve, reject) {\n        if (qz.websocket.isActive()) {\t// if already active, resolve immediately\n          resolve();\n        } else {\n          // try to connect once before firing the mimetype launcher\n          qz.websocket.connect().then(resolve, function retry() {\n            // if a connect was not succesful, launch the mimetime, try 3 more times\n            window.location.assign('qz:launch');\n            qz.websocket.connect({retries: 2, delay: 1}).then(resolve, reject);\n          });\n        }\n      });\n    }\n\n    function endConnection() {\n      if (qz.websocket.isActive()) {\n        qz.websocket.disconnect().then(function () {\n          resetPrinterType();\n          setState(vm.STATES.DISABLED);\n        }).catch(handleConnectionError);\n      } else {\n        // displayMessage('No active connection with QZ exists.', 'alert-warning');\n      }\n    }\n\n    function getListPrinters() {\n      vm.listPrinters = [];\n      qz.printers.find().then(function (data) {\n        vm.listPrinters = data;\n      });\n    }\n\n    function printSendcloudLabel(pdfData, options) {\n      if (isPrinterTypeSystem()) {\n        var base64PDF = options.b64;\n        var styles = '@media print { @page {size: auto; margin:0; }}';\n        var embedElement = '<embed width=\"100%\" height=\"100%\" type=\"application/pdf\" src=\"data:application/pdf;base64,' + base64PDF + '\" />';\n        var popupWindow = window.open('', '_blank', 'width=1000,height=700,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');\n        popupWindow.document.write('<html><head><style>' + styles + '</style></head><body onload=\"window.print()\">' + embedElement + '</html>');\n        popupWindow.document.close();\n      } else if (isPrinterTypeQZ) {\n        qz.print(vm.qzConfiguration, [{type: 'pixel', format: 'pdf', flavor: 'base64', data: options.b64}])\n          .catch(function (e) {\n            console.error(e);\n          });\n      }\n    }\n\n    function findVersion() {\n      qz.api.getVersion().then(function (data) {\n        vm.qzVersion = data;\n        $scope.$apply();\n      }).catch(displayError);\n    }\n\n    function getDefaultRegister() {\n      // TODO use DefaultRegisterDialog\n      if (vm.registerPrinterName) {\n        connectQzPrinter();\n      } else {\n        console.info('No registerPrinterName found, checking defaultRegister\\'s printer...');\n        if (vm.defaultRegisterId) {\n          setState(vm.STATES.SETTING_DEFAULT_PRINTER);\n          api.sales.registers.get(\n            {\n              id: vm.defaultRegisterId,\n              serializer: 'RegisterSimpleSerializer'\n            },\n            function (results, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                postSetDefaultRegister(results);\n              } else {\n                setState(vm.STATES.ERROR);\n              }\n            });\n\n        } else {\n          setState(vm.STATES.SETTING_DEFAULT_REGISTER);\n          openDefaultRegisterDialog();\n        }\n      }\n    }\n\n    function openDefaultRegisterDialog() {\n      // TODO use DefaultRegisterDialog\n      $mdDialog.show({\n        controller: 'SelectDefaultRegisterDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/printer/dialogs/select-default-register/select-default-register-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        resolve: {\n          RegistersData: function (apiResolver) {\n            return apiResolver.resolve('sales.registers@list', {serializer: 'RegisterSimpleSerializer'});\n          }\n        }\n      }).then(function (defaultRegister) {\n        localStorage.setItem(Session.company.id + '::defaultRegister', defaultRegister.id);\n        vm.defaultRegisterId = defaultRegister.id;\n        vm.defaultRegister = defaultRegister;\n        startPrinterConnection();\n      }, function () {\n        resetPrinterType();\n        setState(vm.STATES.DISABLED);\n      });\n    }\n\n    function postSetDefaultRegister(defaultRegister) {\n      if (!defaultRegister.printer_name) {\n        console.info('\"' + defaultRegister.code + '\" doesn\\'t have default printer, getting the list of printers...');\n        openDefaultPrinterDialog();\n      } else {\n        console.info('Setting \"' + defaultRegister.printer_name + '\" as registerPrinterName');\n        localStorage.setItem(Session.company.id + '::registerPrinterName', defaultRegister.printer_name);\n        vm.registerPrinterName = defaultRegister.printer_name;\n        connectQzPrinter();\n      }\n    }\n\n    /**\n     * Opens de dialog to select one of the available printers found.\n     * Once selected, saves its name to the register.\n     */\n    function openDefaultPrinterDialog() {\n      vm.listPrinters = [];\n      qz.printers.find().then(function (data) {\n        console.info('Available printers: ' + data.join(', ') + '. Opening SelectDefaultPrinterDialog...');\n\n        vm.listPrinters = data;\n        $mdDialog.show({\n          controller: 'SelectDefaultPrinterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/directives/printer/dialogs/select-default-printer/select-default-printer-dialog.html',\n          parent: angular.element($document.find('#content-container')),\n          clickOutsideToClose: false,\n          locals: {\n            listPrinters: vm.listPrinters\n          }\n        }).then(function (registerPrinterName) {\n          changeRegisterPrinter(registerPrinterName);\n        }, function () {\n          // User has clicked cancel\n          resetPrinterType();\n          // endConnection();\n        });\n      }).catch(displayError);\n    }\n\n    function changeRegisterPrinter(registerPrinterName) {\n      console.info('Setting \"' + registerPrinterName + '\" as registerPrinterName and saving to api');\n      localStorage.setItem(Session.company.id + '::registerPrinterName', registerPrinterName);\n      vm.registerPrinterName = registerPrinterName;\n\n      api.sales.registers.update(\n        {\n          id: DefaultRegisterService.defaultRegister.id,\n          option: 'set-printer',\n          printer_name: registerPrinterName\n        },\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            connectQzPrinter();\n          } else {\n            console.error('Unable to put the defaultRegister');\n          }\n        });\n    }\n\n    function connectQzPrinter() {\n      console.info('Connecting qz to ' + vm.registerPrinterName);\n\n      setState(vm.STATES.CONNECTING_TO_PRINTER);\n      qz.printers.find(vm.registerPrinterName).then(function (data) {\n        console.info(vm.registerPrinterName + ' found and connected');\n\n        setPrinter(data);\n      }).catch(function (err) {\n        // setState(vm.STATES.ERROR);\n        // displayError(err)\n        console.info('Unable to connect qz to ' + vm.registerPrinterName + '. Asking the register....');\n        openDefaultPrinterDialog();\n      });\n    }\n\n    function setPrinter(printer) {\n\n      if (vm.qzConfiguration === null) {\n        vm.qzConfiguration = qz.configs.create({encoding: vm.ENCODING});\n      }\n      vm.qzConfiguration.config.encoding = vm.ENCODING;\n      vm.qzConfiguration.config.density = 'best';\n      vm.qzConfiguration.setPrinter(printer);\n      setState(vm.STATES.READY);\n      processBuffer();\n      console.info('Printer workflow finished!');\n    }\n\n    function processBuffer() {\n      var iterations = vm.bufferPendingPrintings.length;\n      for (var i = 0; i < iterations; ++i) {\n        printQZRaw(vm.bufferPendingPrintings.pop());\n      }\n    }\n\n    // Print functions\n\n    /**\n     * Prints the formatted rawData object\n     * @param rawData ESC/POS raw data\n     * @param options\n     */\n    function printQZRaw(rawData, options) {\n      var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n      if (flag_enabled && options && options.posOrder && options.posOrder.pos_order_invoices.length > 0) {\n        var url = api.urls.accounting.printer.replace(':option', 'pos-order-invoices');\n        var params = {\n          pos_order_invoice_ids: options.posOrder.pos_order_invoices.map(function(invoice) { return invoice.id; }),\n          pos_order_ids: options.posOrder.id,\n          printer_type: PRINTER_TYPES.PRINTER_TYPE_QZ,\n          page_size: PAGE_SIZES.PAGE_SIZE_ROLL,\n          register_id: options.register ? options.register.id : null\n        };\n        $http.get(url, { params: params }).then(function(response) {\n          if (isPrinterTypeQZ()) {\n            asyncConnection().then(function () { return qz.print(vm.qzConfiguration, response.data); }).catch(function (err) { displayError(err); console.error(err); });\n          } else {\n            vm.bufferPendingPrintings.push(response.data);\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRINTER_DIRECTIVE.TOAST_PRINTER_DISABLED')).position('top right'));\n            setPrinterType(vm.PRINTER_TYPES.QZ);\n            enableChanged();\n          }\n        }).catch(function(error) {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        });\n      }\n      else if (rawData) {\n        if (isPrinterTypeQZ()) {\n          if (vm.state === vm.STATES.READY || vm.state === vm.STATES.READY_UPDATE_NEEDED) {\n            asyncConnection().then(function () { qz.print(vm.qzConfiguration, rawData).catch(displayError); }).then(function () { }).catch(function (fail) { displayError(fail); console.error(fail); });\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PRINTER_DIRECTIVE.TOAST_PRINTER_NOT_READY')).position('top right'));\n          }\n        } else {\n          vm.bufferPendingPrintings.push(rawData);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('PRINTER_DIRECTIVE.TOAST_PRINTER_DISABLED')).position('top right'));\n\n          setPrinterType(vm.PRINTER_TYPES.QZ);\n          enableChanged();\n        }\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n    }\n\n    /**\n     * Prints the html ticket\n     * @param options\n     */\n    function printHtmlTicket(options) {\n      var flag_enabled = FeatureFlagService.isFeatureFlagEnabled('PRINTER_POS_ORDER_INVOICE');\n      if (flag_enabled && options && options.posOrder && options.posOrder.pos_order_invoices.length > 0) {\n        var url = api.urls.accounting.printer.replace(':option', 'pos-order-invoices');\n        var params = {\n          pos_order_invoice_ids: options.posOrder.pos_order_invoices.map(function(invoice) { return invoice.id; }),\n          pos_order_ids: options.posOrder.id,\n          printer_type: PRINTER_TYPES.PRINTER_TYPE_HTML,\n          page_size: PAGE_SIZES.PAGE_SIZE_ROLL,\n          register_id: options.register ? options.register.id : null,\n          is_gift_ticket: options.giftTicket,\n          gift_pos_order_product_variants: options.giftTicket === true ? options.posOrder.pos_order_product_variants : undefined\n        };\n        $http.get(url, { params: params }).then(function(response) {\n          var ticketHtml = response.data;\n\n          var iframe = document.createElement('iframe');\n          iframe.style.display = 'none';\n          document.body.appendChild(iframe);\n          iframe.contentDocument.open();\n          iframe.contentDocument.write(ticketHtml);\n          iframe.contentDocument.close();\n\n          $timeout(function() {\n            iframe.contentWindow.print();\n          }, 500);\n\n        }).catch(function(error) {\n          $mdToast.show($mdToast.simple()\n            .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n            .position('top right'));\n        });\n      }\n      else {\n        // Join the taxes to generate the tax resume\n        var balanceDiscountAsPercentage = null;\n        if (options.posOrder.balance_discount && !options.posOrder.is_devolution) {\n          balanceDiscountAsPercentage = options.posOrder.balance_discount / (options.posOrder.balance_discount + parseFloat(options.posOrder.total));\n        }\n        if (!options.posOrder.taxes && !options.giftTicket) {\n          options.posOrder.taxes = {};\n          options.posOrder.pos_order_product_variants.forEach(function (posOrderProductVariant) {\n            if (!options.posOrder.taxes[posOrderProductVariant.tax]) {\n              options.posOrder.taxes[posOrderProductVariant.tax] = [];\n            }\n            options.posOrder.taxes[posOrderProductVariant.tax].push(posOrderProductVariant);\n          });\n        }\n\n        vm.htmlTicket = {\n          giftTicket: options.giftTicket,\n          isDevolutionCard: options.isDevolutionCard || false,\n          company: Session.company,\n          sale: options.posOrder,\n          register: options.register,\n          warehouse: options.register.warehouse,\n          ticketConfiguration: options.register.warehouse.ticket_configuration_object,\n          currencyCharacter: $filter('currencyCharacter')(options.posOrder.currency),\n          balance_discount: options.posOrder.balance_discount !== undefined && options.posOrder.balance_discount !== null ? options.posOrder.balance_discount : null,\n          total_without_discount: options.posOrder.balance_discount !== undefined && options.posOrder.balance_discount !== null ? parseFloat(options.posOrder.balance_discount) + parseFloat(options.posOrder.total) : null,\n          balance_discount_as_percentage: balanceDiscountAsPercentage || 0.0,\n          getUnitPrice: function (posOrderProductVariant, withNoDiscount) {\n            if (posOrderProductVariant.custom_price_incl_tax && posOrderProductVariant.custom_price_excl_tax) {\n              if (posOrderProductVariant.custom_price_incl_tax < posOrderProductVariant.price_incl_tax) {\n                return posOrderProductVariant.custom_price_incl_tax;\n              }\n              return posOrderProductVariant.price_incl_tax;\n            } else if (posOrderProductVariant.discount && !withNoDiscount) {\n              return posOrderProductVariant.discount_price_incl_tax;\n            } else {\n              return posOrderProductVariant.price_incl_tax;\n            }\n          },\n          getAmount: function (posOrderProductVariant) {\n            return (posOrderProductVariant.amount - posOrderProductVariant.canceled_amount);\n          },\n          getPrice: ndPrinterUtilsService.getPrice,\n          getTotalTaxByGroup: ndPrinterUtilsService.getTotalTaxByGroup,\n          showTotalTaxes: function (sale) {\n            return Object.keys(sale.taxes).length > 1;\n          },\n          getPosOrderProductVariants: function (sale, consumedGiftCards) {\n            return sale.pos_order_product_variants.filter(function (popv) {\n              return !popv.consumed_gift_card && !popv.charged_gift_card || (popv.charged_gift_card && !popv.charged_gift_card_is_voucher);\n            });\n          },\n          getConsumedGiftCards: function (sale) {\n            if (sale.is_old_devolution_cards) {\n              return sale.devolution_cards;\n            }\n            return sale.pos_order_product_variants.filter(function (popv) {\n              return popv.consumed_gift_card;\n            });\n          },\n          getChargedGiftCards: function (sale) {\n            if (sale.is_old_generated_devolution_cards) {\n              return [sale.generated_devolution_card];\n            }\n            return sale.pos_order_product_variants.filter(function (popv) {\n              return popv.charged_gift_card && popv.charged_gift_card_is_voucher;\n            });\n          },\n          getBarcodeHeight: function () {\n            if (vm.htmlTicket.ticketConfiguration.barcode_design === BARCODE_DESIGN_TYPES.SMALL) {\n              return 24;\n            }\n            return 48;\n          },\n          chargedGiftCardVoucher: null,\n          oldDevolutionCard: null\n        };\n\n        // Functions\n        if (!vm.htmlTicket.isDevolutionCard) {\n          $timeout(function () {\n            if (vm.htmlTicket.ticketConfiguration.barcode_design) {\n              JsBarcode('#code-128', options.posOrder.barcode, {\n                format: 'code128b',\n                height: vm.htmlTicket.getBarcodeHeight(),\n                width: 1.5,\n                lineColor: '#000',\n                font: 'sans-serif'\n              });\n            }\n\n            angular.element('#print-area').html(document.getElementById('print-order-id').innerHTML);\n            window.print();\n\n          }, 1000);\n\n      } else {\n        //TODO do this as a loop\n        if (options.posOrder.generated_devolution_card && options.posOrder.is_old_generated_devolution_cards) {\n          vm.htmlTicket.oldDevolutionCard = options.posOrder.generated_devolution_card;\n          $timeout(function () {\n            if (vm.htmlTicket.ticketConfiguration.barcode_design) {\n              JsBarcode('#code-128-voucher', options.posOrder.generated_devolution_card.barcode, {\n                format: 'code128b',\n                height: vm.htmlTicket.getBarcodeHeight(),\n                width: 1.5,\n                lineColor: '#000',\n                font: 'sans-serif'\n              });\n            }\n            angular.element('#print-area').html(document.getElementById('print-devolution-card-id').innerHTML);\n            window.print();\n          }, 1000);\n        } else {\n          var chargedGiftCardVoucher = options.posOrder.pos_order_product_variants.filter(function (popv) {\n            return popv.charged_gift_card && popv.charged_gift_card_is_voucher;\n          });\n          vm.htmlTicket.chargedGiftCardVoucher = chargedGiftCardVoucher[0];\n\n          if (!options.posOrder.generated_devolution_card.amount) {\n            vm.htmlTicket.chargedGiftCardVoucher.total = options.posOrder.generated_devolution_card[0].amount;\n          } else {\n            vm.htmlTicket.chargedGiftCardVoucher.total = options.posOrder.generated_devolution_card.amount;\n          }\n\n          if (chargedGiftCardVoucher.length !== 0) {\n            $timeout(function () {\n              if (vm.htmlTicket.ticketConfiguration.barcode_design) {\n                JsBarcode('#code-128-voucher', vm.htmlTicket.chargedGiftCardVoucher.gift_card_code, {\n                  format: 'code128b',\n                  height: vm.htmlTicket.getBarcodeHeight(),\n                  width: 1.5,\n                  lineColor: '#000',\n                  font: 'sans-serif'\n                });\n              }\n              angular.element('#print-area').html(document.getElementById('print-devolution-card-id').innerHTML);\n              window.print();\n            }, 1000);\n          }\n        }}\n      }\n\n    }\n\n    function printHtmlRegisterActivitySummary(options) {\n\n      vm.htmlRegisterActivitySummary = {\n        company: Session.company,\n        paymentMethodsDict: options.paymentMethodsDict,\n        registerActivity: options.registerActivity,\n        warehouse: options.registerActivity.register.warehouse,\n        ticketConfiguration: options.registerActivity.register.warehouse.ticket_configuration_object,\n        currencyCharacter: $filter('currencyCharacter')(Session.company.currency),\n        CASH_MOVEMENT_TYPES: CASH_MOVEMENT_TYPES\n      };\n\n      vm.htmlRegisterActivitySummary.registerActivity.total_payment_amounts = vm.htmlRegisterActivitySummary.registerActivity.total_payment_amounts.sort(function (a, b) {\n        return a.payment_method - b.payment_method;\n      });\n\n      // Functions\n      $timeout(function () {\n        var styles = '@media print { @page {size: auto; margin:0; }}';\n        var innerContents = document.getElementById('print-register-activity-id').innerHTML;\n        var popupWinindow = window.open('', '_blank', 'width=600,height=700,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');\n        popupWinindow.document.open();\n        //popupWinindow.document.write('<html><head><style>' + styles + '</style></head><body>' + innerContents + '</html>');\n        popupWinindow.document.write('<html><head></head><body onload=\"window.print()\">' + innerContents + '</html>');\n        popupWinindow.document.close();\n      }, 1000);\n    }\n\n    function printPosOrder(event, options) {\n      // TODO move this into new PosOrder() method\n      options.posOrder.created_at = new Date(options.posOrder.created_at);\n\n      if (options.giftTicket) {\n        $mdDialog.show({\n          multiple: true,\n          controller: 'EscPosPrinterDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/services/dialogs/esc-pos-printer-dialog/esc-pos-printer-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: false,\n          locals: {\n            products: options.posOrder.pos_order_product_variants,\n            isEco: false\n          }\n        }).then(function (result) {\n          options.posOrder.pos_order_product_variants = result;\n          if (isPrinterTypeSystem()) {\n            printHtmlTicket(options);\n          } else if (isPrinterTypeEpsonIp()) {\n            EpsonPrinterService.printGiftTicket(options);\n          } else {\n            printQZRaw(ndPrinterUtilsService.printPosOrder(options.posOrder, options.register, options.openDrawer, true, options.site), options);\n          }\n        });\n      }\n\n      if (!options.avoidNormalTicket) {\n        if (isPrinterTypeSystem()) {\n          options.isDevolutionCard = false;\n          printHtmlTicket(options);\n        } else if (isPrinterTypeEpsonIp()) {\n          EpsonPrinterService.printPosOrder(options);\n        } else {\n          printQZRaw(ndPrinterUtilsService.printPosOrder(options.posOrder, options.register, options.openDrawer, false, options.site), options);\n        }\n      }\n    }\n\n    function printWidthDiscover(event, options) {\n      if (isPrinterTypeEpsonIp()) {\n        EpsonPrinterService.printWidthDiscover(options);\n      }\n      printQZRaw(ndPrinterUtilsService.printWidthDiscover(options.register));\n    }\n\n    function printGiftCard(event, options) {\n      var giftCard = new GiftCard(options.giftCard);\n      DefaultRegisterService.getDefaultRegister().then(function (defaultRegister) {\n        if (defaultRegister) {\n          var register = new Register(defaultRegister);\n          _printGiftCard(giftCard, register);\n        } else {\n          DefaultRegisterService.requestDefaultRegister().then(function (defaultRegister) {\n            if (defaultRegister) {\n              var register = new Register(defaultRegister);\n              _printGiftCard(giftCard, register);\n            } else {\n              setState(vm.STATES.ERROR);\n            }\n          });\n        }\n      })\n    }\n\n    function _printGiftCard(giftCard, register) {\n      if (isPrinterTypeSystem()) {\n        printGiftCardHtml(giftCard, register);\n      } else if (isPrinterTypeEpsonIp()) {\n        var options = {\n          generated_devolution_card: giftCard\n        }\n        EpsonPrinterService.printGiftCard(giftCard, register, options);\n      } else {\n        printQZRaw(ndPrinterUtilsService.printGiftCard(giftCard, register), {});\n      }\n    }\n\n    function printGiftCardHtml(giftCard, register) {\n      var ticketConfiguration = register.warehouse.ticketConfiguration;\n      vm.htmlTicket = {\n        giftCard: giftCard,\n        warehouse: register.warehouse,\n        ticketConfiguration: ticketConfiguration,\n        currency: $filter('currencyCharacter')(register.currency)\n      }\n      $timeout(function () {\n        if (ticketConfiguration.barcodeDesign) {\n          JsBarcode('#code-128-voucher', giftCard.barcode, {\n            format: 'code128b',\n            height: ticketConfiguration.getBarcodeHeight(),\n            width: 1.5,\n            lineColor: '#000',\n            font: 'sans-serif'\n          });\n        }\n        angular.element('#print-area').html(document.getElementById('print-gift-card-id').innerHTML);\n        window.print();\n      }, 1000);\n    }\n\n    function printDevolutionCard(event, options) {\n      // TODO move this into new PosOrder() method\n      options.posOrder.created_at = new Date(options.posOrder.created_at);\n      if (isPrinterTypeSystem()) {\n        options.isDevolutionCard = true;\n        printHtmlTicket(options);\n      } else if (isPrinterTypeEpsonIp()) {\n        options.isDevolutionCard = true;\n\n        var generated_devolution_card = null;\n        if (Array.isArray(options.posOrder.generated_devolution_card)) {\n          generated_devolution_card = options.posOrder.generated_devolution_card[options.posOrder.generated_devolution_card.length - 1];\n        } else {\n          generated_devolution_card = options.posOrder.generated_devolution_card;\n        }\n\n        if (generated_devolution_card) {\n          options.generated_devolution_card = generated_devolution_card;\n        }\n        EpsonPrinterService.printDevolutionCard(options)\n      } else {\n        printQZRaw(ndPrinterUtilsService.printDevolutionCard(options.posOrder, options.register, options.site));\n      }\n    }\n\n    function openCashDrawer(event, options) {\n      if (isPrinterTypeSystem()) {\n        // Do nothing\n      } else if (isPrinterTypeEpsonIp()) {\n        EpsonPrinterService.openCashDrawer(options);\n      } else {\n        printQZRaw(ndPrinterUtilsService.openCashDrawer(options.register));\n      }\n    }\n\n    function warmUpConnection(event) {\n      if (isPrinterTypeEpsonIp()) {\n        EpsonPrinterService.connectPrinter();\n      }\n    }\n\n    function printRegisterActivitySummary(event, options) {\n      if (isPrinterTypeSystem()) {\n        printHtmlRegisterActivitySummary(options);\n      } else if (isPrinterTypeEpsonIp()) {\n        EpsonPrinterService.printRegisterActivitySummary(options);\n      } else {\n        printQZRaw(ndPrinterUtilsService.printRegisterActivitySummary(options.registerActivity, options.paymentMethodsDict));\n      }\n    }\n\n    function printRegisterActivitySoldProductsSummary(event, options) {\n      if (isPrinterTypeEpsonIp()) {\n        EpsonPrinterService.printRegisterActivitySoldProductsSummary(options);\n      } else {\n        printQZRaw(ndPrinterUtilsService.printRegisterActivitySoldProductsSummary(options.registerActivity, options.posOrderProductVariants));\n      }\n    }\n\n    // Helper functions\n    function handleConnectionError(err) {\n      setState(vm.STATES.ERROR);\n      if (err.target !== undefined) {\n        if (err.target.readyState >= 2) { //if CLOSING or CLOSED\n          displayError('Connection to QZ Tray was closed');\n        } else {\n          displayError('A connection error occurred, check log for details');\n          console.error(err);\n        }\n      } else {\n        // If the connection cannot be done, try to launch qz one time\n        // If once launched the error remains, set the local storage\n        if (isPrinterTypeQZ() && !vm.alreadyLaunched) {\n          vm.alreadyLaunched = true;\n          launchQZ();\n        } else {\n\n        }\n      }\n    }\n\n    function displayError(err) {\n      alert(err);\n    }\n\n    function displayMessage(msg) {\n      alert(msg);\n      // console.info(msg);\n    }\n\n    function togglePrinterTypeQZ(event) {\n      event.stopPropagation();\n      togglePrinterType(vm.PRINTER_TYPES.QZ);\n      enableChanged();\n    }\n\n    function toggleSystemPrinterEnabled(event) {\n      event.stopPropagation();\n      togglePrinterType(vm.PRINTER_TYPES.SYSTEM);\n    }\n\n    function toggleEpsonPrinterEnabled(event) {\n      event.stopPropagation();\n      togglePrinterType(vm.PRINTER_TYPES.EPSON_IP);\n    }\n\n    function openEpsonPrinterDialog() {\n      $mdMenu.hide();\n      $mdDialog.show({\n        controller: 'IpEpsonPrinterDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/printer/dialogs/ip-epson-printer/ip-epson-printer-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        locals: {\n          eposdev: new epson.ePOSDevice(),\n        }\n      }).then(function (result) {\n        connectEpsonPrinter();\n      }, function (result) {\n\n      });\n    }\n\n    function connectEpsonPrinter() {\n      vm.eposdev = new epson.ePOSDevice();\n      setState(vm.STATES.CONNECTING_TO_PRINTER);\n      var printerIp = DefaultRegisterService.defaultRegister.printer_ip;\n      var printerPort = DefaultRegisterService.defaultRegister.use_ssl ? '8043' : '8008';\n      vm.eposdev.connect(printerIp, printerPort, callbackEpsonConnect);\n    }\n\n    function enableChanged() {\n      if (isPrinterTypeQZ()) {\n        startConnection(vm.defaultStartConfig);\n      } else {\n        resetPrinterType();\n        endConnection();\n      }\n    }\n\n    // TODO: remove\n    function setEnabledToken(value) {\n      if (value) {\n        localStorage.setItem(Session.company.id + '::ndPrinter::enabled', 'true');\n      } else {\n        localStorage.removeItem(Session.company.id + '::ndPrinter::enabled');\n      }\n    }\n\n    // TODO: remove\n    function isTokenEnabled() {\n      return localStorage.getItem(Session.company.id + '::ndPrinter::enabled');\n    }\n\n    // TODO: remove\n    function setEpsonPrinterEnabledToken(value) {\n      if (value) {\n        localStorage.setItem(Session.company.id + '::ndPrinter::epsonPrinterEnabled', 'true');\n      } else {\n        localStorage.removeItem(Session.company.id + '::ndPrinter::epsonPrinterEnabled');\n      }\n    }\n\n    // TODO: remove\n    function isEpsonPrinterTokenEnabled() {\n      return localStorage.getItem(Session.company.id + '::ndPrinter::epsonPrinterEnabled') === 'true';\n    }\n\n    function getPrinterTypeFromStorage() {\n      var result = localStorage.getItem(Session.company.id + '::ndPrinter::printerType');\n      // Fault case, remove then removing all the \"// TODO: remove\" and return directly result\n      if (!result) {\n        if (isTokenEnabled()) {\n          setPrinterTypeToStorage(vm.PRINTER_TYPES.QZ);\n          return vm.PRINTER_TYPES.QZ;\n        } else if (isEpsonPrinterTokenEnabled()) {\n          setPrinterTypeToStorage(vm.PRINTER_TYPES.EPSON_IP);\n          return vm.PRINTER_TYPES.EPSON_IP;\n        } else if (isSystemPrinterTokenEnabled()) {\n          setPrinterTypeToStorage(vm.PRINTER_TYPES.SYSTEM);\n          return vm.PRINTER_TYPES.SYSTEM;\n        }\n      }\n      return result;\n    }\n\n    function setPrinterTypeToStorage(printerType) {\n      if (printerType) {\n        localStorage.setItem(Session.company.id + '::ndPrinter::printerType', printerType);\n      } else {\n        localStorage.removeItem(Session.company.id + '::ndPrinter::printerType');\n      }\n    }\n\n    // TODO: remove\n    function setSystemPrinterEnabledToken(value) {\n      if (value) {\n        localStorage.setItem(Session.company.id + '::ndPrinter::systemPrinterEnabled', 'true');\n      } else {\n        localStorage.removeItem(Session.company.id + '::ndPrinter::systemPrinterEnabled');\n      }\n    }\n\n    // TODO: remove\n    function isSystemPrinterTokenEnabled() {\n      return localStorage.getItem(Session.company.id + '::ndPrinter::systemPrinterEnabled') === 'true';\n    }\n\n    function getWindowsDownloadUrl() {\n      return 'https://github.com/qzind/tray/releases/download/v' + qz.version + '/qz-tray-' + qz.version + '.exe';\n    }\n\n    function getMacDownloadUrl() {\n      return 'https://github.com/qzind/tray/releases/download/v' + qz.version + '/qz-tray-' + qz.version + '.pkg';\n    }\n\n    function getLinuxDownloadUrl() {\n      return 'https://github.com/qzind/tray/releases/download/v' + qz.version + '/qz-tray-' + qz.version + '.run';\n    }\n\n    function setState(state) {\n      vm.state = state;\n      if (vm.stateTimeout) {\n        $timeout.cancel(vm.stateTimeout);\n      }\n      vm.stateTimeout = $timeout(function () {\n        // Apply the $apply in the next digest cycle\n        $scope.$apply();\n      }, 2000);\n    }\n\n    function handleEmitStateEvent(event, state) {\n      setState(state);\n    }\n\n    function isPrinterTypeQZ() {\n      return vm.printerType === vm.PRINTER_TYPES.QZ;\n    }\n\n    function isPrinterTypeSystem() {\n      return vm.printerType === vm.PRINTER_TYPES.SYSTEM;\n    }\n\n    function isPrinterTypeEpsonIp() {\n      return vm.printerType === vm.PRINTER_TYPES.EPSON_IP;\n    }\n\n    function resetPrinterType() {\n      setPrinterType(null);\n      setState(vm.STATES.DISABLED);\n    }\n\n    function setPrinterType(printerType) {\n      vm.printerType = printerType;\n      setPrinterTypeToStorage(printerType);\n    }\n\n    function togglePrinterType(primerType) {\n      if (vm.printerType === primerType) {\n        resetPrinterType();\n      } else {\n        setPrinterType(primerType);\n        startPrinterConnection();\n      }\n    }\n\n    function getDefaultPrinterIp() {\n      var defaultRegister = DefaultRegisterService.defaultRegister;\n      return defaultRegister ? defaultRegister.printer_ip : '';\n    }\n  }\n\n  /** @ngInject */\n  function ndPrinter() {\n    return {\n      restrict: 'E',\n      scope: {},\n      controller: 'ndPrinterController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/printer/nd-printer.html',\n      link: function (scope, element, attrs) {\n\n      }\n    };\n\n  }\n\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderShippingMethodsCardController', ndPosOrderShippingMethodsCardController)\n    .directive('ndPosOrderShippingMethodsCard', ndPosOrderShippingMethodsCard);\n\n  /** @ngInject */\n  function ndPosOrderShippingMethodsCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-shipping-methods-card/nd-pos-order-shipping-methods-card.html',\n      scope: {\n        order: '=',\n        saving: '=',\n        shippingMethods: '=',\n        taxes: '=',\n        updateOrder: '&',\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderShippingMethodsCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderShippingMethodsCardController(api,\n                                                   Utils,\n                                                   apiResolver,\n                                                   Session,\n                                                   PosOrderShippingMethod,\n                                                   PosOrder,\n                                                   $mdToast,\n                                                   $window,\n                                                   $mdDialog,\n                                                   $filter,\n                                                   $scope,\n                                                   HTTP_STATUS) {\n    var vm = this;\n    // Data\n    vm.order = $scope.order;\n    vm.shippingMethods = $scope.shippingMethods;\n    vm.taxes = $scope.taxes;\n    // FIXME create vm.saving = $scope.saving; not it uses $scope.saving direclty\n\n    // Methods\n    vm.addShipping = addShipping;\n    vm.updateShipping = updateShipping;\n    vm.deleteShipping = deleteShipping;\n    vm.selectShipping = selectShipping;\n    vm.viewCommercialInvoice = viewCommercialInvoice;\n    vm.updateAndPrintCommercialInvoice = updateAndPrintCommercialInvoice;\n    vm.printShippingLabel = printShippingLabel;\n    vm.hideStock = hideStock;\n    vm.shippingMethodChanged = shippingMethodChanged;\n    vm.recalculatePosOrderShippingMethodExclTax = recalculatePosOrderShippingMethodExclTax;\n    vm.updatePosOrderShippingMethodTax = updatePosOrderShippingMethodTax;\n    vm.initTax = initTax;\n\n    // Functions\n    function addShipping() {\n      if (vm.order.deleted) {\n        return;\n      }\n\n      if (vm.shippingMethods.length) {\n        api.inventories.posOrderShippingMethods.save(\n          {\n            shipping_method: vm.shippingMethods[0].id,\n            shipping_method_name: vm.shippingMethods[0].name,\n            price_incl_tax: vm.shippingMethods[0].price_incl_tax,\n            pos_order: vm.order.id\n          },\n          function (response, callback, status) {\n            if (status === HTTP_STATUS.HTTP_201_CREATED) {\n              vm.order.pos_order_shipping_methods.push(response);\n              updateShipping();\n            }\n          }\n        );\n      }\n    }\n\n    function updatePosOrderShippingMethodTax(posOrderShippingMethod) {\n      var tax = vm.taxes.find(function (tax) {\n        return tax.id === posOrderShippingMethod.tax.id;\n      });\n      posOrderShippingMethod.tax_name = tax ? tax.name : null;\n      posOrderShippingMethod.tax_percent_value = tax ? tax.percent_value : null;\n      recalculatePosOrderShippingMethodExclTax(posOrderShippingMethod);\n    }\n\n    function initTax(posOrderShippingMethod) {\n      if (posOrderShippingMethod.tax && posOrderShippingMethod.tax.id) {\n        posOrderShippingMethod.tax = vm.taxes.find(function (tax) {\n          return tax.id === posOrderShippingMethod.tax.id;\n        });\n\n        if (posOrderShippingMethod.tax.percent_value !== 0) {\n          recalculatePosOrderShippingMethodExclTax(posOrderShippingMethod);\n        }\n      }\n    }\n\n    function recalculatePosOrderShippingMethodExclTax(posOrderShippingMethod) {\n      posOrderShippingMethod.price_excl_tax = 0;\n      if (posOrderShippingMethod.tax && posOrderShippingMethod.tax.percent_value) {\n        posOrderShippingMethod.price_excl_tax =\n          posOrderShippingMethod.price_incl_tax / (1 + (posOrderShippingMethod.tax.percent_value / 100.0));\n      }\n      updateShipping();\n    }\n\n    function updateShipping() {\n      if (vm.order.deleted || $scope.saving) {\n        return;\n      }\n      $scope.updateOrder();\n    }\n\n    function shippingMethodChanged(posOrderShippingMethod) {\n      var shippingMethod = vm.shippingMethods.find(function (sm) {\n        return sm.id === posOrderShippingMethod.shipping_method;\n      });\n      posOrderShippingMethod.price_incl_tax = shippingMethod ? shippingMethod.price_incl_tax : null;\n      posOrderShippingMethod.shipping_method_name = shippingMethod ? shippingMethod.name : null;\n      recalculatePosOrderShippingMethodExclTax(posOrderShippingMethod);\n    }\n\n    function deleteShipping(posOrderShippingMethod) {\n      vm.order.pos_order_shipping_methods.splice(vm.order.pos_order_shipping_methods.findIndex(function (posm) {\n        return posm.id === posOrderShippingMethod.id;\n      }), 1);\n\n      updateShipping();\n    }\n\n    function selectShipping(posOrderShippingMethod) {\n      vm.shippingMethods.forEach(function (sm) {\n        if (sm.id === posOrderShippingMethod.shipping_method) {\n          posOrderShippingMethod.price_incl_tax = sm.price_incl_tax;\n          updateShipping();\n        }\n      });\n    }\n\n    function updateAndPrintCommercialInvoice(shippingMethod) {\n      api.inventories.posOrderShippingMethods.update(\n        shippingMethod,\n        function (result) {\n          shippingMethod = result;\n          var url = api.urls.inventories.posOrdersCommercialInvoice.replace(':id', vm.order.id);\n          url = url + '?pos_order_shipping_method_id=' + shippingMethod.id;\n          Session.setTokenCookie();\n          $window.open(url);\n        }\n      );\n\n    }\n\n    function printShippingLabel(size) {\n      var url = api.urls.inventories.posOrdersPrintShippingLabel.replace(':id', vm.order.id);\n      url += '?size=' + size;\n      Session.setTokenCookie();\n      $window.open(url);\n    }\n\n    function viewCommercialInvoice(shippingMethod, ev) {\n\n      vm.selectedShippingMethod = shippingMethod;\n\n      $mdDialog.show({\n        contentElement: '#ecommerceOrderCommercialInvoiceDialog',\n        parent: angular.element(document.getElementById(document.body)),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        fullscreen: true\n      }).then(function (result) {\n        hideStock();\n      }, function () {\n        hideStock();\n      });\n    }\n\n    function hideStock() {\n      vm.showStockDetails = false;\n      $mdDialog.hide();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderRepositionOfCardController', ndPosOrderRepositionOfCardController)\n    .directive('ndPosOrderRepositionOfCard', ndPosOrderRepositionOfCard);\n\n  /** @ngInject */\n  function ndPosOrderRepositionOfCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-reposition-of-card/nd-pos-order-reposition-of-card.html',\n      scope: {\n        posOrder: '='\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderRepositionOfCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderRepositionOfCardController(\n    $scope,\n    $filter,\n    api,\n    Session,\n    HTTP_STATUS,\n    TRANSFER_ORDER_STATUS_COLORS,\n    PURCHASE_ORDER_STATUS_COLORS,\n    TRANSFER_ORDER_STATUSES,\n    PURCHASE_ORDER_STATUSES\n  ) {\n    var vm = this;\n    // Constants\n    vm.TRANSFER_ORDER_STATUS_COLORS = TRANSFER_ORDER_STATUS_COLORS;\n    vm.PURCHASE_ORDER_STATUS_COLORS = PURCHASE_ORDER_STATUS_COLORS;\n    // Data\n    vm.showCard = false;\n    vm.posOrder = $scope.posOrder;\n    vm.transfers = [];\n    vm.fetchingTransfers = false;\n    vm.purchases = [];\n    vm.fetchingPurchases = false;\n\n    // Methods\n    vm.getTransferStatusLabel = getTransferStatusLabel;\n    vm.getPurchaseStatusLabel = getPurchaseStatusLabel;\n\n    // Init\n    init();\n\n    function init() {\n      fetchAll();\n\n      var unbindReplenishmentPolicyExecuted = $scope.$on('replenishmentPolicyExecuted', fetchAll);\n\n      $scope.$on('$destroy', function() {\n        unbindReplenishmentPolicyExecuted();\n      });\n    }\n\n    function fetchAll() {\n      getTransfers();\n      getPurchases();\n    }\n\n    // Functions\n    function getTransfers() {\n      vm.fetchingTransfers = true;\n      api.inventories.posOrders.list({\n        id: vm.posOrder.id,\n        option: 'replenishment-transfer-orders'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.transfers = results;\n        }\n        vm.fetchingTransfers = false;\n        postInit();\n      });\n    }\n\n    function getPurchases() {\n      vm.fetchingPurchases = true;\n      api.inventories.posOrders.list({\n        id: vm.posOrder.id,\n        option: 'replenishment-purchase-orders'\n      }, function(results, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.purchases = results;\n        }\n        vm.fetchingPurchases = false;\n        postInit();\n      });\n    }\n\n    function postInit() {\n      vm.showCard = vm.transfers.length > 0 || vm.purchases.length > 0;\n    }\n\n    function getTransferStatusLabel(status) {\n      return $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]);\n    }\n\n    function getPurchaseStatusLabel(status) {\n      return $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[status]);\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderProductVariantsTableController', ndPosOrderProductVariantsTableController)\n    .directive('ndPosOrderProductVariantsTable', ndPosOrderProductVariantsTable);\n\n  /** @ngInject */\n  function ndPosOrderProductVariantsTable() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-product-variants-table/nd-pos-order-product-variants-table.html',\n      scope: {\n        order: '=',\n        saving: '=',\n        warehouses: '=',\n        updateOrder: '&',\n        updateDebounce: '&'\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderProductVariantsTableController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderProductVariantsTableController(api,\n                                                    Utils,\n                                                    apiResolver,\n                                                    Session,\n                                                    $mdToast,\n                                                    $window,\n                                                    $mdDialog,\n                                                    $filter,\n                                                    $scope,\n                                                    POS_ORDER_SHIPPING_STATUSES) {\n    var vm = this;\n\n    // Data\n    vm.order = $scope.order;\n    vm.paymentMethods = $scope.paymentMethods;\n    vm.warehouses = $scope.warehouses;\n    vm.pos_order_product_variants_copy = angular.copy(vm.order.pos_order_product_variants);\n\n\n    vm.showSave = false;\n    // FIXME create vm.saving = $scope.saving; not it uses $scope.saving direclty\n\n    // Methods\n    vm.canEditPosOrderProductVariant = canEditPosOrderProductVariant;\n    vm.canEditPosOrderProductVariantDiscount = canEditPosOrderProductVariantDiscount;\n    vm.amountChanged = amountChanged;\n    vm.getMinimumAmount = getMinimumAmount;\n    vm.deletePosOrderProductVariant = deletePosOrderProductVariant;\n    vm.checkEnterPressed = checkEnterPressed;\n    vm.viewStock = viewStock;\n    vm.hideStockDialog = hideStockDialog;\n    vm.priceClicked = priceClicked;\n    vm.finishCustomPriceEdition = finishCustomPriceEdition;\n    vm.finishDiscountEdition = finishDiscountEdition;\n    vm.canEditPopvLine = canEditPopvLine;\n\n\n    // Functions\n    function canEditPosOrderProductVariant() {\n      return vm.order.autocode &&\n        vm.order.shipping_status === POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_PENDING;\n    }\n\n    function canEditPosOrderProductVariantDiscount(popv) {\n      return !popv.custom_price_incl_tax &&\n        popv.amount && canEditPosOrderProductVariant();\n    }\n\n    function amountChanged(popv) {\n      if (popv.amount === 0 || angular.isUndefined(popv.amount)) {\n        var index = vm.order.pos_order_product_variants.findIndex(function (p) {\n          return p.id === popv.id;\n        });\n        if (vm.order.site && vm.order.site.id) {\n          popv.amount = vm.pos_order_product_variants_copy[index].amount;\n        } else {\n          vm.order.pos_order_product_variants.splice(index, 1);\n        }\n      }\n      $scope.updateOrder();\n    }\n\n    function getMinimumAmount(popv_id) {\n      if (vm.order.site && vm.order.site.id) {\n        var index = vm.order.pos_order_product_variants.findIndex(function (p) {\n          return p.id === popv_id;\n        });\n\n        return vm.pos_order_product_variants_copy[index].amount;\n      }\n\n    }\n\n    function deletePosOrderProductVariant(popv) {\n      if (popv.amount < 0) {\n        popv.amount += 1;\n      } else {\n        popv.amount -= 1;\n      }\n      amountChanged(popv);\n    }\n\n    function checkEnterPressed($event) {\n      // If enter is pressed, blur input\n      if (event.which === 13) {\n        var target = $event.target;\n        target.blur();\n      }\n    }\n\n    function viewStock(popv, ev) {\n      apiResolver.resolve('inventories.products@get', {\n        'id': popv.product,\n        'serializer': 'ProductStockSerializer'\n      }).then(function (response) {\n        vm.selectedProductStock = response;\n        vm.selectedProductVariant = popv.product_variant;\n        vm.showStockDetails = true;\n\n        $mdDialog.show({\n          contentElement: '#ecommerceOrderStockDialog',\n          parent: angular.element(document.getElementById(document.body)),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          fullscreen: true\n        }).then(function (result) {\n          $mdDialog.hide();\n        }, function () {\n          $mdDialog.hide();\n        });\n      });\n    }\n\n    function hideStockDialog() {\n      $mdDialog.hide();\n    }\n\n\n\n    function canEditPopvLine(popv) {\n      return vm.order.canEditPosOrderProductVariant() && !vm.order.isPopvFulfilled(popv.id) || popv.recentlyAdded;\n    }\n\n    function priceClicked(popv) {\n      if (vm.order.canEditPosOrderProductVariant()) {\n        popv.editingPrice = true;\n      }\n    }\n\n    function finishCustomPriceEdition(popv) {\n      popv.editingPrice = false;\n      popv.setCustomPriceInclTax(popv.custom_price_incl_tax);\n      $scope.updateOrder();\n    }\n\n    function finishDiscountEdition(popv){\n      popv.setDiscount(popv.discount);\n      $scope.updateOrder();\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller(\n      'ndPosOrderPaymentMethodsCardController',\n      ndPosOrderPaymentMethodsCardController\n    )\n    .directive('ndPosOrderPaymentMethodsCard', ndPosOrderPaymentMethodsCard);\n\n  /** @ngInject */\n  function ndPosOrderPaymentMethodsCard() {\n    return {\n      restrict: 'E',\n      templateUrl:\n        'app/directives/pos-order-payment-methods-card/nd-pos-order-payment-methods-card.html',\n      scope: {\n        order: '=',\n        paymentMethods: '=',\n        saving: '=',\n        updateOrder: '&',\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderPaymentMethodsCardController',\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrderPaymentMethodsCardController(\n    api,\n    Utils,\n    apiResolver,\n    Session,\n    $mdToast,\n    $window,\n    $mdDialog,\n    $filter,\n    $scope,\n    $state,\n    PosOrderPaymentMethod\n  ) {\n    var vm = this;\n\n    // Data\n    vm.order = $scope.order;\n    vm.paymentMethods = $scope.paymentMethods;\n\n    // FIXME create vm.saving = $scope.saving; not it uses $scope.saving direclty\n\n    // Methods\n    vm.addPayment = addPayment;\n    vm.updatePayment = updatePayment;\n    vm.deletePayment = deletePayment;\n    vm.assignPending = assignPending;\n    vm.showNoPaymentMethods = showNoPaymentMethods;\n    vm.callUpdateOrder = callUpdateOrder;\n    vm.goToRegisterActivity = goToRegisterActivity;\n    vm.paymentMethodEditingDisabled = paymentMethodEditingDisabled;\n\n    // Methods\n    function callUpdateOrder() {\n      $scope.updateOrder();\n    }\n\n    function addPayment() {\n      if (vm.order.deleted || vm.paymentMethods.length === 0) {\n        return;\n      }\n\n      // If it's a sale made from a registers, check if the activity is closed\n      // If the activity is close, ask to the user in which register activity wants to add the payment\n      if (vm.order.register) {\n        if (vm.order.register_activity_closed) {\n          $mdDialog\n            .show({\n              controller: 'SelectRegisterActivityController',\n              controllerAs: 'vm',\n              templateUrl:\n                'app/main/apps/ecommerce/views/order/dialogs/select-register-activity/select-register-activity.html',\n              parent: angular.element(document.body),\n              clickOutsideToClose: false,\n            })\n            .then(\n              function (registerActivityId) {\n                api.inventories.posOrderPaymentMethods.save(\n                  {\n                    payment_method: vm.paymentMethods[0].id,\n                    payment_method_name: vm.paymentMethods[0].name,\n                    amount: 0.0,\n                    pos_order: vm.order.id,\n                    register_activity: registerActivityId,\n                  },\n                  function (response, callback, status) {\n                    if (status === 201) {\n                      vm.order.pos_order_payment_methods.push(\n                        new PosOrderPaymentMethod(response)\n                      );\n                    }\n                  }\n                );\n              },\n              function () {\n                // Nothing to do\n              }\n            );\n        } else {\n          vm.order.pos_order_payment_methods.push(\n            new PosOrderPaymentMethod({\n              payment_method: vm.paymentMethods[0].id,\n              payment_method_name: vm.paymentMethods[0].name,\n              amount: 0.0,\n              given_amount: 0.0,\n              pos_order: vm.order.id,\n            })\n          );\n        }\n      } else {\n        vm.order.pos_order_payment_methods.push(\n          new PosOrderPaymentMethod({\n            payment_method: vm.paymentMethods[0].id,\n            payment_method_name: vm.paymentMethods[0].name,\n            amount: 0.0,\n            given_amount: 0.0,\n            pos_order: vm.order.id,\n          })\n        );\n      }\n    }\n\n    /**\n     * Updates the payment method. If the activity is closed, asks the user to update it.\n     * @param oldValue\n     * @param posOrderPaymentMethod\n     */\n    function updatePayment() {\n      if (vm.order.deleted || $scope.saving) {\n        return;\n      }\n      // Force 0 to those null amount\n      vm.order.pos_order_payment_methods.forEach(function (popm) {\n        if (!popm.given_amount) {\n          popm.given_amount = 0;\n        }\n      });\n      $scope.updateOrder();\n    }\n\n    function deletePayment(posOrderPaymentMethod) {\n      if (vm.order.deleted) {\n        return;\n      }\n      vm.order.pos_order_payment_methods.splice(\n        vm.order.pos_order_payment_methods.findIndex(function (popm) {\n          if (popm.id === undefined && posOrderPaymentMethod.id === undefined) {\n            return popm.$$hashKey === posOrderPaymentMethod.$$hashKey;\n          }\n          return popm.id === posOrderPaymentMethod.id;\n        }),\n        1\n      );\n\n      updatePayment();\n    }\n\n    function assignPending(paymentMethod) {\n      var totalPending = vm.order.getPendingToAssigned();\n      if (parseFloat(totalPending) !== 0.0) {\n        paymentMethod.given_amount = parseFloat(Utils.twoDecimals(\n          parseFloat(totalPending) + paymentMethod.given_amount\n        ));\n      }\n      updatePayment();\n    }\n\n    function showNoPaymentMethods() {\n      return (\n        (!vm.order.pos_order_payment_methods ||\n          !vm.order.pos_order_payment_methods.length) &&\n        (!vm.order.devolution_cards || !vm.order.devolution_cards.length) &&\n        !vm.order.generated_devolution_card\n      );\n    }\n\n    function goToRegisterActivity(regidterActivityId) {\n      $state.go('app.sale.register_closure', { id: regidterActivityId });\n    }\n\n    function paymentMethodEditingDisabled(popm) {\n      return $scope.saving || (popm.pos_order_refunds && popm.pos_order_refunds.length) || (popm.payment_method_instance && popm.payment_method_instance.payment_gateway) ;\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderFulfillmentCardController', ndPosOrderFulfillmentCardController)\n    .directive('ndPosOrderFulfillmentCard', ndPosOrderFulfillmentCard);\n\n  /** @ngInject */\n  function ndPosOrderFulfillmentCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/pos-order-fulfillment-card/nd-pos-order-fulfillment-card.html',\n      scope: {\n        order: '=',\n        fulfillment: '=',\n        refunds: '=',\n        warehouses: '=',\n        paymentMethods: '=',\n        // Parameters from ScanAndGo\n        shippingBoxes: '=?',\n        sendcloudShippingMethods: '=?',\n        highlightProducts: '=?',\n        enableBarcodeListener: '=?',\n        autoAssignShippingBox: '=?',\n        volumetricWeight: '=?',\n        scanAndGo: '=?',\n        printLabelsAutomatically: '=?',\n        printDeliveriesAutomatically: '=?'\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderFulfillmentCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderFulfillmentCardController(api,\n                                               Utils,\n                                               apiResolver,\n                                               Session,\n                                               $mdToast,\n                                               $window,\n                                               $mdDialog,\n                                               $filter,\n                                               $scope,\n                                               $sce,\n                                               $state,\n                                               $stateParams,\n                                               $document,\n                                               $http,\n                                               $timeout,\n                                               BarcodeService,\n                                               PosOrderProductVariant,\n                                               PosOrderFulfillmentShippingBox,\n                                               PosOrder,\n                                               POS_ORDER_SHIPPING_STATUSES,\n                                               POS_ORDER_PAYMENT_STATUSES,\n                                               ECOMMERCE_PLATFORMS,\n                                               HTTP_STATUS,\n                                               ERROR_CODES,\n                                               INTEGRATION_APP_TYPE,\n                                               byteArrayBufferService,\n                                               SENDCLOUD_SHIPPING_METHODS,\n                                               StockoutService) {\n    var vm = this;\n\n    // Data\n    vm.order = $scope.order;\n    vm.fulfillment = $scope.fulfillment;\n    vm.paymentMethods = $scope.paymentMethods; // TODO remove and get the info asynch when needed\n    vm.warehouses = $scope.warehouses;\n    vm.shippingBoxes = $scope.shippingBoxes;\n    vm.highlightProducts = $scope.highlightProducts;\n    vm.autoAssignShippingBox = $scope.autoAssignShippingBox;\n    //vm.shippingMethods = $scope.sendcloudShippingMethods;\n    vm.scanAndGo = $scope.scanAndGo;\n    vm.shippingBoxesDictByBarcode = {};\n    vm.shippingBoxesDictById = {};\n    vm.shippingMethodSearch = '';\n    vm.selectedSendcloudShippingMethod = null;\n    vm.previousWarehouseId = null;\n\n    vm.defaultShippingBox = getDefaultShippingBox();\n    vm.fulfillmentAvailableWarehouses = [];\n    vm.warehousesDict = {};\n    vm.refundsDict = {};\n    vm.amountUpdated = true;\n    vm.allowToggleWarehouse = false;\n    vm.selectedProductStock = null;\n    vm.showStockDetails = false;\n    vm.sendcloudUrl = 'https://app.sendcloud.com/v2/shipping/list/orders';\n    vm.measurementUnit = Session.company.measurement_unit.toLowerCase();\n    vm.weightUnit = Session.company.weight_unit.toLowerCase();\n    vm.creatingShippingBox = false;\n    vm.printingSendcloudLabels = false;\n    vm.hasSendcloudInstalledAppEnabled = Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n    vm.sendcloudShippingMethodsLoaded = !!$scope.sendcloudShippingMethods;\n    vm.sendcloudShippingMethodsLoading = false;\n    vm.cancelParcel = false;\n\n\n    // Methods\n    vm.allocateFulfillment = allocateFulfillment;\n    vm.shipFulfillment = shipFulfillment;\n    vm.shipSendcloudFulfillment = shipSendcloudFulfillment;\n    vm.pickUpFulfillment = pickUpFulfillment;\n    vm.returnFulfillment = returnFulfillment;\n    vm.receiveReturnFulfillment = receiveReturnFulfillment;\n    vm.showFulfillmentActions = showFulfillmentActions;\n    vm.cancelFulfillment = cancelFulfillment;\n    vm.refundFulfillment = refundFulfillment;\n    vm.refundAndReturnFulfillment = refundAndReturnFulfillment;\n    vm.assignBatches = assignBatches;\n\n    vm.pendingFulfillment = pendingFulfillment;\n    vm.updateFulfillment = updateFulfillment;\n    vm.checkMinMaxAmount = checkMinMaxAmount;\n    vm.refundUploadAmountChanged = refundUploadAmountChanged;\n    vm.isValid = isValid;\n    vm.changeWarehouse = changeWarehouse;\n    vm.viewStock = viewStock;\n    vm.isExternalShipment = isExternalShipment;\n    vm.cancel = cancel;\n    vm.printDelivery = printDelivery;\n    vm.goPickingAndPackingView = goPickingAndPackingView;\n    vm.showAndHideBundleVariants = showAndHideBundleVariants;\n    vm.getPopvCover = getPopvCover;\n    vm.canAddShippingBox = canAddShippingBox;\n    vm.canEditShippingBoxes = canEditShippingBoxes;\n    vm.canReadShippingBoxes = canReadShippingBoxes;\n    vm.lineWeightDisabled = lineWeightDisabled;\n    vm.canEditShippingMethods = canEditShippingMethods;\n    vm.showLineWeight = showLineWeight;\n    vm.createShippingBox = createShippingBox;\n    vm.updateShippingBox = updateShippingBox;\n    vm.removeShippingBox = removeShippingBox;\n    vm.getPosOrderFulfillmentProductVariantRowClasses = getPosOrderFulfillmentProductVariantRowClasses;\n    vm.getWeightUnit = getWeightUnit;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.storeShippingMethod = storeShippingMethod;\n    vm.showBoxInLines = showBoxInLines;\n    vm.showBoxAndWeightInLines = showBoxAndWeightInLines;\n    vm.getVolumetricWeight = getVolumetricWeight;\n    vm.getRealWeight = getRealWeight;\n    vm.packWithSendcloud = packWithSendcloud;\n    vm.showSendToSendcloud = showSendToSendcloud;\n    vm.labelToSendcloud = labelToSendcloud;\n    vm.storePrintLabelsAutomatically = storePrintLabelsAutomatically;\n    vm.storePrintDeliveriesAutomatically = storePrintDeliveriesAutomatically;\n    vm.storeVolumetricWeight = storeVolumetricWeight;\n    vm.cancelItem = cancelItem;\n    vm.getLabel = getLabel;\n    vm.isReturnedInStore = isReturnedInStore;\n    vm.showSaleDialog = showSaleDialog;\n    vm.initCustomSourceWarehouse = initCustomSourceWarehouse;\n\n    init();\n\n    function init() {\n      vm.printLabelsAutomatically = localStorage.getItem(Session.company.id + '::ScanAndGoController::printLabelsAutomatically') === 'true';\n      vm.printDeliveriesAutomatically = localStorage.getItem(Session.company.id + '::ScanAndGoController::printDeliveriesAutomatically') === 'true';\n      vm.volumetricWeight = localStorage.getItem(Session.company.id + '::ScanAndGoController::volumetricWeight') === 'true';\n\n      vm.warehouses.forEach(function(warehouse) {\n        vm.warehousesDict[warehouse.id] = warehouse;\n\n        if (warehouse.id !== vm.order.source_warehouse) {\n          vm.fulfillmentAvailableWarehouses.push(warehouse.id);\n        }\n      });\n\n      vm.order.pos_order_product_variants.forEach(function(posOrderProductVariant) {\n        if (posOrderProductVariant.is_bundle) {\n          posOrderProductVariant.showBundle = JSON.parse(localStorage.getItem(Session.company.id + '_' + Session.user.id + '::showBundle'));\n        }\n      });\n\n      vm.shippingBoxes.forEach(function(shippingBox) {\n        vm.shippingBoxesDictByBarcode[shippingBox.barcode] = shippingBox;\n        vm.shippingBoxesDictById[shippingBox.id] = shippingBox;\n      });\n\n      vm.barcodeListenerCallbackId = BarcodeService.subscribeBarcode(vm.barcodeListenerCallback);\n      $scope.$on('$destroy', function() {\n        BarcodeService.unsubscribeBarcode(vm.barcodeListenerCallbackId);\n      });\n\n      if (vm.autoAssignShippingBox && vm.shippingBoxes.length &&\n        vm.fulfillment.pos_order_fulfillment_shipping_boxes.length === 0) {\n        createShippingBox(true);\n      }\n\n      vm.shippingMethodsWatch = $scope.$watch('sendcloudShippingMethods', function(newValue, oldValue) {\n        if (vm.selectedSendcloudShippingMethod === null) {\n          restoreShippingMethod();\n        }\n      });\n\n      $scope.$on('$destroy', function() {\n        vm.shippingMethodsWatch();\n      });\n\n      setFulfillmentProductVariantsStockoutData();\n    }\n\n    function initCustomSourceWarehouse() {\n      if (vm.fulfillment.custom_source_warehouse === null) {\n        vm.fulfillment.custom_source_warehouse = vm.warehousesDict[vm.order.source_warehouse].id\n      }\n    }\n\n    function storeShippingMethod() {\n      if (vm.selectedSendcloudShippingMethod) {\n        localStorage.setItem(Session.company.id + '::ndPosOrderFulfillmentCardController::selectedSendcloudShippingMethod', vm.selectedSendcloudShippingMethod);\n      }\n    }\n\n    function restoreShippingMethod() {\n      var selectedSendcloudShippingMethodId = localStorage.getItem(Session.company.id + '::ndPosOrderFulfillmentCardController::selectedSendcloudShippingMethod');\n      if (selectedSendcloudShippingMethodId) {\n        vm.selectedSendcloudShippingMethod = +selectedSendcloudShippingMethodId;\n      }\n    }\n\n    function createShippingBox(autoAssignToAllProducts, shippingBox) {\n      if (vm.creatingShippingBox) {\n        return;\n      }\n\n      vm.creatingShippingBox = true;\n      var shippingBoxId = vm.defaultShippingBox ? vm.defaultShippingBox.id : null;\n      if (shippingBox) {\n        shippingBoxId = shippingBox.id;\n      }\n\n      api.inventories.pickingPackingPackingOrderShippingBoxes.save(\n        new PosOrderFulfillmentShippingBox({\n          shipping_box: shippingBoxId,\n          packing_order: null\n        }), function(shippingBox, fn, status) {\n          vm.creatingShippingBox = false;\n          if (status === HTTP_STATUS.HTTP_201_CREATED) {\n            vm.fulfillment.addPosOrderFulfillmentShippingBox(shippingBox);\n            if (autoAssignToAllProducts) {\n              vm.fulfillment.getVisiblePosOrderFulfillmentProductVariantInstances().forEach(function(pofpv) {\n                if (!pofpv.pos_order_fulfillment_shipping_box && pofpv.uploadAmount) {\n                  pofpv.pos_order_fulfillment_shipping_box = shippingBox.id;\n                }\n              });\n              checkPrintLabelsAutomatically();\n            }\n          }\n        });\n    }\n\n    function updateShippingBox(posOrderFulfillmentShippingBox) {\n      api.inventories.posOrderFulfillmentShippingBoxes.update(\n        posOrderFulfillmentShippingBox,\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.fulfillment.updatePosOrderFulfillmentShippingBox(results);\n          }\n        });\n    }\n\n    function removeShippingBox(pofsb) {\n      if (pofsb.removing) {\n        return;\n      }\n\n      pofsb.removing = true;\n      api.inventories.posOrderFulfillmentShippingBoxes.delete(\n        {\n          id: pofsb.id\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            pofsb.removing = false;\n            vm.fulfillment.removePosOrderFulfillmentShippingBox(pofsb.id);\n          }\n        });\n    }\n\n\n    function getDefaultShippingBox() {\n      if (vm.shippingBoxes.length === 0) {\n        return null;\n      }\n      if (vm.shippingBoxes.length === 1) {\n        return vm.shippingBoxes[0];\n      }\n      return vm.defaultShippingBox || vm.shippingBoxes[0];\n    }\n\n    function showAndHideBundleVariants(pofpv) {\n      pofpv.pos_order_product_variant_instance.showBundle = !pofpv.pos_order_product_variant_instance.showBundle;\n      localStorage.setItem(Session.company.id + '_' + Session.user.id + '::showBundle', JSON.stringify(pofpv.pos_order_product_variant_instance.showBundle));\n    }\n\n    function getPopvCover(popv) {\n      if (popv.cover_thumbnail) {\n        return popv.cover_thumbnail;\n      } else if (popv.is_gift_card) {\n        return '/assets/images/wallet-giftcard.b55a1923.svg';\n      } else if (popv.is_bundle) {\n        return '/assets/images/custom-material-design-icons/package-variant-closed-3.5badf57d.svg';\n      } else {\n        return '/assets/images/package-variant-closed.9c71cbbe.png';\n      }\n    }\n\n    // Functions\n    function isValid(fulfillment) {\n      if (fulfillment.updatingAction === 'refund' || fulfillment.updatingAction === 'refund_return') {\n        if (!fulfillment.refundPaymentMethod) {\n          fulfillment.refundPaymentMethodError = true;\n          return false;\n        }\n        if (fulfillment.getTotalRefundUploadAmounts() === 0) {\n          fulfillment.refundProductsError = true;\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function cancelFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowCancel()) {\n        fulfillment.updatingAction = 'cancel';\n        fulfillment.updatingAmounts = true;\n        // Set uploadAmount to 0 to avoid human errors\n        fulfillment.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          pofpv.uploadAmount = 0;\n          pofpv.updateTotal();\n        });\n        vm.amountUpdated = false;\n      }\n    }\n\n    function refundFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowRefund()) {\n        fulfillment.updatingAmounts = true;\n        fulfillment.updatingAction = 'refund';\n      }\n    }\n\n    function refundAndReturnFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowRefundAndReturn() && vm.order.allowRefundAndReturn()) {\n        fulfillment.updatingAmounts = true;\n        fulfillment.updatingAction = 'refund_return';\n      }\n    }\n\n    function assignBatches(fulfillment) {\n      if (vm.saving) {\n        return;\n      }\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('STOCK_DETAILS.ASSIGN_BATCHES'))\n        .textContent($filter('translate')('STOCK_DETAILS.ASSIGN_BATCHES_CONFIRM'))\n        .ok($filter('translate')('USERS.CONFIRM'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        vm.saving = true;\n\n        $timeout(function() {\n          if (!vm.saving) {\n            return;\n          }\n\n          api.inventories.posOrderFulfillment.assignBatches(\n            { id: fulfillment.id },\n            function(results, fn, status) {\n              vm.saving = false;\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('STOCK_DETAILS.BATCHES_ASSIGNED_SUCCESS'))\n                  .action($filter('translate')('TOOLBAR.REFRESH'))\n                  .hideDelay(5000)\n                  .highlightAction(true)\n                  .position('top right')).then(function(response) {\n                  if (response === 'ok') {\n                    location.reload();\n                  }\n                });\n              } else if (status === 400 && results && results.error) {\n                $mdToast.show($mdToast.simple()\n                  .textContent($filter('translate')('ERRORS.' + results.error))\n                  .position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple()\n                  .textContent('Error: ' + $filter('translate')('STOCK_DETAILS.ERROR_ASSIGNING_BATCHES'))\n                  .position('top right'));\n              }\n            }\n          );\n        }, 100);\n      });\n    }\n\n    function allocateFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowAllocate()) {\n        fulfillment.updatingAmounts = true;\n        fulfillment.updatingAction = 'allocate';\n      }\n    }\n\n    function shipFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowShip() || fulfillment.allowBackToShipped) {\n        fulfillment.setUpdateActionShip();\n      }\n    }\n\n    function shipSendcloudFulfillment(fulfillment) {\n      vm.shipFulfillment(fulfillment);\n      if (fulfillment.updatingAmounts) {\n        fulfillment.isSendcloudShipment = true;\n      }\n\n    }\n\n    function pickUpFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowPickUp() || fulfillment.allowBackToPickedUp()) {\n        fulfillment.setUpdateActionPickUp();\n      }\n    }\n\n    function returnFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowReturn() || fulfillment.allowBackToReturned()) {\n        fulfillment.updatingAmounts = true;\n        fulfillment.updatingAction = 'return';\n        // Set uploadAmount to 0 to avoid human errors\n        fulfillment.pos_order_fulfillment_product_variant_instances.forEach(function(pofpv) {\n          pofpv.uploadAmount = 0;\n          pofpv.updateTotal();\n        });\n        vm.amountUpdated = false;\n      }\n    }\n\n    function receiveReturnFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowReceiveReturn()) {\n        fulfillment.updatingAmounts = true;\n        fulfillment.updatingAction = 'receive_return';\n      }\n    }\n\n    function pendingFulfillment(fulfillment) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (fulfillment.allowBackToPending()) {\n        fulfillment.updatingAmounts = true;\n        fulfillment.updatingAction = 'pending';\n      }\n    }\n\n    function showFulfillmentActions(fulfillment) {\n      return fulfillment.allowCancel() || fulfillment.allowRefund() || fulfillment.allowWarehouseChange();\n    }\n\n    function checkMinMaxAmount(pofpv) {\n      vm.amountUpdated = true;\n      pofpv.amountChanged();\n    }\n\n    function refundUploadAmountChanged(pofpv) {\n      pofpv.setRefundUploadAmount(pofpv.refundUploadAmount);\n    }\n\n    function changeFulfillment(fulfillment, callback) {\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      if (!isValid(fulfillment)) {\n        return;\n      }\n\n      var payload = {\n        id: vm.order.id,\n        fulfillment: fulfillment.id,\n        amount_dict: fulfillment.getUpdatingAmountsDict(),\n        total_refund_dict: fulfillment.getUpdatingTotalRefundDict(),\n        refund_payment_method: fulfillment.refundPaymentMethod,\n        action: vm.scanAndGo ? 'pack' : fulfillment.updatingAction,\n\n        custom_source_warehouse: vm.scanAndGo ? null : fulfillment.custom_source_warehouse,\n        print_labels: vm.scanAndGo,\n        weight_dict: vm.scanAndGo ? fulfillment.getUpdatingWeightDict() : null,\n        shipping_box_dict: vm.scanAndGo ? fulfillment.getUpdatingShippingBoxDict() : null,\n        sendcloud_shipping_method_id: vm.selectedSendcloudShippingMethod,\n        volumetric_weight: vm.volumetricWeight,\n        print_deliveries: vm.printDeliveriesAutomatically\n      };\n      if (fulfillment.isUpdateActionShip() || fulfillment.isUpdateActionPickUp()) {\n        payload.pos_order_fulfillment_product_variants = fulfillment.pos_order_fulfillment_product_variant_instances;\n      }\n\n      vm.saving = true;\n      var apiToUse = api.inventories.posOrdersFulfillment;\n      if (vm.scanAndGo) {\n        apiToUse = api.inventories.posOrderFulfillment;\n        payload.id = fulfillment.id;\n      }\n\n      apiToUse.update(payload, callback);\n    }\n\n    function changeWarehouse(fulfillment) {\n      vm.previousWarehouseId = fulfillment.custom_source_warehouse !== null ? fulfillment.custom_source_warehouse : vm.order.source_warehouse.id;\n      if (!vm.order.hasOrderEditPermission()) {\n        return;\n      }\n      fulfillment.updatingAmounts = true;\n      fulfillment.updatingAction = 'change_warehouse';\n    }\n\n    function viewStock(popv, ev) {\n      apiResolver.resolve('inventories.products@get', {\n        'id': popv.product,\n        'serializer': 'ProductStockSerializer'\n      }).then(function (response) {\n        vm.selectedProductStock = response;\n        vm.selectedProductVariant = popv.product_variant;\n        vm.showStockDetails = true;\n\n        $mdDialog.show({\n          controller: 'FulFillmentStockDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/directives/pos-order-fulfillment-card/fulfillment-stock-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true,\n          focusOnOpen: false,\n          locals: {\n            params: {\n              selectedProductStock: vm.selectedProductStock,\n              selectedProductVariant: vm.selectedProductVariant,\n              showStockDetails: vm.showStockDetails,\n              warehouses: vm.warehouses\n            }\n          }\n        });\n\n      });\n    }\n\n    function isExternalShipment(fulfillment) {\n      return (fulfillment.sendcloud_pos_order_fulfillment_data || fulfillment.isSendcloudShipment) && vm.hasSendcloudInstalledAppEnabled;\n    }\n\n    function cancel(fulfillment) {\n      if (vm.scanAndGo) {\n        $scope.$emit('ndPosOrderFulfillmentCardController::pickingFinished');\n        vm.scanAndGo = false;\n      }\n      vm.highlightProducts = false;\n      fulfillment.resetUpdatingAmounts();\n      fulfillment.isSendcloudShipment = false;\n\n      if (vm.previousWarehouseId !== null && fulfillment.custom_source_warehouse !== vm.previousWarehouseId) {\n        fulfillment.custom_source_warehouse = vm.previousWarehouseId;\n      }\n    }\n\n    function goPickingAndPackingView(fulfillment) {\n      if (fulfillment.packing_order) {\n        $state.go('app.inventory.picking_packing.packing_order.products', { id: fulfillment.packing_order });\n      } else if (fulfillment.picking_order) {\n        $state.go('app.inventory.picking_packing.picking_order', { id: fulfillment.picking_order[fulfillment.picking_order.length - 1] });\n      }\n    }\n\n    function printDelivery(fulfillment) {\n      vm.generating_pdf = true;\n      api.inventories.posOrderFulfillment.get(\n        {\n          id: fulfillment.id,\n          action: 'get-pdf-file'\n        },\n        function (response, fn, status) {\n          var b64 = '';\n          for (var i = 0; response[i] !== undefined; i++) {\n            b64 += response[i];\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.generating_pdf = false;\n            var sampleArr = byteArrayBufferService.base64ToArrayBuffer(b64);\n            var fileName = vm.order.autocode + '-' + fulfillment.number;\n            byteArrayBufferService.saveByteArray(fileName, sampleArr);\n          }\n        }\n      );\n    }\n\n    function canAddShippingBox() {\n      return vm.scanAndGo && vm.shippingBoxes.length;\n    }\n\n    function canEditShippingBoxes() {\n      return vm.scanAndGo && vm.fulfillment.canEditShippingBoxes();\n    }\n\n    function canEditShippingMethods() {\n      return vm.scanAndGo &&\n        vm.fulfillment.canEditShippingMethods() &&\n        $scope.sendcloudShippingMethods &&\n        $scope.sendcloudShippingMethods.length > 0;\n    }\n\n    function showLineWeight() {\n      return (vm.scanAndGo && !vm.volumetricWeight) ||\n        (!vm.scanAndGo && vm.fulfillment.pos_order_fulfillment_product_variant_instances.some(function (pofpv) {\n          return pofpv.weight;\n        }));\n    }\n\n    function canReadShippingBoxes() {\n      return !canEditShippingBoxes() &&\n        vm.fulfillment.pos_order_fulfillment_product_variant_instances.some(function (pofpv) {\n          return !!pofpv.pos_order_fulfillment_shipping_box || pofpv.weight;\n        });\n    }\n\n    function lineWeightDisabled(pofpv) {\n      return vm.saving || !vm.scanAndGo && pofpv.weight;\n    }\n\n\n    function isSendcloudAPIResponse(message) {\n      return message.includes('Sendcloud') && message.includes('API');\n    }\n\n    function getPosOrderFulfillmentProductVariantRowClasses(pofpv) {\n      return {\n        'md-orange-50-bg': pofpv.amount < 0,\n        'pofpv-already-refunded': (pofpv.maxRefundUploadAmount === 0 && vm.fulfillment.isUpdatingActionRefund()),\n        'filled': vm.highlightProducts && pofpv.amount === pofpv.uploadAmount\n      };\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (!$scope.enableBarcodeListener) {\n        return;\n      }\n\n      if (vm.shippingBoxesDictByBarcode[barcode]) {\n        createShippingBox(true, vm.shippingBoxesDictByBarcode[barcode]);\n      } else {\n        var alreadyScanned = false;\n        var pofpvNotFound = vm.fulfillment.getVisiblePosOrderFulfillmentProductVariantInstances().every(function (pofpv) {\n          if (pofpv.pos_order_product_variant_instance.barcode === barcode) {\n            if (pofpv.isValidUploadAmount(pofpv.uploadAmount + 1)) {\n              pofpv.uploadAmount += 1;\n              checkMinMaxAmount(pofpv);\n              return false;\n            } else {\n              alreadyScanned = true;\n            }\n          }\n          return true;\n        });\n        if (alreadyScanned) {\n          $scope.$emit('ndPosOrderFulfillmentCardController::barcodeAlreadyScanned', {\n            barcode: barcode,\n            fulfillmentId: vm.fulfillment.id\n          });\n        } else if (pofpvNotFound) {\n          $scope.$emit('ndPosOrderFulfillmentCardController::barcodeNotFound', {\n            barcode: barcode,\n            fulfillmentId: vm.fulfillment.id\n          });\n        }\n      }\n    }\n\n    function onSelectorOpen() {\n      $document.find('md-select-header input[type=\"search\"]').on('keydown', function (e) {\n        e.stopPropagation();\n      });\n    }\n\n    function showBoxAndWeightInLines() {\n      return vm.canEditShippingBoxes() || vm.canReadShippingBoxes() || vm.showLineWeight();\n    }\n\n    function showBoxInLines(pofpv) {\n      return vm.fulfillment.pos_order_fulfillment_shipping_box_instances.length ||\n        pofpv.pos_order_fulfillment_shipping_box;\n    }\n\n    function getVolumetricWeight(pofsb, parseString) {\n      if (pofsb.shipping_box && vm.shippingBoxesDictById[pofsb.shipping_box]) {\n        var volumetricWeight = vm.shippingBoxesDictById[pofsb.shipping_box].getVolumetricWeight();\n        if (volumetricWeight) {\n          return parseString ? $filter('number')(volumetricWeight, 2) : volumetricWeight;\n        }\n\n        return parseString ? '' : 0;\n      }\n    }\n\n    function getRealWeight(parseString) {\n      var realWeight = vm.fulfillment.getRealWeight();\n      if (realWeight) {\n        return parseString ? $filter('number')(realWeight, 2) : realWeight;\n      }\n      return parseString ? '' : 0;\n    }\n\n    function getWeightUnit(pofpv) {\n      if (!pofpv || !pofpv.weight_unit) {\n        return Session.company.weight_unit.toLowerCase();\n      }\n      return ('' + pofpv.weight_unit).toLowerCase();\n    }\n\n    function updateFulfillment(fulfillment) {\n      changeFulfillment(\n        fulfillment,\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.order = Object.assign(vm.order, new PosOrder(results));\n          } else if (status === HTTP_STATUS.HTTP_405_METHOD_NOT_ALLOWED) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDER.ERROR_METHOD_NOT_ALLOWED')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && results.error === ERROR_CODES.ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDER.ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN')).position('top right'));\n          } else if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n            if (results.error) {\n              console.log(results);\n              var error_code = results.error;\n              var product_variant_code = results.product_variant_code || null;\n              $mdDialog.show($mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('ERRORS.' + error_code) + (product_variant_code ? ' (' + product_variant_code + ')' : ''))\n              .htmlContent($filter('translate')('ERRORS.' + error_code + '_TEXT'))\n                .ok($filter('translate')('GENERAL.CLOSE')));\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.saving = false;\n        });\n    }\n\n    function packWithSendcloud(fulfillment) {\n      if (!vm.scanAndGo) {\n        return;\n      }\n      if (!vm.selectedSendcloudShippingMethod) {\n        return;\n      }\n\n      changeFulfillment(\n        fulfillment,\n        function (response, fn, status) {\n          vm.printingSendcloudLabels = false;\n          vm.saving = false;\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n\n            var b64 = '';\n            for (var i = 0; response[i] !== undefined; i++) {\n              b64 += response[i];\n            }\n\n            if (vm.printLabelsAutomatically) {\n              $scope.$emit('ndPrinter::printSendcloudLabel', {\n                b64: b64\n              });\n              // Otherwise we just open it in a new tab and download the file\n            } else {\n              var styles = '@media print { @page {size: auto; margin:0; }}';\n              var embedElement = '<embed width=\"100%\" height=\"100%\" type=\"application/pdf\" src=\"data:application/pdf;base64,' + b64 + '\" />';\n              var popupWindow = window.open('', '_blank', 'width=1000,height=700,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');\n              popupWindow.document.write('<html><head><style>' + styles + '</style></head><body onload=\"window.print()\">' + embedElement + '</body></html>');\n              popupWindow.document.close();\n            }\n\n            $scope.$emit('ndPosOrderFulfillmentCardController::pickingFinished');\n            api.inventories.posOrders.get(\n              {\n                id: vm.order.id\n              },\n              function (results, fn, status) {\n                if (status === HTTP_STATUS.HTTP_200_OK) {\n                  vm.order = Object.assign(vm.order, new PosOrder(results));\n                }\n              });\n          } else {\n            if (status === HTTP_STATUS.HTTP_400_BAD_REQUEST && response.error === ERROR_CODES.ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN) {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDER.ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN')).position('top right'));\n            } else if (response.errors) {\n              var errors = '';\n              response.errors.forEach(\n                function (error) {\n                  var errorText = 'ERRORS.' + error;\n                  var translatedError = $filter('translate')(errorText);\n                  errors += errorText === translatedError ? error : translatedError;\n                }\n              );\n              $mdToast.show($mdToast.simple().textContent(errors).position('top right').hideDelay(7000));\n            } else {\n              if (response.Error) {\n                var jsonResponse = JSON.parse(response.Error.substring(response.Error.indexOf('{')));\n                $mdToast.show($mdToast.simple().textContent(jsonResponse.error.message).position('top right'));\n              } else {\n                $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n              }\n            }\n          }\n        });\n    }\n\n    function checkPrintLabelsAutomatically() {\n      if (!vm.printLabelsAutomatically) {\n        return;\n      }\n      if (vm.fulfillment.isPackingCompleted()) {\n        packWithSendcloud(vm.fulfillment);\n      }\n    }\n\n    function showSendToSendcloud() {\n      return vm.fulfillment.isAllocated() &&\n        !vm.scanAndGo &&\n        vm.hasSendcloudInstalledAppEnabled && !vm.fulfillment.packing_order_sendcloud_data.length;\n    }\n\n    function getShippingBoxes() {\n      if ($scope.shippingBoxes && $scope.shippingBoxes.length) {\n        return;\n      }\n      api.inventories.shippingBoxes.list(\n        {},\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $scope.shippingBoxes = results.results;\n          }\n        });\n    }\n\n    function getSendcloudShippingMethods() {\n      vm.sendcloudShippingMethodsLoaded = false;\n      if ($scope.sendcloudShippingMethods && $scope.sendcloudShippingMethods.length) {\n        vm.sendcloudShippingMethodsLoaded = true;\n        return;\n      }\n\n      vm.sendcloudShippingMethodsLoading = true;\n\n      api.inventories.posOrderFulfillment.list(\n        {\n          id: vm.fulfillment.id,\n          action: 'get-sendcloud-shipping-methods'\n        }, function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            response.every(function (shippingMethod) {\n              if (shippingMethod.id === SENDCLOUD_SHIPPING_METHODS.SENDCLOUD_UNSTAMPED_LETTER) {\n                shippingMethod.name = $filter('translate')('SCAN_AND_GO.' + SENDCLOUD_SHIPPING_METHODS[shippingMethod.id]);\n                return true;\n              }\n              return false;\n            });\n            response.unshift({\n              id: SENDCLOUD_SHIPPING_METHODS.CUSTOM_SHIPPING_METHOD_CHECKOUT,\n              name: $filter('translate')('SCAN_AND_GO.' + SENDCLOUD_SHIPPING_METHODS[SENDCLOUD_SHIPPING_METHODS.CUSTOM_SHIPPING_METHOD_CHECKOUT])\n            });\n            $scope.sendcloudShippingMethods = response;\n            vm.sendcloudShippingMethodsLoading = false;\n            vm.sendcloudShippingMethodsLoaded = true;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('PICKING.ERROR_GETTING_SEND_CLOUD_SHIPPING_METHODS')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function labelToSendcloud() {\n      getShippingBoxes();\n      getSendcloudShippingMethods();\n      vm.highlightProducts = true;\n      $scope.enableBarcodeListener = true;\n      vm.scanAndGo = true;\n      vm.fulfillment.pos_order_fulfillment_product_variant_instances.forEach(function (pofpv) {\n        pofpv.uploadAmount = 0;\n      });\n      vm.fulfillment.updatingAmounts = true;\n      vm.fulfillment.updatingAction = 'pack';\n    }\n\n    function storePrintLabelsAutomatically() {\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::printLabelsAutomatically', vm.printLabelsAutomatically.toString());\n    }\n\n    function storePrintDeliveriesAutomatically() {\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::printDeliveriesAutomatically', vm.printDeliveriesAutomatically.toString());\n    }\n\n    function storeVolumetricWeight() {\n      localStorage.setItem(Session.company.id + '::ScanAndGoController::volumetricWeight', vm.volumetricWeight.toString());\n    }\n\n    function cancelItem(spofd) {\n      var title = $filter('translate')('ORDERS.CANCEL_PREPARATION', {register: vm.order.autocode});\n      var message = $filter('translate')('ORDERS.CANCEL_PREPARATION_MSG', {register: vm.order.autocode});\n      var okButton = $filter('translate')('ORDERS.CANCEL_PREPARATION_BUTTON');\n      showCancelDialog(cancelPrepared, title, message, okButton, spofd);\n    }\n\n    function showCancelDialog(callback, title, message, ok, spofd) {\n      var confirm = $mdDialog.confirm()\n        .title(title)\n        .htmlContent(message)\n        .ok(ok || title)\n        .cancel($filter('translate')('GENERAL.CLOSE'));\n      $mdDialog.show(confirm).then(function () {\n        vm.cancelParcel = true;\n        callback(spofd);\n      }, function () {\n      });\n    }\n\n    function getLabel(sendcloud_pos_order_fulfillment_data) {\n      var externalParcelsIds = [sendcloud_pos_order_fulfillment_data.external_parcels_id];\n      vm.printingSendcloudLabels = true;\n      var data = {\n        id: vm.fulfillment.packing_order,\n        option: 'get-external-labels'\n      };\n      if (externalParcelsIds) {\n        data.external_parcels_ids = externalParcelsIds.join(',');\n      }\n      api.inventories.pickingPackingPackingOrders.get(\n        data,\n        function (response, fn, status) {\n          var b64 = '';\n          for (var i = 0; response[i] !== undefined; i++) {\n            b64 += response[i];\n          }\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var base64PDF = b64;\n            var styles = '@media print { @page {size: auto; margin:0; }}';\n            var embedElement = '<embed width=\"100%\" height=\"100%\" type=\"application/pdf\" src=\"data:application/pdf;base64,' + base64PDF + '\" />';\n            var popupWindow = window.open('', '_blank', 'width=1000,height=700,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');\n            popupWindow.document.write('<html><head><style>' + styles + '</style></head><body onload=\"window.print()\">' + embedElement + '</html>');\n            popupWindow.document.close();\n            vm.printingSendcloudLabels = false;\n          } else {\n            vm.printingSendcloudLabels = false;\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    }\n\n    function isReturnedInStore(devolutions_of) {\n      return devolutions_of.length !== 0;\n    }\n\n    function showSaleDialog(id) {\n      if (vm.dialogOpened) {\n        return;\n      }\n\n      vm.dialogOpened = true;\n\n      $mdDialog\n        .show({\n          controller: 'SalePosOrderDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          multiple: true,\n          locals: {\n            previousPosOrderId: null,\n          },\n          resolve: {\n            PosOrderData: function (apiResolver) {\n              return apiResolver.resolve('inventories.posOrders@get', {\n                id: id,\n                serializer: 'PosOrderWithDevolutionsSerializer',\n              });\n            },\n          },\n        })\n        .then(\n          function (refresh) {\n            vm.dialogOpened = false;\n            if (refresh) {\n              if (vm.currentView === vm.POS_ORDERS_VIEW) {\n                vm.dtInstanceViewPO.DataTable.draw();\n              } else if (\n                vm.currentView === vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW\n              ) {\n                vm.dtInstanceViewPOPV.DataTable.draw();\n              }\n            }\n          },\n          function () {\n            vm.dialogOpened = false;\n          }\n        );\n    }\n\n    function cancelPrepared(packingOrderSendcloudData) {\n      api.integrationApps.packingOrderSendcloudData.delete(\n        {\n          id: packingOrderSendcloudData.id,\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_204_NO_CONTENT) {\n            vm.fulfillment.packing_order = null;\n            vm.fulfillment.packing_order_sendcloud_data = vm.fulfillment.packing_order_sendcloud_data.filter(function (spofd) {\n              return spofd.id !== packingOrderSendcloudData.id;\n            })\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDERS.CANCEL_PREPARATION_SUCCESS')).position('top right'));\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n          vm.cancelParcel = false;\n        }\n      );\n    }\n\n    function setFulfillmentProductVariantsStockoutData() {\n      if (vm.fulfillment) {\n        StockoutService.setStockoutDataFromFulfillment(vm.fulfillment);\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.sale')\n    .controller('FulFillmentStockDialogController', FulFillmentStockDialogController);\n\n  /** @ngInject */\n  function FulFillmentStockDialogController($scope, api, $mdDialog, HTTP_STATUS, params) {\n    var vm = this;\n    // Data\n\n    // Methods\n    vm.cancel = cancel;\n    vm.selectedProductStock = params.selectedProductStock;\n    vm.selectedProductVariant = params.selectedProductVariant;\n    vm.showStockDetails = params.showStockDetails;\n    vm.warehouses = params.warehouses;\n\n    if (!vm.selectedProductStock) {\n      api.inventories.products.get(\n        {\n          serializer: 'ProductStockSerializer',\n          id: params.selectedProductId\n        },\n        function (results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.selectedProductStock = results;\n          }\n        }\n      );\n    }\n\n    if (!vm.warehouses) {\n      api.inventories.warehouses.list(\n        {}, function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.warehouses = results.results;\n          }\n        }\n      );\n    }\n\n    //Functions\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderContactCardController', ndPosOrderContactCardController)\n    .directive('ndPosOrderContactCard', ndPosOrderContactCard);\n\n  /** @ngInject */\n  function ndPosOrderContactCard() {\n    return {\n      restrict: 'E', templateUrl: 'app/directives/pos-order-contact-card/nd-pos-order-contact-card.html',\n      scope: {\n        order: '=',\n        saving: '=',\n        updateOrder: '&',\n        hideBillingAddress: '=',\n      },\n      controllerAs: 'vm',\n      controller: 'ndPosOrderContactCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndPosOrderContactCardController(api, Utils, apiResolver, Session, $document, $mdToast, $window, $mdDialog, $filter, $scope, HTTP_STATUS, COUNTRIES_DICT) {\n    var vm = this;\n\n    // Data\n    vm.countries = COUNTRIES_DICT;\n\n    vm.order = $scope.order;\n    vm.contactId = $scope.order.customer;\n    vm.paymentMethods = $scope.paymentMethods;\n    vm.shippingAddressId = $scope.order.shipping_address;\n    vm.billingAddressId = $scope.order.billing_address;\n    vm.hideBillingAddress = $scope.hideBillingAddress;\n\n    vm.contact = null;\n    vm.addingContact = false\n    vm.fetchingContact = false;\n    vm.shippingAddress = null;\n    vm.fetchingShippingAddress = false;\n    vm.billingAddress = null;\n    vm.fetchingBillingAddress = false;\n\n    // Methods\n    vm.changeContact = changeContact;\n    vm.contactSelected = contactSelected;\n    vm.showCustomerPopup = showCustomerPopup;\n    vm.changeShippingAddress = changeShippingAddress;\n    vm.changeBillingAddress = changeBillingAddress;\n    vm.shippingAddressChanged = shippingAddressChanged;\n    vm.billingAddressChanged = billingAddressChanged;\n    vm.showNewAddressDialog = showNewAddressDialog;\n    vm.closeDialog = closeDialog;\n    vm.saveAddress = saveAddress;\n    vm.updateOrder = updateOrder;\n\n    init();\n\n    // Functions\n    function init() {\n      if (vm.contactId) {\n        getContact(true);\n      }\n\n      if (vm.shippingAddressId) {\n        vm.fetchingShippingAddress = true;\n        api.inventories.postalAddresses.get({id: vm.shippingAddressId}, function (result, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.shippingAddress = result;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDER.SHIPPING_ADDRESS_NOT_FOUND')).position('top right'));\n          }\n          vm.fetchingShippingAddress = false;\n        });\n      }\n      if (vm.billingAddressId && !vm.hideBillingAddress) {\n        vm.fetchingBillingAddress = true;\n        api.inventories.postalAddresses.get({id: vm.billingAddressId}, function (result, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            vm.billingAddress = result;\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDER.BILLING_ADDRESS_NOT_FOUND')).position('top right'));\n          }\n          vm.fetchingBillingAddress = false;\n        });\n      }\n      vm.canEditContact = vm.order.canEditContact();\n    }\n\n    function changeContact() {\n      if (!vm.canEditContact) {\n        return\n      }\n\n      if (vm.contact) {\n        vm.contact = null;\n        vm.shippingAddress = null;\n        vm.billingAddress = null;\n      }\n      vm.addingContact = true;\n      updateOrder();\n    }\n\n    function contactSelected(event) {\n      vm.addingContact = false;\n      if (vm.contact) {\n        $scope.contactId = vm.contact.id;\n      } else {\n        $scope.contactId = null;\n      }\n      updateOrder();\n    }\n\n    function showCustomerPopup(ev) {\n      if(vm.openingCustomerDialog){\n        return;\n      }\n      vm.openingCustomerDialog = true;\n      $mdDialog.show({\n        controller: 'ContactDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n        locals: {\n          forceCustomer: false, forceNaturalPersonType: false\n        },\n        resolve: {\n          ContactsData: function (apiResolver) {\n            return apiResolver.resolve('inventories.contacts@get', {id: vm.contact.id});\n          }, PricingTiersData: function (apiResolver) {\n            return apiResolver.resolve('inventories.pricingTiers@get');\n          }, PaymentMethodsData: function (apiResolver) {\n            return apiResolver.resolve('accounting.paymentMethods@get');\n          }\n        }\n      }).then(function (contact) {\n        // Get the contact againt to load possible changes\n        vm.contact = contact;\n        vm.order.customer_instance = vm.contact;\n        updateOrder();\n        vm.openingCustomerDialog = false;\n      }, function () {\n        vm.openingCustomerDialog = false;\n      });\n    }\n\n    function changeShippingAddress() {\n      if (!vm.canEditContact) {\n        return\n      }\n      vm.shippingAddress = null;\n    }\n\n    function changeBillingAddress() {\n      if (!vm.canEditContact) {\n        return\n      }\n      vm.billingAddress = null;\n    }\n\n    function shippingAddressChanged() {\n      if (!vm.canEditContact) {\n        return\n      }\n      updateOrder();\n    }\n\n    function billingAddressChanged() {\n      if (!vm.canEditContact) {\n        return\n      }\n      updateOrder();\n    }\n\n    function showNewAddressDialog(event, attribute) {\n      vm.attachField = attribute;\n      vm.editingAddress = {\n        country: Session.company.country, contact: vm.contact.id,\n      };\n\n      $mdDialog.show({\n        contentElement: '#new-address-dialog',\n        parent: angular.element(document.getElementById(document.body)),\n        targetEvent: event,\n        clickOutsideToClose: true\n      })\n        .then(function (answer) {\n          // Nothing to do\n        }, function () {\n          // Nothing to do\n        });\n    }\n\n    function closeDialog() {\n      $mdDialog.cancel();\n    }\n\n    function saveAddress() {\n      api.inventories.postalAddresses.save(vm.editingAddress, function (result, fn, status) {\n        if (status === HTTP_STATUS.HTTP_201_CREATED) {\n          vm[vm.attachField] = result;\n          vm.contact.postal_addresses.push(vm[vm.attachField]);\n          $mdDialog.hide();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      })\n    }\n\n    function updateOrder() {\n      $scope.order.customer = vm.contact ? vm.contact.id : null;\n      $scope.order.customer_instance = vm.contact;\n      $scope.order.shipping_address = vm.shippingAddress ? vm.shippingAddress.id : null;\n      $scope.order.billing_address = vm.billingAddress ? vm.billingAddress.id : null;\n      $scope.updateOrder();\n    }\n\n    function getContact(toggleFetchingContact) {\n      vm.fetchingContact = toggleFetchingContact;\n      api.inventories.contacts.get({id: vm.contactId, restricted: false}, function (result, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.contact = result;\n          vm.order.customer_instance = vm.contact;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.CONTACT_NOT_FOUND')).position('top right'));\n        }\n        vm.fetchingContact = false;\n      });\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('PlanCardController', PlanCardController)\n    .directive('ndPlanCard', ndPlanCard);\n\n  /** @ngInject */\n  function PlanCardController(\n    $scope,\n    $filter,\n    $mdDialog,\n    $mdToast,\n    $state,\n    HTTP_STATUS,\n    api,\n    Plan,\n    Session\n  ) {\n    // Data\n    var vm = this;\n    vm.plan = new Plan($scope.plan);\n    vm.isCurrentPlan = false;\n    vm.hasAddOns = false;\n    vm.addOns = [];\n    vm.contractedAddOnsDuct = {};\n    vm.updating = false;\n    vm.featureIconsDict = getFeatureIconDict();\n\n    // Methods\n    vm.getPriceMonthly = getPriceMonthly;\n    vm.showAddOnInfo = showAddOnInfo;\n    vm.showUpdateCurrentPlan = showUpdateCurrentPlan;\n    vm.hideDialog = hideDialog;\n    vm.changePlan = changePlan;\n    vm.updatePlan = updatePlan;\n    vm.getFilteredFeatures = getFilteredFeatures;\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      var plan = Session.company.subscription.getPlan(vm.plan.id);\n      if (plan) {\n        vm.isCurrentPlan = true;\n        vm.plan = plan;\n        vm.subscriptionPeriod = Session.company.subscription.subscription_period;\n        Object.keys(\n          Session.contractedAddOns\n        ).forEach(function(addOnCode) {\n          vm.contractedAddOnsDuct[Session.contractedAddOns[addOnCode].id] = true;\n        });\n      }\n      initAddOns();\n    }\n\n    function initAddOns() {\n      vm.addOns = vm.plan.getAddOns();\n      vm.hasAddOns = vm.addOns.length > 0;\n      if (vm.isCurrentPlan) {\n        vm.addOns.forEach(function(addOn) {\n          addOn.enabled = Session.hasAddOn(addOn.feature.permissions[0]);\n        });\n      }\n    }\n\n    function getPriceMonthly() {\n      if (vm.isCurrentPlan) {\n        var basePrice = vm.plan.getPriceMonthly($scope.period);\n        vm.addOns.filter(function(addOn) {\n          return addOn.enabled;\n        }).forEach(function(addOn) {\n          basePrice += addOn.getPriceMonthly($scope.period);\n        });\n        return basePrice;\n      } else {\n        return vm.plan.getPriceMonthly($scope.period);\n      }\n    }\n\n    function showAddOnInfo(addOn, event) {\n      event.stopPropagation();\n      $mdDialog.show($mdDialog.alert()\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .title($filter('translate')('UPGRADE_PLAN.' + addOn.feature.code + '.NAME'))\n        .htmlContent($filter('translate')('UPGRADE_PLAN.' + addOn.feature.code + '.DESCRIPTION'))\n        .ok($filter('translate')('GENERAL.CLOSE')));\n    }\n\n    function showUpdateCurrentPlan() {\n      return vm.isCurrentPlan && ($scope.period !== vm.subscriptionPeriod || diffAddOns());\n    }\n\n    function diffAddOns() {\n      var selectedAddOnsDict = {};\n      vm.addOns.filter(function(addOn) {\n        return addOn.enabled;\n      }).forEach(function(addOn) {\n        selectedAddOnsDict[addOn.id] = true;\n      });\n\n      return JSON.stringify(selectedAddOnsDict) !== JSON.stringify(vm.contractedAddOnsDuct);\n    }\n\n    function changePlan() {\n      $mdDialog.show({\n        contentElement: '.contact-sales-dialog-' + vm.plan.id,\n        parent: angular.element(document.getElementById(document.body)),\n        clickOutsideToClose: true,\n        fullscreen: true\n      }).then(function(result) {\n        //\n      }, function() {\n        //\n      });\n    }\n\n    function hideDialog() {\n      $mdDialog.hide();\n    }\n\n    function updatePlan() {\n      if ($scope.updating) {\n        return;\n      }\n\n      var addOnIds = vm.addOns.filter(function(addOn) {\n        return addOn.enabled;\n      }).map(function(addOn) {\n        return addOn.id;\n      });\n\n      $scope.updating = true;\n      api.account.planFeatures.save({\n          ids: addOnIds,\n          option: 'contract',\n          period: $scope.period\n        },\n        function(results, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            window.location.href = $state.href($state.current.name, { updated: true }, { absolute: true });\n          } else {\n            $scope.updating = false;\n            $mdToast.show(\n              $mdToast.simple()\n                .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n                .position('top right')\n                .hideDelay(5000)\n            );\n          }\n        });\n    }\n\n    function getFilteredFeatures() {\n      if (vm.plan.code === 'START') {\n        return ['INVENTORY', 'RETAIL_WHOLESALE_SALES', 'BUSINESS', 'SUPPORT'];\n      }\n      return ['INVENTORY', 'RETAIL_WHOLESALE_SALES', 'ONLINE_SALES', 'BUSINESS', 'ANALYTICS', 'SUPPORT'];\n    }\n\n    function getFeatureIconDict() {\n      return {\n        'INVENTORY': 'assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg',\n        'RETAIL_WHOLESALE_SALES': 'assets/images/custom-material-design-icons/warehouse.1e982d37.svg',\n        'ONLINE_SALES': 'assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg',\n        'BUSINESS': 'assets/images/custom-material-design-icons/database-outline.7090749e.svg',\n        'ANALYTICS': 'assets/images/custom-material-design-icons/chart-timeline-variant.627f2c8c.svg',\n        'SUPPORT': 'assets/images/custom-material-design-icons/lifebuoy.edff1483.svg'\n      };\n    }\n  }\n\n  /** @ngInject */\n  function ndPlanCard() {\n    return {\n      restrict: 'E',\n      scope: {\n        plan: '=',\n        period: '=',\n        updating: '='\n      },\n      controller: 'PlanCardController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/plan-card/nd-plan-card.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular.module('app.core').directive('ndPickingIcon', ndPickingIcon);\n\n  /** @ngInject */\n  function ndPickingIcon() {\n    return {\n      replace: false,\n      restrict: 'E',\n      template:\n        '<img class=\"ecommerce-image\" style=\"vertical-align: middle !important;\" ng-src=\"{{::getSiteIcon()}}\">',\n      scope: {\n        platform: '@',\n      },\n      controller: [\n        '$scope',\n        function ($scope) {\n          $scope.getSiteIcon = function () {\n            return '/assets/images/ecommerces/' + $scope.platform + '.svg';\n          };\n        },\n      ],\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndPendingInvoicesBanner', ndPendingInvoicesBanner);\n\n  /** @ngInject */\n  function ndPendingInvoicesBanner() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/pending-invoices-banner/nd-pending-invoices-banner.html',\n      controller: [\n        '$scope',\n        '$sce',\n        '$translate',\n        'api',\n        'Session',\n        '$mdDialog',\n        '$filter',\n        'HTTP_STATUS',\n        function($scope, $sce, $translate, api, Session, $mdDialog, $filter, HTTP_STATUS) {\n\n          // Data\n          $scope.invoices = [];\n          $scope.bannerText = '';\n          $scope.clickable = Session.user.isOwner() || Session.user.isSuperAdmin();\n\n          // Methods\n          $scope.openInvoicesDialog = openInvoicesDialog;\n\n          init();\n\n          // Functions\n          function init() {\n            api.account.pendingInvoices.get(function(response, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                $scope.invoices = response.invoices;\n                setBannerText();\n              }\n            });\n          }\n\n          function setBannerText() {\n            if ($scope.invoices.length === 0) {\n              return;\n            }\n            if ($scope.clickable) {\n              if ($scope.invoices.length === 1) {\n                $scope.bannerText = $filter('translate')('SUBSCRIPTION.YOU_HAVE_ONE_INVOICE_PENDING_TO_PAY');\n              } else {\n                $scope.bannerText = $filter('translate')('SUBSCRIPTION.YOU_HAVE_N_INVOICES_PENDING_TO_PAY', { n: $scope.invoices.length });\n              }\n            } else {\n              $scope.bannerText = $filter('translate')('SUBSCRIPTION.THIS_ACCOUNT_HAS_INVOICES_PENDING_TO_PAY');\n            }\n          }\n\n          function openInvoicesDialog() {\n            if ($scope.clickable) {\n              $mdDialog.show({\n                controller: 'PendingInvoicesDialogController',\n                controllerAs: 'vm',\n                templateUrl: 'app/directives/pending-invoices-banner/dialog/pending-invoices-dialog.html',\n                escapeToClose: true,\n                clickOutsideToClose: true,\n                focusOnOpen: false,\n                locals: {\n                  params: {\n                    invoices: $scope.invoices\n                  }\n                }\n              });\n            }\n          }\n        }\n      ]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('orderProductsController', orderProductsController)\n    .directive('orderProducts', orderProducts);\n\n  /** @ngInject */\n  function orderProducts() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/order-products/order-products.html',\n      scope: {\n        order: '=',\n        options: '=',\n        type: '=',\n        showPrices: '=',\n        editPrices: '=',\n        disableTaxes: '=',\n        taxes: '='\n      },\n      controller: 'orderProductsController',\n      controllerAs: 'vm'\n    };\n\n  }\n\n  /** @ngInject */\n  function orderProductsController($scope,\n                                   $mdToast,\n                                   HTTP_STATUS,\n                                   api,\n                                   Session,\n                                   Audio,\n                                   ScanQueueService,\n                                   DTO_ORDER_DELIVERY_TYPES,\n                                   $filter,\n                                   $rootScope) {\n    var vm = this;\n\n    $scope.currentTab = null;\n    vm.editable = true;\n    vm.dtoOrderDeliveryTypes = DTO_ORDER_DELIVERY_TYPES;\n    vm.autoNavigateToHistoryScan = false;\n\n    vm.autoNavigateToHistoryScanChanged = autoNavigateToHistoryScanChanged;\n    vm.showStockDetailsFeatures = showStockDetailsFeatures;\n    vm.isDeliveryType = isDeliveryType;\n\n    vm.barcodeListenerCallbackUIDS = barcodeListenerCallbackUIDS;\n    vm.barcodeListenerCallback = barcodeListenerCallback;\n\n    vm.goToDetailsEvent = $scope.$on('orderProduct::goToDetails', goToDetails);\n\n    // Unregister Events\n    $scope.$on('$destroy', function() {\n      vm.goToDetailsEvent();\n    });\n\n    initialize();\n\n    function initialize() {\n      $scope.currentTab = 'products';\n      // vm.autoNavigateToHistoryScan = localStorage.getItem(Session.company.id + '::autoNavigateToHistoryScan') === 'true';\n    }\n\n    function goToHistory() {\n      $scope.currentTab = 'history';\n    }\n\n    function goToDetails() {\n      $scope.currentTab = 'stockDetails';\n    }\n\n    function showStockDetailsFeatures() {\n      return Session.hasPermission('app.inventory.uids');\n    }\n\n    function isDeliveryType() {\n      return vm.dtoOrderDeliveryTypes.hasOwnProperty($scope.type);\n    }\n\n    function manageResponse(status, response) {\n      if (status === HTTP_STATUS.HTTP_201_CREATED) {\n        if ($scope.currentTab !== 'history' && vm.autoNavigateToHistoryScan) {\n          goToHistory();\n        } else if ($scope.currentTab === 'history') {\n          $rootScope.$broadcast('add-log-change::orderProductsLog', { 'log_change': response });\n        } else if ($scope.currentTab !== 'history' && !vm.autoNavigateToHistoryScan) {\n          $rootScope.$broadcast('reload-table::orderProductsList', response);\n          $rootScope.$broadcast('reload-totals::orderProductsList', response);\n        }\n      } else {\n        manageErrors(status, response);\n      }\n    }\n\n    function barcodeListenerCallbackUIDS(barcode) {\n      if (vm.editable) {\n        api.inventories.stockDetail.save({\n          option: 'scan',\n          barcode: barcode ? barcode : null,\n          order_id: $scope.order.id,\n          order_type: $scope.type,\n          serializer: 'OrderLogChangeSerializer'\n        }, function(response, fn, status) {\n          manageResponse(status, response);\n        });\n      } else {\n        manageErrors(HTTP_STATUS.HTTP_409_CONFLICT, {\n          error: 'ERROR_04030_CANNOT_UPDATE_ORDER',\n          order_status: $scope.order.status\n        });\n      }\n    }\n\n    function barcodeListenerCallback(barcode) {\n      if (!vm.editable) {\n        return manageErrors(HTTP_STATUS.HTTP_409_CONFLICT, {\n          error: 'ERROR_04030_CANNOT_UPDATE_ORDER',\n          order_status: $scope.order.status\n        });\n      }\n\n      $scope.lastAddedByBarcodeScan = !!barcode;\n      ScanQueueService.run(function(resolve, reject) {\n        api.inventories.orderProducts.save({\n          product: null,\n          barcode: barcode || null,\n          order_id: $scope.order.id,\n          order_type: $scope.type,\n          order_product_variants: [],\n          serializer: 'OrderLogChangeSerializer'\n        }, function(response, _fn, status) {\n          resolve({ status: status, response: response });\n        }, function(httpErr) {\n          reject(httpErr);\n        });\n      }, barcode).then(function(result) {\n        manageResponse(result.status, result.response);\n      });\n\n    }\n\n    function manageErrors(status, response) {\n      if (status === HTTP_STATUS.HTTP_409_CONFLICT) {\n        var errorMessage = 'ERRORS.' + response.error;\n        $mdToast.show($mdToast.simple().textContent($filter('translate')(errorMessage, { status: response.order_status })).position('top right'));\n      } else if (status === HTTP_STATUS.HTTP_404_NOT_FOUND) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('ORDER_LOG_CHANGES.PRODUCT_NOT_ADDED')).position('top right'));\n        $rootScope.$broadcast('add-log-change::orderProductsLog', { 'log_change': response });\n      } else {\n        showErrorToast();\n      }\n      Audio.playErrorSound();\n    }\n\n    function showErrorToast() {\n      $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n    }\n\n    function autoNavigateToHistoryScanChanged() {\n      localStorage.setItem(Session.company.id + '::autoNavigateToHistoryScan', vm.autoNavigateToHistoryScan);\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndOfflineBanner', ndOfflineBanner);\n\n  /** @ngInject */\n  function ndOfflineBanner() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/offline-banner/nd-offline-banner.html',\n      controller: ['$scope', '$rootScope', '$window', function ($scope, $rootScope, $window) {\n        $scope.onLine = $window.navigator.onLine;\n\n        $window.addEventListener(\"online\", function () {\n          $scope.onLine = true;\n          $rootScope.$digest();\n        }, true);\n\n        $window.addEventListener(\"offline\", function () {\n          $scope.onLine = false;\n          $rootScope.$digest();\n        }, true);\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndNotificationsController', ndNotificationsController)\n    .directive('ndNotifications', ndNotifications);\n\n  /** @ngInject */\n  function ndNotificationsController($q, $mdToast, api, $rootScope, $scope, HTTP_STATUS, NOTIFICATION_TYPES, NOTIFICATION_PRIORITIES, Utils, URLS, Session, $filter, $location, $http, $translate) {\n    var vm = this;\n\n    // data\n    vm.notificationById = {};\n    vm.unreadNotifications = false;\n    vm.notificationTabs = {\n      new: {\n        title: '',\n        notifications: [],\n        next: null,\n        lastIdx: -1,\n        loading: false\n      },\n      archived: {\n        title: '',\n        notifications: [],\n        next: null,\n        lastIdx: -1,\n        loading: false\n      }\n    };\n\n    // methods\n    vm.pullNotifications = pullNotifications;\n    vm.setPendingNotifications = setPendingNotifications;\n    vm.hasNotificationsToRead = hasNotificationsToRead;\n    vm.archiveNotification = archiveNotification;\n    vm.onNotificationRendered = onNotificationRendered;\n    vm.deleteAllNotifications = deleteAllNotifications;\n    vm.setAllNotificationsAsRead = setAllNotificationsAsRead;\n    vm.scannForReadNotifications = scanForReadNotifications;\n    vm.getNotificationClass = getNotificationClass;\n    vm.notify = notify;\n    vm.hasPermissions = hasPermissions;\n    vm.loadMore = loadMore;\n    vm.showArchiveButton = showArchiveButton;\n    vm.goToLink = goToLink;\n\n    navigator.serviceWorker.ready.then(function (registration) {\n      navigator.serviceWorker.onmessage = function (event) {\n      $scope.$apply(function() {\n        setPendingNotifications();\n      });\n      };\n    });\n\n    initialize();\n\n    // Functions\n    function initialize() {\n      $translate.onReady(function() {\n        vm.notificationTabs.new.title = $filter('translate')('NOTIFICATIONS.NEW');\n        vm.notificationTabs.archived.title = $filter('translate')('NOTIFICATIONS.ARCHIVED');\n      });\n\n      vm.menuOpenWatch = $scope.$on('$mdMenuOpen', function() {\n        // mdMenuOpen is triggered when the menu-button is clicked, so the view is not ready yet.\n        // in order to get correct sizes from notifications, is mandatory to wait some milliseconds.\n        setTimeout(function() {\n          vm.scannForReadNotifications();\n        }, 500);\n      });\n\n      vm.menuCloseWatch = $scope.$on('$mdMenuClose', function() {\n        for (var key in vm.notificationById) {\n          var subject = vm.notificationById[key];\n          if (subject.data.read === subject.read)\n            continue;\n\n          subject.data.read = subject.read;\n          subject.data.read_at = subject.readAt;\n\n          // TODO: Implementar Bulk endpoint a back per actualitzar totes les notis de cop\n          api.account.notifications.update(\n            subject.data,\n            function(results, fn, status) {\n              if (status === HTTP_STATUS.HTTP_200_OK) {\n                api.account.notifications.get(\n                  {option: 'unread-count'}, function(response) {\n                    vm.unreadNotifications = response.data > 0;\n                  });\n              }\n            });\n        }\n\n        vm.readNotificationsIndex = [];\n      });\n\n      // pull existent notifications\n      vm.pullNotifications();\n\n      $scope.$on('$destroy', function() {\n        vm.menuOpenWatch();\n        vm.menuCloseWatch();\n      });\n\n      angular.element(document).ready(function() {\n        $('md-menu-bar.notifications-menu-bar').find('md-tab-item').each(function() {\n          $(this).attr('md-prevent-menu-close', 'md-prevent-menu-close');\n        });\n\n        $('.notifications md-tab-content').on('scroll', function() {\n          vm.scannForReadNotifications();\n        });\n      });\n\n    }\n\n    function pullNotifications() {\n      api.account.notifications.get(\n        {option: 'unread-count'}, function(response) {\n          vm.unreadNotifications = response.data;\n        });\n\n      for (var tab in vm.notificationTabs){\n        if (vm.notificationTabs[tab].lastIdx === -1) {\n          api.account.notifications.list(\n            {type: tab}, (function(response) {\n              vm.notificationTabs[this].next = response.next;\n              registerNotifications(response.results, false, vm.notificationTabs[this]);\n            }).bind(tab));\n        }\n      }\n    }\n\n    function registerNotifications(notificationsList, showSONotification, tab) {\n      var newest = [];\n      for (var i = 0; i < notificationsList.length; i++) {\n        if (!vm.notificationById[notificationsList[i].id]) {\n          vm.notificationById[notificationsList[i].id] = {\n            data: notificationsList[i],\n            read: notificationsList[i].read\n          };\n\n          newest.push(notificationsList[i]);\n          if (showSONotification){\n            vm.notify(notificationsList[i]);\n          }\n        }\n      }\n      tab.notifications = newest.concat(tab.notifications);\n      orderNotifications(tab.notifications);\n      formatNotifications(tab.notifications);\n    }\n\n    function formatNotifications(notifications){\n      var lastRelativeDate = '';\n      notifications.forEach(function(notification){\n        if (typeof notification.show === 'undefined' || notification.show === true) {\n          var relativeDate = $filter('relativeDate')(notification.created_at);\n          if (relativeDate !== lastRelativeDate) {\n            lastRelativeDate = relativeDate;\n            notification.relativeDate = relativeDate;\n          } else {\n            notification.relativeDate = null;\n          }\n          var typeString = NOTIFICATION_TYPES[notification.type];\n\n          notification.shownTitle = notification.title ? notification.title : $filter('translate')('NOTIFICATIONS.' + typeString + '_TITLE');\n          notification.shownBody = notification.body ? notification.body : $filter('translate')('NOTIFICATIONS.' + typeString + '_BODY', notification.context);\n\n          if (!notification.placeholderIcon) {\n            notification.placeholderIcon = getPlaceholderIconFromType(notification.type);\n          }\n\n          if (typeof notification.show === 'undefined') {\n            notification.show = true;\n          }\n        }\n      });\n    }\n\n    function notify(notification) {\n      if (!vm.hasPermissions()) {\n        return;\n      }\n\n      // Let's check if the browser supports notifications\n      if (!('Notification' in window)) {\n        alert('This browser does not support desktop notification');\n        return;\n      }\n\n      var riseNotification = function() {\n        var message = new Notification(notification.title, {\n          body: notification.body,\n          tag: notification.id, // avoid duplicated notifications\n          icon: URLS.LOGO_SMALL,\n          image: URLS.LOGO_SMALL,\n          badge: URLS.LOGO_SMALL\n        });\n\n        message.onclick = function(event) {\n          event.preventDefault(); // Previene al buscador de mover el foco a la pestaña del Notification\n          window.open(notification.link, '_blank');\n        };\n\n        // close the notification after 30 seconds\n        // setTimeout(() => {\n        //   notif.close();\n        // }, 30 * 1000);\n      };\n\n      // Let's check whether notification permissions have already been granted\n      if (Notification.permission === 'granted') {\n        // If it's okay let's create a notification\n        riseNotification();\n      }\n\n      // Otherwise, we need to ask the user for permission\n      else if (Notification.permission !== 'denied') {\n        Notification.requestPermission(function(permission) {\n          // If the user accepts, let's create a notification\n          if (permission === 'granted') {\n            riseNotification();\n          }\n        });\n      }\n    }\n\n    function hasNotificationsToRead() {\n      return vm.unreadNotifications;\n    }\n\n    function archiveNotification(notification) {\n      var index = vm.notificationTabs['new'].notifications.indexOf(notification);\n      var notificationCopy = angular.copy(notification);\n      if (index > -1) {\n        api.account.notifications.save({\n          id: notification.id,\n          option: 'archive'\n        }, function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            var newNotifications = vm.notificationTabs['new'].notifications;\n            newNotifications[index].show = false;\n            if (index+1 < newNotifications.length){\n              if (!newNotifications[index+1].relativeDate) {\n                newNotifications[index+1].relativeDate = newNotifications[index].relativeDate;\n              }\n            }\n            var archivedNotifications = vm.notificationTabs['archived'].notifications;\n            notificationCopy.archived = true;\n            archivedNotifications.push(notificationCopy);\n            orderNotifications(archivedNotifications);\n            formatNotifications(archivedNotifications);\n          }\n        });\n      }\n    }\n\n    function deleteAllNotifications() {\n      api.account.notifications.save({\n        option: 'clear-all'\n      }, function(response) {\n        vm.notificationById = {};\n        for (var tab in vm.notificationTabs) {\n          vm.notificationTabs[tab].notifications = [];\n          vm.notificationTabs[tab].notificationsByDate = {};\n          vm.notificationTabs[tab].lastIdx = -1;\n          vm.notificationTabs[tab].next = null;\n          vm.notificationTabs[tab].loading = false;\n        }\n      });\n    }\n\n    function setAllNotificationsAsRead() {\n      api.account.notifications.save({\n        option: 'read-all'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK){\n          for (var id in vm.notificationById){\n            vm.notificationById[id].read = true;\n            vm.notificationById[id].data.read = true;\n          }\n          vm.unreadNotifications = false;\n        }\n      });\n    }\n\n    function onNotificationRendered(notification) {\n      if (vm.renderedStack.indexOf(notification) == -1) {\n        vm.renderedStack.push(notification);\n      }\n    }\n\n    function scanForReadNotifications() {\n      if ($('#notifications-menu')) {\n        const scrollViewTop = $('#notifications-menu').offset().top;\n        const scrollViewHeight = $('#notifications-menu').height();\n        if (!scrollViewTop) return; // if notifications view is not rendered\n\n        const scrollBound = scrollViewTop + scrollViewHeight + 10;\n\n        for (var notificationId in vm.notificationById) {\n          const id = '#notification-' + notificationId.toString();\n          const elemViewTop = $(id).offset().top;\n          const elemViewHeight = $(id).height();\n          if (!elemViewTop) continue; // if notifications are not rendered\n\n          const elemViewBound = elemViewTop + elemViewHeight;\n\n          if (elemViewBound <= scrollBound &&\n            !vm.notificationById[notificationId].read) {\n            vm.notificationById[notificationId].read = true;\n            vm.notificationById[notificationId].readAt = new Date();\n          }\n        }\n      }\n    }\n\n    function getNotificationClass(notification) {\n      return 'unread-normal';\n    }\n\n    function hasPermissions() {\n      return Session.user && Session.user.has_notifications;\n    }\n\n    function orderNotifications(notificationsList) {\n      notificationsList.sort(function(a, b) {\n        var aDate = new Date(a.created_at);\n        var bDate = new Date(b.created_at);\n        if (aDate > bDate) return -1;\n        if (aDate < bDate) return 1;\n        else return 0;\n      });\n    }\n\n    function getPlaceholderIconFromType(type) {\n      var stockNotifications = ['STOCK_BELOW_MINIMUM', 'STOCK_AT_ZERO', 'NEGATIVE_STOCK'];\n      var typeString = NOTIFICATION_TYPES[type];\n      if (stockNotifications.indexOf(typeString) > -1) {\n        return 'icon-package-variant-closed';\n      } else {\n        return '';\n      }\n    }\n\n    function loadMore(tab) {\n      if (tab.loading) {\n        return;\n      }\n\n      tab.loading = true;\n\n      $http({\n        method: 'GET',\n        url: tab.next,\n      }).then(function successCallback(response) {\n        tab.next = response.data.next;\n        registerNotifications(response.data.results, false, tab);\n        tab.loading = false;\n      }, function errorCallback(response) {\n        tab.loading = false;\n      });\n    }\n\n    function showArchiveButton(tab) {\n      return tab === 'new';\n    }\n\n    function goToLink(notification) {\n      $location.path(notification.link);\n    }\n\n    function setPendingNotifications() {\n      vm.unreadNotifications = true;\n    }\n  }\n\n  /** @ngInject */\n  function ndNotifications() {\n    return {\n      restrict: 'E',\n      scope: {},\n      controller: 'ndNotificationsController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/notifications/nd-notifications.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndNoFloat', ndNoFloat);\n\n  /** @ngInject */\n  function ndNoFloat($rootScope, $document, $mdToast, $filter) {\n    return {\n      link: function (scope, element) {\n        element.on('keydown', function (event) {\n          if ([69, 110, 188, 190].indexOf(event.which) > -1) {\n            // dot and numpad dot\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.DECIMALS_NOT_ALLOWED')).position('top right'));\n            event.preventDefault();\n            return false;\n          } else {\n            return true;\n          }\n        });\n      }\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  /**\n   * Main module of the Fuse\n   */\n  angular.module('fuse', [\n    // Common 3rd Party Dependencies\n    'cfp.hotkeys',\n    'barcode',\n    'angular-google-analytics',\n    'tmh.dynamicLocale',\n\n    // Core\n    'app.core',\n\n    // Navigation\n    'app.navigation',\n\n    // Toolbar\n    'app.toolbar',\n\n    // Quick panel\n    'app.quick-panel',\n\n    // Quick panel\n    'app.preview-panel',\n\n    // Services\n    'app.services.auth',\n    'app.services.support',\n    'app.services.session',\n    'app.services.version',\n    'app.services.utils',\n    'app.services.performance',\n    'app.services.inventory-product',\n    'app.services.nd-printer-utils',\n    'app.services.ui-grid-service',\n    'app.analytics.report.utils',\n    'app.services.tracker',\n    'app.services.feature',\n    'app.services.feature-flag',\n    'app.services.comercia',\n    'app.services.epson-printer',\n    'app.services.audio',\n    'app.services.default-register-service',\n    'app.services.barcode',\n    'app.services.artifact',\n    'app.services.stockout',\n    'app.services.order-actions',\n    'app.services.scan-queue',\n    'app.services.inventory-configuration',\n\n    // Factory models\n    'app.models.installed-integration-app',\n    'app.models.verifactu-integration-installed-app',\n    'app.models.installed-integration-app-factory',\n    'app.models.fiscal-profile',\n    'app.models.fiscal-profile-factory',\n    'app.models.spain-fiscal-profile',\n    'app.models.factory',\n    'app.models.coupon',\n    'app.models.plan-feature',\n    'app.models.contracted-add-on',\n    'app.models.plan-limit',\n    'app.models.hub',\n    'app.models.plan',\n    'app.models.feature',\n    'app.models.contracted-plan',\n    'app.models.contracted-plan-limit',\n    'app.models.subscription',\n    'app.models.company',\n    'app.models.role',\n    'app.models.workday',\n    'app.models.user',\n    'app.models.basic-retail-kpi',\n    'app.models.attribute-category',\n    'app.models.attribute',\n    'app.models.attribute-category-value',\n    'app.models.b2b-ecommerce',\n    'app.models.sell-matrix-data',\n    'app.models.product-label-design',\n    'app.models.product-label-design-field',\n    'app.models.sales-goal',\n    'app.models.stock-location',\n    'app.models.shipping-method',\n    'app.models.shipping-box',\n    'app.models.sendcloud_pos_order_fulfillment_data',\n    'app.models.pos-order-shipping-method',\n    'app.models.pos-order-fulfillment-shipping-box',\n    'app.models.pos-order-product-variant',\n    'app.models.pos-order-fulfillment-product-variant',\n    'app.models.pos-order-fulfillment',\n    'app.models.pos-order-refund-fulfillment-product-variant',\n    'app.models.pos-order-refund',\n    'app.models.pos-order-payment-method',\n    'app.models.devolution-card',\n    'app.models.pos-order',\n    'app.models.changelog',\n    'app.models.signup-step',\n    'app.models.serial-number-type',\n    'app.models.signup-two',\n    'app.models.invoice',\n    'app.models.invoice-line',\n    'app.models.order-delivery-line',\n    'app.models.order-product',\n    'app.models.order-product-variant',\n    'app.models.order-delivery',\n    'app.models.order-delivery-product-variant',\n    'app.models.subtotal-by-tax',\n    'app.models.uid-stock',\n    'app.models.payment',\n    'app.models.variant',\n    'app.models.rule-criteria',\n    'app.models.rule-line',\n    'app.models.routing-rule',\n    'app.models.order-product-variant-dto',\n    'app.models.order-product-dto',\n    'app.models.order-log-change',\n    'app.models.stock-detail-dto',\n    'app.models.stocktaking-order-product-variant-lot',\n    'app.models.dynamic-report-filter',\n    'app.models.dynamic-report',\n    'app.models.gs1datamatrix',\n    'app.models.inventories.warehouse',\n    'app.models.inventories.register',\n    'app.models.inventories.product-planning-configuration',\n    'app.models.inventories.ticket-configuration',\n    'app.models.inventories.inventory-configuration',\n    'app.models.inventories.gift-card',\n    // Picking and Packing\n    'app.models.inventories.picking-packing.packing-order',\n    'app.models.inventories.picking-packing.packing-activity',\n    // Shipping\n    'app.models.packing-order-sendcloud-data',\n    'app.models.net-promoter-score',\n\n    // Accounting\n    'app.models.accounting.mutable-invoice-fields',\n\n    // Login\n    'app.pages.sign-up',\n    'app.pages.sign-up-two',\n    'app.pages.validate-sign-up',\n    'app.pages.validate-sign-up-two',\n    'app.pages.auth.login-v3',\n    'app.pages.shopify',\n    'app.pages.hub',\n    'app.pages.trial-expired',\n    'app.pages.auth.forgot-password',\n    'app.pages.auth.reset-password',\n\n    // Apps\n    'app.account',\n    'app.accounting',\n    'app.analytics',\n    'app.contacts',\n    'app.ecommerce',\n    'app.inventory',\n    'app.manufacture',\n    'app.planning',\n    'app.sale',\n    'app.wholesale',\n    'app.support',\n    'app.integration_apps'\n  ]);\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('fuse')\n\n    .constant('NEW_FEATURE_BADGE_CONFIGURATIONS', {\n      'PRODUCT_PENDING_ORDERS': {\n        title: 'NEW_FEATURES.PRODUCT_PENDING_ORDERS_TITLE',\n        body: 'NEW_FEATURES.PRODUCT_PENDING_ORDERS_BODY',\n        activationDate: new Date('2025-02-19'),\n        daysActive: 30\n      },\n      'PRICE_DECIMALS': {\n        title: 'NEW_FEATURES.PRICE_DECIMALS_TITLE',\n        body: 'NEW_FEATURES.PRICE_DECIMALS_BODY',\n        activationDate: new Date('2023-03-02'),\n        daysActive: 14\n      },\n      'CUSTOM_INVOICE_SERIAL_NUMBER_TYPE': {\n        title: 'NEW_FEATURES.CUSTOM_INVOICE_SERIAL_NUMBER_TYPE_TITLE',\n        body: 'NEW_FEATURES.CUSTOM_INVOICE_SERIAL_NUMBER_TYPE_BODY',\n        activationDate: new Date('2023-03-17'),\n        daysActive: 14\n      },\n      'DELIVERY_FCP': {\n        title: 'NEW_FEATURES.DELIVERY_FCP',\n        body: 'NEW_FEATURES.DELIVERY_FCP_BODY',\n        activationDate: new Date('2023-03-30'),\n        daysActive: 14,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/5546312503837-Crear-y-recibir-pedidos-de-compra'\n      },\n      'INVOICE_FCP': {\n        title: 'NEW_FEATURES.INVOICE_FCP',\n        body: 'NEW_FEATURES.INVOICE_FCP_BODY',\n        activationDate: new Date('2023-03-30'),\n        daysActive: 14,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/5546312503837-Crear-y-recibir-pedidos-de-compra'\n      },\n      'PURCHASE_FCP': {\n        title: 'NEW_FEATURES.PURCHASE_FCP',\n        body: 'NEW_FEATURES.PURCHASE_FCP_BODY',\n        activationDate: new Date('2023-03-30'),\n        daysActive: 14,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/5546312503837-Crear-y-recibir-pedidos-de-compra'\n      },\n      'MAIN_PURCHASE_FCP': {\n        title: 'NEW_FEATURES.MAIN_PURCHASE_FCP',\n        body: 'NEW_FEATURES.MAIN_PURCHASE_FCP_BODY',\n        activationDate: new Date('2023-03-30'),\n        daysActive: 14,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/5546312503837-Crear-y-recibir-pedidos-de-compra'\n      },\n      'PURCHASE_PRICES': {\n        title: 'NEW_FEATURES.PURCHASE_PRICES',\n        body: 'NEW_FEATURES.PURCHASE_PRICES_BODY',\n        activationDate: new Date('2023-03-30'),\n        daysActive: 14,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/5546312503837-Crear-y-recibir-pedidos-de-compra'\n      },\n      'LABELS_GENERATOR': {\n        title: 'NEW_FEATURES.LABELS_GENERATOR',\n        body: 'NEW_FEATURES.LABELS_GENERATOR_BODY',\n        activationDate: new Date('2023-04-18'),\n        daysActive: 14\n      },\n      'LABELS_GENERATOR_PRODUCT': {\n        title: 'NEW_FEATURES.LABELS_GENERATOR_PRODUCTS',\n        body: 'NEW_FEATURES.LABELS_GENERATOR_PRODUCTS_BODY',\n        activationDate: new Date('2023-08-01'),\n        daysActive: 14\n      },\n      'NEW_PRODUCTS_TABLE': {\n        title: 'NEW_FEATURES.NEW_PRODUCTS_TABLE',\n        body: 'NEW_FEATURES.NEW_PRODUCTS_TABLE_BODY',\n        activationDate: new Date('2023-05-15'),\n        daysActive: 14\n      },\n      'EDITABLE_POPV_PRODUCT_NAME': {\n        title: 'NEW_FEATURES.EDITABLE_POPV_PRODUCT_NAME',\n        body: 'NEW_FEATURES.EDITABLE_POPV_PRODUCT_NAME_BODY',\n        activationDate: new Date('2023-04-26'),\n        daysActive: 14\n      },\n      'HEALTH_CHECK': {\n        title: 'NEW_FEATURES.HEALTH_CHECK',\n        body: 'NEW_FEATURES.HEALTH_CHECK_BODY',\n        activationDate: new Date('2023-06-14'),\n        daysActive: 14\n      },\n      'INVENTORY_ANALYTICS_IMPROVEMENT': {\n        title: 'NEW_FEATURES.INVENTORY_ANALYTICS_IMPROVEMENT',\n        body: 'NEW_FEATURES.INVENTORY_ANALYTICS_IMPROVEMENT_BODY',\n        activationDate: new Date('2023-06-14'),\n        daysActive: 14\n      },\n      'NEW_DETAILS_PRODUCT': {\n        title: 'NEW_FEATURES.NEW_DETAILS_PRODUCT_NAME',\n        body: 'NEW_FEATURES.NEW_DETAILS_PRODUCT_BODY',\n        activationDate: new Date('2023-05-22'),\n        daysActive: 17\n      },\n      'NEW_PRODUCT_STOCKS_SCREEN': {\n        title: 'NEW_FEATURES.NEW_PRODUCT_STOCKS_SCREEN_NAME',\n        body: 'NEW_FEATURES.NEW_PRODUCT_STOCKS_SCREEN_BODY',\n        activationDate: new Date('2023-06-15'),\n        daysActive: 17\n      },\n      'NEW_STOCKS_SCREEN': {\n        title: 'NEW_FEATURES.NEW_STOCKS_SCREEN_NAME',\n        body: 'NEW_FEATURES.NEW_STOCKS_SCREEN_BODY',\n        activationDate: new Date('2023-06-15'),\n        daysActive: 17\n      },\n      'NEW_GIFT_CARD_SCREEN': {\n        title: 'NEW_FEATURES.NEW_GIFT_CARD_SCREEN_NAME',\n        body: 'NEW_FEATURES.NEW_GIFT_CARD_SCREEN_BODY',\n        activationDate: new Date('2023-09-28'),\n        daysActive: 17\n      },\n      'CHANGES_ON_REGISTER_CLOSURE': {\n        title: 'NEW_FEATURES.CHANGES_ON_REGISTER_CLOSURE_NAME',\n        body: 'NEW_FEATURES.CHANGES_ON_REGISTER_CLOSURE_BODY',\n        activationDate: new Date('2023-10-06'),\n        daysActive: 17\n      },\n      'DYNAMIC_ATTRIBUTES': {\n        title: 'NEW_FEATURES.DYNAMIC_ATTRIBUTES_NAME',\n        body: 'NEW_FEATURES.DYNAMIC_ATTRIBUTES_BODY',\n        activationDate: new Date('2023-11-09'),\n        daysActive: 17\n      },\n      'PURCHASES_DTO': {\n        title: 'NEW_FEATURES.DTO_PURCHASES_NAME',\n        body: 'NEW_FEATURES.DTO_PURCHASES_BODY',\n        activationDate: new Date('2024-01-15'),\n        daysActive: 17,\n        academyUrl: 'https://support.stockagile.com/hc/es/sections/5444583064605-Compras'\n      },\n      'NEW_ORDERS_SCREEN': {\n        title: 'NEW_FEATURES.NEW_ORDERS_SCREEN_NAME',\n        body: 'NEW_FEATURES.NEW_ORDERS_SCREEN_BODY',\n        activationDate: new Date('2024-04-17'),\n        daysActive: 17,\n        academyUrl: 'https://support.stockagile.com/hc/es/sections/5444597788957-Transferencias'\n      },\n      'PRODUCT_BUNDLES': {\n        title: 'NEW_FEATURES.PRODUCT_BUNDLES_NAME',\n        body: 'NEW_FEATURES.PRODUCT_BUNDLES_BODY',\n        activationDate: new Date('2024-04-17'),\n        daysActive: 17\n      },\n      'NEW_PICKING_SCREEN': {\n        title: 'NEW_FEATURES.NEW_PICKING_SCREEN_NAME',\n        body: 'NEW_FEATURES.NEW_PICKING_SCREEN_BODY',\n        activationDate: new Date('2024-04-17'),\n        daysActive: 17\n      },\n      'MIN_STOCK_THRESHOLD': {\n        title: 'NEW_FEATURES.MIN_STOCK_THRESHOLD_NAME',\n        body: 'NEW_FEATURES.MIN_STOCK_THRESHOLD_BODY',\n        activationDate: new Date('2024-09-11'),\n        daysActive: 17\n      },\n      'PICKING_WITH_LOTS': {\n        title: 'NEW_FEATURES.PICKING_WITH_LOTS_NAME',\n        body: 'NEW_FEATURES.PICKING_WITH_LOTS_BODY',\n        activationDate: new Date('2024-11-13'),\n        daysActive: 20,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/15085570551709-Realizar-una-orden-de-picking'\n      },\n      'INVENTORY_LOYALTY_BY_CATEGORIES': {\n        title: 'NEW_FEATURES.INVENTORY_LOYALTY_BY_CATEGORIES_NAME',\n        body: 'NEW_FEATURES.INVENTORY_LOYALTY_BY_CATEGORIES_BODY',\n        activationDate: new Date('2024-10-21'),\n        daysActive: 17,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/10197577553821-Sistema-de-fidelizaci%C3%B3n-por-acumulaci%C3%B3n-de-saldo'\n      },\n      'SALES_DYNAMIC_REPORTS': {\n        title: 'NEW_FEATURES.SALES_DYNAMIC_REPORTS_NAME',\n        body: 'NEW_FEATURES.SALES_DYNAMIC_REPORTS_BODY',\n        activationDate: new Date('2025-04-07'),\n        daysActive: 17\n      },\n      'SALES_DTO': {\n        title: 'NEW_FEATURES.DTO_SALES_NAME',\n        body: 'NEW_FEATURES.DTO_SALES_BODY',\n        activationDate: new Date('2024-12-09'),\n        daysActive: 17,\n        academyUrl: 'https://support.stockagile.com/hc/es/articles/5529729959837-Crear-y-entregar-pedidos-de-venta'\n      },\n      'NEW_PRODUCT_LOCATIONS': {\n        title: 'NEW_FEATURES.PRODUCT_LOCATIONS_NAME',\n        body: 'NEW_FEATURES.PRODUCT_LOCATIONS_BODY',\n        activationDate: new Date('2025-04-16'),\n        daysActive: 17\n      },\n      'NEW_STOCK_LOCATIONS': {\n        title: 'NEW_FEATURES.STOCK_LOCATIONS_NAME',\n        body: 'NEW_FEATURES.STOCK_LOCATIONS_BODY',\n        activationDate: new Date('2025-06-18'),\n        daysActive: 20\n      }\n    });\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndNewFeatureBadge', ndNewFeatureBadge);\n\n  /** @ngInject */\n  function ndNewFeatureBadge() {\n    return {\n      replace: true,\n      restrict: 'E',\n      scope: {\n        id: '@',\n        removeMargin: '=?',\n        visibleBadge: '=?',\n        isBeta: '=?',\n        showIcon: '=?',\n      },\n      templateUrl: 'app/directives/new-feature-badge/nd-new-feature-badge.html',\n      controller: ['$scope', '$window', 'NEW_FEATURE_BADGE_CONFIGURATIONS', function ($scope, $window, NEW_FEATURE_BADGE_CONFIGURATIONS) {\n        Object.assign($scope, NEW_FEATURE_BADGE_CONFIGURATIONS[$scope.id]);\n\n        if (!$scope.daysActive) {\n          $scope.daysActive = 14;\n        }\n\n        $scope.visible = function() {\n          if ($window.localStorage.getItem($scope.id + '::newFeature::dismissed') === 'true') {\n            return false;\n          }\n          if (new Date() < new Date($scope.activationDate)) {\n            return false;\n          }\n          if (new Date() - new Date($scope.activationDate) > $scope.daysActive * 24 * 60 * 60 * 1000) {\n            return false;\n          }\n          return $scope.id  && $scope.title && $scope.body && $scope.activationDate && $scope.daysActive;\n        };\n\n        $scope.dismiss = function() {\n          $window.localStorage.setItem($scope.id + '::newFeature::dismissed', 'true');\n        };\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndWarehouseIconController', ndWarehouseIconController)\n    .directive('ndWarehouseIcon', ndWarehouseIcon);\n\n  /** @ngInject */\n  function ndWarehouseIcon() {\n    return {\n      restrict: 'E',\n      template: '<md-icon md-svg-src=\"{{getIcon()}}\" md-font-icon class=\"icon\"></md-icon>',\n      controller: 'ndWarehouseIconController',\n      replace: true,\n      scope: {\n        type: '='\n      }\n    };\n\n  }\n\n  /** @ngInject */\n  function ndWarehouseIconController($scope, WAREHOUSE_TYPES) {\n    $scope.getIcon = getIcon;\n\n    function getIcon() {\n      if ($scope.type === WAREHOUSE_TYPES.WAREHOUSE) {\n        return 'assets/images/custom-material-design-icons/warehouse.1e982d37.svg';\n      }\n      if ($scope.type === WAREHOUSE_TYPES.STORE) {\n        return 'assets/images/custom-material-design-icons/store-outline.583690c9.svg';\n      }\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndWizardCardController', ndWizardCardController)\n    .directive('ndWizardCard', ndWizardCard);\n\n  /** @ngInject */\n  function ndWizardCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/nd-wizard-card/nd-wizard-card.html',\n      controller: 'ndWizardCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndWizardCardController($scope, $mdDialog, api, HTTP_STATUS, $mdToast, $filter, SignupStep, $q) {\n\n    // Data\n    $scope.signupSteps = [];\n    $scope.signupStepsById = {};\n    $scope.signup = null;\n    $scope.ready = false;\n    $scope.completed = 0;\n    $scope.currentlyActive = null;\n    $scope.selectedStep = null;\n    $scope.loading = true;\n\n    // methods\n    $scope.toggleStep = toggleStep;\n    $scope.showDialog = showDialog;\n\n    initialize();\n\n    function initialize() {\n      var callSignupStep = $q.defer();\n      var callSignup = $q.defer();\n\n      var requests = [callSignupStep.promise, callSignup.promise];\n      api.account.signupSteps.list(null, function (response, callback, status) {\n        if (status != HTTP_STATUS.HTTP_200_OK) {\n          callSignupStep.resolve(false);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          return;\n        }\n\n        buildSignupStepsTree(response.results);\n        callSignupStep.resolve(true);\n      })\n\n      api.account.users.list({\n        option: 'signup',\n      }, function (response, callback, status) {\n        if (status != HTTP_STATUS.HTTP_200_OK) {\n          callSignup.resolve(false);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          return;\n        }\n\n        $scope.signup = response;\n        callSignup.resolve(true);\n      });\n\n      $q.all(requests).then(function () {\n        var healthy = true;\n        requests.forEach(function (result) {\n          healthy &= result.$$state.value;\n        })\n\n        $scope.signup.steps_done && $scope.signup.steps_done.forEach(function (step) {\n          if (step.parent_step) {\n            $scope.signupStepsById[step.parent_step].setSubstepCompleted(step.id);\n          } else {\n            $scope.signupStepsById[step.id].done = true;\n          }\n        })\n\n        $scope.signupSteps.forEach(function (step) {\n          $scope.completed += step.completed() ? 1 : 0;\n        })\n\n        $scope.ready = healthy;\n        $scope.loading = false;\n      })\n    }\n\n    function buildSignupStepsTree(signupSteps) {\n      signupSteps.filter(function (step) {\n        return !step.parent_step;\n      }).sort(function (a, b) {\n        return a.position - b.position;\n      }).forEach(function (step, index) {\n        step.number = index + 1;\n        var signupStep = new SignupStep(step)\n        $scope.signupStepsById[step.id] = signupStep;\n        $scope.signupSteps.push(signupStep);\n      });\n\n      if ($scope.signupSteps.length) {\n        toggleStep($scope.signupSteps[0])\n      }\n    }\n\n    function toggleStep(step) {\n      $scope.selectedStep = step;\n    }\n\n    function showDialog(ev, videoId) {\n      $mdDialog.show({\n        controller: DialogController,\n        template:\n          '<md-dialog>' +\n          '  <md-dialog-content class=\"no-padding\">' +\n          '    <ng-youtube-embed video=\"videoId\"  autoplay=\"false\" ccloadpolicy=\"false\" controls=\"true\"' +\n          '      disablekb=\"true\" fs=\"true\" modestbranding=\"true\" playsinline=\"true\">' +\n          '    </ng-youtube-embed>' +\n          '  </md-dialog-content>' +\n          '</md-dialog>',\n        locals: {\n          videoId: videoId\n        },\n        parent: angular.element(document.body),\n        targetEvent: ev,\n        clickOutsideToClose: true,\n      })\n        .then(function (answer) {\n\n        }, function () {\n\n        });\n    }\n\n    function DialogController($scope, $mdDialog, videoId) {\n      $scope.videoId = videoId;\n      $scope.closeDialog = function () {\n        $mdDialog.hide();\n      }\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndWarehouseBadgeController', ndWarehouseBadgeController)\n    .directive('ndWarehouseBadge', ndWarehouseBadge);\n\n  /** @ngInject */\n  function ndWarehouseBadge() {\n    return {\n      restrict: 'E',\n      template: '<div class=\"text-boxed {{color}}\" layout=\"row\" layout-align=\"center center\"><nd-warehouse-icon type=\"type\"></nd-warehouse-icon> <span translate=\"{{name}}\" flex></span></div>',\n      controller: 'ndWarehouseBadgeController',\n      scope: {\n        type: '='\n      }\n    };\n\n  }\n\n  /** @ngInject */\n  function ndWarehouseBadgeController($scope, WAREHOUSE_TYPES) {\n\n    // Data\n    $scope.color = '';\n    $scope.name = '';\n    init();\n\n    function init() {\n      if ($scope.type === undefined) {\n        return;\n      }\n      if ($scope.type === WAREHOUSE_TYPES.WAREHOUSE) {\n        $scope.name = 'WAREHOUSE.WAREHOUSE';\n        $scope.color = 'amber';\n      } else if ($scope.type === WAREHOUSE_TYPES.STORE) {\n        $scope.color = 'blue';\n        $scope.name = 'WAREHOUSE.STORE';\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndVerifactuIntegrationInstalledAppFormController', ndVerifactuIntegrationInstalledAppFormController)\n    .directive('ndVerifactuIntegrationInstalledAppForm', ndVerifactuIntegrationInstalledAppForm);\n\n  /** @ngInject */\n  function ndVerifactuIntegrationInstalledAppForm() {\n    return {\n      restrict: 'E',\n      scope: {\n        integrationInstalledApp: '=?',\n        fiscalAddresses: '=?'\n      },\n      controller: 'ndVerifactuIntegrationInstalledAppFormController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-verifactu-integration-installed-app-form/nd-verifactu-integration-installed-app-form.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndVerifactuIntegrationInstalledAppFormController(\n    $mdDialog,\n    $http,\n    $interval,\n    $mdToast,\n    $scope,\n    $filter,\n    $window,\n    api,\n    Role,\n    Session,\n    Utils,\n    VerifactuIntegrationInstalledApp,\n    ERROR_CODES,\n    HTTP_STATUS,\n    USER_ROLES,\n    VERIFACTU_DOCUMENTS_STATUS\n  ) {\n\n    // Data\n    var vm = this;\n    vm.integrationInstalledApp = $scope.integrationInstalledApp || {};\n    vm.fiscalAddresses = $scope.fiscalAddresses || [];\n    vm.hasContractAttached = false;\n    vm.hasIdentityCardAttached = false;\n    vm.saving = false;\n    vm.ngFlowOptions = {\n      chunkSize: 1024 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000,\n      fileParameterName: 'contract'\n    };\n    vm.ngFlow = {\n      flow: {}\n    };\n    vm.ngFlowIdentityCardOptions = {\n      chunkSize: 1024 * 1024 * 1024,\n      maxChunkRetries: 1,\n      simultaneousUploads: 1,\n      singleFile: true,\n      testChunks: false,\n      progressCallbacksInterval: 1000,\n      fileParameterName: 'identity_card'\n    };\n    vm.ngFlowIdentityCard = {\n      flow: {}\n    };\n\n    // Methods\n    vm.fiscalAddressChanged = fiscalAddressChanged;\n    vm.downloadGrantDocument = downloadGrantDocument;\n    vm.fileAdded = fileAdded;\n    vm.identityCardFileAdded = identityCardFileAdded;\n    vm.save = save;\n    vm.getInformationPanelVariation = getInformationPanelVariation;\n    vm.allowedToSave = allowedToSave;\n    vm.showEnableTestModeDialog = showEnableTestModeDialog;\n    vm.showDocumentInformationPanel = showDocumentInformationPanel;\n    vm.showTestModeInformationPanel = showTestModeInformationPanel;\n    vm.isEnableRealModeButtonDisabled = isEnableRealModeButtonDisabled;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      initializeWatches();\n    }\n\n    function initializeWatches() {\n      $scope.$watch('integrationInstalledApp', function(newVal) {\n        if (newVal) {\n          vm.integrationInstalledApp = newVal;\n        }\n      }, true);\n      $scope.$watch('fiscalAddresses', function(newVal) {\n        if (newVal) {\n          vm.fiscalAddresses = newVal;\n        }\n      });\n    }\n\n    function fiscalAddressChanged() {\n      if ($scope.verifactuIntegrationInstalledAppForm &&\n        $scope.verifactuIntegrationInstalledAppForm.fiscalAddress) {\n        $scope.verifactuIntegrationInstalledAppForm.fiscalAddress.$setValidity('unique', true);\n      }\n    }\n\n    function downloadGrantDocument() {\n      api.integrationApps.verifactuInstalledIntegrationApp.get({\n        id: vm.integrationInstalledApp.id,\n        option: 'generate-contract-file'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          Utils.downloadFile('representacion_directa_software_verifactu.pdf', 'application/pdf', Utils.resourceToBase64(response));\n        } else if (response.error) {\n          showContractErrorDialog(response);\n        }\n      });\n    }\n\n    function fileAdded(file) {\n      vm.ngFlow.flow.files.push(file);\n      vm.hasContractAttached = true;\n      vm.integrationInstalledApp.contract = file.file;\n    }\n\n    function identityCardFileAdded(file) {\n      vm.ngFlowIdentityCard.flow.files.push(file);\n      vm.hasIdentityCardAttached = true;\n      vm.integrationInstalledApp.identity_card = file.file;\n    }\n\n    function save() {\n      if (!allowedToSave()) {\n        return;\n      }\n      vm.saving = true;\n      var formData = new FormData();\n\n      if (vm.integrationInstalledApp.contract && vm.hasContractAttached) {\n        formData.append('contract', vm.integrationInstalledApp.contract);\n      }\n      if (vm.integrationInstalledApp.identity_card && vm.hasIdentityCardAttached) {\n        formData.append('identity_card', vm.integrationInstalledApp.identity_card);\n      }\n      var dataToSend = vm.integrationInstalledApp.toJson();\n      Object.keys(dataToSend).forEach(function(key) {\n        if (dataToSend[key] != null) {\n          formData.append(key, dataToSend[key]);\n        }\n      });\n\n      var targetUrl = api.urls.integrationApps.verifactuInstalledIntegrationApp\n        .replace('/:option', '');\n\n      var headers = {\n        headers: {\n          'Content-Type': undefined,\n          'Authorization': 'Token ' + Session.token\n        },\n        transformRequest: angular.identity\n      };\n\n      if (vm.integrationInstalledApp.id) {\n        targetUrl = targetUrl.replace(':id', vm.integrationInstalledApp.id);\n        $http.put(targetUrl, formData, headers).then(\n          function(response) {\n            postSave(response);\n          }, function(error) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.saving = false;\n          });\n      } else {\n        targetUrl = targetUrl.replace('/:id', '');\n        $http.post(targetUrl, formData, headers).then(\n          function(response) {\n            postSave(response);\n          }, function(error, status) {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            vm.saving = false;\n          });\n      }\n    }\n\n    function postSave(response) {\n      var updatedData;\n      if (response.status === HTTP_STATUS.HTTP_200_OK) {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('VERIFACTU.VERIFACTU_SUCCESSFULLY_UPDATED')).position('top right'));\n        updatedData = new VerifactuIntegrationInstalledApp(response.data);\n        angular.extend($scope.integrationInstalledApp, updatedData);\n        vm.integrationInstalledApp = $scope.integrationInstalledApp;\n        vm.hasContractAttached = false;\n        vm.hasIdentityCardAttached = false;\n      } else if (response.status === HTTP_STATUS.HTTP_201_CREATED) {\n        updatedData = new VerifactuIntegrationInstalledApp(response.data);\n        angular.extend($scope.integrationInstalledApp, updatedData);\n        vm.integrationInstalledApp = $scope.integrationInstalledApp;\n        vm.hasContractAttached = false;\n        vm.hasIdentityCardAttached = false;\n      } else if (response.status === HTTP_STATUS.HTTP_409_CONFLICT && response.data.error) {\n        showFormErrors(response.data.error);\n      } else {\n        $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n      }\n      vm.saving = false;\n    }\n\n    function showFormErrors(errorCode) {\n      if (errorCode === ERROR_CODES.ERROR_10003_VERIFACTU_ALREADY_EXISTS) {\n        $scope.verifactuIntegrationInstalledAppForm.fiscalAddress.$setValidity('unique', false);\n        $scope.verifactuIntegrationInstalledAppForm.fiscalAddress.$setTouched();\n        $scope.verifactuIntegrationInstalledAppForm.fiscalAddress.$setDirty();\n      }\n    }\n\n    function showContractErrorDialog(response) {\n      if (response.error === ERROR_CODES.ERROR_10004_VERIFACTU_MISSING_OWNER) {\n        var alert = $mdDialog.alert()\n          .title($filter('translate')('VERIFACTU.MISSING_COMPANY_OWNER_TO_GENERATE_CONTRACT'))\n          .htmlContent($filter('translate')('VERIFACTU.MISSING_COMPANY_OWNER_TO_GENERATE_CONTRACT_MSG', {\n            companyName: Session.company.legal_name\n          }))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(alert);\n      } else if (response.error === ERROR_CODES.ERROR_10005_VERIFACTU_MISSING_OWNER_DATA) {\n        var confirm = $mdDialog.confirm()\n          .title($filter('translate')('VERIFACTU.MISSING_OWNER_INFORMATION_TO_GENERATE_CONTRACT'))\n          .htmlContent($filter('translate')('VERIFACTU.MISSING_OWNER_INFORMATION_TO_GENERATE_CONTRACT_MSG', {\n            username: response.username\n          }))\n          .ok($filter('translate')('VERIFACTU.UPDATE_FIELDS_NOW'))\n          .cancel($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(confirm).then(function() {\n          openUserDialog(response.user_id);\n        }, function() {\n          // Do nothing\n        });\n      } else if (response.error === ERROR_CODES.ERROR_10006_VERIFACTU_MISSING_COMPANY_DATA) {\n        var alert = $mdDialog.alert()\n          .title($filter('translate')('VERIFACTU.MISSING_COMPANY_INFORMATION_TO_GENERATE_CONTRACT'))\n          .htmlContent($filter('translate')('VERIFACTU.MISSING_COMPANY_INFORMATION_TO_GENERATE_CONTRACT_MSG', { name: response.legal_name }))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(alert);\n      } else if (response.error === ERROR_CODES.ERROR_10007_VERIFACTU_MISSING_FISCAL_ADDRESS_DATA) {\n        var alert = $mdDialog.alert()\n          .title($filter('translate')('VERIFACTU.MISSING_FISCAL_ADDRESS_INFORMATION_TO_GENERATE_CONTRACT'))\n          .htmlContent($filter('translate')('VERIFACTU.MISSING_FISCAL_ADDRESS_INFORMATION_TO_GENERATE_CONTRACT_MSG', { name: response.legal_name }))\n          .ok($filter('translate')('GENERAL.CLOSE'));\n        $mdDialog.show(alert);\n      }\n    }\n\n    function openUserDialog(userId) {\n      if (!Session.hasPermission('account.users.update')) {\n        return;\n      }\n      $mdDialog.show({\n        controller: 'UserDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/main/apps/account/views/users/dialogs/user/user-dialog.html',\n        clickOutsideToClose: true,\n        multiple: true,\n        resolve: {\n          UserData: function(apiResolver) {\n            return apiResolver.resolve('account.users@get', { id: userId });\n          },\n          WarehousesData: function(apiResolver) {\n            return apiResolver.resolve('inventories.warehouses@list', {\n              serializer: 'WarehouseSimpleSerializer'\n            }).then(function(response) {\n              return response.results;\n            });\n          },\n          FiscalAddressesData: function(apiResolver) {\n            return apiResolver.resolve('account.fiscalAddress@list').then(function(response) {\n              return response.results;\n            });\n          },\n          RolesData: function(apiResolver) {\n            return apiResolver.resolve('account.roles@list').then(function(response) {\n              return response.results.filter(function(role) {\n                return role.id !== USER_ROLES.USER_ROLE_SUPERUSER;\n              }).map(function(role) {\n                return new Role(role);\n              });\n            });\n          }\n        },\n        locals: {\n          params: {\n            hideDelete: true\n          }\n        }\n      }).finally(function() {\n        // Nothing to do\n      });\n    }\n\n    function getInformationPanelVariation() {\n      if (vm.integrationInstalledApp.documents_status === VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_REJECTED) {\n        return 'error';\n      }\n      if (vm.integrationInstalledApp.documents_status === VERIFACTU_DOCUMENTS_STATUS.VERIFACTU_DOCUMENTS_APPROVED) {\n        return 'success';\n      }\n      return 'info';\n    }\n\n    function allowedToSave() {\n      if (vm.saving) {\n        return false;\n      }\n      if (!vm.integrationInstalledApp.canUploadDocuments()) {\n        return false;\n      }\n      return true;\n    }\n\n    function showEnableTestModeDialog() {\n\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('VERIFACTU.ENABLE_TEST_MODE'))\n        .htmlContent($filter('translate')('VERIFACTU.ENABLE_TEST_MODE_MESSAGE'))\n        .ok($filter('translate')('VERIFACTU.ENABLE_TEST_MODE_CONFIRM'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n      $mdDialog.show(confirm).then(function() {\n        enableTestMode();\n      }, function() {\n        // Do nothing\n      });\n    }\n\n    function enableTestMode() {\n      if (!vm.integrationInstalledApp.canEnableTestMode()) {\n        return;\n      }\n      if(!Session.user.isSuperAdmin()){\n        return;\n      }\n      vm.saving = true;\n      api.integrationApps.verifactuInstalledIntegrationApp.update({\n        id: vm.integrationInstalledApp.id,\n        option: 'enable'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          var updatedData = new VerifactuIntegrationInstalledApp(response);\n          angular.extend($scope.integrationInstalledApp, updatedData);\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('VERIFACTU.VERIFACTU_SUCCESSFULLY_UPDATED')).position('top right'));\n          $window.location.reload();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.saving = false;\n      });\n    }\n\n    function showDocumentInformationPanel() {\n      return !!vm.integrationInstalledApp.id && vm.integrationInstalledApp.isDisabled();\n    }\n\n    function showTestModeInformationPanel() {\n      return vm.integrationInstalledApp.isEnabled() && vm.integrationInstalledApp.isTestEnvironment();\n    }\n\n    function isEnableRealModeButtonDisabled(){\n      return vm.saving || !vm.integrationInstalledApp.canEnableRealMode();\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndUsersListController', ndUsersListController)\n    .directive('ndUsersList', ndUsersList);\n\n  /** @ngInject */\n  function ndUsersList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=', roles: '='\n      },\n      controller: 'ndUsersListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-users-list/nd-users-list.html'\n    };\n  }\n\n  function ndUsersListController($scope, $timeout, $rootScope, $filter, $sce, $mdDialog, $document, api, Session, USER_ROLES) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.account.users.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = 'UIGridAccountCustomersControllerV3';\n    vm.userPaymentMethods = {};\n    vm.hasMultipleFiscalDirectionFeature = !Session.hasSubscription || Session.hasAddOn('inventory.configuration.company.multiple_fiscal_directions');\n\n    // Methods\n    $scope.getRolesBadge = getRolesBadge;\n    $scope.getWarehousesBadge = getWarehousesBadge;\n    $scope.getFiscalAddressesBadge = getFiscalAddressesBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        first_name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          field: 'first_name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellClass: 'cell-padding',\n          cellTemplate: '<div layout=\"row\" layout-align=\"start center\"><nd-user-picture user=\"row.entity\" class=\"mr-8\"></nd-user-picture><span class=\"text-bold blue-fg cursor-pointer\" ng-click=\"grid.appScope.$parent.$parent.vm.openUserDialog(row.entity)\">{{row.entity.first_name || \"-\"}} {{row.entity.last_name || \"-\"}}</span></div>'\n        }, username: {\n          displayName: $filter('translate')('USERS.USERNAME'),\n          headerTooltip: $filter('translate')('USERS.USERNAME'),\n          field: 'username',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><span class=\"text-bold blue-fg cursor-pointer\" ng-click=\"grid.appScope.$parent.$parent.vm.openUserDialog(row.entity)\">{{row.entity.username}}</span></div>'\n        }, email: {\n          displayName: $filter('translate')('USERS.EMAIL'),\n          field: 'email',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.email || \"-\"}}</div>'\n        }, phone: {\n          displayName: $filter('translate')('USERS.PHONE'),\n          field: 'phone',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.phone || \"-\"}}</div>'\n        }, roles: {\n          displayName: $filter('translate')('USERS.ROLES'),\n          field: 'roles',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 400,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getRolesBadge(row.entity.roles)\"></div>'\n        }, warehouses_names: {\n          displayName: $filter('translate')('WAREHOUSES.WAREHOUSES'),\n          field: 'warehouses_names',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 400,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getWarehousesBadge(row.entity.warehouses_names)\"></div>'\n        }, fiscal_addresses_names: {\n          displayName: $filter('translate')('USERS.FISCAL_ADDRESSES'),\n          field: 'fiscal_addresses_names',\n          permission: vm.hasMultipleFiscalDirectionFeature,\n          visible: true,\n          minWidth: 100,\n          width: 400,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getFiscalAddressesBadge(row.entity.fiscal_addresses_names)\"></div>'\n        }\n      };\n    }\n\n    function getRolesBadge(data) {\n      var roles = '';\n      data.map(function(_role) {\n        var role = USER_ROLES[_role];\n        if (!role) {\n          if ($scope.roles[_role]) {\n            roles += '<span class=\"status-badge md-grey-400-bg\">';\n            if ($scope.roles[_role].description) {\n              roles += '<md-tooltip md-delay=\"500\">' + $scope.roles[_role].description + '</md-tooltip>';\n            }\n            roles += $scope.roles[_role].name;\n            roles += '</span>';\n          } else {\n            roles += '<span class=\"status-badge md-grey-400-bg\">-</span>';\n          }\n        } else {\n          roles += '<span class=\"status-badge md-grey-400-bg\">' + $filter('translate')('USERS.' + role) + '</span>';\n        }\n      });\n      return $sce.trustAsHtml(roles);\n    }\n\n    function getWarehousesBadge(data) {\n      var warehouses = '';\n      data.map(function(warehouse_name) {\n        warehouses += '<span class=\"status-badge blue-50-bg\">' + warehouse_name + '</span>';\n      });\n      return $sce.trustAsHtml(warehouses);\n    }\n\n    function getFiscalAddressesBadge(data) {\n      var fiscal_addresses = '';\n      data.map(function(fiscal_addresse_name) {\n        fiscal_addresses += '<span class=\"status-badge blue-50-bg\">' + fiscal_addresse_name + '</span>';\n      });\n      return $sce.trustAsHtml(fiscal_addresses);\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTransfersListController', ndTransfersListController)\n    .directive('ndTransfersList', ndTransfersList);\n\n  /** @ngInject */\n  function ndTransfersList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?'\n      },\n      controller: 'ndTransfersListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-transfers-list/nd-transfers-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndTransfersListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, $compile, api, Session,\n                                     HTTP_STATUS, UiGridService, TRANSFER_ORDER_STATUSES, TRANSFER_ORDER_STATUS_COLORS,\n                                     TRANSFER_ORDER_STATUSES_REVERSE) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.transferOrders.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryTransfersControllerV3';\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('TRANSFERS.SERIAL_NUMBER'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a ng-if=\"!row.entity.is_replenishment && row.entity.status !==\\'0\\'\" ui-sref=\"app.inventory.transfers.transfer.delivery({id:row.entity.id})\">{{row.entity.autocode}}</a>' +\n            '<a ng-if=\"row.entity.is_replenishment && row.entity.status !==\\'0\\'\" ui-sref=\"app.inventory.transfers.transfer.products({id:row.entity.id})\">{{row.entity.autocode}}</a>' +\n            '<span ng-if=\"row.entity.status ===\\'0\\'\">{{row.entity.autocode}}</span>'\n        }, status: {\n          displayName: $filter('translate')('TRANSFERS.STATUS'),\n          headerTooltip: $filter('translate')('TRANSFERS.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 180,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.status)\"></div>'\n        }, source_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          field: 'source_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.source_warehouse_name || \\'-\\'}}</div>'\n        }, target_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, created_at: {\n          displayName: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          headerTooltip: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.created_at)}}</div>'\n        }, expected_at: {\n          displayName: $filter('translate')('TRANSFERS.EXPECTED_DATE'),\n          headerTooltip: $filter('translate')('TRANSFERS.EXPECTED_DATE'),\n          field: 'expected_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.expected_at)}}</div>'\n        }, amount: {\n          displayName: $filter('translate')('TRANSFERS.ITEMS'),\n          headerTooltip: $filter('translate')('TRANSFER.ITEMS'),\n          field: 'amount',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount}}</div>'\n        }, notes: {\n          displayName: $filter('translate')('TRANSFERS.NOTES'),\n          headerTooltip: $filter('translate')('TRANSFERS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes}}</div>'\n        }\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + TRANSFER_ORDER_STATUS_COLORS[status] + '\">' + $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]) + '</span>');\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndTransferDeliveriesListController', ndTransferDeliveriesListController)\n    .directive('ndTransferDeliveriesList', ndTransferDeliveriesList);\n\n  /** @ngInject */\n  function ndTransferDeliveriesList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?',\n        selected: '=?'\n      },\n      controller: 'ndTransferDeliveriesListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-transfer-deliveries-list/nd-transfer-deliveries-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndTransferDeliveriesListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, $compile, api, Session,\n                                     HTTP_STATUS, UiGridService, TRANSFER_ORDER_STATUSES, TRANSFER_ORDER_STATUS_COLORS,\n                                     TRANSFER_ORDER_STATUSES_REVERSE) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.transferOrderDeliveries.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryTransferDeliveriesControllerV1';\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        transfer_order__autocode: {\n          displayName: $filter('translate')('TRANSFERS.TRANSFER_ORDER'),\n          field: 'transfer_order__autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a class=\"cell-middle\" ui-sref=\"app.inventory.transfers.transfer.delivery({id:row.entity.transfer_order})\">{{row.entity.transfer_autocode}}</a>'\n        }, autocode: {\n          displayName: $filter('translate')('TRANSFERS.DELIVERY_NOTE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<a class=\"cell-middle\" ui-sref=\"app.inventory.transfers.transfer.delivery({id:row.entity.transfer_order})\">{{row.entity.autocode}}</a>'\n        }, transfer_order__status: {\n          displayName: $filter('translate')('TRANSFERS.STATUS'),\n          headerTooltip: $filter('translate')('TRANSFERS.STATUS'),\n          field: 'transfer_order__status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 180,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.transfer_status)\"></div>'\n        }, transfer_order__source_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          field: 'transfer_order__source_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.source_warehouse_name || \\'-\\'}}</div>'\n        }, transfer_order__target_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'transfer_order__target_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, transfer_order__created_at: {\n          displayName: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          headerTooltip: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          field: 'transfer_order__created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.transfer_created_at)}}</div>'\n        }, amount: {\n          displayName: $filter('translate')('TRANSFERS.ITEMS'),\n          headerTooltip: $filter('translate')('TRANSFER.ITEMS'),\n          field: 'amount',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount}}</div>'\n        }, transfer_order__notes: {\n          displayName: $filter('translate')('TRANSFERS.NOTES'),\n          headerTooltip: $filter('translate')('TRANSFERS.NOTES'),\n          field: 'transfer_order__notes',\n          permission: true,\n          visible: true,\n          minWidth: 200,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.transfer_notes}}</div>'\n        }\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + TRANSFER_ORDER_STATUS_COLORS[status] + '\">' + $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]) + '</span>');\n    }\n\n  }\n\n})();\n\n(function () {\n    'use strict';\n  \n    angular\n      .module('app.core')\n      //.controller('ndStockLegendController', ndStockLegendController)\n      .directive('ndStockLegend', ndStockLegend);\n  \n    /** @ngInject */\n    function ndStockLegend() {\n      return {\n        restrict: 'E',\n        controller: 'ndStockLegendController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/nd-stock-legend/nd-stock-legend.html'\n      };\n    }\n  \n    ///** @ngInject */\n    //function ndStockLegendController($scope) {\n    //  // Data\n    //  var vm = this;\n    //  vm.legend = {\n    //    stock: {fg: \"red-50-fg\", bg: 'md-red-50-bg', option: 'stock', title: 'STOCKS.NEGATIVE_STOCK' },\n    //    minimum: {fg: \"purple-50-fg\", bg: 'md-purple-50-bg', option: 'minimum-stock', title: 'STOCKS.UNDER_MINIMUM'},\n    //    pending: {fg: \"yellow-50-fg\", bg: 'md-yellow-50-bg', option: 'pending-to-receive', title: 'STOCKS.TRANSFER_IN_PROGRESS' },\n    //  };\n    //}\n});\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSetupCardController', ndSetupCardController)\n    .directive('ndSetupCard', ndSetupCard);\n\n  /** @ngInject */\n  function ndSetupCard() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/nd-setup-card/nd-setup-card.html',\n      controller: 'ndSetupCardController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndSetupCardController($scope, $mdDialog, $document, $filter, Session) {\n\n    const PRODUCT_CATEGORIES = 'PRODUCT_CATEGORIES';\n    const VARIANT_CATEGORIES = 'VARIANT_CATEGORIES';\n    const PRODUCTS = 'PRODUCTS';\n    const WHOLESALES = 'WHOLESALES';\n    const STORE_SALES_AND_REGISTER_CLOSURES = 'STORE_SALES_AND_REGISTER_CLOSURES';\n    const ECOMMERCE_SALES = 'ECOMMERCE_SALES';\n    const CASH_MOVEMENT = 'CASH_MOVEMENT';\n    const PURCHASES = 'PURCHASES';\n    const TRANSFERS = 'TRANSFERS';\n    const INVENTORY = 'INVENTORY';\n    const SETTINGS = 'SETTINGS';\n    const INVOICES_PROFORMAS_BUDGETS_AND_PAYMENTS = 'INVOICES_PROFORMAS_BUDGETS_AND_PAYMENTS';\n    const WAREHOUSES = 'WAREHOUSES';\n    const CONTACTS = 'CONTACTS';\n\n    // methods\n    $scope.openDialog = openDialog;\n    $scope.openSetupDialog = openSetupDialog;\n    $scope.openSuperUserDialog = openSuperUserDialog;\n\n    function openDialog($event) {\n      if (Session.user.isSuperAdmin()) {\n        openSuperUserDialog($event);\n      } else {\n        openSetupDialog($event);\n      }\n    }\n\n    function openSuperUserDialog($event) {\n      var confirm = $mdDialog.confirm()\n        .title($filter('translate')('SETUP.SUPER_USER_DIALOG_TITLE'))\n        .htmlContent($filter('translate')('SETUP.SUPER_USER_DIALOG_DESCRIPTION'))\n        .clickOutsideToClose(true)\n        .parent(angular.element(document.body))\n        .ok($filter('translate')('GENERAL.YES_CONTINUE_DATA_DELETION'))\n        .cancel($filter('translate')('GENERAL.CANCEL'));\n\n      $mdDialog.show(confirm).then(function() {\n        openSetupDialog($event);\n      });\n\n    }\n\n    function openSetupDialog(ev) {\n      var dialogDef = {\n        controller: 'ndSetupDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/nd-setup-card/dialogs/nd-setup-dialog/nd-setup-dialog.html',\n        parent: angular.element($document.find('body')),\n        targetEvent: ev,\n        escapeToClose: false,\n        locals: {\n          delayInSeconds: 1,\n          options: [\n            {id: PRODUCT_CATEGORIES, value: $filter('translate')('SETUP.PRODUCT_CATEGORIES')},\n            {id: VARIANT_CATEGORIES, value: $filter('translate')('SETUP.VARIANT_CATEGORIES')},\n            {id: PRODUCTS, value: $filter('translate')('SETUP.PRODUCTS')},\n            {id: WHOLESALES, value: $filter('translate')('SETUP.WHOLESALES')},\n            {id: STORE_SALES_AND_REGISTER_CLOSURES, value: $filter('translate')('SETUP.STORE_SALES_AND_REGISTER_CLOSURES')},\n            {id: ECOMMERCE_SALES, value: $filter('translate')('SETUP.ECOMMERCE_SALES')},\n            {id: CASH_MOVEMENT, value: $filter('translate')('SETUP.CASH_MOVEMENT')},\n            {id: PURCHASES, value: $filter('translate')('SETUP.PURCHASES')},\n            {id: TRANSFERS, value: $filter('translate')('SETUP.TRANSFERS')},\n            {id: INVENTORY, value: $filter('translate')('SETUP.INVENTORY')},\n            {id: SETTINGS, value: $filter('translate')('SETUP.SETTINGS')},\n            {id: INVOICES_PROFORMAS_BUDGETS_AND_PAYMENTS, value: $filter('translate')('SETUP.INVOICES_PROFORMAS_BUDGETS_AND_PAYMENTS')},\n            {id: WAREHOUSES, value: $filter('translate')('SETUP.WAREHOUSES')},\n            {id: CONTACTS, value: $filter('translate')('SETUP.CONTACTS')},\n          ]\n        }\n      }\n\n      $mdDialog.show(dialogDef)\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .directive('ndSerialNumberType', ndSerialNumberType);\n\n  function ndSerialNumberType() {\n    return {\n      restrict: 'E',\n      scope: {\n        value: '=?',\n        counter: '=?',\n        length: '=?',\n        prefix: '@?',\n        suffix: '@?',\n        verifactuApp: '=?'\n      },\n      template: [\n        '<div layout=\"row\" layout-align=\"start center\">',\n        '<md-icon ng-if=\"showIcon()\" md-font-icon md-svg-src=\"assets/images/custom-material-design-icons/verifactu-color.62a97f20.svg\" class=\"mr-5 s20\"></md-icon>',\n        '<span flex>{{ getValue() }}</span>',\n        '</div>'\n      ].join(''),\n      controller: ['$scope', 'SerialNumberType', function($scope, SerialNumberType) {\n        $scope.showIcon = function() {\n          if ($scope.value && $scope.value.verifactu_app) {\n            return true;\n          }\n          if ($scope.verifactuApp) {\n            return true;\n          }\n          return false;\n        };\n\n        $scope.getValue = function() {\n          if ($scope.value) {\n            return new SerialNumberType($scope.value).getCurrent();\n          }\n          return new SerialNumberType({\n            counter: $scope.counter,\n            counter_length: $scope.length,\n            prefix: $scope.prefix,\n            suffix: $scope.suffix\n          }).getCurrent();\n        };\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .directive('ndFullSerialNumberType', ndFullSerialNumberType);\n\n  function ndFullSerialNumberType() {\n    return {\n      restrict: 'E',\n      scope: {\n        value: '='\n      },\n      template: [\n        '<div layout=\"row\" layout-align=\"start center\">',\n        '<span class=\"mr-5\">{{value.name}}</span>',\n        '<nd-serial-number-type value=\"value\"></nd-serial-number-type>',\n        '</div>'\n      ].join(''),\n      controller: ['$scope', 'SerialNumberType', function($scope, SerialNumberType) {\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSalesListController', ndSalesListController)\n    .directive('ndSalesList', ndSalesList);\n\n  /** @ngInject */\n  function ndSalesList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?'\n      },\n      controller: 'ndSalesListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-sales-list/nd-sales-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSalesListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, api, Session,\n                                     HTTP_STATUS, UiGridService, SALE_ORDER_STATUSES, SALE_ORDER_STATUS_COLORS, INVOICE_TYPES) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.saleOrders.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventorySalesControllerV4';\n    //vm.EXPIRING_DATE_PAYMENT_STATUS = EXPIRING_DATE_PAYMENT_STATUS;\n    //vm.salePaymentMethods = {};\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n    $scope.getGeneratedDocuments = getGeneratedDocuments;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      /*\n        prepareDateAndTimeFilterData(d);\n      */\n\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('SALES.SERIAL_NUMBER'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a ui-sref=\"app.wholesale.sales.sale.products({id:row.entity.id})\">{{row.entity.autocode}}</a>'\n        }, status: {\n          displayName: $filter('translate')('SALE.STATUS'),\n          headerTooltip: $filter('translate')('SALE.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          width: 180,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.status)\"></div>'\n        }, target_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_warehouse__name',\n          permission: true,\n          visible: false,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, source_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          field: 'source_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.source_warehouse_name || \\'-\\'}}</div>'\n        }, sales_agent__first_name: {\n          displayName: $filter('translate')('SALES.SALES_AGENT'),\n          headerTooltip: $filter('translate')('SALES.SALES_AGENT'),\n          field: 'sales_agent__first_name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.sales_agent_name || \\'-\\'}}</div>'\n        }, season__name: {\n          displayName: $filter('translate')('SALES.SEASON'),\n          headerTooltip: $filter('translate')('SALES.SEASON'),\n          field: 'season__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season_name || \\'-\\'}}</div>'\n        }, collection__code: {\n          displayName: $filter('translate')('SALE.COLLECTION'),\n          headerTooltip: $filter('translate')('SALE.COLLECTION'),\n          field: 'collection__code',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.collection_code || \\'-\\'}}</div>'\n        }, customer__name: {\n          displayName: $filter('translate')('SALE.CONTACT'),\n          headerTooltip: $filter('translate')('SALE.CONTACT'),\n          field: 'customer__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.customer_name || \\'-\\'}}</div>'\n        }, created_at: {\n          displayName: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          headerTooltip: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.created_at)}}</div>'\n        }, amount: {\n          displayName: $filter('translate')('SALES.ITEMS'),\n          headerTooltip: $filter('translate')('SALES.ITEMS'),\n          field: 'amount',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount}}</div>'\n        }, subtotal: {\n          displayName: $filter('translate')('SALES.SUBTOTAL'),\n          headerTooltip: $filter('translate')('SALES.SUBTOTAL'),\n          field: 'subtotal',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{(row.entity.subtotal || 0) | price}} {{row.entity.currency | currencyCharacter}}</div>'\n        }, total_incl_tax: {\n          displayName: $filter('translate')('SALES.TOTAL'),\n          headerTooltip: $filter('translate')('SALES.TOTAL'),\n          field: 'total_incl_tax',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{(row.entity.total_incl_tax || 0) | price}} {{row.entity.currency | currencyCharacter}}</div>'\n        }, generated_documents: {\n          displayName: $filter('translate')('SALES.GENERATED_DOCUMENTS'),\n          headerTooltip: $filter('translate')('SALES.GENERATED_DOCUMENTS'),\n          field: 'generated_documents',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getGeneratedDocuments(row.entity)\"></div>'\n        }, notes: {\n          displayName: $filter('translate')('TRANSFERS.NOTES'),\n          headerTooltip: $filter('translate')('TRANSFERS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes}}</div>'\n        }\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + SALE_ORDER_STATUS_COLORS[status] + '\">' + $filter('translate')('SALES.' + SALE_ORDER_STATUSES[status]) + '</span>');\n    }\n\n    function getGeneratedDocuments(full) {\n\n      var cell = '<div layout=\"column\" layout-align=\"start start\">';\n      var proforma_count = 0;\n      var quote_count = 0;\n      var invoice_count = 0;\n      if(full.invoices){\n        full.invoices.forEach(function(item) {\n          if (item.type === INVOICE_TYPES.PROFORMA) {\n            proforma_count++;\n          } else if (item.type === INVOICE_TYPES.QUOTE) {\n            quote_count++;\n          } else if (item.type === INVOICE_TYPES.INVOICE) {\n            invoice_count++;\n          }\n        });\n      }\n\n      if (quote_count > 0) {\n        cell += '<span>' + $filter('translate')('SALES.QUOTE') + ' (' + quote_count + ')</span>';\n      }\n      if (proforma_count > 0) {\n        cell += '<span>' + $filter('translate')('SALES.PROFORMA') + ' (' + proforma_count + ')</span>';\n      }\n      if (invoice_count > 0) {\n        cell += '<span>' + $filter('translate')('SALES.INVOICE') + ' (' + invoice_count + ')</span>';\n      }\n      cell += '</div>';\n      return $sce.trustAsHtml(cell);\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndSaleDeliveriesListController', ndSaleDeliveriesListController)\n    .directive('ndSaleDeliveriesList', ndSaleDeliveriesList);\n\n  /** @ngInject */\n  function ndSaleDeliveriesList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?',\n        selected: '=?'\n      },\n      controller: 'ndSaleDeliveriesListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-sale-deliveries-list/nd-sale-deliveries-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndSaleDeliveriesListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, $compile, api, Session,\n                                     HTTP_STATUS, UiGridService, ORDER_DELIVERY_STATUSES, ORDER_DELIVERY_STATUS_COLORS,\n                                     SALE_ORDER_STATUSES_REVERSE) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.saleOrderDeliveries.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventorySaleDeliveriesControllerV1';\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        sale_order__autocode: {\n          displayName: $filter('translate')('SALE.SALE_ORDER'),\n          field: 'sale_order__autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a class=\"cell-middle\" ui-sref=\"app.wholesale.sales.sale.delivery({id:row.entity.sale_order})\">{{row.entity.sale_autocode}}</a>'\n        }, autocode: {\n          displayName: $filter('translate')('SALE.DELIVERY_NOTE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<a class=\"cell-middle\" ui-sref=\"app.wholesale.sales.sale.delivery({id:row.entity.sale_order})\">{{row.entity.autocode}}</a>'\n        }, status: {\n          displayName: $filter('translate')('SALE.STATUS'),\n          headerTooltip: $filter('translate')('SALE.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.status)\"></div>'\n        }, source_warehouse__name: {\n          displayName: $filter('translate')('SALES.STOCK_WAREHOUSE'),\n          headerTooltip: $filter('translate')('SALES.STOCK_WAREHOUSE'),\n          field: 'source_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.source_warehouse_name || \\'-\\'}}</div>'\n        }, customer__name: {\n          displayName: $filter('translate')('SALE.CUSTOMER'),\n          headerTooltip: $filter('translate')('SALE.CUSTOMER'),\n          field: 'customer__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.customer_name || \\'-\\'}}</div>'\n        }, sale_order__created_at: {\n          displayName: $filter('translate')('SALE.CREATION_DATE'),\n          headerTooltip: $filter('translate')('SALE.CREATION_DATE'),\n          field: 'sale_order__created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.sale_created_at)}}</div>'\n        }, prepared_at: {\n          displayName: $filter('translate')('SALE.PREPARED_AT'),\n          headerTooltip: $filter('translate')('SALE.PREPARED_AT'),\n          field: 'prepared_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.prepared_at)}}</div>'\n        }, shipped_at: {\n          displayName: $filter('translate')('SALE.SHIPPED_AT'),\n          headerTooltip: $filter('translate')('SALE.SHIPPED_AT'),\n          field: 'shipped_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.shipped_at)}}</div>'\n        }, received_at: {\n          displayName: $filter('translate')('SALE.RECEIVED_AT'),\n          headerTooltip: $filter('translate')('SALE.RECEIVED_AT'),\n          field: 'received_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.received_at)}}</div>'\n        }, amount: {\n          displayName: $filter('translate')('SALES.ITEMS'),\n          headerTooltip: $filter('translate')('SALES.ITEMS'),\n          field: 'amount',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount}}</div>'\n        }, notes: {\n          displayName: $filter('translate')('SALE.NOTES'),\n          headerTooltip: $filter('translate')('SALE.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes}}</div>'\n        }, private_notes: {\n          displayName: $filter('translate')('SALE.PRIVATE_NOTES'),\n          headerTooltip: $filter('translate')('SALE.PRIVATE_NOTES'),\n          field: 'private_notes',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.private_notes}}</div>'\n        }\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + ORDER_DELIVERY_STATUS_COLORS[status] + '\">' + $filter('translate')('SALE.' + ORDER_DELIVERY_STATUSES[status]) + '</span>');\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPurchasesListController', ndPurchasesListController)\n    .directive('ndPurchasesList', ndPurchasesList);\n\n  /** @ngInject */\n  function ndPurchasesList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?'\n      },\n      controller: 'ndPurchasesListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-purchases-list/nd-purchases-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPurchasesListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, api, Session,\n                                     HTTP_STATUS, UiGridService, PURCHASE_ORDER_STATUSES, PURCHASE_ORDER_STATUS_COLORS,\n                                     EXPIRING_DATE_PAYMENT_STATUS) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.purchaseOrders.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryPurchasesControllerV3';\n    vm.purchasePaymentMethods = {};\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n    // $scope.getPaymentMethods = getPaymentMethods;\n    // $scope.getExpirationDate = getExpirationDate;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('PURCHASES.SERIAL_NUMBER'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a ui-sref=\"app.inventory.purchases.purchase.products({id:row.entity.id})\">{{row.entity.autocode}}</a>'\n        }, created_at: {\n          displayName: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          headerTooltip: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.created_at)}}</div>'\n        }, status: {\n          displayName: $filter('translate')('PURCHASES.STATUS'),\n          headerTooltip: $filter('translate')('PURCHASES.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 180,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.status)\"></div>'\n        }, contact__name: {\n          displayName: $filter('translate')('PURCHASES.PROVIDER'),\n          headerTooltip: $filter('translate')('PURCHASES.PROVIDER'),\n          field: 'contact__name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.contact_name || \\'-\\'}}</div>'\n        }, target_warehouse__name: {\n          displayName: $filter('translate')('PURCHASES.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('PURCHASES.TARGET_WAREHOUSE'),\n          field: 'target_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, shipping_date: {\n          displayName: $filter('translate')('PURCHASES.START_SHIPPING_DATE'),\n          headerTooltip: $filter('translate')('PURCHASES.START_SHIPPING_DATE'),\n          field: 'shipping_date',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.shipping_date)}}</div>'\n        }, season__name: {\n          displayName: $filter('translate')('PURCHASES.SEASON'),\n          headerTooltip: $filter('translate')('PURCHASES.SEASON'),\n          field: 'season__name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season_name || \\'-\\'}}</div>'\n        }, expiring_date: {\n          displayName: $filter('translate')('INVOICE.EXPIRATION_DATE'),\n          headerTooltip: $filter('translate')('INVOICE.EXPIRATION_DATE'),\n          field: 'expiring_date',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.expiring_date)}}</div>'\n        }, total: {\n          displayName: $filter('translate')('INVOICE.TOTAL'),\n          headerTooltip: $filter('translate')('INVOICE.TOTAL'),\n          field: 'total',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{(row.entity.total || 0) | price}} {{row.entity.currency | currencyCharacter}}</div>'\n        }, amount: {\n          displayName: $filter('translate')('PURCHASE.ITEMS'),\n          headerTooltip: $filter('translate')('PURCHASE.ITEMS'),\n          field: 'amount',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount}}</div>'\n        }, notes: {\n          displayName: $filter('translate')('TRANSFERS.NOTES'),\n          headerTooltip: $filter('translate')('TRANSFERS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes}}</div>'\n        }/* PENDING TO FINISH\n        , payment_methods: {\n          displayName: $filter('translate')('PAYMENT_METHODS.PAYMENT_METHODS'),\n          headerTooltip: $filter('translate')('PAYMENT_METHODS.PAYMENT_METHODS'),\n          field: 'payment_methods',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getPaymentMethods(row.entity)\"></div>'\n        }*/\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + PURCHASE_ORDER_STATUS_COLORS[status] + '\">' + $filter('translate')('PURCHASES.' + PURCHASE_ORDER_STATUSES[status]) + '</span>');\n    }\n\n    /*function getPaymentMethods(full) {\n      if (full.payment_methods && full.payment_methods.length > 0) {\n        vm.purchasePaymentMethods[full.id] = full;\n        return '<nd-payment-methods-icon parent-object=\"grid.appScope.$parent.vm.purchasePaymentMethods[' + full.id + ']\"></nd-payment-methods-icon>';\n      }\n      return '-';\n    }*/\n\n    /*function getExpirationDate(full) {\n      if (full.expiring_date) {\n        var date = $filter('date')(full.expiring_date, 'dd-MM-yyyy');\n        var expiring_date_status_class = 'dot-' + vm.EXPIRING_DATE_PAYMENT_STATUS[full.expiring_date_status];\n        var tooltip = $filter('translate')('PURCHASE.EXPIRATION_DATE_STATUS_' + vm.EXPIRING_DATE_PAYMENT_STATUS[full.expiring_date_status]);\n        return date + '<div class=\"' + expiring_date_status_class.toLowerCase() + ' ml-10\"></div><md-tooltip>' + tooltip + '</md-tooltip>';\n      }\n      return '-';\n    }*/\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndProductsController', ndProductsController)\n    .directive('ndProducts', ndProducts);\n\n  /** @ngInject */\n  function ndProducts() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/nd-products/nd-products.html',\n      scope: {\n        siteId: '=?',\n        registerId: '=?',\n        callback: '&',\n        registerWarehouse: '=?',\n        selectPrices: '=',\n        setDisabled: '=?',\n        ndInput: '=?'\n      },\n      controller: 'ndProductsController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndProductsController($scope, $rootScope, $filter, $mdDialog, $document, api, $q, Session, HTTP_STATUS, SEARCH_MAX_LENGTH) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    $scope.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n    $scope.setNdBarcodeListenerEnabled = setNdBarcodeListenerEnabled;\n    $scope.productInstance = null;\n    $scope.productId = null;\n    $scope.selectedProduct = null;\n    $scope.colors = [];\n    $scope.sizes = [];\n    $scope.colorsById = {};\n    $scope.productVariantBySizeAndColor = {};\n    $scope.ready = false;\n    $scope.selectedColor = null;\n    $scope.selectedSize = null;\n\n    // Methods\n    $scope.querySearch = querySearch;\n    $scope.selectItem = selectItem;\n    $scope.selectSize = selectSize;\n    $scope.selectColor = selectColor;\n    $scope.selectPricingTier = selectPricingTier;\n\n    function querySearch() {\n\n      var deferred = $q.defer();\n      $scope.searchText = $scope.searchText.substring(0, $scope.SEARCH_MAX_LENGTH);\n      var data = {\n        search: $scope.searchText,\n        serializer: 'ProductPosFinderSerializer',\n        register_warehouse: angular.isDefined($scope.registerWarehouse) ? $scope.registerWarehouse : null,\n        site: $scope.siteId,\n        register: $scope.registerId\n      };\n\n      if ($scope.selectPrices) {\n        data['prices'] = true;\n      }\n\n      api.inventories.products.get(data, function (results) {\n        if (results.results) {\n          deferred.resolve(results.results);\n        } else {\n          deferred.resolve([]);\n        }\n      });\n\n      return deferred.promise;\n    }\n\n    function setNdBarcodeListenerEnabled(value) {\n      $rootScope.ndBarcodeListenerEnabled = value;\n    }\n\n    function selectItem(product) {\n      if (product) {\n        $scope.productVariantBySizeAndColor = {};\n        $scope.colors = [];\n        $scope.sizes = [];\n        $scope.colorsById = {};\n\n        $scope.selectedProduct = product;\n        $scope.sizes = [];\n        $scope.colors = [];\n        // Opening dialog and show loading\n        $scope.ready = false;\n        $mdDialog.show({\n          contentElement: '#nd-product-dialog',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: true\n        });\n\n        // Call to get all variants\n        api.inventories.productVariants.get({\n            product_id: product.id,\n            serializer: 'ProductVariantSerializer'\n          }, function (results, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              $scope.sizes = [];\n              $scope.colors = [];\n              $scope.colorsById = {};\n              $scope.productVariantBySizeAndColor = {};\n              results.results.forEach(function (productVariant) {\n                if (angular.isUndefined($scope.productVariantBySizeAndColor[productVariant.size])) {\n                  $scope.productVariantBySizeAndColor[productVariant.size] = {};\n                  $scope.sizes.push({id: productVariant.size, name: productVariant.size_name});\n                }\n                if (angular.isUndefined($scope.colorsById[productVariant.color])) {\n                  $scope.colorsById[productVariant.color] = productVariant.color_name;\n                  $scope.colors.push({id: productVariant.color, name: productVariant.color_name});\n                }\n                $scope.productVariantBySizeAndColor[productVariant.size][productVariant.color] = productVariant;\n              });\n\n              if (results.results.length === 1) {\n                if (!$scope.selectPrices) {\n                  if (angular.isDefined($scope.callback)) {\n                    $scope.callback({\n                      product: $scope.selectedProduct,\n                      productVariant: results.results[0]\n                    });\n\n                    $scope.selectedProduct = null;\n                    $scope.productId = null;\n                    $scope.productInstance = null;\n                  }\n                  $mdDialog.hide();\n                } else {\n                  $scope.selectedSize = results.results[0].size\n                  $scope.selectedColor = results.results[0].color\n                  if ($scope.selectedProduct.pricing_tiers.length === 1) {\n                    selectPricingTier($scope.selectedProduct.pricing_tiers[0]);\n                    $mdDialog.hide();\n                  }\n                }\n              }\n              $scope.ready = true;\n            }\n          }\n        );\n\n        $scope.searchText = null;\n        $scope.productInstance = null;\n        // $scope.productInstance = null;\n      }\n    }\n\n    function selectSize(size) {\n      $scope.selectedSize = size;\n      if (!$scope.selectPrices) {\n        if (angular.isDefined($scope.callback)) {\n          $scope.callback({\n            product: $scope.selectedProduct,\n            productVariant: $scope.productVariantBySizeAndColor[$scope.selectedSize][$scope.selectedColor]\n          });\n        }\n        $mdDialog.hide();\n        $scope.selectedProduct = null;\n        $scope.productId = null;\n        $scope.productInstance = null;\n        $scope.selectedSize = null;\n        $scope.selectedColor = null;\n      } else {\n        if ($scope.selectedProduct.pricing_tiers.length == 1) {\n          selectPricingTier($scope.selectedProduct.pricing_tiers[0]);\n        }\n      }\n\n    }\n\n    function selectColor(color) {\n      $scope.selectedColor = color;\n    }\n\n    function selectPricingTier(pricingTier) {\n      $scope.selectedProduct.price_excl_tax = pricingTier.price_excl_tax;\n      if (angular.isDefined($scope.callback)) {\n        $scope.callback({\n          product: $scope.selectedProduct,\n          productVariant: $scope.productVariantBySizeAndColor[$scope.selectedSize][$scope.selectedColor]\n        });\n      }\n\n      $mdDialog.hide();\n      $scope.selectedProduct = null;\n      $scope.productId = null;\n      $scope.productInstance = null;\n      $scope.selectedSize = null;\n      $scope.selectedColor = null;\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPurchaseDeliveriesListController', ndPurchaseDeliveriesListController)\n    .directive('ndPurchaseDeliveriesList', ndPurchaseDeliveriesList);\n\n  /** @ngInject */\n  function ndPurchaseDeliveriesList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?',\n        selected: '=?'\n      },\n      controller: 'ndPurchaseDeliveriesListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-purchase-deliveries-list/nd-purchase-deliveries-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPurchaseDeliveriesListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, $compile, api, Session,\n                                     HTTP_STATUS, UiGridService, ORDER_DELIVERY_STATUSES, ORDER_DELIVERY_STATUS_COLORS,\n                                     PURCHASE_ORDER_STATUSES_REVERSE) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.purchaseOrderDeliveries.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryPurchaseDeliveriesControllerV1';\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        purchase_order__autocode: {\n          displayName: $filter('translate')('PURCHASE.PURCHASE'),\n          field: 'purchase_order__autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a class=\"cell-middle\" ui-sref=\"app.inventory.purchases.purchase.deliveries.delivery({id:row.entity.purchase_order, orderDeliveryId: row.entity.id})\">{{row.entity.purchase_order_autocode}}</a>'\n        }, autocode: {\n          displayName: $filter('translate')('PURCHASE.DELIVERY_NOTE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a class=\"cell-middle\" ui-sref=\"app.inventory.purchases.purchase.deliveries.delivery({id:row.entity.purchase_order, orderDeliveryId: row.entity.id})\">{{row.entity.autocode}}</a>'\n        }, origin_code: {\n          displayName: $filter('translate')('PURCHASE.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.origin_code || \\'-\\'}}</div>'\n        }, status: {\n          displayName: $filter('translate')('PURCHASE.STATUS'),\n          headerTooltip: $filter('translate')('PURCHASE.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.status)\"></div>'\n        }, purchase_order__target_warehouse__name: {\n          displayName: $filter('translate')('PURCHASES.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('PURCHASES.TARGET_WAREHOUSE'),\n          field: 'purchase_order__target_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, purchase_order__contact__name: {\n          displayName: $filter('translate')('PURCHASE.PROVIDER_CONTACT'),\n          headerTooltip: $filter('translate')('PURCHASE.PROVIDER_CONTACT'),\n          field: 'purchase_order__contact__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.purchase_order_contact || \\'-\\'}}</div>'\n        }, created_by_username: {\n          displayName: $filter('translate')('PURCHASE.CREATED_BY'),\n          headerTooltip: $filter('translate')('PURCHASE.CREATED_BY'),\n          field: 'created_by_username',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate:  '<div class=\"cell-middle\" layout=\"row\" layout-align=\"start center\">' +\n              '<nd-user-picture user=\"row.entity.created_by_instance\" class=\"mr-8\"></nd-user-picture>' +\n              '<span class=\"text-truncate\">{{row.entity.created_by_username}}</span>' +\n            '</div>'\n        }, created_at: {\n          displayName: $filter('translate')('PURCHASE.CREATED_AT'),\n          headerTooltip: $filter('translate')('PURCHASE.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.created_at)}}</div>'\n        }, shipped_at: {\n          displayName: $filter('translate')('PURCHASE.SHIPPING_DATE'),\n          headerTooltip: $filter('translate')('PURCHASE.SHIPPING_DATE'),\n          field: 'shipped_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.shipped_at)}}</div>'\n        }, expected_at: {\n          displayName: $filter('translate')('PURCHASE.EXPECTED_DATE'),\n          headerTooltip: $filter('translate')('PURCHASE.EXPECTED_DATE'),\n          field: 'expected_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.expected_at)}}</div>'\n        }, received_at: {\n          displayName: $filter('translate')('PURCHASE.RECEIVED_AT'),\n          headerTooltip: $filter('translate')('PURCHASE.RECEIVED_AT'),\n          field: 'received_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.received_at)}}</div>'\n        }, received_by_username: {\n          displayName: $filter('translate')('PURCHASE.RECEIVED_BY'),\n          headerTooltip: $filter('translate')('PURCHASE.RECEIVED_BY'),\n          field: 'received_by_username',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate:  '<div class=\"cell-middle\" layout=\"row\" layout-align=\"start center\">' +\n              '<nd-user-picture user=\"row.entity.received_by_instance\" class=\"mr-8\"></nd-user-picture>' +\n              '<span class=\"text-truncate\">{{row.entity.received_by_username}}</span>' +\n            '</div>'\n        }, items: {\n          displayName: $filter('translate')('PURCHASE.ITEMS'),\n          headerTooltip: $filter('translate')('PURCHASE.ITEMS'),\n          field: 'items',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.items}}</div>'\n        },\n        invoice: {\n          displayName: $filter('translate')('PURCHASE.RELATED_INVOICE'),\n          field: 'invoice',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 180,\n          cellTemplate:\n            '<div class=\"cell-middle\" layout=\"row\" layout-align=\"start center\">' +\n              '<span ng-if=\"!row.entity.invoice && !row.entity.has_files\">-</span>' +\n\n              '<span ng-if=\"!row.entity.invoice && row.entity.has_files\">' +\n                '- <md-icon md-font-icon=\"icon-paperclip\">' +\n                  '<md-tooltip md-direction=\"bottom\">' +\n                    '{{ \"PURCHASE.ATTACHED_DOCUMENT\" | translate }}' +\n                  '</md-tooltip>' +\n                '</md-icon>' +\n              '</span>' +\n\n              '<span ng-if=\"row.entity.invoice && !row.entity.invoice.autocode\">' +\n                '<a ui-sref=\"app.accounting.invoices.invoice({id: row.entity.invoice.id})\">' +\n                  '{{ \"PURCHASE.NO_REFERENCE\" | translate }}' +\n                '</a>' +\n                '<md-icon ng-if=\"row.entity.has_files\" md-font-icon=\"icon-paperclip\">' +\n                  '<md-tooltip md-direction=\"bottom\">' +\n                    '{{ \"PURCHASE.ATTACHED_DOCUMENT\" | translate }}' +\n                  '</md-tooltip>' +\n                '</md-icon>' +\n              '</span>' +\n\n              '<span ng-if=\"row.entity.invoice && row.entity.invoice.autocode\">' +\n                '<a ui-sref=\"app.accounting.invoices.invoice({id: row.entity.invoice.id})\">' +\n                  '{{ row.entity.invoice.autocode }}' +\n                '</a>' +\n                '<md-icon ng-if=\"row.entity.has_files\" md-font-icon=\"icon-paperclip\">' +\n                  '<md-tooltip md-direction=\"bottom\">' +\n                    '{{ \"PURCHASE.ATTACHED_DOCUMENT\" | translate }}' +\n                  '</md-tooltip>' +\n                '</md-icon>' +\n              '</span>' +\n            '</div>'\n        }\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + ORDER_DELIVERY_STATUS_COLORS[status] + '\">' + $filter('translate')('PURCHASE.' + ORDER_DELIVERY_STATUSES[status]) + '</span>');\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('PrintOrderDeliveryDialogController', PrintOrderDeliveryDialogController);\n\n  /** @ngInject */\n  function PrintOrderDeliveryDialogController(\n    $document,\n    $filter,\n    $mdDialog,\n    $mdToast,\n    $timeout,\n    $state,\n    api,\n    HTTP_STATUS,\n    SEARCH_MAX_LENGTH,\n    Session,\n    MAX_PRODUCTS_PER_PDF,\n    Utils,\n    params\n  ) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.thermalPrinter = false;\n    vm.emailTo = params.defEmail;\n    vm.orderBy = params.orderBy ? params.orderBy : 'product_code';\n    vm.customDdpPrices = params.customDdpPrices ? params.customDdpPrices : null;\n    vm.printType = vm.customDdpPrices ? 'variants' : 'products';\n    vm.orderDelivery = params.orderDelivery ? params.orderDelivery : null;\n    vm.isSaleOrderDelivery = params.isSaleOrderDelivery;\n    vm.isTransferOrderDelivery = params.isTransferOrderDelivery;\n    vm.isPurchaseOrderDelivery = params.isPurchaseOrderDelivery;\n\n    //Header Product Options\n    vm.printType = 'products';\n    vm.printPrices = false;\n    vm.printSkus = false;\n    vm.sendEmail = false;\n    vm.showBrand = false;\n    vm.showHsCode = false;\n    vm.showComposition = false;\n    vm.showAttributes = false;\n\n    // Functions\n    vm.hide = hide;\n    vm.cancel = cancel;\n    vm.changePrintConfig = changePrintConfig;\n    vm.printOrderDelivery = printOrderDelivery;\n    vm.hasValidEmail = hasValidEmail;\n\n    initialize();\n\n    function initialize() {\n      var savedPrintConfig = JSON.parse(localStorage.getItem(Session.company.id + '::printConfigSaleOrderDeliveryPrintDialogController'));\n      if (savedPrintConfig) {\n        vm.printType = savedPrintConfig.printType ? savedPrintConfig.printType : 'products';\n        vm.printPrices = savedPrintConfig.printPrices;\n        vm.printSkus = savedPrintConfig.printSkus;\n        vm.sendEmail = savedPrintConfig.sendEmail;\n        vm.showBrand = savedPrintConfig.showBrand;\n        vm.showHsCode = savedPrintConfig.showHsCode;\n        vm.showComposition = savedPrintConfig.showComposition;\n        vm.showAttributes = savedPrintConfig.showAttributes;\n      }\n    }\n\n    function changePrintConfig() {\n      var printConfig = {\n        printType: vm.printType,\n        printPrices: vm.printPrices,\n        printSkus: vm.printSkus,\n        sendEmail: vm.sendEmail,\n        showBrand: vm.showBrand,\n        showHsCode: vm.showHsCode,\n        showComposition: vm.showComposition,\n        showAttributes: vm.showAttributes\n      };\n      localStorage.setItem(Session.company.id + '::printConfigSaleOrderDeliveryPrintDialogController', JSON.stringify(printConfig));\n    }\n\n    function hide() {\n      $mdDialog.hide();\n    }\n\n    function cancel() {\n      $mdDialog.cancel();\n    }\n\n    var printSaleOrderDelivery = function() {\n      var send = vm.recordsTotal > MAX_PRODUCTS_PER_PDF.SALE_ORDER_DELIVERY || vm.sendEmail;\n      api.inventories.saleOrderDeliveries.get(\n        {\n          id: vm.orderDelivery.id,\n          option: 'print',\n          print: vm.printType,\n          prices: vm.printPrices,\n          skus: vm.printSkus,\n          send: send,\n          email: vm.emailTo,\n          orderBy: vm.orderBy,\n          brand: vm.showBrand,\n          hs_code: vm.showHsCode,\n          composition: vm.showComposition,\n          attributes: vm.showAttributes\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (send) {\n              var content = $filter('translate')('SALE.GENERATING_DELIVERY_NOTE_MESSAGE', { email: Session.user.email });\n              if (vm.emailTo) {\n                content = $filter('translate')('SALE.GENERATING_DELIVERY_NOTE_MESSAGE_EXTERNAL', { email: vm.emailTo });\n              }\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('SALE.GENERATING_DELIVERY_NOTE'))\n                .htmlContent(content)\n                .ok($filter('translate')('GENERAL.CLOSE'));\n\n              $mdDialog.show(dialog);\n            } else {\n              var file = new Blob([response.data], { type: 'application/pdf' });\n              var fileURL = URL.createObjectURL(file);\n              window.open(fileURL);\n\n              if(vm.orderDelivery.autocode){\n                var a = document.createElement('a');\n                a.href = fileURL;\n                a.download = vm.orderDelivery.autocode + '.pdf';\n                a.click();\n              }\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    };\n\n    var printPurchaseOrderDelivery = function() {\n      var send = vm.recordsTotal > MAX_PRODUCTS_PER_PDF.PURCHASE_ORDER_DELIVERY || vm.sendEmail;\n      api.inventories.purchaseOrderDeliveries.get(\n        {\n          id: vm.orderDelivery.id,\n          option: 'print',\n          print: vm.printType,\n          prices: vm.printPrices,\n          send: send,\n          skus: vm.printSkus,\n          email: vm.emailTo,\n          orderBy: vm.orderBy,\n          brand: vm.showBrand,\n          hs_code: vm.showHsCode,\n          composition: vm.showComposition,\n          attributes: vm.showAttributes\n        },\n        function(response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            if (send) {\n              var content = $filter('translate')('PURCHASE.GENERATING_DELIVERY_NOTE_MESSAGE', { email: Session.user.email });\n              if (vm.emailTo) {\n                content = $filter('translate')('PURCHASE.GENERATING_DELIVERY_NOTE_MESSAGE_EXTERNAL', { email: vm.emailTo });\n              }\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('PURCHASE.GENERATING_DELIVERY_NOTE'))\n                .htmlContent(content)\n                .ok($filter('translate')('GENERAL.CLOSE'));\n              $mdDialog.show(dialog);\n            } else {\n              var file = new Blob([response.data], { type: 'application/pdf' });\n              var fileURL = URL.createObjectURL(file);\n              window.open(fileURL);\n\n              if(vm.orderDelivery.autocode){\n                var a = document.createElement('a');\n                a.href = fileURL;\n                a.download = vm.orderDelivery.autocode + '.pdf';\n                a.click();\n              }\n            }\n          } else {\n            $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n          }\n        }\n      );\n    };\n\n    var printTransferOrderDelivery = function() {\n      var send = vm.recordsTotal > MAX_PRODUCTS_PER_PDF.PURCHASE_ORDER_DELIVERY || vm.sendEmail;\n      if (send) {\n        api.inventories.transferOrderDeliveries.get(\n          {\n            id: vm.orderDelivery.id,\n            option: 'print',\n            print: vm.printType,\n            prices: vm.printPrices,\n            skus: vm.printSkus,\n            send: send,\n            email: vm.emailTo,\n            output_format: vm.thermalPrinter ? 'html' : 'pdf',\n            orderBy: vm.orderBy,\n            brand: vm.showBrand,\n            hs_code: vm.showHsCode,\n            composition: vm.showComposition,\n            attributes: vm.showAttributes\n          },\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              var content = $filter('translate')('TRANSFERS.GENERATING_DELIVERY_NOTE_MESSAGE', { email: Session.user.email });\n              if (vm.emailTo) {\n                content = $filter('translate')('TRANSFERS.GENERATING_DELIVERY_NOTE_MESSAGE_EXTERNAL', { email: vm.emailTo });\n              }\n              var dialog = $mdDialog.alert()\n                .clickOutsideToClose(true)\n                .parent(angular.element(document.body))\n                .title($filter('translate')('TRANSFERS.GENERATING_DELIVERY_NOTE'))\n                .htmlContent(content)\n                .ok($filter('translate')('GENERAL.CLOSE'));\n              $mdDialog.show(dialog);\n            } else {\n              $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n            }\n          }\n        );\n      } else{\n\n        var searchParams = new URLSearchParams({\n          option: 'print',\n          print: vm.printType,\n          prices: vm.printPrices,\n          skus: vm.printSkus,\n          send: send,\n          email: vm.emailTo,\n          output_format: vm.thermalPrinter ? 'html' : 'pdf',\n          orderBy: vm.orderBy,\n          brand: vm.showBrand,\n          hs_code: vm.showHsCode,\n          composition: vm.showComposition,\n          attributes: vm.showAttributes\n        });\n\n        var url = api.urls.inventories.transferOrderDeliveriesPrint.replace(':id', vm.orderDelivery.id) + '?' + searchParams.toString();\n        Session.setTokenCookie();\n        window.open(url);\n        $mdDialog.hide();\n      }\n    };\n\n    function hasValidEmail() {\n      if (!vm.sendEmail) {\n        return true;\n      }\n      if (vm.emailTo === null || vm.emailTo === '') {\n        return true;\n      }\n      var emails = [];\n\n      if (!vm.emailTo.includes(',')) {\n        emails.push(vm.emailTo);\n      } else {\n        emails = vm.emailTo.split(',');\n      }\n\n      for (var i = 0; i < emails.length; i++) {\n        var email = emails[i];\n        if (!Utils.validateEmail(email)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function printOrderDelivery() {\n      if(vm.isSaleOrderDelivery){\n        printSaleOrderDelivery();\n      } else if(vm.isTransferOrderDelivery){\n        printTransferOrderDelivery();\n      } else if(vm.isPurchaseOrderDelivery){\n        printPurchaseOrderDelivery();\n      }\n      hide();\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPrintOrderDeliveryButtonController', ndPrintOrderDeliveryButtonController)\n    .directive('ndPrintOrderDeliveryButton', ndPrintOrderDeliveryButton);\n\n  /** @ngInject */\n  function ndPrintOrderDeliveryButton() {\n    return {\n      restrict: 'E',\n      scope: {\n        showOnlyIcon: '=?',\n        saleOrderDelivery: '=?',\n        transferOrderDelivery: '=?',\n        purchaseOrderDelivery: '=?'\n      },\n      controller: 'ndPrintOrderDeliveryButtonController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-print-order-delivery-button/nd-print-order-delivery-button.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPrintOrderDeliveryButtonController($scope, $document, $mdDialog, api, HTTP_STATUS) {\n\n    // Data\n    var vm = this;\n\n    vm.orderDelivery = null;\n    vm.defEmail = null;\n\n    // Methods\n    vm.openDialog = openDialog;\n\n    // Initialize\n    init();\n\n    /**\n     * Initialize\n     */\n    function init() {\n      vm.showOnlyIcon = !!$scope.showOnlyIcon;\n      if ($scope.saleOrderDelivery) {\n        vm.orderDelivery = $scope.saleOrderDelivery;\n      } else if ($scope.transferOrderDelivery) {\n        vm.orderDelivery = $scope.transferOrderDelivery;\n        vm.defEmail = $scope.transferOrderDelivery.contact ? $scope.transferOrderDelivery.contact.email : '';\n      } else if ($scope.purchaseOrderDelivery) {\n        vm.orderDelivery = $scope.purchaseOrderDelivery;\n        vm.defEmail = $scope.purchaseOrderDelivery.contact ? $scope.purchaseOrderDelivery.contact.email : '';\n      }\n\n      if (vm.orderDelivery.sale_order) {\n        api.inventories.saleOrders.get(\n          {\n            id: vm.orderDelivery.sale_order\n          },\n          function(response, fn, status) {\n            if (status === HTTP_STATUS.HTTP_200_OK) {\n              if (response.customer_instance) {\n                vm.defEmail = response.customer_instance.email;\n              }\n            }\n          }\n        );\n      }\n    }\n\n    function openDialog() {\n      $mdDialog.show({\n        controller: 'PrintOrderDeliveryDialogController',\n        controllerAs: 'vm',\n        templateUrl: 'app/directives/nd-print-order-delivery-button/print-order-delivery-dialog.html',\n        parent: angular.element($document.find('body')),\n        clickOutsideToClose: false,\n        focusOnOpen: false,\n        locals: {\n          params: {\n            defEmail: vm.defEmail,\n            customDdpPrices: vm.customDdpPrices,\n            orderDelivery: vm.orderDelivery,\n            isSaleOrderDelivery: !!$scope.saleOrderDelivery,\n            isTransferOrderDelivery: !!$scope.transferOrderDelivery,\n            isPurchaseOrderDelivery: !!$scope.purchaseOrderDelivery\n          }\n        }\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrdersListController', ndPosOrdersListController)\n    .directive('ndPosOrdersList', ndPosOrdersList);\n\n  /** @ngInject */\n  function ndPosOrdersList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=', selected: '=?', storageLabel: '=?', context: '=?'\n      },\n      controller: 'ndPosOrdersListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-pos-orders-list/nd-pos-orders-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrdersListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, api, Session, $mdDialog, HTTP_STATUS, UiGridService, POS_ORDER_PAYMENT_STATUSES_COLORS, POS_ORDER_PAYMENT_STATUSES, INVOICE_TYPES) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.posOrders.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.context = $scope.context;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryPosOrdersControllerV4';\n    vm.transferPaymentMethods = {};\n    vm.registerSearchText = '';\n    vm.userSearchText = '';\n\n    // Methods\n    $scope.getAutocode = getAutocode;\n    $scope.showSaleDialog = showSaleDialog;\n    $scope.getUnitsSold = getUnitsSold;\n    $scope.getPaymentStatus = getPaymentStatus;\n    $scope.getTotal = getTotal;\n    $scope.rowClass = rowClass;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('SALES_LOG.SALE_NUMBER'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          width: 150,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle cursor-pointer\" layout=\"row\" layout-align=\"start center\">' +\n              '<div ng-click=\"grid.appScope.$parent.showSaleDialog(row.entity)\" ' +\n                   'ng-bind-html=\"grid.appScope.$parent.getAutocode(row.entity)\"></div>' +\n              '<md-icon ng-if=\"row.entity.incidence\" md-font-icon=\"icon-flag-variant\" class=\"s18 ml-5 red-fg\"></md-icon>' +\n            '</div>'\n        },\n        created_at: {\n          displayName: $filter('translate')('CUSTOMERS.CREATED_AT'),\n          headerTooltip: $filter('translate')('CUSTOMERS.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          width: 150,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.created_at)}}</div>'\n        },\n        created_by: {\n          displayName: $filter('translate')('CUSTOMERS.CREATED_BY'),\n          field: 'created_by',\n          permission: true,\n          visible: true,\n          width: 150,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\" layout=\"row\" layout-align=\"start center\">' +\n              '<nd-user-picture fullname=\"row.entity.created_by_name\" class=\"mr-8\"></nd-user-picture>' +\n              '<span class=\"text-truncate\">{{row.entity.created_by_name}}</span>' +\n            '</div>'\n        },\n        source_warehouse__name: {\n          displayName: $filter('translate')('SALES.REGISTER'),\n          field: 'source_warehouse__name',\n          permission: true,\n          visible: true,\n          width: 150,\n          minWidth: 150,\n          enablePinning: true,\n          enableSorting: false,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.site\">{{row.entity.site_name}}</span>' +\n            '<span ng-if=\"row.entity.register\">{{row.entity.register_code}}</span>' +\n            '<div class=\"secondary-text\" ng-if=\"row.entity.source_warehouse_name\"><small>{{row.entity.source_warehouse_name}}</small></div>' +\n            '</div>'\n        },\n        units_sold: {\n          displayName: $filter('translate')('SALES_LOG.UNTIS_SOLD'),\n          field: 'units_sold',\n          permission: true,\n          visible: true,\n          width: 100,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle full-width text-center\" ng-bind-html=\"grid.appScope.$parent.getUnitsSold(row.entity)\"></div>'\n        },\n        total: {\n          displayName: $filter('translate')('CUSTOMERS.TOTAL'),\n          field: 'total',\n          permission: true,\n          visible: true,\n          width: 100,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle full-width text-right\" ng-bind-html=\"grid.appScope.$parent.getTotal(row.entity)\"></div>'\n        },\n        payment_status: {\n          displayName: $filter('translate')('ORDER.PAYMENT'),\n          field: 'payment_status',\n          permission: true,\n          visible: true,\n          width: 100,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle full-width text-center\" ng-bind-html=\"grid.appScope.$parent.getPaymentStatus(row.entity.payment_status)\"></div>'\n        },\n        payment_methods: {\n          displayName: $filter('translate')('PAYMENT_METHODS.PAYMENT_METHODS'),\n          field: 'payment_methods',\n          permission: true,\n          visible: true,\n          width: 100,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span class=\"status-badge md-grey-400-bg\" ng-repeat=\"payment_method in row.entity.payment_methods\">{{payment_method.payment_method_name}}</span>' +\n            '</div>'\n        },\n        customer__first_name: {\n          displayName: $filter('translate')('CUSTOMERS.CUSTOMER'),\n          field: 'customer__first_name',\n          permission: true,\n          visible: true,\n          width: 200,\n          minWidth: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.customer_name}}</div>'\n        },\n        notes: {\n          displayName: $filter('translate')('CUSTOMERS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: true,\n          width: 200,\n          minWidth: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes}}</div>'\n        }\n      };\n    }\n\n    function getAutocode(full) {\n\n      var result = '<div layout=\"row\" layout-align=\"start center\">';\n\n      result += '<div layout=\"row\" layout-align=\"start center\">';\n      result += '<span class=\"mr-5 blue-fg\">' + (full.autocode ? '<b>' + full.autocode + '</b>' : $filter('translate')('ORDER.ORDER_DRAFT')) + '</span>';\n\n      if (full.incidence) {\n        result += '';\n      }\n\n      if (full.negative_of) {\n        if (full.restored_of) {\n          result += '<br><small class=\"secondary-text\">' + $filter('translate')('SALES_LOG.RESTORED_OF') + ' ' + full.restored_of + '</small>';\n        } else {\n          result += '<br><small class=\"secondary-text\">' + $filter('translate')('SALES_LOG.NEGATIVE_OF') + ' ' + full.negative_of + '</small>';\n        }\n\n      }\n      result += '</div>';\n      result += '<span flex></span>';\n      result += '</div>';\n\n      return result;\n\n    }\n\n    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.devolution_of || row.entity.amount < 0) {\n        return 'orange-900-fg md-orange-50-bg';\n      } else if (row.entity.deleted) {\n        return 'red-900-fg md-red-100-bg';\n      }\n      return '';\n    }\n\n    function showSaleDialog(object) {\n\n      if (vm.dialogOpened) {\n        return;\n      }\n\n      vm.dialogOpened = true;\n\n      $mdDialog\n        .show({\n          controller: 'SalePosOrderDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          multiple: true,\n          locals: {\n            previousPosOrderId: null,\n          },\n          resolve: {\n            PosOrderData: function (apiResolver) {\n              if (vm.currentView === vm.POS_ORDERS_VIEW)\n                return apiResolver.resolve('inventories.posOrders@get', {\n                  id: object.id,\n                  serializer: 'PosOrderWithDevolutionsSerializer',\n                });\n\n              return apiResolver.resolve('inventories.posOrders@get', {\n                id: object.pos_order,\n                serializer: 'PosOrderWithDevolutionsSerializer',\n              });\n            },\n          },\n        })\n        .then(\n          function (refresh) {\n            vm.dialogOpened = false;\n            if (refresh) {\n              if (vm.currentView === vm.POS_ORDERS_VIEW) {\n                vm.dtInstanceViewPO.DataTable.draw();\n              } else if (\n                vm.currentView === vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW\n              ) {\n                vm.dtInstanceViewPOPV.DataTable.draw();\n              }\n            }\n          },\n          function () {\n            vm.dialogOpened = false;\n          }\n        );\n    }\n\n    function getUnitsSold(full) {\n      var result = '';\n      if (full.units_sold && full.units_sold > 0) {\n        result += '<span class=\"black-fg-important\">' + full.units_sold + '</span>';\n      }\n      if (full.units_sold_returned) {\n        result += '<img class=\"w-20 h-20\" src=\"/assets/images/custom-material-design-icons/refund.221d6d4a.svg\">';\n        result += '<span class=\"red-700-fg\">' + full.units_sold_returned + '</span>';\n      }\n      if (full.units_returned) {\n        result += '<img class=\"w-20 h-20\" src=\"/assets/images/custom-material-design-icons/refund.221d6d4a.svg\">';\n        result += '<span class=\"red-fg-important\">' + full.units_returned + '</span>';\n      }\n      return $sce.trustAsHtml(result);\n    }\n\n    function getPaymentStatus(status) {\n      return $sce.trustAsHtml('<span class=\"' + POS_ORDER_PAYMENT_STATUSES_COLORS[status] + '\">' + $filter('translate')('ORDER.' + POS_ORDER_PAYMENT_STATUSES[status]) + '</span>');\n    }\n\n    function getTotal(full) {\n      var result = '';\n      if (full.total !== null && full.total !== undefined) {\n        result += ' ' + $filter('price')(full.total) + $filter('currencyCharacter')(full.currency);\n      }\n      if (!full.autocode) {\n        result += '</em>';\n      }\n      return result;\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderProductVariantsListController', ndPosOrderProductVariantsListController)\n    .directive('ndPosOrderProductVariantsList', ndPosOrderProductVariantsList);\n\n  /** @ngInject */\n  function ndPosOrderProductVariantsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '='\n      },\n      controller: 'ndPosOrderProductVariantsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-pos-order-product-variants-list/nd-pos-order-product-variants-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrderProductVariantsListController(\n    $scope,\n    $timeout,\n    $rootScope,\n    $filter,\n    $sce,\n    $mdToast,\n    $q,\n    $document,\n    $state,\n    $mdDialog,\n    api,\n    Session\n  ) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.posOrderProductVariants.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = 'UIGridInventoryPosOrderProductVariantsControllerV4';\n    vm.transferPaymentMethods = {};\n    vm.currencyCharacter = $filter('currencyCharacter')(Session.company.currency);\n\n    // Methods\n    $scope.rowClass = rowClass;\n    vm.showSaleDialog = showSaleDialog;\n    vm.getAutocode = getAutocode;\n    vm.goToProduct = goToProduct;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      var currentState = $state.current.name;\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('SALES_LOG.SALE_NUMBER'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          width: 150,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle cursor-pointer\" layout=\"row\" layout-align=\"start center\">' +\n            '<div ng-click=\"grid.appScope.$parent.vm.showSaleDialog(row.entity)\" ' +\n            'ng-bind-html=\"grid.appScope.$parent.vm.getAutocode(row.entity)\"></div>' +\n            '<md-icon ng-if=\"row.entity.incidence\" md-font-icon=\"icon-flag-variant\" class=\"s18 ml-5 red-fg\"></md-icon>' +\n            '</div>'\n        }, product_name: {\n          displayName: $filter('translate')('PRODUCT.PRODUCT'),\n          field: 'product_name',\n          permission: true,\n          visible: true,\n          minWidth: 200,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\"><a ng-click=\"grid.appScope.$parent.vm.goToProduct(row.entity.product)\" >{{row.entity.product_name }}</a></div>'\n        }, product_variant_name: {\n          displayName: $filter('translate')('SALES_LOG.VARIANT'),\n          field: 'product_variant_name',\n          permission: true,\n          visible: true,\n          minWidth: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass\n          /*cellTemplate: '<div class=\"cell-middle cursor-pointer\" ng-click=\"grid.appScope.$parent.getUnitPrice(row.entity)\" ' +\n            'ng-bind-html=\"grid.appScope.$parent.getAutocode(row.entity)\"></div>'*/\n        }, created_at: {\n          displayName: $filter('translate')('CUSTOMERS.CREATED_AT'),\n          headerTooltip: $filter('translate')('CUSTOMERS.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.created_at)}}</div>'\n        }, pos_order__register__id: {\n          displayName: $filter('translate')('SALES.REGISTER'),\n          field: 'pos_order__register__id',\n          permission: true,\n          visible: true,\n          minWidth: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.source_warehouse_name}}</div>'\n        }, price_incl_tax: {\n          displayName: $filter('translate')('SALES_LOG.UNIT_PRICE'),\n          field: 'price_incl_tax',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle full-width text-right\">' +\n            '<span ng-if=\"row.entity.discount_price_incl_tax\" class=\"text-strike secondary-text mr-5\">{{grid.appScope.getPrice(row.entity.price_incl_tax)}}</span>' +\n            '<span ng-if=\"row.entity.discount_price_incl_tax\">{{grid.appScope.getPrice(row.entity.discount_price_incl_tax)}}</span>' +\n            '<span ng-if=\"!row.entity.discount_price_incl_tax\">{{grid.appScope.getPrice(row.entity.price_incl_tax)}}</span>' +\n            '</div>'\n        }, amount: {\n          displayName: $filter('translate')('SALES_LOG.AMOUNT'),\n          field: 'amount',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle full-width text-center\">' +\n            '<span ng-if=\"row.entity.amount >= 0\" class=\"text-boxed green-100-bg green-fgs\">{{row.entity.amount}}</span>' +\n            '<span ng-if=\"row.entity.amount < 0\" class=\"text-boxed red-100-bg red-fgs\">{{row.entity.amount}}</span>' +\n            '</div>'\n        }, total: {\n          displayName: $filter('translate')('CUSTOMERS.TOTAL'),\n          field: 'total',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle full-width text-right\">{{row.entity.total}}</div>'\n        }, customer__first_name: {\n          displayName: $filter('translate')('CUSTOMERS.CUSTOMER'),\n          field: 'customer__first_name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: $scope.rowClass,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.customer_name}}</div>'\n        }\n      };\n    }\n\n    function rowClass(grid, row, col, rowRenderIndex, colRenderIndex) {\n      if (row.entity.amount < 0) {\n        return 'orange-900-fg md-orange-50-bg';\n      } else if (row.entity.deleted) {\n        return 'red-900-fg md-red-100-bg';\n      }\n      return '';\n    }\n\n    function showSaleDialog(object) {\n\n      if (vm.dialogOpened) {\n        return;\n      }\n\n      vm.dialogOpened = true;\n\n      $mdDialog\n        .show({\n          controller: 'SalePosOrderDialogController',\n          controllerAs: 'vm',\n          templateUrl:\n            'app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: true,\n          multiple: true,\n          locals: {\n            previousPosOrderId: null\n          },\n          resolve: {\n            PosOrderData: function(apiResolver) {\n              if (vm.currentView === vm.POS_ORDERS_VIEW)\n                return apiResolver.resolve('inventories.posOrders@get', {\n                  id: object.pos_order,\n                  serializer: 'PosOrderWithDevolutionsSerializer'\n                });\n\n              return apiResolver.resolve('inventories.posOrders@get', {\n                id: object.pos_order,\n                serializer: 'PosOrderWithDevolutionsSerializer'\n              });\n            }\n          }\n        })\n        .then(\n          function(refresh) {\n            vm.dialogOpened = false;\n            if (refresh) {\n              if (vm.currentView === vm.POS_ORDERS_VIEW) {\n                vm.dtInstanceViewPO.DataTable.draw();\n              } else if (\n                vm.currentView === vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW\n              ) {\n                vm.dtInstanceViewPOPV.DataTable.draw();\n              }\n            }\n          },\n          function() {\n            vm.dialogOpened = false;\n          }\n        );\n    }\n\n    function getAutocode(full) {\n      var result = '<div layout=\"row\" layout-align=\"start center\">';\n\n      result += '<div layout=\"row\" layout-align=\"start center\">';\n      result += '<span class=\"mr-5 blue-fg\">' + (full.autocode ? '<b>' + full.autocode + '</b>' : $filter('translate')('ORDER.ORDER_DRAFT')) + '</span>';\n\n      if (full.negative_of) {\n        if (full.restored_of) {\n          result += '<br><small class=\"secondary-text\">' + $filter('translate')('SALES_LOG.RESTORED_OF') + ' ' + full.restored_of + '</small>';\n        } else {\n          result += '<br><small class=\"secondary-text\">' + $filter('translate')('SALES_LOG.NEGATIVE_OF') + ' ' + full.negative_of + '</small>';\n        }\n      }\n      result += '</div>';\n      result += '<span flex></span>';\n      result += '</div>';\n\n      return result;\n    }\n\n    function goToProduct(productId) {\n      $state.go('app.inventory.products.product.overview', { id: productId, previousState: $state.current.name });\n    }\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPosOrderFulfillmentsListController', ndPosOrderFulfillmentsListController)\n    .directive('ndPosOrderFulfillmentsList', ndPosOrderFulfillmentsList);\n\n  /** @ngInject */\n  function ndPosOrderFulfillmentsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        storageLabel: '=?',\n        selected: '=?'\n      },\n      controller: 'ndPosOrderFulfillmentsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-pos-order-fulfillments-list/nd-pos-order-fulfillments-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPosOrderFulfillmentsListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, $compile, api, Session,\n                                     HTTP_STATUS, UiGridService, TRANSFER_ORDER_STATUSES, TRANSFER_ORDER_STATUS_COLORS,\n                                     TRANSFER_ORDER_STATUSES_REVERSE) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.inventories.posOrderFulfillments\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.storageLabel ? $scope.storageLabel : 'UIGridInventoryPosOrderFulfillmentsControllerV1';\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        pos_order_autocode: {\n          displayName: $filter('translate')('ORDERS.ORDER'),\n          field: 'pos_order_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\" layout=\"row\">' +\n            '<a ui-sref=\"app.ecommerce.orders.order({id:row.entity.pos_order_id})\">{{row.entity.pos_order_autocode}}</a><br>' +\n            '<md-icon ng-if=\"row.entity.pos_order_warning\" md-font-icon=\"icon-alert\" class=\"s18 mh-5 amber-fg\"></md-icon>' +\n          '</div>'\n        }, id: {\n          displayName: $filter('translate')('ORDER.FULFILLMENT'),\n          field: 'id',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\" layout=\"row\">' +\n            '<a ui-sref=\"app.ecommerce.orders.order({id:row.entity.pos_order_id})\">{{row.entity.pos_order_autocode}}-{{row.entity.number}}</a><br>' +\n            '<md-icon ng-if=\"row.entity.pos_order_warning\" md-font-icon=\"icon-alert\" class=\"s18 mh-5 amber-fg\"></md-icon>' +\n          '</div>'\n        }/*, transfer_order__status: {\n          displayName: $filter('translate')('TRANSFERS.STATUS'),\n          headerTooltip: $filter('translate')('TRANSFERS.STATUS'),\n          field: 'transfer_order__status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 180,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.transfer_status)\"></div>'\n        }, source_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.SOURCE_WAREHOUSE'),\n          field: 'source_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.source_warehouse_name || \\'-\\'}}</div>'\n        }, target_warehouse__name: {\n          displayName: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('TRANSFERS.TARGET_WAREHOUSE'),\n          field: 'target_warehouse__name',\n          permission: true,\n          visible: true,\n          minWidth: 150,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, transfer_order__created_at: {\n          displayName: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          headerTooltip: $filter('translate')('TRANSFERS.CREATION_DATE'),\n          field: 'transfer_order__created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDateTime(row.entity.transfer_created_at)}}</div>'\n        }, amount: {\n          displayName: $filter('translate')('TRANSFERS.ITEMS'),\n          headerTooltip: $filter('translate')('TRANSFER.ITEMS'),\n          field: 'amount',\n          permission: true,\n          enableSorting: false,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.amount}}</div>'\n        }, notes: {\n          displayName: $filter('translate')('TRANSFERS.NOTES'),\n          headerTooltip: $filter('translate')('TRANSFERS.NOTES'),\n          field: 'transfer_order__notes',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.transfer_notes}}</div>'\n        }*/\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + TRANSFER_ORDER_STATUS_COLORS[status] + '\">' + $filter('translate')('TRANSFERS.' + TRANSFER_ORDER_STATUSES[status]) + '</span>');\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndPackingProductsListController', ndPackingProductsListController)\n    .directive('ndPackingProductsList', ndPackingProductsList);\n\n  /** @ngInject */\n  function ndPackingProductsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        packingOrder: '=',\n      },\n      controller: 'ndPackingProductsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-packing-products-list/nd-packing-products-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndPackingProductsListController(\n    $scope,\n    api,\n    $filter,\n    HTTP_STATUS,\n    $mdToast,\n    PackingOrder,\n    Session,\n    INTEGRATION_APP_TYPE,\n    ITEM_PACKING_STATUS,\n    $mdSelect,\n    WEIGHT_UNITS_FORMATTED\n  ) {\n\n    // Data\n    var vm = this;\n    vm.packingOrder = $scope.packingOrder;\n    vm.url = api.urls.inventories.pickingPackingPackingOrderProductVariants;\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.status.nonStorableFilters = {\n      packingOrder: vm.packingOrder.id\n    };\n    vm.storageLabel = 'UIGridInventoryPackingProductsControllerV1';\n    vm.ITEM_STATUS = ITEM_PACKING_STATUS;\n    vm.WEIGHT_UNITS_FORMATTED = WEIGHT_UNITS_FORMATTED;\n\n    vm.updatePackingOrder = updatePackingOrder;\n    vm.statusChanged = statusChanged;\n    vm.weightChanged = weightChanged;\n    vm.shippingBoxChanged = shippingBoxChanged;\n    vm.hasCompanySendcloud = hasCompanySendcloud;\n    vm.onSelectorOpen = onSelectorOpen;\n    vm.createShippingBoxWithProductVariant = createShippingBoxWithProductVariant;\n\n    initialize();\n\n    $scope.$watch('status.search', function(newVal, oldVal) {\n      if (newVal !== oldVal && vm.status) {\n        $scope.$broadcast('ndGrid::filtersChanged');\n      }\n    });\n\n    function createShippingBoxWithProductVariant(entity) {\n      $scope.$emit('ndPackingProductsList::createShippingBoxWithProductVariant', entity);\n    }\n\n    vm.shippingBoxCreatedEvent = $scope.$on('PackingProductsController::shippingBoxCreated', function (event, data) {\n      shippingBoxChanged(data, false);\n    });\n\n\n    function onSelectorOpen(event) {\n      event.stopPropagation();\n    }\n\n    // Functions\n    function initialize() {\n      vm.columns = {\n        cover_thumbnail: {\n          displayName: '',\n          field: 'cover_thumbnail',\n          permission: true,\n          visible: true,\n          minWidth: 48,\n          width: 48,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<md-icon ng-if=\"!row.entity.cover_thumbnail\" md-font-icon=\"icon-package-variant-closed\" class=\"default-thumbnail\"></md-icon>' +\n            '<img  ng-if=\"row.entity.cover_thumbnail\" width=\"32px\" ng-src=\"{{grid.getCellValue(row, col)}}\" lazy-src>',\n          cellClass: 'cell-padding'\n        },\n        reference: {\n          displayName: $filter('translate')('PICKING.AUTOCODE'),\n          headerTooltip: $filter('translate')('PICKING.AUTOCODE'),\n          field: 'reference',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div>' +\n            '<a ng-if=\"row.entity.pickable_item_type === \\'TransferOrderDeliveryProductVariant\\'\" ' +\n            'ui-sref=\"app.inventory.transfers.transfer.delivery({id:row.entity.order_id})\"> {{row.entity.reference}} </a>' +\n            '<a ng-if=\"row.entity.pickable_item_type === \\'SaleOrderDeliveryProductVariant\\'\" ' +\n            'ui-sref=\"app.wholesale.sales.sale.delivery({id: row.entity.order_id})\"> {{row.entity.reference}} </a>' +\n            '<a ng-if=\"row.entity.pickable_item_type === \\'PosOrderFulfillmentProductVariant\\'\" ' +\n            'ui-sref=\"app.ecommerce.orders.order({id: row.entity.order_id})\"> {{row.entity.reference}} </a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        delivery_autocode: {\n          displayName: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          headerTooltip: $filter('translate')('PICKING.DELIVERY_REFERENCE'),\n          field: 'delivery_autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div>' +\n            '<a ng-if=\"row.entity.pickable_item_type === \\'TransferOrderDeliveryProductVariant\\'\" ' +\n            'ui-sref=\"app.inventory.transfers.transfer.delivery({id:row.entity.order_id})\"> {{row.entity.delivery_autocode}} </a>' +\n            '<a ng-if=\"row.entity.pickable_item_type === \\'SaleOrderDeliveryProductVariant\\'\" ' +\n            'ui-sref=\"app.wholesale.sales.sale.delivery({id: row.entity.order_id})\"> {{row.entity.delivery_autocode}} </a>' +\n            '<a ng-if=\"row.entity.pickable_item_type === \\'PosOrderFulfillmentProductVariant\\'\" ' +\n            'ui-sref=\"app.ecommerce.orders.order({id: row.entity.order_id})\"> {{row.entity.delivery_autocode}} </a>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        origin_code: {\n          displayName: $filter('translate')('PICKING.ORIGIN_CODE'),\n          headerTooltip: $filter('translate')('PICKING.ORIGIN_CODE'),\n          field: 'origin_code',\n          permission: true,\n          visible: true,\n          enableHiding: true,\n          enableColumnMenu: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellTemplate: '<div>{{row.entity.origin_code || \\'-\\'}}</div>',\n          cellClass: 'cell-padding'\n        },\n        sku: {\n          displayName: $filter('translate')('PRODUCT.SKU'),\n          headerTooltip: $filter('translate')('PRODUCT.SKU'),\n          field: 'sku',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        barcode: {\n          displayName: $filter('translate')('PRODUCT.BARCODE'),\n          headerTooltip: $filter('translate')('PRODUCT.BARCODE'),\n          field: 'barcode',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        name: {\n          displayName: $filter('translate')('PRODUCT.NAME'),\n          headerTooltip: $filter('translate')('PRODUCT.NAME'),\n          field: 'name',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        brand: {\n          displayName: $filter('translate')('PRODUCT.BRAND'),\n          headerTooltip: $filter('translate')('PRODUCT.BRAND'),\n          field: 'brand',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        season: {\n          displayName: $filter('translate')('PRODUCT.SEASON'),\n          headerTooltip: $filter('translate')('PRODUCT.SEASON'),\n          field: 'season',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        collection: {\n          displayName: $filter('translate')('COLLECTIONS.COLLECTION'),\n          headerTooltip: $filter('translate')('COLLECTIONS.COLLECTION'),\n          field: 'collection',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        category: {\n          displayName: $filter('translate')('PRODUCT.CATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.CATEGORY'),\n          field: 'category',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        subcategory: {\n          displayName: $filter('translate')('PRODUCT.SUBCATEGORY'),\n          headerTooltip: $filter('translate')('PRODUCT.SUBCATEGORY'),\n          field: 'subcategory',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        variant_1: {\n          displayName: $filter('translate')('PRODUCT.VARIANT_1'),\n          headerTooltip: $filter('translate')('PRODUCT.VARIANT_1'),\n          field: 'variant_1',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        variant_2: {\n          displayName: $filter('translate')('PRODUCT.VARIANT_2'),\n          headerTooltip: $filter('translate')('PRODUCT.VARIANT_2'),\n          field: 'variant_2',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        box: {\n          displayName: $filter('translate')('PICKING.BOX'),\n          headerTooltip: $filter('translate')('PICKING.BOX'),\n          field: 'box',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-padding'\n        },\n        package: {\n          displayName: $filter('translate')('PACKING.PACKAGE'),\n          headerTooltip: $filter('translate')('PACKING.PACKAGE'),\n          field: 'package',\n          permission: true,\n          visible: vm.hasCompanySendcloud(),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div layout=\"column\" flex>' +\n            '<md-select ng-click=\"grid.appScope.$parent.vm.onSelectorOpen($event)\" ng-model=\"row.entity.packing_order_shipping_box\" class=\"nd-input outlined white no-border m-0\" ng-disabled=\"(grid.appScope.$parent.packingOrder.isPendingToShip() && grid.appScope.$parent.packingOrder.hasParcels()) || grid.appScope.$parent.packingOrder.isShipped()\" ng-change=\"grid.appScope.$parent.vm.shippingBoxChanged(row.entity, false)\">' +  //ng-change=\"grid.appScope.vm.changePackItemPackage(row.entity)>\"+\n            '<md-option ng-repeat=\"package in grid.appScope.$parent.packingOrder.packingOrderShippingBoxes\" ng-value=\"package.id\">' +\n            '{{\\'ORDER.PACKAGE\\' | translate}} {{$index + 1}}' +\n            '</md-option>' +\n            '<md-option ng-value=\"undefined\" ng-click=\"grid.appScope.$parent.vm.shippingBoxChanged(row.entity, true, $event)\">' +\n            '<div flex layout=\"row\" layout-align=\"start center\" ng-click=\"grid.appScope.$parent.vm.shippingBoxChanged(row.entity, true, $event)\">' +\n            '<md-icon md-font-icon=\"icon-plus\" class=\"md-primary\"></md-icon>' +\n            '<span translate=\"PICKING_AND_PACKING.ADD_NEW_PACKAGE\" class=\"md-primary-fg\" flex> </span>' +\n            '</div>' +\n            '</md-option>' +\n            '</md-option>' +\n            '</md-select>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        weight: {\n          displayName: $filter('translate')('PACKING.WEIGHT'),\n          headerTooltip: $filter('translate')('PACKING.WEIGHT'),\n          field: 'weight',\n          permission: true,\n          visible: vm.hasCompanySendcloud(),\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableCellEdit: true,\n          enableCellEditOnFocus: true,\n          cellTemplate: '<div layout=\"column\" flex>' +\n            '<div class=\"input-with-label\">' +\n            '<input ng-model=\"row.entity.weight\" ng-model-options=\"{debounce:500}\" ng-disabled=\"(grid.appScope.$parent.packingOrder.isPendingToShip() && grid.appScope.$parent.packingOrder.hasParcels()) || grid.appScope.$parent.packingOrder.isShipped()\"' +\n            'ng-change=\"grid.appScope.$parent.vm.weightChanged(row.entity)\" type=\"number\" class=\"nd-input outlined no-border\" ng-class=\"{\\'secondary-text\\': (grid.appScope.$parent.packingOrder.isPendingToShip() || grid.appScope.$parent.packingOrder.isShipped())}\">' +\n            '<span class=\"input-label secondary-text\">{{grid.appScope.$parent.vm.WEIGHT_UNITS_FORMATTED[row.entity.weight_unit] || row.entity.weight_unit || \\'kg\\'}}</span>' +\n            '</div>' +\n            '</div>',\n          editableCellTemplate: '<div layout=\"column\" flex>' +\n            '<div class=\"input-with-label\">' +\n            '<input ng-model=\"row.entity.weight\" ng-model-options=\"{debounce:500}\" ng-disabled=\"(grid.appScope.$parent.packingOrder.isPendingToShip() && grid.appScope.$parent.packingOrder.hasParcels()) || grid.appScope.$parent.packingOrder.isShipped()\" ' +\n            'ng-change=\"grid.appScope.$parent.vm.weightChanged(row.entity)\"  type=\"number\" class=\"nd-input outlined no-border\" ng-class=\"{\\'secondary-text\\': (grid.appScope.$parent.packingOrder.isPendingToShip() || grid.appScope.$parent.packingOrder.isShipped())}\">' +\n            '<span class=\"input-label secondary-text\">{{grid.appScope.$parent.vm.WEIGHT_UNITS_FORMATTED[row.entity.weight_unit] || row.entity.weight_unit || \\'kg\\'}}</span>' +\n            '</div>' +\n            '</div>',\n          cellClass: 'cell-padding'\n        },\n        status: {\n          displayName: $filter('translate')('ORDER.STATUS'),\n          headerTooltip: $filter('translate')('ORDER.STATUS'),\n          headerCellTemplate: '<div class=\"mt-16 ml-8\"><span translate=\"ORDER.STATUS\"></span><md-icon class=\"icon icon-information-outline name font-size-16 mr-10 ml-8\"><md-tooltip><span translate=\"PICKING.STATUS_TOOLTIP\"></span></md-tooltip></md-icon></div>',\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 220,\n          enablePinning: false,\n          pinnedRight: true,\n          enableHiding: false,\n          cellTemplate:\n            '<md-button ng-click=\"grid.appScope.$parent.vm.statusChanged(row.entity)\" ' +\n            'ng-disabled=\"!grid.appScope.$parent.packingOrder.canEditItemStatus()\" ' +\n            'ng-if=\"row.entity.packed==grid.appScope.$parent.vm.ITEM_STATUS.PENDING\" ' +\n            'layout=\"row\" ' +\n            'layout-align=\"center center\" ' +\n            'class=\"text-boxed amber-200-bg p-0 soft-button text-black\">' +\n            '<md-tooltip><span translate=\"PACKING.PENDING_TO_PACK_TOOLTIP\"></span></md-tooltip>' +\n            '<md-progress-circular md-diameter=\"15px\" ng-if=\"row.entity.changingPackingStatus\"></md-progress-circular>' +\n            '<md-icon class=\"s16\" md-font-icon ng-if=\"!row.entity.changingPackingStatus\"' +\n            'md-svg-src=\"assets/images/custom-material-design-icons/circle-pending.bbd9c65e.svg\"></md-icon>' +\n            '<span class=\"ml-10 text-bold\" translate=\"PACKING.PENDING_TO_PACK\"></span></md-button>' +\n\n            '<md-button ng-click=\"grid.appScope.$parent.vm.statusChanged(row.entity)\" ' +\n            'ng-disabled=\"!grid.appScope.$parent.packingOrder.canEditItemStatus()\" ' +\n            'ng-if=\"row.entity.packed==grid.appScope.$parent.vm.ITEM_STATUS.PACKED\" ' +\n            'layout=\"row\" ' +\n            'layout-align=\"center center\" ' +\n            'class=\"text-boxed green-A700-bg p-0 soft-button text-black\">' +\n            '<md-tooltip><span translate=\"PACKING.PACKED_TOOLTIP\"></span></md-tooltip>' +\n            '<md-progress-circular md-diameter=\"15px\" ng-if=\"row.entity.changingPackingStatus\"></md-progress-circular>' +\n            '<md-icon class=\"s16\" md-font-icon ng-if=\"!row.entity.changingPackingStatus\"' +\n            'md-svg-src=\"assets/images/custom-material-design-icons/circle-picked.374e1f2a.svg\"></md-icon>' +\n            '<span class=\"ml-10 text-bold\" translate=\"PACKING.PACKED\"></span></md-button>'\n        }\n      };\n    }\n\n    function statusChanged(row) {\n      if (row.changingPackingStatus) {\n        return;\n      }\n      row.changingPackingStatus = true;\n      var itemStatus = row.packed;\n      if (itemStatus === vm.ITEM_STATUS.PENDING) {\n        itemStatus = vm.ITEM_STATUS.PACKED;\n      } else {\n        itemStatus = vm.ITEM_STATUS.PENDING;\n      }\n\n      api.inventories.pickingPackingPackingOrderProductVariants.patch({\n        id: row.id,\n        packed: itemStatus\n      }, function (response, fn, status) {\n        row.changingPackingStatus = false;\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          row.packed = itemStatus;\n          if (response && angular.isDefined(response.packing_order_shipping_box)) {\n            row.packing_order_shipping_box = response.packing_order_shipping_box;\n          }\n          if ($scope.packingOrder.isPendingToPack()) {\n            updatePackingOrder();\n          }\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function weightChanged(row) {\n      api.inventories.pickingPackingPackingOrderProductVariants.patch({\n        id: row.id,\n        weight: row.weight\n      }, function (response, fn, status) {\n        row.changingPackingStatus = false;\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          return;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function shippingBoxChanged(row, isNewShippingBox, event) {\n      if (event) {\n        event.stopPropagation();\n      }\n      if (isNewShippingBox) {\n        vm.createShippingBoxWithProductVariant(row);\n        $mdSelect.hide();\n        return;\n      }\n      api.inventories.pickingPackingPackingOrderProductVariants.patch({\n        id: row.id,\n        packing_order_shipping_box: row.packing_order_shipping_box\n      }, function (response, fn, status) {\n        row.changingPackingStatus = false;\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          return;\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n      });\n    }\n\n    function updatePackingOrder() {\n      api.inventories.packingOrder.get(\n        {\n          id: $scope.packingOrder.id\n        },\n        function (response, fn, status) {\n          if (status === HTTP_STATUS.HTTP_200_OK) {\n            $scope.packingOrder = new PackingOrder(response);\n          }\n        }\n      );\n    }\n\n    function hasCompanySendcloud() {\n      return Session.company.hasInstalledAppEnabled(INTEGRATION_APP_TYPE.SENDCLOUD);\n    }\n\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndInvoicesListController', ndInvoicesListController)\n    .directive('ndInvoicesList', ndInvoicesList);\n\n  /** @ngInject */\n  function ndInvoicesList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=', type: '=', selected: '='\n      },\n      controller: 'ndInvoicesListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-invoices-list/nd-invoices-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndInvoicesListController($scope, $timeout, $rootScope, $state, $filter, $sce, $mdToast, $q, $document, api, Session, Invoice, HTTP_STATUS, UiGridService, DTO_ORDER_TYPES, EXPIRING_DATE_PAYMENT_STATUS, INVOICE_TYPES) {\n\n    // Data\n    var vm = this;\n    vm.url = api.urls.accounting.invoices.replace('/:id/', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = $scope.type == INVOICE_TYPES.INVOICE ? 'UIGridAccountingInvoicesControllerV4' : $scope.type == INVOICE_TYPES.PROFORMA ? 'UIGridAccountingProformaControllerV4' : 'UIGridAccountingQuotesControllerV4';\n    vm.invoicePaymentMethods = {};\n\n    // Methods\n    $scope.getPaymentStatusBadge = getPaymentStatusBadge;\n    $scope.getOrigin = getOrigin;\n    $scope.downloadInvoice = downloadInvoice;\n    $scope.getInvoiceName = getInvoiceName;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('INVOICES.SERIAL_NUMBER_TYPE'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<a ng-if=\"row.entity.type==' + INVOICE_TYPES.INVOICE + '\" ui-sref=\"app.accounting.invoices.invoice({id:row.entity.id})\">' +\n            '<span ng-if=\"row.entity.autocode\">{{row.entity.autocode}}</span><span ng-if=\"!row.entity.autocode\" translate=\"INVOICE.NO_SERIAL_NUMBER\"></span></a>' +\n            '<a ng-if=\"row.entity.type==' + INVOICE_TYPES.PROFORMA + '\" ui-sref=\"app.accounting.proformas.proforma({id:row.entity.id})\">' +\n            '<span ng-if=\"row.entity.autocode\">{{row.entity.autocode}}</span><span ng-if=\"!row.entity.autocode\" translate=\"INVOICE.NO_SERIAL_NUMBER\"></span></a>' +\n            '<a ng-if=\"row.entity.type==' + INVOICE_TYPES.QUOTE + '\" ui-sref=\"app.accounting.quotes.quote({id:row.entity.id})\">' +\n            '<span ng-if=\"row.entity.autocode\">{{row.entity.autocode}}</span><span ng-if=\"!row.entity.autocode\" translate=\"INVOICE.NO_SERIAL_NUMBER\"></span></a></div>'\n        }, concept: {\n          displayName: $filter('translate')('INVOICE.CONCEPT'),\n          headerTooltip: $filter('translate')('INVOICE.CONCEPT'),\n          field: 'customer',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.concept || \\'-\\'}}</div>'\n        }, billing_date: {\n          displayName: $filter('translate')('INVOICES.BILLING_DATE'),\n          headerTooltip: $filter('translate')('INVOICES.BILLING_DATE'),\n          field: 'billing_date',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.billing_date)}}</div>'\n        }, payment_status: {\n          displayName: $filter('translate')('INVOICES.PAYMENT'),\n          headerTooltip: $filter('translate')('INVOICES.PAYMENT'),\n          field: 'payment_status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getPaymentStatusBadge(row.entity.mutable_fields.payment_status)\"></div>'\n        }, total_incl_tax: {\n          displayName: $filter('translate')('INVOICE.TOTAL'),\n          headerTooltip: $filter('translate')('INVOICE.TOTAL'),\n          field: 'total_incl_tax',\n          permission: true,\n          enableSorting: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.total_incl_tax)}}</div>'\n        }, related_orders: {\n          displayName: $filter('translate')('INVOICES.ORIGIN'),\n          headerTooltip: $filter('translate')('INVOICES.ORIGIN'),\n          field: 'related_orders',\n          permission: true,\n          enableSorting: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getOrigin(row.entity.related_orders)\"></div>'\n        }, customer: {\n          displayName: $filter('translate')('INVOICES.CUSTOMER'),\n          headerTooltip: $filter('translate')('INVOICES.CUSTOMER'),\n          field: 'customer',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.customer || \\'-\\'}}</div>'\n        }, pdf_file: {\n          displayName: $filter('translate')('INVOICES.FILE'),\n          headerTooltip: $filter('translate')('INVOICES.FILE'),\n          field: 'pdf_file',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\" layout=\"row\" layout-align=\"start center\"><a ng-if=\"row.entity.autocode\" ng-click=\"grid.appScope.$parent.downloadInvoice(row.entity.id)\" class=\"md-primary m-0 cursor-pointer\" ng-bind-html=\"grid.appScope.$parent.getInvoiceName(row.entity)\"></a></div>'\n        }\n      };\n    }\n\n    function getPaymentStatusBadge(payment_status) {\n      if (payment_status === 10) {\n        return $sce.trustAsHtml('<span class=\"text-boxed red\">' + $filter('translate')('INVOICE.PENDING') + '</span>');\n      } else {\n        return $sce.trustAsHtml('<span class=\"text-boxed green\">' + $filter('translate')('INVOICE.PAID') + '</span>');\n      }\n    }\n\n    function getOrigin(orders) {\n      if (!orders || orders.length === 0) {\n        return '-';\n      }\n\n      var links = orders.map(function(data, index) {\n        var href = '';\n        if (data.type === DTO_ORDER_TYPES.POS_ORDER) {\n          href = $state.href('app.sale.sales_log.order', { id: data.id });\n        } else if (data.type === DTO_ORDER_TYPES.SALE_ORDER) {\n          href = $state.href('app.wholesale.sales.sale.products', { id: data.id });\n        } else if (data.type === DTO_ORDER_TYPES.PURCHASE_ORDER) {\n          href = $state.href('app.inventory.purchases.purchase.products', { id: data.id });\n        } else if (data.type === DTO_ORDER_TYPES.TRANSFER_ORDER) {\n          href = $state.href('app.inventory.transfers.transfer.delivery', { id: data.id });\n        } else if (data.type === 'RegisterActivity') {\n          href = $state.href('app.sale.register_closure', { id: data.id });\n        }\n\n        var link = '<a href=\"' + href + '\">' + data.autocode + '</a>';\n\n        if (index !== orders.length - 1) {\n          link += ', ';\n        }\n\n        return link;\n      });\n\n      return $sce.trustAsHtml(links.join(''));\n    }\n\n    function getInvoiceName(invoice) {\n      return Invoice.getFileName(invoice.autocode);\n    }\n\n    function downloadInvoice(invoiceId) {\n      api.private.v2.accounting.invoices.print({\n        id: invoiceId\n      });\n    }\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .directive('ndInvoiceAutocode', ndInvoiceAutocode);\n\n  function ndInvoiceAutocode() {\n    return {\n      restrict: 'E',\n      scope: {\n        invoice: '=?'\n      },\n      template: [\n        '<div layout=\"row\" layout-align=\"start center\">',\n        '<span>{{ header  | translate }} {{ getAutocodeOrDraft() }}</span>',\n        '<span class=\"ml-5 secondary-text\" ng-if=\"invoice.corrective_of\" style=\"display: inline;\">',\n        '({{ \"INVOICE.CORRECTIVE_OF\" | translate }}: <nd-a style=\"display: inline;\" state=\"correctiveState\" state-params=\"correctiveStateParams\">{{ invoice.corrective_of.autocode }}</nd-a>)',\n        '</span>',\n        '<span class=\"ml-5 secondary-text\" ng-if=\"invoice.corrected_by && invoice.corrected_by.length > 0\" style=\"display: inline;\">',\n        '({{ \"INVOICE.CORRECTED_BY\" | translate }}: ',\n        '<span ng-repeat=\"correctedInv in invoice.corrected_by\">',\n        '<nd-a style=\"display: inline;\" state=\"correctedByStates[$index]\" state-params=\"correctedByStateParams[$index]\">{{ correctedInv.autocode || (\"INVOICE.DRAFT\" | translate) }}</nd-a>',\n        '<span ng-if=\"!$last\">, </span>',\n        '</span>',\n        ')',\n        '</span>',\n        '<span class=\"ml-5 secondary-text\" ng-if=\"invoice.replaced_by\" style=\"display: inline;\">',\n        '({{ \"INVOICE.REPLACED_BY\" | translate }}: <nd-a style=\"display: inline;\" state=\"replacedByState\" state-params=\"replacedByStateParams\">{{ invoice.replaced_by.autocode || (\"INVOICE.DRAFT\" | translate) }}</nd-a>)',\n        '</span>',\n        '<span class=\"ml-5 secondary-text\" ng-if=\"invoice.replacement_of && invoice.replacement_of.length > 0\" style=\"display: inline;\">',\n        '({{ \"INVOICE.REPLACEMENT_OF\" | translate }}: ',\n        '<span ng-repeat=\"replacementInv in invoice.replacement_of\">',\n        '<nd-a style=\"display: inline;\" state=\"replacementOfStates[$index]\" state-params=\"replacementOfStateParams[$index]\">{{ replacementInv.autocode || (\"INVOICE.DRAFT\" | translate) }}</nd-a>',\n        '<span ng-if=\"!$last\">, </span>',\n        '</span>',\n        ')',\n        '</span>',\n        '</div>'\n      ].join(''),\n      controller: ['$scope', 'INVOICE_TYPES', '$filter', function($scope, INVOICE_TYPES, $filter) {\n\n        $scope.getHeader = function() {\n          if ($scope.invoice && $scope.invoice.type) {\n            switch ($scope.invoice.type) {\n              case INVOICE_TYPES.INVOICE:\n                return 'INVOICE.INVOICE';\n              case INVOICE_TYPES.QUOTE:\n                return 'INVOICE.QUOTE';\n              case INVOICE_TYPES.PROFORMA:\n                return 'INVOICE.PROFORMA';\n              default:\n                return 'Unknown';\n            }\n          }\n          return '';\n        };\n\n        $scope.getCorrectiveOf = function() {\n          if ($scope.invoice.corrective_of) {\n            $scope.correctiveState = 'app.accounting.invoices.invoice';\n            $scope.correctiveStateParams = { id: $scope.invoice.corrective_of.id };\n          }\n        };\n\n        $scope.getCorrectedBy = function() {\n          if ($scope.invoice.corrected_by && $scope.invoice.corrected_by.length > 0) {\n            $scope.correctedByStates = [];\n            $scope.correctedByStateParams = [];\n            $scope.invoice.corrected_by.forEach(function(correctedInv) {\n              $scope.correctedByStates.push('app.accounting.invoices.invoice');\n              $scope.correctedByStateParams.push({ id: correctedInv.id });\n            });\n          }\n        };\n\n        $scope.getReplacedBy = function() {\n          if ($scope.invoice.replaced_by) {\n            $scope.replacedByState = 'app.accounting.invoices.invoice';\n            $scope.replacedByStateParams = { id: $scope.invoice.replaced_by.id };\n          }\n        };\n\n        $scope.getReplacementOf = function() {\n          if ($scope.invoice.replacement_of && $scope.invoice.replacement_of.length > 0) {\n            $scope.replacementOfStates = [];\n            $scope.replacementOfStateParams = [];\n            $scope.invoice.replacement_of.forEach(function(replacementInv) {\n              $scope.replacementOfStates.push('app.accounting.invoices.invoice');\n              $scope.replacementOfStateParams.push({ id: replacementInv.id });\n            });\n          }\n        };\n\n        $scope.getAutocodeOrDraft = function(){\n          return $scope.invoice.getAutocodeOrDraft();\n        };\n\n        $scope.header = $scope.getHeader();\n        $scope.getCorrectiveOf();\n        $scope.getCorrectedBy();\n        $scope.getReplacedBy();\n        $scope.getReplacementOf();\n\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndGridController', ndGridController)\n    .directive('ndGrid', ndGrid);\n\n  /** @ngInject */\n  function ndGrid() {\n    return {\n      restrict: 'E', scope: {\n        url: '=',\n        status: '=',\n        context: '=',\n        columns: '=',\n        storageLabel: '=',\n        selected: '=?',\n        enableGrouping: '=?',\n        savePagination: '=?',\n        serializer: '=?',\n        searchFields: '=?',\n        emptyLabel: '=?'\n      }, controller: 'ndGridController', controllerAs: 'vm', templateUrl: 'app/directives/nd-grid/nd-grid.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndGridController($scope, $timeout, $compile, $rootScope, $filter, $mdToast, $q, $document, api, Session, HTTP_STATUS, CURRENCIES, UiGridService, COUNTRIES_DICT) {\n\n    // Data\n    var vm = this;\n    vm.loading = false;\n    vm.saving = false;\n    vm.timeout = null;\n    vm.columns = {};\n    vm.status = $scope.status;\n    vm.emptyLabel = $scope.emptyLabel || 'GENERAL.EMPTY_GRID';\n    vm.context = $scope.context;\n    vm.serializer = $scope.serializer || null;\n    vm.searchFields = $scope.searchFields || null;\n    vm.gridApi = null;\n    vm.gridOptions = null;\n    vm.uiGridInitialized = false;\n    vm.keptSelectionArray = $scope.selected ? $scope.selected : [];\n    vm.enableGrouping = $scope.enableGrouping || false;\n    vm.savePagination = angular.isDefined($scope.savePagination) ? $scope.savePagination : true;\n\n    // Methods\n    vm.getAggregationValue = getAggregationValue;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n      vm.gridOptions = UiGridService.getGridOptions({\n        rowHeight: 40,\n        headerRowHeight: 40,\n        onRegisterApi: initializeUidGrid,\n        exporterCsvFilename: $filter('translate')('GENERAL.EXPORT') + '.csv',\n        exporterFieldCallback: function(grid, row, col, value) {\n          var entity = row.entity || {};\n          \n          if (col.field === 'origin_code') {\n            if (row.groupHeader && row.treeNode && row.treeNode.children && row.treeNode.children[0]) {\n              return row.treeNode.children[0].row.entity.origin_code || '';\n            }\n            return entity.origin_code || '';\n          }\n          \n          if (col.field === 'warehouse') {\n            var warehouse = entity.warehouse;\n            if (row.groupHeader && row.treeNode && row.treeNode.children && row.treeNode.children[0]) {\n              warehouse = row.treeNode.children[0].row.entity.warehouse;\n            }\n            if (warehouse && typeof warehouse === 'object') {\n              return warehouse.name || '';\n            }\n            return warehouse || '';\n          }\n          \n          if (col.field === 'target_destination') {\n            var targetDest = entity.target_destination;\n            var orderType = entity.order_type;\n            var customerName = entity.customer_name;\n            \n            if (row.groupHeader && row.treeNode && row.treeNode.children && row.treeNode.children[0]) {\n              targetDest = row.treeNode.children[0].row.entity.target_destination;\n              orderType = row.treeNode.children[0].row.entity.order_type;\n              customerName = row.treeNode.children[0].row.entity.customer_name;\n            }\n            \n            function formatLargeLocation(location) {\n              if (!location) return '';\n              var parts = [];\n              if (location.address_1) parts.push(location.address_1);\n              if (location.zip || location.city) {\n                parts.push((location.zip || '') + ' ' + (location.city || ''));\n              }\n              if (location.country && COUNTRIES_DICT[location.country]) {\n                parts.push(COUNTRIES_DICT[location.country]);\n              }\n              return parts.join(', ');\n            }\n            \n            var result = '';\n            \n            if (orderType === 'TransferOrderDelivery' && targetDest && targetDest.name) {\n              result = targetDest.name;\n              var location = formatLargeLocation(targetDest);\n              if (location) {\n                result += ' - ' + location;\n              }\n            } else if ((orderType === 'SaleOrderDelivery' || orderType === 'PosOrderFulfillment') && customerName) {\n              result = customerName;\n              var location = formatLargeLocation(targetDest);\n              if (location) {\n                result += ' - ' + location;\n              }\n            } else if (targetDest && typeof targetDest === 'object') {\n              if (targetDest.name) {\n                result = targetDest.name;\n              }\n              var location = formatLargeLocation(targetDest);\n              if (location) {\n                result = result ? result + ' - ' + location : location;\n              }\n            }\n            \n            return result || '';\n          }\n          \n          return value;\n        },\n        gridMenuCustomItems: [{\n          title: $filter('translate')('GENERAL.RESTORE_COLUMNS'), action: function($event) {\n            restoreGridColumns();\n          }, order: 2\n        }]\n      });\n\n      vm.filtersChangedWatcher = $scope.$on('ndGrid::filtersChanged', filterChanged);\n      vm.sortColumnEnabledWatcher = $scope.$on('ndGrid::sortEnabledChanged', function() {\n        $timeout(function() {\n          setGridColumns();\n        }, 100);\n      });\n      $scope.$on('$destroy', function() {\n        vm.filtersChangedWatcher();\n        vm.sortColumnEnabledWatcher();\n      });\n\n    }\n\n    function initializeUidGrid(gridApi) {\n      vm.gridApi = gridApi;\n\n      vm.sizeWatcher = $scope.$on('ndGrid::sizeChanged', function() {\n        vm.gridApi.core.handleWindowResize();\n      });\n      $scope.$on('$destroy', function() {\n        vm.sizeWatcher();\n      });\n\n      vm.gridApi.core.on.columnVisibilityChanged($scope, function(changedColumn) {\n        vm.columns[changedColumn.colDef.field].visible = changedColumn.colDef.visible;\n\n        if (changedColumn.colDef.visible) {\n          if (vm.timeout) {\n            $timeout.cancel(vm.timeout);\n            vm.timeout = null;\n          }\n        }\n        if (vm.uiGridInitialized) {\n          saveStatus();\n          vm.timeout = $timeout(function() {\n            vm.timeout = null;\n            getGridPage();\n          }, 2000);\n        }\n      });\n\n      vm.gridApi.core.on.rowsRendered($scope, function() {\n        var grid = this.grid;\n        var allSelected = true;\n        grid.rows.forEach(function(part, index, array) {\n          if (vm.keptSelectionArray.includes(array[index].entity.id)) {\n            array[index].isSelected = true;\n          } else if (allSelected) {\n            allSelected = false;\n          }\n        });\n\n        if (allSelected) {\n          grid.selection.selectAll = true;\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChanged($scope, function(row) {\n        updateSelectedRows(row);\n      });\n\n      vm.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {\n        if (vm.uiGridInitialized) {\n          vm.status.ordering = UiGridService.getSortString(grid, sortColumns);\n          saveStatus();\n          getGridPage();\n        }\n      });\n\n      vm.gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {\n        if (vm.uiGridInitialized) {\n          vm.status.pageNumber = newPage || 1;\n          vm.status.pageSize = pageSize;\n          saveStatus();\n          getGridPage();\n        }\n      });\n\n      vm.gridApi.selection.on.rowSelectionChangedBatch($scope, function() {\n        if (vm.gridApi.selection.getSelectAllState()) {\n          this.grid.rows.map(function(row) {\n            var idx = vm.keptSelectionArray.indexOf(row.entity.id);\n            if (idx === -1) {\n              vm.keptSelectionArray.push(row.entity.id);\n            }\n          });\n        } else {\n          this.grid.rows.map(function(row) {\n            updateSelectedRows(row);\n          });\n        }\n        $scope.$emit('ndGrid::selectedRowsChanged', vm.keptSelectionArray);\n      });\n\n      vm.gridApi.pinning.on.columnPinned($scope, function(colDef) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colMovable.on.columnPositionChanged($scope, function(oldPosition, newPositio) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      vm.gridApi.colResizable.on.columnSizeChanged($scope, function(colDef, deltaChange) {\n        if (vm.uiGridInitialized) {\n          saveStatus();\n        }\n      });\n\n      loadStatus();\n      setGridColumns();\n      getGridPage();\n      $scope.$emit('gridApiInitialized', gridApi);\n\n    }\n\n    function setGridColumns(avoidState) {\n\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      angular.copy($scope.columns, vm.columns);\n\n      if (!avoidState && vm.status.state && vm.status.state.columns) {\n        var columnMap = {};\n        vm.status.state.columns.forEach(function(column) {\n          columnMap[column.name] = column;\n        });\n        vm.status.state.columns.forEach(function(stateColumn) {\n          var columnKey = stateColumn.name;\n          if (vm.columns.hasOwnProperty(columnKey) && vm.columns[columnKey].permission) {\n            if (columnMap[columnKey]) {\n              angular.extend(vm.columns[columnKey], columnMap[columnKey]);\n            }\n            var col = vm.columns[columnKey];\n            col.groupingShowAggregationMenu = false;\n            col.groupingShowGroupingMenu = false;\n            vm.gridOptions.columnDefs.push(col);\n          }\n        });\n      } else {\n        for (var key in vm.columns) {\n          if (vm.columns.hasOwnProperty(key) && vm.columns[key].permission) {\n            var col = vm.columns[key];\n            col.groupingShowAggregationMenu = false;\n            col.groupingShowGroupingMenu = false;\n            vm.gridOptions.columnDefs.push(col);\n          }\n        }\n      }\n    }\n\n\n    function restoreGridColumns() {\n      vm.columns = {};\n      vm.gridOptions.columnDefs = [];\n      vm.status.ordering = null;\n\n      setGridColumns(true);\n      getGridPage();\n      // Without the timeout the saveStatus is not working, pending to investigate\n      $timeout(function() {\n        saveStatus();\n      }, 100);\n    }\n\n    function updateSelectedRows(changed_row) {\n      var idx = vm.keptSelectionArray.indexOf(changed_row.entity.id);\n      if (idx > -1) {\n        vm.keptSelectionArray.splice(idx, 1);\n      } else {\n        vm.keptSelectionArray.push(changed_row.entity.id);\n      }\n      $scope.$emit('ndGrid::selectedRowsChanged', vm.keptSelectionArray);\n    }\n\n    function saveStatus() {\n      var copyNonStorableFilters = angular.copy(vm.status.nonStorableFilters);\n      delete vm.status.nonStorableFilters;\n      delete vm.status.redirectParams;\n      vm.status.state = vm.gridApi.saveState.save();\n      if (!vm.savePagination) {\n        delete vm.status.state.pagination;\n      }\n      if (vm.status.pageNumber === null || vm.status.pageNumber === undefined) {\n        vm.status.pageNumber = 1;\n      }\n      localStorage.setItem(Session.company.id + '::' + $scope.storageLabel, JSON.stringify(vm.status));\n      vm.status.nonStorableFilters = copyNonStorableFilters;\n    }\n\n    function loadStatus() {\n      var loadedStatus = JSON.parse(localStorage.getItem(Session.company.id + '::' + $scope.storageLabel));\n      var searchParam = vm.status.search;\n      if (loadedStatus) {\n        if (searchParam) {\n          loadedStatus.search = searchParam;\n        }\n        if (loadedStatus.pageNumber === null || loadedStatus.pageNumber === undefined) {\n          loadedStatus.pageNumber = 1;\n        }\n        angular.extend(vm.status, loadedStatus);\n        if (vm.gridApi) {\n          if (vm.status.state && vm.status.state['grouping'] && vm.status.state['grouping']['rowExpandedStates']) {\n            delete vm.status.state['grouping']['rowExpandedStates'];\n          }\n          vm.gridApi.saveState.restore($scope, vm.status.state);\n          $rootScope.$broadcast('ndGrid::statusLoaded');\n        }\n      } else {\n        vm.status.pageNumber = 1;\n      }\n    }\n\n    function getAggregationValue(aggregations, field) {\n        var aggregation = aggregations.find(function (agg) {\n          return agg.col.field === field;\n        });\n        return aggregation ? aggregation.rendered : null;\n      }\n\n    function filterChanged() {\n      saveStatus();\n      getGridPage();\n    }\n\n    function getGridPagePostData() {\n      var d = {};\n      d.pagination = 'datatable';\n      d.length = vm.status.pageSize;\n      if (vm.status.pageNumber === null || vm.status.pageNumber === undefined) {\n        vm.status.pageNumber = 1;\n      }\n      var pageNumber = vm.status.pageNumber;\n      d.start = vm.status.pageSize * (pageNumber - 1);\n      d.ordering = vm.status.ordering;\n      d.fields = getGridVisibleColumnFields();\n      d.search = vm.status.search;\n      d.context = vm.context;\n      d.page = pageNumber;\n      if (vm.serializer) {\n        d.serializer = vm.serializer;\n      }\n      if (vm.searchFields) {\n        d.search_fields = vm.searchFields;\n      }\n      updateFiltersParam();\n      angular.extend(d, vm.status.filtersParams);\n\n      return d;\n    }\n\n    function mapAndJoinList(list) {\n      if (!list || !list.length) {\n        return null;\n      }\n      return list.map(function(item) {\n        return item.id;\n      }).join();\n    }\n\n    var controller = new AbortController();\n\n    $scope.$on('$destroy', function() {\n      try {\n        controller.abort();\n      } catch (e) {\n        // to avoid js error\n      }\n    });\n\n    function getGridPage() {\n      if (vm.loading) {\n        controller.abort();\n        controller = new AbortController();\n      }\n\n      setLoading(true);\n      var params = new URLSearchParams(getGridPagePostData()).toString();\n      var url = $scope.url + '?' + params;\n\n      fetch(url, {\n        method: 'GET', headers: {\n          'Authorization': 'Token ' + Session.token, 'Content-Type': 'application/json'\n        }, signal: controller.signal\n      })\n        .then(function(response) {\n          return response.json();\n        })\n        .then(function(data) {\n          setLoading(false);\n          vm.uiGridInitialized = true;\n          vm.gridOptions.data = data.data;\n          vm.gridOptions.totalItems = data.recordsTotal;\n          var totalPages = Math.ceil(data.recordsTotal / vm.status.pageSize);\n          if (vm.status.pageNumber > totalPages && totalPages > 0) {\n            vm.status.pageNumber = 1;\n            saveStatus();\n            getGridPage();\n            return;\n          }\n          $scope.$apply();\n          $timeout(function(){\n            vm.gridApi.core.handleWindowResize();\n          });\n        })\n        .catch(function(error) {\n          setLoading(false);\n          if (error && error.name === 'AbortError') {\n            return;\n          }\n          throw error;\n        });\n    }\n\n    function getGridVisibleColumnFields() {\n      var fields = 'id,';\n      var all = true;\n\n      var keys = Object.keys(vm.columns);\n      var columns = keys.map(function(v) {\n        return vm.columns[v];\n      });\n\n      columns.forEach(function(column) {\n        if (!column.visible) {\n          all = false;\n        } else {\n          fields += column.field + ',';\n        }\n      });\n\n      if (all) {\n        return null;\n      } else {\n        return fields;\n      }\n    }\n\n    $scope.getShortDate = function(date) {\n      return $filter('date')(date, 'dd/MM/yy');\n    };\n\n    $scope.getShortDateTime = function(date) {\n      return $filter('date')(date, 'dd/MM/yy HH:mm');\n    };\n\n    $scope.getPrice = function(value, decimals, currency) {\n      if (value) {\n        return $filter('number')(+value, decimals || 2) + ' ' + CURRENCIES[(currency || Session.company.currency)];\n      }\n      return '-';\n    };\n\n    function updateFiltersParam() {\n      var params = {};\n      var filters = [vm.status.filters];\n      if(vm.status.nonStorableFilters){\n        filters.push(vm.status.nonStorableFilters);\n      }\n      filters.forEach(function(filter) {\n\n        if (filter.product_id) {\n          params.product_id = filter.product_id;\n        }\n        if (filter.brands && filter.brands.length) {\n          params.brands = filter.brands.join(',');\n        }\n        if (filter.compositions && filter.compositions.length) {\n          params.compositions = filter.compositions.join(',');\n        }\n        if (filter.categories && filter.categories.length) {\n          params.categories = filter.categories.join(',');\n        }\n        if (filter.subcategories && filter.subcategories.length) {\n          params.subcategories = filter.subcategories.join(',');\n        }\n        if (filter.seasons && filter.seasons.length) {\n          params.seasons = filter.seasons.join(',');\n        }\n        if (filter.statuses && filter.statuses.length) {\n          params.statuses = filter.statuses.join(',');\n        }\n        if (filter.status) {\n          params.status = filter.status;\n        }\n        if (filter.warehouses) {\n          params.warehouses = filter.warehouses;\n        }\n        if (filter.packingOrder) {\n          params.packing_order = filter.packingOrder;\n        }\n        if (filter.limit) {\n          params.limit = filter.limit;\n        }\n        if (filter.targetWarehouses && filter.targetWarehouses.length) {\n          params.target_warehouses = filter.targetWarehouses.join(',');\n        }\n        if (filter.sourceWarehouses && filter.sourceWarehouses.length) {\n          params.source_warehouses = filter.sourceWarehouses.join(',');\n        }\n        if (filter.stockAvailability) {\n          params.stock_availability = filter.stockAvailability;\n        }\n        if (filter.unitsFilter) {\n          params.units_filter = filter.unitsFilter;\n        }\n        if (filter.orderTypes && filter.orderTypes.length) {\n          params.order_types = filter.orderTypes.join(',');\n        }\n        if (filter.warehouse_id) {\n          params.warehouse_id = filter.warehouse_id;\n        }\n        if (filter.sites && filter.sites.length) {\n          params.sites = filter.sites.join(',');\n        }\n        if (filter.barcode) {\n          params.filter_barcode = filter.barcode;\n        }\n        if (filter.sku) {\n          params.filter_sku = filter.sku;\n        }\n        if (filter.sizes && filter.sizes.length) {\n          params.size = mapAndJoinList(filter.sizes);\n        }\n        if (filter.colors && filter.colors.length) {\n          params.color = mapAndJoinList(filter.colors);\n        }\n        if (filter.webCategories && filter.webCategories.length) {\n          params.web_category = mapAndJoinList(filter.webCategories);\n        }\n        if (filter.roles && filter.roles.length) {\n          params.roles = filter.roles.join(',');\n        }\n        if (filter.providers && filter.providers.length) {\n          params.providers = mapAndJoinList(filter.providers);\n        }\n        if (filter.customers && filter.customers.length) {\n          params.customers = mapAndJoinList(filter.customers);\n        }\n        if (filter.salesAgents && filter.salesAgents.length) {\n          params.sales_agents = mapAndJoinList(filter.salesAgents);\n        }\n        if (filter.purchases && filter.purchases.length) {\n          params.purchases = mapAndJoinList(filter.purchases);\n        }\n        if (filter.collections && filter.collections.length) {\n          params.collections = mapAndJoinList(filter.collections);\n        }\n        if (filter.users && filter.users.length) {\n          params.users = filter.users.join(',');\n        }\n        if (filter.registers && filter.registers.length) {\n          params.registers = filter.registers.join(',');\n        }\n        if (filter.groups && filter.groups.length) {\n          params.groups = mapAndJoinList(filter.groups);\n        }\n        if (filter.serialNumberTypes && filter.serialNumberTypes.length) {\n          params.serial_number_types = mapAndJoinList(filter.serialNumberTypes);\n        }\n        if (filter.payment_methods && filter.payment_methods.length) {\n          if (typeof filter.payment_methods[0] === 'object') {\n            params.payment_methods = mapAndJoinList(filter.payment_methods);\n          } else {\n            params.payment_methods = filter.payment_methods.join(',');\n          }\n        }\n        if (filter.contactTypes && filter.contactTypes.length) {\n          params.contact_types = filter.contactTypes.join(',');\n        }\n        if (filter.payment_statuses && filter.payment_statuses.length) {\n          params.payment_statuses = filter.payment_statuses.join(',');\n        }\n        if (filter.types && filter.types.length) {\n          params.types = filter.types.join(',');\n        }\n        if (filter.cover) {\n          params.cover = filter.cover;\n        }\n        if (filter.tag) {\n          params.tag = filter.tag;\n        }\n        if (filter.stock) {\n          params.only_in_stock_products = filter.stock;\n        }\n        if (filter.visibleInEcommerce) {\n          params.only_products_visible_in_ecommerce = filter.visibleInEcommerce;\n        }\n        if (filter.purchase_order){\n          params.purchase_order = filter.purchase_order;\n        }\n        if(filter.customer_id){\n          params.customer_id = filter.customer_id;\n        }\n        if(filter.contact_id){\n          params.contact_id = filter.contact_id;\n        }\n        if (filter.discountPrice) {\n          params.only_with_discount_price = filter.discountPrice;\n        }\n        if (filter.stockBelowMinimum) {\n          params.stock_below_minimum = true;\n        }\n        if (filter.no_invoice){\n          params.no_invoice = true;\n        }\n        if (filter.discountActive) {\n          params.discount_active = true;\n        }\n        if (filter.customer) {\n          params.customer = filter.customer;\n        }\n        if (filter.contact) {\n          params.contact = filter.contact;\n        }\n        if (filter.deleted) {\n          params.deleted = true;\n        }\n        if (filter.duplicatedProducts) {\n          params.duplicated = true;\n        }\n        if (filter.isNoos) {\n          params.is_noos = true;\n        }\n        if (filter.show_only_available){\n          params.show_only_available = true;\n        }\n        if (filter.archived) {\n          params.archived = true;\n        }\n        if (filter.duplicatedBarcode) {\n          params.duplicated_barcode = filter.duplicatedBarcode;\n        }\n        if (filter.duplicatedSku) {\n          params.duplicated_sku = filter.duplicatedSku;\n        }\n        if (filter.type) {\n          params.type = filter.type;\n        }\n        if (filter.incidence) {\n          params.incidence = filter.incidence;\n        }\n\n        if (filter.startDate) {\n          if (!(filter.startDate instanceof Date)) {\n            filter.startDate = new Date(filter.startDate);\n          }\n          params.start_date = angular.copy(filter.startDate);\n          params.start_date.setHours(0);\n          params.start_date = params.start_date.toISOString();\n        }\n        if (filter.endDate) {\n          if (!(filter.endDate instanceof Date)) {\n            filter.endDate = new Date(filter.endDate);\n          }\n          params.end_date = angular.copy(filter.endDate);\n          params.end_date.setHours(0);\n          params.end_date.setHours(params.end_date.getHours() + 24);\n          params.end_date = params.end_date.toISOString();\n        }\n\n        if (filter.startTime) {\n          if (!(filter.startTime instanceof Date)) {\n            filter.startTime = new Date(filter.startTime);\n          }\n          var fromTimeDate = new Date();\n          var fromTimeDateStart = fromTimeDate.setHours(filter.startTime.getHours(), filter.startTime.getMinutes()) / 1000;\n          var fromTimeDateEnd = fromTimeDate.setHours(23, 59) / 1000;\n          params.start_time_start = fromTimeDateStart;\n          params.start_time_end = fromTimeDateEnd;\n        }\n\n        if (filter.endTime) {\n          if (!(filter.endTime instanceof Date)) {\n            filter.endTime = new Date(filter.endTime);\n          }\n          var toTimeDate = new Date();\n          var toTimeDateStart = toTimeDate.setHours(0, 0) / 1000;\n          var toTimeDateEnd = toTimeDate.setHours(filter.endTime.getHours(), filter.endTime.getMinutes()) / 1000;\n          params.end_time_start = toTimeDateStart;\n          params.end_time_end = toTimeDateEnd;\n        }\n        if (filter.productCreatedStartDate) {\n          params.product_created_start_date = angular.copy(filter.productCreatedStartDate);\n          params.product_created_start_date.setHours(0);\n          params.product_created_start_date = params.start_date.toISOString();\n        }\n        if (filter.productCreatedEndDate) {\n          params.product_created_end_date = angular.copy(filter.productCreatedEndDate);\n          params.product_created_end_date.setHours(0);\n          params.product_created_end_date.setHours(params.end_date.getHours() + 24);\n          params.product_created_end_date = params.end_date.toISOString();\n        }\n        if (filter.productUpdatedStartDate) {\n          params.product_updated_start_date = angular.copy(filter.productUpdatedStartDate);\n          params.product_updated_start_date.setHours(0);\n          params.product_updated_start_date = params.start_date.toISOString();\n        }\n        if (filter.productUpdatedEndDate) {\n          params.product_updated_end_date = angular.copy(filter.productUpdatedEndDate);\n          params.product_updated_end_date.setHours(0);\n          params.product_updated_end_date.setHours(params.end_date.getHours() + 24);\n          params.product_updated_end_date = params.end_date.toISOString();\n        }\n        if (filter.productPriceUpdatedStartDate) {\n          params.product_price_updated_start_date = angular.copy(filter.productPriceUpdatedStartDate);\n          params.product_price_updated_start_date.setHours(0);\n          params.product_price_updated_start_date = params.start_date.toISOString();\n        }\n        if (filter.productPriceUpdatedEndDate) {\n          params.product_price_updated_end_date = angular.copy(filter.productPriceUpdatedEndDate);\n          params.product_price_updated_end_date.setHours(0);\n          params.product_price_updated_end_date.setHours(params.end_date.getHours() + 24);\n          params.product_price_updated_end_date = params.end_date.toISOString();\n        }\n        if (filter.pending_to_invoice) {\n          params.pending_to_invoice = filter.pending_to_invoice;\n        }\n        if (filter.fiscal_address_pending_to_invoice) {\n          params.fiscal_address_pending_to_invoice = filter.fiscal_address_pending_to_invoice;\n        }\n        if (filter.fiscal_address_contact_id) {\n          params.fiscal_address_contact_id = filter.fiscal_address_contact_id;\n        }\n      });\n\n      // Clear and extend the filtersParams\n      Object.keys(vm.status.filtersParams).forEach(function(key) {\n        delete vm.status.filtersParams[key];\n      });\n      angular.extend(vm.status.filtersParams, params);\n    }\n\n    function setLoading(value) {\n      vm.loading = value;\n      $timeout(function() {\n        [\n          '.ui-grid-pager-container button.ui-grid-pager-first',\n          '.ui-grid-pager-container button.ui-grid-pager-previous',\n          '.ui-grid-pager-container button.ui-grid-pager-next',\n          '.ui-grid-pager-container button.ui-grid-pager-last',\n          '.ui-grid-pager-container input.ui-grid-pager-control-input',\n          '.ui-grid-pager-container select[ng-model=\"grid.options.paginationPageSize\"]'\n        ].forEach(function(selector) {\n          var element = $document[0].querySelector(selector);\n          if (element) {\n            element.disabled = vm.loading;\n          }\n        });\n      });\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndFulfillmentTextBox', ndFulfillmentTextBox);\n\n  /** @ngInject */\n  function ndFulfillmentTextBox() {\n    return {\n      replace: false,\n      restrict: 'E',\n      template: '<span ng-class=\"getClass()\">{{getText() | translate}}</span>',\n      scope: {\n        type: '='\n      },\n      controller: ['$scope', 'POS_ORDER_FULFILLMENTS', function ($scope,\n                                                                 POS_ORDER_FULFILLMENTS) {\n        $scope.getText = function () {\n          return 'ORDER.' + POS_ORDER_FULFILLMENTS[$scope.type];\n        }\n\n        $scope.getClass = function () {\n          return POS_ORDER_FULFILLMENTS[$scope.type];\n        }\n      }]\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndContactsListController', ndContactsListController)\n    .directive('ndContactsList', ndContactsList);\n\n  /** @ngInject */\n  function ndContactsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n        view: '=',\n      },\n      controller: 'ndContactsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-contacts-list/nd-contacts-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndContactsListController($scope, $timeout, $rootScope, $filter, $sce, api, CONTACT_TYPES, COUNTRIES_DICT) {\n\n    // Data\n    var vm = this;\n    vm.COUNTRIES_DICT = COUNTRIES_DICT;\n    vm.url = api.urls.inventories.contacts.replace('/:id/:option', '');\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.view = $scope.view;\n    vm.storageLabel = vm.view === 'customers' ? 'UIGridSaleCustomersControllerV3' : 'UIGridInventoryContactsControllerV3';\n    vm.contactPaymentMethods = {};\n    vm.hasSearch = null;\n\n    // Methods\n    $scope.getTypeBadge = getTypeBadge;\n    $scope.getCountryName = getCountryName;\n    vm.updateHasSearch = updateHasSearch;\n    vm.updateSorting = updateSorting;\n\n    // Initialize\n    initialize();\n\n    $scope.$watch('status.search', function() {\n      vm.updateHasSearch();\n      vm.updateSorting();\n    });\n\n    // Functions\n    function initialize() {\n      vm.updateHasSearch();\n\n      vm.columns = {\n        type: {\n          displayName: $filter('translate')('CONTACTS.TYPE'),\n          headerTooltip: $filter('translate')('CONTACTS.TYPE'),\n          field: 'type',\n          permission: vm.view === 'contacts',\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getTypeBadge(row.entity.type)\"></div>'\n        }, first_name: {\n          displayName: $filter('translate')('CONTACTS.CONTACT_PERSON'),\n          field: 'first_name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.contacts.contact.details({id:row.entity.id})\">{{row.entity.first_name || \"-\"}} {{row.entity.last_name || \"-\"}}</a></div>'\n        }, email: {\n          displayName: $filter('translate')('CONTACTS.EMAIL'),\n          field: 'email',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.email || \"-\"}}</div>'\n        }, name: {\n          displayName: $filter('translate')('CONTACTS.LEGAL_NAME'),\n          field: 'name',\n          permission: true,\n          visible: vm.view === 'contacts',\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.contacts.contact.details({id:row.entity.id})\">{{row.entity.name}}</a></div>'\n        }, vat: {\n          displayName: $filter('translate')('CONTACTS.VAT'),\n          field: 'vat',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.vat || \"-\"}}</div>'\n        }, commercial_name: {\n          displayName: $filter('translate')('CONTACTS.COMMERCIAL_NAME'),\n          field: 'commercial_name',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><a ui-sref=\"app.contacts.contact.details({id:row.entity.id})\">{{row.entity.commercial_name}}</a></div>'\n        }, phone: {\n          displayName: $filter('translate')('CONTACTS.PHONE'),\n          field: 'phone',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.phone || \"-\"}}</div>'\n        }, mobile_phone: {\n          displayName: $filter('translate')('CONTACTS.MOBILE_PHONE_NUMBER'),\n          field: 'mobile_phone',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.mobile_phone || \"-\"}}</div>'\n        }, code: {\n          displayName: $filter('translate')('CONTACTS.CODE'),\n          field: 'code',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.code || \"-\"}}</div>'\n        }, birthday: {\n          displayName: $filter('translate')('CONTACTS.BIRTHDAY'),\n          field: 'birthday',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          enableSorting: false,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.birthday || \"-\"}}</div>'\n        }, currency: {\n          displayName: $filter('translate')('CONTACTS.CURRENCY'),\n          field: 'currency',\n          permission: true,\n          visible: false,\n          minWidth: 50,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.currency || \"-\"}}</div>'\n        }, tags: {\n          displayName: $filter('translate')('CONTACTS.TAGS'),\n          field: 'tags',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-tags\"><span class=\"text-boxed\" ng-repeat=\"tag in grid.getCellValue(row, col)\">{{tag}}</span></div>'\n        }, balance: {\n          displayName: $filter('translate')('CONTACTS.BALANCE'),\n          field: 'balance',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-right',\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.balance)}}</div>'\n        }, purchase_count: {\n          displayName: $filter('translate')('CONTACTS.SALES'),\n          field: 'purchase_count',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.purchase_count || \"-\"}}</div>'\n        }, gender: {\n          displayName: $filter('translate')('CONTACTS.GENDER'),\n          field: 'gender',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.gender==\\'1\\'\" translate=\"CUSTOMERS.MALE\"></span>' +\n            '<span ng-if=\"row.entity.gender==\\'2\\'\" translate=\"CUSTOMERS.FEMALE\"></span>' +\n            '<span ng-if=\"row.entity.gender==\\'3\\'\" translate=\"CUSTOMERS.OTHER\"></span>' +\n          '</div>'\n        }, person_type: {\n          displayName: $filter('translate')('CONTACTS.PERSON_TYPE'),\n          field: 'person_type',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.person_type==\\'1\\'\" translate=\"CONTACTS.NATURAL_PERSON_TYPE\"></span>' +\n            '<span ng-if=\"row.entity.person_type==\\'2\\'\" translate=\"CONTACTS.JURIDICAL_PERSON_TYPE\"></span>' +\n          '</div>'\n        }, notes: {\n          displayName: $filter('translate')('CONTACTS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes || \"-\"}}</div>'\n        }, website: {\n          displayName: $filter('translate')('CONTACTS.WEBSITE'),\n          field: 'website',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><a href=\"{{row.entity.website}}\" target=\"_blank\">{{row.entity.website || \"-\"}}</a></div>'\n        }, iban: {\n          displayName: $filter('translate')('CONTACTS.IBAN'),\n          field: 'iban',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.iban || \"-\"}}</div>'\n        }, swift: {\n          displayName: $filter('translate')('CONTACTS.SWIFT'),\n          field: 'swift',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.swift || \"-\"}}</div>'\n        }, persons: {\n          displayName: $filter('translate')('CONTACTS.PERSONS'),\n          field: 'persons',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\"><span ng-repeat=\"person in row.entity.persons\" >{{person.first_name}} {{person.last_name}}{{$last ? \\'\\' : \\', \\'}}</span></div>'\n        }, postal_addresses: {\n          displayName: $filter('translate')('CONTACTS.CITY'),\n          field: 'postal_addresses',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 200,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\"><span ng-repeat=\"address in row.entity.postal_addresses\">{{address.city}}<span ng-if=\"address.zip\"> ({{address.zip}})</span>{{$last ? \\'\\' : \\', \\'}}</span></div>'\n        }, country: {\n          displayName: $filter('translate')('CONTACTS.COUNTRY'),\n          field: 'country',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          get enableSorting() { return vm.hasSearch; },\n          cellTemplate: '<div class=\"cell-middle\" ng-if=\"row.entity.country\">{{grid.appScope.$parent.getCountryName(row.entity.country)}}</div>' +\n            '<div class=\"cell-middle\" ng-if=\"!row.entity.country\"><span ng-repeat=\"address in row.entity.postal_addresses\">{{grid.appScope.$parent.getCountryName(address.country)}}{{$last ? \\'\\' : \\', \\'}}</span></div>'\n        }, invoice_type: {\n          displayName: $filter('translate')('CONTACTS.INVOICE_TYPE'),\n          field: 'invoice_type',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">' +\n            '<span ng-if=\"row.entity.invoice_type==\\'1\\'\" translate=\"CONTACTS.CONTACT_INVOICE_TYPE_NATIONAL\"></span>' +\n            '<span ng-if=\"row.entity.invoice_type==\\'2\\'\" translate=\"CONTACTS.CONTACT_INVOICE_TYPE_INTRACOMMUNITY\"></span>' +\n            '<span ng-if=\"row.entity.invoice_type==\\'3\\'\" translate=\"CONTACTS.CONTACT_INVOICE_TYPE_EXPORTATION\"></span>' +\n          '</div>'\n        }, exclude_taxes: {\n          displayName: $filter('translate')('CONTACTS.EXCLUDE_TAXES'),\n          field: 'exclude_taxes',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.exclude_taxes\" translate=\"GENERAL.YES\"></span><span ng-if=\"!row.entity.exclude_taxes\" translate=\"GENERAL.NO\"></span></div>'\n        }, surcharge: {\n          displayName: $filter('translate')('CONTACTS.SURCHARGE'),\n          field: 'surcharge',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\"><span ng-if=\"row.entity.surcharge\" translate=\"GENERAL.YES\"></span><span ng-if=\"!row.entity.surcharge\" translate=\"GENERAL.NO\"></span></div>'\n        }, discount: {\n          displayName: $filter('translate')('CONTACTS.DISCOUNT'),\n          field: 'discount',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.discount || \"0\"}}%</div>'\n        }, early_payment_discount: {\n          displayName: $filter('translate')('CONTACTS.EARLY_PAYMENT_DISCOUNT'),\n          field: 'early_payment_discount',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellClass: 'cell-centered',\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.early_payment_discount || \"0\"}}%</div>'\n        }, sales_channel: {\n          displayName: $filter('translate')('CONTACTS.SALES_CHANNEL'),\n          field: 'sales_channel',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-if=\"row.entity.sales_channel_instance\">{{row.entity.sales_channel_instance.name}}</div>'\n        }, created_at: {\n          displayName: $filter('translate')('CONTACTS.CREATED_AT'),\n          headerTooltip: $filter('translate')('CONTACTS.CREATED_AT'),\n          field: 'created_at',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</div>'\n        }, updated_at: {\n          displayName: $filter('translate')('PRODUCT.UPDATED_AT'),\n          headerTooltip: $filter('translate')('PRODUCT.UPDATED_AT'),\n          field: 'updated_at',\n          permission: true,\n          visible: false,\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.updated_at)}}</div>'\n        }, last_visit: {\n          displayName: $filter('translate')('CUSTOMERS.LAST_VISIT'),\n          headerTooltip: $filter('translate')('CUSTOMERS.LAST_VISIT'),\n          field: 'last_visit',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.last_visit)}}</div>'\n        }, total_pos_orders: {\n          displayName: $filter('translate')('CUSTOMERS.TICKETS'),\n          headerTooltip: $filter('translate')('CUSTOMERS.TICKETS'),\n          field: 'total_pos_orders',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }, total_pos_orders_revenue: {\n          displayName: $filter('translate')('CUSTOMERS.REVENUE'),\n          headerTooltip: $filter('translate')('CUSTOMERS.REVENUE'),\n          field: 'total_pos_orders_revenue',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }, total_pos_order_items_avg: {\n          displayName: $filter('translate')('CUSTOMERS.ITEMS_AVG'),\n          headerTooltip: $filter('translate')('CUSTOMERS.ITEMS_AVG'),\n          field: 'total_pos_order_items_avg',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }, total_pos_order_revenue_avg: {\n          displayName: $filter('translate')('CUSTOMERS.REVENUE_AVG'),\n          headerTooltip: $filter('translate')('CUSTOMERS.REVENUE_AVG'),\n          field: 'total_pos_order_revenue_avg',\n          permission: true,\n          visible: vm.view === 'customers',\n          minWidth: 100,\n          width: 150,\n          enablePinning: true,\n          pinnedLeft: false,\n          cellClass: 'cell-centered',\n          enableHiding: true\n        }\n      };      \n    }\n\n    function updateHasSearch() {\n      vm.hasSearch = Boolean(vm.status && vm.status.search && vm.status.search.trim().length > 0);\n    }\n\n    function updateSorting() {\n      if (vm.columns) {\n        $scope.$broadcast('ndGrid::sortEnabledChanged');\n      }\n    }\n\n    function getTypeBadge(type) {\n      return $sce.trustAsHtml('<span>' + $filter('translate')('CONTACTS.' + CONTACT_TYPES[type]) + '</span>');\n    }\n\n    function getCountryName(country) {\n      return vm.COUNTRIES_DICT[country];\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndContactsController', ndContactsController)\n    .directive('ndContacts', ndContacts);\n\n  /** @ngInject */\n  function ndContacts() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/nd-contacts/nd-contacts.html',\n      scope: {\n        contactInstance: '=',\n        contactId: '=',\n        contactIdChange: '&',\n        ngDisabled: '=',\n        ndInput: '=?',\n        placeholder: '=',\n        avoidCheckEquals: '=?',\n        createButton: '=?',\n        required: '='\n      },\n      controller: 'ndContactsController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndContactsController($scope, $timeout, api, $q, $filter, $mdDialog, $document, SEARCH_MAX_LENGTH) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    $scope.openingDialog = false;\n\n    // Methods\n    $scope.querySearch = querySearch;\n    $scope.selectItem = selectItem;\n    $scope.displayFunction = displayFunction;\n    $scope.getPlaceholder = getPlaceholder;\n    $scope.createContact = createContact;\n\n    function getPlaceholder(){\n      if($scope.placeholder){\n        return $filter('translate')($scope.placeholder);\n      }else{\n        return $filter('translate')('CONTACTS.CONTACT');\n      }\n    }\n\n    function querySearch() {\n\n      var deferred = $q.defer();\n      $scope.searchText = $scope.searchText.substring(0, $scope.SEARCH_MAX_LENGTH);\n\n      api.inventories.contacts.get(\n        {\n          search: $scope.searchText\n        },\n        function (results) {\n\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function selectItem(item) {\n      if (typeof item === 'object') {\n        if (item && item.id && (item.name || item.first_name)) {\n          // If is different data\n          if ($scope.avoidCheckEquals || $scope.contactId !== item.id) {\n            $scope.contactInstance = item;\n            $scope.contactId = item.id;\n\n            $timeout(function () {\n              if (angular.isDefined($scope.contactIdChange)) {\n                $scope.contactIdChange();\n              }\n            }, 100);\n          }\n        }\n      } else {\n        // If is different data\n        if ($scope.contactId) {\n          $scope.contactInstance = null;\n          $scope.contactId = null;\n\n          $timeout(function () {\n            if (angular.isDefined($scope.contactIdChange)) {\n              $scope.contactIdChange();\n            }\n          }, 100);\n        }\n      }\n    }\n\n    function displayFunction(value) {\n      return value.name ? value.name : (value.first_name + ' ' + value.last_name);\n    }\n\n    function createContact() {\n\n\n        // Hiding the mdAutocomplete content:\n        //angular.element('.customer-autocomplete input').scope().$mdAutocompleteCtrl.hidden = true;\n        if($scope.openingDialog){\n          return;\n        }\n\n        $scope.openingDialog = true;\n\n        $mdDialog.show({\n          controller: 'ContactDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html',\n          parent: angular.element($document.find('body')),\n          clickOutsideToClose: false,\n          multiple: true,\n          locals: {\n            forceCustomer: true,\n            forceNaturalPersonType: true\n          },\n          resolve: {\n            ContactsData: function(apiResolver) {\n              if ($scope.contactInstance && $scope.contactInstance.id){\n               return apiResolver.resolve('inventories.contacts@get', { id:$scope.contactInstance.id });\n              }\n              return false;\n            },\n            PricingTiersData: function(apiResolver) {\n              return apiResolver.resolve('inventories.pricingTiers@list');\n            },\n            PaymentMethodsData: function(apiResolver) {\n              return apiResolver.resolve('accounting.paymentMethods@get');\n            }\n          }\n        }).then(function(contact) {\n          $scope.contactInstance = contact;\n          $scope.openingDialog = false;\n        }, function() {\n          $scope.openingDialog = false;\n        });\n      }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAdjustmentsListController', ndAdjustmentsListController)\n    .directive('ndAdjustmentsList', ndAdjustmentsList);\n\n  /** @ngInject */\n  function ndAdjustmentsList() {\n    return {\n      restrict: 'E',\n      scope: {\n        status: '=',\n      },\n      controller: 'ndAdjustmentsListController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/nd-adjustments-list/nd-adjustments-list.html'\n    };\n  }\n\n  /** @ngInject */\n  function ndAdjustmentsListController($scope, $timeout, $rootScope, $filter, $sce, $mdToast, $q, $document, api, Session,\n                                     HTTP_STATUS, UiGridService, ADJUSTMENT_ORDER_STATUSES, ADJUSTMENT_ORDER_STATUS_COLORS) {\n\n    // Data\n    var vm = this;\n    vm.columns = null;\n    vm.status = $scope.status;\n    vm.storageLabel = 'UIGridInventoryAdjustmentsControllerV2';\n    //vm.EXPIRING_DATE_PAYMENT_STATUS = EXPIRING_DATE_PAYMENT_STATUS;\n    //vm.adjustmentPaymentMethods = {};\n\n    // Methods\n    $scope.getStatusBadge = getStatusBadge;\n\n    // Initialize\n    initialize();\n\n    // Functions\n    function initialize() {\n\n      vm.dtColumns = [\n      DTColumnBuilder.newColumn('autocode').withTitle($filter('translate')('ADJUSTMENTS.SERIAL_NUMBER'))\n        .renderWith(function (data, type, full) {\n          return '<a ui-sref=\"app.inventory.adjustments.adjustment.products({id:' + full.id + '})\">' + data + '</a>';\n        }),\n      DTColumnBuilder.newColumn('status')\n        .withTitle($filter('translate')('PURCHASES.STATUS'))\n        .renderWith(function (data, type, full) {\n          return '<span class=\"status-badge ' + vm.orderStatusColors[data] + '\">' + $filter('translate')('ADJUSTMENTS.' + ADJUSTMENT_ORDER_STATUSES[data]) + '</span>';\n        }),\n      DTColumnBuilder.newColumn('source_warehouse__name')\n        .withTitle($filter('translate')('ADJUSTMENTS.SOURCE_WAREHOUSE'))\n        .renderWith(function (data, type, full) {\n          //return vm.warehousesById[full.source_warehouse].name;\n          return full.source_warehouse_name\n        }),\n        DTColumnBuilder.newColumn('created_at')\n        .withTitle($filter('translate')('ADJUSTMENTS.CREATION_DATE'))\n        .renderWith(function (data, type, full) {\n          return $filter('date')(data, 'dd-MM-yyyy');\n        }),\n        DTColumnBuilder.newColumn('created_by')\n        .withTitle($filter('translate')('ADJUSTMENTS.USER'))\n        .renderWith(function (data, type, full) {\n          return full.created_by_username;\n        }),\n      DTColumnBuilder.newColumn('reason').withTitle($filter('translate')('ADJUSTMENTS.REASON')).renderWith(function (data, type, full) {\n        return $filter('translate')(\"ADJUSTMENT.\" + vm.reasons[data])\n      }),\n      DTColumnBuilder.newColumn('operation').withTitle($filter('translate')('ADJUSTMENTS.OPERATION')).renderWith(function (data, type, full) {\n        if(data == 1){\n          return '<span class=\"status-badge md-green-500-bg\">+</span>';\n        }else{\n          return '<span class=\"status-badge md-yellow-500-bg\">-</span>';\n        }\n      }),\n      DTColumnBuilder.newColumn('amount').withTitle($filter('translate')('ADJUSTMENTS.ITEMS'))\n    ];\n\n      vm.columns = {\n        autocode: {\n          displayName: $filter('translate')('ADJUSTMENTS.SERIAL_NUMBER'),\n          field: 'autocode',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: true,\n          enableHiding: false,\n          cellTemplate: '<a ui-sref=\"app.inventory.adjustments.adjustment.products({id:row.entity.id})\">{{row.entity.autocode}}</a>'\n        }, created_at: {\n          displayName: $filter('translate')('ADJUSTMENTS.CREATION_DATE'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.CREATION_DATE'),\n          field: 'created_at',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.created_at)}}</div>'\n        }, status: {\n          displayName: $filter('translate')('ADJUSTMENTS.STATUS'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.STATUS'),\n          field: 'status',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\" ng-bind-html=\"grid.appScope.$parent.getStatusBadge(row.entity.status)\"></div>'\n        }, contact_name: {\n          displayName: $filter('translate')('ADJUSTMENTS.PROVIDER'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.PROVIDER'),\n          field: 'contact_name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.contact_name || \\'-\\'}}</div>'\n        }, target_warehouse: {\n          displayName: $filter('translate')('ADJUSTMENTS.TARGET_WAREHOUSE'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.TARGET_WAREHOUSE'),\n          field: 'target_warehouse',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.target_warehouse_name || \\'-\\'}}</div>'\n        }, shipping_date: {\n          displayName: $filter('translate')('ADJUSTMENTS.START_SHIPPING_DATE'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.START_SHIPPING_DATE'),\n          field: 'shipping_date',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.shipping_date)}}</div>'\n        }, season_name: {\n          displayName: $filter('translate')('ADJUSTMENTS.SEASON'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.SEASON'),\n          field: 'season_name',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.season_name || \\'-\\'}}</div>'\n        }, expiring_date: {\n          displayName: $filter('translate')('INVOICE.EXPIRATION_DATE'),\n          headerTooltip: $filter('translate')('INVOICE.EXPIRATION_DATE'),\n          field: 'expiring_date',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          enablePinning: true,\n          pinnedLeft: false,\n          enableHiding: true,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getShortDate(row.entity.expiring_date)}}</div>'\n        }, total: {\n          displayName: $filter('translate')('INVOICE.TOTAL'),\n          headerTooltip: $filter('translate')('INVOICE.TOTAL'),\n          field: 'total',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{grid.appScope.getPrice(row.entity.total)}}</div>'\n        }, items: {\n          displayName: $filter('translate')('ADJUSTMENT.ITEMS'),\n          headerTooltip: $filter('translate')('ADJUSTMENT.ITEMS'),\n          field: 'items',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.items}}</div>'\n        }, notes: {\n          displayName: $filter('translate')('ADJUSTMENTS.NOTES'),\n          headerTooltip: $filter('translate')('ADJUSTMENTS.NOTES'),\n          field: 'notes',\n          permission: true,\n          visible: true,\n          minWidth: 100,\n          cellTemplate: '<div class=\"cell-middle\">{{row.entity.notes}}</div>'\n        }\n      };\n    }\n\n    function getStatusBadge(status) {\n      return $sce.trustAsHtml('<span class=\"status-badge ' + ADJUSTMENT_ORDER_STATUS_COLORS[status] + '\">' + $filter('translate')('ADJUSTMENTS.' + ADJUSTMENT_ORDER_STATUSES[status]) + '</span>');\n    }\n\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndAutocompleteController', ndAutocompleteController)\n    .directive('ndAutocomplete', ndAutocomplete);\n\n  /** @ngInject */\n  function ndAutocomplete() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/nd-autocomplete/nd-autocomplete.html',\n      scope: {\n        selectedItem: '=',\n      },\n      controller: 'ndAutocompleteController'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndAutocompleteController($scope, api, $q, SEARCH_MAX_LENGTH) {\n\n    // Cons\n    $scope.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Methods\n    $scope.querySearch = querySearch;\n\n    function querySearch() {\n\n      var deferred = $q.defer();\n      $scope.searchText = $scope.searchText.substring(0, $scope.SEARCH_MAX_LENGTH);\n\n      api.inventories.contacts.get(\n        {\n          search: $scope.searchText\n        },\n        function (results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    /*$scope.searchText;\n    $scope.querySearch = querySearch;\n    $scope.selectItem = selectItem;\n    $scope.createSalesChannel = createSalesChannel;\n\n    function selectItem(item){\n        if(typeof item === 'object'){\n            if(item && item.id && item.name){\n                vm.contact.sales_channel_instance = item;\n                vm.contact.sales_channel = item.id;\n            }else{\n                vm.contact.sales_channel_instance = null;\n                vm.contact.sales_channel = null;\n            }\n        }\n    }*/\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndA', ndA);\n\n  /** @ngInject */\n  function ndA(Session) {\n    return {\n      restrict: 'E',\n      transclude: true,\n      templateUrl: 'app/directives/nd-a/nd-a.html',\n      scope: {\n        state: '=',\n        stateParams: '=?',\n        target: '=?',\n        scrollTo: '=?'\n      },\n      controller: ['$scope', 'Session', '$state', '$location', function($scope, Session, $state, $location) {\n        $scope.Session = Session;\n        $scope.stateParams = $scope.stateParams || {};\n\n        $scope.navigate = function($event) {\n          if ($scope.scrollTo) {\n            $event.preventDefault();\n            $state.go($scope.state, $scope.stateParams).then(function() {\n              $location.hash($scope.scrollTo);\n            });\n          }\n        };\n      }],\n      link: function(scope, $mdDialog) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n    'use strict';\n\n    angular\n      .module('app.core')\n      .controller('ManyOptionsDialogController', ManyOptionsDialogController);\n\n    /** @ngInject */\n    function ManyOptionsDialogController($scope, $mdDialog, api, params) {\n      // Data\n      var vm = this;\n      vm.body = params.body;\n      vm.title = params.title;\n      vm.cancelCallback = params.cancelCallback;\n      vm.cancelClasses = params.cancelClasses;\n\n      vm.options = params.options;\n\n      // Methods\n      vm.cancel = cancel;\n\n      // Functions\n      function cancel() {\n        $mdDialog.cancel();\n        if (vm.cancelCallback) {\n          vm.cancelCallback();\n        }\n      }\n\n    }\n\n  })();\n\n(function() {\n  'use strict';\n\n  angular\n  .module('app.core')\n  .directive('ndLogoStockagile', ndLogoStockagile);\n\n  /** @ngInject */\n  function ndLogoStockagile($sce, $document, $mdSidenav) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/logo-stockagile/nd-logo-stockagile.html',\n      scope: {\n      },\n      controller: ['$scope', function($scope) {\n        //$scope.plan = $scope.plan || {};\n        //$scope.features = $sce.trustAsHtml($scope.plan.features);\n      }],\n      link: function(scope, $mdDialog) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndHealthCheckWidgetController', ndHealthCheckWidgetController)\n    .directive('ndHealthCheckWidget', ndHealthCheckWidget);\n\n  /** @ngInject */\n  function ndHealthCheckWidget() {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/health-check/nd-health-check-widget.html',\n      scope: {\n        showProducts: '=?',\n        showProductVariants: '=?',\n        showStocks: '=?',\n        showSeasons: '=?'\n      },\n      controller: 'ndHealthCheckWidgetController as vm'\n    };\n\n  }\n\n  /** @ngInject */\n  function ndHealthCheckWidgetController(\n    $scope,\n    $compile,\n    $filter,\n    DTColumnBuilder,\n    api,\n    Session,\n    $mdToast,\n    HTTP_STATUS) {\n\n    var vm = this;\n    // Cons\n\n    // Data\n    vm.productsWithError = new Set();\n    vm.totalProducts = 0;\n\n    vm.loadingProducts = false;\n    vm.showProducts = $scope.showProducts;\n    vm.totalProductErrors = null;\n    vm.productsHealthCheck = null;\n    vm.selectedProductAttribute = '';\n\n    vm.loadingProductVariants = false;\n    vm.showProductVariants = $scope.showProductVariants;\n    vm.totalProductVariantErrors = null;\n    vm.productVariantHealthCheck = null;\n    vm.selectedProductVariantAttribute = '';\n\n    vm.loadingStock = false;\n    vm.showStocks = $scope.showStocks;\n    vm.totalStockErrors = null;\n    vm.stockHealthCheck = null;\n    vm.selectedStockAttribute = '';\n\n    vm.loadingSeason = false;\n    vm.showSeasons = $scope.showSeasons;\n    vm.totalSeasonErrors = null;\n    vm.seasonHealthCheck = null;\n    vm.selectedSeasonAttribute = '';\n\n    vm.dtProductsInstance = {};\n    vm.dtProductsOptions = {};\n    vm.dtProductsColumns = [\n      DTColumnBuilder\n        .newColumn('cover')\n        .withTitle($filter('translate')('PRODUCT.IMAGE'))\n        .withOption('className', 'imageColumn')\n        .withOption('width', '50px')\n        .renderWith(function (data, type, full) {\n          if (angular.isUndefined(full.cover_thumbnail)) {\n            return null;\n          }\n          if (full.cover_thumbnail) {\n            return '<img class=\"thumbnail-40\" src=\"' + full.cover_thumbnail + '\">';\n          }\n          return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n        }),\n      DTColumnBuilder\n        .newColumn('code')\n        .withOption('width', '33%')\n        .withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          var text = full.code || $filter('translate')('HEALTH_CHECK.MISSING_CODE');\n          return '<a ui-sref=\"app.inventory.products.product.overview({id:' + full.id + '})\" target=\"_blank\">' + text + '</a>';\n        }),\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('PRODUCT.NAME'))\n    ];\n\n    vm.dtProductVariantsInstance = {};\n    vm.dtProductVariantsOptions = {};\n    vm.dtProductVariantsColumns = [\n      DTColumnBuilder\n        .newColumn('cover')\n        .withTitle($filter('translate')('PRODUCT.IMAGE'))\n        .withOption('className', 'imageColumn')\n        .withOption('width', '50px')\n        .renderWith(function (data, type, full) {\n          if (!full.product || angular.isUndefined(full.product.cover_thumbnail)) {\n            return null;\n          }\n          if (full.product.cover_thumbnail) {\n            return '<img class=\"thumbnail-40\" src=\"' + full.product.cover_thumbnail + '\">';\n          }\n          return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n        }),\n      DTColumnBuilder\n        .newColumn('code')\n        .withOption('width', '33%')\n        .withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          var text = full.product.code || $filter('translate')('HEALTH_CHECK.MISSING_CODE');\n          return '<a ui-sref=\"app.inventory.products.product.overview({id:' + full.product_id + '})\" target=\"_blank\">' + text + '</a>';\n        }),\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function (data, type, full) {\n          return full.product.name || $filter('translate')('HEALTH_CHECK.MISSING_NAME');\n        }),\n      DTColumnBuilder.newColumn('sku')\n        .withTitle($filter('translate')('PRODUCT.SKU'))\n        .renderWith(function (data, type, full) {\n          return full.sku || $filter('translate')('HEALTH_CHECK.MISSING_SKU');\n        }),\n      DTColumnBuilder.newColumn('barcode')\n        .withTitle($filter('translate')('PRODUCT.BARCODE'))\n        .renderWith(function (data, type, full) {\n          return full.barcode || $filter('translate')('HEALTH_CHECK.MISSING_BARCODE');\n        })\n    ];\n\n    vm.dtStocksInstance = {};\n    vm.dtStocksOptions = {};\n    vm.dtStocksColumns = [\n      DTColumnBuilder\n        .newColumn('product_variant.product.cover_thumbnail')\n        .withTitle($filter('translate')('PRODUCT.IMAGE'))\n        .withOption('className', 'imageColumn')\n        .withOption('width', '50px')\n        .renderWith(function (data, type, full) {\n          if (angular.isUndefined(data)) {\n            return null;\n          }\n          if (data) {\n            return '<img class=\"thumbnail-40\" src=\"' + data + '\">';\n          }\n          return '<md-icon md-font-icon=\"icon-package-variant-closed\" class=\"s40 grey-300-fg\"></md-icon>';\n        }),\n      DTColumnBuilder\n        .newColumn('product_variant.product.code')\n        .withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          var text = data || $filter('translate')('HEALTH_CHECK.MISSING_CODE');\n          return '<a ui-sref=\"app.inventory.products.product.stock({id:' + full.product_variant.product.id + '})\" target=\"_blank\">' + text + '</a>';\n        }),\n      DTColumnBuilder\n        .newColumn('product_variant.product.name')\n        .withTitle($filter('translate')('PRODUCT.NAME'))\n        .renderWith(function (data, type, full) {\n          return data || $filter('translate')('HEALTH_CHECK.MISSING_NAME');\n        }),\n      DTColumnBuilder\n        .newColumn('product_variant.sku')\n        .withTitle($filter('translate')('PRODUCT.SKU'))\n        .renderWith(function (data, type, full) {\n          return data || $filter('translate')('HEALTH_CHECK.MISSING_SKU');\n        }),\n      DTColumnBuilder\n        .newColumn('product_variant.barcode')\n        .withTitle($filter('translate')('PRODUCT.BARCODE'))\n        .renderWith(function (data, type, full) {\n          return data || $filter('translate')('HEALTH_CHECK.MISSING_BARCODE');\n        }),\n      DTColumnBuilder\n        .newColumn('stock')\n        .withOption('width', '5%')\n        .withTitle($filter('translate')('PRODUCT.QUANTITY'))\n        .renderWith(function (data, type, full) {\n          return '<span class=\"red-fg\">'+ data || $filter('translate')('HEALTH_CHECK.MISSING_QUANTITY') + '</span>';\n        }),\n      DTColumnBuilder\n        .newColumn('warehouse.name')\n        .withTitle($filter('translate')('STOCKS.LOCATION'))\n        .renderWith(function (data, type, full) {\n          return data || $filter('translate')('HEALTH_CHECK.MISSING_LOCATION');\n        })\n    ];\n\n    vm.dtSeasonsInstance = {};\n    vm.dtSeasonsOptions = {};\n    vm.dtSeasonsColumns = [\n      DTColumnBuilder\n        .newColumn('code')\n        .withTitle($filter('translate')('PRODUCT.CODE'))\n        .renderWith(function (data, type, full) {\n          var text = full.code || $filter('translate')('HEALTH_CHECK.MISSING_CODE');\n          return '<a ui-sref=\"app.inventory.configuration.seasons\" target=\"_blank\">' + text + '</a>';\n        }),\n      DTColumnBuilder.newColumn('name')\n        .withTitle($filter('translate')('PRODUCT.NAME'))\n    ];\n\n    // Methods\n    //TODO: Refactor this using a directive for each tab to avoid repeating code\n    vm.showProductAttribute = showProductAttribute;\n    vm.showProductVariantAttribute = showProductVariantAttribute;\n    vm.showStockAttribute = showStockAttribute;\n    vm.showSeasonAttribute = showSeasonAttribute;\n    vm.initProductsDatatable = initProductsDatatable;\n    vm.initProductVariantsDatatable = initProductVariantsDatatable;\n    vm.initStocksDatatable = initStocksDatatable;\n    vm.initSeasonsDatatable = initSeasonsDatatable;\n\n    init();\n\n    // Functions\n    function init() {\n      if (vm.showProducts) {\n        initProducts();\n      }\n      if (vm.showProductVariants) {\n        initProductVariants();\n      }\n      if (vm.showStocks) {\n        initStocks();\n      }\n      if (vm.showSeasons) {\n        initSeasons();\n      }\n    }\n\n    function initDatatable(url, serializer) {\n      return {\n        ajax: {\n          dataSrc: 'data',\n          url: url || '',\n          type: 'get',\n          headers: {\n            \"Authorization\": \"Token \" + Session.token\n          },\n          data: function (d) {\n            d.pagination = 'datatable';\n            d.serializer = serializer || '';\n          }\n        },\n        rowId: 'id',\n        dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\n        autoWidth: false,\n        createdRow: createdRow,\n        pagingType: 'full_numbers',\n        lengthMenu: [10, 25, 50, 100],\n        pageLength: 10,\n        serverSide: true,\n        processing: true,\n        searchDelay: 750,\n        stateSave: true\n      };\n    }\n\n    function initProducts() {\n      if (vm.loadingProducts) {\n        return;\n      }\n      vm.loadingProducts = true;\n      api.inventories.products.get({\n        option: 'health-check',\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          response.affected_products.forEach(vm.productsWithError.add, vm.productsWithError);\n          vm.totalProducts = response.total_product_count;\n          vm.productsHealthCheck = Object.keys(response.health_check).map(function (item) {\n            return {\n              attribute: item,\n              translation: 'HEALTH_CHECK.' + item.toUpperCase(),\n              value: response.health_check[item]\n            };\n          });\n\n          vm.totalProductErrors = 0;\n          vm.productsHealthCheck.forEach(function (item) {\n            vm.totalProductErrors += item.value;\n          });\n\n          initProductsDatatable();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loadingProducts = false;\n      });\n    }\n\n    function initProductVariants() {\n      if (vm.loadingProductVariants) {\n        return;\n      }\n      vm.loadingProductVariants = true;\n      api.inventories.productVariants.get({\n        option: 'health-check',\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          response.affected_products.forEach(vm.productsWithError.add, vm.productsWithError);\n          vm.productVariantHealthCheck = Object.keys(response.health_check).map(function (item) {\n            return {\n              attribute: item,\n              translation: 'HEALTH_CHECK.' + item.toUpperCase(),\n              value: response.health_check[item]\n            };\n          });\n\n          vm.totalProductVariantErrors = 0;\n          vm.productVariantHealthCheck.forEach(function (item) {\n            vm.totalProductVariantErrors += item.value;\n          });\n\n          initProductVariantsDatatable();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loadingProductVariants = false;\n      });\n    }\n\n    function initStocks() {\n      if (vm.loadingStock) {\n        return;\n      }\n      vm.loadingStock = true;\n      api.inventories.stocks.get({\n        option: 'health-check',\n      }, function (response, callback, status) {\n        response.affected_products.forEach(vm.productsWithError.add, vm.productsWithError);\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.stockHealthCheck = Object.keys(response.health_check).map(function (item) {\n            return {\n              attribute: item,\n              translation: 'HEALTH_CHECK.' + item.toUpperCase(),\n              value: response.health_check[item]\n            };\n          });\n\n          vm.totalStockErrors = 0;\n          vm.stockHealthCheck.forEach(function (item) {\n            vm.totalStockErrors += item.value;\n          });\n\n          initStocksDatatable();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loadingStocks = false;\n      });\n    }\n\n    function initSeasons() {\n      if (vm.loadingSeason) {\n        return;\n      }\n      vm.loadingSeason = true;\n      api.inventories.seasons.get({\n        option: 'health-check',\n      }, function (response, callback, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          vm.seasonHealthCheck = Object.keys(response.health_check).map(function (item) {\n            return {\n              attribute: item,\n              translation: 'HEALTH_CHECK.' + item.toUpperCase(),\n              value: response.health_check[item]\n            };\n          });\n\n          vm.totalSeasonErrors = 0;\n          vm.seasonHealthCheck.forEach(function (item) {\n            vm.totalSeasonErrors += item.value;\n          });\n\n          initSeasonsDatatable();\n        } else {\n          $mdToast.show($mdToast.simple().textContent($filter('translate')('GENERAL.ERROR_TOAST')).position('top right'));\n        }\n        vm.loadingSeasons = false;\n      });\n    }\n\n    function selectDefaultAttribute(array) {\n      if (!array) {\n        return null;\n      }\n\n      var attribute = array.find(function (attribute) {\n        return attribute.value !== 0;\n      });\n\n      if (attribute) {\n        return attribute.attribute\n      }\n      return null;\n    }\n\n    function showProductAttribute(attribute) {\n      vm.selectedProductAttribute = attribute;\n      if (attribute) {\n        var url = api.urls.inventories.products\n          .replace('/:id', '')\n          .replace('/:option', '?') + attribute;\n        if (!vm.firstTimeProcessedProducts) {\n          vm.firstTimeProcessedProducts = true;\n          vm.dtProductsOptions = initDatatable(url);\n        } else {\n          vm.dtProductsOptions.ajax.url = url;\n        }\n      }\n    }\n\n    function showProductVariantAttribute(attribute) {\n      vm.selectedProductVariantAttribute = attribute;\n      if (attribute) {\n        var url = api.urls.inventories.productVariants\n          .replace('/:id', '')\n          .replace('/:option', '?') + attribute;\n        if (!vm.firstTimeProcessedProductVariants) {\n          vm.firstTimeProcessedProductVariants = true;\n          vm.dtProductVariantsOptions = initDatatable(url, 'ProductVariantListSerializer');\n        } else {\n          vm.dtProductVariantsOptions.ajax.url = url;\n        }\n      }\n    }\n\n    function showStockAttribute(attribute) {\n      vm.selectedStockAttribute = attribute;\n      if (attribute) {\n        var url = api.urls.inventories.stocks\n          .replace('/:id', '')\n          .replace('/:option', '?') + attribute;\n        if (!vm.firstTimeProcessedStock) {\n          vm.firstTimeProcessedStock = true;\n          vm.dtStocksOptions = initDatatable(url, 'StockListSerializer');\n        } else {\n          vm.dtStocksOptions.ajax.url = url;\n        }\n      }\n    }\n\n    function showSeasonAttribute(attribute) {\n      vm.selectedSeasonAttribute = attribute;\n      if (attribute) {\n        var url = api.urls.inventories.seasons\n          .replace('/:id', '')\n          .replace('/:option', '?') + attribute;\n        if (!vm.firstTimeProcessedSeason) {\n          vm.firstTimeProcessedSeason = true;\n          vm.dtSeasonsOptions = initDatatable(url, 'SeasonListSerializer');\n        } else {\n          vm.dtSeasonsOptions.ajax.url = url;\n        }\n      }\n    }\n\n    function initProductsDatatable() {\n      if (!vm.selectedProductAttribute) {\n        vm.selectedProductAttribute = selectDefaultAttribute(vm.productsHealthCheck);\n        if (vm.selectedProductAttribute) {\n          showProductAttribute(vm.selectedProductAttribute);\n        }\n      }\n    }\n\n    function initProductVariantsDatatable() {\n      if (!vm.selectedProductVariantAttribute) {\n        vm.selectedProductVariantAttribute = selectDefaultAttribute(vm.productVariantHealthCheck);\n        if (vm.selectedProductVariantAttribute) {\n          showProductVariantAttribute(vm.selectedProductVariantAttribute);\n        }\n      }\n    }\n\n    function initStocksDatatable() {\n      if (!vm.selectedStockAttribute) {\n        vm.selectedStockAttribute = selectDefaultAttribute(vm.stockHealthCheck);\n        if (vm.selectedStockAttribute) {\n          showStockAttribute(vm.selectedStockAttribute);\n        }\n      }\n    }\n\n    function initSeasonsDatatable() {\n      if (!vm.selectedSeasonAttribute) {\n        vm.selectedSeasonAttribute = selectDefaultAttribute(vm.seasonHealthCheck);\n        if (vm.selectedSeasonAttribute) {\n          showSeasonAttribute(vm.selectedSeasonAttribute);\n        }\n      }\n    }\n\n    function createdRow(row, data, dataIndex) {\n      $compile(angular.element(row).contents())($scope);\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('hasPermission', hasPermission);\n\n  angular\n    .module('app.core')\n    .directive('hasNotPermission', hasNotPermission);\n\n  angular\n    .module('app.core')\n    .directive('hasPermissionElseDisable', hasPermissionElseDisable);\n\n\n  /**\n   * Removes elem if Sessions doesn't have attrs['hasPermission'] permission\n   *\n   * attrs['hasPermission'] can be a permission or a coma-separated list fo permissions\n   *\n   * @ngInject\n   * @param Session\n   * @returns {{link: link}}\n   */\n  function hasPermission(Session) {\n    return {\n      link: function (scope, elem, attrs) {\n        if (attrs['hasPermission']) {\n\n          // Removing spaces and splitting by coma\n          var permissions = attrs['hasPermission'].replace(/ /g, '').split(',');\n\n          var hasPermissionLogic = function () {\n            for (var i = 0; i < permissions.length; ++i) {\n              if (Session.hasPermission(permissions[i])) {\n                elem.show();\n                return;\n              }\n            }\n            elem.hide();\n          }\n\n          // Set the watch to check the permission if the user is changed\n          scope.$watch(function () {\n            return Session.permissions;\n          }, function (newValue, oldValue) {\n            if (newValue !== oldValue) {\n              hasPermissionLogic();\n            }\n          }, true);\n          // First execution\n          hasPermissionLogic();\n        }\n      }\n    }\n  }\n\n  function hasNotPermission(Session) {\n    return {\n      link: function (scope, elem, attrs) {\n        if (attrs['hasNotPermission']) {\n\n          // Removing spaces and splitting by coma\n          var permissions = attrs['hasNotPermission'].replace(/ /g, '').split(',');\n          var hasNotPermissionLogic = function () {\n            for (var i = 0; i < permissions.length; ++i) {\n              if (Session.hasPermission(permissions[i])) {\n                elem.hide();\n                return;\n              }\n            }\n            elem.show();\n          }\n          // Set the watch to check the permission if the user is changed\n          scope.$watch(function () {\n            return Session.permissions;\n          }, function (newValue, oldValue) {\n            if (newValue !== oldValue) {\n              hasNotPermissionLogic();\n            }\n          }, true);\n\n          // First execution\n          hasNotPermissionLogic();\n        }\n      }\n    }\n  }\n\n  /**\n   * Disables elem if Sessions doesn't have attrs['hasPermissionElseDisable'] permission\n   *\n   * attrs['hasPermissionElseDisable'] can be a permission or a coma-separated list fo permissions\n   *\n   * @ngInject\n   * @param Session\n   * @returns {{link: link}}\n   */\n  function hasPermissionElseDisable(Session) {\n    return {\n      link: function (scope, elem, attrs) {\n        if (elem && elem[0] && attrs['hasPermissionElseDisable']) {\n\n          // Removing spaces and splitting by coma\n          var permissions = attrs['hasPermissionElseDisable'].replace(/ /g, '').split(',');\n          var hasPermissionElseDisableLogic = function () {\n            for (var i = 0; i < permissions.length; ++i) {\n              if (Session.hasPermission(permissions[i])) {\n                elem[0].disabled = false;\n                return;\n              }\n            }\n            if (attrs && attrs.type === 'checkbox') {\n              // If the elements is a mdCheckbox\n              attrs.$set('disabled', 'disabled');\n            } else {\n              // Otherwise set disabled with this way\n              elem[0].disabled = true;\n            }\n          };\n\n          // Set the watch to check the permission if the user is changed\n          scope.$watch(function () {\n            return Session.permissions;\n          }, function (newValue, oldValue) {\n            if (newValue !== oldValue) {\n              hasPermissionElseDisableLogic();\n            }\n          }, true);\n\n          // First execution\n          hasPermissionElseDisableLogic();\n        }\n      }\n    }\n  }\n})\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('hasPermissionAndFeature', hasPermissionAndFeature);\n\n  /**\n   * Removes elem if Sessions doesn't have the hasPermissionAndFeature permission.\n   * If Session doesn't have the feature, shows de lock icon\n   * attrs['hasPermissionAndFeature'] is a permission or a coma-separated string of permissions\n   *\n   * @ngInject\n   * @param Session\n   * @returns {{link: link}}\n   */\n  function hasPermissionAndFeature(Session) {\n    return {\n      link: function(scope, elem, attrs) {\n        if (attrs.hasPermissionAndFeature) {\n\n          var hasPermissionAndFeatureLogic = function() {\n            var permissionAndFeatures = attrs.hasPermissionAndFeature.replace(/ /g, '').split(',');\n            var withPermission = false;\n            for (var i = 0; i < permissionAndFeatures.length; ++i) {\n              if (Session.hasPermission(permissionAndFeatures[i])) {\n                withPermission = true;\n                elem.show();\n                if (Session.hasSubscription) {\n                  if (Session.hasFeature(permissionAndFeatures[i])) {\n                    elem.addClass('with-feature');\n                  } else if (Session.hasAddOn(permissionAndFeatures[i])) {\n                    elem.addClass('with-feature');\n                  } else {\n                    elem.addClass('without-feature');\n                    return;\n                  }\n                } else {\n                  elem.addClass('without-subscription');\n                }\n              }\n            }\n            if (!withPermission) {\n              elem.hide();\n            }\n          };\n\n          // Set the watch to check the permission if the user is changed\n          var watcher = scope.$watch(function() {\n            return Session.permissions;\n          }, function(newValue, oldValue) {\n            if (newValue !== oldValue) {\n              hasPermissionAndFeatureLogic();\n            }\n          }, true);\n\n          scope.$on('$destroy', function() {\n            if (watcher) {\n              watcher();\n            }\n          });\n\n          // First execution\n          hasPermissionAndFeatureLogic();\n\n\n        }\n      }\n    };\n  }\n})\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('hasFeatureOrAddon', hasFeatureOrAddon);\n\n  /**\n   * Removes elem if Sessions doesn't have attrs['hasFeatureOrAddon'] feature\n   *\n   * @ngInject\n   * @param Session\n   * @returns {{link: link}}\n   */\n  function hasFeatureOrAddon(Session) {\n    return {\n      link: function(scope, elem, attrs) {\n        if (attrs.hasFeatureOrAddon) {\n          if (Session.hasSubscription) {\n            if (Session.hasFeatureOrAddon(attrs.hasFeatureOrAddon)) {\n              elem.show();\n            } else if (Session.hasAddOn(attrs.hasFeatureOrAddon)) {\n              elem.show();\n            } else {\n              elem.hide();\n            }\n          } else {\n            elem.show();\n          }\n        }\n      }\n    };\n  }\n})\n();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndGlobalStartBanner', ndGlobalStartBanner);\n\n  /** @ngInject */\n  function ndGlobalStartBanner() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/global-start-banner/nd-global-start-banner.html',\n      controller: [\n        '$rootScope',\n        '$scope',\n        '$sce',\n        '$translate',\n        '$state',\n        'api',\n        'Session',\n        function(\n          $rootScope,\n          $scope,\n          $sce,\n          $translate,\n          $state,\n          api,\n          Session\n        ) {\n\n          // Data\n          $scope.currentBanner = null;\n          $scope.banners = [];\n\n          // Methods\n          $scope.dismiss = dismiss;\n          $scope.open = open;\n          $scope.getBody = getBody;\n\n          $rootScope.$on('ConfigurationCompanyController::spainFiscalProfileSaved', function() {\n            loadGlobalBanners();\n          });\n\n          init();\n\n          // Functions\n          function init() {\n            loadGlobalBanners();\n          }\n\n          function loadGlobalBanners() {\n            api.support.startBanners.get(\n              {\n                is_global: true\n              },\n              function(response, fn, status) {\n                if (status === 200) {\n                  $scope.banners = response.results;\n                  selectBanner();\n                }\n              }\n            );\n          }\n\n          function selectBanner() {\n            $scope.currentBanner = null;\n            for (var i = 0; i < $scope.banners.length; i++) {\n              if (!isDismissed($scope.banners[i])) {\n                $scope.currentBanner = $scope.banners[i];\n                return;\n              }\n            }\n          }\n\n          function isDismissed(startBanner) {\n            var time = localStorage.getItem(Session.company.id + '::ndGlobalStartBanner::' + startBanner.id);\n            if (!time) {\n              return false;\n            }\n            return new Date().getTime() < +time;\n          }\n\n          function dismiss() {\n            if ($scope.currentBanner) {\n              var dismissUntil = new Date();\n              dismissUntil.setDate(dismissUntil.getDate() + $scope.currentBanner.dismiss_days);\n              localStorage.setItem(Session.company.id + '::ndGlobalStartBanner::' + $scope.currentBanner.id, dismissUntil.getTime());\n              selectBanner();\n            }\n          }\n\n          function open() {\n            if ($scope.currentBanner) {\n              if ($scope.currentBanner.link) {\n                window.open($scope.currentBanner.link, '_blank');\n              } else if ($scope.currentBanner && Session.hasPermission($scope.currentBanner.panel_sref)) {\n                $state.go($scope.currentBanner.panel_sref);\n              }\n            }\n          }\n\n          function getBody() {\n            if ($scope.currentBanner) {\n              return $sce.trustAsHtml($scope.currentBanner.global_body[$translate.use()]);\n            }\n          }\n        }\n      ]\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndFreemiumBanner', ndFreemiumBanner);\n\n  /** @ngInject */\n  function ndFreemiumBanner() {\n    return {\n      replace: true,\n      restrict: 'E',\n      templateUrl: 'app/directives/freemium-banner/nd-freemium-banner.html',\n      controller: ['$scope', '$state', '$rootScope', '$window', '$mdMedia', 'Session',\n        function ($scope, $state, $rootScope, $window, $mdMedia, Session) {\n\n          $scope.userName = '';\n          $scope.remainingDays = '';\n          $scope.showFreemiumBanner = '';\n\n          $scope.hideFreemiumBanner = hideFreemiumBanner;\n          $scope.goToStatusIfMobile = goToStatusIfMobile;\n\n          init();\n\n          function init() {\n            if (Session.showFreemiumBanner()) {\n              $scope.userName = Session.user.first_name;\n              $scope.remainingDays = Session.company.trial_remaining_days;\n              $scope.showFreemiumBanner = true;\n            }\n          }\n\n          function hideFreemiumBanner() {\n            $scope.showFreemiumBanner = false;\n          }\n\n          function goToStatusIfMobile() {\n            if ($scope.remainingDays > 0 && ($mdMedia('xs') || $mdMedia('sm'))) {\n              $state.go('app.support.trial_status_details');\n            }\n          }\n        }]\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('focusIf', focusIf);\n\n  /** @ngInject */\n  function focusIf($timeout) {\n    return {\n      scope: {trigger: '@focusIf'},\n      link: function (scope, element) {\n        scope.$watch('trigger', function (value) {\n          if (value === \"true\") {\n            $timeout(function () {\n              element[0].focus();\n            });\n          }\n        });\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular.module('app.core').directive('ndEcommerceIcon', ndEcommerceIcon);\n\n  /** @ngInject */\n  function ndEcommerceIcon() {\n    return {\n      replace: false,\n      restrict: 'E',\n      template:\n        '<img class=\"{{getIconSizeClass()}}\" style=\"vertical-align: inherit !important;\" ng-src=\"{{::getSiteIcon()}}\">',\n      scope: {\n        platform: '=',\n        iconSize: '@',\n      },\n      controller: [\n        '$scope',\n        'ECOMMERCE_PLATFORMS',\n        function ($scope) {\n          $scope.iconSize = $scope.iconSize || 'w-24';\n\n          $scope.getIconSizeClass = function () {\n            return $scope.iconSize;\n          };\n\n          $scope.getSiteIcon = function () {\n            return '/assets/images/ecommerces/' + $scope.platform + '.svg';\n          };\n        },\n      ],\n    };\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('wbDaysOfWeek', wbDaysOfWeek);\n\n  /** @ngInject */\n  function wbDaysOfWeek($document, wbConstGenders, api, $mdToast, $mdDialog, $window) {\n    return {\n      restrict: 'E',\n      templateUrl: 'app/directives/daysofweek/wbDaysOfWeek.html',\n      scope: {\n        day: '=?',\n        disabled: '=?'\n      },\n      controller: ['$scope', function($scope) {\n\n      }],\n      link: function(scope) {\n\n      }\n    };\n  }\n})();\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .controller('ndContractedPlanLimitAlertBoxController', ndContractedPlanLimitAlertBoxController)\n    .directive('ndContractedPlanLimitAlertBox', ndContractedPlanLimitAlertBox);\n\n  /** @ngInject */\n  function ndContractedPlanLimitAlertBoxController($scope) {\n    // Data\n    var vm = this;\n    vm.promise = null;\n    vm.title = '';\n    vm.body = '';\n\n    // Methods\n    init();\n\n    // Functions\n    function init() {\n      vm.promise = $scope.$watch('contractedPlanLimit', function(newValue, oldValue) {\n        if (newValue && newValue.getAlertTitleMessage) {\n          vm.title = newValue.getAlertTitleMessage();\n          vm.body = newValue.getAlertBodyMessage();\n        }\n      }, false);\n\n      $scope.$on('$destroy', function() {\n        vm.promise();\n      });\n    }\n  }\n\n  /** @ngInject */\n  function ndContractedPlanLimitAlertBox() {\n    return {\n      restrict: 'E',\n      scope: {\n        contractedPlanLimit: '='\n      },\n      controller: 'ndContractedPlanLimitAlertBoxController',\n      controllerAs: 'vm',\n      templateUrl: 'app/directives/contracted-plan-limit-alert-box/nd-contracted-plan-limit-alert-box.html',\n      link: function(scope, element, attrs) {\n\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('blurOnEnter', blurOnEnter);\n\n  /** @ngInject */\n  function blurOnEnter() {\n    return {\n      link:  function (scope, element, attrs) {\n        element.bind(\"keypress\", function (event) {\n          if(event.which === 13) {\n            element.blur();\n            event.preventDefault();\n          }\n        });\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndMuteBarcodeCallbacks', ndMuteBarcodeCallbacks);\n\n  /** @ngInject */\n  function ndMuteBarcodeCallbacks($rootScope, BarcodeService) {\n    return {\n      link: function (scope, element) {\n\n        element.bind('focus', function(){\n          $rootScope.ndBarcodeListenerEnabled = false;\n          BarcodeService.setEnabled(false);\n        });\n\n        element.bind('blur', function(){\n          $rootScope.ndBarcodeListenerEnabled = true;\n          BarcodeService.setEnabled(true);\n        });\n\n        scope.$on('$destroy', function () {\n          element.unbind('focus');\n          element.unbind('blur');\n        });\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndIgnoreBarcodeInputs', ndIgnoreBarcodeInputs);\n\n  /** @ngInject */\n  function ndIgnoreBarcodeInputs($rootScope, $document, $timeout) {\n    /**\n     * Ignores the characters typed when these have been typed faster than INPUT_DELAY ms\n     * between keypress and keypress\n     */\n    return {\n      link: function ($scope, element) {\n        $scope.INPUT_DELAY = 25;\n\n        element.bind('keypress', function (e) {\n\n          e.preventDefault();\n\n          if ($scope.timeout) {\n            $timeout.cancel($scope.timeout);\n            $scope.value = null;\n          }\n          else {\n            // When the input is initialized with value\n            if(!$scope.value && element[0].value) {\n              $scope.value = element[0].value;\n            }\n\n            $scope.value = $scope.value ? $scope.value + String.fromCharCode(e.which) : String.fromCharCode(e.which);\n          }\n\n          $scope.timeout = $timeout(function () {\n            if($scope.value !== null && $scope.value !== undefined) {\n              element[0].value = angular.copy($scope.value);\n            }\n            $scope.value = null;\n            $scope.timeout = null;\n          }, $scope.INPUT_DELAY);\n\n        });\n\n\n        $scope.$on('$destroy', function () {\n          element.unbind('keypress');\n        });\n\n      }\n    }\n  }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .directive('ndBarcodeListener', ndBarcodeListener);\n\n  /** @ngInject */\n  function ndBarcodeListener(\n    $document,\n    $timeout,\n    $rootScope,\n    $filter,\n    ND_BARCODE_PREFIXES,\n    GS1Datamatrix) {\n    return {\n      restrict: 'E',\n      template: '',\n      scope: {\n        disabled: '=?',\n        avoidChangeRootScope: '=?',\n        barcodeListenerInputDelay: '=?',\n        callback: '&?',\n        uidCallback: '&?',\n        posOrderCallback: '&?',\n        devolutionCardCallback: '&?',\n        fulfillmentCallback: '&?',\n        gs1datamatrixCallback: '&?'\n      },\n      controller: function($scope, $filter, api) {\n        $scope.value = '';\n        $scope.INPUT_DELAY = $scope.barcodeListenerInputDelay || 75;\n        $scope.MIN_LENGTH = 3;\n        $scope.debug = !api.isProduction();\n      },\n      link: function($scope) {\n        $rootScope.ndBarcodeListenerEnabled = true;\n        $rootScope.ndBarcodeListenerEnabledUdis = false;\n        $document.bind('keydown.ndBarcodeListener', onKeyDown);\n        $document.bind('keypress.ndBarcodeListener', onKeyPress);\n        $scope.$on('$destroy', onDestroy);\n        $scope.requestBarcodeListener = $rootScope.$on('ndBarcodeListener::requestBarcode', requestBarcode);\n\n        // Functions\n        function onKeyDown(e) {\n          if (e.keyCode === 13) {\n            sendValue();\n          }\n        }\n\n        function onKeyPress(e) {\n          if (!$rootScope.ndBarcodeListenerEnabled) {\n            return;\n          }\n          cancelTimeout();\n          addValue(e);\n          $scope.timeout = $timeout(sendValue, $scope.INPUT_DELAY);\n        }\n\n        function onDestroy() {\n          $document.unbind('keydown.ndBarcodeListener');\n          $document.unbind('keypress.ndBarcodeListener');\n          if (!$scope.avoidChangeRootScope) {\n            $rootScope.ndBarcodeListenerEnabled = false;\n            $rootScope.ndBarcodeListenerEnabledUdis = false;\n          }\n          if ($scope.requestBarcodeListener) {\n            $scope.requestBarcodeListener();\n          }\n        }\n\n        function printableAsciiCharacter(keycode) {\n          return keycode >= 32;\n        }\n\n        function addValue(e) {\n          var keycode = e.keyCode;\n          if (printableAsciiCharacter(keycode)) {\n            $scope.value += e.key;\n          } else {\n            log('warn', 'non-printable ascii character \"' + keycode + '\" disctared');\n          }\n        }\n\n        function sendValue() {\n          cancelTimeout();\n          if (isPosOrderBarcode()) {\n            callCallback('posOrderCallback');\n          } else if (isDevolutionCardBarcode()) {\n            callCallback('devolutionCardCallback');\n          } else if (isFulfillmentBarcode()) {\n            callCallback('fulfillmentCallback');\n          } else if (isGS1Datamatrix()) {\n            callCallback('gs1datamatrixCallback');\n          } else if ($scope.value) {\n            callCallback('callback', 'uidCallback');\n          }\n        }\n\n        function cancelTimeout() {\n          if ($scope.timeout) {\n            $timeout.cancel($scope.timeout);\n          }\n        }\n\n        function isPosOrderBarcode() {\n          return $scope.value.substring(0, 4).toLowerCase() === (ND_BARCODE_PREFIXES.POS_ORDER_BARCODE_PREFIX + '.');\n        }\n\n        function isDevolutionCardBarcode() {\n          return $scope.value.substring(0, 4).toLowerCase() === (ND_BARCODE_PREFIXES.DEVOLUTION_CARD_BARCODE_PREFIX + '.');\n        }\n\n        function isFulfillmentBarcode() {\n          return $scope.value.substring(0, 4).toLowerCase() === (ND_BARCODE_PREFIXES.FULFILLMENT_BARCODE_PREFIX + '.');\n        }\n\n        function isGS1Datamatrix() {\n          return GS1Datamatrix.isGS1Datamatrix($scope.value);\n        }\n\n        function getSanitizeValue() {\n          var result = angular.copy($scope.value);\n          result = result.trim();\n          return result;\n        }\n\n        function callCallback(callback, uidCallback) {\n          if (!$scope[callback]) {\n            $scope.value = '';\n            return;\n          }\n          if ($scope.value.length < $scope.MIN_LENGTH) {\n            $scope.value = '';\n            return;\n          }\n          var sanitizedValue = getSanitizeValue();\n          $scope.value = '';\n          if (sanitizedValue) {\n            log('log', 'callback \"' + sanitizedValue + '\"');\n            if ($rootScope.ndBarcodeListenerEnabledUdis) {\n              $scope[uidCallback]({ barcode: sanitizedValue });\n            } else {\n              $scope[callback]({ barcode: sanitizedValue });\n            }\n          }\n        }\n\n        function log(logType, message) {\n          if ($scope.debug) {\n            console[logType]('ndBarcodeListener: ' + message);\n          }\n        }\n\n        function requestBarcode() {\n          $scope.value = window.prompt($filter('translate')('GENERAL.ENTER_A_BARCODE'));\n          if ($scope.value) {\n            sendValue();\n          }\n        }\n      }\n    };\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .service('fuseTheming', fuseThemingService);\n\n  /** @ngInject */\n  function fuseThemingService($cookies, $log, $mdTheming) {\n    var newuiPalette = {\n      blue: {\n        50: {hex: \"#e9ecfd\", value: [227, 244, 255], contrast: [0, 0, 0, .87]},\n        100: {hex: \"#BAE3FE\", value: [186, 227, 254], contrast: [0, 0, 0, .87]},\n        200: {hex: \"#8CD0FD\", value: [140, 208, 253], contrast: [0, 0, 0, .87]},\n        300: {hex: \"#5DBDFC\", value: [93, 189, 252], contrast: [0, 0, 0, .87]},\n        400: {hex: \"#3BAEFC\", value: [659, 174, 252], contrast: [0, 0, 0, .87]},\n        500: {hex: \"#4A5ff0\", value: [24, 160, 251], contrast: [255, 255, 255]},\n        600: {hex: \"#1598FA\", value: [21, 152, 250], contrast: [255, 255, 255]},\n        700: {hex: \"#118EFA\", value: [17, 142, 250], contrast: [255, 255, 255]},\n        800: {hex: \"#0E84F9\", value: [14, 132, 249], contrast: [255, 255, 255, .87]},\n        900: {hex: \"#0873F8\", value: [8, 115, 248], contrast: [255, 255, 255, .87]},\n        A100: {hex: \"#FFFFFF\", value: [255, 255, 255], contrast: [0, 0, 0, .87]},\n        A200: {hex: \"#EDF4FF\", value: [237, 244, 255], contrast: [255, 255, 255]},\n        A400: {hex: \"#BAD6FF\", value: [186, 214, 255], contrast: [255, 255, 255]},\n        A700: {hex: \"#A1C6FF\", value: [161, 198, 255], contrast: [255, 255, 255]}\n      },\n      green: {\n        50: {hex: \"#e2f5ee\", value: [228, 248, 244], contrast: [0, 0, 0, .87]},\n        100: {hex: \"#b6e6d5\", value: [186, 237, 228], contrast: [0, 0, 0, .87]},\n        200: {hex: \"#86d5b9\", value: [141, 225, 211], contrast: [0, 0, 0, .87]},\n        300: {hex: \"#56c49d\", value: [95, 212, 193], contrast: [0, 0, 0, .87]},\n        400: {hex: \"#31b888\", value: [60, 203, 179], contrast: [0, 0, 0, .87]},\n        500: {hex: \"#0dab73\", value: [26, 194, 166], contrast: [255, 255, 255]},\n        600: {hex: \"#0ba46b\", value: [23, 188, 158], contrast: [255, 255, 255]},\n        700: {hex: \"#099a60\", value: [19, 180, 149], contrast: [255, 255, 255]},\n        800: {hex: \"#079156\", value: [15, 172, 139], contrast: [255, 255, 255, .87]},\n        900: {hex: \"#038043\", value: [8, 159, 123], contrast: [255, 255, 255, .87]},\n        A100: {hex: \"#CBFFF1\", value: [203, 255, 241], contrast: [0, 0, 0, .87]},\n        A200: {hex: \"#98FFE3\", value: [152, 255, 227], contrast: [255, 255, 255]},\n        A400: {hex: \"#65FFD6\", value: [101, 255, 214], contrast: [255, 255, 255]},\n        A700: {hex: \"#4CFFCF\", value: [76, 255, 207], contrast: [255, 255, 255]}\n      },\n      purple: {\n        50: {hex: \"#F1EAF4\", value: [241, 234, 244], contrast: [0, 0, 0, .87]},\n        100: {hex: \"#DBCBE3\", value: [219, 203, 227], contrast: [0, 0, 0, .87]},\n        200: {hex: \"#C4A9D0\", value: [196, 169, 208], contrast: [0, 0, 0, .87]},\n        300: {hex: \"#AC86BD\", value: [172, 134, 189], contrast: [0, 0, 0, .87]},\n        400: {hex: \"#9A6CAE\", value: [154, 108, 174], contrast: [0, 0, 0, .87]},\n        500: {hex: \"#8852A0\", value: [136, 82, 160], contrast: [255, 255, 255]},\n        600: {hex: \"#804B98\", value: [128, 75, 152], contrast: [255, 255, 255]},\n        700: {hex: \"#75418E\", value: [117, 65, 142], contrast: [255, 255, 255]},\n        800: {hex: \"#6B3884\", value: [107, 56, 132], contrast: [255, 255, 255, .87]},\n        900: {hex: \"#582873\", value: [88, 40, 115], contrast: [255, 255, 255, .87]},\n        A100: {hex: \"#E4B8FF\", value: [228, 184, 255], contrast: [0, 0, 0, .87]},\n        A200: {hex: \"#D185FF\", value: [209, 133, 255], contrast: [255, 255, 255]},\n        A400: {hex: \"#BD52FF\", value: [189, 82, 255], contrast: [255, 255, 255]},\n        A700: {hex: \"#B438FF\", value: [180, 56, 255], contrast: [255, 255, 255]}\n      },\n      yellow: {\n        50: {hex: \"#FDF5E6\", value: [253, 245, 230], contrast: [0, 0, 0, .87]},\n        100: {hex: \"#FBE7C1\", value: [251, 231, 193], contrast: [0, 0, 0, .87]},\n        200: {hex: \"#F8D797\", value: [248, 215, 151], contrast: [0, 0, 0, .87]},\n        300: {hex: \"#F5C76D\", value: [245, 199, 109], contrast: [0, 0, 0, .87]},\n        400: {hex: \"#F3BB4E\", value: [243, 187, 78], contrast: [0, 0, 0, .87]},\n        500: {hex: \"#F1AF2F\", value: [241, 175, 47], contrast: [255, 255, 255]},\n        600: {hex: \"#EFA82A\", value: [239, 168, 42], contrast: [255, 255, 255]},\n        700: {hex: \"#ED9F23\", value: [237, 159, 35], contrast: [255, 255, 255]},\n        800: {hex: \"#EB961D\", value: [235, 150, 29], contrast: [255, 255, 255, .87]},\n        900: {hex: \"#E78612\", value: [231, 134, 18], contrast: [255, 255, 255, .87]},\n        A100: {hex: \"#FFFFFF\", value: [255, 255, 255], contrast: [0, 0, 0, .87]},\n        A200: {hex: \"#FFF0E1\", value: [235, 150, 29], contrast: [255, 255, 255]},\n        A400: {hex: \"#FFD8AE\", value: [255, 216, 174], contrast: [255, 255, 255]},\n        A700: {hex: \"#FFCB95\", value: [255, 203, 149], contrast: [255, 255, 255]}\n      },\n      orange: {\n        50: {hex: \"#FCECE0\", value: [252, 236, 224], contrast: [0, 0, 0, .87]},\n        100: {hex: \"#F8CFB3\", value: [248, 207, 179], contrast: [0, 0, 0, .87]},\n        200: {hex: \"#F3B080\", value: [243, 176, 128], contrast: [0, 0, 0, .87]},\n        300: {hex: \"#EE904D\", value: [238, 144, 77], contrast: [0, 0, 0, .87]},\n        400: {hex: \"#EA7826\", value: [234, 120, 38], contrast: [0, 0, 0, .87]},\n        500: {hex: \"#E66000\", value: [230, 96, 0], contrast: [255, 255, 255]},\n        600: {hex: \"#E35800\", value: [227, 88, 0], contrast: [255, 255, 255]},\n        700: {hex: \"#DF4E00\", value: [223, 78, 0], contrast: [255, 255, 255]},\n        800: {hex: \"#DB4400\", value: [219, 68, 0], contrast: [255, 255, 255, .87]},\n        900: {hex: \"#D53300\", value: [213, 51, 0], contrast: [255, 255, 255, .87]},\n        A100: {hex: \"#FFFDFC\", value: [255, 253, 252], contrast: [0, 0, 0, .87]},\n        A200: {hex: \"#FFD3C9\", value: [255, 211, 201], contrast: [255, 255, 255]},\n        A400: {hex: \"#FFA996\", value: [255, 169, 150], contrast: [255, 255, 255]},\n        A700: {hex: \"#FF947D\", value: [255, 148, 125], contrast: [255, 255, 255]}\n      }\n    };\n\n    var service = {\n      getRegisteredPalettes: getRegisteredPalettes,\n      getRegisteredThemes: getRegisteredThemes,\n      setActiveTheme: setActiveTheme,\n      setThemesList: setThemesList,\n      themes: {\n        list: {},\n        active: {\n          'name': '',\n          'theme': {}\n        }\n      }\n    };\n\n    return service;\n\n    //////////\n\n    /**\n     * Get registered palettes\n     *\n     * @returns {*}\n     */\n    function getRegisteredPalettes() {\n      // var palette = angular.extend($mdTheming.PALETTES, newuiPalette);\n      // return palette;\n      return $mdTheming.PALETTES;\n    }\n\n    /**\n     * Get registered themes\n     *\n     * @returns {*}\n     */\n    function getRegisteredThemes() {\n      return $mdTheming.THEMES;\n    }\n\n    /**\n     * Set active theme\n     *\n     * @param themeName\n     */\n    function setActiveTheme(themeName) {\n      // If theme does not exist, fallback to the default theme\n      if (angular.isUndefined(service.themes.list[themeName])) {\n        // If there is no theme called \"default\"...\n        if (angular.isUndefined(service.themes.list.default)) {\n          $log.error('You must have at least one theme named \"default\"');\n          return;\n        }\n\n        $log.warn('The theme \"' + themeName + '\" does not exist! Falling back to the \"default\" theme.');\n\n        // Otherwise set theme to default theme\n        service.themes.active.name = 'default';\n        service.themes.active.theme = service.themes.list.default;\n        $cookies.put('selectedTheme', service.themes.active.name);\n\n        return;\n      }\n\n      service.themes.active.name = themeName;\n      service.themes.active.theme = service.themes.list[themeName];\n      $cookies.put('selectedTheme', themeName);\n    }\n\n    /**\n     * Set available themes list\n     *\n     * @param themeList\n     */\n    function setThemesList(themeList) {\n      service.themes.list = themeList;\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.core')\n    .config(config);\n\n  /** @ngInject */\n  function config($mdThemingProvider, fusePalettes, fuseThemes) {\n   /* // New UI, use only material's default theme\n    $mdThemingProvider.theme('default')\n      .primaryPalette('blue')\n      .accentPalette('blue')\n      .warnPalette('red')\n      .backgroundPalette('grey');*/\n\n    // Old fuse code\n    // Inject Cookies Service\n    var $cookies;\n    angular.injector(['ngCookies']).invoke([\n      '$cookies', function (_$cookies) {\n        $cookies = _$cookies;\n      }\n    ]);\n\n    // Check if custom theme exist in cookies\n    var customTheme = $cookies.getObject('customTheme');\n    if ( customTheme )\n    {\n        fuseThemes['custom'] = customTheme;\n    }\n\n    $mdThemingProvider.alwaysWatchTheme(true);\n\n    // Define custom palettes\n    angular.forEach(fusePalettes, function (palette)\n    {\n        $mdThemingProvider.definePalette(palette.name, palette.options);\n    });\n\n    // Register custom themes\n    angular.forEach(fuseThemes, function (theme, themeName)\n    {\n        $mdThemingProvider.theme(themeName)\n            .primaryPalette(theme.primary.name, theme.primary.hues)\n            .accentPalette(theme.accent.name, theme.accent.hues)\n            .warnPalette(theme.warn.name, theme.warn.hues)\n            .backgroundPalette(theme.background.name, theme.background.hues);\n    });\n  }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    var fuseThemes = {\n      default  : {\n        primary   : {\n          name: 'newui-primary',\n          hues: {\n            'default': '500',\n            'hue-1'  : '500',\n            'hue-2'  : '600',\n            'hue-3'  : '400'\n          }\n        },\n        accent    : {\n          name: 'newui-accent',\n          hues: {\n            'default': 'A700',\n            'hue-1'  : 'A400',\n            'hue-2'  : 'A200',\n            'hue-3'  : 'A100'\n          }\n        },\n        warn      : {\n          name: 'red'\n        },\n        background: {\n          name: 'grey',\n          hues: {\n            'default': 'A100',\n            'hue-1'  : 'A100',\n            'hue-2'  : '100',\n            'hue-3'  : '300'\n          }\n        }\n      }\n    };\n\n    angular\n        .module('app.core')\n        .constant('fuseThemes', fuseThemes);\n})();\n\n(function () {\n    'use strict';\n\n    var fusePalettes = [\n      {\n        name: 'newui-primary',\n        options: {\n          '50': '#e9ecfd',\n          '100': '#c9cffb',\n          '200': '#a5aff8',\n          '300': '#808ff5',\n          '400': '#6577f2',\n          '500': '#4a5ff0',\n          '600': '#4357ee',\n          '700': '#3a4dec',\n          '800': '#3243e9',\n          '900': '#2232e5',\n          'A100': '#ffffff',\n          'A200': '#ebecff',\n          'A400': '#b8bdff',\n          'A700': '#9ea5ff',\n          'contrastDefaultColor': 'light',\n          'contrastDarkColors': '50 100 200 A100',\n          'contrastStrongLightColors': '300 400'\n        }\n      },\n      {\n        name: 'newui-accent',\n        options: {\n          '50': '#2eefac',\n          '100': '#1beea4',\n          '200': '#11e49a',\n          '300': '#10d18d',\n          '400': '#0ebe80',\n          '500': '#0dab73',\n          '600': '#0b9867',\n          '700': '#0a855a',\n          '800': '#09724D',\n          '900': '#075f40',\n          'A100': '#b3f9e1',\n          'A200': '#a0f8d9',\n          'A400': '#7af5ca',\n          'A700': '#3cf0b1',\n          'contrastDefaultColor': 'dark',\n          'contrastDarkColors': '50 100 200 A100',\n          'contrastStrongLightColors': '300 400'\n        }\n      },\n    ];\n\n    angular\n        .module('app.core')\n        .constant('fusePalettes', fusePalettes);\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .factory('fuseGenerator', fuseGeneratorService);\n\n    /** @ngInject */\n    function fuseGeneratorService($cookies, $log, fuseTheming)\n    {\n        // Storage for simplified themes object\n        var themes = {};\n\n        var service = {\n            generate: generate,\n            rgba    : rgba\n        };\n\n        return service;\n\n        //////////\n\n        /**\n         * Generate less variables for each theme from theme's\n         * palette by using material color naming conventions\n         */\n        function generate()\n        {\n            // Get registered themes and palettes and copy\n            // them so we don't modify the original objects\n            var registeredThemes = angular.copy(fuseTheming.getRegisteredThemes());\n            var registeredPalettes = angular.copy(fuseTheming.getRegisteredPalettes());\n\n            // First, create a simplified object that stores\n            // all registered themes and their colors\n\n            // Iterate through registered themes\n            angular.forEach(registeredThemes, function (registeredTheme)\n            {\n                themes[registeredTheme.name] = {};\n\n                // Iterate through color types (primary, accent, warn & background)\n                angular.forEach(registeredTheme.colors, function (colorType, colorTypeName)\n                {\n                    themes[registeredTheme.name][colorTypeName] = {\n                        'name'  : colorType.name,\n                        'levels': {\n                            'default': {\n                                'color'    : rgba(registeredPalettes[colorType.name][colorType.hues.default].value),\n                                'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 1),\n                                'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 2),\n                                'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 3),\n                                'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 4)\n                            },\n                            'hue1'   : {\n                                'color'    : rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].value),\n                                'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 1),\n                                'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 2),\n                                'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 3),\n                                'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 4)\n                            },\n                            'hue2'   : {\n                                'color'    : rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].value),\n                                'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 1),\n                                'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 2),\n                                'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 3),\n                                'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 4)\n                            },\n                            'hue3'   : {\n                                'color'    : rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].value),\n                                'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 1),\n                                'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 2),\n                                'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 3),\n                                'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 4)\n                            }\n                        }\n                    };\n                });\n            });\n\n            // Process themes one more time and then store them in the service for external use\n            processAndStoreThemes(themes);\n\n            // Iterate through simplified themes\n            // object and create style variables\n            var styleVars = {};\n            // Iterate through registered themes\n            angular.forEach(themes, function (theme, themeName)\n            {\n                styleVars = {};\n                styleVars['@themeName'] = themeName;\n\n                // Iterate through color types (primary, accent, warn & background)\n                angular.forEach(theme, function (colorTypes, colorTypeName)\n                {\n                    // Iterate through color levels (default, hue1, hue2 & hue3)\n                    angular.forEach(colorTypes.levels, function (colors, colorLevelName)\n                    {\n                        // Iterate through color name (color, contrast1, contrast2, contrast3 & contrast4)\n                        angular.forEach(colors, function (color, colorName)\n                        {\n                            styleVars['@' + colorTypeName + ucfirst(colorLevelName) + ucfirst(colorName)] = color;\n                        });\n                    });\n                });\n                // Render styles\n                render(styleVars);\n            });\n        }\n\n        // ---------------------------\n        //  INTERNAL HELPER FUNCTIONS\n        // ---------------------------\n\n        /**\n         * Process and store themes for global use\n         *\n         * @param _themes\n         */\n        function processAndStoreThemes(_themes)\n        {\n            // Here we will go through every registered theme one more time\n            // and try to simplify their objects as much as possible for\n            // easier access to their properties.\n          var themes = angular.copy(_themes);\n\n            // Iterate through themes\n            angular.forEach(themes, function (theme)\n            {\n                // Iterate through color types (primary, accent, warn & background)\n                angular.forEach(theme, function (colorType, colorTypeName)\n                {\n                    theme[colorTypeName] = colorType.levels;\n                    theme[colorTypeName].color = colorType.levels.default.color;\n                    theme[colorTypeName].contrast1 = colorType.levels.default.contrast1;\n                    theme[colorTypeName].contrast2 = colorType.levels.default.contrast2;\n                    theme[colorTypeName].contrast3 = colorType.levels.default.contrast3;\n                    theme[colorTypeName].contrast4 = colorType.levels.default.contrast4;\n                    delete theme[colorTypeName].default;\n                });\n            });\n\n            // Store themes and set selected theme for the first time\n            fuseTheming.setThemesList(themes);\n\n            // Remember selected theme.\n            var selectedTheme = $cookies.get('selectedTheme');\n\n            if ( selectedTheme )\n            {\n                fuseTheming.setActiveTheme(selectedTheme);\n            }\n            else\n            {\n                fuseTheming.setActiveTheme('default');\n            }\n        }\n\n\n        /**\n         * Render css files\n         *\n         * @param styleVars\n         */\n        function render(styleVars)\n        {\n            // var cssTemplateBackup = '/* Content hack because they wont fix */\\n/* https://github.com/angular/material/pull/8067 */\\n[md-theme=\"@themeName\"] md-content.md-hue-1,\\nmd-content.md-@themeName-theme.md-hue-1 {\\n    color: @backgroundHue1Contrast1;\\n    background-color: @backgroundHue1Color;\\n}\\n\\n[md-theme=\"@themeName\"] md-content.md-hue-2,\\nmd-content.md-@themeName-theme.md-hue-2 {\\n    color: @backgroundHue2Contrast1;\\n    background-color: @backgroundHue2Color;\\n}\\n\\n[md-theme=\"@themeName\"] md-content.md-hue-3,\\n md-content.md-@themeName-theme.md-hue-3 {\\n    color: @backgroundHue3Contrast1;\\n    background-color: @backgroundHue3Color;\\n}\\n\\n/* Text Colors */\\n[md-theme=\"@themeName\"] a {\\n    color: @accentDefaultColor;\\n}\\n\\n[md-theme=\"@themeName\"] .secondary-text,\\n[md-theme=\"@themeName\"] .icon {\\n    color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .hint-text,\\n[md-theme=\"@themeName\"] .disabled-text {\\n    color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .fade-text,\\n[md-theme=\"@themeName\"] .divider {\\n    color: @backgroundDefaultContrast4;\\n}\\n\\n/* Primary */\\n[md-theme=\"@themeName\"] .md-primary-bg {\\n    background-color: @primaryDefaultColor;\\n    color: @primaryDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .icon {\\n    color: @primaryDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .disabled-text {\\n    color: @primaryDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .divider {\\n    color: @primaryDefaultContrast4;\\n}\\n\\n/* Primary, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 {\\n    background-color: @primaryHue1Color;\\n    color: @primaryHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .icon {\\n    color: @primaryHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .disabled-text {\\n    color: @primaryHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .divider {\\n    color: @primaryHue1Contrast4;\\n}\\n\\n/* Primary, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 {\\n    background-color: @primaryHue2Color;\\n    color: @primaryHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .icon {\\n    color: @primaryHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .disabled-text {\\n    color: @primaryHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .divider {\\n    color: @primaryHue2Contrast4;\\n}\\n\\n/* Primary, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 {\\n    background-color: @primaryHue3Color;\\n    color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .icon {\\n    color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .disabled-text {\\n    color: @primaryHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .divider {\\n    color: @primaryHue3Contrast4;\\n}\\n\\n/* Primary foreground */\\n[md-theme=\"@themeName\"] .md-primary-fg {\\n    color: @primaryDefaultColor !important;\\n}\\n\\n/* Primary foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-1 {\\n    color: @primaryHue1Color !important;\\n}\\n\\n/* Primary foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-2 {\\n    color: @primaryHue2Color !important;\\n}\\n\\n/* Primary foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-3 {\\n    color: @primaryHue3Color !important;\\n}\\n\\n/* Accent */\\n[md-theme=\"@themeName\"] .md-accent-bg {\\n    background-color: @accentDefaultColor;\\n    color: @accentDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .icon {\\n    color: @accentDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .disabled-text {\\n    color: @accentDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .divider {\\n    color: @accentDefaultContrast4;\\n}\\n\\n/* Accent, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 {\\n    background-color: @accentHue1Color;\\n    color: @accentHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .icon {\\n    color: @accentHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .disabled-text {\\n    color: @accentHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .divider {\\n    color: @accentHue1Contrast4;\\n}\\n\\n/* Accent, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 {\\n    background-color: @accentHue2Color;\\n    color: @accentHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .icon {\\n    color: @accentHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .disabled-text {\\n    color: @accentHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .divider {\\n    color: @accentHue2Contrast4;\\n}\\n\\n/* Accent, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 {\\n    background-color: @accentHue3Color;\\n    color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .icon {\\n    color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .disabled-text {\\n    color: @accentHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .divider {\\n    color: @accentHue3Contrast4;\\n}\\n\\n/* Accent foreground */\\n[md-theme=\"@themeName\"] .md-accent-fg {\\n    color: @accentDefaultColor !important;\\n}\\n\\n/* Accent foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-1 {\\n    color: @accentHue1Color !important;\\n}\\n\\n/* Accent foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-2 {\\n    color: @accentHue2Color !important;\\n}\\n\\n/* Accent foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-3 {\\n    color: @accentHue3Color !important;\\n}\\n\\n/* Warn */\\n[md-theme=\"@themeName\"] .md-warn-bg {\\n    background-color: @warnDefaultColor;\\n    color: @warnDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .icon {\\n    color: @warnDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .disabled-text {\\n    color: @warnDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .divider {\\n    color: @warnDefaultContrast4;\\n}\\n\\n/* Warn, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 {\\n    background-color: @warnHue1Color;\\n    color: @warnHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .icon {\\n    color: @warnHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .disabled-text {\\n    color: @warnHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .divider {\\n    color: @warnHue1Contrast4;\\n}\\n\\n/* Warn, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 {\\n    background-color: @warnHue2Color;\\n    color: @warnHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .icon {\\n    color: @warnHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .disabled-text {\\n    color: @warnHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .divider {\\n    color: @warnHue2Contrast4;\\n}\\n\\n/* Warn, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 {\\n    background-color: @warnHue3Color;\\n    color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .icon {\\n    color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .disabled-text {\\n    color: @warnHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .divider {\\n    color: @warnHue3Contrast4;\\n}\\n\\n/* Warn foreground */\\n[md-theme=\"@themeName\"] .md-warn-fg {\\n    color: @warnDefaultColor !important;\\n}\\n\\n/* Warn foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-1 {\\n    color: @warnHue1Color !important;\\n}\\n\\n/* Warn foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-2 {\\n    color: @warnHue2Color !important;\\n}\\n\\n/* Warn foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-3 {\\n    color: @warnHue3Color !important;\\n}\\n\\n/* Background */\\n[md-theme=\"@themeName\"] .md-background-bg {\\n    background-color: @backgroundDefaultColor;\\n    color: @backgroundDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg .icon {\\n    color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg .disabled-text {\\n    color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg .divider {\\n    color: @backgroundDefaultContrast4;\\n}\\n\\n/* Background, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 {\\n    background-color: @backgroundHue1Color;\\n    color: @backgroundHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .icon {\\n    color: @backgroundHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .disabled-text {\\n    color: @backgroundHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .divider {\\n    color: @backgroundHue1Contrast4;\\n}\\n\\n/* Background, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 {\\n    background-color: @backgroundHue2Color;\\n    color: @backgroundHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .icon {\\n    color: @backgroundHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .disabled-text {\\n    color: @backgroundHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .divider {\\n    color: @backgroundHue2Contrast4;\\n}\\n\\n/* Background, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 {\\n    background-color: @backgroundHue3Color;\\n    color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .icon {\\n    color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .disabled-text {\\n    color: @backgroundHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .divider {\\n    color: @backgroundHue3Contrast4;\\n}\\n\\n/* Background foreground */\\n[md-theme=\"@themeName\"] .md-background-fg {\\n    color: @backgroundDefaultColor !important;\\n}\\n\\n/* Background foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-1 {\\n    color: @backgroundHue1Color !important;\\n}\\n\\n/* Background foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-2 {\\n    color: @backgroundHue2Color !important;\\n}\\n\\n/* Background foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-3 {\\n    color: @backgroundHue3Color !important;\\n}';\n            var cssTemplate = '/* Content hack because they wont fix */\\n/* https://github.com/angular/material/pull/8067 */\\n[md-theme=\"@themeName\"] md-content.md-hue-1,\\nmd-content.md-@themeName-theme.md-hue-1 {\\n    color: @backgroundHue1Contrast1;\\n    background-color: @backgroundHue1Color;\\n}\\n\\n[md-theme=\"@themeName\"] md-content.md-hue-2,\\nmd-content.md-@themeName-theme.md-hue-2 {\\n    color: @backgroundHue2Contrast1;\\n    background-color: @backgroundHue2Color;\\n}\\n\\n[md-theme=\"@themeName\"] md-content.md-hue-3,\\n md-content.md-@themeName-theme.md-hue-3 {\\n    color: @backgroundHue3Contrast1;\\n    background-color: @backgroundHue3Color;\\n}\\n\\n/* Text Colors */\\n[md-theme=\"@themeName\"] a:not(.md-button) {\\n    color: @primaryDefaultColor;\\n}\\n\\n[md-theme=\"@themeName\"] .secondary-text,\\n[md-theme=\"@themeName\"] .icon {\\n    color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .hint-text,\\n[md-theme=\"@themeName\"] .disabled-text {\\n    color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .fade-text,\\n[md-theme=\"@themeName\"] .divider {\\n    color: @backgroundDefaultContrast4;\\n}\\n\\n/* Primary */\\n[md-theme=\"@themeName\"] .md-primary-bg {\\n    background-color: @primaryDefaultColor;\\n    color: @primaryDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .icon {\\n    color: @primaryDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .disabled-text {\\n    color: @primaryDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .divider {\\n    color: @primaryDefaultContrast4;\\n}\\n\\n/* Primary, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 {\\n    background-color: @primaryHue1Color;\\n    color: @primaryHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .icon {\\n    color: @primaryHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .disabled-text {\\n    color: @primaryHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .divider {\\n    color: @primaryHue1Contrast4;\\n}\\n\\n/* Primary, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 {\\n    background-color: @primaryHue2Color;\\n    color: @primaryHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .icon {\\n    color: @primaryHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .disabled-text {\\n    color: @primaryHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .divider {\\n    color: @primaryHue2Contrast4;\\n}\\n\\n/* Primary, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 {\\n    background-color: @primaryHue3Color;\\n    color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .icon {\\n    color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .disabled-text {\\n    color: @primaryHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .divider {\\n    color: @primaryHue3Contrast4;\\n}\\n\\n/* Primary foreground */\\n[md-theme=\"@themeName\"] .md-primary-fg {\\n    color: @primaryDefaultColor !important;\\n}\\n\\n/* Primary foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-1 {\\n    color: @primaryHue1Color !important;\\n}\\n\\n/* Primary foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-2 {\\n    color: @primaryHue2Color !important;\\n}\\n\\n/* Primary foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-3 {\\n    color: @primaryHue3Color !important;\\n}\\n\\n/* Accent */\\n[md-theme=\"@themeName\"] .md-accent-bg {\\n    background-color: @accentDefaultColor;\\n    color: @accentDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .icon {\\n    color: @accentDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .disabled-text {\\n    color: @accentDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .divider {\\n    color: @accentDefaultContrast4;\\n}\\n\\n/* Accent, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 {\\n    background-color: @accentHue1Color;\\n    color: @accentHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .icon {\\n    color: @accentHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .disabled-text {\\n    color: @accentHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .divider {\\n    color: @accentHue1Contrast4;\\n}\\n\\n/* Accent, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 {\\n    background-color: @accentHue2Color;\\n    color: @accentHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .icon {\\n    color: @accentHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .disabled-text {\\n    color: @accentHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .divider {\\n    color: @accentHue2Contrast4;\\n}\\n\\n/* Accent, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 {\\n    background-color: @accentHue3Color;\\n    color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .icon {\\n    color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .disabled-text {\\n    color: @accentHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .divider {\\n    color: @accentHue3Contrast4;\\n}\\n\\n/* Accent foreground */\\n[md-theme=\"@themeName\"] .md-accent-fg {\\n    color: @accentDefaultColor !important;\\n}\\n\\n/* Accent foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-1 {\\n    color: @accentHue1Color !important;\\n}\\n\\n/* Accent foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-2 {\\n    color: @accentHue2Color !important;\\n}\\n\\n/* Accent foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-3 {\\n    color: @accentHue3Color !important;\\n}\\n\\n/* Warn */\\n[md-theme=\"@themeName\"] .md-warn-bg {\\n    background-color: @warnDefaultColor;\\n    color: @warnDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .icon {\\n    color: @warnDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .disabled-text {\\n    color: @warnDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .divider {\\n    color: @warnDefaultContrast4;\\n}\\n\\n/* Warn, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 {\\n    background-color: @warnHue1Color;\\n    color: @warnHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .icon {\\n    color: @warnHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .disabled-text {\\n    color: @warnHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .divider {\\n    color: @warnHue1Contrast4;\\n}\\n\\n/* Warn, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 {\\n    background-color: @warnHue2Color;\\n    color: @warnHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .icon {\\n    color: @warnHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .disabled-text {\\n    color: @warnHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .divider {\\n    color: @warnHue2Contrast4;\\n}\\n\\n/* Warn, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 {\\n    background-color: @warnHue3Color;\\n    color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .icon {\\n    color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .disabled-text {\\n    color: @warnHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .divider {\\n    color: @warnHue3Contrast4;\\n}\\n\\n/* Warn foreground */\\n[md-theme=\"@themeName\"] .md-warn-fg {\\n    color: @warnDefaultColor !important;\\n}\\n\\n/* Warn foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-1 {\\n    color: @warnHue1Color !important;\\n}\\n\\n/* Warn foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-2 {\\n    color: @warnHue2Color !important;\\n}\\n\\n/* Warn foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-3 {\\n    color: @warnHue3Color !important;\\n}\\n\\n/* Background */\\n[md-theme=\"@themeName\"] .md-background-bg {\\n    background-color: @backgroundDefaultColor;\\n    color: @backgroundDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg .icon {\\n    color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg .disabled-text {\\n    color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg .divider {\\n    color: @backgroundDefaultContrast4;\\n}\\n\\n/* Background, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 {\\n    background-color: @backgroundHue1Color;\\n    color: @backgroundHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .icon {\\n    color: @backgroundHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .disabled-text {\\n    color: @backgroundHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .divider {\\n    color: @backgroundHue1Contrast4;\\n}\\n\\n/* Background, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 {\\n    background-color: @backgroundHue2Color;\\n    color: @backgroundHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .icon {\\n    color: @backgroundHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .disabled-text {\\n    color: @backgroundHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .divider {\\n    color: @backgroundHue2Contrast4;\\n}\\n\\n/* Background, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 {\\n    background-color: @backgroundHue3Color;\\n    color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .icon {\\n    color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .disabled-text {\\n    color: @backgroundHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .divider {\\n    color: @backgroundHue3Contrast4;\\n}\\n\\n/* Background foreground */\\n[md-theme=\"@themeName\"] .md-background-fg {\\n    color: @backgroundDefaultColor !important;\\n}\\n\\n/* Background foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-1 {\\n    color: @backgroundHue1Color !important;\\n}\\n\\n/* Background foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-2 {\\n    color: @backgroundHue2Color !important;\\n}\\n\\n/* Background foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-3 {\\n    color: @backgroundHue3Color !important;\\n}';\n            var regex = new RegExp(Object.keys(styleVars).join('|'), 'gi');\n            var css = cssTemplate.replace(regex, function (matched)\n            {\n                return styleVars[matched];\n            });\n\n            var headEl = angular.element('head');\n            var styleEl = angular.element('<style type=\"text/css\"></style>');\n            styleEl.html(css);\n            headEl.append(styleEl);\n        }\n\n        /**\n         * Convert color array to rgb/rgba\n         * Also apply contrasts if needed\n         *\n         * @param color\n         * @param _contrastLevel\n         * @returns {string}\n         */\n        function rgba(color, _contrastLevel)\n        {\n            var contrastLevel = _contrastLevel || false;\n\n            // Convert 255,255,255,0.XX to 255,255,255\n            // According to Google's Material design specs, white primary\n            // text must have opacity of 1 and we will fix that here\n            // because Angular Material doesn't care about that spec\n            if ( color.length === 4 && color[0] === 255 && color[1] === 255 && color[2] === 255 )\n            {\n                color.splice(3, 4);\n            }\n\n            // If contrast level provided, apply it to the current color\n            if ( contrastLevel )\n            {\n                color = applyContrast(color, contrastLevel);\n            }\n\n            // Convert color array to color string (rgb/rgba)\n            if ( color.length === 3 )\n            {\n                return 'rgb(' + color.join(',') + ')';\n            }\n            else if ( color.length === 4 )\n            {\n                return 'rgba(' + color.join(',') + ')';\n            }\n            else\n            {\n                $log.error('Invalid number of arguments supplied in the color array: ' + color.length + '\\n' + 'The array must have 3 or 4 colors.');\n            }\n        }\n\n        /**\n         * Apply given contrast level to the given color\n         *\n         * @param color\n         * @param contrastLevel\n         */\n        function applyContrast(color, contrastLevel)\n        {\n            var contrastLevels = {\n                'white': {\n                    '1': '1',\n                    '2': '0.7',\n                    '3': '0.3',\n                    '4': '0.12'\n                },\n                'black': {\n                    '1': '0.87',\n                    '2': '0.54',\n                    '3': '0.26',\n                    '4': '0.12'\n                }\n            };\n\n            // If white\n            if ( color[0] === 255 && color[1] === 255 && color[2] === 255 )\n            {\n                color[3] = contrastLevels.white[contrastLevel];\n            }\n            // If black\n            else if ( color[0] === 0 && color[1] === 0 && color[2] === 0 )\n            {\n                color[3] = contrastLevels.black[contrastLevel];\n            }\n\n            return color;\n        }\n\n        /**\n         * Uppercase first\n         */\n        function ucfirst(string)\n        {\n            return string.charAt(0).toUpperCase() + string.slice(1);\n        }\n    }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .controller('MsThemeOptionsController', MsThemeOptionsController)\n        .directive('msThemeOptions', msThemeOptions);\n\n    /** @ngInject */\n    function MsThemeOptionsController($cookies, fuseTheming)\n    {\n        var vm = this;\n\n        // Data\n        vm.themes = fuseTheming.themes;\n\n        vm.layoutModes = [\n            {\n                label: 'Boxed',\n                value: 'boxed'\n            },\n            {\n                label: 'Wide',\n                value: 'wide'\n            }\n        ];\n        vm.layoutStyles = [\n            {\n                label : 'Vertical Navigation',\n                value : 'verticalNavigation',\n                figure: '/assets/images/theme-options/vertical-nav.95f31526.jpg'\n            },\n            {\n                label : 'Vertical Navigation with Fullwidth Toolbar',\n                value : 'verticalNavigationFullwidthToolbar',\n                figure: '/assets/images/theme-options/vertical-nav-with-full-toolbar.21885632.jpg'\n            },\n            {\n                label : 'Vertical Navigation with Fullwidth Toolbar 2',\n                value : 'verticalNavigationFullwidthToolbar2',\n                figure: '/assets/images/theme-options/vertical-nav-with-full-toolbar-2.3bdde067.jpg'\n            },\n            {\n                label : 'Horizontal Navigation',\n                value : 'horizontalNavigation',\n                figure: '/assets/images/theme-options/horizontal-nav.4c516707.jpg'\n            },\n            {\n                label : 'Content with Toolbar',\n                value : 'contentWithToolbar',\n                figure: '/assets/images/theme-options/content-with-toolbar.c06648dc.jpg'\n            },\n            {\n                label : 'Content Only',\n                value : 'contentOnly',\n                figure: '/assets/images/theme-options/content-only.8c127b34.jpg'\n            },\n        ];\n\n        vm.layoutMode = 'wide';\n        vm.layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n\n        // Methods\n        vm.setActiveTheme = setActiveTheme;\n        vm.getActiveTheme = getActiveTheme;\n        vm.updateLayoutMode = updateLayoutMode;\n        vm.updateLayoutStyle = updateLayoutStyle;\n\n        //////////\n\n        /**\n         * Set active theme\n         *\n         * @param themeName\n         */\n        function setActiveTheme(themeName)\n        {\n            fuseTheming.setActiveTheme(themeName);\n        }\n\n        /**\n         * Get active theme\n         *\n         * @returns {service.themes.active|{name, theme}}\n         */\n        function getActiveTheme()\n        {\n            return fuseTheming.themes.active;\n        }\n\n        /**\n         * Update layout mode\n         */\n        function updateLayoutMode()\n        {\n            var bodyEl = angular.element('body');\n\n            // Update class on body element\n            bodyEl.toggleClass('boxed', (vm.layoutMode === 'boxed'));\n        }\n\n        /**\n         * Update layout style\n         */\n        function updateLayoutStyle()\n        {\n            // Update the cookie\n            $cookies.put('layoutStyle', vm.layoutStyle);\n\n            // Reload the page to apply the changes\n            location.reload();\n        }\n    }\n\n    /** @ngInject */\n    function msThemeOptions($mdSidenav)\n    {\n        return {\n            restrict   : 'E',\n            scope      : {},\n            controller : 'MsThemeOptionsController as vm',\n            templateUrl: 'app/core/theme-options/theme-options.html',\n            compile    : function (tElement)\n            {\n                tElement.addClass('ms-theme-options');\n\n                return function postLink(scope)\n                {\n                    /**\n                     * Toggle options sidenav\n                     */\n                    function toggleOptionsSidenav()\n                    {\n                        // Toggle the fuse theme options panel\n                        $mdSidenav('fuse-theme-options').toggle();\n                    }\n\n                    // Expose the toggle function\n                    scope.toggleOptionsSidenav = toggleOptionsSidenav;\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .factory('msUtils', msUtils);\n\n    /** @ngInject */\n    function msUtils($window)\n    {\n        // Private variables\n        var mobileDetect = new MobileDetect($window.navigator.userAgent),\n            browserInfo = null;\n\n        var service = {\n            exists       : exists,\n            detectBrowser: detectBrowser,\n            guidGenerator: guidGenerator,\n            isMobile     : isMobile,\n            toggleInArray: toggleInArray\n        };\n\n        return service;\n\n        //////////\n\n        /**\n         * Check if item exists in a list\n         *\n         * @param item\n         * @param list\n         * @returns {boolean}\n         */\n        function exists(item, list)\n        {\n            return list.indexOf(item) > -1;\n        }\n\n        /**\n         * Returns browser information\n         * from user agent data\n         *\n         * Found at http://www.quirksmode.org/js/detect.html\n         * but modified and updated to fit for our needs\n         */\n        function detectBrowser()\n        {\n            // If we already tested, do not test again\n            if ( browserInfo )\n            {\n                return browserInfo;\n            }\n\n            var browserData = [\n                {\n                    string       : $window.navigator.userAgent,\n                    subString    : 'Edge',\n                    versionSearch: 'Edge',\n                    identity     : 'Edge'\n                },\n                {\n                    string   : $window.navigator.userAgent,\n                    subString: 'Chrome',\n                    identity : 'Chrome'\n                },\n                {\n                    string       : $window.navigator.userAgent,\n                    subString    : 'OmniWeb',\n                    versionSearch: 'OmniWeb/',\n                    identity     : 'OmniWeb'\n                },\n                {\n                    string       : $window.navigator.vendor,\n                    subString    : 'Apple',\n                    versionSearch: 'Version',\n                    identity     : 'Safari'\n                },\n                {\n                    prop    : $window.opera,\n                    identity: 'Opera'\n                },\n                {\n                    string   : $window.navigator.vendor,\n                    subString: 'iCab',\n                    identity : 'iCab'\n                },\n                {\n                    string   : $window.navigator.vendor,\n                    subString: 'KDE',\n                    identity : 'Konqueror'\n                },\n                {\n                    string   : $window.navigator.userAgent,\n                    subString: 'Firefox',\n                    identity : 'Firefox'\n                },\n                {\n                    string   : $window.navigator.vendor,\n                    subString: 'Camino',\n                    identity : 'Camino'\n                },\n                {\n                    string   : $window.navigator.userAgent,\n                    subString: 'Netscape',\n                    identity : 'Netscape'\n                },\n                {\n                    string       : $window.navigator.userAgent,\n                    subString    : 'MSIE',\n                    identity     : 'Explorer',\n                    versionSearch: 'MSIE'\n                },\n                {\n                    string       : $window.navigator.userAgent,\n                    subString    : 'Trident/7',\n                    identity     : 'Explorer',\n                    versionSearch: 'rv'\n                },\n                {\n                    string       : $window.navigator.userAgent,\n                    subString    : 'Gecko',\n                    identity     : 'Mozilla',\n                    versionSearch: 'rv'\n                },\n                {\n                    string       : $window.navigator.userAgent,\n                    subString    : 'Mozilla',\n                    identity     : 'Netscape',\n                    versionSearch: 'Mozilla'\n                }\n            ];\n\n            var osData = [\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'Win',\n                    identity : 'Windows'\n                },\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'Mac',\n                    identity : 'Mac'\n                },\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'Linux',\n                    identity : 'Linux'\n                },\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'iPhone',\n                    identity : 'iPhone'\n                },\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'iPod',\n                    identity : 'iPod'\n                },\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'iPad',\n                    identity : 'iPad'\n                },\n                {\n                    string   : $window.navigator.platform,\n                    subString: 'Android',\n                    identity : 'Android'\n                }\n            ];\n\n            var versionSearchString = '';\n\n            function searchString(data)\n            {\n                for ( var i = 0; i < data.length; i++ )\n                {\n                    var dataString = data[i].string;\n                    var dataProp = data[i].prop;\n\n                    versionSearchString = data[i].versionSearch || data[i].identity;\n\n                    if ( dataString )\n                    {\n                        if ( dataString.indexOf(data[i].subString) !== -1 )\n                        {\n                            return data[i].identity;\n\n                        }\n                    }\n                    else if ( dataProp )\n                    {\n                        return data[i].identity;\n                    }\n                }\n            }\n\n            function searchVersion(dataString)\n            {\n                var index = dataString.indexOf(versionSearchString);\n\n                if ( index === -1 )\n                {\n                    return;\n                }\n\n                return parseInt(dataString.substring(index + versionSearchString.length + 1));\n            }\n\n            var browser = searchString(browserData) || 'unknown-browser';\n            var version = searchVersion($window.navigator.userAgent) || searchVersion($window.navigator.appVersion) || 'unknown-version';\n            var os = searchString(osData) || 'unknown-os';\n\n            // Prepare and store the object\n            browser = browser.toLowerCase();\n            version = browser + '-' + version;\n            os = os.toLowerCase();\n\n            browserInfo = {\n                browser: browser,\n                version: version,\n                os     : os\n            };\n\n            return browserInfo;\n        }\n\n        /**\n         * Generates a globally unique id\n         *\n         * @returns {*}\n         */\n        function guidGenerator()\n        {\n            var S4 = function ()\n            {\n                return (((1 + Math.random()) * 0x10000) || 0).toString(16).substring(1);\n            };\n            return (S4() + S4() + S4() + S4() + S4() + S4());\n        }\n\n        /**\n         * Return if current device is a\n         * mobile device or not\n         */\n        function isMobile()\n        {\n            return mobileDetect.mobile();\n        }\n\n        /**\n         * Toggle in array (push or splice)\n         *\n         * @param item\n         * @param array\n         */\n        function toggleInArray(item, array)\n        {\n            if ( array.indexOf(item) === -1 )\n            {\n                array.push(item);\n            }\n            else\n            {\n                array.splice(array.indexOf(item), 1);\n            }\n        }\n    }\n}());\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .provider('msApi', msApiProvider);\n\n    /** @ngInject **/\n    function msApiProvider()\n    {\n        /* ----------------- */\n        /* Provider          */\n        /* ----------------- */\n        var provider = this;\n\n        // Inject the $log service\n        var $log = angular.injector(['ng']).get('$log');\n\n        // Data\n        var baseUrl = '';\n        var api = [];\n\n        // Methods\n        provider.setBaseUrl = setBaseUrl;\n        provider.getBaseUrl = getBaseUrl;\n        provider.getApiObject = getApiObject;\n        provider.register = register;\n\n        //////////\n\n        /**\n         * Set base url for API endpoints\n         *\n         * @param url {string}\n         */\n        function setBaseUrl(url)\n        {\n            baseUrl = url;\n        }\n\n        /**\n         * Return the base url\n         *\n         * @returns {string}\n         */\n        function getBaseUrl()\n        {\n            return baseUrl;\n        }\n\n        /**\n         * Return the api object\n         *\n         * @returns {object}\n         */\n        function getApiObject()\n        {\n            return api;\n        }\n\n        /**\n         * Register API endpoint\n         *\n         * @param key\n         * @param resource\n         */\n        function register(key, resource)\n        {\n            if ( !angular.isString(key) )\n            {\n                $log.error('\"path\" must be a string (eg. `dashboard.project`)');\n                return;\n            }\n\n            if ( !angular.isArray(resource) )\n            {\n                $log.error('\"resource\" must be an array and it must follow $resource definition');\n                return;\n            }\n\n            // Store the API object\n            api[key] = {\n                url          : baseUrl + (resource[0] || ''),\n                paramDefaults: resource[1] || [],\n                actions      : resource[2] || [],\n                options      : resource[3] || {}\n            };\n        }\n\n        /* ----------------- */\n        /* Service           */\n        /* ----------------- */\n        this.$get = function ($log, $q, $resource, $rootScope)\n        {\n            // Data\n\n            // Methods\n            var service = {\n                setBaseUrl: setBaseUrl,\n                getBaseUrl: getBaseUrl,\n                register  : register,\n                resolve   : resolve,\n                request   : request\n            };\n\n            return service;\n\n            //////////\n\n            /**\n             * Resolve an API endpoint\n             *\n             * @param action {string}\n             * @param parameters {object}\n             * @returns {promise|boolean}\n             */\n            function resolve(action, parameters)\n            {\n                // Emit an event\n                $rootScope.$broadcast('msApi::resolveStart');\n                \n                var actionParts = action.split('@'),\n                    resource = actionParts[0],\n                    method = actionParts[1],\n                    params = parameters || {};\n\n                if ( !resource || !method )\n                {\n                    $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\n                    return false;\n                }\n\n                // Create a new deferred object\n                var deferred = $q.defer();\n\n                // Get the correct resource definition from api object\n                var apiObject = api[resource];\n\n                if ( !apiObject )\n                {\n                    $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n                    deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n                }\n                else\n                {\n                    // Generate the $resource object based on the stored API object\n                    var resourceObject = $resource(apiObject.url, apiObject.paramDefaults, apiObject.actions, apiObject.options);\n\n                    // Make the call...\n                    resourceObject[method](params,\n\n                        // Success\n                        function (response)\n                        {\n                            deferred.resolve(response);\n\n                            // Emit an event\n                            $rootScope.$broadcast('msApi::resolveSuccess');\n                        },\n\n                        // Error\n                        function (response)\n                        {\n                            deferred.reject(response);\n\n                            // Emit an event\n                            $rootScope.$broadcast('msApi::resolveError');\n                        }\n                    );\n                }\n\n                // Return the promise\n                return deferred.promise;\n            }\n\n            /**\n             * Make a request to an API endpoint\n             *\n             * @param action {string}\n             * @param [parameters] {object}\n             * @param [success] {function}\n             * @param [error] {function}\n             *\n             * @returns {promise|boolean}\n             */\n            function request(action, parameters, success, error)\n            {\n                // Emit an event\n                $rootScope.$broadcast('msApi::requestStart');\n                \n                var actionParts = action.split('@'),\n                    resource = actionParts[0],\n                    method = actionParts[1],\n                    params = parameters || {};\n\n                if ( !resource || !method )\n                {\n                    $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\n                    return false;\n                }\n\n                // Create a new deferred object\n                var deferred = $q.defer();\n\n                // Get the correct resource definition from api object\n                var apiObject = api[resource];\n\n                if ( !apiObject )\n                {\n                    $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n                    deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n                }\n                else\n                {\n                    // Generate the $resource object based on the stored API object\n                    var resourceObject = $resource(apiObject.url, apiObject.paramDefaults, apiObject.actions, apiObject.options);\n\n                    // Make the call...\n                    resourceObject[method](params,\n\n                        // SUCCESS\n                        function (response)\n                        {\n                            // Emit an event\n                            $rootScope.$broadcast('msApi::requestSuccess');\n                            \n                            // Resolve the promise\n                            deferred.resolve(response);\n\n                            // Call the success function if there is one\n                            if ( angular.isDefined(success) && angular.isFunction(success) )\n                            {\n                                success(response);\n                            }\n                        },\n\n                        // ERROR\n                        function (response)\n                        {\n                            // Emit an event\n                            $rootScope.$broadcast('msApi::requestError');\n                            \n                            // Reject the promise\n                            deferred.reject(response);\n\n                            // Call the error function if there is one\n                            if ( angular.isDefined(error) && angular.isFunction(error) )\n                            {\n                                error(response);\n                            }\n                        }\n                    );\n                }\n\n                // Return the promise\n                return deferred.promise;\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .factory('byteArrayBufferService', byteArrayBufferService);\n\n    /** @ngInject */\n    function byteArrayBufferService()\n    {\n        var service = {\n            base64ToArrayBuffer       : base64ToArrayBuffer,\n            saveByteArray             : saveByteArray,\n        };\n\n        return service;\n\n        //////////\n\n        /**\n         * Transform base64 string to array buffer\n         *\n         * @param base64\n         * @returns {*}\n         */\n        function base64ToArrayBuffer(base64)\n        {\n            var binaryString = window.atob(base64);\n            var binaryLen = binaryString.length;\n            var bytes = new Uint8Array(binaryLen);\n            for (var i = 0; i < binaryLen; i++) {\n               var ascii = binaryString.charCodeAt(i);\n               bytes[i] = ascii;\n            }\n            return bytes;\n        }\n\n        /**\n         * Generate file and download it\n         *\n         * @param reportName\n         * @param byte\n         * @returns {*}\n         */\n        function saveByteArray(reportName, byte) {\n            var blob = new Blob([byte], {type: \"application/pdf\"});\n            var link = document.createElement('a');\n            link.href = window.URL.createObjectURL(blob);\n            var fileName = reportName;\n            link.download = fileName;\n            link.click();\n        }\n\n\n    }\n}());\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .factory('apiResolver', apiResolverService);\n\n    /** @ngInject */\n    function apiResolverService($q, $log, api)\n    {\n        var service = {\n            resolve: resolve\n        };\n\n        return service;\n\n        //////////\n        /**\n         * Resolve api\n         * @param action\n         * @param parameters\n         */\n        function resolve(action, parameters)\n        {\n            var actionParts = action.split('@'),\n                resource = actionParts[0],\n                method = actionParts[1],\n                params = parameters || {};\n\n            if ( !resource || !method )\n            {\n                $log.error('apiResolver.resolve requires correct action parameter (ResourceName@methodName)');\n                return false;\n            }\n\n            // Create a new deferred object\n            var deferred = $q.defer();\n\n            // Get the correct api object from api service\n            var apiObject = getApiObject(resource);\n\n            if ( !apiObject )\n            {\n                $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n                deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n            }\n            else\n            {\n                apiObject[method](params,\n\n                    // Success\n                    function (response)\n                    {\n                        deferred.resolve(response);\n                    },\n\n                    // Error\n                    function (response)\n                    {\n                        deferred.reject(response);\n                    }\n                );\n            }\n\n            // Return the promise\n            return deferred.promise;\n        }\n\n        /**\n         * Get correct api object\n         *\n         * @param resource\n         * @returns {*}\n         */\n        function getApiObject(resource)\n        {\n            // Split the resource in case if we have a dot notated object\n            var resourceParts = resource.split('.'),\n                apiObject = api;\n\n            // Loop through the resource parts and go all the way through\n            // the api object and return the correct one\n            for ( var l = 0; l < resourceParts.length; l++ )\n            {\n                if ( angular.isUndefined(apiObject[resourceParts[l]]) )\n                {\n                    $log.error('Resource part \"' + resourceParts[l] + '\" is not defined!');\n                    apiObject = false;\n                    break;\n                }\n\n                apiObject = apiObject[resourceParts[l]];\n            }\n\n            if ( !apiObject )\n            {\n                return false;\n            }\n\n            return apiObject;\n        }\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .filter('filterByTags', filterByTags)\n        .filter('filterSingleByTags', filterSingleByTags);\n\n    /** @ngInject */\n    function filterByTags()\n    {\n        return function (items, tags)\n        {\n            if ( items.length === 0 || tags.length === 0 )\n            {\n                return items;\n            }\n\n            var filtered = [];\n\n            items.forEach(function (item)\n            {\n                var match = tags.every(function (tag)\n                {\n                    var tagExists = false;\n\n                    item.tags.forEach(function (itemTag)\n                    {\n                        if ( itemTag.name === tag.name )\n                        {\n                            tagExists = true;\n                            return;\n                        }\n                    });\n\n                    return tagExists;\n                });\n\n                if ( match )\n                {\n                    filtered.push(item);\n                }\n            });\n\n            return filtered;\n        };\n    }\n\n    /** @ngInject */\n    function filterSingleByTags()\n    {\n        return function (itemTags, tags)\n        {\n            if ( itemTags.length === 0 || tags.length === 0 )\n            {\n                return;\n            }\n\n            if ( itemTags.length < tags.length )\n            {\n                return [];\n            }\n\n            var filtered = [];\n\n            var match = tags.every(function (tag)\n            {\n                var tagExists = false;\n\n                itemTags.forEach(function (itemTag)\n                {\n                    if ( itemTag.name === tag.name )\n                    {\n                        tagExists = true;\n                        return;\n                    }\n                });\n\n                return tagExists;\n            });\n\n            if ( match )\n            {\n                filtered.push(itemTags);\n            }\n\n            return filtered;\n        };\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .filter('filterByPropIds', filterByPropIds);\n\n    /** @ngInject */\n    function filterByPropIds()\n    {\n        return function (items, parameter, ids)\n        {\n            if ( items.length === 0 || !ids || ids.length === 0 )\n            {\n                return items;\n            }\n\n            var filtered = [];\n\n            for ( var i = 0; i < items.length; i++ )\n            {\n                var item = items[i];\n                var match = false;\n\n                for ( var j = 0; j < ids.length; j++ )\n                {\n                    var id = ids[j];\n                    if ( item[parameter].indexOf(id) > -1 )\n                    {\n                        match = true;\n                        break;\n                    }\n                }\n\n                if ( match )\n                {\n                    filtered.push(item);\n                }\n\n            }\n\n            return filtered;\n\n        };\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .filter('filterByIds', filterByIds);\n\n    /** @ngInject */\n    function filterByIds()\n    {\n        return function (items, ids)\n        {\n\n            if ( items.length === 0 || !ids )\n            {\n                return items;\n            }\n\n            if ( ids.length === 0 )\n            {\n                return [];\n            }\n\n            var filtered = [];\n\n            for ( var i = 0; i < items.length; i++ )\n            {\n                var item = items[i];\n                var match = false;\n\n                for ( var j = 0; j < ids.length; j++ )\n                {\n                    var id = ids[j];\n                    if ( item.id === id )\n                    {\n                        match = true;\n                        break;\n                    }\n                }\n\n                if ( match )\n                {\n                    filtered.push(item);\n                }\n\n            }\n\n            return filtered;\n\n        };\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .filter('toTrusted', toTrustedFilter)\n        .filter('htmlToPlaintext', htmlToPlainTextFilter)\n        .filter('nospace', nospaceFilter)\n        .filter('humanizeDoc', humanizeDocFilter);\n\n    /** @ngInject */\n    function toTrustedFilter($sce)\n    {\n        return function (value)\n        {\n            return $sce.trustAsHtml(value);\n        };\n    }\n\n    /** @ngInject */\n    function htmlToPlainTextFilter()\n    {\n        return function (text)\n        {\n            return String(text).replace(/<[^>]+>/gm, '');\n        };\n    }\n\n    /** @ngInject */\n    function nospaceFilter()\n    {\n        return function (value)\n        {\n            return (!value) ? '' : value.replace(/ /g, '');\n        };\n    }\n\n    /** @ngInject */\n    function humanizeDocFilter()\n    {\n        return function (doc)\n        {\n            if ( !doc )\n            {\n                return;\n            }\n            if ( doc.type === 'directive' )\n            {\n                return doc.name.replace(/([A-Z])/g, function ($1)\n                {\n                    return '-' + $1.toLowerCase();\n                });\n            }\n            return doc.label || doc.name;\n        };\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .filter('altDate', altDate);\n\n    /** @ngInject */\n    function altDate()\n    {\n        return function (value)\n        {\n            var diff = Date.now() - new Date(value);\n\n            /**\n             * If in a hour\n             * e.g. \"2 minutes ago\"\n             */\n            if ( diff < (60 * 60 * 1000) )\n            {\n                return moment(value).fromNow();\n            }\n            /*\n             * If in the day\n             * e.g. \"11:23\"\n             */\n            else if ( diff < (60 * 60 * 24 * 1000) )\n            {\n                return moment(value).format('HH:mm');\n            }\n            /*\n             * If in week\n             * e.g \"Tuesday\"\n             */\n            else if ( diff < (60 * 60 * 24 * 7 * 1000) )\n            {\n                return moment(value).format('dddd');\n            }\n            /*\n             * If more than a week\n             * e.g. 03/29/2016\n             */\n            else\n            {\n                return moment(value).calendar();\n            }\n\n        };\n    }\n\n})();\n(function () {\n    'use strict';\n\n    angular\n        .module('app.core')\n        .directive('hljs', hljsDirective);\n\n    /** @ngInject */\n    function hljsDirective($timeout, $q, $interpolate) {\n        return {\n            restrict: 'E',\n            compile : function (element, attr) {\n                var code;\n                //No attribute? code is the content\n                if (!attr.code) {\n                    code = element.html();\n                    element.empty();\n                }\n\n                return function (scope, element, attr) {\n\n                    if (attr.code) {\n                        // Attribute? code is the evaluation\n                        code = scope.$eval(attr.code);\n                    }\n                    var shouldInterpolate = scope.$eval(attr.shouldInterpolate);\n\n                    $q.when(code).then(function (code) {\n                        if (code) {\n                            if (shouldInterpolate) {\n                                code = $interpolate(code)(scope);\n                            }\n                            var contentParent = angular.element(\n                                '<pre><code class=\"highlight\" ng-non-bindable></code></pre>'\n                            );\n                            element.append(contentParent);\n                            // Defer highlighting 1-frame to prevent GA interference...\n                            $timeout(function () {\n                                render(code, contentParent);\n                            }, 34, false);\n                        }\n                    });\n\n                    function render(contents, parent) {\n\n                        var codeElement = parent.find('code');\n                        var lines = contents.split('\\n');\n\n                        // Remove empty lines\n                        lines = lines.filter(function (line) {\n                            return line.trim().length;\n                        });\n\n                        // Make it so each line starts at 0 whitespace\n                        var firstLineWhitespace = lines[0].match(/^\\s*/)[0];\n                        var startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n                        lines = lines.map(function (line) {\n                            return line\n                                .replace(startingWhitespaceRegex, '')\n                                .replace(/\\s+$/, '');\n                        });\n\n                        var highlightedCode = hljs.highlight(attr.language || attr.lang, lines.join('\\n'), true);\n                        highlightedCode.value = highlightedCode.value\n                            .replace(/=<span class=\"hljs-value\">\"\"<\\/span>/gi, '')\n                            .replace('<head>', '')\n                            .replace('<head/>', '');\n                        codeElement.append(highlightedCode.value).addClass('highlight');\n                    }\n                };\n            }\n        };\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .provider('fuseConfig', fuseConfigProvider);\n\n    /** @ngInject */\n    function fuseConfigProvider()\n    {\n        // Default configuration\n        var fuseConfiguration = {\n            'disableCustomScrollbars'        : false,\n            'disableMdInkRippleOnMobile'     : true,\n            'disableCustomScrollbarsOnMobile': true\n        };\n\n        // Methods\n        this.config = config;\n\n        //////////\n\n        /**\n         * Extend default configuration with the given one\n         *\n         * @param configuration\n         */\n        function config(configuration)\n        {\n            fuseConfiguration = angular.extend({}, fuseConfiguration, configuration);\n        }\n\n        /**\n         * Service\n         */\n        this.$get = function ()\n        {\n            var service = {\n                getConfig: getConfig,\n                setConfig: setConfig\n            };\n\n            return service;\n\n            //////////\n\n            /**\n             * Returns a config value\n             */\n            function getConfig(configName)\n            {\n                if ( angular.isUndefined(fuseConfiguration[configName]) )\n                {\n                    return false;\n                }\n\n                return fuseConfiguration[configName];\n            }\n\n            /**\n             * Creates or updates config object\n             *\n             * @param configName\n             * @param configValue\n             */\n            function setConfig(configName, configValue)\n            {\n                fuseConfiguration[configName] = configValue;\n            }\n        };\n    }\n\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.toolbar', [])\n        .config(config);\n\n    /** @ngInject */\n    function config($translatePartialLoaderProvider, $stateProvider)\n    {\n        $translatePartialLoaderProvider.addPart('app/toolbar');\n    }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.toolbar')\n    .controller('ToolbarController', ToolbarController);\n\n  /** @ngInject */\n  function ToolbarController(api, $scope, $window, $rootScope, $q, $state, $timeout, $mdMenu, $mdSidenav, $translate, $mdToast, $cookies,\n                             msNavigationService, Session, PERMISSIONS, Version, AuthService, tmhDynamicLocale, hotkeys, SEARCH_MAX_LENGTH, WORKDAY_STATUSES,\n                             Support, $mdDialog, $document, BarcodeService) {\n\n    var vm = this;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n    vm.WORKDAY_STATUSES = WORKDAY_STATUSES;\n    vm.ACADEMY_LANGS = { 'es': 'es', 'en': 'en', 'ca': 'es', 'fr': 'en' };\n    vm.ACADEMY_URL = 'https://support.stockagile.com';\n\n    // Data\n    $rootScope.global = {\n      search: ''\n    };\n\n    $rootScope.$on('$translateChangeSuccess', function (event, data) {\n      vm.academyUrl = vm.ACADEMY_URL + '/' + vm.ACADEMY_LANGS[$translate.use()];\n    });\n\n    vm.academyUrl = vm.ACADEMY_URL;\n    vm.hasSession = !!Session.company;\n    vm.server_version = null;\n    vm.bodyEl = angular.element('body');\n    vm.version = Version.getVersion();\n    vm.menuItems = [];\n    vm.users = Session.listUsers();\n    vm.rootScope = $rootScope;\n    vm.companies = [];\n    vm.$translate = $translate;\n    vm.randomEmoji = null;\n    vm.companyName = '';\n    vm.autocompleteCompanies = false;\n    vm.companyInstance = null;\n    vm.userMdOpenMenu = null;\n    vm.companiesMdOpenMenu = null;\n    vm.currentCompanyName = '';\n    vm.trialExpired = Session.redirectFreemiumPage();\n    vm.hasSupportChat = false;\n\n    if (Session.showFreemiumBanner() && !vm.trialExpired) {\n      vm.menuItems.push({\n        title: 'Contact with sales',\n        translation: 'TRIAL_EXPIRED.CONTACT_WITH_SALES',\n        iconSvg: 'assets/images/custom-material-design-icons/face-agent.165ad4ee.svg',\n        state: 'app.support.trial_status_details',\n        class: 'md-amber-100-bg'\n      });\n    }\n\n    if (Session.hasPermission('app.account') && Session.hasPermission('app.account.users')) {\n      vm.menuItems.push({\n        title: 'Users',\n        translation: 'TOOLBAR.USERS',\n        iconSvg: 'assets/images/custom-material-design-icons/account-multiple-outline.e9088e4c.svg',\n        state: 'app.account.users',\n        disabled: vm.trialExpired\n      });\n    }\n\n    if (Session.hasPermission('app.inventory.configuration')) {\n      vm.menuItems.push({\n        title: 'Configuration',\n        translation: 'TOOLBAR.CONFIGURATION',\n        iconSvg: 'assets/images/custom-material-design-icons/cog-outline.cbf9c9ca.svg',\n        state: 'app.inventory.configuration.company',\n        disabled: vm.trialExpired\n      });\n    }\n\n    if (Session.hasPermission('app.account.subscription') && !Session.company.partner) {\n      vm.menuItems.push({\n        title: 'Subscription',\n        translation: 'TOOLBAR.SUBSCRIPTION',\n        icon: 'icon-credit-card',\n        state: 'app.account.subscription',\n        disabled: vm.trialExpired\n      });\n    }\n\n    if (Session.hasPermission('app.support.performance')) {\n      vm.menuItems.push({\n        title: 'Performance',\n        translation: 'TOOLBAR.PERFORMANCE',\n        icon: 'icon-speedometer',\n        state: 'app.support.performance',\n        disabled: vm.trialExpired\n      });\n    }\n\n    vm.languages = {\n      en: {\n        title: 'English',\n        translation: 'TOOLBAR.ENGLISH',\n        code: 'en',\n        flag: 'us',\n        locale: 'en-us'\n      },\n      es: {\n        title: 'Spanish',\n        translation: 'TOOLBAR.SPANISH',\n        code: 'es',\n        flag: 'es',\n        locale: 'es-es'\n      },\n      ca: {\n        title: 'Catalan',\n        translation: 'TOOLBAR.CATALAN',\n        code: 'ca',\n        flag: 'ca',\n        locale: 'ca-es'\n      },\n      fr: {\n        title: 'Français',\n        translation: 'TOOLBAR.FRENCH',\n        code: 'fr',\n        flag: 'fr',\n        locale: 'fr-fr'\n      }\n    };\n\n    // Methods\n    vm.toggleSidenav = toggleSidenav;\n    vm.logout = logout;\n    vm.changeLanguage = changeLanguage;\n    vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n    vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n    vm.search = search;\n    vm.searchResultClick = searchResultClick;\n    vm.goto = goto;\n    vm.changeUser = changeUser;\n    vm.setUserCompany = setUserCompany;\n    vm.openAcademy = openAcademy;\n    vm.goToChangelog = goToChangelog;\n    vm.showVersionBanner = showVersionBanner;\n    vm.refresh = refresh;\n    vm.getUsers = getUsers;\n    vm.getFilteredCompanies = getFilteredCompanies;\n    vm.companySearch = companySearch;\n    vm.displayNameFunction = displayNameFunction;\n    vm.supportButtonClicked = supportButtonClicked;\n    vm.isSignupFinished = isSignupFinished;\n    vm.finishSignup = finishSignup;\n    vm.requestBarcode = requestBarcode;\n    vm.toggleBarcodeServiceMode = toggleBarcodeServiceMode;\n\n    // Initialize\n    init();\n\n    function init() {\n      api.general.version.get(function(response) {\n        vm.server_version = response.version;\n      });\n\n      if (Session.user) {\n        // Set the lang of the user\n        $translate.use(Session.user.lang ? vm.languages[Session.user.lang].code : 'es');\n\n        if (Session.user.is_staff) {\n          vm.autocompleteCompanies = true;\n          hotkeys.add({\n            combo: 'ctrl+enter',\n            callback: function(event) {\n              if (Session.user.is_staff) {\n                vm.userMdOpenMenu();\n                $timeout(function() {\n                  vm.companiesMdOpenMenu();\n                }, 100);\n              }\n            }\n          });\n          hotkeys.add({\n            combo: 'ctrl+space',\n            callback: function(event) {\n              requestBarcode();\n            }\n          });\n        } else if (Session.user.has_multiple_companies) {\n          vm.autocompleteCompanies = false;\n          api.account.company.get(function(response, callback, status) {\n            vm.companies = response.results;\n          });\n        }\n      }\n\n      if (Session.company) {\n        vm.currentCompanyName = Session.company.name + ' ' + Session.company.id;\n      }\n\n      vm.hasSupportChat = !Session.hasSubscription || Session.hasFeature('app.support.chat');\n    }\n\n    function companySearch() {\n      var deferred = $q.defer();\n      vm.companyName = vm.companyName.substring(0, vm.SEARCH_MAX_LENGTH);\n      api.account.company.get(\n        {\n          search: vm.companyName\n        },\n        function(results) {\n          if (results.results) {\n            deferred.resolve(results.results);\n          } else {\n            deferred.resolve([]);\n          }\n        }\n      );\n      return deferred.promise;\n    }\n\n    function displayNameFunction(value) {\n      return value.name;\n    }\n\n    // Functions\n    function setUserCompany(companyId) {\n      api.account.company.save({\n        id: companyId,\n        option: 'set-user-company'\n      }, function(response, callback, status) {\n        $window.location.reload();\n      });\n    }\n\n    /**\n     * Toggle sidenav\n     *\n     * @param sidenavId\n     */\n    function toggleSidenav(sidenavId) {\n      $mdSidenav(sidenavId).toggle();\n    }\n\n    function openAcademy() {\n      Support.openAcademy();\n    }\n\n    /**\n     * Logout Function\n     */\n    function logout() {\n      Session.unsubscribeNotifications();\n      Session.removeUser(Session.user.username);\n      Session.destroy();\n      $state.go('app.pages_auth_login-v3');\n    }\n\n    /**\n     * Change Language\n     */\n    function changeLanguage(lang) {\n      // Change the language\n      $translate.use(lang.code);\n\n      api.account.users.save({\n        option: 'change-lang',\n        lang: lang.code,\n        id: Session.user.id\n      }, function(response, callback, status) {\n        // Nothing to do\n      });\n    }\n\n    /**\n     * Toggle horizontal mobile menu\n     */\n    function toggleHorizontalMobileMenu() {\n      vm.bodyEl.toggleClass('ms-navigation-horizontal-mobile-menu-active');\n    }\n\n    /**\n     * Toggle msNavigation folded\n     */\n    function toggleMsNavigationFolded() {\n      msNavigationService.toggleFolded();\n    }\n\n    /**\n     * Search action\n     *\n     * @param query\n     * @returns {Promise}\n     */\n    function search(query) {\n      var navigation = [],\n        flatNavigation = msNavigationService.getFlatNavigation(),\n        deferred = $q.defer();\n\n      // Iterate through the navigation array and\n      // make sure it doesn't have any groups or\n      // none ui-sref items\n      for (var x = 0; x < flatNavigation.length; x++) {\n        if (flatNavigation[x].uisref) {\n          navigation.push(flatNavigation[x]);\n        }\n      }\n\n      // If there is a query, filter the navigation;\n      // otherwise we will return the entire navigation\n      // list. Not exactly a good thing to do but it's\n      // for demo purposes.\n      if (query) {\n        navigation = navigation.filter(function(item) {\n          if (angular.lowercase(item.title).search(angular.lowercase(query)) > -1) {\n            return true;\n          }\n        });\n      }\n\n      // Fake service delay\n      $timeout(function() {\n        deferred.resolve(navigation);\n      }, 1000);\n\n      return deferred.promise;\n    }\n\n    /**\n     * Search result click action\n     *\n     * @param item\n     */\n    function searchResultClick(item) {\n      // If item has a link\n      if (item.uisref) {\n        // If there are state params,\n        // use them...\n        if (item.stateParams) {\n          $state.go(item.state, item.stateParams);\n        } else {\n          $state.go(item.state);\n        }\n      }\n    }\n\n    function goto(ui_serf) {\n      $state.go(ui_serf);\n    }\n\n    function changeUser(user) {\n      AuthService.changeUser(user);\n    }\n\n    function goToChangelog() {\n      // Modify the url to force the update of the angular app\n      window.location.href = $state.href('app.support.changelogs');\n    }\n\n    function showVersionBanner() {\n      return !vm.trialExpired && !!vm.server_version && !!vm.version && vm.server_version !== vm.version;\n    }\n\n    function refresh() {\n      location.reload();\n    }\n\n    function getUsers() {\n      if (Session.hasUpdates()) {\n        vm.users = Session.listUsers();\n      }\n\n      return vm.users;\n    }\n\n    function getFilteredCompanies() {\n      var search = vm.companyName.toLowerCase().normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n      return vm.companies.filter(function(company) {\n        return company.name.toLowerCase().normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').indexOf(search) !== -1;\n      });\n    }\n\n    function supportButtonClicked() {\n      if (vm.hasSupportChat) {\n        $mdSidenav('quick-panel').close();\n        Support.toggleChat();\n      } else {\n        $state.go('app.account.upgrade_plan', {\n          source: 'app.support.chat'\n        });\n      }\n    }\n\n    function isSignupFinished() {\n      if (!Session.isAuthenticated()) return true;\n\n      return Session.user.signup_finished;\n    }\n\n    function finishSignup(ev) {\n      if (!Session.isAuthenticated()) return;\n\n      api.account.signupTwo.get({\n        token: Session.user.signup_token\n      }, function(result, callback, status) {\n        $mdDialog.show({\n          controller: 'CompleteSignUpTwoDialogController',\n          controllerAs: 'vm',\n          templateUrl: 'app/main/pages/sign-up/validate-sign-up-two/dialogs/complete-sign-up-two-dialog.html',\n          parent: angular.element($document.find('body')),\n          targetEvent: ev,\n          clickOutsideToClose: true,\n          escapeToClose: true,\n          locals: {\n            SignupGetResult: result,\n            SignupGetStatus: status\n          }\n        }).then(function(response) {\n          Session.user.signup_finished = response.signupFinished;\n        });\n      });\n    }\n\n    function requestBarcode() {\n      if (BarcodeService.enabled) {\n        $rootScope.$broadcast('BarcodeService::requestBarcode');\n      } else {\n        $rootScope.$broadcast('ndBarcodeListener::requestBarcode');\n      }\n    }\n\n    function toggleBarcodeServiceMode() {\n      vm.rootScope.ndBarcodeListenerEnabledUdis = !vm.rootScope.ndBarcodeListenerEnabledUdis;\n      BarcodeService.toggleMode(BarcodeService.BARCODE_MODES.BARCODE, BarcodeService.BARCODE_MODES.UID);\n    }\n  }\n\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.quick-panel', [\n            'app.services.workday'\n        ])\n        .config(config);\n\n    /** @ngInject */\n    function config($translatePartialLoaderProvider, msApiProvider)\n    {\n        // Translation\n        $translatePartialLoaderProvider.addPart('app/quick-panel');\n    }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.quick-panel')\n    .controller('QuickPanelController', QuickPanelController);\n\n  /** @ngInject */\n  function QuickPanelController(msApi,\n                                $mdSidenav,\n                                $scope,\n                                $window,\n                                $timeout,\n                                $http,\n                                $state,\n                                $rootScope,\n                                WorkdayService,\n                                WORKDAY_STATUSES,\n                                SEARCH_MAX_LENGTH,\n                                Session) {\n    var vm = this;\n\n    $scope.WORKDAY_STATUSES = WORKDAY_STATUSES;\n    $scope.$state = $state;\n\n    // Cons\n    vm.SEARCH_MAX_LENGTH = SEARCH_MAX_LENGTH;\n\n    // Data\n    vm.date = new Date();\n    vm.workdayService = WorkdayService;\n    vm.settings = {\n      notify: true,\n      cloud: false,\n      retro: true\n    };\n    vm.posts = [];\n    vm.postsByState = {};\n    vm.postsFilter = '';\n    vm.selectedIndex = 0;\n    vm.hasWorkActivityFeature = false;\n\n    // Methods\n    vm.closeQuickPanel = closeQuickPanel;\n    vm.toDate = toDate;\n    vm.start = start;\n    vm.pause = pause;\n    vm.finish = finish;\n\n    // Initialize\n    init();\n\n    function init() {\n      vm.hasWorkActivityFeature = !Session.hasSubscription || Session.hasFeature('app.quick_panel.workday_activity');\n    }\n\n    // Functions\n    function toDate(date) {\n      return new Date(date);\n    }\n\n    function start() {\n      vm.workdayService.start(angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function pause() {\n      vm.workdayService.pause(angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function finish() {\n      vm.workdayService.finish(angular.copy(vm.notes));\n      vm.notes = null;\n    }\n\n    function closeQuickPanel(){\n      $mdSidenav('quick-panel').close();\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.navigation', [])\n        .config(config);\n\n    /** @ngInject */\n    function config()\n    {\n        \n    }\n\n})();\n(function () {\n  'use strict';\n\n  angular\n    .module('app.navigation')\n    .controller('SignUpNavigationController', SignUpNavigationController);\n\n  /** @ngInject */\n  function SignUpNavigationController($scope, msNavigationService) {\n\n    var vm = this;\n\n    // Data\n    vm.bodyEl = angular.element('body');\n    vm.folded = false;\n    vm.msScrollOptions = {\n      suppressScrollX: true\n    };\n\n    vm.appname = 'Stockagile';\n\n    // Methods\n    vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n\n    //////////\n\n    /**\n     * Toggle folded status\n     */\n    function toggleMsNavigationFolded() {\n      vm.folded = !vm.folded;\n    }\n\n    // Close the mobile menu on $stateChangeSuccess\n    $scope.$on('$stateChangeSuccess', function () {\n      vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\n    });\n\n    /**\n     * Start\n     */\n\n    msNavigationService.saveItem('start', {\n      title: 'NAVIGATION.START',\n      weight: 1,\n      state: 'app.analytics.start',\n      svgIcon: 'assets/images/custom-material-design-icons/home-outline.e6cef25a.svg',\n    });\n\n\n    /**\n     * ANALYTICS\n     */\n\n    msNavigationService.saveItem('analytics', {\n      title: 'NAVIGATION.ANALYTICS_MODULE',\n      icon: 'icon-chart-arc',\n      weight: 1,\n      class: 'analytics'\n    });\n\n    msNavigationService.saveItem('analytics.retail-dashboard', {\n      title: 'NAVIGATION.RETAIL_D',\n      state: 'app.analytics.retail_dashboard.realtime',\n    });\n\n\n    msNavigationService.saveItem('analytics.wholesale-dashboard', {\n      title: 'NAVIGATION.WHOLESALE_D',\n      state: 'app.analytics.wholesale_dashboard.realtime',\n    });\n\n\n    msNavigationService.saveItem('analytics.inventory-dashboard', {\n      title: 'NAVIGATION.INVENTORY_D',\n      state: 'app.analytics.inventory_dashboard.stocks',\n    });\n\n    msNavigationService.saveItem('analytics.report', {\n      translate: 'REPORTS.REPORTS',\n      title: 'Reports',\n      state: 'app.analytics.report',\n    });\n\n\n    /**\n     * CONTACTS\n     */\n\n    msNavigationService.saveItem('contacts', {\n      title: 'NAVIGATION.CONTACTS',\n      //group: true,\n      weight: 1,\n      state: 'app.contacts',\n      icon: 'icon-account-outline',\n      class: 'contacts'\n    });\n\n    /**\n     * INVENTORY\n     */\n\n    msNavigationService.saveItem('inventory', {\n      title: 'NAVIGATION.INVENTORY_MODULE',\n      icon: 'icon-package-variant-closed',\n      class: 'inventory'\n    });\n\n    msNavigationService.saveItem('inventory.collections', {\n      translate: 'NAVIGATION.COLLECTIONS',\n      title: 'Collections',\n      state: 'app.inventory.collections',\n    });\n\n    msNavigationService.saveItem('inventory.products', {\n      translate: 'NAVIGATION.PRODUCTS',\n      title: 'Products',\n      state: 'app.inventory.products',\n    });\n\n    msNavigationService.saveItem('inventory.variants', {\n      translate: 'NAVIGATION.VARIANTS',\n      title: 'Variants',\n      state: 'app.inventory.variants',\n    });\n\n    /*msNavigationService.saveItem('inventory.pricing', {\n      translate: 'NAVIGATION.PRICING',\n      title: 'Pricing',\n      state: 'app.inventory.pricing',\n    });*/\n\n    msNavigationService.saveItem('inventory.stocks', {\n      translate: 'NAVIGATION.STOCKS',\n      title: 'Stocks',\n      state: 'app.inventory.stocks',\n    });\n\n    msNavigationService.saveItem('inventory.stocktakings', {\n      translate: 'NAVIGATION.STOCKTAKINGS',\n      title: 'Stocktakings',\n      state: 'app.inventory.stocktakings',\n    });\n\n    msNavigationService.saveItem('inventory.purchases', {\n      translate: 'NAVIGATION.PURCHASES',\n      title: 'Purchases',\n      state: 'app.inventory.purchases',\n    });\n\n    msNavigationService.saveItem('inventory.transfers', {\n      translate: 'NAVIGATION.TRANSFERS',\n      title: 'Transfers',\n      state: 'app.inventory.transfers',\n    });\n\n    msNavigationService.saveItem('inventory.adjustments', {\n      translate: 'NAVIGATION.ADJUSTMENTS',\n      title: 'Adjustments',\n      state: 'app.inventory.adjustments',\n    });\n\n    /*msNavigationService.saveItem('contacts', {\n      translate: 'NAVIGATION.CONTACTS',\n      title: 'Contacts',\n      state: 'app.contacts',\n    });*/\n\n    msNavigationService.saveItem('inventory.warehouses', {\n      translate: 'NAVIGATION.LOCATIONS',\n      title: 'Warehouses',\n      state: 'app.inventory.warehouses',\n    });\n\n    /*msNavigationService.saveItem('inventory.labels-generator', {\n      translate: 'NAVIGATION.LABELS_GENERATOR',\n      title: 'Label Generator',\n      state: 'app.inventory.labels-generator',\n    });*/\n\n    /**\n     * MANUFACTURE\n     */\n\n    msNavigationService.saveItem('manufacture', {\n      title: 'NAVIGATION.MANUFACTURE_MODULE',\n      //group: true,\n      weight: 2,\n      icon: 'icon-factory',\n      class: 'manufacture'\n    });\n\n    msNavigationService.saveItem('manufacture.collections', {\n      translate: 'NAVIGATION.COLLECTIONS',\n      title: 'Collections',\n      state: 'app.manufacture.collections',\n    });\n\n    msNavigationService.saveItem('manufacture.materials', {\n      translate: 'NAVIGATION.MATERIALS',\n      title: 'Materials',\n      state: 'app.manufacture.materials',\n    });\n\n    msNavigationService.saveItem('manufacture.productions', {\n      translate: 'NAVIGATION.PRODUCTIONS',\n      title: 'Productions',\n      state: 'app.manufacture.productions',\n    });\n\n    /**\n     * WHOLESALE\n     */\n\n    msNavigationService.saveItem('wholesale', {\n      title: 'NAVIGATION.WHOLESALE_MODULE',\n      //group: true,\n      weight: 4,\n      svgIcon: 'assets/images/custom-material-design-icons/warehouse.1e982d37.svg',\n      class: 'wholesale'\n    });\n\n    msNavigationService.saveItem('wholesale.sales', {\n      translate: 'NAVIGATION.SALES',\n      title: 'Sales',\n      state: 'app.wholesale.sales',\n    });\n\n    msNavigationService.saveItem('wholesale.deliveries', {\n      translate: 'NAVIGATION.DELIVERIES',\n      title: 'Deliveries',\n      state: 'app.wholesale.deliveries',\n    });\n\n    msNavigationService.saveItem('wholesale.b2b_ecommerce', {\n      translate: 'NAVIGATION.B2B_ECOMMERCE',\n      title: 'B2B Ecommerce',\n      state: 'app.wholesale.b2b_ecommerce',\n    });\n\n    /**\n     * SALE\n     */\n\n    msNavigationService.saveItem('sale', {\n      title: 'NAVIGATION.RETAIL_MODULE',\n      //group: true,\n      weight: 4,\n      svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n      class: 'sale'\n    });\n\n    msNavigationService.saveItem('sale.sell', {\n      translate: 'NAVIGATION.SELL',\n      title: 'Sell',\n      state: 'app.sale.sell',\n    });\n\n    msNavigationService.saveItem('sale.sales_log', {\n      translate: 'NAVIGATION.SALES_LOG',\n      title: 'Sales Log',\n      state: 'app.sale.sales_log',\n    });\n\n    /*msNavigationService.saveItem('sale.registers', {\n      translate: 'NAVIGATION.REGISTERS',\n      title: 'Registers',\n      state: 'app.sale.registers',\n    });*/\n\n    msNavigationService.saveItem('sale.register_closures', {\n      translate: 'NAVIGATION.REGISTER_CLOSURES',\n      title: 'Register Closures',\n      state: 'app.sale.register_closures',\n    });\n\n    msNavigationService.saveItem('sale.customers', {\n      translate: 'NAVIGATION.CUSTOMERS',\n      title: 'Cash Management',\n      state: 'app.sale.customers',\n    });\n\n    msNavigationService.saveItem('sale.goals', {\n      translate: 'NAVIGATION.GOALS',\n      title: 'Goals',\n      state: 'app.sale.goals',\n    });\n\n    msNavigationService.saveItem('sale.gift-cards', {\n      translate: 'NAVIGATION.GIFT_CARDS',\n      title: 'Gift Cards',\n      state: 'app.sale.gift-cards',\n    });\n\n    msNavigationService.saveItem('sale.promotions', {\n      translate: 'NAVIGATION.PROMOTIONS',\n      title: 'Promotions',\n      state: 'app.sale.promotions',\n    });\n\n\n    /**\n     * ECOMMERCE\n     */\n\n    msNavigationService.saveItem('ecommerce', {\n      title: 'NAVIGATION.ECOMMERCE_MODULE',\n      //group: true,\n      weight: 5,\n      icon: 'icon-laptop',\n      class: 'ecommerce'\n    });\n\n    msNavigationService.saveItem('ecommerce.sites', {\n      translate: 'NAVIGATION.CHANNELS',\n      title: 'Channels',\n      state: 'app.ecommerce.sites',\n    });\n\n    msNavigationService.saveItem('ecommerce.orders', {\n      translate: 'NAVIGATION.ORDERS',\n      title: 'Orders',\n      state: 'app.ecommerce.orders',\n    });\n\n    msNavigationService.saveItem('ecommerce.sorting', {\n      translate: 'NAVIGATION.SORTING',\n      title: 'Sorting',\n      state: 'app.ecommerce.sorting',\n    });\n\n    /**\n     * ACCOUNTING\n     */\n\n    msNavigationService.saveItem('accounting', {\n      title: 'NAVIGATION.ACCOUNTING_MODULE',\n      //group: true,\n      weight: 5,\n      svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg',\n      class: 'accounting'\n    });\n\n    msNavigationService.saveItem('accounting.invoices', {\n      translate: 'NAVIGATION.INVOICES',\n      title: 'Invoices',\n      state: 'app.accounting.invoices',\n    });\n\n    msNavigationService.saveItem('accounting.proformas', {\n      translate: 'NAVIGATION.PROFORMAS',\n      title: 'Invoices',\n      state: 'app.accounting.proformas',\n    });\n\n    msNavigationService.saveItem('accounting.quotes', {\n      translate: 'NAVIGATION.QUOTES',\n      title: 'Invoices',\n      state: 'app.accounting.quotes',\n    });\n\n    msNavigationService.saveItem('accounting.payments', {\n      translate: 'NAVIGATION.PAYMENTS',\n      title: 'Payments',\n      state: 'app.accounting.payments',\n    });\n\n    /**\n     * APPS\n     */\n     msNavigationService.saveItem('apps', {\n      translate: 'NAVIGATION.APPS',\n      title: 'Apps',\n      //group: true,\n      weight: 5,\n      state: 'app.integration_apps.apps',\n      permission: 'app.integration_apps',\n      svgIcon: 'assets/images/custom-material-design-icons/shape-plus.f33dffff.svg',\n      class: 'accounting'\n    });\n\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('app.navigation')\n    .controller('NavigationController', NavigationController);\n\n  /** @ngInject */\n  function NavigationController($scope, Session, msNavigationService, $filter) {\n\n    var vm = this;\n\n    // Data\n    vm.bodyEl = angular.element('body');\n    vm.folded = false;\n    vm.msScrollOptions = {\n      suppressScrollX: true\n    };\n\n    // Methods\n    vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n\n    //////////\n\n    /**\n     * Toggle folded status\n     */\n    function toggleMsNavigationFolded() {\n      vm.folded = !vm.folded;\n    }\n\n    // Close the mobile menu on $stateChangeSuccess\n    $scope.$on('$stateChangeSuccess', function() {\n      vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\n    });\n\n    addStartNavigation();\n    addAnalyticsNavigation();\n    addContactsNavigation();\n    addCatalogNavigation();\n    addInventoryNavigation();\n    addPlanningNavigation();\n    addWholesaleNavigation();\n    addRetailNavigation();\n    addEcommerceNavigation();\n    addAccountingNavigation();\n\n    function addStartNavigation() {\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.start') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('start', {\n          title: 'NAVIGATION.START',\n          weight: 1,\n          state: 'app.analytics.start',\n          permission: 'app.analytics.start',\n          svgIcon: 'assets/images/custom-material-design-icons/home-outline.e6cef25a.svg'\n        });\n      }\n    }\n\n    function addAnalyticsNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.analytics.health',\n        'app.analytics.inventory.overview',\n        'app.analytics.sales',\n        'app.analytics.retail_dashboard.realtime',\n        'app.analytics.wholesale_dashboard.realtime',\n        'app.analytics.report'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics', {\n          title: 'NAVIGATION.ANALYTICS_MODULE',\n          permission: 'app.analytics',\n          icon: 'icon-chart-arc',\n          weight: 1,\n          class: 'analytics'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.health') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.health', {\n          title: 'NAVIGATION.HEALTH',\n          state: 'app.analytics.health',\n          permission: 'app.analytics.health'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.inventory.overview') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.inventory', {\n          title: 'NAVIGATION.INVENTORY_D',\n          state: 'app.analytics.inventory.overview',\n          permission: 'app.analytics.inventory.overview'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.sales') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.sales', {\n          title: 'NAVIGATION.SALE_ANALYTICS',\n          state: 'app.analytics.sales',\n          permission: 'app.analytics.sales',\n          newFeatureBadge: 'SALES_DYNAMIC_REPORTS'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.products') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.products', {\n          title: 'NAVIGATION.PRODUCTS',\n          state: 'app.analytics.products',\n          permission: 'app.analytics.products',\n          newFeatureBadge: 'PRODUCTS_DYNAMIC_REPORTS'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.retail_dashboard.realtime') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.retail-dashboard', {\n          title: 'NAVIGATION.RETAIL_D',\n          state: 'app.analytics.retail_dashboard.realtime',\n          permission: 'app.analytics.retail_dashboard.realtime'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.wholesale_dashboard.realtime') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.wholesale-dashboard', {\n          title: 'NAVIGATION.WHOLESALE_D',\n          state: 'app.analytics.wholesale_dashboard.realtime',\n          permission: 'app.analytics.wholesale_dashboard.realtime'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.analytics.report') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('analytics.report', {\n          translate: 'REPORTS.REPORTS',\n          title: 'Reports',\n          state: 'app.analytics.report',\n          permission: 'app.analytics.report'\n        });\n      }\n    }\n\n    function addContactsNavigation() {\n      if (!Session.hasSubscription || Session.hasFeature('app.contacts') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('contacts', {\n          title: 'NAVIGATION.CONTACTS',\n          //group: true,\n          weight: 1,\n          permission: 'app.contacts',\n          state: 'app.contacts',\n          icon: 'icon-account-outline',\n          class: 'contacts'\n        });\n      }\n    }\n\n    function addCatalogNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.inventory.collections',\n        'app.inventory.products',\n        'app.inventory.variants',\n        'app.inventory.product_bundles',\n        'app.manufacture.materials',\n        'app.inventory.product-locations'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog', {\n          title: 'NAVIGATION.CATALOG',\n          permission: 'app.inventory',\n          icon: 'icon-tag-text-outline',\n          class: 'catalog'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.collections') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.collections', {\n          translate: 'NAVIGATION.COLLECTIONS',\n          title: 'Collections',\n          state: 'app.inventory.collections',\n          permission: 'app.inventory.collections'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.products') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.products', {\n          translate: 'NAVIGATION.PRODUCTS',\n          title: 'Products',\n          state: 'app.inventory.products',\n          permission: 'app.inventory.products'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.variants') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.variants', {\n          translate: 'NAVIGATION.VARIANTS',\n          title: 'Variants',\n          state: 'app.inventory.variants',\n          permission: 'app.inventory.variants'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.product_bundles') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.product_bundles', {\n          translate: 'NAVIGATION.PRODUCT_BUNDLES',\n          title: 'Product bundles',\n          state: 'app.inventory.product_bundles',\n          permission: 'app.inventory.product_bundles'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.manufacture.materials') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.materials', {\n          translate: 'NAVIGATION.MATERIALS',\n          title: 'Materials',\n          state: 'app.manufacture.materials',\n          permission: 'app.manufacture.materials'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.product-locations') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('catalog.product_locations', {\n          translate: 'NAVIGATION.PRODUCT_LOCATIONS',\n          title: 'Locations',\n          state: 'app.inventory.product-locations',\n          permission: 'app.inventory.product-locations',\n          newFeatureBadge: 'NEW_PRODUCT_LOCATIONS'\n        });\n      }\n    }\n\n    function addInventoryNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.inventory.warehouses',\n        'app.inventory.stocks',\n        'app.inventory.uids',\n        'app.inventory.stocktakings',\n        'app.manufacture.productions',\n        'app.inventory.purchases',\n        'app.inventory.transfers',\n        'app.inventory.adjustments',\n        'app.inventory.pickings'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory', {\n          title: 'NAVIGATION.INVENTORY_MODULE',\n          permission: 'app.inventory',\n          icon: 'icon-package-variant-closed',\n          class: 'inventory'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.warehouses') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.warehouses', {\n          translate: 'NAVIGATION.LOCATIONS',\n          title: 'Warehouses',\n          state: 'app.inventory.warehouses',\n          permission: 'app.inventory.warehouses',\n          newFeatureBadge: 'NEW_STOCK_LOCATIONS'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.stocks') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.stocks', {\n          translate: 'NAVIGATION.STOCKS',\n          title: 'Stocks',\n          state: 'app.inventory.stocks',\n          permission: 'app.inventory.stocks'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.uids') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.uids', {\n          translate: 'NAVIGATION.UIDS',\n          title: 'UIDs',\n          state: 'app.inventory.uids',\n          permission: 'app.inventory.uids'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.stocktakings') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.stocktakings', {\n          translate: 'NAVIGATION.STOCKTAKINGS',\n          title: 'Stocktakings',\n          state: 'app.inventory.stocktakings',\n          permission: 'app.inventory.stocktakings'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.manufacture.productions') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.productions', {\n          translate: 'NAVIGATION.PRODUCTIONS',\n          title: 'Productions',\n          state: 'app.manufacture.productions',\n          permission: 'app.manufacture.productions'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.purchases') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.purchases', {\n          translate: 'NAVIGATION.PURCHASES',\n          title: 'Purchases',\n          state: 'app.inventory.purchases',\n          permission: 'app.inventory.purchases'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.transfers') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.transfers', {\n          translate: 'NAVIGATION.TRANSFERS',\n          title: 'Transfers',\n          state: 'app.inventory.transfers',\n          permission: 'app.inventory.transfers'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.adjustments') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.adjustments', {\n          translate: 'NAVIGATION.ADJUSTMENTS',\n          title: 'Adjustments',\n          state: 'app.inventory.adjustments',\n          permission: 'app.inventory.adjustments'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.inventory.picking_packing') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('inventory.pickings-packing', {\n          translate: 'NAVIGATION.PICKING_PACKING',\n          title: 'Picking&Packing',\n          state: 'app.inventory.picking_packing',\n          permission: 'app.inventory.pickings'\n        });\n      }\n    }\n\n    function addPlanningNavigation() {\n      if (Session.company.has_inventory_analytics) {\n        msNavigationService.saveItem('planning', {\n          title: 'NAVIGATION.PLANNING_MODULE',\n          //group: true,\n          weight: 2,\n          permission: 'app.planning',\n          svgIcon: 'assets/images/custom-material-design-icons/chart-timeline-variant-shimmer.f4b01ffc.svg',\n          class: 'planning'\n        });\n        if (!Session.hasSubscription || Session.hasFeature('app.planning.replenishment') || !Session.company.hide_upgrade_features_in_menu) {\n          msNavigationService.saveItem('planning.replenishment', {\n            translate: 'NAVIGATION.REPLENISHMENT',\n            title: 'Replenishment',\n            state: 'app.planning.replenishment',\n            permission: 'app.planning.replenishment'\n          });\n        }\n        if (!Session.hasSubscription || Session.hasFeature('app.planning.reorder') || !Session.company.hide_upgrade_features_in_menu) {\n          msNavigationService.saveItem('planning.reorder', {\n            translate: 'NAVIGATION.REORDER',\n            title: 'Reorder',\n            state: 'app.planning.reorder',\n            permission: 'app.planning.reorder'\n          });\n        }\n        msNavigationService.saveItem('planning.rebalancing', {\n          translate: 'NAVIGATION.REBALANCING',\n          title: 'Rebalancing',\n          state: 'app.planning.rebalancing',\n          disabled: true\n          // permission: 'app.planning.rebalancing'\n        });\n        msNavigationService.saveItem('planning.buying', {\n          translate: 'NAVIGATION.BUYING',\n          title: 'Buying',\n          state: 'app.planning.buying',\n          disabled: true\n          // permission: 'app.planning.buying'\n        });\n      }\n    }\n\n    function addWholesaleNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.wholesale.presales',\n        'app.wholesale.sales',\n        'app.wholesale.deliveries',\n        'app.wholesale.b2b_ecommerces'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale', {\n          title: 'NAVIGATION.WHOLESALE_MODULE',\n          //group: true,\n          weight: 4,\n          permission: 'app.wholesale',\n          svgIcon: 'assets/images/custom-material-design-icons/warehouse.1e982d37.svg',\n          class: 'wholesale'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.presales') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.presales', {\n          translate: 'NAVIGATION.PRESALES',\n          title: 'Presales',\n          state: 'app.wholesale.presales',\n          permission: 'app.wholesale.presales'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.sales') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.sales', {\n          translate: 'NAVIGATION.SALES',\n          title: 'Sales',\n          state: 'app.wholesale.sales',\n          permission: 'app.wholesale.sales',\n          newFeatureBadge: 'SALES_DTO'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.deliveries') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.deliveries', {\n          translate: 'NAVIGATION.DELIVERIES',\n          title: 'Deliveries',\n          state: 'app.wholesale.deliveries',\n          permission: 'app.wholesale.deliveries'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.wholesale.b2b_ecommerces') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('wholesale.b2b_ecommerces', {\n          translate: 'NAVIGATION.B2B_ECOMMERCES',\n          title: 'B2BS Ecommerce',\n          state: 'app.wholesale.b2b_ecommerces',\n          permission: 'app.wholesale.b2b_ecommerces'\n        });\n      }\n    }\n\n    function addRetailNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.sale.sell',\n        'app.sale.sales_log',\n        'app.sale.register_closures',\n        'app.sale.customers',\n        'app.sale.goals',\n        'app.sale.gift-cards',\n        'app.sale.promotions'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale', {\n          title: 'NAVIGATION.RETAIL_MODULE',\n          //group: true,\n          weight: 4,\n          permission: 'app.sale',\n          svgIcon: 'assets/images/custom-material-design-icons/store-outline.583690c9.svg',\n          class: 'sale'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.sell') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.sell', {\n          translate: 'NAVIGATION.SELL',\n          title: 'Sell',\n          state: 'app.sale.sell',\n          permission: 'app.sale.sell'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.sales_log') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.sales_log', {\n          translate: 'NAVIGATION.SALES_LOG',\n          title: 'Sales Log',\n          state: 'app.sale.sales_log',\n          permission: 'app.sale.sales_log'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.register_closures') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.register_closures', {\n          translate: 'NAVIGATION.REGISTER_CLOSURES',\n          title: 'Register Closures',\n          state: 'app.sale.register_closures',\n          permission: 'app.sale.register_closures'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.customers') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.customers', {\n          translate: 'NAVIGATION.CUSTOMERS',\n          title: 'Cash Management',\n          state: 'app.sale.customers',\n          permission: 'app.sale.customers'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.goals') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.goals', {\n          translate: 'NAVIGATION.GOALS',\n          title: 'Goals',\n          state: 'app.sale.goals',\n          permission: 'app.sale.goals'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.gift-cards') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.gift-cards', {\n          translate: 'NAVIGATION.GIFT_CARDS',\n          title: 'Gift Cards',\n          state: 'app.sale.gift-cards',\n          permission: 'app.sale.gift-cards'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.sale.promotions') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('sale.promotions', {\n          translate: 'NAVIGATION.PROMOTIONS',\n          title: 'Promotions',\n          state: 'app.sale.promotions',\n          permission: 'app.sale.promotions'\n        });\n      }\n    }\n\n    function addEcommerceNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.ecommerce.sites',\n        'app.ecommerce.orders',\n        'app.ecommerce.picking',\n        'app.ecommerce.scan_and_go'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce', {\n          title: 'NAVIGATION.ECOMMERCE_MODULE',\n          //group: true,\n          weight: 5,\n          permission: 'app.ecommerce',\n          icon: 'icon-laptop',\n          class: 'ecommerce'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.sites') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.sites', {\n          translate: 'NAVIGATION.CHANNELS',\n          title: 'Channels',\n          state: 'app.ecommerce.sites',\n          permission: 'app.ecommerce.sites'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.orders') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.orders', {\n          translate: 'NAVIGATION.ORDERS',\n          title: 'Orders',\n          state: 'app.ecommerce.orders',\n          permission: 'app.ecommerce.orders'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.picking') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.picking', {\n          translate: 'NAVIGATION.PICKING',\n          title: 'Picking',\n          state: 'app.ecommerce.picking',\n          permission: 'app.ecommerce.picking'\n\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.ecommerce.scan_and_go') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('ecommerce.scan_and_go', {\n          translate: 'NAVIGATION.SCAN_AND_GO',\n          title: 'Scan & Go',\n          state: 'app.ecommerce.scan_and_go',\n          permission: 'app.ecommerce.scan_and_go'\n        });\n      }\n    }\n\n    function addAccountingNavigation() {\n      if (!Session.hasSubscription || Session.hasAnyFeature([\n        'app.accounting.invoices',\n        'app.accounting.proformas',\n        'app.accounting.quotes',\n        'app.accounting.payments',\n        'app.integration_apps'\n      ]) || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting', {\n          title: 'NAVIGATION.ACCOUNTING_MODULE',\n          //group: true,\n          weight: 5,\n          permission: 'app.accounting',\n          svgIcon: 'assets/images/custom-material-design-icons/file-document-outline.0472566f.svg',\n          class: 'accounting'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.invoices') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.invoices', {\n          translate: 'NAVIGATION.INVOICES',\n          title: 'Invoices',\n          state: 'app.accounting.invoices',\n          permission: 'app.accounting.invoices'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.proformas') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.proformas', {\n          translate: 'NAVIGATION.PROFORMAS',\n          title: 'Invoices',\n          state: 'app.accounting.proformas',\n          permission: 'app.accounting.proformas'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.quotes') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.quotes', {\n          translate: 'NAVIGATION.QUOTES',\n          title: 'Invoices',\n          state: 'app.accounting.quotes',\n          permission: 'app.accounting.quotes'\n        });\n      }\n      if (!Session.hasSubscription || Session.hasFeature('app.accounting.payments') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('accounting.payments', {\n          translate: 'NAVIGATION.PAYMENTS',\n          title: 'Payments',\n          state: 'app.accounting.payments',\n          permission: 'app.accounting.payments'\n        });\n      }\n\n      if (!Session.hasSubscription || Session.hasFeature('app.integration_apps.apps') || !Session.company.hide_upgrade_features_in_menu) {\n        msNavigationService.saveItem('integration_apps', {\n          translate: 'NAVIGATION.APPS',\n          title: 'Apps',\n          weight: 5,\n          state: 'app.integration_apps.apps',\n          permission: 'app.integration_apps',\n          svgIcon: 'assets/images/custom-material-design-icons/shape-plus.f33dffff.svg',\n          class: 'integration_apps'\n        });\n      }\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('app.preview-panel')\n    .controller('PreviewPanelController', PreviewPanelController);\n    \n  /** @ngInject */\n  function PreviewPanelController($mdSidenav, $rootScope) {\n    \n    var vm = this;\n    vm.loading = true;\n    vm.preview = '';\n    vm.previewTemplate = '';\n    vm.params = {};\n    \n    // Methods\n\n    // Initialization\n    initialize();\n  \n    // Functions\n    function initialize(){\n      $rootScope.$on('previewPanel::open', function(event, params){\n        vm.loading = true;\n        vm.preview = params.preview;\n        vm.previewTemplate = 'app/preview-panel/previews/' + params.preview + '/' + params.preview + '.html';\n        vm.params = params.params;    \n        $mdSidenav('preview-panel').onClose(function() {\n            vm.loading = true;\n            vm.preview = '';\n            vm.previewTemplate = '';\n            vm.params = {};\n            $rootScope.$broadcast('previewPanel::close');\n        });\n        $mdSidenav('preview-panel').open();\n      });\n      \n      $rootScope.$on('previewPanel::loaded', function(event, params){\n        vm.loading = false;\n      });\n    }\n  }\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .controller('MainController', MainController);\n\n  /** @ngInject */\n  function MainController($scope, $rootScope, $window, Session) {\n    // Data\n\n    // Offline connexion alert\n    $scope.userName = '';\n    $scope.remainingDays = '';\n    $scope.showFreemiumBanner = '';\n\n    $scope.hideFreemiumBanner = hideFreemiumBanner;\n\n    init();\n\n    function init() {\n\n      // Remove the splash screen\n      $scope.$on('$viewContentAnimationEnded', function (event) {\n        if (event.targetScope.$id === $scope.$id) {\n          $rootScope.$broadcast('msSplashScreen::remove');\n        }\n      });\n\n      if (Session.showFreemiumBanner()) {\n        $scope.userName = Session.user.first_name;\n        $scope.remainingDays = Session.company.trial_remaining_days;\n        $scope.showFreemiumBanner = true;\n      }\n\n      if ($scope.remainingDays < 1) {\n        // TODO redirect screen\n      }\n    }\n\n\n    function hideFreemiumBanner() {\n      $scope.showFreemiumBanner = false;\n    }\n  }\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .run(runBlock);\n\n    /** @ngInject */\n    function runBlock(msUtils, fuseGenerator, fuseConfig)\n    {\n        /**\n         * Generate extra classes based on registered themes so we\n         * can use same colors with non-angular-material elements\n         */\n        fuseGenerator.generate();\n\n        /**\n         * Disable md-ink-ripple effects on mobile\n         * if 'disableMdInkRippleOnMobile' config enabled\n         */\n        if ( fuseConfig.getConfig('disableMdInkRippleOnMobile') && msUtils.isMobile() )\n        {\n            var bodyEl = angular.element('body');\n            bodyEl.attr('md-no-ink', true);\n        }\n\n        /**\n         * Put isMobile() to the html as a class\n         */\n        if ( msUtils.isMobile() )\n        {\n            angular.element('html').addClass('is-mobile');\n        }\n\n        /**\n         * Put browser information to the html as a class\n         */\n        var browserInfo = msUtils.detectBrowser();\n        if ( browserInfo )\n        {\n            var htmlClass = browserInfo.browser + ' ' + browserInfo.version + ' ' + browserInfo.os;\n            angular.element('html').addClass(htmlClass);\n        }\n    }\n})();\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('app.core')\n        .config(config);\n\n    /** @ngInject */\n    function config($ariaProvider, $logProvider, msScrollConfigProvider, fuseConfigProvider)\n    {\n        // Enable debug logging\n        $logProvider.debugEnabled(true);\n\n        /*eslint-disable */\n\n        // ng-aria configuration\n        $ariaProvider.config({\n            tabindex: false\n        });\n\n        // Fuse theme configurations\n        fuseConfigProvider.config({\n            'disableCustomScrollbars'        : true,\n            'disableCustomScrollbarsOnMobile': true,\n            'disableMdInkRippleOnMobile'     : true\n        });\n\n        // msScroll configuration\n        msScrollConfigProvider.config({\n            wheelPropagation: false\n        });\n\n        /*eslint-enable */\n    }\n})();\n\n(function() {\n  'use strict';\n\n  angular.module('fuse').run(runBlock);\n\n  /** @ngInject */\n  function runBlock($rootScope, $timeout, $state, $location, $filter, $mdDialog, $cookies, Session, apiResolver, editableThemes, Version, api, HTTP_STATUS, TrackerService, FeatureService, BarcodeService) {\n\n    $rootScope.session = Session;\n    $rootScope.BarcodeService = BarcodeService;\n    $rootScope.state = $state;\n\n    // Data\n    var stateChangeStartEvent;\n    var stateChangeSuccessEvent;\n    var showTermsDialogEvent;\n    var showTermsDialogOpened = false;\n\n    // TODO check if it's used, delete if not\n    // 3rd Party Dependencies -> Angular-xeditable: https://vitalets.github.io/angular-xeditable/#\n    editableThemes.default.submitTpl = '<md-button class=\"md-icon-button no-padding\" type=\"submit\" aria-label=\"save\"><md-icon md-font-icon=\"icon-checkbox-marked-circle\" class=\"md-accent-fg md-hue-1\"></md-icon></md-button>';\n    editableThemes.default.cancelTpl = '<md-button class=\"md-icon-button no-padding\" ng-click=\"$form.$cancel()\" aria-label=\"cancel\"><md-icon md-font-icon=\"icon-close-circle\" class=\"icon-cancel\"></md-icon></md-button>';\n\n    // Initialize\n    init();\n\n    // Functions\n    function init() {\n      // Session initialization\n      Session.loadFromStorage();\n\n      // This is to logout the company user if we log with the contact token\n      if ($location.path().indexOf('/hub') === 0) {\n        if (Session.isAuthenticated()) {\n          Session.removeUser(Session.user.username);\n          Session.destroy();\n        }\n        var token = $location.search()['t'];\n        if (token) {\n          var now = new Date();\n          var expireDate = new Date(now);\n          expireDate.setDate(now.getDate() + 1);\n          $cookies.put('contact_token', token, {\n            'expires': expireDate,\n            'domain': api.baseDomainCookie\n          });\n        }\n      }\n\n      if (!Session.isAuthenticated()) {\n        if ($location.path().indexOf('/ecommerce/sites/') === 0 || $location.path().indexOf('/shopify/success') === 0 || $location.path().indexOf('/shopify/new-site') === 0) {\n          if ($location.path().indexOf('/ecommerce/sites/') === 0) {\n            $location.path('/shopify/success');\n          }\n        } else if ($location.path() === '/sign-up' || $location.path() === '/sign-up-two' || $location.path().indexOf('/validate-sign-up') === 0 || $location.path().indexOf('/validate-sign-up-two') === 0 || $location.path().indexOf('/reset-password') === 0 || $location.path().indexOf('/hub') === 0) {\n          // Nothing to do\n        } else {\n          if ($location.path() !== '/' && $location.path() !== '/login') {\n            sessionStorage.setItem('afterLoginUrl', $location.path());\n          } else {\n            sessionStorage.removeItem('afterLoginUrl');\n          }\n          $location.path('/login');\n        }\n      } else {\n        Session.loadFromServer(apiResolver).then(function() {\n          afterLoadFromServer();\n        });\n      }\n\n      // Listeners and Cleanup\n      stateChangeStartEvent = $rootScope.$on('$stateChangeStart', stateChangeStart);\n      stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', stateChangeSuccess);\n\n      $rootScope.$on('$destroy', destroy);\n      showTermsDialogEvent = $rootScope.$on('runBlock::showTermsAndConditionsDialog', showTermsAndConditionDialog);\n      showTermsDialogEvent = $rootScope.$on('runBlock::checkNetPromoterScore', checkNetPromoterScore);\n\n      try {\n        if (api.environment === 'production') {\n          elasticApm.init({\n            serviceName: 'panel',\n            serverUrl: 'https://monitoring.stockagile.com',\n            environment: api.environment,\n            disableInstrumentations: ['page-load', 'history', 'click', 'xmlhttprequest', 'fetch']\n          });\n        }\n      } catch (error) {\n        console.error('failed to init apm');\n      }\n\n      TrackerService.initMixpanel('cae57144c5895eefdcfd3b7d1a0067de');\n      $timeout(function() {\n        TrackerService.track($state.current.name);\n      }, 1000);\n    }\n\n    function afterLoadFromServer() {\n      // Check auth again and precede\n      if (!Session.isAuthenticated()) {\n        $location.path('/login');\n      } else if ($location.$$path === '/') {\n        if (Session.redirectFreemiumPage()) {\n          $state.go('app.pages_trial_expired');\n        } else {\n          $location.path('/analytics/start');\n        }\n      } else {\n        if (Session.redirectFreemiumPage()) {\n          $state.go('app.pages_trial_expired');\n        } else {\n          $location.path($location.path());\n        }\n      }\n      checkShowTermsAndConditionDialog();\n    }\n\n    function stateChangeStart(event, toState, toParams, fromState, fromParams) {\n      try {\n        $mdDialog.hide();\n      } catch (error) {\n        // No dialog is open, continue normally\n      }\n\n      // Activate loading indicator\n      $rootScope.loadingProgress = true;\n\n      var hasPermission = checkSessionPermission(event, toState.name);\n      TrackerService.track(toState.name, {\n        has_permission: hasPermission\n      });\n    }\n\n    function stateChangeSuccess() {\n      // De-activate loading indicator\n      $timeout(function() {\n        $rootScope.loadingProgress = false;\n      });\n    }\n\n    function checkSessionPermission(event, appName) {\n      var redirectState = null;\n      var redirectParams = {};\n      var sourceStateParams = null;\n\n      if (event && event.targetScope && event.targetScope.state) {\n        sourceStateParams = event.targetScope.state.params;\n      }\n      if (Session.redirectFreemiumPage() && appName !== 'app.pages_trial_expired') {\n        console.warn(appName + ' not allowed: trial expired');\n        redirectState = 'app.pages_trial_expired';\n      } else if (Session.hasPermission(appName)) {\n        if (Session.hasSubscription) {\n          if (!Session.hasFeature(appName)) {\n            if (Session.isAddOn(appName)) {\n              if (!Session.hasAddOn(appName)) {\n                console.warn(appName + ' not allowed: without add-on');\n                redirectState = 'app.account.upgrade_plan';\n                redirectParams = {\n                  source: appName,\n                  sourceStateParams: sourceStateParams,\n                  addOnId: Session.getAddOn(appName).id,\n                  addOnCode: Session.getAddOn(appName).code,\n                  feature: FeatureService.getFeatureName(appName) // if the user shares the URL\n                };\n              }\n            } else {\n              console.warn(appName + ' not allowed: without feature');\n              redirectState = 'app.account.upgrade_plan';\n              redirectParams = {\n                source: appName, sourceStateParams: sourceStateParams, feature: FeatureService.getFeatureName(appName) // if the user shares the URL\n              };\n            }\n          }\n        }\n      } else {\n        console.warn(appName + ' not allowed: without permissioin');\n        redirectState = getStateToRedirect();\n      }\n\n      if (redirectState && redirectState !== appName) {\n        event.preventDefault();\n        $state.go(redirectState, redirectParams);\n        return false;\n      }\n      return true;\n    }\n\n    function getStateToRedirect() {\n      if (Session.hasPermission('app.analytics.retail_dashboard.realtime')) {\n        return 'app.analytics.retail_dashboard.realtime';\n      } else if (Session.hasPermission('app.sale')) {\n        return 'app.sale.sell';\n      } else if (Session.hasPermission('app.wholesale')) {\n        return 'app.wholesale.sales';\n      } else if (Session.hasPermission('app.manufacture')) {\n        return 'app.manufacture.productions';\n      }\n      return null; //'app.analytics.start';\n    }\n\n    function destroy() {\n      if (stateChangeStartEvent) {\n        stateChangeStartEvent();\n      }\n      if (stateChangeSuccessEvent) {\n        stateChangeSuccessEvent();\n      }\n      showTermsDialogEvent();\n    }\n\n    function checkShowTermsAndConditionDialog() {\n      if (Session.checkTerms()) {\n        showTermsAndConditionDialog();\n      }\n    }\n\n    function showTermsAndConditionDialog() {\n      if (!showTermsDialogOpened) {\n        showTermsDialogOpened = true;\n        $mdDialog\n          .show({\n            controller: TermsAndConditionsDialogController,\n            controllerAs: 'vm',\n            templateUrl: 'app/main/services/dialogs/terms-and-conditions/terms-and-conditions-dialog.html',\n            parent: angular.element(document.body),\n            clickOutsideToClose: false,\n            escapeToClose: false,\n            multiple: false\n          })\n          .then(function() {\n            showTermsDialogOpened = false;\n          }, function() {\n            showTermsDialogOpened = false;\n          });\n      }\n    }\n\n    function checkNetPromoterScore() {\n      api.account.users.get({\n        id: Session.user.id, option: 'check-net-promoter-score'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          if (response.result) {\n            showNetPromoterScoreDialog();\n          }\n        }\n      });\n    }\n\n    function showNetPromoterScoreDialog() {\n      $mdDialog\n        .show({\n          controller: NetPromoterScoreDialogController,\n          controllerAs: 'vm',\n          templateUrl: 'app/main/services/dialogs/net-promoter-score/net-promoter-score-dialog.html',\n          parent: angular.element(document.body),\n          clickOutsideToClose: false,\n          escapeToClose: false,\n          multiple: false\n        })\n        .then(function() {\n        }, function() {\n        });\n    }\n  }\n\n  /** @ngInject */\n  function TermsAndConditionsDialogController($mdDialog, $mdToast, $filter, $state, api, HTTP_STATUS, Session) {\n    var vm = this;\n\n    // Data\n    vm.user = Session.user;\n    vm.finalUserContract = 'https://stockagile.com/contrato-electronico-licencia-usuario-final/';\n\n    // Methods\n    vm.save = save;\n    vm.logout = logout;\n\n    //Functions\n    function save() {\n      api.account.users.save({\n        id: vm.user.id, option: 'terms-accepted'\n      }, function(response, fn, status) {\n        if (status === HTTP_STATUS.HTTP_200_OK) {\n          Session.setTermsAndConditions(true);\n          $mdDialog.hide();\n        } else {\n          $mdToast.show($mdToast\n            .simple()\n            .textContent($filter('translate')('GENERAL.ERROR_TOAST'))\n            .position('top right')\n            .hideDelay(3000));\n          Session.setTermsAndConditions(false);\n        }\n      });\n    }\n\n    function logout() {\n      Session.unsubscribeNotifications();\n      Session.removeUser(Session.user.username);\n      Session.destroy();\n      $state.go('app.pages_auth_login-v3');\n      $mdDialog.cancel();\n    }\n  }\n\n  function NetPromoterScoreDialogController($mdDialog, $mdToast, $filter, $state, api, HTTP_STATUS, Session) {\n    var vm = this;\n\n    // Data\n    vm.user = Session.user;\n    vm.availableNpss = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n    vm.nps = null;\n    vm.notes = null;\n\n    // Methods\n    vm.save = save;\n    vm.skip = skip;\n\n    function save() {\n      // Hide first in order to feel agility for the user\n      $mdDialog.hide();\n      $mdToast.show($mdToast\n        .simple()\n        .textContent($filter('translate')('GENERAL.NET_PROMOTER_SCORE_THANKS_FOR_YOUR_RESPONSE'))\n        .position('top right'));\n      api.account.users.save({\n        id: Session.user.id, option: 'post-net-promoter-score', net_promoter_score: vm.nps, notes: vm.notes\n      }, function(response, fn, status) {\n        // Nothing to do\n      });\n    }\n\n    function skip() {\n      $mdDialog.hide();\n      api.account.users.save({\n        id: Session.user.id, option: 'post-net-promoter-score', net_promoter_score: null, notes: vm.notes\n      }, function(response, fn, status) {\n        // Nothing to do\n      });\n    }\n  }\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .config(routeConfig);\n\n  /** @ngInject */\n  function routeConfig($stateProvider, $urlRouterProvider, $locationProvider) {\n    $locationProvider.html5Mode(true);\n\n    //$urlRouterProvider.otherwise('/sample');\n\n    /**\n     * Layout Style Switcher\n     *\n     * This code is here for demonstration purposes.\n     * If you don't need to switch between the layout\n     * styles like in the demo, you can set one manually by\n     * typing the template urls into the `State definitions`\n     * area and remove this code\n     */\n      // Inject $cookies\n    var $cookies;\n\n    angular.injector(['ngCookies']).invoke([\n      '$cookies', function (_$cookies) {\n        $cookies = _$cookies;\n      }\n    ]);\n\n    // Get active layout\n    // var layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n    var layoutStyle = 'verticalNavigationFullwidthToolbar2';\n\n    var layouts = {\n      verticalNavigation: {\n        main: 'app/core/layouts/vertical-navigation.html',\n        toolbar: 'app/toolbar/layouts/vertical-navigation/toolbar.html',\n        navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\n      },\n      verticalNavigationFullwidthToolbar: {\n        main: 'app/core/layouts/vertical-navigation-fullwidth-toolbar.html',\n        toolbar: 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar/toolbar.html',\n        navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\n      },\n      verticalNavigationFullwidthToolbar2: {\n        main: 'app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html',\n        toolbar: 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html',\n        navigation: 'app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html'\n      },\n      horizontalNavigation: {\n        main: 'app/core/layouts/horizontal-navigation.html',\n        toolbar: 'app/toolbar/layouts/horizontal-navigation/toolbar.html',\n        navigation: 'app/navigation/layouts/horizontal-navigation/navigation.html'\n      },\n      contentOnly: {\n        main: 'app/core/layouts/content-only.html',\n        toolbar: '',\n        navigation: ''\n      },\n      contentWithToolbar: {\n        main: 'app/core/layouts/content-with-toolbar.html',\n        toolbar: 'app/toolbar/layouts/content-with-toolbar/toolbar.html',\n        navigation: ''\n      }\n    };\n    // END - Layout Style Switcher\n\n    // Abstract redirections to avoid infinite loading pages\n    $urlRouterProvider.when('/inventory', '/inventory/products');\n    $urlRouterProvider.when('/inventory/', '/inventory/products');\n    $urlRouterProvider.when('/manufacture', '/manufacture/collections');\n    $urlRouterProvider.when('/manufacture/', '/manufacture/collections');\n    $urlRouterProvider.when('/wholesale', '/wholesale/sales');\n    $urlRouterProvider.when('/wholesale/', '/wholesale/sales');\n    $urlRouterProvider.when('/analytics', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/retail-dashboard/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/retail-dashboard/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/inventory-dashboard/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/inventory-dashboard/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/wholesale-dashboard/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/analytics/wholesale-dashboard/', '/analytics/retail-dashboard/realtime/');\n    $urlRouterProvider.when('/sale', '/sale/sell');\n    $urlRouterProvider.when('/sale/', '/sale/sell');\n    $urlRouterProvider.when('/ecommerce', '/ecommerce/sites');\n    $urlRouterProvider.when('/ecommerce/', '/ecommerce/sites');\n\n    // State definitions\n    $stateProvider\n      .state('app', {\n        abstract: true,\n        views: {\n          'main@': {\n            templateUrl: layouts[layoutStyle].main,\n            controller: 'MainController as vm'\n          },\n          'toolbar@app': {\n            templateUrl: layouts[layoutStyle].toolbar,\n            controller: 'ToolbarController as vm'\n          },\n          'navigation@app': {\n            templateUrl: layouts[layoutStyle].navigation,\n            controller: 'NavigationController as vm'\n          },\n          'quickPanel@app': {\n            templateUrl: 'app/quick-panel/quick-panel.html',\n            controller: 'QuickPanelController as vm'\n          }\n          ,'previewPanel@app': {\n            templateUrl: 'app/preview-panel/preview-panel.html',\n            controller: 'PreviewPanelController as vm'\n          }\n        },\n        resolve: {\n          Session: function (Session) {\n            return Session.getSession()\n          }\n        }\n      });\n\n    $stateProvider\n      .state('signup', {\n        abstract: true,\n        views: {\n          'main@': {\n            templateUrl: 'app/core/layouts/sign-up-navigation.html',\n            controller: 'MainController as vm'\n          },\n          'toolbar@signup': {\n            templateUrl: 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html',\n            controller: 'ToolbarController as vm'\n          },\n          'navigation@signup': {\n            templateUrl: 'app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html',\n            controller: 'SignUpNavigationController as vm'\n          },\n        }\n      });\n\n    $stateProvider\n      .state('signuptwo', {\n        abstract: true,\n        views: {\n          'main@': {\n            templateUrl: 'app/core/layouts/sign-up-navigation.html',\n            controller: 'MainController as vm'\n          },\n          'toolbar@signuptwo': {\n            templateUrl: 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html',\n            controller: 'ToolbarController as vm'\n          },\n          'navigation@signuptwo': {\n            templateUrl: 'app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html',\n            controller: 'SignUpNavigationController as vm'\n          },\n\n        }\n      });\n  }\n\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .filter('currencyCharacter', function(CURRENCIES) {\n      return function(input) {\n        return CURRENCIES[input];\n      };\n    })\n\n    .filter('serialNumberType', function(SerialNumberType) {\n      return function(serialNumberType) {\n        return new SerialNumberType(serialNumberType).getCurrent();\n      };\n    })\n\n    .filter('currencyIcon', function() {\n      return function(input) {\n        if (input === 'EUR') return 'icon-currency-eur';\n        if (input === 'USD' || input === 'MXN') return 'icon-currency-usd';\n      };\n    })\n\n    .filter('fromNow', function() {\n      return function(date) {\n        return moment(date).fromNow();\n      };\n    })\n\n    .filter('asDate', function() {\n      return function(input) {\n        return new Date(input);\n      };\n    })\n\n    .filter('dataAndHour', function() {\n      return function(date) {\n        return moment(date).format('LLL');\n      };\n    })\n\n    .filter('asDateWithDateAndHour', function($filter) {\n      return function(date) {\n        var result = $filter('asDate')(date);\n        return $filter('dataAndHour')(result);\n      };\n    })\n\n    .filter('wb_materials', function($filter) {\n      return function(materials) {\n        var array = materials.split(',');\n        var result = [];\n        array.forEach(function(material) {\n          result.push($filter('translate')('MATERIALS.' + material));\n        });\n        return result.join(', ');\n      };\n    })\n\n    .filter('price', function($filter) {\n      return function(price) {\n        return $filter('number')(price, 2);\n      };\n    })\n\n    .filter('simplePrice', function($filter) {\n      return function(price) {\n        var price = $filter('number')(price, 2);\n        if (price.substring(price.length - 3) === '.00') {\n          return price.substring(0, price.length - 3);\n        }\n        return price;\n      };\n    })\n\n    .filter('percentage', function($filter) {\n      return function(price) {\n        return $filter('number')(price, 2) + '%';\n      };\n    })\n\n    .filter('codename', function() {\n      return function(value) {\n        if (value) {\n          if (value.code && value.name) return value.code + ' - ' + value.name;\n          if (value.code) return value.code;\n          if (value.name) return name;\n        }\n        return '';\n      };\n    })\n\n    .filter('personname', function() {\n      return function(person) {\n        var result = '';\n        if (person && person.first_name) {\n          result += person.first_name + ' ';\n        } else if (person && person.name) {\n          result += person.name + ' ';\n        }\n        if (person && person.last_name) {\n          result += person.last_name;\n        }\n        return result;\n      };\n    })\n\n    .filter('location', function() {\n      return function(location) {\n        var result = '';\n        if (!location) return result;\n        if (location.address_1 || location.address) result += (location.address_1 || location.address) + ', ';\n        if (location.zip) result += (' ' + location.zip);\n        if (location.city) result += (' ' + location.city);\n        return result;\n      };\n    })\n\n    .filter('largeLocation', function(COUNTRIES_DICT) {\n      return function(location) {\n        if (!location) return '';\n        var parts = [];\n        if (location.address_1) parts.push(location.address_1);\n        if (location.zip || location.city) {\n          parts.push((location.zip || '') + ' ' + (location.city || ''));\n        }\n        if (location.country && COUNTRIES_DICT[location.country]) {\n          parts.push(COUNTRIES_DICT[location.country]);\n        }\n        return parts.join(', ');\n      };\n    })\n\n    .filter('phonenumber', function() {\n      return function(phonenumber) {\n        if (phonenumber) {\n          if (phonenumber.length == 9) return phonenumber.substring(0, 3) + ' ' + phonenumber.substring(3, 5) + ' ' + phonenumber.substring(5, 7) + ' ' + phonenumber.substring(7);\n          return phonenumber;\n        }\n        return '';\n\n      };\n    })\n\n    .filter('relativeDate', function(Utils, $filter) {\n      return function(datetime) {\n        if (!datetime) {\n          return '';\n        }\n        datetime = new Date(datetime);\n        if (Utils.isDateToday(datetime)) {\n          return $filter('translate')('NOTIFICATIONS.TODAY');\n        }\n        if (Utils.isDateYesterday(datetime)) {\n          return $filter('translate')('NOTIFICATIONS.YESTERDAY');\n        }\n\n        var dayNames = [$filter('translate')('GENERAL.SUNDAY'), $filter('translate')('GENERAL.MONDAY'), $filter('translate')('GENERAL.TUESDAY'), $filter('translate')('GENERAL.WEDNESDAY'), $filter('translate')('GENERAL.THURSDAY'), $filter('translate')('GENERAL.FRIDAY'), $filter('translate')('GENERAL.SATURDAY')];\n        return dayNames[datetime.getDay()] + ', ' + datetime.getDate() + '-' + (datetime.getMonth() + 1) + '-' + datetime.getFullYear();\n      };\n    })\n\n    .filter('elapsedTime', function(Utils, $filter) {\n      return function(datetime) {\n        datetime = new Date(datetime);\n\n        var currentDate = new Date();\n        const msInMinute = 1000 * 60;\n        const msInHour = msInMinute * 60;\n        var elapsedTime = currentDate - datetime;\n        var elapsedHours = Math.floor(elapsedTime / msInHour);\n        var elapsedMinutes = Math.floor(elapsedTime / msInMinute);\n        if (Utils.isDateToday(datetime)) {\n          if (elapsedHours === 0) {\n            var minutesString = $filter('translate')('NOTIFICATIONS.MINUTES');\n            if (elapsedMinutes === 1) {\n              minutesString = $filter('translate')('NOTIFICATIONS.MINUTE');\n            }\n            return $filter('translate')('NOTIFICATIONS.X_TIME_AGO', { 'time': elapsedMinutes + ' ' + minutesString });\n          } else {\n            var hourString = $filter('translate')('NOTIFICATIONS.HOURS');\n            if (elapsedHours === 1) {\n              hourString = $filter('translate')('NOTIFICATIONS.HOUR');\n            }\n            return $filter('translate')('NOTIFICATIONS.X_TIME_AGO', { 'time': elapsedHours + ' ' + hourString });\n          }\n        } else {\n          var minutesString = (datetime.getMinutes() < 10 ? '0' : '') + datetime.getMinutes();\n          return datetime.getHours() + ':' + minutesString;\n        }\n      };\n    })\n    .filter('absoluteValue', function() {\n      return function(input) {\n        return Math.abs(input);\n      };\n    })\n\n    .filter('serialNumberTypeFilter', function() {\n      return function(items, filterType) {\n        if (!items) {\n          return [];\n        }\n        var filtered = items.filter(function(item) {\n          return (item.type === null || item.type === filterType);\n          // return item.type === filterType;\n        });\n        return filtered.sort(function(a, b) {\n          if (a.type === null && b.type !== null) {\n            return 1;\n          }\n          if (a.type !== null && b.type === null) {\n            return -1;\n          }\n          return 0;\n        });\n      };\n    });\n})();\n\n(function ()\n{\n    'use strict';\n\n    angular\n        .module('fuse')\n        .controller('IndexController', IndexController);\n\n    /** @ngInject */\n    function IndexController(fuseTheming, $rootScope, msNavigationService, Session, PERMISSIONS)\n    {\n      var vm = this;\n\n      // Data\n      vm.themes = fuseTheming.themes;\n\n      /*$rootScope.$on('validateEmailScreen::show', function(event) {\n        $state.go('app.start.emailconfirmation');\n      });*/\n    }\n})();\n\n(function() {\n  'use strict';\n\n  angular\n    .module('fuse')\n\n    .constant('AUTH_EVENTS', {\n      loginSuccess: 'auth-login-success',\n      loginFailed: 'auth-login-failed',\n      logoutSuccess: 'auth-logout-success',\n      sessionTimeout: 'auth-session-timeout',\n      notAuthenticated: 'auth-not-authenticated',\n      notAuthorized: 'auth-not-authorized'\n    })\n    .constant('RULE_CRITERIA_TYPES', {\n      'WAREHOUSE_COUNTRY_CODE': 1,\n      'WAREHOUSE_ZIP_CODE': 2,\n      'WAREHOUSE_PENDING_ORDERS': 3,\n      'WAREHOUSE_MORE_STOCK': 4,\n      'ORDER_COUNTRY_CODE': 101,\n      'ORDER_ZIP_CODE': 102,\n      'ORDER_PRODUCT_BRAND': 103,\n      'ORDER_PRODUCT_CATEGORY': 104,\n      'ORDER_PRODUCT_SUBCATEGORY': 105,\n      'ORDER_PRODUCT_PROVIDER': 106,\n      'ORDER_PRODUCT_QUANTITY': 107,\n\n      1: 'WAREHOUSE_COUNTRY_CODE',\n      2: 'WAREHOUSE_ZIP_CODE',\n      3: 'WAREHOUSE_PENDING_ORDERS',\n      4: 'WAREHOUSE_MORE_STOCK',\n      101: 'ORDER_COUNTRY_CODE',\n      102: 'ORDER_ZIP_CODE',\n      103: 'ORDER_PRODUCT_BRAND',\n      104: 'ORDER_PRODUCT_CATEGORY',\n      105: 'ORDER_PRODUCT_SUBCATEGORY',\n      106: 'ORDER_PRODUCT_PROVIDER',\n      107: 'ORDER_PRODUCT_QUANTITY'\n    })\n\n    .constant('RULE_CRITERIA_OPERATORS', {\n      'LESS_THAN_CRITERIA': 'lt',\n      'LESS_THAN_OR_EQUAL_CRITERIA': 'lte',\n      'EQUAL_CRITERIA': 'eq',\n      'GREATER_THAN_OR_EQUAL_CRITERIA': 'gte',\n      'GREATER_THAN_CRITERIA': 'gt',\n      'NOT_EQUAL_CRITERIA': 'neq',\n      'START_WITH_CRITERIA': 'sw',\n      'END_WITH_CRITERIA': 'ew',\n\n      'lt': 'LESS_THAN_CRITERIA',\n      'lte': 'LESS_THAN_OR_EQUAL_CRITERIA',\n      'eq': 'EQUAL_CRITERIA',\n      'gte': 'GREATER_THAN_OR_EQUAL_CRITERIA',\n      'gt': 'GREATER_THAN_CRITERIA',\n      'neq': 'NOT_EQUAL_CRITERIA',\n      'sw': 'START_WITH_CRITERIA',\n      'ew': 'END_WITH_CRITERIA'\n    })\n\n    .constant('RULE_ACTION_TYPES', {\n      'ADD_SCORING': 1,\n      'FORCE_WAREHOSUE': 2,\n      'DISCARD_WAREHOSUE': 3,\n\n      1: 'ADD_SCORING',\n      2: 'FORCE_WAREHOSUE',\n      3: 'DISCARD_WAREHOSUE'\n    })\n\n    .constant('COMERCIAL_INVOICE_TYPES_OF_EXPORT', {\n      'TYPE_OF_EXPORT_PERMANENT': 10,\n      'TYPE_OF_EXPORT_TEMPORARY': 20,\n      'TYPE_OF_EXPORT_REEXPORT': 30,\n\n      10: 'TYPE_OF_EXPORT_PERMANENT',\n      20: 'TYPE_OF_EXPORT_TEMPORARY',\n      30: 'TYPE_OF_EXPORT_REEXPORT'\n    })\n\n    .constant('COMERCIAL_INVOICE_TERMS_OF_TRADE', {\n      'TERM_OF_TRADE_DDP': 10,\n      'TERM_OF_TRADE_DDU': 20,\n\n      10: 'TERM_OF_TRADE_DDP',\n      20: 'TERM_OF_TRADE_DDU'\n    })\n\n    .constant('NOTIFICATION_TYPES', {\n      1: 'STOCK_BELOW_MINIMUM',\n      2: 'STOCK_AT_ZERO',\n      3: 'NEGATIVE_STOCK',\n      4: 'B2B',\n      5: 'ECOMMERCE',\n      6: 'ECOMMERCE_UPDATE',\n      7: 'TRANSFER_ORDER_SOURCE_WAREHOUSE_CHANGED',\n      8: 'TRANSFER_ORDER_SOURCE_WAREHOUSE_ASSIGNED',\n\n\n      'STOCK_BELOW_MINIMUM': 1,\n      'STOCK_AT_ZERO': 2,\n      'NEGATIVE_STOCK': 3,\n      'B2B': 4,\n      'ECOMMERCE': 5,\n      'ECOMMERCE_UPDATE': 6\n    })\n\n    .constant('NOTIFICATION_PRIORITIES', {\n      'NORMAL': 1,\n      'WARNING': 2,\n      'ALERT': 3,\n\n      1: 'NORMAL',\n      2: 'WARNING',\n      3: 'ALERT'\n    })\n\n    .constant('DASHBOARD_ITEM_TYPES', {\n      DASHBOARD_ITEM_TYPE_VIDEO_DEMO: 10,\n      DASHBOARD_ITEM_TYPE_COURSE: 20,\n      DASHBOARD_ITEM_TYPE_WEBINAR: 30,\n\n      10: 'DASHBOARD_ITEM_TYPE_VIDEO_DEMO',\n      20: 'DASHBOARD_ITEM_TYPE_COURSE',\n      30: 'DASHBOARD_ITEM_TYPE_WEBINAR'\n    })\n\n\n    .constant('IMPORTER_STATUS', {\n      'DONE': 1,\n      'IN_PROGRESS': 2,\n      'VALIDATING': 3,\n      'PENDING_TO_VALIDATE': 4,\n      'VALIDATION_DONE': 5,\n      'ENQUEUED': 6,\n\n      1: 'DONE',\n      2: 'IN_PROGRESS',\n      3: 'VALIDATING',\n      4: 'PENDING_TO_VALIDATE',\n      5: 'VALIDATION_DONE',\n      6: 'ENQUEUED'\n    })\n\n    .constant('URLS', {\n      'LOGO_SMALL': 'https://s3-eu-west-1.amazonaws.com/media.novadigits.com/cdn/logos/StockAgile_146x146.png'\n    })\n\n    .constant('VERIFACTU_SERIAL_NUMBER_TYPES', {\n      'SERIAL_NUMBER_TYPE_INVOICE': 90,\n      'SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE': 93\n    })\n\n    .constant('SERIAL_NUMBER_TYPES', {\n      'SERIAL_NUMBER_TYPE_PRODUCT': 1,\n      'SERIAL_NUMBER_TYPE_PURCHASE_ORDER': 10,\n      'SERIAL_NUMBER_TYPE_PURCHASE_ORDER_DELIVERY': 11,\n      'SERIAL_NUMBER_TYPE_TRANSFER_ORDER': 20,\n      'SERIAL_NUMBER_TYPE_TRANSFER_ORDER_DELIVERY': 21,\n      'SERIAL_NUMBER_TYPE_SALE_ORDER': 30,\n      'SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY': 31,\n      'SERIAL_NUMBER_TYPE_POS_ORDER': 40,\n      'SERIAL_NUMBER_TYPE_POS_ORDER_DEVOLUTION': 41,\n      'SERIAL_NUMBER_TYPE_ADJUSTMENT_ORDER': 50,\n      'SERIAL_NUMBER_TYPE_PRODUCTION_ORDER': 60,\n      'SERIAL_NUMBER_TYPE_STOCKTAKING_ORDER': 70,\n      'SERIAL_NUMBER_TYPE_PICKING_ORDER': 80,\n      'SERIAL_NUMBER_TYPE_PACKING_ORDER': 81,\n      'SERIAL_NUMBER_TYPE_INVOICE': 90,\n      'SERIAL_NUMBER_TYPE_PROFORMA_INVOICE': 91,\n      'SERIAL_NUMBER_TYPE_QUOTE': 92,\n      'SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE': 93\n    })\n\n    .constant('SERIAL_NUMBER_TYPES_REVERSE', {\n      1: 'SERIAL_NUMBER_TYPE_PRODUCT',\n      10: 'SERIAL_NUMBER_TYPE_PURCHASE_ORDER',\n      11: 'SERIAL_NUMBER_TYPE_PURCHASE_ORDER_DELIVERY',\n      20: 'SERIAL_NUMBER_TYPE_TRANSFER_ORDER',\n      21: 'SERIAL_NUMBER_TYPE_TRANSFER_ORDER_DELIVERY',\n      30: 'SERIAL_NUMBER_TYPE_SALE_ORDER',\n      31: 'SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY',\n      40: 'SERIAL_NUMBER_TYPE_POS_ORDER',\n      41: 'SERIAL_NUMBER_TYPE_POS_ORDER_DEVOLUTION',\n      50: 'SERIAL_NUMBER_TYPE_ADJUSTMENT_ORDER',\n      60: 'SERIAL_NUMBER_TYPE_PRODUCTION_ORDER',\n      70: 'SERIAL_NUMBER_TYPE_STOCKTAKING_ORDER',\n      80: 'SERIAL_NUMBER_TYPE_PICKING_ORDER',\n      81: 'SERIAL_NUMBER_TYPE_PACKING_ORDER',\n      90: 'SERIAL_NUMBER_TYPE_INVOICE',\n      91: 'SERIAL_NUMBER_TYPE_PROFORMA_INVOICE',\n      92: 'SERIAL_NUMBER_TYPE_QUOTE',\n      93: 'SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE'\n    })\n\n    .constant('AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY', {\n      'AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_NONE': 1,\n      'AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_WITH_MORE_STOCK': 2,\n      'AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE': 3,\n      'AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY': 4\n    })\n\n    .constant('AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY', {\n      'AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_MANUAL': 1,\n      // 'AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_WITH_MORE_STOCK': 2,\n      'AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_BY_WAREHOUSE_ID_SELECTED_BY_SITE': 3,\n      'AUTO_ASSIGN_PURCHASE_POLICY': 4\n    })\n\n    .constant('AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY', {\n      'AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_MANUAL': 1,\n      'AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY_BY_STOCK_LEVEL': 2\n    })\n\n    .constant('RETURN_MANAGEMENT_POLICY', {\n      'RETURN_MANAGEMENT_POLICY_AUTO': 1,\n      'RETURN_MANAGEMENT_POLICY_MANUAL': 2\n    })\n\n    .constant('DYNAMIC_REPORT_OPERATIONS', {\n      'FILTER_OPERATION_EQUAL': 'eq',\n      'FILTER_OPERATION_NOT_EQUAL': 'neq',\n      'FILTER_OPERATION_GREATER_THAN': 'gt',\n      'FILTER_OPERATION_LESS_THAN': 'lt',\n      'FILTER_OPERATION_GREATER_THAN_OR_EQUAL': 'gte',\n      'FILTER_OPERATION_LESS_THAN_OR_EQUAL': 'lte',\n\n      'eq': 'FILTER_OPERATION_EQUAL',\n      'neq': 'FILTER_OPERATION_NOT_EQUAL',\n      'gt': 'FILTER_OPERATION_GREATER_THAN',\n      'lt': 'FILTER_OPERATION_LESS_THAN',\n      'gte': 'FILTER_OPERATION_GREATER_THAN_OR_EQUAL',\n      'lte': 'FILTER_OPERATION_LESS_THAN_OR_EQUAL'\n    })\n\n    .constant('DYNAMIC_REPORT_FILTERS', {\n      'FILTER_TYPE_FK': 'fk',\n      'FILTER_TYPE_DATE': 'date',\n      'FILTER_TYPE_INT': 'int',\n      'FILTER_TYPE_FLOAT': 'float',\n      'FILTER_TYPE_STRING': 'string',\n      'FILTER_TYPE_BOOLEAN': 'boolean',\n\n      'fk': 'FILTER_TYPE_FK',\n      'date': 'FILTER_TYPE_DATE',\n      'int': 'FILTER_TYPE_INT',\n      'float': 'FILTER_TYPE_FLOAT',\n      'string': 'FILTER_TYPE_STRING',\n      'boolean': 'FILTER_TYPE_BOOLEAN'\n    })\n\n    .constant('WEBHOOK_TYPES', {\n      'CUSTOMER_CREATED': 101,\n      'CUSTOMER_UPDATED': 102,\n      'CUSTOMER_DELETED': 103,\n      'CUSTOMERS_IMPORTED': 104,\n\n      'ORDER_CREATED': 201,\n      'ORDER_UPDATED': 202,\n      'ORDER_DELETED': 203,\n      'ORDER_RESTORED': 204,\n\n      'PRODUCT_CREATED': 301,\n      'PRODUCT_UPDATED': 302,\n      'PRODUCT_DELETED': 303,\n      'PRODUCT_RESTORED': 304,\n      'PRODUCT_STOCK_CHANGED': 305,\n\n      'PRODUCTS_IMPORTED': 401,\n\n      'PURCHASE_ORDER_CREATED': 501,\n      'PURCHASE_ORDER_UPDATED': 502,\n      'PURCHASE_ORDER_DELETED': 503,\n      'PURCHASE_ORDER_RESTORED': 504,\n\n      'SITE_CATEGORIES_UPDATED': 601,\n      'SITE_PRODUCT_SYNC': 602,\n\n      'CUSTOM_API_SITE_ORDER_UPDATED': 701,\n      'CUSTOM_API_SITE_ORDER_DELETED': 702,\n\n      'SALE_ORDER_CREATED': 801,\n      'SALE_ORDER_UPDATED': 802,\n      'SALE_ORDER_DELETED': 803,\n      'SALE_ORDER_RESTORED': 804,\n\n      'TRANSFER_ORDER_STATUS_UPDATED': 901,\n      'TRANSFER_ORDER_DELIVERY_STATUS_UPDATED': 902,\n      'TRANSFER_ORDER_SOURCE_WAREHOUSE_UPDATED': 903,\n\n      101: 'CUSTOMER_CREATED',\n      102: 'CUSTOMER_UPDATED',\n      103: 'CUSTOMER_DELETED',\n      104: 'CUSTOMERS_IMPORTED',\n\n      201: 'ORDER_CREATED',\n      202: 'ORDER_UPDATED',\n      203: 'ORDER_DELETED',\n      204: 'ORDER_RESTORED',\n\n      301: 'PRODUCT_CREATED',\n      302: 'PRODUCT_UPDATED',\n      303: 'PRODUCT_DELETED',\n      304: 'PRODUCT_RESTORED',\n      305: 'PRODUCT_STOCK_CHANGED',\n      401: 'PRODUCTS_IMPORTED',\n\n      501: 'PURCHASE_ORDER_CREATED',\n      502: 'PURCHASE_ORDER_UPDATED',\n      503: 'PURCHASE_ORDER_DELETED',\n      504: 'PURCHASE_ORDER_RESTORED',\n\n      601: 'SITE_CATEGORIES_UPDATED',\n      602: 'SITE_PRODUCT_SYNC',\n\n      701: 'CUSTOM_API_SITE_ORDER_UPDATED',\n      702: 'CUSTOM_API_SITE_ORDER_DELETED',\n\n      801: 'SALE_ORDER_CREATED',\n      802: 'SALE_ORDER_UPDATED',\n      803: 'SALE_ORDER_DELETED',\n      804: 'SALE_ORDER_RESTORED',\n\n      901: 'TRANSFER_ORDER_STATUS_UPDATED',\n      902: 'TRANSFER_ORDER_DELIVERY_STATUS_UPDATED',\n      903: 'TRANSFER_ORDER_SOURCE_WAREHOUSE_UPDATED'\n\n    })\n\n    .constant('ECOMMERCE_SYNC_OPTIONS', {\n      'ECOMMERCE_SYNC_STOCK': 1,\n      'ECOMMERCE_SYNC_PRODUCT': 2,\n      'ECOMMERCE_SYNC_PRICE': 6\n    })\n\n    .constant('B2B_ECOMMECE_MENU_TYPES', {\n      'MENU_TYPE_MIXED': 0,\n      'MENU_TYPE_CATEGORIES': 10,\n      'MENU_TYPE_SEASONS': 20,\n      'MENU_TYPE_COLLECTIONS': 30\n    })\n\n    .constant('INVOICE_TYPES', {\n      'PROFORMA': 10,\n      'QUOTE': 20,\n      'INVOICE': 30\n    })\n\n    .constant('INVOICE_MODELS', {\n      'INVOICE': 10,\n      'POS_ORDER_INVOICE': 20,\n      'PURCHASE_INVOICE': 30\n    })\n\n    .constant('INVOICE_MODELS_REVERSE', {\n      10: 'INVOICE',\n      20: 'POS_ORDER_INVOICE',\n      30: 'PURCHASE_INVOICE'\n    })\n\n    .constant('INVOICE_TYPES_REVERSE', {\n      10: 'PROFORMA',\n      20: 'QUOTE',\n      30: 'INVOICE'\n    })\n\n    .constant('CORRECTIVE_INVOICE_TYPES', {\n      'FORMAL_MATERIAL_ERROR': 10,\n      'TOTAL_OR_PARTIAL_DEVOLUTION': 20\n    })\n\n    .constant('PICKING_PACKING_TYPES', {\n      'PICKING_TYPE': 10,\n      'PACKING_TYPE': 20\n    })\n\n    .constant('INTEGRATION_APP_TYPE', {\n      HOLDED: 'holded',\n      KUBIBAI: 'kubibai',\n      SENDCLOUD: 'sendcloud',\n      EPOS_ITALY: 'epos_italy',\n      SAGE_200: 'sage_200',\n      VERIFACTU: 'verifactu'\n    })\n\n    .constant('INSTALLED_INTEGRATION_APP_STATUS', {\n      'DISABLED': 0,\n      'ENABLED': 1,\n      0: 'DISABLED',\n      1: 'ENABLED'\n    })\n\n    .constant('INTEGRATION_APP_AVAILABLE_STATUS', {\n      'NOT_AVAILABLE': 0,\n      'BETA': 1,\n      'AVAILABLE': 2,\n      0: 'NOT_AVAILABLE',\n      1: 'BETA',\n      2: 'AVAILABLE'\n    })\n\n    .constant('ECOMMERCE_PLATFORMS', {\n      'ECOMMERCE_PLATFORM_WOOCOMMERCE': 10,\n      'ECOMMERCE_PLATFORM_PRESTASHOP': 20,\n      'ECOMMERCE_PLATFORM_SHOPIFY': 30,\n      'ECOMMERCE_PLATFORM_WIX': 40,\n      'ECOMMERCE_PLATFORM_CUSTOM_API': 50,\n      'ECOMMERCE_PLATFORM_ZALANDO': 60,\n      'ECOMMERCE_PLATFORM_CUSTOM_CSV': 70,\n      'ECOMMERCE_PLATFORM_MAGENTO': 80,\n      'ECOMMERCE_PLATFORM_MIINTO': 90,\n      'MARKETPLACE_PLATFORM_AMAZON_US': 100,\n      'MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES': 110,\n      'MARKETPLACE_PLATFORM_HIPERCALZADO': 200,\n      'MARKETPLACE_PLATFORM_MIRAKL_ECI': 300,\n      'MARKETPLACE_PLATFORM_MIRAVIA': 400,\n\n      10: 'ECOMMERCE_PLATFORM_WOOCOMMERCE',\n      20: 'ECOMMERCE_PLATFORM_PRESTASHOP',\n      30: 'ECOMMERCE_PLATFORM_SHOPIFY',\n      40: 'ECOMMERCE_PLATFORM_WIX',\n      50: 'ECOMMERCE_PLATFORM_CUSTOM_API',\n      60: 'ECOMMERCE_PLATFORM_ZALANDO',\n      70: 'ECOMMERCE_PLATFORM_CUSTOM_CSV',\n      80: 'ECOMMERCE_PLATFORM_MAGENTO',\n      90: 'ECOMMERCE_PLATFORM_MIINTO',\n      100: 'MARKETPLACE_PLATFORM_AMAZON_US',\n      110: 'MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES',\n      200: 'MARKETPLACE_PLATFORM_HIPERCALZADO',\n      300: 'MARKETPLACE_PLATFORM_MIRAKL_ECI',\n      400: 'MARKETPLACE_PLATFORM_MIRAVIA'\n    })\n\n    .constant('PICKING_PLATFORMS', {\n      'PICKING_WHOLESALE': 303,\n      'PICKING_SALE': 301,\n      'PICKING_TRANSFER': 302,\n\n      303: 'PICKING_WHOLESALE',\n      301: 'PICKING_SALE',\n      302: 'PICKING_TRANSFER'\n    })\n\n    .constant('ECOMMERCE_PLATFORMS_NAMES', {\n      'ECOMMERCE_PLATFORM_WOOCOMMERCE': 'Woocomerce',\n      'ECOMMERCE_PLATFORM_PRESTASHOP': 'Prestashop',\n      'ECOMMERCE_PLATFORM_SHOPIFY': 'Shopify',\n      //'ECOMMERCE_PLATFORM_WIX': 'Wix',\n      'ECOMMERCE_PLATFORM_CUSTOM_API': 'Custom api',\n      'ECOMMERCE_PLATFORM_ZALANDO': 'Zalando',\n      'ECOMMERCE_PLATFORM_CUSTOM_CSV': 'Custom csv',\n      // 'ECOMMERCE_PLATFORM_MIINTO': 'Miinto',\n      'MARKETPLACE_PLATFORM_AMAZON_US': 'Amazon US',\n      'MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES': 'Amazon EUROPE ES',\n      'MARKETPLACE_PLATFORM_HIPERCALZADO': 'Hipercalzado',\n      'MARKETPLACE_PLATFORM_MIRAKL_ECI': 'El Corte Inglés (Mirakl)',\n      'MARKETPLACE_PLATFORM_MIRAVIA': 'Miravia'\n    })\n\n    .constant('UNMODIFIABLE_PLATFORMS', [\n      'MARKETPLACE_PLATFORM_AMAZON_US',\n      'MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES',\n      'MARKETPLACE_PLATFORM_HIPERCALZADO',\n      'ECOMMERCE_PLATFORM_MIINTO'\n    ])\n\n    .constant('STOCK_FILTER_STATES', {\n      'ONLY_PRODUCTS_IN_STOCK': 1,\n      'ONLY_PRODUCTS_NOT_IN_STOCK': 2,\n      1: 'ONLY_PRODUCTS_IN_STOCK',\n      2: 'ONLY_PRODUCTS_NOT_IN_STOCK'\n    })\n\n    .constant('VISIBLE_IN_ECOMMERCE_FILTER_STATES', {\n      'ONLY_PRODUCTS_VISIBLE_IN_ECOMMERCE': 1,\n      'ONLY_PRODUCTS_NOT_VISIBLE_IN_ECOMMERCE': 2,\n      1: 'ONLY_PRODUCTS_VISIBLE_IN_ECOMMERCE',\n      2: 'ONLY_PRODUCTS_NOT_VISIBLE_IN_ECOMMERCE'\n    })\n\n\n    .constant('ARCHIVED_FILTER_STATES', {\n      'ONLY_ARCHIVED_PRODUCTS': 1,\n      'ONLY_NOT_ARCHIVED_PRODUCTS': 2,\n      1: 'ONLY_ARCHIVED_PRODUCTS',\n      2: 'ONLY_NOT_ARCHIVED_PRODUCTS'\n    })\n\n    .constant('DISCOUNT_PRICE_FILTER_STATES', {\n      'ONLY_PRODUCTS_WITH_DISCOUNT_PRICE': 1,\n      'ONLY_PRODUCTS_WITH_NO_DISCOUNT_PRICE': 2,\n      1: 'ONLY_PRODUCTS_WITH_DISCOUNT_PRICE',\n      2: 'ONLY_PRODUCTS_WITH_NO_DISCOUNT_PRICE'\n    })\n\n    .constant('INCIDENCE_STATUSES', {\n      'MARKED_AS_INCIDENCE': 1,\n      'UNMARKED_AS_INCIDENCE': 2,\n      1: 'MARKED_AS_INCIDENCE',\n      2: 'UNMARKED_AS_INCIDENCE'\n    })\n\n    .constant('PRODUCT_NOT_FOUND_REASONS', {\n      'PRODUCT_DOESNT_EXIST': 0,\n      'PRODUCT_DELETED': 1,\n      'PRODUCT_VARIANT_DELETED': 2,\n      'BARCODE_COLLISION': 3,\n      'PRODUCT_ALREADY_IN_ORDER': 4,\n      'PRODUCT_ALREADY_CREATED': 5,\n      'WRONG_WAREHOUSE': 6,\n\n      0: 'PRODUCT_DOESNT_EXIST',\n      1: 'PRODUCT_DELETED',\n      2: 'PRODUCT_VARIANT_DELETED',\n      3: 'BARCODE_COLLISION',\n      4: 'PRODUCT_ALREADY_IN_ORDER',\n      5: 'PRODUCT_ALREADY_CREATED',\n      6: 'WRONG_WAREHOUSE'\n\n    })\n\n    .constant('ORDER_LOG_CHANGE_TYPES', {\n      'ORDER_LOG_TYPE_SCAN': 0,\n      'ORDER_LOG_TYPE_MANUAL': 1,\n      'ORDER_LOG_TYPE_IMPORT': 2,\n      'ORDER_LOG_TYPE_DELETED': 3,\n      'ORDER_LOG_TYPE_REFUND': 4,\n      'ORDER_LOG_TYPE_AI': 5,\n      0: 'ORDER_LOG_TYPE_SCAN',\n      1: 'ORDER_LOG_TYPE_MANUAL',\n      2: 'ORDER_LOG_TYPE_IMPORT',\n      3: 'ORDER_LOG_TYPE_DELETED',\n      4: 'ORDER_LOG_TYPE_REFUND',\n      5: 'ORDER_LOG_TYPE_AI'\n    })\n\n    .constant('PURCHASE_ORDER_PAYMENT_STATUSES', {\n\n      'PURCHASE_ORDER_PAYMENT_STATUS_PENDING': 10,\n      'PURCHASE_ORDER_PAYMENT_STATUS_PAID': 20,\n      10: 'PURCHASE_ORDER_PAYMENT_STATUS_PENDING',\n      20: 'PURCHASE_ORDER_PAYMENT_STATUS_PAID'\n    })\n\n    .constant('PURCHASE_ORDER_PAYMENT_STATUSES_COLORS', {\n      10: 'text-boxed ',\n      20: 'text-boxed green'\n    })\n\n    .constant('DTO_ORDER_DELIVERY_TYPES', {\n      PURCHASE_ORDER_DELIVERY: 'PurchaseOrderDelivery',\n      TRANSFER_ORDER_DELIVERY: 'TransferOrderDelivery',\n      SALE_ORDER_DELIVERY: 'SaleOrderDelivery',\n      'PurchaseOrderDelivery': 'PurchaseOrderDelivery',\n      'TransferOrderDelivery': 'TransferOrderDelivery',\n      'SaleOrderDelivery': 'SaleOrderDelivery'\n    })\n\n    .constant('DTO_ORDER_TYPES', {\n      PURCHASE_ORDER: 'PurchaseOrder',\n      TRANSFER_ORDER: 'TransferOrder',\n      SALE_ORDER: 'SaleOrder',\n      STOCKTAKING_ORDER: 'Stocktaking',\n      POS_ORDER: 'PosOrder',\n      ADJUSTMENT_ORDER: 'AdjustmentOrder'\n    })\n\n    .constant('ORDER_TYPES', {\n      1: 'purchase_order',\n      2: 'sale_order',\n      'PURCHASE_ORDER': 'purchase_order',\n      'SALE_ORDER': 'sale_order'\n    })\n\n    .constant('POS_ORDER_PAYMENT_STATUSES', {\n\n      'POS_ORDER_PAYMENT_STATUS_PENDING': 1,\n      'POS_ORDER_PAYMENT_STATUS_PAID': 2,\n      'POS_ORDER_PAYMENT_STATUS_UNPAID': 3,\n      'POS_ORDER_PAYMENT_STATUS_FAILED': 4,\n      'POS_ORDER_PAYMENT_STATUS_REFUNDED': 5,\n      1: 'POS_ORDER_PAYMENT_STATUS_PENDING',\n      2: 'POS_ORDER_PAYMENT_STATUS_PAID',\n      3: 'POS_ORDER_PAYMENT_STATUS_UNPAID',\n      4: 'POS_ORDER_PAYMENT_STATUS_FAILED',\n      5: 'POS_ORDER_PAYMENT_STATUS_REFUNDED'\n    })\n\n    .constant('POS_ORDER_PAYMENT_STATUSES_COLORS', {\n      1: 'status-badge md-grey-400-bg',\n      2: 'status-badge md-green-100-bg',\n      3: 'status-badge md-orange-100-bg',\n      4: 'status-badge md-red-100-bg',\n      5: 'status-badge md-orange-100-bg'\n    })\n\n    .constant('POS_ORDER_SHIPPING_STATUSES', {\n      'POS_ORDER_SHIPPING_STATUS_PENDING': 10,\n      'POS_ORDER_SHIPPING_STATUS_ALLOCATED': 20,\n      'POS_ORDER_SHIPPING_STATUS_SHIPPED': 30,\n      'POS_ORDER_SHIPPING_STATUS_PICKED_UP': 40,\n      'POS_ORDER_SHIPPING_STATUS_RETURNED': 50,\n      'POS_ORDER_SHIPPING_STATUS_CANCELLED': 60,\n      'POS_ORDER_SHIPPING_STATUS_RETURNED_RECEIVED': 70,\n      'POS_ORDER_SHIPPING_STATUS_ROUTED': 80,\n      'POS_ORDER_SHIPPING_STATUS_PARTIALLY_SHIPPED': 90,\n      10: 'POS_ORDER_SHIPPING_STATUS_PENDING',\n      20: 'POS_ORDER_SHIPPING_STATUS_ALLOCATED',\n      30: 'POS_ORDER_SHIPPING_STATUS_SHIPPED',\n      40: 'POS_ORDER_SHIPPING_STATUS_PICKED_UP',\n      50: 'POS_ORDER_SHIPPING_STATUS_RETURNED',\n      60: 'POS_ORDER_SHIPPING_STATUS_CANCELLED',\n      70: 'POS_ORDER_SHIPPING_STATUS_RETURNED_RECEIVED',\n      80: 'POS_ORDER_SHIPPING_STATUS_ROUTED',\n      90: 'POS_ORDER_SHIPPING_STATUS_PARTIALLY_SHIPPED'\n    })\n\n    .constant('POS_ORDER_SHIPPING_STATUSES_COLORS', {\n      10: 'text-boxed ',\n      20: 'text-boxed pink',\n      30: 'text-boxed green',\n      40: 'text-boxed blue',\n      50: 'text-boxed orange',\n      60: 'text-boxed red',\n      70: 'text-boxed orange',\n      80: 'text-boxed yellow',\n      90: 'text-boxed light-blue'\n    })\n\n    .constant('POS_ORDER_FULFILLMENTS', {\n      'FULFILLMENT_STATUS_PENDING': 10,\n      'FULFILLMENT_STATUS_ALLOCATED': 20,\n      'FULFILLMENT_STATUS_SHIPPED': 30,\n      'FULFILLMENT_STATUS_PICKED_UP': 40,\n      'FULFILLMENT_STATUS_RETURNED': 50,\n      'FULFILLMENT_STATUS_CANCELLED': 60,\n      'FULFILLMENT_STATUS_RETURNED_RECEIVED': 70,\n      10: 'FULFILLMENT_STATUS_PENDING',\n      20: 'FULFILLMENT_STATUS_ALLOCATED',\n      30: 'FULFILLMENT_STATUS_SHIPPED',\n      40: 'FULFILLMENT_STATUS_PICKED_UP',\n      50: 'FULFILLMENT_STATUS_RETURNED',\n      60: 'FULFILLMENT_STATUS_CANCELLED',\n      70: 'FULFILLMENT_STATUS_RETURNED_RECEIVED'\n    })\n\n    .constant('WEIGHT_UNITS', {\n      WEIGHT_UNIT_KG: 'KG',\n      WEIGHT_UNIT_G: 'G',\n      WEIGHT_UNIT_LB: 'LB',\n      WEIGHT_UNIT_KGM2: 'kg/m2',\n      WEIGHT_UNIT_GM2: 'g/m2'\n    })\n\n    .constant('WEIGHT_UNITS_FORMATTED', {\n      'KG': 'kg',\n      'G': 'g',\n      'LB': 'lb',\n      'kg/m2': 'kg/m²',\n      'g/m2': 'g/m²'\n    })\n\n    .constant('WORKDAY_STATUSES', {\n      NOT_STARTED: 1,\n      STARTED: 2,\n      PAUSED: 3,\n      FINISHED: 4\n    })\n\n    .constant('WORKDAY_ACTIVITY_TYPES', {\n      WORKDAY_ACTIVITY_START: 1,\n      WORKDAY_ACTIVITY_FINISH: 2,\n      WORKDAY_ACTIVITY_PAUSE: 3,\n      WORKDAY_ACTIVITY_LUNCH: 4,\n      WORKDAY_ACTIVITY_COFFEE: 5,\n      WORKDAY_ACTIVITY_OTHER: 6\n    })\n\n    .constant('PAYMENT_STATUS_TYPES', {\n      1: 'PAYMENT_STATUS_TYPE_PENDING',\n      2: 'PAYMENT_STATUS_TYPE_PARTIALLY_PAID',\n      3: 'PAYMENT_STATUS_TYPE_PAID',\n\n      'PAYMENT_STATUS_TYPE_PENDING': 1,\n      'PAYMENT_STATUS_TYPE_PARTIALLY_PAID': 2,\n      'PAYMENT_STATUS_TYPE_PAID': 3\n    })\n\n    .constant('PRODUCT_TYPES', {\n      'PRODUCT': 1,\n      'PRODUCT_BUNDLE': 2,\n      'GIFT_CARD': 3,\n      'RAW_MATERIAL': 4,\n\n      1: 'PRODUCT',\n      2: 'PRODUCT_BUNDLE',\n      3: 'GIFT_CARD',\n      4: 'RAW_MATERIAL'\n    })\n\n    .constant('INVOICE_TYPES', {\n      '1': 'RETAIL_CUSTOMER',\n      '3': 'WHOLESALE_CUSTOMER',\n      '4': 'WHOLESALE_SIMPLE'\n    })\n\n    .constant('PRICING_TIER_TYPES', {\n      '1': 'PRICING_TIER_TYPE_WHOLESALE',\n      '2': 'PRICING_TIER_TYPE_RETAIL',\n      '3': 'PRICING_TIER_TYPE_OUTLET'\n    })\n\n    .constant('LANGUAGES', {\n      'es': 'Español',\n      'en': 'English',\n      'ca': 'Català',\n      'fr': 'Français'\n    })\n\n    .constant('CONTACT_INVOICING_TYPES', {\n      'CONTACT_INVOICE_TYPE_NATIONAL': 1,\n      'CONTACT_INVOICE_TYPE_INTRACOMMUNITY': 2,\n      'CONTACT_INVOICE_TYPE_EXPORTATION': 3\n    })\n\n    .constant('VIDEO_CATEGORIES', {\n      'VIDEO_CATEGORY_ANALYTICS': 'ANALYTICS',\n      'VIDEO_CATEGORY_INVENTORY': 'INVENTORY',\n      'VIDEO_CATEGORY_CONTACTS': 'CONTACTS',\n      'VIDEO_CATEGORY_RETAIL': 'RETAIL',\n      'VIDEO_CATEGORY_ECOMMERCE': 'ECOMMERCE',\n      'VIDEO_CATEGORY_CONFIGURATION': 'CONFIGURATION',\n      'VIDEO_CATEGORY_WHOLESALE': 'WHOLESALE',\n      'VIDEO_CATEGORY_INVOICING': 'INVOICING'\n    })\n\n    .constant('PROVIDER_PRICE_TYPES', {\n      'EX_WORKS': 1,\n      'FREE_CARRIER': 2,\n      'FREE_ON_BOARD': 3,\n      'FREE_ALONGSIDE_SHIP': 4,\n      'CARRIAGE_PAID_TO': 5,\n      'CARRIAGE_AND_INSURANCE_PAID': 6,\n      'COST_AND_FREIGHT': 7,\n      'COST_INSURANCE_AND_FREIGHT': 8,\n      'DELIVERED_AT_PLACE_UNLOADED': 9,\n      'DELIVERED_AT_PLACE': 10,\n      'DELIVERED_DUTY_PAID': 11\n    })\n\n    .constant('PROVIDER_PRICE_TYPES_REVERSE', {\n      1: 'EX_WORKS',\n      2: 'FREE_CARRIER',\n      3: 'FREE_ON_BOARD',\n      4: 'FREE_ALONGSIDE_SHIP',\n      5: 'CARRIAGE_PAID_TO',\n      6: 'CARRIAGE_AND_INSURANCE_PAID',\n      7: 'COST_AND_FREIGHT',\n      8: 'COST_INSURANCE_AND_FREIGHT',\n      9: 'DELIVERED_AT_PLACE_UNLOADED',\n      10: 'DELIVERED_AT_PLACE',\n      11: 'DELIVERED_DUTY_PAID'\n    })\n\n    .constant('SALES_STATUS_COLORS_BG', {\n      '1': 'md-grey-400-bg',\n      '2': 'md-green-500-bg'\n    })\n\n    .constant('SALES_STATUS_COLORS_FG', {\n      '1': 'grey-400-fg',\n      '2': 'green-500-fg'\n    })\n\n    .constant('CSV_DELIMITERS', {\n      'CSV_DELIMITER_SEMICOLON': 1,\n      'CSV_DELIMITER_COMA': 2,\n      'CSV_DELIMITER_TAB': 3\n    })\n\n    .constant('CASH_MOVEMENT_TYPES', {\n      'CASH_MOVEMENT_TYPE_OUTPUT': 0,\n      'CASH_MOVEMENT_TYPE_INPUT': 1,\n      '0': 'CASH_MOVEMENT_TYPE_OUTPUT',\n      '1': 'CASH_MOVEMENT_TYPE_INPUT'\n    })\n\n    .constant('SEARCH_MAX_LENGTH', 56)\n\n    .constant('DEFAULT_AUTOCOMPLETE_PAGE_SIZE', 10)\n\n    .constant('USER_ROLES', {\n      9: 'USER_ROLE_INVENTORY_MANAGER',\n      8: 'USER_ROLE_ECOMMERCE_MANAGER',\n      7: 'USER_ROLE_WHOLESALE_VENDOR',\n      6: 'USER_ROLE_WHOLESALE_MANAGER',\n      5: 'USER_ROLE_RETAIL_MANAGER',\n      4: 'USER_ROLE_SUPERUSER',\n      3: 'USER_ROLE_PRODUCTS_EDITOR',\n      2: 'USER_ROLE_RETAIL_VENDOR',\n      1: 'USER_ROLE_OWNER',\n\n      USER_ROLE_INVENTORY_MANAGER: 9,\n      USER_ROLE_ECOMMERCE_MANAGER: 8,\n      USER_ROLE_WHOLESALE_VENDOR: 7,\n      USER_ROLE_WHOLESALE_MANAGER: 6,\n      USER_ROLE_RETAIL_MANAGER: 5,\n      USER_ROLE_SUPERUSER: 4,\n      USER_ROLE_PRODUCTS_EDITOR: 3,\n      USER_ROLE_RETAIL_VENDOR: 2,\n      USER_ROLE_OWNER: 1\n    })\n\n    .constant('CONTACT_TYPES', {\n      //'1': 'CONTACT_TYPE_VENDOR',\n      '4': 'CONTACT_TYPE_SHOP_CUSTOMER',\n      '2': 'CONTACT_TYPE_CUSTOMER',\n      '3': 'CONTACT_TYPE_DISTRIBUTOR',\n      '6': 'CONTACT_TYPE_PROVIDER',\n      '5': 'CONTACT_TYPE_MANUFACTURER'\n      //'7': 'CONTACT_TYPE_OTHER',\n      //'8': 'CONTACT_TYPE_DROPSHIPPER'\n    })\n\n    .constant('CONTACT_TYPES_REVERSE', {\n      'CONTACT_TYPE_VENDOR': '1',\n      'CONTACT_TYPE_CUSTOMER': '2',\n      'CONTACT_TYPE_DISTRIBUTOR': '3',\n      'CONTACT_TYPE_SHOP_CUSTOMER': '4',\n      'CONTACT_TYPE_MANUFACTURER': '5',\n      'CONTACT_TYPE_PROVIDER': '6',\n      'CONTACT_TYPE_OTHER': '7',\n      'CONTACT_TYPE_DROPSHIPPER': '8'\n    })\n\n    .constant('ND_BARCODE_PREFIXES', {\n      POS_ORDER_BARCODE_PREFIX: 'nd1',\n      DEVOLUTION_CARD_BARCODE_PREFIX: 'nd2',\n      FULFILLMENT_BARCODE_PREFIX: 'nd3'\n    })\n\n    .constant('GS1_BARCODE_TYPES_BY_NAME', {\n      'GS1_UPC_A': {\n        code: 'GS1_UPC_A',\n        id: 1,\n        length: 12,\n        barcode_dirtective_type: 'upc'\n      },\n      'GS1_EAN_13': {\n        code: 'GS1_EAN_13',\n        id: 2,\n        length: 13,\n        barcode_dirtective_type: 'ean'\n      },\n      'GS1_EAN_8': {\n        code: 'GS1_EAN_8',\n        id: 4,\n        length: 8,\n        barcode_dirtective_type: 'ean'\n      },\n      'GS1_CODE_128': {\n        code: 'GS1_CODE_128',\n        id: 14,\n        length: null,\n        barcode_dirtective_type: 'ean' // TODO check\n      }\n    })\n\n    .constant('INVENTORY_POLICY_TYPES', {\n      1: {\n        id: 1,\n        name: 'FIFO'\n      },\n      2: {\n        id: 2,\n        name: 'LIFO'\n      },\n      3: {\n        id: 3,\n        name: 'FEFO'\n      }\n    })\n\n    .constant('GS1_BARCODE_TYPES_BY_ID', {\n      '1': {\n        code: 'GS1_UPC_A',\n        id: 1,\n        length: 12,\n        barcode_dirtective_type: 'upc'\n      },\n      '2': {\n        code: 'GS1_EAN_13',\n        id: 2,\n        length: 13,\n        barcode_dirtective_type: 'ean'\n      },\n      '4': {\n        code: 'GS1_EAN_8',\n        id: 4,\n        length: 8,\n        barcode_dirtective_type: 'ean'\n      },\n      '14': {\n        code: 'GS1_CODE_128',\n        id: 14,\n        length: null,\n        barcode_dirtective_type: 'code128a'\n      }\n    })\n\n    .constant('ARTIFACT_STATUSES', {\n      1: 'ARTIFACT_STATUS_PENDING',\n      2: 'ARTIFACT_STATUS_STARTED',\n      3: 'ARTIFACT_STATUS_FINISHED',\n      4: 'ARTIFACT_STATUS_ERROR',\n\n      'ARTIFACT_STATUS_PENDING': 1,\n      'ARTIFACT_STATUS_STARTED': 2,\n      'ARTIFACT_STATUS_FINISHED': 3,\n      'ARTIFACT_STATUS_ERROR': 4\n    })\n\n    .constant('HTTP_STATUS', {\n      'HTTP_100_CONTINUE': 100,\n      'HTTP_101_SWITCHING_PROTOCOLS': 101,\n      'HTTP_200_OK': 200,\n      'HTTP_201_CREATED': 201,\n      'HTTP_202_ACCEPTED': 202,\n      'HTTP_203_NON_AUTHORITATIVE_INFORMATION': 203,\n      'HTTP_204_NO_CONTENT': 204,\n      'HTTP_205_RESET_CONTENT': 205,\n      'HTTP_206_PARTIAL_CONTENT': 206,\n      'HTTP_207_MULTI_STATUS': 207,\n      'HTTP_300_MULTIPLE_CHOICES': 300,\n      'HTTP_301_MOVED_PERMANENTLY': 301,\n      'HTTP_302_FOUND': 302,\n      'HTTP_303_SEE_OTHER': 303,\n      'HTTP_304_NOT_MODIFIED': 304,\n      'HTTP_305_USE_PROXY': 305,\n      'HTTP_306_RESERVED': 306,\n      'HTTP_307_TEMPORARY_REDIRECT': 307,\n      'HTTP_400_BAD_REQUEST': 400,\n      'HTTP_401_UNAUTHORIZED': 401,\n      'HTTP_402_PAYMENT_REQUIRED': 402,\n      'HTTP_403_FORBIDDEN': 403,\n      'HTTP_404_NOT_FOUND': 404,\n      'HTTP_405_METHOD_NOT_ALLOWED': 405,\n      'HTTP_406_NOT_ACCEPTABLE': 406,\n      'HTTP_407_PROXY_AUTHENTICATION_REQUIRED': 407,\n      'HTTP_408_REQUEST_TIMEOUT': 408,\n      'HTTP_409_CONFLICT': 409,\n      'HTTP_410_GONE': 410,\n      'HTTP_411_LENGTH_REQUIRED': 411,\n      'HTTP_412_PRECONDITION_FAILED': 412,\n      'HTTP_413_REQUEST_ENTITY_TOO_LARGE': 413,\n      'HTTP_414_REQUEST_URI_TOO_LONG': 414,\n      'HTTP_415_UNSUPPORTED_MEDIA_TYPE': 415,\n      'HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE': 416,\n      'HTTP_417_EXPECTATION_FAILED': 417,\n      'HTTP_422_UNPROCESSABLE_ENTITY': 422,\n      'HTTP_423_LOCKED': 423,\n      'HTTP_424_FAILED_DEPENDENCY': 424,\n      'HTTP_428_PRECONDITION_REQUIRED': 428,\n      'HTTP_429_TOO_MANY_REQUESTS': 429,\n      'HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE': 431,\n      'HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS': 451,\n      'HTTP_500_INTERNAL_SERVER_ERROR': 500,\n      'HTTP_501_NOT_IMPLEMENTED': 501,\n      'HTTP_502_BAD_GATEWAY': 502,\n      'HTTP_503_SERVICE_UNAVAILABLE': 503,\n      'HTTP_504_GATEWAY_TIMEOUT': 504,\n      'HTTP_505_HTTP_VERSION_NOT_SUPPORTED': 505,\n      'HTTP_507_INSUFFICIENT_STORAGE': 507,\n      'HTTP_511_NETWORK_AUTHENTICATION_REQUIRED': 511\n    })\n\n    .constant('ERROR_CODES', {\n      // 01 ACCOUNTING ERRORS\n      ERROR_01001_USER_MAIL_ALREADY_EXISTS: 'ERROR_01001_USER_MAIL_ALREADY_EXISTS',\n      ERROR_01002_USER_PHONE_ALREADY_EXISTS: 'ERROR_01002_USER_PHONE_ALREADY_EXISTS',\n      ERROR_01003_TOKEN_IS_NULL: 'ERROR_01003_TOKEN_IS_NULL',\n      ERROR_01004_TOKEN_NOT_FOUND: 'ERROR_01004_TOKEN_NOT_FOUND',\n      ERROR_01005_TOKEN_ALREADY_VALIDATED: 'ERROR_01005_TOKEN_ALREADY_VALIDATED',\n      ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS: 'ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS',\n      ERROR_01007_ERROR_CREATING_SIGN_UP_OBJECT: 'ERROR_01007_ERROR_CREATING_SIGN_UP_OBJECT',\n      ERROR_01008_TERMS_AND_CONDITIONS_NOT_ACCEPTED: 'ERROR_01008_TERMS_AND_CONDITIONS_NOT_ACCEPTED',\n      ERROR_01009_ERROR_SENDING_SIGN_UP_EMAIL: 'ERROR_01009_ERROR_SENDING_SIGN_UP_EMAIL',\n      ERROR_01010_DATA_GENERATION_IN_PROGRESS: 'ERROR_01010_DATA_GENERATION_IN_PROGRESS',\n      ERROR_01011_DATA_ALREADY_GENERATED: 'ERROR_01011_DATA_ALREADY_GENERATED',\n      ERROR_01013_GATEWAY_CONNECTION_FAILED: 'ERROR_01013_GATEWAY_CONNECTION_FAILED',\n      ERROR_01015_GATEWAY_PAYMENT_ALREADY_PAID: 'ERROR_01015_GATEWAY_PAYMENT_ALREADY_PAID',\n      ERROR_01017_CANT_CREATE_SALE_ORDER_FROM_PROFORMA_WITH_DELETED_PRODUCT_EXCEPTION: 'ERROR_01017_CANT_CREATE_SALE_ORDER_FROM_PROFORMA_WITH_DELETED_PRODUCT_EXCEPTION',\n      ERROR_01021_MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE: 'ERROR_01021_MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE',\n      ERROR_01025_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE: 'ERROR_01025_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE',\n      ERROR_01026_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_FOR_WAREHOUSE: 'ERROR_01026_MISSING_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_FOR_WAREHOUSE',\n      ERROR_01027_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_NOT_ASSOCIATED_WITH_VERIFACTU: 'ERROR_01027_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE_NOT_ASSOCIATED_WITH_VERIFACTU',\n\n\n      // 02 AUTHENTICATION ERRORS\n\n      // 03 COMPANIES ERRORS\n      ERROR_03_001_BARCODE_OVERFLOW: 'ERROR_03_001_BARCODE_OVERFLOW',\n\n      // 04 INVENTORIES ERRORS\n      ERROR_04001_PRICE_NOT_SET: 'ERROR_04001_PRICE_NOT_SET',\n      ERROR_04002_REGISTER_CLOSED: 'ERROR_04002_REGISTER_CLOSED',\n      ERROR_04003_DELETING_POS_ORDER_REGISTER_ACTIVITY_CLOSED: 'ERROR_04003_DELETING_POS_ORDER_REGISTER_ACTIVITY_CLOSED',\n      ERROR_04004_SOME_PRODUCTS_RETURNED: 'ERROR_04004_SOME_PRODUCTS_RETURNED',\n      ERROR_04005_GIFT_CARD_ALREADY_USED: 'ERROR_04005_GIFT_CARD_ALREADY_USED',\n      ERROR_04006_GIFT_CARD_NOT_FOUND: 'ERROR_04006_GIFT_CARD_NOT_FOUND',\n      ERROR_04007_REGISTER_ACTIVITY_CLOSED: 'ERROR_04007_REGISTER_ACTIVITY_CLOSED',\n      ERROR_04008_REGISTER_ALREADY_OPENED: 'ERROR_04008_REGISTER_ALREADY_OPENED',\n      ERROR_04009_REGISTER_ALREADY_CLOSED: 'ERROR_04009_REGISTER_ALREADY_CLOSED',\n      ERROR_04010_GIFT_CARD_PRICE_INSUFFICIENT: 'ERROR_04010_GIFT_CARD_PRICE_INSUFFICIENT',\n      ERROR_04011_GIFT_CARD_ALREADY_EXISTS: 'ERROR_04011_GIFT_CARD_ALREADY_EXISTS',\n      ERROR_04012_HAS_CONSUMED_GIFT_CARDS: 'ERROR_04012_HAS_CONSUMED_GIFT_CARDS',\n      ERROR_04013_HAS_CREATED_GIFT_CARDS_CONSUMED: 'ERROR_04013_HAS_CREATED_GIFT_CARDS_CONSUMED',\n      ERROR_04014_GIFT_CARD_NOT_VALID: 'ERROR_04014_GIFT_CARD_NOT_VALID',\n      ERROR_04015_REGISTER_OR_SITE_IS_MANDATORY: 'ERROR_04015_REGISTER_OR_SITE_IS_MANDATORY',\n      ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN: 'ERROR_04017_FULFILLMENT_NO_AMOUNT_GIVEN',\n      ERROR_04018_CREATE_NEGATIVE_PAYMENT_METHODS_REGISTER_ACTIVITY_CLOSED: 'ERROR_04018_CREATE_NEGATIVE_PAYMENT_METHODS_REGISTER_ACTIVITY_CLOSED',\n      ERROR_04019_RESTORING_POS_ORDER_REGISTER_ACTIVITY_CLOSED: 'ERROR_04019_RESTORING_POS_ORDER_REGISTER_ACTIVITY_CLOSED',\n      ERROR_04020_RESTORING_POS_ORDER_THAT_IS_DEVOLUTION: 'ERROR_04020_RESTORING_POS_ORDER_THAT_IS_DEVOLUTION',\n      ERROR_04021_RESTORING_POS_ORDER_THAT_IS_NOT_DELETED: 'ERROR_04021_RESTORING_POS_ORDER_THAT_IS_NOT_DELETED',\n      ERROR_04022_CANCEL_STOCKTAKING_NOT_ALLOWED_DUE_TO_UIDS: 'ERROR_04022_CANCEL_STOCKTAKING_NOT_ALLOWED_DUE_TO_UIDS',\n      ERROR_04024_ERROR_APPLYING_STOCKTAKING_DUE_TO_PENDING_IMPORTATION: 'ERROR_04024_ERROR_APPLYING_STOCKTAKING_DUE_TO_PENDING_IMPORTATION',\n      ERROR_04027_UDI_ALREADY_ALIVE: 'ERROR_04027_UDI_ALREADY_ALIVE',\n      ERROR_04028_UDI_WITH_NO_STOCK_INSTANCE: 'ERROR_04028_UDI_WITH_NO_STOCK_INSTANCE',\n      ERROR_04029_CONTACT_WITHOUT_B2B_EXCEPTION: 'ERROR_04029_CONTACT_WITHOUT_B2B_EXCEPTION',\n      ERROR_04030_PICKING_ORDER_PICKED_CANNOT_PICK_ITEMS: 'ERROR_04030_PICKING_ORDER_PICKED_CANNOT_PICK_ITEMS',\n      ERROR_04031_NOT_MORE_UNITS_TO_PICK: 'ERROR_04031_NOT_MORE_UNITS_TO_PICK',\n      ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION: 'ERROR_04035_MISSING_REPLENISHMENT_WAREHOUSE_EXCEPTION',\n      ERROR_04037_SCANNED_LOT_NOT_AVAILABLE: 'ERROR_04037_SCANNED_LOT_NOT_AVAILABLE',\n      ERROR_04039_PAYMENT_METHOD_LINKED_TO_ANOTHER_WAREHOUSE: 'ERROR_04039_PAYMENT_METHOD_LINKED_TO_ANOTHER_WAREHOUSE',\n      ERROR_04040_UID_HAS_SHIPPED: 'ERROR_04040_UID_HAS_SHIPPED',\n      ERROR_04041_UID_HAS_ALLOCATED: 'ERROR_04041_UID_HAS_ALLOCATED',\n      ERROR_04042_UID_IS_TRANSFERRING: 'ERROR_04042_UID_IS_TRANSFERRING',\n      ERROR_04043_NOT_DEFAULT_PRICING_TIER: 'ERROR_04043_NOT_DEFAULT_PRICING_TIER',\n      ERROR_04045_CHANGE_WAREHOUSE_FULFILLMENT_STATUS: 'ERROR_04045_CHANGE_WAREHOUSE_FULFILLMENT_STATUS',\n      ERROR_05040_NO_AVAILABLE_UIDS: 'ERROR_05040_NO_AVAILABLE_UIDS',\n      ERROR_05107_CANNOT_CHANGE_WAREHOUSE_OF_A_RETURN_RECEIVED_UID: 'ERROR_05107_CANNOT_CHANGE_WAREHOUSE_OF_A_RETURN_RECEIVED_UID',\n      ERROR_05106_CANNOT_SET_TO_RETURNED_A_RETURNED_RECEIVED_UID: 'ERROR_05106_CANNOT_SET_TO_RETURNED_A_RETURNED_RECEIVED_UID',\n      ERROR_05108_STOCK_COLLISION_IN_MERGE: 'ERROR_05108_STOCK_COLLISION_IN_MERGE',\n      ERROR_05109_PRODUCT_VARIANT_IS_BEING_MERGED: 'ERROR_05109_PRODUCT_VARIANT_IS_BEING_MERGED',\n\n      // 05 MANUFACTURE ERRORS\n\n      // 06 SALES ERRORS\n\n      // 07 USER ERRORS\n      ERROR_07001_PRESTASHOP_INVALID_OPTION_NAME: 'ERROR_07001_PRESTASHOP_INVALID_OPTION_NAME',\n\n      // 08 ECOMMERCE ERRORS\n      ERROR_08001_PRESTASHOP_DUPLICATED_COMPOSITION_NAME: 'ERROR_08001_PRESTASHOP_DUPLICATED_COMPOSITION_NAME',\n      ERROR_08003_PRESTASHOP_CANNOT_GET_PRODUCT_IMAGES: 'ERROR_08003_PRESTASHOP_CANNOT_GET_PRODUCT_IMAGES',\n      ERROR_08004_PRESTASHOP_CANNOT_DELETE_PRODUCT_IMAGE: 'ERROR_08004_PRESTASHOP_CANNOT_DELETE_PRODUCT_IMAGE',\n      ERROR_08005_IMPORTATION_IN_PROGRESS: 'ERROR_08005_IMPORTATION_IN_PROGRESS',\n\n      // 09 INTEGRATION APPS\n      ERROR_09001_INVALID_ORDER_PAYMENT_STATUS: 'ERROR_09001_INVALID_ORDER_PAYMENT_STATUS',\n      ERROR_09002_INVALID_FULFILLMENT_TYPE: 'ERROR_09002_INVALID_FULFILLMENT_TYPE',\n      ERROR_09003_FULFILLMENT_WITHOUT_ITEMS: 'ERROR_09003_FULFILLMENT_WITHOUT_ITEMS',\n      ERROR_09004_SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND: 'ERROR_09004_SENDCLOUD_STOCKAGILE_INTEGRATION_NOT_FOUND',\n      ERROR_09005_SENDCLOUD_NOT_KEYS_PROVIDED_EXCEPTION: 'ERROR_09005_SENDCLOUD_NOT_KEYS_PROVIDED_EXCEPTION',\n      ERROR_09006_SENDCLOUD_ORDER_ALREADY_PROCESSED_EXCEPTION: 'ERROR_09006_SENDCLOUD_ORDER_ALREADY_PROCESSED_EXCEPTION',\n      ERROR_09007_ORDER_WITHOUT_CUSTOMER: 'ERROR_09007_ORDER_WITHOUT_CUSTOMER',\n      ERROR_09008_MISSING_WAREHOUSE_CONTACT_PERSON: 'ERROR_09008_MISSING_WAREHOUSE_CONTACT_PERSON',\n\n      //10 INTEGRATION_APPS ERRORS\n      ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER: 'ERROR_10001_KUBIBAI_CANNOT_UPDATE_POSORDER',\n      ERROR_10002_KUBIBAI_CANNOT_GENERATE_INVOICE_PDF: 'ERROR_10002_KUBIBAI_CANNOT_GENERATE_INVOICE_PDF',\n      ERROR_10003_VERIFACTU_ALREADY_EXISTS: 'ERROR_10003_VERIFACTU_ALREADY_EXISTS',\n      ERROR_10004_VERIFACTU_MISSING_OWNER: 'ERROR_10004_VERIFACTU_MISSING_OWNER',\n      ERROR_10005_VERIFACTU_MISSING_OWNER_DATA: 'ERROR_10005_VERIFACTU_MISSING_OWNER_DATA',\n      ERROR_10006_VERIFACTU_MISSING_COMPANY_DATA: 'ERROR_10006_VERIFACTU_MISSING_COMPANY_DATA',\n      ERROR_10007_VERIFACTU_MISSING_FISCAL_ADDRESS_DATA: 'ERROR_10007_VERIFACTU_MISSING_FISCAL_ADDRESS_DATA',\n      ERROR_10008_ASSIGN_VERIFACTU_TO_KUBIBAI_SERIAL_NUMBER_TYPE: 'ERROR_10008_ASSIGN_VERIFACTU_TO_KUBIBAI_SERIAL_NUMBER_TYPE',\n      ERROR_10009_MISMATCHING_FISCAL_ADDRESSES_BETWEEN_VERIFACTU_AND_SERIAL_NUMBER_TYPE: 'ERROR_10009_MISMATCHING_FISCAL_ADDRESSES_BETWEEN_VERIFACTU_AND_SERIAL_NUMBER_TYPE',\n      ERROR_10010_INVALID_VERIFACTU_ENVIRONMENT_STATUS: 'ERROR_10010_INVALID_VERIFACTU_ENVIRONMENT_STATUS',\n      ERROR_10011_INVALID_VERIFACTU_ENVIRONMENT_STATUS_TRANSITION: 'ERROR_10011_INVALID_VERIFACTU_ENVIRONMENT_STATUS_TRANSITION',\n\n      //11 OPTIMIZATION CONFIGURATION ERRORS\n      ERROR_11001_PLANNING_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED: 'ERROR_11001_PLANNING_CONFIGURATION_MINIMUM_QUANTITY_EXCEEDED',\n      ERROR_11002_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_PERCENTAGE: 'ERROR_11002_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_PERCENTAGE',\n      ERROR_11003_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_FIXED_AMOUNT: 'ERROR_11003_PLANNING_CONFIGURATION_MAXIMUM_QUANTITY_EXCEEDED_BY_FIXED_AMOUNT',\n      ERROR_11004_PLANNING_CONFIGURATION_MINIMUM_STOCK_EXCEEDED: 'ERROR_11004_PLANNING_CONFIGURATION_MINIMUM_STOCK_EXCEEDED',\n      ERROR_11005_PLANNING_CONFIGURATION_MIN_QTY_EXCEEDED: 'ERROR_11005_PLANNING_CONFIGURATION_MIN_QTY_EXCEEDED',\n      ERROR_11006_PLANNING_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY: 'ERROR_11006_PLANNING_CONFIGURATION_QTY_NOT_MULTIPLE_MIN_QTY',\n      ERROR_11007_PLANNING_CONFIGURATION_MAX_PRICE_EXCEEDED: 'ERROR_11007_PLANNING_CONFIGURATION_MAX_PRICE_EXCEEDED',\n\n      //13 DYNAMIC REPORTS ERRORS\n      ERROR_13001_DYNAMIC_REPORTS_INVALID_METRIC_COMBINATION: 'ERROR_13001_DYNAMIC_REPORTS_INVALID_METRIC_COMBINATION',\n\n      // 14 SUBSCRIPTION ERRORS\n      ERROR_14006_PLAN_DOWNGRADE_NOT_VALID: 'ERROR_14006_PLAN_DOWNGRADE_NOT_VALID'\n    })\n\n    .constant('GATEWAY_ERRORS', {\n      GATEWAY_ERROR_NOT_ENOUGH_BALANCE: 'GATEWAY_ERROR_NOT_ENOUGH_BALANCE',\n      GATEWAY_ERROR_BLOCK_CARD: 'GATEWAY_ERROR_BLOCK_CARD',\n      GATEWAY_ERROR_CARD_EXPIRED: 'GATEWAY_ERROR_CARD_EXPIRED',\n      GATEWAY_ERROR_INVALID_AMOUNT: 'GATEWAY_ERROR_INVALID_AMOUNT',\n      GATEWAY_ERROR_INVALID_CARD: 'GATEWAY_ERROR_INVALID_CARD',\n      GATEWAY_ERROR_PIN_TRIES_EXCEEDED: 'GATEWAY_ERROR_PIN_TRIES_EXCEEDED',\n      GATEWAY_ERROR_WITHDRAWAL_AMOUNT_EXCEEDED: 'GATEWAY_ERROR_WITHDRAWAL_AMOUNT_EXCEEDED'\n    })\n\n    .constant('DOJO_ERROR_MESSAGES', {\n      100: 'GATEWAY_ERROR_DOJO_TIMEOUT',\n      120: 'GATEWAY_ERROR_DOJO_TIMEOUT'\n    })\n\n\n    .constant('DOJO_STATES', {\n      10: 'GATEWAY_STATUS_INITIATING',\n      20: 'GATEWAY_STATUS_INITIATED',\n      30: 'GATEWAY_STATUS_AUTHORIZED',\n      40: 'GATEWAY_STATUS_CAPTURED',\n      50: 'GATEWAY_STATUS_CANCEL_REQUESTED',\n      60: 'GATEWAY_STATUS_CANCELLED',\n      70: 'GATEWAY_STATUS_SIGNATURE_VERIFICATION_ACCEPTED',\n      80: 'GATEWAY_STATUS_SIGNATURE_VERIFICATION_REJECTED',\n      90: 'GATEWAY_STATUS_SIGNATURE_VERIFICATION_REQUIRED',\n      100: 'GATEWAY_STATUS_EXPIRED',\n      110: 'GATEWAY_STATUS_DECLINED',\n      120: 'GATEWAY_STATUS_TIMEOUT'\n    })\n\n    .constant('MAX_PRODUCTS_PER_PDF', {\n      'PURCHASE_ORDER': 50,\n      'PURCHASE_ORDER_DELIVERY': 50,\n      'TRANSFER_ORDER': 50,\n      'TRANSFER_ORDER_DELIVERY': 50,\n      'SALE_ORDER': 50,\n      'SALE_ORDER_DELIVERY': 50\n    })\n\n    .constant('GENEDER_TYPES', {\n      'MALE': 1,\n      'FEMALE': 2,\n      'OTHER': 3\n    })\n\n    .constant('ORDER_DELIVERY_STATUSES', {\n      '1': 'DRAFT',\n      '2': 'PREPARED',\n      '3': 'SHIPPED',\n      '4': 'RECEPTION_DRAFT',\n      '5': 'RECEIVED'\n    })\n\n    .constant('STOCKTAKING_STATUSES', {\n      DRAFT: 1,\n      APPLIED: 2,\n      1: 'DRAFT',\n      2: 'APPLIED'\n    })\n\n    .constant('STOCKTAKING_TYPES', {\n      TOTAL: 1,\n      PARTIAL: 2,\n      1: 'TOTAL',\n      2: 'PARTIAL'\n    })\n\n    .constant('STOCKTAKING_STATUS_COLORS', {\n      '1': 'md-grey-400-bg',\n      '2': 'md-green-500-bg'\n    })\n\n    .constant('STOCKTAKING_CLONE_STATUS', {\n      READY_TO_CLONE: 0,\n      CLONE_IN_PROGRESS: 1\n    })\n\n    .constant('ORDER_DELIVERY_STATUSES_REVERSE', {\n      'DRAFT': 1,\n      'PREPARED': 2,\n      'SHIPPED': 3,\n      'RECEPTION_DRAFT': 4,\n      'RECEIVED': 5\n    })\n\n    .constant('ORDER_DELIVERY_STATUS_COLORS', {\n      '1': 'md-grey-400-bg',\n      '2': 'md-orange-500-bg',\n      '3': 'md-yellow-500-bg',\n      '4': 'md-grey-400-bg',\n      '5': 'md-green-500-bg'\n    })\n\n    .constant('SALE_ORDER_DELIVERY_STATUS_COLORS', {\n      '1': 'md-grey-400-bg',\n      '2': 'md-yellow-500-bg',\n      '3': 'md-green-500-bg',\n      '4': 'md-orange-500-bg',\n      '5': 'md-pink-500-bg'\n    })\n\n    .constant('EXPIRING_DATE_PAYMENT_STATUS', {\n      10: 'PENDING',\n      20: 'PAID',\n      30: 'EXPIRED'\n    })\n\n    .constant('PURCHASE_ORDER_STATUSES', {\n      '0': 'PURCHASE_ORDER_STATUS_CREATING_DRAFT',\n      '1': 'PURCHASE_ORDER_STATUS_DRAFT',\n      '2': 'PURCHASE_ORDER_STATUS_ORDERED',\n      '7': 'PURCHASE_ORDER_STATUS_PARTIALLY_RECEIVED',\n      '8': 'PURCHASE_ORDER_STATUS_RECEIVED'\n      //'10': 'PURCHASE_ORDER_STATUS_CANCELLED'\n    })\n\n    .constant('PURCHASE_ORDER_STATUSES_REVERSE', {\n      'PURCHASE_ORDER_STATUS_CREATING_DRAFT': 0,\n      'PURCHASE_ORDER_STATUS_DRAFT': 1,\n      'PURCHASE_ORDER_STATUS_ORDERED': 2,\n      'PURCHASE_ORDER_STATUS_PARTIALLY_RECEIVED': 7,\n      'PURCHASE_ORDER_STATUS_RECEIVED': 8\n      //'PURCHASE_ORDER_STATUS_CANCELLED': 10\n    })\n\n    .constant('PURCHASE_ORDER_STATUS_COLORS', {\n      '0': 'md-grey-400-bg',\n      '1': 'md-grey-400-bg',\n      '2': 'md-yellow-200-bg',\n      '7': 'md-blue-100-bg',\n      '8': 'md-green-100-bg',\n      '10': 'md-red-100-bg'\n    })\n\n    .constant('PRODUCTION_ORDER_STATUSES', {\n      '10': 'PRODUCTION_ORDER_STATUS_DRAFT',\n      '20': 'PRODUCTION_ORDER_STATUS_ORDERED',\n      '30': 'PRODUCTION_ORDER_STATUS_PRODUCED',\n      '40': 'PRODUCTION_ORDER_STATUS_CANCELED'\n    })\n\n    .constant('PRODUCTION_ORDER_STATUSES_REVERSE', {\n      'PRODUCTION_ORDER_STATUS_DRAFT': 10,\n      'PRODUCTION_ORDER_STATUS_ORDERED': 20,\n      'PRODUCTION_ORDER_STATUS_PRODUCED': 30,\n      'PRODUCTION_ORDER_STATUS_CANCELED': 40\n    })\n\n    .constant('PRODUCTION_ORDER_STATUS_COLORS', {\n      '10': 'md-grey-400-bg',\n      '20': 'md-yellow-500-bg',\n      '30': 'md-green-500-bg',\n      '40': 'md-red-500-bg'\n    })\n\n    .constant('SALE_ORDER_STATUSES', {\n      '1': 'SALE_ORDER_STATUS_DRAFT',\n      '2': 'SALE_ORDER_STATUS_PENDING_TO_PREPARE',\n      '3': 'SALE_ORDER_STATUS_PARTIALLY_PREPARED',\n      '4': 'SALE_ORDER_STATUS_PREPARED',\n      '5': 'SALE_ORDER_STATUS_PARTIALLY_SHIPPED',\n      '6': 'SALE_ORDER_STATUS_SHIPPED',\n      '7': 'SALE_ORDER_STATUS_PENDING_TO_RECEIVE',\n      '8': 'SALE_ORDER_STATUS_PARTIALLY_RECEIVED',\n      '9': 'SALE_ORDER_STATUS_RECEIVED',\n      '10': 'SALE_ORDER_STATUS_CANCELED',\n      '11': 'SALE_ORDER_STATUS_B2B_DRAFT',\n      '12': 'SALE_ORDER_STATUS_B2B_ORDERED'\n    })\n\n    .constant('SALE_ORDER_STATUSES_REVERSE', {\n      'SALE_ORDER_STATUS_DRAFT': 1,\n      'SALE_ORDER_STATUS_PENDING_TO_PREPARE': 2,\n      'SALE_ORDER_STATUS_PARTIALLY_PREPARED': 3,\n      'SALE_ORDER_STATUS_PREPARED': 4,\n      'SALE_ORDER_STATUS_PARTIALLY_SHIPPED': 5,\n      'SALE_ORDER_STATUS_SHIPPED': 6,\n      'SALE_ORDER_STATUS_PENDING_TO_RECEIVE': 7,\n      'SALE_ORDER_STATUS_PARTIALLY_RECEIVED': 8,\n      'SALE_ORDER_STATUS_RECEIVED': 9,\n      'SALE_ORDER_STATUS_CANCELED': 10,\n      'SALE_ORDER_STATUS_B2B_DRAFT': 11,\n      'SALE_ORDER_STATUS_B2B_ORDERED': 12\n    })\n\n    .constant('SALE_ORDER_STATUS_COLORS', {\n      '1': 'md-grey-400-bg',\n      '2': 'md-yellow-100-bg',\n      '3': 'md-orange-100-bg',\n      '4': 'md-blue-100-bg',\n      '5': 'md-lime-100-bg',\n      '6': 'md-green-100-bg',\n      '7': 'md-pink-100-bg',\n      '8': 'md-lime-100-bg',\n      '9': 'md-green-100-bg',\n      '10': 'md-red-100-bg',\n      '11': 'md-grey-100-bg',\n      '12': 'md-orange-100-bg'\n    })\n\n    .constant('TRANSFER_ORDER_STATUSES', {\n      '0': 'TRANSFER_ORDER_STATUS_CREATING_DRAFT',\n      '1': 'TRANSFER_ORDER_STATUS_DRAFT',\n      '2': 'TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE',\n      '4': 'TRANSFER_ORDER_STATUS_ALLOCATED',\n      '6': 'TRANSFER_ORDER_STATUS_SHIPPED',\n      '7': 'TRANSFER_ORDER_STATUS_RECEPTION_DRAFT',\n      '8': 'TRANSFER_ORDER_STATUS_RECEIVED'\n    })\n\n    .constant('TRANSFER_ORDER_STATUSES_REVERSE', {\n      'TRANSFER_ORDER_STATUS_CREATING_DRAFT': '0',\n      'TRANSFER_ORDER_STATUS_DRAFT': '1',\n      'TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE': '2',\n      'TRANSFER_ORDER_STATUS_ALLOCATED': '4',\n      'TRANSFER_ORDER_STATUS_PREPARED': '4',\n      'TRANSFER_ORDER_STATUS_SHIPPED': '6',\n      'TRANSFER_ORDER_STATUS_RECEPTION_DRAFT': '7',\n      'TRANSFER_ORDER_STATUS_RECEIVED': '8'\n    })\n\n    .constant('TRANSFER_ORDER_STATUS_COLORS', {\n      '0': 'md-grey-400-bg',\n      '1': 'md-grey-400-bg',\n      '2': 'md-pink-100-bg',\n      '3': 'md-orange-100-bg',\n      '4': 'md-orange-100-bg',\n      '5': 'md-amber-100-bg',\n      '6': 'md-yellow-100-bg',\n      '7': 'md-blue-100-bg',\n      '8': 'md-green-100-bg',\n      '10': 'md-red-500-bg'\n    })\n\n    .constant('ADJUSTMENT_ORDER_STATUSES', {\n      '1': 'ADJUSTMENT_ORDER_STATUS_DRAFT',\n      '2': 'ADJUSTMENT_ORDER_STATUS_ADJUSTED'\n    })\n\n    .constant('ADJUSTMENT_ORDER_STATUSES_REVERSE', {\n      'ADJUSTMENT_ORDER_STATUS_DRAFT': '1',\n      'ADJUSTMENT_ORDER_STATUS_ADJUSTED': '2'\n    })\n\n    .constant('ADJUSTMENT_ORDER_STATUS_COLORS', {\n      '1': 'md-grey-400-bg',\n      '2': 'md-green-500-bg'\n    })\n\n    .constant('CONTACT_PERSON_TYPES', {\n      '1': 'NATURAL_PERSON_TYPE',\n      '2': 'JURIDICAL_PERSON_TYPE'\n    })\n\n    .constant('CONTACT_PERSON_TYPES', {\n      '1': 'NATURAL_PERSON_TYPE',\n      '2': 'JURIDICAL_PERSON_TYPE'\n    })\n\n    .constant('CONTACT_PERSON_TYPES_REVERSE', {\n      'NATURAL_PERSON_TYPE': '1',\n      'JURIDICAL_PERSON_TYPE': '2'\n    })\n\n    .constant('ADJUSTMENT_ORDER_REASONS', {\n      '1': 'USAGE',\n      '2': 'DAMAGE',\n      '3': 'SHRINKAGE',\n      '4': 'PROMOTION',\n      '11': 'RETURN',\n      '21': 'OTHER'\n    })\n\n    .constant('ADJUSTMENT_ORDER_REASONS_REVERSE', {\n      'USAGE': '1',\n      'DAMAGE': '2',\n      'SHRINKAGE': '3',\n      'PROMOTION': '4',\n      'RETURN': '11',\n      'OTHER': '21'\n    })\n\n    .constant('ADJUSTMENT_ORDER_OPERATIONS', {\n      '1': 'INCREASE',\n      '2': 'DECREASE'\n    })\n\n    .constant('ADJUSTMENT_ORDER_OPERATIONS_REVERSE', {\n      'INCREASE': '1',\n      'DECREASE': '2'\n    })\n\n    .constant('PAYMENT_TERM_TYPES', {\n      '1': 'PAYMENT_TERM_TYPE_CASH_TRANSFER',\n      //'2': 'PAYMENT_TERM_TYPE_PIA',\n      //'3': 'PAYMENT_TERM_TYPE_NET7',\n      //'4': 'PAYMENT_TERM_TYPE_NET10',\n      //'5': 'PAYMENT_TERM_TYPE_NET30',\n      '6': 'PAYMENT_TERM_TYPE_NET60',\n      //'7': 'PAYMENT_TERM_TYPE_NET90',\n      //'8': 'PAYMENT_TERM_TYPE_EOM',\n      //'9': 'PAYMENT_TERM_TYPE_21MFI',\n      //'10': 'PAYMENT_TERM_TYPE_COD',\n      //'11': 'PAYMENT_TERM_TYPE_CASH_ACCOUNT',\n      //'12': 'PAYMENT_TERM_TYPE_LETTER_OF_CREDIT',\n      //'13': 'PAYMENT_TERM_TYPE_BILL_OF_EXCHANGE',\n      //'14': 'PAYMENT_TERM_TYPE_CND',\n      //'15': 'PAYMENT_TERM_TYPE_CBS',\n      //'16': 'PAYMENT_TERM_TYPE_CIA',\n      //'17': 'PAYMENT_TERM_TYPE_CWO',\n      //'18': 'PAYMENT_TERM_TYPE_1MD',\n      //'19': 'PAYMENT_TERM_TYPE_2MD',\n      //'20': 'PAYMENT_TERM_TYPE_CONTRA',\n      //'21': 'PAYMENT_TERM_TYPE_STAGE_PAYMENT_TERM',\n      '22': 'PAYMENT_TERM_TYPE_30_60_90'\n    })\n\n    .constant('CURRENCIES', {\n      ARS: '$',\n      CHF: 'CHF',\n      COP: '$',\n      EUR: '€',\n      IDR: 'Rp',\n      GBP: '£',\n      JPY: '¥',\n      MXN: '$',\n      USD: '$',\n      VEF: '$',\n      ZAR: 'R',\n      CLP: '$',\n      AED: 'AED',\n      PEN: 'S/',\n      CAD: '$',\n      GTQ: 'Q',\n      HNL: 'L',\n      NIO: 'C$',\n      CRC: '₡',\n      PAB: 'B/.',\n      BZD: '$',\n      SVC: '$',\n      HTG: 'G',\n      DOP: '$',\n      JMD: '$',\n      BSD: '$',\n      CUP: '$',\n      CUC: '$',\n      TTD: '$',\n      BOB: 'Bs.',\n      BRL: 'R$',\n      GYD: '$',\n      PYG: '₲',\n      SRD: '$',\n      UYU: '$',\n      DKK: 'kr',\n      SEK: 'kr',\n      NOK: 'kr',\n      ISK: 'kr',\n      PLN: 'zł',\n      CZK: 'Kč',\n      HUF: 'Ft',\n      RON: 'lei',\n      BGN: 'лв',\n      HRK: 'kn',\n      TRY: '₺',\n      MKD: 'ден',\n      ALL: 'L',\n      ILS: '₪',\n      KWD: 'د.ك',\n      OMR: 'ر.ع.',\n      QAR: 'ر.ق',\n      SAR: 'ر.س',\n      YER: '﷼',\n      CNY: '¥',\n      KRW: '₩',\n      TWD: 'NT$',\n      MOP: 'MOP$',\n      HKD: '$',\n      MYR: 'RM',\n      PHP: '₱',\n      SGD: '$',\n      THB: '฿',\n      VND: '₫',\n      AFN: '؋',\n      BDT: '৳',\n      INR: '₹',\n      PKR: '₨',\n      LKR: '₨',\n      NPR: '₨',\n      MVR: 'ރ.',\n      BTN: 'Nu.',\n      KZT: '₸',\n      KGS: 'с',\n      TJS: 'ЅМ',\n      TMT: 'm',\n      UZS: 'сўм',\n      AUD: '$',\n      NZD: '$',\n      FJD: '$',\n      PGK: 'K',\n      SBD: '$',\n      TOP: 'T$',\n      VUV: 'VT',\n      WST: 'T',\n      DZD: 'دج',\n      AOA: 'Kz',\n      BWP: 'P',\n      BIF: 'FBu',\n      CVE: '$',\n      XAF: 'FCFA',\n      XOF: 'CFA',\n      KMF: 'CF',\n      CDF: 'FC',\n      DJF: 'Fdj',\n      EGP: '£',\n      ERN: 'Nfk',\n      SZL: 'E',\n      ETB: 'ብር',\n      GMD: 'D',\n      GHS: 'GH₵',\n      GNF: 'FG',\n      KES: 'KSh',\n      LSL: 'M',\n      LRD: '$',\n      LYD: 'ل.د',\n      MWK: 'MK',\n      MUR: '₨',\n      MAD: 'MAD',\n      MZN: 'MT',\n      NAD: '$',\n      NGN: '₦',\n      RWF: 'FRw',\n      STD: 'Db',\n      SCR: '₨',\n      SLL: 'Le',\n      SOS: 'S',\n      SSP: '£',\n      SDG: 'ج.س.',\n      TZS: 'TSh',\n      UGX: 'USh',\n      ZMW: 'ZK',\n      ZWL: '$',\n      XCD: '$'\n    })\n\n    // Materials:\n    .constant('CLOTH_MATERIALS', [\n      'CUTTON',\n      'DENIM',\n      'FLAX',\n      'LEATHER',\n      'LEATHER',\n      'LYCRA',\n      'POLYESTER',\n      'SILK',\n      'SYNTHETIC',\n      'WOOL'\n    ])\n\n    .constant('wbConstGenders', [{\n      'code': 'MALE',\n      'backend-code': 1\n    }, {\n      'code': 'FEMALE',\n      'backend-code': 2\n    }])\n\n    .constant('wbPaths', {\n      'ItemDetailsDialog': 'app/main/orders/new/dialogs/item-details-dialog.html',\n      'NewCustomerDialog': 'app/main/customers/list-customers/dialogs/new-customer-dialog.html',\n      'PayOrderItemsDialog': 'app/main/customers/customer/dialogs/pay-order-items/pay-order-items-dialog.html'\n    })\n\n    .constant('STOCK_MOVEMENT_AUTOCODE_DICT', {\n      'NOT_AVAILABLE': 1,\n      'REMOVED': 2,\n      'STOCKTAKING': 3\n    })\n\n    .constant('STOCK_MOVEMENT_REASONS', {\n      'STOCK_MOVEMENT_REASON_BREAKAGE': 10,\n      'STOCK_MOVEMENT_REASON_EXPIRY': 20,\n      'STOCK_MOVEMENT_REASON_ROBBERY': 30,\n      'STOCK_MOVEMENT_REASON_OTHER': 40,\n      'STOCK_MOVEMENT_REASON_TESTER': 50,\n      'STOCK_MOVEMENT_REASON_LOSS': 60,\n      'STOCK_MOVEMENT_REASON_ADJUSTMENT': 70,\n      'STOCK_MOVEMENT_REASON_INTERNAL_USE': 80,\n      'STOCK_MOVEMENT_REASON_PRESS_GIFT': 90,\n      'STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT': 100,\n      'STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT': 110,\n      'STOCK_MOVEMENT_REASON_CUSTOMER_GIFT': 120,\n      'STOCK_MOVEMENT_REASON_COURSE': 130,\n      'STOCK_MOVEMENT_REASON_OWNER_GIFT': 140,\n      'STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT': 150,\n\n      10: 'STOCK_MOVEMENT_REASON_BREAKAGE',\n      20: 'STOCK_MOVEMENT_REASON_EXPIRY',\n      30: 'STOCK_MOVEMENT_REASON_ROBBERY',\n      40: 'STOCK_MOVEMENT_REASON_OTHER',\n      50: 'STOCK_MOVEMENT_REASON_TESTER',\n      60: 'STOCK_MOVEMENT_REASON_LOSS',\n      70: 'STOCK_MOVEMENT_REASON_ADJUSTMENT',\n      80: 'STOCK_MOVEMENT_REASON_INTERNAL_USE',\n      90: 'STOCK_MOVEMENT_REASON_PRESS_GIFT',\n      100: 'STOCK_MOVEMENT_REASON_EMPLOYEE_GIFT',\n      110: 'STOCK_MOVEMENT_REASON_EMPLOYEE_WELCOME_GIFT',\n      120: 'STOCK_MOVEMENT_REASON_CUSTOMER_GIFT',\n      130: 'STOCK_MOVEMENT_REASON_COURSE',\n      140: 'STOCK_MOVEMENT_REASON_OWNER_GIFT',\n      150: 'STOCK_MOVEMENT_REASON_CUSTOMER_WELCOME_GIFT'\n    })\n\n    .constant('STOCK_MOVEMENT_TYPES', {\n      11: 'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARED',\n      12: 'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARATION_CANCELLED',\n      13: 'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION',\n      14: 'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION_CANCELLED',\n      15: 'STOCK_MOVEMENT_TYPE_SALE_ALLOCATED',\n      16: 'STOCK_MOVEMENT_TYPE_SALE_DEALLOCATED',\n      21: 'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARED',\n      22: 'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARATION_CANCELLED',\n      23: 'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEIVED',\n      24: 'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEPTION_CANCELLED',\n      25: 'STOCK_MOVEMENT_TYPE_TRANSFER_ALLOCATED',\n      26: 'STOCK_MOVEMENT_TYPE_TRANSFER_DEALLOCATED',\n      31: 'STOCK_MOVEMENT_TYPE_POS_ORDER',\n      32: 'STOCK_MOVEMENT_TYPE_POS_ORDER_REMOVAL',\n      33: 'STOCK_MOVEMENT_TYPE_POS_ORDER_DEVOLUTION',\n      34: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PENDING',\n      35: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_ALLOCATED',\n      36: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_SHIPPED',\n      37: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PICKED_UP',\n      38: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_CANCELLED',\n      39: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED',\n      310: 'STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_RETURNED',\n      311: 'STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_REMOVED',\n      312: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_ALLOCATED_CANCELLED',\n      313: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_CANCELLED',\n      314: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_CANCELLED',\n      315: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE',\n      316: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED_RECEIVED',\n      317: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURNED_RECEIVED_CANCELLED',\n      318: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_TO_PENDING',\n      319: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_TO_PENDING',\n      320: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURN_RECEIVED_TO_RETURNED',\n      321: 'STOCK_MOVEMENT_TYPE_POS_ORDER_RESTORATION',\n      322: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_SHIPPED',\n      323: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_ALLOCATED',\n      324: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_RETURN_RECEIVED',\n      325: 'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_CANCELLED',\n      326: 'STOCK_MOVEMENT_TYPE_PRODUCT_VARIANT_MERGED',\n      41: 'STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEIVED',\n      42: 'STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEPTION_CANCELLED',\n      43: 'STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RETURNED',\n      51: 'STOCK_MOVEMENT_TYPE_MANUAL_RESET',\n      52: 'STOCK_MOVEMENT_TYPE_PRODUCT_IMPORT',\n      53: 'STOCK_MOVEMENT_TYPE_WAREHOUSE_DELETED',\n      54: 'STOCK_MOVEMENT_TYPE_AUTOMATIC_RESET',\n      55: 'STOCK_MOVEMENT_TYPE_UPDATED_AMOUNT',\n      56: 'STOCK_MOVEMENT_TYPE_WAREHOUSE_REASSIGNED',\n      61: 'STOCK_MOVEMENT_TYPE_STOCKTAKING',\n      62: 'STOCK_MOVEMENT_TYPE_STOCKTAKING_CANCELLED',\n      70: 'STOCK_MOVEMENT_TYPE_PRODUCTION_PRODUCED',\n      71: 'STOCK_MOVEMENT_TYPE_PRODUCTION_CANCELLED',\n      80: 'STOCK_MOVEMENT_TYPE_MANUAL_RESET_FROM_API',\n      81: 'STOCK_MOVEMENT_TYPE_MANUAL_RESET_FROM_ECOMMERCE',\n      90: 'STOCK_MOVEMENT_TYPE_ADJUSTMENT_ADJUSTED',\n      91: 'STOCK_MOVEMENT_TYPE_ADJUSTMENT_CANCELLED',\n      101: 'STOCK_MOVEMENT_TYPE_UID_CREATED',\n      102: 'STOCK_MOVEMENT_TYPE_UID_MODIFIED',\n      103: 'STOCK_MOVEMENT_TYPE_UID_DELETED',\n      104: 'STOCK_MOVEMENT_TYPE_UID_INVENTORIED',\n      105: 'STOCK_MOVEMENT_TYPE_UID_SPLITTED',\n      106: 'STOCK_MOVEMENT_TYPE_UID_IMPORTED',\n      110: 'STOCK_MOVEMENT_TYPE_PICKING_UID_ASSIGN',\n      111: 'STOCK_MOVEMENT_TYPE_PICKING_UID_UNASSIGN',\n      112: 'STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_ALLOCATED',\n      113: 'STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_SHIPPED',\n      114: 'STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_PICKED_UP',\n\n      'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARED': 11,\n      'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_PREPARATION_CANCELLED': 12,\n      'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION': 13,\n      'STOCK_MOVEMENT_TYPE_SALE_DELIVERY_DEVOLUTION_CANCELLED': 14,\n      'STOCK_MOVEMENT_TYPE_SALE_ALLOCATED': 15,\n      'STOCK_MOVEMENT_TYPE_SALE_DEALLOCATED': 16,\n\n      'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARED': 21,\n      'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_PREPARATION_CANCELLED': 22,\n      'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEIVED': 23,\n      'STOCK_MOVEMENT_TYPE_TRANSFER_DELIVERY_RECEPTION_CANCELLED': 24,\n      'STOCK_MOVEMENT_TYPE_TRANSFER_ALLOCATED': 25,\n      'STOCK_MOVEMENT_TYPE_TRANSFER_DEALLOCATED': 26,\n\n      'STOCK_MOVEMENT_TYPE_POS_ORDER': 31,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_REMOVAL': 32,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_DEVOLUTION': 33,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PENDING': 34,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_ALLOCATED': 35,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_SHIPPED': 36,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_PICKED_UP': 37,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_CANCELLED': 38,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED': 39,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_RETURNED': 310,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_PRODUCT_VARIANT_REMOVED': 311,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_ALLOCATED_CANCELLED': 312,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_CANCELLED': 313,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_CANCELLED': 314,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE': 315,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_TO_RETURNED_RECEIVED': 316,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURNED_RECEIVED_CANCELLED': 317,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_SHIPPED_TO_PENDING': 318,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_PICKED_UP_TO_PENDING': 319,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_RETURN_RECEIVED_TO_RETURNED': 320,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_RESTORATION': 321,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_SHIPPED': 322,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_ALLOCATED': 323,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_RETURN_RECEIVED': 324,\n      'STOCK_MOVEMENT_TYPE_POS_ORDER_SHIPPING_CHANGED_SOURCE_WAREHOUSE_FROM_CANCELLED': 325,\n      'STOCK_MOVEMENT_TYPE_PRODUCT_VARIANT_MERGED': 326,\n      'STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEIVED': 41,\n      'STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RECEPTION_CANCELLED': 42,\n      'STOCK_MOVEMENT_TYPE_PURCHASE_DELIVERY_RETURNED': 43,\n      'STOCK_MOVEMENT_TYPE_MANUAL_RESET': 51,\n      'STOCK_MOVEMENT_TYPE_PRODUCT_IMPORT': 52,\n      'STOCK_MOVEMENT_TYPE_WAREHOUSE_DELETED': 53,\n      'STOCK_MOVEMENT_TYPE_AUTOMATIC_RESET': 54,\n      'STOCK_MOVEMENT_TYPE_UPDATED_AMOUNT': 55,\n      'STOCK_MOVEMENT_TYPE_STOCKTAKING': 61,\n      'STOCK_MOVEMENT_TYPE_STOCKTAKING_CANCELLED': 62,\n      'STOCK_MOVEMENT_TYPE_PRODUCTION_PRODUCED': 70,\n      'STOCK_MOVEMENT_TYPE_PRODUCTION_CANCELLED': 71,\n      'STOCK_MOVEMENT_TYPE_MANUAL_RESET_FROM_API': 80,\n      'STOCK_MOVEMENT_TYPE_MANUAL_RESET_FROM_ECOMMERCE': 81,\n      'STOCK_MOVEMENT_TYPE_ADJUSTMENT_ADJUSTED': 90,\n      'STOCK_MOVEMENT_TYPE_ADJUSTMENT_CANCELLED': 91,\n      'STOCK_MOVEMENT_TYPE_UID_CREATED': 101,\n      'STOCK_MOVEMENT_TYPE_UID_MODIFIED': 102,\n      'STOCK_MOVEMENT_TYPE_UID_DELETED': 103,\n      'STOCK_MOVEMENT_TYPE_UID_INVENTORIED': 104,\n      'STOCK_MOVEMENT_TYPE_UID_SPLITTED': 105,\n      'STOCK_MOVEMENT_TYPE_UID_IMPORTED': 106,\n      'STOCK_MOVEMENT_TYPE_PICKING_UID_ASSIGN': 110,\n      'STOCK_MOVEMENT_TYPE_PICKING_UID_UNASSIGN': 111,\n      'STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_ALLOCATED': 112,\n      'STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_SHIPPED': 113,\n      'STOCK_MOVEMENT_TYPE_MANUAL_BATCH_ASSIGNMENT_PICKED_UP': 114\n    })\n\n    .constant('PERMISSIONS', {\n      'APP': {\n        'ACCOUNT': {\n          'USERS': 'app.account.users'\n        },\n        'ACCOUNTING': {\n          'INVOICES': 'app.accounting.invoices',\n          'PROFORMAS': 'app.accounting.proformas',\n          'QUOTES': 'app.accounting.quotes'\n        },\n        'CONTACTS': {\n          'CONTACTS': 'app.contacts'\n        },\n        'MANUFACTURE': {\n          'COLLECTIONS': 'app.manufacture.collections'\n        },\n        'INVENTORY': {\n          'CONFIGURATION': {\n            'COMPANY': 'app.inventory.configuration.company'\n          },\n          'IMPORT': 'app.inventory.import',\n          'PURCHASES': 'app.inventory.purchases',\n          'CONTACTS': 'app.contacts',\n          'SALES': 'app.wholesale.sales',\n          'PRODUCTS': 'app.inventory.products',\n          'PICKING': 'app.inventory.pickings',\n          'DASHBOARD': 'app.inventory.dashboard',\n          'TRANSFERS': 'app.inventory.transfers',\n          'STOCKS': 'app.inventory.stocks',\n          'WAREHOUSES': {\n            'LIST': 'app.inventory.warehouses'\n          }\n        },\n        'REPORTS': {\n          'INVOICES': 'app.accounting.invoices'\n        },\n        'SALE': {\n          'SELL': 'app.sale.sell',\n          'REGISTER_CLOSURE': 'app.sale.register_closure',\n          'REGISTER_CLOSURES': 'app.sale.register_closures',\n          'SALES_LOG': 'app.sale.sales_log',\n          'CUSTOMERS': 'app.sale.customers',\n          'CASH_MANAGEMENT': 'app.sale.cash_management',\n          'REGISTERS': 'app.sale.registers'\n        },\n        'ECOMMERCE': {\n          'SITES': 'app.ecommerce.sites'\n        },\n        'IMPORTER': {\n          'PRODUCTS': 'app.inventory.import'\n        }\n      },\n      'INVENTORY': {\n        'WAREHOUSE': {\n          'UPDATE': 'inventory.warehouse.update'\n        },\n        'PRODUCT': {\n          'CREATE': 'inventory.product.create',\n          'UPDATE': 'inventory.product.update',\n          'DELETE': 'inventory.product.delete'\n        },\n        'PRODUCTS': {\n          'NEW_PRODUCT': 'inventory.products.new_product'\n        },\n        'CONTACTS': {\n          'CREATE': 'inventory.contacts.create',\n          'LIST': 'inventory.contacts.list'\n        }\n      },\n      'SALE': {\n        'SELL': {\n          'OPEN_REGISTER': 'sale.sell.open_register',\n          'CLOSE_REGISTER': 'sale.sell.close_register',\n          'CHANGE_REGISTER': 'sale.sell.change_register',\n          'ADD_CASH': 'sale.sell.add_cash',\n          'REMOVE_CASH': 'sale.sell.remove_cash'\n        },\n        'CUSTOMER': {\n          'LIST_PURCHASES': 'sale.customer.list_purchases',\n          'LIST': 'sale.customer.list',\n          'UPDATE': 'sale.customer.update',\n          'DELETE': 'sale.customer.delete'\n        },\n        'CUSTOMERS': {\n          'CREATE': 'sale.customers.create'\n        },\n        'SALES_LOG': {\n          'RETURN_POS_ORDER': 'sale.sales_log.return_pos_order'\n        },\n        'CASH_MANAGEMENT': {\n          'ADD_CASH': 'sale.cash_management.add_cash',\n          'REMOVE_CASH': 'sale.cash_management.remove_cash'\n        },\n        'REGISTERS': {\n          'CREATE': 'sale.registers.create',\n          'CLOSE_REGISTER': 'sale.registers.close_register',\n          'OPEN_REGISTER': 'sale.registers.open_register',\n          'DELETE': 'sale.registers.delete'\n        }\n      }\n    })\n\n\n    .constant('materialUiColorsMin', [{\n      'code': 'RED-100',\n      'color': 'FFCDD2'\n    }, {\n      'code': 'RED-300',\n      'color': 'E57373'\n    }, {\n      'code': 'RED-600',\n      'color': 'E53935'\n    }, {\n      'code': 'RED-900',\n      'color': 'B71C1C'\n    },\n\n      {\n        'code': 'PINK-100',\n        'color': 'F8BBD0'\n      }, {\n        'code': 'PINK-300',\n        'color': 'F06292'\n      }, {\n        'code': 'PINK-600',\n        'color': 'D81B60'\n      }, {\n        'code': 'PINK-900',\n        'color': '880E4F'\n      },\n\n      {\n        'code': 'PURPLE-100',\n        'color': 'E1BEE7'\n      }, {\n        'code': 'PURPLE-300',\n        'color': 'BA68C8'\n      }, {\n        'code': 'PURPLE-600',\n        'color': '8E24AA'\n      }, {\n        'code': 'PURPLE-900',\n        'color': '4A148C'\n      },\n\n      {\n        'code': 'INDIGO-100',\n        'color': 'C5CAE9'\n      }, {\n        'code': 'INDIGO-300',\n        'color': '7986CB'\n      }, {\n        'code': 'INDIGO-600',\n        'color': '3949AB'\n      }, {\n        'code': 'INDIGO-900',\n        'color': '1A237E'\n      },\n\n      {\n        'code': 'BLUE-100',\n        'color': 'BBDEFB'\n      }, {\n        'code': 'BLUE-300',\n        'color': '64B5F6'\n      }, {\n        'code': 'BLUE-600',\n        'color': '1E88E5'\n      }, {\n        'code': 'BLUE-900',\n        'color': '0D47A1'\n      },\n\n      {\n        'code': 'CYAN-100',\n        'color': 'B2EBF2'\n      }, {\n        'code': 'CYAN-300',\n        'color': '4DD0E1'\n      }, {\n        'code': 'CYAN-600',\n        'color': '00ACC1'\n      }, {\n        'code': 'CYAN-900',\n        'color': '006064'\n      },\n\n      {\n        'code': 'TEAL-100',\n        'color': 'B2DFDB'\n      }, {\n        'code': 'TEAL-300',\n        'color': '4DB6AC'\n      }, {\n        'code': 'TEAL-600',\n        'color': '00897B'\n      }, {\n        'code': 'TEAL-900',\n        'color': '004D40'\n      },\n\n      {\n        'code': 'GREEN-100',\n        'color': 'C8E6C9'\n      }, {\n        'code': 'GREEN-300',\n        'color': '81C784'\n      }, {\n        'code': 'GREEN-600',\n        'color': '43A047'\n      }, {\n        'code': 'GREEN-900',\n        'color': '1B5E20'\n      },\n\n      {\n        'code': 'LIME-100',\n        'color': 'F0F4C3'\n      }, {\n        'code': 'LIME-300',\n        'color': 'DCE775'\n      }, {\n        'code': 'LIME-600',\n        'color': 'C0CA33'\n      }, {\n        'code': 'LIME-900',\n        'color': '827717'\n      },\n\n      {\n        'code': 'YELLOW-100',\n        'color': 'FFF9C4'\n      }, {\n        'code': 'YELLOW-300',\n        'color': 'FFF176'\n      }, {\n        'code': 'YELLOW-600',\n        'color': 'FDD835'\n      }, {\n        'code': 'YELLOW-900',\n        'color': 'F57F17'\n      },\n\n      {\n        'code': 'DEEP-ORANGE-100',\n        'color': 'FFCCBC'\n      }, {\n        'code': 'DEEP-ORANGE-300',\n        'color': 'FF8A65'\n      }, {\n        'code': 'DEEP-ORANGE-600',\n        'color': 'F4511E'\n      }, {\n        'code': 'DEEP-ORANGE-900',\n        'color': 'BF360C'\n      },\n\n      {\n        'code': 'BROWN-100',\n        'color': 'D7CCC8'\n      }, {\n        'code': 'BROWN-300',\n        'color': 'A1887F'\n      }, {\n        'code': 'BROWN-600',\n        'color': '6D4C41'\n      }, {\n        'code': 'BROWN-900',\n        'color': '3E2723'\n      },\n\n      {\n        'code': 'BLUE-GREY-100',\n        'color': 'CFD8DC'\n      }, {\n        'code': 'BLUE-GREY-300',\n        'color': '90A4AE'\n      }, {\n        'code': 'BLUE-GREY-600',\n        'color': '546E7A'\n      }, {\n        'code': 'BLUE-GREY-900',\n        'color': '263238'\n      },\n\n      {\n        'code': 'GREY-100',\n        'color': 'F5F5F5'\n      }, {\n        'code': 'GREY-300',\n        'color': 'E0E0E0'\n      }, {\n        'code': 'GREY-600',\n        'color': '757575'\n      }, {\n        'code': 'GREY-900',\n        'color': '212121'\n      }\n    ])\n\n    .constant('COUNTIRES_ISO_APLPHA_2_EN', [\n      {\n        'code': 'AD',\n        'name': 'Andorra'\n      }, {\n        'code': 'AE',\n        'name': 'United Arab Emirates'\n      }, {\n        'code': 'AF',\n        'name': 'Afghanistan'\n      }, {\n        'code': 'AG',\n        'name': 'Antigua and Barbuda'\n      }, {\n        'code': 'AI',\n        'name': 'Anguilla'\n      }, {\n        'code': 'AL',\n        'name': 'Albania'\n      }, {\n        'code': 'AM',\n        'name': 'Armenia'\n      }, {\n        'code': 'AO',\n        'name': 'Angola'\n      }, {\n        'code': 'AP',\n        'name': 'Asia/Pacific Region'\n      }, {\n        'code': 'AQ',\n        'name': 'Antarctica'\n      }, {\n        'code': 'AR',\n        'name': 'Argentina'\n      }, {\n        'code': 'AS',\n        'name': 'American Samoa'\n      }, {\n        'code': 'AT',\n        'name': 'Austria'\n      }, {\n        'code': 'AU',\n        'name': 'Australia'\n      }, {\n        'code': 'AW',\n        'name': 'Aruba'\n      }, {\n        'code': 'AX',\n        'name': 'Aland Islands'\n      }, {\n        'code': 'AZ',\n        'name': 'Azerbaijan'\n      }, {\n        'code': 'BA',\n        'name': 'Bosnia and Herzegovina'\n      }, {\n        'code': 'BB',\n        'name': 'Barbados'\n      }, {\n        'code': 'BD',\n        'name': 'Bangladesh'\n      }, {\n        'code': 'BE',\n        'name': 'Belgium'\n      }, {\n        'code': 'BF',\n        'name': 'Burkina Faso'\n      }, {\n        'code': 'BG',\n        'name': 'Bulgaria'\n      }, {\n        'code': 'BH',\n        'name': 'Bahrain'\n      }, {\n        'code': 'BI',\n        'name': 'Burundi'\n      }, {\n        'code': 'BJ',\n        'name': 'Benin'\n      }, {\n        'code': 'BL',\n        'name': 'Saint Bartelemey'\n      }, {\n        'code': 'BM',\n        'name': 'Bermuda'\n      }, {\n        'code': 'BN',\n        'name': 'Brunei Darussalam'\n      }, {\n        'code': 'BO',\n        'name': 'Bolivia'\n      }, {\n        'code': 'BQ',\n        'name': 'Bonaire, Saint Eustatius and Saba'\n      }, {\n        'code': 'BR',\n        'name': 'Brazil'\n      }, {\n        'code': 'BS',\n        'name': 'Bahamas'\n      }, {\n        'code': 'BT',\n        'name': 'Bhutan'\n      }, {\n        'code': 'BV',\n        'name': 'Bouvet Island'\n      }, {\n        'code': 'BW',\n        'name': 'Botswana'\n      }, {\n        'code': 'BY',\n        'name': 'Belarus'\n      }, {\n        'code': 'BZ',\n        'name': 'Belize'\n      }, {\n        'code': 'CA',\n        'name': 'Canada'\n      }, {\n        'code': 'CC',\n        'name': 'Cocos (Keeling) Islands'\n      }, {\n        'code': 'CD',\n        'name': 'Congo, The Democratic Republic of the'\n      }, {\n        'code': 'CF',\n        'name': 'Central African Republic'\n      }, {\n        'code': 'CG',\n        'name': 'Congo'\n      }, {\n        'code': 'CH',\n        'name': 'Switzerland'\n      }, {\n        'code': 'CI',\n        'name': 'Cote d\\Ivoire'\n      }, {\n        'code': 'CK',\n        'name': 'Cook Islands'\n      }, {\n        'code': 'CL',\n        'name': 'Chile'\n      }, {\n        'code': 'CM',\n        'name': 'Cameroon'\n      }, {\n        'code': 'CN',\n        'name': 'China'\n      }, {\n        'code': 'CO',\n        'name': 'Colombia'\n      }, {\n        'code': 'CR',\n        'name': 'Costa Rica'\n      }, {\n        'code': 'CU',\n        'name': 'Cuba'\n      }, {\n        'code': 'CV',\n        'name': 'Cape Verde'\n      }, {\n        'code': 'CW',\n        'name': 'Curacao'\n      }, {\n        'code': 'CX',\n        'name': 'Christmas Island'\n      }, {\n        'code': 'CY',\n        'name': 'Cyprus'\n      }, {\n        'code': 'CZ',\n        'name': 'Czech Republic'\n      }, {\n        'code': 'DE',\n        'name': 'Germany'\n      }, {\n        'code': 'DJ',\n        'name': 'Djibouti'\n      }, {\n        'code': 'DK',\n        'name': 'Denmark'\n      }, {\n        'code': 'DM',\n        'name': 'Dominica'\n      }, {\n        'code': 'DO',\n        'name': 'Dominican Republic'\n      }, {\n        'code': 'DZ',\n        'name': 'Algeria'\n      }, {\n        'code': 'EC',\n        'name': 'Ecuador'\n      }, {\n        'code': 'EE',\n        'name': 'Estonia'\n      }, {\n        'code': 'EG',\n        'name': 'Egypt'\n      }, {\n        'code': 'EH',\n        'name': 'Western Sahara'\n      }, {\n        'code': 'ER',\n        'name': 'Eritrea'\n      }, {\n        'code': 'ES',\n        'name': 'Spain'\n      }, {\n        'code': 'ET',\n        'name': 'Ethiopia'\n      }, {\n        'code': 'EU',\n        'name': 'Europe'\n      }, {\n        'code': 'FI',\n        'name': 'Finland'\n      }, {\n        'code': 'FJ',\n        'name': 'Fiji'\n      }, {\n        'code': 'FK',\n        'name': 'Falkland Islands (Malvinas)'\n      }, {\n        'code': 'FM',\n        'name': 'Micronesia, Federated States of'\n      }, {\n        'code': 'FO',\n        'name': 'Faroe Islands'\n      }, {\n        'code': 'FR',\n        'name': 'France'\n      }, {\n        'code': 'GA',\n        'name': 'Gabon'\n      }, {\n        'code': 'GB',\n        'name': 'United Kingdom'\n      }, {\n        'code': 'GD',\n        'name': 'Grenada'\n      }, {\n        'code': 'GE',\n        'name': 'Georgia'\n      }, {\n        'code': 'GF',\n        'name': 'French Guiana'\n      }, {\n        'code': 'GG',\n        'name': 'Guernsey'\n      }, {\n        'code': 'GH',\n        'name': 'Ghana'\n      }, {\n        'code': 'GI',\n        'name': 'Gibraltar'\n      }, {\n        'code': 'GL',\n        'name': 'Greenland'\n      }, {\n        'code': 'GM',\n        'name': 'Gambia'\n      }, {\n        'code': 'GN',\n        'name': 'Guinea'\n      }, {\n        'code': 'GP',\n        'name': 'Guadeloupe'\n      }, {\n        'code': 'GQ',\n        'name': 'Equatorial Guinea'\n      }, {\n        'code': 'GR',\n        'name': 'Greece'\n      }, {\n        'code': 'GS',\n        'name': 'South Georgia and the South Sandwich Islands'\n      }, {\n        'code': 'GT',\n        'name': 'Guatemala'\n      }, {\n        'code': 'GU',\n        'name': 'Guam'\n      }, {\n        'code': 'GW',\n        'name': 'Guinea-Bissau'\n      }, {\n        'code': 'GY',\n        'name': 'Guyana'\n      }, {\n        'code': 'HK',\n        'name': 'Hong Kong'\n      }, {\n        'code': 'HM',\n        'name': 'Heard Island and McDonald Islands'\n      }, {\n        'code': 'HN',\n        'name': 'Honduras'\n      }, {\n        'code': 'HR',\n        'name': 'Croatia'\n      }, {\n        'code': 'HT',\n        'name': 'Haiti'\n      }, {\n        'code': 'HU',\n        'name': 'Hungary'\n      }, {\n        'code': 'ID',\n        'name': 'Indonesia'\n      }, {\n        'code': 'IE',\n        'name': 'Ireland'\n      }, {\n        'code': 'IL',\n        'name': 'Israel'\n      }, {\n        'code': 'IM',\n        'name': 'Isle of Man'\n      }, {\n        'code': 'IN',\n        'name': 'India'\n      }, {\n        'code': 'IO',\n        'name': 'British Indian Ocean Territory'\n      }, {\n        'code': 'IQ',\n        'name': 'Iraq'\n      }, {\n        'code': 'IR',\n        'name': 'Iran, Islamic Republic of'\n      }, {\n        'code': 'IS',\n        'name': 'Iceland'\n      }, {\n        'code': 'IT',\n        'name': 'Italy'\n      }, {\n        'code': 'JE',\n        'name': 'Jersey'\n      }, {\n        'code': 'JM',\n        'name': 'Jamaica'\n      }, {\n        'code': 'JO',\n        'name': 'Jordan'\n      }, {\n        'code': 'JP',\n        'name': 'Japan'\n      }, {\n        'code': 'KE',\n        'name': 'Kenya'\n      }, {\n        'code': 'KG',\n        'name': 'Kyrgyzstan'\n      }, {\n        'code': 'KH',\n        'name': 'Cambodia'\n      }, {\n        'code': 'KI',\n        'name': 'Kiribati'\n      }, {\n        'code': 'KM',\n        'name': 'Comoros'\n      }, {\n        'code': 'KN',\n        'name': 'Saint Kitts and Nevis'\n      }, {\n        'code': 'KP',\n        'name': 'Korea, Democratic People\\s Republic of'\n      }, {\n        'code': 'KR',\n        'name': 'Korea, Republic of'\n      }, {\n        'code': 'KW',\n        'name': 'Kuwait'\n      }, {\n        'code': 'KY',\n        'name': 'Cayman Islands'\n      }, {\n        'code': 'KZ',\n        'name': 'Kazakhstan'\n      }, {\n        'code': 'LA',\n        'name': 'Lao People\\s Democratic Republic'\n      }, {\n        'code': 'LB',\n        'name': 'Lebanon'\n      }, {\n        'code': 'LC',\n        'name': 'Saint Lucia'\n      }, {\n        'code': 'LI',\n        'name': 'Liechtenstein'\n      }, {\n        'code': 'LK',\n        'name': 'Sri Lanka'\n      }, {\n        'code': 'LR',\n        'name': 'Liberia'\n      }, {\n        'code': 'LS',\n        'name': 'Lesotho'\n      }, {\n        'code': 'LT',\n        'name': 'Lithuania'\n      }, {\n        'code': 'LU',\n        'name': 'Luxembourg'\n      }, {\n        'code': 'LV',\n        'name': 'Latvia'\n      }, {\n        'code': 'LY',\n        'name': 'Libyan Arab Jamahiriya'\n      }, {\n        'code': 'MA',\n        'name': 'Morocco'\n      }, {\n        'code': 'MC',\n        'name': 'Monaco'\n      }, {\n        'code': 'MD',\n        'name': 'Moldova, Republic of'\n      }, {\n        'code': 'ME',\n        'name': 'Montenegro'\n      }, {\n        'code': 'MF',\n        'name': 'Saint Martin'\n      }, {\n        'code': 'MG',\n        'name': 'Madagascar'\n      }, {\n        'code': 'MH',\n        'name': 'Marshall Islands'\n      }, {\n        'code': 'MK',\n        'name': 'Macedonia'\n      }, {\n        'code': 'ML',\n        'name': 'Mali'\n      }, {\n        'code': 'MM',\n        'name': 'Myanmar'\n      }, {\n        'code': 'MN',\n        'name': 'Mongolia'\n      }, {\n        'code': 'MO',\n        'name': 'Macao'\n      }, {\n        'code': 'MP',\n        'name': 'Northern Mariana Islands'\n      }, {\n        'code': 'MQ',\n        'name': 'Martinique'\n      }, {\n        'code': 'MR',\n        'name': 'Mauritania'\n      }, {\n        'code': 'MS',\n        'name': 'Montserrat'\n      }, {\n        'code': 'MT',\n        'name': 'Malta'\n      }, {\n        'code': 'MU',\n        'name': 'Mauritius'\n      }, {\n        'code': 'MV',\n        'name': 'Maldives'\n      }, {\n        'code': 'MW',\n        'name': 'Malawi'\n      }, {\n        'code': 'MX',\n        'name': 'Mexico'\n      }, {\n        'code': 'MY',\n        'name': 'Malaysia'\n      }, {\n        'code': 'MZ',\n        'name': 'Mozambique'\n      }, {\n        'code': 'NA',\n        'name': 'Namibia'\n      }, {\n        'code': 'NC',\n        'name': 'New Caledonia'\n      }, {\n        'code': 'NE',\n        'name': 'Niger'\n      }, {\n        'code': 'NF',\n        'name': 'Norfolk Island'\n      }, {\n        'code': 'NG',\n        'name': 'Nigeria'\n      }, {\n        'code': 'NI',\n        'name': 'Nicaragua'\n      }, {\n        'code': 'NL',\n        'name': 'Netherlands'\n      }, {\n        'code': 'NO',\n        'name': 'Norway'\n      }, {\n        'code': 'NP',\n        'name': 'Nepal'\n      }, {\n        'code': 'NR',\n        'name': 'Nauru'\n      }, {\n        'code': 'NU',\n        'name': 'Niue'\n      }, {\n        'code': 'NZ',\n        'name': 'New Zealand'\n      }, {\n        'code': 'OM',\n        'name': 'Oman'\n      }, {\n        'code': 'PA',\n        'name': 'Panama'\n      }, {\n        'code': 'PE',\n        'name': 'Peru'\n      }, {\n        'code': 'PF',\n        'name': 'French Polynesia'\n      }, {\n        'code': 'PG',\n        'name': 'Papua New Guinea'\n      }, {\n        'code': 'PH',\n        'name': 'Philippines'\n      }, {\n        'code': 'PK',\n        'name': 'Pakistan'\n      }, {\n        'code': 'PL',\n        'name': 'Poland'\n      }, {\n        'code': 'PM',\n        'name': 'Saint Pierre and Miquelon'\n      }, {\n        'code': 'PN',\n        'name': 'Pitcairn'\n      }, {\n        'code': 'PR',\n        'name': 'Puerto Rico'\n      }, {\n        'code': 'PS',\n        'name': 'Palestinian Territory'\n      }, {\n        'code': 'PT',\n        'name': 'Portugal'\n      }, {\n        'code': 'PW',\n        'name': 'Palau'\n      }, {\n        'code': 'PY',\n        'name': 'Paraguay'\n      }, {\n        'code': 'QA',\n        'name': 'Qatar'\n      }, {\n        'code': 'RE',\n        'name': 'Reunion'\n      }, {\n        'code': 'RO',\n        'name': 'Romania'\n      }, {\n        'code': 'RS',\n        'name': 'Serbia'\n      }, {\n        'code': 'RU',\n        'name': 'Russian Federation'\n      }, {\n        'code': 'RW',\n        'name': 'Rwanda'\n      }, {\n        'code': 'SA',\n        'name': 'Saudi Arabia'\n      }, {\n        'code': 'SB',\n        'name': 'Solomon Islands'\n      }, {\n        'code': 'SC',\n        'name': 'Seychelles'\n      }, {\n        'code': 'SD',\n        'name': 'Sudan'\n      }, {\n        'code': 'SE',\n        'name': 'Sweden'\n      }, {\n        'code': 'SG',\n        'name': 'Singapore'\n      }, {\n        'code': 'SH',\n        'name': 'Saint Helena'\n      }, {\n        'code': 'SI',\n        'name': 'Slovenia'\n      }, {\n        'code': 'SJ',\n        'name': 'Svalbard and Jan Mayen'\n      }, {\n        'code': 'SK',\n        'name': 'Slovakia'\n      }, {\n        'code': 'SL',\n        'name': 'Sierra Leone'\n      }, {\n        'code': 'SM',\n        'name': 'San Marino'\n      }, {\n        'code': 'SN',\n        'name': 'Senegal'\n      }, {\n        'code': 'SO',\n        'name': 'Somalia'\n      }, {\n        'code': 'SR',\n        'name': 'Suriname'\n      }, {\n        'code': 'SS',\n        'name': 'South Sudan'\n      }, {\n        'code': 'ST',\n        'name': 'Sao Tome and Principe'\n      }, {\n        'code': 'SV',\n        'name': 'El Salvador'\n      }, {\n        'code': 'SX',\n        'name': 'Sint Maarten'\n      }, {\n        'code': 'SY',\n        'name': 'Syrian Arab Republic'\n      }, {\n        'code': 'SZ',\n        'name': 'Swaziland'\n      }, {\n        'code': 'TC',\n        'name': 'Turks and Caicos Islands'\n      }, {\n        'code': 'TD',\n        'name': 'Chad'\n      }, {\n        'code': 'TF',\n        'name': 'French Southern Territories'\n      }, {\n        'code': 'TG',\n        'name': 'Togo'\n      }, {\n        'code': 'TH',\n        'name': 'Thailand'\n      }, {\n        'code': 'TJ',\n        'name': 'Tajikistan'\n      }, {\n        'code': 'TK',\n        'name': 'Tokelau'\n      }, {\n        'code': 'TL',\n        'name': 'Timor-Leste'\n      }, {\n        'code': 'TM',\n        'name': 'Turkmenistan'\n      }, {\n        'code': 'TN',\n        'name': 'Tunisia'\n      }, {\n        'code': 'TO',\n        'name': 'Tonga'\n      }, {\n        'code': 'TR',\n        'name': 'Turkey'\n      }, {\n        'code': 'TT',\n        'name': 'Trinidad and Tobago'\n      }, {\n        'code': 'TV',\n        'name': 'Tuvalu'\n      }, {\n        'code': 'TW',\n        'name': 'Taiwan'\n      }, {\n        'code': 'TZ',\n        'name': 'Tanzania, United Republic of'\n      }, {\n        'code': 'UA',\n        'name': 'Ukraine'\n      }, {\n        'code': 'UG',\n        'name': 'Uganda'\n      }, {\n        'code': 'UM',\n        'name': 'United States Minor Outlying Islands'\n      }, {\n        'code': 'US',\n        'name': 'United States'\n      }, {\n        'code': 'UY',\n        'name': 'Uruguay'\n      }, {\n        'code': 'UZ',\n        'name': 'Uzbekistan'\n      }, {\n        'code': 'VA',\n        'name': 'Holy See (Vatican City State)'\n      }, {\n        'code': 'VC',\n        'name': 'Saint Vincent and the Grenadines'\n      }, {\n        'code': 'VE',\n        'name': 'Venezuela'\n      }, {\n        'code': 'VG',\n        'name': 'Virgin Islands, British'\n      }, {\n        'code': 'VI',\n        'name': 'Virgin Islands, U.S.'\n      }, {\n        'code': 'VN',\n        'name': 'Vietnam'\n      }, {\n        'code': 'VU',\n        'name': 'Vanuatu'\n      }, {\n        'code': 'WF',\n        'name': 'Wallis and Futuna'\n      }, {\n        'code': 'WS',\n        'name': 'Samoa'\n      }, {\n        'code': 'YE',\n        'name': 'Yemen'\n      }, {\n        'code': 'YT',\n        'name': 'Mayotte'\n      }, {\n        'code': 'ZA',\n        'name': 'South Africa'\n      }, {\n        'code': 'ZM',\n        'name': 'Zambia'\n      }, {\n        'code': 'ZW',\n        'name': 'Zimbabwe'\n      }\n    ])\n\n    .constant('COUNTRIES_PHONE_PREFIX_DICT', {\n      'AF': '+93',\n      'AL': '+355',\n      'DZ': '+213',\n      'AS': '+1-684',\n      'AD': '+376',\n      'AO': '+244',\n      'AI': '+1-264',\n      'AQ': '+672',\n      'AG': '+1-268',\n      'AR': '+54',\n      'AM': '+374',\n      'AW': '+297',\n      'AU': '+61',\n      'AT': '+43',\n      'AZ': '+994',\n      'BS': '+1-242',\n      'BH': '+973',\n      'BD': '+880',\n      'BB': '+1-246',\n      'BY': '+375',\n      'BE': '+32',\n      'BZ': '+501',\n      'BJ': '+229',\n      'BM': '+1-441',\n      'BT': '+975',\n      'BO': '+591',\n      'BA': '+387',\n      'BW': '+267',\n      'BV': '+47',\n      'BR': '+55',\n      'IO': '+246',\n      'BN': '+673',\n      'BG': '+359',\n      'BF': '+226',\n      'BI': '+257',\n      'KH': '+855',\n      'CM': '+237',\n      'CA': '+1',\n      'CV': '+238',\n      'KY': '+1-345',\n      'CF': '+236',\n      'TD': '+235',\n      'CL': '+56',\n      'CN': '+86',\n      'CX': '+53',\n      'CC': '+61',\n      'CO': '+57',\n      'KM': '+269',\n      'CD': '+243',\n      'CG': '+242',\n      'CK': '+682',\n      'CR': '+506',\n      'CI': '+225',\n      'HR': '+385',\n      'CU': '+53',\n      'CY': '+357',\n      'CZ': '+420',\n      'CS': '',\n      'DK': '+45',\n      'DJ': '+253',\n      'DM': '+1-767',\n      'DO': '+1-809',\n      'TP': '+670',\n      'EC': '+593 ',\n      'EG': '+20',\n      'SV': '+503',\n      'GQ': '+240',\n      'ER': '+291',\n      'EE': '+372',\n      'ET': '+251',\n      'FK': '+500',\n      'FO': '+298',\n      'FJ': '+679',\n      'FI': '+358',\n      'FR': '+33',\n      'GF': '+594',\n      'PF': '+689',\n      'TF': '+262',\n      'GA': '+241',\n      'GM': '+220',\n      'GE': '+995',\n      'DE': '+49',\n      'GH': '+233',\n      'GI': '+350',\n      'GR': '+30',\n      'GL': '+299',\n      'GD': '+1-473',\n      'GP': '+590',\n      'GU': '+1-671',\n      'GT': '+502',\n      'GN': '+224',\n      'GW': '+245',\n      'GY': '+592',\n      'HT': '+509',\n      'HM': '+672',\n      'HN': '+504',\n      'HK': '+852',\n      'HU': '+36',\n      'IS': '+354',\n      'IN': '+91',\n      'ID': '+62',\n      'IR': '+98',\n      'IQ': '+964',\n      'IE': '+353',\n      'IL': '+972',\n      'IT': '+39',\n      'JM': '+1-876',\n      'JP': '+81',\n      'JO': '+962',\n      'KZ': '+7',\n      'KE': '+254',\n      'KI': '+686',\n      'KP': '+850',\n      'KR': '+82',\n      'KW': '+965',\n      'KG': '+996',\n      'LA': '+856',\n      'LV': '+371',\n      'LB': '+961',\n      'LS': '+266',\n      'LR': '+231',\n      'LY': '+218',\n      'LI': '+423',\n      'LT': '+370',\n      'LU': '+352',\n      'MO': '+853',\n      'MK': '+389',\n      'MG': '+261',\n      'MW': '+265',\n      'MY': '+60',\n      'MV': '+960',\n      'ML': '+223',\n      'MT': '+356',\n      'MH': '+692',\n      'MQ': '+596',\n      'MR': '+222',\n      'MU': '+230',\n      'YT': '+269',\n      'MX': '+52',\n      'FM': '+691',\n      'MD': '+373',\n      'MC': '+377',\n      'MN': '+976',\n      'MS': '+1-664',\n      'MA': '+212',\n      'MZ': '+258',\n      'MM': '+95',\n      'NA': '+264',\n      'NR': '+674',\n      'NP': '+977',\n      'NL': '+31',\n      'AN': '+599',\n      'NC': '+687',\n      'NZ': '+64',\n      'NI': '+505',\n      'NE': '+227',\n      'NG': '+234',\n      'NU': '+683',\n      'NF': '+672',\n      'MP': '+1-670',\n      'NO': '+47',\n      'OM': '+968',\n      'PK': '+92',\n      'PW': '+680',\n      'PS': '+970',\n      'PA': '+507',\n      'PG': '+675',\n      'PY': '+595',\n      'PE': '+51',\n      'PH': '+63',\n      'PN': '+64',\n      'PL': '+48',\n      'PT': '+351',\n      'PR': '+1-787 or +1-939',\n      'QA': '+974 ',\n      'RE': '+262',\n      'RO': '+40',\n      'SU': '',\n      'RU': '+7',\n      'RW': '+250',\n      'SH': '+290',\n      'KN': '+1-869',\n      'LC': '+1-758',\n      'PM': '+508',\n      'VC': '+1-784',\n      'WS': '+685',\n      'SM': '+378',\n      'ST': '+239',\n      'SA': '+966',\n      'RS': '+381',\n      'SN': '+221',\n      'SC': '+248',\n      'SL': '+232',\n      'SG': '+65',\n      'SK': '+421',\n      'SI': '+386',\n      'SB': '+677',\n      'SO': '+252',\n      'ZA': '+27',\n      'GS': '+500',\n      'ES': '+34',\n      'LK': '+94',\n      'SD': '+249',\n      'SR': '+597',\n      'SJ': '+47',\n      'SZ': '+268',\n      'SE': '+46',\n      'CH': '+41',\n      'SY': '+963',\n      'TW': '+886',\n      'TJ': '+992',\n      'TZ': '+255',\n      'TH': '+66',\n      'TG': '+228',\n      'TK': '+690',\n      'TO': '+676',\n      'TT': '+1-868',\n      'TE': '',\n      'TN': '+216',\n      'TR': '+90',\n      'TM': '+993',\n      'TC': '+1-649',\n      'TV': '+688',\n      'UG': '+256',\n      'UA': '+380',\n      'AE': '+971',\n      'GB': '+44',\n      'US': '+1',\n      'UM': '+1',\n      'UY': '+598',\n      'UZ': '+998',\n      'VU': '+678',\n      'VA': '+418',\n      'VE': '+58',\n      'VN': '+84',\n      'VI': '+1-284',\n      'VQ': '+1-340',\n      'WF': '+681',\n      'EH': '+212',\n      'YE': '+967',\n      'YU': '',\n      'ZR': '',\n      'ZM': '+260',\n      'ZW': '+263',\n      'AX': '+358',\n      'BQ': '+599'\n    })\n\n    .constant('COUNTRIES_DICT', {\n      'AF': 'Afghanistan',\n      'AX': 'Aland Islands',\n      'AL': 'Albania',\n      'DZ': 'Algeria',\n      'AS': 'American Samoa',\n      'AD': 'Andorra',\n      'AO': 'Angola',\n      'AI': 'Anguilla',\n      'AQ': 'Antarctica',\n      'AG': 'Antigua and Barbuda',\n      'AR': 'Argentina',\n      'AM': 'Armenia',\n      'AW': 'Aruba',\n      'AP': 'Asia/Pacific Region',\n      'AU': 'Australia',\n      'AT': 'Austria',\n      'AZ': 'Azerbaijan',\n      'BS': 'Bahamas',\n      'BH': 'Bahrain',\n      'BD': 'Bangladesh',\n      'BB': 'Barbados',\n      'BY': 'Belarus',\n      'BE': 'Belgium',\n      'BZ': 'Belize',\n      'BJ': 'Benin',\n      'BM': 'Bermuda',\n      'BT': 'Bhutan',\n      'BO': 'Bolivia',\n      'BQ': 'Bonaire, Saint Eustatius and Saba',\n      'BA': 'Bosnia and Herzegovina',\n      'BW': 'Botswana',\n      'BV': 'Bouvet Island',\n      'BR': 'Brazil',\n      'IO': 'British Indian Ocean Territory',\n      'BN': 'Brunei Darussalam',\n      'BG': 'Bulgaria',\n      'BF': 'Burkina Faso',\n      'BI': 'Burundi',\n      'KH': 'Cambodia',\n      'CM': 'Cameroon',\n      'CA': 'Canada',\n      'CV': 'Cape Verde',\n      'KY': 'Cayman Islands',\n      'CF': 'Central African Republic',\n      'TD': 'Chad',\n      'CL': 'Chile',\n      'CN': 'China',\n      'CX': 'Christmas Island',\n      'CC': 'Cocos (Keeling) Islands',\n      'CO': 'Colombia',\n      'KM': 'Comoros',\n      'CG': 'Congo',\n      'CD': 'Congo, The Democratic Republic of the',\n      'CK': 'Cook Islands',\n      'CR': 'Costa Rica',\n      'CI': 'Cote dIvoire',\n      'HR': 'Croatia',\n      'CU': 'Cuba',\n      'CW': 'Curacao',\n      'CY': 'Cyprus',\n      'CZ': 'Czech Republic',\n      'DK': 'Denmark',\n      'DJ': 'Djibouti',\n      'DM': 'Dominica',\n      'DO': 'Dominican Republic',\n      'EC': 'Ecuador',\n      'EG': 'Egypt',\n      'SV': 'El Salvador',\n      'GQ': 'Equatorial Guinea',\n      'ER': 'Eritrea',\n      'EE': 'Estonia',\n      'ET': 'Ethiopia',\n      'EU': 'Europe',\n      'FK': 'Falkland Islands (Malvinas)',\n      'FO': 'Faroe Islands',\n      'FJ': 'Fiji',\n      'FI': 'Finland',\n      'FR': 'France',\n      'GF': 'French Guiana',\n      'PF': 'French Polynesia',\n      'TF': 'French Southern Territories',\n      'GA': 'Gabon',\n      'GM': 'Gambia',\n      'GE': 'Georgia',\n      'DE': 'Germany',\n      'GH': 'Ghana',\n      'GI': 'Gibraltar',\n      'GR': 'Greece',\n      'GL': 'Greenland',\n      'GD': 'Grenada',\n      'GP': 'Guadeloupe',\n      'GU': 'Guam',\n      'GT': 'Guatemala',\n      'GG': 'Guernsey',\n      'GN': 'Guinea',\n      'GW': 'Guinea-Bissau',\n      'GY': 'Guyana',\n      'HT': 'Haiti',\n      'HM': 'Heard Island and McDonald Islands',\n      'VA': 'Holy See (Vatican City State)',\n      'HN': 'Honduras',\n      'HK': 'Hong Kong',\n      'HU': 'Hungary',\n      'IS': 'Iceland',\n      'IN': 'India',\n      'ID': 'Indonesia',\n      'IR': 'Iran, Islamic Republic of',\n      'IQ': 'Iraq',\n      'IE': 'Ireland',\n      'IM': 'Isle of Man',\n      'IL': 'Israel',\n      'IT': 'Italy',\n      'JM': 'Jamaica',\n      'JP': 'Japan',\n      'JE': 'Jersey',\n      'JO': 'Jordan',\n      'KZ': 'Kazakhstan',\n      'KE': 'Kenya',\n      'KI': 'Kiribati',\n      'KP': 'Korea, Democratic Peoples Republic of',\n      'KR': 'Korea, Republic of',\n      'KW': 'Kuwait',\n      'KG': 'Kyrgyzstan',\n      'LA': 'Lao Peoples Democratic Republic',\n      'LV': 'Latvia',\n      'LB': 'Lebanon',\n      'LS': 'Lesotho',\n      'LR': 'Liberia',\n      'LY': 'Libyan Arab Jamahiriya',\n      'LI': 'Liechtenstein',\n      'LT': 'Lithuania',\n      'LU': 'Luxembourg',\n      'MO': 'Macao',\n      'MK': 'Macedonia',\n      'MG': 'Madagascar',\n      'MW': 'Malawi',\n      'MY': 'Malaysia',\n      'MV': 'Maldives',\n      'ML': 'Mali',\n      'MT': 'Malta',\n      'MH': 'Marshall Islands',\n      'MQ': 'Martinique',\n      'MR': 'Mauritania',\n      'MU': 'Mauritius',\n      'YT': 'Mayotte',\n      'MX': 'Mexico',\n      'FM': 'Micronesia, Federated States of',\n      'MD': 'Moldova, Republic of',\n      'MC': 'Monaco',\n      'MN': 'Mongolia',\n      'ME': 'Montenegro',\n      'MS': 'Montserrat',\n      'MA': 'Morocco',\n      'MZ': 'Mozambique',\n      'MM': 'Myanmar',\n      'NA': 'Namibia',\n      'NR': 'Nauru',\n      'NP': 'Nepal',\n      'NL': 'Netherlands',\n      'NC': 'New Caledonia',\n      'NZ': 'New Zealand',\n      'NI': 'Nicaragua',\n      'NE': 'Niger',\n      'NG': 'Nigeria',\n      'NU': 'Niue',\n      'NF': 'Norfolk Island',\n      'MP': 'Northern Mariana Islands',\n      'NO': 'Norway',\n      'OM': 'Oman',\n      'PK': 'Pakistan',\n      'PW': 'Palau',\n      'PS': 'Palestinian Territory',\n      'PA': 'Panama',\n      'PG': 'Papua New Guinea',\n      'PY': 'Paraguay',\n      'PE': 'Peru',\n      'PH': 'Philippines',\n      'PN': 'Pitcairn',\n      'PL': 'Poland',\n      'PT': 'Portugal',\n      'PR': 'Puerto Rico',\n      'QA': 'Qatar',\n      'RE': 'Reunion',\n      'RO': 'Romania',\n      'RU': 'Russian Federation',\n      'RW': 'Rwanda',\n      'BL': 'Saint Bartelemey',\n      'SH': 'Saint Helena',\n      'KN': 'Saint Kitts and Nevis',\n      'LC': 'Saint Lucia',\n      'MF': 'Saint Martin',\n      'PM': 'Saint Pierre and Miquelon',\n      'VC': 'Saint Vincent and the Grenadines',\n      'WS': 'Samoa',\n      'SM': 'San Marino',\n      'ST': 'Sao Tome and Principe',\n      'SA': 'Saudi Arabia',\n      'SN': 'Senegal',\n      'RS': 'Serbia',\n      'SC': 'Seychelles',\n      'SL': 'Sierra Leone',\n      'SG': 'Singapore',\n      'SX': 'Sint Maarten',\n      'SK': 'Slovakia',\n      'SI': 'Slovenia',\n      'SB': 'Solomon Islands',\n      'SO': 'Somalia',\n      'ZA': 'South Africa',\n      'GS': 'South Georgia and the South Sandwich Islands',\n      'SS': 'South Sudan',\n      'ES': 'Spain',\n      'LK': 'Sri Lanka',\n      'SD': 'Sudan',\n      'SR': 'Suriname',\n      'SJ': 'Svalbard and Jan Mayen',\n      'SZ': 'Swaziland',\n      'SE': 'Sweden',\n      'CH': 'Switzerland',\n      'SY': 'Syrian Arab Republic',\n      'TW': 'Taiwan',\n      'TJ': 'Tajikistan',\n      'TZ': 'Tanzania, United Republic of',\n      'TH': 'Thailand',\n      'TL': 'Timor-Leste',\n      'TG': 'Togo',\n      'TK': 'Tokelau',\n      'TO': 'Tonga',\n      'TT': 'Trinidad and Tobago',\n      'TN': 'Tunisia',\n      'TR': 'Turkey',\n      'TM': 'Turkmenistan',\n      'TC': 'Turks and Caicos Islands',\n      'TV': 'Tuvalu',\n      'UG': 'Uganda',\n      'UA': 'Ukraine',\n      'AE': 'United Arab Emirates',\n      'GB': 'United Kingdom',\n      'US': 'United States',\n      'UM': 'United States Minor Outlying Islands',\n      'UY': 'Uruguay',\n      'UZ': 'Uzbekistan',\n      'VU': 'Vanuatu',\n      'VE': 'Venezuela',\n      'VN': 'Vietnam',\n      'VG': 'Virgin Islands, British',\n      'VI': 'Virgin Islands, U.S.',\n      'WF': 'Wallis and Futuna',\n      'EH': 'Western Sahara',\n      'YE': 'Yemen',\n      'ZM': 'Zambia',\n      'ZW': 'Zimbabwe'\n    })\n\n    .constant('COMPANY_PLANS', {\n      'FREEMIUM': 1,\n      'BUSINESS': 2,\n      'DEMO': 10,\n      'PARTNER': 11\n    })\n\n    .constant('COMPANY_SECTORS', {\n      1: 'ALTERNATIVE_MEDICINE',\n      2: 'APPAREL_AND_FASHION',\n      3: 'ARCHITECTURE_AND_PLANNING',\n      4: 'ARTS_AND_CRAFTS',\n      5: 'AUTOMOTIVE',\n      6: 'BROADCAST_MEDIA',\n      7: 'BUILDING_MATERIALS',\n      8: 'BUSINESS_SUPPLIES_AND_EQUIPMENT',\n      9: 'CHEMICALS',\n      10: 'CHILDCARE',\n      11: 'COMPUTER_AND_NETWORK_SECURITY',\n      12: 'COMPUTER_GAMES',\n      13: 'COMPUTER_HARDWARE',\n      //14: 'COMPUTER_SOFTWARE',\n      15: 'CONSTRUCTION',\n      16: 'CONSUMER_ELECTRONICS',\n      17: 'CONSUMER_GOODS',\n      18: 'CONSUMER_SERVICES',\n      19: 'COSMETICS',\n      20: 'DESIGN',\n      21: 'ECOMMERCE',\n      22: 'EDUCATION_MANAGEMENT',\n      23: 'ELECTRICAL_ELECTRONIC_MANUFACTURING',\n      24: 'EVENTS_SERVICES',\n      25: 'FACILITIES_SERVICES',\n      26: 'FINANCIAL_SERVICES',\n      27: 'FINE_ART',\n      28: 'FLOWERS',\n      29: 'FOOD_AND_BEVERAGES',\n      30: 'FOOD_PRODUCTION',\n      31: 'FOOT_WEAR',\n      32: 'FURNITURE',\n      33: 'GAMBLING_AND_CASINOS',\n      34: 'GLASS_CERAMICS_AND_CONCRETE',\n      35: 'GOVERNMENT_ADMINISTRATION',\n      36: 'GRAPHIC_DESIGN',\n      37: 'HEALTH_WELLNESS_AND_FITNESS',\n      38: 'HIGHER_EDUCATION',\n      39: 'HOME',\n      40: 'HOSPITAL_AND_HEALTH_CARE',\n      41: 'HOSPITALITY',\n      42: 'IMPORT_AND_EXPORT',\n      43: 'INDUSTRIAL_AUTOMATION',\n      44: 'INDUSTRY_CURRENT_VALUE',\n      45: 'INFORMATION_TECHNOLOGY_AND_SERVICES',\n      46: 'INTERNATIONAL_TRADE_AND_DEVELOPMENT',\n      47: 'LAW_PRACTICE',\n      48: 'LEISURE_TRAVEL_AND_TOURISM',\n      49: 'LIBRARIES',\n      50: 'LOGISTICS_AND_SUPPLY_CHAIN',\n      51: 'LUXURY_GOODS_AND_JEWELRY',\n      52: 'MACHINERY',\n      53: 'MANAGEMENT_CONSULTING',\n      54: 'MARKET_RESEARCH',\n      55: 'MARKETING_AND_ADVERTISING',\n      56: 'MECHANICAL_OR_INDUSTRIAL_ENGINEERING',\n      57: 'MEDIA_PRODUCTION',\n      58: 'MEDICAL_DEVICES',\n      59: 'MEDICAL_PRACTICE',\n      60: 'MOTION_PICTURES_AND_FILM',\n      61: 'MUSIC',\n      62: 'NEWSPAPERS',\n      63: 'NON_PROFIT_ORGANIZATION_MANAGEMENT',\n      64: 'OIL_AND_ENERGY',\n      65: 'ONLINE_MEDIA',\n      66: 'PACKAGING_AND_CONTAINERS',\n      67: 'PETS',\n      68: 'PHARMACEUTICALS',\n      69: 'PHOTOGRAPHY',\n      70: 'PUBLISHING',\n      71: 'REAL_ESTATE',\n      72: 'RESTAURANTS',\n      73: 'RETAIL',\n      74: 'SPORTING_GOODS',\n      75: 'SPORTS',\n      76: 'SUPERMARKETS',\n      77: 'TELECOMMUNICATIONS',\n      78: 'TEXTILES',\n      79: 'TOBACCO',\n      80: 'TOYS',\n      81: 'TRANSPORTATION_RUCKING_RAILROAD',\n      82: 'TRAVEL',\n      83: 'UTILITIES',\n      84: 'WAREHOUSING',\n      85: 'WHOLESALE',\n      86: 'WINE_AND_SPIRITS',\n      87: 'OTHER',\n      88: 'FASHION_AND_ACCESSORIES',\n      89: 'HOME_AND_APPLIANCES',\n      90: 'LEISURE',\n      91: 'PHARMACY_AND_HERBALISTS',\n      92: 'PERSONAL_CARE',\n      95: 'IT_AND_ELECTRONICS',\n      96: 'FOOD_FLOWERS_AND_DRINK',\n      97: 'LUGGAGE_AND_TRAVEL_ACCESSORIES',\n      98: 'LINGERIE',\n      99: 'OFFICE_SUPPLIES_AND_STATIONERY',\n      100: 'LIGHTING',\n      101: 'KITCHENWARE',\n      102: 'GARDENING',\n      103: 'HARDWARE',\n\n      'ALTERNATIVE_MEDICINE': 1,\n      'APPAREL_AND_FASHION': 2,\n      'ARCHITECTURE_AND_PLANNING': 3,\n      'ARTS_AND_CRAFTS': 4,\n      'AUTOMOTIVE': 5,\n      'BROADCAST_MEDIA': 6,\n      'BUILDING_MATERIALS': 7,\n      'BUSINESS_SUPPLIES_AND_EQUIPMENT': 8,\n      'CHEMICALS': 9,\n      'CHILDCARE': 10,\n      'COMPUTER_AND_NETWORK_SECURITY': 11,\n      'COMPUTER_GAMES': 12,\n      'COMPUTER_HARDWARE': 13,\n      //'COMPUTER_SOFTWARE': 14,\n      'CONSTRUCTION': 15,\n      'CONSUMER_ELECTRONICS': 16,\n      'CONSUMER_GOODS': 17,\n      'CONSUMER_SERVICES': 18,\n      'COSMETICS': 19,\n      'DESIGN': 20,\n      'ECOMMERCE': 21,\n      'EDUCATION_MANAGEMENT': 22,\n      'ELECTRICAL_ELECTRONIC_MANUFACTURING': 23,\n      'EVENTS_SERVICES': 24,\n      'FACILITIES_SERVICES': 25,\n      'FINANCIAL_SERVICES': 26,\n      'FINE_ART': 27,\n      'FLOWERS': 28,\n      'FOOD_AND_BEVERAGES': 29,\n      'FOOD_PRODUCTION': 30,\n      'FOOT_WEAR': 31,\n      'FURNITURE': 32,\n      'GAMBLING_AND_CASINOS': 33,\n      'GLASS_CERAMICS_AND_CONCRETE': 34,\n      'GOVERNMENT_ADMINISTRATION': 35,\n      'GRAPHIC_DESIGN': 36,\n      'HEALTH_WELLNESS_AND_FITNESS': 37,\n      'HIGHER_EDUCATION': 38,\n      'HOME': 39,\n      'HOSPITAL_AND_HEALTH_CARE': 40,\n      'HOSPITALITY': 41,\n      'IMPORT_AND_EXPORT': 42,\n      'INDUSTRIAL_AUTOMATION': 43,\n      'INDUSTRY_CURRENT_VALUE': 44,\n      'INFORMATION_TECHNOLOGY_AND_SERVICES': 45,\n      'INTERNATIONAL_TRADE_AND_DEVELOPMENT': 46,\n      'LAW_PRACTICE': 47,\n      'LEISURE_TRAVEL_AND_TOURISM': 48,\n      'LIBRARIES': 49,\n      'LOGISTICS_AND_SUPPLY_CHAIN': 50,\n      'LUXURY_GOODS_AND_JEWELRY': 51,\n      'MACHINERY': 52,\n      'MANAGEMENT_CONSULTING': 53,\n      'MARKET_RESEARCH': 54,\n      'MARKETING_AND_ADVERTISING': 55,\n      'MECHANICAL_OR_INDUSTRIAL_ENGINEERING': 56,\n      'MEDIA_PRODUCTION': 57,\n      'MEDICAL_DEVICES': 58,\n      'MEDICAL_PRACTICE': 59,\n      'MOTION_PICTURES_AND_FILM': 60,\n      'MUSIC': 61,\n      'NEWSPAPERS': 62,\n      'NON_PROFIT_ORGANIZATION_MANAGEMENT': 63,\n      'OIL_AND_ENERGY': 64,\n      'ONLINE_MEDIA': 65,\n      'PACKAGING_AND_CONTAINERS': 66,\n      'PETS': 67,\n      'PHARMACEUTICALS': 68,\n      'PHOTOGRAPHY': 69,\n      'PUBLISHING': 70,\n      'REAL_ESTATE': 71,\n      'RESTAURANTS': 72,\n      'RETAIL': 73,\n      'SPORTING_GOODS': 74,\n      'SPORTS': 75,\n      'SUPERMARKETS': 76,\n      'TELECOMMUNICATIONS': 77,\n      'TEXTILES': 78,\n      'TOBACCO': 79,\n      'TOYS': 80,\n      'TRANSPORTATION_RUCKING_RAILROAD': 81,\n      'TRAVEL': 82,\n      'UTILITIES': 83,\n      'WAREHOUSING': 84,\n      'WHOLESALE': 85,\n      'WINE_AND_SPIRITS': 86,\n      'OTHER': 87,\n      'FASHION_AND_ACCESSORIES': 88,\n      'HOME_AND_APPLIANCES': 89,\n      'LEISURE': 90,\n      'PHARMACY_AND_HERBALISTS': 91,\n      'PERSONAL_CARE': 92,\n      'IT_AND_ELECTRONICS': 95,\n      'FOOD_FLOWERS_AND_DRINK': 96,\n      'LUGGAGE_AND_TRAVEL_ACCESSORIES': 97,\n      'LINGERIE': 98,\n      'OFFICE_SUPPLIES_AND_STATIONERY': 99,\n      'LIGHTING': 100,\n      'KITCHENWARE': 101,\n      'GARDENING': 102,\n      'HARDWARE': 103\n    })\n\n    .constant('TRIAL_CONTACT', {\n      'MAILTO': 'sales@stockagile.com',\n      'MEETING': 'https://meetings.hubspot.com/marina127/demostracion-de-stockagile-para-ver-en-detalle-las-funcionalidades-y-el-potencial-de-la-plataforma'\n    })\n\n    .constant('SIGNUP_INTERESTED_IN', {\n      'INVENTORY_MANAGEMENT': 0,\n      'REAL_TIME_SYNCHRONIZATION_WITH_ECOMMERCE_AND_MARKETPLACES': 1,\n      'MANAGEMENT_OF_STORES_AND_POINTS_OF_SALE': 2,\n      'WORK_IN_THE_CLOUD_AND_FROM_MULTIPLE_DEVICES': 3,\n      'WHOLESALE_AND_B2B_STORE_MANAGEMENT': 4,\n      'BILLING': 5,\n      'ANALYTICS_AND_DASHBOARDS': 6,\n      'CUSTOMER_LOYALTY': 7,\n      'OTHER': 8,\n\n      0: 'INVENTORY_MANAGEMENT',\n      1: 'REAL_TIME_SYNCHRONIZATION_WITH_ECOMMERCE_AND_MARKETPLACES',\n      2: 'MANAGEMENT_OF_STORES_AND_POINTS_OF_SALE',\n      3: 'WORK_IN_THE_CLOUD_AND_FROM_MULTIPLE_DEVICES',\n      4: 'WHOLESALE_AND_B2B_STORE_MANAGEMENT',\n      5: 'BILLING',\n      6: 'ANALYTICS_AND_DASHBOARDS',\n      7: 'CUSTOMER_LOYALTY',\n      8: 'OTHER'\n    })\n\n    .constant('STOCKTAKING_PRODUCT_NOT_FOUND_REASONS', {\n      'STOCKTAKING_PRODUCT_DOESNT_EXIST': 0,\n      'STOCKTAKING_PRODUCT_DELETED': 1,\n      'STOCKTAKING_PRODUCT_VARIANT_DELETED': 2,\n      'STOCKTAKING_BARCODE_COLLISION': 3,\n      'STOCKTAKING_PRODUCT_ALREADY_IN_STOCKTAKING': 4,\n\n      0: 'STOCKTAKING_PRODUCT_DOESNT_EXIST',\n      1: 'STOCKTAKING_PRODUCT_DELETED',\n      2: 'STOCKTAKING_PRODUCT_VARIANT_DELETED',\n      3: 'STOCKTAKING_BARCODE_COLLISION',\n      4: 'STOCKTAKING_PRODUCT_ALREADY_IN_STOCKTAKING'\n    })\n\n    .constant('STOCKTAKING_CHANGE_TYPES', {\n      'STOCKTAKING_CHANGE_TYPE_SCAN': 0,\n      'STOCKTAKING_CHANGE_TYPE_MANUAL': 1,\n      'STOCKTAKING_CHANGE_TYPE_IMPORT': 2,\n      'STOCKTAKING_CHANGE_TYPE_DELETED': 3,\n      'STOCKTAKING_CHANGE_TYPE_ALLOCATION': 4,\n\n      0: 'STOCKTAKING_CHANGE_TYPE_SCAN',\n      1: 'STOCKTAKING_CHANGE_TYPE_MANUAL',\n      2: 'STOCKTAKING_CHANGE_TYPE_IMPORT',\n      4: 'STOCKTAKING_CHANGE_TYPE_ALLOCATION'\n    })\n\n    .constant('PRODUCT_IDENTIFIER_TYPES', {\n      'NAME_IDENTIFIER': 0,\n      'CODE_IDENTIFIER': 1,\n      'NAME_CODE_IDENTIFIER': 2,\n      'CODE_NAME_IDENTIFIER': 3,\n\n      0: 'NAME_IDENTIFIER',\n      1: 'CODE_IDENTIFIER',\n      2: 'NAME_CODE_IDENTIFIER',\n      3: 'CODE_NAME_IDENTIFIER'\n    })\n\n    .constant('VARIANT_IDENTIFIER_TYPES', {\n      'COLOR_AND_SIZE_IDENTIFIER': 0,\n      'SKU_IDENTIFIER': 1,\n      'DO_NOT_SHOW': 2,\n\n      0: 'COLOR_AND_SIZE_IDENTIFIER',\n      1: 'SKU_IDENTIFIER',\n      2: 'DO_NOT_SHOW'\n    })\n\n    .constant('PRODUCT_PRICE_POSITION_TYPES', {\n      'NEW_LINE': 0,\n      'SAME_LINE_AS_PRODUCT': 1,\n\n      0: 'NEW_LINE',\n      1: 'SAME_LINE_AS_PRODUCT'\n    })\n\n    .constant('BARCODE_DESIGN_TYPES', {\n      'DO_NOT_SHOW': 0,\n      'SMALL': 1,\n      'NORMAL': 2,\n\n      0: 'DO_NOT_SHOW',\n      1: 'SMALL',\n      2: 'NORMAL'\n    })\n\n    .constant('TOTAL_DESIGN_TYPES', {\n      'NORMAL': 0,\n      'BIG': 1,\n\n      0: 'NORMAL',\n      1: 'BIG'\n    })\n\n    .constant('PLAN_LIMIT_EXCEED_LIMIT_POLICIES', {\n      'BLOCK_CREATION': 1,\n      'ALLOW_CREATION': 2,\n      1: 'BLOCK_CREATION',\n      2: 'ALLOW_CREATION'\n    })\n\n    .constant('PLAN_LIMIT_CODES', {\n      'STORE_AND_SHOWROOM_LIMIT': 'STORE_AND_SHOWROOM_LIMIT',\n      'WAREHOUSE_LIMIT': 'WAREHOUSE_LIMIT',\n      'USER_LIMIT': 'USER_LIMIT',\n      'RETAIL_STORE_LIMIT': 'RETAIL_STORE_LIMIT',\n      'REGISTER_LIMIT': 'REGISTER_LIMIT',\n      'B2B_WAREHOUSE_LIMIT': 'B2B_WAREHOUSE_LIMIT',\n      'POS_ORDER_SUBTOTAL_LIMIT': 'POS_ORDER_SUBTOTAL_LIMIT',\n      'EXTRA_ECOMMERCE': 'EXTRA_ECOMMERCE',\n      'EXTRA_ECOMMERCE_VOUCHERS': 'EXTRA_ECOMMERCE_VOUCHERS',\n      'EXTRA_MARKETPLACE': 'EXTRA_MARKETPLACE',\n      'EXTRA_CSV': 'EXTRA_CSV',\n      'EXTRA_API': 'EXTRA_API',\n      'EXTRA_B2B_ECOMMERCE': 'EXTRA_B2B_ECOMMERCE',\n      'HOLDED_INTEGRATION_APP': 'HOLDED_INTEGRATION_APP',\n      'KUBIBAI_INTEGRATION_APP': 'KUBIBAI_INTEGRATION_APP',\n      'SENDCLOUD_INTEGRATION_APP': 'SENDCLOUD_INTEGRATION_APP',\n      'EPOS_ITALY_INTEGRATION_APP': 'EPOS_ITALY_INTEGRATION_APP',\n      'SAGE_200_INTEGRATION_APP': 'SAGE_200_INTEGRATION_APP',\n      'VERIFACTU_INTEGRATION_APP': 'VERIFACTU_INTEGRATION_APP',\n      'MULTIPLE_FISCAL_DIRECTIONS': 'MULTIPLE_FISCAL_DIRECTIONS',\n      'NO_ADVANCED_ECOMMERCE': 'NO_ADVANCED_ECOMMERCE',\n      'NO_MARKETPLACE_INCLUDED': 'NO_MARKETPLACE_INCLUDED',\n      'NO_CUSTOM_API_CHANNEL': 'NO_CUSTOM_API_CHANNEL',\n      'NO_EXTRA_REGISTERS': 'NO_EXTRA_REGISTERS'\n    })\n\n    .constant('ITEM_PICKING_STATUS', {\n      'ITEM_PENDING_TO_PICK': 1,\n      'ITEM_PICKED': 2,\n\n      1: 'ITEM_PENDING_TO_PICK',\n      2: 'ITEM_PICKED'\n    })\n\n    .constant('PICKING_STATUS', {\n      'PENDING_TO_PICK': 1,\n      'IN_PROGRESS': 2,\n      'PICKED': 3,\n\n      1: 'PENDING_TO_PICK',\n      2: 'IN_PROGRESS',\n      3: 'PICKED'\n    })\n\n    .constant('PICKING_ORDER_STATUS_COLORS', {\n      '1': 'md-grey-300-bg',\n      '2': 'md-pink-100-bg',\n      '3': 'green-100-bg'\n    })\n\n    .constant('PACKING_STATUS', {\n      'PENDING_TO_PACK': 1,\n      'IN_PROGRESS': 2,\n      'PENDING_TO_SHIP': 3,\n      'SHIPPED': 4,\n\n      1: 'PENDING_TO_PACK',\n      2: 'IN_PROGRESS',\n      3: 'PENDING_TO_SHIP',\n      4: 'SHIPPED'\n    })\n\n    .constant('ITEM_PACKING_STATUS', {\n      'PENDING': 1,\n      'PACKED': 2,\n\n      1: 'PENDING',\n      2: 'PACKED'\n    })\n\n    .constant('PACKING_ORDER_STATUS_COLORS', {\n      '1': 'md-grey-300-bg',\n      '2': 'md-yellow-100-bg',\n      '3': 'md-blue-100-bg',\n      '4': 'md-green-100-bg'\n    })\n\n    .constant('PICKABLE_ORDER_STATUS', {\n      1: 'PICKABLE_ORDER_STATUS_PENDING',\n      2: 'PICKABLE_ORDER_STATUS_IN_PROGRESS',\n      3: 'PICKABLE_ORDER_STATUS_DONE',\n      4: 'PICKABLE_ORDER_STATUS_PACKING',\n      5: 'PICKABLE_ORDER_STATUS_PACKED',\n      6: 'PICKABLE_ORDER_STATUS_SHIPPED',\n\n      'PICKABLE_ORDER_STATUS_PENDING': 1,\n      'PICKABLE_ORDER_STATUS_IN_PROGRESS': 2,\n      'PICKABLE_ORDER_STATUS_DONE': 3,\n      'PICKABLE_ORDER_STATUS_PACKING': 4,\n      'PICKABLE_ORDER_STATUS_PACKED': 5,\n      'PICKABLE_ORDER_STATUS_SHIPPED': 6\n    })\n\n    .constant('ATTRIBUTE_CATEGORY_TYPES', {\n      'MULTIPLE_ATTRIBUTES': 1,\n      'SINGLE_ATTRIBUTE': 2,\n      'TEXT': 3,\n      'HTML_TEXT': 4,\n      'JSON': 5,\n      'INT': 6,\n      'DECIMAL': 7,\n\n      1: 'MULTIPLE_ATTRIBUTES',\n      2: 'SINGLE_ATTRIBUTE',\n      3: 'TEXT',\n      4: 'HTML_TEXT',\n      5: 'JSON',\n      6: 'INT',\n      7: 'DECIMAL'\n    })\n\n    .constant('SUBSCRIPTION_PERIOD', {\n      'MONTHLY': 1,\n      'YEARLY': 2,\n\n      1: 'MONTHLY',\n      2: 'YEARLY'\n    })\n\n    .constant('SUBSCRIPTION_EXCEED_LIMIT_POLICY', {\n      'BLOCK_CREATION': 1,\n      'ALLOW_CREATION': 2,\n\n      1: 'BLOCK_CREATION',\n      2: 'ALLOW_CREATION'\n    })\n\n    .constant('PAYMENT_SERVICE_TYPES', {\n      'DEFAULT': 1,\n      'STRIPE': 1,\n      1: 'STRIPE'\n    })\n\n    .constant('PAYMENT_METHOD_GATEWAYS', {\n      'ADYEN': 10,\n      'COMERCIA': 20,\n      'DOJO': 30,\n\n      10: 'ADYEN',\n      20: 'COMERCIA',\n      30: 'DOJO'\n\n    })\n\n    .constant('FEATURE_FLAGS', {\n      'CREATE_POS_ORDER_V2': 'CREATE_POS_ORDER_V2'\n    })\n\n    .constant('FISCAL_ADDRESS_INVOICING_METHODS', {\n      'FISCAL_ADDRESS_INVOICING_METHOD_FIRM_SALE': 10,\n      'FISCAL_ADDRESS_INVOICING_METHOD_CONSIGNMENT_SALE': 20,\n      10: 'FISCAL_ADDRESS_INVOICING_METHOD_FIRM_SALE',\n      20: 'FISCAL_ADDRESS_INVOICING_METHOD_CONSIGNMENT_SALE'\n\n    })\n\n    .constant('ROUNDING_PRICE_TYPES', {\n      'PRICE_NO_ROUND': 'no_round',\n      'PRICE_ROUND_UP': 'round_up',\n      'PRICE_ROUND_UP_99': 'round_up_99',\n      'PRICE_ROUND_DOWN': 'round_down',\n      'PRICE_ROUND_DOWN_99': 'round_down_99',\n      'no_round': 'PRICE_NO_ROUND',\n      'round_up': 'PRICE_ROUND_UP',\n      'round_up_99': 'PRICE_ROUND_UP_99',\n      'round_down': 'PRICE_ROUND_DOWN',\n      'round_down_99': 'PRICE_ROUND_DOWN_99'\n    })\n\n    .constant('SENDCLOUD_SHIPPING_METHODS', {\n      'CUSTOM_SHIPPING_METHOD_CHECKOUT': -1,\n      'SENDCLOUD_UNSTAMPED_LETTER': 8,\n\n      8: 'SENDCLOUD_UNSTAMPED_LETTER',\n      '-1': 'CUSTOM_SHIPPING_METHOD_CHECKOUT'\n    })\n\n    .constant('PLANNING_AVAILABILITY_STATUS', {\n      OUT_OF_STOCK: 'OUT_OF_STOCK',\n      URGENT_ORDER: 'URGENT_ORDER',\n      NON_URGENT_ORDER: 'NON_URGENT_ORDER',\n      IN_STOCK: 'IN_STOCK'\n    })\n\n    .constant('IMPORTATION_TYPE_STOCKTAKING_PRODUCT_VARIANT', {\n      STOCKTAKING_PRODUCT_VARIANT: 'stocktaking_product_variant'\n    })\n\n    .constant('WAREHOUSE_TYPES', {\n      WAREHOUSE: 0,\n      STORE: 1,\n      0: 'WAREHOUSE',\n      1: 'STORE'\n    })\n\n    .constant('PRINTER_TYPES', {\n      PRINTER_TYPE_QZ: 10,\n      PRINTER_TYPE_EPSON: 20,\n      PRINTER_TYPE_PDF: 30,\n      PRINTER_TYPE_HTML: 40\n    })\n\n    .constant('PAGE_SIZES', {\n      PAGE_SIZE_A3: 10,\n      PAGE_SIZE_A4: 20,\n      PAGE_SIZE_A5: 30,\n      PAGE_SIZE_ROLL: 40\n    })\n\n    .constant('SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES', {\n      VERIFACTU_TYPE_UNKNOWN: 0,\n      VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01: 1,\n      VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07: 2,\n      VERIFACTU_TYPE_SII: 3,\n      VERIFACTU_TYPE_OTHER: 4,\n      VERIFACTU_TYPE_ASAP: 5,\n      0: 'VERIFACTU_TYPE_UNKNOWN',\n      1: 'VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01',\n      2: 'VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07',\n      3: 'VERIFACTU_TYPE_SII',\n      4: 'VERIFACTU_TYPE_OTHER',\n      5: 'VERIFACTU_TYPE_ASAP'\n    })\n\n    .constant('VERIFACTU_DOCUMENTS_STATUS', {\n      VERIFACTU_DOCUMENTS_PENDING_TO_UPLOAD: 1,\n      VERIFACTU_DOCUMENTS_PENDING_TO_REVIEW: 2,\n      VERIFACTU_DOCUMENTS_UNDER_REVIEW: 3,\n      VERIFACTU_DOCUMENTS_REJECTED: 4,\n      VERIFACTU_DOCUMENTS_APPROVED: 5,\n      1: 'VERIFACTU_DOCUMENTS_PENDING_TO_UPLOAD',\n      2: 'VERIFACTU_DOCUMENTS_PENDING_TO_REVIEW',\n      3: 'VERIFACTU_DOCUMENTS_UNDER_REVIEW',\n      4: 'VERIFACTU_DOCUMENTS_REJECTED',\n      5: 'VERIFACTU_DOCUMENTS_APPROVED'\n    })\n\n    .constant('VERIFACTU_ENVIRONMENT_STATUS', {\n      ENVIRONMENT_STATUS_TEST: 0\n    })\n\n    .constant('INVOICE_PAYMENT_STATUSES', {\n      PAYMENT_STATUS_PENDING: 10,\n      PAYMENT_STATUS_PAID: 20,\n      10: 'PAYMENT_STATUS_PENDING',\n      20: 'PAYMENT_STATUS_PAID'\n    });\n\n\n})();\n\n(function () {\n  'use strict';\n\n  angular\n    .module('fuse')\n    .config(config);\n\n  /** @ngInject */\n  function config($translateProvider, $httpProvider, $provide, $mdDateLocaleProvider,\n                  AnalyticsProvider, $mdAriaProvider, tmhDynamicLocaleProvider, fuseConfigProvider, $sceDelegateProvider, $qProvider) {\n    // Put your common app configurations here\n\n    if ( navigator.platform.indexOf('Win') > -1 ) {\n      fuseConfigProvider.config({disableCustomScrollbars:true})\n    }\n\n    // Mute \"possibly unhandled rejection\"\n    $qProvider.errorOnUnhandledRejections(false);\n\n    // Locale configuration\n    // tmhDynamicLocaleProvider.localeLocationPattern('/assets/angular-i18n/angular-locale_{{locale}}.js');\n    // tmhDynamicLocaleProvider.useCookieStorage();\n\n    // angular-translate configuration\n    $translateProvider.useLoader('$translatePartialLoader', {\n      urlTemplate: '{part}/i18n/{lang}.json' + '?' + (Math.floor(Math.random() * 90000) + 10000)\n    });\n    $translateProvider.preferredLanguage('es');\n    $translateProvider.useSanitizeValueStrategy('sanitize');\n\n    $httpProvider.interceptors.push(ApiInjector);\n    $httpProvider.interceptors.push(NotificationsInjector);\n\n    // European date format\n    $mdDateLocaleProvider.formatDate = function (date) {\n      return date ? moment(date).format('DD/MM/YYYY') : '';\n    };\n\n    $mdDateLocaleProvider.parseDate = function (dateString) {\n      var m = moment(dateString, 'DD/MM/YYYY', true);\n      return dateString ? (m.isValid() ? m.toDate() : new Date(NaN)) : '';\n    };\n\n    // Text Angular options\n    $provide.decorator('taOptions', [\n      '$delegate', function (taOptions) {\n        taOptions.toolbar = [\n          ['bold', 'italics', 'underline', 'ul', 'ol', 'quote']\n        ];\n\n        taOptions.classes = {\n          focussed: 'focussed',\n          toolbar: 'ta-toolbar',\n          toolbarGroup: 'ta-group',\n          toolbarButton: 'md-button',\n          toolbarButtonActive: 'active',\n          disabled: '',\n          textEditor: 'form-control',\n          htmlEditor: 'form-control'\n        };\n\n        return taOptions;\n      }\n    ]);\n\n    // Text Angular tools\n    $provide.decorator('taTools', [\n      '$delegate', function (taTools) {\n        taTools.quote.iconclass = 'icon-format-quote';\n        taTools.bold.iconclass = 'icon-format-bold';\n        taTools.italics.iconclass = 'icon-format-italic';\n        taTools.underline.iconclass = 'icon-format-underline';\n        taTools.strikeThrough.iconclass = 'icon-format-strikethrough';\n        taTools.ul.iconclass = 'icon-format-list-bulleted';\n        taTools.ol.iconclass = 'icon-format-list-numbers';\n        taTools.redo.iconclass = 'icon-redo';\n        taTools.undo.iconclass = 'icon-undo';\n        taTools.clear.iconclass = 'icon-close-circle-outline';\n        taTools.justifyLeft.iconclass = 'icon-format-align-left';\n        taTools.justifyCenter.iconclass = 'icon-format-align-center';\n        taTools.justifyRight.iconclass = 'icon-format-align-right';\n        taTools.justifyFull.iconclass = 'icon-format-align-justify';\n        taTools.indent.iconclass = 'icon-format-indent-increase';\n        taTools.outdent.iconclass = 'icon-format-indent-decrease';\n        taTools.html.iconclass = 'icon-code-tags';\n        taTools.insertImage.iconclass = 'icon-file-image-box';\n        taTools.insertLink.iconclass = 'icon-link';\n        taTools.insertVideo.iconclass = 'icon-filmstrip';\n\n        return taTools;\n      }\n    ]);\n\n    /*\n    flowFactoryProvider.defaults = {\n        target: '/upload',\n        permanentErrors:[404, 500, 501]\n    };\n    // You can also set default events:\n    flowFactoryProvider.on('catchAll', function (event) {\n\n    });\n    // Can be used with different implementations of Flow.js\n    // flowFactoryProvider.factory = fustyFlowFactory;\n    */\n\n    // Google Analytics\n    AnalyticsProvider.setAccount({\n      tracker: 'UA-104197600-2',\n      trackEvent: true\n    });\n    AnalyticsProvider.trackPages(true);\n\n    // Globally disables all ARIA warnings.\n    $mdAriaProvider.disableWarnings();\n\n    $sceDelegateProvider.resourceUrlWhitelist([\n      // Allow same origin resource loads.\n      'self',\n      'http://localhost:8000/',\n      'http://stockagile-be:8000/',\n      'https://api.stockagile.com/',\n      'https://s3-eu-west-1.amazonaws.com/**'\n      // Allow loading from our assets domain. **.\n      // 'http://ergast.com/**'\n    ]);\n  }\n\n  /** @ngInject */\n  function ApiInjector(Session) {\n    return {\n      request: function (config) {\n        if (Session.isAuthenticated()) {\n          config.headers['Authorization'] = 'Token ' + Session.token;\n        }\n        config.timeout = 2 * 60 * 1000;\n        return config;\n      },\n      responseError: function (config) {\n        return config;\n      }\n    }\n  }\n\n  ///** @ngInject */\n  function NotificationsInjector($rootScope) {\n    const timeout = 1000; // 1 sec\n    var lastUpdate = null;\n\n    return {\n      response: function (config) {\n        const now = new Date();\n        if ((!lastUpdate || timeout < (now-lastUpdate)) &&\n            config.headers('X-Stockagile-Notifications')) {\n\n          $rootScope.$emit('NotificationsInjector::x-notifications',\n                            config.headers('X-Stockagile-Notifications'));\n\n          lastUpdate = now;\n        }\n\n        return config;\n     }\n   }\n  }\n\n})();\n\n(function() {\n    'use strict';\n\n    angular\n      .module('fuse')\n      .factory('api', apiService);\n\n    /** @ngInject */\n    function apiService(\n      $resource,\n      Utils,\n      NetPromoterScore,\n      PosOrderFulfillmentShippingBox,\n      Plan,\n      ShippingBox,\n      VerifactuIntegrationInstalledApp,\n      Warehouse\n    ) {\n      /**\n       * You can use this service to define your API urls. The \"api\" service\n       * is designed to work in parallel with \"apiResolver\" service which you can\n       * find in the \"app/core/services/api-resolver.service.js\" file.\n       *\n       * You can structure your API urls whatever the way you want to structure them.\n       * You can either use very simple definitions, or you can use multi-dimensional\n       * objects.\n       *\n       * Here's a very simple API url definition example:\n       *\n       *      api.getBlogList = $resource('http://api.example.com/getBlogList');\n       *\n       * While this is a perfectly valid $resource definition, most of the time you will\n       * find yourself in a more complex situation where you want url parameters:\n       *\n       *      api.getBlogById = $resource('http://api.example.com/blog/:id', {id: '@id'});\n       *\n       * You can also define your custom methods. Custom method definitions allow you to\n       * add hardcoded parameters to your API calls that you want to sent every time you\n       * make that API call:\n       *\n       *      api.getBlogById = $resource('http://api.example.com/blog/:id', {id: '@id'}, {\n       *         'getFromHomeCategory' : {method: 'GET', params: {blogCategory: 'home'}}\n       *      });\n       *\n       * In addition to these definitions, you can also create multi-dimensional objects.\n       * They are nothing to do with the $resource object, it's just a more convenient\n       * way that we have created for you to packing your related API urls together:\n       *\n       *      api.blog = {\n       *                   list     : $resource('http://api.example.com/blog'),\n       *                   getById  : $resource('http://api.example.com/blog/:id', {id: '@id'}),\n       *                   getByDate: $resource('http://api.example.com/blog/:date', {id: '@date'}, {\n       *                       get: {\n       *                            method: 'GET',\n       *                            params: {\n       *                                getByDate: true\n       *                            }\n       *                       }\n       *                   })\n       *       }\n       *\n       * If you look at the last example from above, we overrode the 'get' method to put a\n       * hardcoded parameter. Now every time we make the \"getByDate\" call, the {getByDate: true}\n       * object will also be sent along with whatever data we are sending.\n       *\n       * All the above methods are using standard $resource service. You can learn more about\n       * it at: https://docs.angularjs.org/api/ngResource/service/$resource\n       *\n       * -----\n       *\n       * After you defined your API urls, you can use them in Controllers, Services and even\n       * in the UIRouter state definitions.\n       *\n       * If we use the last example from above, you can do an API call in your Controllers and\n       * Services like this:\n       *\n       *      function MyController (api)\n       *      {\n       *          // Get the blog list\n       *          api.blog.list.get({},\n       *\n       *              // Success\n       *              function (response)\n       *              {\n       *                  console.log(response);\n       *              },\n       *\n       *              // Error\n       *              function (response)\n       *              {\n       *                  console.error(response);\n       *              }\n       *          );\n       *\n       *          // Get the blog with the id of 3\n       *          var id = 3;\n       *          api.blog.getById.get({'id': id},\n       *\n       *              // Success\n       *              function (response)\n       *              {\n       *                  console.log(response);\n       *              },\n       *\n       *              // Error\n       *              function (response)\n       *              {\n       *                  console.error(response);\n       *              }\n       *          );\n       *\n       *          // Get the blog with the date by using custom defined method\n       *          var date = 112314232132;\n       *          api.blog.getByDate.get({'date': date},\n       *\n       *              // Success\n       *              function (response)\n       *              {\n       *                  console.log(response);\n       *              },\n       *\n       *              // Error\n       *              function (response)\n       *              {\n       *                  console.error(response);\n       *              }\n       *          );\n       *      }\n       *\n       * Because we are directly using $resource service, all your API calls will return a\n       * $promise object.\n       *\n       * --\n       *\n       * If you want to do the same calls in your UI Router state definitions, you need to use\n       * \"apiResolver\" service we have prepared for you:\n       *\n       *      $stateProvider.state('app.blog', {\n       *          url      : '/blog',\n       *          views    : {\n       *               'content@app': {\n       *                   templateUrl: 'app/main/apps/blog/blog.html',\n       *                   controller : 'BlogController as vm'\n       *               }\n       *          },\n       *          resolve  : {\n       *              Blog: function (apiResolver)\n       *              {\n       *                  return apiResolver.resolve('blog.list@get');\n       *              }\n       *          }\n       *      });\n       *\n       *  You can even use parameters with apiResolver service:\n       *\n       *      $stateProvider.state('app.blog.show', {\n       *          url      : '/blog/:id',\n       *          views    : {\n       *               'content@app': {\n       *                   templateUrl: 'app/main/apps/blog/blog.html',\n       *                   controller : 'BlogController as vm'\n       *               }\n       *          },\n       *          resolve  : {\n       *              Blog: function (apiResolver, $stateParams)\n       *              {\n       *                  return apiResolver.resolve('blog.getById@get', {'id': $stateParams.id);\n       *              }\n       *          }\n       *      });\n       *\n       *  And the \"Blog\" object will be available in your BlogController:\n       *\n       *      function BlogController(Blog)\n       *      {\n       *          var vm = this;\n       *\n       *          // Data\n       *          vm.blog = Blog;\n       *\n       *          ...\n       *      }\n       */\n\n      var api = {};\n\n      // Base Url\n      // api.baseUrl = 'app/data/';\n\n      if (window.location.href.indexOf('localhost') !== -1) {\n        api.url = 'http://localhost:8000/';\n        api.baseDomain = 'localhost';\n        api.baseDomainCookie = 'localhost';\n        api.baseUrl = api.url + 'api/v1/';\n        api.baseUrlV2 = api.url + 'api/v2/';\n        api.environment = 'development';\n      } else if (window.location.href.indexOf('stockagile-fe') !== -1) {\n        api.url = 'http://stockagile-be:8000/';\n        api.baseDomain = 'stockagile-be';\n        api.baseDomainCookie = 'stockagile-be';\n        api.baseUrl = api.url + 'api/v1/';\n        api.environment = 'development';\n      } else if (window.location.href.indexOf('panelstaging.stockagile.com') !== -1) {\n        api.url = 'https://apistaging.stockagile.com/';\n        api.url = 'https://apistaging.stockagile.com/';\n        api.baseDomain = 'stockagile.com';\n        api.baseDomainCookie = 'stockagile.com';\n        api.baseUrl = api.url + 'api/v1/';\n        api.baseUrlV2 = api.url + 'api/v2/';\n        api.environment = 'production';\n      } else if (window.location.href.indexOf('panelqa.') !== -1) {\n        var branch = window.location.href.substr(window.location.href.indexOf('//') + 2).split('.')[0];\n        api.url = 'https://' + branch + '.apiqa.stockagile.com/';\n        api.baseDomain = 'stockagile';\n        api.baseDomainCookie = 'stockagile.com';\n        api.baseUrl = api.url + 'api/v1/';\n        api.baseUrlV2 = api.url + 'api/v2/';\n        api.environment = 'qa';\n      } else if (window.location.href.indexOf('192.168') !== -1) {\n        var localIp = window.location.href.split('//')[1].split(':')[0];\n        api.baseDomain = localIp;\n        api.baseDomainCookie = localIp;\n        api.url = 'http://' + localIp + ':8000/';\n        api.baseUrl = api.url + 'api/v1/';\n        api.baseUrlV2 = api.url + 'api/v2/';\n        api.environment = 'development';\n      } else if (window.location.href.indexOf('panel.stockagile.com') !== -1) {\n        api.url = 'https://api.stockagile.com/';\n        api.url = 'https://api.stockagile.com/';\n        api.baseDomain = 'stockagile.com';\n        api.baseDomainCookie = 'stockagile.com';\n        api.baseUrl = api.url + 'api/v1/';\n        api.baseUrlV2 = api.url + 'api/v2/';\n        api.environment = 'production';\n      }\n\n      api.quickPanel = {};\n\n      /**\n       * SUPPORT\n       */\n      api.support = {\n        videos: $resource(api.baseUrl + 'videos/', {}, {\n          'list': { method: 'GET', isArray: false }\n        }),\n        changelogs: $resource(api.baseUrl + 'changelogs/', {}, {\n          'list': { method: 'GET' }\n        }),\n        startBanners: $resource(api.baseUrl + 'start-banners/', {}, {\n          'list': { method: 'GET' }\n        }),\n        dashboardItems: $resource(api.baseUrl + 'dashboard-items/', {}, {\n          'list': { method: 'GET' }\n        })\n      };\n\n      /**\n       * ACCOUNT API\n       */\n      api.account = {\n        login: $resource(api.baseUrl + 'api-token-auth/'),\n        signup: $resource(api.baseUrl + 'signup'),\n        signupTwo: $resource(api.baseUrl + 'signup-two/:id/:option/:querytoken', {\n          id: '@id',\n          option: '@option',\n          querytoken: '@querytoken'\n        }, {\n          'get': { method: 'GET' },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' }\n        }),\n        requestResetEmail: $resource(api.baseUrl + 'request-reset-email'),\n        passwordReset: $resource(api.baseUrl + 'password-reset/:uid/:token', { uid: '@uid', token: '@token' }),\n        passwordResetComplete: $resource(api.baseUrl + 'password-reset-complete', {}, {\n          'patch': { method: 'PATCH' }\n        }),\n        user: $resource(api.baseUrl + 'users/me'),\n        workday: $resource(api.baseUrl + 'users/workday/:option', { option: '@option' }),\n        users: $resource(api.baseUrl + 'users/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET' },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' },\n          'get': { method: 'GET' }\n        }),\n        roles: $resource(api.baseUrl + 'roles/:id', { id: '@id' }, {\n          'list': { method: 'GET' },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        permissions: $resource(api.baseUrl + 'permissions', {}, {\n          'list': { method: 'GET' }\n        }),\n        myCompany: $resource(api.baseUrl + 'companies/me'),\n        companyStatus: $resource(api.baseUrl + 'companies/status'),\n        billingPortal: $resource(api.baseUrl + 'companies/billing-portal'),\n        pendingInvoices: $resource(api.baseUrl + 'companies/pending-invoices'),\n        company: $resource(api.baseUrl + 'companies/:id/:option', { id: '@id', option: '@option' }, {\n          'get': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' },\n          'save': { method: 'POST' }\n        }),\n        fiscalAddress: $resource(api.baseUrl + 'companies/fiscal-addresses/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        notifications: $resource(api.baseUrl + 'companies/notifications/:id/:option',\n          {\n            id: '@id',\n            option: '@option'\n          }, {\n            'list': { method: 'GET', isArray: false },\n            'get': { method: 'GET', isArray: false },\n            'save': { method: 'POST' },\n            'update': { method: 'PUT' },\n            'delete': { method: 'DELETE' }\n          }),\n        subscriptions: $resource(api.baseUrl + 'subscriptions/:id/:option', { id: '@id', option: '@option' }, {\n          'get': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' }\n        }),\n        subscription: $resource(api.baseUrl + 'companies/subscription/:id/:option', { id: '@id', option: '@option' }, {\n          'get': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' },\n          'save': { method: 'POST' }\n        }),\n        contractedPlanLimits: $resource(api.baseUrl + 'companies/subscription/contracted-plan-limits/:id', { id: '@id' }, {\n          'get': { method: 'GET', isArray: false },\n          'list': { method: 'GET', isArray: false },\n          'save': { method: 'POST' }\n        }),\n        plans: $resource(api.baseUrl + 'companies/subscription/plans/:id', { id: '@id' }, {\n          'get': { method: 'GET', isArray: false },\n          'list': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new Plan(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          }\n        }),\n        planFeatures: $resource(api.baseUrl + 'companies/subscription/plan-features/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'list': { method: 'GET', isArray: false }\n        }),\n        signupSteps: $resource(api.baseUrl + 'companies/signup-step', null, {\n          'list': { method: 'GET', isArray: false }\n        }),\n        netPromoterScores: $resource(api.baseUrl + 'net-promoter-scores', {}, {\n          'list': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new NetPromoterScore(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          }\n        }),\n        fiscalProfiles: {\n          spainFiscalProfiles: $resource(api.baseUrl + 'companies/spain-fiscal-profiles/:id', {\n            id: '@id'\n          }, {\n            'get': { method: 'GET', isArray: false },\n            'update': { method: 'PUT' }\n          })\n        }\n      };\n\n      /**\n       * ACCOUNTING API\n       */\n      api.accounting = {\n        //bills : $resource(api.baseUrl + 'bills', {}, {'list':{method:'GET'}}),\n        //payments : $resource(api.baseUrl + 'payments', {}, {'list':{method:'GET'}}),\n        paymentsGateway: $resource(api.baseUrl + 'accounting/payments-gateway/:option', { option: '@option' }, {\n          'get': { method: 'GET', isArray: false }\n        }),\n        payments: $resource(api.baseUrl + 'accounting/payments/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        taxes: $resource(api.baseUrl + 'accounting/taxes/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        bills: $resource(api.baseUrl + 'accounting/bills/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        invoices: $resource(api.baseUrl + 'accounting/invoices/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        paymentMethods: $resource(api.baseUrl + 'accounting/payment-methods/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      /**\n       * INVENTORY API\n       */\n      api.inventories = {\n        inventoryConfiguration: $resource(api.baseUrl + 'inventories/inventory-configuration/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'patch': { method: 'PATCH' },\n          'delete': { method: 'DELETE' }\n        }),\n        categories: $resource(api.baseUrl + 'inventories/categories/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        dashboard: $resource(api.baseUrl + 'inventories/dashboard', {\n          'get': { method: 'GET', isArray: false }\n        }),\n        subcategories: $resource(api.baseUrl + 'inventories/subcategories/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        compositions: $resource(api.baseUrl + 'inventories/compositions/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        dataImports: $resource(api.baseUrl + 'inventories/data-imports/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        dataImportsStep: $resource(api.baseUrl + 'inventories/data-imports/:id/step/:step', {\n          id: '@id',\n          step: '@step'\n        }, {\n          'save': { method: 'POST' }\n        }),\n        productImports: $resource(api.baseUrl + 'inventories/product-imports/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productImportsStep: $resource(api.baseUrl + 'inventories/product-imports/:id/step/:step', {\n          id: '@id',\n          step: '@step'\n        }, {\n          'save': { method: 'POST' }\n        }),\n        productImagesImportStep: $resource(api.baseUrl + 'inventories/product-images-import/:id/step/:step', {\n          id: '@id',\n          step: '@step'\n        }, {\n          'save': { method: 'POST' }\n        }),\n        brands: $resource(api.baseUrl + 'inventories/brands/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        seasons: $resource(api.baseUrl + 'inventories/seasons/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        pricingTiers: $resource(api.baseUrl + 'inventories/pricing-tiers/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productProviderPrices: $resource(api.baseUrl + 'inventories/product-provider-price/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productVariantProviderPrices: $resource(api.baseUrl + 'inventories/product-variant-provider-price/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productPrices: $resource(api.baseUrl + 'inventories/product-prices/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productTranslations: $resource(api.baseUrl + 'inventories/product-translations/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        variantCategories: $resource(api.baseUrl + 'inventories/variant-categories/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        variants: $resource(api.baseUrl + 'inventories/variants/:id/:option', {\n          id: '@id',\n          option: '@option',\n          category: '@category',\n          to: '@to'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        products: $resource(api.baseUrl + 'inventories/products/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productBundles: $resource(api.baseUrl + 'inventories/product-bundles/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productImages: $resource(api.baseUrl + 'inventories/product-images/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productBundleImages: $resource(api.baseUrl + 'inventories/product-bundle-images/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productVariantBundleProductVariant: $resource(api.baseUrl + 'inventories/product-variant-bundle-product-variant/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productVariants: $resource(api.baseUrl + 'inventories/product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productVariantPrices: $resource(api.baseUrl + 'inventories/product-variant-prices/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        warehouses: $resource(api.baseUrl + 'inventories/warehouses/:id/:option', { id: '@id', option: '@option' }, {\n          'list': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new Warehouse(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          },\n          'get': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data) {\n                  if (response.data.id) {\n                    response.data = new Warehouse(response.data);\n                  } else if (Array.isArray(response.data.results)) {\n                    response.data.results = response.data.results.map(function(item) {\n                      return new Warehouse(item);\n                    });\n                  }\n                }\n                return response.data;\n              }\n            }\n          },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        stocks: $resource(api.baseUrl + 'inventories/stocks/:id/:option', {\n          id: '@id',\n          option: '@option',\n          warehouse: '@warehouse',\n          product_variant__product: '@product_variant__product'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'bulk': { method: 'POST', isArray: true },\n          'update': { method: 'PUT' },\n          'patch': { method: 'PATCH', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        stocktakings: $resource(api.baseUrl + 'inventories/stocktakings/:id/:option/:action', {\n          id: '@id',\n          option: '@option',\n          action: '@action'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        stocktakingOrderProductVariantLots: $resource(api.baseUrl + 'inventories/stocktaking-order-product-variant-lots/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        stocktakingProductVariants: $resource(api.baseUrl + 'inventories/stocktaking-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: true },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        stocktakingOrderProducts: $resource(api.baseUrl + 'inventories/stocktaking-order-products/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        stocktakingOrderProductVariants: $resource(api.baseUrl + 'inventories/stocktaking-order-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        stocktakingChanges: $resource(api.baseUrl + 'inventories/stocktaking-changes/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        stockMovements: $resource(api.baseUrl + 'inventories/stock-movements/:id/', {\n          id: '@id',\n          product_id: '@product_id'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' }\n        }),\n        uidStocks: $resource(api.baseUrl + 'inventories/uid-stocks/:id/:option', {\n          id: '@id',\n          option: '@option',\n          product_id: '@product_id'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        uidStocksList: $resource(api.baseUrl + 'inventories/uid-stocks-list/:id/:option', {\n          id: '@id',\n          option: '@option',\n          product_id: '@product_id'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false }\n        }),\n        stockLocations: $resource(api.baseUrl + 'inventories/stock-locations/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' },\n          'copy': { method: 'PUT', isArray: true }\n        }),\n        contacts: $resource(api.baseUrl + 'inventories/contacts/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'patch': { method: 'PATCH', isArray: false },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        contactGroups: $resource(api.baseUrl + 'inventories/contact-groups/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        contactsImport: $resource(api.baseUrl + 'inventories/contacts/import/', { execute: '@execute' }, {\n          'save': { method: 'POST' }\n        }),\n        persons: $resource(api.baseUrl + 'inventories/persons/:id/', { id: '@id' }, {\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        postalAddresses: $resource(api.baseUrl + 'inventories/postal-addresses/:id/', { id: '@id' }, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrders: $resource(api.baseUrl + 'inventories/purchase-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderStatus: $resource(api.baseUrl + 'inventories/purchase-orders/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderProducts: $resource(api.baseUrl + 'inventories/purchase-order-products/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n\n        }),\n        purchaseOrderProductVariants: $resource(api.baseUrl + 'inventories/purchase-order-product-variants/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderProductProviderPrice: $resource(api.baseUrl + 'inventories/purchase-order-product-provider-price/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderProductVariantProviderPrice: $resource(api.baseUrl + 'inventories/purchase-order-product-variant-provider-price/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderDeliveries: $resource(api.baseUrl + 'inventories/purchase-order-deliveries/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'partialUpdate': { method: 'PATCH' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderDeliveryLine: $resource(api.baseUrl + 'inventories/purchase-order-delivery-line/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderDeliveriesLinkToInvoices: $resource(api.baseUrl + 'inventories/purchase-order-deliveries/:option', {\n          option: '@option'\n        }, {\n          'update': { method: 'PUT' }\n        }),\n        purchaseOrderInvoices: $resource(api.baseUrl + 'inventories/purchase-order-invoices/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'partialUpdate': { method: 'PATCH' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderDeliveryProductVariants: $resource(api.baseUrl + 'inventories/purchase-order-delivery-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderDeliveryFiles: $resource(api.baseUrl + 'inventories/sale-order-delivery-files/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderDeliveryFiles: $resource(api.baseUrl + 'inventories/purchase-order-delivery-files/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrderDeliveriesStatus: $resource(api.baseUrl + 'inventories/purchase-order-deliveries/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        purchaseOrdersSendCatalog: $resource(api.baseUrl + 'inventories/purchase-orders/:id/print-catalog', {\n          id: '@id'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false }\n        }),\n        purchaseOrderDeliveriesTransfer: $resource(api.baseUrl + 'inventories/purchase-order-deliveries/:id/transfer', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'save': { method: 'POST' }\n        }),\n        serialNumberTypes: $resource(api.baseUrl + 'inventories/serial-number-types/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrders: $resource(api.baseUrl + 'inventories/sale-orders/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderStatus: $resource(api.baseUrl + 'inventories/sale-orders/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderProducts: $resource(api.baseUrl + 'inventories/sale-order-products/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderProductVariants: $resource(api.baseUrl + 'inventories/sale-order-product-variants/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderDeliveries: $resource(api.baseUrl + 'inventories/sale-order-deliveries/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderDeliveryProductVariants: $resource(api.baseUrl + 'inventories/sale-order-delivery-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrderDeliveriesStatus: $resource(api.baseUrl + 'inventories/sale-order-deliveries/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        salesChannels: $resource(api.baseUrl + 'inventories/sales-channels/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrders: $resource(api.baseUrl + 'inventories/transfer-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrderStatus: $resource(api.baseUrl + 'inventories/transfer-orders/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrderProducts: $resource(api.baseUrl + 'inventories/transfer-order-products/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrderProductVariants: $resource(api.baseUrl + 'inventories/transfer-order-product-variants/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrderDeliveries: $resource(api.baseUrl + 'inventories/transfer-order-deliveries/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrderDeliveryProductVariants: $resource(api.baseUrl + 'inventories/transfer-order-delivery-product-variants/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        transferOrderDeliveriesStatus: $resource(api.baseUrl + 'inventories/transfer-order-deliveries/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        adjustmentOrders: $resource(api.baseUrl + 'inventories/adjustment-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        adjustmentOrderStatus: $resource(api.baseUrl + 'inventories/adjustment-orders/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        adjustmentOrderProducts: $resource(api.baseUrl + 'inventories/adjustment-order-products/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        adjustmentOrderProductVariants: $resource(api.baseUrl + 'inventories/adjustment-order-product-variants/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        posOrderProductVariants: $resource(api.baseUrl + 'inventories/pos-order-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        posOrders: $resource(api.baseUrl + 'inventories/pos-orders/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        posOrdersFulfillment: $resource(api.baseUrl + 'inventories/pos-orders/:id/fulfillments/:fulfillment/:action', {\n          id: '@id',\n          fulfillment: '@fulfillment',\n          action: '@action'\n        }, {\n          //'list': {method: 'GET', isArray: false},\n          //'get': {method: 'GET', isArray: false},\n          //'save': {method: 'POST'},\n          'update': { method: 'PUT' }\n          //'delete': {method: 'DELETE'}\n        }),\n        posOrderFulfillment: $resource(api.baseUrl + 'inventories/pos-order-fulfillment/:id/:action', {\n          id: '@id',\n          action: '@action'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'list': { method: 'GET', isArray: true },\n          'update': { method: 'PUT' },\n          'save': { method: 'POST' },\n          'assignBatches': { method: 'POST', params: { action: 'assign-batches' } }\n        }),\n        posOrderShippingMethods: $resource(api.baseUrl + 'inventories/pos-order-shipping-methods/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        posOrderPaymentMethods: $resource(api.baseUrl + 'inventories/pos-order-payment-methods/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n\n        pickableOrders: $resource(api.baseUrl + 'inventories/pickable-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'list': { method: 'GET', isArray: false }\n        }),\n\n        pickingPackingPickableOrders: $resource(api.baseUrl + 'inventories/picking-packing/pickable-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'list': { method: 'GET', isArray: false }\n        }),\n\n        posOrderFulfillmentProductVariants: $resource(api.baseUrl + 'inventories/pos-orders-fulfillment-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' }\n        }),\n\n        pofpvUidStocks: $resource(api.baseUrl + 'inventories/pos-orders-fulfillment-product-variants/:pofpvId/uid-stocks/:id/:action', {\n          pofpvId: '@pofpvId',\n          id: '@id',\n          action: '@action'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PATCH' },\n          'delete': { method: 'DELETE' }\n        }),\n\n        packings: $resource(api.baseUrl + 'inventories/packings/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {}, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' }\n        }),\n        pickingPackingPackingOrders: $resource(api.baseUrl + 'inventories/picking-packing/packing-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' }\n        }),\n        pickingPackingPackingOrderProductVariants: $resource(api.baseUrl + 'inventories/picking-packing/packing-order-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' },\n          'patch': { method: 'PATCH' }\n        }),\n        pickingPackingPackingOrderShippingBoxes: $resource(api.baseUrl + 'inventories/picking-packing/packing-order-shipping-boxes/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' },\n          'patch': { method: 'PATCH' }\n        }),\n        shippingMethods: $resource(api.baseUrl + 'inventories/shipping-methods/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        shippingBoxes: $resource(api.baseUrl + 'inventories/shipping-boxes/:id', { id: '@id' }, {\n          'list': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new ShippingBox(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          },\n          'get': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new ShippingBox(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        posOrderFulfillmentShippingBoxes: $resource(api.baseUrl + 'inventories/pos-order-fulfillment-shipping-boxes/:id', { id: '@id' }, {\n          'list': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new PosOrderFulfillmentShippingBox(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          },\n          'get': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new PosOrderFulfillmentShippingBox(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          },\n          'save': {\n            method: 'POST',\n            interceptor: {\n              response: function(response) {\n                if (response.status === 201) {\n                  response.data = new PosOrderFulfillmentShippingBox(response.data);\n                }\n                return response.data;\n              }\n            }\n          },\n          'update': {\n            method: 'PUT',\n            interceptor: {\n              response: function(response) {\n                if (response.status === 200) {\n                  response.data = new PosOrderFulfillmentShippingBox(response.data);\n                }\n                return response.data;\n              }\n            }\n          },\n          'delete': { method: 'DELETE' }\n        }),\n        attributeCategories: $resource(api.baseUrl + 'inventories/attribute-categories/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        attributeCategoryValues: $resource(api.baseUrl + 'inventories/attribute-category-values/:id/:options', {\n          id: '@id',\n          options: '@options'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        attributes: $resource(api.baseUrl + 'inventories/attributes/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        webhooks: $resource(api.baseUrl + 'inventories/webhooks/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productLabelDesigns: $resource(api.baseUrl + 'inventories/product-label-designs/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        order: $resource(api.baseUrl + 'inventories/order/:id/:option', { id: '@id', option: '@option' }, {\n          'get': { method: 'GET', isArray: false }\n        }),\n        stockDetail: $resource(api.baseUrl + 'inventories/stock-detail/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: true },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        artifacts: $resource(api.baseUrl + 'inventories/artifacts/:id/:option', { id: '@id', option: '@option' }, {\n          'get': { method: 'GET', isArray: false }\n        }),\n        orderLogs: $resource(api.baseUrl + 'inventories/order-logs', {}, {\n          'list': { method: 'GET', isArray: true }\n        }),\n        orderProducts: $resource(api.baseUrl + 'inventories/order-products/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'patch': { method: 'PATCH', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        orderProductVariants: $resource(api.baseUrl + 'inventories/order-product-variants/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'patch': { method: 'PATCH', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        pickingOrder: $resource(api.baseUrl + 'inventories/picking-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        pickingActivity: $resource(api.baseUrl + 'inventories/picking-activity/:id', { id: '@id' }, {\n          'get': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' }\n        }),\n        packingOrder: $resource(api.baseUrl + 'inventories/packing-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n\n        pickingPackingPackingOrder: $resource(api.baseUrl + 'inventories/picking-packing/packing-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n\n        packingActivity: $resource(api.baseUrl + 'inventories/packing-activity/:id', { id: '@id' }, {\n          'get': { method: 'GET', isArray: false },\n          'update': { method: 'PUT' }\n        }),\n        routingRules: $resource(api.baseUrl + 'inventories/routing-rules/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      /**\n       * WHOLESALE API\n       */\n      api.wholesale = {\n        b2bEcommerces: $resource(api.baseUrl + 'wholesale/b2b-ecommerces/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        presales: $resource(api.baseUrl + 'wholesale/presales/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        saleOrder: $resource(api.baseUrl + 'wholesale/collections/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      /**\n       * MANUFACTURE API\n       */\n      api.manufactures = {\n        collections: $resource(api.baseUrl + 'manufactures/collections/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        collectionOrders: $resource(api.baseUrl + 'manufactures/collection-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productVariantManufacturings: $resource(api.baseUrl + 'manufactures/product-variant-manufacturings/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        manufacturingCategories: $resource(api.baseUrl + 'manufactures/manufacturing-categories/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productionOrders: $resource(api.baseUrl + 'manufactures/production-orders/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        productionOrderProducts: $resource(api.baseUrl + 'manufactures/production-order-products/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: true },\n          'delete': { method: 'DELETE' }\n        }),\n        productionOrderProductVariants: $resource(api.baseUrl + 'manufactures/production-order-product-variants/:id/', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false },\n          'delete': { method: 'DELETE' }\n        }),\n        productionOrderStatus: $resource(api.baseUrl + 'manufactures/production-orders/:id/status/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      /**\n       * SALES API\n       */\n      api.sales = {\n        registers: $resource(api.baseUrl + 'sales/registers/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        registerConfigurations: $resource(api.baseUrl + 'sales/register-configurations/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'save': { method: 'POST' }\n        }),\n        // TODO: refactor to lowerCamelCase\n        cash_movements: $resource(api.baseUrl + 'sales/cash-movements/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        // TODO: refactor to lowerCamelCase\n        register_activities: $resource(api.baseUrl + 'sales/register-activities/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        salesGoals: $resource(api.baseUrl + 'sales/sales-goal/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        customers: $resource(api.baseUrl + 'sales/customers/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        devolutionCards: $resource(api.baseUrl + 'sales/devolution-cards/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        giftCards: $resource(api.baseUrl + 'sales/gift-cards/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n\n        ticketConfigurations: $resource(api.baseUrl + 'sales/ticket-configurations/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        promotions: $resource(api.baseUrl + 'sales/promotions/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      /**\n       * ECOMMERCE API\n       */\n      api.ecommerce = {\n        categories: $resource(api.baseUrl + 'ecommerce/categories/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        categoryTranslations: $resource(api.baseUrl + 'ecommeaccountingtegory-translations/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        sites: $resource(api.baseUrl + 'ecommerce/sites/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        sitesRules: $resource(api.baseUrl + 'ecommerce/sites/:id/rules/:option', { id: '@id', option: '@option' }, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' }\n        }),\n        sitesConnect: $resource(api.baseUrl + 'ecommerce/amazon/credentials', {\n          'get': { method: 'GET' }\n        }),\n        siteProducts: $resource(api.baseUrl + 'ecommerce/site-products/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        orders: $resource(api.baseUrl + 'ecommerce/orders/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        }),\n        fulfillments: $resource(api.baseUrl + 'ecommerce/fulfillments/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'save': { method: 'POST' }\n        }),\n        categoryGroups: $resource(api.baseUrl + 'ecommerce/category-groups/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      /**\n       * ANALYTICS API\n       */\n      api.analytics = {\n        salesDynamicReport: $resource(api.baseUrl + 'analytics/sales', {}, {\n          'list': { method: 'GET', isArray: false }\n        }),\n        productsDynamicReport: $resource(api.baseUrl + 'analytics/products', {}, {\n          'list': { method: 'GET', isArray: false }\n        }),\n        basicRetailKpi: $resource(api.baseUrl + 'analytics/basic-retail-kpi/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        startDashboard: $resource(api.baseUrl + 'analytics/start-dashboard', {}, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false }\n        }),\n        retailDashboard: $resource(api.baseUrl + 'analytics/retail-dashboard', {}, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false }\n        }),\n        wholesaleDashboard: $resource(api.baseUrl + 'analytics/wholesale-dashboard', {}, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false }\n        }),\n        peopleCounter: $resource(api.baseUrl + 'analytics/people-counter', {}, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false }\n        }),\n        topTen: $resource(api.baseUrl + 'analytics/top-ten/:option', { option: '@option' }, {\n          'get': { method: 'GET', isArray: true },\n          'save': { method: 'POST', isArray: true }\n        }),\n        productKpis: $resource(api.baseUrl + 'analytics/product-kpis/:option', { option: '@option' }, {\n          'get': { method: 'GET', isArray: true },\n          'save': { method: 'POST', isArray: true }\n        }),\n        stockKpis: $resource(api.baseUrl + 'analytics/stock-kpi/:option', { option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: true },\n          'save': { method: 'POST', isArray: true }\n        }),\n        categoryKpis: $resource(api.baseUrl + 'analytics/category-kpis', {}, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: true }\n        }),\n        trafficKpis: $resource(api.baseUrl + 'analytics/traffic-kpis/:option', { option: '@option' }, {\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false }\n        }),\n        sellOut: $resource(api.baseUrl + 'analytics/sell-out/:option', { option: '@option' }, {\n          'get': { method: 'GET', isArray: true },\n          'save': { method: 'POST', isArray: true }\n        })\n      };\n\n      api.reports = {\n        contactsReport: $resource(api.baseUrl + 'reports/contacts-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        inventoryReport: $resource(api.baseUrl + 'reports/inventory-report/', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        catalogReport: $resource(api.baseUrl + 'reports/catalog-report/', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        invoicesReport: $resource(api.baseUrl + 'reports/invoices-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        ticketsReport: $resource(api.baseUrl + 'reports/tickets-report', {}, {\n          'get': { method: 'GET', isArray: false }\n        }),\n        cashMovementReport: $resource(api.baseUrl + 'reports/cash-movement-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        productStatusReport: $resource(api.baseUrl + 'reports/products-status-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        stockReplenishmentReport: $resource(api.baseUrl + 'reports/stock-replenishment-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        registerClosuresReport: $resource(api.baseUrl + 'reports/register-closures-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        retailTaxesReport: $resource(api.baseUrl + 'reports/retail-taxes-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        dailyBillingsReport: $resource(api.baseUrl + 'reports/daily-billings-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        retailTransactionsReport: $resource(api.baseUrl + 'reports/retail-transactions-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        paymentsReport: $resource(api.baseUrl + 'reports/payments-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        purchaseOrdersReport: $resource(api.baseUrl + 'reports/purchase-orders-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        transferOrdersReport: $resource(api.baseUrl + 'reports/transfer-orders-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        sellerTransactionsReport: $resource(api.baseUrl + 'reports/seller-transactions-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        wholesaleDeliveryNotesReport: $resource(api.baseUrl + 'reports/wholesale-delivery-notes-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        wholesaleTransactionsReport: $resource(api.baseUrl + 'reports/wholesale-transactions-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        wholesaleSalesReport: $resource(api.baseUrl + 'reports/wholesale-sales-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        wholesaleProductsSoldReport: $resource(api.baseUrl + 'reports/wholesale-sold-products-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        workdaysReport: $resource(api.baseUrl + 'reports/workdays-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        stockMovementsReport: $resource(api.baseUrl + 'reports/stock-movements-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        uidStockReport: $resource(api.baseUrl + 'reports/uid-stock-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        }),\n        uidStockMovementsReport: $resource(api.baseUrl + 'reports/uid-stock-movements-report', {}, {\n          'list': { method: 'GET', isArray: true },\n          'get': { method: 'GET', isArray: false }\n        })\n      };\n\n      api.importer = {\n        validate: $resource(api.baseUrl + 'importer/validate', {}, {\n          'save': { method: 'POST', isArray: false }\n        }),\n        import: $resource(api.baseUrl + 'importer/import', {}, {\n          'save': { method: 'POST', isArray: false }\n        }),\n        products: $resource(api.baseUrl + 'importer/products/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false },\n          'get': { method: 'GET', isArray: false },\n          'save': { method: 'POST' },\n          'update': { method: 'PUT' },\n          'delete': { method: 'DELETE' }\n        })\n      };\n\n      api.hub = {\n        invoices: $resource(api.baseUrl + 'contacts/hub/invoices/:id/:options', {\n          id: '@id',\n          options: '@options',\n          type: 30\n        }, {\n          'list': { method: 'GET', isArray: false, withCredentials: true },\n          'get': { method: 'GET', isArray: false, withCredentials: true }\n        }),\n        proformas: $resource(api.baseUrl + 'contacts/hub/invoices/:id/:options', {\n          id: '@id',\n          options: '@options',\n          type: 10\n        }, {\n          'list': { method: 'GET', isArray: false, withCredentials: true },\n          'get': { method: 'GET', isArray: false, withCredentials: true }\n        }),\n        quotes: $resource(api.baseUrl + 'contacts/hub/invoices/:id/:options', {\n          id: '@id',\n          options: '@options',\n          type: 20\n        }, {\n          'list': { method: 'GET', isArray: false, withCredentials: true },\n          'get': { method: 'GET', isArray: false, withCredentials: true }\n        }),\n        receipts: $resource(api.baseUrl + 'contacts/hub/receipts/:id/:options', { id: '@id', options: '@options' }, {\n          'list': { method: 'GET', isArray: false, withCredentials: true },\n          'get': { method: 'GET', isArray: false, withCredentials: true },\n          'print': {\n            method: 'GET',\n            isArray: false,\n            withCredentials: true,\n            responseType: 'arraybuffer',\n            params: { options: 'print' }\n          }\n        }),\n        contacts: $resource(api.baseUrl + 'contacts/hub/contacts/:id', { id: '@id' }, {\n          'list': { method: 'GET', isArray: false, withCredentials: true },\n          'get': { method: 'GET', isArray: false, withCredentials: true },\n          'save': { method: 'PUT', isArray: false, withCredentials: true }\n        })\n      };\n\n      api.integrationApps = {\n        apps: $resource(api.baseUrl + 'integration-apps/:id/:option', { id: '@id', option: '@option' }, {\n          'list': { method: 'GET', isArray: false },\n          'save': { method: 'POST', isArray: false }\n        }),\n        sendcloudWarehouseSenderAddress: $resource(api.baseUrl + 'sendcloud-warehouse-sender-address/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'list': { method: 'GET', isArray: false }\n        }),\n        packingOrderSendcloudData: $resource(api.baseUrl + 'packing-order-sendcloud-data/:id', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'delete': { method: 'DELETE', isArray: false }\n        }),\n        verifactuInstalledIntegrationApp: $resource(api.baseUrl + 'verifactu-installed-integration-apps/:id/:option', {\n          id: '@id',\n          option: '@option'\n        }, {\n          'get': { method: 'GET', isArray: false },\n          'list': {\n            method: 'GET',\n            isArray: false,\n            interceptor: {\n              response: function(response) {\n                if (response.data && response.data.results) {\n                  response.data.results = response.data.results.map(function(item) {\n                    return new VerifactuIntegrationInstalledApp(item);\n                  });\n                }\n                return response.data;\n              }\n            }\n          },\n          'save': { method: 'POST', isArray: false },\n          'update': { method: 'PUT', isArray: false }\n        })\n      };\n\n      api.utils = {\n        featureFlag: $resource(api.baseUrl + 'utils/feature-flag/', {}, {\n          'get': { method: 'GET', isArray: false }\n        })\n      };\n\n      /**\n       * GENERAL API\n       */\n      api.general = {\n        version: $resource(api.baseUrl + 'version', {\n          'get': { method: 'GET', isArray: false }\n        })\n      };\n\n      /**\n       * SIGNUP API\n       */\n      api.signup = $resource(api.baseUrl + 'signup/:option/:token', { option: '@option', token: '@token' }, {\n        'get': { method: 'GET' },\n        'save': { method: 'POST' }\n      });\n\n      /**\n       * PERFORMANCE API\n       */\n      api.performance = {\n        server: $resource(api.baseUrl + 'performance/server', {}, {\n          'get': { method: 'GET', isArray: false }\n        })\n      };\n\n\n      // URLs for the Flow.js targets\n      api.urls = {\n        account: {\n          users: api.baseUrl + 'users/:id/',\n          company: api.baseUrl + 'companies/:id/:option',\n          fiscalAddresses: api.baseUrl + 'companies/fiscal-addresses/:id/'\n        },\n        accounting: {\n          taxes: api.baseUrl + 'accounting/taxes/:id/',\n          invoices: api.baseUrl + 'accounting/invoices/:id/',\n          invoicesDownloadZip: api.baseUrl + 'accounting/invoices/download-zip',\n          paymentMethods: api.baseUrl + 'accounting/payment-methods/:id/',\n          payments: api.baseUrl + 'accounting/payments/:id/',\n          paymentsGateway: api.baseUrl + 'accounting/payments-gateway/:option',\n          printer: api.baseUrl + 'accounting/printer/:option'\n        },\n        inventories: {\n          attributeCategories: api.baseUrl + 'inventories/attribute-categories/:id/',\n          attributes: api.baseUrl + 'inventories/attributes/:id/',\n          variantCategories: api.baseUrl + 'inventories/variant-categories/:id/',\n          variants: api.baseUrl + 'inventories/variants/:id/',\n          categories: api.baseUrl + 'inventories/categories/:id/:option',\n          subcategories: api.baseUrl + 'inventories/subcategories/:id/',\n          seasons: api.baseUrl + 'inventories/seasons/:id/:option',\n          brands: api.baseUrl + 'inventories/brands/:id/',\n          compositions: api.baseUrl + 'inventories/compositions/:id/',\n          contactPrintBalance: api.baseUrl + 'inventories/contacts/:id/print-balance',\n          contactsImport: api.baseUrl + 'inventories/contacts/import',\n          persons: api.baseUrl + 'inventories/persons/:id/',\n          products: api.baseUrl + 'inventories/products/:id/:option',\n          productBundles: api.baseUrl + 'inventories/product-bundles/:id/:option',\n          productVariants: api.baseUrl + 'inventories/product-variants/:id/:option',\n          productVariantPrices: api.baseUrl + 'inventories/product-variant-prices/:id/',\n          warehouses: api.baseUrl + 'inventories/warehouses/:id/:option',\n          dataImportsStep: api.baseUrl + 'inventories/data-imports/:id/step/:option',\n          productImagesImportStep: api.baseUrl + 'inventories/product-images-import/:id/step/:option',\n          productImportsStep: api.baseUrl + 'inventories/product-imports/:id/step/:option',\n          productImages: api.baseUrl + 'inventories/product-images/:id/',\n          productBundleImages: api.baseUrl + 'inventories/product-bundle-images/:id/',\n          productVariantBundleProductVariant: api.baseUrl + 'inventories/product-variant-bundle-product-variant/:id/',\n          pickableOrders: api.baseUrl + 'inventories/pickable-orders/:option',\n          pickingPackingPickableOrders: api.baseUrl + 'inventories/picking-packing/pickable-orders/:option',\n          pickingPackingPackingOrders: api.baseUrl + 'inventories/picking-packing/packing-orders/:id/:option',\n          pickingPackingPackingOrderProductVariants: api.baseUrl + 'inventories/picking-packing/packing-order-product-variants',\n          pickingPackingPackingOrderShippingBoxes: api.baseUrl + 'inventories/picking-packing/packing-order-shipping-boxes',\n          packings: api.baseUrl + 'inventories/packings/:option',\n          contacts: api.baseUrl + 'inventories/contacts/:id/:option',\n          contactGroups: api.baseUrl + 'inventories/contact-groups/:id/:option',\n          purchaseOrders: api.baseUrl + 'inventories/purchase-orders/:id/',\n          purchaseOrderProductsImport: api.baseUrl + 'inventories/purchase-orders/import',\n          saleOrderProductsImport: api.baseUrl + 'inventories/sale-orders/import',\n          transferOrderProductsImport: api.baseUrl + 'inventories/transfer-orders/import',\n          purchaseOrdersPrint: api.baseUrl + 'inventories/purchase-orders/:id/print',\n          purchaseOrdersPrintCatalog: api.baseUrl + 'inventories/purchase-orders/:id/print-catalog',\n          purchaseOrderProducts: api.baseUrl + 'inventories/purchase-order-products/:id/',\n          purchaseOrderDeliveries: api.baseUrl + 'inventories/purchase-order-deliveries/:id/',\n          purchaseOrderDeliveriesLinkToInvoices: api.baseUrl + 'inventories/purchase-order-deliveries/:option',\n          purchaseOrderInvoices: api.baseUrl + 'inventories/purchase-order-invoices/:id/',\n          purchaseOrderDeliveryFiles: api.baseUrl + 'inventories/purchase-order-delivery-files/:id/',\n          saleOrderDeliveryFiles: api.baseUrl + 'inventories/sale-order-delivery-files/:id/',\n          purchaseOrderDeliveriesPrintHidePrices: api.baseUrl + 'inventories/purchase-order-deliveries/:id/print-hide-prices',\n          purchaseOrderDeliveryLine: api.baseUrl + 'inventories/purchase-order-delivery-line/:id',\n          serialNumberTypes: api.baseUrl + 'inventories/serial-number-types/:id/',\n          saleOrders: api.baseUrl + 'inventories/sale-orders/:id/',\n          saleOrdersPrintCatalog: api.baseUrl + 'inventories/sale-orders/:id/print-catalog',\n          saleOrdersDownloadImages: api.baseUrl + 'inventories/sale-orders/:id/download-images',\n          saleOrdersDownloadExcel: api.baseUrl + 'inventories/sale-orders/:id/download-excel',\n          saleOrderProducts: api.baseUrl + 'inventories/sale-order-products/:id/',\n          saleOrderDeliveries: api.baseUrl + 'inventories/sale-order-deliveries/:id/',\n          saleOrderDeliveriesPrintHidePrices: api.baseUrl + 'inventories/sale-order-deliveries/:id/print-hide-prices',\n          stockMovements: api.baseUrl + 'inventories/stock-movements/:id/',\n          stocks: api.baseUrl + 'inventories/stocks/:id/:option',\n          uidStocks: api.baseUrl + 'inventories/uid-stocks/:id/',\n          uidStocksList: api.baseUrl + 'inventories/uid-stocks-list/:id/',\n          stocktakings: api.baseUrl + 'inventories/stocktakings/:id/',\n          stockLocations: api.baseUrl + 'inventories/stock-locations/:id/',\n          stocktakingOrderProductVariantLots: api.baseUrl + 'inventories/stocktaking-order-product-variant-lots/:id/:option',\n          stocktakingProductVariants: api.baseUrl + 'inventories/stocktaking-product-variants/:id/:option',\n          stocktakingOrderProducts: api.baseUrl + 'inventories/stocktaking-order-products/:id/:option',\n          transferOrders: api.baseUrl + 'inventories/transfer-orders/:id/',\n          transferOrderDeliveryProductsImport: api.baseUrl + 'inventories/transfer-order-deliveries/import',\n          transferOrdersPrint: api.baseUrl + 'inventories/transfer-orders/:id/print',\n          transferOrderDeliveries: api.baseUrl + 'inventories/transfer-order-deliveries/:id/',\n          transferOrderDeliveriesPrint: api.baseUrl + 'inventories/transfer-order-deliveries/:id/print',\n          transferOrderProducts: api.baseUrl + 'inventories/transfer-order-products/:id/',\n          adjustmentOrders: api.baseUrl + 'inventories/adjustment-orders/:id/',\n          adjustmentOrdersPrint: api.baseUrl + 'inventories/adjustment-orders/:id/print',\n          adjustmentOrderProducts: api.baseUrl + 'inventories/adjustment-order-products/:id/',\n          posOrders: api.baseUrl + 'inventories/pos-orders/:id/',\n          posOrdersInvoice: api.baseUrl + 'inventories/pos-orders/:id/invoice',\n          posOrderProductVariants: api.baseUrl + 'inventories/pos-order-product-variants/:id/',\n          posOrdersPrintPdf: api.baseUrl + 'inventories/pos-orders/:id/print-pdf',\n          posOrdersPrintShippingLabel: api.baseUrl + 'inventories/pos-orders/:id/shipping-label',\n          posOrdersCommercialInvoice: api.baseUrl + 'inventories/pos-orders/:id/commercial-invoice',\n          posOrdersPaymentMethods: api.baseUrl + 'inventories/pos-order-payment-methods',\n          posOrdersPrintHtml: api.baseUrl + 'inventories/pos-orders/:id/print_html',\n          posOrdersSendPdf: api.baseUrl + 'inventories/pos-orders/:id/send_pdf',\n          posOrdersExecuteSupplyingPolicy: api.baseUrl + 'inventories/pos-orders/:id/execute-supplying-policy',\n          pricingTiers: api.baseUrl + 'inventories/pricing-tiers/:id/:option',\n          shippingMethods: api.baseUrl + 'inventories/shipping-methods/:id/',\n          shippingBoxes: api.baseUrl + 'inventories/shipping-boxes/:id/',\n          webhooks: api.baseUrl + 'inventories/webhooks/:id/',\n          posOrderFulfillments: api.baseUrl + 'inventories/pos-order-fulfillment',\n          posOrderFulfillmentProductVariants: api.baseUrl + 'inventories/pos-orders-fulfillment-product-variants/:id/:option',\n          order: api.baseUrl + 'inventories/order',\n          orderProducts: api.baseUrl + 'inventories/order-products/:id/:option',\n          orderProductVariants: api.baseUrl + 'inventories/order-product-variants/:id/:option',\n          orderLogs: api.baseUrl + 'inventories/order-logs',\n          stockDetail: api.baseUrl + 'inventories/stock-detail/:id/:option',\n          artifacts: api.baseUrl + 'inventories/artifacts/:id/:option'\n        },\n        manufactures: {\n          collections: api.baseUrl + 'manufactures/collections/:id/',\n          collectionsPrintCatalog: api.baseUrl + 'manufactures/collections/:id/print-catalog',\n          collectionsStylesCSV: api.baseUrl + 'manufactures/collections/:id/styles-csv',\n          collectionOrders: api.baseUrl + 'manufactures/collection-orders/:id/',\n          productionOrders: api.baseUrl + 'manufactures/production-orders/:id/',\n          productionOrderProducts: api.baseUrl + 'manufactures/production-order-products/:id/'\n        },\n        wholesale: {\n          presales: api.baseUrl + 'wholesale/presales/:id/',\n          presalesPDF: api.baseUrl + 'wholesale/presales/:id/export-pdf',\n          presalesCSV: api.baseUrl + 'wholesale/presales/:id/export-csv',\n          b2bEcommerces: api.baseUrl + 'wholesale/b2b-ecommerces/:id/'\n        },\n        sales: {\n          registers: api.baseUrl + 'sales/registers/:id/',\n          cash_movements: api.baseUrl + 'sales/cash-movements/:id/',\n          registerActivities: api.baseUrl + 'sales/register-activities/:id/',\n          registerActivitiesInvoice: api.baseUrl + 'sales/register-activities/:id/invoice',\n          ticketConfigurations: api.baseUrl + 'sales/ticket-configurations/:id/',\n          devolutionCards: api.baseUrl + 'sales/devolution-cards/:id/',\n          giftCards: api.baseUrl + 'sales/gift-cards/:id/',\n          promotions: api.baseUrl + 'sales/promotions/:id/'\n        },\n        reports: {\n          dailyBillingsReport: api.baseUrl + 'reports/daily-billings-report',\n          inventoryReport: api.baseUrl + 'reports/inventory-report',\n          invoices: api.baseUrl + 'reports/invoices',\n          invoicesReport: api.baseUrl + 'reports/invoices-report',\n          purchaseOrders: api.baseUrl + 'reports/purchase-orders',\n          purchaseOrdersReport: api.baseUrl + 'reports/purchase-orders-report',\n          transferOrders: api.baseUrl + 'reports/transfer-orders',\n          transferOrdersReport: api.baseUrl + 'reports/transfer-orders-report',\n          saleOrdersReport: api.baseUrl + 'reports/sale-orders-report',\n          stockReport: api.baseUrl + 'reports/stock-report',\n          tickets: api.baseUrl + 'reports/tickets',\n          ticketsReport: api.baseUrl + 'reports/tickets-report',\n          registerClosures: api.baseUrl + 'reports/register-closures',\n          registerClosuresReport: api.baseUrl + 'reports/register-closures-report',\n          retailTaxesReport: api.baseUrl + 'reports/retail-taxes-report',\n          paymentsReport: api.baseUrl + 'reports/payments-report',\n          retailTransactionsReport: api.baseUrl + 'reports/retail-transactions-report',\n          sellerTransactions: api.baseUrl + 'reports/seller-transactions',\n          sellerTransactionsReport: api.baseUrl + 'reports/seller-transactions-report',\n          wholesaleTransactionsReport: api.baseUrl + 'reports/wholesale-transactions-report',\n          wholesaleDeliveryNotes: api.baseUrl + 'reports/wholesale-delivery-notes',\n          wholesaleDeliveryNotesReport: api.baseUrl + 'reports/wholesale-delivery-notes-report',\n          workdays: api.baseUrl + 'reports/workdays',\n          workdaysReport: api.baseUrl + 'reports/workdays-report',\n          retailCustomers: api.baseUrl + 'reports/retail-customers',\n          retailCustomersReport: api.baseUrl + 'reports/retail-customers-report',\n          wholesaleCustomers: api.baseUrl + 'reports/wholesale-customers',\n          wholesaleCustomersReport: api.baseUrl + 'reports/wholesale-customers-report'\n        },\n        certificate: api.url + 'certificate',\n        ecommerce: {\n          sites: api.baseUrl + 'ecommerce/sites/:id',\n          orders: api.baseUrl + 'ecommerce/orders/:id/:option',\n          fulfillments: api.baseUrl + 'ecommerce/fulfillments',\n          shopifyAuth: api.url + 'shopify/authenticate/'\n        },\n        analytics: {\n          basicRetailKpi: api.baseUrl + 'analytics/basic-retail-kpi',\n          productKpi: api.baseUrl + 'analytics/product-kpi',\n          stockKpi: api.baseUrl + 'analytics/stock-kpi'\n        },\n        importer: {\n          create: api.baseUrl + 'importer/:option/create',\n          products: api.baseUrl + 'importer/products',\n          productErrors: api.baseUrl + 'importer/products/:id/errors'\n        },\n        performance: {\n          latencyTest: api.baseUrl + 'performance/bandwidth',\n          download: api.baseUrl + 'performance/bandwidth',\n          upload: api.baseUrl + 'performance/bandwidth'\n        },\n        integrationApps: {\n          verifactuInstalledIntegrationApp: api.baseUrl + 'verifactu-installed-integration-apps/:id/:option'\n        },\n        hub: {\n          invoices: api.baseUrl + 'contacts/hub/invoices/:id/:options',\n          proformas: api.baseUrl + 'contacts/hub/invoices/:id/:options',\n          quotes: api.baseUrl + 'contacts/hub/invoices/:id/:options',\n          receipts: api.baseUrl + 'contacts/hub/receipts/:id/:options',\n          contacts: api.baseUrl + 'contacts/hub/contacts/:id'\n        }\n      };\n\n      api.isProduction = function() {\n        return api.environment === 'production';\n      };\n\n      api.private = {\n        v2: {\n          inventories: {\n            posOrders: $resource(api.baseUrlV2 + 'inventories/pos-orders/:id/:option', {\n              id: '@id',\n              option: '@option'\n            }, {\n              'save': { method: 'POST' },\n              'update': { method: 'PUT' }\n            })\n          },\n\n          accounting: {\n            invoices: $resource(api.baseUrlV2 + 'accounting/invoices/:id/:option', { id: '@id', option: '@option' }, {\n              'get': { method: 'GET' },\n              'save': { method: 'POST' },\n              'update': { method: 'PUT' },\n              'print': {\n                method: 'GET',\n                params: { option: 'print' },\n                isArray: false,\n                interceptor: Utils.downloadFileInterceptor\n              }\n            })\n          },\n\n          urls: {\n            inventories: {\n              posOrders: api.baseUrlV2 + 'inventories/pos-orders/:id/:option'\n            },\n            accounting: {\n              invoices: api.baseUrlV2 + 'accounting/invoices/:id/:option'\n            }\n          }\n        }\n      };\n\n      // api.sample = $resource(api.baseUrl + 'sample/sample.json');\n\n      return api;\n    }\n\n  }\n\n)\n();\n\nangular.module(\"fuse\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/preview-panel/preview-panel.html\",\"<md-content layout=\\\"column\\\" flex><md-content class=\\\"scrollable\\\" ms-scroll ng-if=\\\"vm.preview\\\" ng-show=\\\"!vm.loading\\\" \\nng-include=\\\"vm.previewTemplate\\\" flex></md-content><div ng-if=\\\"vm.loading\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nflex><md-progress-circular md-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div></md-content>\");\n$templateCache.put(\"app/quick-panel/quick-panel.html\",\"<md-content><md-tabs md-no-pagination md-swipe-content md-stretch-tabs=\\\"always\\\" md-selected=\\\"vm.selectedIndex\\\"><md-tab>\\n<md-tab-label><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span flex></span><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/timer-outline.75e71c59.svg\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"QUICKPANEL.WORKDAY\\\">TODAY</span> <span flex></span></div></md-tab-label><md-tab-body><div \\nng-if=\\\"!vm.hasWorkActivityFeature\\\" class=\\\"md-padding\\\"><nd-upgrade-subscription-plan-banner \\ntitle=\\\"\\'UPGRADE_PLAN.WORK_TIME_CONTROL.NAME\\'\\\" body=\\\"\\'UPGRADE_PLAN.WORK_TIME_CONTROL.DESCRIPTION\\'\\\" \\nsource=\\\"\\'app.quick_panel.workday_activity\\'\\\" click-callback=\\\"vm.closeQuickPanel()\\\" button-below=\\\"true\\\">\\n</nd-upgrade-subscription-plan-banner></div><md-content class=\\\"today-tab scrollable\\\" ng-if=\\\"vm.hasWorkActivityFeature\\\" \\nms-scroll ng-include=\\\"\\'app/quick-panel/tabs/today/today-tab.html\\'\\\"></md-content></md-tab-body></md-tab></md-tabs>\\n</md-content>\");\n$templateCache.put(\"app/core/layouts/content-only.html\",\"<div id=\\\"layout-content-only\\\" class=\\\"template-layout\\\" layout=\\\"column\\\" flex><md-content id=\\\"content\\\" \\nclass=\\\"animate-slide-up md-hue-2\\\" ui-view=\\\"content\\\" flex></md-content></div>\");\n$templateCache.put(\"app/core/layouts/content-with-toolbar.html\",\"<div id=\\\"layout-content-with-toolbar\\\" class=\\\"template-layout\\\" layout=\\\"column\\\" flex><nd-offline-banner>\\n</nd-offline-banner><nd-freemium-banner></nd-freemium-banner><md-toolbar id=\\\"toolbar\\\" \\nclass=\\\"md-menu-toolbar md-whiteframe-1dp\\\" ui-view=\\\"toolbar\\\"></md-toolbar><md-content id=\\\"content\\\" \\nclass=\\\"animate-slide-up md-hue-2\\\" ui-view=\\\"content\\\" flex></md-content><md-sidenav id=\\\"quick-panel\\\" \\nclass=\\\"md-sidenav-right md-whiteframe-4dp\\\" md-component-id=\\\"quick-panel\\\" ms-scroll ui-view=\\\"quickPanel\\\"></md-sidenav>\\n</div>\");\n$templateCache.put(\"app/core/layouts/horizontal-navigation.html\",\"<div id=\\\"layout-horizontal-navigation\\\" class=\\\"template-layout\\\" layout=\\\"column\\\" flex><div \\nid=\\\"toolbar-navigation-container\\\" class=\\\"md-whiteframe-1dp\\\" layout=\\\"column\\\" layout-align=\\\"space-between start\\\">\\n<md-toolbar id=\\\"toolbar\\\" class=\\\"md-menu-toolbar md-whiteframe-1dp\\\" ui-view=\\\"toolbar\\\"></md-toolbar><div \\nid=\\\"horizontal-navigation\\\" ui-view=\\\"navigation\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\" flex></div></div><div \\nid=\\\"content-container\\\" flex layout=\\\"column\\\"><md-content id=\\\"content\\\" class=\\\"animate-fade-in-out md-hue-2\\\" ms-scroll \\nui-view=\\\"content\\\" flex></md-content></div><md-sidenav id=\\\"quick-panel\\\" class=\\\"md-sidenav-right md-whiteframe-4dp\\\" \\nmd-component-id=\\\"quick-panel\\\" ms-scroll ui-view=\\\"quickPanel\\\"></md-sidenav></div>\");\n$templateCache.put(\"app/core/layouts/sign-up-navigation.html\",\"<div id=\\\"layout-vertical-navigation-fullwidth-toolbar-2\\\" class=\\\"template-layout\\\" layout=\\\"column\\\" flex><md-toolbar \\nid=\\\"toolbar\\\" class=\\\"md-menu-toolbar md-whiteframe-1dp md-accent\\\" ui-view=\\\"toolbar\\\"></md-toolbar><div \\nid=\\\"main-container\\\" layout=\\\"row\\\" flex><md-sidenav id=\\\"vertical-navigation\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-sm\\')\\\" \\nmd-component-id=\\\"navigation\\\" ms-scroll ui-view=\\\"navigation\\\"></md-sidenav><div id=\\\"content-container\\\" flex \\nlayout=\\\"column\\\"><md-content id=\\\"content\\\" class=\\\"animate-fade-in-out md-hue-2\\\" ms-scroll ui-view=\\\"content\\\" flex>\\n</md-content></div><md-sidenav id=\\\"quick-panel\\\" class=\\\"md-sidenav-right md-whiteframe-4dp\\\" \\nmd-component-id=\\\"quick-panel\\\" ms-scroll ui-view=\\\"quickPanel\\\"></md-sidenav></div></div>\");\n$templateCache.put(\"app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html\",\"<div id=\\\"layout-vertical-navigation-fullwidth-toolbar-2\\\" class=\\\"template-layout\\\" layout=\\\"column\\\" flex>\\n<nd-pending-invoices-banner></nd-pending-invoices-banner><nd-global-start-banner></nd-global-start-banner>\\n<nd-real-company-banner></nd-real-company-banner><nd-offline-banner></nd-offline-banner><nd-freemium-banner>\\n</nd-freemium-banner><md-toolbar id=\\\"toolbar\\\" class=\\\"md-menu-toolbar md-whiteframe-1dp md-accent\\\" ui-view=\\\"toolbar\\\">\\n</md-toolbar><div id=\\\"main-container\\\" layout=\\\"row\\\" flex><md-sidenav id=\\\"vertical-navigation\\\" \\nmd-is-locked-open=\\\"$mdMedia(\\'gt-sm\\')\\\" md-component-id=\\\"navigation\\\" ms-scroll ui-view=\\\"navigation\\\"></md-sidenav><div \\nid=\\\"content-container\\\" flex layout=\\\"column\\\"><md-content id=\\\"content\\\" class=\\\"animate-fade-in-out md-hue-2\\\" ms-scroll \\nui-view=\\\"content\\\" flex></md-content></div></div><md-sidenav id=\\\"quick-panel\\\" \\nclass=\\\"md-sidenav-right md-whiteframe-4dp\\\" md-component-id=\\\"quick-panel\\\" ms-scroll ui-view=\\\"quickPanel\\\"></md-sidenav>\\n<md-sidenav id=\\\"preview-panel\\\" class=\\\"md-sidenav-right md-whiteframe-4dp\\\" md-component-id=\\\"preview-panel\\\" ms-scroll \\nui-view=\\\"previewPanel\\\"></md-sidenav></div>\");\n$templateCache.put(\"app/core/layouts/vertical-navigation-fullwidth-toolbar.html\",\"<div id=\\\"layout-vertical-navigation-fullwidth-toolbar\\\" class=\\\"template-layout\\\" layout=\\\"column\\\" flex><md-toolbar \\nid=\\\"toolbar\\\" class=\\\"md-menu-toolbar md-whiteframe-1dp md-accent\\\" ui-view=\\\"toolbar\\\"></md-toolbar><div \\nid=\\\"main-container\\\" layout=\\\"row\\\" flex><md-sidenav id=\\\"vertical-navigation\\\" class=\\\"md-primary-bg\\\" \\nmd-is-locked-open=\\\"$mdMedia(\\'gt-sm\\')\\\" md-component-id=\\\"navigation\\\" ms-scroll ui-view=\\\"navigation\\\"></md-sidenav><div \\nid=\\\"content-container\\\" flex layout=\\\"column\\\"><md-content id=\\\"content\\\" class=\\\"animate-fade-in-out md-hue-2\\\" ms-scroll \\nui-view=\\\"content\\\" flex></md-content></div><md-sidenav id=\\\"quick-panel\\\" class=\\\"md-sidenav-right md-whiteframe-4dp\\\" \\nmd-component-id=\\\"quick-panel\\\" ms-scroll ui-view=\\\"quickPanel\\\"></md-sidenav></div></div>\");\n$templateCache.put(\"app/core/layouts/vertical-navigation.html\",\"<div id=\\\"layout-vertical-navigation\\\" class=\\\"template-layout\\\" layout=\\\"row\\\" flex><md-sidenav id=\\\"vertical-navigation\\\" \\nclass=\\\"md-primary-bg\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-sm\\')\\\" md-component-id=\\\"navigation\\\" ms-scroll \\nui-view=\\\"navigation\\\"></md-sidenav><div id=\\\"content-container\\\" flex layout=\\\"column\\\"><md-toolbar id=\\\"toolbar\\\" \\nclass=\\\"md-menu-toolbar md-whiteframe-1dp\\\" ui-view=\\\"toolbar\\\"></md-toolbar><md-content id=\\\"content\\\" \\nclass=\\\"animate-fade-in-out md-hue-2\\\" ms-scroll ui-view=\\\"content\\\" flex></md-content></div><md-sidenav id=\\\"quick-panel\\\" \\nclass=\\\"md-sidenav-right md-whiteframe-4dp\\\" md-component-id=\\\"quick-panel\\\" ms-scroll ui-view=\\\"quickPanel\\\"></md-sidenav>\\n</div>\");\n$templateCache.put(\"app/core/theme-options/theme-options.html\",\"<div class=\\\"ms-theme-options-button md-primary-bg\\\" ng-click=\\\"toggleOptionsSidenav()\\\" ng-if=\\\"false\\\"><md-icon \\nmd-font-icon=\\\"icon-cog\\\" class=\\\"white-text\\\"></md-icon></div><md-sidenav md-component-id=\\\"fuse-theme-options\\\" \\nclass=\\\"md-sidenav-right\\\" ng-if=\\\"false\\\"><div class=\\\"ms-theme-options-list\\\" layout=\\\"column\\\"><div \\nclass=\\\"theme-option layout-options\\\"><div class=\\\"option-title\\\">Layout Style:</div><md-radio-group layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" layout-wrap ng-model=\\\"vm.layoutStyle\\\" ng-change=\\\"vm.updateLayoutStyle()\\\"><md-radio-button \\nng-repeat=\\\"layoutStyle in vm.layoutStyles\\\" ng-value=\\\"layoutStyle.value\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><img ng-src=\\\"{{layoutStyle.figure}}\\\"> <span class=\\\"text-center font-size-12 mt-8\\\">\\n{{layoutStyle.label}}</span></div></md-radio-button></md-radio-group></div><md-divider></md-divider><div \\nclass=\\\"theme-option\\\"><div class=\\\"option-title\\\">Layout Mode:</div><md-radio-group layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-model=\\\"vm.layoutMode\\\" ng-change=\\\"vm.updateLayoutMode()\\\"><md-radio-button \\nng-repeat=\\\"layoutMode in vm.layoutModes\\\" ng-value=\\\"layoutMode.value\\\">{{layoutMode.label}}</md-radio-button>\\n</md-radio-group></div><md-divider></md-divider><div class=\\\"theme-option color-palettes\\\"><div class=\\\"option-title\\\">\\nColor Palette:</div><div layout=\\\"row\\\" layout-align=\\\"start start\\\" layout-wrap><md-button \\nng-repeat=\\\"(themeName, theme) in vm.themes.list\\\" class=\\\"md-raised theme-button\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" aria-label=\\\"{{themeName}}\\\" ng-click=\\\"vm.setActiveTheme(themeName)\\\" \\nng-style=\\\"{\\'background-color\\': theme.primary.color,\\'border-color\\': theme.accent.color,\\'color\\': theme.primary.contrast1}\\\" \\nng-class=\\\"{active: vm.getActiveTheme().name === themeName}\\\"><md-icon ng-style=\\\"{\\'color\\': theme.primary.contrast1}\\\" \\nmd-font-icon=\\\"icon-palette\\\" class=\\\"icon s32\\\"></md-icon></md-button></div></div></div></md-sidenav>\");\n$templateCache.put(\"app/directives/contracted-plan-limit-alert-box/nd-contracted-plan-limit-alert-box.html\",\"<div class=\\\"nd-contracted-plan-limit-alert-box\\\" ng-if=\\\"vm.title\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"title-row\\\"><md-icon class=\\\"plan-limit-icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\"></md-icon><div flex class=\\\"h4\\\" \\nng-bind-html=\\\"vm.title\\\"></div></div><div class=\\\"body-row\\\" ng-bind-html=\\\"vm.body\\\"></div></div>\");\n$templateCache.put(\"app/directives/daysofweek/wbDaysOfWeek.html\",\"<md-select ng-model=\\\"day\\\" placeholder=\\\"Day of week\\\" class=\\\"si-md-no-underline\\\" ng-disabled=\\\"disabled\\\"><md-option \\nvalue=\\\"1\\\" translate=\\\"DAYS_OF_WEEK.MONDAY\\\"></md-option><md-option value=\\\"2\\\" translate=\\\"DAYS_OF_WEEK.TUESDAY\\\">\\n</md-option><md-option value=\\\"3\\\" translate=\\\"DAYS_OF_WEEK.WEDNESDAY\\\"></md-option><md-option value=\\\"4\\\" \\ntranslate=\\\"DAYS_OF_WEEK.THURSDAY\\\"></md-option><md-option value=\\\"5\\\" translate=\\\"DAYS_OF_WEEK.FRIDAY\\\"></md-option>\\n<md-option value=\\\"6\\\" translate=\\\"DAYS_OF_WEEK.SATURDAY\\\"></md-option><md-option value=\\\"0\\\" \\ntranslate=\\\"DAYS_OF_WEEK.SUNDAY\\\"></md-option></md-select>\");\n$templateCache.put(\"app/directives/freemium-banner/nd-freemium-banner.html\",\"<div ng-if=\\\"showFreemiumBanner\\\" id=\\\"nd-freemium-banner\\\" class=\\\"md-accent-bg\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"goToStatusIfMobile()\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-circle-outline.5706d718.svg\\\" ng-if=\\\"remainingDays < 1\\\" \\nclass=\\\"mr-8\\\"></md-icon><span translate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_DAYS_SINGULAR_BANNER\\\" \\ntranslate-values=\\\"{user: userName}\\\" ng-if=\\\"remainingDays === 1\\\"></span> <span \\ntranslate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_DAYS_PLURAL_BANNER\\\" translate-values=\\\"{user: userName, days: remainingDays}\\\" \\nng-if=\\\"remainingDays > 1\\\"></span> <span translate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_EXPIRED\\\" ng-if=\\\"remainingDays < 1\\\">\\n</span><md-button id=\\\"subscribe-now-button\\\" hide-xs hide-sm ng-if=\\\"remainingDays > 0\\\" \\nui-sref=\\\"app.support.trial_status_details\\\" class=\\\"stroked\\\">{{\\'TRIAL_EXPIRED.CONTACT_WITH_SALES\\' | translate }}\\n</md-button><md-button id=\\\"go-to-trial\\\" hide-xs hide-sm ng-if=\\\"remainingDays > 0\\\" \\nhref=\\\"https://support.stockagile.com\\\" target=\\\"_blank\\\" class=\\\"stroked\\\">\\n{{\\'TRIAL_EXPIRED.GO_TO_TRIAL_GUIDE\\' | translate }}</md-button><span flex></span><md-button class=\\\"md-icon-button\\\" \\nng-if=\\\"remainingDays > 0\\\" ng-click=\\\"hideFreemiumBanner()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button>\\n</div>\");\n$templateCache.put(\"app/directives/global-start-banner/nd-global-start-banner.html\",\"<div id=\\\"global-start-banner\\\" ng-if=\\\"currentBanner\\\" class=\\\"{{currentBanner.color}}\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div flex class=\\\"banner-text\\\" ng-click=\\\"open()\\\" ng-bind-html=\\\"getBody()\\\"></div><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"dismiss()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div>\");\n$templateCache.put(\"app/directives/health-check/nd-health-check-widget.html\",\"<div layout=\\\"row\\\" class=\\\"full-width\\\" layout-wrap><ms-widget layout=\\\"column\\\" class=\\\"nd-widget\\\" flex=\\\"50\\\" \\nflex-gt-md=\\\"25\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'HEALTH_CHECK.TOTAL_PRODUCTS\\' | translate}}\\n</span> <span flex></span><div class=\\\"value\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\"><span \\nng-class=\\\"{\\'red-fg\\': vm.productsWithError.size > 0}\\\">{{(vm.productsWithError.size | number:0)}} </span><span \\nclass=\\\"font-size-24 grey-fg\\\">/{{(vm.totalProducts) | number:0}}</span></div></ms-widget-front></ms-widget><ms-widget \\nclass=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">\\n{{\\'HEALTH_CHECK.TOTAL_ERROR_PRODUCTS\\' | translate}}</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\" ng-class=\\\"{\\'red-fg\\': vm.totalProductErrors > 0}\\\">{{(vm.totalProductErrors) | number:0}}</div>\\n</ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front \\nlayout=\\\"column\\\"><span class=\\\"title\\\">{{\\'HEALTH_CHECK.TOTAL_ERROR_PRODUCT_VARIANTS\\' | translate}}</span><div \\nclass=\\\"value\\\" ng-class=\\\"{\\'red-fg\\': vm.totalProductVariantErrors > 0}\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{(vm.totalProductVariantErrors) | number:0}}</div></ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">\\n{{\\'HEALTH_CHECK.TOTAL_ERROR_STOCKS\\' | translate}}</span><div class=\\\"value\\\" \\nng-class=\\\"{\\'red-fg\\': vm.totalStockErrors > 0}\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{(vm.totalStockErrors) | number:0}}</div></ms-widget-front></ms-widget></div><md-card class=\\\"nd-health-check-widget\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"HEALTH_CHECK.HEALTH_CHECK_WIDGET_TITLE\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content layout-fill class=\\\"no-padding\\\"><md-tabs md-dynamic-height \\nmd-border-bottom><md-tab label=\\\"{{\\'HEALTH_CHECK.PRODUCTS\\' | translate}}\\\" ng-if=\\\"vm.showProducts\\\" \\nmd-on-select=\\\"vm.initProductsDatatable()\\\"><md-tab-label><span translate=\\\"HEALTH_CHECK.PRODUCTS\\\"></span> <span \\nng-if=\\\"vm.totalProductErrors\\\" class=\\\"text-boxed red custom\\\">{{vm.totalProductErrors}}</span></md-tab-label>\\n<md-tab-body><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\"><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" flex=\\\"20\\\" \\nclass=\\\"border-right\\\"><div ng-if=\\\"vm.loadingProducts\\\" class=\\\"h-300\\\" layout=\\\"row\\\" flex layout-align=\\\"center center\\\">\\n<md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular></div><md-list ng-if=\\\"!vm.loadingProducts\\\" flex>\\n<md-list-item ng-repeat=\\\"attribute in vm.productsHealthCheck\\\" ng-if=\\\"attribute.value\\\" \\nng-click=\\\"vm.showProductAttribute(attribute.attribute)\\\" \\nng-class=\\\"{\\'md-primary-fg\\': vm.selectedProductAttribute == attribute.attribute}\\\"><span class=\\\"mr-8\\\" flex>\\n{{attribute.translation | translate}}</span> <span class=\\\"red-fg\\\">{{attribute.value}}</span></md-list-item></md-list>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" ng-hide=\\\"vm.loadingProducts\\\" flex><table \\nclass=\\\"dataTable row-border\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtProductsInstance\\\" dt-options=\\\"vm.dtProductsOptions\\\" \\ndt-columns=\\\"vm.dtProductsColumns\\\"></table></div></div></md-tab-body></md-tab><md-tab \\nlabel=\\\"{{\\'HEALTH_CHECK.PRODUCT_VARIANTS\\' | translate}}\\\" ng-if=\\\"vm.showProductVariants\\\" \\nmd-on-select=\\\"vm.initProductVariantsDatatable()\\\"><md-tab-label><span translate=\\\"HEALTH_CHECK.PRODUCT_VARIANTS\\\"></span> \\n<span ng-if=\\\"vm.totalProductVariantErrors\\\" class=\\\"text-boxed red custom\\\">{{vm.totalProductVariantErrors}}</span>\\n</md-tab-label><md-tab-body><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start stretch\\\" flex=\\\"20\\\" class=\\\"border-right\\\"><div ng-if=\\\"vm.loadingProductVariants\\\" class=\\\"full-height\\\" \\nlayout=\\\"row\\\" flex layout-align=\\\"center center\\\"><md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n</div><md-list ng-if=\\\"!vm.loadingProductVariants\\\" flex><md-list-item \\nng-repeat=\\\"attribute in vm.productVariantHealthCheck\\\" ng-if=\\\"attribute.value\\\" \\nng-click=\\\"vm.showProductVariantAttribute(attribute.attribute)\\\" \\nng-class=\\\"{\\'md-primary-fg\\': vm.selectedProductVariantAttribute == attribute.attribute}\\\"><span class=\\\"mr-8\\\" flex>\\n{{attribute.translation | translate}}</span> <span class=\\\"red-fg\\\">{{attribute.value}}</span></md-list-item></md-list>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" ng-hide=\\\"vm.loadingProductVariants\\\" flex><table \\nclass=\\\"dataTable row-border product-variants\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtProductVariantsInstance\\\" \\ndt-options=\\\"vm.dtProductVariantsOptions\\\" dt-columns=\\\"vm.dtProductVariantsColumns\\\"></table></div></div></md-tab-body>\\n</md-tab><md-tab label=\\\"{{\\'HEALTH_CHECK.STOCKS\\' | translate}}\\\" ng-if=\\\"vm.showStocks\\\" \\nmd-on-select=\\\"vm.initStocksDatatable()\\\"><md-tab-label><span translate=\\\"HEALTH_CHECK.STOCKS\\\"></span> <span \\nng-if=\\\"vm.totalStockErrors\\\" class=\\\"text-boxed red custom\\\">{{vm.totalStockErrors}}</span></md-tab-label><md-tab-body>\\n<div layout=\\\"row\\\" layout-align=\\\"start stretch\\\"><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" flex=\\\"20\\\" \\nclass=\\\"border-right\\\"><div ng-if=\\\"vm.loadingStocks\\\" class=\\\"full-height\\\" layout=\\\"row\\\" flex layout-align=\\\"center center\\\">\\n<md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular></div><md-list ng-if=\\\"!vm.loadingStocks\\\" flex>\\n<md-list-item ng-repeat=\\\"attribute in vm.stockHealthCheck\\\" ng-if=\\\"attribute.value\\\" \\nng-click=\\\"vm.showStockAttribute(attribute.attribute)\\\" \\nng-class=\\\"{\\'md-primary-fg\\': vm.selectedStockAttribute == attribute.attribute}\\\"><span class=\\\"mr-8\\\" flex>\\n{{attribute.translation | translate}}</span> <span class=\\\"red-fg\\\">{{attribute.value}}</span></md-list-item></md-list>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" ng-hide=\\\"vm.loadingStocks\\\" flex><table \\nclass=\\\"dataTable row-border product-variants\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtStocksInstance\\\" \\ndt-options=\\\"vm.dtStocksOptions\\\" dt-columns=\\\"vm.dtStocksColumns\\\"></table></div></div></md-tab-body></md-tab><md-tab \\nlabel=\\\"{{\\'HEALTH_CHECK.SEASONS\\' | translate}}\\\" ng-if=\\\"vm.showSeasons\\\" md-on-select=\\\"vm.initSeasonsDatatable()\\\">\\n<md-tab-label><span translate=\\\"HEALTH_CHECK.SEASONS\\\"></span> <span ng-if=\\\"vm.totalSeasonErrors\\\" \\nclass=\\\"text-boxed red custom\\\">{{vm.totalSeasonErrors}}</span></md-tab-label><md-tab-body><div layout=\\\"row\\\" \\nlayout-align=\\\"start stretch\\\"><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" flex=\\\"20\\\" class=\\\"border-right\\\"><div \\nng-if=\\\"vm.loadingSeasons\\\" class=\\\"full-height\\\" layout=\\\"row\\\" flex layout-align=\\\"center center\\\"><md-progress-circular \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></div><md-list ng-if=\\\"!vm.loadingSeasons\\\" flex><md-list-item \\nng-repeat=\\\"attribute in vm.seasonHealthCheck\\\" ng-if=\\\"attribute.value\\\" \\nng-click=\\\"vm.showSeasonAttribute(attribute.attribute)\\\" \\nng-class=\\\"{\\'md-primary-fg\\': vm.selectedSeasonAttribute == attribute.attribute}\\\"><span class=\\\"mr-8\\\" flex>\\n{{attribute.translation | translate}}</span> <span class=\\\"red-fg\\\">{{attribute.value}}</span></md-list-item></md-list>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\" ng-hide=\\\"vm.loadingSeasons\\\" flex><table \\nclass=\\\"dataTable row-border product-variants\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtSeasonsInstance\\\" \\ndt-options=\\\"vm.dtSeasonsOptions\\\" dt-columns=\\\"vm.dtSeasonsColumns\\\"></table></div></div></md-tab-body></md-tab></md-tabs>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/directives/logo-stockagile/nd-logo-stockagile.html\",\"<div class=\\\"stockagile-logo-content\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo.e4ee42cd.svg\\\"></div>\");\n$templateCache.put(\"app/directives/many-options-dialog/many-options-dialog.html\",\"<md-dialog><md-dialog-content class=\\\"p-24\\\" layout=\\\"column\\\"><h2 class=\\\"md-title\\\" translate=\\\"{{vm.title}}\\\"></h2><div \\nclass=\\\"md-dialog-content-body\\\"><p translate=\\\"{{vm.body}}\\\" class=\\\"m-0\\\"></p></div></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\" class=\\\"text-center\\\"><md-button ng-class=\\\"vm.cancelClasses\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary\\\" ng-repeat=\\\"option in vm.options\\\" \\nng-class=\\\"option.classes\\\" ng-click=\\\"option.callback($event)\\\" translate=\\\"{{option.text}}\\\"></md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/directives/nd-a/nd-a.html\",\"<a ng-if=\\\"Session.hasPermission(state)\\\" target=\\\"{{target}}\\\" ui-sref=\\\"{{state}}(stateParams)\\\" \\nng-click=\\\"navigate($event)\\\" style=\\\"display: inline\\\"><span ng-transclude></span> </a><span \\nng-if=\\\"!Session.hasPermission(state)\\\" style=\\\"display: inline\\\"><span ng-transclude></span> </span>\");\n$templateCache.put(\"app/directives/nd-adjustments-list/nd-adjustments-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-adjustments-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-autocomplete/nd-autocomplete.html\",\"<md-autocomplete flex=\\\"25\\\" class=\\\"details-autocomplete\\\" md-items=\\\"item in querySearch()\\\" \\nmd-selected-item=\\\"selectedItem\\\" md-search-text=\\\"searchText\\\" md-selected-item-change=\\\"selectItem(item)\\\" \\nmd-item-text=\\\"selectedItem.name\\\" md-min-length=\\\"0\\\" md-delay=\\\"300\\\" \\nplaceholder=\\\"{{\\'CONTACTS.CUSTOMER_SALES_CHANNEL\\' | translate}}\\\" md-no-cache=\\\"true\\\"><md-item-template><div layout=\\\"row\\\">\\n<span md-highlight-text=\\\"searchText\\\" md-highlight-flags=\\\"^i\\\">{{item.name}}</span></div></md-item-template>\\n<md-not-found>Not Found</md-not-found></md-autocomplete>\");\n$templateCache.put(\"app/directives/nd-contacts/nd-contacts.html\",\"<div class=\\\"pr-10\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-autocomplete flex=\\\"100\\\" md-delay=\\\"300\\\" \\nmd-floating-label=\\\"{{getPlaceholder()}}\\\" md-item-text=\\\"displayFunction(item)\\\" md-items=\\\"item in querySearch()\\\" \\nmd-min-length=\\\"2\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"searchText\\\" md-selected-item=\\\"contactInstance\\\" \\nmd-selected-item-change=\\\"selectItem(item)\\\" ng-disabled=\\\"ngDisabled\\\" ng-required=\\\"required\\\" \\nplaceholder=\\\"{{getPlaceholder()}}\\\"><md-item-template><div layout=\\\"row\\\"><span md-highlight-flags=\\\"^i\\\" \\nmd-highlight-text=\\\"searchText\\\" ng-if=\\\"item.name\\\">{{item.name}}</span> <span md-highlight-flags=\\\"^i\\\" \\nmd-highlight-text=\\\"searchText\\\" ng-if=\\\"!item.name && item.first_name\\\">{{(item.first_name)}}</span> <span \\nmd-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"searchText\\\" ng-if=\\\"!item.name && item.last_name\\\">{{(item.last_name)}}</span>\\n</div></md-item-template><md-not-found>{{\\'GENERAL.CONTACT_NOT_FOUND\\' | translate}}</md-not-found></md-autocomplete><div\\n class=\\\"pt-20\\\" ng-if=\\\"!ngDisabled\\\"><md-button class=\\\"md-icon-button\\\" ng-click=\\\"createContact()\\\" ng-if=\\\"createButton\\\">\\n<md-tooltip>{{\\'CUSTOMERS.NEW_CUSTOMER\\' | translate}}</md-tooltip><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/account-plus-outline.2702e30b.svg\\\" \\nng-if=\\\"!contactId && !vm.openingDialog\\\"></md-icon><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/account-eye-outline.2ced42e6.svg\\\" ng-if=\\\"contactId && !vm.openingDialog\\\">\\n</md-icon><md-progress-circular ng-if=\\\"vm.openingDialog\\\" md-diameter=\\\"20px\\\"></md-progress-circular></md-button></div>\\n</div>\");\n$templateCache.put(\"app/directives/nd-contacts-list/nd-contacts-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-contacts-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-grid/nd-grid.html\",\"<div class=\\\"nd-grid content no-padding\\\" flex layout=\\\"column\\\" layout-fill><div class=\\\"full-width h-0\\\">\\n<md-progress-linear class=\\\"md-primary progress-loader\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear>\\n</div><md-content class=\\\"content no-padding uid-grid-container\\\" layout=\\\"column\\\" flex layout-fill><div class=\\\"grid\\\" \\nlayout-fill flex ui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-exporter ui-grid-move-columns \\nui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-save-state ui-grid-grouping ui-grid-edit \\nui-grid-row-edit ui-grid-selection><div class=\\\"grid-placeholder\\\" \\nng-if=\\\"(!vm.gridOptions.data || vm.gridOptions.data.length === 0) && !vm.loading\\\">{{ vm.emptyLabel | translate }}</div>\\n</div></md-content></div>\");\n$templateCache.put(\"app/directives/nd-invoices-list/nd-invoices-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-invoices-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" selected=\\\"selected\\\" storage-label=\\\"vm.storageLabel\\\">\\n</nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-packing-products-list/nd-packing-products-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" class=\\\"nd-packing-products-list\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" \\nsave-pagination=\\\"false\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid>\");\n$templateCache.put(\"app/directives/nd-pos-order-fulfillments-list/nd-pos-order-fulfillments-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-pos-order-fulfillments-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout-fill flex layout=\\\"column\\\" url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nselected=\\\"selected\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-pos-order-product-variants-list/nd-pos-order-product-variants-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-pos-order-product-variants-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\">\\n</nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-pos-orders-list/nd-pos-orders-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-pos-orders-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" context=\\\"vm.context\\\" selected=\\\"selected\\\" \\nstorage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-print-order-delivery-button/nd-print-order-delivery-button.html\",\"<md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.openDialog()\\\" ng-disabled=\\\"vm.printing || vm.changingStatus\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon><span ng-if=\\\"!vm.showOnlyIcon\\\" \\ntranslate=\\\"PURCHASE.PRINT\\\"></span><md-tooltip>{{\\'SALE.PRINT_ORDER_DELIVERY\\' | translate}}</md-tooltip></md-button>\");\n$templateCache.put(\"app/directives/nd-print-order-delivery-button/print-order-delivery-dialog.html\",\"<md-dialog aria-label=\\\"Import Contacts\\\" class=\\\"w-400\\\" id=\\\"purchase-print-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"GENERAL.PRINT_SEND\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"column\\\"><md-select ng-model=\\\"vm.printType\\\" \\nng-change=\\\"vm.changePrintConfig()\\\"><md-option value=\\\"products\\\" translate=\\\"PURCHASE.PRODUCT_PER_ROW\\\"></md-option>\\n<md-option value=\\\"variants\\\" translate=\\\"PURCHASE.PRODUCT_VARIANT_PER_ROW\\\"></md-option><md-option value=\\\"uids\\\" \\ntranslate=\\\"PURCHASE.UID_PER_ROW\\\"></md-option><md-option value=\\\"uids_info\\\" translate=\\\"PURCHASE.UID_GS1_PER_ROW\\\">\\n</md-option></md-select><md-checkbox ng-model=\\\"vm.showBrand\\\" ng-change=\\\"vm.changePrintConfig()\\\"><span \\ntranslate=\\\"PRODUCT.BRAND\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showHsCode\\\" \\nng-change=\\\"vm.changePrintConfig()\\\"><span translate=\\\"PRODUCT.HARMONISED_CODE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.showComposition\\\" ng-change=\\\"vm.changePrintConfig()\\\"><span translate=\\\"PRODUCT.COMPOSITION\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.showAttributes\\\" ng-change=\\\"vm.changePrintConfig()\\\"><span \\ntranslate=\\\"PRODUCT.ATTRIBUTES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.thermalPrinter\\\" \\nng-if=\\\"vm.isTransferOrderDelivery\\\"><span translate=\\\"TRANSFER.THERMAL_PRINTER_VERSION\\\"></span></md-checkbox><md-checkbox\\n ng-model=\\\"vm.printPrices\\\" ng-change=\\\"vm.changePrintConfig()\\\" ng-hide=\\\"vm.isTransferOrderDelivery\\\"><span \\ntranslate=\\\"SALE.SHOW_PRICES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.printSkus\\\" \\nng-change=\\\"vm.changePrintConfig()\\\" ng-if=\\\"vm.printType === \\'variants\\'\\\"><span translate=\\\"SALE.SHOW_SKUS\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.sendEmail\\\" ng-change=\\\"vm.changePrintConfig()\\\"><span \\ntranslate=\\\"PURCHASE.SEND_BY_EMAIL\\\"></span></md-checkbox><md-input-container ng-if=\\\"vm.sendEmail\\\" class=\\\"mb-0 md-block\\\">\\n<label translate=\\\"CONTACTS.EMAIL\\\"></label><input ng-model=\\\"vm.emailTo\\\" type=\\\"text\\\" required></md-input-container></div>\\n<div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-click=\\\"vm.printOrderDelivery()\\\" class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"importForm.$invalid || !vm.hasValidEmail()\\\">\\n{{(vm.sendEmail ? \\'GENERAL.SEND\\' : \\'GENERAL.PRINT\\') | translate }}</md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/directives/nd-products/nd-products.html\",\"<md-autocomplete flex class=\\\"nd-input\\\" md-menu-class=\\\"nd-products-dropdown\\\" ng-disabled=\\\"setDisabled\\\" \\nng-focus=\\\"setNdBarcodeListenerEnabled(false)\\\" ng-blur=\\\"setNdBarcodeListenerEnabled(true)\\\" \\nmd-items=\\\"item in querySearch()\\\" md-selected-item=\\\"productInstance\\\" md-search-text=\\\"searchText\\\" \\nmd-selected-item-change=\\\"selectItem(item)\\\" md-item-text=\\\"productInstance.name\\\" md-min-length=\\\"2\\\" md-delay=\\\"300\\\" \\nplaceholder=\\\"{{\\'SALES.SEARCH_PRODUCT\\' | translate}}\\\" md-no-cache=\\\"true\\\"><md-item-template><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"nd-products-item-template\\\"><img class=\\\"thumbnail-40\\\" \\nng-class=\\\"{\\'default-icon\\': !item.cover_thumbnail}\\\" \\nsrc=\\\"{{item.cover_thumbnail ? item.cover_thumbnail : (item.is_gift_card ? \\'/assets/images/wallet-giftcard.b55a1923.svg\\' : \\'/assets/images/package-variant-closed.9c71cbbe.png\\')}}\\\">\\n<div layout=\\\"column\\\" layout-align=\\\"center start\\\" class=\\\"name-and-code-column\\\" flex><strong class=\\\"text-truncate\\\">\\n{{item.code}}</strong> <span class=\\\"text-truncate\\\" md-highlight-text=\\\"sale.productAutocomplete.productSearchText\\\" \\nmd-highlight-flags=\\\"^i\\\">{{item.name}}</span></div><div flex class=\\\"text-right\\\">\\n{{item.price_incl_tax | price}}{{::vm.currencyCharacter}}</div></div></md-item-template><md-not-found><span \\nng-show=\\\"vm.order.in_stock\\\" translate=\\\"SALES.NO_PRODUCT_FOUND_STOCK\\\" \\ntranslate-values=\\\"{name: vm.order.productAutocomplete.productSearchText}\\\">\\nNo products matching \\\"{{vm.order.productAutocomplete.productSearchText}}\\\" were found in stock.</span> <span \\nng-show=\\\"!vm.order.in_stock\\\" translate=\\\"SALES.NO_PRODUCT_FOUND\\\" \\ntranslate-values=\\\"{name: vm.order.productAutocomplete.productSearchText}\\\">\\nNo products matching \\\"{{vm.order.productAutocomplete.productSearchText}}\\\" were found.</span></md-not-found>\\n</md-autocomplete><div style=\\\"display: none\\\"><div class=\\\"md-dialog-container\\\" id=\\\"nd-product-dialog\\\"><md-dialog \\nclass=\\\"w-400\\\"><md-dialog-content><div layout=\\\"row\\\" layout-align=\\\"space-around\\\" class=\\\"variants-loader\\\" ng-if=\\\"!ready\\\">\\n<md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular></div><div layout=\\\"row\\\" layout-wrap flex \\nng-if=\\\"ready\\\"><div ng-if=\\\"selectedColor==null\\\" class=\\\"md-background-bg md-hue-2 h-90 variant-box text-center\\\" \\nlayout-align=\\\"center center\\\" layout=\\\"row\\\" flex=\\\"25\\\" ng-repeat=\\\"color in colors\\\" ng-click=\\\"selectColor(color.id)\\\">\\n{{color.name}}</div><div ng-if=\\\"selectedColor!=null && selectedSize==null\\\" \\nclass=\\\"md-background-bg md-hue-2 h-90 variant-box text-center\\\" layout-align=\\\"center center\\\" layout=\\\"row\\\" flex=\\\"25\\\" \\nng-repeat=\\\"size in sizes\\\" ng-click=\\\"selectSize(size.id)\\\">{{size.name}}</div><div \\nng-if=\\\"selectedColor!=null && selectedSize!=null\\\" class=\\\"md-background-bg md-hue-2 h-90 variant-box text-center\\\" \\nlayout-align=\\\"center center\\\" layout=\\\"row\\\" flex=\\\"25\\\" ng-repeat=\\\"pricingTier in selectedProduct.pricing_tiers\\\" \\nng-click=\\\"selectPricingTier(pricingTier)\\\">{{pricingTier.pricing_tier_name}}<br>({{pricingTier.price_incl_tax}})</div>\\n</div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" ng-if=\\\"selectedProduct.productVariantsDialog.ready\\\">\\n<md-button ng-click=\\\"vm.clickBackInProductVariantsDialog(selectedProduct)\\\" \\nng-disabled=\\\"selectedProduct.productVariantsDialog.currentVariantCategoryIndex === 0\\\" translate=\\\"SALES.BACK\\\" \\nclass=\\\"no-margin\\\">Back</md-button><md-button ng-click=\\\"vm.cancelDialog(selectedProduct)\\\" translate=\\\"GENERAL.CANCEL\\\" \\nclass=\\\"no-margin stroked\\\">Cancel</md-button></md-dialog-actions></md-dialog></div></div>\");\n$templateCache.put(\"app/directives/nd-purchase-deliveries-list/nd-purchase-deliveries-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-purchase-deliveries-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nselected=\\\"selected\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-purchases-list/nd-purchases-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-purchases-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-sale-deliveries-list/nd-sale-deliveries-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-sale-deliveries-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nselected=\\\"selected\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-sales-list/nd-sales-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-sales-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-setup-card/nd-setup-card.html\",\"<md-card id=\\\"nd-setup-card\\\"><md-card-content><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"image-container\\\"><img class=\\\"w-64\\\" src=\\\"assets/images/set-up-2.617fe5c0.svg\\\"></div><div layout=\\\"column\\\" \\nlayout-align=\\\"center start\\\" class=\\\"ml-20\\\"><div class=\\\"h2\\\" translate=\\\"SETUP.START_FROM_SCRATCH\\\"></div><p \\ntranslate=\\\"SETUP.START_FROM_SCRATCH_MSG\\\"></p><md-button class=\\\"no-margin stroked md-primary\\\" \\ntranslate=\\\"SETUP.SET_UP_SAMPLE_DATA\\\" ng-click=\\\"openDialog($event)\\\"></md-button></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/nd-stock-legend/nd-stock-legend.html\",\"<div id=\\\"legend-div\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-checkbox-blank-circle\\\" class=\\\"under-minimum-fg mh-8\\\"></md-icon><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" translate=\\\"STOCKS.UNDER_MINIMUM\\\">Stock under minimum</div></div></div>\");\n$templateCache.put(\"app/directives/nd-transfer-deliveries-list/nd-transfer-deliveries-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-transfer-deliveries-list\\\" layout=\\\"column\\\" layout-fill><nd-grid \\ncolumns=\\\"vm.columns\\\" layout-fill flex layout=\\\"column\\\" url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nselected=\\\"selected\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-transfers-list/nd-transfers-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-transfers-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-users-list/nd-users-list.html\",\"<div class=\\\"content no-padding\\\" flex id=\\\"nd-contacts-list\\\" layout=\\\"column\\\" layout-fill><nd-grid columns=\\\"vm.columns\\\" \\nlayout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid></div>\");\n$templateCache.put(\"app/directives/nd-verifactu-integration-installed-app-form/nd-verifactu-integration-installed-app-form.html\",\"<div class=\\\"nd-verifactu-integration-installed-app-form\\\" layout=\\\"column\\\"><nd-information-panel variation=\\\"warning\\\" \\nclass=\\\"mb-16\\\" ng-if=\\\"vm.showTestModeInformationPanel()\\\"><information-title>\\n{{\\'VERIFACTU.TEST_MODE_ACTIVE_TITLE\\' | translate}}</information-title><information-content><span \\ntranslate=\\\"VERIFACTU.TEST_MODE_ACTIVE_MSG\\\"></span></information-content><action><md-button \\nng-disabled=\\\"vm.isEnableRealModeButtonDisabled()\\\" class=\\\"yellow-bg md-raised\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular><span translate=\\\"VERIFACTU.ENABLE_REAL_MODE\\\"></span></div></md-button>\\n</action></nd-information-panel><nd-information-panel variation=\\\"{{vm.getInformationPanelVariation()}}\\\" class=\\\"mb-16\\\" \\nng-if=\\\"vm.showDocumentInformationPanel()\\\"><information-title>\\n{{vm.integrationInstalledApp.getDocumentsStatusName() | translate}}</information-title><information-content><span>\\n{{vm.integrationInstalledApp.getDocumentsStatusName() + \\'_MSG\\' | translate}}</span> <strong \\nng-if=\\\"vm.integrationInstalledApp.isRejected() && vm.integrationInstalledApp.rejected_reason\\\"><br>\\n{{\\'VERIFACTU.VERIFACTU_DOCUMENTS_REJECTED_MSG_REASON\\' | translate: {reason: vm.integrationInstalledApp.rejected_reason} }}\\n</strong></information-content><action ng-if=\\\"vm.integrationInstalledApp.canUploadDocuments()\\\"><md-button \\nng-click=\\\"vm.downloadGrantDocument()\\\" class=\\\"md-primary md-raised\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-download\\\"></md-icon><span translate=\\\"VERIFACTU.DOWNLOAD_DOCUMENT\\\"></span>\\n</div></md-button></action><action ng-if=\\\"vm.integrationInstalledApp.canEnableTestMode()\\\"><md-button \\nng-click=\\\"vm.showEnableTestModeDialog()\\\" ng-disabled=\\\"vm.saving\\\" class=\\\"white-fg green-bg md-raised\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular><span translate=\\\"VERIFACTU.ENABLE_TEST_MODE\\\"></span></div></md-button>\\n</action></nd-information-panel><form name=\\\"verifactuIntegrationInstalledAppForm\\\"><md-input-container \\nclass=\\\"md-icon-float md-block\\\"><label translate=\\\"VERIFACTU.FISCAL_ADDRESS\\\"></label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-bank\\\"></md-icon><md-select name=\\\"fiscalAddress\\\" \\nng-disabled=\\\"!vm.allowedToSave() || vm.integrationInstalledApp.id\\\" ng-change=\\\"vm.fiscalAddressChanged()\\\" \\nng-model=\\\"vm.integrationInstalledApp.fiscal_address\\\"><md-option ng-value=\\\"null\\\">\\n{{\\'VERIFACTU.COMPANYS_FISCAL_ADDRESS\\' | translate}}</md-option><md-option \\nng-repeat=\\\"fiscalAddress in vm.fiscalAddresses\\\" ng-value=\\\"fiscalAddress.id\\\">\\n{{fiscalAddress.legal_name}} {{fiscalAddress.vat}}, <span class=\\\"secondary-text\\\">{{fiscalAddress | location}}</span>\\n</md-option></md-select><div ng-messages=\\\"verifactuIntegrationInstalledAppForm.fiscalAddress.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"unique\\\"><span>{{\\'VERIFACTU.VERIFACTU_WITH_THIS_DATA_ALREADY_EXISTS\\' | translate }}</span></div></div><small\\n class=\\\"hint secondary-text\\\">{{\\'VERIFACTU.FISCAL_ADDRESS_HELP\\' | translate}}</small></md-input-container><div \\nlayout=\\\"row\\\" ng-if=\\\"vm.integrationInstalledApp.id\\\" class=\\\"custom-input-container mb-20\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-added=\\\"vm.fileAdded($file)\\\"><md-icon md-font-icon class=\\\"icon-left\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-sign.3091d78a.svg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"input-column\\\" flex><label translate=\\\"VERIFACTU.UPLOAD_SIGNED_CONTRACT\\\" class=\\\"secondary-text\\\"></label><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-raised\\\" ng-disabled=\\\"!vm.allowedToSave()\\\" flow-btn \\nflow-attrs=\\\"{accept:\\'application/pdf\\'}\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-upload\\\"></md-icon><span ng-if=\\\"!vm.hasContractAttached\\\">{{\\'VERIFACTU.SELECT_FILE\\' | translate}}\\n</span> <span ng-if=\\\"vm.hasContractAttached\\\">{{\\'VERIFACTU.CHANGE_FILE\\' | translate}}</span></div></md-button><span \\nng-if=\\\"!vm.hasContractAttached && !vm.integrationInstalledApp.contract\\\" class=\\\"secondary-text format-span\\\" \\ntranslate=\\\"VERIFACTU.ONLY_PDF\\\"></span> <a ng-if=\\\"!vm.hasContractAttached && vm.integrationInstalledApp.contract\\\" \\nclass=\\\"format-span\\\" target=\\\"_blank\\\" href=\\\"{{vm.integrationInstalledApp.contract}}\\\">\\n{{\\'VERIFACTU.VIEW_FILE\\' | translate}} </a><span ng-if=\\\"vm.hasContractAttached\\\" class=\\\"secondary-text format-span\\\" \\ntranslate=\\\"VERIFACTU.FILE_UPLOADED\\\"></span></div><small class=\\\"secondary-text pt-5 border-top\\\">\\n{{\\'VERIFACTU.UPLOAD_CONTRACT_HELP\\' | translate}} <a ng-if=\\\"vm.integrationInstalledApp.canUploadDocuments()\\\" \\nng-click=\\\"vm.downloadGrantDocument()\\\" class=\\\"cursor-pointer\\\">{{\\'VERIFACTU.DOWNLOAD_DOCUMENT\\' | translate}}</a></small>\\n</div></div><div layout=\\\"row\\\" ng-if=\\\"vm.integrationInstalledApp.id\\\" class=\\\"custom-input-container\\\" \\nflow-init=\\\"vm.ngFlowIdentityCardOptions\\\" flow-name=\\\"vm.ngFlowIdentityCard.flow\\\" \\nflow-file-added=\\\"vm.identityCardFileAdded($file)\\\"><md-icon md-font-icon class=\\\"icon-left\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/card-account-details-outline.919d7431.svg\\\"></md-icon><div \\nlayout=\\\"column\\\" class=\\\"input-column\\\" flex><label translate=\\\"VERIFACTU.UPLOAD_IDENTITY_CARD\\\" class=\\\"secondary-text\\\">\\n</label><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-raised\\\" ng-disabled=\\\"!vm.allowedToSave()\\\" \\nflow-btn flow-attrs=\\\"{accept:\\'application/pdf,image/jpeg,image/png,image/jpg\\'}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-upload\\\"></md-icon><span \\nng-if=\\\"!vm.hasIdentityCardAttached\\\">{{\\'VERIFACTU.SELECT_FILE\\' | translate}}</span> <span \\nng-if=\\\"vm.hasIdentityCardAttached\\\">{{\\'VERIFACTU.CHANGE_FILE\\' | translate}}</span></div></md-button><span \\nng-if=\\\"!vm.hasIdentityCardAttached && !vm.integrationInstalledApp.identity_card\\\" class=\\\"secondary-text format-span\\\" \\ntranslate=\\\"VERIFACTU.ONLY_PDF_OR_IMAGE\\\"></span> <a \\nng-if=\\\"!vm.hasIdentityCardAttached && vm.integrationInstalledApp.identity_card\\\" class=\\\"format-span\\\" target=\\\"_blank\\\" \\nhref=\\\"{{vm.integrationInstalledApp.identity_card}}\\\">{{\\'VERIFACTU.VIEW_FILE\\' | translate}} </a><span \\nng-if=\\\"vm.hasIdentityCardAttached\\\" class=\\\"secondary-text format-span\\\" translate=\\\"VERIFACTU.FILE_UPLOADED\\\"></span></div>\\n<small class=\\\"secondary-text pt-5 border-top\\\" translate=\\\"VERIFACTU.UPLOAD_IDENTITY_CARD_HELP\\\"></small></div></div>\\n</form><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.allowedToSave()\\\" ng-click=\\\"vm.save()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n<span translate=\\\"GENERAL.SAVE\\\" ng-if=\\\"vm.integrationInstalledApp.id\\\"></span> <span translate=\\\"GENERAL.CONTINUE\\\" \\nng-if=\\\"!vm.integrationInstalledApp.id\\\"></span></div></md-button></div></div>\");\n$templateCache.put(\"app/directives/nd-wizard-card/nd-wizard-card.html\",\"<md-card id=\\\"nd-wizard-card\\\"><md-card-title><md-card-title-text><div layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><h2 \\nclass=\\\"mt-0\\\" translate=\\\"SIGNUP_STEPS.WELCOME_MESSAGE\\\"></h2><span flex></span><div layout=\\\"row\\\" layout-wrap \\nng-if=\\\"ready\\\"><md-button ng-repeat=\\\"(index, step) in signupSteps\\\" ng-class=\\\"{\\'md-primary\\': step == selectedStep}\\\" \\nng-click=\\\"toggleStep(step)\\\" class=\\\"stroked wizard-tab-button\\\">{{\\'SIGNUP_STEPS.\\' + step.button | translate}}</md-button>\\n</div></div></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" class=\\\"md-padding\\\" \\nng-if=\\\"ready\\\"><span class=\\\"step-title\\\">{{selectedStep.number}} {{\\'SIGNUP_STEPS.\\' + selectedStep.title | translate}}\\n</span> <span class=\\\"step-text secondary-text\\\">{{\\'SIGNUP_STEPS.\\' + selectedStep.text | translate}}</span></div><div \\nclass=\\\"loading h-400\\\" ng-if=\\\"loading\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular>\\n</md-progress-circular></div><div layout=\\\"row\\\" layout-wrap><div \\nng-repeat=\\\"(subindex, substep) in selectedStep.substeps\\\" class=\\\"step-card p-5\\\" flex-xs=\\\"100\\\" flex-sm=\\\"100\\\" \\nflex-md=\\\"50\\\" flex-lg=\\\"25\\\" flex-xl=\\\"25\\\"><md-card class=\\\"full-height m-0 border\\\"><div class=\\\"step-card-image\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><img src=\\\"{{substep.icon}}\\\" class=\\\"card-icon\\\"></div><md-card-title>\\n<md-card-title-text><span class=\\\"h4 text-bold\\\">\\n{{selectedStep.number}}.{{substep.number}} {{\\'SIGNUP_STEPS.\\' + substep.title | translate}}</span></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"full-height\\\"><div layout=\\\"column\\\" class=\\\"full-height\\\"><div flex=\\\"100\\\" \\nclass=\\\"secondary-text\\\">{{\\'SIGNUP_STEPS.\\' + substep.text | translate}}</div><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between top\\\" class=\\\"pt-16\\\"><div layout=\\\"column\\\"><a translate=\\\"SIGNUP_STEPS.GO_TO_ACADEMY\\\" \\nclass=\\\"action-a\\\" target=\\\"_blank\\\" ng-href=\\\"{{substep.academy_url}}\\\"></a> <a ng-if=\\\"substep.video\\\" class=\\\"action-a\\\" \\nng-click=\\\"showDialog($event, substep.video_link)\\\" translate=\\\"SIGNUP_STEPS.GO_TO_VIDEOS\\\"></a></div><div layout=\\\"column\\\">\\n<md-button class=\\\"m-0 stroked\\\" ui-sref=\\\"{{substep.panel_sref}}\\\" \\nng-class=\\\"{\\'md-primary\\': !substep.done, \\'green-500-bg\\': substep.done}\\\">\\n{{(substep.done ? \\'SIGNUP_STEPS.COMPLETED\\' : \\'SIGNUP_STEPS.COMPLETE\\') | translate }}</md-button></div></div></div>\\n</md-card-content></md-card></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/new-feature-badge/nd-new-feature-badge.html\",\"<md-menu-bar class=\\\"p-0 new-feature-badge-menu-bar\\\" ng-show=\\\"visible()\\\"><md-menu md-position-mode=\\\"target-left bottom\\\" \\nmd-offset=\\\"0 12\\\"><md-button class=\\\"open-menu-button\\\" \\nng-class=\\\"{\\'no-margin\\': removeMargin, \\'open-menu-button-icon\\': showIcon}\\\" ng-click=\\\"$mdMenu.open()\\\"><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span ng-if=\\\"isBeta\\\">Beta</span> <span ng-if=\\\"!isBeta && !showIcon\\\" \\ntranslate=\\\"NEW_FEATURES.NEW\\\"></span><md-icon style=\\\"max-height: 16px; max-width: 16px\\\" ng-if=\\\"showIcon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/megaphone.2116bff0.svg\\\"></md-icon></div></md-button><md-menu-content \\nclass=\\\"p-8 new-feature-content\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" class=\\\"mb-8\\\"><h2 flex \\ntranslate=\\\"{{title}}\\\" class=\\\"m-0\\\"></h2><md-button flex=\\\"nogrow\\\" class=\\\"md-icon-button dismiss-button\\\" \\nng-click=\\\"dismiss()\\\"><md-icon md-font-icon=\\\"icon-eye-off\\\"></md-icon></md-button></div><p class=\\\"mt-0\\\" \\ntranslate=\\\"{{body}}\\\"></p><a ng-show=\\\"academyUrl\\\" class=\\\"academy-link font-size-14\\\" href=\\\"{{academyUrl}}\\\" \\ntarget=\\\"_blank\\\"><b>{{\\'NEW_FEATURES.GO_TO_ACADEMY\\' | translate}}</b></a></md-menu-content></md-menu></md-menu-bar>\");\n$templateCache.put(\"app/directives/notifications/nd-notifications.html\",\"<md-menu-bar ng-if=\\\"vm.hasPermissions()\\\" class=\\\"p-0 notifications-menu-bar\\\"><md-menu \\nmd-position-mode=\\\"target-right bottom\\\" md-offset=\\\"0 12\\\"><md-button ng-click=\\\"$mdMenu.open(); vm.pullNotifications()\\\" \\nnd-track-click=\\\"open notifications\\\" class=\\\"full-height-md-button md-icon-button notifications-button\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex><md-tooltip>\\n{{ \\'NOTIFICATIONS.\\' + (vm.hasNotificationsToRead() ? \\'TO_READ\\' : \\'DEFAULT\\') | translate}}</md-tooltip><md-icon \\nmd-font-icon=\\\"icon-bell-outline\\\" class=\\\"s24\\\"></md-icon><div class=\\\"notifications-badge\\\" \\nng-if=\\\"vm.hasNotificationsToRead()\\\"><div class=\\\"notifications-badge-text\\\"></div></div></md-button><md-menu-content \\nid=\\\"notifications-menu\\\" class=\\\"p-0 notifications\\\" width=\\\"5\\\"><div class=\\\"mh-16 mv-8\\\" layout-align=\\\"start center\\\" \\nstyle=\\\"display: flex\\\"><div class=\\\"title\\\"><text>{{\\'NOTIFICATIONS.DEFAULT\\' | translate}}</text></div><div flex></div><a \\nng-click=\\\"vm.setAllNotificationsAsRead()\\\" class=\\\"mark-all-as-read\\\" translate=\\\"NOTIFICATIONS.MARK_ALL_AS_READ\\\"></a>\\n</div><div><md-tabs flex class=\\\"tabs\\\"><md-tab ng-repeat=\\\"(tab, data) in vm.notificationTabs\\\" label=\\\"{{data.title}}\\\">\\n<md-content><div ng-if=\\\"data.notificationsByDate.length == 0\\\" class=\\\"empty\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" class=\\\"feedback\\\"><md-icon class=\\\"icon grey-300-fg\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/bell-check.24f43881.svg\\\"></md-icon><h3>\\n{{\\'NOTIFICATIONS.NO_NOTIFICATIONS\\' | translate}}</h3></div></div><div class=\\\"scrollable-{{tab}}\\\"><div layout=\\\"column\\\">\\n<div ng-repeat=\\\"(index, notification) in data.notifications\\\" ng-show=\\\"notification.show\\\"><div \\nclass=\\\"relative-date-row border-top\\\" ng-if=\\\"notification.relativeDate\\\">{{notification.relativeDate}}</div><div \\nlayout=\\\"row\\\" ng-class=\\\"notification.read ? \\'read\\' : vm.getNotificationClass(notification)\\\" \\nclass=\\\"notification border-top\\\" ng-attr-id=\\\"{{ \\'notification-\\' + notification.id }}\\\"><div class=\\\"mv-16 ml-16\\\" \\nlayout=\\\"column\\\" flex ng-click=\\\"vm.goToLink(notification)\\\"><div class=\\\"header notifications-space\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"column\\\" class=\\\"notifications-space mr-8\\\"><strong><h4>\\n{{notification.shownTitle}}</h4></strong></div><div layout=\\\"column\\\" class=\\\"notifications-space\\\"><text \\nclass=\\\"grey-600-fg\\\"><text>{{notification.created_at | elapsedTime}}</text></text><div flex></div></div></div><div \\nclass=\\\"mt-8\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><img ng-if=\\\"notification.image\\\" class=\\\"thumbnail-40 mr-8\\\" \\nng-src=\\\"{{notification.image}}\\\"><md-icon ng-if=\\\"!notification.image\\\" class=\\\"s40 grey-400-fg mr-8\\\" \\nmd-font-icon=\\\"{{notification.placeholderIcon}}\\\"></md-icon><text ng-bind-html=\\\"notification.shownBody\\\"></text></div>\\n</div><div layout=\\\"column\\\"><md-button ng-click=\\\"vm.archiveNotification(notification)\\\" \\nclass=\\\"md-icon-button archive-notification-button pb-0 mt-6\\\" md-prevent-menu-close=\\\"md-prevent-menu-close\\\" \\nng-show=\\\"vm.showArchiveButton(tab)\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/archive.8f43d173.svg\\\">\\n</md-icon></md-button></div></div></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-primary m-8\\\" ng-click=\\\"vm.loadMore(data)\\\" md-prevent-menu-close=\\\"md-prevent-menu-close\\\" ng-show=\\\"data.next\\\">\\n{{\\'CHANGELOGS.LOAD_MORE\\' | translate}}</md-button></div></div></div></md-content></md-tab></md-tabs></div>\\n</md-menu-content></md-menu></md-menu-bar>\");\n$templateCache.put(\"app/directives/offline-banner/nd-offline-banner.html\",\"<div id=\\\"offline-banner\\\" class=\\\"red-bg\\\" ng-if=\\\"!onLine\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n{{\\'GENERAL.OFFLINE_MESSAGE\\' |translate}}</div>\");\n$templateCache.put(\"app/directives/order-products/order-products.html\",\"<div class=\\\"order-products\\\"><nd-barcode-listener uid-callback=\\\"vm.barcodeListenerCallbackUIDS(barcode)\\\" \\ncallback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><md-nav-bar md-selected-nav-item=\\\"currentTab\\\" \\nnav-bar-aria-label=\\\"navigation links\\\"><md-nav-item name=\\\"products\\\" data-test-id=\\\"dto-order-products\\\" \\nmd-nav-click=\\\"currentTab=\\'products\\'\\\">{{\\'ORDER.SUMMARY\\' | translate}}</md-nav-item><md-nav-item name=\\\"stockDetails\\\" \\ndata-test-id=\\\"dto-order-details\\\" ng-if=\\\"vm.isDeliveryType() && vm.showStockDetailsFeatures()\\\" \\nmd-nav-click=\\\"currentTab=\\'stockDetails\\'\\\">{{\\'ORDER.STOCK_DETAILS\\' | translate}}</md-nav-item><md-nav-item \\nname=\\\"history\\\" data-test-id=\\\"dto-order-history\\\" md-nav-click=\\\"currentTab=\\'history\\'\\\">{{\\'ORDER.HISTORY\\' | translate}}\\n</md-nav-item><nd-new-feature-badge ng-if=\\\"type == \\'SaleOrder\\' || type == \\'SaleOrderDelivery\\'\\\" class=\\\"mt-8\\\" \\nid=\\\"SALES_DTO\\\"></nd-new-feature-badge><span flex></span><md-switch ng-if=\\\"vm.showStockDetailsFeatures()\\\" \\ndata-test-id=\\\"order-switch-history-scan\\\" ng-disabled=\\\"!order.is_editable\\\" ng-model=\\\"vm.autoNavigateToHistoryScan\\\" \\nng-change=\\\"vm.autoNavigateToHistoryScanChanged()\\\" hide-xs hide-sm>\\n{{ (vm.autoNavigateToHistoryScan ? \\'STOCK_DETAILS.AUTO_NAVIGATE_TO_HISTORY_ENABLED\\' : \\'STOCK_DETAILS.AUTO_NAVIGATE_TO_HISTORY_DISABLED\\') | translate}}\\n</md-switch><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"secondary-text switch-info\\\"><md-tooltip \\nmd-direction=\\\"bottom\\\">{{\\'STOCK_DETAILS.AUTO_NAVIGATE_TO_HISTORY_INFO\\' | translate}}</md-tooltip></md-icon></md-nav-bar>\\n<order-products-list order=\\\"order\\\" type=\\\"type\\\" options=\\\"options\\\" taxes=\\\"taxes\\\" show-prices=\\\"showPrices\\\" \\ndisable-taxes=\\\"disableTaxes\\\" edit-prices=\\\"editPrices\\\" ng-if=\\\"currentTab===\\'products\\'\\\"></order-products-list>\\n<order-products-log order=\\\"order\\\" type=\\\"type\\\" ng-if=\\\"currentTab===\\'history\\'\\\"></order-products-log>\\n<order-products-stock-details order=\\\"order\\\" type=\\\"type\\\" ng-if=\\\"currentTab===\\'stockDetails\\'\\\">\\n</order-products-stock-details></div>\");\n$templateCache.put(\"app/directives/pending-invoices-banner/nd-pending-invoices-banner.html\",\"<div id=\\\"pending-invoices-banner\\\" class=\\\"animate-fade-in-out\\\" ng-class=\\\"{\\'clickable\\': clickable}\\\" \\nng-click=\\\"openInvoicesDialog()\\\" ng-if=\\\"invoices.length > 0\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div flex class=\\\"banner-text\\\">{{bannerText}}</div></div>\");\n$templateCache.put(\"app/directives/plan-card/nd-plan-card.html\",\"<md-card class=\\\"nd-plan-card\\\" ng-class=\\\"{\\'current-plan\\': vm.isCurrentPlan}\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\"><span class=\\\"h2\\\" flex>{{\\'SUBSCRIPTION.PLAN_\\' + vm.plan.code | translate}}</span><div \\nng-if=\\\"vm.isCurrentPlan\\\"><span class=\\\"text-boxed\\\">{{\\'SUBSCRIPTION.CURRENT_PLAN\\' | translate}}</span></div></div>\\n</md-card-title-text></md-card-title><md-card-content layout-fill><p>\\n{{\\'SUBSCRIPTION.PLAN_DESCRIPTION_\\' + vm.plan.code | translate}}</p><div layout=\\\"column\\\" class=\\\"top-content\\\"><div \\nclass=\\\"plan-price\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\" flex><span class=\\\"md-display-1\\\">\\n{{vm.getPriceMonthly() | price}}{{vm.plan.CURRENCY | currencyCharacter}} </span><span class=\\\"month-text\\\">\\n/{{\\'SUBSCRIPTION.MONTH\\' | translate}}</span></div></div><div layout=\\\"column\\\"><div \\nng-repeat=\\\"planLimit in vm.plan.getIncludedLimits()\\\" class=\\\"limits-div secondary-text\\\"><span \\nng-bind-html=\\\"planLimit.format(period)\\\"></span></div></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"change-plan-button-row\\\"><md-button class=\\\"md-accent md-raised change-plan-button\\\" ng-disabled=\\\"updating\\\" \\nng-click=\\\"vm.changePlan()\\\" ng-if=\\\"!vm.isCurrentPlan\\\">{{\\'SUBSCRIPTION.CHANGE_PLAN\\' | translate}}</md-button><md-button \\nclass=\\\"md-primary md-raised change-plan-button animate-fade-in-out\\\" ng-click=\\\"vm.updatePlan()\\\" ng-disabled=\\\"updating\\\" \\nng-if=\\\"vm.showUpdateCurrentPlan()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"mr-5\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"updating\\\"></md-progress-circular>{{\\'SUBSCRIPTION.UPDATE_PLAN\\' | translate}}</div></md-button>\\n</div><md-list><md-divider></md-divider><md-subheader ng-if=\\\"vm.hasAddOns\\\">{{\\'SUBSCRIPTION.ADD_ONS\\' | translate}}:\\n</md-subheader><md-list-item ng-repeat=\\\"addOn in vm.addOns\\\"><md-checkbox ng-model=\\\"addOn.enabled\\\" \\nng-show=\\\"vm.isCurrentPlan\\\" class=\\\"md-primary\\\"></md-checkbox><p>\\n{{\\'UPGRADE_PLAN.\\' + addOn.feature.code + \\'.NAME\\' | translate}}</p><md-icon class=\\\"md-secondary\\\" \\nmd-font-icon=\\\"icon-information-outline\\\" ng-click=\\\"vm.showAddOnInfo(addOn, $event)\\\"></md-icon></md-list-item><md-divider\\n ng-if=\\\"vm.addOns.length\\\"></md-divider><md-subheader>{{\\'SUBSCRIPTION.PLAN_FEATURES_INCLUDED\\' | translate}}:\\n</md-subheader><md-list-item ng-repeat=\\\"planFeatureCode in vm.getFilteredFeatures()\\\" class=\\\"md-2-line\\\"><md-icon \\nmd-svg-src=\\\"{{vm.featureIconsDict[planFeatureCode]}}\\\" class=\\\"md-primary\\\"></md-icon><div class=\\\"md-list-item-text\\\" \\nlayout=\\\"column\\\"><h4 class=\\\"md-primary-fg\\\">\\n{{\\'SUBSCRIPTION.FEATURES.\\' + planFeatureCode + \\'_\\' + vm.plan.code | translate}}</h4><p>\\n{{\\'SUBSCRIPTION.FEATURES.\\' + planFeatureCode + \\'_MSG_\\' + vm.plan.code | translate}}</p></div></md-list-item></md-list>\\n</md-card-content></md-card><div style=\\\"visibility: hidden\\\"><div \\nclass=\\\"contact-sales-dialog-{{vm.plan.id}} md-dialog-container\\\"><md-dialog style=\\\"max-width: 600px\\\"><md-dialog-content>\\n<h2 class=\\\"mt-0\\\" translate=\\\"SUBSCRIPTION.CHANGE_PLAN\\\"></h2><p layout=\\\"row\\\" layout-align=\\\"center center\\\" \\ntranslate=\\\"SUBSCRIPTION.CHANGE_PLAN_DESCRIPTION\\\"></p></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.hideDialog()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nhref=\\\"https://stockagile.com/solicitar-una-llamada/\\\" target=\\\"_blank\\\" translate=\\\"UPGRADE_PLAN.CONTACT_WITH_SALES\\\">\\n</md-button><md-button class=\\\"md-accent md-raised\\\" href=\\\"mailto:sales@stockagile.com\\\">\\n{{\\'UPGRADE_PLAN.SEND_EMAIL\\' | translate }}</md-button></div></md-dialog-actions></md-dialog></div></div>\");\n$templateCache.put(\"app/directives/pos-order-contact-card/nd-pos-order-contact-card.html\",\"<md-card class=\\\"m-0\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" \\nflex>{{\\'ORDER.CUSTOMER\\' | translate}}</span><md-button class=\\\"md-primary no-margin stroked\\\" \\nng-if=\\\"vm.canEditContact && !vm.fetchingContact\\\" ng-click=\\\"vm.changeContact()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"{{vm.contact ? \\'icon-close\\' : \\'icon-plus\\' }}\\\" class=\\\"mr-5\\\">\\n</md-icon>{{(vm.contact ? \\'ORDER.CHANGE_CONTACT\\' : \\'ORDER.ADD_CONTACT\\') |translate}}</div></md-button></div>\\n</md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" class=\\\"pt-0 pb-10\\\"><div \\nng-if=\\\"vm.fetchingContact\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-primary\\\" \\nmd-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div><div \\nng-if=\\\"!vm.contact && !vm.fetchingContact && !vm.addingContact\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><em \\nclass=\\\"hint-text\\\">{{\\'ORDER.NO_CUSTOMER\\' | translate}}</em></div><div ng-if=\\\"vm.addingContact\\\" layout=\\\"row\\\"><nd-contacts\\n flex nd-input=\\\"true\\\" placeholder=\\\"\\'ORDER.SEARCH_A_CUSTOMER\\'\\\" contact-instance=\\\"vm.contact\\\" contact-id=\\\"vm.contactId\\\" \\navoid-check-equals=\\\"true\\\" required=\\\"false\\\" contact-id-change=\\\"vm.contactSelected()\\\"></nd-contacts></div><div \\nng-if=\\\"vm.contact && !vm.addingContact\\\" layout=\\\"column\\\" layout-align=\\\"start start\\\"><a \\nng-disabled=\\\"vm.openingCustomerDialog\\\" ng-click=\\\"vm.showCustomerPopup($event)\\\" href=\\\"#\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-progress-circular ng-if=\\\"vm.openingCustomerDialog\\\" md-diameter=\\\"16\\\" \\nmd-mode=\\\"indeterminate\\\" class=\\\"mr-5\\\"></md-progress-circular>{{vm.contact | personname}} </a><span>{{vm.contact.email}}\\n</span> <span>{{vm.contact.phone}}</span></div></div><md-divider></md-divider><div layout=\\\"column\\\" class=\\\"pt-10 pb-10\\\">\\n<div layout=\\\"row\\\"><span class=\\\"h4 text-bold mb-8\\\" flex>{{\\'ORDER.SHIPPING_ADDRESS\\' | translate}}</span><md-button \\nclass=\\\"md-primary no-margin\\\" \\nng-if=\\\"vm.canEditContact && !vm.fetchingShippingAddress && vm.contact && vm.shippingAddress\\\" \\nng-click=\\\"vm.changeShippingAddress()\\\">{{\\'ORDER.CHANGE\\' |translate}}</md-button></div><div \\nng-if=\\\"vm.fetchingShippingAddress\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-primary\\\" \\nmd-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div><div \\nng-if=\\\"!vm.contact && !vm.fetchingShippingAddress\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><em class=\\\"hint-text\\\">\\n{{\\'ORDER.NO_CUSTOMER\\' | translate}}</em></div><div layout=\\\"column\\\" ng-if=\\\"vm.shippingAddress\\\"><span>\\n{{vm.shippingAddress.person_name}}</span> <span>{{vm.shippingAddress.address_1}}</span> <span>\\n{{vm.shippingAddress.address_2}}</span> <span>\\n{{vm.shippingAddress.zip}} {{vm.shippingAddress.city}} {{vm.shippingAddress.state}} {{vm.shippingAddress.country}}\\n</span> <span>{{vm.shippingAddress.phone}}</span></div><div layout=\\\"column\\\" ng-if=\\\"vm.contact && !vm.shippingAddress\\\">\\n<md-select ng-model=\\\"vm.shippingAddress\\\" ng-disabled=\\\"!vm.canEditContact\\\" class=\\\"nd-input mb-0 h-40\\\" \\nng-change=\\\"vm.shippingAddressChanged()\\\" placeholder=\\\"{{\\'ORDER.SELECT_AN_ADDRESS\\' | translate}}\\\"><md-option \\nng-repeat=\\\"address in vm.contact.postal_addresses\\\" ng-value=\\\"address\\\">{{address | location}}</md-option><md-option \\nng-click=\\\"vm.showNewAddressDialog($event, \\'shippingAddress\\')\\\" class=\\\"md-primary-fg\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\"></md-icon><span flex>\\n{{\\'ORDER.CREATE_NEW_ADDRESS\\' | translate}}</span></div></md-option></md-select></div></div><md-divider \\nng-if=\\\"!vm.hideBillingAddress\\\"></md-divider><div ng-if=\\\"!vm.hideBillingAddress\\\" layout=\\\"column\\\" class=\\\"pt-10 pb-10\\\">\\n<div layout=\\\"row\\\"><span class=\\\"h4 text-bold mb-8\\\" flex>{{\\'ORDER.BILLING_ADDRESS\\' | translate}}</span><md-button \\nclass=\\\"md-primary no-margin\\\" \\nng-if=\\\"vm.canEditContact && !vm.fetchingBillingAddress && vm.contact && vm.billingAddress\\\" \\nng-click=\\\"vm.changeBillingAddress()\\\">{{\\'ORDER.CHANGE\\' |translate}}</md-button></div><div \\nng-if=\\\"vm.fetchingBillingAddress\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-primary\\\" \\nmd-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div><div \\nng-if=\\\"!vm.contact && !vm.fetchingBillingAddress\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><em class=\\\"hint-text\\\">\\n{{\\'ORDER.NO_CUSTOMER\\' | translate}}</em></div><div layout=\\\"column\\\" ng-if=\\\"vm.billingAddress\\\"><span>\\n{{vm.billingAddress.address_1}}</span><span>\\n{{vm.billingAddress.zip}} {{vm.billingAddress.city}} {{vm.billingAddress.state}} {{vm.billingAddress.country}}</span> \\n<span>{{vm.billingAddress.phone}}</span></div><div layout=\\\"column\\\" ng-if=\\\"vm.contact && !vm.billingAddress\\\">\\n<md-input-container><label>{{\\'ORDER.SELECT_AN_ADDRESS\\' | translate}}</label><md-select ng-model=\\\"vm.billingAddress\\\" \\nng-disabled=\\\"!vm.canEditContact\\\" class=\\\"nd-input mb-0 h-40\\\" ng-change=\\\"vm.billingAddressChanged()\\\" \\nplaceholder=\\\"{{\\'ORDER.SELECT_AN_ADDRESS\\' | translate}}\\\"><md-option ng-repeat=\\\"address in vm.contact.postal_addresses\\\" \\nng-value=\\\"address\\\">{{address | location}}</md-option><md-option \\nng-click=\\\"vm.showNewAddressDialog($event, \\'billingAddress\\')\\\" class=\\\"md-primary-fg\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\"></md-icon><span flex>\\n{{\\'ORDER.CREATE_NEW_ADDRESS\\' | translate}}</span></div></md-option></md-select></md-input-container></div></div>\\n</md-card-content></md-card><div style=\\\"visibility: hidden\\\"><div class=\\\"md-dialog-container\\\" id=\\\"new-address-dialog\\\">\\n<md-dialog><md-dialog-content layout=\\\"column\\\" flex><h2 class=\\\"mb-30\\\">{{\\'ORDER.NEW_ADDRESS\\'| translate}}</h2><div \\nng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/address-form.html\\'\\\"></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" class=\\\"no-padding\\\"><md-button ng-click=\\\"vm.closeDialog()\\\" translate=\\\"GENERAL.CANCEL\\\">\\nCancel</md-button><md-button class=\\\"md-primary\\\" ng-click=\\\"vm.saveAddress()\\\" translate=\\\"GENERAL.SAVE\\\">Create</md-button>\\n</md-dialog-actions></md-dialog></div></div>\");\n$templateCache.put(\"app/directives/pos-order-fulfillment-card/fulfillment-stock-dialog.html\",\"<md-dialog layout=\\\"column\\\" style=\\\"width: 70%\\\"><div layout=\\\"row\\\" class=\\\"md-padding\\\"><span class=\\\"h2\\\">\\n{{vm.selectedProductStock.code}}</span> <span flex></span><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.cancel()\\\">\\n<md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"md-padding\\\" ng-if=\\\"!vm.showStockDetails\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"40px\\\"></md-progress-circular></div>\\n<nd-product-stock-kpis ng-if=\\\"vm.showStockDetails && vm.warehouses && vm.selectedProductStock\\\" \\nproduct=\\\"vm.selectedProductStock\\\" product-variant=\\\"vm.selectedProductVariant\\\" allow-edition=\\\"false\\\" \\nhide-aggregates=\\\"true\\\" warehouses=\\\"vm.warehouses\\\" class=\\\"m-10\\\"></nd-product-stock-kpis></md-dialog>\");\n$templateCache.put(\"app/directives/pos-order-fulfillment-card/nd-pos-order-fulfillment-card.html\",\"<md-card class=\\\"nd-pos-order-fulfillment-card\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" \\nng-if=\\\"fulfillment.origin_code\\\">{{fulfillment.origin_code}} </span><span class=\\\"h3\\\" ng-if=\\\"!fulfillment.origin_code\\\">\\n{{\\'ORDER.FULFILLMENT\\' | translate}} #{{vm.fulfillment.number}}</span><nd-fulfillment-text-box \\ntype=\\\"vm.fulfillment.type\\\" ng-if=\\\"vm.fulfillment.type\\\"></nd-fulfillment-text-box></div><span>\\n{{fulfillment.updated_at | date: \\'medium\\'}}</span></div><a \\nng-if=\\\"vm.fulfillment.sendcloud_pos_order_fulfillment_data && vm.isExternalShipment(vm.fulfillment)\\\" class=\\\"ml-20\\\" \\ntarget=\\\"_blank\\\" ng-href=\\\"{{vm.sendcloudUrl}}\\\">ID: {{vm.fulfillment.sendcloud_pos_order_fulfillment_data.order_number}} \\n</a><span flex></span><div ng-if=\\\"!fulfillment.updatingAmounts && !vm.order.is_negated\\\"><md-button \\nng-click=\\\"vm.allocateFulfillment(fulfillment)\\\" ng-disabled=\\\"!vm.order.canAllocateItems()\\\" \\nng-if=\\\"vm.fulfillment.allowAllocate() && vm.order.allowToFulfillOnPlatform() && !vm.isExternalShipment(fulfillment)\\\">\\n{{\\'ORDER.ALLOCATE\\' | translate}}</md-button><md-button ng-click=\\\"vm.pickUpFulfillment(fulfillment)\\\" \\nng-disabled=\\\"!vm.order.canPickUpItems()\\\" \\nng-if=\\\"vm.fulfillment.allowPickUp() && vm.order.allowToFulfillOnPlatform() && !vm.isExternalShipment(fulfillment)\\\">\\n{{\\'ORDER.PICK_UP\\' | translate}}</md-button><md-button ng-disabled=\\\"!vm.order.canShipItems()\\\" \\nng-click=\\\"vm.shipFulfillment(fulfillment)\\\" \\nng-if=\\\"vm.fulfillment.allowShip() && vm.order.allowToFulfillOnPlatform() && !vm.isExternalShipment(fulfillment)\\\">\\n{{\\'ORDER.SHIP\\' | translate}}</md-button><md-button ng-disabled=\\\"!vm.order.canReturnItems()\\\" \\nng-click=\\\"vm.returnFulfillment(fulfillment)\\\" \\nng-if=\\\"vm.fulfillment.allowReturn() && vm.order.allowReturn() && !vm.isExternalShipment(fulfillment) && !vm.order.is_devolution\\\">\\n{{\\'ORDER.RETURN\\' | translate}}</md-button><md-button ng-disabled=\\\"!vm.order.canReceiveReturnItems()\\\" \\nng-click=\\\"vm.receiveReturnFulfillment(fulfillment)\\\" \\nng-if=\\\"vm.fulfillment.allowReceiveReturn() && (vm.order.allowReceiveReturn() && !vm.isExternalShipment(fulfillment) || vm.fulfillment.hasManualReturnPolicy(vm.order))\\\">\\n{{\\'ORDER.RECEIVE_RETURN\\' | translate}}</md-button><md-menu md-position-mode=\\\"target-right target\\\" \\nng-if=\\\"vm.showFulfillmentActions(fulfillment)\\\" ng-show=\\\"!vm.isExternalShipment(fulfillment)\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu($event)\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content><md-menu-item ng-if=\\\"vm.fulfillment.allowRefund() && vm.order.allowRefund()\\\"><md-button \\nng-click=\\\"vm.refundFulfillment(fulfillment)\\\" ng-disabled=\\\"!vm.order.canUpdateFulfillments()\\\">\\n{{\\'ORDER.REFUND\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.fulfillment.allowRefundAndReturn() && vm.order.allowRefundAndReturn()\\\"><md-button \\nng-click=\\\"vm.refundAndReturnFulfillment(fulfillment)\\\" ng-disabled=\\\"!vm.order.canUpdateFulfillments()\\\">\\n{{\\'ORDER.REFUND_RETURN\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.fulfillment.allowBackToShipped()\\\"><md-button ng-disabled=\\\"!vm.order.canBackToShippedFulfillment()\\\" \\nng-click=\\\"vm.shipFulfillment(fulfillment)\\\">{{\\'ORDER.BACK_TO_SHIPPED_FULFILLMENT\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item ng-if=\\\"vm.fulfillment.allowBackToPickedUp()\\\"><md-button \\nng-disabled=\\\"!vm.order.canBackToPickedUpFulfillment()\\\" ng-click=\\\"vm.pickUpFulfillment(fulfillment)\\\">\\n{{\\'ORDER.BACK_TO_PICKED_UP_FULFILLMENT\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.fulfillment.allowBackToPending()\\\"><md-button ng-disabled=\\\"!vm.order.canBackToPendingFulfillment()\\\" \\nng-click=\\\"vm.pendingFulfillment(fulfillment)\\\">{{\\'ORDER.BACK_TO_PENDING_FULFILLMENT\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item ng-if=\\\"vm.fulfillment.allowBackToReturned()\\\"><md-button \\nng-disabled=\\\"!vm.order.canBackToReturnedFulfillment()\\\" ng-click=\\\"vm.returnFulfillment(fulfillment)\\\">\\n{{\\'ORDER.BACK_TO_RETURNED_FULFILLMENT\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.fulfillment.allowCancel()\\\"><md-button ng-disabled=\\\"!vm.order.canCancelFulfillment()\\\" \\nng-click=\\\"vm.cancelFulfillment(fulfillment)\\\">{{\\'ORDER.CANCEL_FULFILLMENT\\' | translate}}</md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button ng-click=\\\"vm.changeWarehouse(fulfillment)\\\">\\n{{\\'ORDER.CHANGE_WAREHOUSE\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.fulfillment.canAssignBatches(vm.order)\\\"><md-button ng-click=\\\"vm.assignBatches(fulfillment)\\\" \\nng-disabled=\\\"vm.saving\\\">{{\\'STOCK_DETAILS.ASSIGN_BATCHES\\' | translate}}</md-button></md-menu-item><md-menu-item>\\n<md-button ng-click=\\\"vm.printDelivery(fulfillment)\\\">{{\\'ORDER.PRINT_DELIVERY\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item class=\\\"border-top\\\" ng-if=\\\"vm.showSendToSendcloud()\\\"><md-button \\nng-click=\\\"vm.labelToSendcloud(fulfillment)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" class=\\\"mr-8\\\"></md-icon>\\n{{\\'ORDERS.TAG_WITH_SENDCLOUD\\' | translate}}</div></md-button></md-menu-item></md-menu-content></md-menu></div><div \\nng-if=\\\"vm.fulfillment.updatingAmounts && !vm.order.is_negated\\\"><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.cancel(fulfillment)\\\" ng-disabled=\\\"vm.saving\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button \\nng-click=\\\"vm.updateFulfillment(fulfillment)\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.saving || !vm.amountUpdated\\\" \\nng-if=\\\"vm.fulfillment.updatingAmounts && !vm.isExternalShipment(fulfillment) && !vm.scanAndGo\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-progress-circular md-diameter=\\\"20px\\\" ng-if=\\\"vm.saving\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span flex>{{\\'ORDER.\\' + fulfillment.updatingAction.toUpperCase() | translate}}</span></div>\\n</md-button><md-button ng-click=\\\"vm.packWithSendcloud(fulfillment)\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.saving || !vm.amountUpdated || !vm.selectedSendcloudShippingMethod || vm.sendcloudShippingMethodsLoading === true\\\" \\nng-if=\\\"vm.fulfillment.updatingAmounts && !vm.isExternalShipment(fulfillment) && vm.scanAndGo\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-progress-circular md-diameter=\\\"20px\\\" \\nng-if=\\\"vm.saving || vm.sendcloudShippingMethodsLoading === true\\\" class=\\\"mh-8\\\"></md-progress-circular><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" ng-if=\\\"!vm.saving\\\" class=\\\"s16 mr-5\\\">\\n</md-icon><span translate=\\\"ORDERS.TAG_WITH_SENDCLOUD\\\"></span></div></md-button></div></div></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"no-padding\\\"><div flex layout=\\\"column\\\" class=\\\"products-table md-padding pt-0\\\">\\n<div ng-if=\\\"fulfillment.isInPickingPackingProcess()\\\" class=\\\"did-you-know yellow mb-10\\\" layout=\\\"column\\\" \\nlayout-gt-md=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\"><span class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.WARNING_PICKING_AND_PACKING_TEXT\\\"></span></div><div layout=\\\"row\\\" layout-align=\\\"center start\\\" \\nlayout-align-gt-md=\\\"start center\\\"><md-button class=\\\"yellow-fg\\\" ng-click=\\\"vm.goPickingAndPackingView(fulfillment)\\\">\\n{{\\\"ORDER.WARNING_PICKING_AND_PACKING_BUTTON\\\" | translate}}</md-button></div></div><table class=\\\"simple compact\\\"><tbody>\\n<tbody ng-repeat=\\\"pofpv in fulfillment.getVisiblePosOrderFulfillmentProductVariantInstances()\\\" \\nng-class=\\\"vm.getPosOrderFulfillmentProductVariantRowClasses(pofpv)\\\" class=\\\"pofpv-row feedback-when-appears\\\"><tr><td \\nclass=\\\"text-center\\\"><span id=\\\"pos-order-product-variant-amount-{{$index}}\\\" \\nng-if=\\\"vm.fulfillment.showTextAmounts(vm.order)\\\">{{pofpv.amount}}</span><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"vm.fulfillment.showInputAmounts(vm.order) && pofpv.maxReturnableAmount > 0\\\"><input \\nclass=\\\"nd-input text-right w-50\\\" type=\\\"number\\\" ng-model=\\\"pofpv.uploadAmount\\\" ng-change=\\\"vm.checkMinMaxAmount(pofpv)\\\"> \\n<small class=\\\"secondary-text nowrap ml-5\\\">/ {{pofpv.maxReturnableAmount}}</small></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.fulfillment.showInputAmounts(vm.order) && pofpv.maxReturnableAmount <= 0\\\"><small \\nclass=\\\"text-boxed orange\\\">{{\\'ORDER.ALL_PRODUCTS_RETURNED\\' | translate}}</small></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" ng-if=\\\"vm.fulfillment.showRefundInputAmounts()\\\"><input class=\\\"nd-input text-right w-50\\\" \\ntype=\\\"number\\\" ng-disabled=\\\"pofpv.maxRefundUploadAmount === 0\\\" ng-model=\\\"pofpv.refundUploadAmount\\\" \\nng-change=\\\"vm.refundUploadAmountChanged(pofpv)\\\"> <small class=\\\"secondary-text nowrap ml-5\\\">\\n/ {{pofpv.maxRefundUploadAmount}}</small></div></td><td ng-if=\\\"vm.order.has_bundles\\\"><md-button \\nclass=\\\"md-button m-0 h-30 pr-0 pack-button\\\" \\nng-class=\\\"{\\'md-white-bg orange-900-fg\\': pofpv.pos_order_product_variant_instance.amount < 0,\\n                                  \\'md-blue-50-bg md-primary\\': pofpv.pos_order_product_variant_instance.amount > 0 }\\\" \\nng-if=\\\"pofpv.pos_order_product_variant_instance.is_bundle\\\" ng-click=\\\"vm.showAndHideBundleVariants(pofpv)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"h-30\\\">{{\\'PRODUCT.PACK\\' | translate}}<md-icon \\nmd-font-icon=\\\"icon-chevron-up\\\" class=\\\"toggle-icon no-margin\\\" \\nng-class=\\\"{\\'upside-down\\': !pofpv.pos_order_product_variant_instance.showBundle,\\n                                    \\'orange-900-fg\\': pofpv.pos_order_product_variant_instance.amount < 0}\\\">\\n</md-icon></div></md-button></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"thumbnail-40 mr-10\\\" \\nng-class=\\\"{\\'default-icon\\': !pofpv.pos_order_product_variant_instance.cover_thumbnail}\\\" \\nsrc=\\\"{{pofpv.pos_order_product_variant_instance.cover_thumbnail ? pofpv.pos_order_product_variant_instance.cover_thumbnail : \\'/assets/images/package-variant-closed.9c71cbbe.png\\'}}\\\">\\n<div layout=\\\"column\\\" class=\\\"mr-8\\\"><a ng-if=\\\"pofpv.pos_order_product_variant_instance.product\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:pofpv.pos_order_product_variant_instance.product})\\\">\\n{{::pofpv.getProductInstanceFullName()}} </a><span ng-if=\\\"!pofpv.pos_order_product_variant_instance.product\\\">\\n{{::pofpv.pos_order_product_variant_instance.product_name }} </span><small class=\\\"secondary-text\\\" \\nng-if=\\\"!pofpv.pos_order_product_variant_instance.is_gift_card\\\">{{::pofpv.pos_order_product_variant_instance.sku}} <span\\n ng-if=\\\"pofpv.pos_order_product_variant_instance.sku && pofpv.pos_order_product_variant_instance.barcode\\\">-</span> \\n<span ng-if=\\\"pofpv.pos_order_product_variant_instance.barcode\\\" class=\\\"barcode-text\\\">\\n{{::pofpv.pos_order_product_variant_instance.barcode}}</span><span class=\\\"uid-text\\\" \\nng-if=\\\"pofpv.uids && pofpv.uids.length > 0\\\">{{::pofpv.getPosOrderProductVariantInstanceLots()}} </span></small><small \\nng-if=\\\"vm.isReturnedInStore(pofpv.pos_order_product_variant_instance.devolutions_of)\\\"><span \\nclass=\\\"orange-100-bg text-pill m-0\\\">{{\\'SALES_LOG.RETURNED_AT\\' |translate}} <a class=\\\"ml-5 cursor-pointer\\\" \\nng-repeat=\\\"devolution in pofpv.pos_order_product_variant_instance.devolutions_of\\\" \\nng-click=\\\"vm.showSaleDialog(devolution.pos_order_id)\\\">{{::devolution.pos_order_autocode}}</a></span></small></div><span\\n class=\\\"text-boxed orange\\\" ng-if=\\\"pofpv.refunds != undefined\\\">{{::pofpv.getRefundString(vm.order)}}</span></div></td>\\n<td ng-if=\\\"vm.showBoxAndWeightInLines()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-select \\nng-if=\\\"vm.showBoxInLines(pofpv)\\\" ng-model=\\\"pofpv.pos_order_fulfillment_shipping_box\\\" \\nng-disabled=\\\"vm.saving || vm.canReadShippingBoxes()\\\" placeholder=\\\"{{\\'ORDER.PACKAGE\\' | translate}}\\\" \\nclass=\\\"nd-input no-border\\\"><md-option \\nng-repeat=\\\"pofsb in vm.fulfillment.pos_order_fulfillment_shipping_box_instances | orderBy: \\'id\\'\\\" ng-value=\\\"pofsb.id\\\">\\n{{\\'ORDER.PACKAGE\\' | translate}} {{$index + 1}}</md-option></md-select><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.showLineWeight()\\\"><span class=\\\"mh-5 nowrap\\\">{{pofpv.uploadAmount}} x</span> <input \\nclass=\\\"nd-input weight-input\\\" placeholder=\\\"{{\\'ORDER.WEIGHT\\' | translate}}\\\" ng-model=\\\"pofpv.weight\\\" \\nng-disabled=\\\"vm.lineWeightDisabled(pofpv)\\\" type=\\\"number\\\" min=\\\"0\\\" step=\\\"0.1\\\"> <span class=\\\"pr-8\\\">\\n{{vm.getWeightUnit(pofpv)}}</span></div></div></td><td class=\\\"text-center\\\"><md-button \\nng-click=\\\"vm.viewStock(pofpv.pos_order_product_variant_instance, $event)\\\" \\nng-if=\\\"!pofpv.pos_order_product_variant_instance.is_bundle\\\" class=\\\"no-margin md-icon-button show-stock-button\\\" \\nng-class=\\\"{\\'md-primary\\': !pofpv.in_stockout,\\n                                  \\'md-amber-500-bg\\': pofpv.in_stockout}\\\">\\n<md-tooltip ng-show=\\\"!pofpv.in_stockout\\\">{{\\'ORDER.SEE_STOCK\\' |translate}}</md-tooltip><md-icon \\nng-show=\\\"!pofpv.in_stockout\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/view-stock.5f2d642c.svg\\\"></md-icon>\\n<md-tooltip ng-show=\\\"pofpv.in_stockout\\\">{{\\'SALES.PRODUCT_OUT_OF_STOCK\\' |translate}}</md-tooltip><md-icon \\nng-show=\\\"pofpv.in_stockout\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed-alert.afe7da6a.svg\\\">\\n</md-icon></md-button></td><td class=\\\"text-right\\\"><div ng-if=\\\"vm.fulfillment.isUpdatingActionRefund()\\\"><input \\nng-disabled=\\\"vm.order.isShopifyOrder()\\\" class=\\\"nd-input text-right w-75\\\" type=\\\"number\\\" \\nplaceholder=\\\"{{\\'ORDER.AMOUNT\\' | translate}}\\\" ng-model=\\\"pofpv.total_refund\\\"></div><div layout=\\\"column\\\" \\nlayout-align=\\\"start end\\\" ng-if=\\\"!vm.fulfillment.isUpdatingActionRefund()\\\"><span \\nid=\\\"pos-order-product-variant-price-{{$index}}\\\" class=\\\"nowrap\\\">\\n{{pofpv.total | price}} {{vm.order.currency | currencyCharacter}} </span><span \\nid=\\\"pos-order-product-variant-original-price-{{$index}}\\\" class=\\\"secondary-text text-strike nowrap\\\" \\nng-if=\\\"pofpv.pos_order_product_variant_instance.showStrikePrice()\\\">\\n{{ pofpv.getOriginalTotal(true) | price}} {{::vm.order.currency | currencyCharacter}}</span></div></td></tr><tr \\nng-if=\\\"pofpv.custom_attributes && pofpv.custom_attributes.length\\\"><td></td><td colspan=\\\"4\\\" class=\\\"custom-attributes\\\">\\n<div class=\\\"pl-50\\\"><div ng-if=\\\"pofpv.custom_attributes\\\" class=\\\"secondary-text\\\" \\nng-repeat=\\\"custom_attribute in pofpv.custom_attributes\\\"><small ng-if=\\\"!custom_attribute.value\\\">{{custom_attribute.key}}\\n</small> <small ng-if=\\\"custom_attribute.value\\\">{{custom_attribute.key}}:</small> <small class=\\\"black-500-fg\\\" \\nng-if=\\\"custom_attribute.value\\\">{{custom_attribute.value}}</small></div></div></td></tr><tr \\nng-show=\\\"pofpv.pos_order_product_variant_instance.showBundle\\\" \\nng-class=\\\"{\\'md-orange-50-bg\\': pofpv.pos_order_product_variant_instance.amount < 0,\\n                       \\'md-blue-50-bg\\': pofpv.pos_order_product_variant_instance.amount > 0}\\\" \\nng-repeat=\\\"bundleVariant in pofpv.pos_order_product_variant_instance.pos_order_bundle_content\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span ng-if=\\\"pofpv.pos_order_product_variant_instance.amount < 0\\\">-</span> <span>\\n{{ bundleVariant.amount }}</span></div></td><td></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img \\nclass=\\\"thumbnail-40 mr-10\\\" ng-class=\\\"{\\'default-icon\\': !bundleVariant.cover_thumbnail}\\\" \\nsrc=\\\"{{vm.getPopvCover(bundleVariant)}}\\\"><div layout=\\\"column\\\" class=\\\"mr-8\\\"><a ng-if=\\\"bundleVariant.product\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:bundleVariant.product})\\\">{{::bundleVariant.product_name }} </a>\\n<span ng-if=\\\"!bundleVariant.product\\\">{{::bundleVariant.product_name }} </span><small><span \\nng-if=\\\"bundleVariant.product_code\\\">{{ bundleVariant.product_code }} | </span><span ng-if=\\\"bundleVariant.size_name\\\">\\n{{ bundleVariant.size_name }} - </span><span ng-if=\\\"bundleVariant.color_name\\\">{{ bundleVariant.color_name }} - </span>\\n</small><small class=\\\"m-0 secondary-text\\\"><span ng-if=\\\"bundleVariant.brand_name\\\">{{::bundleVariant.brand_name}} </span>\\n<span ng-if=\\\"bundleVariant.brand_name && bundleVariant.uid_stock_uid\\\">| </span><span \\nng-if=\\\"bundleVariant.uid_stock_uid\\\">{{::bundleVariant.uid_stock_uid}}</span></small></div></div></td><td \\nclass=\\\"text-center\\\"><md-button ng-click=\\\"vm.viewStock(bundleVariant, $event)\\\" \\nclass=\\\"md-icon-button show-stock-button md-primary\\\"><md-tooltip>{{\\'ORDER.SEE_STOCK\\' |translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/view-stock.5f2d642c.svg\\\">></md-icon></md-button></td><td></td></tr>\\n</tbody></tbody></table><div layout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"vm.fulfillment.isUpdatingActionRefund()\\\" \\nclass=\\\"mr-16\\\"><md-input-container class=\\\"m-0\\\" md-is-error=\\\"vm.fulfillment.refundPaymentMethodError\\\"><md-select \\nplaceholder=\\\"{{\\'ORDER.PAYMENT_METHOD\\' | translate}}\\\" class=\\\"nd-input m-0\\\" \\nng-model=\\\"vm.fulfillment.refundPaymentMethod\\\" ng-change=\\\"vm.fulfillment.refundPaymentMethodError = false\\\" \\nname=\\\"refund-payment-method\\\" required><md-option ng-repeat=\\\"paymentMethod in vm.paymentMethods | orderBy: \\'position\\'\\\" \\nng-value=\\\"paymentMethod.id\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"{{paymentMethod.icon}}\\\" style=\\\"color:#{{paymentMethod.foreground_color}}\\\"></md-icon><span class=\\\"ml-8\\\" \\nflex>{{paymentMethod.name}}</span></div></md-option></md-select><div ng-if=\\\"vm.fulfillment.refundPaymentMethodError\\\" \\nclass=\\\"md-warn-fg\\\">{{\\'ORDER.THIS_FIELD_IS_REQUIRED\\' | translate}}</div></md-input-container></div><div \\nclass=\\\"extra-data-div\\\"><div class=\\\"extra-data-row\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.scanAndGo\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\" class=\\\"mr-8\\\"></md-icon>\\n<span class=\\\"extra-data-row-name\\\">{{\\'ORDER.STOCK_WAREHOUSE\\' | translate}}</span><div \\nng-show=\\\"vm.fulfillment.allowChangeWarehouse() || vm.fulfillment.isChangingWarehouseAction()\\\"><md-select \\nclass=\\\"nd-input outlined white\\\" ng-model=\\\"vm.fulfillment.custom_source_warehouse\\\" \\nng-init=\\\"vm.initCustomSourceWarehouse()\\\"><md-option ng-value=\\\"vm.warehousesDict[vm.order.source_warehouse].id\\\">\\n{{vm.warehousesDict[vm.order.source_warehouse].name}}</md-option><md-optgroup \\nlabel=\\\"{{\\'ORDER.OTHER_WAREHOUSES\\' | translate}}\\\"><md-option ng-value=\\\"warehouse\\\" \\nng-repeat=\\\"warehouse in vm.fulfillmentAvailableWarehouses\\\">{{vm.warehousesDict[warehouse].name}}</md-option>\\n</md-optgroup></md-select></div><div \\nng-show=\\\"!fulfillment.allowChangeWarehouse() && !fulfillment.isChangingWarehouseAction()\\\" class=\\\"secondary-text\\\">\\n{{vm.warehousesDict[fulfillment.custom_source_warehouse || vm.order.source_warehouse].name}}<md-tooltip \\nmd-direction=\\\"right\\\">{{vm.warehousesDict[fulfillment.custom_source_warehouse || vm.order.source_warehouse] | location}}\\n</md-tooltip></div><span flex></span></div><div class=\\\"extra-data-row\\\" layout=\\\"row\\\" layout-align=\\\"start stretch\\\" \\nng-if=\\\"vm.fulfillment.packing_order_sendcloud_data.length\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" class=\\\"mr-8\\\"></md-icon><span \\nclass=\\\"extra-data-row-name\\\" flex>Sendcloud</span></div><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"full-width\\\" \\nng-repeat=\\\"spofd in vm.fulfillment.packing_order_sendcloud_data | orderBy: \\'created_at\\'\\\"><span \\nng-if=\\\"spofd.tracking_number\\\">{{spofd.tracking_number}}<md-tooltip>{{\\'SCAN_AND_GO.TRACKING_NUMBER\\' | translate}}\\n</md-tooltip></span><span flex></span><md-button class=\\\"md-primary no-margin\\\" ng-if=\\\"spofd.parcelUrl\\\" \\nng-disabled=\\\"vm.cancelParcel\\\" ng-click=\\\"vm.cancelItem(spofd)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"GENERAL.CANCEL\\\"></span></div></md-button><md-button class=\\\"md-primary no-margin\\\" ng-if=\\\"spofd.parcelUrl\\\" \\ntarget=\\\"_blank\\\" href=\\\"{{spofd.parcelUrl}}\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span class=\\\"mr-5\\\" \\ntranslate=\\\"SCAN_AND_GO.VIEW_IN_SENDCLOUD\\\"></span><md-icon md-font-icon=\\\"icon-open-in-new\\\" class=\\\"s16\\\"></md-icon></div>\\n</md-button><md-button class=\\\"md-primary no-margin\\\" ng-if=\\\"spofd.parcelUrl\\\" ng-disabled=\\\"vm.printingSendcloudLabels\\\" \\nng-click=\\\"vm.getLabel(spofd)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span translate=\\\"SCAN_AND_GO.VIEW_LABEL\\\">\\n</span></div></md-button></div></div></div></div><div class=\\\"extra-data-div\\\" \\nng-show=\\\"sendcloudShippingMethods.length > 0\\\"><div class=\\\"extra-data-row\\\" layout=\\\"row\\\" layout-align=\\\"start stretch\\\" \\nng-if=\\\"vm.canEditShippingMethods()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" class=\\\"mr-8\\\"></md-icon><span \\nclass=\\\"extra-data-row-name\\\">{{\\'ORDER.SHIPPING_METHOD\\' | translate}}</span></div><div layout=\\\"row\\\" flex \\nlayout-align=\\\"start center\\\"><md-select ng-model=\\\"vm.selectedSendcloudShippingMethod\\\" \\nng-change=\\\"vm.storeShippingMethod()\\\" ng-model-options=\\\"{debounce:500}\\\" ng-disabled=\\\"vm.saving\\\" \\nclass=\\\"nd-input outlined white no-border\\\" flex md-on-close=\\\"vm.shippingMethodSearch = \\'\\'\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input class=\\\"md-text\\\" ng-model=\\\"vm.shippingMethodSearch\\\" \\ntype=\\\"search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header>\\n<md-option \\nng-repeat=\\\"sendcloudShippingMethod in sendcloudShippingMethods | orderBy: \\'id\\' | filter:vm.shippingMethodSearch\\\" \\nng-value=\\\"sendcloudShippingMethod.id\\\">{{sendcloudShippingMethod.name}}</md-option></md-select><div \\nng-if=\\\"!volumetricWeight\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"pr-8\\\">{{vm.getRealWeight(true)}}</span>\\n <span class=\\\"pr-8\\\">{{vm.weightUnit}}</span></div></div></div><div class=\\\"extra-data-row\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start stretch\\\" ng-if=\\\"vm.canAddShippingBox()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"mr-8\\\"></md-icon><span class=\\\"extra-data-row-name\\\" flex \\nng-if=\\\"!vm.fulfillment.pos_order_fulfillment_shipping_box_instances.length\\\">\\n{{\\'CONFIGURATION.SHIPPING_BOXES\\' | translate}}</span></div><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" \\nng-repeat=\\\"pofsb in vm.fulfillment.pos_order_fulfillment_shipping_box_instances | orderBy: \\'id\\'\\\"><span \\nclass=\\\"extra-data-row-name\\\">{{\\'ORDER.PACKAGE\\' | translate}} {{$index + 1}}</span><md-select \\nng-model=\\\"pofsb.shipping_box\\\" ng-model-options=\\\"{debounce:500}\\\" ng-change=\\\"vm.updateShippingBox(pofsb)\\\" \\nng-disabled=\\\"vm.saving\\\" class=\\\"nd-input outlined white no-border\\\" flex><md-option ng-value=\\\"shippingBox.id\\\" \\nng-repeat=\\\"shippingBox in vm.shippingBoxes\\\">{{shippingBox.getFullName()}}</md-option></md-select><div \\nng-if=\\\"volumetricWeight\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"pr-8\\\">\\n{{vm.getVolumetricWeight(pofsb, true)}}</span> <span class=\\\"pr-8\\\">{{vm.weightUnit}}</span></div><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.removeShippingBox(pofsb)\\\"><md-icon ng-if=\\\"!pofsb.removing\\\" \\nmd-font-icon=\\\"icon-close\\\"></md-icon><md-progress-circular ng-if=\\\"pofsb.removing\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></md-button></div></div><div layout=\\\"row\\\" layout-align=\\\"end end\\\">\\n<md-button class=\\\"md-icon-button md-primary no-margin\\\" ng-disabled=\\\"vm.creatingShippingBox\\\" \\nng-click=\\\"vm.createShippingBox(true)\\\"><md-icon ng-if=\\\"!vm.creatingShippingBox\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n<md-progress-circular ng-if=\\\"vm.creatingShippingBox\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n</md-button></div></div><div class=\\\"extra-data-row\\\" layout=\\\"row\\\" layout-wrap layout-align=\\\"start center\\\" \\nng-if=\\\"vm.scanAndGo\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"50\\\"><md-switch \\nng-model=\\\"vm.printDeliveriesAutomatically\\\" ng-change=\\\"vm.storePrintDeliveriesAutomatically()\\\" class=\\\"mr-0\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><span class=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.PRINT_DELIVERIES\\\"></span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'SCAN_AND_GO.PRINT_DELIVERIES_AND_LABELS\\' | translate}}\\n</md-tooltip></md-icon></div></md-switch></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"50\\\"><span \\nng-click=\\\"vm.volumetricWeight = false;\\\" class=\\\"cursor-pointer mr-5\\\" translate=\\\"SCAN_AND_GO.USE_REAL_WEIGHT\\\"></span>\\n<md-switch ng-model=\\\"vm.volumetricWeight\\\" ng-change=\\\"vm.storeVolumetricWeight()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex><span class=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.USE_VOLUMETRIC_WEIGHT\\\"></span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'SCAN_AND_GO.VOLUMETRIC_WEIGHT_HELP\\' | translate}}</md-tooltip>\\n</md-icon></div></md-switch></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"50\\\"><md-switch \\nng-model=\\\"vm.printLabelsAutomatically\\\" ng-change=\\\"vm.storePrintLabelsAutomatically()\\\" class=\\\"mr-0\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.PRINT_LABELS_AUTOMATICALLY\\\"></span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'SCAN_AND_GO.PRINT_LABELS_ONCE_ALL_SCANNED\\' | translate}}\\n</md-tooltip></md-icon></div></md-switch></div></div></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/pos-order-payment-methods-card/nd-pos-order-payment-methods-card.html\",\"<md-card class=\\\"nd-pos-order-payment-methods-card\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">\\n{{\\'ORDER.PAYMENT\\' | translate}}</span> <span ng-if=\\\"vm.order.autocode\\\" style=\\\"margin-left: 8px !important\\\" \\nng-class=\\\"vm.order.getPaymentStatusColor()\\\">{{vm.order.getPaymentStatusText() | translate}}</span></div><span flex>\\n</span><md-progress-circular ng-if=\\\"saving\\\" class=\\\"md-primary\\\" md-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular><md-button class=\\\"m-0 md-primary stroked\\\" ng-disabled=\\\"saving\\\" \\nng-if=\\\"vm.order.canEditPosOrderPaymentMethods()\\\" ng-click=\\\"vm.addPayment()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'ORDER.ADD_PAYMENT\\' | translate}}</div>\\n</md-button></div></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" class=\\\"payments-columns\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex ng-if=\\\"vm.order.discount_excl_tax\\\" class=\\\"payment-row\\\"><span>\\n{{\\'ORDER.SUBTOTAL_BEFORE_DISCOUNT\\' | translate}}</span> <span flex></span> <span>\\n{{vm.order.getSubtotal(true) | price}} {{vm.order.currency | currencyCharacter}}</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex ng-if=\\\"vm.order.discount_excl_tax\\\" class=\\\"payment-row\\\"><span>\\n{{\\'ORDER.SUBTOTAL_DISCOUNT\\' | translate }}</span> <span flex></span> <span>\\n{{-1 * vm.order.discount_incl_tax | price}} {{vm.order.currency | currencyCharacter}}</span></div><div \\nng-if=\\\"vm.order.balance_discount\\\" class=\\\"border-bottom total-breakdown-group\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex class=\\\"payment-row\\\"><span>{{\\'SALES.TOTAL_WITHOUT_DISCOUNT\\' | translate }}</span> <span\\n flex></span> <span>{{vm.order.total_without_discount | price}} {{vm.order.currency | currencyCharacter}}</span></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"payment-row balance-discount\\\"><span>\\n{{\\'SALES.APPLIED_BALANCE\\' | translate }}</span> <span flex></span> <span>\\n{{-1 * vm.order.balance_discount | price}} {{vm.order.currency | currencyCharacter}}</span></div></div><div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"payment-row\\\"><span>{{\\'SALES_LOG.SUBTOTAL\\' | translate }}</span> \\n<span flex></span> <span>{{vm.order.subtotal | price}} {{vm.order.currency | currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex ng-repeat=\\\"shipping in vm.order.pos_order_shipping_methods\\\" \\nclass=\\\"payment-row\\\"><md-icon md-font-icon=\\\"icon-truck\\\" class=\\\"mr-8\\\"></md-icon><span>{{shipping.shipping_method_name}}\\n</span> <span flex></span> <span>{{shipping.price_excl_tax | price}} {{vm.order.currency | currencyCharacter}}</span>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"payment-row secondary-text\\\"><span>\\n{{\\'SALES_LOG.TOTAL_TAXES\\' | translate }}</span> <span flex></span> <span>\\n{{vm.order.getTotalTaxes() | price}} {{vm.order.currency | currencyCharacter}}</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex class=\\\"text-bold payment-row total-breakdown-group\\\"><span>\\n{{\\'SALES_LOG.TOTAL\\' | translate }}</span> <span flex></span> <span>\\n{{vm.order.total | price}} {{vm.order.currency | currencyCharacter}}</span></div><md-divider class=\\\"mb-16\\\">\\n</md-divider></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"payment-row\\\" \\nng-if=\\\"vm.showNoPaymentMethods()\\\"><em translate=\\\"ORDER.NO_PAYMENT_METHODS\\\" class=\\\"secondary-text hint-text\\\"></em></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex \\nng-repeat=\\\"posOrderPaymentMethod in vm.order.pos_order_payment_methods | orderBy: \\'id\\'\\\" \\nng-if=\\\"!vm.order.canEditPosOrderPaymentMethods() || posOrderPaymentMethod.payment_method_instance.payment_gateway\\\" \\nclass=\\\"payment-row\\\"><md-icon ng-if=\\\"posOrderPaymentMethod.payment_method_instance.payment_gateway\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sa-payment.ab4ded0e.svg\\\"></md-icon><span>\\n{{posOrderPaymentMethod.payment_method_instance.name | translate}}</span> <span class=\\\"text-boxed orange\\\" \\nng-if=\\\"posOrderPaymentMethod.pos_order_refunds && posOrderPaymentMethod.pos_order_refunds.length\\\">\\n{{\\'ORDER.REFUND_PAYMENT_METHOD\\' | translate}} </span><span flex></span> <span>\\n{{ posOrderPaymentMethod.given_amount | price }} {{vm.order.currency | currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex ng-repeat=\\\"popm in vm.order.pos_order_payment_methods | orderBy: \\'id\\'\\\" \\nng-if=\\\"vm.order.canEditPosOrderPaymentMethods() && !popm.payment_method_instance.payment_gateway\\\" \\nclass=\\\"payment-row select-row\\\"><md-select class=\\\"nd-input m-0 w-175\\\" \\nng-disabled=\\\"vm.paymentMethodEditingDisabled(popm)\\\" ng-model=\\\"popm.payment_method\\\" ng-change=\\\"vm.callUpdateOrder()\\\">\\n<md-option ng-repeat=\\\"paymentMethod in vm.paymentMethods | orderBy: \\'position\\'\\\" ng-value=\\\"paymentMethod.id\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"{{paymentMethod.icon}}\\\" \\nstyle=\\\"color:#{{paymentMethod.foreground_color}}\\\"></md-icon><span class=\\\"ml-8 text-truncate\\\" flex>\\n{{paymentMethod.name}}</span></div></md-option></md-select><md-button class=\\\"md-icon-button no-margin\\\" \\nng-disabled=\\\"vm.paymentMethodEditingDisabled(popm)\\\" translate-attr-aria-label=\\\"GENERAL.DELETE\\\" \\nng-click=\\\"vm.deletePayment(popm)\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon><md-tooltip><span \\ntranslate=\\\"GENERAL.DELETE\\\"></span></md-tooltip></md-button><span class=\\\"text-boxed orange\\\" \\nng-if=\\\"popm.pos_order_refunds && popm.pos_order_refunds.length\\\">{{\\'ORDER.REFUND_PAYMENT_METHOD\\' | translate}}</span>\\n<md-button ng-if=\\\"popm.register_activity\\\" ng-click=\\\"vm.goToRegisterActivity(popm.register_activity)\\\" \\nclass=\\\"md-icon-button no-margin\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\"></md-icon><md-tooltip>\\n{{\\'SALES.REGISTER_ACTIVITY_PAYMENT_METHODS\\'| translate: { registerCode: popm.register_activity_instance.register_code, warehouseName: popm.register_activity_instance.warehouse_name, openedAt: (popm.register_activity_instance.opened_at | date: \\'dd-MM-yyyy\\'), } }}\\n</md-tooltip></md-button><span flex></span><md-button class=\\\"md-icon-button m-0\\\" \\nng-if=\\\"vm.order.getPendingToAssigned()\\\" ng-disabled=\\\"vm.paymentMethodEditingDisabled(popm)\\\" \\nng-click=\\\"vm.assignPending(popm)\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/chevron-double-right.e13c8433.svg\\\"></md-icon><md-tooltip>\\n{{\\'ORDER.ASSIGN_PENDING\\' | translate}}</md-tooltip></md-button><input ng-model-options=\\\"{ debounce: 500 }\\\" \\nclass=\\\"nd-input text-right w-75 mr-5\\\" type=\\\"number\\\" ng-disabled=\\\"vm.paymentMethodEditingDisabled(popm)\\\" \\nng-model=\\\"popm.given_amount\\\" ng-change=\\\"vm.updatePayment()\\\"> {{vm.order.currency | currencyCharacter}}</div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex ng-if=\\\"vm.order.output_amount\\\" class=\\\"payment-row\\\"><span>\\n{{\\'SALES_LOG.BALANCE\\' | translate }}</span> <span flex></span> <span>\\n{{vm.order.output_amount | price}} {{vm.order.currency | currencyCharacter}}</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex class=\\\"payment-row\\\"><span>{{\\'SALES.PENDING\\' | translate }}</span> <span flex></span> \\n<span>{{vm.order.getPendingToAssigned() | price}} {{vm.order.currency | currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"orange-fg payment-row\\\" \\nng-if=\\\"vm.order.generated_devolution_card && vm.order.generated_devolution_card.length == 1\\\"><span>\\n{{\\'SALES_LOG.BALANCE\\' | translate}} {{vm.order.generated_devolution_card[0].barcode }}</span> <span flex></span> <span>\\n{{vm.order.generated_devolution_card[0].amount * -1 | price}} {{vm.order.currency | currencyCharacter}}</span></div>\\n</div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/pos-order-product-variants-table/nd-pos-order-product-variants-table.html\",\"<table class=\\\"pos-order-product-variants-table simple compact\\\"><thead><tr><th class=\\\"w-90\\\">\\n{{\\'GENERAL.AMOUNT\\' | translate}}</th><th>{{\\'SALES.PRODUCT\\' | translate}}</th><th class=\\\"text-right\\\">\\n{{\\'SALES.DISCOUNT\\' | translate}}</th><th class=\\\"text-right\\\">{{\\'SALES.PRICE\\' | translate}}</th></tr></thead><tbody><tr \\nng-if=\\\"vm.order.pos_order_product_variants.length == 0 && !vm.order.isFetching\\\"><td colspan=\\\"5\\\" \\nclass=\\\"text-center no-border\\\"><em translate=\\\"SALES.NO_PRODUCTS\\\" class=\\\"secondary-text hint-text\\\">No products selected\\n</em></td></tr><tr><td colspan=\\\"5\\\" class=\\\"loader-td no-border\\\" ng-if=\\\"vm.order.isFetching\\\"><md-progress-linear \\nmd-mode=\\\"indeterminate\\\" class=\\\"animate-fade-in-out md-primary\\\"></md-progress-linear></td></tr><tr \\nng-repeat=\\\"popv in vm.order.pos_order_product_variants | orderBy: \\'id\\'\\\" \\nng-class=\\\"{\\'md-orange-50-bg\\': popv.amount < 0}\\\" class=\\\"feedback-when-appears\\\"><td \\nng-class=\\\"{\\'md-warn-fg\\': popv.devolution_of}\\\" class=\\\"text-center\\\"><input ng-if=\\\"vm.canEditPopvLine(popv)\\\" \\nng-disabled=\\\"saving\\\" ng-model=\\\"popv.amount\\\" min=\\\"{{vm.getMinimumAmount(popv.id)}}\\\" ng-change=\\\"vm.amountChanged(popv)\\\" \\nng-model-options=\\\"{ debounce: 500 }\\\" type=\\\"number\\\" class=\\\"w-60 text-right nd-input pr-10\\\"> <span \\nng-if=\\\"!vm.canEditPopvLine(popv)\\\">{{popv.amount}}</span></td><td class=\\\"product-td\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"table-thumbnails mr-10 thumbnail-40\\\" \\nng-class=\\\"{\\'default-icon\\': !popv.cover_thumbnail}\\\" \\nng-src=\\\"{{popv.cover_thumbnail ? popv.cover_thumbnail : \\'/assets/images/package-variant-closed.9c71cbbe.png\\'}}\\\"><div \\nlayout=\\\"column\\\" class=\\\"mr-8\\\"><a ui-sref=\\\"app.inventory.products.product.overview({id:popv.product})\\\">\\n{{::popv.product_name }} </a><small>\\n{{ popv.product_code }} | {{ popv.product_variant_size_name}} - {{ popv.product_variant_color_name}} </small><small \\nclass=\\\"m-0 secondary-text\\\" ng-if=\\\"!popv.is_gift_card\\\">{{::popv.brand_name}}</small> <span ng-if=\\\"popv.promotion\\\" \\nclass=\\\"m-0\\\">{{ popv.promotion_name}}</span></div><md-button ng-click=\\\"vm.viewStock(popv, $event)\\\" \\nclass=\\\"md-icon-button show-stock-button\\\"><md-tooltip>{{\\'ORDER.SEE_STOCK\\' |translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/view-stock.5f2d642c.svg\\\">></md-icon></md-button></div></td><td><div \\nlayout=\\\"column\\\" flex ng-if=\\\"popv.is_gift_card\\\"><input ng-if=\\\"vm.order.canEditGiftCardCode(popv)\\\" \\nng-model=\\\"popv.gift_card_code\\\" ng-disabled=\\\"saving\\\" class=\\\"text-left nd-input pl-5 pr-5\\\" maxlength=\\\"128\\\" \\nplaceholder=\\\"{{\\'SALES.GIFT_CARD_CODE\\' | translate}}\\\"> <span ng-if=\\\"!vm.order.canEditGiftCardCode(popv)\\\">\\n{{popv.gift_card_code}}</span></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex ng-if=\\\"!popv.is_gift_card\\\"><div \\nng-if=\\\"popv.showDiscountInput() && vm.canEditPopvLine(popv)\\\"><input ng-if=\\\"vm.order.canEditPosOrderProductVariant()\\\" \\nng-model=\\\"popv.discount\\\" ng-keypress=\\\"vm.checkEnterPressed($event)\\\" ng-blur=\\\"vm.finishDiscountEdition(popv)\\\" min=\\\"0\\\" \\nmax=\\\"100\\\" type=\\\"number\\\" flex class=\\\"w-60 text-right nd-input pr-8\\\" \\nng-disabled=\\\"saving || vm.order.amount < 0 || popv.custom_price_incl_tax\\\"> <span class=\\\"w-20 text-right\\\"><span>%</span>\\n</span></div><span ng-if=\\\"popv.showDiscountText() && !vm.canEditPopvLine(popv)\\\">{{popv.discount}} <span \\nclass=\\\"w-20 text-right\\\"><span>%</span></span></span></div></td><td><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><input \\nng-model=\\\"popv.custom_price_incl_tax\\\" placeholder=\\\"{{ popv.total | price}}\\\" \\nng-blur=\\\"vm.finishCustomPriceEdition(popv)\\\" focus-if=\\\"{{popv.editingPrice}}\\\" ng-disabled=\\\"saving\\\" type=\\\"number\\\" \\nng-keypress=\\\"vm.checkEnterPressed($event)\\\" ng-if=\\\"popv.editingPrice && vm.canEditPopvLine(popv)\\\" \\nclass=\\\"text-right w-70 nd-input\\\" md-auto-focus><div layout=\\\"column\\\" layout-align=\\\"start end\\\" \\nng-if=\\\"!(popv.editingPrice && vm.canEditPopvLine(popv))\\\" ng-class=\\\"{\\'cursor-pointer\\': vm.order.autocode}\\\" \\nng-click=\\\"vm.priceClicked(popv)\\\"><span>{{ popv.getTotal(true) | price}} {{::vm.order.currency}}</span> <span \\nclass=\\\"secondary-text text-strike\\\" ng-if=\\\"popv.showStrikePrice()\\\">\\n{{ popv.getOriginalTotal(true) | price}} {{::vm.order.currency}}</span><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nclass=\\\"red-700-fg\\\" ng-if=\\\"popv.returned_amount\\\"><md-icon class=\\\"refund-icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/refund.221d6d4a.svg\\\"></md-icon>\\n-{{ popv.getTotalReturned() | price}} {{::vm.order.currency}}</div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"popv.returned_amount\\\">{{ popv.total | price}} {{::vm.order.currency}}</div></div><md-button \\nclass=\\\"md-icon-button remove-product-button\\\" ng-if=\\\"vm.canEditPopvLine(popv)\\\" \\nng-click=\\\"vm.deletePosOrderProductVariant(popv)\\\" ng-disabled=\\\"saving\\\"><md-icon md-font-icon=\\\"icon-trash\\\"></md-icon>\\n</md-button></div></td></tr></tbody></table><div style=\\\"visibility: hidden\\\"><div id=\\\"ecommerceOrderStockDialog\\\" \\nclass=\\\"md-dialog-container\\\"><md-dialog layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start start\\\" class=\\\"md-padding\\\">\\n<div layout=\\\"column\\\" flex><h2 class=\\\"m-0\\\">{{vm.selectedProductStock.name}}</h2><div class=\\\"secondary-text\\\">\\n{{vm.selectedProductStock.code}}</div></div><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.hideStockDialog()\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"md-padding\\\" ng-if=\\\"!vm.showStockDetails\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"40px\\\"></md-progress-circular></div>\\n<nd-product-stock-kpis ng-if=\\\"vm.showStockDetails\\\" product=\\\"vm.selectedProductStock\\\" allow-edition=\\\"false\\\" \\nhide-aggregates=\\\"true\\\" warehouses=\\\"vm.warehouses\\\"></nd-product-stock-kpis></md-dialog></div></div>\");\n$templateCache.put(\"app/directives/pos-order-shipping-methods-card/nd-pos-order-shipping-methods-card.html\",\"<md-card><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"ORDER.SHIPPING\\\">Shipping </span><span flex></span><md-progress-circular ng-if=\\\"saving\\\" class=\\\"md-primary\\\" \\nmd-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular><md-button class=\\\"m-0 md-primary stroked\\\" \\nng-disabled=\\\"saving\\\" ng-if=\\\"vm.order.canEditPosOrderShippingMethods()\\\" ng-click=\\\"vm.addShipping()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'ORDER.ADD_SHIPPING\\' | translate}}</div>\\n</md-button></div></md-card-title-text></md-card-title><md-card-content><table class=\\\"simple\\\" ms-responsive-table>\\n<thead><tr><th width=\\\"30%\\\" translate=\\\"ORDER.SHIPPING_METHOD\\\"></th><th width=\\\"20%\\\" translate=\\\"PRODUCT.PRICE_INCL_TAX\\\">\\n</th><th width=\\\"20%\\\" translate=\\\"ACCOUNT.TAXES\\\"></th><th width=\\\"30%\\\" class=\\\"text-right\\\" translate=\\\"GENERAL.ACTIONS\\\">\\n</th></tr></thead><tbody><tr \\nng-if=\\\"!vm.order.pos_order_shipping_methods || !vm.order.pos_order_shipping_methods.length\\\"><td colspan=\\\"3\\\" \\nclass=\\\"text-center\\\"><em translate=\\\"ORDER.NO_SHIPPING_METHODS\\\" class=\\\"secondary-text hint-text\\\">No products selected\\n</em></td></tr><tr ng-repeat=\\\"posOrderShippingMethod in vm.order.pos_order_shipping_methods | orderBy: \\'id\\'\\\"><td \\nwidth=\\\"30%\\\"><span ng-if=\\\"!vm.order.canEditPosOrderShippingMethods()\\\">{{posOrderShippingMethod.shipping_method_name}}\\n</span><md-select ng-if=\\\"vm.order.canEditPosOrderShippingMethods()\\\" ng-disabled=\\\"saving\\\" class=\\\"nd-input m-0\\\" \\nng-model=\\\"posOrderShippingMethod.shipping_method\\\" ng-change=\\\"vm.shippingMethodChanged(posOrderShippingMethod)\\\">\\n<md-option ng-repeat=\\\"shippingMethod in vm.shippingMethods\\\" ng-value=\\\"shippingMethod.id\\\">\\n{{shippingMethod.name}} ({{shippingMethod.price_incl_tax | price}} {{vm.order.currency}})</md-option></md-select></td>\\n<td width=\\\"20%\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span ng-if=\\\"!vm.order.canEditPosOrderShippingMethods()\\\" \\nclass=\\\"mr-5\\\">{{posOrderShippingMethod.price_incl_tax | price}}</span> <input \\nng-if=\\\"vm.order.canEditPosOrderShippingMethods()\\\" ng-disabled=\\\"saving\\\" class=\\\"nd-input text-right w-75 mr-5\\\" \\ntype=\\\"number\\\" ng-model=\\\"posOrderShippingMethod.price_incl_tax\\\" \\nng-change=\\\"vm.recalculatePosOrderShippingMethodExclTax(posOrderShippingMethod)\\\" ng-model-options=\\\"{ debounce: 500 }\\\">\\n {{vm.order.currency}}</div></td><td width=\\\"20%\\\"><md-select ng-model=\\\"posOrderShippingMethod.tax\\\" \\nng-init=\\\"vm.initTax(posOrderShippingMethod)\\\" ng-change=\\\"vm.updatePosOrderShippingMethodTax(posOrderShippingMethod)\\\" \\nrequired=\\\"required\\\" placeholder=\\\"{{\\'ACCOUNT.TAXES\\' | translate}}\\\"><md-option ng-repeat=\\\"tax in vm.taxes\\\" \\nng-value=\\\"tax\\\"><span ng-if=\\\"tax.name\\\">{{tax.name}}</span></md-option></md-select></td><td width=\\\"30%\\\" \\nclass=\\\"text-right\\\"><md-menu><md-button class=\\\"md-icon-button\\\" ng-click=\\\"$mdMenu.open($event)\\\" ng-disabled=\\\"saving\\\">\\n<md-icon md-menu-origin md-font-icon=\\\"icon-printer\\\"></md-icon></md-button><md-menu-content><md-menu-item><md-button \\nng-click=\\\"vm.printShippingLabel(\\'a4\\')\\\"><md-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/label-din-a4.aba8c74b.svg\\\" md-menu-align-target></md-icon>\\n{{\\'ORDER.PRINT_SHIPPING_LABEL\\' | translate}} A4</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.printShippingLabel(\\'a5\\')\\\"><md-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/label-din-a5.5aa5c00b.svg\\\" md-menu-align-target></md-icon>\\n{{\\'ORDER.PRINT_SHIPPING_LABEL\\' | translate}} A5</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.printShippingLabel(\\'a6ina4\\')\\\"><md-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/label-din-a6.fd77b6f3.svg\\\" md-menu-align-target></md-icon>\\n{{\\'ORDER.PRINT_SHIPPING_LABEL\\' | translate}} A6</md-button></md-menu-item></md-menu-content></md-menu><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.viewCommercialInvoice(posOrderShippingMethod)\\\" ng-disabled=\\\"saving\\\"><md-icon \\nmd-font-icon=\\\"icon-receipt\\\"></md-icon><md-tooltip><span translate=\\\"ORDER.COMMERCIAL_INVOICE\\\"></span></md-tooltip>\\n</md-button><md-button class=\\\"md-icon-button mr-10\\\" translate translate-attr-aria-label=\\\"GENERAL.DELETE\\\" \\nng-if=\\\"vm.order.canEditPosOrderShippingMethods()\\\" ng-click=\\\"vm.deleteShipping(posOrderShippingMethod)\\\" \\nng-disabled=\\\"saving\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon><md-tooltip><span translate=\\\"GENERAL.DELETE\\\"></span>\\n</md-tooltip></md-button></td></tr></tbody></table></md-card-content></md-card><div style=\\\"visibility: hidden\\\"><div \\nid=\\\"ecommerceOrderCommercialInvoiceDialog\\\" class=\\\"md-dialog-container\\\"><md-dialog layout=\\\"column\\\"><md-dialog-content>\\n<div layout=\\\"row\\\"><h2 class=\\\"mb-32 mt-0\\\">\\n{{vm.selectedShippingMethod.shipping_method_name}} ({{vm.selectedShippingMethod.price_incl_tax}} {{vm.order.currency}})\\n</h2></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" md-scroll><table class=\\\"simple table table-bordered\\\" \\nms-responsive-table><thead><tr class=\\\"grey-100-bg\\\"><th translate=\\\"ORDER.DATE\\\">Date</th><th translate=\\\"ORDER.CARRIER\\\">\\nCarrier</th><th translate=\\\"ORDER.TRACKING_CODE\\\">Tracking Code</th><th translate=\\\"ORDER.WEIGHT\\\">Weight</th></tr></thead>\\n<tbody><tr><td><md-datepicker md-hide-icons=\\\"calendar\\\" flex ng-model=\\\"vm.selectedShippingMethod.invoice_date\\\" \\nmd-open-on-focus></md-datepicker></td><td><input type=\\\"text\\\" class=\\\"nd-input\\\" \\nng-model=\\\"vm.selectedShippingMethod.carrier\\\" maxlength=\\\"128\\\" placeholder=\\\"Type the agency name\\\"></td><td><input \\ntype=\\\"text\\\" class=\\\"nd-input\\\" ng-model=\\\"vm.selectedShippingMethod.tracking_code\\\" maxlength=\\\"128\\\" \\nplaceholder=\\\"Type a tracking code\\\"></td><td><input type=\\\"number\\\" class=\\\"nd-input text-right\\\" \\nng-model=\\\"vm.selectedShippingMethod.total_gross_weight\\\"> {{session.company.weight_unit}}</td></tr><tr \\nclass=\\\"grey-100-bg\\\"><td class=\\\"secondary-text\\\" translate=\\\"ORDER.TOTAL_NET_WEIGHT\\\"></td><td class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.TOTAL_GROSS_WEIGHT\\\"></td><td class=\\\"secondary-text\\\" translate=\\\"ORDER.TOTAL_DECLARED_VALUE\\\"></td><td \\nclass=\\\"secondary-text\\\" translate=\\\"ORDER.FREIGHT_AND_INSURANCE_CHARGES\\\"></td></tr><tr><td><input type=\\\"number\\\" \\nclass=\\\"nd-input text-right\\\" ng-model=\\\"vm.selectedShippingMethod.total_net_weight\\\"> {{session.company.weight_unit}}</td>\\n<td><input type=\\\"number\\\" class=\\\"nd-input text-right\\\" ng-model=\\\"vm.selectedShippingMethod.total_gross_weight\\\">\\n {{session.company.weight_unit}}</td><td><input type=\\\"number\\\" class=\\\"nd-input text-right\\\" \\nng-model=\\\"vm.selectedShippingMethod.total_declared_value\\\"> {{vm.order.currency}}</td><td><input type=\\\"number\\\" \\nclass=\\\"nd-input text-right\\\" ng-model=\\\"vm.selectedShippingMethod.freight_and_insurance_charges\\\"> {{vm.order.currency}}\\n</td></tr><tr class=\\\"grey-100-bg\\\"><td class=\\\"secondary-text\\\" translate=\\\"ORDER.TOTAL_SHIPMENT_PIECES\\\"></td><td \\nclass=\\\"secondary-text\\\" translate=\\\"ORDER.OTHER_CHARGES\\\"></td><td class=\\\"secondary-text\\\" translate=\\\"ORDER.CURRENCY\\\"></td>\\n<td class=\\\"secondary-text\\\" translate=\\\"ORDER.TOTAL_INVOICE_AMOUNT\\\"></td></tr><tr><td><input type=\\\"number\\\" \\nclass=\\\"nd-input text-right\\\" ng-model=\\\"vm.selectedShippingMethod.total_shipment_pieces\\\"></td><td><input type=\\\"number\\\" \\nclass=\\\"nd-input text-right\\\" ng-model=\\\"vm.selectedShippingMethod.other_charges\\\"> {{vm.order.currency}}</td><td>\\n{{vm.selectedShippingMethod.currency}}</td><td><input type=\\\"number\\\" class=\\\"nd-input text-right\\\" \\nng-model=\\\"vm.selectedShippingMethod.total_invoice_amount\\\"> {{vm.order.currency}}</td></tr><tr class=\\\"grey-100-bg\\\"><td \\ncolspan=\\\"2\\\" class=\\\"secondary-text\\\" translate=\\\"ORDER.TYPE_OF_EXPORT\\\"></td><td colspan=\\\"2\\\" class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.TERMS_OF_TRADE\\\"></td></tr><tr><td colspan=\\\"2\\\"><md-select \\nng-model=\\\"vm.selectedShippingMethod.type_of_export\\\" class=\\\"m-0 p-0\\\"><md-option ng-value=\\\"10\\\"><span \\ntranslate=\\\"ORDER.TYPE_OF_EXPORT_PERMANENT\\\"></span></md-option><md-option ng-value=\\\"20\\\"><span \\ntranslate=\\\"ORDER.TYPE_OF_EXPORT_TEMPORARY\\\"></span></md-option><md-option ng-value=\\\"30\\\"><span \\ntranslate=\\\"ORDER.TYPE_OF_EXPORT_REEXPORT\\\"></span></md-option></md-select></td><td colspan=\\\"2\\\"><md-select \\nng-model=\\\"vm.selectedShippingMethod.terms_of_trade\\\" class=\\\"m-0 p-0\\\"><md-option ng-value=\\\"10\\\"><span \\ntranslate=\\\"ORDER.TERM_OF_TRADE_DDP\\\"></span></md-option><md-option ng-value=\\\"20\\\"><span \\ntranslate=\\\"ORDER.TERM_OF_TRADE_DDU\\\"></span></md-option></md-select></td></tr><tr class=\\\"grey-100-bg\\\"><td colspan=\\\"2\\\" \\nclass=\\\"secondary-text\\\" translate=\\\"ORDER.REASON_FOR_EXPORT\\\"></td><td colspan=\\\"2\\\" class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.GENERAL_NOTES\\\"></td></tr><tr><td colspan=\\\"2\\\"><textarea flex \\nng-model=\\\"vm.selectedShippingMethod.reason_for_export\\\" placeholder=\\\"E.g. sale, sample, item for repair, gift, ...\\\">\\n</textarea></td><td colspan=\\\"2\\\"><textarea flex ng-model=\\\"vm.selectedShippingMethod.general_notes\\\"></textarea></td></tr>\\n</tbody></table></div></md-dialog-content><md-dialog-actions class=\\\"h-64\\\"><md-button ng-click=\\\"vm.hideStock()\\\">\\n{{\\'GENERAL.CLOSE\\' | translate}}</md-button><md-button \\nng-click=\\\"vm.updateAndPrintCommercialInvoice(vm.selectedShippingMethod)\\\" class=\\\"md-primary\\\" \\ntranslate=\\\"ORDER.COMMERCIAL_INVOICE\\\"></md-button><md-button ng-click=\\\"vm.updateShipping()\\\" \\nng-if=\\\"vm.order.canEditPosOrderShippingMethods()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.SAVE\\\"></md-button>\\n</md-dialog-actions></md-dialog></div></div>\");\n$templateCache.put(\"app/directives/pos-order-reposition-of-card/nd-pos-order-reposition-of-card.html\",\"<md-card ng-if=\\\"vm.showCard\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\">\\n{{\\'ORDER.REPLENISHMENT_ORDERS\\' | translate}}</span></md-card-title-text></md-card-title><md-card-content \\nlayout=\\\"column\\\"><p class=\\\"secondary-text\\\">{{\\'ORDER.REPLENISHMENT_ORDERS_MSG\\' | translate}}</p><div layout=\\\"column\\\" \\nclass=\\\"padding-bottom-10\\\" ng-if=\\\"vm.transfers.length > 0\\\"><span class=\\\"h4 text-bold mb-8\\\">\\n{{\\'ORDER.TRANSFER_ORDERS\\' | translate}}</span><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"transfer in vm.transfers\\\" class=\\\"mb-5\\\"><nd-a state=\\\"\\'app.inventory.transfers.transfer.products\\'\\\" \\nstate-params=\\\"{id: transfer.id}\\\">{{transfer.autocode}}</nd-a><div \\nclass=\\\"status-badge ml-10 {{vm.TRANSFER_ORDER_STATUS_COLORS[transfer.status]}}\\\">\\n{{vm.getTransferStatusLabel(transfer.status)}}</div></div></div><div layout=\\\"column\\\" class=\\\"padding-bottom-10\\\" \\nng-if=\\\"vm.purchases.length > 0\\\"><span class=\\\"h4 text-bold mb-8\\\">{{\\'ORDER.PURCHASE_ORDERS\\' | translate}}</span><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-repeat=\\\"purchase in vm.purchases\\\" class=\\\"mb-5\\\"><nd-a \\nstate=\\\"\\'app.inventory.purchases.purchase.products\\'\\\" state-params=\\\"{id: purchase.id}\\\">{{purchase.autocode}}</nd-a><div \\nclass=\\\"status-badge ml-10 {{vm.PURCHASE_ORDER_STATUS_COLORS[purchase.status]}}\\\">\\n{{vm.getPurchaseStatusLabel(purchase.status)}}</div></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/printer/nd-printer-ticket-header.html\",\"<div><div \\nng-if=\\\"vm.htmlTicket && vm.htmlTicket.ticketConfiguration && vm.htmlTicket.ticketConfiguration.print_logo && vm.htmlTicket.ticketConfiguration.logo_b64\\\" \\nstyle=\\\"text-align: center\\\"><img style=\\\"width: 250px\\\" \\nsrc=\\\"data:image/png;base64,{{vm.htmlTicket.ticketConfiguration.logo_b64}}\\\"></div><div \\nng-if=\\\"!vm.htmlTicket.ticketConfiguration.print_logo && vm.htmlTicket.warehouse.name\\\" style=\\\"text-align: center\\\"><h1>\\n{{vm.htmlTicket.warehouse.name}}<br></h1></div><br><p></p><div ng-if=\\\"vm.htmlTicket.warehouse.address_1\\\">\\n{{vm.htmlTicket.warehouse | location}}</div><div ng-if=\\\"vm.htmlTicket.warehouse.phone\\\">\\n{{\\'SALES.TEL_\\' | translate}} {{vm.htmlTicket.warehouse.phone}}</div><p></p><div \\nng-if=\\\"!vm.htmlTicket.warehouse.fiscal_address_instance\\\"><div>{{vm.htmlTicket.company.legal_name}}</div><div \\nng-if=\\\"(vm.htmlTicket.company | location) != (vm.htmlTicket.warehouse | location)\\\">{{vm.htmlTicket.company | location}}\\n</div><div>{{\\'SALES.VAT\\' | translate}}: {{vm.htmlTicket.company.vat}}</div></div><div \\nng-if=\\\"vm.htmlTicket.warehouse.fiscal_address_instance\\\"><div>\\n{{vm.htmlTicket.warehouse.fiscal_address_instance.legal_name}}</div><div \\nng-if=\\\"(vm.htmlTicket.warehouse.fiscal_address_instance | location) != (vm.htmlTicket.warehouse | location)\\\">\\n{{vm.htmlTicket.warehouse.fiscal_address_instance | location}}</div><div>\\n{{\\'SALES.VAT\\' | translate}}: {{vm.htmlTicket.warehouse.fiscal_address_instance.vat}}</div></div><br><span \\nng-if=\\\"vm.htmlTicket.sale.created_at\\\">{{vm.htmlTicket.sale.created_at.toLocaleString()}}<br></span><span \\nng-if=\\\"vm.htmlTicket.sale.autocode\\\">{{\\'SALES.SIMPLIFIED_INVOICE\\' | translate}}: #{{vm.htmlTicket.sale.autocode}}<br>\\n</span><span ng-if=\\\"!vm.htmlTicket.sale.site\\\">{{\\'SALES.REGISTER\\' | translate}}: {{vm.htmlTicket.register.code}}<br>\\n</span><span ng-if=\\\"vm.htmlTicket.sale.site\\\">{{vm.htmlTicket.sale.site.name}}<br></span><span \\nng-if=\\\"vm.htmlTicket.sale.created_by_instance\\\">\\n{{\\'SALES.ATTENDED_BY\\' | translate}}: {{vm.htmlTicket.sale.created_by_instance.first_name}}<br></span><span \\nng-if=\\\"vm.htmlTicket.sale.customer_instance\\\">\\n{{\\'SALES.CUSTOMER\\' | translate}}: {{vm.htmlTicket.sale.customer_instance.first_name || \\'\\'}} {{vm.htmlTicket.sale.customer_instance.last_name || \\'\\'}}\\n<br></span><span ng-if=\\\"vm.htmlTicket.sale.customer_instance\\\">\\n{{\\'SALES.EMAIL\\' | translate}}: {{vm.htmlTicket.sale.customer_instance.email}}<br></span><br></div>\");\n$templateCache.put(\"app/directives/printer/nd-printer.html\",\"<md-menu-bar class=\\\"p-0\\\"><md-menu md-position-mode=\\\"target-right bottom\\\" md-offset=\\\"0 12\\\"><md-button \\nid=\\\"test-termoprinter-button\\\" ng-click=\\\"$mdMenu.open()\\\" \\nng-class=\\\"{\\'md-orange-100-bg\\': vm.state === vm.STATES.READY_UPDATE_NEEDED}\\\" \\nclass=\\\"full-height-md-button md-icon-button\\\"><md-tooltip>{{\\'PRINTER_DIRECTIVE.\\' + vm.state |translate}}</md-tooltip>\\n<md-icon md-svg-src=\\\"{{vm.STATES_ICONS[vm.state].svgIcon}}\\\"></md-icon></md-button><md-menu-content class=\\\"p-0\\\"><div \\nlayout=\\\"column\\\" class=\\\"p-8\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\" class=\\\"font-size-28\\\"></md-icon><span>\\n{{vm.registerPrinterName}}</span> <span \\nng-if=\\\"vm.state && vm.STATES_ICONS[vm.state] && vm.state !== vm.STATES.READY_UPDATE_NEEDED\\\" \\nng-class=\\\"vm.STATES_ICONS[vm.state].colorClass\\\">{{\\'PRINTER_DIRECTIVE.\\' + vm.state |translate}} </span><small \\nclass=\\\"secondary-text\\\" ng-if=\\\"vm.isPrinterTypeQZ()\\\">Qz {{vm.qzVersion}}</small><div ng-if=\\\"vm.isPrinterTypeEpsonIp()\\\" \\nlayout=\\\"row\\\">{{vm.getDefaultPrinterIp()}} <a class=\\\"cursor-pointer ml-5\\\" ng-click=\\\"vm.openEpsonPrinterDialog()\\\">\\n({{\\'PRINTER_DIRECTIVE.CHANGE_PRINTER_IP_ADDRESS\\' | translate }})</a></div></div><md-divider></md-divider><div \\nlayout=\\\"column\\\" class=\\\"p-8\\\" layout-align=\\\"center start\\\" ng-if=\\\"vm.state === vm.STATES.READY_UPDATE_NEEDED\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon ng-class=\\\"vm.STATES_ICONS[vm.state].colorClass\\\" class=\\\"mr-8\\\" \\nmd-font-icon=\\\"{{vm.STATES_ICONS[vm.state].icon}}\\\"></md-icon><span>\\n{{\\'PRINTER_DIRECTIVE.READY_UPDATE_NEEDED\\' | translate}}</span></div><span class=\\\"secondary-text\\\">\\n{{\\'PRINTER_DIRECTIVE.READY_UPDATE_NEEDED_MESSAGE\\' | translate}}</span> <a ng-href=\\\"{{vm.getWindowsDownloadUrl()}}\\\" \\nclass=\\\"mt-16\\\"><md-icon md-font-icon=\\\"icon-windows\\\" class=\\\"mr-8\\\"></md-icon>\\n{{\\'PRINTER_DIRECTIVE.DOWNLOAD_WINDOWS_VERSION\\' | translate: {version: vm.qzLibVersion} }} </a><a \\nng-href=\\\"{{vm.getMacDownloadUrl()}}\\\"><md-icon md-font-icon=\\\"icon-apple-finder\\\" class=\\\"mr-8\\\"></md-icon>\\n{{\\'PRINTER_DIRECTIVE.DOWNLOAD_MAC_VERSION\\' | translate: {version: vm.qzLibVersion} }} </a><a \\nng-href=\\\"{{vm.getLinuxDownloadUrl()}}\\\"><md-icon md-font-icon=\\\"icon-ubuntu\\\" class=\\\"mr-8\\\"></md-icon>\\n{{\\'PRINTER_DIRECTIVE.DOWNLOAD_LINUX_VERSION\\' | translate: {version: vm.qzLibVersion} }}</a></div><md-divider \\nng-if=\\\"vm.state === vm.STATES.READY_UPDATE_NEEDED\\\"></md-divider><md-menu-item><md-button \\nng-click=\\\"vm.togglePrinterTypeQZ($event)\\\" md-prevent-menu-close=\\\"true\\\" id=\\\"test-direct-printer\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon ng-if=\\\"vm.isPrinterTypeQZ()\\\" md-font-icon=\\\"icon-radiobox-marked\\\" \\nclass=\\\"md-accent\\\"></md-icon><md-icon ng-if=\\\"!vm.isPrinterTypeQZ()\\\" md-font-icon=\\\"icon-radiobox-blank\\\"></md-icon><span>\\n{{\\'PRINTER_DIRECTIVE.DIRECT_PRINTER\\' |translate}}</span></div></md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.toggleSystemPrinterEnabled($event)\\\" md-prevent-menu-close=\\\"true\\\" id=\\\"test-system-printer\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon ng-if=\\\"vm.isPrinterTypeSystem()\\\" md-font-icon=\\\"icon-radiobox-marked\\\" \\nclass=\\\"md-accent\\\"></md-icon><md-icon ng-if=\\\"!vm.isPrinterTypeSystem()\\\" md-font-icon=\\\"icon-radiobox-blank\\\"></md-icon>\\n<span>{{\\'PRINTER_DIRECTIVE.SYSTEM_PRINTER\\' |translate}}</span></div></md-button></md-menu-item><md-menu-item><md-button\\n ng-click=\\\"vm.toggleEpsonPrinterEnabled($event)\\\" ng-disabled=\\\"vm.enabled\\\" md-prevent-menu-close=\\\"true\\\" \\nid=\\\"test-epson-printer\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon ng-if=\\\"vm.isPrinterTypeEpsonIp()\\\" \\nmd-font-icon=\\\"icon-radiobox-marked\\\" class=\\\"md-accent\\\"></md-icon><md-icon ng-if=\\\"!vm.isPrinterTypeEpsonIp()\\\" \\nmd-font-icon=\\\"icon-radiobox-blank\\\"></md-icon><span>{{\\'PRINTER_DIRECTIVE.EPSON_PRINTER\\' |translate}}</span></div>\\n</md-button></md-menu-item><md-divider ng-if=\\\"vm.listPrinters.length > 0 && vm.isPrinterTypeQZ()\\\"></md-divider>\\n<md-menu-item ng-if=\\\"vm.listPrinters.length > 0 && vm.isPrinterTypeQZ()\\\"><md-menu><md-button ng-click=\\\"$mdMenu.open()\\\" \\nclass=\\\"submenu\\\">{{\\'PRINTER_DIRECTIVE.CHANGE_PRINTER\\' |translate}}</md-button><md-menu-content width=\\\"3\\\"><md-menu-item \\nng-repeat=\\\"printer in vm.listPrinters\\\" ng-click=\\\"vm.changeRegisterPrinter(printer)\\\"><md-button \\nng-disabled=\\\"printer === vm.registerPrinterName\\\">{{printer}}</md-button></md-menu-item></md-menu-content></md-menu>\\n</md-menu-item></md-menu-content></md-menu></md-menu-bar><div \\nng-include=\\\"\\'app/directives/printer/subviews/gift-card-ticket.html\\'\\\"></div><div \\nng-include=\\\"\\'app/directives/printer/subviews/basic-gift-card-ticket.html\\'\\\"></div><div \\nng-include=\\\"\\'app/directives/printer/subviews/pos-order-ticket.html\\'\\\"></div><div \\nng-include=\\\"\\'app/directives/printer/subviews/register-activity-ticket.html\\'\\\"></div>\");\n$templateCache.put(\"app/directives/real-company-banner/nd-real-company-banner.html\",\"<div id=\\\"real-company-banner\\\" class=\\\"amber-700-bg\\\" ng-if=\\\"showBanner\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"cursor-pointer\\\" ng-click=\\\"copyToClipboard(companyName)\\\">{{companyName}}</div><span class=\\\"mh-8\\\">-</span><div \\nclass=\\\"cursor-pointer\\\" ng-click=\\\"copyToClipboard(companyId)\\\">{{companyId}}</div><md-menu md-offset=\\\"0 26\\\"><md-button \\nclass=\\\"nps-button\\\" ng-click=\\\"$mdMenu.open($event); openNpsMenu()\\\"><span \\nclass=\\\"text-boxed cursor-pointer nps-{{netPromoterScore | number: 0}}\\\" ng-class=\\\"{\\'transparent\\': npsHidden}\\\" \\nng-if=\\\"netPromoterScore\\\">NPS: {{netPromoterScore | number: 1}}</span></md-button><md-menu-content \\nclass=\\\"nps-menu-content\\\"><md-menu-item ng-repeat=\\\"nps in npss\\\"><div layout=\\\"column\\\" class=\\\"nps-item-content\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture user=\\\"nps.user\\\" class=\\\"mr-8\\\"></nd-user-picture><div \\nlayout=\\\"column\\\" class=\\\"mr-16\\\"><span>{{nps.user | personname }}</span> <small class=\\\"secondary-text\\\">\\n{{nps.created_at | date: \\'d/M/yyyy hh:mm\\'}}</small></div><span flex></span> <span \\nclass=\\\"text-boxed nps-{{nps.net_promoter_score | number: 0}} m-0\\\">{{nps.net_promoter_score}}</span></div><blockquote \\nng-if=\\\"nps.notes\\\"><p>{{nps.notes}}</p></blockquote></div></md-menu-item></md-menu-content></md-menu></div>\");\n$templateCache.put(\"app/directives/replenish-by-warehouse/nd-replenish-by-warehouse.html\",\"<div layout=\\\"row\\\" class=\\\"nd-replenishment-by-warehouse\\\"><div layout=\\\"column\\\" flex><div \\nclass=\\\"toolbar product-variant-toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"product-search\\\" \\nnd-mute-barcode-callbacks ng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.getGridPage(false)\\\" \\nng-model-options=\\\"{debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" \\nclass=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-input-container><span flex></span><md-button ng-click=\\\"vm.downloadCSV()\\\" class=\\\"md-primary m-0\\\" \\nng-disabled=\\\"vm.exporting\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.exporting\\\"></md-progress-circular><span translate=\\\"CUSTOMERS.EXPORT_CSV\\\" \\nng-class=\\\"{\\'ml-8\\': vm.exporting}\\\">Export CSV</span></div></md-button></div><div class=\\\"full-width\\\"><md-progress-linear \\nmd-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" ng-if=\\\"vm.loading || vm.scope.performingAnalysis\\\">\\n</md-progress-linear></div><md-content class=\\\"content uid-grid-container\\\" flex><div ui-grid=\\\"vm.gridOptions\\\" \\nui-grid-pagination ui-grid-move-columns ui-grid-exporter ui-grid-resize-columns ui-grid-pinning ui-grid-cellnav \\nui-grid-save-state ui-grid-auto-resize ui-grid-exporter ui-grid-edit ui-grid-row-edit class=\\\"grid\\\" \\nstyle=\\\"height: 100%\\\"></div></md-content></div></div>\");\n$templateCache.put(\"app/directives/send-email-dialog/send-email-dialog.html\",\"<md-dialog id=\\\"send-email-dialog\\\"><md-dialog-content class=\\\"md-padding\\\"><form name=\\\"sendEmailForm\\\" layout=\\\"column\\\"><div\\n class=\\\"h2 mb-32\\\" ng-if=\\\"vm.documentType==\\'Invoice\\'\\\"><span ng-if=\\\"vm.invoiceType === vm.INVOICE_TYPES.INVOICE\\\" \\ntranslate=\\\"INVOICE.SEND_INVOICE\\\"></span> <span ng-if=\\\"vm.invoiceType === vm.INVOICE_TYPES.PROFORMA\\\" \\ntranslate=\\\"INVOICE.SEND_PROFORMA\\\"></span> <span ng-if=\\\"vm.invoiceType === vm.INVOICE_TYPES.QUOTE\\\" \\ntranslate=\\\"INVOICE.SEND_QUOTE\\\"></span></div><div layout=\\\"column\\\"><md-input-container class=\\\"md-input-chips-container\\\">\\n<label translate=\\\"GENERAL.EMAIL_TO\\\"></label><md-chips ng-model=\\\"vm.emails\\\"></md-chips><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" class=\\\"mt-5\\\"><a href=\\\"#\\\" translate=\\\"GENERAL.SHOW_CC_BCC\\\" ng-if=\\\"!vm.showCCBCC\\\" \\nng-click=\\\"vm.showCCBCC=true\\\"></a> <a href=\\\"#\\\" translate=\\\"GENERAL.HIDE_CC_BCC\\\" ng-if=\\\"vm.showCCBCC\\\" \\nng-click=\\\"vm.showCCBCC=false\\\"></a></div></md-input-container><md-input-container class=\\\"md-input-chips-container\\\" \\nng-if=\\\"vm.showCCBCC\\\"><label>CC</label><md-chips ng-model=\\\"vm.cc\\\"></md-chips></md-input-container><md-input-container \\nclass=\\\"md-input-chips-container\\\" ng-if=\\\"vm.showCCBCC\\\"><label>BCC</label><md-chips ng-model=\\\"vm.bcc\\\"></md-chips>\\n</md-input-container><md-input-container><label translate=\\\"GENERAL.SUBJECT\\\">Subject</label><input \\nng-model=\\\"vm.subject\\\"></md-input-container><md-input-container><text-angular ng-model=\\\"vm.message\\\"></text-angular>\\n</md-input-container></div></form></md-dialog-content><md-dialog-actions><div class=\\\"attachments\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><a ng-click=\\\"vm.downloadDocument()\\\" class=\\\"cursor-pointer\\\"><md-icon \\nmd-font-icon=\\\"icon-attachment\\\"></md-icon>{{vm.documentName}}.pdf</a></div><span flex></span><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-click=\\\"vm.sendEmail()\\\" \\nclass=\\\"md-raised md-primary\\\" ng-disabled=\\\"importForm.$invalid || !vm.hasValidEmail() || vm.sending\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.sending\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular>{{\\'GENERAL.SEND\\' | translate }}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/directives/signup-wizard/nd-signup-wizard.html\",\"<ms-form-wizard flex><md-tabs md-dynamic-height=\\\"true\\\" md-center-tabs=\\\"true\\\" md-selected=\\\"msWizard.selectedIndex\\\">\\n<md-tab ng-disabled=\\\"vm.emailSent\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.forms.wizardStep1.$invalid\\\">1</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.forms.wizardStep1.$valid\\\"><i class=\\\"icon-check s16\\\"></i></span>\\n</span></md-tab-label><md-tab-body><form name=\\\"vm.forms.wizardStep1\\\" ms-form-wizard-form novalidate><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"h2\\\">{{\\'SIGNUP.ABOUT_YOURSELF\\' | translate}}</div><div \\nclass=\\\"secondary-text mb-32\\\">{{\\'SIGNUP.ABOUT_YOURSELF_SUBHEADER\\' | translate}}</div><md-input-container \\nclass=\\\"mb-0 w-300\\\"><input type=\\\"text\\\" data-test-id=\\\"signup-first-name\\\" ng-disabled=\\\"vm.checking\\\" \\nng-model=\\\"vm.user.firstName\\\" name=\\\"firstName\\\" placeholder=\\\"{{\\'SIGNUP.FIRST_NAME\\' | translate}}\\\" required><div \\nng-messages=\\\"vm.user.firstName.$error\\\" ng-show=\\\"vm.user.firstName.$dirty\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span>First name is mandatory.</span></div></div></md-input-container><md-input-container class=\\\"mb-0 w-300\\\"><input \\ntype=\\\"text\\\" data-test-id=\\\"signup-last-name\\\" ng-model=\\\"vm.user.lastName\\\" ng-disabled=\\\"vm.checking\\\" name=\\\"lastName\\\" \\nplaceholder=\\\"{{\\'SIGNUP.LAST_NAME\\' | translate}}\\\" required><div ng-messages=\\\"vm.user.lastName.$error\\\" \\nng-show=\\\"vm.user.lastName.$dirty\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>Last name is mandatory.</span></div>\\n</div></md-input-container></div></form></md-tab-body></md-tab><md-tab \\nng-disabled=\\\"vm.emailSent || vm.forms.wizardStep1.$invalid\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span\\n class=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.forms.wizardStep2.$invalid\\\">2</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.forms.wizardStep2.$valid\\\"><i class=\\\"icon-check s16\\\"></i></span>\\n</span></md-tab-label><md-tab-body><form name=\\\"vm.forms.wizardStep2\\\" ms-form-wizard-form novalidate><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"h2\\\">{{\\'SIGNUP.CONTACT\\' | translate}}</div><div \\nclass=\\\"secondary-text mb-32\\\">{{\\'SIGNUP.CONTACT_SUBHEADER\\' | translate}}</div><md-input-container class=\\\"mb-0 w-300\\\">\\n<input type=\\\"email\\\" name=\\\"email\\\" data-test-id=\\\"signup-email\\\" ng-model=\\\"vm.contact.email\\\" ng-disabled=\\\"vm.checking\\\" \\nng-change=\\\"vm.removeFormErrors(\\'wizardStep2\\', \\'email\\', \\'unique\\')\\\" placeholder=\\\"{{\\'SIGNUP.EMAIL\\' | translate}}\\\" \\nrequired><div ng-messages=\\\"vm.forms.wizardStep2.email.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div><div ng-message=\\\"unique\\\" data-test-id=\\\"signup-email-alert\\\">\\n{{\\'SIGNUP.ERROR_01001_USER_MAIL_ALREADY_EXISTS\\' | translate}}</div></div></md-input-container><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-input-container class=\\\"mb-0 country-input-container w-150\\\"><md-icon \\nmd-font-icon=\\\"icon-web\\\"></md-icon><label translate=\\\"SIGNUP.COUNTRY\\\">Country</label><md-select \\nng-model=\\\"vm.contact.country\\\" ng-disabled=\\\"vm.checking\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.countrySearch)\\\" required><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.countrySearch\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-repeat=\\\"country in vm.countries | filter:vm.countrySearch | orderBy: \\'position\\'\\\" \\nng-value=\\\"country.code\\\">({{country.code}}) {{country.name}}</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"mb-0 w-150\\\"><label translate=\\\"SIGNUP.PHONE_NUMBER\\\">Country</label><input type=\\\"phone\\\" \\nname=\\\"phone\\\" data-test-id=\\\"signup-phone\\\" ng-disabled=\\\"vm.checking\\\" ng-model=\\\"vm.contact.phone\\\" \\nng-change=\\\"vm.removeFormErrors(\\'wizardStep2\\', \\'phone\\', \\'unique\\')\\\" required><div \\nng-messages=\\\"vm.forms.wizardStep2.phone.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div><div ng-message=\\\"unique\\\" data-test-id=\\\"signup-phone-alert\\\">\\n{{\\'SIGNUP.ERROR_01002_USER_PHONE_ALREADY_EXISTS\\' | translate}}</div></div></md-input-container></div></div></form>\\n</md-tab-body></md-tab><md-tab \\nng-disabled=\\\"vm.emailSent || vm.forms.wizardStep1.$invalid || vm.forms.wizardStep2.$invalid || !vm.isUserDataValidated\\\">\\n<md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.forms.wizardStep3.$invalid\\\">3</span> <span class=\\\"ms-form-wizard-step-number green-bg\\\" \\nng-if=\\\"vm.forms.wizardStep3.$valid\\\"><i class=\\\"icon-check s16\\\"></i></span></span></md-tab-label><md-tab-body><form \\nname=\\\"vm.forms.wizardStep3\\\" ms-form-wizard-form novalidate><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"h2\\\">{{\\'SIGNUP.ABOUT_YOUR_BUSINESS\\' | translate}}</div><div class=\\\"secondary-text mb-32\\\">\\n{{\\'SIGNUP.ABOUT_YOUR_BUSINESS_SUBHEADER\\' | translate}}</div><md-input-container class=\\\"mb-0 w-300\\\"><input type=\\\"text\\\" \\nname=\\\"companyName\\\" data-test-id=\\\"signup-company-name\\\" ng-model=\\\"vm.company.name\\\" \\nplaceholder=\\\"{{\\'SIGNUP.COMPANY_NAME\\' | translate}}\\\" required><div \\nng-messages=\\\"vm.forms.wizardStep3.companyName.$error\\\" ng-show=\\\"vm.forms.wizardStep3.companyName.$dirty\\\" role=\\\"alert\\\">\\n<div ng-message=\\\"required\\\"><span>{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div></div></md-input-container>\\n<md-input-container class=\\\"w-300\\\"><label translate=\\\"SIGNUP.SECTOR\\\">Sector</label><md-select \\nng-model=\\\"vm.company.sector\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" data-test-id=\\\"signup-select-sector\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.sectorSearch)\\\" required><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.sectorSearch\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-repeat=\\\"sector in vm.sectors | filter:{\\'name\\': vm.sectorSearch }\\\" \\ndata-test-id=\\\"signup-option-sector\\\" ng-value=\\\"sector.code\\\">{{sector.name | translate}}</md-option></md-select>\\n</md-input-container><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-input-container flex class=\\\"w-150\\\"><label \\ntranslate=\\\"SIGNUP.NUM_STORES\\\">Number of stores</label><md-select ng-model=\\\"vm.company.amount\\\" \\ndata-test-id=\\\"signup-select-num-stores\\\"><md-option ng-value=\\\"0\\\">1</md-option><md-option ng-value=\\\"1\\\" \\ndata-test-id=\\\"signup-option-num-stores\\\">{{\\\"SIGNUP.LESS_THAN_N\\\" | translate: {n: 10} }}</md-option><md-option \\nng-value=\\\"2\\\">{{\\\"SIGNUP.N_OR_MORE\\\" | translate: {n: 10} }}</md-option></md-select></md-input-container>\\n<md-input-container flex class=\\\"w-150\\\"><label translate=\\\"SIGNUP.ANNUAL_TURNOVER\\\">Annual turnover</label><md-select \\nng-model=\\\"vm.company.billing\\\" data-test-id=\\\"signup-select-billing\\\"><md-option ng-value=\\\"0\\\">\\n{{\\\"SIGNUP.LESS_THAN_N\\\" | translate: {n: \\'100K\\'} }}</md-option><md-option ng-value=\\\"1\\\" \\ndata-test-id=\\\"signup-option-billing\\\">{{\\\"100K - 500K\\\"}}</md-option><md-option ng-value=\\\"2\\\">{{\\\"500K - 1M\\\"}}</md-option>\\n<md-option ng-value=\\\"3\\\">{{\\\"SIGNUP.MORE_THAN_N\\\" | translate: {n: \\'1M\\'} }}</md-option></md-select></md-input-container>\\n</div></div></form></md-tab-body></md-tab><md-tab \\nng-disabled=\\\"vm.emailSent || vm.forms.wizardStep1.$invalid || vm.forms.wizardStep2.$invalid || vm.forms.wizardStep3.$invalid || !vm.isCompanyDataValidated\\\">\\n<md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.forms.wizardStep4.$invalid\\\">4</span> <span class=\\\"ms-form-wizard-step-number green-bg\\\" \\nng-if=\\\"vm.forms.wizardStep4.$valid\\\"><i class=\\\"icon-check s16\\\"></i></span></span></md-tab-label><md-tab-body><form \\nname=\\\"vm.forms.wizardStep4\\\" ms-form-wizard-form novalidate><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"h2\\\">{{\\'SIGNUP.LETS_GO\\' | translate}}</div><div class=\\\"secondary-text mb-32\\\">\\n{{\\'SIGNUP.LETS_GO_SUBHEADER\\' | translate}}</div><div ng-if=\\\"vm.emailError\\\" class=\\\"error-banner animate-slide-down\\\"><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"red-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span class=\\\"font-size-14\\\">\\n{{\\'SIGNUP.EMAIL_ERROR\\' | translate}}</span> <span class=\\\"error-banner-text secondary-text\\\" \\ntranslate=\\\"SIGNUP.EMAIL_ERROR_MSG\\\"></span></div></div></div><md-input-container \\nclass=\\\"mb-0 w-300 md-icon-float md-icon-right\\\"><input type=\\\"{{vm.showPassword ? \\'text\\' : \\'password\\'}}\\\" name=\\\"password\\\" \\ndata-test-id=\\\"signup-password\\\" ng-model=\\\"vm.user.password\\\" placeholder=\\\"{{\\'SIGNUP.PASSWORD\\' | translate}}\\\" \\nng-pattern=\\\"/^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d!@#$%^&*]{8,}$/\\\" ng-disabled=\\\"vm.creating\\\" required><md-icon \\nmd-font-icon=\\\"icon-eye\\\" class=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = true\\\" \\nng-if=\\\"!vm.showPassword\\\"></md-icon><md-icon md-font-icon=\\\"icon-eye-off\\\" class=\\\"secondary-text cursor-pointer\\\" \\nng-click=\\\"vm.showPassword = false\\\" ng-if=\\\"vm.showPassword\\\"></md-icon><div \\nng-messages=\\\"vm.forms.wizardStep4.password.$error\\\" ng-show=\\\"vm.forms.wizardStep4.password.$dirty\\\" role=\\\"alert\\\"><div \\nng-message=\\\"pattern\\\" data-test-id=\\\"signup-alert-password-invalid\\\"><span>{{\\'SIGNUP.PASSWORD_INVALID\\' | translate}}\\n</span></div><div ng-message=\\\"required\\\"><span>{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div></div>\\n</md-input-container><md-input-container class=\\\"mb-0 w-300 md-icon-float md-icon-right\\\"><input \\ntype=\\\"{{vm.showRepeatPassword ? \\'text\\' : \\'password\\'}}\\\" name=\\\"repeatPassword\\\" data-test-id=\\\"signup-repeat-password\\\" \\nng-model=\\\"vm.user.repeatPassword\\\" ng-change=\\\"vm.checkPasswordMismatch()\\\" ng-disabled=\\\"vm.creating\\\" \\nplaceholder=\\\"{{\\'SIGNUP.REPEAT_PASSWORD\\' | translate}}\\\" ng-pattern=\\\"/^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d!@#$%^&*]{8,}$/\\\" \\nrequired><md-icon md-font-icon=\\\"icon-eye\\\" class=\\\"secondary-text cursor-pointer\\\" \\nng-click=\\\"vm.showRepeatPassword = true\\\" ng-if=\\\"!vm.showRepeatPassword\\\"></md-icon><md-icon md-font-icon=\\\"icon-eye-off\\\" \\nclass=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showRepeatPassword = false\\\" ng-if=\\\"vm.showRepeatPassword\\\"></md-icon>\\n<div ng-messages=\\\"vm.forms.wizardStep4.repeatPassword.$error\\\" ng-show=\\\"vm.forms.wizardStep4.repeatPassword.$dirty\\\" \\nrole=\\\"alert\\\"><div ng-message=\\\"pattern\\\"><span>{{\\'SIGNUP.PASSWORD_INVALID\\' | translate}}</span></div><div \\nng-message=\\\"required\\\"><span>{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div><div ng-message=\\\"mismatch\\\" \\ndata-test-id=\\\"signup-alert-repeat-password-mismatch\\\"><span>{{\\'SIGNUP.PASSWORD_MISMATCH\\' | translate}}</span></div>\\n</div></md-input-container><div layout=\\\"column\\\" layout-align=\\\"start start\\\" class=\\\"w-300\\\"><p \\ntranslate=\\\"GENERAL.ACCEPT_TERMS_AND_CONDITIONS_MSG\\\" translate-values=\\\"{finalUserContract: vm.finalUserContract}\\\"></p>\\n<md-checkbox ng-model=\\\"vm.user.terms_and_conditions_accepted\\\" data-test-id=\\\"signup-checkbox-terms-and-conditions\\\" \\nname=\\\"termsAndConditionsAccepted\\\" ng-disabled=\\\"vm.creating\\\" required>\\n{{\\'SIGNUP.ACCEPT_TERMS_AND_CONDITIONS_TITLE\\' | translate}}</md-checkbox></div></div></form></md-tab-body></md-tab>\\n<md-tab ng-disabled=\\\"!vm.emailSent\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"!vm.emailSent\\\">5</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.emailSent\\\"><i class=\\\"icon-check s16\\\"></i></span></span>\\n</md-tab-label><md-tab-body><form name=\\\"vm.forms.wizardStep5\\\" ms-form-wizard-form novalidate><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" class=\\\"md-padding\\\"><div class=\\\"h2\\\">{{\\'SIGNUP.SIGN_UP_COMPLETED\\' | translate}}</div><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-check-circle\\\" class=\\\"s48 green-fg\\\"></md-icon>\\n</div><p class=\\\"w-350\\\">{{\\'SIGNUP.SIGN_UP_COMPLETED_MSG\\' | translate: {email: vm.contact.email} }}</p></div></form>\\n</md-tab-body></md-tab></md-tabs><div class=\\\"navigation\\\" flex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"!vm.emailSent\\\"><md-menu id=\\\"language-menu\\\" md-offset=\\\"0 72\\\" \\nmd-position-mode=\\\"target-right target\\\"><md-button class=\\\"md-icon-button language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"Language\\\" md-menu-origin md-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img \\nclass=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{vm.lang.flag}}.png\\\"></div></md-button><md-menu-content width=\\\"3\\\" \\nid=\\\"language-menu-content\\\"><md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button \\nng-click=\\\"vm.changeLanguage(lang)\\\" aria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\">\\n<span layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" flex><md-button ng-click=\\\"msWizard.previousStep()\\\" class=\\\"stroked\\\" \\nng-disabled=\\\"msWizard.isFirstStep() || vm.checking || vm.creating\\\">{{\\\"IMPORT.PREVIOUS\\\" | translate}}</md-button>\\n<md-button class=\\\"md-raised md-primary\\\" data-test-id=\\\"signup-button-next\\\" \\nng-click=\\\"vm.validateCurrentStep(msWizard.selectedIndex, msWizard.nextStep)\\\" ng-show=\\\"msWizard.selectedIndex < 3\\\" \\nng-disabled=\\\"msWizard.currentStepInvalid() || vm.checking\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular ng-if=\\\"vm.checking\\\" class=\\\"md-accent mr-10\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular>{{\\\"IMPORT.NEXT\\\" | translate}}</div></md-button><md-button class=\\\"md-raised md-primary\\\" \\ndata-test-id=\\\"signup-button-finish\\\" ng-click=\\\"vm.submit(msWizard.nextStep)\\\" ng-show=\\\"msWizard.selectedIndex >= 3\\\" \\nng-disabled=\\\"msWizard.formsIncomplete() || !vm.user.password || !vm.user.repeatPassword || vm.user.password != vm.user.repeatPassword || vm.creating\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.creating\\\" class=\\\"md-accent mr-10\\\" \\nmd-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>{{\\\"SIGNUP.START_TRIAL\\\" | translate}}</div></md-button>\\n</div><md-button class=\\\"md-icon-button\\\" hide-xs hide-sm></md-button></div></ms-form-wizard>\");\n$templateCache.put(\"app/directives/start-banner/nd-start-banner.html\",\"<md-card class=\\\"start-banner-card full-height {{vm.banner.css_class}} {{vm.banner.color}}\\\" ng-style=\\\"vm.getStyle()\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h2\\\">{{vm.getTitle()}}</span></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"full-height\\\"><div layout=\\\"column\\\" class=\\\"full-height\\\"><div flex=\\\"100\\\" \\nng-class=\\\"{\\'pr-100\\': vm.banner.image_background}\\\" ng-bind-html=\\\"vm.getBody()\\\"></div><div layout=\\\"row\\\"><md-button \\nclass=\\\"m-0 mt-16 stroked\\\" ng-if=\\\"vm.banner.link\\\" href=\\\"{{vm.banner.link}}\\\" target=\\\"_blank\\\">{{vm.getButton()}}\\n</md-button><md-button class=\\\"m-0 mt-16 stroked\\\" ng-if=\\\"vm.banner.panel_sref\\\" ui-sref=\\\"{{vm.banner.panel_sref}}\\\">\\n{{vm.getButton()}}</md-button></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/trial-status/nd-trial-status.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"nd-trial-status\\\"><md-icon md-font-icon \\nng-if=\\\"vm.trialRemainingDays < 1\\\" class=\\\"s124 amber-fg\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-circle-outline.5706d718.svg\\\"></md-icon><div \\nid=\\\"remaining-dais-circle\\\" ng-if=\\\"vm.trialRemainingDays > 0\\\" ng-class=\\\"vm.getColor()\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span translate=\\\"TRIAL_EXPIRED.N_DAYS\\\" translate-values=\\\"{days: vm.trialRemainingDays}\\\" \\nng-if=\\\"vm.trialRemainingDays > 1\\\"></span> <span translate=\\\"TRIAL_EXPIRED.1_DAY\\\" ng-if=\\\"vm.trialRemainingDays === 1\\\">\\n</span></div><h1 translate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_EXPIRED\\\" class=\\\"text-center\\\" \\nng-if=\\\"vm.trialRemainingDays < 1\\\"></h1><h1 translate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_DAYS_PLURAL\\\" \\ntranslate-values=\\\"{days: vm.trialRemainingDays}\\\" class=\\\"text-center\\\" ng-if=\\\"vm.trialRemainingDays > 1\\\"></h1><h1 \\ntranslate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_DAYS_SINGULAR\\\" class=\\\"text-center\\\" ng-if=\\\"vm.trialRemainingDays === 1\\\"></h1>\\n<div translate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_EXPIRED_MESSAGE\\\" ng-if=\\\"vm.trialRemainingDays < 1\\\" \\ntranslate-values=\\\"{days: vm.trialDays}\\\" class=\\\"text-center\\\"></div><div \\ntranslate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_DAYS_PLURAL_MESSAGE\\\" ng-if=\\\"vm.trialRemainingDays > 1\\\" \\ntranslate-values=\\\"{days: vm.trialRemainingDays}\\\" class=\\\"text-center\\\"></div><div \\ntranslate=\\\"TRIAL_EXPIRED.FREEMIUM_TRIAL_DAYS_SINGULAR_MESSAGE\\\" ng-if=\\\"vm.trialRemainingDays === 1\\\" \\ntranslate-values=\\\"{days: vm.trialDays}\\\" class=\\\"text-center\\\"></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"full-width\\\"><md-button class=\\\"md-primary stroked mt-16\\\" flex target=\\\"_blank\\\" \\nhref=\\\"https://stockagile.com/solicitar-una-demo/\\\">{{\\'TRIAL_EXPIRED.SCHEDULE_A_MEETING\\' | translate}}</md-button>\\n<md-button class=\\\"md-primary stroked mt-16\\\" flex ng-click=\\\"vm.sendEmail()\\\">\\n{{\\'TRIAL_EXPIRED.SEND_AN_EMAIL\\' | translate}}</md-button></div></div>\");\n$templateCache.put(\"app/directives/two-options-dialog/two-options-dialog.html\",\"<md-dialog id=\\\"two-options-dialog\\\"><md-dialog-content class=\\\"p-24\\\" layout=\\\"column\\\"><h2 class=\\\"md-title\\\" \\ntranslate=\\\"{{vm.title}}\\\"></h2><div class=\\\"md-dialog-content-body\\\"><p translate=\\\"{{vm.body}}\\\" class=\\\"m-0\\\"></p></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" class=\\\"text-center\\\"><md-button ng-class=\\\"vm.cancelClasses\\\" \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-if=\\\"vm.option2Text\\\" class=\\\"md-primary\\\" \\nng-class=\\\"vm.option2Classes\\\" ng-click=\\\"vm.option2Callback($event)\\\" translate=\\\"{{vm.option2Text}}\\\"></md-button>\\n<md-button class=\\\"md-primary\\\" ng-class=\\\"vm.option1Classes\\\" ng-click=\\\"vm.option1Callback($event)\\\" \\ntranslate=\\\"{{vm.option1Text}}\\\"></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/directives/upgrade-subscription-plan-banner/nd-upgrade-subscription-plan-banner.html\",\"<div class=\\\"nd-upgrade-subscription-plan-banner\\\" ng-if=\\\"vm.title\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"title-row\\\"><md-icon class=\\\"plan-limit-icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon><div flex class=\\\"h4\\\" \\nng-bind-html=\\\"vm.title\\\"></div></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div ng-bind-html=\\\"vm.body\\\" flex \\nclass=\\\"mb-8\\\"></div><div layout=\\\"row\\\" layout-align=\\\"end end\\\"><md-button class=\\\"m-0 md-raised md-primary\\\" \\nng-if=\\\"!vm.buttonBelow\\\" ng-click=\\\"vm.upgradePlan()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon class=\\\"mr-5\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon><span flex>\\n{{\\'GENERAL.MORE_INFO\\' | translate}}</span></div></md-button></div></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"vm.buttonBelow\\\"><md-button class=\\\"m-0 md-raised md-primary\\\" ng-click=\\\"vm.upgradePlan()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon><span flex>\\n{{\\'GENERAL.MORE_INFO\\' | translate}}</span></div></md-button></div></div>\");\n$templateCache.put(\"app/directives/user-autocomplete/nd-user-autocomplete.html\",\"<div class=\\\"nd-user-autocomplete\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-autocomplete autofocus \\nmd-items=\\\"item in querySearch()\\\" ng-focus=\\\"setNdBarcodeListenerEnabled(false)\\\" \\nng-blur=\\\"setNdBarcodeListenerEnabled(true)\\\" md-selected-item=\\\"contactInstance\\\" md-search-text=\\\"searchText\\\" \\nmd-selected-item-change=\\\"selectItem(item)\\\" md-item-text=\\\"displayFunction(item)\\\" md-min-length=\\\"2\\\" md-delay=\\\"300\\\" \\nmd-floating-label=\\\"{{\\'USERS.SEARCH_USER\\' | translate}}\\\" placeholder=\\\"{{getPlaceholder()}}\\\" md-no-cache=\\\"true\\\" \\nclass=\\\"w-150\\\"><md-item-template><div layout=\\\"row\\\">{{item.first_name}} {{item.last_name}}</div></md-item-template>\\n<md-not-found>{{\\'USERS.USER_NOT_FOUND\\' | translate}}</md-not-found></md-autocomplete></div>\");\n$templateCache.put(\"app/directives/user-avatar/nd-user-avatar.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"nd-user-avatar\\\"><nd-user-picture class=\\\"mr-8\\\" fullname=\\\"fullname\\\" \\nng-if=\\\"fullname && !isAi\\\"></nd-user-picture><nd-user-picture class=\\\"mr-8\\\" user=\\\"user\\\" ng-if=\\\"user && !isAi\\\">\\n</nd-user-picture><div layout=\\\"row\\\" class=\\\"mr-8\\\" ng-if=\\\"isAi\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-icon-button md-primary ai-icon-wrapper\\\"><md-icon class=\\\"md-avatar md-avatar-icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sa-automation.de8fd6e8.svg\\\"></md-icon></md-button></div><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"text-with-icon\\\"><span \\nng-if=\\\"isAi\\\">SA automation</span> <span ng-if=\\\"fullname && !isAi\\\">{{fullname}}</span> <span ng-if=\\\"user && !isAi\\\">\\n{{user.first_name}} {{{user.last_name}}</span><md-icon ng-if=\\\"infoTooltip && isAi\\\" \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"secondary-text tooltip-info\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{infoTooltip}}</md-tooltip></md-icon></div><div layout=\\\"row\\\"><span ng-if=\\\"date\\\" class=\\\"secondary-text\\\">\\n{{date | date:\\'medium\\'}}</span> <span ng-if=\\\"defaultDate\\\" class=\\\"secondary-text\\\">{{defaultDate | date:\\'medium\\'}}</span>\\n <span ng-if=\\\"secondaryText\\\" class=\\\"secondary-text\\\">{{secondaryText}}</span></div></div></div>\");\n$templateCache.put(\"app/directives/working-activity-card/nd-working-activity-card.html\",\"<md-card class=\\\"nd-working-activity-card\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"QUICKPANEL.YOUR_WORKDAY_ACTIVITY\\\"></span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"full-height no-padding\\\"><nd-working-activity-list></nd-working-activity-list></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/user-picture/nd-user-picture.html\",\"<div class=\\\"nd-user-picture-content\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nstyle=\\\"background-color: #{{getBackgroundColor()}}\\\"><span class=\\\"capitals\\\" style=\\\"color: #{{getForegroundColor()}}\\\">\\n{{getCapitals()}}</span></div>\");\n$templateCache.put(\"app/directives/working-activity-list/nd-working-activity-list.html\",\"<div class=\\\"nd-working-activity-list\\\"><md-list class=\\\"md-dense\\\"><md-list-item \\nng-if=\\\"session.user.workday.status === WORKDAY_STATUSES.NOT_STARTED\\\" class=\\\"secondary-text\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><em translate=\\\"QUICKPANEL.NO_ACTIVITY\\\"></em></md-list-item><md-list-item \\nclass=\\\"md-2-line\\\" flex ng-if=\\\"session.user.workday.start_time\\\"><md-icon md-font-icon=\\\"icon-play\\\" \\nclass=\\\"working-activity-icon green\\\"></md-icon><div class=\\\"md-list-item-text\\\"><h3><span \\ntranslate=\\\"QUICKPANEL.STARTED_AT\\\"></span> <b>{{session.user.workday.start_time | date:\\'H:mm\\'}}</b></h3><p \\nng-if=\\\"session.user.workday.start_notes\\\" class=\\\"pt-5\\\"><em>\\\"{{session.user.workday.start_notes}}\\\"</em></p></div>\\n</md-list-item><md-list-item class=\\\"md-2-line\\\" flex ng-repeat=\\\"activity in session.user.workday.activities\\\"><md-icon \\nmd-font-icon=\\\"icon-pause\\\" class=\\\"working-activity-icon amber\\\"></md-icon><div class=\\\"md-list-item-text\\\"><div \\nclass=\\\"md-list-item-text\\\"><h3><span translate=\\\"QUICKPANEL.PAUSED_FROM\\\"></span> <b>{{activity.start_time | date:\\'H:mm\\'}}\\n</b> <span translate=\\\"QUICKPANEL.PAUSED_TO\\\" ng-if=\\\"activity.end_time\\\"></span> <b ng-if=\\\"activity.end_time\\\">\\n{{activity.end_time | date:\\'H:mm\\'}}</b> <span ng-if=\\\"activity.end_time\\\" class=\\\"secondary-text\\\">\\n({{activity.duration / 60 | number:0}} min)</span></h3><p ng-if=\\\"activity.start_notes\\\" class=\\\"pt-5\\\"><em>\\n\\\"{{activity.start_notes}}\\\"</em> <em ng-if=\\\"activity.end_notes\\\">- \\\"{{activity.end_notes}}\\\"</em></p></div></div>\\n</md-list-item><md-list-item class=\\\"md-2-line\\\" flex ng-if=\\\"session.user.workday.end_time\\\"><md-icon \\nmd-font-icon=\\\"icon-stop\\\" class=\\\"working-activity-icon red\\\"></md-icon><div class=\\\"md-list-item-text\\\"><h3><span \\ntranslate=\\\"QUICKPANEL.FINISHED_AT\\\"></span> <b>{{session.user.workday.end_time | date:\\'H:mm\\'}}</b></h3><p \\nng-if=\\\"session.user.workday.end_notes\\\" class=\\\"pt-5\\\"><em>\\\"{{session.user.workday.end_notes}}\\\"</em></p></div>\\n</md-list-item><md-divider class=\\\"mv-5\\\"></md-divider><md-list-item><input class=\\\"nd-input p-5\\\" ng-model=\\\"vm.notes\\\" \\nflex placeholder=\\\"{{\\'QUICKPANEL.NOTES\\' | translate}}\\\"></md-list-item><md-list-item><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex><md-button ng-if=\\\"session.user.workday.status === WORKDAY_STATUSES.NOT_STARTED\\\" \\nng-click=\\\"vm.start()\\\" layout=\\\"row\\\" class=\\\"stroked\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\" icon-play\\\" \\nclass=\\\"mr-8\\\"></md-icon><span translate=\\\"QUICKPANEL.START\\\"></span></md-button><md-button \\nng-if=\\\"session.user.workday.status === WORKDAY_STATUSES.STARTED\\\" ng-click=\\\"vm.pause()\\\" layout=\\\"row\\\" class=\\\"stroked\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-pause\\\" class=\\\"mr-8\\\"></md-icon><span \\ntranslate=\\\"QUICKPANEL.PAUSE\\\"></span></md-button><md-button \\nng-if=\\\"session.user.workday.status === WORKDAY_STATUSES.PAUSED\\\" ng-click=\\\"vm.pause()\\\" layout=\\\"row\\\" class=\\\"stroked\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-play\\\" class=\\\"mr-8\\\"></md-icon><span \\ntranslate=\\\"QUICKPANEL.RESUME\\\"></span></md-button><md-button \\nng-if=\\\"session.user.workday.status === WORKDAY_STATUSES.STARTED\\\" ng-click=\\\"vm.finish()\\\" layout=\\\"row\\\" class=\\\"stroked\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-stop\\\" class=\\\"mr-8-fg\\\"></md-icon><span \\ntranslate=\\\"QUICKPANEL.FINISH\\\"></span></md-button><md-button \\nng-if=\\\"session.user.workday.status === WORKDAY_STATUSES.FINISHED\\\" ng-click=\\\"vm.start()\\\" layout=\\\"row\\\" class=\\\"stroked\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-replay\\\" class=\\\"mr-8\\\"></md-icon><span \\ntranslate=\\\"QUICKPANEL.REOPEN\\\"></span></md-button></div></md-list-item></md-list></div>\");\n$templateCache.put(\"app/core/directives/ms-info-bar/ms-info-bar.html\",\"<div id=\\\"ms-info-bar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div id=\\\"ms-info-bar-message\\\" ng-transclude flex>\\n</div><md-button id=\\\"ms-info-bar-close\\\" class=\\\"md-icon-button\\\" aria-label=\\\"Close\\\" ng-click=\\\"removeInfoBar()\\\"><md-icon \\nmd-font-icon=\\\"icon-close s24\\\"></md-icon></md-button></div>\");\n$templateCache.put(\"app/core/directives/ms-material-color-picker/ms-material-color-picker.html\",\"<md-menu md-position-mode=\\\"target-right target\\\"><div ng-click=\\\"$mdOpenMenu($event)\\\"><ms-color-picker-button><md-button \\naria-label=\\\"Row Color\\\" md-menu-origin ng-click=\\\"$mdOpenMenu($event)\\\" ng-class=\\\"vm.selectedColor.class\\\"><span \\nng-show=\\\"vm.selectedColor.palette\\\">{{vm.selectedColor.palette}} {{vm.selectedColor.hue}} </span><span \\nng-show=\\\"!vm.selectedColor.palette\\\">Select Color</span></md-button></ms-color-picker-button></div><md-menu-content \\nclass=\\\"ms-material-color-picker-menu-content\\\" layout-column><header \\nng-class=\\\"vm.selectedColor.class || \\'md-accent-bg\\'\\\" class=\\\"md-whiteframe-4dp\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><md-button md-prevent-menu-close ng-click=\\\"vm.activateHueSelection(false,false)\\\" \\nclass=\\\"md-icon-button\\\" ng-class=\\\"{\\'hidden\\':!vm.selectedPalette}\\\" aria-label=\\\"Palette\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\" class=\\\"s20\\\"></md-icon></md-button><span ng-if=\\\"vm.selectedColor.palette\\\">\\n{{vm.selectedColor.palette}} {{vm.selectedColor.hue}} </span><span ng-if=\\\"!vm.selectedColor.palette\\\">Select Color\\n</span><md-button class=\\\"remove-color-button md-icon-button\\\" ng-click=\\\"vm.removeColor()\\\" aria-label=\\\"Remove Color\\\">\\n<md-icon md-font-icon=\\\"icon-delete\\\" class=\\\"s20\\\"></md-icon></md-button></header><div class=\\\"colors\\\" ms-scroll><div \\nng-show=\\\"!vm.selectedPalette\\\" layout=\\\"row\\\" layout-wrap><div class=\\\"color\\\" ng-class=\\\"\\'md-\\'+palette+\\'-500-bg\\'\\\" \\nng-repeat=\\\"(palette, hues) in vm.palettes\\\" ng-click=\\\"vm.activateHueSelection(palette,hues)\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\" md-prevent-menu-close md-ink-ripple><span class=\\\"label\\\">{{palette}}</span></div></div><div \\nng-show=\\\"vm.selectedPalette\\\" layout=\\\"row\\\" layout-wrap><div class=\\\"color\\\" \\nng-class=\\\"\\'md-\\'+vm.selectedPalette+\\'-\\'+hue+\\'-bg\\'\\\" ng-repeat=\\\"(hue, values) in vm.selectedHues\\\" \\nng-click=\\\"vm.selectColor(vm.selectedPalette,hue)\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\" md-ink-ripple><span \\nclass=\\\"label\\\">{{hue}} </span><i ng-if=\\\"vm.selectedPalette == vm.selectedColor.palette && hue == vm.selectedColor.hue\\\" \\nclass=\\\"s16 icon-check\\\"></i></div></div></div></md-menu-content></md-menu>\");\n$templateCache.put(\"app/core/directives/ms-search-bar/ms-search-bar.html\",\"<div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><label for=\\\"ms-search-bar-input\\\"><md-button \\nclass=\\\"ms-search-bar-expander md-icon-button\\\" aria-label=\\\"Expand Search Bar\\\" ng-click=\\\"MsSearchBar.expand()\\\" \\nng-if=\\\"!MsSearchBar.resultsLoading || MsSearchBar.collapsed\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon s24\\\">\\n</md-icon></md-button><div class=\\\"ms-search-bar-loader\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"MsSearchBar.resultsLoading && !MsSearchBar.collapsed\\\"><md-progress-circular class=\\\"md-accent\\\" md-diameter=\\\"32\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></div></label><input id=\\\"ms-search-bar-input\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" flex ng-model=\\\"MsSearchBar.query\\\" ng-model-options=\\\"MsSearchBar.queryOptions\\\" \\nng-blur=\\\"MsSearchBar.collapse()\\\" ng-keydown=\\\"MsSearchBar.handleKeydown($event)\\\"><md-button \\nclass=\\\"ms-search-bar-collapser md-icon-button\\\" ng-click=\\\"MsSearchBar.collapse()\\\" aria-label=\\\"Collapse Search Bar\\\">\\n<md-icon md-font-icon=\\\"icon-close\\\" class=\\\"icon s24\\\"></md-icon></md-button><div class=\\\"ms-search-bar-results\\\" \\nng-if=\\\"MsSearchBar.results\\\" ms-scroll><div class=\\\"no-results\\\" ng-if=\\\"MsSearchBar.results.length === 0\\\">No Results!\\n</div><div class=\\\"result\\\" ng-repeat=\\\"result in MsSearchBar.results\\\" ng-click=\\\"MsSearchBar.handleResultClick(result)\\\" \\nng-mouseenter=\\\"MsSearchBar.handleMouseenter($index)\\\" ng-mousedown=\\\"MsSearchBar.absorbEvent($event)\\\" \\nng-class=\\\"{\\'selected\\': $index == MsSearchBar.selectedResultIndex}\\\" md-ink-ripple><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"icon-container\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><i \\nng-if=\\\"result.icon\\\" class=\\\"icon {{result.icon}}\\\"></i><div ng-if=\\\"!result.icon\\\" class=\\\"square md-accent-bg\\\"></div></div>\\n<div><div class=\\\"title\\\">{{result.title}}</div><div class=\\\"description\\\" ng-if=\\\"result.description\\\">\\n{{result.description}}</div></div></div></div></div></div>\");\n$templateCache.put(\"app/core/directives/ms-shortcuts/ms-shortcuts.html\",\"<div class=\\\"shortcuts-container\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex \\nng-class=\\\"{\\'mobile-bar-active\\': MsShortcuts.mobileBarActive}\\\"><div class=\\\"flex-noshrink\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex><div class=\\\"shortcuts hide show-gt-xs\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nms-scroll ng-if=\\\"MsShortcuts.shortcuts.length > 0\\\" ng-sortable=\\\"MsShortcuts.sortableOptions\\\"><div \\nng-repeat=\\\"shortcut in MsShortcuts.shortcuts\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-icon-button shortcut\\\" aria-label=\\\"{{shortcut.title}}\\\" ui-sref=\\\"{{shortcut.uisref}}\\\"><md-icon \\nng-if=\\\"shortcut.icon\\\" md-font-icon=\\\"{{shortcut.icon}}\\\" class=\\\"icon s24\\\"></md-icon><div ng-if=\\\"!shortcut.icon\\\" \\nclass=\\\"first-letter\\\">{{shortcut.title.charAt(0)}}</div><md-tooltip md-direction=\\\"bottom\\\">{{shortcut.title}}\\n</md-tooltip></md-button></div></div><md-menu md-offset=\\\"8 56\\\" class=\\\"shortcut-menu hide show-gt-xs\\\"><md-button \\nclass=\\\"md-icon-button add-shortcut-button\\\" aria-label=\\\"Add shortcut\\\" ng-click=\\\"$mdOpenMenu($event)\\\"><md-icon \\nmd-menu-origin md-font-icon=\\\"icon-star\\\" class=\\\"icon amber-600-fg s24\\\"></md-icon><md-tooltip md-direction=\\\"bottom\\\">\\nClick to add/remove shortcut</md-tooltip></md-button><md-menu-content><div id=\\\"ms-shortcut-add-menu\\\"><div \\nclass=\\\"shortcut-search\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"search-icon\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"!MsShortcuts.resultsLoading\\\"><md-icon md-menu-align-target \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"icon s24\\\"></md-icon></div><div class=\\\"shortcut-loader\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"MsShortcuts.resultsLoading\\\"><md-progress-circular class=\\\"md-accent\\\" \\nmd-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div><input type=\\\"text\\\" placeholder=\\\"Search\\\" flex \\nng-model=\\\"MsShortcuts.query\\\" ng-model-options=\\\"MsShortcuts.queryOptions\\\" \\nng-keydown=\\\"MsShortcuts.handleKeydown($event)\\\"></div><div class=\\\"results\\\" ng-if=\\\"MsShortcuts.results\\\" ms-scroll><div \\nclass=\\\"no-results\\\" ng-if=\\\"MsShortcuts.results.length === 0\\\">No Results!</div><div class=\\\"result\\\" \\nng-repeat=\\\"result in MsShortcuts.results\\\" ng-click=\\\"MsShortcuts.handleResultClick(result)\\\" \\nng-mouseenter=\\\"MsShortcuts.handleMouseenter($index)\\\" ng-mousedown=\\\"MsShortcuts.absorbEvent($event)\\\" \\nng-class=\\\"{\\'selected\\': $index == MsShortcuts.selectedResultIndex}\\\" md-prevent-menu-close=\\\"md-prevent-menu-close\\\" \\nmd-ink-ripple><div layout=\\\"row\\\" layout-align=\\\"start space-between\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex>\\n<div class=\\\"icon icon-container\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><i ng-if=\\\"result.icon\\\" \\nclass=\\\"{{result.icon}}\\\"></i><div ng-if=\\\"!result.icon\\\" class=\\\"square md-accent-bg\\\"></div></div><div><div class=\\\"title\\\">\\n{{result.title}}</div></div></div><md-icon md-font-icon=\\\"icon-pin\\\" class=\\\"icon s18\\\" \\nng-class=\\\"{\\'fade-text\\': !result.hasShortcut}\\\"></md-icon></div></div></div></div></md-menu-content></md-menu></div>\\n<md-button class=\\\"md-icon-button toggle-mobile-menu hide-gt-xs\\\" aria-label=\\\"Add shortcut\\\" \\nng-click=\\\"MsShortcuts.toggleMobileBar()\\\"><md-icon md-menu-origin md-font-icon=\\\"icon-star\\\" \\nclass=\\\"icon amber-600-fg s24\\\" ng-hide=\\\"MsShortcuts.mobileBarActive\\\"></md-icon><md-icon md-menu-origin \\nmd-font-icon=\\\"icon-close\\\" class=\\\"icon s24\\\" ng-hide=\\\"!MsShortcuts.mobileBarActive\\\"></md-icon></md-button></div>\");\n$templateCache.put(\"app/directives/customer/wbCustomerDetail/wbCustomerDetail.html\",\"<form name=\\\"customerForm\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"saveCustomer()\\\"><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.NAME\\\"></label><input type=\\\"text\\\" \\nname=\\\"name\\\" ng-model=\\\"customer.first_name\\\" required><div ng-messages=\\\"customerForm.name.$error\\\" \\nng-show=\\\"customerForm.name.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"ACCOUNT.COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex><label \\ntranslate=\\\"CUSTOMER.DETAILS.SURNAME\\\"></label><input type=\\\"text\\\" name=\\\"surname\\\" ng-model=\\\"customer.last_name\\\" required>\\n<div ng-messages=\\\"customerForm.surname.$error\\\" ng-show=\\\"customerForm.surname.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"ACCOUNT.COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.EMAIL\\\"></label><input type=\\\"text\\\" name=\\\"email\\\" \\nng-model=\\\"customer.email\\\"></md-input-container></div><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-input-container flex>\\n<label translate=\\\"CUSTOMER.DETAILS.PHONE\\\"></label><input type=\\\"text\\\" name=\\\"phone\\\" ng-model=\\\"customer.phone\\\">\\n</md-input-container><md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.ADDRESS\\\"></label><input type=\\\"text\\\" \\nname=\\\"address\\\" ng-model=\\\"customer.address\\\"></md-input-container><md-input-container flex><label \\ntranslate=\\\"CUSTOMER.DETAILS.CITY\\\"></label><input type=\\\"text\\\" name=\\\"city\\\" ng-model=\\\"customer.city\\\"></md-input-container>\\n</div><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.ZIP\\\"></label>\\n<input type=\\\"text\\\" name=\\\"zip\\\" ng-model=\\\"customer.zip\\\"></md-input-container><md-input-container flex \\nng-if=\\\"hideGender == false\\\"><label translate=\\\"CUSTOMER.DETAILS.GENDER\\\"></label><md-select ng-model=\\\"customer.gender\\\">\\n<md-option value=\\\"1\\\" translate=\\\"CUSTOMER.DETAILS.MALE\\\"></md-option><md-option value=\\\"2\\\" \\ntranslate=\\\"CUSTOMER.DETAILS.FEMALE\\\"></md-option></md-select></md-input-container><md-input-container flex><label \\ntranslate=\\\"CUSTOMER.DETAILS.CREATED_AT\\\"></label><input type=\\\"date\\\" name=\\\"created_at\\\" ng-model=\\\"creation_date\\\" \\ndisabled=\\\"disabled\\\"></md-input-container></div><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\" ng-if=\\\"hideComments == false\\\">\\n<md-input-container flex><label translate=\\\"CUSTOMER.DETAILS.COMMENTS\\\"></label><input type=\\\"text\\\" name=\\\"created_at\\\" \\nng-model=\\\"customer.comments\\\"></md-input-container></div><md-button class=\\\"md-raised md-primary md-raised\\\" \\naria-label=\\\"Save\\\" ng-if=\\\"hideSaveButton == false\\\" ng-disabled=\\\"customerForm.$invalid\\\" translate=\\\"ACCOUNT.SAVE\\\" \\nng-click=\\\"saveCustomer()\\\"></md-button><md-button class=\\\"md-raised md-warn\\\" aria-label=\\\"Delete\\\" \\ntranslate=\\\"CUSTOMER.DETAILS.DELETE\\\" ng-click=\\\"deleteCustomer()\\\" ng-disabled=\\\"isNewCustomer\\\" \\nng-if=\\\"hideDeleteButton == false\\\"></md-button></form>\");\n$templateCache.put(\"app/directives/dashboard-items/nd-dashboard-items-card/nd-dashboard-items-card.html\",\"<md-card class=\\\"nd-dashboard-item\\\"><md-card-title><md-card-title-text><span class=\\\"h3 text-bold\\\">\\n{{vm.title | translate}}</span></md-card-title-text></md-card-title><md-card-content layout-fill><div \\nclass=\\\"loading h-250\\\" ng-if=\\\"vm.loading\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular>\\n</md-progress-circular></div><div layout=\\\"row\\\" layout-wrap><div \\nng-repeat=\\\"dashboardItem in vm.dashboardItems | orderBy: \\'position\\'\\\" ng-click=\\\"vm.dashboardItemClicked(dashboardItem)\\\" \\nflex=\\\"100\\\" flex-gt-md=\\\"50\\\"><div class=\\\"dashboard-item\\\"><div class=\\\"dashboard-item-card\\\" layout=\\\"column\\\"><div \\nclass=\\\"dashboard-item-image\\\" style=\\\"background-image: url({{dashboardItem.image}})\\\"></div><div \\nclass=\\\"dashboard-item-floating-image\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"dashboardItem.floating_image\\\"><img \\nng-src=\\\"{{dashboardItem.floating_image}}\\\"></div><div class=\\\"dashboard-item-content\\\"><div class=\\\"dashboard-item-title\\\">\\n{{vm.getDashboardItemTitle(dashboardItem)}}</div><div class=\\\"dashboard-item-body secondary-text\\\">\\n{{vm.getDashboardItemBody(dashboardItem)}}</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-clock\\\" class=\\\"s14 md-primary mr-5\\\" ng-if=\\\"dashboardItem.minutes\\\"></md-icon><span \\nng-if=\\\"dashboardItem.minutes\\\" class=\\\"mr-5\\\">{{dashboardItem.minutes}} {{\\\"GENERAL.MINUTE_ABBR\\\" | translate}}</span>\\n<md-icon md-font-icon=\\\"icon-play-circle-outline\\\" class=\\\"s14 md-primary mr-5\\\" ng-if=\\\"dashboardItem.videos\\\"></md-icon>\\n<span ng-if=\\\"dashboardItem.videos\\\" class=\\\"mr-5\\\">\\n{{dashboardItem.videos}} {{ (dashboardItem.videos === 1 ? \\\"START.VIDEO\\\" : \\\"START.VIDEOS\\\") | translate}}</span> <span \\nflex></span></div></div></div></div></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/directives/invoice/neworderinvoice/wbNewOrderInvoice.html\",\"<div class=\\\"invoice\\\"><md-card class=\\\"no-margin\\\"><md-card-title layout=\\\"column\\\" class=\\\"pt-40 pl-40 pr-40 pb-0\\\" \\nng-hide=\\\"hideTitle\\\"><span class=\\\"md-title\\\">Bill</span><div layout=\\\"row\\\"><span class=\\\"md-subhead\\\">Order code:</span> \\n<span class=\\\"md-subhead md-accent-fg pl-10\\\">{{order.code}}</span></div></md-card-title><md-card-content class=\\\"pt-40\\\">\\n<table class=\\\"simple\\\"><thead><tr><td class=\\\"pl-24\\\">Code - Item</td><td class=\\\"text-right pr-24\\\">Price</td></tr></thead>\\n<tbody><tr ng-repeat=\\\"item in list | orderBy: \\'code\\'\\\"><td><span>#{{item.code}}</span> - {{item.item.item_type.name}} - \\n<span class=\\\"secondary-text\\\">{{item.item.action.name}}</span></td><td class=\\\"text-right h4\\\">\\n{{item.final_price.toFixed(2)}}{{item.meta_currency | currencyCharacter}}</td></tr><tr class=\\\"subtotal\\\" \\nng-if=\\\"showSubtotal\\\"><td class=\\\"text-uppercase pl-24 secondary-text\\\">Sub total</td><td \\nclass=\\\"text-right pr-24 secondary-text h4\\\">{{getSubTotal()}}{{company.currency | currencyCharacter}}</td></tr><tr \\nclass=\\\"tax\\\"><td class=\\\"text-uppercase pl-24 secondary-text\\\">Tax ({{company.vat}}%)</td><td \\nclass=\\\"text-right pr-24 secondary-text h4\\\">{{getTotalTax()}}{{company.currency | currencyCharacter}}</td></tr><tr><td \\nclass=\\\"text-uppercase pl-24 text-bold h2\\\">Total</td><td class=\\\"text-right pr-24 text-bold h2\\\">\\n{{getTotal()}}{{company.currency | currencyCharacter}}</td></tr></tbody></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/directives/item/wbListItems/wbListItems.html\",\"<div class=\\\"white-bg md-whiteframe-1dp\\\"><md-list flex class=\\\"p-0\\\"><md-subheader class=\\\"md-no-sticky md-white-bg\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-input-container id=\\\"listitems-search-input\\\" \\nclass=\\\"h-30 no-margin\\\"><label>Search</label><md-icon class=\\\"icon icon-magnify font-size-24\\\"></md-icon><input \\nng-model=\\\"findString\\\"></md-input-container><div class=\\\"edit-group-form\\\" ng-show=\\\"vm.listType.name\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span ng-show=\\\"editGroupForm.$visible\\\" editable-text=\\\"vm.listType.name\\\" \\ne-form=\\\"editGroupForm\\\" onaftersave=\\\"vm.editGroup()\\\"></span><md-button class=\\\"md-icon-button edit-group-button\\\" \\nng-click=\\\"editGroupForm.$show()\\\" ng-hide=\\\"editGroupForm.$visible\\\" aria-label=\\\"edit group name\\\" translate \\ntranslate-attr-label=\\\"CONTACTS.EDIT_GROUP_NAME\\\"><md-icon md-font-icon=\\\"icon-pencil s18\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button edit-group-button\\\" ng-click=\\\"vm.deleteGroup($event)\\\" ng-hide=\\\"editGroupForm.$visible\\\" \\naria-label=\\\"delete group\\\" translate translate-attr-label=\\\"CONTACTS.DELETE_GROUP\\\"><md-icon \\nmd-font-icon=\\\"icon-delete s18\\\"></md-icon></md-button></div><div flex></div><md-menu \\nmd-position-mode=\\\"target-right target\\\"><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Sort\\\"><md-icon \\nmd-font-icon=\\\"icon-sort-alphabetical\\\" ng-click=\\\"$mdOpenMenu($event)\\\"></md-icon></md-button><md-menu-content width=\\\"3\\\">\\n<md-menu-item><md-button ng-click=\\\"sortAndToggleIf(ORDERBY_NAME)\\\"><span>Item Name</span></md-button></md-menu-item>\\n<md-menu-item><md-button ng-click=\\\"sortAndToggleIf(ORDERBY_ACTION)\\\"><span>Action Name</span></md-button></md-menu-item>\\n<md-menu-item><md-button ng-click=\\\"sortAndToggleIf(ORDERBY_PAID)\\\"><span>Paid</span></md-button></md-menu-item>\\n</md-menu-content></md-menu></div></md-subheader><md-divider></md-divider><wb-list-items-row \\nng-repeat=\\\"orderItem in orderItems| filter: findString | orderBy: listOrder : listOrderAsc\\\" item=\\\"orderItem\\\" \\nshow-status-tags=\\\"showStatusTags\\\"></wb-list-items-row><md-list-item ng-show=\\\"orderItems.length === 0\\\"><p>No results</p>\\n</md-list-item></md-list></div>\");\n$templateCache.put(\"app/directives/item/wbItemDetail/wbItemDetail.html\",\"<md-tabs md-dynamic-height md-border-bottom><md-tab label=\\\"Information\\\"><md-content class=\\\"md-padding\\\"><form \\nname=\\\"item-detail\\\" class=\\\"md-inline-form\\\" novalidate><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div layout=\\\"column\\\" \\nflex=\\\"50\\\"><div layout=\\\"row\\\" flex><md-icon class=\\\"detail-icon\\\" md-font-icon=\\\"icon-tag-faces\\\"></md-icon>\\n<md-input-container><label translate=\\\"Percentage Discount\\\"></label><input type=\\\"number\\\" \\nng-model=\\\"item.percentage_discount\\\" max=\\\"100\\\" min=\\\"0\\\" autocomplete=\\\"off\\\"><div class=\\\"hint\\\" \\nng-if=\\\"item.percentage_discount\\\">Final price: <span class=\\\"md-accent-fg\\\">\\n{{getFinalPrice()| price}}{{company.currency | currencyCharacter}}</span></div></md-input-container></div></div><div \\nlayout=\\\"column\\\" flex=\\\"50\\\"><md-datepicker ng-model=\\\"item.due_date\\\" md-placeholder=\\\"Pickup date\\\"></md-datepicker></div>\\n</div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><md-icon class=\\\"detail-icon\\\" md-font-icon=\\\"icon-comment-text-outline\\\">\\n</md-icon><md-input-container flex><label translate=\\\"Custom details\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"item.details\\\"></md-input-container></div></form></md-content></md-tab><md-tab label=\\\"Colors\\\"><md-content \\nclass=\\\"md-padding\\\"><div layout=\\\"row\\\"><md-grid-list flex md-cols-xs=\\\"4\\\" md-cols-sm=\\\"4\\\" md-cols-md=\\\"4\\\" md-cols-gt-md=\\\"4\\\" \\nmd-cols-xl=\\\"4\\\" md-row-height=\\\"1:1\\\" md-gutter=\\\"12px\\\"><md-grid-tile \\nng-repeat=\\\"color in materialUiColorsMin track by $index\\\" ng-style=\\\"{\\'background-color\\': \\'#\\' + color.color}\\\" \\nclass=\\\"color-selector\\\" ng-click=\\\"setToolbarBackgroundColor(color.color)\\\"></md-grid-tile></md-grid-list></div>\\n</md-content></md-tab><md-tab label=\\\"Material\\\"><md-content class=\\\"md-padding\\\"><md-content class=\\\"md-padding\\\">\\n<md-grid-list flex id=\\\"materials-grid\\\" md-cols-xs=\\\"4\\\" md-cols-sm=\\\"4\\\" md-cols-md=\\\"4\\\" md-cols-gt-md=\\\"4\\\" md-cols-xl=\\\"4\\\" \\nmd-row-height=\\\"3:1\\\" md-gutter=\\\"12px\\\"><md-grid-tile ng-repeat=\\\"material in clothMaterials track by $index\\\"><md-checkbox \\nng-model=\\\"material.selected\\\" ng-change=\\\"addOrRemoveMaterial(material)\\\">\\n{{\\'MATERIALS.\\' + material.material | translate }}</md-checkbox></md-grid-tile></md-grid-list></md-content></md-content>\\n</md-tab></md-tabs>\");\n$templateCache.put(\"app/directives/item/wbListItemsRow/wbListItemsRow.html\",\"<div><md-list-item class=\\\"item-row\\\" ng-click=\\\"isOpen = !isOpen\\\"><div class=\\\"md-list-item-text h-48\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-checkbox \\nclass=\\\"no-margin\\\" aria-label=\\\"Item\\\" ng-model=\\\"item.selected\\\"></md-checkbox><div class=\\\"cloth-icon w-30 h-30 mr-15\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" hide-xs><span ng-class=\\\"item.item.item_type.icon\\\" \\nclass=\\\"md-primary-fg ml-15 mr-15\\\"></span></div><span>#{{item.code}} - </span><span class=\\\"mr-5\\\">\\n{{item.item.item_type.name}}</span> <span class=\\\"md-accent-fg\\\">{{item.item.action.name}}</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><div ng-if=\\\"showStatusTags\\\" class=\\\"tags\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nlayout-wrap><div ng-if=\\\"item.status==3\\\" class=\\\"tag\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"tag-color red-500-bg\\\"></div><div class=\\\"tag-label\\\">Cancelled</div></div><div ng-if=\\\"item.status!=3\\\" class=\\\"tag\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"tag-color red-500-bg\\\" \\nng-class=\\\"{\\'green-500-bg\\': item.status==2,\\'yellow-500-bg\\': item.status==1}\\\"></div><div class=\\\"tag-label\\\">Finished</div>\\n</div><div class=\\\"tag\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"tag-color red-500-bg\\\" \\nng-class=\\\"{\\'green-500-bg\\': item.collected}\\\"></div><div class=\\\"tag-label\\\">Collected</div></div><div \\nng-if=\\\"item.status!=3\\\" class=\\\"tag\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"tag-color red-500-bg\\\" \\nng-class=\\\"{\\'green-500-bg\\': item.paid}\\\"></div><div class=\\\"tag-label\\\">Paid</div></div></div><div ng-if=\\\"!showStatusTags\\\">\\n<h4>{{item.final_price}}{{item.meta_currency | currencyCharacter}}</h4><span ng-if=\\\"item.paid\\\" \\nclass=\\\"green-fg ml-15 text-uppercase\\\">Paid</span> <span ng-if=\\\"!item.paid\\\" class=\\\"red-fg ml-15 text-uppercase\\\">Not Paid\\n</span></div><md-menu md-position-mode=\\\"target-right target\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdOpenMenu($event)\\\"><md-icon class=\\\"icon-dots-vertical font-size-24\\\"></md-icon></md-button><md-menu-content \\nwidth=\\\"4\\\"><md-menu-item><md-button><md-icon class=\\\"icon icon-checkbox-blank-circle font-size-24 pl-8 no-padding\\\" \\nng-style=\\\"{\\'color\\': \\'#\\'+statusColors.PENDING}\\\"></md-icon>Set as pending</md-button></md-menu-item><md-menu-item>\\n<md-button><md-icon class=\\\"icon icon-checkbox-blank-circle font-size-24 pl-8 no-padding\\\" \\nng-style=\\\"{\\'color\\': \\'#\\'+statusColors.PROCESSING}\\\"></md-icon>Set as processing</md-button></md-menu-item><md-menu-item>\\n<md-button><md-icon class=\\\"icon icon-checkbox-blank-circle font-size-24 pl-8 no-padding\\\" \\nng-style=\\\"{\\'color\\': \\'#\\'+statusColors.FINISHED}\\\"></md-icon>Set as finished</md-button></md-menu-item><md-divider>\\n</md-divider><md-menu-item><md-button><md-icon class=\\\"icon icon-trash font-size-24 pl-8 no-padding\\\"></md-icon>\\nDelete item</md-button></md-menu-item></md-menu-content></md-menu></div></div><md-divider></md-divider></md-list-item>\\n<md-list-item ng-if=\\\"isOpen\\\" class=\\\"grey-100-bg padding-0\\\"><div layout=\\\"row\\\" flex><div class=\\\"padding-24\\\" \\nlayout=\\\"column\\\" flex=\\\"50\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-24\\\"><i \\nclass=\\\"icon icon-calendar-blank\\\"></i> <span class=\\\"pl-8\\\">//TODO: created date</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-24\\\"><i class=\\\"icon icon-calendar-check\\\"></i> <span class=\\\"pl-8\\\">\\n{{item.due_date | dataAndHour}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-24\\\"><i \\nclass=\\\"icon icon-cog\\\"></i> <span class=\\\"pl-8\\\">{{item.status | wb_status}}</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-24\\\" ng-if=\\\"item.percentage_discount\\\"><i class=\\\"icon icon-tag-faces\\\"></i> <span \\nclass=\\\"pl-8\\\">{{item.percentage_discount}}%</span> <span class=\\\"pl-5\\\" \\nng-if=\\\"item.custom_price || item.percentage_discount\\\">(<del>{{item.meta_price}}</del>\\n{{item.meta_currency | currencyCharacter}})</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-24\\\"><i \\nclass=\\\"icon icon-cash\\\"></i> <span class=\\\"pl-5\\\">{{item.final_price}}{{item.meta_currency | currencyCharacter}}</span> \\n<span ng-if=\\\"item.paid\\\" class=\\\"green-fg pl-5 text-uppercase\\\">Paid</span> <span ng-if=\\\"!item.paid\\\" \\nclass=\\\"red-fg pl-5 text-uppercase\\\">Not Paid</span></div></div><div class=\\\"padding-24\\\" layout=\\\"column\\\" flex=\\\"50\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-24\\\" ng-if=\\\"item.color\\\"><i class=\\\"icon icon-palette\\\"></i> <i \\nclass=\\\"icon icon-checkbox-blank-circle pl-8\\\" ng-style=\\\"{\\'color\\': \\'#\\'+item.color}\\\"></i></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-24\\\" ng-if=\\\"item.material\\\"><i class=\\\"icon icon-beaker\\\"></i> <span class=\\\"pl-8\\\">\\n{{item.material | wb_materials}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-24\\\" \\nng-if=\\\"item.material\\\"><i class=\\\"icon icon-comment-text-outline\\\"></i> <span class=\\\"pl-8\\\">{{item.details}}</span></div>\\n</div><md-divider></md-divider></div></md-list-item></div>\");\n$templateCache.put(\"app/directives/nd-stock-locations/nd-stock-locations-by-products/nd-stock-locations-by-products-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" \\nserializer=\\\"\\'ProductVariantStockLocationSerializer\\'\\\" search-fields=\\\"vm.searchFields\\\" storage-label=\\\"vm.storageLabel\\\">\\n</nd-grid>\");\n$templateCache.put(\"app/directives/nd-stock-locations/nd-stock-locations-by-warehouse/nd-stock-locations-by-warehouse-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout=\\\"column\\\" layout-fill flex url=\\\"vm.url\\\" status=\\\"status\\\" \\nsearch-fields=\\\"vm.searchFields\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid>\");\n$templateCache.put(\"app/directives/order-products/nd-actions-order-selector/nd-actions-order-selector.html\",\"<div id=\\\"action-order-selector\\\"><nd-purchase-actions ng-if=\\\"type === \\'PurchaseOrder\\'\\\" order=\\\"order\\\" options=\\\"options\\\" \\ntype=\\\"\\'PurchaseOrder\\'\\\"></nd-purchase-actions><nd-purchase-order-delivery-actions \\nng-if=\\\"type === \\'PurchaseOrderDelivery\\'\\\" order=\\\"order\\\" options=\\\"options\\\" type=\\\"\\'PurchaseOrderDelivery\\'\\\">\\n</nd-purchase-order-delivery-actions><nd-transfer-order-actions ng-if=\\\"type === \\'TransferOrder\\'\\\" order=\\\"order\\\" \\noptions=\\\"options\\\" type=\\\"\\'TransferOrder\\'\\\"></nd-transfer-order-actions><nd-transfer-order-delivery-actions \\nng-if=\\\"type === \\'TransferOrderDelivery\\'\\\" order=\\\"order\\\" options=\\\"options\\\" type=\\\"\\'TransferOrderDelivery\\'\\\">\\n</nd-transfer-order-delivery-actions><nd-sale-order-actions ng-if=\\\"type === \\'SaleOrder\\'\\\" order=\\\"order\\\" \\noptions=\\\"options\\\" type=\\\"\\'SaleOrder\\'\\\"></nd-sale-order-actions><nd-sale-order-delivery-actions \\nng-if=\\\"type === \\'SaleOrderDelivery\\'\\\" order=\\\"order\\\" options=\\\"options\\\" type=\\\"\\'SaleOrderDelivery\\'\\\">\\n</nd-sale-order-delivery-actions></div>\");\n$templateCache.put(\"app/directives/order-products/nd-add-order-product/nd-add-order-product.html\",\"<div class=\\\"add-order-product\\\" flex id=\\\"nd-add-order-product\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-product-autocomplete class=\\\"m-5\\\" flex ng-disabled=\\\"!order.is_editable\\\" callback=\\\"vm.searchProduct(product)\\\" \\ndata-test-id=\\\"newpurchase-product\\\" disabled=\\\"!order.is_editable\\\" collection=\\\"order.collection\\\" type=\\\"type\\\" \\nplaceholder=\\\"\\'PURCHASE.SEARCH_ADD_PRODUCT\\'\\\"></nd-product-autocomplete><md-button class=\\\"md-primary md-icon-button m-5\\\" \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\" \\nng-disabled=\\\"!order.is_editable\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\\\"></md-icon><md-tooltip>\\n{{\\'PURCHASE.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button><nd-quick-product-creator-button class=\\\"m-5\\\" \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" ng-if=\\\"order.is_editable\\\" \\nsave-callback=\\\"vm.newProductAddedCallback(product)\\\"></nd-quick-product-creator-button></div>\");\n$templateCache.put(\"app/directives/order-products/nd-get-order-totals/nd-get-order-totals.html\",\"<div id=\\\"nd-get-order-totals\\\" class=\\\"get-order-totals\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\"><span \\ndata-test-id=\\\"order-total-amount-id\\\" layout=\\\"row\\\" class=\\\"h3\\\">{{vm.totalAmount || 0}}&nbsp;<span \\ntranslate=\\\"SALES.ITEMS\\\"></span> </span><span data-test-id=\\\"order-total-volume-id\\\" ng-if=\\\"vm.totalVolume !== 0\\\" \\nlayout=\\\"row\\\" class=\\\"h3 ml-16 pl-16 border-left nowrap\\\"><span layout=\\\"row\\\" class=\\\"nowrap\\\" \\nng-class=\\\"{\\'red-fg\\': vm.totalVolume && vm.totalAvailableVolume && vm.totalVolume > vm.totalAvailableVolume, \\'green-fg\\': vm.totalVolume && vm.totalAvailableVolume && vm.totalVolume < vm.totalAvailableVolume}\\\">\\n{{vm.totalVolume || 0 | number:2}}&nbsp;<span translate=\\\"GENERAL.M3\\\"></span><md-tooltip>\\n{{\\'TRANSFER.TRANSFER_VOLUME\\' | translate }}</md-tooltip></span><span layout=\\\"row\\\" class=\\\"nowrap secondary-text\\\" \\nng-if=\\\"vm.totalAvailableVolume !== 0\\\">&nbsp;/&nbsp;{{vm.totalAvailableVolume || 0 | number:2}}&nbsp;<span \\ntranslate=\\\"GENERAL.M3\\\"></span><md-tooltip>{{\\'TRANSFER.AVAILABLE_WAREHOUSE_VOLUME\\' | translate }}</md-tooltip></span>\\n</span><span data-test-id=\\\"order-total-price-id\\\" layout=\\\"row\\\" ng-if=\\\"vm.showCost && !showTaxes\\\" \\nclass=\\\"h3 ml-16 pl-16 mr-16 border-left\\\">\\n{{vm.totalPriceExclTax || 0 | price}}&nbsp;{{vm.currency | currencyCharacter}}*<md-tooltip>\\n{{\\'PRODUCT.EXCL_TAX\\' | translate}}</md-tooltip></span><span data-test-id=\\\"order-total-price-id\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.showCost && showTaxes\\\" class=\\\"h3 ml-16 pl-16 mr-16 border-left\\\">\\n{{vm.totalPriceInclTax || 0 | price}}&nbsp;{{vm.currency | currencyCharacter}}</span></div>\");\n$templateCache.put(\"app/directives/order-products/nd-order-product-visualization-options/nd-order-product-visualization-options.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float class=\\\"nd-search-input nd-filter-input\\\" \\nstyle=\\\"padding-left: 8px !important\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s18 secondary-text\\\" md-font-icon=\\\"icon-store\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/swap_vert.cd03f4a6.svg\\\"></md-icon><md-select ng-model=\\\"orderBy\\\" \\nclass=\\\"m-0\\\" flex placeholder=\\\"{{\\'GENERAL.ORDER_BY\\' | translate}}\\\" ng-change=\\\"changeProductsOrder(orderBy)\\\"><md-option \\nng-repeat=\\\"order_by in orderByDict\\\" ng-value=\\\"order_by.value\\\">{{ order_by.name | translate }}</md-option></md-select>\\n</div></md-input-container><div layout=\\\"row\\\" ng-if=\\\"options.filters\\\" class=\\\"pl-5\\\" layout-align=\\\"start center\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input nd-filter-input\\\" style=\\\"padding-left: 8px !important\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon><md-select \\nng-model=\\\"options.filters.pending\\\" class=\\\"m-0\\\" flex ng-change=\\\"changeProductsFilters()\\\"><md-option ng-value=\\\"false\\\">\\n{{\\\"PURCHASE.ALL_PRODUCTS\\\" | translate}}</md-option><md-option ng-value=\\\"true\\\">\\n{{\\\"PURCHASE.PENDING_PRODUCTS\\\" | translate}}</md-option></md-select></div></md-input-container></div><md-menu \\nlayout=\\\"column\\\" class=\\\"md-menu-view-options m-5\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-icon-button no-margin text-secondary\\\" ng-click=\\\"openViewOptionsMenu($mdMenu, $event)\\\"><md-icon \\nmd-font-icon=\\\"icon-eye\\\"></md-icon><md-tooltip>{{\\'SALE.VIEW_OPTIONS_TOOLTIP\\' | translate}}</md-tooltip></md-button>\\n<md-menu-content width=\\\"4\\\"><md-menu-item ng-if=\\\"showProductOptions\\\"><span><b>\\n{{\\'SALE.PRODUCT_VISUALIZATION_OPTION\\' | translate}}</b></span></md-menu-item><md-menu-item \\nng-repeat=\\\"option in options.productOptions\\\" ng-if=\\\"option.visible\\\" class=\\\"pl-20 pr-20\\\"><md-checkbox \\nmd-prevent-menu-close=\\\"md-prevent-menu-close\\\" ng-click=\\\"saveVisualizationOptionsFromLocalStorage(option)\\\" \\nng-model=\\\"option.selected\\\">{{ option.translation | translate}}</md-checkbox></md-menu-item><md-menu-item><span><b>\\n{{\\'SALE.PRODUCT_VARIANT_VISUALIZATION_OPTION\\' | translate}}</b></span></md-menu-item><md-menu-item \\nng-repeat=\\\"option in options.productVariantOptions\\\" ng-if=\\\"option.visible\\\" class=\\\"pl-20 pr-20\\\"><md-checkbox \\nmd-prevent-menu-close=\\\"md-prevent-menu-close\\\" ng-click=\\\"saveVisualizationOptionsFromLocalStorage(option)\\\" \\nng-model=\\\"option.selected\\\">{{ option.translation | translate}}</md-checkbox></md-menu-item></md-menu-content></md-menu>\\n</div>\");\n$templateCache.put(\"app/directives/order-products/nd-search-product-in-order/nd-search-product-in-order.html\",\"<md-input-container md-no-float class=\\\"nd-search-input\\\" flex><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\">\\n</md-icon><input ng-model=\\\"vm.searchText\\\" ng-change=\\\"vm.searchProduct()\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate nd-mute-barcode-callbacks \\ntranslate-attr-placeholder=\\\"PURCHASE.ORDER_SEARCH\\\"></md-input-container>\");\n$templateCache.put(\"app/directives/order-products/order-product/order-product.html\",\"<div id=\\\"order-product\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"product-header border-bottom border-top pr-0\\\"><div class=\\\"product-image\\\"><md-icon \\nng-if=\\\"!orderProduct.product_cover_thumbnail\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"default-thumbnail\\\">\\n</md-icon><img ng-if=\\\"::orderProduct.product_cover_thumbnail\\\" src=\\\"{{::orderProduct.product_cover_thumbnail}}\\\"></div>\\n<div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><a class=\\\"mr-10\\\" tabindex=\\\"-1\\\" \\nhref=\\\"/inventory/products/{{::orderProduct.product_id}}/overview\\\">{{::orderProduct.product_code}}</a><span \\nclass=\\\"mr-10\\\">{{::orderProduct.product_name}}</span></div><small hide-xs hide-sm hide-md \\nng-if=\\\"orderProduct.subcategory_name\\\">\\n{{::orderProduct.brand_name}} · {{::orderProduct.category_name}} · {{::orderProduct.subcategory_name}}</small> <small \\nhide-xs hide-sm hide-md ng-if=\\\"!orderProduct.subcategory_name\\\">\\n{{::orderProduct.brand_name}} · {{::orderProduct.category_name}}</small></div><span flex></span><md-icon \\nclass=\\\"mr-5 cursor-pointer yellow-fg\\\" \\nng-if=\\\"orderProduct.has_pricing_tier === false && (type === \\'SaleOrder\\' || type === \\'SaleOrderDelivery\\')\\\" \\nng-click=\\\"showDialogNoPricingTier()\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip \\nng-bind-html=\\\"\\'SALE.PRODUCT_WITH_NO_TAX_DIALOG_TEXT\\' | translate: { pricin_tier: order.pricing_tier_name }\\\">\\n</md-tooltip></md-icon><nd-order-product-price-actions \\nng-if=\\\"type === \\'PurchaseOrder\\' || type === \\'PurchaseOrderDelivery\\' || type === \\'SaleOrder\\' || type === \\'SaleOrderDelivery\\'\\\" \\norder=\\\"order\\\" type=\\\"type\\\" options=\\\"options\\\" order-product=\\\"orderProduct\\\" editable=\\\"editPrices && order.is_editable\\\" \\ntaxes=\\\"taxes\\\" disable-taxes=\\\"disableTaxes\\\" show-price-taxes=\\\"showPriceTaxes()\\\" show-discount=\\\"showPriceTaxes()\\\" \\noptions=\\\"options\\\" reload-callback=\\\"updateOrderProductAndTotals(response)\\\" show-taxes=\\\"shouldShowTaxes()\\\">\\n</nd-order-product-price-actions><md-menu><md-button class=\\\"md-icon-button\\\" ng-click=\\\"$mdMenu.open()\\\" \\ndata-test-id=\\\"open-menu-button\\\" aria-label=\\\"more\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item><md-button class=\\\"mr-10\\\"><a tabindex=\\\"-1\\\" class=\\\"options mr-15\\\" \\nng-click=\\\"openStockDialog()\\\"><md-icon md-font-icon class=\\\"md-primary-fg\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/view-stock.5f2d642c.svg\\\"></md-icon>{{\\'ORDER.SEE_STOCK\\' | translate}}</a>\\n</md-button></md-menu-item><md-menu-item \\nng-if=\\\"isDeliveryType() && type !== \\'TransferOrderDelivery\\' && order.is_editable\\\"><md-button \\ndata-test-id=\\\"sale-order-autocomplete-button\\\" class=\\\"mr-10\\\"><a href=\\\"#\\\" class=\\\"options mr-15\\\" \\nng-click=\\\"autocompleteProduct()\\\"><md-icon md-font-icon=\\\"icon-basket-fill\\\" class=\\\"md-primary-fg\\\" md-ripple></md-icon>\\n{{\\'SALE.AUTOCOMPLETE\\' | translate}}</a></md-button></md-menu-item><md-menu-item><md-button class=\\\"md-warn\\\" \\nng-disabled=\\\"isDisabledDeleteProductOption()\\\" ng-click=\\\"deleteOrderProductWrapper(orderProduct)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span translate=\\\"PRODUCT.DELETE_PRODUCT\\\"></span></md-button></md-menu-item>\\n</md-menu-content></md-menu></div><table class=\\\"simple\\\"><tr><td class=\\\"cell-auto tr-cell-auto text-left disabled\\\"><span\\n layout=\\\"row\\\" layout-align=\\\"space-between\\\" class=\\\"secondary-text\\\"><span layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n{{::orderProduct.color_category_name}}</span> <span layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n{{::orderProduct.size_category_name}}</span></span></td><td \\nclass=\\\"border-left cell-small tr-cell-small text-center disabled\\\" \\nng-repeat=\\\"size in ::orderProduct.size_variants | orderBy: \\'position\\'\\\">{{::size.code}}<md-tooltip>{{::size.name}}\\n</md-tooltip></td><td class=\\\"border-left border-right cell-small text-center disabled\\\">{{\\'GENERAL.TOTAL\\' | translate}}\\n</td></tr><tr \\nng-repeat=\\\"color in ::orderProduct.color_variants | orderBy: \\'position\\' | filter: filterColorByStatusAndAmount\\\"><td \\nclass=\\\"cell-auto\\\">{{::color.code}} - {{::color.name}}</td><td class=\\\"text-uppercase text-center cell-small\\\" \\nng-repeat=\\\"size in ::orderProduct.size_variants | orderBy: \\'position\\'\\\" \\norder-product=\\\"{{orderProductVariant=orderProduct.getOrderProductVariantByVariantIds(color.id, size.id)}}\\\"><div \\nclass=\\\"border-left\\\"><div ng-if=\\\"options.productVariantOptions.sku.selected\\\" \\nclass=\\\"sku text-truncate border-bottom disabled\\\" order-product=\\\"{{sku=getSku(color.id, size.id)}}\\\">{{sku}}<md-tooltip>\\n{{sku}}</md-tooltip></div><div \\nng-if=\\\"options.productVariantOptions.leftAmount.selected || options.productVariantOptions.rightAmount.selected\\\" \\nlayout=\\\"row\\\" class=\\\"left-right-amount border-bottom\\\"><div flex \\nclass=\\\"{{getLeftBackgroundColor(orderProductVariant, color.id, size.id)}}\\\" \\nng-if=\\\"options.productVariantOptions.leftAmount.selected\\\"><span>\\n{{getLeftAmount(orderProductVariant, color.id, size.id) || 0}}</span><md-tooltip md-direction=\\\"top\\\"><span \\ntranslate=\\\"{{options.productVariantOptions.leftAmount.translation}}\\\"></span></md-tooltip></div><div flex \\nclass=\\\"{{getRightBackgroundColor(orderProductVariant, color.id, size.id)}}\\\" \\nng-class=\\\"{\\'border-left\\':options.productVariantOptions.leftAmount.selected}\\\" \\nng-if=\\\"options.productVariantOptions.rightAmount.selected\\\"><span>\\n{{getRightAmount(orderProductVariant, color.id, size.id) || 0}}</span><md-tooltip md-direction=\\\"top\\\"><span \\ntranslate=\\\"{{options.productVariantOptions.rightAmount.translation}}\\\"></span></md-tooltip></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"{{getAmountBackgroundColor(orderProductVariant)}}\\\" \\ndata-test-id=\\\"sale-table-variant-orderProductVariant-{{orderProductVariant.id}}\\\"><md-icon \\nng-if=\\\"order.is_editable && showUidLotOutOfStockAlert(color.id, size.id)\\\" md-font-icon=\\\"icon-alert\\\" \\nng-click=\\\"showOutOfStockDialog()\\\" class=\\\"amber-fg cursor-pointer h-30 pt-3\\\"><md-tooltip>\\n{{\\'SALES.PRODUCT_OUT_OF_STOCK\\' | translate}}</md-tooltip></md-icon><input ng-model=\\\"orderProductVariant.amount\\\" \\nng-if=\\\"!order.is_editable || (!showUidLotOutOfStockAlert(color.id, size.id) && showAmountInput())\\\" \\nng-model-options=\\\"{ debounce: { default: 250, blur: 0}, updateOn: \\'default blur\\'}\\\" \\nng-change=\\\"saveOrderProductVariant(orderProductVariant, color.id, size.id)\\\" placeholder=\\\"0\\\" \\nclass=\\\"amount {{getDisabledBackground()}} {{getInputTextColor(orderProductVariant.amount)}} {{getAmountBackgroundColor(orderProductVariant)}}\\\" \\ntype=\\\"number\\\" max=\\\"2147483647\\\" nd-mute-barcode-callbacks ng-disabled=\\\"!editableInputAmount(color.id, size.id)\\\">\\n<md-button id=\\\"add-uid-button\\\" data-test-id=\\\"add-uid-button\\\" \\nng-if=\\\"!showUidLotOutOfStockAlert(color.id, size.id) && !showAmountInput()\\\" \\nng-click=\\\"manageStockDetail(color.id, size.id, orderProductVariant)\\\" \\nng-disabled=\\\"!editableInputAmount(color.id, size.id)\\\" class=\\\"m-0 p-0 hover-uid-amount\\\">{{orderProductVariant.amount}}\\n<md-tooltip md-direction=\\\"bottom\\\">{{\\'PRODUCT.ADD_UID_STOCK\\' | translate}}</md-tooltip></md-button><md-tooltip \\nng-if=\\\"!getEnabledProductVariantByColorAndSize(color.id, size.id) && !showUidLotOutOfStockAlert(color.id, size.id)\\\" \\nmd-direction=\\\"bottom\\\">{{\\'ORDER_LOG_CHANGES.PRODUCT_VARIANT_DELETED\\' | translate}}</md-tooltip></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"options.productOptions.price.visible && options.productOptions.price.selected\\\" \\nclass=\\\"price border-top\\\"><input flex ng-show=\\\"!options.productOptions.show_prices_incl_tax.selected\\\" \\nnd-mute-barcode-callbacks ng-disabled=\\\"orderProductVariant.amount === 0 || !order.is_editable || !editPrices\\\" \\nng-model=\\\"orderProductVariant.price_excl_tax\\\" \\nng-model-options=\\\"{ debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" \\nplaceholder=\\\"{{getPrice(color.id, size.id)}}\\\" ng-change=\\\"createOrUpdateOrderProductVariantPrice(orderProductVariant)\\\" \\ntype=\\\"number\\\" class=\\\"{{getDisabledBackground()}}\\\" min=\\\"0\\\" step=\\\".01\\\"> <input flex \\nng-show=\\\"options.productOptions.show_prices_incl_tax.selected\\\" nd-mute-barcode-callbacks \\nng-disabled=\\\"orderProductVariant.amount === 0 || !order.is_editable || !editPrices\\\" \\nng-model=\\\"orderProductVariant.price_incl_tax\\\" \\nng-model-options=\\\"{ debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" \\nplaceholder=\\\"{{getPrice(color.id, size.id)}}\\\" ng-change=\\\"createOrUpdateOrderProductVariantPrice(orderProductVariant)\\\" \\ntype=\\\"number\\\" class=\\\"{{getDisabledBackground()}}\\\" min=\\\"0\\\" step=\\\".01\\\"> <span \\nclass=\\\"currency disabled border-left h-20 border-bottom\\\">{{::orderProduct.currency | currencyCharacter}}</span></div>\\n</div></td><td class=\\\"text-center disabled border-left border-right position-relative\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" class=\\\"{{getPriceHeightClass()}} font-size-14\\\"><span>\\n{{getTotalProductAmountByColor(color.id) || 0}}</span></div><div layout=\\\"row\\\" layout-align=\\\"center\\\" \\nng-if=\\\"(type === \\'PurchaseOrder\\' || type === \\'PurchaseOrderDelivery\\' || type === \\'SaleOrder\\' || type === \\'SaleOrderDelivery\\') && options.productOptions.price.selected\\\" \\nclass=\\\"price bottom-position border-top full-width\\\"><span class=\\\"currency h-20 overflow-hidden\\\" flex>\\n{{getTotalProductPriceByColor(color.id) || 0}} </span><span class=\\\"currency border-left w-16\\\">\\n{{::orderProduct.currency | currencyCharacter}}</span></div></td></tr></table></div>\");\n$templateCache.put(\"app/directives/order-products/order-products-list/order-products-list.html\",\"<div id=\\\"order-products-list\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><nd-actions-order-selector \\norder=\\\"order\\\" type=\\\"type\\\" options=\\\"options\\\" flex=\\\"100\\\"></nd-actions-order-selector></div><md-progress-linear \\nmd-mode=\\\"indeterminate\\\" ng-if=\\\"loading\\\" class=\\\"loader md-primary\\\"></md-progress-linear><table class=\\\"dataTable\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"dtInstance\\\" dt-options=\\\"dtOptions\\\" dt-columns=\\\"dtColumns\\\"></table></div>\");\n$templateCache.put(\"app/directives/order-products/order-products-log/order-products-log.html\",\"<div class=\\\"order-log\\\"><md-content class=\\\"content uid-grid-container m-0\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"toolbar border-bottom h-50 pl-5 pr-5\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input m-5 w-450\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input \\nid=\\\"order-log-change-search-input\\\" ng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.getGridLogsPage()\\\" \\nng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" nd-mute-barcode-callbacks \\nmaxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"ORDER_LOG_CHANGES.SEARCH\\\"></md-input-container>\\n</div><md-content class=\\\"content no-padding uid-grid-container\\\" flex><md-progress-linear md-mode=\\\"indeterminate\\\" \\nng-if=\\\"vm.loading\\\" class=\\\"loader md-primary\\\"></md-progress-linear><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination \\nui-grid-move-columns ui-grid-resize-columns ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize class=\\\"grid\\\" \\nstyle=\\\"height: 100%; overflow: hidden\\\"></div></md-content></md-content></div>\");\n$templateCache.put(\"app/directives/order-products/order-products-stock-details/order-products-stock-details.html\",\"<div id=\\\"order-products-stock-details\\\"><md-content class=\\\"content uid-grid-container m-0\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"toolbar border-bottom h-50 pl-5 pr-5\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input m-5 w-450\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.searchText\\\" ng-change=\\\"vm.getGridDetailPage()\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks translate \\ntranslate-attr-placeholder=\\\"PURCHASE.ORDER_SEARCH\\\"></md-input-container></div><div class=\\\"full-width h-0\\\">\\n<md-progress-linear md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\" class=\\\"loader md-primary\\\"></md-progress-linear></div>\\n<div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination ui-grid-resize-columns ui-grid-save-state ui-grid-auto-resize \\nui-grid-grouping class=\\\"grid\\\" data-test-id=\\\"dto-order-details-table\\\" style=\\\"height: 100%; overflow: hidden\\\"></div>\\n</md-content></div>\");\n$templateCache.put(\"app/directives/pending-invoices-banner/dialog/pending-invoices-dialog.html\",\"<md-dialog id=\\\"pending-invoices-dialog\\\"><md-dialog-content><h2 class=\\\"mt-0\\\" translate=\\\"SUBSCRIPTION.PENDING_INVOICES\\\">\\n</h2><p layout=\\\"row\\\" layout-align=\\\"start center\\\" translate=\\\"SUBSCRIPTION.PENDING_INVOICES_MSG\\\"></p><table \\nclass=\\\"simple full-width\\\"><thead><tr><th>{{\\'SUBSCRIPTION.INVOICE\\' | translate}}</th><th>\\n{{\\'SUBSCRIPTION.BILLING_DATE\\' | translate}}</th><th>{{\\'SUBSCRIPTION.AMOUNT\\' | translate}}</th><th></th></tr></thead>\\n<tbody><tr ng-repeat=\\\"invoice in vm.invoices\\\"><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><a \\nhref=\\\"{{invoice.pay_url}}\\\" target=\\\"_blank\\\">{{invoice.autocode}}</a></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{invoice.invoice_date | date:\\'dd/MM/yyyy\\'}}</span> <span class=\\\"text-boxed red\\\" \\nng-if=\\\"invoice.due_date < vm.now\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"red-fg s14\\\"></md-icon><span \\ntranslate=\\\"SUBSCRIPTION.OVERDUE\\\"></span></span></div></td><td>\\n{{invoice.amount | price}} {{invoice.currency | currencyCharacter}}</td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button ng-href=\\\"{{invoice.file_url}}\\\" ng-if=\\\"invoice.file_url\\\" \\nclass=\\\"md-primary mr-8 m-0\\\" target=\\\"_blank\\\"><span translate=\\\"SUBSCRIPTION.DOWNLOAD\\\"></span></md-button><md-button \\nng-href=\\\"{{invoice.pay_url}}\\\" ng-if=\\\"invoice.pay_url\\\" class=\\\"m-0 md-primary md-raised\\\" target=\\\"_blank\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><span translate=\\\"SUBSCRIPTION.PAY_INVOICE_NOW\\\"></span><md-icon \\nmd-font-icon=\\\"icon-open-in-new\\\" class=\\\"ml-8 s16\\\"></md-icon></div></md-button></div></td></tr></tbody></table>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.close()\\\"><span translate=\\\"GENERAL.CLOSE\\\"></span></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/directives/printer/subviews/basic-gift-card-ticket.html\",\"<div id=\\\"print-gift-card-id\\\" style=\\\"display:none\\\"><div style=\\\"font-family: sans-serif\\\"><div \\nng-if=\\\"vm.htmlTicket && vm.htmlTicket.ticketConfiguration && vm.htmlTicket.ticketConfiguration.printLogo && vm.htmlTicket.ticketConfiguration.logoBase64\\\" \\nstyle=\\\"text-align: center\\\"><img style=\\\"width: 250px\\\" \\nsrc=\\\"data:image/png;base64,{{vm.htmlTicket.ticketConfiguration.logoBase64}}\\\"></div><div \\nng-if=\\\"!vm.htmlTicket.ticketConfiguration.printLogo && vm.htmlTicket.warehouse.name\\\" style=\\\"text-align: center\\\"><h1>\\n{{vm.htmlTicket.warehouse.name}}<br></h1></div><h2 style=\\\"text-transform: capitalize; text-align: center\\\">\\n{{\\'SALES.VOUCHER\\' | translate}}</h2><hr><div style=\\\"overflow: auto\\\"><h3 translate=\\\"SALES.VALUE\\\" style=\\\"float:left\\\">\\nValue</h3><h3 style=\\\"float:right\\\" ng-if=\\\"vm.htmlTicket.giftCard\\\">\\n{{vm.htmlTicket.giftCard.amountInclTax | price}} {{vm.htmlTicket.currency}}</h3></div><div style=\\\"overflow: auto\\\"><h3 \\ntranslate=\\\"SALES.NUMBER\\\" style=\\\"float:left\\\">Number</h3><h3 style=\\\"float:right\\\">{{vm.htmlTicket.giftCard.barcode}}</h3>\\n<br></div><br><br><div ng-if=\\\"vm.htmlTicket.ticketConfiguration.barcodeDesign\\\" style=\\\"text-align: center\\\"><svg \\nid=\\\"code-128-voucher\\\"></svg></div><div style=\\\"text-align: center\\\">\\n{{vm.htmlTicket.ticketConfiguration.footerDevolutionCard}}</div><br><div style=\\\"text-align: center\\\">\\n{{vm.htmlTicket.ticketConfiguration.closure}}<br><span style=\\\"color: white\\\">.</span></div></div></div>\");\n$templateCache.put(\"app/directives/printer/subviews/gift-card-ticket.html\",\"<div id=\\\"print-devolution-card-id\\\" style=\\\"display:none\\\"><div style=\\\"font-family: sans-serif\\\"><div \\nng-include=\\\"\\'app/directives/printer/nd-printer-ticket-header.html\\'\\\"></div><h2 \\nstyle=\\\"text-transform: capitalize; text-align: center\\\">{{\\'SALES.VOUCHER\\' | translate}}</h2><hr><div \\nstyle=\\\"overflow: auto\\\"><h3 translate=\\\"SALES.VALUE\\\" style=\\\"float:left\\\">Value</h3><h3 style=\\\"float:right\\\" \\nng-if=\\\"vm.htmlTicket.chargedGiftCardVoucher\\\">\\n{{vm.htmlTicket.chargedGiftCardVoucher.total | price}} {{::vm.htmlTicket.currencyCharacter}}</h3><h3 \\nstyle=\\\"float:right\\\" ng-if=\\\"vm.htmlTicket.oldDevolutionCard\\\">\\n{{vm.htmlTicket.oldDevolutionCard.actual_gift_card_amount | price}} {{::vm.htmlTicket.currencyCharacter}}</h3></div>\\n<div style=\\\"overflow: auto\\\"><h3 translate=\\\"SALES.NUMBER\\\" style=\\\"float:left\\\">Number</h3><h3 style=\\\"float:right\\\" \\nng-if=\\\"vm.htmlTicket.chargedGiftCardVoucher\\\">{{vm.htmlTicket.chargedGiftCardVoucher.gift_card_code}}</h3><br></div><br>\\n<br><div ng-if=\\\"vm.htmlTicket.ticketConfiguration.barcode_design\\\" style=\\\"text-align: center\\\"><svg \\nid=\\\"code-128-voucher\\\"></svg></div><div style=\\\"text-align: center\\\" ng-if=\\\"!vm.htmlTicket.sale.is_devolution\\\">\\n{{vm.htmlTicket.ticketConfiguration.footer}}</div><div style=\\\"text-align: center\\\" \\nng-if=\\\"vm.htmlTicket.sale.is_devolution\\\">\\n{{vm.htmlTicket.ticketConfiguration.footer_devolution_card || vm.htmlTicket.ticketConfiguration.footer}}</div><br><div \\nstyle=\\\"text-align: center\\\">{{vm.htmlTicket.ticketConfiguration.closure}}<br><span style=\\\"color: white\\\">.</span></div>\\n</div></div>\");\n$templateCache.put(\"app/directives/printer/subviews/pos-order-ticket.html\",\"<div id=\\\"print-order-id\\\" style=\\\"display:none\\\"><div style=\\\"font-family: sans-serif; font-size: 16px; line-height: 1.2\\\">\\n<div ng-include=\\\"\\'app/directives/printer/nd-printer-ticket-header.html\\'\\\"></div><div style=\\\"text-transform: capitalize\\\">\\n{{\\'SALES.TOTAL_PRODUCTS\\' | translate}}</div><hr><div \\nng-repeat=\\\"posOrderProductVariant in vm.htmlTicket.getPosOrderProductVariants(vm.htmlTicket.sale, false) track by $index\\\">\\n<div ng-if=\\\"!vm.htmlTicket.giftTicket  || vm.htmlTicket.giftTicket && posOrderProductVariant.selected\\\" \\nstyle=\\\"overflow: auto; background-color: red\\\"><div ng-if=\\\"posOrderProductVariant.amount_less_returns !== 0\\\"><div \\nstyle=\\\"float:left\\\"><div><span ng-if=\\\"!vm.htmlTicket.giftTicket\\\">{{vm.htmlTicket.getAmount(posOrderProductVariant)}}\\n</span> <span ng-if=\\\"vm.htmlTicket.giftTicket\\\">{{posOrderProductVariant.gift_amount}}</span> <span>\\n{{vm.getProductIdentifier(vm.htmlTicket.ticketConfiguration.product_identifier, posOrderProductVariant)}}</span> <span \\nng-if=\\\"posOrderProductVariant.gift_card_code\\\">({{posOrderProductVariant.gift_card_code}})</span></div><div \\nng-if=\\\"vm.showVariantIdentifier(vm.htmlTicket.ticketConfiguration.variant_identifier)\\\"><div><span>&nbsp;&nbsp;</span> \\n<small>{{vm.getVariantIdentifier(vm.htmlTicket.ticketConfiguration.variant_identifier, posOrderProductVariant)}}\\n</small></div><div ng-if=\\\"posOrderProductVariant.uid_stock_uid\\\"><span>&nbsp;&nbsp;</span> <small \\nclass=\\\"secondary-text\\\">{{posOrderProductVariant.uid_stock_uid}}</small></div></div></div><div style=\\\"float:right\\\" \\nng-if=\\\"!vm.htmlTicket.giftTicket\\\"><span \\nng-if=\\\"posOrderProductVariant.custom_price_incl_tax !== null && posOrderProductVariant.custom_price_excl_tax !== null &&\\n                        vm.htmlTicket.getPrice(posOrderProductVariant, true) < posOrderProductVariant.price_incl_tax && vm.htmlTicket.getPrice(posOrderProductVariant, true) >= 0\\\">\\n{{ posOrderProductVariant.price_incl_tax | price }} - {{ \\'SALES.DISCOUNT_ABBR\\' | translate }} {{ posOrderProductVariant.price_incl_tax - vm.htmlTicket.getPrice(posOrderProductVariant, true) | price }} \\n</span><span \\nng-if=\\\"!(posOrderProductVariant.custom_price_incl_tax && posOrderProductVariant.custom_price_excl_tax) &&\\n                          posOrderProductVariant.discount\\\">\\n{{vm.htmlTicket.getAmount(posOrderProductVariant) * vm.htmlTicket.getUnitPrice(posOrderProductVariant, true) | price}} - {{ posOrderProductVariant.discount }}% \\n<small ng-if=\\\"posOrderProductVariant.promotion\\\">&nbsp;({{posOrderProductVariant.promotion_public_name}})</small> \\n</span>&nbsp;&nbsp;<span>\\n{{ vm.htmlTicket.getPrice(posOrderProductVariant, true) | price }} {{::vm.htmlTicket.currencyCharacter}}</span></div>\\n</div></div><div ng-repeat=\\\"bundleVariant in posOrderProductVariant.pos_order_bundle_content\\\" \\nng-if=\\\"posOrderProductVariant.is_bundle\\\"><div><span>&nbsp;&nbsp;</span> <span ng-if=\\\"posOrderProductVariant.amount<0\\\">-\\n</span> <span>{{bundleVariant.amount}}</span> <span>\\n{{vm.getProductIdentifier(vm.htmlTicket.ticketConfiguration.product_identifier, bundleVariant, true)}}</span></div>\\n<div><span>&nbsp;&nbsp;&nbsp;&nbsp;</span> <small>\\n{{vm.getVariantIdentifier(vm.htmlTicket.ticketConfiguration.variant_identifier, bundleVariant, true)}}</small></div>\\n</div><div><span>&nbsp;&nbsp;</span></div></div><hr ng-if=\\\"!vm.htmlTicket.giftTicket\\\"><div style=\\\"overflow: auto\\\" \\nng-if=\\\"!vm.htmlTicket.giftTicket && vm.htmlTicket.sale.is_old_devolution_cards\\\" \\nng-repeat=\\\"posOrderProductVariant in vm.htmlTicket.getConsumedGiftCards(vm.htmlTicket.sale, true) track by $index\\\"><div\\n style=\\\"float:left\\\">{{\\'SALES.VOUCHER\\' |translate}} {{posOrderProductVariant.barcode}}</div><div class=\\\"text-right\\\" \\nstyle=\\\"float:right\\\">{{posOrderProductVariant.amount | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div \\nstyle=\\\"overflow: auto\\\" ng-if=\\\"!vm.htmlTicket.giftTicket && !vm.htmlTicket.sale.is_old_devolution_cards\\\" \\nng-repeat=\\\"posOrderProductVariant in vm.htmlTicket.getConsumedGiftCards(vm.htmlTicket.sale, true) track by $index\\\"><div\\n style=\\\"float:left\\\" ng-if=\\\"posOrderProductVariant.consumed_gift_card_is_voucher\\\">\\n{{\\'SALES.VOUCHER\\' |translate}} {{posOrderProductVariant.gift_card_code}}</div><div style=\\\"float:left\\\" \\nng-if=\\\"!posOrderProductVariant.consumed_gift_card_is_voucher\\\">\\n{{\\'SALES_LOG.GIFT_CARD\\' |translate}} {{posOrderProductVariant.gift_card_code}}</div><div class=\\\"text-right\\\" \\nstyle=\\\"float:right\\\">{{posOrderProductVariant.total | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div \\nng-if=\\\"vm.htmlTicket.balance_discount && vm.htmlTicket.balance_discount != 0 && !vm.htmlTicket.giftTicket && !vm.htmlTicket.sale.is_devolution\\\">\\n<div style=\\\"overflow: auto\\\"><div translate=\\\"SALES.TOTAL_WITHOUT_DISCOUNT\\\" style=\\\"float:left\\\"></div><div \\nclass=\\\"text-right\\\" style=\\\"float:right\\\">\\n{{vm.htmlTicket.total_without_discount | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div \\nstyle=\\\"overflow: auto\\\"><div translate=\\\"SALES.APPLIED_BALANCE\\\" style=\\\"float:left\\\"></div><div class=\\\"text-right\\\" \\nstyle=\\\"float:right\\\">-{{vm.htmlTicket.balance_discount | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div></div>\\n<hr \\nng-if=\\\"vm.htmlTicket.balance_discount && vm.htmlTicket.balance_discount != 0 && !vm.htmlTicket.giftTicket && !vm.htmlTicket.sale.is_devolution\\\">\\n<div style=\\\"overflow: auto\\\" ng-if=\\\"!vm.htmlTicket.giftTicket\\\"><div translate=\\\"SALES.SUBTOTAL\\\" style=\\\"float:left\\\">\\nSub-total</div><div class=\\\"text-right\\\" style=\\\"float:right\\\">\\n{{vm.htmlTicket.sale.subtotal | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div style=\\\"overflow: auto\\\" \\nng-if=\\\"!vm.htmlTicket.giftTicket\\\" ng-repeat=\\\"(taxId, productVariantsGroupedByTax) in vm.htmlTicket.sale.taxes\\\"><div \\nstyle=\\\"float:left\\\">{{\\'SALES.TAX\\' | translate}}&nbsp; {{productVariantsGroupedByTax[0].tax_percent_value | price}}%\\n</div><div style=\\\"float:right\\\">\\n{{vm.htmlTicket.getTotalTaxByGroup(productVariantsGroupedByTax, vm.htmlTicket.balance_discount_as_percentage) | price}} {{::vm.htmlTicket.currencyCharacter}}\\n</div></div><hr ng-if=\\\"!vm.htmlTicket.giftTicket\\\"><div style=\\\"overflow: auto\\\" ng-if=\\\"!vm.htmlTicket.giftTicket\\\"><div \\ntranslate=\\\"SALES.TOTAL\\\" class=\\\"text-bold\\\" \\nng-class=\\\"{\\'h1\\': vm.htmlTicket.ticketConfiguration.total_design, \\'h2\\': !vm.htmlTicket.ticketConfiguration.total_design}\\\" \\nstyle=\\\"float:left\\\">Total</div><div class=\\\"text-bold\\\" \\nng-class=\\\"{\\'h1\\': vm.htmlTicket.ticketConfiguration.total_design, \\'h2\\': !vm.htmlTicket.ticketConfiguration.total_design}\\\" \\nstyle=\\\"float:right\\\">{{vm.htmlTicket.sale.total | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div \\nng-if=\\\"!vm.htmlTicket.giftTicket\\\"><div \\nng-repeat=\\\"posOrderPaymentMethod in vm.htmlTicket.sale.pos_order_payment_methods | orderBy: \\'id\\'\\\"><div \\nstyle=\\\"float: left\\\">{{posOrderPaymentMethod.payment_method_instance.name | translate}}</div><div style=\\\"float: right\\\">\\n{{ (posOrderPaymentMethod.given_amount) | price }} {{::vm.htmlTicket.currencyCharacter}}</div><br></div><div \\nstyle=\\\"overflow: auto\\\" ng-if=\\\"!vm.htmlTicket.giftTicket && vm.htmlTicket.sale.is_old_generated_devolution_cards\\\" \\nng-repeat=\\\"posOrderProductVariant in vm.htmlTicket.getChargedGiftCards(vm.htmlTicket.sale, true) track by $index\\\"><div \\nstyle=\\\"float:left\\\">{{\\'SALES.VOUCHER\\' |translate}} {{posOrderProductVariant.barcode}}</div><div class=\\\"text-right\\\" \\nstyle=\\\"float:right\\\">{{posOrderProductVariant.amount | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div \\nstyle=\\\"overflow: auto\\\" ng-if=\\\"!vm.htmlTicket.giftTicket && !vm.htmlTicket.sale.is_old_generated_devolution_cards\\\" \\nng-repeat=\\\"posOrderProductVariant in vm.htmlTicket.getChargedGiftCards(vm.htmlTicket.sale, true) track by $index\\\"><div \\nstyle=\\\"float:left\\\" ng-if=\\\"posOrderProductVariant.charged_gift_card_is_voucher\\\">\\n{{\\'SALES.VOUCHER\\' |translate}} {{posOrderProductVariant.gift_card_code}}</div><div style=\\\"float:left\\\" \\nng-if=\\\"!posOrderProductVariant.charged_gift_card_is_voucher\\\">\\n{{\\'SALES_LOG.GIFT_CARD\\' |translate}} {{posOrderProductVariant.gift_card_code}}</div><div class=\\\"text-right\\\" \\nstyle=\\\"float:right\\\">{{posOrderProductVariant.total | price}} {{::vm.htmlTicket.currencyCharacter}}</div></div><div \\nng-if=\\\"vm.htmlTicket.sale.output_amount\\\"><div style=\\\"float: left\\\">{{\\'SALES_LOG.BALANCE\\' | translate}}</div><div \\nstyle=\\\"float: right\\\">{{vm.htmlTicket.sale.output_amount | price}} {{::vm.htmlTicket.currencyCharacter}}</div><br></div>\\n</div><div style=\\\"overflow: auto\\\" ng-if=\\\"vm.htmlTicket.sale.getPendingAmount() && !vm.htmlTicket.giftTicket\\\"><text \\ntranslate=\\\"SALES.PENDING\\\" style=\\\"float:left\\\">Pending</text><text style=\\\"float:right\\\">\\n{{vm.htmlTicket.sale.getPendingAmount() | price}} {{::vm.htmlTicket.currencyCharacter}}</text></div><br><br><div \\nng-if=\\\"vm.htmlTicket.ticketConfiguration.barcode_design\\\" style=\\\"text-align: center\\\"><svg id=\\\"code-128\\\"></svg></div><div\\n style=\\\"text-align: center\\\" ng-if=\\\"!vm.htmlTicket.sale.is_devolution\\\">{{vm.htmlTicket.ticketConfiguration.footer}}\\n</div><div style=\\\"text-align: center\\\" ng-if=\\\"vm.htmlTicket.sale.is_devolution\\\">\\n{{vm.htmlTicket.ticketConfiguration.footer_devolution_card || vm.htmlTicket.ticketConfiguration.footer}}</div><br><div \\nstyle=\\\"text-align: center\\\">{{vm.htmlTicket.ticketConfiguration.closure}}<br><span style=\\\"color: white\\\">.</span></div>\\n<div ng-if=\\\"vm.htmlTicket.sale.kubibai_ticket_data\\\" style=\\\"text-align: center\\\"><span>\\n{{vm.htmlTicket.sale.kubibai_ticket_data.tbai_code}}</span><br><br><img \\nng-src=\\\"data:image/png;base64,{{vm.htmlTicket.sale.kubibai_ticket_data.batuz_qr_image}}\\\"></div></div></div>\");\n$templateCache.put(\"app/directives/printer/subviews/register-activity-ticket.html\",\"<div id=\\\"print-register-activity-id\\\" ng-if=\\\"vm.htmlRegisterActivitySummary\\\" style=\\\"display:none\\\"><div \\nstyle=\\\"font-family: sans-serif\\\"><div ng-if=\\\"vm.htmlRegisterActivitySummary.ticketConfiguration.print_logo\\\" \\nstyle=\\\"text-align: center\\\"></div><div \\nng-if=\\\"!vm.htmlRegisterActivitySummary.ticketConfiguration.print_logo && vm.htmlRegisterActivitySummary.warehouse.name\\\" \\nstyle=\\\"text-align: center\\\"><h1>{{vm.htmlRegisterActivitySummary.warehouse.name}}<br></h1></div><br><p><span \\nng-if=\\\"vm.htmlRegisterActivitySummary.warehouse.address_1\\\">{{vm.htmlRegisterActivitySummary.warehouse.address_1}}<br>\\n</span><span ng-if=\\\"vm.htmlRegisterActivitySummary.warehouse.zip\\\">\\n{{vm.htmlRegisterActivitySummary.warehouse.city}} - {{vm.htmlRegisterActivitySummary.warehouse.zip}}<br></span><span \\nng-if=\\\"vm.htmlRegisterActivitySummary.warehouse.phone\\\">{{vm.htmlRegisterActivitySummary.warehouse.phone}}<br></span>\\n<br></p><h3 style=\\\"text-transform: capitalize\\\">{{\\'REGISTER_CLOSURE.REGISTER_ACTIVITY_SUMMARY\\' | translate}}</h3><span>\\n{{\\'REGISTER_CLOSURE.MAIN_INFORMATION\\' | translate}}</span><hr><div style=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">\\n{{\\'REGISTERS.REGISTER\\' | translate}}</small> <small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.register.code}}</small></div><div style=\\\"overflow: auto\\\"><small \\nstyle=\\\"float:left\\\">{{\\'REGISTERS.OPENED_AT\\' | translate}}</small> <small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.opened_at | date: \\'medium\\'}}</small></div><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'REGISTER_CLOSURE.OPENED_BY\\' | translate}}</small> <small \\nstyle=\\\"float:right\\\">{{vm.htmlRegisterActivitySummary.registerActivity.opened_by | personname}}</small></div><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'REGISTERS.CLOSED_AT\\' | translate}}</small> <small \\nstyle=\\\"float:right\\\">{{vm.htmlRegisterActivitySummary.registerActivity.closed_at | date: \\'medium\\'}}</small></div><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'REGISTER_CLOSURE.CLOSED_BY\\' | translate}}</small> <small \\nstyle=\\\"float:right\\\">{{vm.htmlRegisterActivitySummary.registerActivity.closed_by | personname}}</small></div><br><span>\\n{{\\'INVOICE.PAYMENTS\\' | translate}}</span><hr><div style=\\\"overflow: auto\\\" \\nng-repeat=\\\"method in vm.htmlRegisterActivitySummary.registerActivity.total_payment_amounts\\\"><small style=\\\"float:left\\\">\\n{{vm.htmlRegisterActivitySummary.paymentMethodsDict[method.payment_method].name}}</small> <small style=\\\"float:right\\\">\\n{{method.total | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}</small></div><br><span>\\n{{\\'GIFT_CARDS.VOUCHERS_AND_GIFT_CARDS\\' | translate}}</span><hr><div style=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">\\n{{\\'REGISTERS.USED_VOUCHERS\\' | translate}}</small> <small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.total_used_devolution_cards || 0 | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}\\n</small></div><div style=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'REGISTERS.GENERATED_VOUCHERS\\' | translate}}\\n</small> <small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.total_generated_devolution_cards || 0 | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}\\n</small></div><div style=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'REPORTS.USED_GIFT_CARDS\\' | translate}}</small> \\n<small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.total_used_gift_cards || 0 | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}\\n</small></div><div style=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'REPORTS.GENERATED_GIFT_CARDS\\' | translate}}\\n</small> <small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.total_generated_gift_cards || 0 | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}\\n</small></div><br><span>{{\\'REGISTER_CLOSURE.REGISTER_ACTIVITY_SUMMARY\\' | translate}}</span><hr><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'BASIC_RETAIL_KPI.TRANSACTIONS\\' | translate}}</small> <small \\nstyle=\\\"float:right\\\">{{vm.htmlRegisterActivitySummary.registerActivity.total_transactions}}</small></div><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'BASIC_RETAIL_KPI.UNITS_SOLD\\' | translate}}</small> <small \\nstyle=\\\"float:right\\\">{{vm.htmlRegisterActivitySummary.registerActivity.units_sold}}</small></div><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'BASIC_RETAIL_KPI.UNITS_RETURNED\\' | translate}}</small> <small \\nstyle=\\\"float:right\\\">{{vm.htmlRegisterActivitySummary.registerActivity.units_returned}}</small></div><div \\nstyle=\\\"overflow: auto\\\"><small style=\\\"float:left\\\">{{\\'INVOICE.TOTAL\\' | translate}}</small> <small style=\\\"float:right\\\">\\n{{vm.htmlRegisterActivitySummary.registerActivity.total_revenue | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}\\n</small></div><br><span>{{\\'REGISTER_CLOSURE.CASH_MOVEMENTS\\' | translate}}</span><hr><div style=\\\"overflow: auto\\\" \\nng-repeat=\\\"cash_movement in vm.htmlRegisterActivitySummary.registerActivity.cash_movements | orderBy: \\'-id\\'\\\"><small \\nstyle=\\\"float:left\\\" ng-if=\\\"cash_movement.is_opening\\\">{{\\'REGISTER_CLOSURE.OPENING\\' | translate }}</small> <small \\nstyle=\\\"float:left\\\" ng-if=\\\"cash_movement.is_closure\\\">{{\\'REGISTER_CLOSURE.CLOSURE\\' | translate }}</small> <small \\nstyle=\\\"float:left\\\" ng-if=\\\"!cash_movement.is_opening && !cash_movement.is_closure && cash_movement.amount > 0\\\">\\n{{\\'REGISTER_CLOSURE.CASH_MOVEMENT_TYPE_INPUT\\' | translate }} </small><small style=\\\"float:left\\\" \\nng-if=\\\"!cash_movement.is_opening && !cash_movement.is_closure && cash_movement.amount < 0\\\">\\n{{\\'REGISTER_CLOSURE.CASH_MOVEMENT_TYPE_OUTPUT\\' | translate }} </small><small style=\\\"float:right\\\">\\n{{cash_movement.amount | price}}{{vm.htmlRegisterActivitySummary.currencyCharacter}}</small></div><br></div></div>\");\n$templateCache.put(\"app/directives/signup-complete-form/v1/nd-signup-complete-form-v1.html\",\"<div class=\\\"nd-signup-complete-form-v1\\\"><div ng-if=\\\"!vm.error\\\" class=\\\"signup-content\\\"><div class=\\\"header\\\" \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"full-width\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\" flex=\\\"25\\\"><md-progress-linear md-mode=\\\"determinate\\\" \\nclass=\\\"md-primary border-radius\\\" flex=\\\"75\\\" value=\\\"{{vm.progress}}\\\"></md-progress-linear></div><br><div \\nclass=\\\"h2 mb-10\\\" ng-if=\\\"vm.step === 1\\\">{{\\'SIGNUP.SIGN_UP_VERIFY_PHONE_TITLE\\' | translate}}</div><div \\nclass=\\\"secondary-text mb-10\\\" ng-if=\\\"vm.step === 1\\\"><p translate=\\\"SIGNUP.SIGN_UP_VERIFY_PHONE_SUBTITLE\\\"></p></div><div \\nclass=\\\"h2 mb-10\\\" ng-if=\\\"vm.step === 2 || vm.step === 3 || vm.step === 4\\\">\\n{{\\'SIGNUP.SIGN_UP_COMPELTE_TITLE\\' | translate}}</div><div class=\\\"secondary-text mb-10\\\" \\nng-if=\\\"vm.step === 2 || vm.step === 3 || vm.step === 4\\\">{{\\'SIGNUP.SIGN_UP_COMPELTE_SUBTITLE\\' | translate}}</div><div \\nclass=\\\"h2 mb-10\\\" ng-if=\\\"vm.step === 5\\\">{{\\'SIGNUP.SIGN_UP_DONE_TITLE\\' | translate}}</div><div \\nclass=\\\"secondary-text mb-10\\\" ng-if=\\\"vm.step === 5\\\">{{\\'SIGNUP.SIGN_UP_DONE_SUBTITLE\\' | translate}}</div></div><div \\nng-show=\\\"vm.step == 1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-wrap layout-align=\\\"start center\\\"><form name=\\\"vm.completeForm\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-wrap layout-align=\\\"start center\\\" novalidate><md-input-container flex=\\\"50\\\" class=\\\"mb-0\\\">\\n<label translate=\\\"SIGNUP.PHONE\\\"></label><input type=\\\"text\\\" ng-disabled=\\\"vm.sending || vm.checking\\\" \\nng-model=\\\"vm.signUp.phone\\\" nd-track-type=\\\"phone number\\\" name=\\\"phone\\\" required><div \\nng-messages=\\\"vm.completeForm.phone.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><div flex=\\\"50\\\" layout=\\\"row\\\">\\n<md-button class=\\\"md-primary m-0\\\" ng-disabled=\\\"!vm.signUp.phone\\\" flex=\\\"100\\\" ng-click=\\\"vm.sendValidationSMS()\\\" \\ntranslate=\\\"SIGNUP.RESEND_CODE\\\"></md-button></div><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\"><label \\ntranslate=\\\"SIGNUP.VERIFICATION_CODE\\\"></label><input type=\\\"text\\\" ng-disabled=\\\"vm.checking\\\" \\nng-keydown=\\\"vm.showWrongVerificationCode=false\\\" ng-model=\\\"vm.signUp.phoneValidationCode\\\" \\nnd-track-type=\\\"phone verification code\\\" name=\\\"phone_verification_code\\\" required><div \\nng-messages=\\\"vm.completeForm.phone_verification_code.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div><div ng-message=\\\"wrongcode\\\"><span>\\n{{\\'SIGNUP.WRONG_PHONE_VERIFICATION_CODE\\' | translate }}</span></div></div></md-input-container></form></div><div \\nng-show=\\\"vm.step == 2\\\"><form name=\\\"vm.completeForm2\\\" novalidate><div layout=\\\"row\\\" layout-wrap><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0\\\"><label translate=\\\"SIGNUP.COMPANY_NAME\\\">Company name</label><input type=\\\"text\\\" \\nng-disabled=\\\"vm.checking\\\" ng-model=\\\"vm.signUp.company_name\\\" nd-track-type=\\\"company name\\\" name=\\\"company_name\\\" required>\\n<div ng-messages=\\\"vm.completeForm2.company_name.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container \\nflex=\\\"100\\\"><label translate=\\\"SIGNUP.COUNTRY\\\">Country</label><md-select ng-model=\\\"vm.signUp.country\\\" name=\\\"country\\\" \\nplaceholder=\\\"{{\\'SIGNUP.COUNTRY\\'|translate}}\\\" ng-disabled=\\\"vm.checking\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.countrySearch)\\\" required><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.countrySearch\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"country in vm.countries | filter:vm.countrySearch\\\" ng-value=\\\"country.code\\\">{{country.name}}</md-option>\\n</md-select><div ng-messages=\\\"vm.creationForm.country.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><p class=\\\"secondary-text\\\" \\ntranslate=\\\"SIGNUP.PRODUCTS_YOU_SELL\\\"></p><md-checkbox ng-model=\\\"vm.signUp.sells_products_without_expiration\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.PRODUCTS_WITHOUT_EXPIRATION\\\"></span></md-checkbox>\\n<md-checkbox ng-model=\\\"vm.signUp.sells_products_with_expiration\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.PRODUCTS_WITH_EXPIRATION\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.sells_products_with_lots\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.PRODUCTS_WITH_LOTS\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.signUp.sells_products_with_uid\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.PRODUCTS_WITH_UID\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.sells_services\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.SERVICES\\\"></span>\\n</md-checkbox></div></form></div><div ng-show=\\\"vm.step == 3\\\"><form name=\\\"vm.completeForm3\\\" novalidate><div \\nlayout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\"><label translate=\\\"SIGNUP.SECTOR\\\">Sector</label><md-select \\nng-model=\\\"vm.signUp.sector\\\" name=\\\"sector\\\" placeholder=\\\"{{\\'SIGNUP.SECTOR\\'|translate}}\\\" ng-disabled=\\\"vm.checking\\\" \\nrequired><md-option ng-repeat=\\\"sector in vm.sectors\\\" ng-value=\\\"sector\\\">\\n{{ \\'SECTORS.\\' + vm.COMPANY_SECTORS[sector] | translate }}</md-option></md-select><div \\nng-messages=\\\"vm.completeForm3.sector.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><p class=\\\"secondary-text\\\" \\ntranslate=\\\"SIGNUP.WHAT_SELLING_CHANNELS_DO_YOU_HAVE\\\"></p><md-checkbox ng-model=\\\"vm.signUp.channel_online\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.CHANNEL_ONLINE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.channel_physical_store\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.CHANNEL_STORE\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.signUp.channel_wholesale\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.CHANNEL_WHOLESALE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.channel_manage_stock\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.CHANNEL_MANAGE_STOCK\\\"></span></md-checkbox></div></form></div><div ng-show=\\\"vm.step == 4\\\"><form \\nname=\\\"vm.completeForm4\\\" novalidate><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\" \\nng-if=\\\"vm.signUp.channel_online\\\"><label translate=\\\"SIGNUP.NUMBER_OF_ECOMMERCES\\\"></label><input \\nng-model=\\\"vm.signUp.total_online_stores\\\" nd-track-type=\\\"online stores\\\" name=\\\"totalOnlineStores\\\" type=\\\"number\\\" min=\\\"0\\\" \\nng-disabled=\\\"vm.checking\\\" required><div ng-messages=\\\"vm.completeForm4.totalOnlineStores.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\" ng-if=\\\"vm.signUp.channel_physical_store\\\"><label \\ntranslate=\\\"SIGNUP.NUMBER_OF_STORES\\\"></label><input ng-model=\\\"vm.signUp.total_physical_stores\\\" \\nnd-track-type=\\\"physical stores\\\" name=\\\"totalPhysicalStores\\\" type=\\\"number\\\" min=\\\"0\\\" ng-disabled=\\\"vm.checking\\\" required>\\n<div ng-messages=\\\"vm.completeForm4.totalPhysicalStores.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0\\\" ng-if=\\\"vm.signUp.channel_wholesale\\\"><label translate=\\\"SIGNUP.NUMBER_OF_COMERCIAL_AGENTS\\\">\\n</label><input ng-model=\\\"vm.signUp.total_commercial_agents\\\" nd-track-type=\\\"commercial agents\\\" \\nname=\\\"totalCommercialAgents\\\" type=\\\"number\\\" min=\\\"0\\\" ng-disabled=\\\"vm.checking\\\" required><div \\nng-messages=\\\"vm.completeForm4.totalCommercialAgents.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0\\\" ng-if=\\\"vm.signUp.channel_manage_stock\\\"><label translate=\\\"SIGNUP.NUMBER_OF_WAREHOUSES\\\"></label>\\n<input ng-model=\\\"vm.signUp.total_warehouses\\\" nd-track-type=\\\"total warehouses\\\" name=\\\"totalWarehouses\\\" type=\\\"number\\\" \\nmin=\\\"0\\\" ng-disabled=\\\"vm.checking\\\" required><div ng-messages=\\\"vm.completeForm4.totalWarehouses.$error\\\" role=\\\"alert\\\"><div\\n ng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container>\\n<p class=\\\"secondary-text\\\" translate=\\\"SIGNUP.INTERESTS_IN_STOCKAGILE\\\"></p><md-checkbox \\nng-repeat=\\\"interest in vm.interestsIn\\\" ng-if=\\\"vm.interestsInDict[interest]\\\" \\nng-model=\\\"vm.interestsInDict[interest].selected\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span>\\n{{ vm.interestsInDict[interest].name | translate}}</span></md-checkbox><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\" \\nng-if=\\\"vm.interestsInDict[vm.SIGNUP_INTERESTED_IN.OTHER].selected\\\"><label translate=\\\"SIGNUP.INTERESTED_IN_OTHER\\\">\\n</label><input ng-model=\\\"vm.signUp.interests_other\\\" nd-track-type=\\\"other interests\\\" name=\\\"interestsOther\\\" \\nng-disabled=\\\"vm.checking\\\" required><div ng-messages=\\\"vm.completeForm4.interestsOther.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container>\\n</div></form></div><div ng-show=\\\"vm.step == 5\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-progress-circular \\nmd-diameter=\\\"24px\\\" class=\\\"md-primary\\\"></md-progress-circular><span translate=\\\"SIGNUP.SIGN_UP_DONE_MSG\\\" \\nclass=\\\"ml-16 secondary-text\\\"></span></div></div></div><div class=\\\"button-bar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.step !== 5\\\"><md-button ng-click=\\\"vm.setStep(vm.step - 1)\\\" ng-if=\\\"!vm.error && vm.step > 1  && vm.step < 4\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\" class=\\\"mr-8\\\"></md-icon><span>\\n{{\\\"SIGNUP.BACK\\\" | translate}}</span></div></md-button><span flex></span><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.nextButtonDisabled()\\\" ng-click=\\\"vm.setStep(vm.step + 1, true)\\\" ng-if=\\\"!vm.error && vm.step < 5\\\" \\ntranslate=\\\"SIGNUP.NEXT\\\"></md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED\\\" ui-sref=\\\"app.pages_auth_login-v3\\\">\\n{{\\'LOGIN_V3.LOG_IN\\' | translate}}</md-button></div></div>\");\n$templateCache.put(\"app/directives/signup-complete-form/v2/nd-signup-complete-form-v2.html\",\"<div class=\\\"nd-signup-complete-form-v2\\\"><div ng-if=\\\"!vm.error\\\" class=\\\"signup-content\\\"><div class=\\\"header\\\" \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"full-width\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\" flex=\\\"25\\\"><md-progress-linear md-mode=\\\"determinate\\\" \\nclass=\\\"md-primary border-radius\\\" flex=\\\"75\\\" value=\\\"{{vm.progress}}\\\" ng-if=\\\"vm.step < 4\\\"></md-progress-linear></div><div \\nclass=\\\"h2\\\" ng-if=\\\"vm.step < 3\\\">{{\\'SIGNUP.PERSONALIZE_YOUR_WORKSPACE\\' | translate}}</div><div class=\\\"h2\\\" \\nng-if=\\\"vm.step === 3\\\">{{\\'SIGNUP.LAST_QUESTIONS\\' | translate}}</div><div class=\\\"h2\\\" ng-if=\\\"vm.step === 4\\\">\\n{{\\'SIGNUP.SIGNUP_COMPLETED\\' | translate}}</div><div class=\\\"secondary-text\\\" ng-if=\\\"vm.step === 1\\\">\\n{{\\'SIGNUP.COMPANY_DETAILS\\' | translate}}</div><div class=\\\"secondary-text\\\" ng-if=\\\"vm.step === 2\\\">\\n{{\\'SIGNUP.SELLING_CHANNELS\\' | translate}}</div><div class=\\\"secondary-text\\\" ng-if=\\\"vm.step === 3\\\">\\n{{\\'SIGNUP.HOW_MANY_CHANNELS_AND_INTEREST\\' | translate}}</div><div class=\\\"secondary-text\\\" ng-if=\\\"vm.step === 4\\\">\\n{{\\'SIGNUP.SIGN_UP_DONE_SUBTITLE\\' | translate}}</div></div><div ng-show=\\\"vm.step == 1\\\"><form name=\\\"vm.completeForm\\\" \\nnovalidate><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\"><label \\ntranslate=\\\"SIGNUP.COMPANY_NAME\\\">Company name</label><input type=\\\"text\\\" ng-disabled=\\\"vm.checking\\\" \\nng-model=\\\"vm.signUp.company_name\\\" name=\\\"company_name\\\"><div ng-messages=\\\"vm.completeForm.company_name.$error\\\" \\nrole=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div>\\n</md-input-container><md-input-container flex=\\\"100\\\"><label translate=\\\"SIGNUP.COUNTRY\\\">Country</label><md-select \\nng-model=\\\"vm.signUp.country\\\" name=\\\"country\\\" placeholder=\\\"{{\\'SIGNUP.COUNTRY\\'|translate}}\\\" ng-disabled=\\\"vm.checking\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(vm.countrySearch)\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.countrySearch\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-repeat=\\\"country in vm.countries | filter:vm.countrySearch\\\" ng-value=\\\"country.code\\\">\\n{{country.name}}</md-option></md-select><div ng-messages=\\\"vm.creationForm.country.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><p\\n class=\\\"secondary-text\\\" translate=\\\"SIGNUP.PRODUCTS_YOU_SELL\\\"></p><md-checkbox \\nng-model=\\\"vm.signUp.sells_products_without_expiration\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.PRODUCTS_WITHOUT_EXPIRATION\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.sells_products_with_expiration\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.PRODUCTS_WITH_EXPIRATION\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.sells_products_with_lots\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.PRODUCTS_WITH_LOTS\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.signUp.sells_products_with_uid\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.PRODUCTS_WITH_UID\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.sells_services\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.SERVICES\\\"></span>\\n</md-checkbox></div></form></div><div ng-show=\\\"vm.step == 2\\\"><form name=\\\"vm.completeForm2\\\" novalidate><div \\nlayout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\"><label translate=\\\"SIGNUP.SECTOR\\\">Sector</label><md-select \\nng-model=\\\"vm.signUp.sector\\\" name=\\\"sector\\\" placeholder=\\\"{{\\'SIGNUP.SECTOR\\'|translate}}\\\" ng-disabled=\\\"vm.checking\\\" \\nrequired><md-option ng-repeat=\\\"sector in vm.sectors\\\" ng-value=\\\"sector\\\">\\n{{ \\'SECTORS.\\' + vm.COMPANY_SECTORS[sector] | translate }}</md-option></md-select><div \\nng-messages=\\\"vm.completeForm2.sector.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><p class=\\\"secondary-text\\\" \\ntranslate=\\\"SIGNUP.WHAT_SELLING_CHANNELS_DO_YOU_HAVE\\\"></p><md-checkbox ng-model=\\\"vm.signUp.channel_online\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.CHANNEL_ONLINE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.channel_physical_store\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.CHANNEL_STORE\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.signUp.channel_wholesale\\\" \\nng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span translate=\\\"SIGNUP.CHANNEL_WHOLESALE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.channel_manage_stock\\\" ng-disabled=\\\"vm.completing\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"SIGNUP.CHANNEL_MANAGE_STOCK\\\"></span></md-checkbox></div></form></div><div ng-show=\\\"vm.step == 3\\\"><form \\nname=\\\"vm.completeForm3\\\" novalidate><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\" \\nng-if=\\\"vm.signUp.channel_online\\\"><label translate=\\\"SIGNUP.NUMBER_OF_ECOMMERCES\\\"></label><input \\nng-model=\\\"vm.signUp.total_online_stores\\\" name=\\\"totalOnlineStores\\\" type=\\\"number\\\" min=\\\"0\\\" ng-disabled=\\\"vm.checking\\\"><div \\nng-messages=\\\"vm.completeForm3.totalOnlineStores.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0\\\" ng-if=\\\"vm.signUp.channel_physical_store\\\"><label translate=\\\"SIGNUP.NUMBER_OF_STORES\\\"></label>\\n<input ng-model=\\\"vm.signUp.total_physical_stores\\\" name=\\\"totalPhysicalStores\\\" type=\\\"number\\\" min=\\\"0\\\" \\nng-disabled=\\\"vm.checking\\\"><div ng-messages=\\\"vm.completeForm3.totalPhysicalStores.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\" ng-if=\\\"vm.signUp.channel_wholesale\\\"><label \\ntranslate=\\\"SIGNUP.NUMBER_OF_COMERCIAL_AGENTS\\\"></label><input ng-model=\\\"vm.signUp.total_commercial_agents\\\" \\nname=\\\"totalCommercialAgents\\\" type=\\\"number\\\" min=\\\"0\\\" ng-disabled=\\\"vm.checking\\\"><div \\nng-messages=\\\"vm.completeForm3.totalCommercialAgents.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0\\\" ng-if=\\\"vm.signUp.channel_manage_stock\\\"><label translate=\\\"SIGNUP.NUMBER_OF_WAREHOUSES\\\"></label>\\n<input ng-model=\\\"vm.signUp.total_warehouses\\\" name=\\\"totalWarehouses\\\" type=\\\"number\\\" min=\\\"0\\\" ng-disabled=\\\"vm.checking\\\">\\n<div ng-messages=\\\"vm.completeForm3.totalWarehouses.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><p class=\\\"secondary-text\\\" \\ntranslate=\\\"SIGNUP.INTERESTS_IN_STOCKAGILE\\\"></p><md-checkbox ng-repeat=\\\"interest in vm.interestsIn\\\" \\nng-if=\\\"vm.interestsInDict[interest]\\\" ng-model=\\\"vm.interestsInDict[interest].selected\\\" ng-disabled=\\\"vm.completing\\\" \\nflex=\\\"100\\\"><span>{{ vm.interestsInDict[interest].name | translate}}</span></md-checkbox><md-input-container flex=\\\"100\\\" \\nclass=\\\"mb-0\\\" ng-if=\\\"vm.interestsInDict[vm.SIGNUP_INTERESTED_IN.OTHER].selected\\\"><label \\ntranslate=\\\"SIGNUP.INTERESTED_IN_OTHER\\\"></label><input ng-model=\\\"vm.signUp.interests_other\\\" name=\\\"interestsOther\\\" \\nng-disabled=\\\"vm.checking\\\" required><div ng-messages=\\\"vm.completeForm3.interestsOther.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container>\\n</div></form></div><div ng-if=\\\"vm.step == 4\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\" class=\\\"mt-8\\\" \\nng-init=\\\"vm.startGenerationBarAndMessages()\\\"><md-progress-linear md-mode=\\\"determinate\\\" \\nclass=\\\"md-primary border-radius\\\" ng-value=\\\"vm.generationProgress\\\"></md-progress-linear><span \\nclass=\\\"mt-8 secondary-text\\\">{{vm.generationMessage | translate}}</span></div><div layout=\\\"row\\\" class=\\\"mb-8 mt-16\\\"><img \\nsrc=\\\"/assets/images/people/marina.a12a518a.jpeg\\\" class=\\\"book-demo-image mr-8 border-radius\\\" flex=\\\"25\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"space-between stretch\\\" flex><p class=\\\"secondary-text ml-8 mt-0\\\">{{\\\"SIGNUP.BOOK_DEMO_MSG\\\" | translate}}\\n</p><md-button class=\\\"md-primary md-raised mb-0 mr-0\\\" ng-click=\\\"vm.bookDemo()\\\" ng-disabled=\\\"vm.bookDemoDisabled()\\\"><div\\n layout=\\\"row\\\" layout-align=\\\"center center\\\" translate=\\\"SIGNUP.BOOK_DEMO\\\"></div></md-button></div></div></div></div><div \\nclass=\\\"button-bar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.step !== 4\\\"><md-button \\nng-click=\\\"vm.setStep(vm.step - 1)\\\" ng-if=\\\"!vm.error && vm.step > 1  && vm.step < 4\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\" class=\\\"mr-8\\\"></md-icon><span>\\n{{\\\"SIGNUP.BACK\\\" | translate}}</span></div></md-button><span flex></span><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.nextButtonDisabled()\\\" ng-click=\\\"vm.setStep(vm.step + 1, true)\\\" ng-if=\\\"!vm.error && vm.step < 4\\\"><div \\nng-if=\\\"vm.step < 3\\\">{{\\'SIGNUP.NEXT\\' | translate}}</div><div ng-if=\\\"vm.step === 3\\\">{{\\'SIGNUP.BEGIN\\' | translate}}</div>\\n</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED\\\" ui-sref=\\\"app.pages_auth_login-v3\\\">\\n{{\\'LOGIN_V3.LOG_IN\\' | translate}}</md-button></div></div>\");\n$templateCache.put(\"app/directives/signup-creation-form/v1/nd-signup-creation-form-v1.html\",\"<div class=\\\"md-padding nd-signup-creation-form-v1\\\"><div ng-show=\\\"!vm.showEmailSent\\\"><div class=\\\"header\\\" \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"><div \\nclass=\\\"h2\\\">{{\\'SIGNUP.SIGN_UP_TITLE\\' | translate: {n: vm.TRIAL_DAYS} }}</div><div class=\\\"secondary-text\\\">\\n{{\\'SIGNUP.SIGN_UP_SUBTITLE\\' | translate}}</div></div><form name=\\\"vm.creationForm\\\" novalidate><div layout=\\\"row\\\" \\nlayout-wrap><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\"><label translate=\\\"SIGNUP.FULL_NAME\\\"></label><input type=\\\"text\\\" \\nng-disabled=\\\"vm.checking\\\" ng-model=\\\"vm.signUp.fullname\\\" nd-track-type=\\\"fullname\\\" name=\\\"fullname\\\" required><div \\nng-messages=\\\"vm.creationForm.fullname.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container flex=\\\"30\\\" \\nclass=\\\"mb-0\\\"><label translate=\\\"SIGNUP.PREFIX\\\">Prefix</label><md-select ng-model=\\\"vm.signUp.phonePrefix\\\" name=\\\"country\\\" \\nng-disabled=\\\"vm.checking\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(vm.countrySearch)\\\" required>\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.countrySearch\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"country in vm.countries | filter:vm.countrySearch | orderBy: \\'position\\'\\\" ng-value=\\\"country.prefix\\\">\\n({{country.prefix}}) {{country.name}}</md-option></md-select><div ng-messages=\\\"vm.creationForm.country.$error\\\" \\nrole=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div>\\n</md-input-container><md-input-container flex=\\\"70\\\" class=\\\"mb-0\\\"><label translate=\\\"SIGNUP.PHONE\\\"></label><input \\ntype=\\\"text\\\" ng-disabled=\\\"vm.checking\\\" ng-model=\\\"vm.signUp.tempPhone\\\" nd-track-type=\\\"phone\\\" \\nng-change=\\\"vm.setValidityFalse(\\'phone\\')\\\" name=\\\"phone\\\" required><div ng-messages=\\\"vm.creationForm.phone.$error\\\" \\nrole=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div><div \\nng-message=\\\"unique\\\">{{\\'SIGNUP.ERROR_01002_USER_PHONE_ALREADY_EXISTS\\' | translate}}</div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\"><label translate=\\\"SIGNUP.EMAIL\\\"></label><input type=\\\"email\\\" name=\\\"email\\\" \\nng-model=\\\"vm.signUp.email\\\" ng-change=\\\"vm.setValidityFalse(\\'email\\')\\\" nd-track-type=\\\"email\\\" ng-disabled=\\\"vm.checking\\\" \\nng-pattern=\\\"/^.+@.+\\\\..+$/\\\" required><div ng-messages=\\\"vm.creationForm.email.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate}}</span></div><div ng-message=\\\"pattern\\\">\\n{{\\'SIGNUP.EMAIL_ADDRESS_NOT_VALID\\' | translate}}</div><div ng-message=\\\"unique\\\">\\n{{\\'SIGNUP.ERROR_01001_USER_MAIL_ALREADY_EXISTS\\' | translate}}</div></div></md-input-container><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0 d-icon-float md-icon-right\\\"><label translate=\\\"SIGNUP.PASSWORD\\\"></label><input \\ntype=\\\"{{vm.showPassword ? \\'text\\' : \\'password\\'}}\\\" name=\\\"password\\\" ng-model=\\\"vm.signUp.password\\\" \\nnd-track-type=\\\"password\\\" ng-pattern=\\\"/^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d!@#$%^&*]{8,}$/\\\" ng-disabled=\\\"vm.creating\\\" \\nrequired><md-icon md-font-icon=\\\"icon-eye\\\" class=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = true\\\" \\nng-if=\\\"!vm.showPassword\\\"></md-icon><md-icon md-font-icon=\\\"icon-eye-off\\\" class=\\\"secondary-text cursor-pointer\\\" \\nng-click=\\\"vm.showPassword = false\\\" ng-if=\\\"vm.showPassword\\\"></md-icon><div \\nng-messages=\\\"vm.creationForm.password.$error\\\" ng-show=\\\"vm.creationForm.password.$dirty\\\" role=\\\"alert\\\"><div \\nng-message=\\\"pattern\\\" data-test-id=\\\"signup-alert-password-invalid\\\"><span>{{\\'SIGNUP.PASSWORD_INVALID\\' | translate}}\\n</span></div><div ng-message=\\\"required\\\"><span>{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div></div>\\n</md-input-container><md-checkbox ng-model=\\\"vm.signUp.terms_and_conditions_accepted\\\" name=\\\"termsAndConditionsAccepted\\\" \\nng-disabled=\\\"vm.creating\\\" required flex=\\\"100\\\"><span translate=\\\"SIGNUP.ACCEPT_TERMS_AND_CONDITIONS\\\" \\ntranslate-values=\\\"{termsUrl: vm.TERMS_URL, privacyUrl: vm.PRIVACY_URL}\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.receive_content_accepted\\\" name=\\\"termsAndConditionsAccepted\\\" ng-disabled=\\\"vm.creating\\\" flex=\\\"100\\\">\\n<span translate=\\\"SIGNUP.ACCEPT_RECEIVE_CONTENT\\\"></span></md-checkbox></div></form><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex><md-button class=\\\"md-primary md-raised full-width\\\" \\nng-click=\\\"vm.submitCreationForm()\\\" ng-disabled=\\\"!vm.creationForm.$valid\\\" nd-track-click=\\\"submit\\\" \\ntranslate=\\\"SIGNUP.CREATE_FREE_ACCOUNT\\\"></md-button></div><div class=\\\"navigation\\\" flex layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\" layout-align=\\\"center center\\\"><md-menu id=\\\"language-menu\\\" md-position-mode=\\\"target-right target\\\">\\n<md-button class=\\\"md-icon-button language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"Language\\\" md-menu-origin \\nmd-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img class=\\\"flag\\\" \\nng-src=\\\"assets/images/flags/{{vm.lang.flag}}.png\\\"></div></md-button><md-menu-content width=\\\"3\\\" \\nid=\\\"language-menu-content\\\"><md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button \\nng-click=\\\"vm.changeLanguage(lang)\\\" aria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\">\\n<span layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" flex><span class=\\\"secondary-text\\\">\\n{{\\'SIGNUP.ALREADY_HAVE_ACCOUNT\\' | translate }} </span>&nbsp; <a ui-sref=\\\"app.pages_auth_login-v3\\\" \\ntranslate=\\\"LOGIN_V3.LOG_IN\\\"></a></div><md-button class=\\\"md-icon-button\\\" hide-xs hide-sm></md-button></div></div><div \\nng-show=\\\"vm.showEmailSent\\\"><div class=\\\"header\\\" layout=\\\"column\\\" layout-align=\\\"start start\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"><br><div class=\\\"h1\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/mark-email-unread.87342817.svg\\\" class=\\\"md-primary\\\"></md-icon>\\n{{\\'SIGNUP.SIGN_UP_COMPLETED_EXCL\\' | translate }}</div></div><p>\\n{{ \\'SIGNUP.VERIFY_EMAIL\\' | translate }}. {{\\'SIGNUP.EMAIL_SENT\\' | translate }} <b>{{ vm.signUp.email }}</b>.</p><p \\nclass=\\\"mb-0\\\">{{\\'SIGNUP.DIDNT_RECEIVE_EMAIL\\' | translate }}<br>{{\\'SIGNUP.CHECK_SPAM_OR\\' | translate }} <span \\nclass=\\\"md-primary-fg cursor-pointer\\\" ng-click=\\\"vm.sendValidationEmail()\\\">{{\\'SIGNUP.RESEND_NEW_LINK\\' | translate }}\\n</span>.</p></div></div>\");\n$templateCache.put(\"app/directives/signup-creation-form/v2/nd-signup-creation-form-v2.html\",\"<div class=\\\"nd-signup-creation-form-v2\\\"><div ng-show=\\\"vm.step === 0\\\"><div class=\\\"header\\\" layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"><div class=\\\"h2\\\">\\n{{\\'SIGNUP.SIGN_UP_TITLE_2\\' | translate}}</div><div class=\\\"secondary-text\\\">{{\\'SIGNUP.SIGN_UP_SUBTITLE\\' | translate}}\\n</div></div><form name=\\\"vm.creationForm\\\" novalidate><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" \\nclass=\\\"mb-0\\\"><label translate=\\\"SIGNUP.EMAIL\\\"></label><input type=\\\"email\\\" name=\\\"email\\\" nd-track-type=\\\"email\\\" \\nng-model=\\\"vm.signUp.email\\\" ng-change=\\\"vm.setValidityFalse(\\'email\\')\\\" ng-disabled=\\\"vm.checking\\\" \\nng-pattern=\\\"/^.+@.+\\\\..+$/\\\" required><div ng-messages=\\\"vm.creationForm.email.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate}}</span></div><div ng-message=\\\"pattern\\\">\\n{{\\'SIGNUP.EMAIL_ADDRESS_NOT_VALID\\' | translate}}</div></div></md-input-container></div></form><div class=\\\"mb-8\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg s18\\\"></md-icon></div><span translate=\\\"SIGNUP.EMAIL_REMAINDER\\\">\\n</span></div></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" flex><md-button \\nclass=\\\"md-primary md-raised full-width\\\" ng-click=\\\"vm.nextStep()\\\" ng-disabled=\\\"!vm.validateEmail(vm.signUp.email)\\\" \\ntranslate=\\\"SIGNUP.CONTINUE\\\"></md-button></div><div class=\\\"navigation\\\" flex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-menu id=\\\"language-menu\\\" md-position-mode=\\\"target-right target\\\"><md-button \\nclass=\\\"md-icon-button language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"Language\\\" md-menu-origin \\nmd-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img class=\\\"flag\\\" \\nng-src=\\\"assets/images/flags/{{vm.lang.flag}}.png\\\"></div></md-button><md-menu-content width=\\\"3\\\" \\nid=\\\"language-menu-content\\\"><md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button \\nng-click=\\\"vm.changeLanguage(lang)\\\" aria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\">\\n<span layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" flex><span class=\\\"secondary-text\\\">\\n{{\\'SIGNUP.ALREADY_HAVE_ACCOUNT\\' | translate }} </span>&nbsp; <a ui-sref=\\\"app.pages_auth_login-v3\\\" \\ntranslate=\\\"LOGIN_V3.LOG_IN\\\"></a></div><md-button class=\\\"md-icon-button\\\" hide-xs hide-sm></md-button></div></div><div \\nng-show=\\\"vm.step === 1\\\"><div class=\\\"header\\\" layout=\\\"column\\\" layout-align=\\\"start start\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"><div class=\\\"h2\\\">\\n{{\\'SIGNUP.SIGN_UP_TITLE\\' | translate: {n: vm.TRIAL_DAYS} }}</div><div class=\\\"secondary-text\\\">\\n{{\\'SIGNUP.SIGN_UP_SUBTITLE\\' | translate}}</div></div><form name=\\\"vm.creationForm\\\" novalidate><div layout=\\\"row\\\" \\nlayout-wrap><md-input-container flex=\\\"100\\\" class=\\\"mb-0\\\"><label translate=\\\"SIGNUP.FULL_NAME\\\"></label><input type=\\\"text\\\" \\nng-disabled=\\\"vm.checking\\\" ng-model=\\\"vm.signUp.fullname\\\" nd-track-type=\\\"fullname\\\" name=\\\"fullname\\\" required><div \\nng-messages=\\\"vm.creationForm.fullname.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>\\n{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div></md-input-container><md-input-container flex=\\\"30\\\" \\nclass=\\\"mb-0\\\"><label translate=\\\"SIGNUP.PREFIX\\\">Prefix</label><md-select ng-model=\\\"vm.signUp.phonePrefix\\\" name=\\\"country\\\" \\nng-disabled=\\\"vm.checking\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(vm.countrySearch)\\\" required>\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.countrySearch\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"country in vm.countries | filter:vm.countrySearch | orderBy: \\'position\\'\\\" ng-value=\\\"country.prefix\\\">\\n({{country.prefix}}) {{country.name}}</md-option></md-select><div ng-messages=\\\"vm.creationForm.country.$error\\\" \\nrole=\\\"alert\\\"><div ng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div></div>\\n</md-input-container><md-input-container flex=\\\"70\\\" class=\\\"mb-0\\\"><label translate=\\\"SIGNUP.PHONE\\\"></label><input \\ntype=\\\"text\\\" ng-disabled=\\\"vm.checking\\\" ng-model=\\\"vm.signUp.tempPhone\\\" ng-change=\\\"vm.setValidityFalse(\\'phone\\')\\\" \\nnd-track-type=\\\"phone\\\" name=\\\"phone\\\" required><div ng-messages=\\\"vm.creationForm.phone.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span>{{\\'SIGNUP.THIS_FIELD_IS_MANDATORY\\' | translate }}</span></div><div ng-message=\\\"unique\\\">\\n{{\\'SIGNUP.ERROR_01002_USER_PHONE_ALREADY_EXISTS\\' | translate}}</div></div></md-input-container><md-input-container \\nflex=\\\"100\\\" class=\\\"mb-0 d-icon-float md-icon-right\\\"><label translate=\\\"SIGNUP.PASSWORD\\\"></label><input \\ntype=\\\"{{vm.showPassword ? \\'text\\' : \\'password\\'}}\\\" name=\\\"password\\\" ng-model=\\\"vm.signUp.password\\\" \\nnd-track-type=\\\"password\\\" ng-pattern=\\\"/^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d!@#$%^&*]{8,}$/\\\" ng-disabled=\\\"vm.creating\\\" \\nrequired><md-icon md-font-icon=\\\"icon-eye\\\" class=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = true\\\" \\nng-if=\\\"!vm.showPassword\\\"></md-icon><md-icon md-font-icon=\\\"icon-eye-off\\\" class=\\\"secondary-text cursor-pointer\\\" \\nng-click=\\\"vm.showPassword = false\\\" ng-if=\\\"vm.showPassword\\\"></md-icon><div \\nng-messages=\\\"vm.creationForm.password.$error\\\" ng-show=\\\"vm.creationForm.password.$dirty\\\" role=\\\"alert\\\"><div \\nng-message=\\\"pattern\\\" data-test-id=\\\"signup-alert-password-invalid\\\"><span>{{\\'SIGNUP.PASSWORD_INVALID\\' | translate}}\\n</span></div><div ng-message=\\\"required\\\"><span>{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div></div>\\n</md-input-container><md-checkbox ng-model=\\\"vm.signUp.terms_and_conditions_accepted\\\" name=\\\"termsAndConditionsAccepted\\\" \\nng-disabled=\\\"vm.creating\\\" required flex=\\\"100\\\"><span translate=\\\"SIGNUP.ACCEPT_TERMS_AND_CONDITIONS\\\" \\ntranslate-values=\\\"{termsUrl: vm.TERMS_URL, privacyUrl: vm.PRIVACY_URL}\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.signUp.receive_content_accepted\\\" name=\\\"termsAndConditionsAccepted\\\" ng-disabled=\\\"vm.creating\\\" flex=\\\"100\\\">\\n<span translate=\\\"SIGNUP.ACCEPT_RECEIVE_CONTENT\\\"></span></md-checkbox></div></form><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex><md-button class=\\\"md-primary md-raised full-width\\\" \\nng-click=\\\"vm.submitCreationForm()\\\" ng-disabled=\\\"!vm.creationForm.$valid\\\" nd-track-click=\\\"submit\\\" \\ntranslate=\\\"SIGNUP.CONTINUE\\\"></md-button></div><div class=\\\"navigation\\\" flex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-menu id=\\\"language-menu\\\" md-position-mode=\\\"target-right target\\\"><md-button \\nclass=\\\"md-icon-button language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"Language\\\" md-menu-origin \\nmd-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img class=\\\"flag\\\" \\nng-src=\\\"assets/images/flags/{{vm.lang.flag}}.png\\\"></div></md-button><md-menu-content width=\\\"3\\\" \\nid=\\\"language-menu-content\\\"><md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button \\nng-click=\\\"vm.changeLanguage(lang)\\\" aria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\">\\n<span layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" flex><span class=\\\"secondary-text\\\">\\n{{\\'SIGNUP.ALREADY_HAVE_ACCOUNT\\' | translate }} </span>&nbsp; <a ui-sref=\\\"app.pages_auth_login-v3\\\" \\ntranslate=\\\"LOGIN_V3.LOG_IN\\\"></a></div><md-button class=\\\"md-icon-button\\\" hide-xs hide-sm></md-button></div></div><div \\nng-show=\\\"vm.step === 2\\\"><div class=\\\"header\\\" layout=\\\"column\\\" layout-align=\\\"start start\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"><div class=\\\"h1\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/mark-email-unread.87342817.svg\\\" class=\\\"md-primary\\\"></md-icon>\\n{{\\'SIGNUP.CHECK_EMAIL\\' | translate }}</div><div class=\\\"secondary-text\\\">\\n{{ \\'SIGNUP.SIGN_UP_COMPLETED_EXCL\\' | translate }}</div></div><p \\nng-bind-html=\\\"\\'SIGNUP.EMAIL_SENT_2\\' | translate: {email: vm.signUp.email} \\\"></p><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button class=\\\"md-primary stroked\\\" ng-click=\\\"vm.openGmail()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><img src=\\\"/assets/images/logos/gmail.9dbc79da.svg\\\" class=\\\"open-email-logo\\\"> <span \\ntranslate=\\\"SIGNUP.OPEN_GMAIL\\\"></span></div></md-button><md-button class=\\\"md-primary stroked\\\" \\nng-click=\\\"vm.openOutlook()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img src=\\\"/assets/images/logos/outlook.41d16cde.svg\\\" \\nclass=\\\"open-email-logo\\\"> <span translate=\\\"SIGNUP.OPEN_OUTLOOK\\\"></span></div></md-button></div><p class=\\\"mb-0\\\">\\n{{\\'SIGNUP.DIDNT_RECEIVE_EMAIL\\' | translate }}<br>{{\\'SIGNUP.CHECK_SPAM_OR\\' | translate }} <span \\nclass=\\\"md-primary-fg cursor-pointer\\\" ng-click=\\\"vm.sendValidationEmail()\\\">{{\\'SIGNUP.RESEND_NEW_LINK\\' | translate }}\\n</span></p></div></div>\");\n$templateCache.put(\"app/directives/upgrade/wbUpgradePlan/wbUpgradePlan.html\",\"<div class=\\\"price-table style-2 md-whiteframe-1dp\\\" layout=\\\"column\\\"><div \\nclass=\\\"package-type md-accent-fg text-uppercase\\\">{{plan.name}}</div><div class=\\\"price\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center start\\\"><div class=\\\"value\\\">{{plan.amount | number: 0}}</div><div class=\\\"currency\\\">\\n{{plan.currency|currencyCharacter}}</div><md-divider></md-divider></div><div class=\\\"period text-uppercase\\\" \\nng-if=\\\"plan.interval==\\'month\\'\\\">PER MONTH</div><div class=\\\"period text-uppercase\\\" ng-if=\\\"plan.interval==\\'year\\'\\\">PER YEAR\\n</div><div class=\\\"terms\\\" layout=\\\"column\\\" layout-align=\\\"start center\\\" ng-bind-html=\\\"features\\\"></div><md-button \\nclass=\\\"cta-button md-raised md-accent\\\">UPGRADE</md-button></div>\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html\",\"<ms-navigation class=\\\"scrollable\\\" folded=\\\"vm.folded\\\" ms-scroll=\\\"vm.msScrollOptions\\\"></ms-navigation>\");\n$templateCache.put(\"app/navigation/layouts/horizontal-navigation/navigation.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><ms-navigation-horizontal></ms-navigation-horizontal></div>\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation/navigation.html\",\"<md-toolbar class=\\\"navigation-header md-whiteframe-1dp\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div \\nclass=\\\"logo\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"logo-image mr-8\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo.e4ee42cd.svg\\\"></span><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"logo-text w-80\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo-text.7ab7e4e3.svg\\\"></div></div><md-icon \\nclass=\\\"fold-toggle s18\\\" md-font-icon=\\\"icon-backburger\\\" hide show-gt-sm ng-click=\\\"vm.toggleMsNavigationFolded()\\\">\\n</md-icon></md-toolbar><ms-navigation class=\\\"scrollable no-box-shadow\\\" folded=\\\"vm.folded\\\" \\nms-scroll=\\\"vm.msScrollOptions\\\"></ms-navigation>\");\n$templateCache.put(\"app/main/components/coupon-input/coupon-input.html\",\"<div layout=\\\"column\\\" class=\\\"nd-coupon-input-container mb-8\\\"><div ng-attr-layout=\\\"{{vm.layout}}\\\" \\nlayout-align=\\\"start center\\\" class=\\\"nd-coupon-input-container\\\"><div class=\\\"nd-coupon-input\\\" \\nng-class=\\\"{\\'mb-5\\': vm.layout === \\'column\\'}\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\" \\nng-click=\\\"vm.onClick($event)\\\"><div flex layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"pr-16\\\"><md-icon \\nmd-font-icon=\\\"icon-currency-eur\\\" class=\\\"mr-8 black-fg\\\"></md-icon><md-switch class=\\\"green no-margin\\\" \\nng-disabled=\\\"vm.disabled\\\" ng-click=\\\"vm.onClick($event)\\\" ng-model=\\\"vm.model.discount_is_percentage\\\" \\nng-change=\\\"vm.emitChanged()\\\"><md-icon md-font-icon=\\\"icon-percent\\\" class=\\\"black-fg\\\"></md-icon></md-switch></div><div \\nflex layout=\\\"row\\\" layout-align=\\\"start center\\\"><input type=\\\"number\\\" step=\\\"0.01\\\" ng-disabled=\\\"vm.disabled\\\" \\nng-model=\\\"vm.model.discount_value\\\" ng-click=\\\"vm.onClick($event)\\\" ng-change=\\\"vm.onValueChange()\\\" \\nclass=\\\"nd-input text-right mr-5 w-80\\\"> <span ng-if=\\\"vm.model.discount_is_percentage\\\">%</span> <span \\nng-if=\\\"!vm.model.discount_is_percentage\\\">€</span></div></div><div class=\\\"nd-coupon-input\\\" layout-align=\\\"start start\\\" \\nclass=\\\"mt-8\\\" ng-if=\\\"vm.model.discount_value\\\" ng-click=\\\"vm.onClick($event)\\\"><div ng-if=\\\"vm.disabled\\\" \\nclass=\\\"secondary-text limit-details\\\"><span ng-if=\\\"vm.model.duration === \\'forever\\'\\\" translate=\\\"SUBSCRIPTION.FOREVER\\\">\\n</span> <span ng-if=\\\"vm.model.duration === \\'once\\'\\\" translate=\\\"SUBSCRIPTION.ONCE\\\"></span><div \\nng-if=\\\"vm.model.duration === \\'repeating\\' && vm.model.duration_in_months\\\">{{vm.model.duration_in_months}} <span \\ntranslate=\\\"SUBSCRIPTION.MONTHS\\\" class=\\\"ml-5\\\"></span></div><span \\nng-if=\\\"vm.model.duration !== \\'forever\\' && vm.model.applies_until\\\" class=\\\"ml-8\\\">\\n{{\\'SUBSCRIPTION.DISCOUNT_UNTIL\\' | translate: {date: (vm.model.applies_until | date:\\'d/M/yyyy\\') } }}</span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.disabled\\\"><md-select ng-model=\\\"vm.model.duration\\\" \\nng-disabled=\\\"vm.disabled\\\" ng-change=\\\"vm.onDurationChange()\\\" ng-click=\\\"vm.onClick($event)\\\" class=\\\"nd-input no-margin\\\">\\n<md-option value=\\\"forever\\\" translate=\\\"SUBSCRIPTION.FOREVER\\\"></md-option><md-option value=\\\"once\\\" \\ntranslate=\\\"SUBSCRIPTION.ONCE\\\"></md-option><md-option value=\\\"repeating\\\" translate=\\\"SUBSCRIPTION.REPEATING\\\"></md-option>\\n</md-select><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.disabled && vm.model.duration === \\'repeating\\'\\\" \\nclass=\\\"ml-5\\\" flex><input type=\\\"number\\\" min=\\\"1\\\" step=\\\"1\\\" ng-disabled=\\\"vm.disabled\\\" \\nng-model=\\\"vm.model.duration_in_months\\\" ng-change=\\\"vm.onDurationMonthsChange()\\\" ng-click=\\\"vm.onClick($event)\\\" \\nclass=\\\"nd-input w-50 text-right\\\"> <span translate=\\\"SUBSCRIPTION.MONTHS\\\" class=\\\"ml-5\\\"></span></div></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/components/information-panel/information-panel.html\",\"<div class=\\\"information-panel did-you-know\\\" ng-class=\\\"$ctrl.getPanelClass()\\\" layout=\\\"column\\\" layout-gt-md=\\\"row\\\">\\n<md-icon md-font-icon=\\\"{{$ctrl.getIcon()}}\\\" ng-class=\\\"$ctrl.getIconClass()\\\"></md-icon><div \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\" layout=\\\"row\\\" flex><div layout=\\\"column\\\" flex><span ng-transclude=\\\"title\\\"></span>\\n <span class=\\\"secondary-text\\\" ng-transclude=\\\"content\\\"></span></div><div ng-transclude=\\\"action\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"></div></div></div>\");\n$templateCache.put(\"app/main/components/filter-selector/filter-selector.html\",\"<div layout=\\\"row\\\" layout-wrap layout-align=\\\"start center\\\"><div class=\\\"filter-fields\\\" layout=\\\"row\\\" ng-transclude></div>\\n<md-menu class=\\\"mr-5\\\"><md-button class=\\\"md-button md-primary stroked no-margin\\\" ng-click=\\\"$mdMenu.open($event)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-menu-origin class=\\\"mr-5\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/filter-variant-plus.90ad7787.svg\\\"></md-icon>\\n{{\\'INVENTORY_DASHBOARD.ADD_FILTER\\' | translate}}</div></md-button><md-menu-content><md-menu-item \\nng-repeat=\\\"filter in vm.availableFilters\\\" ng-hide=\\\"vm.isFilterActive(filter.name)\\\"><md-button \\nng-click=\\\"vm.toggleFilter(filter.name)\\\"><md-icon md-menu-align-target md-font-icon ng-if=\\\"vm.isSvgIcon(filter)\\\" \\nmd-svg-icon=\\\"{{filter.icon}}\\\"></md-icon><md-icon md-menu-align-target md-font-icon=\\\"{{filter.icon}}\\\" \\nng-if=\\\"!vm.isSvgIcon(filter)\\\"></md-icon>{{filter.label | translate}}</md-button></md-menu-item></md-menu-content>\\n</md-menu></div>\");\n$templateCache.put(\"app/main/components/input/input.html\",\"<md-input-container md-no-float flex class=\\\"nd-input-custom\\\" ng-class=\\\"vm.getContainerClass()\\\" \\nstyle=\\\"padding-left: 8px !important\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" \\nng-if=\\\"!vm.isSvgIcon() && vm.icon\\\" md-font-icon=\\\"{{vm.icon}}\\\"></md-icon><md-icon class=\\\"mr-8\\\" \\nng-if=\\\"vm.isSvgIcon() && vm.icon\\\" md-font-icon md-svg-src=\\\"{{vm.icon}}\\\"></md-icon><label \\ntranslate=\\\"{{vm.selectPlaceholder}}\\\" ng-if=\\\"vm.showLabel\\\"></label><input ng-model=\\\"vm.model\\\" \\nng-change=\\\"vm.onInputChange()\\\" ng-model-options=\\\"{ debounce: 500 }\\\" placeholder=\\\"{{vm.selectPlaceholder | translate}}\\\" \\nstep=\\\"1\\\" type=\\\"number\\\"></div></md-input-container>\");\n$templateCache.put(\"app/main/components/menu-button/menu-button.html\",\"<div layout=\\\"row\\\" class=\\\"nd-menu-button\\\"><div class=\\\"left-button-slot\\\"></div><md-menu \\nmd-position-mode=\\\"target-right bottom\\\"><md-button class=\\\"md-button right-button\\\" ng-class=\\\"vm.mdClass\\\" \\nng-click=\\\"vm.openMenu($mdMenu, $event)\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-chevron-down\\\"></md-icon></md-button><md-menu-content width=\\\"4\\\" class=\\\"p-0 actions-slot\\\">\\n</md-menu-content></md-menu></div>\");\n$templateCache.put(\"app/main/components/paginated-dropdown/paginated-dropdown.html\",\"<md-input-container md-no-float flex ng-class=\\\"vm.getContainerClass()\\\" style=\\\"padding-left: 8px !important\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" ng-if=\\\"!vm.isSvgIcon() && vm.icon\\\" \\nmd-font-icon=\\\"{{vm.icon}}\\\"></md-icon><md-icon class=\\\"mr-8\\\" ng-if=\\\"vm.isSvgIcon() && vm.icon\\\" md-font-icon \\nmd-svg-src=\\\"{{vm.icon}}\\\"></md-icon><label translate=\\\"{{vm.selectPlaceholder}}\\\" ng-if=\\\"vm.showLabel\\\"></label><md-select \\nng-model=\\\"vm.selectedItems\\\" ng-if=\\\"vm.isMultiple\\\" ng-change=\\\"vm.onDropdownChanged()\\\" flex multiple=\\\"multiple\\\" \\nplaceholder=\\\"{{vm.selectPlaceholder | translate}}\\\" class=\\\"m-0\\\"><md-select-header ng-if=\\\"vm.search\\\"><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.searchText\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option \\nng-repeat=\\\"item in vm.items | filter: vm.items[0].name !== undefined ? {name: vm.searchText} : vm.searchText\\\" \\nng-value=\\\"item.id || item\\\"><div ng-if=\\\"vm.$transclude.isSlotFilled(\\'itemTemplate\\')\\\" ng-transclude=\\\"itemTemplate\\\" \\nng-init=\\\"item=item\\\"></div><div ng-if=\\\"!vm.$transclude.isSlotFilled(\\'itemTemplate\\')\\\">{{item.name || item}}</div>\\n</md-option></md-select><md-select ng-model=\\\"vm.selectedItems\\\" ng-if=\\\"!vm.isMultiple\\\" \\nng-change=\\\"vm.onDropdownChanged()\\\" flex placeholder=\\\"{{vm.selectPlaceholder | translate}}\\\" class=\\\"m-0\\\">\\n<md-select-header ng-if=\\\"vm.search\\\"><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.searchText\\\" \\nmaxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" ng-keydown=\\\"$event.stopPropagation()\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"item in vm.items | filter: vm.items[0].name !== undefined ? {name: vm.searchText} : vm.searchText\\\" \\nng-value=\\\"item.id || item\\\"><div ng-if=\\\"vm.$transclude.isSlotFilled(\\'itemTemplate\\')\\\" ng-transclude=\\\"itemTemplate\\\" \\nng-init=\\\"item=item\\\"></div><div ng-if=\\\"!vm.$transclude.isSlotFilled(\\'itemTemplate\\')\\\">{{item.name || item}}</div>\\n</md-option></md-select></div></md-input-container><md-button class=\\\"no-margin md-icon-button\\\" \\nng-if=\\\"vm.clearable && vm.selectedItems.length\\\" ng-click=\\\"vm.clear()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon>\\n</md-button>\");\n$templateCache.put(\"app/main/components/screen-title/screen-title.html\",\"<div id=\\\"screen-title\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div class=\\\"header-title\\\">{{ $ctrl.headerTitle }}\\n</div><div class=\\\"header-subtitle\\\">{{ $ctrl.subtitle }}</div><span ng-show=\\\"$ctrl.status\\\" class=\\\"header-status\\\" \\nng-class=\\\"getStatusColor($ctrl.status)\\\">{{ getStatusLabel($ctrl.status) }}</span></div>\");\n$templateCache.put(\"app/main/components/tabs/tabs.html\",\"<md-nav-bar class=\\\"nd-tabs-bar no-border\\\" md-selected-nav-item=\\\"vm.selected\\\"><md-nav-item ng-repeat=\\\"tab in vm.tabs\\\" \\nmd-nav-click=\\\"vm.selectTab(tab)\\\" name=\\\"{{tab.name}}\\\"><span translate=\\\"{{tab.label}}\\\"></span></md-nav-item></md-nav-bar>\");\n$templateCache.put(\"app/main/components/top-bar/top-bar.html\",\"<div layout=\\\"row\\\" class=\\\"top-bar header mt-10\\\" layout-align=\\\"start center\\\" flex><div ng-transclude=\\\"leadingSlot\\\"></div>\\n<div class=\\\"h2\\\" ng-transclude=\\\"barTitleSlot\\\"></div><span flex></span><div ng-transclude=\\\"actionsSlot\\\" class=\\\"actions\\\">\\n</div></div>\");\n$templateCache.put(\"app/main/pages/hub/hub.html\",\"<div id=\\\"hub\\\" class=\\\"flex-scrollable\\\" layout=\\\"row\\\" ms-scroll><md-sidenav md-component-id=\\\"navigation\\\" ms-scroll \\nshow-lt-md=\\\"true\\\" flex-gt-md=\\\"25\\\" class=\\\"md-sidenav-left md-padding p-50\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-md\\')\\\"><div \\nlayout=\\\"column\\\" class=\\\"full-height\\\"><div class=\\\"p-4 pb-32\\\"><img width=\\\"200\\\" ng-src=\\\"{{vm.contact.company_logo}}\\\"><h2>\\n{{vm.contact.company_name}}</h2></div><ms-navigation class=\\\"scrollable\\\"></ms-navigation><span flex></span><div \\nclass=\\\"text-right mb-10\\\">Powered by</div><a layout=\\\"row\\\" layout-align=\\\"end center\\\" target=\\\"_blank\\\" \\nhref=\\\"{{vm.logoUrl}}\\\"><img style=\\\"height:25px\\\" class=\\\"mr-5\\\" src=\\\"/assets/stockagile/logos/stockagile-logo.e4ee42cd.svg\\\"> <img \\nstyle=\\\"height:20px\\\" src=\\\"/assets/stockagile/logos/stockagile-logo-text-black.0448f8b8.svg\\\"></a><div class=\\\"menu-banner\\\" \\nng-click=\\\"vm.goToStockagile()\\\"><div class=\\\"banner-title\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon class=\\\"mr-5\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon><span \\ntranslate=\\\"HUB.TRY_STOCKAGILE_BANNER_TITLE\\\" class=\\\"mr-5\\\"></span><md-icon md-font-icon=\\\"icon-arrow-right\\\" class=\\\"s16\\\" \\nflex></md-icon></div><div class=\\\"banner-body\\\"><span translate=\\\"HUB.TRY_STOCKAGILE_BANNER_BODY\\\"></span></div></div>\\n</div></md-sidenav><div layout=\\\"column\\\" class=\\\"full-width\\\"><md-button class=\\\"md-icon-button sidenav-toggle m-16\\\" \\nhide-gt-md hide-gt-lg ng-click=\\\"vm.toggleSidenav()\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon>\\n</md-button><md-content flex=\\\"100\\\" ui-view=\\\"subcontent\\\" class=\\\"transparent-bg p-0 full-width\\\" layout=\\\"column\\\">\\n</md-content></div></div>\");\n$templateCache.put(\"app/main/pages/maintenance/maintenance.html\",\"<div id=\\\"maintenance\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" ms-scroll><div id=\\\"maintenance-form-wrapper\\\" \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div id=\\\"maintenance-form\\\" class=\\\"md-whiteframe-8dp\\\"><div \\nclass=\\\"logo md-primary-bg\\\"><span>F</span></div><div class=\\\"title\\\" translate=\\\"MAINTENANCE.TITLE\\\">\\nClosed for scheduled maintenance!</div><div class=\\\"subtitle\\\" translate=\\\"MAINTENANCE.SUBTITLE\\\">\\nWe\\'re sorry for the inconvenience.<br>Please check back later.</div></div></div></div>\");\n$templateCache.put(\"app/main/pages/shopify/shopify.html\",\"<div id=\\\"shopify\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" ms-scroll><div id=\\\"shopify-form-wrapper\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-card><md-card-content><div id=\\\"shopify-form\\\" layout=\\\"column\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"logo\\\"><img src=\\\"assets/images/pages/shopify/shopify_connect_new.0107d8d1.png\\\"></div><div\\n ng-if=\\\"vm.type==\\'success\\'\\\"><div class=\\\"h2\\\" translate=\\\"SHOPIFY.TITLE\\\"></div><div class=\\\"subtitle\\\" \\ntranslate=\\\"SHOPIFY.SUBTITLE\\\"></div><md-button translate=\\\"LOGIN_V3.LOG_IN\\\" class=\\\"md-primary md-raised full-width m-0\\\" \\nui-sref=\\\"app.pages_auth_login-v3\\\"></md-button></div><div ng-if=\\\"vm.type==\\'new-site\\'\\\"><div class=\\\"h2\\\" \\ntranslate=\\\"SHOPIFY.TITLE_NEW_SITE\\\"></div><div class=\\\"subtitle\\\" translate=\\\"SHOPIFY.SUBTITLE_NEW_SITE\\\"></div><md-button \\nng-if=\\\"session.isAuthenticated()\\\" class=\\\"md-primary md-raised full-width m-0\\\" translate=\\\"SHOPIFY.EDIT_SITES\\\" \\nui-sref=\\\"app.ecommerce.sites\\\"></md-button><md-button ng-if=\\\"!session.isAuthenticated()\\\" \\nclass=\\\"md-primary md-raised full-width m-0\\\" translate=\\\"LOGIN_V3.LOG_IN\\\" ui-sref=\\\"app.pages_auth_login-v3\\\"></md-button>\\n</div></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/pages/trial-expired/trial-expired.html\",\"<div class=\\\"trial-expired\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" layout-fill><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" class=\\\"main-card\\\"><nd-trial-status></nd-trial-status></div></div>\");\n$templateCache.put(\"app/preview-panel/previews/product-variant-transfers/product-variant-transfers.html\",\"<div id=\\\"preview-panel-product-variant-transfers\\\" ng-controller=\\\"ProductVariantTransfersPreviewController as vm\\\" \\nclass=\\\"md-padding grey-50-bg\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" class=\\\"md-padding\\\" layout-align=\\\"start center\\\"><img \\nng-if=\\\"::vm.product.cover_thumbnail\\\" class=\\\"brad-3 thumbnail-40 mr-10\\\" src=\\\"{{::vm.product.cover_thumbnail}}\\\"> <span \\nng-if=\\\"::vm.product.cover_thumbnail\\\"></span><div layout=\\\"column\\\"><a \\nui-sref=\\\"app.inventory.products.product.overview({id:vm.product.id})\\\">{{vm.product.code}}</a> <span>{{vm.product.name}}\\n</span> <span class=\\\"secondary-text\\\">\\n{{vm.sizeById[vm.productVariant.size].name}} - {{vm.colorById[vm.productVariant.color].name}}</span></div></div>\\n<md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3 text-bold\\\">\\n{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.CREATE_NEW_TRANSFER_DRAFT\\' | translate}}</span></md-card-title-text></md-card-title>\\n<md-card-content layout-fill><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><input type=\\\"number\\\" \\nclass=\\\"nd-input mr-10 h-20 w-50 text-right\\\" ng-model=\\\"vm.newTOPV.amount\\\"> <span>uds.</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mt-5 mb-10\\\"><svg width=\\\"16\\\" height=\\\"50\\\" viewBox=\\\"0 0 16 50\\\" fill=\\\"none\\\" \\nxmlns=\\\"http://www.w3.org/2000/svg\\\"><circle cx=\\\"8\\\" cy=\\\"8\\\" r=\\\"6\\\" fill=\\\"#E0E0E0\\\"></circle><circle cx=\\\"8\\\" cy=\\\"42\\\" r=\\\"6\\\" \\nfill=\\\"#E0E0E0\\\"></circle><rect x=\\\"7\\\" y=\\\"12\\\" width=\\\"2\\\" height=\\\"30\\\" fill=\\\"#E0E0E0\\\"></rect></svg><div layout=\\\"column\\\" \\nclass=\\\"pl-10\\\" flex><span layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pb-5\\\"><span class=\\\"secondary-text\\\">\\n{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.FROM\\' | translate}}:</span><md-select ng-model=\\\"vm.newTOPV.source_warehouse\\\" \\nclass=\\\"m-0 ml-5\\\" flex><md-option ng-value=\\\"warehouse.id\\\" ng-repeat=\\\"warehouse in vm.warehouses\\\">{{warehouse.name}}\\n</md-option></md-select></span><span layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"secondary-text\\\">\\n{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.UNTIL\\' | translate}}:</span><md-select ng-model=\\\"vm.newTOPV.target_warehouse\\\" \\nclass=\\\"m-0 ml-5\\\" flex><md-option ng-value=\\\"warehouse.id\\\" ng-repeat=\\\"warehouse in vm.warehouses\\\">{{warehouse.name}}\\n</md-option></md-select></span></div></div><md-button class=\\\"md-primary md-raised m-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" \\nng-disabled=\\\"vm.creating || !vm.newTOPV.source_warehouse || !vm.newTOPV.target_warehouse || !vm.newTOPV.amount\\\" \\nng-click=\\\"vm.updateAmount(vm.newTOPV)\\\"><md-progress-circular ng-if=\\\"vm.creating\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\"></md-progress-circular><span>\\n{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.ADD_TRANSFER_DRAFT\\' | translate}}</span></md-button></div></md-card-content>\\n</md-card><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3 text-bold\\\">\\n{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.EDIT_TRANSFER_DRAFT\\' | translate}}</span></md-card-title-text></md-card-title>\\n<md-card-content layout-fill><md-progress-linear ng-if=\\\"vm.updating\\\" class=\\\"md-primary\\\" flex></md-progress-linear>\\n<md-divider ng-repeat-start=\\\"topv in vm.transferOrderProductVariants\\\" class=\\\"mb-20\\\"></md-divider><div layout=\\\"column\\\" \\nclass=\\\"mb-20\\\" ng-repeat-end><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><a \\nui-sref=\\\"app.inventory.transfers.transfer.products({id:topv.order_id})\\\">{{topv.order_autocode}}</a> <input \\ntype=\\\"number\\\" class=\\\"nd-input mh-10 h-20 w-50 text-right\\\" ng-model=\\\"topv.amount\\\" ng-blur=\\\"vm.updateAmount(topv)\\\"> \\n<span>uds.</span></div><div layout=\\\"row\\\" class=\\\"mt-5\\\"><svg width=\\\"16\\\" height=\\\"40\\\" viewBox=\\\"0 0 16 40\\\" fill=\\\"none\\\" \\nxmlns=\\\"http://www.w3.org/2000/svg\\\"><circle cx=\\\"8\\\" cy=\\\"8\\\" r=\\\"6\\\" fill=\\\"#E0E0E0\\\"></circle><circle cx=\\\"8\\\" cy=\\\"32\\\" r=\\\"6\\\" \\nfill=\\\"#E0E0E0\\\"></circle><rect x=\\\"7\\\" y=\\\"12\\\" width=\\\"2\\\" height=\\\"20\\\" fill=\\\"#E0E0E0\\\"></rect></svg><div layout=\\\"column\\\" \\nclass=\\\"pl-10\\\"><span class=\\\"pb-5\\\"><span class=\\\"secondary-text\\\">{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.FROM\\' | translate}}: \\n</span>{{topv.source_warehouse_name}}</span> <span><span class=\\\"secondary-text\\\">\\n{{\\'TRANSFER_ORDER_PRODUCT_VARIANT.UNTIL\\' | translate}}: </span>{{topv.target_warehouse_name}}</span></div></div></div>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/quick-panel/tabs/today/today-tab.html\",\"<md-list class=\\\"md-dense\\\"><md-list-item class=\\\"md-display-1\\\"><span class=\\\"h2\\\">{{vm.date | date:\\'fullDate\\'}}</span>\\n</md-list-item><md-subheader class=\\\"md-no-sticky\\\"><span translate=\\\"QUICKPANEL.YOUR_WORKDAY_ACTIVITY\\\">\\nYour workday activity</span></md-subheader></md-list><nd-working-activity-list></nd-working-activity-list>\");\n$templateCache.put(\"app/quick-panel/tabs/academy/academy.html\",\"<div id=\\\"quick-panel-academy\\\"><md-list class=\\\"date\\\"><md-list-item class=\\\"md-display-1\\\"><div class=\\\"h2\\\">\\n{{\\'QUICKPANEL.ACADEMY\\' | translate}} <a href=\\\"{{vm.ACADEMY_URL}}\\\" target=\\\"_blank\\\"><md-icon md-font-icon=\\\"icon-launch\\\" \\nclass=\\\"ml-5\\\"></md-icon></a></div></md-list-item></md-list><md-list ng-if=\\\"vm.postsByState[$state.current.name]\\\" \\nid=\\\"posts-by-state\\\"><md-subheader class=\\\"md-no-sticky\\\"><div layout=\\\"column\\\"><span \\ntranslate=\\\"QUICKPANEL.CURRENT_PAGE_POSTS\\\"></span></div></md-subheader><md-list-item \\nng-repeat=\\\"post in vm.postsByState[$state.current.name]\\\" href=\\\"{{post.url_es}}\\\" target=\\\"_blank\\\" \\nclass=\\\"md-primary md-primary-fg\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/help-circle-outline.b9d43905.svg\\\" class=\\\"academy-list-icon\\\"></md-icon>\\n<span flex>{{post.name_es}}</span></div></md-list-item></md-list><md-divider></md-divider><md-list class=\\\"md-dense\\\">\\n<md-subheader class=\\\"md-sticky\\\"><div layout=\\\"column\\\"><span translate=\\\"QUICKPANEL.ACADEMY_POSTS\\\" class=\\\"mb-24\\\">\\nAcademy posts</span> <input class=\\\"nd-input\\\" ng-model=\\\"vm.postsFilter\\\" flex maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'QUICKPANEL.SEARCH_POSTS\\' | translate}}\\\"></div></md-subheader><md-list-item \\nng-repeat=\\\"post in vm.posts | filter:vm.postsFilter\\\" href=\\\"{{post.url_es}}\\\" target=\\\"_blank\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/school-outline.4417d336.svg\\\" \\nclass=\\\"academy-list-icon\\\"></md-icon><span flex>{{post.name_es}}</span></div></md-list-item><md-list-item><a \\nhref=\\\"{{vm.ACADEMY_URL}}\\\" target=\\\"_blank\\\" class=\\\"text-center\\\" flex>{{\\'QUICKPANEL.GO_TO_THE_ACADEMY\\' | translate}}\\n<md-icon md-font-icon=\\\"icon-launch\\\" class=\\\"ml-5 s14 md-primary-fg\\\"></md-icon></a></md-list-item></md-list></div>\");\n$templateCache.put(\"app/toolbar/layouts/content-with-toolbar/toolbar.html\",\"<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"logo\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"logo-image\\\">F</span> <span class=\\\"logo-text\\\">FUSE</span></div>\\n<div class=\\\"toolbar-separator\\\"></div><div class=\\\"toolbar-separator\\\"></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-progress-circular id=\\\"toolbar-progress\\\" ng-if=\\\"$root.loadingProgress\\\" \\nclass=\\\"md-primary\\\" md-mode=\\\"indeterminate\\\" md-diameter=\\\"32\\\"></md-progress-circular><div class=\\\"toolbar-separator\\\">\\n</div><md-menu-bar id=\\\"user-menu\\\"><md-menu md-position-mode=\\\"left bottom\\\"><md-button class=\\\"user-button\\\" \\nng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"User settings\\\" translate translate-attr-aria-label=\\\"TOOLBAR.USER_SETTINGS\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"avatar-wrapper\\\"><img md-menu-align-target class=\\\"avatar\\\" \\nsrc=\\\"assets/images/avatars/profile.jpg\\\"><md-icon md-font-icon ng-class=\\\"vm.userStatus.icon\\\" \\nng-style=\\\"{\\'color\\': vm.userStatus.color }\\\" class=\\\"icon status s16\\\"></md-icon></div><span class=\\\"username\\\" hide-sm \\nng-if=\\\"session.user\\\">{{session.user.username}}</span><md-icon md-font-icon=\\\"icon-chevron-down\\\" class=\\\"icon s16\\\" \\nhide-sm></md-icon></div></md-button><md-menu-content width=\\\"3\\\"><md-menu-item ng-repeat=\\\"menuItem in vm.menuItems\\\" \\nclass=\\\"md-indent\\\" ui-sref=\\\"{{menuItem.state}}\\\"><md-icon md-font-icon=\\\"{{menuItem.icon}}\\\" class=\\\"icon\\\"></md-icon>\\n<md-button ui-sref=\\\"{{menuItem.state}}\\\" translate=\\\"{{menuItem.translation}}\\\">{{menuItem.title}}</md-button>\\n</md-menu-item><md-menu-divider></md-menu-divider><md-menu-item class=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-logout\\\" \\nclass=\\\"icon\\\"></md-icon><md-button ng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button></md-menu-item>\\n</md-menu-content></md-menu></md-menu-bar><div class=\\\"toolbar-separator\\\"></div><md-menu id=\\\"language-menu\\\" \\nmd-offset=\\\"0 72\\\" md-position-mode=\\\"target-right target\\\"><md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"Language\\\" md-menu-origin md-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img \\nclass=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{vm.selectedLanguage.flag}}.png\\\"> <span class=\\\"iso\\\">\\n{{vm.selectedLanguage.code}}</span></div></md-button><md-menu-content width=\\\"3\\\" id=\\\"language-menu-content\\\">\\n<md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button ng-click=\\\"vm.changeLanguage(lang)\\\" \\naria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\"><span layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<div class=\\\"toolbar-separator\\\"></div><md-button id=\\\"workactivity-toggle\\\" class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.toggleSidenav(\\'quick-panel\\')\\\" aria-label=\\\"Toggle quick panel\\\" translate \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_QUICK_PANEL\\\"><md-icon md-font-icon=\\\"icon-format-list-bulleted\\\" class=\\\"icon\\\">\\n</md-icon></md-button></div></div>\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/toolbar.html\",\"<div class=\\\"top-row\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<div class=\\\"navigation-toggle\\\" hide-gt-sm><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleHorizontalMobileMenu()\\\" \\naria-label=\\\"Toggle Mobile Navigation\\\"><md-icon md-font-icon=\\\"icon-menu\\\"></md-icon></md-button></div><div class=\\\"logo\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"logo-image\\\">F</span> <span class=\\\"logo-text\\\">FUSE</span></div>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-progress-circular id=\\\"toolbar-progress\\\" \\nng-if=\\\"$root.loadingProgress\\\" class=\\\"md-primary\\\" md-mode=\\\"indeterminate\\\" md-diameter=\\\"32\\\"></md-progress-circular>\\n<md-menu-bar id=\\\"user-menu\\\"><md-menu md-position-mode=\\\"left bottom\\\"><md-button class=\\\"user-button\\\" \\nng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"User settings\\\" translate translate-attr-aria-label=\\\"TOOLBAR.USER_SETTINGS\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"avatar-wrapper\\\"><img md-menu-align-target class=\\\"avatar\\\" \\nsrc=\\\"assets/images/avatars/profile.jpg\\\"><md-icon md-font-icon ng-class=\\\"vm.userStatus.icon\\\" \\nng-style=\\\"{\\'color\\': vm.userStatus.color }\\\" class=\\\"icon status s16\\\"></md-icon></div><span class=\\\"username\\\" hide-sm \\nng-if=\\\"session.user\\\">{{session.user.username}}</span><md-icon md-font-icon=\\\"icon-chevron-down\\\" class=\\\"icon s16\\\" \\nhide-sm></md-icon></div></md-button><md-menu-content width=\\\"3\\\"><md-menu-item ng-repeat=\\\"menuItem in vm.menuItems\\\" \\nclass=\\\"md-indent\\\" ui-sref=\\\"{{menuItem.state}}\\\"><md-icon md-font-icon=\\\"{{menuItem.icon}}\\\" class=\\\"icon\\\"></md-icon>\\n<md-button ui-sref=\\\"{{menuItem.state}}\\\" translate=\\\"{{menuItem.translation}}\\\">{{menuItem.title}}</md-button>\\n</md-menu-item><md-menu-divider></md-menu-divider><md-menu-item class=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-logout\\\" \\nclass=\\\"icon\\\"></md-icon><md-button ng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button></md-menu-item>\\n</md-menu-content></md-menu></md-menu-bar><md-menu id=\\\"language-menu\\\" md-offset=\\\"0 72\\\" \\nmd-position-mode=\\\"target-right target\\\"><md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"Language\\\" md-menu-origin md-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img \\nclass=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{vm.selectedLanguage.flag}}.png\\\"> <span class=\\\"iso\\\">\\n{{vm.selectedLanguage.code}}</span></div></md-button><md-menu-content width=\\\"3\\\" id=\\\"language-menu-content\\\">\\n<md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button ng-click=\\\"vm.changeLanguage(lang)\\\" \\naria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\"><span layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<md-button id=\\\"workactivity-toggle\\\" class=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleSidenav(\\'quick-panel\\')\\\" \\naria-label=\\\"Toggle quick panel\\\" translate translate-attr-aria-label=\\\"TOOLBAR.TOGGLE_QUICK_PANEL\\\"><md-icon \\nmd-font-icon=\\\"icon-format-list-bulleted\\\" class=\\\"icon\\\"></md-icon></md-button></div></div>\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation/toolbar.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button id=\\\"navigation-toggle\\\" class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.toggleSidenav(\\'navigation\\')\\\" hide-gt-sm aria-label=\\\"Toggle navigation\\\" translate \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_NAVIGATION\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon>\\n</md-button><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"version-banner\\\" ng-if=\\\"vm.showVersionBanner()\\\" hide-sm hide-xs><span hide-md class=\\\"random-icon\\\">\\n{{vm.randomEmoji}}</span> <span hide-md class=\\\"text-bold mr-5\\\">{{\\\"TOOLBAR.NEW_VERSION_AVAILABLE\\\" | translate}}</span> \\n<span hide-md>{{\\\"TOOLBAR.REFRESH_VERSION\\\" | translate: {v: vm.server_version} }}</span><md-button \\nng-click=\\\"vm.refresh()\\\">{{\\\"TOOLBAR.REFRESH\\\" | translate}}</md-button><md-button hide-md ng-click=\\\"vm.goToChangelog()\\\">\\n{{\\\"TOOLBAR.VIEW_CHANGELOG\\\" | translate}}</md-button></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"academy-banner\\\" ng-if=\\\"vm.rootScope.quickPanelAcademyPostAvailable && !vm.showVersionBanner()\\\" hide-sm hide-xs>\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/help-circle-outline.b9d43905.svg\\\" class=\\\"blue-fg\\\"></md-icon>\\n<span ng-if=\\\"vm.rootScope.quickPanelAcademyPostAvailable === 1\\\">{{\\\"TOOLBAR.THERE_ARE_1_ACADEMY\\\" | translate}} </span>\\n<span ng-if=\\\"vm.rootScope.quickPanelAcademyPostAvailable > 1\\\">\\n{{\\\"TOOLBAR.THERE_ARE_N_ACADEMY\\\" | translate: {number: vm.rootScope.quickPanelAcademyPostAvailable} }}</span><md-button \\nclass=\\\"md-primary\\\" ng-click=\\\"vm.openAcademy()\\\">{{\\'GENERAL.SHOW\\' | translate}}</md-button></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-progress-circular id=\\\"toolbar-progress\\\" ng-disabled=\\\"!$root.loadingProgress\\\" \\nclass=\\\"md-primary mr-5\\\" md-diameter=\\\"32\\\"></md-progress-circular><md-button class=\\\"md-icon-button\\\" \\nng-show=\\\"vm.rootScope.ndBarcodeListenerEnabled\\\"><md-tooltip>{{\\\"TOOLBAR.BARCODE_LISTENING\\\" | translate}}</md-tooltip>\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/barcode-scan.f172c7bd.svg\\\"></md-icon></md-button>\\n<nd-notifications></nd-notifications><nd-printer has-permission=\\\"app.sale\\\"></nd-printer><md-menu-bar id=\\\"user-menu\\\">\\n<md-menu md-position-mode=\\\"left bottom\\\"><md-button class=\\\"user-button\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"User settings\\\" translate translate-attr-aria-label=\\\"TOOLBAR.USER_SETTINGS\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><nd-user-picture user=\\\"session.user\\\"></nd-user-picture><span class=\\\"username\\\" hide \\nshow-gt-sm ng-if=\\\"session.user\\\">{{session.user.first_name}} {{session.user.last_name}}</span><md-icon \\nmd-font-icon=\\\"icon-chevron-down\\\" class=\\\"icon s16\\\" hide-xs></md-icon></div></md-button><md-menu-content width=\\\"3\\\">\\n<md-menu-item ng-repeat=\\\"menuItem in vm.menuItems\\\" class=\\\"md-indent\\\" ng-click=\\\"vm.goto(menuItem.state)\\\"><md-icon \\nmd-font-icon=\\\"{{menuItem.icon}}\\\" class=\\\"icon\\\"></md-icon><md-button translate=\\\"{{menuItem.translation}}\\\">\\n{{menuItem.title}}</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\"><md-icon \\nmd-font-icon=\\\"icon-flag-checkered-variant\\\" class=\\\"top-10\\\"></md-icon><md-menu><md-button class=\\\"language-button\\\" \\nng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"Language\\\"><span class=\\\"iso\\\">{{\\\"TOOLBAR.CHANGE_LANGUAGE\\\" | translate}}</span>\\n</md-button><md-menu-content width=\\\"3\\\"><md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button \\nng-click=\\\"vm.changeLanguage(lang)\\\" aria-label=\\\"{{lang.title}}\\\" translate \\nng-disabled=\\\"vm.$translate.use() == lang.code\\\" translate-attr-aria-label=\\\"{{lang.title}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag mr-5\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></div></md-button></md-menu-item></md-menu-content></md-menu>\\n</md-menu-item><md-menu-item class=\\\"md-indent\\\" ng-if=\\\"vm.companies.length\\\"><md-icon md-font-icon=\\\"icon-bank\\\" \\nclass=\\\"top-10\\\"></md-icon><md-menu><md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"Companies\\\">\\n<span class=\\\"iso\\\">{{\\\"TOOLBAR.COMPANIES\\\" | translate}}</span></md-button><md-menu-content width=\\\"3\\\" \\nstyle=\\\"max-height: calc(100vh - 15px); overflow: scroll\\\"><md-menu-item style=\\\"min-height: 50px\\\" class=\\\"md-padding\\\">\\n<input type=\\\"search\\\" class=\\\"md-text border-bottom\\\" ng-model=\\\"vm.companyName\\\" ng-model-options=\\\"{ debounce: 250 }\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-menu-item><md-menu-item \\nng-repeat=\\\"company in vm.getFilteredCompanies() | orderBy: \\'name\\'\\\" style=\\\"min-height: 40px\\\"><md-button \\nng-click=\\\"vm.setUserCompany(company.id)\\\" aria-label=\\\"{{company.name}}\\\" \\nng-disabled=\\\"company.id == session.user.company\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span flex>\\n{{company.name}}</span>{{company.id}}</div></md-button></md-menu-item></md-menu-content></md-menu></md-menu-item>\\n<md-menu-item class=\\\"md-indent\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/face-agent.165ad4ee.svg\\\" \\nclass=\\\"icon\\\"></md-icon><md-button ng-href=\\\"https://meet.ringover.io/stockagile/{{session.user.username}}\\\" \\ntarget=\\\"_blank\\\">{{\\'TOOLBAR.HELP\\' | translate}}</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\"><md-icon \\nmd-font-icon=\\\"icon-message-video\\\"></md-icon><md-button ui-sref=\\\"app.support.videos\\\">{{\\'START.TUTORIALS\\' | translate}}\\n</md-button></md-menu-item><md-menu-divider></md-menu-divider><md-menu-item ng-if=\\\"vm.users.length>1\\\" \\nng-repeat=\\\"user in session.users\\\"><md-button ng-click=\\\"vm.changeUser(user)\\\" \\nng-disabled=\\\"user.username == session.user.username\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture \\nuser=\\\"user.data\\\" class=\\\"mr-16\\\"></nd-user-picture>{{user.data.first_name}} {{user.data.last_name}}</div></md-button>\\n</md-menu-item><md-menu-item class=\\\"md-indent\\\" ui-sref=\\\"app.pages_auth_login-v3\\\"><md-icon \\nmd-font-icon=\\\"icon-account-plus\\\" class=\\\"icon\\\"></md-icon><md-button id=\\\"test-addacc-button\\\" \\ntranslate=\\\"TOOLBAR.ADD_ACCOUNT\\\">Add Account</md-button></md-menu-item><md-menu-divider></md-menu-divider><md-menu-item \\nclass=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-logout\\\" class=\\\"icon\\\"></md-icon><md-button id=\\\"test-logout-button\\\" \\nng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button></md-menu-item><md-menu-divider></md-menu-divider>\\n<md-menu-item><md-button ui-sref=\\\"app.support.changelogs\\\">Stockagile {{vm.version}}</md-button></md-menu-item>\\n</md-menu-content></md-menu></md-menu-bar><div class=\\\"toolbar-separator\\\"></div><md-button id=\\\"workactivity-toggle\\\" \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleSidenav(\\'quick-panel\\')\\\" aria-label=\\\"Toggle quick panel\\\" translate \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_QUICK_PANEL\\\"><md-icon md-font-icon=\\\"icon-format-list-bulleted\\\" class=\\\"icon\\\">\\n</md-icon><div class=\\\"status online\\\" ng-if=\\\"session.user.workday.status==2\\\"></div><div class=\\\"status away\\\" \\nng-if=\\\"session.user.workday.status==3\\\"></div><div class=\\\"status offline\\\" \\nng-if=\\\"!session.user.workday || session.user.workday.status==1 || session.user.workday.status==4\\\"></div></md-button>\\n</div></div>\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar/toolbar.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nid=\\\"navigation-toggle\\\" class=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleSidenav(\\'navigation\\')\\\" hide-gt-sm \\naria-label=\\\"Toggle navigation\\\" translate translate-attr-aria-label=\\\"TOOLBAR.TOGGLE_NAVIGATION\\\"><md-icon \\nmd-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"toolbar-separator\\\"></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-progress-circular id=\\\"toolbar-progress\\\" ng-if=\\\"$root.loadingProgress\\\" \\nclass=\\\"md-primary\\\" md-mode=\\\"indeterminate\\\" md-diameter=\\\"32\\\"></md-progress-circular><md-menu-bar id=\\\"user-menu\\\"><md-menu\\n md-position-mode=\\\"left bottom\\\"><md-button class=\\\"user-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"User settings\\\" \\ntranslate translate-attr-aria-label=\\\"TOOLBAR.USER_SETTINGS\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div \\nclass=\\\"avatar-wrapper\\\"><img md-menu-align-target class=\\\"avatar\\\" src=\\\"assets/images/avatars/profile.jpg\\\"><md-icon \\nmd-font-icon ng-class=\\\"vm.userStatus.icon\\\" ng-style=\\\"{\\'color\\': vm.userStatus.color }\\\" class=\\\"icon status s16\\\">\\n</md-icon></div><span class=\\\"username\\\" hide-sm ng-if=\\\"session.user\\\">{{session.user.username}}</span><md-icon \\nmd-font-icon=\\\"icon-chevron-down\\\" class=\\\"icon s16\\\" hide-sm></md-icon></div></md-button><md-menu-content width=\\\"3\\\">\\n<md-menu-item ng-repeat=\\\"menuItem in vm.menuItems\\\" class=\\\"md-indent\\\" ui-sref=\\\"{{menuItem.state}}\\\"><md-icon \\nmd-font-icon=\\\"{{menuItem.icon}}\\\" class=\\\"icon\\\"></md-icon><md-button ui-sref=\\\"{{menuItem.state}}\\\" \\ntranslate=\\\"{{menuItem.translation}}\\\">{{menuItem.title}}</md-button></md-menu-item><md-menu-divider></md-menu-divider>\\n<md-menu-item class=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-logout\\\" class=\\\"icon\\\"></md-icon><md-button \\nng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button></md-menu-item></md-menu-content></md-menu>\\n</md-menu-bar><div class=\\\"toolbar-separator\\\"></div><md-menu id=\\\"language-menu\\\" md-offset=\\\"0 72\\\" \\nmd-position-mode=\\\"target-right target\\\"><md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"Language\\\" md-menu-origin md-menu-align-target><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img \\nclass=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{vm.selectedLanguage.flag}}.png\\\"> <span class=\\\"iso\\\">\\n{{vm.selectedLanguage.code}}</span></div></md-button><md-menu-content width=\\\"3\\\" id=\\\"language-menu-content\\\">\\n<md-menu-item ng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button ng-click=\\\"vm.changeLanguage(lang)\\\" \\naria-label=\\\"{{lang.title}}\\\" translate translate-attr-aria-label=\\\"{{lang.title}}\\\"><span layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></span></md-button></md-menu-item></md-menu-content></md-menu>\\n<div class=\\\"toolbar-separator\\\"></div><md-button id=\\\"workactivity-toggle\\\" class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.toggleSidenav(\\'quick-panel\\')\\\" aria-label=\\\"Toggle quick panel\\\" translate \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_QUICK_PANEL\\\"><md-icon md-font-icon=\\\"icon-format-list-bulleted\\\" class=\\\"icon\\\">\\n</md-icon></md-button></div></div>\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"logo\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"logo-image\\\"><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo.e4ee42cd.svg\\\"></span><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"logo-text w-80\\\" hide-sm hide-xs><img src=\\\"/assets/stockagile/logos/stockagile-logo-text-black.0448f8b8.svg\\\"></div></div>\\n<md-button class=\\\"md-icon-button navigation-fold-toggle\\\" hide show-gt-sm aria-label=\\\"Toggle navigation fold\\\" translate \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_NAVIGATION_FOLD\\\" ng-click=\\\"vm.toggleMsNavigationFolded()\\\"><md-icon \\nclass=\\\"s18\\\" md-font-icon=\\\"icon-backburger\\\"></md-icon></md-button></div><md-button id=\\\"navigation-toggle\\\" \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleSidenav(\\'navigation\\')\\\" hide-gt-sm aria-label=\\\"Toggle navigation\\\" translate \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_NAVIGATION\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon>\\n</md-button><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"version-banner\\\" ng-if=\\\"vm.showVersionBanner()\\\" hide-sm hide-xs><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/bell-alert-outline.05c91eb9.svg\\\" class=\\\"mr-8 md-amber-500-fg\\\"></md-icon>\\n<div layout=\\\"column\\\"><span class=\\\"text-bold mr-5 nowrap\\\">{{\\\"TOOLBAR.NEW_VERSION_AVAILABLE\\\" | translate}}</span> <span \\nclass=\\\"text-truncate\\\">{{\\\"TOOLBAR.REFRESH_VERSION\\\" | translate: {v: vm.server_version} }}</span></div><md-button \\nhide-md ng-click=\\\"vm.refresh()\\\" nd-track-click=\\\"refresh version\\\">{{\\\"TOOLBAR.REFRESH\\\" | translate}}</md-button>\\n<md-button hide-md class=\\\"no-margin\\\" ng-click=\\\"vm.goToChangelog()\\\">{{\\\"TOOLBAR.VIEW_CHANGELOG\\\" | translate}}</md-button>\\n</div><div class=\\\"did-you-know signup-remainder animate-fade-in-out\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"!vm.showVersionBanner() && !vm.isSignupFinished()\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"mh-8\\\"></md-icon><span class=\\\"mr-8 text-truncate\\\">{{\\'SIGNUP.SIGNUP_NOT_FINISHED\\' | translate}}</span><md-button \\nclass=\\\"md-primary md-raised\\\" translate=\\\"SIGNUP.FINISH_SIGNUP\\\" ng-click=\\\"vm.finishSignup($event)\\\"></md-button></div>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-progress-circular hide-sm hide-xs id=\\\"toolbar-progress\\\" \\nng-disabled=\\\"!$root.loadingProgress\\\" class=\\\"md-primary mr-5\\\" md-diameter=\\\"32\\\"></md-progress-circular><md-button \\nhide-sm hide-xs class=\\\"full-height-md-button md-icon-button\\\" ng-if=\\\"vm.hasSession\\\" \\nno-ng-dblclick=\\\"vm.requestBarcode()\\\" ng-click=\\\"vm.toggleBarcodeServiceMode()\\\" \\nng-show=\\\"vm.rootScope.ndBarcodeListenerEnabled || BarcodeService.enabled\\\"><md-icon \\nng-if=\\\"!vm.rootScope.ndBarcodeListenerEnabledUdis || BarcodeService.isBarcodeMode()\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/barcode-scan.f172c7bd.svg\\\"></md-icon><md-tooltip \\nng-if=\\\"!vm.rootScope.ndBarcodeListenerEnabledUdis || BarcodeService.isBarcodeMode()\\\">\\n{{\\\"TOOLBAR.BARCODE_LISTENING\\\" | translate}}</md-tooltip><md-icon \\nng-if=\\\"vm.rootScope.ndBarcodeListenerEnabledUdis || BarcodeService.isUidMode()\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/qrcode-scan.60cfc495.svg\\\"></md-icon><md-tooltip \\nng-if=\\\"vm.rootScope.ndBarcodeListenerEnabledUdis || BarcodeService.isUidMode()\\\">\\n{{\\\"TOOLBAR.SERIES_BARCODE_LISTENING\\\" | translate}}</md-tooltip></md-button><md-button hide-sm hide-xs \\nclass=\\\"full-height-md-button md-icon-button academy-button\\\" ng-click=\\\"vm.openAcademy()\\\" nd-track-click=\\\"academy\\\">\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/school-outline.4417d336.svg\\\"></md-icon></md-button><div hide-sm \\nhide-xs class=\\\"academy-badge\\\" ng-if=\\\"!!vm.rootScope.quickPanelAcademyPostAvailable\\\"><span class=\\\"academy-badge-text\\\">\\n{{vm.rootScope.quickPanelAcademyPostAvailable}}</span></div><md-button class=\\\"md-icon-button full-height-md-button\\\" \\nng-click=\\\"vm.supportButtonClicked()\\\" nd-track-click=\\\"support toggled\\\"><md-tooltip>{{\\'QUICKPANEL.SUPPORT\\' | translate}}\\n</md-tooltip><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/comment-question-outline.e4e41139.svg\\\" \\nng-if=\\\"vm.hasSupportChat\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/support-chat-feature.db9f0d09.svg\\\" ng-if=\\\"!vm.hasSupportChat\\\"></md-icon>\\n</md-button><nd-notifications hide-sm hide-xs ng-if=\\\"vm.hasSession\\\"></nd-notifications><nd-printer \\nng-if=\\\"vm.hasSession\\\"></nd-printer><md-button class=\\\"md-icon-button\\\" ng-if=\\\"!vm.hasSession\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\"></md-icon></md-button><md-button \\nid=\\\"workactivity-toggle\\\" class=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleSidenav(\\'quick-panel\\')\\\" \\naria-label=\\\"Toggle quick panel\\\" nd-track-click=\\\"toggle quick panel\\\" \\ntranslate-attr-aria-label=\\\"TOOLBAR.TOGGLE_QUICK_PANEL\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/timer-outline.75e71c59.svg\\\" \\nng-if=\\\"!session.user.workday || session.user.workday.status === vm.WORKDAY_STATUSES.NOT_STARTED\\\"></md-icon><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/timer-play-outline.dfa05459.svg\\\" \\nng-if=\\\"session.user.workday.status === vm.WORKDAY_STATUSES.STARTED\\\" class=\\\"work-activity started\\\"></md-icon><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/timer-pause-outline.48fe5ddf.svg\\\" \\nng-if=\\\"session.user.workday.status === vm.WORKDAY_STATUSES.PAUSED\\\" class=\\\"work-activity paused\\\"></md-icon><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/timer-stop-outline.9b5fe527.svg\\\" \\nng-if=\\\"session.user.workday.status === vm.WORKDAY_STATUSES.FINISHED\\\" class=\\\"work-activity finished\\\"></md-icon>\\n</md-button><div class=\\\"toolbar-separator\\\"></div><md-menu-bar id=\\\"user-menu\\\" ng-if=\\\"vm.hasSession\\\"><md-menu \\nmd-position-mode=\\\"left bottom\\\"><md-button class=\\\"user-button\\\" ng-init=\\\"vm.userMdOpenMenu = $mdOpenMenu\\\" \\nng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"User settings\\\" translate translate-attr-aria-label=\\\"TOOLBAR.USER_SETTINGS\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><nd-user-picture user=\\\"session.user\\\"></nd-user-picture></div>\\n</md-button><md-menu-content width=\\\"3\\\"><md-menu-item ng-repeat=\\\"menuItem in vm.menuItems\\\" class=\\\"md-indent\\\" \\nng-class=\\\"menuItem.class\\\" ng-click=\\\"vm.goto(menuItem.state)\\\"><md-icon md-font-icon=\\\"{{menuItem.icon}}\\\" \\nmd-svg-src=\\\"{{menuItem.iconSvg}}\\\" class=\\\"icon\\\"></md-icon><md-button translate=\\\"{{menuItem.translation}}\\\" \\nng-disabled=\\\"menuItem.disabled\\\">{{menuItem.title}}</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\" \\nng-if=\\\"vm.companies.length && !vm.autocompleteCompanies\\\"><md-icon md-font-icon=\\\"icon-bank\\\" class=\\\"top-10\\\"></md-icon>\\n<md-menu><md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" ng-disabled=\\\"vm.trialExpired\\\" \\nng-init=\\\"vm.companiesMdOpenMenu = $mdOpenMenu\\\" aria-label=\\\"Companies\\\"><span class=\\\"iso\\\">\\n{{\\\"TOOLBAR.COMPANIES\\\" | translate}}</span></md-button><md-menu-content width=\\\"3\\\" \\nstyle=\\\"max-height: calc(100vh - 15px); overflow: scroll\\\"><md-menu-item style=\\\"min-height: 50px\\\" class=\\\"md-padding\\\">\\n<input type=\\\"search\\\" class=\\\"md-text border-bottom\\\" ng-model=\\\"vm.companyName\\\" ng-model-options=\\\"{ debounce: 250 }\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-menu-item><md-menu-item \\nng-repeat=\\\"company in vm.getFilteredCompanies() | orderBy: \\'name\\'\\\" style=\\\"min-height: 40px\\\"><md-button \\nng-click=\\\"vm.setUserCompany(company.id)\\\" aria-label=\\\"{{company.name}}\\\" \\nng-disabled=\\\"company.id == session.user.company\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span flex>\\n{{company.name}}</span></div></md-button></md-menu-item></md-menu-content></md-menu></md-menu-item><md-menu-item \\nclass=\\\"md-indent\\\" ng-if=\\\"vm.autocompleteCompanies\\\"><md-icon md-font-icon=\\\"icon-bank\\\" class=\\\"top-10\\\"></md-icon><md-menu>\\n<md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" ng-init=\\\"vm.companiesMdOpenMenu = $mdOpenMenu\\\" \\naria-label=\\\"Companies\\\"><span class=\\\"iso\\\">{{\\\"TOOLBAR.COMPANIES\\\" | translate}}</span></md-button><md-menu-content \\nstyle=\\\"max-height: calc(100vh - 15px); overflow: scroll\\\"><md-menu-item style=\\\"min-height: 50px\\\"><md-autocomplete \\nflex=\\\"100\\\" md-autofocus id=\\\"companies-autocomplete\\\" md-items=\\\"item in vm.companySearch()\\\" \\nmd-selected-item=\\\"vm.companyInstance\\\" md-search-text=\\\"vm.companyName\\\" \\nmd-selected-item-change=\\\"vm.setUserCompany(item.id)\\\" md-item-text=\\\"vm.displayNameFunction(item)\\\" md-min-length=\\\"3\\\" \\nplaceholder=\\\"{{vm.currentCompanyName}}\\\" md-delay=\\\"300\\\" md-no-cache=\\\"true\\\" ng-disabled=\\\"ngDisabled\\\"><md-item-template>\\n{{item.name}} <span class=\\\"secondary-text ml-5\\\">{{item.id}}</span></md-item-template><md-not-found>Not Found\\n</md-not-found></md-autocomplete></md-menu-item></md-menu-content></md-menu></md-menu-item><md-menu-item \\nclass=\\\"md-indent\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/school-outline.4417d336.svg\\\"></md-icon>\\n<md-button ng-href=\\\"{{vm.academyUrl}}\\\" target=\\\"_blank\\\">{{\\'TOOLBAR.ACADEMY\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item class=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-flag-checkered-variant\\\" class=\\\"top-10\\\"></md-icon><md-menu>\\n<md-button class=\\\"language-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"Language\\\"><span class=\\\"iso\\\">\\n{{\\\"TOOLBAR.CHANGE_LANGUAGE\\\" | translate}}</span></md-button><md-menu-content width=\\\"3\\\"><md-menu-item \\nng-repeat=\\\"(iso, lang) in vm.languages\\\"><md-button ng-click=\\\"vm.changeLanguage(lang)\\\" aria-label=\\\"{{lang.title}}\\\" \\ntranslate ng-disabled=\\\"vm.$translate.use() == lang.code\\\" translate-attr-aria-label=\\\"{{lang.title}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag mr-5\\\" ng-src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span \\ntranslate=\\\"{{lang.translation}}\\\">{{lang.title}}</span></div></md-button></md-menu-item></md-menu-content></md-menu>\\n</md-menu-item><md-menu-divider></md-menu-divider><md-menu-item ng-if=\\\"vm.users.length>1\\\" \\nng-repeat=\\\"user in session.users\\\"><md-button ng-click=\\\"vm.changeUser(user)\\\" \\nng-disabled=\\\"user.username == session.user.username\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture \\nuser=\\\"user.data\\\" class=\\\"mr-16\\\"></nd-user-picture><div ng-if=\\\"user.data.pin\\\" class=\\\"user-lock\\\"><div \\nclass=\\\"user-lock-circle\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-lock\\\" \\nclass=\\\"icon-user-pin s12\\\"></md-icon></div></div>{{user.data.first_name}} {{user.data.last_name}}</div></md-button>\\n</md-menu-item><md-menu-divider ng-if=\\\"vm.users.length > 1\\\"></md-menu-divider><md-menu-item class=\\\"md-indent\\\"><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/how_to_vote.5cc67c5c.svg\\\" class=\\\"icon\\\"></md-icon><md-button \\ntranslate=\\\"TOOLBAR.PROPOSE_IMPROVEMENTS\\\" ng-href=\\\"https://stockagile.featurebase.app/\\\" target=\\\"_blank\\\"></md-button>\\n</md-menu-item><md-menu-divider></md-menu-divider><md-menu-item class=\\\"md-indent\\\" ui-sref=\\\"app.pages_auth_login-v3\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/account-plus-outline.2702e30b.svg\\\" class=\\\"icon\\\">\\n</md-icon><md-button id=\\\"test-addacc-button\\\" translate=\\\"TOOLBAR.ADD_ACCOUNT\\\">Add Account</md-button></md-menu-item>\\n<md-menu-divider></md-menu-divider><md-menu-item class=\\\"md-indent\\\"><md-icon md-font-icon=\\\"icon-logout\\\" class=\\\"icon\\\">\\n</md-icon><md-button id=\\\"test-logout-button\\\" ng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button>\\n</md-menu-item><md-menu-divider></md-menu-divider><md-menu-item><md-button ui-sref=\\\"app.support.changelogs\\\" \\nng-disabled=\\\"vm.trialExpired\\\">Stockagile {{vm.version}}</md-button></md-menu-item></md-menu-content></md-menu>\\n</md-menu-bar></div></div>\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/horizontal.html\",\"<div class=\\\"navigation-toggle\\\" hide-gt-sm><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.toggleHorizontalMobileMenu()\\\" \\naria-label=\\\"Toggle Mobile Navigation\\\"><md-icon md-font-icon=\\\"icon-menu\\\"></md-icon></md-button></div><ul \\nclass=\\\"horizontal\\\"><li ng-repeat=\\\"node in vm.navigation\\\" ms-navigation-horizontal-node=\\\"node\\\" \\nng-class=\\\"{\\'has-children\\': vm.hasChildren}\\\" ng-include=\\\"\\'navigation-horizontal-nested.html\\'\\\"></li></ul><script \\ntype=\\\"text/ng-template\\\" id=\\\"navigation-horizontal-nested.html\\\">\\n<div ms-navigation-horizontal-item layout=\\\"row\\\" ng-if=\\\"!vm.isHidden()\\\" has-permission=\\\"{{node.permission}}\\\">\\n        <div class=\\\"ms-navigation-horizontal-button\\\" ng-if=\\\"!node.uisref && node.title\\\"\\n             ng-class=\\\"{\\'active md-accent-bg md-accent-fg\\': vm.isActive}\\\">\\n            <i class=\\\"icon s18 {{node.icon}}\\\" ng-if=\\\"node.icon\\\"></i>\\n            <md-icon class=\\\"icon w-16\\\" md-svg-src=\\\"{{node.svgIcon}}\\\" ng-if=\\\"node.svgIcon\\\"></md-icon>\\n            <span class=\\\"title\\\" translate=\\\"{{node.translate}}\\\" flex>{{node.title}}</span>\\n            <span class=\\\"badge white-fg\\\" style=\\\"background: {{node.badge.color}}\\\" ng-if=\\\"node.badge\\\">{{node.badge.content}}</span>\\n            <i class=\\\"icon-chevron-right s18 arrow\\\" ng-if=\\\"vm.hasChildren\\\"></i>\\n        </div>\\n\\n        <a class=\\\"ms-navigation-horizontal-button\\\" ui-sref=\\\"{{node.uisref}}\\\" ui-sref-active=\\\"active md-accent-bg\\\"\\n           ng-class=\\\"{\\'active md-accent-bg md-accent-fg\\': vm.isActive}\\\"\\n           ng-if=\\\"node.uisref && node.title\\\">\\n            <i class=\\\"icon s18 {{node.icon}}\\\" ng-if=\\\"node.icon\\\"></i>\\n          <md-icon class=\\\"icon w-16\\\" md-svg-src=\\\"{{node.svgIcon}}\\\" ng-if=\\\"node.svgIcon\\\"></md-icon>\\n            <span class=\\\"title\\\" translate=\\\"{{node.translate}}\\\" flex>{{node.title}}</span>\\n            <span class=\\\"badge white-fg\\\" style=\\\"background: {{node.badge.color}}\\\" ng-if=\\\"node.badge\\\">{{node.badge.content}}</span>\\n            <i class=\\\"icon-chevron-right s18 arrow\\\" ng-if=\\\"vm.hasChildren\\\"></i>\\n        </a>\\n\\n    </div>\\n\\n    <ul ng-if=\\\"vm.hasChildren && !vm.isHidden()\\\">\\n        <li ng-repeat=\\\"node in node.children\\\" ms-navigation-horizontal-node=\\\"node\\\"\\n            ng-class=\\\"{\\'has-children\\': vm.hasChildren}\\\"\\n            ng-include=\\\"\\'navigation-horizontal-nested.html\\'\\\"></li>\\n    </ul>\\n</script>\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/vertical.html\",\"<ul><li ng-repeat=\\\"node in vm.navigation\\\" ms-navigation-node=\\\"node\\\" \\nng-class=\\\"{\\'collapsed\\': vm.collapsed, \\'has-children\\': vm.hasChildren}\\\" ng-include=\\\"\\'navigation-nested.html\\'\\\"></li></ul>\\n<script type=\\\"text/ng-template\\\" id=\\\"navigation-nested.html\\\">\\n<div ms-navigation-item\\n       layout=\\\"row\\\"\\n       ng-if=\\\"!vm.isHidden()\\\"\\n       ng-class=\\\"node.class\\\"\\n       has-permission-and-feature=\\\"{{node.permission}}\\\">\\n\\n    <div class=\\\"ms-navigation-button\\\"\\n         ng-if=\\\"!node.uisref && node.title\\\">\\n      <md-icon md-font-icon=\\\"{{node.icon}}\\\"\\n               class=\\\"s18 mr-8\\\"\\n               ng-if=\\\"node.icon\\\"></md-icon>\\n      <md-icon class=\\\"s18 mr-8\\\"\\n               md-font-icon\\n               md-svg-src=\\\"{{node.svgIcon}}\\\"\\n               ng-if=\\\"node.svgIcon\\\"></md-icon>\\n      <span class=\\\"title\\\"\\n            translate=\\\"{{node.translate}}\\\"\\n            flex>{{node.title}}</span>\\n      <span class=\\\"badge white-fg\\\"\\n            ng-style=\\\"{\\'background\\': node.badge.color}\\\"\\n            ng-if=\\\"node.badge\\\">{{node.badge.content}}</span>\\n      <i class=\\\"icon-chevron-right s16 arrow\\\"\\n         ng-if=\\\"vm.collapsable && vm.hasChildren\\\"></i>\\n      <md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"\\n               ng-if=\\\"!vm.hasChildren\\\"\\n               class=\\\"w-16 ml-8 has-permission-and-feature-icon\\\"></md-icon>\\n    </div>\\n\\n    <a class=\\\"ms-navigation-button\\\"\\n       flex\\n       layout=\\\"row\\\"\\n       layout-align=\\\"start center\\\"\\n       ui-sref=\\\"{{node.uisref}}\\\"\\n       ui-sref-active=\\\"active\\\"\\n       ng-if=\\\"node.uisref && node.title\\\"\\n       ng-disabled=\\\"node.disabled\\\"\\n       has-permission-and-feature=\\\"{{node.permission}}\\\">\\n      <div flex layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n        <md-icon md-font-icon=\\\"{{node.icon}}\\\"\\n                 class=\\\"s18 mr-8\\\"\\n                 ng-if=\\\"node.icon\\\"></md-icon>\\n        <md-icon class=\\\"s18 mr-8\\\"\\n                 md-font-icon\\n                 md-svg-src=\\\"{{node.svgIcon}}\\\"\\n                 ng-if=\\\"node.svgIcon\\\"></md-icon>\\n        <span class=\\\"title\\\"\\n              translate=\\\"{{node.translate}}\\\"\\n              flex>{{node.title}}</span>\\n        <span class=\\\"badge\\\"\\n              ng-class=\\\"[node.badge.fontClass || \\'white-fg\\', node.badge.backgroundClass || \\'red-bg\\']\\\"\\n              ng-style=\\\"{\\'background\\': node.badge.color}\\\"\\n              ng-if=\\\"node.badge\\\">{{node.badge.content | translate}}</span>\\n        <i class=\\\"icon-chevron-right s16 arrow\\\"\\n           ng-if=\\\"vm.collapsable && vm.hasChildren\\\"></i>\\n        <md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"\\n                 md-font-icon\\n                 class=\\\"s16 ml-8 has-permission-and-feature-icon\\\"></md-icon>\\n\\n        <nd-new-feature-badge id=\\\"{{node.newFeatureBadge}}\\\"\\n                              class=\\\"new-feature-badge\\\"\\n                              ng-if=\\\"node.newFeatureBadge\\\"\\n                              is-beta=\\\"node.newFeatureBadgeBeta\\\"\\n                              show-icon=\\\"true\\\"\\n                              remove-margin=\\\"true\\\"></nd-new-feature-badge>\\n      </div>\\n    </a>\\n\\n  </div>\\n\\n  <ul ng-if=\\\"vm.hasChildren && !vm.isHidden()\\\">\\n    <li ng-repeat=\\\"node in node.children\\\"\\n        ms-navigation-node=\\\"node\\\"\\n        ng-class=\\\"{\\'collapsed\\': vm.collapsed, \\'has-children\\': vm.hasChildren}\\\"\\n        ng-include=\\\"\\'navigation-nested.html\\'\\\"></li>\\n  </ul>\\n</script>\");\n$templateCache.put(\"app/directives/nd-setup-card/dialogs/nd-setup-dialog/nd-setup-dialog.html\",\"<md-dialog id=\\\"setup-dialog\\\" class=\\\"w-600\\\"><md-dialog-content class=\\\"p-20\\\"><h2 class=\\\"ng-binding\\\" \\ntranslate=\\\"SETUP.BEFORE_SETUP_TITLE\\\"></h2><h4 class=\\\"h4 secondary-text mt-0\\\" ng-if=\\\"showList && !fetching\\\" \\ntranslate=\\\"SETUP.SELECT_DATA_TO_DELETE\\\"></h4><md-radio-group ng-if=\\\"!showList  && !fetching\\\" ng-model=\\\"action\\\"><button \\nlayout=\\\"row\\\" class=\\\"container p-16 mb-10\\\" ng-class=\\\"getOptionDynClass(DELETE_DEMO_DATA)\\\" \\nng-click=\\\"onOptionChanged(DELETE_DEMO_DATA)\\\"><md-radio-button class=\\\"md-primary ml-10 mr-16\\\" \\nng-value=\\\"DELETE_DEMO_DATA\\\" ng-click=\\\"onOptionChanged(DELETE_DEMO_DATA)\\\"></md-radio-button><div layout=\\\"column\\\" \\nclass=\\\"left-text\\\"><span class=\\\"h4 mt-0 mb-8 black-fg\\\" translate=\\\"SETUP.DELETE_DEMO_DATA\\\"></span> <span \\nclass=\\\"h5 secondary-text mt-0\\\" translate=\\\"SETUP.DELETE_DEMO_DATA_INFO\\\"></span></div></button> <button layout=\\\"row\\\" \\nclass=\\\"container p-16 mb-16\\\" ng-class=\\\"getOptionDynClass(KEEP_DEMO_DATA)\\\" ng-click=\\\"onOptionChanged(KEEP_DEMO_DATA)\\\">\\n<md-radio-button class=\\\"md-primary ml-10 mr-16\\\" ng-value=\\\"KEEP_DEMO_DATA\\\" ng-click=\\\"onOptionChanged(KEEP_DEMO_DATA)\\\">\\n</md-radio-button><div layout=\\\"column\\\" class=\\\"left-text\\\"><span class=\\\"h4 mt-0 mb-8 black-fg\\\" \\ntranslate=\\\"SETUP.KEEP_DEMO_DATA\\\"></span> <span class=\\\"h5 secondary-text mt-0\\\" translate=\\\"SETUP.KEEP_DEMO_DATA_INFO\\\">\\n</span></div></button></md-radio-group><div layout=\\\"column\\\" class=\\\"md-padding\\\" ng-show=\\\"showList && !fetching\\\">\\n<md-checkbox ng-model=\\\"selectAll\\\" ng-change=\\\"onSelectAllChange()\\\">{{\\\"PRODUCT.SELECT_ALL\\\" | translate}}</md-checkbox>\\n<ul><li ng-repeat=\\\"option in options\\\"><md-checkbox aria-label=\\\"Item\\\" ng-model=\\\"option.status\\\">{{option.value}}\\n</md-checkbox></li></ul></div><div layout=\\\"column\\\" layout-align=\\\"center center\\\" ng-if=\\\"fetching\\\" class=\\\"mt-40 mb-40\\\">\\n<md-progress-circular md-diameter=\\\"40px\\\" class=\\\"mh-8 md-primary\\\"></md-progress-circular><p \\nclass=\\\"h4 secondary-text mt-20 w-500\\\" translate=\\\"SETUP.DELETING_DATA\\\"></p></div></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\" ng-if=\\\"!fetching\\\"><md-checkbox class=\\\"mt-20 mb-20\\\" \\nng-show=\\\"action == DELETE_DEMO_DATA && !fetching && showList\\\" ng-model=\\\"confirmation\\\" \\nng-change=\\\"applyChanges(confirmation)\\\" flex>{{\\\"SETUP.DELETE_DEMO_DATA_CONFIRMATION\\\" | translate}}</md-checkbox>\\n<md-button ng-click=\\\"cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-click=\\\"accept()\\\" \\nng-disabled=\\\"disableAcceptButton()\\\" class=\\\"md-primary md-raised\\\" translate=\\\"{{getOkButtonTranslationKey()}}\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/directives/printer/dialogs/ip-epson-printer/ip-epson-printer-dialog.html\",\"<md-dialog aria-label=\\\"Ip Epson Printer Config\\\" style=\\\"max-width: 600px\\\"><form name=\\\"vm.ipEpsonForm\\\" novalidate>\\n<md-dialog-content><div ng-if=\\\"!vm.success\\\"><div><h2 class=\\\"mb-16 mt-0\\\" \\ntranslate=\\\"PRINTER_DIRECTIVE.CONNECT_EPSON_PRINTER\\\"></h2><p ng-if=\\\"!vm.connecting\\\" \\ntranslate=\\\"PRINTER_DIRECTIVE.CONNECT_EPSON_PRINTER_MSG\\\"></p><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><img \\nflex=\\\"nogrow\\\" ng-if=\\\"!vm.connecting\\\" src=\\\"assets/images/IP-ill.941bbfb4.svg\\\" alt=\\\"Prestashop composition\\\"></div><div \\nng-if=\\\"!vm.connecting\\\" layout=\\\"column\\\" class=\\\"mt-16\\\"><md-input-container class=\\\"full-width mb-0\\\"><label \\ntranslate=\\\"PRINTER_DIRECTIVE.EPSON_PRINTER_IP_MSG\\\"></label><input type=\\\"text\\\" ng-model=\\\"vm.register.printer_ip\\\" \\nname=\\\"printerIp\\\" required><div ng-messages=\\\"vm.ipEpsonForm.printerIp.$error\\\" role=\\\"alert\\\"><div ng-if=\\\"!vm.isValidIp()\\\" \\ntranslate=\\\"PRINTER_DIRECTIVE.INCORRECT_IP\\\"></div></div></md-input-container><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-input-container class=\\\"full-width no-margin no-errors-spacer\\\"><label \\ntranslate=\\\"PRINTER_DIRECTIVE.PRINTER_NAME\\\"></label><input type=\\\"text\\\" ng-model=\\\"vm.register.printer_device_id\\\">\\n</md-input-container><md-checkbox class=\\\"full-width\\\" ng-model=\\\"vm.register.use_ssl\\\" name=\\\"useSSL\\\"><span \\ntranslate=\\\"PRINTER_DIRECTIVE.USE_SSL\\\"></span></md-checkbox></div></div></div></div><div layout=\\\"column\\\" \\nng-if=\\\"vm.connecting\\\"><p translate=\\\"PRINTER_DIRECTIVE.CONNECTING_MSG\\\"></p><md-progress-linear class=\\\"md-primary\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-linear></div><div class=\\\"did-you-know red full-width\\\" ng-show=\\\"vm.error\\\"><div \\nlayout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert-octagon\\\" class=\\\"red-fg\\\"></md-icon><div layout=\\\"column\\\" flex><span \\nclass=\\\"did-you-know-message\\\" translate=\\\"PRINTER_DIRECTIVE.CONNECTION_IP_FAILED_MSG\\\"></span></div></div></div><h2 \\nclass=\\\"mb-16 mt-0\\\" ng-if=\\\"vm.success\\\" translate=\\\"PRINTER_DIRECTIVE.CONNECT_EPSON_PRINTER_SUCCESS\\\"></h2><div \\nclass=\\\"did-you-know green full-width\\\" ng-if=\\\"vm.success\\\"><div layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-check-circle\\\" \\nclass=\\\"green-fg\\\"></md-icon><div layout=\\\"column\\\" flex><span class=\\\"did-you-know-message\\\" \\ntranslate=\\\"PRINTER_DIRECTIVE.CONNECTION_IP_SUCCESS_MSG\\\"></span></div></div></div></md-dialog-content><md-dialog-actions\\n layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.connecting\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">\\nCancel</md-button><md-button ng-click=\\\"vm.save()\\\" ng-if=\\\"!vm.success\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.register.printer_ip || vm.connecting\\\" translate=\\\"PRINTER_DIRECTIVE.SAVE_AND_CONNECT\\\">Save</md-button>\\n<md-button ng-click=\\\"vm.printVerificationTicket()\\\" class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.success\\\" \\ntranslate=\\\"PRINTER_DIRECTIVE.PRINT_VERIFICATION_TICKET\\\">Print verification ticket</md-button></md-dialog-actions>\\n</form></md-dialog>\");\n$templateCache.put(\"app/directives/printer/dialogs/select-default-printer/select-default-printer-dialog.html\",\"<md-dialog aria-label=\\\"Select Register\\\"><form ng-cloak><md-dialog-content><h2 class=\\\"mb-30\\\" \\ntranslate=\\\"SELECT_DEFAULT_PRINTER.SELECT_PRINTER\\\"></h2><p translate=\\\"SELECT_DEFAULT_PRINTER.SELECT_PRINTER_MSG\\\"></p>\\n<md-input-container><md-icon class=\\\"icon icon-printer font-size-24\\\"></md-icon><label \\ntranslate=\\\"SELECT_DEFAULT_PRINTER.PRINTER\\\">Printer</label><md-select ng-model=\\\"vm.printer\\\"><md-option \\nng-repeat=\\\"printer in vm.listPrinters\\\" ng-value=\\\"printer\\\">{{printer}}</md-option></md-select></md-input-container>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.select()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.printer\\\" translate=\\\"SELECT_DEFAULT_PRINTER.SELECT\\\">Select</md-button></md-dialog-actions></form>\\n</md-dialog>\");\n$templateCache.put(\"app/directives/printer/dialogs/select-default-register/select-default-register-dialog.html\",\"<md-dialog aria-label=\\\"Select Register\\\"><form ng-cloak><md-dialog-content><h2 class=\\\"mb-30\\\" \\ntranslate=\\\"SELECT_DEFAULT_REGISTER.SELECT_REGISTER\\\"></h2><p translate=\\\"SELECT_DEFAULT_REGISTER.SELECT_REGISTER_MSG\\\">\\n</p><md-input-container><md-icon class=\\\"icon icon-monitor name font-size-24\\\"></md-icon><label \\ntranslate=\\\"SELECT_DEFAULT_REGISTER.REGISTER\\\">Register</label><md-select ng-model=\\\"vm.register\\\"><md-option \\nng-repeat=\\\"register in vm.registers\\\" ng-value=\\\"register\\\">{{register.code}} (<span class=\\\"secondary-text\\\">\\n{{register.warehouse.name}}</span>)</md-option></md-select></md-input-container></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.select()\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!vm.register\\\" \\ntranslate=\\\"SELECT_DEFAULT_REGISTER.SELECT\\\">Select</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/components/filter-selector/filter/filter.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div ng-transclude></div><md-button class=\\\"md-icon-button no-margin\\\" \\nstyle=\\\"margin-right: 8px !important\\\" ng-click=\\\"vm.clear()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button>\\n</div>\");\n$templateCache.put(\"app/main/pages/auth/forgot-password/forgot-password.html\",\"<div id=\\\"forgot-password\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" ms-scroll><md-card \\nid=\\\"forgot-password-card\\\"><md-card-content layoout=\\\"column\\\" layout-align=\\\"center center\\\"><div id=\\\"logo-row-forgot\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"></div><div \\nid=\\\"title-row-forgot\\\" class=\\\"mb-12\\\" translate=\\\"FORGOT_PASSWORD.TITLE\\\"></div><form name=\\\"forgotPasswordForm\\\" novalidate>\\n<md-input-container class=\\\"md-block\\\" md-no-float><label translate=\\\"FORGOT_PASSWORD.EMAIL_ADDRESS\\\"></label><input \\ntype=\\\"text\\\" name=\\\"email\\\" placeholder=\\\"\\\" ng-model=\\\"vm.email\\\" ng-change=\\\"vm.typingEmail()\\\" required><div \\nng-messages=\\\"forgotPasswordForm.email.$error\\\" ng-show=\\\"forgotPasswordForm.email.$touched\\\" role=\\\"alert\\\" \\nmultiple=\\\"multiple\\\"><div ng-message=\\\"required\\\"><span translate=\\\"FORGOT_PASSWORD.ERRORS.EMAIL_REQUIRED\\\">\\nEmail field is required</span></div><div ng-message=\\\"invalid\\\"><span \\ntranslate=\\\"FORGOT_PASSWORD.ERRORS.EMAIL_MUST_VALID\\\">Email must be a valid e-mail address</span></div></div>\\n</md-input-container><div layout=\\\"row\\\"><md-button type=\\\"submit\\\" class=\\\"md-raised md-primary full-width\\\" \\naria-label=\\\"Recover password\\\" hotkey=\\\"{enter: vm.resetPasswordRequest}\\\" ng-click=\\\"vm.resetPasswordRequest()\\\" \\nng-disabled=\\\"!vm.isValidEmail()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.recovering\\\"></md-progress-circular><span translate=\\\"FORGOT_PASSWORD.SEND_RESET_LINK\\\" \\ntranslate-attr-aria-label=\\\"FORGOT_PASSWORD.SEND_RESET_LINK\\\" ng-if=\\\"!vm.recovering\\\">Recover password</span></div>\\n</md-button></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><a ui-sref=\\\"app.pages_auth_login-v3\\\" \\nclass=\\\"md-button cursor-pointer\\\">{{\\'FORGOT_PASSWORD.GO_BACK\\' | translate }}</a></div></form></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/pages/auth/lock/lock.html\",\"<div id=\\\"lock\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" ms-scroll><div id=\\\"lock-form-wrapper\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div id=\\\"lock-form\\\" class=\\\"md-whiteframe-8dp\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-sm=\\\"column\\\" layout-align-sm=\\\"center center\\\"><div class=\\\"avatar-container\\\"><img \\nclass=\\\"avatar big\\\" src=\\\"assets/images/avatars/katherine.jpg\\\"><md-icon md-font-icon=\\\"icon-lock\\\" \\nclass=\\\"md-warn-fg s36 md-hue-2\\\"></md-icon></div><div flex layout=\\\"column\\\" layout-align=\\\"start\\\" \\nlayout-align-sm=\\\"center center\\\"><div class=\\\"title\\\" translate=\\\"LOCK.TITLE\\\">Your session is locked</div><div \\nclass=\\\"subtitle\\\" translate=\\\"LOCK.SUBTITLE\\\">Due to inactivity, your session is locked. Enter your password to continue.\\n</div></div></div><form name=\\\"lockForm\\\" novalidate><md-input-container class=\\\"md-block\\\" md-no-float><input \\nng-model=\\\"vm.form.username\\\" placeholder=\\\"Username\\\" translate translate-attr-placeholder=\\\"LOCK.USERNAME\\\" \\ndisabled=\\\"disabled\\\"></md-input-container><md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" \\nname=\\\"password\\\" ng-model=\\\"vm.form.password\\\" placeholder=\\\"Password\\\" translate \\ntranslate-attr-placeholder=\\\"LOCK.PASSWORD\\\" required><div ng-messages=\\\"lockForm.password.$error\\\" \\nng-show=\\\"lockForm.password.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"LOCK.ERRORS.PASSWORD_REQUIRED\\\">Password field is required</span></div></div></md-input-container><md-button \\ntype=\\\"submit\\\" class=\\\"md-raised md-primary\\\" aria-label=\\\"UNLOCK\\\" ng-disabled=\\\"lockForm.$invalid || lockForm.$pristine\\\" \\ntranslate=\\\"LOCK.UNLOCK\\\" translate-attr-aria-label=\\\"LOCK.UNLOCK\\\">UNLOCK</md-button></form><div class=\\\"message\\\"><a \\nui-sref=\\\"app.pages_auth_login\\\" class=\\\"md-primary-color\\\"><span translate=\\\"LOCK.ARE_YOU_NOT\\\">Are you not</span><span>\\n Jane Doe?</span></a></div></div></div></div>\");\n$templateCache.put(\"app/main/pages/auth/login/login.html\",\"<div id=\\\"login\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" ms-scroll><div id=\\\"login-form-wrapper\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div id=\\\"login-form\\\" class=\\\"md-whiteframe-8dp\\\"><div class=\\\"logo md-primary-bg\\\"><span>F\\n</span></div><div class=\\\"title\\\" translate=\\\"LOGIN.TITLE\\\">Log in to your account</div><form name=\\\"loginForm\\\" novalidate>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"email\\\" name=\\\"email\\\" ng-model=\\\"vm.form.email\\\" \\nplaceholder=\\\"Email\\\" translate translate-attr-placeholder=\\\"LOGIN.EMAIL\\\" ng-pattern=\\\"/^.+@.+\\\\..+$/\\\" required><div \\nng-messages=\\\"loginForm.email.$error\\\" ng-show=\\\"loginForm.email.$touched\\\" role=\\\"alert\\\" multiple=\\\"multiple\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"LOGIN.ERRORS.EMAIL_REQUIRED\\\">Email field is required</span></div><div \\nng-message=\\\"pattern\\\"><span translate=\\\"LOGIN.ERRORS.EMAIL_MUST_VALID\\\">Email must be a valid e-mail address</span></div>\\n</div></md-input-container><md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" name=\\\"password\\\" \\nng-model=\\\"vm.form.password\\\" placeholder=\\\"Password\\\" translate translate-attr-placeholder=\\\"LOGIN.PASSWORD\\\" required><div \\nng-messages=\\\"loginForm.password.$error\\\" ng-show=\\\"loginForm.password.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"LOGIN.ERRORS.PASSWORD_REQUIRED\\\">Password field is required</span></div></div></md-input-container><div\\n class=\\\"remember-forgot-password\\\" layout=\\\"row\\\" layout-xs=\\\"column\\\" layout-align=\\\"space-between center\\\"><md-checkbox \\nclass=\\\"remember-me\\\" ng-model=\\\"data.cb1\\\" aria-label=\\\"Remember Me\\\"><span translate=\\\"LOGIN.REMEMBER_ME\\\">Remember Me</span>\\n</md-checkbox><a ui-sref=\\\"app.pages_auth_forgot-password\\\" class=\\\"forgot-password md-primary-color\\\" \\ntranslate=\\\"LOGIN.FORGOT_PASSWORD\\\">Forgot Password?</a></div><md-button type=\\\"submit\\\" class=\\\"md-raised md-primary\\\" \\naria-label=\\\"LOG IN\\\" ng-disabled=\\\"loginForm.$invalid || loginForm.$pristine\\\" translate=\\\"LOGIN.LOG_IN\\\" \\ntranslate-attr-aria-label=\\\"LOGIN.LOG_IN\\\">LOG IN</md-button></form><div class=\\\"separator\\\"><span class=\\\"text\\\" \\ntranslate=\\\"LOGIN.OR\\\">OR</span></div><md-button class=\\\"md-raised google\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<span><md-icon md-font-icon=\\\"icon-google-plus\\\" class=\\\"s16\\\"></md-icon><span translate=\\\"LOGIN.WITH_GOOGLE\\\">\\nLog in with Google</span></span></div></md-button><md-button class=\\\"md-raised facebook\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span><md-icon md-font-icon=\\\"icon-facebook\\\" class=\\\"s16\\\"></md-icon><span \\ntranslate=\\\"LOGIN.WITH_FACEBOOK\\\">Log in with Facebook</span></span></div></md-button><div class=\\\"register\\\" layout=\\\"row\\\" \\nlayout-sm=\\\"column\\\" layout-align=\\\"center center\\\"><span class=\\\"text\\\" translate=\\\"LOGIN.DONT_HAVE_ACCOUNT\\\">\\nDon\\'t have an account?</span> <a class=\\\"link\\\" ui-sref=\\\"app.pages_auth_register\\\" translate=\\\"LOGIN.CREATE_ACCOUNT\\\">\\nCreate an account</a></div></div></div></div>\");\n$templateCache.put(\"app/main/pages/auth/login-v2/login-v2.html\",\"<div id=\\\"login-v2\\\" layout=\\\"row\\\" layout-align=\\\"start\\\"><div id=\\\"login-v2-intro\\\" flex hide show-gt-sm><img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"><div class=\\\"description\\\" \\ntranslate=\\\"LOGIN_V2.INTRO_DESCRIPTION\\\"></div></div><div id=\\\"login-v2-form-wrapper\\\" \\nclass=\\\"flex-scrollable md-whiteframe-8dp\\\" ms-scroll><div id=\\\"login-v2-form\\\"><div class=\\\"title\\\" \\ntranslate=\\\"LOGIN_V2.TITLE\\\"></div><div class=\\\"description\\\" translate=\\\"LOGIN_V2.DESCRIPTION\\\"></div><form \\nname=\\\"loginForm\\\" novalidate><md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"text\\\" name=\\\"username\\\" \\nng-model=\\\"vm.form.username\\\" placeholder=\\\"Username\\\" translate translate-attr-placeholder=\\\"LOGIN_V2.USERNAME\\\" \\nng-change=\\\"vm.typingUsername()\\\" required><div ng-messages=\\\"loginForm.username.$error\\\" \\nng-show=\\\"loginForm.username.$touched\\\" role=\\\"alert\\\" multiple=\\\"multiple\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"LOGIN_V2.ERRORS.USERNAME_REQUIRED\\\">Username field is required</span></div><div ng-message=\\\"wrong\\\"><span \\ntranslate=\\\"LOGIN_V2.ERRORS.USERNAME_TAKEN\\\">This Username is taken</span></div><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"LOGIN_V2.ERRORS.USERNAME_NOT_VALID\\\">Username field not valid</span></div><div ng-message=\\\"invalid\\\"><span \\ntranslate=\\\"LOGIN_V2.ERRORS.INVALID_USERNAME\\\">Invalid username</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" name=\\\"password\\\" ng-model=\\\"vm.form.password\\\" \\nplaceholder=\\\"Password\\\" translate translate-attr-placeholder=\\\"LOGIN_V2.PASSWORD\\\" required><div \\nng-messages=\\\"loginForm.password.$error\\\" ng-show=\\\"loginForm.password.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"LOGIN_V2.ERRORS.PASSWORD_REQUIRED\\\">Password field is required</span></div><div ng-message=\\\"pattern\\\">\\n<span translate=\\\"LOGIN_V2.ERRORS.PASSWORD_NOT_VALID\\\">Password field is not valid</span></div></div>\\n</md-input-container><div class=\\\"remember-forgot-password\\\" layout=\\\"row\\\" layout-sm=\\\"column\\\" \\nlayout-align=\\\"space-between center\\\"><md-checkbox class=\\\"remember-me\\\" ng-model=\\\"vm.form.rememberPassword\\\" \\naria-label=\\\"Remember Me\\\"><span translate=\\\"LOGIN_V2.REMEMBER_ME\\\">Remember Me</span></md-checkbox></div><md-button \\ntype=\\\"submit\\\" class=\\\"md-raised md-primary\\\" aria-label=\\\"LOG IN\\\" hotkey=\\\"{enter: vm.login}\\\" ng-click=\\\"vm.login()\\\" \\nid=\\\"test-submit-button\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.logging\\\"></md-progress-circular><span translate=\\\"LOGIN_V2.LOG_IN\\\" \\ntranslate-attr-aria-label=\\\"LOGIN_V2.LOG_IN\\\" ng-if=\\\"!vm.logging\\\">LOG IN</span> <span translate=\\\"LOGIN_V2.LOGGING_IN\\\" \\ntranslate-attr-aria-label=\\\"LOGIN_V2.LOG_IN\\\" ng-class=\\\"{\\'ml-8\\': vm.logging}\\\" ng-if=\\\"vm.logging\\\">LOGGING IN</span></div>\\n</md-button></form></div></div></div>\");\n$templateCache.put(\"app/main/pages/auth/register/register.html\",\"<div id=\\\"register\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" ms-scroll><div id=\\\"register-form-wrapper\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div id=\\\"register-form\\\" class=\\\"md-whiteframe-8dp\\\"><div class=\\\"logo md-primary-bg\\\"><span>F\\n</span></div><div class=\\\"title\\\" translate=\\\"REGISTER.TITLE\\\">Create an account</div><form name=\\\"registerForm\\\" novalidate>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input name=\\\"username\\\" ng-model=\\\"vm.form.username\\\" placeholder=\\\"Name\\\" \\ntranslate translate-attr-placeholder=\\\"REGISTER.NAME\\\" required><div ng-messages=\\\"registerForm.username.$error\\\" \\nng-show=\\\"registerForm.username.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"REGISTER.ERRORS.USERNAME_REQUIRED\\\">Username field is required</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"email\\\" name=\\\"email\\\" ng-model=\\\"vm.form.email\\\" \\nplaceholder=\\\"Email\\\" translate translate-attr-placeholder=\\\"REGISTER.EMAIL\\\" ng-pattern=\\\"/^.+@.+\\\\..+$/\\\" required><div \\nng-messages=\\\"registerForm.email.$error\\\" ng-show=\\\"registerForm.email.$touched\\\" role=\\\"alert\\\" multiple=\\\"multiple\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"REGISTER.ERRORS.EMAIL_REQUIRED\\\">Email field is required</span></div><div \\nng-message=\\\"pattern\\\"><span translate=\\\"REGISTER.ERRORS.EMAIL_MUST_VALID\\\">Email must be a valid e-mail address</span>\\n</div></div></md-input-container><md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" \\nname=\\\"password\\\" ng-model=\\\"vm.form.password\\\" placeholder=\\\"Password\\\" translate \\ntranslate-attr-placeholder=\\\"REGISTER.PASSWORD\\\" required><div ng-messages=\\\"registerForm.password.$error\\\" \\nng-show=\\\"registerForm.password.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"REGISTER.ERRORS.PASSWORD_REQUIRED\\\">Password field is required</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" name=\\\"passwordConfirm\\\" \\nng-model=\\\"vm.form.passwordConfirm\\\" placeholder=\\\"Password (Confirm)\\\" translate \\ntranslate-attr-placeholder=\\\"REGISTER.PASSWORD_CONFIRM\\\" required><div ng-messages=\\\"registerForm.passwordConfirm.$error\\\" \\nng-show=\\\"registerForm.passwordConfirm.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"REGISTER.ERRORS.PASSWORD_CONFIRM_REQUIRED\\\">Password (Confirm) field is required</span></div></div>\\n</md-input-container><div class=\\\"terms\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-checkbox name=\\\"terms\\\" \\nng-model=\\\"data.cb1\\\" aria-label=\\\"I read and accept\\\" required></md-checkbox><div layout=\\\"row\\\" layout-sm=\\\"column\\\" \\nlayout-align=\\\"start center\\\"><span translate=\\\"REGISTER.READ_ACCEPT\\\">I read and accept</span> <a href=\\\"#\\\" \\nclass=\\\"md-primary-color\\\" translate=\\\"REGISTER.TERMS_COND\\\">terms and conditions</a></div></div><md-button type=\\\"submit\\\" \\nclass=\\\"md-raised md-primary\\\" aria-label=\\\"CREATE MY ACCOUNT\\\" \\nng-disabled=\\\"registerForm.$invalid || registerForm.$pristine\\\" translate=\\\"REGISTER.CREATE_ACCOUNT\\\" \\ntranslate-attr-aria-label=\\\"REGISTER.CREATE_ACCOUNT\\\">CREATE MY ACCOUNT</md-button></form><div class=\\\"login\\\" \\nlayout=\\\"row\\\" layout-xs=\\\"column\\\" layout-align=\\\"center center\\\"><span class=\\\"text\\\" translate=\\\"REGISTER.ALREADY_HAVE\\\">\\nAlready have an account?</span> <a class=\\\"link\\\" ui-sref=\\\"app.pages_auth_login\\\" translate=\\\"REGISTER.LOGIN\\\">Log in</a>\\n</div></div></div></div>\");\n$templateCache.put(\"app/main/pages/auth/login-v3/login-v3.html\",\"<div id=\\\"login-v3\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" ms-scroll><md-card \\nid=\\\"login-card\\\"><md-card-content layoout=\\\"column\\\" layout-align=\\\"center center\\\"><div id=\\\"logo-row\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"></div><div id=\\\"title-row\\\" \\ntranslate=\\\"LOGIN_V3.TITLE\\\"></div><form name=\\\"loginForm\\\" novalidate><md-input-container class=\\\"md-block\\\" md-no-float>\\n<label translate=\\\"LOGIN_V3.USERNAME\\\"></label><input type=\\\"text\\\" name=\\\"username\\\" placeholder=\\\"\\\" \\nng-model=\\\"vm.form.username\\\" ng-change=\\\"vm.typingUsername()\\\" required><div ng-messages=\\\"loginForm.username.$error\\\" \\nng-show=\\\"loginForm.username.$touched\\\" role=\\\"alert\\\" multiple=\\\"multiple\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"LOGIN_V3.ERRORS.USERNAME_REQUIRED\\\">Username field is required</span></div><div ng-message=\\\"wrong\\\"><span \\ntranslate=\\\"LOGIN_V3.ERRORS.USERNAME_TAKEN\\\">This Username is taken</span></div><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"LOGIN_V3.ERRORS.USERNAME_NOT_VALID\\\">Username field not valid</span></div><div ng-message=\\\"invalid\\\"><span \\ntranslate=\\\"LOGIN_V3.ERRORS.INVALID_USERNAME\\\">Invalid username</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block m-0\\\" md-no-float><label translate=\\\"LOGIN_V3.PASSWORD\\\"></label><input \\ntype=\\\"password\\\" name=\\\"password\\\" placeholder=\\\"\\\" ng-model=\\\"vm.form.password\\\" required><div \\nng-messages=\\\"loginForm.password.$error\\\" ng-show=\\\"loginForm.password.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"LOGIN_V3.ERRORS.PASSWORD_REQUIRED\\\">Password field is required</span></div><div ng-message=\\\"pattern\\\">\\n<span translate=\\\"LOGIN_V3.ERRORS.PASSWORD_NOT_VALID\\\">Password field is not valid</span></div></div>\\n</md-input-container><md-input-container class=\\\"md-block m-0\\\" md-no-float><div layout=\\\"row\\\" layout-align=\\\"left\\\" \\nid=\\\"remember-row\\\" class=\\\"mb-2\\\"><md-checkbox class=\\\"remember-me\\\" ng-model=\\\"vm.form.rememberPassword\\\"><span \\ntranslate=\\\"LOGIN_V3.REMEMBER_ME\\\">Remember Me</span></md-checkbox></div></md-input-container><div layout=\\\"row\\\" \\nid=\\\"button-row\\\"><md-button type=\\\"submit\\\" class=\\\"md-raised md-primary full-width\\\" aria-label=\\\"LOG IN\\\" \\nhotkey=\\\"{enter: vm.login}\\\" ng-click=\\\"vm.login()\\\" id=\\\"test-submit-button\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" ng-if=\\\"vm.logging\\\">\\n</md-progress-circular><span translate=\\\"LOGIN_V3.LOG_IN\\\" translate-attr-aria-label=\\\"LOGIN_V3.LOG_IN\\\" \\nng-if=\\\"!vm.logging\\\">LOG IN</span> <span translate=\\\"LOGIN_V3.LOGGING_IN\\\" translate-attr-aria-label=\\\"LOGIN_V3.LOG_IN\\\" \\nng-class=\\\"{\\'ml-8\\': vm.logging}\\\" ng-if=\\\"vm.logging\\\">LOGGING IN</span></div></md-button></div><div layout=\\\"row\\\" \\nid=\\\"password-recovery-row\\\"><md-button type=\\\"button\\\" class=\\\"full-width\\\" aria-label=\\\"FORGOT PASSWORD\\\" \\nng-click=\\\"vm.passwordRecovery()\\\" id=\\\"paswword-recovery-button\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"LOGIN_V3.FORGOT_PASSWORD\\\" translate-attr-aria-label=\\\"LOGIN_V3.FORGOT_PASSWORD\\\">FORGOT PASSWORD</span></div>\\n</md-button></div><div class=\\\"text-center\\\"><span>{{\\'LOGIN_V3.DONT_HAVE_ACCOUNT\\' | translate}}&nbsp;</span> <a \\nui-sref=\\\"signuptwo.pages_sign_up_two\\\" class=\\\"cursor-pointer\\\">{{\\'LOGIN_V3.CREATE_ACCOUNT\\' | translate}}</a></div></form>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/pages/auth/register-v2/register-v2.html\",\"<div id=\\\"register-v2\\\" layout=\\\"row\\\" layout-align=\\\"start\\\"><div id=\\\"register-v2-intro\\\" flex hide show-gt-sm><div \\nclass=\\\"logo md-primary-bg\\\"><span>F</span></div><div class=\\\"title\\\" translate=\\\"REGISTER_V2.INTRO_TITLE\\\">\\nWelcome to WASHBITS!</div><div class=\\\"description\\\" translate=\\\"REGISTER_V2.INTRO_DESCRIPTION\\\">\\nWASHBITS is the dry cleaners platform, created by dry cleaners with the mission to grow the business.</div></div><div \\nid=\\\"register-v2-form-wrapper\\\" class=\\\"flex-scrollable md-whiteframe-8dp\\\" layout=\\\"column\\\" flex ms-scroll><div \\nid=\\\"register-v2-form\\\"><div class=\\\"logo md-primary-bg\\\" hide-gt-sm><span>WB</span></div><div class=\\\"title\\\" \\ntranslate=\\\"REGISTER_V2.TITLE\\\">Create an account</div><div class=\\\"description\\\" translate=\\\"REGISTER_V2.DESCRIPTION\\\">\\nIt only takes 1 minute.</div><form name=\\\"registerForm\\\" novalidate><md-input-container class=\\\"md-block\\\" md-no-float>\\n<input name=\\\"username\\\" ng-model=\\\"vm.form.username\\\" placeholder=\\\"Username\\\" translate \\ntranslate-attr-placeholder=\\\"REGISTER_V2.USERNAME\\\" required><div ng-messages=\\\"registerForm.username.$error\\\" \\nng-show=\\\"registerForm.username.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"REGISTER_V2.ERRORS.USERNAME_REQUIRED\\\">Username field is required</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"email\\\" name=\\\"email\\\" ng-model=\\\"vm.form.email\\\" \\nplaceholder=\\\"Email\\\" translate translate-attr-placeholder=\\\"REGISTER_V2.EMAIL\\\" ng-pattern=\\\"/^.+@.+\\\\..+$/\\\" required><div \\nng-messages=\\\"registerForm.email.$error\\\" ng-show=\\\"registerForm.email.$touched\\\" role=\\\"alert\\\" multiple=\\\"multiple\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"REGISTER_V2.ERRORS.EMAIL_REQUIRED\\\">Email field is required</span></div><div \\nng-message=\\\"pattern\\\"><span translate=\\\"REGISTER_V2.ERRORS.EMAIL_MUST_VALID\\\">Email must be a valid e-mail address</span>\\n</div></div></md-input-container><md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" \\nname=\\\"password\\\" ng-model=\\\"vm.form.password\\\" placeholder=\\\"Password\\\" translate \\ntranslate-attr-placeholder=\\\"REGISTER_V2.PASSWORD\\\" required><div ng-messages=\\\"registerForm.password.$error\\\" \\nng-show=\\\"registerForm.password.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"REGISTER_V2.ERRORS.PASSWORD_REQUIRED\\\">Password field is required</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"password\\\" name=\\\"passwordConfirm\\\" \\nng-model=\\\"vm.form.passwordConfirm\\\" placeholder=\\\"Password (Confirm)\\\" translate \\ntranslate-attr-placeholder=\\\"REGISTER_V2.PASSWORD_CONFIRM\\\" required><div \\nng-messages=\\\"registerForm.passwordConfirm.$error\\\" ng-show=\\\"registerForm.passwordConfirm.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"REGISTER_V2.ERRORS.PASSWORD_CONFIRM_REQUIRED\\\">\\nPassword (Confirm) field is required</span></div></div></md-input-container><div class=\\\"terms\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-checkbox name=\\\"terms\\\" ng-model=\\\"data.cb1\\\" aria-label=\\\"I read and accept\\\" required>\\n</md-checkbox><div layout=\\\"row\\\" layout-sm=\\\"column\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"REGISTER_V2.READ_ACCEPT\\\">I read and accept</span> <a href=\\\"#\\\" class=\\\"md-primary-color\\\" \\ntranslate=\\\"REGISTER_V2.TERMS_COND\\\">terms and conditions</a></div></div><md-button type=\\\"submit\\\" \\nclass=\\\"md-raised md-primary\\\" aria-label=\\\"CREATE MY ACCOUNT\\\" ng-click=\\\"vm.signup()\\\" \\nng-disabled=\\\"registerForm.$invalid || registerForm.$pristine\\\" translate=\\\"REGISTER_V2.CREATE_ACCOUNT\\\" \\ntranslate-attr-aria-label=\\\"REGISTER_V2.CREATE_ACCOUNT\\\">CREATE MY ACCOUNT</md-button></form><div class=\\\"login\\\" \\nlayout=\\\"row\\\" layout-sm=\\\"column\\\" layout-align=\\\"center center\\\"><span class=\\\"text\\\" translate=\\\"REGISTER_V2.ALREADY_HAVE\\\">\\nAlready have an account?</span> <a class=\\\"link\\\" ui-sref=\\\"app.pages_auth_login-v2\\\" translate=\\\"REGISTER_V2.LOGIN\\\">Log in\\n</a></div></div></div></div>\");\n$templateCache.put(\"app/main/pages/auth/reset-password/reset-password.html\",\"<div id=\\\"reset-password\\\" class=\\\"flex-scrollable\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" ms-scroll><md-card \\nid=\\\"reset-password-card\\\"><md-card-content layoout=\\\"column\\\" layout-align=\\\"center center\\\"><div id=\\\"logo-row-reset\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><img src=\\\"/assets/stockagile/logos/stockagile-logo-full.4006ab2b.svg\\\"></div><div \\nid=\\\"title-row-reset\\\" class=\\\"mb-12\\\" translate=\\\"RESET_PASSWORD.TITLE\\\"></div><form name=\\\"vm.resetPasswordForm\\\" novalidate>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"{{vm.showPassword ? \\'text\\' : \\'password\\'}}\\\" \\nname=\\\"password\\\" data-test-id=\\\"reset-password\\\" ng-model=\\\"vm.password\\\" placeholder=\\\"{{\\'SIGNUP.PASSWORD\\' | translate}}\\\" \\nng-pattern=\\\"/^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d!@#$%^&*]{8,}$/\\\" required><md-icon md-font-icon=\\\"icon-eye\\\" \\nclass=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = true\\\" ng-if=\\\"!vm.showPassword\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-eye-off\\\" class=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = false\\\" \\nng-if=\\\"vm.showPassword\\\"></md-icon><div ng-messages=\\\"vm.resetPasswordForm.password.$error\\\" \\nng-show=\\\"vm.resetPasswordForm.password.$dirty\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\" \\ndata-test-id=\\\"reset-password-alert-password-invalid\\\"><span>{{\\'SIGNUP.PASSWORD_INVALID\\' | translate}}</span></div><div \\nng-message=\\\"required\\\"><span>{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block\\\" md-no-float><input type=\\\"{{vm.showRepeatPassword ? \\'text\\' : \\'password\\'}}\\\" \\nname=\\\"repeatPassword\\\" data-test-id=\\\"reset-repeat-password\\\" ng-model=\\\"vm.repeatPassword\\\" \\nng-change=\\\"vm.checkPasswordMismatch()\\\" placeholder=\\\"{{\\'SIGNUP.REPEAT_PASSWORD\\' | translate}}\\\" \\nng-pattern=\\\"/^(?=.*[A-Za-z])(?=.*\\\\d)[A-Za-z\\\\d!@#$%^&*]{8,}$/\\\" required><md-icon md-font-icon=\\\"icon-eye\\\" \\nclass=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showRepeatPassword = true\\\" ng-if=\\\"!vm.showRepeatPassword\\\"></md-icon>\\n<md-icon md-font-icon=\\\"icon-eye-off\\\" class=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showRepeatPassword = false\\\" \\nng-if=\\\"vm.showRepeatPassword\\\"></md-icon><div ng-messages=\\\"vm.resetPasswordForm.repeatPassword.$error\\\" \\nng-show=\\\"vm.resetPasswordForm.repeatPassword.$dirty\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\"><span>\\n{{\\'SIGNUP.PASSWORD_INVALID\\' | translate}}</span></div><div ng-message=\\\"required\\\"><span>\\n{{\\'COMPANY.FIELD_REQUIRED\\' | translate}}</span></div><div ng-message=\\\"mismatch\\\" \\ndata-test-id=\\\"reset-alert-repeat-password-mismatch\\\"><span>{{\\'SIGNUP.PASSWORD_MISMATCH\\' | translate}}</span></div></div>\\n</md-input-container><div layout=\\\"row\\\"><md-button type=\\\"submit\\\" class=\\\"md-raised md-primary full-width\\\" \\naria-label=\\\"Reset password\\\" hotkey=\\\"{enter: vm.resetPassword}\\\" ng-click=\\\"vm.resetPassword()\\\" ng-disabled=\\\"vm.disabled\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" \\nng-if=\\\"vm.recovering\\\"></md-progress-circular><span translate=\\\"RESET_PASSWORD.UPDATE_PASSWORD\\\" \\ntranslate-attr-aria-label=\\\"RESET_PASSWORD.SEND_RESET_LINK\\\">Reset password</span></div></md-button></div><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><a ui-sref=\\\"app.pages_auth_login-v3\\\" class=\\\"md-button cursor-pointer\\\">\\n{{\\'RESET_PASSWORD.GO_BACK\\' | translate }}</a></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/pages/errors/404/error-404.html\",\"<div id=\\\"error-404\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"content\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"error-code\\\" translate=\\\"ERROR404.CODE\\\">404</div><div class=\\\"message\\\" \\ntranslate=\\\"ERROR404.MESSAGE\\\">Sorry but we couldn’t find the page you are looking for</div><div \\nclass=\\\"search md-whiteframe-1dp\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" \\nclass=\\\"icon s24\\\"></md-icon><input ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search for anything\\\" maxlength=\\\"56\\\" \\ntranslate translate-attr-placeholder=\\\"ERROR404.SEARCH\\\" flex></div><a class=\\\"back-link md-primary-color\\\" href=\\\"/\\\" \\ntranslate=\\\"ERROR404.GO_BACK\\\">Go back to dashboard</a></div></div>\");\n$templateCache.put(\"app/main/pages/errors/500/error-500.html\",\"<div id=\\\"error-500\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"content\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"error-code\\\" translate=\\\"ERROR500.CODE\\\">500</div><div class=\\\"message\\\" \\ntranslate=\\\"ERROR500.MESSAGE\\\">Well, you broke the internet!</div><div class=\\\"sub-message\\\" \\ntranslate=\\\"ERROR500.SUBMESSAGE\\\">Just kidding, looks like we have an internal issue, please try again in couple minutes\\n</div><a class=\\\"report-link md-primary-color\\\" href=\\\"/\\\" translate=\\\"ERROR500.REPORT\\\">Report this problem</a></div></div>\");\n$templateCache.put(\"app/main/pages/hub/document/document.html\",\"<div id=\\\"hub-document\\\" class=\\\"hub-page\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" ms-scroll><div flex-gt-sm=\\\"66\\\" \\nflex-order=\\\"2\\\" flex-order-gt-sm=\\\"1\\\"><md-card style=\\\"overflow: hidden\\\"><md-progress-linear ng-show=\\\"vm.loading\\\" \\nmd-mode=\\\"query\\\"></md-progress-linear><md-card-content><iframe id=\\\"pdf-canvas\\\" ng-src=\\\"{{vm.content}}\\\" \\ntype=\\\"application/pdf\\\" width=\\\"100%\\\" height=\\\"100%\\\"></iframe></md-card-content></md-card></div><div flex-gt-sm=\\\"33\\\" \\nflex-order=\\\"1\\\" flex-order-gt-sm=\\\"2\\\"><md-card><md-card-content><h2 class=\\\"m-0 p-0\\\"><span \\nng-if=\\\"vm.documentType==\\'receipts\\'\\\">{{\\\"HUB.RECEIPT\\\"|translate}}</span> <span ng-if=\\\"vm.documentType==\\'invoices\\'\\\">\\n{{\\\"INVOICE.INVOICE\\\"|translate}}</span> <span ng-if=\\\"vm.documentType==\\'proformas\\'\\\">{{\\\"INVOICE.PROFORMA\\\"|translate}}\\n</span> <span ng-if=\\\"vm.documentType==\\'quotes\\'\\\">{{\\\"INVOICE.QUOTE\\\"|translate}}</span> {{vm.document.autocode}}</h2><h1 \\nclass=\\\"text-right\\\"><span ng-if=\\\"vm.documentType==\\'receipts\\'\\\">{{vm.document.total|price}} </span><span \\nng-if=\\\"vm.documentType==\\'invoices\\'\\\">{{vm.document.total_incl_tax|price}} </span><span \\nng-if=\\\"vm.documentType==\\'proformas\\'\\\">{{vm.document.total_incl_tax|price}} </span><span \\nng-if=\\\"vm.documentType==\\'quotes\\'\\\">{{vm.document.total_incl_tax|price}} </span>\\n{{vm.document.currency|currencyCharacter}}</h1><div layout=\\\"row\\\"><md-button flex=\\\"50\\\" ng-click=\\\"vm.downloadPDF()\\\" \\nclass=\\\"md-primary stroked\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-arrow-down\\\" \\nclass=\\\"mr-5\\\"></md-icon><span translate=\\\"GENERAL.DOWNLOAD\\\" flex></span></div></md-button><md-button flex=\\\"50\\\" \\nng-click=\\\"vm.printPDF()\\\" class=\\\"md-primary stroked\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/printer-outline.1161ddec.svg\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"GENERAL.PRINT\\\" flex></span></div></md-button></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/pages/hub/documents/documents.html\",\"<div id=\\\"hub-documents\\\" class=\\\"hub-page\\\" layout=\\\"column\\\" layout-fill ms-scroll><md-card flex=\\\"100\\\" \\nstyle=\\\"overflow: hidden\\\"><md-progress-linear ng-show=\\\"vm.loading\\\" md-mode=\\\"query\\\"></md-progress-linear>\\n<md-card-content><h1 class=\\\"mt-0\\\" translate=\\\"HUB.RECEIPTS\\\" ng-if=\\\"vm.documentType==\\'receipts\\'\\\"></h1><h1 \\nng-if=\\\"vm.documentType==\\'invoices\\'\\\" class=\\\"mt-0\\\" translate=\\\"NAVIGATION.INVOICES\\\"></h1><h1 \\nng-if=\\\"vm.documentType==\\'proformas\\'\\\" class=\\\"mt-0\\\" translate=\\\"NAVIGATION.PROFORMAS\\\"></h1><h1 \\nng-if=\\\"vm.documentType==\\'quotes\\'\\\" class=\\\"mt-0\\\" translate=\\\"NAVIGATION.QUOTES\\\"></h1><table class=\\\"simple\\\" \\nms-responsive-table><thead><tr><th translate=\\\"INVOICE.BILLING_DATE\\\"></th><th translate=\\\"INVOICE.SERIAL_NUMBER\\\"></th><th\\n translate=\\\"ORDER.PAYMENT\\\"></th><th class=\\\"text-right\\\" translate=\\\"INVOICE.SUBTOTAL\\\"></th><th class=\\\"text-right\\\" \\ntranslate=\\\"INVOICE.TOTAL\\\"></th></tr></thead><tbody><tr ng-repeat=\\\"document in vm.documents\\\" \\nui-sref=\\\"{{document.pageUrl}}\\\"><td class=\\\"text-left\\\">{{document.billing_date||document.created_at | date}}</td><td \\nclass=\\\"text-left\\\"><b>{{document.autocode}}</b></td><td class=\\\"text-left\\\"><span ng-if=\\\"document.payment_status==10\\\" \\nclass=\\\"text-boxed red m-0\\\" translate=\\\"INVOICE.PENDING\\\"></span> <span ng-if=\\\"document.payment_status!=10\\\" \\nclass=\\\"text-boxed green m-0\\\" translate=\\\"INVOICE.PAID\\\"></span></td><td class=\\\"text-right\\\">\\n{{document.subtotal | price}} {{invoice.currency | currencyCharacter}}</td><td class=\\\"text-right\\\">\\n{{document.total_incl_tax||document.total | price}} {{invoice.currency | currencyCharacter}}</td></tr></tbody></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/pages/sign-up/sign-up/sign-up.html\",\"<div id=\\\"sign-up\\\"></div><div style=\\\"visibility: hidden\\\"><div id=\\\"sing-up-dialog\\\" class=\\\"md-dialog-container\\\"><md-dialog\\n layout=\\\"column\\\"><nd-signup-wizard></nd-signup-wizard></md-dialog></div></div>\");\n$templateCache.put(\"app/main/pages/sign-up/sign-up-two/sign-up-two.html\",\"<div id=\\\"sign-up-two\\\" layout-align=\\\"start start\\\" layout=\\\"column\\\"><div class=\\\"full-height full-width\\\" \\nng-include=\\\"\\'app/main/pages/sign-up/validate-sign-up-two/mock-dashboard.html\\'\\\"></div></div><div \\nstyle=\\\"visibility: hidden\\\"><div id=\\\"sign-up-two-dialog\\\" class=\\\"md-dialog-container\\\"><md-dialog id=\\\"md-dialog-sign-up\\\" \\nlayout-padding ms-scroll><nd-signup-creation-form ng-if=\\\"vm.getFormVersion() === \\'1\\'\\\" form_version=\\\"1\\\" \\nemail=\\\"vm.getEmail()\\\" signup=\\\"vm.signUp\\\"></nd-signup-creation-form><nd-signup-creation-form \\nng-if=\\\"vm.getFormVersion() === \\'2\\'\\\" form_version=\\\"2\\\" email=\\\"vm.getEmail()\\\" signup=\\\"vm.signUp\\\">\\n</nd-signup-creation-form></md-dialog></div></div>\");\n$templateCache.put(\"app/main/pages/sign-up/validate-sign-up-two/mock-dashboard.html\",\"<div layout=\\\"column\\\" layout-align=\\\"start start\\\" class=\\\"full-width full-height\\\"><div class=\\\"header p-32 full-width\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start centers\\\"><spam flex class=\\\"h1\\\" translate=\\\"RETAIL_DASHBOARD.INVENTORY_ANALYTICS\\\">\\n</spam><span hide-xs hide-sm class=\\\"h1\\\" class=\\\"secondary-text\\\">{{vm.date | date:\\'fullDate\\'}}</span></div><div \\nlayout=\\\"row\\\" class=\\\"full-width\\\" layout-wrap><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.PURCHASES\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{(vm.stocks.purchased_pending_to_receive || 0) | number:0}}</div><span class=\\\"h6\\\" \\nng-if=\\\"vm.stocks\\\">{{\\'INVENTORY_DASHBOARD.PURCHASES_PENDING_TO_DECEIVE\\' | translate}}</span></ms-widget-front>\\n</ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TRANSFERS\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">\\n{{(vm.stocks.transferred_pending_to_prepare + vm.stocks.transferred_pending_to_ship + vm.stocks.transferred_pending_to_receive) | number:0}}\\n</div><span class=\\\"h6\\\" ng-if=\\\"vm.stocks\\\">\\n{{\\'INVENTORY_DASHBOARD.PREPARED_SHIP_RECEIVE\\' | translate: { p: vm.stocks.transferred_pending_to_prepare, s: vm.stocks.transferred_pending_to_ship, r: vm.stocks.transferred_pending_to_receive} }}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.SALES\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{(vm.stocks.sold_pending_to_prepare + vm.stocks.sold_pending_to_ship) | number:0}}</div><span\\n class=\\\"h6\\\" ng-if=\\\"vm.stocks\\\">\\n{{\\'INVENTORY_DASHBOARD.PREPARED_SHIP\\' | translate: { p: vm.stocks.sold_pending_to_prepare, s: vm.stocks.sold_pending_to_ship} }}\\n</span></ms-widget-front></ms-widget></div><div layout=\\\"row\\\" class=\\\"full-width\\\" flex><md-card flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_CATEGORY\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><nvd3 class=\\\"h-400\\\" ng-if=\\\"vm.categoriesWidget.init\\\" \\nconfig=\\\"vm.categoriesWidget.mainChart.config\\\" options=\\\"vm.categoriesWidget.mainChart.options\\\" \\ndata=\\\"vm.categoriesWidget.mainChart.data\\\"></nvd3></md-card-content></md-card><md-card flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_SEASON\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><nvd3 class=\\\"h-400\\\" ng-if=\\\"vm.seasonsWidget.init\\\" \\nconfig=\\\"vm.seasonsWidget.mainChart.config\\\" options=\\\"vm.seasonsWidget.mainChart.options\\\" \\ndata=\\\"vm.seasonsWidget.mainChart.data\\\"></nvd3></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/pages/sign-up/validate-sign-up-two/validate-sign-up-two.html\",\"<div id=\\\"validate-sign-up-two\\\" layout-align=\\\"start start\\\" layout=\\\"column\\\"><div class=\\\"full-height full-width\\\" \\nng-include=\\\"\\'app/main/pages/sign-up/validate-sign-up-two/mock-dashboard.html\\'\\\"></div></div>\");\n$templateCache.put(\"app/main/pages/sign-up/validate-sign-up/validate-sign-up.html\",\"<div id=\\\"validate-sign-up\\\"></div><div style=\\\"visibility: hidden\\\"><div id=\\\"validate-sing-up-dialog\\\" \\nclass=\\\"md-dialog-container\\\"><md-dialog layout=\\\"column\\\"><md-dialog-content><div layout=\\\"column\\\" \\nng-if=\\\"vm.generatingData && !vm.error\\\"><h2 class=\\\"mt-0\\\">{{\\'SIGNUP.GENERATING_DATA\\' | translate}}</h2><p>\\n{{\\'SIGNUP.GENERATING_DATA_MSG\\' | translate}}</p><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mb-16\\\">\\n<md-progress-circular></md-progress-circular></div></div><div layout=\\\"column\\\" \\nng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01003_TOKEN_IS_NULL || vm.error === vm.ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND\\\">\\n<h2 class=\\\"mt-0\\\">{{\\'SIGNUP.URL_NOT_VALID\\' | translate}}</h2><div class=\\\"warn-banner\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"amber-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span \\ntranslate=\\\"SIGNUP.URL_NOT_VALID_MSG\\\"></span></div></div></div></div><div layout=\\\"column\\\" \\nng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED\\\"><h2 class=\\\"mt-0\\\">\\n{{\\'SIGNUP.TOKEN_ALREADY_VALIDATED\\' | translate}}</h2><div class=\\\"warn-banner\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"amber-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span>\\n{{\\'SIGNUP.TOKEN_ALREADY_VALIDATED_MSG\\' | translate: { validatedAt: (vm.errorVerifiedAt | date: \\'short\\') } }}</span>\\n</div></div></div></div><div layout=\\\"column\\\" \\nng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS\\\"><h2 class=\\\"mt-0\\\">\\n{{\\'SIGNUP.EMAIL_ERROR\\' | translate}}</h2><div class=\\\"error-banner\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"red-fg\\\"></md-icon>\\n</div><div layout=\\\"column\\\" flex><span translate=\\\"SIGNUP.ERROR_WHILE_GENERATING_DATA\\\"></span></div></div></div></div>\\n</md-dialog-content><md-dialog-actions><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"md-active\\\" \\nui-sref=\\\"app.pages_auth_login-v3\\\" ng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED\\\">\\n{{\\'LOGIN_V3.LOG_IN\\' | translate}}</md-button><md-button href=\\\"mailto:sales@stockagile.com\\\" \\nng-if=\\\"vm.error === vm.ERROR_CODES.ERROR_01003_TOKEN_IS_NULL || vm.error === vm.ERROR_CODES.ERROR_01004_TOKEN_NOT_FOUND|| vm.error === vm.ERROR_CODES.ERROR_01005_TOKEN_ALREADY_VALIDATED || vm.error === vm.ERROR_CODES.ERROR_01006_ERROR_DURING_TOKEN_VALIDATIONS\\\">\\n{{\\'SIGNUP.CONTACT_WITH_SUPPORT\\' | translate}}</md-button></div></md-dialog-actions></md-dialog></div></div>\");\n$templateCache.put(\"app/main/services/dialogs/esc-pos-printer-dialog/esc-pos-printer-dialog.html\",\"<md-dialog aria-label=\\\"Choose products\\\"><md-dialog-content><h2 translate=\\\"SALES.GIFT_TICKET\\\">Gift Ticket</h2><p \\ntranslate=\\\"SALES.SELECT_GIFT_TICKET_PRODUCTS\\\">Select those produts to print on the gift ticket</p><md-list>\\n<md-list-item ng-repeat=\\\"product in vm.products track by $index\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-checkbox ng-model=\\\"product.selected\\\" class=\\\"m-0\\\"></md-checkbox><strong class=\\\"mr-10\\\">{{product.gift_amount}}\\n</strong><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"table-thumbnails mr-10\\\" \\nng-class=\\\"{\\'default-icon\\': !product.cover_thumbnail}\\\" \\nsrc=\\\"{{product.cover_thumbnail ? product.cover_thumbnail : \\'/assets/images/package-variant-closed.9c71cbbe.png\\'}}\\\"><div \\nlayout=\\\"column\\\" class=\\\"mr-8\\\"><a ng-click=\\\"vm.goToProduct(product.product)\\\">{{product.product_name}}</a> <small>\\n{{product.product_variant_size_name}} - {{product.product_variant_color_name}}</small> <small \\nclass=\\\"m-0 secondary-text\\\">{{ ::product.brand_name}}</small> <span ng-if=\\\"product.promotion\\\" class=\\\"m-0\\\">\\n{{ product.promotion_name}}</span></div></div><md-icon class=\\\"md-secondary no-margin\\\" \\nng-click=\\\"vm.removeGiftAmount(product)\\\" md-font-icon=\\\"icon-minus-box\\\"></md-icon><md-icon \\nclass=\\\"md-secondary no-margin\\\" ng-click=\\\"vm.addGiftAmount(product)\\\" md-font-icon=\\\"icon-plus-box\\\"></md-icon></div>\\n</md-list-item></md-list></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.hide()\\\">\\n{{(vm.isEco ? \\'SALES.SEND\\' : \\'SALES.PRINT\\') | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/services/dialogs/request-pin-dialog/request-pin-dialog.html\",\"<md-dialog id=\\\"request-pin-dialog\\\"><md-dialog-content><div class=\\\"h2\\\">{{\\'USERS.CHANGE_USER\\' | translate}}</div><p \\ntranslate=\\\"USERS.CHANGE_USER_BODY\\\" \\ndata-translate-values=\\\"{firstName: vm.user.data.first_name, lastName:vm.user.data.last_name}\\\"></p><form name=\\\"pinForm\\\" \\nautocomplete=\\\"off\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"h-24\\\"><div \\nng-repeat=\\\"number in vm.pin track by $index\\\" class=\\\"h3\\\">*</div></div><div ng-if=\\\"!vm.valid\\\" \\nclass=\\\"red-fg full-width text-center\\\" translate=\\\"USERS.INVALID_PIN\\\">Invalid pin</div><div class=\\\"full-height\\\" flex \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" \\nflex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(1)\\\">1</div></div><div class=\\\"p-5\\\" flex><div \\nclass=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(2)\\\">2</div></div><div \\nclass=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(3)\\\">3</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" flex><div \\nclass=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(4)\\\">4</div></div><div \\nclass=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(5)\\\">5</div></div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(6)\\\">6</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" \\nflex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(7)\\\">7</div>\\n</div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(8)\\\">8</div></div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(9)\\\">9</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" \\nflex><div class=\\\"key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.cancel()\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></div></div><div class=\\\"p-5\\\" flex><div class=\\\"grey-100-bg key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(0)\\\">0</div></div><div class=\\\"p-5\\\" flex><div class=\\\"key\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.clearValue()\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</div></div></div></div></form></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/services/dialogs/terms-and-conditions/terms-and-conditions-dialog.html\",\"<md-dialog id=\\\"terms-dialog\\\" data-test-id=\\\"tst-terms-dialog\\\" aria-label=\\\"Accept Terms\\\"><form name=\\\"termsForm\\\" \\nclass=\\\"md-inline-form\\\" novalidate autocomplete=\\\"false\\\"><md-dialog-content><h2 class=\\\"mb-32\\\">\\n{{\\'GENERAL.ACCEPT_TERMS_AND_CONDITIONS_TITLE\\' | translate}}</h2><div \\ntranslate=\\\"GENERAL.ACCEPT_TERMS_AND_CONDITIONS_MSG\\\" translate-values=\\\"{finalUserContract: vm.finalUserContract}\\\"></div>\\n<md-checkbox type=\\\"checkbox\\\" data-test-id=\\\"checkbox-terms\\\" ng-model=\\\"vm.user.terms_and_conditions_accepted\\\"><span \\ntranslate=\\\"GENERAL.ACCEPT_TERMS\\\">Accept Terms and conditions</span></md-checkbox></md-dialog-content><md-dialog-actions\\n layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-button ng-click=\\\"vm.logout()\\\" translate=\\\"TOOLBAR.LOGOUT\\\" \\ntranslate-attr-aria-label=\\\"TOOLBAR.LOGOUT\\\">Logout</md-button><span flex></span><md-button type=\\\"submit\\\" \\ndata-test-id=\\\"save-TandC-button\\\" ng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.user.terms_and_conditions_accepted\\\" aria-label=\\\"SAVE\\\" translate=\\\"GENERAL.SAVE\\\" \\ntranslate-attr-aria-label=\\\"GENERAL.SAVE\\\">SAVE</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/services/dialogs/net-promoter-score/net-promoter-score-dialog.html\",\"<md-dialog id=\\\"net-promoter-score-dialog\\\"><md-dialog-content><h2 class=\\\"mb-32\\\">\\n{{\\'GENERAL.NET_PROMOTER_SCORE_TITLE\\' | translate}}</h2><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-primary nps-button\\\" flex ng-repeat=\\\"nps in vm.availableNpss\\\" ng-class=\\\"{\\'md-raised\\': nps === vm.nps}\\\" \\nng-click=\\\"vm.nps = nps\\\">{{nps}}</md-button></div><div layout=\\\"row\\\" class=\\\"secondary-text mb-32 p-8\\\">\\n{{\\'GENERAL.NET_PROMOTER_SCORE_MIN\\' | translate: {n: vm.availableNpss[0]} }} <span flex></span>\\n {{\\'GENERAL.NET_PROMOTER_SCORE_MAX\\' | translate: {n: vm.availableNpss[vm.availableNpss.length - 1]} }}</div><textarea \\nng-model=\\\"vm.notes\\\" type=\\\"text\\\" placeholder=\\\"{{\\'GENERAL.NET_PROMOTER_SCORE_NOTES\\' | translate}}\\\"></textarea>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.skip()\\\" \\nclass=\\\"stroked\\\" aria-label=\\\"CANCEL\\\" translate=\\\"GENERAL.SKIP_NET_PROMOTER_SCORE\\\"></md-button><md-button \\nng-click=\\\"vm.save()\\\" ng-disabled=\\\"!vm.nps\\\" class=\\\"md-primary md-raised\\\" aria-label=\\\"SAVE\\\" translate=\\\"GENERAL.SAVE\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-1/template-1.html\",\"<div class=\\\"template-1\\\"><div class=\\\"media\\\"><img class=\\\"image\\\" ng-src=\\\"{{card.media.image.src}}\\\" \\nalt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div><div class=\\\"content pv-24 ph-16\\\"><div class=\\\"title h1\\\" \\nng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"subtitle secondary-text\\\" ng-if=\\\"card.subtitle\\\">{{card.subtitle}}\\n</div><div class=\\\"text pt-16\\\" ng-if=\\\"card.text\\\">{{card.text}}</div></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-10/template-10.html\",\"<div class=\\\"template-10 p-16\\\"><div class=\\\"pb-16\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"info\\\">\\n<div class=\\\"title secondary-text\\\" ng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"subtitle h2\\\" \\nng-if=\\\"card.subtitle\\\">{{card.subtitle}}</div></div><div class=\\\"media ml-16\\\"><img class=\\\"image\\\" \\nng-src=\\\"{{card.media.image.src}}\\\" alt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div></div><div \\nclass=\\\"text\\\">{{card.text}}</div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-2/template-2.html\",\"<div class=\\\"template-2\\\"><div class=\\\"header p-16\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div ng-if=\\\"card.avatar\\\"><img\\n class=\\\"avatar mr-16\\\" ng-src=\\\"{{card.avatar.src}}\\\" alt=\\\"{{card.avatar.alt}}\\\"></div><div class=\\\"info\\\"><div \\nclass=\\\"title\\\" ng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"subtitle secondary-text\\\" ng-if=\\\"card.subtitle\\\">\\n{{card.subtitle}}</div></div></div><div class=\\\"media\\\"><img class=\\\"image\\\" ng-src=\\\"{{card.media.image.src}}\\\" \\nalt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div><div class=\\\"text p-16\\\" ng-if=\\\"card.text\\\">{{card.text}}\\n</div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-3/template-3.html\",\"<div class=\\\"template-3 p-16 teal-bg white-fg\\\" layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"space-between\\\"><div class=\\\"info\\\"><div class=\\\"title h1\\\" ng-if=\\\"card.title\\\">{{card.title}}</div><div \\nclass=\\\"subtitle h3 secondary-text\\\" ng-if=\\\"card.subtitle\\\">{{card.subtitle}}</div></div><div class=\\\"cta\\\"><md-button \\nclass=\\\"m-0\\\">{{card.cta}}</md-button></div></div><div class=\\\"media pl-16\\\"><img class=\\\"image\\\" \\nng-src=\\\"{{card.media.image.src}}\\\" alt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-4/template-4.html\",\"<div class=\\\"template-4\\\"><div class=\\\"info white-fg ph-16 pv-24\\\"><div class=\\\"title h1\\\" ng-if=\\\"card.title\\\">{{card.title}}\\n</div><div class=\\\"text\\\" ng-if=\\\"card.text\\\">{{card.text}}</div></div><div class=\\\"media\\\"><img class=\\\"image\\\" \\nng-src=\\\"{{card.media.image.src}}\\\" alt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-5/template-5.html\",\"<div class=\\\"template-5 p-16\\\" layout=\\\"row\\\" layout-align=\\\"space-between start\\\"><div class=\\\"info\\\"><div \\nclass=\\\"title secondary-text\\\" ng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"event h2\\\" ng-if=\\\"card.event\\\">\\n{{card.event}}</div></div><div class=\\\"media ml-16\\\"><img class=\\\"image\\\" ng-src=\\\"{{card.media.image.src}}\\\" \\nalt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-7/template-7.html\",\"<div class=\\\"template-7\\\" layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div class=\\\"info\\\" layout=\\\"column\\\" \\nlayout-align=\\\"space-between\\\" layout-fill flex><div class=\\\"p-16\\\"><div class=\\\"title h1\\\" ng-if=\\\"card.title\\\">{{card.title}}\\n</div><div class=\\\"subtitle h4 secondary-text\\\" ng-if=\\\"card.subtitle\\\">{{card.subtitle}}</div><div class=\\\"text h4 pt-8\\\" \\nng-if=\\\"card.text\\\">{{card.text}}</div></div><div><md-divider></md-divider><div class=\\\"p-8\\\" layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-star-outline\\\" class=\\\"mh-5\\\"></md-icon><md-icon md-font-icon=\\\"icon-star-outline\\\" class=\\\"mh-5\\\">\\n</md-icon><md-icon md-font-icon=\\\"icon-star-outline\\\" class=\\\"mh-5\\\"></md-icon><md-icon md-font-icon=\\\"icon-star-outline\\\" \\nclass=\\\"mh-5\\\"></md-icon><md-icon md-font-icon=\\\"icon-star-outline\\\" class=\\\"mh-5\\\"></md-icon></div></div></div><div \\nclass=\\\"media\\\"><img class=\\\"image\\\" ng-src=\\\"{{card.media.image.src}}\\\" alt=\\\"{{card.media.image.alt}}\\\" \\nng-show=\\\"card.media.image\\\"></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-6/template-6.html\",\"<div class=\\\"template-6\\\"><div class=\\\"content pv-24 ph-16\\\"><div class=\\\"subtitle secondary-text\\\" ng-if=\\\"card.subtitle\\\">\\n{{card.subtitle}}</div><div class=\\\"title h2\\\" ng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"text pt-8\\\" \\nng-if=\\\"card.text\\\">{{card.text}}</div></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-8/template-8.html\",\"<div class=\\\"template-8\\\"><div class=\\\"media\\\"><img class=\\\"image\\\" ng-src=\\\"{{card.media.image.src}}\\\" \\nalt=\\\"{{card.media.image.alt}}\\\" ng-show=\\\"card.media.image\\\"></div><div class=\\\"content pv-24 ph-16\\\"><div class=\\\"title h1\\\" \\nng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"subtitle secondary-text\\\" ng-if=\\\"card.subtitle\\\">{{card.subtitle}}\\n</div><div class=\\\"buttons pt-16\\\"><md-button class=\\\"m-0\\\">{{card.button1}}</md-button><md-button class=\\\"m-0 md-accent\\\">\\n{{card.button2}}</md-button></div><div class=\\\"text pt-16\\\" ng-if=\\\"card.text\\\">{{card.text}}</div></div></div>\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-9/template-9.html\",\"<div class=\\\"template-9\\\"><div class=\\\"header p-16\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div ng-if=\\\"card.avatar\\\"><img\\n class=\\\"avatar mr-16\\\" ng-src=\\\"{{card.avatar.src}}\\\" alt=\\\"{{card.avatar.alt}}\\\"></div><div class=\\\"info\\\"><div \\nclass=\\\"title\\\" ng-if=\\\"card.title\\\">{{card.title}}</div><div class=\\\"subtitle secondary-text\\\" ng-if=\\\"card.subtitle\\\">\\n{{card.subtitle}}</div></div></div><div class=\\\"text ph-16 pb-16\\\" ng-if=\\\"card.text\\\">{{card.text}}</div><div \\nclass=\\\"media\\\"><img class=\\\"image\\\" ng-src=\\\"{{card.media.image.src}}\\\" alt=\\\"{{card.media.image.alt}}\\\" \\nng-show=\\\"card.media.image\\\"></div><div class=\\\"buttons m-8\\\"><md-button class=\\\"md-icon-button mr-16\\\" \\naria-label=\\\"Favorite\\\"><md-icon md-font-icon=\\\"icon-heart-outline\\\" class=\\\"s24\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" aria-label=\\\"Share\\\"><md-icon md-font-icon=\\\"icon-share\\\" class=\\\"s24\\\"></md-icon></md-button></div>\\n</div>\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/horizontal/horizontal.html\",\"<div class=\\\"ms-stepper-horizontal\\\"><div class=\\\"ms-stepper-navigation-wrapper\\\"><div class=\\\"ms-stepper-navigation\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"ms-stepper-navigation-item\\\" \\nng-class=\\\"{\\'current\\': MsStepper.isStepCurrent(step.stepNumber), \\'valid\\': MsStepper.isStepValid(step.stepNumber), \\'disabled\\': MsStepper.isStepDisabled(step.stepNumber), \\'optional\\': MsStepper.isStepOptional(step.stepNumber)}\\\" \\nng-click=\\\"MsStepper.gotoStep(step.stepNumber)\\\" ng-disabled=\\\"MsStepper.isStepDisabled(step.stepNumber)\\\" \\nng-repeat=\\\"step in MsStepper.steps | filter:MsStepper.filterHiddenStep\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"step md-accent-bg\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\nng-if=\\\"!MsStepper.isStepValid(step.stepNumber) || MsStepper.isStepOptional(step.stepNumber)\\\">{{$index + 1}} </span>\\n<span ng-if=\\\"MsStepper.isStepValid(step.stepNumber) && !MsStepper.isStepOptional(step.stepNumber)\\\"><i \\nclass=\\\"icon icon-check s18\\\"></i></span></div><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div class=\\\"title\\\" \\ntranslate=\\\"{{step.stepTitleTranslate}}\\\">{{step.stepTitle}}</div><div class=\\\"subtitle\\\" \\nng-if=\\\"MsStepper.isStepOptional(step.stepNumber)\\\">Optional</div></div></md-button></div></div><div \\nclass=\\\"ms-stepper-steps\\\" ng-transclude></div><div class=\\\"ms-stepper-controls\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-accent md-raised\\\" ng-disabled=\\\"MsStepper.isFirstStep()\\\" \\nng-click=\\\"MsStepper.gotoPreviousStep()\\\">Back</md-button><div class=\\\"ms-stepper-dots\\\"><span \\nng-repeat=\\\"step in MsStepper.steps\\\" ng-hide=\\\"MsStepper.isStepHidden(step.stepNumber)\\\" \\nng-class=\\\"{\\'selected md-accent-bg\\':MsStepper.currentStepNumber === $index + 1}\\\"></span></div><md-button \\nclass=\\\"md-accent md-raised\\\" ng-if=\\\"!MsStepper.isLastStep()\\\" \\nng-disabled=\\\"!MsStepper.isStepValid(MsStepper.currentStepNumber)\\\" ng-click=\\\"MsStepper.gotoNextStep()\\\">Next</md-button>\\n<md-button type=\\\"submit\\\" class=\\\"md-accent md-raised\\\" ng-click=\\\"MsStepper.resetForm()\\\" ng-if=\\\"MsStepper.isLastStep()\\\" \\nng-disabled=\\\"!MsStepper.isFormValid()\\\">Submit</md-button></div></div>\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/vertical/vertical.html\",\"<div class=\\\"ms-stepper-vertical\\\"><div class=\\\"ms-stepper-vertical-line\\\"></div><div class=\\\"ms-stepper-steps\\\" \\nng-transclude></div></div>\");\n$templateCache.put(\"app/main/apps/account/views/roles/roles.html\",\"<div id=\\\"roles\\\" class=\\\"page-layout simple pb-16\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between start\\\"><span class=\\\"h2\\\" translate=\\\"ROLES.ROLES_AND_PERMISSIONS\\\"></span><md-button \\nclass=\\\"md-primary md-raised m-0\\\" ng-disabled=\\\"vm.fetching || vm.saving\\\" ng-click=\\\"vm.openRoleDialog($event)\\\" \\nhas-permission-and-feature=\\\"account.roles.create\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span>{{\\'ROLES.NEW_ROLE\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" class=\\\"ml-8 has-permission-and-feature-icon\\\">\\n</md-icon></div></md-button></div><div class=\\\"content ml-8 mr-8 mb-8\\\" layout=\\\"column\\\" flex><md-card><md-card-content \\nlayout=\\\"column\\\" flex><div><md-input-container md-no-float class=\\\"nd-search-input w-200\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"permissions-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.search\\\" \\ntype=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" ng-model-options=\\\"{debounce:500}\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"md-padding\\\" ng-if=\\\"vm.fetching\\\"><md-progress-circular>\\n</md-progress-circular></div><div class=\\\"table-div\\\"><table class=\\\"simple\\\" ng-if=\\\"!vm.fetching\\\"><thead><tr><td \\nclass=\\\"full-width\\\"></td><td ng-repeat=\\\"role in vm.roles | orderBy: \\'id\\'\\\" class=\\\"p-5 role-td\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center start\\\" flex class=\\\"text-center\\\"><span class=\\\"mr-8\\\">{{role.title}}</span><md-menu \\nng-if=\\\"role.company\\\" class=\\\"edit-role-menu\\\"><md-button class=\\\"md-icon-button md-primary\\\" ng-click=\\\"$mdMenu.open(ev)\\\">\\n<md-icon md-font-icon=\\\"icon-dots-vertical\\\" class=\\\"s24 icon-dots-vertical\\\"></md-icon><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\\"ROLES.ACTIONS_TOOLTIP\\\" | translate}}</md-tooltip></md-button><md-menu-content width=\\\"4\\\"><md-menu-item><md-button \\nng-click=\\\"vm.openRoleDialog($event, role, \\'rename\\')\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\"></md-icon><span \\ntranslate=\\\"ROLES.CHANGE_NAME\\\">Change name</span></md-button></md-menu-item><md-menu-item><md-button class=\\\"md-warn\\\" \\nng-click=\\\"vm.openRoleDialog($event, role, \\'delete\\')\\\"><md-icon md-font-icon=\\\"icon-trash\\\"></md-icon><span \\ntranslate=\\\"GENERAL.DELETE\\\">Delete</span></md-button></md-menu-item></md-menu-content></md-menu></div></td></tr></thead>\\n<tbody><tr ng-repeat=\\\"permission in vm.permissions | filter: vm.search | orderBy: $index\\\"><td class=\\\"full-width\\\"><div \\nlayout=\\\"column\\\" ng-class=\\\"::permission.class\\\">{{::permission.name}} <small class=\\\"hint-text\\\">{{::permission.code}}\\n</small></div></td><td ng-repeat=\\\"role in vm.roles | orderBy: \\'id\\'\\\" class=\\\"w-130\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><input type=\\\"checkbox\\\" ng-disabled=\\\"!role.company\\\" \\nng-model=\\\"vm.rolesMatrix[role.id][permission.id]\\\" ng-change=\\\"vm.rolesChanged[role.id] = true\\\"><div \\nng-if=\\\"role.company\\\" class=\\\"w-40\\\"></div></div></td></tr></tbody></table></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end start\\\" class=\\\"mt-16\\\" has-feature-or-addon=\\\"account.roles.create\\\" flex=\\\"1\\\"><md-button class=\\\"stroked\\\" \\nng-disabled=\\\"vm.fetching || vm.saving\\\" has-permission=\\\"account.roles.update\\\" ng-click=\\\"vm.cancel()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.fetching || vm.saving\\\" has-permission=\\\"account.roles.update\\\" ng-click=\\\"vm.save()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular>{{\\'GENERAL.SAVE\\' | translate}}</div></md-button></div></md-card-content>\\n</md-card></div></div>\");\n$templateCache.put(\"app/main/apps/account/views/users/users.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"users\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\"><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"USERS.USERS\\\"></span><div flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" has-permission-and-feature=\\\"app.account.roles\\\" \\nui-sref=\\\"app.account.roles\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span>{{\\'USERS.EDIT_ROLES\\' | translate}}\\n</span><md-icon class=\\\"ml-8 has-permission-and-feature-icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon></div></md-button><md-button \\nng-if=\\\"!vm.hasSubscription\\\" has-permission=\\\"account.users.create\\\" has-permission-and-feature=\\\"app.account.roles\\\" \\nclass=\\\"md-primary md-raised\\\" nd-track-click=\\\"new user\\\" ng-click=\\\"vm.openUserDialog()\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span>\\n{{\\'USERS.NEW_USER\\' | translate}}</span><md-icon class=\\\"ml-8 has-permission-and-feature-icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon></md-button><md-button \\nng-if=\\\"vm.hasSubscription && vm.userLimit\\\" has-permission=\\\"account.users.create\\\" \\nhas-permission-and-feature=\\\"app.account.roles\\\" class=\\\"md-primary md-raised\\\" nd-track-click=\\\"new user\\\" \\nng-click=\\\"vm.openUserDialog()\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" ng-if=\\\"vm.allowUserCreation()\\\" \\nclass=\\\"mr-8\\\"></md-icon><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nng-if=\\\"vm.blockUserCreation()\\\" class=\\\"mr-8\\\"></md-icon><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\" \\nng-if=\\\"!vm.allowUserCreation() && !vm.blockUserCreation()\\\"></md-icon><span>{{\\'USERS.NEW_USER\\' | translate}}</span>\\n<md-icon class=\\\"ml-8 has-permission-and-feature-icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon></md-button></div></div><div \\nclass=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><md-content \\nclass=\\\"content no-padding\\\" flex ms-scroll><div class=\\\"navigation-simple pv-24\\\" layout=\\\"column\\\"><div class=\\\"ph-20\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon>\\n<md-select class=\\\"status-select\\\" flex multiple=\\\"true\\\" ng-change=\\\"vm.reloadUsers()\\\" ng-model=\\\"vm.status.filters.roles\\\" \\nplaceholder=\\\"{{\\'USERS.ALL_USERS\\' | translate}}\\\"><md-option ng-value=\\\"null\\\">{{\\'USERS.ALL_USERS\\' | translate}}\\n</md-option><md-option ng-repeat=\\\"userRole in vm.userRoles | orderBy: \\'id\\'\\\" ng-value=\\\"userRole.id\\\"><span \\nng-if=\\\"vm.USER_ROLES[userRole.id]\\\">{{\\'USERS.\\' + vm.USER_ROLES[userRole.id] | translate}}</span><span \\nng-if=\\\"!vm.USER_ROLES[userRole.id]\\\">{{userRole.name}}</span></md-option></md-select></div></div></md-content>\\n</md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<input id=\\\"user-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-change=\\\"vm.reloadUsers()\\\" ng-model=\\\"vm.status.search\\\" \\nng-model-options=\\\"{debounce:200}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container><p></p></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll>\\n<nd-users-list roles=\\\"vm.userRolesDict\\\" status=\\\"vm.status\\\"></nd-users-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoice/invoice.html\",\"<div class=\\\"blank\\\" id=\\\"accounting-invoice\\\" layout=\\\"column\\\"><form name=\\\"invoiceForm\\\"><div \\nng-include=\\\"\\'app/main/apps/accounting/views/invoice/subviews/invoice-header.html\\'\\\"></div><div \\nclass=\\\"content mr-8 ml-8 mb-8\\\" layout=\\\"column\\\" ms-scroll><div class=\\\"did-you-know yellow m-16\\\" \\nng-if=\\'vm.invoice.customer && vm.invoice.holded_invoice_data && vm.invoice.customer_instance.vat == \\\"\\\"\\'><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon></div><div flex layout=\\\"column\\\"><span class=\\\"font-size-14\\\">\\n{{\\'INVOICE.MISSING_NIF_BANNER_TITLE\\' | translate}}</span> <span class=\\\"secondary-text\\\" \\ntranslate=\\\"INVOICE.MISSING_NIF_BANNER_MSG\\\" translate-values=\\\"{site_name: vm.order.site.name}\\\"></span></div></div></div>\\n<md-card class=\\\"mt-0\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" \\nflex translate=\\\"INVOICE.DETAILS\\\"></span></div></md-card-title-text></md-card-title><md-card-content><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\">\\n<nd-contacts contact-id=\\\"vm.invoice.customer\\\" contact-id-change=\\\"vm.contactChanged()\\\" \\ncontact-instance=\\\"vm.invoice.customer_instance\\\" create-button=\\\"true\\\" required=\\\"vm.invoice.isValidForHolded()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"></nd-contacts><small class=\\\"mt-5 amber-700-fg\\\" \\nng-if=\\\"!vm.invoice.customer && vm.invoice.holded_invoice_data && !vm.invoice.is_received\\\">\\n{{\\'INVOICE.HOLDED_REQUIRED_FIELD\\' | translate}} </small><small class=\\\"mt-5 amber-700-fg\\\" \\nng-if=\\\"!vm.invoice.customer && vm.kubibaiInstalledAndActive() && !vm.invoice.is_received\\\">\\n{{\\'INVOICE.KUBIBAI_REQUIRED_FIELD\\' | translate}}</small></div><md-input-container flex=\\\"100\\\" flex-gt-md=\\\"25\\\" \\nflex-gt-sm=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.BILLING_ADDRESS\\\">Billing Address</label>\\n<md-select \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || (vm.isDisabledInvoice())\\\" \\nng-model=\\\"vm.invoice.billing_address\\\" placeholder=\\\"{{\\'INVOICE.BILLING_ADDRESS\\' | translate}}\\\"><md-option \\nng-if=\\\"postalAddress.is_billing_address\\\" ng-repeat=\\\"postalAddress in vm.invoice.customer_instance.postal_addresses\\\" \\nng-value=\\\"postalAddress.id\\\"><span ng-if=\\\"postalAddress.name\\\">{{postalAddress.name}}</span> <span \\nng-if=\\\"postalAddress.name && postalAddress.address_1\\\">, </span><span ng-if=\\\"postalAddress.address_1\\\">\\n{{postalAddress.address_1}}, {{postalAddress.city}}</span></md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><md-input-container flex=\\\"50\\\" flex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.BILLING_DATE\\\">Billing date</label><md-datepicker flex \\nmd-hide-icons=\\\"calendar\\\" md-open-on-focus \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || (vm.isDisabledInvoice())\\\" \\nng-model=\\\"vm.invoice.billing_date\\\"></md-datepicker><small class=\\\"mt-5 amber-700-fg\\\" \\nng-if=\\\"!vm.invoice.billing_date && vm.invoice.holded_invoice_data\\\">{{\\'INVOICE.HOLDED_REQUIRED_FIELD\\' | translate}}\\n</small></md-input-container><md-input-container flex=\\\"40\\\" flex-gt-md=\\\"20\\\" flex-gt-sm=\\\"40\\\" layout=\\\"column\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.EXPIRATION_DATE\\\">Expiration date</label><md-datepicker \\nmd-hide-icons=\\\"calendar\\\" md-open-on-focus \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || (vm.isDisabledInvoice())\\\" \\nng-model=\\\"vm.invoice.expiration_date\\\"></md-datepicker></md-input-container><md-input-container class=\\\"pt-10\\\" flex=\\\"10\\\" \\nflex-gt-md=\\\"5\\\" flex-gt-sm=\\\"10\\\" has-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" \\nlayout=\\\"row\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><div ng-hide=\\\"vm.isDisabledInvoice()\\\"><a href=\\\"#\\\" \\nng-class=\\\"{\\'adisabled\\': vm.isDisabledInvoice()}\\\" ng-click=\\\"vm.addExpirationDays(30)\\\">30</a> / <a href=\\\"#\\\" \\nng-class=\\\"{\\'adisabled\\': vm.isDisabledInvoice()}\\\" ng-click=\\\"vm.addExpirationDays(60)\\\">60</a></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><label \\ntranslate=\\\"INVOICE.SERIAL_NUMBER\\\">Serial Number</label><md-select md-on-close=\\\"serialNumberTypesSearch=\\'\\'\\\" \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || vm.isDisabledInvoice() || vm.invoice.autocode\\\" \\nrequired ng-model=\\\"vm.invoice.serial_number_type\\\"><md-select-header class=\\\"serial-number-types-select-header\\\"><input \\nclass=\\\"md-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"serialNumberTypesSearch\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.serialNumberTypeType | filter:{name: serialNumberTypesSearch} | orderBy: \\'name\\'\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-if=\\\"!vm.isNewInvoice\\\"><label \\ntranslate=\\\"INVOICE.SERIAL_NUMBER\\\">Serial Number</label><input \\nng-disabled=\\\"!vm.invoice.autocode || vm.isDisabledInvoice() || ((vm.kubibaiInstalledAndActive() || vm.send_to_kubibai) && !vm.invoice.isPurchaseInvoice())\\\" \\nng-model=\\\"vm.invoice.autocode\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-md=\\\"50\\\" flex-gt-sm=\\\"100\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.CONCEPT\\\">Concept</label><input \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" maxlength=\\\"255\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-model=\\\"vm.invoice.concept\\\"></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><label translate=\\\"INVOICE.PRICING_TIER\\\">\\nPricing Tier</label><md-select ng-change=\\\"vm.confirmInvoicePricingTierUpdate()\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-model=\\\"vm.invoice.pricing_tier\\\"><md-option ng-repeat=\\\"(id, pricingTier) in vm.pricingTiersById\\\" \\nng-value=\\\"pricingTier.id\\\">{{pricingTier.code}} - {{pricingTier.name}}</md-option></md-select></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-md=\\\"25\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><label \\ntranslate=\\\"INVOICE.CURRENCY\\\">Currency</label><md-select \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || (vm.isDisabledInvoice())\\\" \\nng-model=\\\"vm.invoice.currency\\\" required><md-option ng-repeat=\\\"(key, symbol) in vm.currencies\\\" ng-value=\\\"key\\\">\\n{{key}} ({{symbol}})</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-md=\\\"25\\\"><label translate=\\\"INVOICE.LANGUAGE\\\">Language</label><md-select \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\'))\\\" \\nng-model=\\\"vm.invoice.mutable_fields.language\\\" required><md-option ng-repeat=\\\"(key, value) in vm.languages\\\" \\nng-value=\\\"key\\\">{{value}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-if=\\\"vm.fiscalAddresses.length\\\"><label translate=\\\"INVOICE.FISCAL_ADDRESS\\\">Fiscal Address</label><md-select \\nng-disabled=\\\"(!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\')) || (vm.isDisabledInvoice())\\\" \\nng-change=\\\"vm.fiscalAddressChanged()\\\" ng-model=\\\"vm.invoice.fiscal_address\\\"><md-option ng-value=\\\"null\\\">\\n{{\\'INVOICE.COMPANYS_FISCAL_ADDRESS\\' | translate }}</md-option><md-option \\nng-repeat=\\\"fiscalAddress in vm.fiscalAddresses\\\" ng-value=\\\"fiscalAddress.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"w-60 mr-8\\\" ng-if=\\\"fiscalAddress.logo\\\" ng-src=\\\"{{fiscalAddress.logo}}\\\"> <b>\\n{{fiscalAddress.legal_name}}</b> <span class=\\\"secondary-text ml-5\\\">{{fiscalAddress | location}}</span></div>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div></md-card-content></md-card>\\n<md-card \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE && !vm.invoice.is_received && vm.invoice.sale_order_deliveries.length\\\">\\n<md-card-title class=\\\"border-bottom\\\"><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"INVOICE.WHOLESALE_SALES_DELIVERY_NOTES\\\"></span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"no-padding\\\"><div class=\\\"border-bottom\\\" ng-repeat=\\\"sale_order_delivery in vm.invoice.sale_order_deliveries\\\"><div \\nclass=\\\"h-40 pl-20 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span translate=\\\"INVOICE.DELIVERY_NOTE\\\">\\n</span>&nbsp;&nbsp; <a class=\\\"md-primary text-bold\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-if=\\\"!sale_order_delivery.loading\\\" \\nui-sref=\\\"app.wholesale.sales.sale.delivery({id:sale_order_delivery.sale_order, orderDeliveryId: sale_order_delivery.id})\\\">\\n{{sale_order_delivery.autocode}} </a><span style=\\\"margin-bottom: 2px\\\">&nbsp;&nbsp;|&nbsp;&nbsp;</span> <span \\ntranslate=\\\"SALE.SALE_ORDER\\\"></span>&nbsp;&nbsp; <a class=\\\"md-primary text-bold\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nui-sref=\\\"app.wholesale.sales.sale.products({id:sale_order_delivery.sale_order})\\\">\\n{{sale_order_delivery.sale_order_autocode}} </a><span flex></span><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.removeDeliveryNote(sale_order_delivery)\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-if=\\\"!sale_order_delivery.loading\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button><md-progress-circular \\nclass=\\\"mh-8 pl-10\\\" md-diameter=\\\"20px\\\" ng-if=\\\"sale_order_delivery.loading\\\"></md-progress-circular></div><div \\nclass=\\\"p-0\\\"><div class=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\" layout-wrap><table \\nclass=\\\"m-0\\\" style=\\\"border-spacing: 0\\\" flex=\\\"100\\\" ng-if=\\\"!sale_order_delivery.loading\\\"><tr><td \\nclass=\\\"border-right h-40 text-left pl-20\\\" translate=\\\"INVOICE.REFERENCE\\\" width=\\\"20%\\\">Reference</td><td \\nclass=\\\"border-right h-40 pl-10\\\" translate=\\\"INVOICE.DESCRIPTION\\\" width=\\\"30%\\\">Description</td><td \\nclass=\\\"border-right h-40 text-center pl-10\\\" translate=\\\"INVOICE.QUANTITY\\\" width=\\\"40%\\\">Quantity</td><td \\nclass=\\\"h-40 text-center pl-10\\\" translate=\\\"INVOICE.PRICE\\\" width=\\\"10%\\\">Price</td></tr><tr \\nclass=\\\"invoice-line delivery-note-line\\\" ng-repeat=\\\"order_product in sale_order_delivery.order_products\\\"><td \\nclass=\\\"border-right border-top\\\" width=\\\"20%\\\"><div class=\\\"pl-10\\\">{{order_product.product_code}}</div></td><td \\nclass=\\\"border-right border-top pl-10\\\" width=\\\"30%\\\">{{order_product.product_name}}</td><td \\nclass=\\\"border-right border-top text-center sizes\\\" width=\\\"43%\\\"><table class=\\\"size-table\\\" width=\\\"100%\\\"><tr><td \\nclass=\\\"border-bottom md-background-bg md-hue-2\\\"></td><td \\nclass=\\\"size-cell border-bottom border-left md-background-bg md-hue-2\\\" ng-repeat=\\\"size in order_product.size_variants\\\">\\n<span class=\\\"secondary-text text-capitalized\\\">{{size.code}}</span></td></tr><tr \\nng-repeat=\\\"color in order_product.color_variants\\\"><td class=\\\"color-cell text-left text-capitalized\\\">{{color.name}}</td>\\n<td class=\\\"size-cell border-left text-center\\\" ng-repeat=\\\"size in order_product.size_variants\\\"><div>\\n{{vm.getOrderDeliveryProductAmount(sale_order_delivery, order_product.id, color.id, size.id)}}</div></td></tr></table>\\n</td><td class=\\\"border-top text-center\\\" width=\\\"7%\\\"><div>\\n{{vm.getOrderDeliveryProductPriceExclTax(sale_order_delivery, order_product.total_price_excl_tax)}}</div></td></tr>\\n</table></div></div></div><div class=\\\"h-40\\\" flex=\\\"100\\\"></div></md-card-content></md-card><md-card \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE && vm.invoice.is_received\\\"><md-card-title class=\\\"border-bottom\\\">\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVOICE.PURCHASES_DELIVERY_NOTES\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"no-padding\\\"><div class=\\\"border-bottom\\\" \\nng-repeat=\\\"purchase_order_delivery in vm.invoice.purchase_order_deliveries\\\"><div class=\\\"h-40 pl-20 border-bottom\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span translate=\\\"INVOICE.DELIVERY_NOTE\\\"></span>&nbsp;&nbsp; <a \\nclass=\\\"md-primary text-bold\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-if=\\\"!purchase_order_delivery.loading\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:purchase_order_delivery.purchase_order, orderDeliveryId: purchase_order_delivery.id})\\\">\\n{{purchase_order_delivery.autocode}} </a><span style=\\\"margin-bottom: 2px\\\">&nbsp;&nbsp;|&nbsp;&nbsp;</span> <span \\ntranslate=\\\"PRODUCT.PURCHASE_ORDER\\\"></span>&nbsp;&nbsp; <a class=\\\"md-primary text-bold\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.products({id:purchase_order_delivery.purchase_order})\\\">\\n{{purchase_order_delivery.purchase_order_autocode}} </a><span flex></span><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.removeDeliveryNote(purchase_order_delivery, true)\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-if=\\\"!purchase_order_delivery.loading\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button>\\n<md-progress-circular class=\\\"mh-8 pl-10\\\" md-diameter=\\\"20px\\\" ng-if=\\\"purchase_order_delivery.loading\\\">\\n</md-progress-circular></div><div class=\\\"p-0\\\"><div class=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" layout-wrap><table class=\\\"m-0\\\" style=\\\"border-spacing: 0\\\" flex=\\\"100\\\" \\nng-if=\\\"!purchase_order_delivery.loading\\\"><tr><td class=\\\"border-right h-40 text-left pl-20\\\" \\ntranslate=\\\"INVOICE.REFERENCE\\\" width=\\\"20%\\\">Reference</td><td class=\\\"border-right h-40 pl-10\\\" \\ntranslate=\\\"INVOICE.DESCRIPTION\\\" width=\\\"30%\\\">Description</td><td class=\\\"border-right h-40 pl-10 text-center\\\" \\ntranslate=\\\"INVOICE.QUANTITY\\\" width=\\\"40%\\\">Quantity</td><td class=\\\"h-40 pl-10 text-center\\\" translate=\\\"INVOICE.PRICE\\\" \\nwidth=\\\"10%\\\">Price</td></tr><tr class=\\\"invoice-line delivery-note-line\\\" \\nng-repeat=\\\"order_product in purchase_order_delivery.order_products\\\"><td class=\\\"border-top border-right\\\" width=\\\"20%\\\">\\n<div class=\\\"pl-10\\\">{{order_product.product_code}}</div></td><td class=\\\"border-top border-right pl-10\\\" width=\\\"30%\\\">\\n{{order_product.product_name}}</td><td class=\\\"border-top border-right text-center sizes\\\" width=\\\"43%\\\"><table \\nclass=\\\"size-table\\\" width=\\\"100%\\\"><tr><td class=\\\"border-bottom md-background-bg md-hue-2\\\"></td><td \\nclass=\\\"size-cell border-bottom border-left md-background-bg md-hue-2\\\" ng-repeat=\\\"size in order_product.size_variants\\\">\\n<span class=\\\"secondary-text text-capitalized\\\">{{size.code}}</span></td></tr><tr \\nng-repeat=\\\"color in order_product.color_variants\\\"><td class=\\\"color-cell text-left text-capitalized\\\">{{color.name}}</td>\\n<td class=\\\"size-cell border-left text-center\\\" ng-repeat=\\\"size in order_product.size_variants\\\">\\n{{purchase_order_delivery.odpvByColorAndSize[order_product.id][color.id][size.id].prepared_amount || purchase_order_delivery.odpvByColorAndSize[order_product.id][color.id][size.id].received_amount || 0}}\\n</td></tr></table></td><td class=\\\"border-top text-center\\\" width=\\\"7%\\\">\\n{{order_product.product_provider_price ? order_product.product_provider_price : order_product.ddp_price | price}} {{vm.invoice.currency | currencyCharacter}}\\n</td></tr></table></div></div></div><div class=\\\"h-40\\\" flex=\\\"100\\\"></div></md-card-content></md-card><md-card>\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" flex translate=\\\"INVOICE.INVOICE_LINES\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"no-padding\\\"><div ng-if=\\\"vm.invoice.pos_order && vm.invoice.is_retail\\\" \\nclass=\\\"h-40 pl-20 border-top\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span translate=\\\"SALES_LOG.SALE\\\"></span>\\n&nbsp;&nbsp; <a class=\\\"md-primary text-bold\\\" has-permission=\\\"app.sale,app.sale.sales_log\\\" \\nui-sref=\\\"app.sale.sales_log.order({id:vm.invoice.pos_order.id})\\\">{{vm.invoice.pos_order.autocode}} </a><span flex>\\n</span></div><table class=\\\"m-0 full-width\\\" style=\\\"border-spacing: 0\\\" flex=\\\"100\\\"><tr \\nng-if=\\\"vm.invoice.invoice_lines.length\\\"><td class=\\\"border-right border-top h-40\\\" width=\\\"5%\\\"></td><td \\nclass=\\\"border-right border-top h-40 text-left\\\" width=\\\"15%\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'label\\')\\\"><span class=\\\"text-truncate\\\" flex>\\n{{\\'INVOICE.REFERENCE\\' | translate }}</span><md-icon class=\\\"s18\\\" md-font-icon=\\\"{{vm.orderedIcon.label}}\\\"></md-icon>\\n</div></td><td class=\\\"border-right border-top h-40\\\" width=\\\"30%\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'description\\')\\\"><span class=\\\"text-truncate\\\" flex>\\n{{\\'INVOICE.DESCRIPTION\\' | translate }}</span><md-icon class=\\\"s18\\\" md-font-icon=\\\"{{vm.orderedIcon.description}}\\\">\\n</md-icon></div></td><td class=\\\"border-right border-top h-40 w-75 pl-8 pr-5\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'object_delivery_autocode\\')\\\"><span \\nclass=\\\"text-truncate\\\" flex>{{\\'INVOICE.ORIGIN\\' | translate }}</span><md-icon class=\\\"s18\\\" \\nmd-font-icon=\\\"{{vm.orderedIcon.object_delivery_autocode}}\\\"></md-icon></div></td><td \\nclass=\\\"border-right border-top h-40 text-left nowrap w-75\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'quantity\\')\\\"><span class=\\\"text-truncate\\\" flex>\\n{{\\'INVOICE.QUANTITY\\' | translate }}</span><md-icon class=\\\"s18\\\" md-font-icon=\\\"{{vm.orderedIcon.quantity}}\\\"></md-icon>\\n</div></td><td class=\\\"border-right border-top h-40 text-center nowrap w-75\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'price_excl_tax\\')\\\"><span \\nclass=\\\"text-truncate\\\" flex>{{\\'INVOICE.PRICE\\' | translate }}</span><md-icon class=\\\"s18\\\" \\nmd-font-icon=\\\"{{vm.orderedIcon.price_excl_tax}}\\\"></md-icon></div></td><td \\nclass=\\\"border-right border-top h-40 text-center nowrap w-75\\\" nowrap=\\\"nowrap\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'discount\\')\\\"><span \\nclass=\\\"text-truncate\\\" flex>{{\\'INVOICE.DISCOUNT\\' | translate }}</span><md-icon class=\\\"s18\\\" \\nmd-font-icon=\\\"{{vm.orderedIcon.discount}}\\\"></md-icon></div></td><td \\nclass=\\\"border-right border-top h-40 text-center nowrap w-75\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"cursor-pointer pl-8 pr-5\\\" ng-click=\\\"vm.orderBy(\\'total_price_excl_tax\\')\\\"><span class=\\\"text-truncate\\\" flex>\\n{{\\'INVOICE.SUBTOTAL\\' | translate }}</span><md-icon class=\\\"s18\\\" md-font-icon=\\\"{{vm.orderedIcon.total_price_excl_tax}}\\\">\\n</md-icon></div></td><td class=\\\"border-right border-top h-40 text-center w-75 pl-8 pr-5\\\"><span class=\\\"text-truncate\\\" \\nflex>{{\\\"INVOICE.TAXES\\\" | translate}}</span></td><td class=\\\"border-right border-top h-40 text-center nowrap w-75\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"cursor-pointer pl-8 pr-5\\\" \\nng-click=\\\"vm.orderBy(\\'total_price_incl_tax\\')\\\"><span class=\\\"text-truncate\\\" flex>{{\\'INVOICE.TOTAL\\' | translate }}</span>\\n<md-icon class=\\\"s18\\\" md-font-icon=\\\"{{vm.orderedIcon.total_price_incl_tax}}\\\"></md-icon></div></td><td \\nclass=\\\"border-top h-40 text-center w-50\\\" has-permission=\\\"accounting.invoices.invoice.remove_line\\\"></td></tr><tr \\nclass=\\\"invoice-line\\\" ng-repeat=\\\"invoice_line in vm.invoice.invoice_lines\\\"><td \\nclass=\\\"border-right border-top h-40 text-center\\\" width=\\\"5%\\\"><md-button class=\\\"md-icon-button no-margin\\\" \\nhas-permission=\\\"accounting.invoices.invoice.add_line\\\" ng-click=\\\"vm.openProductSearchDialog($event, $index\t)\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>\\n{{\\'GENERAL.SEARCH\\' | translate}}</md-tooltip></md-button></td><td class=\\\"border-right border-top h-40\\\" width=\\\"15%\\\">\\n<input class=\\\"text-left\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-model=\\\"invoice_line.label\\\" \\nplaceholder=\\\"{{\\'INVOICE.TYPE_CONCEPT\\' | translate}}\\\" required type=\\\"text\\\"></td><td \\nclass=\\\"border-right border-top h-40\\\" width=\\\"30%\\\"><textarea ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-model=\\\"invoice_line.description\\\" placeholder=\\\"{{\\'INVOICE.DESCRIPTION\\' | translate}}\\\" type=\\\"text\\\"></textarea></td><td\\n class=\\\"border-right border-top h-40 text-center w-75 md-background-bg md-hue-2\\\"><a \\nclass=\\\"cursor-pointer text-truncate\\\" \\nng-if=\\\"invoice_line.related_object_id && invoice_line.related_object_type==\\'TransferOrder\\'\\\" \\nui-sref=\\\"app.inventory.transfers.transfer.delivery({id:invoice_line.related_object_id})\\\">\\n{{invoice_line.related_object_autocode}}<md-tooltip>{{invoice_line.related_object_autocode}}</md-tooltip></a><a \\nclass=\\\"cursor-pointer text-truncate\\\" \\nng-if=\\\"invoice_line.related_object_id && invoice_line.related_object_type==\\'PosOrder\\'\\\" \\nui-sref=\\\"app.sale.sales_log.order({id:invoice_line.related_object_id})\\\">{{invoice_line.related_object_autocode}}\\n<md-tooltip>{{invoice_line.related_object_autocode}}</md-tooltip></a></td><td \\nclass=\\\"border-right border-top h-40 text-center w-75\\\"><input ng-if=\\\"!vm.invoice.isCorrective() || vm.invoice.autocode\\\" \\nng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" \\nng-model=\\\"invoice_line.quantity\\\" required step=\\\"1\\\" type=\\\"number\\\"> <input \\nng-if=\\\"vm.invoice.isCorrective() && !vm.invoice.autocode\\\" ng-init=\\\"invoice_line.quantity\\\" \\nng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" \\nng-model=\\\"invoice_line.quantity\\\" required step=\\\"1\\\" max=\\\"-1\\\" \\nmin=\\\"{{-invoice_line.remaining_amount_to_correct_from_original}}\\\" type=\\\"number\\\"></td><td \\nclass=\\\"border-right border-top h-40 text-center w-75\\\"><md-input-container class=\\\"md-block m-0\\\" md-no-float \\nng-if=\\\"!invoice_line.product_variant\\\"><input name=\\\"price_excl_tax_{{$index}}\\\" \\nng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" \\nng-model=\\\"invoice_line.price_excl_tax\\\" placeholder=\\\"0.00\\\" required type=\\\"number\\\"><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><input ng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" \\nng-if=\\\"invoice_line.product_variant\\\" ng-model=\\\"invoice_line.custom_price_excl_tax\\\" \\nplaceholder=\\\"{{invoice_line.price_excl_tax}}\\\" type=\\\"number\\\"></td><td \\nclass=\\\"border-right border-top h-40 text-center w-75\\\"><input ng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" \\nng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" ng-model=\\\"invoice_line.discount\\\" required step=\\\"0.01\\\" type=\\\"number\\\"></td><td \\nclass=\\\"border-right border-top h-40 text-center md-background-bg md-hue-2 w-75\\\">\\n{{invoice_line.total_price_excl_tax | price}} {{vm.invoice.currency | currencyCharacter}}</td><td \\nclass=\\\"border-right border-top h-40 w-75\\\"><md-select ng-change=\\\"vm.refreshTotalPrice(invoice_line)\\\" class=\\\"pl-5\\\" \\nng-disabled=\\\"vm.isInvoiceLineDisabled()\\\" ng-model=\\\"invoice_line.tax\\\" required><md-option ng-repeat=\\\"tax in vm.taxes\\\" \\nng-value=\\\"tax.id\\\">{{tax.name}}</md-option></md-select></td><td \\nclass=\\\"border-right border-top h-40 text-center md-background-bg md-hue-2 w-75\\\">\\n{{invoice_line.total_price_incl_tax | price}} {{vm.invoice.currency | currencyCharacter}}</td><td \\nclass=\\\"border-top h-40 text-center w-50\\\" has-permission=\\\"accounting.invoices.invoice.remove_line\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.removeLine(invoice_line)\\\" ng-disabled=\\\"vm.isInvoiceLineDisabled()\\\"><md-icon \\nmd-font-icon=\\\"icon-delete\\\"></md-icon></md-button></td></tr></table><div class=\\\"h-40\\\" flex=\\\"100\\\" \\nng-class=\\\"{\\'border-top\\': vm.invoice.invoice_lines.length}\\\"></div></md-card-content></md-card><div flex=\\\"100\\\" \\nhas-permission=\\\"accounting.invoices.invoice.add_line\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-primary stroked\\\" ng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE\\\" ng-click=\\\"vm.addDeliveryNote($event)\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon><span translate=\\\"INVOICE.ADD_DELIVERY_NOTE\\\"></span></div></md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.addLine()\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span \\ntranslate=\\\"INVOICE.ADD_INVOICE_LINE\\\"></span></div></md-button></div><div flex=\\\"100\\\" layout=\\\"row\\\"><md-card flex=\\\"100\\\">\\n<md-card-content><div flex=\\\"100\\\" layout=\\\"row\\\" layout-wrap><md-input-container class=\\\"mb-0 pr-10\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"INVOICE.NOTES\\\">Notes</label><textarea \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" \\nng-model=\\\"vm.invoice.mutable_fields.notes\\\"></textarea></md-input-container><md-input-container class=\\\"mb-0 pr-10\\\" \\nflex=\\\"50\\\"><label translate=\\\"INVOICE.PAYMENT_METHOD\\\">Payment Method</label><md-select \\nng-disabled=\\\"vm.invoice.status >= 1 || (!session.hasPermission(\\'accounting.invoices.create\\') && !session.hasPermission(\\'accounting.invoices.invoice.update\\'))\\\" \\nng-model=\\\"vm.invoice.mutable_fields.payment_method\\\"><md-option ng-repeat=\\\"paymentMethod in vm.paymentMethodsData\\\" \\nng-value=\\\"paymentMethod.id\\\">{{paymentMethod.name}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><md-input-container class=\\\"mb-0 pr-10\\\" flex=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><label \\ntranslate=\\\"INVOICE.PRIVATE_NOTES\\\">Private Notes</label><textarea \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" \\nng-model=\\\"vm.invoice.mutable_fields.private_notes\\\"></textarea></md-input-container><md-input-container \\nclass=\\\"mb-0 pr-10\\\" flex=\\\"20\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-if=\\\"!vm.invoice.discount_as_absolut\\\"><label \\ntranslate=\\\"INVOICE.DISCOUNT\\\"></label><input \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" ng-change=\\\"vm.refreshAllTotalPrices()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-model=\\\"vm.invoice.discount\\\" type=\\\"number\\\"></md-input-container>\\n<md-input-container class=\\\"mb-0 pr-10\\\" flex=\\\"20\\\" ng-if=\\\"vm.invoice.discount_as_absolut\\\"><label \\ntranslate=\\\"INVOICE.DISCOUNT_AS_ABSOLUT\\\" translate-values=\\\"{currency:vm.currencies[vm.invoice.currency]}\\\"></label><input\\n has-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" ng-change=\\\"vm.refreshAllTotalPrices()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-model=\\\"vm.invoice.subtotal_discount\\\" type=\\\"number\\\"></md-input-container>\\n<md-input-container class=\\\"mb-0 pr-10\\\" flex=\\\"20\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-if=\\\"!vm.invoice.discount_as_absolut\\\"><label translate=\\\"INVOICE.EARLY_PAYMENT_DISCOUNT\\\"></label><input \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" ng-change=\\\"vm.refreshAllTotalPrices()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-model=\\\"vm.invoice.early_payment_discount\\\" type=\\\"number\\\"></md-input-container>\\n<md-input-container class=\\\"mb-0 pr-10\\\" flex=\\\"20\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-if=\\\"vm.invoice.discount_as_absolut\\\"><label translate=\\\"INVOICE.EARLY_PAYMENT_DISCOUNT_AS_ABSOLUT\\\" \\ntranslate-values=\\\"{currency:vm.currencies[vm.invoice.currency]}\\\"></label><input \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" ng-change=\\\"vm.refreshAllTotalPrices()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-model=\\\"vm.invoice.subtotal_early_payment_discount\\\" type=\\\"number\\\"></md-input-container><md-select flex=\\\"10\\\" \\nng-change=\\\"vm.refreshAllTotalPrices()\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\" \\nng-model=\\\"vm.invoice.discount_as_absolut\\\"><md-option ng-value=\\\"true\\\">{{vm.currencies[vm.invoice.currency]}}</md-option>\\n<md-option ng-value=\\\"false\\\">%</md-option></md-select><md-input-container class=\\\"mb-0 pr-10\\\" flex=\\\"50\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\"><md-checkbox \\nhas-permission=\\\"accounting.invoices.create,accounting.invoices.invoice.update\\\" ng-change=\\\"vm.excludeTaxesHasChanged()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-model=\\\"vm.invoice.exclude_taxes\\\" type=\\\"checkbox\\\"><span \\ntranslate=\\\"INVOICE.EXCLUDE_TAXES\\\">Exclude Taxes</span></md-checkbox></md-input-container><md-input-container \\nclass=\\\"mb-0 pr-10\\\" flex=\\\"50\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><md-checkbox ng-change=\\\"vm.refreshAllTotalPrices()\\\" \\nng-disabled=\\\"vm.isDisabledInvoice()\\\" ng-if=\\\"!vm.invoice.exclude_taxes\\\" ng-model=\\\"vm.invoice.surcharge\\\" type=\\\"checkbox\\\">\\n<span translate=\\\"INVOICE.SURCHARGE\\\">Surcharge</span></md-checkbox></md-input-container></div></md-card-content>\\n</md-card><md-card flex=\\\"30\\\"><md-card-content flex layout=\\\"column\\\"><div flex=\\\"100\\\" layout=\\\"column\\\"><div flex \\nlayout=\\\"column\\\"><div class=\\\"h3 mb-8\\\" layout=\\\"row\\\"><span flex translate=\\\"INVOICE.SUBTOTAL\\\"></span> <span>\\n{{(vm.invoice.total_excl_tax || 0) | price}} {{vm.invoice.currency | currencyCharacter}}</span></div><div \\nclass=\\\"h4 mb-8\\\" layout=\\\"row\\\" ng-if=\\\"vm.invoice.discount\\\"><span>{{\\\"INVOICE.DISCOUNT\\\" | translate}} (<span>\\n{{vm.invoice.discount | price}}</span>%)</span> <span flex></span> <span>\\n- {{(vm.invoice.subtotal_discount || 0) | price}} {{vm.invoice.currency | currencyCharacter}}</span></div><div \\nclass=\\\"h4 mb-8\\\" layout=\\\"row\\\" ng-if=\\\"vm.invoice.early_payment_discount\\\"><span>\\n{{\\\"INVOICE.EARLY_PAYMENT_DISCOUNT\\\" | translate}} (<span>{{vm.invoice.early_payment_discount | price}}</span>%)</span> \\n<span flex></span> <span>\\n- {{(vm.invoice.subtotal_early_payment_discount || 0) | price}} {{vm.invoice.currency | currencyCharacter}}</span>\\n</div><div class=\\\"h3 mb-8\\\" layout=\\\"row\\\" ng-if=\\\"vm.invoice.discount > 0\\\"><span flex \\ntranslate=\\\"INVOICE.DISCOUNTED_SUBTOTAL\\\"></span> <span>\\n{{vm.invoice.applyDiscount((vm.invoice.total_excl_tax || 0)) | price}} {{vm.invoice.currency | currencyCharacter}}\\n</span></div><div class=\\\"h4 mb-8\\\" layout=\\\"row\\\" \\nng-if=\\\"!vm.invoice.exclude_taxes && value.total_price_excl_tax_sum && value.percent_value\\\" \\nng-repeat=\\\"(key, value) in vm.invoice.subtotals_by_tax\\\"><span>{{value.name}} (<span ng-if=\\\"!vm.invoice.surcharge\\\">\\n{{value.percent_value}}</span><span ng-if=\\\"vm.invoice.surcharge\\\">{{value.percent_value}} + {{value.surcharge}}</span>%)\\n</span> <span flex></span> <span>{{value.surcharge_amount | price}} {{vm.invoice.currency | currencyCharacter}}</span>\\n</div></div><md-divider class=\\\"mb-8\\\"></md-divider><div class=\\\"h1\\\" layout=\\\"row\\\"><span flex translate=\\\"INVOICE.TOTAL\\\">\\n</span> <span>{{vm.invoice.getFinalTotalInclTax() | price}} {{vm.invoice.currency | currencyCharacter}}</span></div>\\n</div></md-card-content></md-card></div><md-card ng-if=\\\"!vm.isNewInvoice\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3 mr-8\\\" translate=\\\"ORDER.PAYMENT\\\"></span> <span \\nclass=\\\"text-boxed red\\\" \\nng-if=\\\"vm.invoice.mutable_fields.payment_status === vm.INVOICE_PAYMENT_STATUSES.PAYMENT_STATUS_PENDING\\\" \\ntranslate=\\\"INVOICE.PENDING\\\"></span> <span class=\\\"text-boxed green\\\" \\nng-if=\\\"vm.invoice.mutable_fields.payment_status === vm.INVOICE_PAYMENT_STATUSES.PAYMENT_STATUS_PAID\\\" \\ntranslate=\\\"INVOICE.PAID\\\"></span></div></md-card-title-text></md-card-title><md-card-content><table class=\\\"simple\\\" \\nms-responsive-table><thead><tr><th translate=\\\"ORDER.PAYMENT_METHOD\\\">Payment Method</th><th translate=\\\"ORDER.AMOUNT\\\">\\nAmount</th><th translate=\\\"ORDER.DATE\\\">Date</th><th class=\\\"text-right\\\" translate=\\\"GENERAL.ACTIONS\\\">Actions</th></tr>\\n</thead><tbody><tr ng-repeat=\\\"payment in vm.invoice.payments | orderBy: \\'id\\'\\\"><td \\nng-if=\\\"payment.payment_method_instance\\\" style=\\\"color:#{{payment.payment_method_instance.foreground_color}}\\\"><span \\nng-if=\\\"payment.payment_method_instance.company\\\">{{payment.payment_method_instance.name}}</span> <span \\nng-if=\\\"!payment.payment_method_instance.company\\\">{{payment.payment_method_instance.name | translate}}</span></td><td \\nng-if=\\\"payment.devolution_card_instance\\\"><span>\\n{{ \\\"INVOICE.VOUCHER\\\" | translate}} {{payment.devolution_card_instance.barcode}}</span></td><td>\\n{{payment.amount | price}} {{vm.invoice.currency | currencyCharacter}}</td><td>{{payment.date | date}}</td><td \\nclass=\\\"text-right\\\"><md-button class=\\\"md-icon-button\\\" has-permission=\\\"accounting.invoices.invoice.remove_payment\\\" \\nng-click=\\\"vm.removePayment(payment)\\\" ng-disabled=\\\"!vm.canAddPayments()\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon>\\n</md-button></td></tr><tr><td width=\\\"25%\\\"><md-select class=\\\"m-0\\\" ng-disabled=\\\"!vm.canAddPayments()\\\" \\nng-model=\\\"vm.temporalPayment.payment_method\\\" placeholder=\\\"{{ \\'INVOICE.PAYMENT_METHOD\\' | translate}}\\\"><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethodsData\\\" ng-value=\\\"paymentMethod.id\\\">{{paymentMethod.name}}</md-option>\\n</md-select></td><td width=\\\"25%\\\"><md-input-container class=\\\"m-0 full-width\\\" ng-disabled=\\\"!vm.canAddPayments()\\\"><label \\ntranslate=\\\"ORDER.AMOUNT\\\">Amount</label><input ng-disabled=\\\"!vm.canAddPayments()\\\" ng-model=\\\"vm.temporalPayment.amount\\\" \\nstep=\\\"0.01\\\" type=\\\"number\\\"></md-input-container></td><td class=\\\"text-left\\\" width=\\\"25%\\\"><md-datepicker class=\\\"m-0\\\" flex \\nmd-hide-icons=\\\"calendar\\\" md-open-on-focus ng-disabled=\\\"!vm.canAddPayments()\\\" ng-model=\\\"vm.temporalPayment.date\\\">\\n</md-datepicker></td><td class=\\\"text-right\\\" width=\\\"25%\\\"><md-button class=\\\"md-primary stroked m-0\\\" \\nng-click=\\\"vm.savePayment()\\\" \\nng-disabled=\\\"vm.temporalPayment.amount == null || vm.temporalPayment.payment_method == null\\\" \\nng-if=\\\"vm.canAddPayments()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon><span translate=\\\"INVOICE.ADD_PAYMENT\\\"></span></div></md-button></td></tr></tbody>\\n</table></md-card-content></md-card><nd-invoice-integration-app-details-card \\nholded_invoice_data=\\\"vm.invoice.holded_invoice_data\\\" ng-if=\\\"vm.invoice.holded_invoice_data\\\">\\n</nd-invoice-integration-app-details-card><nd-invoice-integration-app-details-card \\nkubibai_invoice_data=\\\"vm.invoice.kubibai_invoice_data\\\" ng-if=\\\"vm.invoice.kubibai_invoice_data\\\">\\n</nd-invoice-integration-app-details-card><nd-pos-order-verifactu-card pos-order-invoices=\\\"[vm.invoice]\\\" \\nng-if=\\\"vm.invoice.verifactu_data\\\"></nd-pos-order-verifactu-card></div></form></div>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoices/invoices.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"accounting-invoices\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex \\nlayout=\\\"column\\\"><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA\\\" translate=\\\"INVOICES.PROFORMAS\\\"></span> <span class=\\\"h2\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.QUOTE\\\" translate=\\\"INVOICES.QUOTES\\\"></span> <span class=\\\"h2\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE\\\" translate=\\\"INVOICES.INVOICES\\\"></span><div flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"accounting.invoices.create\\\" \\nng-click=\\\"vm.createDocument()\\\" ng-disabled=\\\"vm.creatingDocument\\\" ng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\" ng-if=\\\"!vm.creatingDocument\\\">\\n</md-icon><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.creatingDocument\\\"></md-progress-circular>\\n<span translate=\\\"INVOICES.NEW_INVOICE\\\"></span></div></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"accounting.invoices.create\\\" ng-click=\\\"vm.createDocument()\\\" ng-if=\\\"vm.type === vm.INVOICE_TYPES.QUOTE\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span \\ntranslate=\\\"INVOICES.NEW_QUOTE\\\"></span></div></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"accounting.invoices.create\\\" ng-click=\\\"vm.createDocument()\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon><span translate=\\\"INVOICES.NEW_PROFORMA\\\"></span></div></md-button></div></div><div \\nclass=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><md-content \\nclass=\\\"content no-padding\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/accounting/views/invoices/sidenavs/main/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<input id=\\\"invoice-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-change=\\\"vm.reloadInvoices()\\\" \\nng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:200}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span flex></span><md-progress-circular \\nclass=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.waiting\\\"></md-progress-circular><md-button class=\\\"\\\" \\nng-click=\\\"vm.downloadZip()\\\" ng-disabled=\\\"vm.waiting || vm.selected.length == 0\\\" translate=\\\"INVOICES.DOWNLOAD_ZIP\\\">\\n</md-button></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-invoices-list \\nstatus=\\\"vm.status\\\" type=\\\"vm.type\\\" selected=\\\"vm.selected\\\"></nd-invoices-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/accounting/views/payments/payments.html\",\"<div id=\\\"accounting-payments\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.PAYMENTS\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex></div></div><div class=\\\"content-card\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float class=\\\"nd-search-input\\\">\\n<md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"payments-search\\\" ng-model=\\\"vm.search\\\" \\ntype=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><md-button class=\\\"mr-10 w-40\\\" \\nng-click=\\\"vm.filterDates()\\\"><md-icon md-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip>\\n{{\\'INVOICES.FILTER_DATES\\' | translate}}</md-tooltip></md-button><span ng-if=\\\"vm.dateRange.dateStart\\\">\\n{{vm.dateRange.dateStart | date:\\'dd/MM/yyyy\\'}} - {{vm.dateRange.dateEnd | date:\\'dd/MM/yyyy\\'}}</span> <span flex></span>\\n<md-progress-circular ng-if=\\\"vm.waiting\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-content></div></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/health/health.html\",\"<div id=\\\"analytics-health\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"column\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start centers\\\" class=\\\"mb-16\\\"><span translate=\\\"HEALTH_CHECK.HEALTH_TITLE\\\" class=\\\"h1\\\">\\nInventory Analytics</span><nd-new-feature-badge id=\\\"HEALTH_CHECK\\\"></nd-new-feature-badge><div flex></div><span hide-xs \\nhide-sm class=\\\"h1 secondary-text\\\">{{vm.date | date:\\'fullDate\\'}}</span></div></div><div class=\\\"content p-8\\\">\\n<nd-health-check-widget show-products=\\\"true\\\" show-product-variants=\\\"true\\\" show-stocks=\\\"true\\\" show-seasons=\\\"true\\\">\\n</nd-health-check-widget></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/inventory/inventory.html\",\"<div id=\\\"analytics-inventory\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"column\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start centers\\\" class=\\\"mb-16\\\"><span translate=\\\"RETAIL_DASHBOARD.INVENTORY_ANALYTICS\\\" \\nclass=\\\"h1\\\">Inventory Analytics</span><nd-new-feature-badge id=\\\"INVENTORY_ANALYTICS_IMPROVEMENT\\\"></nd-new-feature-badge>\\n<div flex></div><span hide-xs hide-sm class=\\\"h1 secondary-text\\\">{{vm.date | date:\\'fullDate\\'}}</span></div></div><div \\nclass=\\\"content\\\"><md-nav-bar class=\\\"no-border\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" \\nnav-bar-aria-label=\\\"navigation links\\\"><md-nav-item has-permission=\\\"app.analytics.inventory.overview\\\" \\nmd-nav-sref=\\\"app.analytics.inventory.overview\\\" name=\\\"stocks\\\"><span translate=\\\"INVENTORY_DASHBOARD.OVERVIEW\\\"></span>\\n</md-nav-item><md-nav-item has-permission=\\\"app.analytics.inventory.abc_analysis\\\" \\nmd-nav-sref=\\\"app.analytics.inventory.abc_analysis\\\" name=\\\"abc-analysis\\\" ng-if=\\\"vm.isABCAnalysisEnabled()\\\"><span \\ntranslate=\\\"INVENTORY_DASHBOARD.ABC_ANALYSIS\\\"></span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\"></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/product-analytics/product-analytics.html\",\"<nd-dynamic-report ng-if=\\\"vm.dataLoaded\\\" layout-fill dimensions=\\\"vm.dimensions\\\" \\ncolumn-dimensions=\\\"vm.columnDimensions\\\" filters=\\\"vm.filters\\\" metrics=\\\"vm.metrics\\\" metric-headers=\\\"vm.metricHeaders\\\" \\npresets=\\\"vm.presets\\\" endpoint=\\\"vm.endpoint\\\" storage-label=\\\"\\'dynamicProductsReports\\'\\\" \\ndynamic-report-name=\\\"\\'product-analytics\\'\\\" show-chart=\\\"false\\\" \\nreport-title=\\\"\\'DYNAMIC_REPORTS.PRODUCTS_REPORT\\' | translate\\\"></nd-dynamic-report>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/report.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"reports-report\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav no-padding\\\" \\nmd-component-id=\\\"sidenav\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><div \\nclass=\\\"navigation-simple mt-8\\\" layout=\\\"column\\\"><div class=\\\"sidenav-item ph-20\\\" has-permission=\\\"{{option.permission}}\\\" \\nng-repeat=\\\"(code, option) in vm.reportTypes\\\"><div class=\\\"item text-truncate text-bold p-0\\\" flex>\\n{{option.translate | translate}}</div><md-button aria-label=\\\"configuration\\\" class=\\\"item button md-indent\\\" flex \\nhas-permission-and-feature=\\\"{{button.permission}}\\\" ng-class=\\\"{\\'selected\\': vm.isActive(button)}\\\" \\nng-click=\\\"vm.goTo(button)\\\" ng-disabled=\\\"option.disabled\\\" ng-repeat=\\\"(buttonCode, button) in option.buttons\\\"><span \\nclass=\\\"title text-truncate\\\" flex>{{button.translate | translate}}</span><md-icon \\nclass=\\\"s16 has-permission-and-feature-icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon><md-tooltip>\\n{{button.translate | translate}}</md-tooltip></md-button></div></div></md-sidenav><div class=\\\"center\\\" flex \\nlayout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-class=\\\"{\\'pl-8\\': !!vm.currentOption.title}\\\"><md-button aria-label=\\\"Toggle sidenav\\\" \\nclass=\\\"md-icon-button sidenav-toggle m-0\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-menu\\\"></md-icon></md-button><md-button aria-label=\\\"Go to main reports\\\" class=\\\"md-icon-button m-0\\\" \\nng-click=\\\"vm.currentOption = \\'\\'\\\" ng-if=\\\"vm.currentOption.title\\\" ui-sref=\\\"app.analytics.report\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><span class=\\\"h2\\\" ng-if=\\\"!vm.currentOption.title\\\">\\n{{\\'NAVIGATION.REPORTS\\' | translate}}</span> <span class=\\\"h2\\\" ng-if=\\\"vm.currentOption.title\\\">\\n{{vm.currentOption.title | translate}}</span> <span flex></span> <span \\nng-if=\\\"vm.dateRange.dateStart && vm.showHeaderItems(vm.currentOption.title)\\\">\\n{{vm.dateRange.dateStart | date:\\'dd/MM/yyyy\\'}} - {{vm.dateRange.dateEnd | date:\\'dd/MM/yyyy\\'}}</span><md-button \\nclass=\\\"md-icon-button mr-10 w-40\\\" ng-click=\\\"vm.filterDates()\\\" \\nng-if=\\\"vm.downloadReport && vm.showHeaderItems(vm.currentOption.title)\\\"><md-icon md-font-icon=\\\"icon-calendar\\\">\\n</md-icon><md-tooltip>{{\\'INVOICES.FILTER_DATES\\' | translate}}</md-tooltip></md-button><md-button class=\\\"pr-15\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.toggleCheckboxValue()\\\" ng-disabled=\\\"vm.downloading\\\" \\nng-if=\\\"vm.checkboxName && vm.showHeaderItems(vm.currentOption.title)\\\"><md-icon class=\\\"m-0 p-0 mr-5\\\" \\nmd-font-icon=\\\"icon-checkbox-marked\\\" ng-if=\\\"vm.checkboxValue\\\"></md-icon><md-icon class=\\\"m-0 p-0 mr-5\\\" \\nmd-font-icon=\\\"icon-checkbox-blank-outline\\\" ng-if=\\\"!vm.checkboxValue\\\"></md-icon>{{vm.checkboxName | translate}}\\n</md-button><md-button aria-label=\\\"Download CSV\\\" class=\\\"stroked md-primary pr-15\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.download(\\'csv\\')\\\" ng-disabled=\\\"vm.downloading\\\" \\nng-if=\\\"vm.downloadReport && vm.showHeaderItems(vm.currentOption.title)\\\"><md-icon class=\\\"m-0 p-0 mr-5\\\" \\nmd-font-icon=\\\"icon-download\\\" ng-if=\\\"!vm.downloading\\\"></md-icon><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"vm.downloading\\\"></md-progress-circular>CSV</md-button><md-button aria-label=\\\"Download XLSX\\\" \\nclass=\\\"stroked md-primary pr-15\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.download(\\'xlsx\\')\\\" \\nng-disabled=\\\"vm.downloading\\\" ng-if=\\\"vm.downloadReport && vm.showHeaderItems(vm.currentOption.title)\\\"><md-icon \\nclass=\\\"m-0 p-0 mr-5\\\" md-font-icon=\\\"icon-download\\\" ng-if=\\\"!vm.downloading\\\"></md-icon><md-progress-circular class=\\\"mh-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.downloading\\\"></md-progress-circular>XLSX</md-button></div><md-content \\nclass=\\\"transparent-bg no-padding\\\" flex layout=\\\"column\\\" ui-view=\\\"subcontent\\\"><div \\nclass=\\\"md-padding md-background-bg md-hue-2\\\" layout=\\\"column\\\"><div has-permission=\\\"{{option.permission}}\\\" \\nlayout=\\\"column\\\" ng-repeat=\\\"(code, option) in vm.reportTypes\\\"><span class=\\\"h3 pl-10\\\">{{option.translate | translate}}\\n</span><div class=\\\"md-padding\\\" layout=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-md=\\\"25\\\" flex-gt-xs=\\\"50\\\" \\nhas-permission-and-feature=\\\"{{button.permission}}\\\" layout=\\\"column\\\" ng-repeat=\\\"(buttonCode, button) in option.buttons\\\">\\n<md-card class=\\\"h-150\\\" ui-sref=\\\"{{button.serf}}\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h3\\\" flex>{{button.translate | translate}}</span><md-icon \\nclass=\\\"has-permission-and-feature-icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon></div></md-card-title-text>\\n</md-card-title><md-card-content flex layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"s64 grey-200-fg\\\" \\nmd-font-icon=\\\"{{button.icon}}\\\" ng-if=\\\"!button.svgIcon\\\"></md-icon><md-icon class=\\\"s64 grey-200-fg\\\" md-font-icon \\nmd-svg-src=\\\"{{button.svgIcon}}\\\" ng-if=\\\"button.svgIcon\\\"></md-icon></md-card-content></md-card></div></div></div></div>\\n</md-content></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/retail-dashboard.html\",\"<div id=\\\"analytics-retail-dashboard\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" \\nlayout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start centers\\\" class=\\\"mb-16\\\"><span flex \\ntranslate=\\\"RETAIL_DASHBOARD.STORE_ANALYTICS\\\" class=\\\"h1\\\">Retail Analytics</span> <span hide-xs hide-sm \\nclass=\\\"h1 secondary-text\\\">{{vm.date | date:\\'fullDate\\'}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start centers\\\"><div\\n layout=\\\"row\\\" flex><div class=\\\"selected-channel\\\"><span ng-if=\\\"vm.selectedChannel && !vm.selectedChannel.id\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.{{vm.selectedChannel.name}}\\\"></span> <span \\nng-if=\\\"vm.selectedChannel && vm.selectedChannel.id\\\">{{vm.selectedChannel.name}}</span> <span \\nng-if=\\\"!vm.selectedChannel\\\" translate=\\\"RETAIL_DASHBOARD.SELECTED_STORES\\\">SELECTED STORES</span></div><md-menu \\nid=\\\"channels-menu\\\" md-offset=\\\"0 48\\\"><md-button class=\\\"md-icon-button channel-selector\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"Select channel\\\" md-menu-origin md-menu-align-target><md-icon md-font-icon=\\\"icon-dots-horizontal\\\"></md-icon>\\n</md-button><md-menu-content width=\\\"3\\\" class=\\\"md-background-bg\\\"><md-menu-item ng-repeat=\\\"channel in vm.channels\\\"><span \\nng-if=\\\"channel.id\\\" class=\\\"w-40 mr-10\\\"><md-checkbox md-prevent-menu-close=\\\"md-prevent-menu-close\\\" \\nng-click=\\\"vm.toggle(channel.id, vm.currentNavItem)\\\" ng-checked=\\\"vm.exists(channel.id)\\\" class=\\\"w-5 mb-0\\\"></md-checkbox>\\n</span><md-button ng-click=\\\"vm.selectChannel(channel)\\\" aria-label=\\\"{{channel.name}}\\\" \\nng-if=\\\"vm.currentNavItem==\\'realtime\\'\\\" ng-class=\\\"{\\'border-bottom\\': channel.separator}\\\" class=\\\"pl-5\\\" \\nui-sref=\\\"app.analytics.retail_dashboard.realtime({warehouseIds:channel.id})\\\" class=\\\"pl-0 ml-20\\\"><span \\nng-if=\\\"channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\">{{channel.name}}</span> <span \\nng-if=\\\"!channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.{{channel.name}}\\\"></span></md-button><md-button ng-click=\\\"vm.selectChannel(channel)\\\" \\naria-label=\\\"{{channel.name}}\\\" ng-if=\\\"vm.currentNavItem==\\'performance\\'\\\" ng-class=\\\"{\\'border-bottom\\': channel.separator}\\\" \\nclass=\\\"pl-5\\\" ui-sref=\\\"app.analytics.retail_dashboard.performance({warehouseIds:channel.id})\\\" class=\\\"pl-0 ml-20\\\"><span \\nng-if=\\\"channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\">{{channel.name}}</span> <span \\nng-if=\\\"!channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.{{channel.name}}\\\"></span></md-button><md-button ng-click=\\\"vm.selectChannel(channel)\\\" \\naria-label=\\\"{{channel.name}}\\\" ng-if=\\\"vm.currentNavItem==\\'products\\'\\\" ng-class=\\\"{\\'border-bottom\\': channel.separator}\\\" \\nclass=\\\"pl-5\\\" ui-sref=\\\"app.analytics.retail_dashboard.products({warehouseIds:channel.id})\\\" class=\\\"pl-0 ml-20\\\"><span \\nng-if=\\\"channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\">{{channel.name}}</span> <span \\nng-if=\\\"!channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.{{channel.name}}\\\"></span></md-button><md-button ng-click=\\\"vm.selectChannel(channel)\\\" \\naria-label=\\\"{{channel.name}}\\\" ng-if=\\\"vm.currentNavItem==\\'categories\\'\\\" ng-class=\\\"{\\'border-bottom\\': channel.separator}\\\" \\nclass=\\\"pl-5\\\" ui-sref=\\\"app.analytics.retail_dashboard.categories({warehouseIds:channel.id})\\\" class=\\\"pl-0 ml-20\\\"><span \\nng-if=\\\"channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\">{{channel.name}}</span> <span \\nng-if=\\\"!channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.{{channel.name}}\\\"></span></md-button></md-menu-item></md-menu-content></md-menu></div>\\n</div></div><div class=\\\"content\\\"><md-nav-bar class=\\\"no-border\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" \\nnav-bar-aria-label=\\\"navigation links\\\"><md-nav-item md-nav-click=\\\"vm.changeTabToRealtime()\\\" name=\\\"realtime\\\" \\nhas-permission=\\\"app.analytics.retail_dashboard.realtime\\\"><span translate=\\\"RETAIL_DASHBOARD.REALTIME\\\">Realtime</span>\\n</md-nav-item><md-nav-item md-nav-click=\\\"vm.changeTabToPerformance()\\\" name=\\\"performance\\\" \\nhas-permission=\\\"app.analytics.retail_dashboard.performance\\\"><span translate=\\\"RETAIL_DASHBOARD.PERFORMANCE\\\">Performance\\n</span></md-nav-item><md-nav-item md-nav-click=\\\"vm.changeTabToProducts()\\\" name=\\\"products\\\" \\nhas-permission=\\\"app.analytics.retail_dashboard.products\\\"><span translate=\\\"RETAIL_DASHBOARD.PRODUCTS\\\">Products</span>\\n</md-nav-item><md-nav-item md-nav-click=\\\"vm.changeTabToCategories()\\\" name=\\\"categories\\\" \\nhas-permission=\\\"app.analytics.retail_dashboard.categories\\\"><span translate=\\\"RETAIL_DASHBOARD.CATEGORIES\\\">Categories\\n</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\"></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/sale-analytics/sale-analytics.html\",\"<nd-dynamic-report column-dimensions=\\\"vm.columnDimensions\\\" dimensions=\\\"vm.dimensions\\\" \\ndynamic-report-name=\\\"\\'sale-analytics\\'\\\" endpoint=\\\"vm.endpoint\\\" filters=\\\"vm.filters\\\" layout-fill metrics=\\\"vm.metrics\\\" \\nng-if=\\\"vm.dataLoaded\\\" presets=\\\"vm.presets\\\" report-title=\\\"\\'DYNAMIC_REPORTS.SALES_REPORT\\' | translate\\\" show-chart=\\\"true\\\" \\nstorage-label=\\\"\\'dynamicSalesReports\\'\\\"></nd-dynamic-report>\");\n$templateCache.put(\"app/main/apps/analytics/views/wholesale-dashboard/wholesale-dashboard.html\",\"<div id=\\\"analytics-wholesale-dashboard\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" \\nlayout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start centers\\\" class=\\\"mb-16\\\"><span flex \\ntranslate=\\\"WHOLESALE_DASHBOARD.WHOLESALE_ANALYTICS\\\" class=\\\"h1\\\">Wholesale analytics</span> <span hide-xs hide-sm \\nclass=\\\"h1 secondary-text\\\">{{vm.date | date:\\'fullDate\\'}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"selected-channel\\\"><span ng-if=\\\"vm.selectedChannel && !vm.selectedChannel.id\\\" \\ntranslate=\\\"WHOLESALE_DASHBOARD.{{vm.selectedChannel.name}}\\\"></span> <span \\nng-if=\\\"vm.selectedChannel && vm.selectedChannel.id\\\">{{vm.selectedChannel.name}}</span> <span \\nng-if=\\\"!vm.selectedChannel\\\" translate=\\\"WHOLESALE_DASHBOARD.SELECTED_CHANNELS\\\">SELECTED STORES</span></div><md-menu \\nid=\\\"channels-menu\\\" md-offset=\\\"0 48\\\"><md-button class=\\\"md-icon-button channel-selector\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"Select channel\\\" md-menu-origin md-menu-align-target><md-icon md-font-icon=\\\"icon-dots-horizontal\\\"></md-icon>\\n</md-button><md-menu-content width=\\\"3\\\" class=\\\"md-background-bg\\\"><md-menu-item ng-repeat=\\\"channel in vm.channels\\\"><span \\nng-if=\\\"channel.id\\\" class=\\\"w-40\\\"><md-checkbox md-prevent-menu-close=\\\"md-prevent-menu-close\\\" \\nng-click=\\\"vm.toggle(channel.id, vm.currentNavItem)\\\" ng-checked=\\\"vm.exists(channel.id)\\\" class=\\\"w-5 mb-0\\\"></md-checkbox>\\n</span><md-button ng-click=\\\"vm.selectChannel(channel)\\\" aria-label=\\\"{{channel.name}}\\\" \\nng-if=\\\"vm.currentNavItem==\\'realtime\\'\\\" ng-class=\\\"{\\'border-bottom\\': channel.separator}\\\" \\nui-sref=\\\"app.analytics.wholesale_dashboard.realtime({warehouseIds:channel.id})\\\" class=\\\"pl-0 ml-20\\\"><span \\nng-if=\\\"channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\">{{channel.name}}</span> <span \\nng-if=\\\"!channel.id\\\" ng-class=\\\"{\\'secondary-text\\': vm.selectedChannel == channel}\\\" \\ntranslate=\\\"WHOLESALE_DASHBOARD.{{channel.name}}\\\"></span></md-button></md-menu-item></md-menu-content></md-menu></div>\\n</div><div class=\\\"content\\\"><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\"></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/start/start.html\",\"<div id=\\\"analytics-start\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"column\\\"><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-align=\\\"start start\\\"><span flex translate=\\\"SIGNUP_STEPS.WELCOME\\\" \\nclass=\\\"h1 mb-16\\\">Welcome</span><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"members-working-div\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"online-bubble m-5\\\" ng-if=\\\"vm.data.employees_working\\\"></span> \\n<span class=\\\"offline-bubble m-5\\\" ng-if=\\\"!vm.data.employees_working\\\"></span><div><md-tooltip \\nng-if=\\\"vm.data.employees_working_list_str\\\">{{vm.data.employees_working_list_str}}</md-tooltip><span \\nclass=\\\"members-working-number\\\">{{vm.data.employees_working}} </span><span class=\\\"members-working-title\\\" \\ntranslate=\\\"START.TEAM_MEMBERS_ONLINE\\\"></span></div><span class=\\\"members-working-date\\\">{{vm.date | date:\\'fullDate\\'}}\\n</span></div></div></div></div><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" layout-wrap><nd-working-activity-card \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" layout-fill></nd-working-activity-card><nd-start-banner \\nng-repeat=\\\"banner in vm.banners\\\" flex-xs=\\\"{{banner.ui_flex_sm}}\\\" flex-sm=\\\"{{banner.ui_flex_sm}}\\\" \\nflex-md=\\\"{{banner.ui_flex_md}}\\\" flex-lg=\\\"{{banner.ui_flex_lg}}\\\" flex-xl=\\\"{{banner.ui_flex_xl}}\\\" class=\\\"p-8\\\" \\nbanner=\\\"banner\\\"></nd-start-banner></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><nd-wizard-card \\nclass=\\\"full-width\\\" flex=\\\"100\\\"></nd-wizard-card></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><nd-setup-card\\n ng-if=\\\"vm.isFreemium() || vm.isSuperAdmin()\\\" flex=\\\"100\\\" flex-gt-sm=\\\"100\\\" layout-fill class=\\\"full-width\\\">\\n</nd-setup-card></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><nd-dashboard-items-card \\ntype=\\\"vm.DASHBOARD_ITEM_TYPES.DASHBOARD_ITEM_TYPE_VIDEO_DEMO\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"></nd-dashboard-items-card>\\n<nd-dashboard-items-card type=\\\"vm.DASHBOARD_ITEM_TYPES.DASHBOARD_ITEM_TYPE_COURSE\\\" flex=\\\"50\\\" flex-gt-sm=\\\"50\\\">\\n</nd-dashboard-items-card></div><div flex=\\\"100\\\"><script charset=\\\"utf-8\\\" type=\\\"text/javascript\\\" \\nsrc=\\\"//js.hsforms.net/forms/shell.js\\\"></script><script>\\nfunction addLoadEvent(func) {\\n          var oldonload = window.onload;\\n          if (typeof window.onload != \\'function\\') {\\n            window.onload = func;\\n          } else {\\n            window.onload = function() {\\n              if (oldonload) {\\n                oldonload();\\n              }\\n              func();\\n            };\\n          }\\n        }\\n\\n        // Example use:\\n        addLoadEvent(function() {\\n          hbspt.forms.create({\\n            portalId: \\'7568592\\',\\n            formId: \\'2dfc62ec-5fe5-48fe-ad43-859626cd4b1c\\'\\n          });\\n        });\\n</script></div></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/contact.html\",\"<div id=\\\"contact\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav no-padding\\\" \\nmd-is-locked-open=\\\"$mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper ng-if=\\\"!vm.isNew\\\"><div \\nflex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\" flex data-test-id=\\\"addcontact-sidenav-list\\\"><div class=\\\"header\\\" \\nflex><span class=\\\"h2\\\"><span ng-if=\\\"vm.contact.name\\\" data-test-id=\\\"addcontact-title-contact-name\\\">{{vm.contact.name}}\\n</span> <span ng-if=\\\"!vm.contact.name && vm.contact.first_name\\\">{{vm.contact.first_name}}</span> <span \\nng-if=\\\"!vm.contact.name && vm.contact.last_name\\\">{{vm.contact.last_name}}</span><br></span></div><md-list \\ndata-test-id=\\\"addcontact-sidenav-list\\\" class=\\\"ph-20 pv-0\\\"><md-list-item \\nng-if=\\\"vm.contact.type == CONTACT_TYPE_CUSTOMER\\\" \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.overview\\') }\\\" \\nui-sref=\\\"app.contacts.contact.overview({id:vm.contact.id})\\\">{{\\'CONTACTS.OVERVIEW\\' | translate}}</md-list-item>\\n<md-list-item ng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.details\\') }\\\" \\nui-sref=\\\"app.contacts.contact.details({id:vm.contact.id})\\\">{{\\'CONTACTS.DETAILS\\' | translate}}</md-list-item>\\n<md-list-item ng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.addresses\\') }\\\" \\ndata-test-id=\\\"addcontact-sidenav-adresses\\\" ui-sref=\\\"app.contacts.contact.addresses({id:vm.contact.id})\\\">\\n{{\\'CONTACTS.ADDRESSES\\' | translate}}</md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.billing\\') }\\\" data-test-id=\\\"addcontact-sidenav-billing\\\" \\nui-sref=\\\"app.contacts.contact.billing({id:vm.contact.id})\\\">{{\\'CONTACTS.BILLING\\' | translate}}</md-list-item>\\n<md-list-item ng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.persons\\') }\\\" \\ndata-test-id=\\\"addcontact-sidenav-other-contacts\\\" ui-sref=\\\"app.contacts.contact.persons({id:vm.contact.id})\\\">\\n{{\\'CONTACTS.OTHER_CONTACTS\\' | translate}}</md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.purchases\\') }\\\" \\nui-sref=\\\"app.contacts.contact.purchases({id:vm.contact.id})\\\">{{\\'CONTACTS.PURCHASES\\' | translate}}</md-list-item>\\n<md-list-item ng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.wholesale_sales\\') }\\\" \\nui-sref=\\\"app.contacts.contact.wholesale_sales({id:vm.contact.id})\\\" \\nhas-permission=\\\"app.wholesale,app.wholesale.sales.sale\\\" has-permission-and-feature=\\\"app.wholesale.sales.sale\\\"><span \\nflex>{{\\'CONTACTS.WHOLESALE_SALES\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.retail_sales\\') }\\\" \\nui-sref=\\\"app.contacts.contact.retail_sales({id:vm.contact.id})\\\" has-permission=\\\"app.sale,app.sale.sales_log\\\" \\nhas-permission-and-feature=\\\"app.sale.sales_log\\\"><span flex>{{\\'CONTACTS.RETAIL_SALES\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.invoices\\') }\\\" \\nui-sref=\\\"app.contacts.contact.invoices({id:vm.contact.id })\\\" has-permission=\\\"app.contacts.contact.invoices\\\">\\n{{\\'CONTACTS.INVOICES\\' | translate}}</md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.proformas\\') }\\\" \\nui-sref=\\\"app.contacts.contact.proformas({id:vm.contact.id })\\\" has-permission=\\\"app.contacts.contact.proformas\\\" \\nhas-permission-and-feature=\\\"app.contacts.contact.proformas\\\"><span flex>{{\\'CONTACTS.PROFORMAS\\' | translate}}</span>\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.quotes\\') }\\\" \\nui-sref=\\\"app.contacts.contact.quotes({id:vm.contact.id })\\\" has-permission=\\\"app.contacts.contact.quotes\\\" \\nhas-permission-and-feature=\\\"app.contacts.contact.quotes\\\"><span flex>{{\\'CONTACTS.QUOTES\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.b2b_ecommerce\\') }\\\" \\nui-sref=\\\"app.contacts.contact.b2b_ecommerces.b2b_ecommerce({id:vm.contact.id})\\\" \\nhas-permission=\\\"\\'app.wholesale,app.wholesale.b2b_ecommerces.b2b_ecommerce,app.contacts.contact.b2b_ecommerces.b2b_ecommerce\\'\\\" \\nhas-permission-and-feature=\\\"app.contacts.contact.b2b_ecommerces.b2b_ecommerce\\\"><span flex>\\n{{\\'CONTACTS.B2B_ECOMMERCE\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.wishlist\\') }\\\" \\nui-sref=\\\"app.contacts.contact.wishlist({id:vm.contact.id})\\\" has-permission-and-feature=\\\"app.contacts.contact.wishlist\\\">\\n<span flex>{{\\'CONTACTS.WISHLIST\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item><md-list-item \\nng-class=\\\"{ selected: $state.includes(\\'app.contacts.contact.loyalty\\') }\\\" \\nhas-permission-and-feature=\\\"app.contacts.contact.loyalty\\\" ui-sref=\\\"app.contacts.contact.loyalty({id:vm.contact.id})\\\">\\n<span flex>{{\\'CONTACTS.LOYALTY\\' | translate}}</span><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" md-font-icon \\nclass=\\\"ml-8 has-permission-and-feature-icon\\\"></md-icon></md-list-item></md-list></div></div></md-sidenav><div flex \\nms-scroll layout=\\\"column\\\"><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg subcontent\\\" flex layout=\\\"column\\\">\\n</md-content></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/contacts.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"contacts\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\"><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" ng-if=\\\"vm.isContactsPage\\\" translate=\\\"CONTACTS.CONTACTS\\\"></span> \\n<span class=\\\"h2\\\" ng-if=\\\"!vm.isContactsPage\\\" translate=\\\"CUSTOMERS.CUSTOMERS\\\"></span><div flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" ng-if=\\\"vm.isContactsPage\\\"><md-button class=\\\"m-0 mr-10 stroked\\\" \\nhas-permission=\\\"contacts.contacts.import\\\" ng-click=\\\"vm.importContactsDialog()\\\" translate=\\\"CONTACTS.IMPORT_CONTACTS\\\">\\n</md-button><md-button class=\\\"m-0 md-primary md-raised\\\" data-test-id=\\\"Client-button-newClient\\\" \\nhas-permission=\\\"contacts.contacts.create\\\" ui-sref=\\\"app.contacts.contact.details({id:\\'add\\'})\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'CONTACTS.NEW_CONTACT\\' | translate}}</div></md-button></div><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"!vm.isContactsPage\\\"><md-button class=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"sale.customers.create\\\" \\nng-click=\\\"vm.newCustomer()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'CUSTOMERS.NEW_CUSTOMER\\' | translate}}</div></md-button></div></div><div \\nclass=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" \\nflex ms-scroll><div ng-include=\\\"\\'app/main/apps/contacts/views/contacts/sidenavs/main/main-sidenav.html\\'\\\"></div>\\n</md-content></md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input\\\" md-no-float md-no-underline><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"contacts-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nng-change=\\\"vm.reloadContacts()\\\" ng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:200}\\\" placeholder=\\\"Search\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><p></p></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-contacts-list status=\\\"vm.status\\\" view=\\\"vm.view\\\">\\n</nd-contacts-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/new-site/new-site.html\",\"<div id=\\\"new-site\\\" class=\\\"page-layout simple fullwidth doc-page\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.ecommerce.sites\\\" translate translate-attr-aria-label=\\\"SITE.GO_TO_SITES\\\">\\n<md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" \\nflex><div class=\\\"h2\\\" translate=\\\"SITES.NEW_SITE\\\"></div></div></div></div><nd-site-details site=\\\"vm.site\\\" \\nis-new-site=\\\"true\\\" callback=\\\"vm.save(site)\\\" warehouses=\\\"vm.warehouses\\\" ticket-configurations=\\\"vm.ticketConfigurations\\\" \\nserial-number-types=\\\"vm.serialNumberTypes\\\" pricing-tiers=\\\"vm.pricingTiers\\\"></nd-site-details></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/orders/orders.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"ecommerce-orders\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex \\nlayout=\\\"column\\\"><div class=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" \\nng-if=\\\"vm.isOrdersState()\\\" translate=\\\"ORDERS.ORDERS\\\"></span><nd-new-feature-badge id=\\\"NEW_ORDERS_SCREEN\\\" \\nng-if=\\\"vm.isOrdersState()\\\" class=\\\"ml-8\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge><span class=\\\"h2\\\" \\nng-if=\\\"vm.isPickingState()\\\" translate=\\\"PICKING.PICKING\\\"></span><nd-new-feature-badge id=\\\"NEW_PICKING_SCREEN\\\" \\nng-if=\\\"vm.isPickingState()\\\" class=\\\"ml-8\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge></div><div \\nng-include=\\\"\\'app/main/apps/ecommerce/views/orders/subviews/nav-bar.html\\'\\\"></div><div layout=\\\"column\\\" \\nlayout-gt-xs=\\\"row\\\" flex layout-fill class=\\\"content-card\\\"><div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mr-5\\\"><md-input-container \\nclass=\\\"nd-search-input\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"sales-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div><div \\nng-include=\\\"\\'app/main/apps/ecommerce/views/orders/subviews/dynamic-filters.html\\'\\\"></div><span flex></span><md-menu \\nng-if=\\\"vm.mappedShippingMethods.length\\\"><md-button class=\\\"md-icon-button\\\" \\nng-disabled=\\\"vm.exportingOrdersByShippingMethod\\\" ng-click=\\\"$mdOpenMenu($event)\\\"><md-icon md-menu-origin \\nng-if=\\\"!vm.exportingOrdersByShippingMethod\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-document-arrow-right-outline.6e40a9ce.svg\\\"></md-icon>\\n<md-progress-circular md-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.exportingOrdersByShippingMethod\\\">\\n</md-progress-circular><md-tooltip>{{\\'ORDERS.EXPORT_SHIPPING_METHOD_MAPPER\\' | translate}}</md-tooltip></md-button>\\n<md-menu-content><md-menu-item ng-repeat=\\\"shippingMethod in vm.mappedShippingMethods\\\"><md-button \\nng-click=\\\"vm.exportOrdersByShippingMethod(shippingMethod.id)\\\">{{shippingMethod.name}}</md-button></md-menu-item>\\n</md-menu-content></md-menu><md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.isOrdersState()\\\" \\nng-click=\\\"vm.printDeliveriesPdf()\\\" ng-disabled=\\\"vm.generatingDeliveriesPdf || vm.noneChecked()\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\" class=\\\"s16\\\" ng-if=\\\"!vm.generatingDeliveriesPdf\\\">\\n</md-icon><md-progress-circular md-diameter=\\\"24\\\" ng-if=\\\"vm.generatingDeliveriesPdf\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular><md-tooltip ng-if=\\\"!vm.deliveryUrl\\\">{{\\'PICKING.PRINT_DELIVERIES\\' | translate}}</md-tooltip>\\n<md-tooltip ng-if=\\\"vm.deliveryUrl\\\">{{\\'PICKING.DOWNLOAD_DELIVERIES\\' | translate}}</md-tooltip></md-button><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.printItemsListPdf()\\\" ng-disabled=\\\"vm.noneChecked()\\\" \\nng-if=\\\"vm.currentNavItem===\\'to_prepare\\' && vm.isOrdersState()\\\"><md-icon md-font-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/map-marker-path.053c000f.svg\\\"></md-icon><md-tooltip>\\n{{\\'ORDERS.PRINT_ROADMAP\\' | translate}}</md-tooltip></md-button><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.showItemsListPdf()\\\" ng-disabled=\\\"vm.noneChecked()\\\" \\nng-if=\\\"vm.currentNavItem===\\'to_prepare\\' && vm.isOrdersState()\\\"><md-icon md-font-icon=\\\"icon-laptop\\\"></md-icon>\\n<md-tooltip>{{\\'ORDERS.SHOW_PICKING_LIST\\' | translate}}</md-tooltip></md-button><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" nd-track-click=\\\"new picking order\\\" ng-disabled=\\\"vm.noneChecked()\\\" \\nhas-permission=\\\"inventory.pickings.create\\\" ng-if=\\\"vm.isPickableOnPickingOrder()\\\" ng-click=\\\"vm.createPickingOrder()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon ng-if=\\\"!vm.creating\\\" md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\">\\n</md-icon><md-progress-circular ng-if=\\\"vm.creating\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8\\\"></md-progress-circular>\\n{{\\'PICKING.NEW_PICKING_ORDER\\' | translate}}</div></md-button><md-button class=\\\"md-icon-button\\\" \\nnd-track-click=\\\"bulk scan&go\\\" ng-disabled=\\\"vm.noneChecked()\\\" ng-if=\\\"vm.hasMultipleScanAndGoFeature()\\\" \\nng-click=\\\"vm.openMultipleScanAndGoDialog()\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\"></md-icon><md-tooltip>\\n{{\\'ORDERS.GENERATE_LABELS_WITH_SENDCLOUD_DIALOG_TITLE\\' | translate}}</md-tooltip></md-button></div><div \\nclass=\\\"content no-padding uid-grid-container\\\" flex><nd-barcode-listener \\nfulfillment-callback=\\\"vm.barcodeListenerCallback(barcode)\\\" pos-order-callback=\\\"vm.barcodeListenerCallback(barcode)\\\" \\ncallback=\\\"vm.barcodeListenerCallback(barcode, vm.order.source_warehouse, vm.orderTypes.hasMultiple)\\\">\\n</nd-barcode-listener><div class=\\\"full-width h-0\\\"><md-progress-linear md-mode=\\\"indeterminate\\\" \\nclass=\\\"loader md-primary\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div><div class=\\\"grid\\\" style=\\\"height: 100%\\\" \\nui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-exporter ui-grid-pagination ui-grid-pinning \\nui-grid-resize-columns ui-grid-save-state ui-grid-selection ui-grid-move-columns></div></div></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/order/order.html\",\"<div class=\\\"page-layout simple tabbed\\\" id=\\\"ecommerce-order\\\" layout=\\\"column\\\" ms-scroll><div \\nclass=\\\"did-you-know yellow m-16\\\" ng-if=\\\"vm.showOldOrdersBanner\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\"></md-icon>\\n</div><div flex layout=\\\"column\\\"><span class=\\\"font-size-14\\\">{{\\'ORDER.OLD_ORDER_BANNER_TITLE\\' | translate}}</span> <span \\nclass=\\\"secondary-text\\\" translate=\\\"ORDER.OLD_ORDER_BANNER_MSG\\\" translate-values=\\\"{site_name: vm.order.site.name}\\\">\\n</span></div></div></div><div class=\\\"did-you-know yellow m-16\\\" ng-if=\\\"vm.showUploadFulfillmentsDisabled\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\"></md-icon></div><div flex layout=\\\"column\\\"><span class=\\\"font-size-14\\\">\\n{{\\'ORDER.FULFILLMENT_UPLOAD_DISABLED_TITLE\\' | translate}}</span> <span class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.FULFILLMENT_UPLOAD_DISABLED_MSG\\\"></span></div></div></div><div class=\\\"did-you-know yellow m-16\\\" \\nng-if=\\\"vm.showWarningOrderBanner\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-alert\\\"></md-icon></div><div flex layout=\\\"column\\\"><span \\nclass=\\\"font-size-14\\\">{{\\'ORDER.WARNING_IN_ECOMMERCE_ORDER_SCREEN_BANNER_TITLE\\' | translate}}</span> <span \\nclass=\\\"secondary-text\\\" translate=\\\"ORDER.WARNING_IN_ECOMMERCE_ORDER_SCREEN_BANNER_MSG\\\"></span></div><md-button \\nng-click=\\\"vm.dismissWarningOrderBanner()\\\">{{\\'GENERAL.CLOSE\\' | translate}}</md-button></div></div><div \\nclass=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button class=\\\"md-icon-button black-fg\\\" ng-click=\\\"vm.goBack()\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><span class=\\\"h2\\\" ng-if=\\\"!vm.order.autocode\\\">{{\\'ORDER.ORDER_DRAFT\\' | translate}}</span> <span class=\\\"h2\\\" \\nng-if=\\\"vm.order.autocode\\\">{{vm.order.autocode}}</span><md-button class=\\\"md-icon-button\\\" \\nhas-permission=\\\"sale.sales_log.update_sale\\\" ng-class=\\\"{\\'md-warn\\' : vm.order.incidence}\\\" \\nng-click=\\\"vm.markAsIncidence()\\\"><md-icon md-font-icon=\\\"icon-flag-outline-variant\\\" ng-if=\\\"!vm.order.incidence\\\">\\n</md-icon><md-icon class=\\\"red-fg\\\" md-font-icon=\\\"icon-flag-variant\\\" ng-if=\\\"vm.order.incidence\\\"></md-icon><md-tooltip>\\n{{(!vm.order.incidence ? \\'SALES_LOG.MARK_AS_INCIDENCE\\' : \\'SALES_LOG.MARK_AS_RESOLVED\\') | translate}}</md-tooltip>\\n</md-button><nd-fulfillment-text-box ng-if=\\\"vm.order.autocode && vm.order.shipping_status\\\" \\ntype=\\\"vm.order.shipping_status\\\"></nd-fulfillment-text-box><span class=\\\"ml-5 red-fg\\\" \\nng-if=\\\"vm.order.deleted || vm.order.is_negated\\\">{{\\'SALES.THIS_ORDER_IS_DELETED\\' | translate}} </span><span flex></span>\\n<md-menu><md-button class=\\\"stroked\\\" ng-click=\\\"$mdOpenMenu($event)\\\" ng-disabled=\\\"vm.saving\\\">\\n{{\\'ORDER.MORE_ACTIONS\\' | translate}}</md-button><md-menu-content \\nng-style=\\\"{\\'max-height\\': \\'500px\\', \\'overflow-y\\': \\'auto\\'}\\\"><md-menu-item ng-if=\\\"vm.order.register_activity\\\"><md-button \\nng-click=\\\"vm.goToRegisterActivity()\\\" translate=\\\"SALES.GO_TO_REGISTER_ACTIVITY\\\">Go to register activity</md-button>\\n</md-menu-item><md-menu-item><md-button ng-click=\\\"vm.printTicket()\\\">{{\\'ORDER.PRINT_TICKET\\' | translate}} (Din A4)\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.printPosTicket(false)\\\" \\nng-disabled=\\\"vm.order.register === null\\\">{{\\'ORDER.PRINT_TICKET\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.order.generated_devolution_card && vm.order.generated_devolution_card.length > 0\\\"><md-button \\nng-click=\\\"vm.printDevolutionCard(false)\\\">{{\\'SALES_LOG.PRINT_VOUCHER\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item ng-if=\\\"!vm.hasEposItalyActive()\\\"><md-button ng-click=\\\"vm.printPosTicket(true)\\\">\\n{{\\'SALES_LOG.PRINT_GIFT\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.order.customer && vm.order.customer_instance.email\\\"><md-button ng-click=\\\"vm.sendPosTicket(false)\\\">\\n{{\\'SALES_LOG.SEND_BY_EMAIL\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"sale.sales_log.create_devolution\\\" ng-if=\\\"!this.autocode\\\"><md-button ng-click=\\\"vm.createDevolution()\\\" \\nng-disabled=\\\"!vm.order.isAllowedToCreateDevolution()\\\">{{\\'SALES_LOG.IN_STORE_DEVOLUTION\\' | translate}}</md-button>\\n</md-menu-item><md-divider has-permission=\\\"ecommerce.orders.edit\\\" ng-if=\\\"vm.siteHasReplenishmentPolicy\\\"></md-divider>\\n<md-menu-item has-permission=\\\"ecommerce.orders.edit\\\" ng-if=\\\"vm.siteHasReplenishmentPolicy\\\"><md-button \\nng-click=\\\"vm.executeSupplyingPolicy()\\\">{{\\'SALES_LOG.EXECUTE_SUPPLYING_POLICY\\' | translate}}</md-button></md-menu-item>\\n<md-divider has-permission=\\\"sale.sales_log.delete\\\" ng-if=\\\"!vm.order.is_negative && !vm.order.is_negated\\\"></md-divider>\\n<md-menu-item has-permission=\\\"sale.sales_log.delete\\\" ng-if=\\\"!vm.order.is_negative && !vm.order.is_negated\\\"><md-button \\nclass=\\\"md-warn\\\" ng-click=\\\"vm.order.deletePosOrderPre(vm.delete)\\\">{{\\'GENERAL.DELETE\\' | translate}}</md-button>\\n</md-menu-item><md-divider ng-if=\\\"vm.showAdminActions()\\\"></md-divider><md-menu-item ng-if=\\\"vm.showAdminActions()\\\">\\n<md-button class=\\\"md-button md-warn\\\" ng-click=\\\"vm.importOrderFromSite()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-down\\\"></md-icon>{{\\'SITE.SYNC_ORDER\\' | translate}}</div></md-button>\\n</md-menu-item></md-menu-content></md-menu><md-button class=\\\"no-margin stroked\\\" ng-click=\\\"vm.addProducts()\\\" \\nng-disabled=\\\"vm.saving || !vm.order.isAllowedToAddProducts()\\\" \\nng-if=\\\"vm.order.autocode && !vm.addProductsEnabled && !vm.order.is_negated\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"{{vm.contact ? \\'icon-close\\' : \\'icon-plus\\' }}\\\">\\n</md-icon>{{\\'ORDER.ADD_PRODUCTS\\' | translate}}</div></md-button><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.cancelProductsEdition()\\\" ng-if=\\\"vm.order.autocode && vm.addProductsEnabled\\\" translate=\\\"GENERAL.CANCEL\\\">\\nCancel</md-button><md-button class=\\\"stroked pink\\\" ng-click=\\\"vm.saveAndAllocateDraft()\\\" ng-disabled=\\\"vm.saving\\\" \\nng-if=\\\"vm.showSaveDraftAndAllocateButton()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nclass=\\\"mr-5\\\" md-diameter=\\\"20px\\\" ng-hide=\\\"!vm.saving\\\"></md-progress-circular>\\n{{\\'ORDER.SAVE_DRAFT_AND_ALLOCATE\\' | translate}}</div></md-button><md-button class=\\\"stroked md-primary\\\" \\nng-click=\\\"vm.saveOrder()\\\" ng-disabled=\\\"vm.saving\\\" ng-if=\\\"vm.showSaveDraftButton()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"mr-5\\\" md-diameter=\\\"20px\\\" ng-hide=\\\"!vm.saving\\\">\\n</md-progress-circular>{{\\'ORDER.SAVE_DRAFT\\' | translate}}</div></md-button><md-button \\nclass=\\\"md-raised md-primary mr-20\\\" ng-click=\\\"vm.saveOrder()\\\" ng-disabled=\\\"vm.saving\\\" ng-if=\\\"vm.showSaveButton()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"mr-5\\\" md-diameter=\\\"20px\\\" ng-hide=\\\"!vm.saving\\\">\\n</md-progress-circular>{{\\'GENERAL.SAVE\\' | translate}}</div></md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"vm.saveAndCloseOrder()\\\" ng-disabled=\\\"vm.saving\\\" ng-if=\\\"vm.showSaveAndCloseButton()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">{{\\'ORDER.SAVE_AND_CLOSE_ORDER\\' | translate}}</div></md-button></div></div><div \\nclass=\\\"margin-horizontal-10 parent\\\"><div class=\\\"center no-padding child-left\\\" layout=\\\"column\\\"><md-card \\nng-if=\\\"vm.addProductsEnabled || (vm.order.canEditPosOrderProductVariant() && !vm.order.autocode)\\\"><md-card-title>\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" flex>{{\\'ORDER.PRODUCTS\\' | translate}}\\n</span><md-progress-circular class=\\\"md-primary mr-16\\\" md-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.saving\\\">\\n</md-progress-circular><nd-products callback=\\\"vm.addProduct(product, productVariant)\\\" flex=\\\"50\\\" \\nregister-id=\\\"vm.order.register\\\" set-disabled=\\\"vm.saving\\\" site-id=\\\"vm.order.site\\\"></nd-products></div>\\n</md-card-title-text></md-card-title><md-card-content><nd-pos-order-product-variants-table order=\\\"vm.order\\\" \\nsaving=\\\"vm.saving\\\" update-debounce=\\\"vm.updateDebounce()\\\" update-order=\\\"vm.updateOrder()\\\" warehouses=\\\"vm.warehouses\\\">\\n</nd-pos-order-product-variants-table></md-card-content></md-card><nd-pos-order-fulfillment-card \\nfulfillment=\\\"fulfillment\\\" ng-repeat=\\\"fulfillment in vm.order.pos_order_fulfillments | orderBy: \\'-number\\'\\\" \\norder=\\\"vm.order\\\" payment-methods=\\\"vm.paymentMethods\\\" warehouses=\\\"vm.warehouses\\\" shipping-boxes=\\\"vm.shippingBoxes\\\">\\n</nd-pos-order-fulfillment-card><nd-pos-order-payment-methods-card order=\\\"vm.order\\\" \\npayment-methods=\\\"vm.paymentMethods\\\" saving=\\\"vm.saving\\\" update-order=\\\"vm.updateOrder()\\\">\\n</nd-pos-order-payment-methods-card><nd-pos-order-shipping-methods-card order=\\\"vm.order\\\" saving=\\\"vm.saving\\\" \\nshipping-methods=\\\"vm.shippingMethods\\\" taxes=\\\"vm.taxes\\\" update-order=\\\"vm.updateOrder()\\\">\\n</nd-pos-order-shipping-methods-card></div><div class=\\\"no-padding child-right\\\" layout=\\\"column\\\">\\n<nd-pos-order-contact-card class=\\\"m-8\\\" order=\\\"vm.order\\\" saving=\\\"vm.saving\\\" update-order=\\\"vm.updateOrder()\\\">\\n</nd-pos-order-contact-card><nd-invoice-integration-app-details-card \\nkubibai_invoice_data=\\\"vm.order.kubibai_ticket_data\\\" ng-if=\\\"vm.order.kubibai_ticket_data\\\">\\n</nd-invoice-integration-app-details-card><nd-pos-order-verifactu-card ng-if=\\\"vm.order.hasVerifactuInvoices()\\\" \\npos-order-invoices=\\\"vm.order.pos_order_invoices\\\"></nd-pos-order-verifactu-card><md-card><md-card-title>\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" flex>\\n{{\\'INVOICE.INVOICE\\' | translate}}</span><nd-menu-button \\nng-disabled=\\\"!vm.order.canCreateInvoice() || vm.generatingInvoice\\\" ng-if=\\\"!vm.order.invoice\\\"><md-button main-action \\nng-disabled=\\\"vm.generatingInvoice\\\" ng-click=\\\"vm.createInvoice(true)\\\" translate=\\\"ORDER.CREATE_INVOICE\\\"></md-button>\\n<md-button action ng-disabled=\\\"vm.generatingInvoice\\\" ng-click=\\\"vm.createInvoice(false)\\\" \\ntranslate=\\\"ORDER.CREATE_DRAFT_INVOICE\\\"></md-button></nd-menu-button></div></md-card-title-text></md-card-title>\\n<md-card-content layout=\\\"row\\\" layout-align=\\\"start start\\\" class=\\\"no-padding\\\"><md-list flex><md-list-item \\nng-if=\\\"vm.order.invoice\\\" ng-init=\\\"invoice = vm.order.invoice\\\"><div \\nng-include=\\\"\\'app/main/apps/ecommerce/views/order/subviews/invoice-list-item.html\\'\\\" class=\\\"full-width\\\"></div>\\n</md-list-item><md-list-item ng-if=\\\"vm.order.pos_order_invoices\\\" ng-repeat=\\\"invoice in vm.order.pos_order_invoices\\\">\\n<div ng-include=\\\"\\'app/main/apps/ecommerce/views/order/subviews/invoice-list-item.html\\'\\\" class=\\\"full-width\\\"></div>\\n</md-list-item><md-list-item ng-if=\\\"vm.order.substitutive_invoices\\\" \\nng-repeat=\\\"invoice in vm.order.substitutive_invoices\\\"><div \\nng-include=\\\"\\'app/main/apps/ecommerce/views/order/subviews/invoice-list-item.html\\'\\\" class=\\\"full-width\\\"></div>\\n</md-list-item></md-list></md-card-content></md-card><nd-pos-order-reposition-of-card pos-order=\\\"vm.order\\\">\\n</nd-pos-order-reposition-of-card><md-card><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h3\\\" flex>{{\\'ORDER.ADDITIONAL_INFORMATION\\' | translate}}</span></div>\\n</md-card-title-text></md-card-title><md-card-content><div class=\\\"padding-bottom-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"mr-5\\\">{{\\'ORDER.CREATION_DATE\\' | translate}}:</span> <span \\nclass=\\\"secondary-text\\\">{{vm.order.created_at | date: \\'d/M/yyyy H:mm\\'}}</span></div><div class=\\\"padding-bottom-10\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"mr-5\\\">{{\\'ORDER.UPDATED_ON\\' | translate}}:</span> <span \\nclass=\\\"secondary-text\\\">{{vm.order.updated_at | date: \\'d/M/yyyy H:mm\\'}}</span></div><div flex=\\\"100\\\" layout=\\\"row\\\">\\n<md-input-container class=\\\"no-select\\\" flex><label translate=\\\"ORDER.STOCK_WAREHOUSE\\\">Stock warehouse</label><md-select \\nflex ng-change=\\\"vm.updateDebounce()\\\" \\nng-disabled=\\\"!vm.order.site || !this.autocode || vm.order.shipping_status !== vm.POS_ORDER_SHIPPING_STATUSES.POS_ORDER_SHIPPING_STATUS_PENDING\\\" \\nng-model=\\\"vm.order.source_warehouse\\\"><md-option ng-repeat=\\\"warehouse in vm.warehouses | orderBy:\\'name\\'\\\" \\nng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"no-md-errors-spacer\\\" flex=\\\"50\\\" ng-if=\\\"!vm.order.site\\\"><label translate=\\\"ORDER.REGISTER\\\">Register</label><input \\nng-disabled=\\\"true\\\" ng-value=\\\"vm.order.register_instance.code\\\"></md-input-container></div><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-input-container class=\\\"no-md-errors-spacer pr-10\\\" flex=\\\"50\\\" ng-if=\\\"vm.order.site\\\">\\n<label translate=\\\"ORDER.SITE\\\">Site</label><input ng-disabled=\\\"true\\\" ng-model=\\\"vm.order.site.name\\\"></md-input-container>\\n<md-input-container class=\\\"no-md-errors-spacer\\\" flex=\\\"50\\\" ng-if=\\\"vm.order.site\\\"><label translate=\\\"ORDER.ORIGIN_CODE\\\">\\nOrigin Code</label><input ng-disabled=\\\"true\\\" ng-model=\\\"vm.order.origin_code\\\"></md-input-container></div><div \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"left center\\\"><md-input-container class=\\\"fullwidth mb-0\\\" flex=\\\"100\\\"><label \\ntranslate=\\\"SALES.NOTES_OR_COMMENTS\\\">Notes or comments</label><textarea flex ng-change=\\\"vm.updateDebounce()\\\" \\nng-disabled=\\\"!this.autocode\\\" ng-model=\\\"vm.order.notes\\\" ng-model-options=\\\"{ updateOn: \\'blur\\'}\\\" rows=\\\"1\\\"></textarea>\\n</md-input-container></div><div flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"left center\\\"><md-input-container \\nclass=\\\"fullwidth mb-0\\\" flex=\\\"100\\\"><label translate=\\\"INVOICE.PRIVATE_NOTES\\\"></label><textarea flex \\nng-change=\\\"vm.updateDebounce()\\\" ng-model=\\\"vm.order.private_notes\\\" ng-model-options=\\\"{ updateOn: \\'blur\\'}\\\" rows=\\\"1\\\">\\n</textarea></md-input-container></div></md-card-content></md-card></div></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/scan-and-go/scan-and-go.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"ecommerce-scan-and-go\\\" layout=\\\"row\\\"><div class=\\\"center scrollable\\\" \\nflex layout=\\\"column\\\"><div class=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" \\ntranslate=\\\"NAVIGATION.SCAN_AND_GO\\\"></span><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><span flex></span></div>\\n</div><div flex layout=\\\"column\\\" layout-align=\\\"center center\\\" layout-fill layout-gt-xs=\\\"row\\\" ng-if=\\\"!vm.posOrder\\\"><div \\nflex layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-card class=\\\"m-0 form-card\\\" flex><md-card-title>\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"NAVIGATION.SCAN_AND_GO\\\">\\n</span></div></md-card-title-text></md-card-title><md-card-content><div class=\\\"pb-16\\\"><span \\nclass=\\\"step-text secondary-text\\\" translate=\\\"ORDERS.STOCK_WAREHOUSE_TEXT\\\"></span><div class=\\\"mt-8\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\"><md-input-container class=\\\"nd-search-input nd-filter-input no-select\\\" flex md-no-float><md-select flex \\nng-disabled=\\\"vm.scanning\\\" ng-model=\\\"vm.selectedWarehouseId\\\" ng-change=\\\"vm.warehouseChanged()\\\" \\nplaceholder=\\\"{{\\'ORDERS.STOCK_WAREHOUSE\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy:\\'name\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container></div></div><div><span class=\\\"step-text secondary-text\\\" \\ntranslate=\\\"ORDERS.ORDER_TYPES_TEXT\\\"></span><div class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex \\nng-click=\\\"vm.setOderTypeChanged(false)\\\" class=\\\"order-type-button\\\" ng-class=\\\"{\\'md-primary\\': !vm.multipleProductsOrder}\\\">\\n<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"ORDERS.1_PRODUCT\\\"></span></div></md-button><md-button flex ng-click=\\\"vm.setOderTypeChanged(true)\\\" \\nclass=\\\"order-type-button\\\" ng-class=\\\"{\\'md-primary\\': vm.multipleProductsOrder}\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/bundle-package.d1c0ad39.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"ORDERS.MULTIPLE_PRODUCTS\\\"></span></div></md-button></div></div><div class=\\\"mt-40 mb-20\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"w-100 h-80 mb-20\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular md-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.scanning\\\"></md-progress-circular><img \\nclass=\\\"w-100\\\" ng-if=\\\"!vm.scanning\\\" ng-src=\\\"/assets/images/scan-and-go-barcode.a72163c2.png\\\"></div><span \\nclass=\\\"step-text secondary-text\\\" translate=\\\"SCAN_AND_GO.START_SCANNING\\\"></span><md-button class=\\\"md-primary\\\" \\nng-click=\\\"vm.openScanner()\\\" translate=\\\"SCAN_AND_GO.ENTER_BARCODE_MANUALLY\\\">></md-button></div></md-card-content>\\n</md-card></div></div><div class=\\\"animate-fade-in-out\\\" ng-if=\\\"vm.bannerMessage\\\"><div class=\\\"did-you-know red mb-10\\\" \\nlayout=\\\"column\\\" layout-gt-md=\\\"row\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\" \\nclass=\\\"red-fg\\\"></md-icon><div class=\\\"did-you-know-message full-width\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\ntranslate=\\\"{{vm.bannerMessage}}\\\" data-translate-values=\\\"{barcode: vm.bannerBarcode}\\\"></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center start\\\" layout-align-gt-md=\\\"start center\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.closeBanner()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon><md-tooltip>{{\\\"GENERAL.CLOSE\\\" | translate}}\\n</md-tooltip></md-button></div></div></div><div flex layout=\\\"row\\\" layout-fill ng-if=\\\"vm.posOrder\\\"><div class=\\\"pr-15\\\" \\nflex layout=\\\"column\\\" layout-align=\\\"start start\\\"><nd-pos-order-fulfillment-card \\nclass=\\\"custom-first-margin full-width mb-16\\\" \\nng-class=\\\"{\\'selected\\': vm.selectedFulfillment === fulfillment.id && vm.posOrder.pos_order_fulfillments.length > 1}\\\" \\nng-repeat=\\\"fulfillment in vm.posOrder.pos_order_fulfillments | orderBy: \\'-number\\'\\\" fulfillment=\\\"fulfillment\\\" \\norder=\\\"vm.posOrder\\\" payment-methods=\\\"vm.paymentMethods\\\" shipping-boxes=\\\"vm.shippingBoxes\\\" \\nsendcloud-shipping-methods=\\\"vm.sendcloudShippingMethodsDict[fulfillment.id]\\\" warehouses=\\\"vm.warehouses\\\" \\nhighlight-products=\\\"true\\\" enable-barcode-listener=\\\"vm.selectedFulfillment === fulfillment.id\\\" \\nauto-assign-shipping-box=\\\"false\\\" ng-click=\\\"vm.selectFulfillment(fulfillment)\\\" scan-and-go=\\\"true\\\">\\n</nd-pos-order-fulfillment-card></div><div flex=\\\"30\\\" layout=\\\"column\\\"><nd-pos-order-contact-card \\nclass=\\\"full-width mb-15\\\" hide-billing-address=\\\"true\\\" order=\\\"vm.posOrder\\\" saving=\\\"vm.saving\\\">\\n</nd-pos-order-contact-card><nd-pos-order-reposition-of-card class=\\\"full-width\\\" pos-order=\\\"vm.posOrder\\\">\\n</nd-pos-order-reposition-of-card></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/site.html\",\"<div class=\\\"page-layout simple tabbed\\\" flex id=\\\"ecommerce-site\\\" layout=\\\"column\\\" ms-scroll><div \\nclass=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button black-fg\\\" \\ntranslate translate-attr-aria-label=\\\"SITE.GO_TO_SITES\\\" ui-sref=\\\"app.ecommerce.sites\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" \\ntranslate=\\\"SITE.SITE\\\"></div><div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" hide-md hide-sm hide-xs \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-ecommerce-icon class=\\\"mr-8\\\" platform=\\\"vm.site.platform\\\">\\n</nd-ecommerce-icon>{{vm.site.platform_name}}</div><div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\">\\n{{vm.site.name}}</div></div><span flex></span><md-menu class=\\\"mr-20\\\"><md-button aria-label=\\\"Select project\\\" \\nclass=\\\"mh-0 stroked md-primary\\\" md-menu-align-target md-menu-origin ng-click=\\\"$mdMenu.open()\\\"><span \\ntranslate=\\\"GENERAL.ACTIONS\\\"></span></md-button><md-menu-content width=\\\"4\\\"><md-menu-item \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV || vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO || vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE || vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP || vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY || vm.ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO\\\">\\n<md-button class=\\\"md-button\\\" ng-click=\\\"vm.sync(\\'sync-stock\\')\\\" \\nng-disabled=\\\"vm.synchronizing && vm.syncProducts || vm.synchronizing && vm.syncPrices\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-up\\\" \\nng-if=\\\"!vm.synchronizing || (vm.synchronizing && !vm.syncStock)\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.synchronizing && vm.syncStock\\\"></md-progress-circular><span \\nng-if=\\\"!vm.synchronizing || (vm.synchronizing && !vm.syncStock)\\\">{{\\'SITE.SYNC_ALL_STOCKS\\' | translate}} </span><span \\nng-if=\\\"vm.synchronizing && vm.syncStock\\\">{{\\'SITE.STOP_SYNC\\' | translate}}</span></div></md-button></md-menu-item>\\n<md-menu-item ng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><md-button \\nclass=\\\"md-button\\\" ng-click=\\\"vm.sync(\\'sync-prices\\')\\\" \\nng-disabled=\\\"vm.synchronizing && vm.syncProducts || vm.synchronizing && vm.syncStock\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-up\\\" \\nng-if=\\\"!vm.synchronizing || (vm.synchronizing && !vm.syncPrices)\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.synchronizing && vm.syncPrices\\\"></md-progress-circular><span \\nng-if=\\\"!vm.synchronizing || (vm.synchronizing && !vm.syncPrices)\\\">{{\\'SITE.SYNC_ALL_PRICES\\' | translate}} </span><span \\nng-if=\\\"vm.synchronizing && vm.syncPrices\\\">{{\\'SITE.STOP_SYNC\\' | translate}}</span></div></md-button></md-menu-item>\\n<md-menu-item ng-if=\\\"vm.showSyncProducts()\\\"><md-button class=\\\"md-button md-raised\\\" ng-click=\\\"vm.sync(\\'sync-products\\')\\\" \\nng-disabled=\\\"vm.synchronizing && vm.syncStock || vm.synchronizing && vm.syncPrices\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-up\\\" \\nng-if=\\\"!vm.synchronizing || (vm.synchronizing && !vm.syncProducts)\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.synchronizing && vm.syncProducts\\\"></md-progress-circular><span \\nng-if=\\\"!vm.synchronizing || (vm.synchronizing && !vm.syncProducts)\\\">{{\\'SITE.SYNC_ALL_PRODUCTS\\' | translate}} </span>\\n<span ng-if=\\\"vm.synchronizing && vm.syncProducts\\\">{{\\'SITE.STOP_SYNC\\' | translate}}</span></div></md-button>\\n</md-menu-item><md-divider></md-divider><md-menu-item \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><md-button class=\\\"md-button\\\" \\nng-click=\\\"vm.importMissingProducts()\\\" ng-disabled=\\\"vm.importing\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon\\n class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-down\\\" ng-if=\\\"!vm.importing\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.importing\\\"></md-progress-circular>{{\\'SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP\\' | translate}}\\n</div><md-tooltip md-direction=\\\"bottom\\\" ng-if=\\\"vm.importing\\\">{{\\\"SITE.IMPORTATION_IN_PROGRESS\\\" | translate}}\\n</md-tooltip></md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAdminActions()\\\"><md-button \\nclass=\\\"md-button md-warn\\\" ng-click=\\\"vm.importOrder()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-down\\\" ng-if=\\\"!vm.importing\\\"></md-icon>{{\\'SITE.SYNC_ORDER\\' | translate}}</div>\\n</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAdminActions()\\\"><md-button class=\\\"md-button md-warn\\\" \\nng-click=\\\"vm.importProducts()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" \\nmd-font-icon=\\\"icon-arrow-down\\\" ng-if=\\\"!vm.importing\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"vm.importing\\\"></md-progress-circular>{{\\'SITE.IMPORT_ALL_PRODUCTS\\' | translate}}</div></md-button></md-menu-item>\\n<md-menu-item ng-if=\\\"vm.showAdminActions()\\\"><md-button class=\\\"md-button md-warn\\\" \\nng-click=\\\"vm.importVariantCategories()\\\" ng-disabled=\\\"vm.importVariantCategoriesDisabled()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-down\\\" ng-if=\\\"!vm.importing\\\"></md-icon>\\n<md-progress-circular class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.importing\\\"></md-progress-circular>\\n{{\\'SITE.IMPORT_VARIANT_CATEGORIES\\' | translate}}</div></md-button></md-menu-item></md-menu-content></md-menu></div><div\\n class=\\\"content\\\" flex layout=\\\"column\\\"><div class=\\\"did-you-know yellow m-16\\\" ng-if=\\\"vm.site.sync_stock_only\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon></div><div flex layout=\\\"column\\\"><span class=\\\"font-size-14\\\">\\n{{\\'SITE.SYNC_STOCK_ONLY_BANNER_TITLE\\' | translate}}</span> <span class=\\\"secondary-text\\\" \\ntranslate=\\\"SITE.SYNC_STOCK_ONLY_BANNER_MSG\\\" translate-values=\\\"{site_name: vm.order.site.name}\\\"></span></div></div>\\n</div><md-nav-bar data-test-id=\\\"product-tab-bar\\\" md-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" \\nnav-bar-aria-label=\\\"navigation links\\\"><md-nav-item has-permission=\\\"app.ecommerce.sites.site.details\\\" \\nmd-nav-sref=\\\"app.ecommerce.sites.site.details\\\" name=\\\"details\\\">{{\\\"SITE.DETAILS\\\" | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.ecommerce.sites.site.products\\\" md-nav-sref=\\\"app.ecommerce.sites.site.products\\\" name=\\\"products\\\">\\n{{\\\"SITE.PRODUCTS\\\" | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.ecommerce.sites.site.categories\\\" \\nmd-nav-sref=\\\"app.ecommerce.sites.site.categories\\\" name=\\\"categories\\\">{{\\\"SITE.CATEGORIES\\\" | translate}}</md-nav-item>\\n<md-nav-item has-permission=\\\"app.ecommerce.sites.site.routing_rules\\\" \\nmd-nav-sref=\\\"app.ecommerce.sites.site.routing_rules\\\" name=\\\"routing_rules\\\" ng-if=\\\"vm.showAdminActions()\\\">\\n{{\\\"ROUTING_RULES.ROUTING_RULES\\\" | translate}}</md-nav-item></md-nav-bar><md-content class=\\\"transparent-bg\\\" flex \\nlayout=\\\"column\\\" ui-view=\\\"subcontent\\\"></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/sites/sites.html\",\"<div id=\\\"ecommerce-sites\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"false\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><div class=\\\"header\\\"><span \\nclass=\\\"h2 white-fg\\\"><md-icon md-font-icon=\\\"icon-web\\\" class=\\\"s24\\\"></md-icon><span translate=\\\"SITES.CHANNELS\\\">Sites\\n</span></span></div><md-content class=\\\"content\\\" flex ms-scroll></md-content></md-sidenav><div class=\\\"center\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"SITES.CHANNELS\\\"></span><div\\n layout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button ng-if=\\\"!vm.hasSubscription || !vm.contractedPlanLimit\\\" \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"app.ecommerce.sites.new-site\\\" ng-click=\\\"vm.newSite($event)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'SITES.NEW_SITE\\' | translate}}</div></md-button><md-button ng-if=\\\"vm.hasSubscription && vm.contractedPlanLimit\\\" \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"app.ecommerce.sites.new-site\\\" ng-click=\\\"vm.newSite($event)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" \\nng-if=\\\"vm.contractedPlanLimit.allowsCreation()\\\" class=\\\"mr-5\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" ng-if=\\\"vm.contractedPlanLimit.blocksCreation()\\\" \\nclass=\\\"mr-5\\\"></md-icon>{{\\'SITES.NEW_SITE\\' | translate}}</div></md-button></div></div><div class=\\\"content-card\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-md \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"site-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"search-input\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div>\\n<md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\">\\n</table></md-content></div></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/sorting/sorting.html\",\"<div id=\\\"ecommerce-sorting\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.SORTING\\\">Sorting</span></div>\\n<div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav class=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/ecommerce/views/sorting/sidenavs/main/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"product-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container>\\n<md-button class=\\\"m-0 ml-10\\\" ng-click=\\\"vm.addAllList()\\\" translate=\\\"SORTING.ADD_ALL\\\"></md-button><md-input-container \\nclass=\\\"m-0 ml-10\\\"><md-select ng-model=\\\"vm.gridOpts.columns\\\"><md-option ng-value=\\\"1\\\">1 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMN\\\"></span></md-option><md-option ng-value=\\\"2\\\">2 <span class=\\\"ml-5\\\" translate=\\\"SORTING.COLUMNS\\\">\\n</span></md-option><md-option ng-value=\\\"3\\\">3 <span class=\\\"ml-5\\\" translate=\\\"SORTING.COLUMNS\\\"></span></md-option>\\n<md-option ng-value=\\\"4\\\">4 <span class=\\\"ml-5\\\" translate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"5\\\">5 \\n<span class=\\\"ml-5\\\" translate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"6\\\">6 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"7\\\">7 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"8\\\">8 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"9\\\">9 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"10\\\">10 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"11\\\">11 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option><md-option ng-value=\\\"12\\\">12 <span class=\\\"ml-5\\\" \\ntranslate=\\\"SORTING.COLUMNS\\\"></span></md-option></md-select></md-input-container><span flex></span><md-progress-circular\\n ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div><md-menu class=\\\"m-6\\\"><md-button \\naria-label=\\\"Actions\\\" ng-click=\\\"vm.openMenu($mdMenu, $event)\\\" ng-disabled=\\\"vm.waiting\\\" class=\\\"stroked\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"20px\\\" ng-if=\\\"vm.waiting\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"SORTING.SORT\\\"></span></md-button><md-menu-content width=\\\"4\\\"><md-menu-item>\\n<md-button ng-click=\\\"vm.sortProducts(\\'category\\')\\\">{{\\'SORTING.BY_CATEGORY\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item><md-button ng-click=\\\"vm.sortProducts(\\'subcategory\\')\\\">{{\\'SORTING.BY_SUBCATEGORY\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item><md-button ng-click=\\\"vm.sortProducts(\\'brand\\')\\\">{{\\'SORTING.BY_BRAND\\' | translate}}\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.sortProducts(\\'season\\')\\\">\\n{{\\'SORTING.BY_SEASON\\' | translate}}</md-button></md-menu-item></md-menu-content></md-menu></div><md-button \\ntranslate=\\\"GENERAL.CLEAN\\\" class=\\\"stroked\\\" ng-click=\\\"vm.clearPositions()\\\"></md-button><md-button \\nng-disabled=\\\"!vm.changes\\\" class=\\\"md-primary md-raised\\\" translate=\\\"GENERAL.SAVE\\\" ng-click=\\\"vm.savePositions()\\\">\\n</md-button></div><md-content layout=\\\"row\\\" flex layout-fill style=\\\"overflow:hidden\\\"><div class=\\\"no-padding\\\" \\nlayout=\\\"column\\\" flex=\\\"20\\\" ms-scroll layout-fill><table class=\\\"dataTable dataTable-products row-border hover\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstanceProducts\\\" dt-options=\\\"vm.dtOptionsProducts\\\" dt-columns=\\\"vm.dtColumnsProducts\\\" \\nid=\\\"products-table\\\"></table></div><div flex=\\\"80\\\" class=\\\"border-left no-padding m-0\\\" ms-scroll><div \\nclass=\\\"did-you-know m-20\\\" ng-if=\\\"!vm.changes\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon>\\n</div><span translate=\\\"SITE.SORTING_SYNC_ALL_INFO\\\"></span></div></div><md-grid-list md-cols-xs=\\\"1\\\" \\nmd-cols=\\\"{{vm.gridOpts.columns}}\\\" md-row-height=\\\"1:1\\\" md-gutter=\\\"1\\\" dnd-list=\\\"vm.orderedProductsList\\\"><md-grid-tile \\nng-repeat=\\\"product in vm.orderedProductsList\\\" dnd-draggable=\\\"product\\\" \\ndnd-moved=\\\"vm.changes=true;vm.orderedProductsList.splice($index, 1);\\\" dnd-effect-allowed=\\\"move\\\" \\ndnd-external-sources=\\\"true\\\" dnd-type=\\\"\\'div\\'\\\"><div class=\\\"tile-div\\\" layout=\\\"column\\\" \\nng-class=\\\"{\\'grey-300-bg\\':!product.cover}\\\" style=\\\"background-image: url({{product.cover}})\\\" layout-align=\\\"start start\\\">\\n<md-button class=\\\"md-icon-button md-warn\\\" ng-click=\\\"vm.cleanProduct(product)\\\"><md-icon md-font-icon=\\\"icon-delete\\\">\\n</md-icon></md-button></div></md-grid-tile></md-grid-list></div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/verifactu/verifactu.html\",\"<div id=\\\"integration-app-verifactu\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button black-fg\\\" ng-click=\\\"vm.goBack()\\\" translate translate-attr-aria-label=\\\"PRODUCT.GO_TO_PRODUCTS\\\">\\n<md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div class=\\\"integration-app-icon\\\"><img \\nsrc=\\\"{{vm.integrationApp.icon}}\\\"></div><div class=\\\"h2\\\" translate=\\\"VERIFACTU.VERIFACTU\\\"></div></div></div></div></div>\\n<div class=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" \\nnav-bar-aria-label=\\\"navigation links\\\"><md-nav-item md-nav-sref=\\\"app.integration_apps.verifactu.details\\\" \\nhas-permission=\\\"app.integration_apps.verifactu.details\\\" name=\\\"details\\\">{{\\\"VERIFACTU.DETAILS\\\" | translate}}\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.integration_apps.verifactu.operations\\\" ng-disabled=\\\"true\\\" \\nno-has-permission=\\\"app.integration_apps.verifactu.operations\\\" name=\\\"operations\\\">{{\\\"VERIFACTU.OPERATIONS\\\" | translate}}\\n</md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content>\\n</div></div>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/apps.html\",\"<div id=\\\"apps\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"column\\\"><h2 \\ntranslate=\\\"APPS.APPS_AND_INTEGRATIONS\\\" class=\\\"h2 mb-16\\\"></h2><h3 hide-xs hide-sm \\ntranslate=\\\"APPS.APPS_INFORMATION_TEXT\\\" class=\\\"h3 secondary-text mt-0\\\"></h3></div><div class=\\\"pl-8 pr-8\\\" layout=\\\"row\\\" \\nlayout-wrap><nd-integration-card ng-repeat=\\\"app in vm.integrationApps | orderBy: \\'position\\'\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\" flex-gt-lg=\\\"25\\\" app=\\\"app\\\"></nd-integration-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/adjustment/adjustment.html\",\"<div id=\\\"adjustment\\\" class=\\\"page-layout simple tabbed right-sidenav\\\" layout=\\\"row\\\"><div \\nclass=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\" flex ms-scroll><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.inventory.adjustments\\\" translate \\ntranslate-attr-aria-label=\\\"ADJUSTMENT.GO_TO_ADJUSTMENTS\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div ng-if=\\\"!vm.isNewAdjustment\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"ADJUSTMENT.ADJUSTMENT\\\"></div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\">{{vm.adjustment.autocode}}-<span class=\\\"ml-5\\\">\\n{{vm.getStatusLabel(vm.adjustment.status)}}</span></div></div><div ng-if=\\\"vm.isNewAdjustment\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"ADJUSTMENT.NEW_ADJUSTMENT\\\"></div></div><md-button \\nclass=\\\"m-0 mr-16 md-primary stroked\\\" translate=\\\"ADJUSTMENT.DELETE\\\" ng-if=\\\"vm.adjustment.status == 1\\\" \\nhas-permission=\\\"inventory.adjustments.delete\\\" ng-click=\\\"vm.delete()\\\"></md-button></div></div></div><div \\nclass=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" \\nnav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewAdjustment\\\"><md-nav-item \\nmd-nav-sref=\\\"app.inventory.adjustments.adjustment.details\\\" \\nhas-permission=\\\"app.inventory.adjustments.adjustment.details\\\" name=\\\"details\\\"><span translate=\\\"ADJUSTMENT.DETAILS\\\">\\n</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.adjustments.adjustment.products\\\" \\nhas-permission=\\\"app.inventory.adjustments.adjustment.products\\\" name=\\\"products\\\"><span translate=\\\"ADJUSTMENT.PRODUCTS\\\">\\n</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" layout=\\\"column\\\" flex>\\n</md-content></div></div><md-sidenav class=\\\"sidenav md-sidenav-right\\\" \\nmd-is-locked-open=\\\"$mdMedia(\\'gt-md\\') && vm.barcodeLogOpened\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><div\\n ng-repeat=\\\"pendingBarcode in vm.pendingBarcodes\\\"><div class=\\\"p-5 border-bottom\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center start\\\" style=\\\"background-color: #36C1F1; height: 120px\\\" ng-if=\\\"$index==0\\\" \\nng-class=\\\"{\\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\'}\\\">\\n<div class=\\\"md-padding\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><h1 class=\\\"m-0 p-0\\\">\\n{{pendingBarcode.size}} - {{pendingBarcode.color}}</h1><h2 class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</h2><p \\nclass=\\\"m-0 p-0 secondary-text\\\">{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 pl-15\\\" \\nng-if=\\\"pendingBarcode.status != \\'success\\'\\\"><md-progress-circular ng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" \\nmd-diameter=\\\"30px\\\" class=\\\"mh-8\\\"></md-progress-circular><p>{{pendingBarcode.barcode}}</p></div></div><div \\nclass=\\\"m-0 p-15 border-bottom\\\" ng-if=\\\"$index!=0\\\" \\nng-class=\\\"{\\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\', \\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-bg\\': pendingBarcode.status == \\'success\\'}\\\">\\n<div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><p class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</p><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.size}} - {{pendingBarcode.color}}</p><p class=\\\"m-0 p-0 secondary-text\\\">\\n{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status != \\'success\\'\\\" layout=\\\"row\\\"><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.barcode}}</p><span flex></span><md-progress-circular \\nng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" md-diameter=\\\"10px\\\" class=\\\"mh-8\\\"></md-progress-circular></div></div></div>\\n</md-sidenav></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/adjustments/adjustments.html\",\"<div id=\\\"adjustments\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"ADJUSTMENTS.ADJUSTMENTS\\\"></span><div flex \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"inventory.adjustments.create\\\" ui-sref=\\\"app.inventory.adjustments.new.details\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'ADJUSTMENTS.NEW_ADJUSTMENT\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\">\\n<md-sidenav class=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" \\nmd-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/adjustments/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md \\nng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.filtersNotifications\\\"><span class=\\\"notification-number\\\">{{vm.filtersNotifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"adjustment-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/collection/collection.html\",\"<div id=\\\"inventory-collection\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\" flex ms-scroll><div \\nclass=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex>\\n<md-button class=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.inventory.collections\\\" translate \\ntranslate-attr-aria-label=\\\"COLLECTION.GO_TO_COLLECTIONS\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"h2\\\" translate=\\\"COLLECTION.COLLECTION\\\"></div><div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\">\\n{{vm.collection.code}}</div></div><md-button class=\\\"m-0 mr-16 md-primary stroked\\\" translate=\\\"GENERAL.DELETE\\\" \\nhas-permission=\\\"inventory.collections.delete\\\" ng-click=\\\"vm.deleteCollection($event)\\\"></md-button></div></div></div><div\\n class=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" \\nnav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\"><md-nav-item \\nmd-nav-sref=\\\"app.inventory.collections.collection.details\\\" \\nhas-permission=\\\"app.inventory.collections.collection.details\\\" name=\\\"details\\\">{{\\\"COLLECTION.DETAILS\\\" | translate}}\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.collections.collection.products\\\" \\nhas-permission=\\\"app.inventory.collections.collection.products\\\" name=\\\"styles\\\">{{\\\"COLLECTION.PRODUCTS\\\" | translate}}\\n</md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content>\\n</div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/configuration.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"configuration\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav no-padding\\\" \\nmd-component-id=\\\"sidenav\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><div \\nclass=\\\"navigation-simple mt-8\\\" layout=\\\"column\\\"><div class=\\\"sidenav-item ph-20\\\" flex \\nhas-permission-and-feature=\\\"{{option.serf}}\\\" ng-repeat=\\\"(code, option) in vm.configurationOptions\\\" \\nng-show=\\\"option.show\\\"><div class=\\\"item text-truncate text-bold p-0\\\" flex ng-if=\\\"option.type == \\'title\\'\\\">\\n{{\\'CONFIGURATION.\\' + option.title | translate}}</div><md-button aria-label=\\\"configuration\\\" \\nclass=\\\"item button md-indent\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-class=\\\"{\\'selected\\': vm.isActive(option)}\\\" ng-click=\\\"vm.goTo(option)\\\" ng-if=\\\"option.type == \\'button\\'\\\"><span \\nclass=\\\"title text-truncate mr-5\\\">{{\\'CONFIGURATION.\\' + option.title | translate}}</span><md-tooltip>\\n{{\\'CONFIGURATION.\\' + option.title | translate}}</md-tooltip><md-icon class=\\\"s16 has-permission-and-feature-icon\\\" \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon></md-button></div></div>\\n</md-sidenav><div flex layout=\\\"column\\\" ms-scroll><div class=\\\"header\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-menu\\\"></md-icon></md-button><div flex \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"h2\\\">\\n{{\\'CONFIGURATION.\\' + vm.currentOption.title | translate}}</div><div><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"{{vm.currentOption.newButtonPermission}}\\\" nd-track-click=\\\"add\\\" ng-click=\\\"vm.createClicked()\\\" \\nng-if=\\\"vm.currentOption.newButtonLabel\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{vm.currentOption.newButtonLabel | translate}}</div></md-button></div></div><div \\nflex layout=\\\"row\\\" layout-align=\\\"space-between center\\\" ng-if=\\\"vm.currentOption.title2\\\"><div class=\\\"h2 pl-16\\\">\\n{{\\'CONFIGURATION.\\' + vm.currentOption.title2 | translate}}</div><div><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"{{vm.currentOption.newButtonPermission}}\\\" nd-track-click=\\\"add\\\" ng-click=\\\"vm.create2Clicked()\\\" \\nng-disabled=\\\"vm.create2Disabled\\\" ng-if=\\\"vm.currentOption.newButtonLabel2\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{vm.currentOption.newButtonLabel2 | translate}}</div></md-button></div></div></div><md-content class=\\\"transparent-bg\\\" \\nflex layout=\\\"column\\\" ui-view=\\\"subcontent\\\"></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/labels-generator/labels-generator.html\",\"<div id=\\\"labels-generator\\\" class=\\\"page-layout\\\" layout=\\\"column\\\"><nd-barcode-listener \\ncallback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><a id=\\\"downloadAnchorElem\\\" style=\\\"display:none\\\">\\n</a><div class=\\\"header h-64\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" \\ntranslate=\\\"LABELS_GENERATOR.LABELS_GENERATOR\\\">Labels generator</div><nd-new-feature-badge id=\\\"LABELS_GENERATOR\\\">\\n</nd-new-feature-badge><span flex></span><md-button class=\\\"stroked md-primary\\\" \\nng-click=\\\"vm.showImportFromWarehouseDialog()\\\" \\nng-disabled=\\\"vm.importing || vm.printing_pdf || vm.printing_spreadsheet || !vm.productLabelDesign.pricing_tier\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" flex><md-icon md-font-icon=\\\"icon-import\\\" class=\\\"mr-8\\\"></md-icon><span>\\n{{\\'LABELS_GENERATOR.IMPORT_FROM_STOCK\\' |translate}}</span></div></md-button></div><div layout=\\\"column\\\">\\n<nd-product-label-design-card product-label-design=\\\"vm.productLabelDesign\\\" \\nproduct-label-designs=\\\"vm.productLabelDesigns\\\" pricing-tiers=\\\"vm.pricingTiers\\\"></nd-product-label-design-card><md-card>\\n<md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">\\n{{\\'PRODUCTS.PRODUCTS\\' | translate}}</span><nd-new-feature-badge id=\\\"LABELS_GENERATOR_PRODUCT\\\"></nd-new-feature-badge>\\n<span flex></span><div><md-button class=\\\"m-0 mr-10 stroked generate-button\\\" \\nng-disabled=\\\"vm.productVariants.length == 0 || vm.totalLabels == 0 || vm.printing_pdf || vm.printing_spreadsheet || vm.importing\\\" \\nng-click=\\\"vm.printLabels(\\'spreadsheet\\')\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nng-if=\\\"vm.printing_spreadsheet\\\" class=\\\"mh-8\\\" md-diameter=\\\"20px\\\"></md-progress-circular><span \\ntranslate=\\\"LABELS_GENERATOR.GENERATE_EXCEL\\\">Generate excel</span></div></md-button><md-button \\nclass=\\\"md-raised md-primary no-margin generate-button\\\" \\nng-disabled=\\\"!vm.productLabelDesign.isValid() || vm.productVariants.length == 0 || vm.totalLabels == 0 || vm.printing_pdf || vm.printing_spreadsheet || vm.importing\\\" \\nng-click=\\\"vm.printLabels(\\'pdf\\')\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nng-if=\\\"vm.printing_pdf\\\" class=\\\"mh-8\\\" md-diameter=\\\"20px\\\"></md-progress-circular><span \\ntranslate=\\\"LABELS_GENERATOR.GENERATE_PDF\\\">Generate pdf</span></div></md-button></div></div></md-card-title-text>\\n</md-card-title><md-card-content><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap layout-align=\\\"start start\\\"><div \\nlayout=\\\"row\\\" class=\\\"mb-16\\\"><md-autocomplete md-items=\\\"product in vm.productsQuerySearch(sale)\\\" \\nmd-selected-item=\\\"vm.selectedItem\\\" md-search-text=\\\"vm.productSearchText\\\" \\nmd-selected-item-change=\\\"vm.selectedProductChange(product)\\\" md-item-text=\\\"vm.getAutocompleteText(product)\\\" \\nmd-min-length=\\\"3\\\" md-delay=\\\"300\\\" placeholder=\\\"{{\\'SALES.SEARCH_PRODUCT\\' | translate}}\\\" md-no-cache=\\\"true\\\" \\nclass=\\\"mr-10 w-350\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\" ng-focus=\\\"vm.onFocus()\\\" ng-blur=\\\"vm.onBlur()\\\"><md-item-template><div \\nlayout=\\\"row\\\"><div><strong>{{product.code}}</strong> - <span md-highlight-text=\\\"vm.productSearchText\\\" \\nmd-highlight-flags=\\\"^i\\\">{{product.name}}</span></div><div flex class=\\\"text-right\\\">\\n{{product.price_incl_tax | price}}{{::vm.currencyCharacter}}</div></div></md-item-template><md-not-found><span \\ntranslate=\\\"SALES.NO_PRODUCT_FOUND\\\" translate-values=\\\"{name: vm.productSearchText}\\\">\\nNo products matching \\\"{{vm.productSearchText}}\\\" were found.</span></md-not-found></md-autocomplete><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<md-tooltip>{{\\'TRANSFER.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button></div><span flex></span><div \\nlayout=\\\"row\\\" class=\\\"mt-8\\\"><md-input-container class=\\\"md-icon-float m-0 w-200\\\"><label \\ntranslate=\\\"LABELS_GENERATOR.ORDER_BY\\\">Order by</label><md-select required ng-model=\\\"vm.orderBy\\\"><md-option \\nng-repeat=\\\"(code, translation) in vm.ORDER_BY\\\" ng-value=\\\"code\\\">{{(\\'LABELS_GENERATOR.\\' + translation) | translate}}\\n</md-option></md-select></md-input-container><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"secondary-text m-10\\\">\\n<span>{{\\'LABELS_GENERATOR.TOTAL_LABELS\\' | translate }}: {{vm.totalLabels}}</span> <span class=\\\"mh-5\\\" \\nng-if=\\\"vm.productLabelDesign.page_layout != \\'custom\\'\\\">|</span> <span \\nng-if=\\\"vm.productLabelDesign.page_layout != \\'custom\\'\\\">\\n{{\\'LABELS_GENERATOR.TOTAL_PAGES\\' | translate }}: {{vm.getTotalPages()}}</span></div></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-hide=\\\"!vm.importing\\\" class=\\\"h-400\\\"><md-progress-circular ng-disabled=\\\"!vm.importing\\\" \\nclass=\\\"md-primary\\\" md-diameter=\\\"40\\\"></md-progress-circular></div><div class=\\\"table-wrapper\\\" \\nng-repeat=\\\"product in vm.products track by $index\\\"><table flex class=\\\"simple\\\"><thead><tr \\nclass=\\\"md-background-bg md-hue-2\\\"><th layout=\\\"row\\\" class=\\\"name-column\\\">{{\\'PRODUCT.PRODUCT\\' | translate}} <span flex>\\n</span> <span class=\\\"md-warn-fg cursor-pointer\\\" ng-click=\\\"vm.deleteProduct(product)\\\"><md-icon class=\\\"md-warn-fg\\\" \\nmd-font-icon=\\\"icon-delete\\\"></md-icon></span></th><th class=\\\"border-left\\\">{{\\'PRODUCT.VARIANTS\\' | translate}}</th><th \\nclass=\\\"variant-header border-left\\\" ng-repeat=\\\"size in product.sizes\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{size | codename }}</md-tooltip><span class=\\\"text-truncate\\\">{{size.name || size.code}}</span></th></tr></thead><tbody>\\n<tr ng-repeat=\\\"color in product.colors\\\"><td rowspan=\\\"{{product.colors.length}}\\\" class=\\\"name-column no-border\\\" \\nng-if=\\\"$index == 0\\\"><div layout=\\\"column\\\"><span>{{product.code}}</span> <span>{{product.name}}</span></div></td><td \\nclass=\\\"border-left non-primary-variant-cell\\\">{{color | codename}}</td><td class=\\\"border-left text-right w-75\\\" \\nng-repeat=\\\"size in product.sizes\\\"><div layout=\\\"column\\\" layout-align=\\\"end space-between\\\" \\nng-if=\\\"product.productVariants[size.id][color.id]\\\"><input class=\\\"text-right nd-input\\\" type=\\\"number\\\" min=\\\"0\\\" step=\\\"1\\\" \\nplaceholder=\\\"{{\\'LABELS_GENERATOR.QUANTITY\\' | translate}}\\\" \\nng-change=\\\"vm.amountChanged(product.productVariants[size.id][color.id].amount, \\'{{product.productVariants[size.id][color.id].amount}}\\')\\\" \\nng-model=\\\"product.productVariants[size.id][color.id].amount\\\"> <small class=\\\"pt-5\\\" \\nng-class=\\\"{\\'secondary-text text-strike\\' : product.productVariants[size.id][color.id].hasDiscount && vm.hasPrice(product.productVariants[size.id][color.id]) && product.productVariants[size.id][color.id].useDiscountPrice}\\\">\\n{{vm.getPrice(product.productVariants[size.id][color.id], false) | price}}{{vm.currencyCharacter | currencyCharacter}}\\n</small><div layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"purple-500-fg pt-5\\\" \\nng-show=\\\"product.productVariants[size.id][color.id].hasDiscount\\\"><input type=\\\"checkbox\\\" \\nng-model=\\\"product.productVariants[size.id][color.id].useDiscountPrice\\\" \\nng-init=\\\"vm.initUseDiscountPrice(product.productVariants[size.id][color.id])\\\"><md-icon md-font-icon=\\\"icon-sale\\\" \\nclass=\\\"purple-500-fg s12\\\" \\nng-class=\\\"{\\'grey-300-fg secondary-text\\': !product.productVariants[size.id][color.id].useDiscountPrice}\\\"></md-icon>\\n<small ng-class=\\\"{\\'secondary-text text-strike\\': !product.productVariants[size.id][color.id].useDiscountPrice}\\\">\\n{{vm.getPrice(product.productVariants[size.id][color.id], true) | price}}{{vm.currencyCharacter | currencyCharacter}}\\n</small></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-icon md-font-icon=\\\"icon-barcode\\\" \\nclass=\\\"text-strike no-margin\\\" ng-if=\\\"!product.productVariants[size.id][color.id].barcode\\\"><md-tooltip>\\n{{\\'LABELS_GENERATOR.NO_BARCODE\\' | translate}}</md-tooltip></md-icon></div><small class=\\\"red-fg pt-5\\\" \\nng-if=\\\"!vm.hasPrice(product.productVariants[size.id][color.id])\\\">{{\\'LABELS_GENERATOR.WITHOUT_PRICE\\' | translate}}\\n</small></div></td></tr></tbody></table></div></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/new-product/new-product.html\",\"<div id=\\\"new-product\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button black-fg\\\" aria-label=\\\"Go to products\\\" ng-click=\\\"vm.gotoProducts()\\\" \\ndata-test-id=\\\"product-button-go-to-products\\\" translate translate-attr-aria-label=\\\"PRODUCT.GO_TO_PRODUCTS\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"{{vm.getMainTitle()}}\\\"></div></div></div></div>\\n</div><div class=\\\"content m-8 mt-0 pt-0 mb-16 mr-16 ml-16\\\" layout=\\\"column\\\" flex><ms-form-wizard flex><md-tabs \\nmd-dynamic-height md-selected=\\\"msWizard.selectedIndex\\\" md-center-tabs=\\\"true\\\"><md-tab md-on-deselect=\\\"vm.saveProduct()\\\">\\n<md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.formStep1.$invalid\\\">1</span> <span class=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.formStep1.$valid\\\"><i\\n class=\\\"icon-check s16\\\"></i> </span><span class=\\\"ms-form-wizard-step-text\\\" translate=\\\"{{vm.getFirstStepTitle()}}\\\">\\n</span></span></md-tab-label><md-tab-body><form name=\\\"vm.formStep1\\\" ms-form-wizard-form novalidate class=\\\"pb-0\\\">\\n<nd-product-main-information product=\\\"vm.product\\\" brands=\\\"vm.brands\\\" compositions=\\\"vm.compositions\\\" \\ncategories=\\\"vm.categories\\\" subcategories=\\\"vm.subcategories\\\" collections=\\\"vm.collections\\\" seasons=\\\"vm.seasons\\\" \\ncontacts=\\\"vm.contacts\\\" currencies=\\\"vm.currencies\\\" pricing-tiers=\\\"vm.pricingTiers\\\" \\nvariant-categories=\\\"vm.variantCategories\\\" save-callback=\\\"vm.mainInformationSaveCallback(product)\\\" \\ninventory-configuration=\\\"vm.inventoryConfiguration\\\" hide-toasts=\\\"true\\\" is-new=\\\"true\\\"></nd-product-main-information>\\n</form></md-tab-body></md-tab><md-tab ng-disabled=\\\"vm.formStep1.$invalid || vm.product.is_raw_material\\\" \\nmd-on-deselect=\\\"vm.saveProductPrices()\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.formStep1.$invalid || !vm.stepTwoValid\\\">2</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"!vm.formStep1.$invalid && vm.stepTwoValid\\\"><i \\nclass=\\\"icon-check s16\\\"></i> </span><span class=\\\"ms-form-wizard-step-text\\\" translate=\\\"PRODUCT.PRICING_TIERS\\\"></span>\\n</span></md-tab-label><md-tab-body><div flex class=\\\"md-padding\\\"><form editable-form name=\\\"vm.formStep2\\\" \\nms-form-wizard-form novalidate ng-hide=\\\"true\\\"></form><nd-product-pricing-tiers product=\\\"vm.product\\\" \\npricing-tiers=\\\"vm.pricingTiers\\\" hide-toasts=\\\"true\\\" taxes=\\\"vm.taxes\\\" is-valid=\\\"vm.stepTwoValid\\\" \\nhide-discount-warning=\\\"true\\\" is-new=\\\"true\\\"></nd-product-pricing-tiers></div></md-tab-body></md-tab><md-tab \\nng-disabled=\\\"vm.formStep1.$invalid || !vm.stepTwoValid && !vm.product.is_raw_material\\\"><md-tab-label><span \\nclass=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"!vm.isValid()\\\">3</span>\\n <span class=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.isValid()\\\"><i class=\\\"icon-check s16\\\"></i> </span><span \\nclass=\\\"ms-form-wizard-step-text\\\" translate=\\\"PRODUCT.VARIANT_CATEGORIES\\\"></span></span></md-tab-label><md-tab-body><form\\n name=\\\"vm.formStep3\\\" ms-form-wizard-form novalidate><nd-product-chip-variants product=\\\"vm.product\\\" \\nsave-callback=\\\"vm.saveProductVariantsCallback()\\\" hide-toasts=\\\"true\\\" is-new=\\\"true\\\"></nd-product-chip-variants></form>\\n</md-tab-body></md-tab></md-tabs><div class=\\\"navigation\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"stroked md-primary\\\" ng-click=\\\"msWizard.previousStep()\\\" ng-disabled=\\\"msWizard.isFirstStep()\\\">\\n{{\\'PRODUCT.BACK\\' |translate}}</md-button><md-button id=\\\"test-apply-button\\\" data-test-id=\\\"addproduct-button-1next\\\" \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.nextStep(msWizard)\\\" ng-hide=\\\"msWizard.isLastStep()\\\" ng-if=\\\"!vm.waiting\\\" \\nng-disabled=\\\"msWizard.currentStepInvalid() || msWizard.selectedIndex == 1 && !vm.stepTwoValid\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">{{\\'PRODUCT.NEXT\\' |translate}}</div></md-button><md-button class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"true\\\" ng-if=\\\"vm.waiting\\\" ng-hide=\\\"msWizard.isLastStep()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular class=\\\"md-primary\\\" md-diameter=\\\"16px\\\"></md-progress-circular><span class=\\\"mh-10\\\">\\n{{\\'PRODUCT.NEXT\\' |translate}}</span></div></md-button><md-button id=\\\"test-finish-button\\\" \\ndata-test-id=\\\"addproduct-button-finish\\\" class=\\\"md-raised\\\" \\nng-class=\\\"{\\'md-disabled\\': vm.waiting || !vm.isValid() , \\'md-green-500-bg white-fg\\': !vm.waiting && vm.isValid()}\\\" \\nng-click=\\\"vm.finishWizard();\\\" ng-show=\\\"msWizard.isLastStep()\\\" ng-disabled=\\\"vm.waiting || !vm.isValid()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-primary\\\" md-diameter=\\\"16px\\\" \\nng-show=\\\"vm.waiting\\\"></md-progress-circular><span class=\\\"mh-10\\\" translate=\\\"PRODUCT.FINISH\\\"></span></div></md-button>\\n</div></ms-form-wizard></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/packing/packing.html\",\"<div id=\\\"inventory-packing\\\" class=\\\"blank page-layout simple tabbed no-padding\\\" flex layout=\\\"row\\\"><div \\nclass=\\\"content mt-0 m-8\\\" flex layout=\\\"column\\\"><nd-top-bar><leading><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Back\\\" \\nng-click=\\\"vm.back()\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button></leading><bar-title>\\n<nd-screen-title header-title=\\\"{{ \\'PACKING.PACKING\\' | translate }}\\\" subtitle=\\\"{{vm.packingOrder.autocode}}\\\" \\nstatus=\\\"{{vm.packingOrder.status}}\\\" status-translate=\\\"PACKING\\\" status-colors=\\\"vm.PACKING_ORDER_STATUS_COLORS\\\" \\nstatus-labels=\\\"vm.PACKING_ORDER_STATUS\\\"></nd-screen-title></bar-title><actions><md-button class=\\\"md-warn stroked\\\" \\nng-disabled=\\\"vm.finishing || vm.loading\\\" ng-if=\\\"!vm.packingOrder.isShipped()\\\" \\nhas-permission=\\\"inventory.packings.delete\\\" ng-click=\\\"vm.deletePackingOrder()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.finishing\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.CANCEL\\\"></span></div></md-button><nd-menu-button class=\\\"m-0\\\" \\nmd-class=\\\"\\'md-primary md-raised\\'\\\" ng-if=\\\"vm.hasCompanySendcloud() && vm.packingOrder.hasParcels()\\\"><md-button \\nmain-action action translate=\\\"PICKING_AND_PACKING.VIEW_LABELS\\\" ng-click=\\\"vm.handleDownloadLabels()\\\"></md-button>\\n<md-button action translate=\\\"PICKING_AND_PACKING.VIEW_LABELS_AND_DELIVERIES\\\" \\nng-click=\\\"vm.handleDownloadLabelsWithDeliveries()\\\"></md-button></nd-menu-button><md-button \\nng-if=\\\"vm.packingOrder.isInProgress() && vm.hasCompanySendcloud()\\\" ng-disabled=\\\"vm.finishing || vm.loading\\\" \\nclass=\\\"md-primary stroked\\\" has-permission=\\\"inventory.packings.pack_products\\\" ng-click=\\\"vm.tagAndFinishWithSendcloud()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon ng-if=\\\"!vm.finishing\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" class=\\\"mr-8\\\"></md-icon><md-progress-circular\\n ng-if=\\\"vm.finishing\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8\\\"></md-progress-circular><span translate=\\\"PACKING.TAG_AND_FINISH\\\">\\n</span></div></md-button><md-button ng-if=\\\"vm.packingOrder.isInProgress()\\\" ng-disabled=\\\"vm.finishing || vm.loading\\\" \\nclass=\\\"md-primary md-raised\\\" has-permission=\\\"inventory.packings.pack_products\\\" ng-click=\\\"vm.checkAndFinishDialog()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.finishing\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mr-8\\\"></md-progress-circular><span translate=\\\"GENERAL.FINISH\\\"></span></div></md-button><md-button \\nng-if=\\\"vm.packingOrder.isPendingToShip() && vm.hasCompanySendcloud() && !vm.packingOrder.hasParcels()\\\" \\nclass=\\\"md-primary stroked\\\" ng-disabled=\\\"vm.finishing || vm.loading\\\" has-permission=\\\"inventory.packings.pack_products\\\" \\nng-click=\\\"vm.generateLabels()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nng-if=\\\"!vm.finishing\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" class=\\\"mr-8\\\">\\n</md-icon><md-progress-circular ng-if=\\\"vm.finishing\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8\\\"></md-progress-circular><span \\ntranslate=\\\"ORDERS.GENERATE_LABELS\\\"></span></div></md-button><md-button ng-if=\\\"vm.packingOrder.isPendingToShip()\\\" \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.finishing || vm.loading\\\" has-permission=\\\"inventory.packings.ship\\\" \\nng-click=\\\"vm.openShippingDialog()\\\"><span translate=\\\"PACKING.MARK_AS_SHIPPED\\\"></span></md-button></actions></nd-top-bar>\\n<md-nav-bar layout=\\\"row\\\" style=\\\"margin-left: 4px\\\" layout-align=\\\"start center\\\" md-no-ink-bar=\\\"true\\\" \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nmd-nav-sref=\\\"app.inventory.picking_packing.packing_order.details\\\" name=\\\"details\\\"><span translate=\\\"GENERAL.DETAILS\\\">\\n</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.picking_packing.packing_order.products\\\" name=\\\"products\\\">\\n<span translate=\\\"PACKING.PACKING\\\"></span></md-nav-item></md-nav-bar><md-content class=\\\"transparent-bg no-padding\\\" flex \\nlayout=\\\"column\\\" ui-view=\\\"subcontent\\\"></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking/picking.html\",\"<div id=\\\"inventory-picking\\\" class=\\\"blank\\\" layout=\\\"column\\\"><form name=\\\"pickingForm\\\"><div \\nclass=\\\"header md-background-bg md-hue-2\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex \\nclass=\\\"mr-10\\\"><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Go to pickings list\\\" translate ng-click=\\\"vm.goBack()\\\" \\ntranslate-attr-aria-label=\\\"PICKING.PICKING\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\" class=\\\"black-fg\\\"></md-icon>\\n</md-button><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div class=\\\"h2\\\" translate=\\\"PICKING.PICKING\\\"></div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 pr-10\\\">{{vm.pickingOrder.autocode}}</div><span class=\\\"ml-16 status status-badge\\\" \\nng-class=\\\"vm.getStatusColorClass()\\\">{{vm.getStatusLabel()}}</span></div><span flex></span><md-button \\nclass=\\\"md-warn stroked\\\" ng-disabled=\\\"vm.pickingOrder.has_packing_orders || vm.finishing\\\" \\nhas-permission=\\\"inventory.pickings.delete\\\" ng-click=\\\"vm.deletePickingOrder()\\\"><span translate=\\\"GENERAL.CANCEL\\\"></span>\\n</md-button><nd-menu-button md-class=\\\"\\'md-primary md-raised\\'\\\" ng-if=\\\"vm.isPickingOrderPicking()\\\"><md-button \\nmain-action ng-click=\\\"vm.handleFinishPicking()\\\" translate=\\\"PICKING.MARK_AS_PICKED\\\"></md-button><md-button action \\nng-click=\\\"vm.handleFinishPicking($event)\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\ntranslate=\\\"PICKING.MARK_AS\\\" class=\\\"mr-8\\\"></div><div class=\\\"status-badge md-orange-100-bg\\\" translate=\\\"PICKING.PICKED\\\">\\n</div></div></md-button><md-button action ng-click=\\\"vm.handleFinishPickingAndPack($event)\\\"><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div translate=\\\"PICKING.MARK_AS\\\" class=\\\"mr-8\\\"></div><div \\nclass=\\\"status-badge md-blue-100-bg\\\" translate=\\\"PACKING.PACKED\\\"></div></div></md-button><md-button action \\nng-click=\\\"vm.handleFinishPickingAndShip($event)\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\ntranslate=\\\"PICKING.MARK_AS\\\" class=\\\"mr-8\\\"></div><div class=\\\"status-badge md-green-100-bg\\\" translate=\\\"PACKING.SHIPPED\\\">\\n</div></div></md-button></nd-menu-button></div><nd-barcode-listener callback=\\\"vm.uidListenerCallback(barcode)\\\" \\ngs1datamatrix_callback=\\\"vm.gs1datamatrixCallback(barcode)\\\"></nd-barcode-listener></div><div \\nclass=\\\"content mr-8 ml-8 mb-8\\\" layout=\\\"column\\\"><md-card class=\\\"mt-0\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" translate=\\\"PICKING.DETAILS\\\" flex></span></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"pb-0\\\"><div layout=\\\"column\\\"><table class=\\\"simple\\\" \\nms-responsive-table><thead><tr><th translate=\\\"PICKING.WAREHOUSE\\\"></th><th translate=\\\"PICKING.CREATED_AT\\\"></th><th \\ntranslate=\\\"PICKING.AMOUNT\\\"></th><th translate=\\\"PICKING.CREATED_BY\\\"></th><th translate=\\\"PICKING.PICKED_BY\\\"></th><th \\ntranslate=\\\"PICKING.START_AT\\\"></th><th translate=\\\"PICKING.ENDED_AT\\\"></th></tr></thead><tbody><tr><td><div class=\\\"ml-16\\\">\\n{{vm.pickingOrder.warehouse.name}}</div></td><td><div>{{vm.pickingOrder.created_at | date:\\'dd/MM/yyyy\\'}}</div><div \\nclass=\\\"m-0\\\"><small>{{vm.pickingOrder.created_at | date:\\'HH:mm a\\'}}</small></div></td><td><div>\\n{{vm.gridOptions.totalItems}}</div></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture \\nuser=\\\"vm.userCreatePicking\\\"></nd-user-picture><span class=\\\"username ph-5\\\" hide show-gt-sm ng-if=\\\"vm.userCreatePicking\\\">\\n{{vm.userCreatePicking.first_name}} {{vm.userCreatePicking.last_name}}</span></div></td><td><div flex=\\\"nogrow\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" style=\\\"margin-top:4px !important\\\"><md-select multiple=\\\"true\\\" \\nng-disabled=\\\"vm.isPickingOrderPicked()\\\" ng-model=\\\"vm.pickingOrder.picking_activity.picked_by\\\" \\nng-change=\\\"vm.updatePickedBy($event)\\\" placeholder=\\\"{{\\'PICKING.PICKED_BY\\' | translate}}\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.userSearchText = \\'\\'\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.userSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"user in vm.usersList | filter: vm.userSearchText | orderBy: \\'username\\'\\\" ng-value=\\\"user.id\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><nd-user-picture user=\\\"user\\\"></nd-user-picture><span \\nclass=\\\"username ph-5\\\" hide show-gt-sm ng-if=\\\"user\\\">{{user.first_name}} {{user.last_name}}</span></div></md-option>\\n</md-select></div></td><td><div class=\\\"mt-5 ml-4\\\">{{vm.pickingOrder.picking_activity.started_at | date:\\'dd/MM/yyyy\\'}}\\n</div><div class=\\\"m-0 ml-4\\\"><small>{{vm.pickingOrder.picking_activity.started_at | date:\\'HH:mm a\\'}}</small></div></td>\\n<td><div class=\\\"mt-5 ml-4\\\">{{vm.pickingOrder.picking_activity.finished_at | date:\\'dd/MM/yyyy\\'}}</div><div \\nclass=\\\"m-0 ml-4\\\"><small>{{vm.pickingOrder.picking_activity.finished_at | date:\\'HH:mm a\\'}}</small></div></td></tr>\\n</tbody></table></div></md-card-content></md-card><md-card><md-card-title class=\\\"card-toolbar\\\"><md-card-title-text><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float class=\\\"nd-search-input w-200\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"product-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.status.search\\\" \\nng-change=\\\"vm.getGridProductsPage()\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" \\nclass=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-input-container><nd-new-feature-badge id=\\\"PICKING_WITH_LOTS\\\"></nd-new-feature-badge><span flex></span><md-menu>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"\\\" \\nng-disabled=\\\"!vm.keptSelectionArray.length || vm.isPickingOrderPicked()\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"more\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-pencil-box\\\"></md-icon><span class=\\\"ml-8\\\">\\n{{\\'PICKING.BULK_EDIT\\' | translate}}</span></div></md-button></div><md-menu-content><md-menu-item><md-button \\nng-click=\\\"vm.bulkEditStats(vm.status_pending_to_pick)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"PICKING.MARK_AS\\\"></span><md-button layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"text-boxed gray p-0\\\" \\nstyle=\\\"line-height: 25px; min-height: 0\\\"><md-icon class=\\\"s16\\\" style=\\\"margin:0\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/circle-pending.bbd9c65e.svg\\\"></md-icon><span class=\\\"ml-10 text-bold\\\" \\ntranslate=\\\"PICKING.PENDING_TO_PICK\\\"></span></md-button></div></md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.bulkEditStats(vm.status_picked)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"PICKING.MARK_AS\\\"></span><md-button layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"text-boxed md-green-A700-bg p-0 text-black p-0\\\" style=\\\"line-height: 25px; min-height: 0; color: black\\\"><md-icon \\nid=\\\"md-icon-no-margin\\\" style=\\\"margin:0\\\" class=\\\"s16\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/circle-picked.374e1f2a.svg\\\"></md-icon><span class=\\\"ml-10 text-bold\\\" \\ntranslate=\\\"PICKING.PICKED\\\"></span></md-button></div></md-button></md-menu-item></md-menu-content></md-menu><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.printDeliveriesPdf()\\\" ng-disabled=\\\"vm.generating_delivieres_pdf\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\" class=\\\"mr-5\\\" \\nng-if=\\\"!vm.generating_delivieres_pdf\\\"></md-icon><md-progress-circular md-diameter=\\\"16\\\" class=\\\"mr-8\\\" \\nng-if=\\\"vm.generating_delivieres_pdf\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular><span ng-if=\\\"!vm.deliveryUrl\\\" \\ntranslate=\\\"PICKING.PRINT_DELIVERIES\\\"></span> <span ng-if=\\\"vm.deliveryUrl\\\" translate=\\\"PICKING.DOWNLOAD_DELIVERIES\\\">\\n</span></div></md-button><md-button class=\\\"md-primary stroked\\\" ng-click=\\\"vm.printPickableItemListPdf()\\\" \\nng-disabled=\\\"vm.generating_pickable_pdf\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-printer\\\" class=\\\"mr-5\\\" ng-if=\\\"!vm.generating_pickable_pdf\\\"></md-icon><span class=\\\"mr-8\\\" \\nng-if=\\\"vm.generating_pickable_pdf\\\"><md-progress-circular md-diameter=\\\"16\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular></span><span translate=\\\"PICKING.PRINT_PICKABLE_ITEM_LIST\\\"></span></div></md-button></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"no-padding\\\"><div class=\\\"full-width h-0\\\">\\n<md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div>\\n<md-content class=\\\"content no-padding uid-grid-container transparent-bg\\\" flex><div ui-grid=\\\"vm.gridOptions\\\" \\nui-grid-pagination ui-grid-move-columns ui-grid-selection ui-grid-exporter ui-grid-resize-columns ui-grid-pinning \\nui-grid-cellnav ui-grid-save-state ui-grid-auto-resize ui-grid-exporter class=\\\"grid\\\" style=\\\"height: 100%\\\"></div>\\n</md-content></md-card-content></md-card></div></form></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/picking-packing.html\",\"<div id=\\\"picking-packing\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PICKING_AND_PACKING.PICKING_AND_PACKING\\\"></span>\\n</div><div layout=\\\"row\\\" class=\\\"content\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" md-no-ink-bar=\\\"true\\\" \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nng-repeat=\\\"item in vm.navItems\\\" has-permission-and-feature=\\\"{{item.permission}}\\\" class=\\\"nav-item-badge\\\" \\ndisabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(item.value)\\\" name=\\\"{{item.value}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span translate=\\\"{{\\'PICKING_AND_PACKING.\\' + item.title}}\\\"></span><div \\nclass=\\\"custom-badge to-prepare\\\" layout=\\\"row\\\" ng-if=\\\"item.title!==\\'SHIPPED\\'\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"[item.value, vm.currentNavItem!==\\'to-prepare\\' ? \\'opacity-light\\' : \\'\\']\\\"><span>{{item.count}}</span></div>\\n</div></md-nav-item></md-nav-bar></div><div class=\\\"content-card\\\" layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float class=\\\"nd-search-input w-200\\\" \\nstyle=\\\"margin-right: 8px !important\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"product-search\\\" \\nnd-mute-barcode-callbacks ng-model=\\\"vm.globalStatus.search\\\" ng-change=\\\"vm.reloadTable()\\\" \\nng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container>\\n<nd-filter-selector filter-storage-label=\\\"vm.filterStorageLabel\\\"><nd-filter name=\\\"FILTER_BY_SOURCE_WAREHOUSE\\\" \\nicon=\\\"icon-store\\\"><nd-paginated-dropdown url=\\\"vm.warehouseUrl\\\" selected-items=\\\"vm.globalStatus.sourceWarehouses\\\" \\ntransform-callback=\\\"vm.transformCallback(item)\\\" on-changed=\\\"vm.filterChanged()\\\" \\nselect-placeholder=\\\"FILTERS.FILTER_BY_SOURCE_WAREHOUSE\\\" search=\\\"true\\\" icon=\\\"icon-store\\\"><item-template><div>\\n{{$parent.item.name}}</div></item-template></nd-paginated-dropdown></nd-filter><nd-filter \\nname=\\\"FILTER_BY_TARGET_WAREHOUSE\\\" icon=\\\"icon-store\\\"><nd-paginated-dropdown url=\\\"vm.warehouseUrl\\\" \\nselected-items=\\\"vm.globalStatus.targetWarehouses\\\" transform-callback=\\\"vm.transformCallback(item)\\\" \\non-changed=\\\"vm.filterChanged()\\\" select-placeholder=\\\"FILTERS.FILTER_BY_TARGET_WAREHOUSE\\\" search=\\\"true\\\" \\nicon=\\\"icon-store\\\"><item-template><div>{{$parent.item.name}}</div></item-template></nd-paginated-dropdown></nd-filter>\\n<nd-filter name=\\\"FILTER_BY_STOCK_AVAILABILITY\\\" icon=\\\"icon-package-variant-closed\\\"><div class=\\\"mr-10\\\" \\nstyle=\\\"position: relative\\\"><md-icon md-font-icon=\\\"icon-package-variant-closed\\\" \\nng-if=\\\"vm.globalStatus.stockAvailability\\\" class=\\\"mr-8\\\" \\nstyle=\\\"position: absolute; left: 8px; top: 50%; transform: translateY(-50%); z-index: 1\\\"></md-icon><md-input-container \\nmd-no-float class=\\\"nd-search-input nd-filter-input\\\" ng-class=\\\"{\\'pl-32\\': vm.globalStatus.stockAvailability}\\\"><md-select \\nng-model=\\\"vm.globalStatus.stockAvailability\\\" \\nplaceholder=\\\"{{\\'PICKING_AND_PACKING.FILTER_BY_STOCK_AVAILABILITY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\">\\n<md-option ng-repeat=\\\"opt in vm.stockAvailabilityOptions\\\" ng-value=\\\"opt.value\\\">{{opt.labelKey | translate}}</md-option>\\n</md-select></md-input-container></div></nd-filter><nd-filter name=\\\"FILTER_BY_UNITS\\\" \\nicon=\\\"icon-package-variant-closed\\\"><div class=\\\"mr-10\\\" style=\\\"position: relative\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" ng-if=\\\"vm.globalStatus.unitsFilter\\\" class=\\\"mr-8\\\" \\nstyle=\\\"position: absolute; left: 8px; top: 50%; transform: translateY(-50%); z-index: 1\\\"></md-icon><md-input-container \\nmd-no-float class=\\\"nd-search-input nd-filter-input\\\" ng-class=\\\"{\\'pl-32\\': vm.globalStatus.unitsFilter}\\\"><md-select \\nng-model=\\\"vm.globalStatus.unitsFilter\\\" placeholder=\\\"{{\\'PICKING_AND_PACKING.FILTER_BY_UNITS\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"opt in vm.unitsFilterOptions\\\" ng-value=\\\"opt.value\\\">\\n{{opt.labelKey | translate}}</md-option></md-select></md-input-container></div></nd-filter><nd-filter \\nname=\\\"FILTER_BY_ORDER_TYPE\\\" icon=\\\"icon-file-document\\\"><md-input-container md-no-float flex \\nclass=\\\"nd-search-input nd-filter-input\\\" style=\\\"padding-left: 8px !important\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nng-if=\\\"!vm.globalStatus.orderTypes || vm.globalStatus.orderTypes.length === 0\\\" md-font-icon=\\\"icon-file-document\\\">\\n</md-icon><md-select ng-model=\\\"vm.globalStatus.orderTypes\\\" ng-change=\\\"vm.filterChanged()\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'FILTERS.FILTER_BY_ORDER_TYPE\\' | translate}}\\\" class=\\\"m-0 picking-packing-order-type-select\\\"><md-option \\nng-value=\\\"\\'PosOrderFulfillment_Store\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"ecommerce-image mr-8\\\" \\nstyle=\\\"width: 20px; height: 20px; vertical-align: middle\\\" ng-src=\\\"/assets/images/ecommerces/301.583690c9.svg\\\"> <span>\\n{{\\'FILTERS.POS_ORDER_STORE\\' | translate}}</span></div></md-option><md-option ng-value=\\\"\\'SaleOrderDelivery\\'\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"ecommerce-image mr-8\\\" \\nstyle=\\\"width: 20px; height: 20px; vertical-align: middle\\\" ng-src=\\\"/assets/images/ecommerces/303.cb0b71fb.svg\\\"> <span>\\n{{\\'PICKING.SALE_ORDER_DELIVERY\\' | translate}}</span></div></md-option><md-option ng-value=\\\"\\'TransferOrderDelivery\\'\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"ecommerce-image mr-8\\\" \\nstyle=\\\"width: 20px; height: 20px; vertical-align: middle\\\" ng-src=\\\"/assets/images/ecommerces/302.5566db78.svg\\\"> <span>\\n{{\\'PICKING.TRANSFER_ORDER_DELIVERY\\' | translate}}</span></div></md-option><md-option ng-repeat=\\\"site in vm.sitesList\\\" \\nng-value=\\\"\\'PosOrderFulfillment_Ecommerce_\\' + site.id\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img \\nclass=\\\"ecommerce-image mr-8\\\" style=\\\"width: 20px; height: 20px; vertical-align: middle\\\" \\nng-src=\\\"/assets/images/ecommerces/{{site.platform}}.svg\\\" ng-if=\\\"site.platform\\\"> <span>{{site.name}}</span></div>\\n</md-option></md-select></div></md-input-container></nd-filter></nd-filter-selector><nd-picking-packing-actions \\nlayout=\\\"column\\\" layout-align=\\\"end end\\\" flex nav-item=\\\"vm.currentNavItem\\\" creating=\\\"vm.creating\\\" \\ncan-create-packing-order=\\\"vm.canCreatePackingOrder()\\\" any-selection=\\\"vm.controlSelected()\\\">\\n</nd-picking-packing-actions></div><md-content class=\\\"content no-padding\\\" flex layout=\\\"column\\\">\\n<nd-picking-packing-to-prepare-list ng-if=\\\"vm.currentNavItem === \\'to-prepare\\'\\\" layout-fill status=\\\"vm.status\\\" \\nconfiguration-data=\\\"vm.configurationData\\\" creating=\\\"vm.creating\\\"></nd-picking-packing-to-prepare-list>\\n<nd-picking-packing-picking-list ng-if=\\\"vm.currentNavItem === \\'picking\\'\\\" layout-fill status=\\\"vm.status\\\">\\n</nd-picking-packing-picking-list><nd-picking-packing-picked-list ng-if=\\\"vm.currentNavItem === \\'picked\\'\\\" layout-fill \\nstatus=\\\"vm.status\\\" configuration-data=\\\"vm.configurationData\\\" creating=\\\"vm.creating\\\"></nd-picking-packing-picked-list>\\n<nd-picking-packing-packing-list ng-if=\\\"vm.currentNavItem === \\'packing\\'\\\" layout-fill status=\\\"vm.status\\\">\\n</nd-picking-packing-packing-list><nd-picking-packing-packed-list ng-if=\\\"vm.currentNavItem === \\'packed\\'\\\" layout-fill \\nstatus=\\\"vm.status\\\"></nd-picking-packing-packed-list><nd-picking-packing-shipped-list \\nng-if=\\\"vm.currentNavItem === \\'shipped\\'\\\" layout-fill status=\\\"vm.status\\\"></nd-picking-packing-shipped-list></md-content>\\n</div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/low-stock/low-stock.html\",\"<div id=\\\"inventory-low-stock\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.LOW_STOCK\\\"></span></div><div \\nid=\\\"low-stock-content\\\" class=\\\"content mb-8\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><md-nav-bar class=\\\"no-border\\\" \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nhas-permission=\\\"app.inventory.low_stock.purchases\\\" md-nav-sref=\\\"app.inventory.low_stock.purchases.by_product\\\" \\nname=\\\"purchases\\\"><span translate=\\\"LOW_STOCK.PURCHASES\\\"></span></md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.low_stock.replenishments.by_product\\\" \\nmd-nav-sref=\\\"app.inventory.low_stock.replenishments.by_product\\\" name=\\\"replenishments\\\"><span \\ntranslate=\\\"LOW_STOCK.REPLENISHMENTS\\\"></span></md-nav-item></md-nav-bar><div flex><div id=\\\"legend-div\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-align-gt-sm=\\\"end center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"replenishment-stock-status out_of_stock mr-4\\\"></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"mr-16\\\" translate=\\\"INVENTORY_DASHBOARD.OUT_OF_STOCK\\\"></div><div \\nclass=\\\"replenishment-stock-status urgent_order mr-4\\\"></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"mr-16\\\" translate=\\\"INVENTORY_DASHBOARD.URGENT_ORDER\\\"></div><div \\nclass=\\\"replenishment-stock-status non_urgent_order mr-4\\\"></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"mr-16\\\" translate=\\\"INVENTORY_DASHBOARD.NON_URGENT_ORDER\\\"></div><div \\nclass=\\\"replenishment-stock-status in_stock mr-4\\\"></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\ntranslate=\\\"INVENTORY_DASHBOARD.IN_STOCK\\\"></div></div></div></div></div><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/pricing/pricing.html\",\"<div id=\\\"pricing\\\" class=\\\"page-layout carded left-sidenav left-sidenav-gradient\\\" layout=\\\"row\\\"><div \\nclass=\\\"top-bg sa-gradient\\\"></div><md-sidenav class=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<div class=\\\"header\\\" layout=\\\"column\\\" hide-xs hide-sm hide-md></div><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/pricing/sidenavs/main/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div class=\\\"center\\\" layout=\\\"column\\\" flex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2 white-fg\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-coin\\\" class=\\\"s24 mr-5\\\"></md-icon><span \\ntranslate=\\\"NAVIGATION.PRICING\\\"></span></span><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex></div></div><div \\nclass=\\\"content-card\\\" layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"product-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span \\nflex></span><md-select class=\\\"mr-10\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedWarehouses\\\" \\nplaceholder=\\\"{{\\'PRODUCT.WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy :\\'position\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select><md-select multiple=\\\"false\\\" ng-model=\\\"vm.selectedPricingTier\\\" \\nplaceholder=\\\"{{\\'PRODUCT.PRICING_TIERS\\' | translate}}\\\"><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | orderBy :\\'position\\'\\\" ng-value=\\\"pricingTier.id\\\">{{pricingTier.name}}\\n</md-option></md-select></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table \\nclass=\\\"dataTable dataTable-products row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstanceProducts\\\" \\ndt-options=\\\"vm.dtOptionsProducts\\\" dt-columns=\\\"vm.dtColumnsProducts\\\" id=\\\"products-table\\\"></table></md-content></div>\\n</div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/product.html\",\"<div id=\\\"inventory-product\\\" class=\\\"simple tabbed\\\" layout-fill layout=\\\"column\\\"><div \\nclass=\\\"header no-padding md-background-bg md-hue-2 pb-8\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"column\\\" \\nflex><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex class=\\\"header-product\\\"><md-button \\nclass=\\\"md-icon-button black-fg\\\" aria-label=\\\"Go to products\\\" ng-click=\\\"vm.goBack()\\\" \\ndata-test-id=\\\"product-button-go-to-products\\\" translate translate-attr-aria-label=\\\"PRODUCT.GO_TO_PRODUCTS\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div class=\\\"h2\\\">{{vm.product.name}}</div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" show-gt-sm hide>{{vm.product.code}}</div><div \\nclass=\\\"h2 ml-10 border-left\\\" ng-if=\\\"vm.product.is_bundle\\\"></div><div ng-if=\\\"vm.product.is_bundle\\\" \\nclass=\\\"text-boxed blue\\\" show-gt-sm hide><span>{{\\'PRODUCT.PACK\\' | translate }}</span></div></div><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\"><md-button class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.currentNavItem==\\'details\\'\\\" \\nng-click=\\\"vm.saveProduct()\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button><md-menu class=\\\"mr-20\\\" \\nhas-permission=\\\"app.inventory.products.new-product,app.inventory.products.product.overview,inventory.products.product.details.duplicate,inventory.products.product.details.archive,inventory.products.product.details.delete\\\">\\n<md-button aria-label=\\\"Actions\\\" data-test-id=\\\"product-button-actions\\\" class=\\\"md-primary stroked\\\" \\nng-click=\\\"vm.openMenu($mdMenu, $event)\\\" ng-disabled=\\\"vm.waiting\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular md-diameter=\\\"20px\\\" ng-if=\\\"vm.waiting\\\" class=\\\"mh-8\\\"></md-progress-circular><span \\ntranslate=\\\"GENERAL.ACTIONS\\\"></span></md-button><md-menu-content width=\\\"4\\\"><md-menu-item \\nhas-permission=\\\"inventory.products.create\\\"><md-button ui-sref=\\\"app.inventory.products.new-product\\\" \\nnd-track-click=\\\"new product\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PRODUCT.NEW_PRODUCT\\' | translate}}\\n</md-button></md-menu-item><md-menu-item has-permission=\\\"app.inventory.products.product.overview\\\"><md-button \\nng-click=\\\"vm.printInformation()\\\"><md-icon md-font-icon=\\\"icon-printer\\\"></md-icon>\\n{{\\'PRODUCT.PRINT_INFORMATION\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"app.inventory.products.product.overview\\\"><md-button ng-click=\\\"vm.printOverview()\\\"><md-icon \\nmd-font-icon=\\\"icon-printer\\\"></md-icon>{{\\'PRODUCTS.PRINT_OVERVIEW\\' | translate}}</md-button></md-menu-item><md-menu-item\\n has-permission=\\\"inventory.products.product.details.duplicate\\\"><md-button ng-click=\\\"vm.duplicate()\\\" \\nhas-permission=\\\"{{vm.PERMISSIONS.INVENTORY.PRODUCT.DUPLICATE}}\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\"></md-icon>\\n{{\\'GENERAL.DUPLICATE\\' | translate}}</md-button></md-menu-item><md-menu-divider \\nhas-permission=\\\"inventory.products.product.details.delete\\\"></md-menu-divider><md-menu-item ng-if=\\\"!vm.product.deleted\\\" \\nhas-permission=\\\"inventory.products.product.details.archive\\\"><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.archive()\\\"><md-icon\\n md-font-icon=\\\"icon-archive\\\"></md-icon>{{\\'GENERAL.ARCHIVE\\' | translate}}</md-button></md-menu-item><md-menu-item \\nng-if=\\\"vm.product.deleted\\\" has-permission=\\\"inventory.products.product.details.archive\\\"><md-button class=\\\"md-primary\\\" \\nng-click=\\\"vm.unarchive()\\\"><md-icon md-font-icon=\\\"icon-archive\\\"></md-icon>{{\\'GENERAL.UNARCHIVE\\' | translate}}\\n</md-button></md-menu-item></md-menu-content></md-menu></div></div></div><div layout=\\\"row\\\" flex ms-scroll \\nclass=\\\"scroll-tabs\\\"><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" \\nnav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\"><md-nav-item \\nmd-nav-sref=\\\"app.inventory.products.product.overview\\\" has-permission=\\\"app.inventory.products.product.overview\\\" \\nname=\\\"overview\\\">{{\\'PRODUCT.OVERVIEW\\' | translate}}</md-nav-item><md-nav-item ng-if=\\\"vm.product.manage_stock\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock\\\" has-permission=\\\"app.inventory.products.product.stock\\\" name=\\\"stock\\\">\\n{{\\'PRODUCT.STOCK\\' | translate}}</md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.products.product.details\\\" \\nhas-permission=\\\"inventory.products.product.details.update\\\" name=\\\"details\\\"><span translate=\\\"PRODUCT.DETAILS\\\"></span>\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.products.product.product-variants\\\" \\nhas-permission=\\\"inventory.products.product.details.update\\\" name=\\\"product-variants\\\">{{\\'PRODUCT.VARIANTS\\' | translate}}\\n</md-nav-item><md-nav-item ng-if=\\\"vm.product.is_bundle\\\" md-nav-sref=\\\"app.inventory.products.product.bundles\\\" \\nhas-permission=\\\"app.inventory.products.product.bundles\\\" name=\\\"bundles\\\">{{\\'PRODUCT.PACK\\' | translate}}</md-nav-item>\\n<md-nav-item md-nav-sref=\\\"app.inventory.products.product.pricing-tiers\\\" \\nhas-permission=\\\"inventory.products.product.details.update\\\" name=\\\"pricing-tiers\\\">{{\\'PRODUCT.PRICING_TIERS\\' | translate}}\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.products.product.images\\\" \\nhas-permission=\\\"inventory.products.product.details.update\\\" name=\\\"images\\\">{{\\'PRODUCT.IMAGES\\' | translate}}</md-nav-item>\\n<md-nav-item md-nav-sref=\\\"app.inventory.products.product.ecommerce\\\" \\nhas-permission-and-feature=\\\"app.inventory.products.product.ecommerce\\\" name=\\\"ecommerce\\\">\\n{{\\'PRODUCT.ECOMMERCE\\' | translate}}<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nclass=\\\"md-primary-fg has-permission-and-feature-icon\\\"></md-icon></md-nav-item><md-nav-item \\nng-if=\\\"vm.product.manage_stock\\\" md-nav-sref=\\\"app.inventory.products.product.manufacturing\\\" \\nhas-permission-and-feature=\\\"app.inventory.products.product.manufacturing\\\" name=\\\"manufacturing\\\"><div layout=\\\"row\\\">\\n{{\\'PRODUCT.MANUFACTURING\\' | translate}}<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nclass=\\\"md-primary-fg has-permission-and-feature-icon\\\"></md-icon></div></md-nav-item><md-nav-item \\nng-if=\\\"vm.product.manage_stock\\\" md-nav-sref=\\\"app.inventory.products.product.stock-locations\\\" \\nhas-permission-and-feature=\\\"app.inventory.products.product.stock-locations\\\" name=\\\"stock-locations\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">{{\\'PRODUCT.STOCK_LOCATIONS\\' | translate}}<md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nclass=\\\"md-primary-fg has-permission-and-feature-icon\\\"></md-icon><nd-new-feature-badge class=\\\"ml-8 new-feature\\\" \\nid=\\\"NEW_STOCK_LOCATIONS\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge></div></md-nav-item></md-nav-bar></div></div>\\n</div><div class=\\\"content\\\" layout=\\\"column\\\" flex><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg pt-0\\\" \\nlayout=\\\"column\\\" flex></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/collections/collections.html\",\"<div id=\\\"inventory-collections\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"COLLECTIONS.COLLECTIONS\\\">\\n</span><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" \\ntranslate=\\\"COLLECTIONS.NEW_COLLECTION\\\" has-permission=\\\"inventory.collections.create\\\" \\nng-click=\\\"vm.newCollection($even)\\\"></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\" flex><md-sidenav \\nclass=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" \\nms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/collections/sidenavs/main/main-sidenav.html\\'\\\"></div></md-content>\\n</md-sidenav><div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md \\nng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.filtersNotifications\\\"><span class=\\\"notification-number\\\">{{vm.filtersNotifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"collection-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table \\nclass=\\\"dataTable dataTable-products row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\" data-test-id=\\\"product-table-products\\\"></table>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product-locations/product-locations.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"product-locations\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex \\nlayout=\\\"column\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"header no-margin\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" \\ntranslate=\\\"PRODUCT_LOCATIONS.PRODUCT_LOCATIONS\\\"></span><nd-new-feature-badge id=\\\"NEW_PRODUCT_LOCATIONS\\\" class=\\\"ml-8\\\" \\nremove-margin=\\\"true\\\"></nd-new-feature-badge></div><div class=\\\"secondary-text mt-5\\\" \\ntranslate=\\\"PRODUCT_LOCATIONS.PRODUCT_LOCATIONS_SUBTITLE\\\"></div></div><div class=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav\\n class=\\\"sidenav border-right md-padding\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><nd-products-filters \\nstatus=\\\"vm.status\\\" on-filters-change=\\\"vm.filterChanged()\\\"></nd-products-filters></md-sidenav><div flex layout=\\\"column\\\">\\n<div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button aria-label=\\\"Toggle left sidenav\\\" \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><md-button aria-label=\\\"Toggle left sidenav\\\" \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.status.notifications\\\"><span class=\\\"notification-number\\\">{{vm.status.notifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container \\nclass=\\\"nd-search-input w-200\\\" md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nid=\\\"product-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container></div><div class=\\\"full-width h-0\\\">\\n<md-progress-linear class=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div>\\n<md-content class=\\\"content no-padding uid-grid-container\\\" flex><div class=\\\"grid\\\" style=\\\"height: 100%\\\" \\nui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-cellnav ui-grid-exporter ui-grid-move-columns \\nui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-edit ui-grid-row-edit ui-grid-save-state></div>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/products/products.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"products\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\">\\n<nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" ng-if=\\\"vm.tableType === \\'p\\'\\\" translate=\\\"PRODUCTS.PRODUCTS\\\">\\n</span> <span class=\\\"h2\\\" ng-if=\\\"vm.tableType === \\'v\\'\\\" translate=\\\"PRODUCT.VARIANTS\\\"></span> <span class=\\\"h2\\\" \\nng-if=\\\"vm.tableType === \\'m\\'\\\" translate=\\\"NAVIGATION.MATERIALS\\\"></span> <span class=\\\"h2\\\" ng-if=\\\"vm.tableType === \\'b\\'\\\" \\ntranslate=\\\"PRODUCTS.BUNDLES\\\"></span><nd-new-feature-badge id=\\\"NEW_PRODUCTS_TABLE\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"m-0 mr-10 stroked\\\" \\nui-sref=\\\"app.inventory.labels-generator\\\">{{\\'LABELS_GENERATOR.LABELS_GENERATOR\\' | translate}}</md-button><md-button \\nclass=\\\"m-0 mr-10 stroked\\\" has-permission=\\\"app.inventory.import.products,app.inventory.import.images\\\" \\nnd-track-click=\\\"import products\\\" ng-click=\\\"vm.showImportDialog()\\\" ng-if=\\\"vm.tableType === \\'p\\'\\\" \\ntranslate=\\\"TOOLBAR.IMPORT\\\"></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nng-if=\\\"vm.tableType !== \\'v\\' && vm.tableType !== \\'b\\'\\\" has-permission=\\\"inventory.products.create\\\" \\nnd-track-click=\\\"new product\\\" ng-click=\\\"vm.showQuickProductCreatorDialog()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span \\nng-if=\\\"vm.tableType === \\'p\\'\\\">{{\\'PRODUCT.NEW_PRODUCT\\' | translate}}</span> <span ng-if=\\\"vm.tableType === \\'m\\'\\\">\\n{{\\'MATERIAL.NEW_MATERIAL\\' | translate}}</span></div></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nng-if=\\\"vm.tableType === \\'b\\'\\\" has-permission=\\\"inventory.products.create\\\" nd-track-click=\\\"new bundle\\\" \\nui-sref=\\\"app.inventory.products.new-product({ isBundle: true })\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PRODUCT.NEW_PRODUCT_BUNDLE\\' | translate}}</div></md-button>\\n</div></div><div class=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right md-padding\\\" \\nmd-component-id=\\\"sidenav\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper>\\n<nd-products-filters status=\\\"vm.status\\\" on-filters-change=\\\"vm.filterChanged()\\\"></nd-products-filters></md-sidenav><div \\nflex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.status.notifications\\\"><span class=\\\"notification-number\\\">\\n{{vm.status.notifications}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input w-200\\\" md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nclass=\\\"secondary-text\\\" id=\\\"product-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks \\nng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span \\nclass=\\\"secondary-text ml-10\\\" ng-if=\\\"vm.keptSelectionArray.length\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: { n: vm.keptSelectionArray.length } }} </span><span flex></span>\\n<md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.tableType !== \\'v\\'\\\" has-permission=\\\"inventory.products.bulk_update\\\" \\nng-click=\\\"vm.openProductsEditDialog($event)\\\" ng-disabled=\\\"vm.gridApi.selection.getSelectedCount() == 0\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil-box\\\"></md-icon><md-tooltip><span translate=\\\"PRODUCTS.BULK_EDIT\\\"></span></md-tooltip>\\n</md-button><md-button aria-label=\\\"Print Overview\\\" ng-if=\\\"vm.tableType !== \\'v\\'\\\" class=\\\"md-icon-button\\\" \\nhas-permission=\\\"app.inventory.products.product.overview\\\" ng-click=\\\"vm.printOverview($event)\\\" \\nng-disabled=\\\"vm.gridApi.selection.getSelectedCount() == 0\\\" translate-attr-aria-label=\\\"PRODUCTS.PRINT_OVERVIEW\\\"><md-icon\\n md-font-icon=\\\"icon-printer\\\"></md-icon><md-tooltip><span translate=\\\"PRODUCTS.PRINT_OVERVIEW\\\"></span></md-tooltip>\\n</md-button></div><div class=\\\"full-width h-0\\\"><md-progress-linear class=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" \\nng-if=\\\"vm.loading\\\"></md-progress-linear></div><md-content class=\\\"content no-padding uid-grid-container\\\" flex><div \\nclass=\\\"grid\\\" style=\\\"height: 100%\\\" ui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-cellnav ui-grid-exporter \\nui-grid-move-columns ui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-save-state ui-grid-selection>\\n</div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/purchase.html\",\"<div class=\\\"page-layout simple right-sidenav\\\" id=\\\"purchase\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" flex \\nlayout=\\\"column\\\" ms-scroll><div class=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button black-fg\\\" ng-if=\\\"!vm.idCollection && !vm.purchase.collection\\\" translate \\ntranslate-attr-aria-label=\\\"PURCHASE.GO_TO_PURCHASES\\\" ui-sref=\\\"app.inventory.purchases\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><md-button class=\\\"md-icon-button black-fg\\\" \\nng-if=\\\"vm.idCollection || vm.purchase.collection\\\" translate translate-attr-aria-label=\\\"PURCHASE.GO_TO_PURCHASES\\\" \\nui-sref=\\\"app.wholesale.presales.presale.purchases({idPresale: vm.purchase.collection})\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.isNewPurchase\\\"><div class=\\\"h2\\\" translate=\\\"PURCHASE.PURCHASE\\\"></div>\\n<div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\"><span>{{vm.purchase.autocode}}</span></div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" flex hide-md hide-sm hide-xs ng-if=\\\"vm.purchase.target_warehouse\\\">\\n<span flex translate=\\\"PURCHASE.TO_WAREHOUSE\\\"></span>: <span flex>{{vm.purchase.target_warehouse_name}}</span></div>\\n<span class=\\\"secondary-text ml-10 pl-10 border-left left-bar\\\"></span> <span class=\\\"status status-badge\\\" \\nng-class=\\\"vm.getStatusColorClass()\\\">{{vm.getStatusLabel()}}</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isNewPurchase\\\"><div class=\\\"h2\\\" translate=\\\"PURCHASE.NEW_PURCHASE\\\"></div></div><span flex></span><md-button \\nclass=\\\"m-0 mr-16 md-primary stroked\\\" has-permission=\\\"inventory.purchases.delete\\\" ng-click=\\\"vm.finish()\\\" \\nng-if=\\\"vm.changingStatus || vm.purchase.status === vm.purchaseOrderStatus.PURCHASE_ORDER_STATUS_PARTIALLY_RECEIVED\\\" \\ntranslate=\\\"PURCHASE.FINISH\\\"><span translate=\\\"PURCHASE.FINISH\\\"></span></md-button><md-button \\nclass=\\\"m-0 mr-16 md-warn stroked\\\" has-permission=\\\"inventory.purchases.delete\\\" ng-click=\\\"vm.delete()\\\" \\nng-disabled=\\\"vm.purchase.status !== vm.purchaseOrderStatus.PURCHASE_ORDER_STATUS_DRAFT\\\" translate=\\\"PURCHASE.DELETE\\\">\\n<span translate=\\\"PURCHASE.DELETE\\\"></span><md-tooltip md-direction=\\\"left\\\" \\nng-show=\\\"vm.purchase.status !== vm.purchaseOrderStatus.PURCHASE_ORDER_STATUS_DRAFT\\\"><span \\ntranslate=\\\"PURCHASE.DELETE_PURCHASE_BUTTON_TOOLTIP\\\"></span></md-tooltip></md-button></div></div><div class=\\\"content\\\" \\nflex layout=\\\"column\\\"><md-nav-bar class=\\\"pb-8\\\" data-test-id=\\\"product-tab-bar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nmd-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\" \\nng-if=\\\"!vm.isNewPurchase\\\"><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.details\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.details\\\" name=\\\"details\\\"><span translate=\\\"PURCHASE.DETAILS\\\"></span>\\n</md-nav-item><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.products\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.products\\\" name=\\\"products\\\"><span translate=\\\"PURCHASE.ORDER_PRODUCTS\\\">\\n</span></md-nav-item><div class=\\\"new-feature\\\" has-permission=\\\"app.inventory.purchases.purchase.products\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"PURCHASE_FCP\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.deliveries\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.deliveries\\\" name=\\\"deliveries\\\" ng-if=\\\"vm.purchase.status > 1\\\"><span \\ntranslate=\\\"PURCHASE.DELIVERY_NOTES\\\"></span></md-nav-item><div class=\\\"new-feature\\\" \\nhas-permission=\\\"app.inventory.purchases.purchase.deliveries\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.purchase.status > 1\\\"><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"DELIVERY_FCP\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.invoices\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.invoices\\\" name=\\\"invoices\\\" ng-if=\\\"vm.showInvoicesTab\\\"><span \\ntranslate=\\\"PURCHASE.INVOICES\\\"></span></md-nav-item><div class=\\\"new-feature\\\" \\nhas-permission=\\\"app.inventory.purchases.purchase.invoices\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.showInvoicesTab\\\"><nd-new-feature-badge class=\\\"ml-8\\\" id=\\\"INVOICE_FCP\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><md-nav-item has-permission=\\\"app.inventory.purchases.purchase.payments\\\" \\nmd-nav-sref=\\\"app.inventory.purchases.purchase.payments\\\" name=\\\"payments\\\" ng-if=\\\"vm.purchase.status > 1\\\"><span \\ntranslate=\\\"PURCHASE.PAYMENTS\\\"></span></md-nav-item></md-nav-bar><md-content class=\\\"transparent-bg\\\" flex \\nlayout=\\\"column\\\" ui-view=\\\"subcontent\\\"></md-content></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchases/purchases.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"purchases\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\"><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASES.PURCHASES\\\"></span><nd-new-feature-badge \\nclass=\\\"ml-8 mt-4\\\" id=\\\"MAIN_PURCHASE_FCP\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge><div flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"inventory.purchases.create\\\" \\nui-sref=\\\"app.inventory.purchases.new.details\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PURCHASE.NEW_PURCHASE\\' | translate}}</div></md-button></div></div><div \\nclass=\\\"content mb-16 flex-scrollable flex-noshrink\\\" layout=\\\"row\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" \\nmd-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nclass=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(status.code)\\\" name=\\\"{{status.code}}\\\" \\nng-if=\\\"status.code!=0\\\" ng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'PURCHASES.TAB_\\' + status.name | translate}}</span><div \\nclass=\\\"custom-badge status-badge\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.orderStatusColors[status.code]\\\"><md-progress-circular md-diameter=\\\"14px\\\" ng-if=\\\"vm.loading\\\">\\n</md-progress-circular><span ng-if=\\\"!vm.loading\\\">{{vm.totalsByStatus[status.code]||0 | number:0}}</span></div></div>\\n</md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(\\'all\\')\\\" \\nname=\\\"all\\\"><span translate=\\\"GENERAL.ALL\\\"></span></md-nav-item></md-nav-bar></div><div class=\\\"content-card\\\" \\nlayout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" \\nflex ms-scroll><div ng-include=\\\"\\'app/main/apps/inventory/views/purchases/sidenavs/main-sidenav.html\\'\\\"></div>\\n</md-content></md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<input id=\\\"purchase-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model-options=\\\"{debounce:200}\\\" \\nng-change=\\\"vm.reloadPurchases()\\\" ng-model=\\\"vm.status.search\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span flex></span><md-button \\nclass=\\\"md-icon-button\\\" ui-sref=\\\"app.inventory.purchases.calendar\\\"><md-icon md-font-icon=\\\"icon-calendar\\\"></md-icon>\\n<md-tooltip><span translate=\\\"PURCHASES_CALENDAR.PURCHASES_CALENDAR\\\">Purchases</span></md-tooltip></md-button></div>\\n<md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-purchases-list status=\\\"vm.status\\\">\\n</nd-purchases-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchases-calendar/purchases-calendar.html\",\"<div id=\\\"purchases-calendar\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASES.PURCHASES\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary stroked\\\" \\nhas-permission=\\\"inventory.purchases.create\\\" ui-sref=\\\"app.inventory.purchases.new.details\\\" \\ntranslate=\\\"PURCHASE.NEW_PURCHASE\\\"></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav \\nclass=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" \\nms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/purchases-calendar/sidenavs/main-sidenav.html\\'\\\"></div></md-content>\\n</md-sidenav><div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"purchase-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" ng-model-options=\\\"{ debounce: 500 }\\\"></md-input-container>\\n<md-button class=\\\"ml-20\\\" translate=\\\"PURCHASES_CALENDAR.PURCHASES\\\" ng-disabled=\\\"vm.calendarType==\\'purchases\\'\\\" \\nng-click=\\\"vm.calendarType=\\'purchases\\';\\\"></md-button><md-button translate=\\\"PURCHASES_CALENDAR.DELIVERIES\\\" \\nng-disabled=\\\"vm.calendarType==\\'deliveries\\'\\\" ng-click=\\\"vm.calendarType=\\'deliveries\\';\\\"></md-button><span flex></span>\\n<md-progress-circular ng-if=\\\"vm.loading\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div class=\\\"\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button arrow\\\" ng-click=\\\"vm.prevYear()\\\" \\naria-label=\\\"Previous\\\"><md-icon md-font-icon=\\\"icon-chevron-left\\\"></md-icon></md-button><div class=\\\"title\\\">\\n{{vm.currentYear}}</div><md-button class=\\\"md-icon-button arrow\\\" ng-click=\\\"vm.nextYear()\\\" aria-label=\\\"Next\\\"><md-icon \\nmd-font-icon=\\\"icon-chevron-right\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" \\nui-sref=\\\"app.inventory.purchases\\\"><md-icon md-font-icon=\\\"icon-view-list\\\"></md-icon><md-tooltip><span \\ntranslate=\\\"NAVIGATION.PURCHASES\\\">Purchases</span></md-tooltip></md-button><md-button class=\\\"md-icon-button\\\" \\nui-sref=\\\"app.inventory.purchases.calendar\\\" ng-disabled=\\\"true\\\"><md-icon class=\\\"md-primary-fg\\\" \\nmd-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip><span translate=\\\"PURCHASES_CALENDAR.PURCHASES_CALENDAR\\\">Purchases\\n</span></md-tooltip></md-button></div></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll>\\n<div layout=\\\"row\\\" layout-wrap><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.JANUARY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[1]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.FEBRUARY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[2]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.MARCH\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[3]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.APRIL\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[4]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.MAY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[5]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.JUNE\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[6]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.JULY\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[7]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.AUGUST\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[8]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.SEPTEMBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[9]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.OCTOBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[10]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-right border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.NOVEMBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[11]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div><div layout=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\" \\nclass=\\\"calendar-month border-bottom\\\"><div class=\\\"md-padding grey-100-bg border-bottom\\\" \\ntranslate=\\\"PURCHASES_CALENDAR.DECEMBER\\\"></div><div class=\\\"contents\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"pop in vm.getPopsOrPodps()[12]\\\"><img ng-if=\\\"pop.cover\\\" class=\\\"w-30\\\" src=\\\"{{pop.cover}}\\\"><md-icon \\nng-if=\\\"!pop.cover\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s20 grey-300-fg\\\"></md-icon><div layout=\\\"column\\\" \\nclass=\\\"p-0 m-0\\\"><span><a ui-sref=\\\"app.inventory.products.product.overview({id:pop.product})\\\">{{pop.product_code}}</a>\\n - <a ng-if=\\\"pop.type==\\'purchase\\'\\\" ui-sref=\\\"app.inventory.purchases.purchase.products({id:pop.purchase_order})\\\">\\n{{pop.autocode}}</a> <a ng-if=\\\"pop.type==\\'delivery\\'\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries.delivery({id:pop.purchase_order, orderDeliveryId: pop.order_delivery})\\\">\\n{{pop.autocode}}</a> </span><small>{{pop.product_name}} - {{pop.start_date | date:\\\"dd/MM\\\"}}</small></div><span flex>\\n</span> <span>{{pop.amount}}</span></div></div></div></div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocks/stocks.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"inventories-stocks\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex \\nlayout=\\\"column\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"STOCKS.STOCKS\\\"></span>\\n<nd-new-feature-badge class=\\\"ml-8\\\" class=\\\"new-feature-width\\\" id=\\\"NEW_STOCKS_SCREEN\\\" remove-margin=\\\"true\\\">\\n</nd-new-feature-badge></div><div class=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav \\nclass=\\\"sidenav border-right md-padding\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><nd-products-filters \\nstatus=\\\"vm.status\\\" on-filters-change=\\\"vm.reloadProducts()\\\"></nd-products-filters><div class=\\\"pt-20\\\"><div class=\\\"mb-10\\\" \\ntranslate=\\\"NAVIGATION.WAREHOUSES\\\"></div><md-input-container class=\\\"m-0 p-0\\\" layout=\\\"column\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'position\\'\\\"><md-checkbox ng-checked=\\\"vm.exists(warehouse)\\\" \\nng-click=\\\"vm.toggle(warehouse)\\\"><small>{{warehouse.name}}</small></md-checkbox></md-input-container></div></md-sidenav>\\n<div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" \\nclass=\\\"icon\\\"></md-icon></md-button><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-md hide-sm hide-xs ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.status.notifications\\\"><span class=\\\"notification-number\\\">{{vm.status.notifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nid=\\\"product-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.search\\\" \\nplaceholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><span flex>\\n</span><div ng-include=\\\"\\'app/directives/nd-stock-legend/nd-stock-legend.html\\'\\\"></div></div><md-content \\nclass=\\\"content p-0 fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable\\\" datatable=\\\"\\\" dt-columns=\\\"vm.dtColumns\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" id=\\\"datatable-table\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/stocktaking.html\",\"<div id=\\\"stocktaking\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" \\nlayout=\\\"column\\\" flex ms-scroll><div class=\\\"header\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.inventory.stocktakings\\\" translate \\ntranslate-attr-aria-label=\\\"STOCKTAKING.GO_TO_STOCKTAKINGS\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><div ng-if=\\\"!vm.isNewStocktaking\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div class=\\\"h2\\\" \\ntranslate=\\\"STOCKTAKING.STOCKTAKING\\\"></div><div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{vm.stocktaking.autocode}}</span><div class=\\\"ml-8\\\" ng-if=\\\"vm.stocktaking.partial\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.brand\\\">\\n· {{vm.stocktaking.brand_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.category\\\">\\n· {{vm.stocktaking.category_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.subcategory\\\">\\n· {{vm.stocktaking.subcategory_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.season\\\">\\n· {{vm.stocktaking.season_instance.name}} </span><span class=\\\"mr-8\\\" ng-if=\\\"vm.stocktaking.collection\\\">\\n· {{vm.stocktaking.collection_instance.code}}</span></div></div><div class=\\\"h2 secondary-text ml-10 pl-10\\\"><span \\nclass=\\\"pb-5 status-badge \\' + {{vm.getStatusColor(vm.stocktaking.status)}} + \\'\\\">\\n{{vm.getStatusLabel(vm.stocktaking.status)}}</span></div></div><div ng-if=\\\"vm.isNewStocktaking\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex><div class=\\\"h2\\\" translate=\\\"STOCKTAKING.NEW_STOCKTAKING\\\"></div></div><md-button \\nclass=\\\"md-warn stroked m-0\\\" translate=\\\"STOCKTAKING.DELETE\\\" \\nng-if=\\\"vm.stocktaking.status == vm.STOCKTAKING_STATUSES.DRAFT\\\" has-permission=\\\"inventory.stocktakings.delete_draft\\\" \\nng-disabled=\\\"!vm.isEditable()\\\" ng-click=\\\"vm.delete()\\\"></md-button></div><div class=\\\"content\\\" layout=\\\"column\\\" flex>\\n<md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" \\ndata-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewStocktaking\\\"><md-nav-item \\nmd-nav-sref=\\\"app.inventory.stocktakings.stocktaking.details\\\" name=\\\"details\\\"><span translate=\\\"STOCKTAKING.DETAILS\\\">\\nDetails</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.stocktakings.stocktaking.products\\\" name=\\\"products\\\">\\n<span translate=\\\"STOCKTAKING.PRODUCTS\\\">Products</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div><nd-stocktaking-historic \\nstocktaking-historic-array=\\\"vm.stocktakingHistoricArray\\\" stocktaking-historic-next=\\\"vm.stocktakingHistoricNext\\\" \\nshow=\\\"vm.showStocktakingHistoricFunc()\\\" show-header=\\\"vm.stocktaking.status === vm.STOCKTAKING_STATUSES.DRAFT\\\">\\n</nd-stocktaking-historic></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktakings/stocktakings.html\",\"<div id=\\\"stocktakings\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"STOCKTAKINGS.STOCKTAKINGS\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"inventory.stocktakings.create\\\" ui-sref=\\\"app.inventory.stocktakings.new.details\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'STOCKTAKINGS.NEW_STOCKTAKING\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\">\\n<md-sidenav class=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" \\nmd-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/stocktakings/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md \\nng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"stocktaking-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/transfer.html\",\"<div id=\\\"transfer\\\" class=\\\"page-layout simple right-sidenav\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" \\nlayout=\\\"column\\\" flex ms-scroll><div class=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button class=\\\"md-icon-button black-fg\\\" \\nui-sref=\\\"app.inventory.transfers\\\" translate translate-attr-aria-label=\\\"TRANSFER.GO_TO_TRANSFERS\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div \\nng-if=\\\"!vm.isNewTransfer\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" \\nng-if=\\\"!vm.transfer.is_replenishment\\\" translate=\\\"TRANSFER.TRANSFER\\\"></div><div class=\\\"h2\\\" \\nng-if=\\\"vm.transfer.is_replenishment\\\" translate=\\\"TRANSFER.REPLENISHMENT\\\"></div><div \\nclass=\\\"h2 ml-10 ph-10 border-left secondary-text border-right\\\">{{vm.transfer.autocode}}</div><div \\nclass=\\\"status-badge ml-10\\\" ng-class=\\\"vm.getStatusColorClass(vm.transfer.status)\\\">\\n{{vm.getStatusLabel(vm.transfer.status)}}</div></div><div ng-if=\\\"vm.isNewTransfer\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div ng-if=\\\"!vm.isReplenishment\\\" class=\\\"h2\\\" translate=\\\"TRANSFER.NEW_TRANSFER\\\"></div><div \\nng-if=\\\"vm.isReplenishment\\\" class=\\\"h2\\\" translate=\\\"TRANSFER.NEW_REPLENISHMENT\\\"></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"></div><md-button class=\\\"mr-16 md-warn stroked\\\" translate=\\\"TRANSFER.DELETE\\\" \\nng-if=\\\"vm.showDeleteButton()\\\" has-permission=\\\"inventory.transfers.delete\\\" ng-click=\\\"vm.delete()\\\"></md-button></div>\\n</div></div><div class=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" \\nmd-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewTransfer\\\" \\nclass=\\\"pb-8\\\"><md-nav-item md-nav-sref=\\\"app.inventory.transfers.transfer.details\\\" \\nhas-permission=\\\"app.inventory.transfers.transfer.details\\\" name=\\\"details\\\"><span translate=\\\"TRANSFER.DETAILS\\\">Details\\n</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.transfers.transfer.products\\\" \\nhas-permission=\\\"app.inventory.transfers.transfer.products\\\" name=\\\"products\\\" ng-if=\\\"vm.transfer.is_replenishment\\\"><span \\ntranslate=\\\"TRANSFER.ORDER_PRODUCTS\\\">Products</span></md-nav-item><md-nav-item \\nmd-nav-sref=\\\"app.inventory.transfers.transfer.deliveries\\\" has-permission=\\\"app.inventory.transfers.transfer.deliveries\\\" \\nname=\\\"deliveries\\\" ng-if=\\\"vm.transfer.status > 1 && !vm.transfer.single_delivery\\\"><span translate=\\\"TRANSFER.DELIVERIES\\\">\\nDeliveries</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.transfers.transfer.delivery\\\" \\nhas-permission=\\\"app.inventory.transfers.transfer.delivery\\\" name=\\\"delivery\\\" \\nng-if=\\\"vm.transfer.status >= vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\"><span \\ntranslate=\\\"TRANSFER.DELIVERY\\\">Delivery</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div><md-sidenav class=\\\"sidenav md-sidenav-right\\\" \\nmd-is-locked-open=\\\"$mdMedia(\\'gt-md\\') && vm.barcodeLogOpened\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><div\\n ng-repeat=\\\"pendingBarcode in vm.pendingBarcodes\\\"><div class=\\\"p-5 border-bottom\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center start\\\" style=\\\"background-color: #36C1F1; height: 120px\\\" ng-if=\\\"$index==0\\\" \\nng-class=\\\"{\\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\'}\\\">\\n<div class=\\\"md-padding\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><h1 class=\\\"m-0 p-0\\\">\\n{{pendingBarcode.size}} - {{pendingBarcode.color}}</h1><h2 class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</h2><p \\nclass=\\\"m-0 p-0 secondary-text\\\">{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 pl-15\\\" \\nng-if=\\\"pendingBarcode.status != \\'success\\'\\\"><md-progress-circular ng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" \\nmd-diameter=\\\"30px\\\" class=\\\"mh-8\\\"></md-progress-circular><p>{{pendingBarcode.barcode}}</p></div></div><div \\nclass=\\\"m-0 p-15 border-bottom\\\" ng-if=\\\"$index!=0\\\" \\nng-class=\\\"{\\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\', \\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-bg\\': pendingBarcode.status == \\'success\\'}\\\">\\n<div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><p class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</p><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.size}} - {{pendingBarcode.color}}</p><p class=\\\"m-0 p-0 secondary-text\\\">\\n{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status != \\'success\\'\\\" layout=\\\"row\\\"><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.barcode}}</p><span flex></span><md-progress-circular \\nng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" md-diameter=\\\"10px\\\" class=\\\"mh-8\\\"></md-progress-circular></div></div></div>\\n</md-sidenav></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfers/transfers.html\",\"<div id=\\\"transfers\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"TRANSFERS.TRANSFERS\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 mr-10 stroked\\\" has-permission=\\\"inventory.transfers.create\\\" \\nui-sref=\\\"app.analytics.report.stock-replenishment\\\" translate=\\\"TRANSFER.REPLENISHMENT_REPORT\\\"></md-button><md-button \\ndata-test-id=\\\"replenishment-button-new\\\" class=\\\"m-0 mr-10 stroked md-primary\\\" \\nhas-permission=\\\"inventory.transfers.create\\\" ui-sref=\\\"app.inventory.transfers.new.details({type:\\'replenishment\\'})\\\" \\nnd-track-click=\\\"new replenishment\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'TRANSFER.NEW_REPLENISHMENT\\' | translate}}</div></md-button><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" data-test-id=\\\"transfer-button-new\\\" has-permission=\\\"inventory.transfers.create\\\" \\nui-sref=\\\"app.inventory.transfers.new.details\\\" nd-track-click=\\\"new transfer\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'TRANSFER.NEW_TRANSFER\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" \\nclass=\\\"content mb-16 flex-scrollable flex-noshrink\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" md-no-ink-bar=\\\"true\\\" \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\" ng-if=\\\"status.code!=0\\\" class=\\\"nav-item-badge\\\" \\ndisabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(status.code)\\\" name=\\\"{{status.code}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'TRANSFERS.TAB_\\' + status.name | translate}}</span><div \\nclass=\\\"custom-badge status-badge\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.orderStatusColors[status.code]\\\"><md-progress-circular md-diameter=\\\"14px\\\" ng-if=\\\"vm.loading\\\">\\n</md-progress-circular><span ng-if=\\\"!vm.loading\\\">{{vm.totalsByStatus[status.code]||0 | number:0}}</span></div></div>\\n</md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(\\'all\\')\\\" \\nname=\\\"all\\\"><span translate=\\\"GENERAL.ALL\\\"></span></md-nav-item></md-nav-bar></div><div layout=\\\"row\\\" \\nclass=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/transfers/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nclass=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">\\n{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"transfer-search\\\" ng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:200}\\\" \\nng-change=\\\"vm.reloadTransfers()\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-transfers-list status=\\\"vm.status\\\"></nd-transfers-list>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/uids/uids.html\",\"<div id=\\\"uids\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.UIDS\\\"></span></div><div layout=\\\"row\\\" \\nclass=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/uids/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/warehouse.html\",\"<div id=\\\"warehouse\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.inventory.warehouses\\\" translate \\ntranslate-attr-aria-label=\\\"WAREHOUSES.GO_TO_WAREHOUSES\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"h2 mr-8\\\">{{vm.warehouse.name}}</div><nd-warehouse-badge type=\\\"vm.warehouse.type\\\"></nd-warehouse-badge></div><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mr-8\\\"><md-button class=\\\"md-primary md-raised mr-8\\\" \\nng-if=\\\"vm.currentNavItem === \\'stock-locations\\'\\\" has-permission=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" \\nng-click=\\\"vm.handleNewStockLocation()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'WAREHOUSE.NEW_LOCATION\\' | translate}}</div></md-button><md-menu \\nhas-permission=\\\"inventory.adjustments.delete\\\"><md-button aria-label=\\\"Actions\\\" class=\\\"md-primary stroked\\\" \\nng-click=\\\"$mdMenu.open($event)\\\" ng-disabled=\\\"vm.loadingDelete\\\"><span translate=\\\"GENERAL.ACTIONS\\\"></span></md-button>\\n<md-menu-content width=\\\"4\\\"><md-menu-item has-permission=\\\"inventory.adjustments.delete\\\"><md-button \\nng-click=\\\"vm.transferAll()\\\" ng-disabled=\\\"vm.loading\\\">{{\\'WAREHOUSE.TRANSFER_ALL\\' | translate}}</md-button>\\n</md-menu-item><md-divider></md-divider><md-menu-item has-permission=\\\"inventory.adjustments.delete\\\"><md-button \\nclass=\\\"md-warn\\\" ng-disabled=\\\"vm.loadingDelete\\\" ng-click=\\\"vm.deleteWarehouse()\\\">{{\\'GENERAL.DELETE\\' | translate}}\\n</md-button></md-menu-item></md-menu-content></md-menu></div></div></div></div><div class=\\\"content\\\" layout=\\\"column\\\" \\nflex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" \\ndata-test-id=\\\"product-tab-bar\\\"><md-nav-item md-nav-sref=\\\"app.inventory.warehouses.warehouse.details\\\" \\nhas-permission=\\\"app.inventory.warehouses.warehouse.details\\\" name=\\\"details\\\">{{\\\"WAREHOUSE.DETAILS\\\" | translate}}\\n</md-nav-item><md-nav-item ng-if=\\\"vm.warehouse.type === vm.WAREHOUSE_TYPES.STORE\\\" \\nmd-nav-sref=\\\"app.inventory.warehouses.warehouse.registers\\\" \\nhas-permission=\\\"app.inventory.warehouses.warehouse.registers\\\" name=\\\"registers\\\">{{\\\"WAREHOUSE.REGISTERS\\\" | translate }}\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" \\nhas-permission-and-feature=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" name=\\\"stock-locations\\\"><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div>{{\\'WAREHOUSE.LOCATIONS\\' | translate}}</div><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nclass=\\\"md-primary-fg has-permission-and-feature-icon\\\"></md-icon><nd-new-feature-badge class=\\\"ml-8 new-feature\\\" \\nid=\\\"NEW_STOCK_LOCATIONS\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge></div></md-nav-item></md-nav-bar><md-content \\nui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouses/warehouses.html\",\"<div id=\\\"warehouse\\\" class=\\\"page-layout simple tabbed carded\\\" layout=\\\"column\\\"><div class=\\\"header mb-0 pb-0\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"WAREHOUSES.LOCATIONS\\\" flex>Warehouses </span><span\\n flex></span><md-button ng-if=\\\"!vm.hasSubscription\\\" class=\\\"md-primary md-raised no-margin\\\" \\nhas-permission=\\\"inventory.warehouses.create\\\" ng-click=\\\"vm.newWarehouseClicked($event)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'WAREHOUSES.NEW_WAREHOUSE\\' | translate}}</div></md-button><md-button \\nng-if=\\\"vm.hasSubscription && vm.contractedPlanLimits\\\" class=\\\"md-primary md-raised no-margin\\\" \\nhas-permission-and-feature=\\\"inventory.warehouses.create\\\" ng-click=\\\"vm.newWarehouseClicked($event)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" \\nng-if=\\\"vm.allowCreation()\\\" class=\\\"mr-5\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" ng-if=\\\"vm.blockCreation()\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'WAREHOUSES.NEW_WAREHOUSE\\' | translate}}</div></md-button></div><div class=\\\"content mr-8 ml-8 mb-8\\\" flex \\nlayout=\\\"column\\\"><div id=\\\"warehouses-list\\\" layout=\\\"column\\\" flex><div flex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div \\nflex=\\\"100\\\" flex-gt-sm=\\\"60\\\" hide-xs hide-sm class=\\\"ml-8 mb-8 mr-8\\\"><div id=\\\"warehouses-map\\\"></div></div><md-card \\nflex=\\\"100\\\" class=\\\"mt-0 warehouses-list\\\" flex-gt-sm=\\\"40\\\"><md-card-content class=\\\"p-0\\\"><div class=\\\"list-header\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container class=\\\"nd-search-input w-200\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" ng-model=\\\"vm.search\\\" focus-if=\\\"{{vm.focusSearch}}\\\" \\nng-blur=\\\"vm.focusSearch = false\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"text\\\"><div \\nclass=\\\"hotkeys-shortcut\\\" ng-bind-html=\\\"vm.hotkeyHtml\\\"></div></md-input-container></div><md-list class=\\\"m-0 p-0\\\" flex>\\n<md-list-item class=\\\"border-bottom m-0\\\" ui-sref=\\\"app.inventory.warehouses.warehouse.details({id: {{warehouse.id}}})\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | filter: vm.warehouseSearchFilter\\\" layout=\\\"row\\\" \\nng-class=\\\"{\\'md-background-bg md-hue-3\\': vm.selectedWarehouse.id == warehouse.id}\\\"><div flex style=\\\"line-height: 20px\\\" \\nclass=\\\"p-10\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-warehouse-badge type=\\\"warehouse.type\\\" class=\\\"mr-8\\\">\\n</nd-warehouse-badge><a ui-sref=\\\"app.inventory.warehouses.warehouse.details({id: {{warehouse.id}}})\\\">{{warehouse.name}}\\n</a></div>{{warehouse | location}}</div></md-list-item></md-list></md-card-content></md-card></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/manufacture/views/production/production.html\",\"<div id=\\\"production\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\" flex ms-scroll><div class=\\\"header no-padding\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.manufacture.productions\\\" translate \\ntranslate-attr-aria-label=\\\"PRODUCTION.GO_TO_PRODUCTIONS\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div ng-if=\\\"!vm.isNewProduction\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"PRODUCTION.PRODUCTION\\\"></div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\">{{vm.production.autocode}}-<span class=\\\"ml-5\\\">\\n{{vm.getStatusLabel(vm.production.status)}}</span></div></div><div ng-if=\\\"vm.isNewProduction\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"PRODUCTION.NEW_PRODUCTION\\\"></div></div><md-button \\nclass=\\\"m-0 mr-16 md-primary stroked\\\" translate=\\\"PRODUCTION.DELETE\\\" ng-if=\\\"vm.production.status == 10\\\" \\nhas-permission=\\\"manufacture.productions.delete\\\" ng-click=\\\"vm.delete()\\\"></md-button></div></div></div><div \\nclass=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" \\nnav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewProduction\\\"><md-nav-item \\nmd-nav-sref=\\\"app.manufacture.productions.production.details\\\" \\nhas-permission=\\\"app.manufacture.productions.production.details\\\" name=\\\"details\\\"><span translate=\\\"PRODUCTION.DETAILS\\\">\\nDetails</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.manufacture.productions.production.products\\\" \\nhas-permission=\\\"app.manufacture.productions.production.products\\\" name=\\\"products\\\"><span translate=\\\"PRODUCTION.PRODUCTS\\\">\\nProducts</span></md-nav-item><md-nav-item md-nav-sref=\\\"app.manufacture.productions.production.materials\\\" \\nhas-permission=\\\"app.manufacture.productions.production.materials\\\" name=\\\"materials\\\"><span \\ntranslate=\\\"PRODUCTION.MATERIALS\\\">Materials</span></md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/manufacture/views/productions/productions.html\",\"<div id=\\\"productions\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PRODUCTIONS.PRODUCTIONS\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"manufacture.productions.create\\\" ui-sref=\\\"app.manufacture.productions.new.details\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'PRODUCTION.NEW_PRODUCTION\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\">\\n<md-sidenav class=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" \\nmd-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/manufacture/views/productions/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nclass=\\\"filter-notification\\\" ng-if=\\\"vm.filtersNotifications\\\"><span class=\\\"notification-number\\\">\\n{{vm.filtersNotifications}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"production-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span \\nflex></span></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table \\nclass=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/planning/views/reorder/reorder.html\",\"<div id=\\\"reorder\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"REPLENISHMENT.REORDER\\\">\\n</span></div><div ng-if=\\\"vm.isProductView()\\\" class=\\\"preset-filters-div\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button ng-click=\\\"vm.applyAvailabilityStatusFilter(null)\\\" ng-class=\\\"{\\'active\\': vm.activePresetFilter === null}\\\">\\n<span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.ALL\\\"></span></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.OUT_OF_STOCK\\\"></span><div \\nclass=\\\"button-badge out-of-stock\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.URGENT_ORDER\\\"></span><div \\nclass=\\\"button-badge urgent-order\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.NON_URGENT_ORDER)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.NON_URGENT_ORDER}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.NON_URGENT_ORDER\\\"></span><div \\nclass=\\\"button-badge non-urgent-order\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.NON_URGENT_ORDER)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.IN_STOCK\\\"></span><div \\nclass=\\\"button-badge in-stock\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button></div><div layout=\\\"row\\\" \\nclass=\\\"content-card\\\" flex><div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"product-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.selectedStatus.search\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><div \\nclass=\\\"ml-10\\\" layout=\\\"row\\\" ng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.providers.visible\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-store\\\"></md-icon>\\n<md-select ng-model=\\\"vm.statusByProduct.filters.providers\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'LOW_STOCK.PROVIDER\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"provider in vm.providers | orderBy: \\'position\\'\\\" ng-value=\\\"provider.id\\\">{{provider.name}}</md-option>\\n</md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'providers\\', vm.statusByProduct.dynamicFilters.providers)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.availabilityStatuses.visible\\\"><md-input-container \\nmd-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg\\\" class=\\\"ng-scope md-default-theme\\\">\\n</md-icon><md-select ng-model=\\\"vm.statusByProduct.filters.availabilityStatuses\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"availabilityStatus in vm.availabilityStatuses | orderBy: \\'position\\'\\\" ng-value=\\\"availabilityStatus\\\"><div \\nclass=\\\"replenishment-stock-status mr-5 {{availabilityStatus}}\\\"></div>\\n{{\\'INVENTORY_DASHBOARD.\\' + availabilityStatus | translate}}</md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'availabilityStatuses\\', vm.statusByProduct.dynamicFilters.availabilityStatuses)\\\">\\n<md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.abcCategories.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\">\\n</md-icon><md-select ng-model=\\\"vm.statusByProduct.filters.abcCategories\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ABC_CATEGORY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"abcCategory in vm.abcCategories | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" \\nng-value=\\\"abcCategory\\\"><div class=\\\"abc-box type-{{abcCategory}}\\\">{{abcCategory}}</div></md-option></md-select>\\n</md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'abcCategories\\', vm.statusByProduct.dynamicFilters.abcCategories)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.brands.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-tag-outline\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.statusByProduct.filters.brands\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.BRAND\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"brand in vm.brands | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" ng-value=\\\"brand.id\\\"><span>\\n{{brand.name}}</span></md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'brands\\', vm.statusByProduct.dynamicFilters.brands)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.categories.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-folder-multiple-outline\\\" class=\\\"s24\\\"></md-icon>\\n<md-select ng-model=\\\"vm.statusByProduct.filters.categories\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.CATEGORY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"category in vm.categories | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" ng-value=\\\"category.id\\\">\\n<span>{{category.name}}</span></md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'categories\\', vm.statusByProduct.dynamicFilters.categories)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.subcategories.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-folder-outline\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.statusByProduct.filters.subcategories\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.SUBCATEGORY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" \\nng-value=\\\"subcategory.id\\\"><span>{{subcategory.name}}</span></md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'subcategories\\', vm.statusByProduct.dynamicFilters.subcategories)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.seasons.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-weather-sunny\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.statusByProduct.filters.seasons\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.SEASON\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"season in vm.seasons | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" ng-value=\\\"season.id\\\"><span>\\n{{season.name}}</span></md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'seasons\\', vm.statusByProduct.dynamicFilters.seasons)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isProductView() && vm.statusByProduct.dynamicFilters.collections.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-weather-sunny\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.statusByProduct.filters.collections\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'SALE.COLLECTION\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"collection in vm.collections | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" \\nng-value=\\\"collection.id\\\"><span>{{collection.code}}</span></md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'collections\\', vm.statusByProduct.dynamicFilters.collections)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><md-menu ng-if=\\\"vm.isProductView()\\\"><md-button \\nclass=\\\"md-button md-primary stroked\\\" ng-click=\\\"$mdMenu.open($event)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon md-menu-origin class=\\\"mr-5\\\" md-svg-icon=\\\"assets/images/custom-material-design-icons/filter-variant-plus.90ad7787.svg\\\">\\n</md-icon>{{\\'INVENTORY_DASHBOARD.ADD_FILTER\\' | translate}}</div></md-button><md-menu-content><md-menu-item \\nng-repeat=\\\"(property, filter) in vm.statusByProduct.dynamicFilters\\\" ng-hide=\\\"filter.visible\\\"><md-button \\nng-click=\\\"vm.toggleFilterVisibility(property, filter)\\\"><md-icon md-menu-align-target md-font-icon \\nng-if=\\\"filter.svgIcon\\\" md-svg-icon=\\\"{{filter.svgIcon}}\\\"></md-icon><md-icon md-menu-align-target \\nmd-font-icon=\\\"{{filter.icon}}\\\" ng-if=\\\"!filter.svgIcon\\\"></md-icon>{{filter.title | translate}}</md-button>\\n</md-menu-item></md-menu-content></md-menu><span ng-if=\\\"vm.keptSelectionArray.length\\\" class=\\\"secondary-text ml-10\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: {n: vm.keptSelectionArray.length} }}</span><div flex \\nng-if=\\\"vm.isProviderView()\\\"></div><span flex></span><md-button class=\\\"md-icon-button mr-16\\\" ng-if=\\\"vm.isProductView()\\\" \\nng-click=\\\"vm.expandAll()\\\" aria-label=\\\"Expand \\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\'GENERAL.EXPAND_ALL\\' | translate}}\\n</md-tooltip><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/arrow-expand-vertical.923beec7.svg\\\" class=\\\"s24\\\">\\n</md-icon></md-button><md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.isProductView()\\\" ng-click=\\\"vm.collapseAll()\\\" \\naria-label=\\\"Collapse\\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\'GENERAL.COLLAPSE_ALL\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-collapse-vertical.05b2cad3.svg\\\" class=\\\"s24\\\"></md-icon></md-button>\\n<nd-tabs \\ntabs=\\\"[\\n              {name: 1, label: \\'REORDER.VIEW_BY_PRODUCT\\'},\\n              {name: 2, label: \\'REORDER.VIEW_BY_PROVIDER\\'}\\n            ]\\\" \\nselected=\\\"vm.view\\\"></nd-tabs><md-menu class=\\\"mr-5\\\" ng-if=\\\"vm.isProductView()\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdMenu.open()\\\" data-test-id=\\\"open-menu-button\\\" aria-label=\\\"more\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\">\\n</md-icon></md-button><md-menu-content width=\\\"3\\\"><md-menu-item><md-button ng-click=\\\"vm.downloadCSV()\\\" \\nng-disabled=\\\"vm.exporting\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.exporting\\\"></md-progress-circular><span translate=\\\"CUSTOMERS.EXPORT_CSV\\\" \\nng-class=\\\"{\\'ml-8\\': vm.exporting}\\\">Export CSV</span></div></md-button></md-menu-item></md-menu-content></md-menu></div>\\n<div class=\\\"full-width h-0\\\"><md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" ng-if=\\\"vm.loading\\\">\\n</md-progress-linear></div><md-content class=\\\"content uid-grid-container no-padding\\\" flex><div \\nng-if=\\\"vm.isProductView()\\\" ui-grid=\\\"vm.gridOptionsByProduct\\\" ui-grid-pagination ui-grid-move-columns ui-grid-selection \\nui-grid-exporter ui-grid-resize-columns ui-grid-pinning ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize \\nui-grid-exporter ui-grid-edit ui-grid-row-edit ui-grid-grouping class=\\\"grid\\\" style=\\\"height: 100%\\\"></div><div \\nng-if=\\\"vm.isProviderView()\\\" ui-grid=\\\"vm.gridOptionsByProvider\\\" ui-grid-pagination ui-grid-move-columns \\nui-grid-selection ui-grid-exporter ui-grid-resize-columns ui-grid-pinning ui-grid-cellnav ui-grid-save-state \\nui-grid-auto-resize ui-grid-exporter ui-grid-edit ui-grid-row-edit class=\\\"grid\\\" style=\\\"height: 100%\\\"></div>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/planning/views/reorder/sales-analysis-dialog.html\",\"<md-dialog id=\\\"sales-analysis-dialog\\\"><md-dialog-content flex><h2 class=\\\"md-title\\\">Sales Analysis</h2>\\n<md-input-container flex><div ui-grid=\\\"vm.gridOptions\\\" class=\\\"grid w-800\\\"></div></md-input-container>\\n</md-dialog-content><md-dialog-actions><md-button ng-click=\\\"vm.closeDialog()\\\">Close</md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/planning/views/replenishment/replenishment.html\",\"<div id=\\\"replenishment\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span ng-if=\\\"!vm.isBundle\\\" class=\\\"h2\\\" \\ntranslate=\\\"REPLENISHMENT.REPLENISHMENT\\\"></span><md-button ng-click=\\\"vm.openAnalysisInformationDialog()\\\" \\nclass=\\\"md-icon-button no-margin\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\"></md-icon></md-button></div>\\n<nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><div \\nng-if=\\\"vm.isProductView()\\\" class=\\\"preset-filters-div\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(null)\\\" ng-class=\\\"{\\'active\\': vm.activePresetFilter === null}\\\"><span \\nclass=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.ALL\\\"></span></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.OUT_OF_STOCK\\\"></span><div \\nclass=\\\"button-badge out-of-stock\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.OUT_OF_STOCK)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.URGENT_ORDER\\\"></span><div \\nclass=\\\"button-badge urgent-order\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.URGENT_ORDER)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button><md-button \\nng-click=\\\"vm.applyAvailabilityStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK)\\\" \\nng-class=\\\"{\\'active\\': vm.activePresetFilter === vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span class=\\\"availability-name\\\" translate=\\\"REPLENISHMENT.IN_STOCK\\\"></span><div \\nclass=\\\"button-badge in-stock\\\"><span ng-if=\\\"!vm.loading\\\">\\n{{vm.getAggregatedByStatusFilter(vm.PLANNING_AVAILABILITY_STATUS.IN_STOCK)}}</span><md-progress-circular \\nmd-diameter=\\\"12px\\\" ng-if=\\\"vm.loading\\\"></md-progress-circular></div></div></md-button></div><div layout=\\\"row\\\" \\nclass=\\\"content-card\\\" flex><div layout=\\\"column\\\" flex><div class=\\\"toolbar no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"w-10\\\"></span><md-input-container md-no-float \\nclass=\\\"nd-search-input w-200 ml-10\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"product-search\\\" \\nnd-mute-barcode-callbacks ng-model=\\\"vm.selectedStatus.search\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container>\\n<nd-filter-selector class=\\\"ml-10\\\" on-changed=\\\"vm.filterChanged()\\\" ng-if=\\\"vm.isProductView()\\\"><nd-filter \\nname=\\\"REPLENISHMENT.STOCK\\\" label=\\\"REPLENISHMENT.STOCK\\\" icon=\\\"icon-package-variant-closed\\\"><nd-input type=\\\"number\\\" \\nmin=\\\"0\\\" step=\\\"1\\\" model=\\\"vm.statusByProduct.filters.warehouseStock\\\" select-placeholder=\\\"REPLENISHMENT.STOCK\\\" \\nicon=\\\"icon-package-variant-closed\\\"></nd-input></nd-filter><nd-filter name=\\\"REPLENISHMENT.STOCK_TO_ORDER\\\" \\nlabel=\\\"REPLENISHMENT.STOCK_TO_ORDER\\\" icon=\\\"icon-package-variant-closed\\\"><nd-input type=\\\"number\\\" min=\\\"0\\\" step=\\\"1\\\" \\nmodel=\\\"vm.statusByProduct.filters.stockToOrder\\\" select-placeholder=\\\"REPLENISHMENT.STOCK_TO_ORDER\\\" \\nicon=\\\"icon-package-variant-closed\\\"></nd-input></nd-filter><nd-filter name=\\\"FILTER_BY_WAREHOUSE\\\" \\nlabel=\\\"FILTERS.FILTER_BY_WAREHOUSE\\\" icon=\\\"icon-store\\\"><nd-paginated-dropdown url=\\\"vm.warehouseUrl\\\" \\nselected-items=\\\"vm.statusByProduct.filters.warehouses\\\" select-placeholder=\\\"FILTERS.FILTER_BY_WAREHOUSE\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\"></nd-paginated-dropdown>\\n</nd-filter><nd-filter name=\\\"FILTER_AVAILABILITY_STATUS\\\" label=\\\"INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\\" \\nicon=\\\"icon-store\\\"><nd-paginated-dropdown items=\\\"vm.availabilityStatuses\\\" \\nselected-items=\\\"vm.statusByProduct.filters.availabilityStatuses\\\" \\nselect-placeholder=\\\"INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\\" search=\\\"true\\\" multiple=\\\"true\\\" \\nicon=\\\"assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg\\\"><item-template><div \\nclass=\\\"replenishment-stock-status mr-5 {{$parent.item}}\\\"></div>{{\\'INVENTORY_DASHBOARD.\\' + $parent.item | translate}}\\n</item-template></nd-paginated-dropdown></nd-filter><nd-filter name=\\\"FILTER_ABC_CATEGORY\\\" \\nlabel=\\\"INVENTORY_DASHBOARD.ABC_CATEGORY\\\" icon=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\">\\n<nd-paginated-dropdown items=\\\"vm.abcCategories\\\" selected-items=\\\"vm.statusByProduct.filters.abcCategories\\\" \\nselect-placeholder=\\\"INVENTORY_DASHBOARD.ABC_CATEGORY\\\" search=\\\"true\\\" multiple=\\\"true\\\" \\nicon=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\"><item-template><div class=\\\"abc-box type-{{$parent.item}}\\\">\\n{{$parent.item}}</div></item-template></nd-paginated-dropdown></nd-filter><nd-filter name=\\\"FILTER_BRAND\\\" \\nlabel=\\\"INVENTORY_DASHBOARD.BRAND\\\" icon=\\\"icon-tag-outline\\\"><nd-paginated-dropdown url=\\\"vm.brandsUrl\\\" \\nselected-items=\\\"vm.statusByProduct.filters.brands\\\" select-placeholder=\\\"INVENTORY_DASHBOARD.BRAND\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"icon-tag-outline\\\"></nd-paginated-dropdown></nd-filter><nd-filter name=\\\"FILTER_CATEGORY\\\" \\nlabel=\\\"INVENTORY_DASHBOARD.CATEGORY\\\" icon=\\\"icon-folder-multiple-outline\\\"><nd-paginated-dropdown url=\\\"vm.categoriesUrl\\\" \\nselected-items=\\\"vm.statusByProduct.filters.categories\\\" select-placeholder=\\\"INVENTORY_DASHBOARD.CATEGORY\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"icon-folder-multiple-outline\\\"></nd-paginated-dropdown></nd-filter><nd-filter \\nname=\\\"FILTER_SUBCATEGORY\\\" label=\\\"INVENTORY_DASHBOARD.SUBCATEGORY\\\" icon=\\\"icon-folder-outline\\\"><nd-paginated-dropdown \\nurl=\\\"vm.brandsUrl\\\" selected-items=\\\"vm.statusByProduct.filters.subcategories\\\" \\nselect-placeholder=\\\"INVENTORY_DASHBOARD.SUBCATEGORY\\\" search=\\\"true\\\" multiple=\\\"true\\\" icon=\\\"icon-folder-outline\\\">\\n</nd-paginated-dropdown></nd-filter><nd-filter name=\\\"FILTER_SEASON\\\" label=\\\"INVENTORY_DASHBOARD.SEASON\\\" \\nicon=\\\"icon-weather-sunny\\\"><nd-paginated-dropdown url=\\\"vm.seasonsUrl\\\" \\nselected-items=\\\"vm.statusByProduct.filters.seasons\\\" select-placeholder=\\\"INVENTORY_DASHBOARD.SEASON\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"icon-weather-sunny\\\"></nd-paginated-dropdown></nd-filter><nd-filter name=\\\"FILTER_COLLECTION\\\" \\nlabel=\\\"SALE.COLLECTION\\\" icon=\\\"icon-weather-sunny\\\"><nd-paginated-dropdown url=\\\"vm.collectionsUrl\\\" \\nselected-items=\\\"vm.statusByProduct.filters.collections\\\" select-placeholder=\\\"SALE.COLLECTION\\\" search=\\\"true\\\" \\nmultiple=\\\"true\\\" icon=\\\"icon-weather-sunny\\\"></nd-paginated-dropdown></nd-filter></nd-filter-selector><span flex></span>\\n<div flex ng-if=\\\"vm.isWarehouseView()\\\"></div><span ng-if=\\\"vm.keptSelectionArray.length\\\" class=\\\"secondary-text ml-10\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: {n: vm.keptSelectionArray.length} }}</span><md-button \\nclass=\\\"md-icon-button mr-16\\\" ng-if=\\\"vm.isProductView()\\\" ng-click=\\\"vm.expandAll()\\\" aria-label=\\\"Expand \\\"><md-tooltip \\nmd-direction=\\\"bottom\\\">{{\\'GENERAL.EXPAND_ALL\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-expand-vertical.923beec7.svg\\\" class=\\\"s24\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.isProductView()\\\" ng-click=\\\"vm.collapseAll()\\\" aria-label=\\\"Collapse\\\">\\n<md-tooltip md-direction=\\\"bottom\\\">{{\\'GENERAL.COLLAPSE_ALL\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-collapse-vertical.05b2cad3.svg\\\" class=\\\"s24\\\"></md-icon></md-button>\\n<nd-tabs \\ntabs=\\\"[\\n              {name: 1, label: \\'REPLENISHMENT.VIEW_BY_PRODUCT\\'},\\n              {name: 2, label: \\'REPLENISHMENT.VIEW_BY_WAREHOUSE\\'}\\n            ]\\\" \\nselected=\\\"vm.view\\\"></nd-tabs><md-menu class=\\\"mr-5\\\"><md-button class=\\\"md-icon-button\\\" ng-click=\\\"$mdMenu.open()\\\" \\ndata-test-id=\\\"open-menu-button\\\" aria-label=\\\"more\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item><md-button ng-click=\\\"vm.downloadCSV()\\\" ng-disabled=\\\"vm.exporting\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" \\nng-if=\\\"vm.exporting\\\"></md-progress-circular><span translate=\\\"CUSTOMERS.EXPORT_CSV\\\" ng-class=\\\"{\\'ml-8\\': vm.exporting}\\\">\\nExport CSV</span></div></md-button></md-menu-item></md-menu-content></md-menu></div><div class=\\\"full-width h-0\\\">\\n<md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear></div>\\n<md-content class=\\\"content uid-grid-container no-padding\\\" flex><div ng-if=\\\"vm.isProductView()\\\" \\nui-grid=\\\"vm.gridOptionsByProduct\\\" ui-grid-pagination ui-grid-move-columns ui-grid-selection ui-grid-exporter \\nui-grid-resize-columns ui-grid-pinning ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize ui-grid-exporter \\nui-grid-edit ui-grid-row-edit ui-grid-grouping class=\\\"grid\\\" style=\\\"height: 100%\\\"></div><div \\nng-if=\\\"vm.isWarehouseView()\\\" ui-grid=\\\"vm.gridOptionsByWarehouse\\\" ui-grid-pagination ui-grid-move-columns \\nui-grid-exporter ui-grid-pinning ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize ui-grid-resize-columns \\nui-grid-exporter ui-grid-edit ui-grid-row-edit class=\\\"grid\\\" style=\\\"height: 100%\\\"></div></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/sale/views/customers/customers.html\",\"<div id=\\\"customers\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"CUSTOMERS.CUSTOMERS\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" ng-click=\\\"vm.newCustomer()\\\" \\nhas-permission=\\\"sale.customers.create\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'CUSTOMERS.NEW_CUSTOMER\\' | translate}}</div></md-button></div></div>\\n<div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/sale/views/customers/sidenavs/main/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\" \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"product-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span flex></span><md-button \\nng-click=\\\"vm.downloadCSV()\\\" class=\\\"md-primary m-0\\\" has-permission=\\\"sale.customers.export\\\" ng-disabled=\\\"vm.exporting\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" \\nng-if=\\\"vm.exporting\\\"></md-progress-circular><span translate=\\\"CUSTOMERS.EXPORT_CSV\\\" ng-class=\\\"{\\'ml-8\\': vm.exporting}\\\">\\nExport CSV</span></div></md-button></div><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll>\\n<table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/display/display.html\",\"<div class=\\\"page-layout simple pt-40 pr-40 pl-40 pb-0\\\" id=\\\"sale-display\\\" layout=\\\"column\\\" layout-fill><md-whiteframe \\nclass=\\\"white-bg border-radius p-30\\\" flex=\\\"100\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" ng-if=\\\"!vm.sale.total\\\"><img\\n ng-src=\\\"{{session.company.logo}}\\\"></md-whiteframe><md-whiteframe class=\\\"white-bg border-radius p-30\\\" flex=\\\"100\\\" \\nlayout=\\\"column\\\" ng-if=\\\"vm.sale.total\\\"><div class=\\\"border-bottom mb-10 pb-10\\\" layout=\\\"row\\\"><div class=\\\"h3\\\" \\ntranslate=\\\"SALES.RECEIPT\\\"></div></div><div class=\\\"items-list\\\" flex=\\\"100\\\" layout=\\\"column\\\" ms-scroll><div \\nng-if=\\\"posOrderProductVariant.consumed_gift_card === null\\\" \\nng-repeat=\\\"posOrderProductVariant in vm.sale.pos_order_product_variants track by $index\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span>{{posOrderProductVariant.amount}}</span> <span class=\\\"ml-5\\\">\\n{{posOrderProductVariant.product_name}} <small class=\\\"secondary-text\\\">\\n{{posOrderProductVariant.product_variant_color_name}} - {{posOrderProductVariant.product_variant_size_name}}</small> \\n</span><span flex></span> <span style=\\\"white-space: nowrap\\\">\\n{{ posOrderProductVariant.getTotal(true, true) | price}} {{::vm.currencyCharacter}}</span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" ng-if=\\\"posOrderProductVariant.uid_stock_uid\\\"><span class=\\\"ml-5 secondary-text long-text\\\">\\n{{posOrderProductVariant.uid_stock_uid}}</span></div><ul class=\\\"m-0 pl-20\\\"><li layout=\\\"row\\\" layout-align=\\\"start start\\\" \\nng-repeat=\\\"bundlePosOrderProductVariant in posOrderProductVariant.bundle_content\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span>{{bundlePosOrderProductVariant.amount}}</span> <span class=\\\"ml-5\\\">\\n{{bundlePosOrderProductVariant.product_name}} <small class=\\\"secondary-text\\\">\\n{{bundlePosOrderProductVariant.color_name}} - {{bundlePosOrderProductVariant.size_name}}</small></span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"ml-5 secondary-text long-text\\\">\\n{{posOrderProductVariant.uid_stock_uid}}</span></div></li></ul></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\" \\nng-if=\\\"posOrderProductVariant.consumed_gift_card !== null\\\" \\nng-repeat=\\\"posOrderProductVariant in vm.sale.pos_order_product_variants track by $index\\\"><span>\\n{{posOrderProductVariant.amount}}</span> <span class=\\\"ml-5\\\">{{posOrderProductVariant.product_name}} <small \\nclass=\\\"secondary-text\\\">{{(-1 * posOrderProductVariant.price_incl_tax) | price}} {{::vm.currencyCharacter}}</small> \\n</span><span flex></span> <span style=\\\"white-space: nowrap\\\">\\n{{ posOrderProductVariant.getTotal(true, true) | price}} {{::vm.currencyCharacter}}</span></div><div \\nng-if=\\\"vm.sale.balance_discount && vm.sale.balance_discount != 0 && !vm.sale.isDevolution\\\"><div><div layout=\\\"row\\\"><div \\nflex translate=\\\"SALES.TOTAL_WITHOUT_DISCOUNT\\\"></div><div class=\\\"text-right\\\" flex>\\n{{vm.sale.balance_discount + vm.sale.total | price}} {{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\"><div \\nclass=\\\"balance-discount\\\" flex ng-if=\\\"vm.sale.balance_discount > 0\\\" translate=\\\"SALES.APPLIED_BALANCE\\\"></div><div \\nclass=\\\"balance-discount\\\" flex ng-if=\\\"vm.sale.balance_discount < 0\\\" translate=\\\"SALES.PENDING_NEGATIVE_BALANCE\\\"></div>\\n<div class=\\\"text-right balance-discount\\\" flex>{{-vm.sale.balance_discount | price}} {{::vm.currencyCharacter}}</div>\\n</div></div></div></div><div class=\\\"pt-10\\\" ng-if=\\\"!vm.sale.generateDevolutionCardClicked\\\"><div layout=\\\"row\\\"><div flex \\ntranslate=\\\"SALES.SUBTOTAL\\\"></div><div class=\\\"text-right\\\" flex>\\n{{vm.sale.getSubtotal() | price}} {{::vm.currencyCharacter}}</div></div><div class=\\\"secondary-text\\\" layout=\\\"row\\\"><div \\nflex translate=\\\"SALES.TAX\\\"></div><div class=\\\"text-right\\\" flex>\\n{{vm.sale.getTotalTaxes() | price}} {{::vm.currencyCharacter}}</div></div><md-divider class=\\\"mv-8\\\"></md-divider><div \\nclass=\\\"h2\\\" layout=\\\"row\\\" ng-if=\\\"!vm.sale.devolution_cards || vm.sale.devolution_cards.length === 0\\\"><div flex \\ntranslate=\\\"SALES.TOTAL\\\">Total</div><div class=\\\"text-right\\\" flex id=\\\"test-total-price\\\"><div \\nng-class=\\\"vm.sale.balance_discount > 0 ? \\'balance-discount\\' : \\'\\'\\\">\\n{{vm.sale.getTotal() | price}} {{::vm.currencyCharacter}}</div></div></div><div class=\\\"h3\\\" layout=\\\"row\\\"><span flex \\ntranslate=\\\"SALES.BALANCE\\\"></span> {{vm.sale.getBalance() | price}} {{vm.currencyCharacter}}</div></div></md-whiteframe>\\n<div class=\\\"h-40\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"text-right\\\">Powered by</div><img \\nclass=\\\"ml-5 mr-5\\\" src=\\\"/assets/stockagile/logos/stockagile-logo.e4ee42cd.svg\\\" style=\\\"height:20px\\\"> <img \\nsrc=\\\"/assets/stockagile/logos/stockagile-logo-text-black.0448f8b8.svg\\\" style=\\\"height:15px\\\"></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/gift-cards/gift-cards.html\",\"<div id=\\\"sale-gift-cards\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\" \\ntranslate=\\\"GIFT_CARDS.VOUCHERS_AND_GIFT_CARDS\\\"></span><nd-new-feature-badge id=\\\"NEW_GIFT_CARD_SCREEN\\\" class=\\\"ml-8\\\" \\nremove-margin=\\\"true\\\"></nd-new-feature-badge><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" ng-click=\\\"vm.goToNewProductPage()\\\" \\nui-sref=\\\"app.inventory.products.new-product({ is_gift_card: true })\\\" has-permission=\\\"inventory.products.create\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'SALES.CREATE_GIFT_CARD\\' | translate}}</div></md-button></div></div><div class=\\\"content-card\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"gift-card-search\\\" \\nnd-mute-barcode-callbacks ng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.filterChanged()\\\" ng-model-options=\\\"{debounce:500}\\\" \\ntype=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><div class=\\\"mr-8\\\"><md-input-container \\nmd-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon ng-if=\\\"vm.status.filters.types\\\" \\nmd-font-icon=\\\"icon-credit-card\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.types\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'GIFT_CARDS.FILTER_BY_TYPE\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"type in vm.types\\\" ng-value=\\\"type\\\"><span ng-if=\\\"type == \\'gift_card\\'\\\" translate=\\\"SALES.GIFT_CARD\\\"></span> \\n<span ng-if=\\\"type == \\'voucher\\'\\\" translate=\\\"SALES.VOUCHER\\\"></span></md-option></md-select></md-input-container></div>\\n<div class=\\\"mr-8\\\"><md-input-container md-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon \\nmd-font-icon=\\\"icon-checkbox-multiple-marked-outline\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.is_valid\\\" \\nmultiple=\\\"multiple\\\" flex placeholder=\\\"{{\\'GIFT_CARDS.FILTER_BY_VALID\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\">\\n<md-option ng-repeat=\\\"is_valid in vm.is_valid\\\" ng-value=\\\"is_valid\\\"><span ng-if=\\\"is_valid == true\\\" \\ntranslate=\\\"GIFT_CARDS.VALID\\\"></span> <span ng-if=\\\"is_valid == false\\\" translate=\\\"GIFT_CARDS.NOT_VALID\\\"></span>\\n</md-option></md-select></md-input-container></div></div><md-content class=\\\"content no-padding uid-grid-container\\\" \\nflex><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination ui-grid-move-columns ui-grid-exporter ui-grid-resize-columns \\nui-grid-pinning ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize ui-grid-exporter class=\\\"grid\\\" \\nstyle=\\\"height: 100%\\\"></div></md-content></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/goals/goals.html\",\"<div id=\\\"goals\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"GOALS.GOALS\\\"></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-icon-button arrow\\\" ng-click=\\\"vm.prev()\\\" aria-label=\\\"Previous\\\" \\ntranslate translate-attr-aria-label=\\\"GOALS.PREVIOUS\\\"><md-icon md-font-icon=\\\"icon-chevron-left\\\"></md-icon></md-button>\\n<div class=\\\"h3\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.loading\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mh-8 white-fg\\\"></md-progress-circular>{{vm.calendarView.title}}</div><md-button class=\\\"md-icon-button arrow\\\" \\nng-click=\\\"vm.next()\\\" aria-label=\\\"Next\\\" translate translate-attr-aria-label=\\\"GOALS.NEXT\\\"><md-icon \\nmd-font-icon=\\\"icon-chevron-right\\\"></md-icon></md-button></div><md-button class=\\\"m-0 md-primary md-raised\\\" \\nng-click=\\\"vm.addSalesGoal($event)\\\" has-permission=\\\"sale.goals.create\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'GOALS.ADD_GOAL\\' | translate}}</div></md-button></div></div>\\n<div class=\\\"content ml-8 mr-8 mb-8\\\"><md-card><md-card-title><md-card-title-text><div class=\\\"header-bottom\\\" \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" layout-wrap><md-button class=\\\"md-button\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-class=\\\"{\\'md-primary\\': warehouse.selected}\\\" \\nng-click=\\\"vm.toggleWarehouse(warehouse)\\\"><strong>{{warehouse.name}}:</strong>\\n {{vm.warehouseTotalDict[warehouse.id] | price}} {{vm.CURRENCIES[warehouse.currency]}}</md-button></div></div></div>\\n</md-card-title-text></md-card-title><md-card-content><div id=\\\"calendarView\\\" \\nui-calendar=\\\"vm.calendarUiConfig.calendar\\\" ng-model=\\\"vm.salesGoalEvents\\\" calendar=\\\"main\\\"></div></md-card-content>\\n</md-card></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/promotion/promotion.html\",\"<div id=\\\"sale-promotion\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button class=\\\"goto-products-button md-icon-button\\\" aria-label=\\\"Go to promotions\\\" \\nui-sref=\\\"app.sale.promotions\\\" translate translate-attr-aria-label=\\\"PROMOTION.GO_TO_PROMOTIONS\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div class=\\\"h2\\\">{{\\'PROMOTION.PROMOTION\\' | translate}}</div><span \\nflex></span><md-menu has-permission=\\\"sale.promotions.update,sale.promotions.delete\\\"><md-button aria-label=\\\"Actions\\\" \\nclass=\\\"md-primary stroked\\\" ng-click=\\\"vm.openMenu($mdMenu, $event)\\\" ng-disabled=\\\"vm.saving\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" translate=\\\"GENERAL.ACTIONS\\\"></md-button><md-menu-content width=\\\"4\\\"><md-menu-item \\nhas-permission=\\\"sale.promotions.update\\\"><md-button ng-click=\\\"vm.duplicate()\\\" ng-disabled=\\\"vm.saving\\\"><md-icon \\nmd-font-icon=\\\"icon-content-copy\\\"></md-icon>{{\\'GENERAL.DUPLICATE\\' | translate}}</md-button></md-menu-item>\\n<md-menu-divider has-permission=\\\"inventory.products.product.details.delete\\\"></md-menu-divider><md-menu-item \\nhas-permission=\\\"sale.promotions.delete\\\"><md-button class=\\\"md-warn\\\" ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.delete()\\\">\\n<md-icon md-font-icon=\\\"icon-trash\\\"></md-icon>{{\\'GENERAL.DELETE\\' | translate}}</md-button></md-menu-item>\\n</md-menu-content></md-menu><md-button class=\\\"md-primary md-raised mr-0\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"vm.saving\\\" \\nhas-permission=\\\"sale.promotions.update\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.saving\\\" class=\\\"mh-8\\\"></md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div>\\n</md-button></div><div class=\\\"content ml-8 mr-8 mb-8\\\"><form name=\\\"promotionForm\\\" flex layout=\\\"column\\\"></form><md-card>\\n<md-card-content><div flex layout=\\\"column\\\"><h3 class=\\\"text-bold mt-0\\\" translate=\\\"PROMOTION.DETAILS\\\"></h3><div flex \\nlayout=\\\"row\\\" layout-wrap><md-switch flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" ng-model=\\\"vm.promotion.enabled\\\">\\n{{\\'PROMOTION.PROMOTION_ENABLED\\' | translate}}</md-switch><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nflex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label translate=\\\"PROMOTION.NAME\\\"></label><input ng-model=\\\"vm.promotion.name\\\" \\nmax_length=\\\"128\\\" type=\\\"text\\\" required></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nflex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label translate=\\\"PROMOTION.PUBLIC_NAME\\\"></label><input \\nng-model=\\\"vm.promotion.public_name\\\" max_length=\\\"128\\\" type=\\\"text\\\" required></md-input-container></div><h3 \\nclass=\\\"text-bold\\\" translate=\\\"PROMOTION.DISCOUNT_TYPE\\\"></h3><div layout=\\\"row\\\" layout-wrap><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label translate=\\\"PROMOTION.PRICE\\\"></label><input \\nng-model=\\\"vm.promotion.fixed_price_incl_tax\\\" \\nng-required=\\\"!vm.promotion.fixed_discount && !vm.promotion.fixed_price_incl_tax\\\" \\nng-disabled=\\\"vm.promotion.fixed_discount\\\" type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label \\ntranslate=\\\"PROMOTION.DISCOUNT\\\"></label><input ng-model=\\\"vm.promotion.fixed_discount\\\" \\nng-required=\\\"!vm.promotion.fixed_discount && !vm.promotion.fixed_price_incl_tax\\\" \\nng-disabled=\\\"vm.promotion.fixed_price_incl_tax\\\" type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer mb-0\\\"><label \\ntranslate=\\\"PROMOTION.MIN_PRICE_POS_ORDER\\\"></label><input id=\\\"min-price-promotion\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.promotion.min_price\\\" type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"> <small class=\\\"secondary-text\\\" \\ntranslate=\\\"PROMOTION.MIN_PRICE_POS_ORDER_HINT\\\"></small></md-input-container></div><h3 class=\\\"text-bold\\\" \\ntranslate=\\\"PROMOTION.DATES\\\"></h3><div layout=\\\"row\\\" layout-wrap layout-align=\\\"start center\\\"><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label translate=\\\"PROMOTION.START_DATE\\\"></label>\\n<md-datepicker md-hide-icons=\\\"calendar\\\" ng-model=\\\"vm.promotion.start_date\\\" md-open-on-focus=\\\"true\\\"></md-datepicker>\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label \\ntranslate=\\\"PROMOTION.END_DATE\\\"></label><md-datepicker md-hide-icons=\\\"calendar\\\" ng-model=\\\"vm.promotion.end_date\\\" \\nmd-min-date=\\\"vm.promotion.start_date\\\" md-open-on-focus=\\\"true\\\"></md-datepicker></md-input-container></div></div><h3 \\nclass=\\\"text-bold\\\" translate=\\\"PROMOTION.CONDITIONS\\\"></h3><div class=\\\"content p-5\\\"><div flex layout=\\\"row\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"h-70\\\"><md-checkbox ng-model=\\\"vm.promotion.only_for_loyal_customers\\\" \\nclass=\\\"mb-0\\\">{{\\'PROMOTIONS.ONLY_FOR_LOYAL_CUSTOMERS\\' | translate}}</md-checkbox></div></div><div flex layout=\\\"row\\\"><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"h-70\\\"><md-checkbox ng-model=\\\"vm.promotion.min_max_quantity_enabled\\\" \\nclass=\\\"mb-0\\\">{{\\'PROMOTION.ENABLE_MIN_MAX_RESTRICTIONS\\' | translate}}</md-checkbox></div></div><div flex layout=\\\"row\\\" \\nng-if=\\\"vm.promotion.min_max_quantity_enabled\\\"><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"no-errors-spacer\\\"><label translate=\\\"PROMOTION.MIN_QUANTITY\\\"></label><input ng-model=\\\"vm.promotion.min_quantity\\\" \\nng-disabled=\\\"!vm.promotion.min_max_quantity_enabled\\\" type=\\\"number\\\" step=\\\"1\\\"></md-input-container><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-errors-spacer\\\"><label translate=\\\"PROMOTION.MAX_QUANTITY\\\"></label>\\n<input ng-model=\\\"vm.promotion.max_quantity\\\" type=\\\"number\\\" step=\\\"1\\\" \\nng-disabled=\\\"!vm.promotion.min_quantity || !vm.promotion.min_max_quantity_enabled\\\"></md-input-container></div><div \\nflex layout=\\\"row\\\"><md-input-container flex><label translate=\\\"PROMOTION.WAREHOUSES\\\"></label><md-select \\nmultiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.warehouses\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy:\\'name\\'\\\" value=\\\"{{warehouse.id}}\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container><md-input-container flex><label translate=\\\"PROMOTION.EXCLUDED_WAREHOUSES\\\"></label>\\n<md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.excluded_warehouses\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy:\\'name\\'\\\" value=\\\"{{warehouse.id}}\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container></div><div flex layout=\\\"row\\\"><md-input-container flex><label \\ntranslate=\\\"PROMOTION.CATEGORIES\\\"></label><md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.categories\\\"><md-option \\nng-repeat=\\\"category in vm.categories | orderBy:\\'name\\'\\\" value=\\\"{{category.id}}\\\">{{category.name}}</md-option>\\n</md-select></md-input-container><md-input-container flex><label translate=\\\"PROMOTION.EXCLUDED_CATEGORIES\\\"></label>\\n<md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.excluded_categories\\\"><md-option \\nng-repeat=\\\"category in vm.categories | orderBy:\\'name\\'\\\" value=\\\"{{category.id}}\\\">{{category.name}}</md-option>\\n</md-select></md-input-container></div><div flex layout=\\\"row\\\"><md-input-container flex><label \\ntranslate=\\\"PROMOTION.SUBCATEGORIES\\\"></label><md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.subcategories\\\">\\n<md-option ng-repeat=\\\"subcategory in vm.subcategories | orderBy:\\'name\\'\\\" value=\\\"{{subcategory.id}}\\\">{{subcategory.name}}\\n</md-option></md-select></md-input-container><md-input-container flex><label \\ntranslate=\\\"PROMOTION.EXCLUDED_SUBCATEGORIES\\\"></label><md-select multiple=\\\"{{true}}\\\" \\nng-model=\\\"vm.promotion.excluded_subcategories\\\"><md-option ng-repeat=\\\"subcategory in vm.subcategories | orderBy:\\'name\\'\\\" \\nvalue=\\\"{{subcategory.id}}\\\">{{subcategory.name}}</md-option></md-select></md-input-container></div><div flex \\nlayout=\\\"row\\\"><md-input-container flex><label translate=\\\"PROMOTION.BRANDS\\\"></label><md-select multiple=\\\"{{true}}\\\" \\nng-model=\\\"vm.promotion.brands\\\"><md-option ng-repeat=\\\"brand in vm.brands | orderBy:\\'name\\'\\\" value=\\\"{{brand.id}}\\\">\\n{{brand.name}}</md-option></md-select></md-input-container><md-input-container flex><label \\ntranslate=\\\"PROMOTION.EXCLUDED_BRANDS\\\"></label><md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.excluded_brands\\\">\\n<md-option ng-repeat=\\\"brand in vm.brands | orderBy:\\'name\\'\\\" value=\\\"{{brand.id}}\\\">{{brand.name}}</md-option></md-select>\\n</md-input-container></div><div flex layout=\\\"row\\\"><md-input-container flex><label translate=\\\"PROMOTION.SEASONS\\\">\\n</label><md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.seasons\\\"><md-option \\nng-repeat=\\\"warehouse in vm.seasons | orderBy:\\'name\\'\\\" value=\\\"{{warehouse.id}}\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container><md-input-container flex><label translate=\\\"PROMOTION.EXCLUDED_SEASONS\\\"></label>\\n<md-select multiple=\\\"{{true}}\\\" ng-model=\\\"vm.promotion.excluded_seasons\\\"><md-option \\nng-repeat=\\\"season in vm.seasons | orderBy:\\'name\\'\\\" value=\\\"{{season.id}}\\\">{{season.name}}</md-option></md-select>\\n</md-input-container></div></div><div class=\\\"content\\\" flex layout=\\\"row\\\"><div flex layout=\\\"column\\\" class=\\\"pr-20\\\"><h3 \\nclass=\\\"text-bold\\\" translate=\\\"PROMOTION.PRODUCTS\\\"></h3><div layout=\\\"row\\\" class=\\\"mb-20\\\"><nd-product-autocomplete \\nhas-permission=\\\"sale.promotions.update\\\" callback=\\\"vm.searchProductCallback(product, false)\\\" \\nplaceholder=\\\"\\'TRANSFER.ADD_PRODUCT\\'\\\" class=\\\"w-300 mr-10\\\"></nd-product-autocomplete><md-button class=\\\"md-icon-button\\\" \\nhas-permission=\\\"sale.promotions.update\\\" ng-click=\\\"vm.openProductSearchDialog($event, false)\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>{{\\'TRANSFER.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button>\\n</div><table class=\\\"simple\\\" flex=\\\"100\\\"><thead><tr><th translate=\\\"PRODUCT.IMAGE\\\">Image</th><th translate=\\\"PRODUCT.CODE\\\">\\nCode</th><th translate=\\\"PRODUCT.NAME\\\">Name</th><th class=\\\"\\\"></th></tr></thead><tbody><tr \\nng-repeat=\\\"product in vm.promotion.product_instances | orderBy:\\'code\\'\\\"><td class=\\\"p-0\\\"><img \\nng-if=\\\"product.cover_thumbnail\\\" class=\\\"thumbnail-40 mv-5\\\" src=\\\"{{product.cover_thumbnail}}\\\"><md-icon \\nng-if=\\\"!product.cover_thumbnail\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s40 pl-5 grey-300-fg\\\"></md-icon>\\n</td><td class=\\\"p-0\\\"><a ui-sref=\\\"app.inventory.products.product.overview({id:product.id})\\\">{{product.code}}</a></td><td\\n class=\\\"p-0\\\">{{product.name}}</td><td class=\\\"p-0 text-right\\\"><md-button ng-click=\\\"vm.removeProduct(product, false)\\\" \\nclass=\\\"md-icon-button md-warn\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button></td></tr><tr \\nng-if=\\\"vm.promotion.product_instances.length == 0\\\"><td class=\\\"text-center\\\" colspan=\\\"4\\\">-</td></tr></tbody></table>\\n</div><div flex layout=\\\"column\\\"><h3 class=\\\"text-bold\\\" translate=\\\"PROMOTION.EXCLUDED_PRODUCTS\\\"></h3><div layout=\\\"row\\\" \\nclass=\\\"mb-20\\\"><nd-product-autocomplete has-permission=\\\"sale.promotions.update\\\" \\ncallback=\\\"vm.searchProductCallback(product, true)\\\" placeholder=\\\"\\'TRANSFER.ADD_PRODUCT\\'\\\" class=\\\"w-300 mr-10\\\">\\n</nd-product-autocomplete><md-button class=\\\"md-icon-button\\\" has-permission=\\\"sale.promotions.update\\\" \\nng-click=\\\"vm.openProductSearchDialog($event, true)\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>\\n{{\\'TRANSFER.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button></div><table class=\\\"simple\\\" flex=\\\"100\\\"><thead><tr>\\n<th translate=\\\"PRODUCT.IMAGE\\\">Image</th><th translate=\\\"PRODUCT.CODE\\\">Code</th><th translate=\\\"PRODUCT.NAME\\\">Name</th><th\\n class=\\\"\\\"></th></tr></thead><tbody><tr ng-repeat=\\\"product in vm.promotion.excluded_product_instances | orderBy:\\'code\\'\\\">\\n<td class=\\\"p-0\\\"><img ng-if=\\\"product.cover_thumbnail\\\" class=\\\"thumbnail-40 mv-5\\\" src=\\\"{{product.cover_thumbnail}}\\\">\\n<md-icon ng-if=\\\"!product.cover_thumbnail\\\" md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s40 pl-5 grey-300-fg\\\">\\n</md-icon></td><td class=\\\"p-0\\\"><a ui-sref=\\\"app.inventory.products.product.overview({id:product.id})\\\">{{product.code}}\\n</a></td><td class=\\\"p-0\\\">{{product.name}}</td><td class=\\\"p-0\\\"><md-button ng-click=\\\"vm.removeProduct(product, true)\\\" \\nclass=\\\"md-icon-button md-warn\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button></td></tr><tr \\nng-if=\\\"vm.promotion.excluded_product_instances.length == 0\\\"><td class=\\\"text-center\\\" colspan=\\\"4\\\">-</td></tr></tbody>\\n</table></div></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/promotions/promotions.html\",\"<div id=\\\"sale-promotions\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.PROMOTIONS\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"sale.promotions.create\\\" ui-sref=\\\"app.sale.promotions.promotion({id:\\'add\\'})\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'PROMOTIONS.NEW_PROMOTION\\' | translate}}</div></md-button></div></div><div class=\\\"content-card\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float class=\\\"nd-search-input\\\">\\n<md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"promotion-search\\\" ng-model=\\\"vm.search\\\" \\ntype=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-content></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/register-closure/register-closure.html\",\"<div class=\\\"page-layout simple tabbed\\\" id=\\\"register-closure\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button aria-label=\\\"Go to register closures\\\" \\nclass=\\\"goto-products-button md-icon-button\\\" ng-click=\\\"vm.gotoRegisterClosures()\\\" translate \\ntranslate-attr-aria-label=\\\"REGISTER_CLOSURE.GO_TO_REGISTER_CLOSURES\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><span class=\\\"h2\\\">{{\\'REGISTER_CLOSURE.REGISTER_CLOSURE_DETAILS\\' | translate}}</span><nd-new-feature-badge \\nclass=\\\"ml-8\\\" class=\\\"new-feature-width\\\" id=\\\"CHANGES_ON_REGISTER_CLOSURE\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge>\\n<span flex></span><md-menu md-position-mode=\\\"target-right target\\\"><md-button class=\\\"stroked md-primary\\\" \\nng-click=\\\"$mdOpenMenu($event)\\\">{{\\\"GENERAL.ACTIONS\\\" | translate}}</md-button><md-menu-content width=\\\"3\\\"><md-menu-item>\\n<md-button ng-click=\\\"vm.openCashDrawer()\\\"><md-icon md-font-icon=\\\"icon-eject\\\"></md-icon>\\n{{\\'SALES.OPEN_CASH_DRAWER\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.printSoldProducts()\\\" ng-disabled=\\\"vm.registerActivity.pos_orders.length == 0\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant\\\"></md-icon>{{\\'REGISTER_CLOSURE.PRINT_REPOSITION\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item><md-button ng-click=\\\"vm.printSummary()\\\" ng-disabled=\\\"!vm.registerActivity.is_closed\\\">\\n<md-icon md-font-icon=\\\"icon-receipt\\\"></md-icon>{{\\'REGISTER_CLOSURE.PRINT_SUMMARY\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item has-permission=\\\"sale.register_closure.close_register\\\"><md-button \\nng-click=\\\"vm.createInvoice()\\\" ng-disabled=\\\"!(vm.registerActivity.is_closed && !vm.registerActivity.invoice)\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-document-outline.0472566f.svg\\\"></md-icon>\\n{{\\'INVOICE.CREATE_INVOICE\\' | translate}}</md-button></md-menu-item><md-menu-item class=\\\"border-top\\\" \\nhas-permission=\\\"sale.register_closure.close_register\\\" ng-if=\\\"!vm.registerActivity.is_closed\\\"><md-button \\nng-click=\\\"vm.closeRegister()\\\"><md-icon md-font-icon=\\\"icon-lock-outline\\\"></md-icon>\\n{{\\'SALES.CLOSE_REGISTER\\' | translate}}</md-button></md-menu-item></md-menu-content></md-menu></div><div \\nclass=\\\"content pr-10 pl-10\\\"><md-card class=\\\"mb-20 mt-0\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"REGISTER_CLOSURE.MAIN_INFORMATION\\\"></span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"no-padding\\\"><div class=\\\"content\\\"><div flex layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><div flex layout=\\\"column\\\"><div \\nclass=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><label class=\\\"secondary-text\\\" flex=\\\"40\\\" \\ntranslate=\\\"REGISTERS.REGISTER\\\">Register</label><span class=\\\"ml-8\\\" flex>{{vm.registerActivity.register.code}}</span>\\n</div><div class=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><label class=\\\"secondary-text\\\" \\nflex=\\\"40\\\" translate=\\\"REGISTERS.OPENED_AT\\\">Opened at</label><span class=\\\"ml-8\\\" flex>\\n{{vm.registerActivity.opened_at | date:\\'medium\\'}}</span></div><div class=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.registerActivity.is_closed\\\"><label class=\\\"secondary-text\\\" flex=\\\"40\\\" \\ntranslate=\\\"REGISTERS.CLOSED_AT\\\">Closed at</label><span class=\\\"ml-8\\\" flex>\\n{{vm.registerActivity.closed_at | date:\\'medium\\'}}</span></div><div class=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.registerActivity.is_closed\\\"><label class=\\\"secondary-text\\\" flex=\\\"40\\\" \\ntranslate=\\\"REGISTER_CLOSURE.UNBALANCE\\\">Unbalance</label><span class=\\\"ml-8\\\" flex \\nng-class=\\\"{\\'red-fg\\': vm.registerActivity.unbalance < 0}\\\">\\n{{vm.registerActivity.unbalance | price}} {{vm.currencyCharacter}}</span></div><div class=\\\"pl-5 pr-5 bt h-50\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.registerActivity.invoice\\\"><label class=\\\"secondary-text ml-8\\\" \\nflex=\\\"40\\\" translate=\\\"REGISTERS.INVOICE\\\">Invoice</label><span layout=\\\"column\\\"><a \\nui-sref=\\\"app.accounting.invoices.invoice({id:vm.registerActivity.invoice.id})\\\"><span \\nng-if=\\\"vm.registerActivity.invoice.autocode\\\">{{vm.registerActivity.invoice.autocode}}</span> <span \\nng-if=\\\"!vm.registerActivity.invoice.autocode\\\" translate=\\\"INVOICE.NO_SERIAL_NUMBER\\\"></span> </a><small \\nclass=\\\"secondary-text\\\" ng-if=\\\"!vm.registerActivity.invoice.autocode\\\" \\ntranslate=\\\"REGISTERS.NO_INVOICE_SERIAL_NUMBER_MSG\\\"></small></span></div></div><div flex layout=\\\"column\\\"><div \\nclass=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><label class=\\\"secondary-text\\\" flex=\\\"40\\\" \\ntranslate=\\\"REGISTER_CLOSURE.WAREHOUSE\\\">Warehouse</label><span class=\\\"ml-8\\\" flex>\\n{{vm.registerActivity.register.warehouse.name}}</span></div><div class=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><label class=\\\"secondary-text\\\" flex=\\\"40\\\" translate=\\\"REGISTER_CLOSURE.OPENED_BY\\\">Opened by\\n</label><span class=\\\"ml-8\\\" flex>{{vm.registerActivity.opened_by | personname}}</span></div><div \\nclass=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.registerActivity.is_closed\\\"><label \\nclass=\\\"secondary-text\\\" flex=\\\"40\\\" translate=\\\"REGISTER_CLOSURE.CLOSED_BY\\\">Closed by</label><span class=\\\"ml-8\\\" flex>\\n{{vm.registerActivity.closed_by | personname}}</span></div><div class=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.registerActivity.is_closed\\\"><label class=\\\"secondary-text\\\" flex=\\\"40\\\" \\ntranslate=\\\"REGISTER_CLOSURE.NOTES\\\">Notes</label><em class=\\\"ml-8\\\" flex>{{vm.registerActivity.closure_notes}}</em></div>\\n<div class=\\\"pl-15 pr-15 bt h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.registerActivity.invoice\\\">\\n</div></div></div></div></md-card-content></md-card><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"REGISTER_CLOSURE.REVENUE_BY_PAYMENT_METHOD\\\">\\n</span></div></md-card-title-text></md-card-title><md-card-content class=\\\"no-padding border-top\\\"><div class=\\\"content\\\" \\ndata-test-id=\\\"sale-table-register-payments\\\" \\nng-include=\\\"\\'app/main/apps/sale/views/register-closure/subviews/payment-methods-table.html\\'\\\"></div></md-card-content>\\n</md-card><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"GIFT_CARDS.VOUCHERS_AND_GIFT_CARDS\\\"></span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"no-padding border-top\\\"><div class=\\\"content\\\" data-test-id=\\\"sale-table-register-payments\\\"><table class=\\\"simple\\\" \\nflex ms-responsive-table><tbody class=\\\"full-width\\\" \\nng-include=\\\"\\'app/main/apps/sale/views/register-closure/subviews/gift-cards-tbody.html\\'\\\"></tbody></table></div>\\n</md-card-content></md-card><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" flex translate=\\\"REGISTER_CLOSURE.TRANSACTIONS\\\"></span></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"no-padding border-top\\\"><table \\nclass=\\\"dataTable row-border hover\\\" datatable ms-responsive-table dt-columns=\\\"vm.dtColumnsViewPO\\\" \\ndt-instance=\\\"vm.dtInstanceViewPO\\\" dt-options=\\\"vm.dtOptionsViewPO\\\"></table></md-card-content></md-card><md-card \\nclass=\\\"mb-20\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3 mr-10\\\" \\ntranslate=\\\"REGISTER_CLOSURE.PAYMENTS\\\"></span><md-input-container class=\\\"nd-search-input w-200\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"payments-search\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.search\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\">\\n</md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"content no-padding border-top fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" \\ndatatable dt-columns=\\\"vm.dtColumnsViewPM\\\" dt-instance=\\\"vm.dtInstanceViewPM\\\" dt-options=\\\"vm.dtOptionsViewPM\\\"></table>\\n</md-card-content></md-card><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"REGISTER_CLOSURE.CASH_MOVEMENTS\\\"></span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"no-padding border-top\\\"><div class=\\\"content\\\" data-test-id=\\\"sale-table-register-payments\\\" \\nng-include=\\\"\\'app/main/apps/sale/views/register-closure/subviews/cash-movements-table.html\\'\\\"></div></md-card-content>\\n</md-card></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/register-closures/register-closures.html\",\"<div id=\\\"sale-register-closures\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" \\nlayout=\\\"column\\\" flex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" \\ntranslate=\\\"REGISTER_CLOSURES.REGISTER_CLOSURES\\\"></span><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex></div></div>\\n<div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper \\nng-include=\\\"\\'app/main/apps/sale/views/register-closures/sidenav/main-sidenav.html\\'\\\"></md-sidenav><div layout=\\\"column\\\" \\nflex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><md-button class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-xs hide-sm hide-md ng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\">\\n<md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-button class=\\\"mr-10 w-40\\\" \\nng-click=\\\"vm.filterDates()\\\"><md-icon md-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip>\\n{{\\'INVOICES.FILTER_DATES\\' | translate}}</md-tooltip></md-button><span ng-if=\\\"vm.dateRange.dateStart\\\">\\n{{vm.dateRange.dateStart | date:\\'dd/MM/yyyy\\'}} - {{vm.dateRange.dateEnd | date:\\'dd/MM/yyyy\\'}}</span> <span flex></span>\\n<md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.exportTableToCSV(\\'#registersActivityTable\\')\\\"><md-icon \\nmd-font-icon=\\\"icon-download\\\"></md-icon></md-button></div><md-content class=\\\"content no-padding fullpage-datatable\\\" \\nflex ms-scroll><table id=\\\"registersActivityTable\\\" data-test-id=\\\"sale-table-register-closed\\\" \\nclass=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\"></table></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/registers/registers.html\",\"<div id=\\\"sale-registers\\\" class=\\\"page-layout simple\\\"><div \\nclass=\\\"header sa-retail-gradient md-whiteframe-1dp h-64 ph-16 pv-0\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex class=\\\"md-padding white-fg\\\"><md-icon class=\\\"s24 mr-10\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-register.25ab8937.svg\\\"></md-icon><div class=\\\"h2\\\" \\ntranslate=\\\"REGISTERS.REGISTERS\\\" flex>Registers</div></div><span flex></span><md-button class=\\\"md-raised\\\" \\nng-click=\\\"vm.newRegister()\\\" has-permission=\\\"sale.registers.create\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span>{{\\'REGISTERS.NEW_REGISTER\\' | translate}}</span></div>\\n</md-button></div><div class=\\\"center\\\" flex ms-scroll><div class=\\\"content\\\"><div class=\\\"main scrollable md-padding\\\" \\nms-scroll><md-content class=\\\"transparent-bg\\\"><div layout=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nflex-gt-lg=\\\"33\\\" ng-repeat=\\\"register in vm.registers | orderBy: \\'warehouse\\' track by $index\\\"><md-card \\nmd-theme=\\\"default\\\" flex md-whiteframe=\\\"2\\\"><div class=\\\"pt-16 pl-16 h-50\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon class=\\\"mr-10\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/cash-register.25ab8937.svg\\\"></md-icon><span \\nclass=\\\"md-subhead\\\">{{register.code}}</span> <span flex></span><md-menu md-position-mode=\\\"target-right target\\\" \\nhas-permission=\\\"sale.registers.delete\\\"><md-button class=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu($event)\\\"><md-icon \\nmd-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content width=\\\"3\\\"><md-menu-item \\nhas-permission=\\\"sale.registers.delete\\\"><md-button ng-click=\\\"vm.deleteRegister($event, register)\\\" \\ntranslate=\\\"GENERAL.DELETE\\\"></md-button></md-menu-item></md-menu-content></md-menu></div><div class=\\\"md-padding h-140\\\" \\nlayout=\\\"column\\\" flex><p class=\\\"mv-5\\\"><span class=\\\"text-bold mr-10\\\" translate=\\\"GENERAL.CODE\\\">Code </span>\\n{{register.code}}</p><p class=\\\"mv-5\\\"><span class=\\\"text-bold\\\" translate=\\\"REGISTERS.STATUS\\\">Status</span>\\n<md-progress-circular ng-show=\\\"register.openingOrClosing\\\" class=\\\"md-hue-2 ml-8\\\" md-diameter=\\\"20px\\\">\\n</md-progress-circular><span ng-if=\\\"!register.is_closed && !register.openingOrClosing\\\" \\ntranslate=\\\"REGISTERS.STATUS_OPEN\\\" class=\\\"white-fg green-bg text-boxed\\\">Open </span><span \\nng-if=\\\"!register.is_closed && !register.openingOrClosing\\\" translate=\\\"REGISTERS.OPEN_AT_BY\\\" class=\\\"secondary-text\\\" \\ntranslate-values=\\\"{name: vm.getUserName(register), date: vm.getDate(register)}\\\"></span> <span \\nng-if=\\\"register.is_closed && !register.openingOrClosing\\\" translate=\\\"REGISTERS.STATUS_CLOSE\\\" class=\\\"text-boxed\\\">Close\\n</span></p><p class=\\\"mv-5\\\"><span class=\\\"text-bold mr-10\\\" translate=\\\"WAREHOUSE.WAREHOUSE\\\">Warehouse </span><span>\\n{{register.warehouse.name}}</span></p><p class=\\\"mv-5\\\" ng-if=\\\"!register.is_closed\\\"><span class=\\\"text-bold mr-10\\\" \\ntranslate=\\\"REGISTERS.SALES_SINCE_OPENING\\\">Sales since opening </span><span>{{register.current_activity.total_sales}}\\n</span></p></div><div class=\\\"p-5 border-top md-background-bg md-hue-2\\\" \\nhas-permission=\\\"sale.registers.open_register,sale.registers.close_register\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nflex><md-button ng-if=\\\"register.is_closed\\\" ng-click=\\\"vm.openRegister(register)\\\" \\nhas-permission=\\\"sale.registers.open_register\\\" translate=\\\"REGISTERS.OPEN_REGISTER\\\" class=\\\"md-raised\\\">Open</md-button>\\n<md-button ng-if=\\\"!register.is_closed\\\" has-permission=\\\"sale.registers.close_register\\\" \\nng-click=\\\"vm.closeRegister(register)\\\" translate=\\\"REGISTERS.CLOSE_REGISTER\\\" class=\\\"md-raised\\\">Close</md-button></div>\\n</md-card></div></div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/sales-log.html\",\"<div id=\\\"sale-sales-log\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"SALES_LOG.SALES_LOG\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" ng-disabled=\\\"vm.creating\\\" \\nhas-permission=\\\"sale.sales_log.create\\\" ng-click=\\\"vm.showNewOrderDialog()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'ORDER.NEW_SALE\\' | translate}}\\n</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper \\nng-include=\\\"\\'app/main/apps/sale/views/sales-log/sidenavs/main/main-sidenav.html\\'\\\"></md-sidenav><div layout=\\\"column\\\" \\nflex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><md-button class=\\\"md-icon-button sidenav-toggle\\\" \\nhide-xs hide-sm hide-md ng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.getFilterNotifications()\\\"><span class=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"sales-search\\\" \\nng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.reloadPosOrders()\\\" ng-model-options=\\\"{debounce:200}\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-input-container><span flex></span><md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.currentView == vm.POS_ORDERS_VIEW\\\" \\nng-click=\\\"vm.createInvoices($event)\\\" ng-disabled=\\\"vm.selected.length === 0 || vm.generatingInvoices\\\"><md-tooltip \\nmd-direction=\\\"top\\\">{{\\'SALES_LOG.GENERATE_INVOICE\\' | translate}}</md-tooltip><md-icon ng-if=\\\"!vm.generatingInvoices\\\" \\nmd-font-icon=\\\"icon-file-document-box\\\"></md-icon><md-progress-circular md-diameter=\\\"20px\\\" ng-if=\\\"vm.generatingInvoices\\\">\\n</md-progress-circular></md-button><md-button class=\\\"md-link md-primary\\\" \\nng-click=\\\"vm.setCurrentView(vm.POS_ORDERS_VIEW)\\\" ng-disabled=\\\"vm.currentView==vm.POS_ORDERS_VIEW\\\" \\ntranslate=\\\"SALES_LOG.VIEW_BY_POS_ORDER\\\"></md-button><md-button class=\\\"md-link md-primary\\\" \\nng-click=\\\"vm.setCurrentView(vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW)\\\" \\nng-disabled=\\\"vm.currentView==vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW\\\" \\ntranslate=\\\"SALES_LOG.VIEW_BY_POS_ORDER_PRODUCT_VARIANTS\\\"></md-button></div><nd-barcode-listener \\npos-order-callback=\\\"vm.barcodeListenerCallback(barcode)\\\" ng-if=\\\"!vm.dialogOpened\\\"></nd-barcode-listener><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-pos-orders-list \\nng-if=\\\"vm.currentView == vm.POS_ORDERS_VIEW\\\" status=\\\"vm.status\\\" selected=\\\"vm.selected\\\"></nd-pos-orders-list>\\n<nd-pos-order-product-variants-list ng-if=\\\"vm.currentView == vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW\\\" status=\\\"vm.status\\\" \\nselected=\\\"vm.selected\\\"></nd-pos-order-product-variants-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/sell.html\",\"<div class=\\\"page-layout simple tabbed\\\" id=\\\"sale-sale\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"md-padding pb-8\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"selected-project text-truncate\\\"><em \\nclass=\\\"secondary-text\\\" ng-if=\\\"!vm.selectedRegister\\\">{{\\\"SALES.NO_REGISTER_SELECTED\\\" | translate}}</em><div \\nlayout=\\\"column\\\"><span class=\\\"register-name\\\" ng-if=\\\"vm.selectedRegister\\\">{{vm.selectedRegister.code}}</span> <small \\nclass=\\\"secondary-text warehouse-name\\\" ng-if=\\\"vm.selectedRegister\\\">{{vm.selectedRegister.warehouse.name}}</small></div>\\n</div><md-menu-bar class=\\\"no-padding\\\"><md-menu><md-button aria-label=\\\"Select project\\\" \\nclass=\\\"md-icon-button project-selector\\\" md-menu-align-target md-menu-origin ng-click=\\\"$mdMenu.open()\\\"><md-icon \\nmd-font-icon=\\\"icon-dots-horizontal\\\"></md-icon></md-button><md-menu-content width=\\\"4\\\"><md-menu-item class=\\\"md-indent\\\" \\nhas-permission=\\\"sale.sell.add_cash\\\"><md-icon md-font-icon=\\\"icon-inbox\\\"></md-icon><md-button \\nng-click=\\\"vm.createPositiveCashMovement()\\\" ng-disabled=\\\"vm.selectedRegister.is_closed\\\" \\ntranslate=\\\"CASH_MANAGEMENT.ADD_CASH\\\">Add Cash</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\" \\nhas-permission=\\\"sale.sell.remove_cash\\\"><md-icon md-font-icon=\\\"icon-outbox\\\"></md-icon><md-button \\nng-click=\\\"vm.createNegativeCashMovement()\\\" ng-disabled=\\\"vm.selectedRegister.is_closed\\\" \\ntranslate=\\\"CASH_MANAGEMENT.REMOVE_CASH\\\">Remove Cash</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\" \\nhas-permission=\\\"app.sale.register_closures\\\"><md-icon md-font-icon=\\\"icon-format-list-bulleted\\\"></md-icon><md-button \\nng-click=\\\"vm.goToRegisterActivity()\\\" ng-disabled=\\\"!vm.selectedRegister\\\" translate=\\\"SALES.GO_TO_REGISTER_ACTIVITY\\\">\\nGo to register activity</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\" \\nhas-permission=\\\"sale.sell.change_register\\\"><md-icon md-font-icon=\\\"icon-swap-horizontal\\\"></md-icon><md-menu><md-button \\nid=\\\"test-changereg-button\\\" ng-click=\\\"$mdMenu.open()\\\">{{\\'SALES.CHANGE_REGISTER\\' | translate}}</md-button>\\n<md-menu-content style=\\\"max-height: 500px\\\" width=\\\"4\\\"><md-menu-item ng-repeat=\\\"register in vm.registers\\\" \\nstyle=\\\"min-height: 40px\\\"><md-button ng-click=\\\"vm.setSelectedRegister(register)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-radiobox-marked\\\" ng-if=\\\"register.id == vm.selectedRegister.id\\\">\\n</md-icon><md-icon md-font-icon=\\\"icon-radiobox-blank\\\" ng-if=\\\"register.id != vm.selectedRegister.id\\\"></md-icon><span \\nclass=\\\"mr-5\\\">{{::register.code}}</span> <small class=\\\"secondary-text\\\">({{::register.warehouse.name}})</small> <span \\nflex></span> <span class=\\\"text-boxed green-bg white-fg\\\" ng-if=\\\"!register.is_closed\\\" style=\\\"line-height: normal\\\" \\ntranslate=\\\"REGISTERS.STATUS_OPEN\\\">Open</span> <span class=\\\"text-boxed\\\" ng-if=\\\"register.is_closed\\\" \\nstyle=\\\"line-height: normal\\\" translate=\\\"REGISTERS.STATUS_CLOSE\\\">Close</span></div></md-button></md-menu-item>\\n</md-menu-content></md-menu></md-menu-item><md-divider></md-divider><md-menu-item class=\\\"md-indent\\\"><md-icon \\nmd-font-icon=\\\"icon-eject\\\"></md-icon><md-button ng-click=\\\"vm.openCashDrawer()\\\" ng-disabled=\\\"!vm.selectedRegister\\\" \\ntranslate=\\\"SALES.OPEN_CASH_DRAWER\\\">Open cash drawer</md-button></md-menu-item><md-divider ng-if=\\\"vm.selectedRegister\\\">\\n</md-divider><md-menu-item class=\\\"md-indent\\\" has-permission=\\\"sale.sell.close_register\\\" \\nng-if=\\\"vm.selectedRegister && !vm.selectedRegister.is_closed\\\"><md-icon md-font-icon=\\\"icon-lock-outline\\\"></md-icon>\\n<md-button id=\\\"test-closereg-button\\\" ng-click=\\\"vm.closeRegister()\\\" translate=\\\"SALES.CLOSE_REGISTER\\\">Close register\\n</md-button></md-menu-item><md-menu-item class=\\\"md-indent\\\" has-permission=\\\"sale.sell.open_register\\\" \\nng-if=\\\"vm.selectedRegister && vm.selectedRegister.is_closed\\\"><md-icon class=\\\"green-fg\\\" \\nmd-font-icon=\\\"icon-lock-outline-unlocked\\\"></md-icon><md-button id=\\\"test-openreg-button\\\" ng-click=\\\"vm.openRegister()\\\" \\ntranslate=\\\"SALES.OPEN_REGISTER\\\">Open register</md-button></md-menu-item></md-menu-content></md-menu></md-menu-bar><div \\nclass=\\\"people-counter-widget\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.selectedRegister && vm.peopleCounter\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/motion-sensor.85a3c03f.svg\\\" class=\\\"mr-5\\\"></md-icon>\\n<div class=\\\"counter text-boxed\\\">{{vm.peopleCounter.total_in}}<md-tooltip>{{\\'SALES.PEOPLE_COUNTER_COUNT\\' | translate }}\\n</md-tooltip></div><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.peopleCounterMove(1)\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.peopleCounterMove(-1)\\\">\\n<md-icon md-font-icon=\\\"icon-minus\\\"></md-icon></md-button></div><span flex></span><md-button \\naria-label=\\\"Full Size Window\\\" class=\\\"md-icon-button\\\" hide-sm hide-xs ng-click=\\\"vm.toggleWindowSize()\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-expand\\\" ng-show=\\\"!vm.isFullsize\\\"></md-icon><md-icon md-font-icon=\\\"icon-arrow-collapse\\\" \\nng-show=\\\"vm.isFullsize\\\"></md-icon></md-button><md-button aria-label=\\\"Open Display\\\" class=\\\"md-icon-button\\\" hide-sm \\nhide-xs ng-click=\\\"vm.openDisplay()\\\"><md-icon md-font-icon=\\\"icon-monitor-multiple\\\"></md-icon></md-button><md-button \\nclass=\\\"md-primary stroked\\\" hide-sm hide-xs ng-click=\\\"vm.createNewSale()\\\" ng-disabled=\\\"vm.selectedRegister.is_closed\\\" \\nng-show=\\\"vm.selectedRegister\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-plus\\\"></md-icon><span flex translate=\\\"SALES.NEW_SALE\\\"></span></div></md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.saveButtonClicked()\\\" ng-disabled=\\\"vm.saveButtonDisabled()\\\" \\ntranslate=\\\"GENERAL.SAVE\\\"></md-button></div></div></div><div class=\\\"content\\\" flex layout=\\\"column\\\" \\nlayout-align=\\\"start stretch\\\"><nd-barcode-listener \\nbarcode-listener-input-delay=\\\"vm.getRegisterConfigurationProperty(\\'barcode_listener_input_delay\\', null)\\\" \\ncallback=\\\"vm.barcodeListenerCallback(barcode)\\\" devolution_card_callback=\\\"vm.devolutionCardCallback(barcode)\\\" \\npos_order_callback=\\\"vm.posOrderCallback(barcode)\\\"></nd-barcode-listener><md-tabs flex layout=\\\"column\\\" layout-fill \\nmd-autoselect md-border-bottom ng-class=\\\"{\\'unique-tab\\': vm.sales.length==1}\\\" ng-show=\\\"vm.selectedRegister\\\"><md-tab \\nflex layout=\\\"column\\\" layout-align=\\\"start stretch\\\" md-on-select=\\\"vm.currentTab = $index\\\" ng-repeat=\\\"sale in vm.sales\\\">\\n<md-tab-label><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"label-text\\\" flex>{{sale.title}}</span>\\n<md-button aria-label=\\\"Delete\\\" class=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.closeCurrentSale($event)\\\" \\nng-disabled=\\\"vm.currentTab == 0 && !vm.sales[vm.currentTab].id || vm.sales[vm.currentTab].successfullyPaid\\\" \\nng-if=\\\"!vm.selectedRegister.is_closed\\\"><md-tooltip>{{\\'GENERAL.CLOSE\\' | translate}}</md-tooltip><md-icon class=\\\"s18\\\" \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button><md-button aria-label=\\\"Delete\\\" class=\\\"md-icon-button no-margin\\\" \\nhas-permission=\\\"sale.sales_log.delete\\\" ng-click=\\\"vm.deleteCurrentSale($event)\\\" \\nng-if=\\\"!vm.selectedRegister.is_closed && sale.id\\\"><md-tooltip>{{\\'GENERAL.DELETE\\' | translate}}</md-tooltip><md-icon \\nclass=\\\"s18\\\" md-font-icon=\\\"icon-trash\\\"></md-icon></md-button></div></md-tab-label><md-tab-body><div class=\\\"m-16\\\" flex \\nng-if=\\\"vm.selectedRegister.is_closed\\\"><div class=\\\"md-padding\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><img \\nclass=\\\"w-250 mt-24 mb-24\\\" ng-src=\\\"/assets/images/registers/register-{{vm.getLanguage()}}.svg\\\"></div><div \\nclass=\\\"md-padding\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" style=\\\"font-size: 16px; text-align: center\\\" \\ntranslate=\\\"CASH_MANAGEMENT.REGISTER_CLOSED_MSG\\\"></div><div class=\\\"md-padding\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"sale.sales_log.create\\\" \\nng-click=\\\"vm.openRegister()\\\" ng-disabled=\\\"vm.creating\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n{{\\'SALES.OPEN_REGISTER\\' | translate}}</div></md-button></div></div><div class=\\\"sell-view-compac-layout pt-0\\\" flex \\nlayout=\\\"column\\\" layout-fill layout-gt-sm=\\\"row\\\" layout-padding ng-if=\\\"!vm.selectedRegister.is_closed\\\"><div flex \\nlayout=\\\"column\\\" layout-align=\\\"start stretch\\\"><div class=\\\"mb-8\\\" layout=\\\"column\\\" layout-align=\\\"start start\\\" \\nlayout-gt-sm=\\\"row\\\" ng-if=\\\"!sale.successfullyPaid\\\"><div class=\\\"fullwidth pr-8\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\" \\nflex-gt-sm=\\\"40\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"sale.currentView == vm.SELL_VIEW\\\"><md-autocomplete \\nautofocus class=\\\"autocomplete\\\" flex md-delay=\\\"vm.AUTOCOMPLETE_MS_TIMEOUT\\\" md-item-text=\\\"product.name\\\" \\nmd-items=\\\"product in vm.productsQuerySearch(sale)\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" \\nmd-min-length=\\\"vm.MIN_QUERY_LENGTH\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"sale.productAutocomplete.productSearchText\\\" \\nmd-selected-item=\\\"sale.productAutocomplete.selectedItem\\\" \\nmd-selected-item-change=\\\"vm.selectedProductChange(sale, product)\\\" ng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" \\nng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" placeholder=\\\"{{\\'SALES.SEARCH_PRODUCT\\' | translate}}\\\">\\n<md-item-template><div layout=\\\"row\\\" layout-align=\\\"start center\\\" style=\\\"padding-top: 4px !important\\\"><img \\nclass=\\\"autocomplete-thumbnails h-40 w-40 thumbnail-40 mr-10\\\" ng-class=\\\"{\\'default-icon\\': !product.cover_thumbnail}\\\" \\nsrc=\\\"{{vm.getCover(product)}}\\\"><div class=\\\"text-left pt-3\\\" layout=\\\"column\\\" layout-align=\\\"start center\\\" \\nstyle=\\\"line-height: 18px\\\"><div class=\\\"text-left full-width\\\" md-highlight-flags=\\\"^i\\\" \\nmd-highlight-text=\\\"sale.productAutocomplete.productSearchText\\\">{{product.name}}</div><div class=\\\"text-left full-width\\\">\\n<strong>{{product.code}} | {{product.price_incl_tax | price}}{{::vm.currencyCharacter}}</strong></div></div></div>\\n</md-item-template><md-not-found><span ng-show=\\\"sale.in_stock\\\" translate=\\\"SALES.NO_PRODUCT_FOUND_STOCK\\\" \\ntranslate-values=\\\"{name: sale.productAutocomplete.productSearchText}\\\">\\nNo products matching \\\"{{sale.productAutocomplete.productSearchText}}\\\" were found in stock.</span> <span \\nng-show=\\\"!sale.in_stock\\\" translate=\\\"SALES.NO_PRODUCT_FOUND\\\" \\ntranslate-values=\\\"{name: sale.productAutocomplete.productSearchText}\\\">\\nNo products matching \\\"{{sale.productAutocomplete.productSearchText}}\\\" were found.</span></md-not-found>\\n</md-autocomplete></div><div class=\\\"fullwidth\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\" flex-gt-sm=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-autocomplete class=\\\"customer-autocomplete autocomplete\\\" flex \\nmd-delay=\\\"vm.AUTOCOMPLETE_MS_TIMEOUT\\\" md-item-text=\\\"vm.getItemCustomerText(sale.customerAutocomplete.selectedItem)\\\" \\nmd-items=\\\"customer in vm.customersQuerySearch(sale)\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" \\nmd-min-length=\\\"vm.MIN_QUERY_LENGTH\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"sale.customerAutocomplete.customerSearchText\\\" \\nmd-selected-item=\\\"sale.customerAutocomplete.selectedItem\\\" \\nmd-selected-item-change=\\\"vm.selectedCustomerChange(sale, customer)\\\" ng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" \\nng-disabled=\\\"sale.isDevolution\\\" ng-focus=\\\"vm.customerAutocompleteFocused(sale)\\\" \\nplaceholder=\\\"{{\\'SALES.SEARCH_CUSTOMER\\' | translate}}\\\"><md-item-template><md-icon md-font-icon=\\\"icon-account-outline\\\">\\n</md-icon><span md-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"sale.customerAutocomplete.customerSearchText\\\">\\n{{ vm.getCustomerText(customer, sale.customerAutocomplete.customerSearchText)}}</span></md-item-template><md-not-found>\\n<span translate=\\\"SALES.NO_CUSTOMER_FOUND\\\" translate-values=\\\"{name: sale.customerAutocomplete.customerSearchText}\\\">\\nNo products matching \\\"{{sale.customerAutocomplete.customerSearchText}}\\\" were found.</span> <a \\nng-click=\\\"vm.createCustomer(sale.customerAutocomplete)\\\" translate=\\\"SALES.CLICL_TO_CREATE\\\">Click here to create it</a>\\n</md-not-found></md-autocomplete><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.createCustomer(sale.customerAutocomplete, sale)\\\" ng-disabled=\\\"vm.creatingCustomer\\\" \\nng-if=\\\"!vm.hasCustomerSelected(sale)\\\"><md-tooltip>{{\\'CUSTOMERS.NEW_CUSTOMER\\' | translate}}</md-tooltip>\\n<md-progress-circular md-diameter=\\\"20px\\\" ng-if=\\\"vm.creatingCustomer\\\"></md-progress-circular><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/account-plus-outline.2702e30b.svg\\\" ng-if=\\\"!vm.creatingCustomer\\\">\\n</md-icon></md-button><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.createCustomer(sale.customerAutocomplete, sale)\\\" \\nng-disabled=\\\"vm.creatingCustomer\\\" ng-if=\\\"vm.hasCustomerSelected(sale)\\\"><md-tooltip>\\n{{\\'CUSTOMERS.VIEW_CUSTOMER\\' | translate}}</md-tooltip><md-progress-circular md-diameter=\\\"20px\\\" \\nng-if=\\\"vm.creatingCustomer\\\"></md-progress-circular><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/account-eye-outline.2ced42e6.svg\\\" ng-if=\\\"!vm.creatingCustomer\\\"></md-icon>\\n</md-button><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"md-icon-button\\\" hide-lg hide-xl \\nng-click=\\\"vm.toggleCurrentViewType(sale)\\\"><md-icon md-font-icon=\\\"icon-view-list\\\" \\nng-if=\\\"sale.currentViewType === vm.CURRENT_VIEW_TYPE_MATRIX\\\"></md-icon><md-icon md-font-icon=\\\"icon-apps\\\" \\nng-if=\\\"sale.currentViewType === vm.CURRENT_VIEW_TYPE_LIST\\\"></md-icon></md-button><md-button class=\\\"m-0 md-icon-button\\\" \\nhide-lg hide-xl ng-click=\\\"vm.useGiftCard(sale)\\\"><md-tooltip>{{\\'SALES.USE_GIFT_CARD\\' | translate}}</md-tooltip><md-icon \\nclass=\\\"indigo-fg mr-8\\\" md-font-icon=\\\"icon-wallet-giftcard\\\"></md-icon></md-button><md-button class=\\\"m-0 md-icon-button\\\" \\nhide-lg hide-xl id=\\\"test-voucher-button\\\" ng-click=\\\"vm.openDevolutionCardFinder(sale)\\\"><md-tooltip>\\n{{\\'SALES.ADD_VOUCHER\\' | translate}}</md-tooltip><md-icon class=\\\"pink-fg mr-8\\\" md-font-icon=\\\"icon-wallet-membership\\\">\\n</md-icon></md-button></div></div></div><div flex layout=\\\"column\\\" ng-if=\\\"!vm.selectedRegister.is_closed\\\" \\nng-show=\\\"sale.currentView == vm.SELL_VIEW\\\"><md-card class=\\\"m-0\\\" flex \\nng-if=\\\"sale.currentViewType === vm.CURRENT_VIEW_TYPE_LIST\\\"><md-card-content class=\\\"p-0\\\" layout=\\\"column\\\" layout-fill>\\n<div class=\\\"products-table\\\" flex layout=\\\"column\\\" ms-scroll><table class=\\\"simple compact\\\" \\ndata-test-id=\\\"sale-table-products\\\"><thead><tr><th class=\\\"w-60\\\">{{\\'GENERAL.AMT\\' | translate}}</th><th class=\\\"w-45\\\" \\nng-if=\\\"sale.hasBundle\\\"></th><th class=\\\"product-header\\\"><div>{{\\'SALES.PRODUCT\\' | translate }}</div><div \\nclass=\\\"badge-wrapper\\\"><nd-new-feature-badge id=\\\"EDITABLE_POPV_PRODUCT_NAME\\\"></nd-new-feature-badge></div></th><th \\nclass=\\\"text-right\\\">{{\\'SALES.DISCOUNT\\' | translate}}</th><th class=\\\"text-right\\\">{{\\'SALES.PRICE\\' | translate}}</th></tr>\\n</thead><tbody><tr ng-if=\\\"sale.pos_order_product_variants.length == 0 && !sale.isFetching\\\"><td \\nclass=\\\"text-center no-border\\\" colspan=\\\"5\\\"><em class=\\\"secondary-text hint-text\\\" translate=\\\"SALES.NO_PRODUCTS\\\">\\nNo products selected</em></td></tr><tr ng-if=\\\"sale.isFetching\\\"><td class=\\\"loader-td no-border\\\" colspan=\\\"5\\\">\\n<md-progress-linear class=\\\"animate-fade-in-out md-primary\\\" md-mode=\\\"indeterminate\\\"></md-progress-linear></td></tr>\\n</tbody><tbody ng-if=\\\"!popv.consumed_gift_card\\\" ng-repeat=\\\"popv in sale.pos_order_product_variants\\\"><tr \\nclass=\\\"feedback-when-appears\\\" ng-class=\\\"{\\'md-orange-50-bg\\': popv.amount < 0}\\\"><td \\nng-class=\\\"{\\'md-warn-fg\\': popv.devolution_of}\\\"><input class=\\\"w-55 text-right nd-input\\\" \\nng-change=\\\"vm.amountChanged(sale, product, {{popv.amount}}, $index)\\\" \\nng-class=\\\"{\\'disabled-amount\\': popv.uid_stock_uid}\\\" \\nng-disabled=\\\"popv.is_gift_card || (popv.product_manage_uids && !popv.product_manage_lots)\\\" \\nng-focus=\\\"vm.amountFocus(sale, popv, product, $index)\\\" ng-model=\\\"popv.amount\\\" type=\\\"number\\\"></td><td \\nng-if=\\\"sale.hasBundle\\\"><md-button class=\\\"md-button m-0 h-30 pack-button\\\" \\nng-class=\\\"{\\'md-white-bg orange-900-fg\\': popv.amount < 0,\\n                                                  \\'md-blue-50-bg md-primary\\': popv.amount > 0 }\\\" \\nng-click=\\\"vm.showAndHideBundleVariants(popv)\\\" ng-if=\\\"popv.is_bundle\\\"><div class=\\\"h-30\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">{{\\'PRODUCT.PACK\\' | translate}}<md-icon class=\\\"toggle-icon no-margin\\\" \\nmd-font-icon=\\\"icon-chevron-up\\\" \\nng-class=\\\"{\\'upside-down\\': !popv.showBundle,\\n                                                    \\'orange-900-fg\\': popv.amount < 0}\\\">\\n</md-icon></div></md-button></td><td class=\\\"product-td\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img \\nclass=\\\"table-thumbnails mr-10 border-radius-image w-40\\\" hide-sm hide-xs \\nng-class=\\\"{\\'default-icon\\': !popv.cover_thumbnail}\\\" src=\\\"{{vm.getCover(popv)}}\\\"><div class=\\\"mr-8\\\" layout=\\\"column\\\"><input\\n class=\\\"text-left nd-input no-padding\\\" focus-if=\\\"{{popv.editingName}}\\\" md-auto-foucs \\nng-blur=\\\"vm.finishCustomNameEdition(popv)\\\" ng-if=\\\"popv.editingName\\\" ng-keypress=\\\"vm.checkEnterPressed($event)\\\" \\nng-model=\\\"popv.product_name\\\" placeholder=\\\"{{popv.product_name}}\\\" type=\\\"text\\\"><div class=\\\"popv_product_name\\\" \\nng-if=\\\"!popv.editingName\\\"><span class=\\\"cursor-pointer text-truncate\\\" ng-click=\\\"vm.nameClicked(popv)\\\">\\n{{ ::popv.product_name }}</span></div><div><small>{{ popv.product_code }} - <a class=\\\"md-primary m-0\\\" href=\\\"#\\\" \\nng-click=\\\"vm.changeVariants(sale, popv)\\\" ng-disabled=\\\"popv.promotion\\\"><md-tooltip md-delay=\\\"1000\\\">\\n{{\\'SALES.CHANGE_VARIANTS\\' | translate}}</md-tooltip>\\n{{ popv.product_variant_size_name}} - {{ popv.product_variant_color_name}} </a></small><small \\nclass=\\\"m-0 secondary-text\\\" ng-if=\\\"!popv.is_gift_card\\\">- {{::popv.brand_name}}</small></div><div><small \\nclass=\\\"secondary-text ng-binding\\\">{{popv.uid_stock_uid}}</small></div></div><md-button \\nclass=\\\"md-icon-button out-of-stock-button\\\" data-test-id=\\\"out-of-stock-warning-tpv\\\" \\nng-click=\\\"vm.viewStock(popv, $event)\\\" ng-if=\\\"vm.isLowStock(popv)\\\"><md-tooltip><span ng-if=\\\"!popv.is_bundle\\\">\\n{{\\'SALES.PRODUCT_OUT_OF_STOCK\\' | translate}}</span> <span ng-if=\\\"popv.is_bundle\\\">\\n{{\\'SALES.PRODUCT_BUNDLE_OUT_OF_STOCK\\' | translate}}</span></md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed-alert.afe7da6a.svg\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button\\\" hide-sm hide-xs ng-click=\\\"vm.viewStock(popv, $event)\\\" ng-if=\\\"!vm.isLowStock(popv)\\\">\\n<md-tooltip>{{\\'ORDER.SEE_STOCK\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/view-stock.5f2d642c.svg\\\"></md-icon></md-button><div layout=\\\"row\\\">\\n<md-button class=\\\"md-icon-button show-seller-button\\\" ng-click=\\\"vm.openSearchVendorDialog(popv)\\\" \\nng-if=\\\"!popv.seller && !popv.addingSeller && vm.showAssignSeller()\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/account_link_circle.b79d4eb8.svg\\\"></md-icon><md-tooltip>\\n{{\\'SALES.ASSIGN_SELLER\\' | translate}}</md-tooltip></md-button></div><div class=\\\"pl-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"popv.seller_instance\\\"><nd-user-picture user=\\\"popv.seller_instance\\\">\\n</nd-user-picture><span class=\\\"ml-5\\\" hide-md hide-sm hide-xs>\\n{{popv.seller_instance.first_name}} {{popv.seller_instance.last_name}}</span><md-tooltip>\\n{{popv.seller_instance.first_name}} {{popv.seller_instance.last_name}}</md-tooltip><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.removeSeller(popv)\\\" ng-if=\\\"popv.seller\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon><md-tooltip>{{\\'SALES.REMOVE_SELLER\\' | translate}}</md-tooltip></md-button></div>\\n</div></td><td><div flex layout=\\\"column\\\" ng-if=\\\"popv.is_gift_card\\\"><input class=\\\"text-left nd-input pl-5 pr-5\\\" \\nmaxlength=\\\"128\\\" ng-change=\\\"vm.checkGiftCardCode(sale, popv)\\\" ng-disabled=\\\"popv.using_gift_card\\\" \\nng-model=\\\"popv.gift_card_code\\\" ng-model-options=\\\"{ debounce: 500 }\\\" \\nplaceholder=\\\"{{\\'SALES.GIFT_CARD_CODE\\' | translate}}\\\"><small class=\\\"red-500-fg ml-5\\\" \\nng-if=\\\"(popv.invalid || popv.repeated) && popv.gift_card_code\\\">\\n{{popv.repeated ? \\'SALES.CODE_ALREADY_USED_POS\\' : \\'SALES.CODE_ALREADY_USED\\' | translate}}</small></div><div flex \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"!popv.is_gift_card\\\"><span class=\\\"mr-5\\\" \\nng-show=\\\"vm.showPromotions(sale, popv)\\\">{{ popv.promotion_name}}<md-tooltip md-direction=\\\"bottom\\\">\\n{{\\'PROMOTION.PROMOTION_ENABLED\\' | translate}}</md-tooltip></span><input class=\\\"w-60 text-right nd-input\\\" flex \\nmax=\\\"100\\\" min=\\\"0\\\" ng-change=\\\"vm.updateSale(sale, true)\\\" \\nng-disabled=\\\"sale.amount < 0 || popv.custom_price_incl_tax || !vm.session.hasPermission(\\'sale.sell.set_discount\\')\\\" \\nng-focus=\\\"vm.discountFocus(sale, popv)\\\" ng-model=\\\"popv.discount\\\" type=\\\"number\\\"> <span class=\\\"ml-5\\\">%</span></div></td>\\n<td><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><input class=\\\"text-right w-70 nd-input\\\" \\nfocus-if=\\\"{{popv.editingPrice}}\\\" md-auto-focus ng-blur=\\\"vm.finishCustomPriceEdition(popv, sale, true)\\\" \\nng-change=\\\"vm.customPriceChanged(popv, sale, true)\\\" ng-if=\\\"popv.editingPrice\\\" \\nng-keypress=\\\"vm.checkEnterPressed($event)\\\" ng-model=\\\"popv.custom_price_incl_tax\\\" \\nplaceholder=\\\"{{ vm.getPrice(popv, true) | price}}\\\" placeholder=\\\"{{ vm.getPrice(popv, true) | price}}\\\" type=\\\"number\\\">\\n<div class=\\\"text-right cursor-pointer\\\" layout=\\\"column\\\" ng-click=\\\"vm.priceClicked(popv)\\\" ng-if=\\\"!popv.editingPrice\\\">\\n<span>{{ vm.twoDecimals(vm.getPrice(popv, true)) | price}}{{::vm.currencyCharacter}} </span><span \\nclass=\\\"secondary-text text-strike\\\" \\nng-if=\\\"popv.discount || (popv.custom_price_incl_tax !== null && popv.custom_price_incl_tax < popv.price_incl_tax)\\\">\\n{{ popv.price_incl_tax * popv.amount | price}}{{::vm.currencyCharacter}}</span></div><md-button class=\\\"md-icon-button\\\" \\ndata-test-id=\\\"sale-button-delete-product\\\" ng-click=\\\"vm.deletePosOrderProductVariant(sale, $index)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon></md-button></div></td></tr><tr \\nng-class=\\\"{\\'md-orange-50-bg\\': popv.amount < 0,\\n                                       \\'md-blue-50-bg\\': popv.amount > 0}\\\" \\nng-repeat=\\\"bundleVariant in popv.bundle_content\\\" ng-show=\\\"popv.showBundle\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span ng-if=\\\"popv.devolution_of\\\">-</span> <span>{{ bundleVariant.amount }}</span></div>\\n</td><td></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img \\nclass=\\\"table-thumbnails mr-10 border-radius-image w-40\\\" hide-sm hide-xs \\nng-class=\\\"{\\'default-icon\\': !bundleVariant.cover_thumbnail}\\\" src=\\\"{{vm.getCover(bundleVariant)}}\\\"><div class=\\\"mr-10\\\" \\nlayout=\\\"column\\\"><div>{{ bundleVariant.product_name }}</div><div><small>\\n{{ bundleVariant.product_code }} - {{ bundleVariant.size_name}} - {{ bundleVariant.color_name}} </small><small \\nclass=\\\"m-0 secondary-text\\\" ng-if=\\\"!popv.is_gift_card\\\">- {{::bundleVariant.brand_name}}</small></div></div><div \\nclass=\\\"cursor-pointer\\\" data-test-id=\\\"out-of-stock-warning-tpv\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-click=\\\"vm.viewStock(bundleVariant, $event)\\\" ng-if=\\\"vm.isLowStock(bundleVariant)\\\"><md-icon \\nclass=\\\"yellow-fg ml-8 mr-8\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed-alert.afe7da6a.svg\\\"></md-icon><u \\nclass=\\\"yellow-500-fg\\\" flex hide-md hide-sm hide-xs>{{\\'SALES.PRODUCT_OUT_OF_STOCK\\' | translate}}</u></div></div></td>\\n<td></td><td></td></tr></tbody></table></div><div class=\\\"border-top\\\" layout=\\\"row\\\"><div flex><div layout=\\\"column\\\" \\nlayout-align=\\\"start\\\"><div class=\\\"p-5\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><input class=\\\"nd-input white\\\" flex \\nng-model=\\\"sale.notes\\\" placeholder=\\\"{{\\'SALES.NOTES_OR_COMMENTS\\' | translate}}\\\"></div></div></div><div flex=\\\"40\\\" hide-lg \\nhide-xl layout=\\\"row\\\" layout-align=\\\"end center\\\"><div flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div flex hide-xs \\nlayout=\\\"column\\\"><div class=\\\"secondary-text\\\" ng-if=\\\"vm.countTotalProductVariants(sale) > 0\\\" \\nstyle=\\\"text-align: center; height: 100%\\\"><span>{{vm.countTotalProductVariants(sale)}}</span> <span class=\\\"ml-5\\\" \\nng-if=\\\"vm.countTotalProductVariants(sale) === 1\\\">{{\\'SALES.TOTAL_PRODUCT\\' | translate}}</span> <span class=\\\"ml-5\\\" \\nng-if=\\\"vm.countTotalProductVariants(sale) > 1\\\">{{\\'SALES.TOTAL_PRODUCTS\\' | translate}}</span></div></div><div \\nclass=\\\"w-150 m-5 mr-15\\\" flex layout=\\\"column\\\"><div class=\\\"h3\\\" layout=\\\"row\\\" \\nng-if=\\\"!sale.devolution_cards || sale.devolution_cards.length === 0\\\"><div translate=\\\"SALES.TOTAL\\\"></div><div \\nclass=\\\"text-right\\\" flex id=\\\"test-total-price\\\"><div ng-class=\\\"sale.balance_discount > 0 ? \\'balance-discount\\' : \\'\\'\\\">\\n{{sale.total | price}} {{::vm.currencyCharacter}}</div></div></div></div></div></div></div></md-card-content></md-card>\\n<md-card class=\\\"m-0\\\" flex ng-if=\\\"sale.currentViewType === vm.CURRENT_VIEW_TYPE_MATRIX\\\"><md-card-content \\nlayout=\\\"column\\\" layout-fill><div class=\\\"sell-matrix-container\\\" flex layout=\\\"column\\\" ms-scroll><nd-sell-matrix flex \\nproduct-selected=\\\"vm.matrixSelectedProductChange(params)\\\" \\nregister-configuration=\\\"vm.selectedRegister.register_configuration\\\" sell-matrix-data=\\\"vm.sellMatrixData\\\" \\nwarehouse-id=\\\"vm.selectedRegister.warehouse.id\\\"></nd-sell-matrix></div></md-card-content></md-card><div \\nclass=\\\"pay-buttons-bar\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" ng-if=\\\"vm.isNormalPayingWorkflow(sale)\\\"><md-button \\nclass=\\\"large\\\" \\nng-class=\\\"{\\'md-raised md-primary\\': vm.$mdMedia(\\'xs\\') || vm.$mdMedia(\\'sm\\') || vm.$mdMedia(\\'md\\'), \\'stroked\\': vm.$mdMedia(\\'lg\\') || vm.$mdMedia(\\'xl\\')}\\\" \\nflex id=\\\"test-pay-button\\\" ng-click=\\\"vm.pay(sale)\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0 || vm.isPaymentDisabled(sale)\\\" \\nng-if=\\\"vm.getRegisterConfigurationProperty(\\'show_pay_button\\', true)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<span flex translate=\\\"SALES.PAY\\\">PAY</span></div></md-button><md-button class=\\\"md-raised pay-card-button large\\\" flex \\nhide-md hide-sm hide-xs ng-click=\\\"vm.payByCard(sale)\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0 ||\\n                                          sale.total < vm.getTotalDevolutionCardAmount(sale) * -1 ||\\n                                          vm.isPaymentDisabled(sale)\\\" \\nng-if=\\\"vm.showPayByCardButton()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-credit-card\\\" ng-if=\\\"!vm.selectedRegister.default_card_method\\\"></md-icon><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sa-payment.ab4ded0e.svg\\\" ng-if=\\\"vm.selectedRegister.default_card_method\\\">\\n</md-icon><span flex translate=\\\"SALES.PAY_CARD\\\">PAY BY CARD</span></div></md-button><md-button \\nclass=\\\"md-raised pay-cash-button large\\\" flex hide-md hide-sm hide-xs ng-click=\\\"vm.payByCash(sale)\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0 ||\\n                                          sale.total < vm.getTotalDevolutionCardAmount(sale) * -1 ||\\n                                          vm.isPaymentDisabled(sale)\\\" \\nng-if=\\\"vm.showPayByCashButton()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-cash-multiple\\\"></md-icon><span flex translate=\\\"SALES.PAY_CASH\\\">PAY BY CASH</span></div></md-button>\\n<md-button class=\\\"md-accent apply-balance-discount-button large\\\" flex hide-gt-md \\nng-click=\\\"vm.applyOrRemoveBalanceDiscount(sale)\\\" \\nng-if=\\\"vm.showApplyBalanceButton(sale) && (!sale.balance_discount || sale.balance_discount == 0)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-percent\\\"></md-icon><span flex \\ntranslate=\\\"SALES.APPLY_BALANCE_DISCOUNT\\\" \\ntranslate-values=\\\"{balance: sale.customerAutocomplete.selectedItem.balance, currency: vm.currencyCharacter}\\\"></span>\\n</div></md-button><md-button class=\\\"stroked remove-balance-discount-button large\\\" flex hide-gt-md \\nng-click=\\\"vm.applyOrRemoveBalanceDiscount(sale)\\\" \\nng-if=\\\"vm.showApplyBalanceButton(sale) && sale.balance_discount && sale.balance_discount > 0\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-percent\\\"></md-icon><span flex \\ntranslate=\\\"SALES.REMOVE_BALANCE_DISCOUNT\\\"></span></div></md-button><md-button class=\\\"stroked large\\\" flex hide-gt-md \\nng-click=\\\"vm.applyCustomerDiscount(sale)\\\" ng-disabled=\\\"sale.customer_discount_applied\\\" \\nng-if=\\\"sale.customerAutocomplete.selectedItem.discount\\\"><div ng-if=\\\"!sale.customer_discount_applied\\\">\\n{{\\'SALES.APPLY_DISCOUNT\\' | translate: { discount: sale.customerAutocomplete.selectedItem.discount} }}</div><div \\nng-if=\\\"sale.customer_discount_applied\\\">\\n{{\\'SALES.APPLY_DISCOUNT_APPLIED\\' | translate: { discount: sale.customerAutocomplete.selectedItem.discount} }}</div>\\n</md-button></div><div class=\\\"pay-buttons-bar\\\" layout=\\\"row\\\" ng-if=\\\"vm.isDevolution(sale)\\\"><md-button \\nclass=\\\"stroked refund-button large\\\" flex ng-click=\\\"vm.refundByNewDevolutionCard(sale)\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-membership\\\"></md-icon><span flex translate=\\\"SALES.GENERATE_VOUCHER\\\">GENERATE VOUCHER</span>\\n</div></md-button><md-button class=\\\"stroked refund-button large\\\" flex ng-click=\\\"vm.refundByCard(sale)\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" ng-if=\\\"vm.showRefundByCardButton()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/credit-card-refund.61a4aba3.svg\\\" \\nng-if=\\\"!vm.getRefundCardPaymentMethod().payment_gateway\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sa-payment.ab4ded0e.svg\\\" \\nng-if=\\\"vm.getRefundCardPaymentMethod().payment_gateway\\\"></md-icon><span flex translate=\\\"SALES.REFUND_MONEY_CARD\\\">\\nREFUND BY CARD</span></div></md-button><md-button class=\\\"stroked refund-button large\\\" flex \\nng-click=\\\"vm.refundByCash(sale)\\\" ng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" \\nng-if=\\\"vm.showRefundByCashButton()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-refund.c7128c01.svg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.REFUND_MONEY_CASH\\\">REFUND BY CASH</span></div></md-button></div></div><div class=\\\"pay-view\\\" flex \\nflex-order-gt-sm=\\\"1\\\" flex-order-sm=\\\"2\\\" flex-order-xs=\\\"2\\\" layout=\\\"column\\\" ng-if=\\\"!vm.selectedRegister.is_closed\\\" \\nng-show=\\\"sale.currentView == vm.PAY_VIEW\\\"><md-card class=\\\"m-0\\\" flex><md-card-content class=\\\"full-height\\\" \\nlayout=\\\"column\\\" ng-if=\\\"!sale.successfullyPaid\\\"><div \\nng-include=\\\"\\'app/main/apps/sale/views/sell/subviews/payment-methods-header.html\\'\\\"></div><div class=\\\"full-height\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\" ng-if=\\\"!sale.successfullyPaid\\\"><div class=\\\"full-width full-height\\\" flex \\nlayout=\\\"column\\\"><div class=\\\"scrollable pt-15\\\" flex layout=\\\"row\\\" layout-align=\\\"start start\\\"><div flex=\\\"100\\\" \\nlayout=\\\"column\\\"><div class=\\\"p-10 pr-25 border-bottom payment-method-row\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"!sale.refundByPaymentMethodCard && !sale.refundByPaymentMethodCash\\\" \\nng-repeat=\\\"posOrderPaymentMethod in sale.pos_order_payment_methods | orderBy:\\'payment_method\\'\\\"><md-button \\nclass=\\\"m-0 p-0\\\" \\nng-class=\\\"{\\'indigo-100-bg\\': sale.selectedPosOrderPaymentMethod.payment_method === posOrderPaymentMethod.payment_method}\\\" \\nng-click=\\\"vm.selectPaymentMethod(sale, posOrderPaymentMethod)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nclass=\\\"mr-8\\\" md-font-icon=\\\"{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].icon}}\\\" \\nng-if=\\\"vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].icon && !vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].payment_gateway\\\" \\nstyle=\\\"color:#{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].foreground_color}}\\\"></md-icon><md-icon \\nclass=\\\"mr-8\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/sa-payment.ab4ded0e.svg\\\" \\nng-if=\\\"vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].payment_gateway\\\" \\nstyle=\\\"color:#{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].foreground_color}}\\\"></md-icon><span flex \\nng-if=\\\"!vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].company\\\">\\n{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].name | translate}} </span><span flex \\nng-if=\\\"vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].company\\\">\\n{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].name}}</span></div></md-button><span flex></span><input \\nclass=\\\"text-right font-size-18 nd-input w-100\\\" flex=\\\"33\\\" \\nfocus-if=\\\"{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].focus}}\\\" \\nng-blur=\\\"vm.paymentMethodBlurred(vm.paymentMethodsDict[posOrderPaymentMethod.payment_method])\\\" \\nng-focus=\\\"vm.paymentMethodFocused()\\\" ng-model=\\\"posOrderPaymentMethod.given_amount\\\" step=\\\"0.01\\\" type=\\\"number\\\"><div \\nclass=\\\"h3 ml-5\\\" ng-class=\\\"{\\'hint-text\\': sale.generateDevolutionCard}\\\">{{::vm.currencyCharacter}}</div></div><div \\nclass=\\\"p-10 pr-25 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"popv in vm.getConsumedGiftCardsNotVoucher(sale)\\\"><md-button class=\\\"m-0\\\" \\nng-click=\\\"vm.assignAllToGiftCard(sale, popv)\\\" ng-disabled=\\\"true\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"indigo-fg mr-8\\\" md-font-icon=\\\"icon-wallet-giftcard\\\"></md-icon><span>{{popv.gift_card_code}} <span \\nclass=\\\"secondary-text\\\">({{(-1 * popv.price_incl_tax) | price}} {{::vm.currencyCharacter}})</span></span></div>\\n</md-button><md-button class=\\\"md-icon-button remove-devolution-card\\\" ng-click=\\\"vm.deleteConsumedGiftCard(sale, popv)\\\">\\n<md-icon class=\\\"s18\\\" md-font-icon=\\\"icon-trash\\\"></md-icon></md-button><span flex></span> <input \\nclass=\\\"text-right font-size-18 nd-input w-100\\\" flex=\\\"33\\\" max=\\\"{{popv.price_incl_tax_positive}}\\\" \\nng-change=\\\"vm.finishGiftCardCustomPriceEdition(popv, sale)\\\" ng-model=\\\"popv.custom_price_incl_tax_positive\\\" step=\\\"0.01\\\" \\ntype=\\\"number\\\"><div class=\\\"h3 ml-5\\\">{{::vm.currencyCharacter}}</div></div><div class=\\\"p-10 pr-25 border-bottom\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"m-0\\\" ng-click=\\\"vm.useGiftCard(sale)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"indigo-fg mr-8\\\" md-font-icon=\\\"icon-wallet-giftcard\\\"></md-icon><span flex \\nng-if=\\\"vm.getConsumedGiftCardsNotVoucher(sale).length === 0\\\" translate=\\\"SALES.USE_GIFT_CARD\\\"></span> <span flex \\nng-if=\\\"vm.getConsumedGiftCardsNotVoucher(sale).length > 0\\\" translate=\\\"SALES.USE_ANOTHER_GIFT_CARD\\\"></span></div>\\n</md-button></div><div class=\\\"p-10 pr-25 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"popv in vm.getConsumedGiftCardsVoucher(sale)\\\"><md-button class=\\\"m-0\\\" \\nng-click=\\\"vm.assignAllToGiftCard(sale, popv)\\\" ng-disabled=\\\"true\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"pink-fg mr-8\\\" md-font-icon=\\\"icon-wallet-membership\\\"></md-icon><span>{{popv.gift_card_code}} <span \\nclass=\\\"secondary-text\\\">({{(-1 * popv.price_incl_tax) | price}} {{::vm.currencyCharacter}})</span></span></div>\\n</md-button><md-button class=\\\"md-icon-button remove-devolution-card\\\" ng-click=\\\"vm.deleteConsumedGiftCard(sale, popv)\\\">\\n<md-icon class=\\\"s18\\\" md-font-icon=\\\"icon-trash\\\"></md-icon></md-button><span flex></span> <input \\nclass=\\\"text-right font-size-18 nd-input w-100\\\" flex=\\\"33\\\" max=\\\"{{popv.price_incl_tax_positive}}\\\" \\nng-change=\\\"vm.finishGiftCardCustomPriceEdition(popv, sale)\\\" ng-model=\\\"popv.custom_price_incl_tax_positive\\\" step=\\\"0.01\\\" \\ntype=\\\"number\\\"><div class=\\\"h3 ml-5\\\">{{::vm.currencyCharacter}}</div></div><div class=\\\"p-10 pr-25 border-bottom\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"m-0\\\" ng-click=\\\"vm.openDevolutionCardFinder(sale)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"pink-fg mr-8\\\" md-font-icon=\\\"icon-wallet-membership\\\">\\n</md-icon><span flex ng-if=\\\"vm.getConsumedGiftCardsNotVoucher(sale).length === 0\\\" translate=\\\"SALES.ADD_VOUCHER\\\"></span>\\n <span flex ng-if=\\\"vm.getConsumedGiftCardsNotVoucher(sale).length > 0\\\" translate=\\\"SALES.ADD_ANOTHER_VOUCHER\\\"></span>\\n</div></md-button><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><span class=\\\"font-size-18 pink-fg voucher-amount\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-repeat=\\\"devolutionCard in sale.devolution_cards\\\"><span>\\n{{ devolutionCard.amount * -1 | price}} {{::vm.currencyCharacter}}</span><md-button \\nclass=\\\"md-icon-button remove-devolution-card\\\" ng-click=\\\"vm.deleteDevolutionCard(sale, $index)\\\"><md-icon \\nclass=\\\"s18 pink-fg\\\" md-font-icon=\\\"icon-trash\\\"></md-icon></md-button></span></div></div><div \\nclass=\\\"h2 p-10 pr-25 border-bottom\\\" layout=\\\"row\\\" ng-if=\\\"vm.isDevolution(sale)\\\"><span flex \\nng-if=\\\"sale.refundByPaymentMethodCash\\\" translate=\\\"SALES.REFUND_MONEY_CASH\\\"></span> <span flex \\nng-if=\\\"sale.refundByPaymentMethodCard\\\" translate=\\\"SALES.REFUND_MONEY_CARD\\\"></span> <span flex \\nng-if=\\\"sale.generateDevolutionCard\\\" translate=\\\"SALES.GENERATE_VOUCHER\\\"></span> <span class=\\\"text-bold\\\" \\nng-if=\\\"sale.generateDevolutionCard\\\">{{vm.getBalance(sale) | price}} {{vm.currencyCharacter}} </span><span \\nclass=\\\"text-bold\\\" ng-if=\\\"sale.refundByPaymentMethodCash || sale.refundByPaymentMethodCard\\\">\\n{{vm.getTotalAssigned(sale, true) * -1 | price}} {{vm.currencyCharacter}}</span></div><div \\nclass=\\\"did-you-know yellow animate-fade-in-out mt-16\\\" ng-show=\\\"sale.isDevolution && vm.hasAdyenPaymentGateway(sale)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\"></md-icon></div><span ng-if=\\\"vm.hasAdyenPaymentGateway(sale)\\\" \\ntranslate=\\\"SALES.ALERT_MESSAGE_AUTOMATIC_REFUND\\\"></span></div></div><div \\nclass=\\\"did-you-know animate-fade-in-out mt-16\\\" \\nng-show=\\\"sale.isDevolution && vm.hasComerciaPaymentGateway(sale) && vm.getRefundCardPaymentMethod().payment_gateway\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon></div><span ng-if=\\\"vm.hasComerciaPaymentGateway(sale)\\\">\\n{{\\'SALES.ALERT_MESSAGE_REFUND_SAME_CARD\\' | translate: { card: vm.getOriginalCardNumber(sale), issuer: vm.getOriginalCardIssuer(sale) } }}\\n</span></div></div></div></div></div><div class=\\\"scrollable full-height border-left pl-20 pt-15\\\" flex=\\\"50\\\" hide-lg \\nhide-sm hide-xl hide-xs ng-if=\\\"!vm.isDevolution(sale)\\\"><nd-numeric-keyword class=\\\"full-height\\\" flex layout=\\\"row\\\" \\nstring-value=\\\"sale.selectedPosOrderPaymentMethod.stringValue\\\" total-value=\\\"vm.getPendingToAssigned(sale)\\\" \\nvalue=\\\"sale.selectedPosOrderPaymentMethod.given_amount\\\"></nd-numeric-keyword></div></div></md-card-content>\\n<md-card-content class=\\\"full-height\\\" layout=\\\"column\\\" ng-if=\\\"sale.successfullyPaid\\\"><div flex \\nng-include=\\\"\\'app/main/apps/sale/views/sell/subviews/payment-methods-header.html\\'\\\"></div><div class=\\\"full-height\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-if=\\\"sale.successfullyPaid\\\"><div class=\\\"md-padding\\\" flex layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"sale.successfullyPaid\\\"><div class=\\\"w-400\\\" layout=\\\"column\\\"><div class=\\\"md-padding\\\" \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"h2\\\" translate=\\\"SALES.SALE_COMPLETED\\\">\\nSale and Payment Complete!</div></div><div class=\\\"md-padding\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.closeCurrentSale(sale)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon md-font-icon=\\\"icon-plus\\\"></md-icon><span translate=\\\"SALES.NEW_SALE\\\"></span></div></md-button><div \\nclass=\\\"secondary-text text-center mt-16 animate-fade-in-out\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-show=\\\"sale.autocloseCurrentSaleInterval\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nclass=\\\"mr-8\\\" md-diameter=\\\"16px\\\" md-mode=\\\"determinate\\\" ng-if=\\\"sale.autocloseCurrentSaleInterval\\\" \\nvalue=\\\"{{sale.closeCurrentSaleTimeout}}\\\"></md-progress-circular><span class=\\\"secondary-text text-center\\\" \\ndata-translate-values=\\\"{seconds: (((100 - sale.closeCurrentSaleTimeout)/10) | number: 0)}\\\" \\ntranslate=\\\"SALES.CLOSING_SALE_IN_N_SECONDS\\\"></span></div><md-button ng-click=\\\"vm.cancelCloseCurrentSaleTimeout(sale)\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button></div></div></div><md-divider class=\\\"w-400\\\"></md-divider><div \\nclass=\\\"md-padding\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-button\\\" \\nng-click=\\\"vm.printSale(sale, false)\\\" ng-disabled=\\\"vm.payButtonDisabled(sale)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.PAY_AND_PRINT\\\">PAY AND PRINT</span></div></md-button><md-button class=\\\"md-button\\\" \\nng-click=\\\"vm.printSale(sale, true)\\\" ng-disabled=\\\"vm.payButtonDisabled(sale)\\\" \\nng-if=\\\"!vm.hasEposItalyActive() && vm.isNormalPayingWorkflow(sale) && vm.getRegisterConfigurationProperty(\\'show_print_gift_ticket_button\\', true)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-gift mr-5\\\"></md-icon><span \\nflex translate=\\\"SALES.PAY_AND_PRINT_GIFT_TICKET\\\">GIFT TICKET</span></div></md-button><md-button class=\\\"md-button\\\" \\nng-click=\\\"vm.printDevolutionCard(sale)\\\" ng-disabled=\\\"sale.paying\\\" ng-if=\\\"sale.generated_devolution_card.length !== 0\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-wallet-membership\\\"></md-icon>\\n<span flex translate=\\\"SALES_LOG.PRINT_VOUCHER\\\">PRINT VOUCHER</span></div></md-button><md-button \\nclass=\\\"md-button md-primary\\\" ng-click=\\\"vm.showSaleDialogById(sale.id)\\\" ng-disabled=\\\"vm.payButtonDisabled(sale)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-eye mr-5\\\"></md-icon><span flex \\ntranslate=\\\"SALES.VIEW_SALE\\\">VIEW SALE</span></div></md-button></div></div></div></md-card-content></md-card><div \\nclass=\\\"pay-buttons-bar\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" layout-gt-xs=\\\"row\\\" ng-if=\\\"!sale.successfullyPaid\\\">\\n<md-button class=\\\"stroked full-width large\\\" flex id=\\\"test-finish-payment-button\\\" \\nng-click=\\\"vm.finishSale(vm.finishPayment, sale, [false, false, false])\\\" ng-disabled=\\\"vm.payButtonDisabled(sale)\\\" \\nng-if=\\\"vm.isNormalPayingWorkflow(sale) && vm.getRegisterConfigurationProperty(\\'show_not_print_ticket_button\\', true)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-off-outline.7efcb550.svg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.PAY\\\">PAY</span></div></md-button><md-button class=\\\"stroked full-width large\\\" flex \\nng-click=\\\"vm.finishSale(vm.finishPayment, sale, [true, false, false])\\\" ng-disabled=\\\"vm.payButtonDisabled(sale)\\\" \\nng-if=\\\"vm.isNormalPayingWorkflow(sale) && vm.getRegisterConfigurationProperty(\\'show_print_ticket_button\\', true)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.PAY_AND_PRINT\\\">PAY AND PRINT</span></div></md-button><md-button class=\\\"stroked full-width large\\\" flex \\nng-click=\\\"vm.finishSale(vm.finishPayment, sale, [true, true, false])\\\" ng-disabled=\\\"vm.payButtonDisabled(sale)\\\" \\nng-if=\\\"!vm.hasEposItalyActive() && vm.isNormalPayingWorkflow(sale) && vm.getRegisterConfigurationProperty(\\'show_print_gift_ticket_button\\', true)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-gift mr-5\\\"></md-icon><span flex \\ntranslate=\\\"SALES.PAY_AND_PRINT_GIFT_TICKET\\\">GIFT TICKET</span></div></md-button><md-button \\nclass=\\\"eco-button full-width large\\\" flex ng-click=\\\"vm.finishSale(vm.finishPayment, sale, [false, false, true])\\\" \\nng-disabled=\\\"vm.payButtonDisabled(sale) || !sale.customer\\\" \\nng-if=\\\"vm.isNormalPayingWorkflow(sale) && vm.getRegisterConfigurationProperty(\\'show_eco_ticket_button\\', true)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/email-outline.a482d002.svg\\\"></md-icon><span class=\\\"text-truncate\\\" flex \\ntranslate=\\\"SALES.PAY_AND_EMAIL_TICKET\\\">Eco Ticket</span></div></md-button><md-button \\nclass=\\\"eco-button full-width large\\\" flex ng-click=\\\"vm.finishSale(vm.finishPayment, sale, [false, true, true])\\\" \\nng-disabled=\\\"vm.payButtonDisabled(sale) || !sale.customer\\\" \\nng-if=\\\"vm.isNormalPayingWorkflow(sale) && vm.getRegisterConfigurationProperty(\\'show_eco_gift_ticket_button\\', true)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/eco-gift-ticket.1759990e.svg\\\"></md-icon><span class=\\\"text-truncate\\\" flex \\ntranslate=\\\"SALES.PAY_AND_EMAIL_TICKET_EMAIL\\\">Eco Gift Ticket</span></div></md-button><md-button \\nclass=\\\"stroked refund-button full-width large\\\" flex \\nng-click=\\\"vm.finishSale(vm.finishPayment, sale, [true, false, false])\\\" ng-disabled=\\\"sale.paying\\\" \\nng-if=\\\"vm.isDevolution(sale) && sale.generateDevolutionCard\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-membership\\\"></md-icon><span flex translate=\\\"SALES.GENERATE_VOUCHER\\\">GENERATE VOUCHER</span>\\n</div></md-button><md-button class=\\\"stroked refund-button full-width large\\\" flex \\nng-click=\\\"vm.finishSale(vm.finishPayment, sale, [true, false, false])\\\" ng-disabled=\\\"sale.paying\\\" \\nng-if=\\\"vm.isDevolution(sale) && sale.refundByPaymentMethodCash\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon\\n md-svg-src=\\\"assets/images/custom-material-design-icons/cash-refund.c7128c01.svg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.REFUND_MONEY_CASH\\\">REFUND BY CASH</span></div></md-button><md-button \\nclass=\\\"stroked refund-button full-width large\\\" flex \\nng-click=\\\"vm.finishSale(vm.finishPayment, sale, [true, false, false])\\\" ng-disabled=\\\"sale.paying\\\" \\nng-if=\\\"vm.isDevolution(sale) && sale.refundByPaymentMethodCard\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon\\n md-svg-src=\\\"assets/images/custom-material-design-icons/credit-card-refund.61a4aba3.svg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.REFUND_MONEY_CARD\\\">REFUND BY CARD</span></div></md-button></div></div><div \\nng-show=\\\"sale.currentView === vm.SELL_VIEW\\\" style=\\\"display: none\\\"><div class=\\\"md-dialog-container\\\" \\nid=\\\"sellOrderStockDialog\\\"><md-dialog layout=\\\"column\\\"><div class=\\\"md-padding\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h2\\\">{{vm.selectedProductStock.code}}</span> <span flex></span><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.hideStock()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button>\\n</div><div ng-if=\\\"vm.isLowStock(vm.selectedPosOrderProductVariant)\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"SALES.PRODUCT_OUT_OF_STOCK_TITLE\\\"></span><p class=\\\"secondary-text\\\" \\ntranslate=\\\"SALES.PRODUCT_OUT_OF_STOCK_DESCRIPTION\\\"></p></div></div><div class=\\\"md-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"!vm.showStockDetails\\\"><md-progress-circular md-diameter=\\\"40px\\\">\\n</md-progress-circular></div><nd-product-stock-kpis allow-edition=\\\"false\\\" hide-aggregates=\\\"true\\\" \\nng-if=\\\"vm.showStockDetails\\\" product=\\\"vm.selectedProductStock\\\"></nd-product-stock-kpis></md-dialog></div></div></div>\\n<div flex-gt-sm=\\\"25\\\" hide-md hide-sm hide-xs layout=\\\"column\\\"><div class=\\\"tab-actions-row\\\" layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" ng-if=\\\"!sale.successfullyPaid\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.toggleCurrentViewType(sale)\\\"><md-icon md-font-icon=\\\"icon-view-list\\\" \\nng-if=\\\"sale.currentViewType === vm.CURRENT_VIEW_TYPE_MATRIX\\\"></md-icon><md-icon md-font-icon=\\\"icon-apps\\\" \\nng-if=\\\"sale.currentViewType === vm.CURRENT_VIEW_TYPE_LIST\\\"></md-icon></md-button><md-button class=\\\"m-0 md-icon-button\\\" \\nng-click=\\\"vm.useGiftCard(sale)\\\"><md-tooltip>{{\\'SALES.USE_GIFT_CARD\\' | translate}}</md-tooltip><md-icon \\nclass=\\\"indigo-fg mr-8\\\" md-font-icon=\\\"icon-wallet-giftcard\\\"></md-icon></md-button><md-button class=\\\"m-0 md-icon-button\\\" \\nid=\\\"test-voucher-button\\\" ng-click=\\\"vm.openDevolutionCardFinder(sale)\\\"><md-tooltip>{{\\'SALES.ADD_VOUCHER\\' | translate}}\\n</md-tooltip><md-icon class=\\\"pink-fg mr-8\\\" md-font-icon=\\\"icon-wallet-membership\\\"></md-icon></md-button></div><div \\nng-if=\\\"!vm.selectedRegister.is_closed\\\" ng-show=\\\"sale.currentView == vm.SELL_VIEW\\\"><div class=\\\"scrollable\\\" flex \\nms-scroll><div flex ng-include=\\\"\\'app/main/apps/sale/views/sell/subviews/receipt.html\\'\\\"></div><div \\nclass=\\\"did-you-know animate-fade-in-out mt-16\\\" ng-if=\\\"sale.showNonDeclaredBanner\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon></div><div layout=\\\"column\\\"><div \\ntranslate=\\\"SALES.NON_DECLARED_VOUCHER_BANNER\\\"></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"md-primary\\\" ng-href=\\\"https://support.stockagile.com/hc/es/articles/13880398315933#h_01HBX4B6ZYSDNCVZ0C03DAGCWA\\\" \\ntarget=\\\"_blank\\\"><div layout=\\\"row\\\"><span translate=\\\"GENERAL.MORE_INFO\\\"></span><md-icon class=\\\"ml-8\\\" \\nmd-font-icon=\\\"icon-open-in-new s16\\\"></md-icon></div></md-button></div></div></div></div></div><div \\nclass=\\\"button-wrapper mt-16\\\" layout=\\\"row\\\" layout-align=\\\"center end\\\"><md-button \\nclass=\\\"md-accent apply-balance-discount-button m-0\\\" flex ng-click=\\\"vm.applyOrRemoveBalanceDiscount(sale)\\\" \\nng-if=\\\"vm.showApplyBalanceButton(sale) && (!sale.balance_discount || sale.balance_discount == 0)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-percent\\\"></md-icon><span flex \\ntranslate=\\\"SALES.APPLY_BALANCE_DISCOUNT\\\" \\ntranslate-values=\\\"{balance: sale.customerAutocomplete.selectedItem.balance, currency: vm.currencyCharacter}\\\"></span>\\n</div></md-button><md-button class=\\\"stroked remove-balance-discount-button m-0\\\" flex \\nng-click=\\\"vm.applyOrRemoveBalanceDiscount(sale)\\\" \\nng-if=\\\"vm.showApplyBalanceButton(sale) && sale.balance_discount && sale.balance_discount > 0\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-percent\\\"></md-icon><span flex \\ntranslate=\\\"SALES.REMOVE_BALANCE_DISCOUNT\\\"></span></div></md-button></div></div><div class=\\\"scrollable\\\" flex \\nflex-order-gt-sm=\\\"2\\\" flex-order-sm=\\\"1\\\" flex-order-xs=\\\"1\\\" ms-scroll ng-if=\\\"!vm.selectedRegister.is_closed\\\" \\nng-show=\\\"sale.currentView == vm.PAY_VIEW\\\"><div ng-include=\\\"\\'app/main/apps/sale/views/sell/subviews/receipt.html\\'\\\">\\n</div><div class=\\\"did-you-know animate-fade-in-out mt-16\\\" ng-if=\\\"sale.showNonDeclaredBanner\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon></div><div layout=\\\"column\\\"><div \\ntranslate=\\\"SALES.NON_DECLARED_VOUCHER_BANNER\\\"></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"md-primary\\\" ng-href=\\\"https://support.stockagile.com/hc/es/articles/13880398315933#h_01HBX4B6ZYSDNCVZ0C03DAGCWA\\\" \\ntarget=\\\"_blank\\\"><div layout=\\\"row\\\"><span translate=\\\"GENERAL.MORE_INFO\\\"></span><md-icon class=\\\"ml-8\\\" \\nmd-font-icon=\\\"icon-open-in-new s16\\\"></md-icon></div></md-button></div></div></div></div></div></div></div>\\n</md-tab-body></md-tab></md-tabs><div class=\\\"margin-16\\\" flex layout=\\\"row\\\" ng-if=\\\"vm.registers.length === 0\\\"><div \\nclass=\\\"md-yellow-200-bg md-padding border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\ntranslate=\\\"SALES.NO_REGISTERS\\\">There isn\\'t any register configured. Please, create a new register through <a \\nui-sref=\\\"app.sale.registers\\\">Registers</a> page</div></div><div class=\\\"margin-16\\\" layout=\\\"row\\\" \\nng-if=\\\"!vm.selectedRegister\\\"><div class=\\\"md-yellow-200-bg md-padding border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">{{\\\"SALES.NO_REGISTER_SELECTED\\\" | translate}}</div></div></div></div>\");\n$templateCache.put(\"app/main/apps/support/views/changelogs/changelogs.html\",\"<div id=\\\"changelogs\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"NAVIGATION.CHANGELOG\\\"></div></div></div></div><div \\nclass=\\\"content ml-8 mr-8 mb-8\\\" layout=\\\"column\\\" flex><div layout=\\\"column\\\"><md-card \\nng-repeat=\\\"changelog in vm.changelogs | orderBy: \\'-released_at\\'\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\">\\n{{changelog.number}}</span><div class=\\\"subtitle secondary-text\\\">{{changelog.released_at.toLocaleString()}}</div>\\n</md-card-title-text></md-card-title><md-card-content><div class=\\\"text pt-16\\\"><div ng-if=\\\"changelog.new_features\\\"><span\\n class=\\\"text-boxed green-bg white-fg\\\">{{\\'CHANGELOGS.NEW_FEATURES\\' | translate}}</span><p \\nng-bind-html=\\\"changelog.new_features\\\"></p></div><div ng-if=\\\"changelog.improved_features\\\"><span \\nclass=\\\"text-boxed blue-bg white-fg\\\">{{\\'CHANGELOGS.IMPROVED_FEATURES\\' | translate}}</span><p \\nng-bind-html=\\\"changelog.improved_features\\\"></p></div><div ng-if=\\\"changelog.fixed_features\\\"><span \\nclass=\\\"text-boxed purple-bg white-fg\\\">{{\\'CHANGELOGS.FIXED_FEATURES\\' | translate}}</span><p \\nng-bind-html=\\\"changelog.fixed_features\\\"></p></div><div ng-if=\\\"changelog.removed_features\\\"><span \\nclass=\\\"text-boxed red-bg white-fg\\\">{{\\'CHANGELOGS.REMOVED_FEATURES\\' | translate}}</span><p \\nng-bind-html=\\\"changelog.removed_features\\\"></p></div></div></md-card-content></md-card><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary m-8\\\" ng-click=\\\"vm.loadMore()\\\" ng-disabled=\\\"vm.loading\\\" \\nng-if=\\\"vm.next\\\">{{\\'CHANGELOGS.LOAD_MORE\\' | translate}}</md-button></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/support/views/performance/performance.html\",\"<div id=\\\"performance\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"column\\\"><h2 \\ntranslate=\\\"PERFORMANCE.TITLE\\\" class=\\\"h2 mb-16\\\"></h2><div class=\\\"pr-8 mb-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><h3 hide-xs hide-sm translate=\\\"PERFORMANCE.DESCRIPTION\\\" \\nclass=\\\"h3 secondary-text m-0\\\"></h3><span class=\\\"w-300\\\"></span><md-button class=\\\"md-primary md-raised w-250\\\" \\nhas-permission=\\\"accounting.invoices.create\\\" ng-disabled=\\\"vm.processing\\\" ng-click=\\\"vm.runAll()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.processing\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"PERFORMANCE.RUN_ALL\\\"></span></div></md-button></div></div><div \\nclass=\\\"pl-8 pr-8\\\" layout=\\\"row\\\" layout-align=\\\"space-between top\\\" layout-wrap><nd-benchmark flex=\\\"100\\\" flex-gt-sm=\\\"33\\\" \\ntrigger-event-name=\\\"vm.PERFORMANCE_EVENT_RUN\\\" start-event-name=\\\"vm.PERFORMANCE_EVENT_START\\\" \\nend-event-name=\\\"vm.PERFORMANCE_EVENT_END\\\" bad-bound=\\\"2500\\\" regular-bound=\\\"3800\\\"></nd-benchmark><nd-bandwidth \\nflex=\\\"100\\\" flex-gt-sm=\\\"33\\\" trigger-event-name=\\\"vm.PERFORMANCE_EVENT_RUN\\\" start-event-name=\\\"vm.PERFORMANCE_EVENT_START\\\" \\nend-event-name=\\\"vm.PERFORMANCE_EVENT_END\\\" min-download=\\\"9\\\" min-upload=\\\"5\\\"></nd-bandwidth><nd-server flex=\\\"100\\\" \\nflex-gt-sm=\\\"33\\\" trigger-event-name=\\\"vm.PERFORMANCE_EVENT_RUN\\\" start-event-name=\\\"vm.PERFORMANCE_EVENT_START\\\" \\nend-event-name=\\\"vm.PERFORMANCE_EVENT_END\\\" bad-bound=\\\"0.75\\\" regular-bound=\\\"0.4\\\"></nd-server></div></div>\");\n$templateCache.put(\"app/main/apps/support/views/trial-status-details/trial-status-details.html\",\"<div id=\\\"support-trial-status\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" layout-fill \\nms-scroll><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"md-padding\\\"><nd-trial-status></nd-trial-status></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/support/views/videos/videos.html\",\"<div id=\\\"videos\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" translate=\\\"NAVIGATION.VIDEOS\\\"></div></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div></div><div class=\\\"content ml-8 mr-8 mb-8\\\" \\nlayout=\\\"column\\\" flex><md-card ng-repeat=\\\"category in vm.categories\\\" ng-if=\\\"vm.videosByCategory[category].length\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\">{{\\'VIDEOS.\\' + category |translate}}</span><div \\nclass=\\\"secondary-text mb-16\\\">\\n{{vm.videosByCategory[category].length}} {{vm.videosByCategory[category].length==1 ? \\'VIDEOS.VIDEO\\' : \\'VIDEOS.VIDEOS\\' |translate}}\\n</div></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" layout-wrap><div \\nng-repeat=\\\"video in vm.videosByCategory[category] | filter:{title: vm.search}\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-gt-md=\\\"row\\\" layout-gt-lg=\\\"row\\\" class=\\\"pr-16 pb-16\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-sm=\\\"33\\\" flex-gt-md=\\\"25\\\" \\nflex-gt-lg=\\\"20\\\"><div flex-gt-sm=\\\"25\\\" flex-gt-md=\\\"25\\\" flex-gt-lg=\\\"25\\\" class=\\\"pt-5\\\"><img \\nng-click=\\\"vm.showDialog($event, video.link)\\\" src=\\\"https://img.youtube.com/vi/{{video.link}}/0.jpg\\\" \\nclass=\\\"cursor-pointer\\\"></div><div class=\\\"ml-8\\\" flex><h3 ng-click=\\\"vm.showDialog($event, video.link)\\\" \\nclass=\\\"cursor-pointer m-0\\\">{{video.title}}</h3><h4 ng-click=\\\"vm.showDialog($event, video.link)\\\" \\nclass=\\\"cursor-pointer secondary-text m-0\\\">{{video.description}}</h4></div></div><div \\nng-if=\\\"!vm.videosByCategory[category].length\\\"><em class=\\\"secondary-text\\\">\\nNo se han encontrado coincidencias con {{vm.search}}</em></div></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/b2b-ecommerce/b2b-ecommerce.html\",\"<div id=\\\"b2b-ecommerce\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header mb-0 pb-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"B2B_ECOMMERCE.B2B_ECOMMERCE\\\">B2B Ecommerce</span></div><div \\nclass=\\\"content ml-8 mb-8 mr-8\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"B2B_ECOMMERCE.DETAILS\\\">Details</span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"form\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"vm.saveB2bEcommerce()\\\"><div layout=\\\"row\\\" layout-wrap \\nclass=\\\"md-padding\\\"><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block\\\"><label \\ntranslate=\\\"B2B_ECOMMERCE.SLUG\\\"></label><md-icon md-font-icon=\\\"icon-web\\\" class=\\\"icon\\\"></md-icon><input type=\\\"text\\\" \\nname=\\\"slug\\\" ng-model=\\\"vm.b2bEcommerce.slug\\\" required \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nclass=\\\"hint secondary-text\\\" ng-bind-html=\\\"vm.b2bEcommerce.getFullUrl()\\\"></div><div ng-messages=\\\"form.slug.$error\\\" \\nng-show=\\\"form.slug.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"B2B_ECOMMERCE.PUBLIC_URL_FIELD_REQUIRED\\\"></span></div></div></md-input-container></div><div class=\\\"pr-10\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.PUBLIC_URL\\\"></label>\\n<md-icon md-font-icon=\\\"icon-web\\\" class=\\\"icon\\\"></md-icon><input type=\\\"text\\\" name=\\\"domain\\\" \\nng-model=\\\"vm.b2bEcommerce.domain\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nng-messages=\\\"form.domain.$error\\\" ng-show=\\\"form.domain.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"B2B_ECOMMERCE.PUBLIC_URL_FIELD_REQUIRED\\\"></span></div></div></md-input-container></div><div class=\\\"pr-10\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.WAREHOUSE\\\"></label>\\n<md-icon md-font-icon=\\\"icon-store\\\" class=\\\"icon\\\"></md-icon><md-select ng-model=\\\"vm.b2bEcommerce.warehouse\\\" \\nname=\\\"warehouse\\\" required translate translate-attr-placeholder=\\\"B2B_ECOMMERCE.WAREHOUSE\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"vm.searchWarehouse\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'B2B_ECOMMERCE.SEARCH_WAREHOUSE\\' | translate }}\\\"></md-select-header><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchWarehouse\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div ng-messages=\\\"form.warehouse.$error\\\" ng-show=\\\"form.warehouse.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"B2B_ECOMMERCE.FIELD_REQUIRED\\\"></span></div></div></md-input-container></div><div\\n class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block\\\"><md-icon md-font-icon=\\\"icon-store\\\" \\nclass=\\\"icon\\\"></md-icon><label translate=\\\"SITE.WAREHOUSES\\\">Warehouses</label><md-select class=\\\"warehouse-multiselector\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\" \\nng-model=\\\"vm.b2bEcommerce.warehouses\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" required md-on-close=\\\"vm.searchWarehouse = \\'\\'\\\" \\nmultiple=\\\"multiple\\\"><md-select-header class=\\\"demo-select-header\\\"><input ng-model=\\\"vm.searchWarehouse\\\" type=\\\"search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"demo-header-searchbox md-text\\\"></md-select-header><md-optgroup><md-option ng-value=\\\"warehouse.id\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | filter: vm.searchWarehouse | orderBy: \\'name\\'\\\">{{warehouse.name}}</md-option>\\n</md-optgroup></md-select></md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container \\nclass=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.PRICING_TIER\\\"></label><md-icon md-font-icon=\\\"icon-layers\\\" \\nclass=\\\"icon\\\"></md-icon><md-select ng-model=\\\"vm.b2bEcommerce.pricing_tier\\\" name=\\\"pricing_tier\\\" required translate \\ntranslate-attr-placeholder=\\\"B2B_ECOMMERCE.PRICING_TIER\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"vm.searchPricingTier\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'B2B_ECOMMERCE.SEARCH_PRICING_TIER\\' | translate }}\\\"></md-select-header><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.searchPricingTier | orderBy: \\'position\\'\\\" \\nng-value=\\\"pricingTier.id\\\">{{pricingTier.name}}</md-option></md-select><div ng-messages=\\\"form.pricing_tier.$error\\\" \\nng-show=\\\"form.pricing_tier.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"B2B_ECOMMERCE.FIELD_REQUIRED\\\"></span></div></div></md-input-container></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.login_required\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerces.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.LOGIN_REQUIRED\\' | translate }}</md-checkbox></div></div><h3 translate=\\\"B2B_ECOMMERCE.MENU\\\" \\nclass=\\\"text-bold\\\"></h3><div layout=\\\"row\\\" layout-wrap class=\\\"md-padding\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"100\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.show_menu_option_all\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.SHOW_ALL_PRODUCTS_MENU_OPTION\\' | translate }}</md-checkbox></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\"><md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.TYPE_OF_MENU\\\"></label><md-select \\nng-model=\\\"vm.b2bEcommerce.menu_type\\\" name=\\\"menu_type\\\" required translate \\ntranslate-attr-placeholder=\\\"B2B_ECOMMERCE.TYPE_OF_MENU\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-option \\nng-repeat=\\\"(key, value) in vm.B2B_ECOMMECE_MENU_TYPES\\\" ng-value=\\\"value\\\">{{\\'B2B_ECOMMERCE.\\' + key |translate}}\\n</md-option></md-select></md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\" \\nng-if=\\\"vm.b2bEcommerce.menu_type === vm.B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_MIXED || vm.b2bEcommerce.menu_type === vm.B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_CATEGORIES\\\">\\n<md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.VISIBLE_CATEGORIES\\\"></label><md-select \\nng-model=\\\"vm.b2bEcommerce.selected_categories\\\" name=\\\"selected_categories\\\" multiple=\\\"true\\\" translate \\ntranslate-attr-placeholder=\\\"B2B_ECOMMERCE.VISIBLE_CATEGORIES\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\">\\n<md-option ng-repeat=\\\"category in vm.categories\\\" ng-value=\\\"category.id\\\">&nbsp;{{category.name}}</md-option></md-select>\\n</md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\" \\nng-if=\\\"vm.b2bEcommerce.menu_type === vm.B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_MIXED || vm.b2bEcommerce.menu_type === vm.B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_SEASONS\\\">\\n<md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.VISIBLE_SEASONS\\\"></label><md-select \\nng-model=\\\"vm.b2bEcommerce.selected_seasons\\\" name=\\\"selected_seasons\\\" multiple=\\\"true\\\" translate \\ntranslate-attr-placeholder=\\\"B2B_ECOMMERCE.VISIBLE_SEASONS\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\">\\n<md-option ng-repeat=\\\"season in vm.seasons\\\" ng-value=\\\"season.id\\\">&nbsp;{{season.name}}</md-option></md-select>\\n</md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\" \\nng-if=\\\"vm.b2bEcommerce.menu_type === vm.B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_MIXED || vm.b2bEcommerce.menu_type === vm.B2B_ECOMMECE_MENU_TYPES.MENU_TYPE_COLLECTIONS\\\">\\n<md-input-container class=\\\"md-block\\\"><label translate=\\\"B2B_ECOMMERCE.VISIBLE_COLLECTIONS\\\"></label><md-select \\nng-model=\\\"vm.b2bEcommerce.selected_collections\\\" name=\\\"selected_collections\\\" multiple=\\\"true\\\" translate \\ntranslate-attr-placeholder=\\\"B2B_ECOMMERCE.VISIBLE_COLLECTIONS\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\">\\n<md-option ng-repeat=\\\"collection in vm.collections\\\" ng-value=\\\"collection.id\\\">&nbsp;{{collection.code}}</md-option>\\n</md-select></md-input-container></div></div><h3 translate=\\\"B2B_ECOMMERCE.FILTERS\\\" class=\\\"text-bold\\\"></h3><div \\nlayout=\\\"row\\\" layout-wrap class=\\\"md-padding\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\">\\n<md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_category\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_CATEGORY\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_subcategory\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_SUBCATEGORY\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_season\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_SEASON\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_collection\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_COLLECTION\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_color\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_COLOR\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_size\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_SIZE\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_weight\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_WEIGHT\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_brand\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_BRAND\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_price\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_PRICE\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_attributes\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_ATTRIBUTE\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.filter_by_stock\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.FILTER_BY_STOCK\\' | translate }}</md-checkbox></div></div><h3 translate=\\\"B2B_ECOMMERCE.PRODUCTS\\\" \\nclass=\\\"text-bold\\\"></h3><div layout=\\\"row\\\" layout-wrap class=\\\"md-padding\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.show_retail_prices\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.SHOW_RETAIL_PRICES\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.show_stock\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.SHOW_STOCK\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.show_attributes\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.SHOW_ATTRIBUTES\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.infinite_scroll\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.INFINITE_SCROLL\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.crop_product_images\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.CROP_PRODUCT_IMAGES\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex ng-model=\\\"vm.b2bEcommerce.quick_add_products\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.ADD_FROM_LIST_PRODUCTS\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox flex \\nng-model=\\\"vm.b2bEcommerce.show_color_images_in_product_list\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.SHOW_COLOR_IMAGES_IN_THE_PRODUCT_LIST\\' | translate }}</md-checkbox></div></div><h3 \\ntranslate=\\\"B2B_ECOMMERCE.STOCK\\\" class=\\\"text-bold\\\"></h3><div layout=\\\"column\\\" class=\\\"md-padding\\\"><div layout=\\\"row\\\" \\nflex=\\\"100\\\" layout-wrap><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block mt-0\\\">\\n<md-checkbox flex class=\\\"no-margin\\\" ng-model=\\\"vm.b2bEcommerce.allocate_orders\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nlayout=\\\"column\\\">{{\\'B2B_ECOMMERCE.ALLOCATE_ORDERS\\' | translate }} <span class=\\\"secondary-text\\\">\\n{{\\'B2B_ECOMMERCE.ALLOCATE_ORDERS_INFO\\' | translate }}</span></div></md-checkbox></md-input-container></div><div \\nclass=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block mt-0\\\"><md-checkbox flex class=\\\"no-margin\\\" \\nng-model=\\\"vm.b2bEcommerce.show_products_without_stock\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nlayout=\\\"column\\\">{{\\'B2B_ECOMMERCE.SHOW_PRODUCTS_WITHOUT_STOCK\\' | translate }}</div></md-checkbox></md-input-container>\\n</div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block mt-0\\\"><md-checkbox flex \\nclass=\\\"no-margin\\\" ng-model=\\\"vm.b2bEcommerce.display_lead_times_out_of_stock\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.DISPLAY_LEAD_TIME_WHEN_OUT_OF_STOCK\\' | translate }}</md-checkbox></md-input-container></div><div \\nclass=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block mt-0\\\"><md-checkbox flex class=\\\"no-margin\\\" \\nng-model=\\\"vm.b2bEcommerce.display_lead_times_on_backorder\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.DISPLAY_LEAD_TIME_ON_BACKORDER\\' | translate }}</md-checkbox></md-input-container></div></div><div \\nlayout=\\\"row\\\" layout-wrap class=\\\"mt-10\\\" flex=\\\"100\\\"><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container \\nclass=\\\"md-block m-0\\\"><label translate=\\\"B2B_ECOMMERCE.GLOBAL_LEAD_TIME_PREFIX\\\"></label><input \\nng-model=\\\"vm.b2bEcommerce.global_lead_time_prefix\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n</md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\">\\n<label translate=\\\"B2B_ECOMMERCE.GLOBAL_LEAD_TIME\\\"></label><input ng-model=\\\"vm.b2bEcommerce.global_lead_time\\\" \\ntype=\\\"number\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n</md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\">\\n<label translate=\\\"B2B_ECOMMERCE.GLOBAL_LEAD_TIME_UNITS\\\"></label><md-select \\nng-model=\\\"vm.b2bEcommerce.global_lead_time_units\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\')\\\">\\n<md-option ng-value=\\\"\\'DAYS\\'\\\">{{\\'B2B_ECOMMERCE.GLOBAL_LEAD_TIME_UNIT_DAYS\\' |translate}}</md-option><md-option \\nng-value=\\\"\\'WEEKS\\'\\\">{{\\'B2B_ECOMMERCE.GLOBAL_LEAD_TIME_UNIT_WEEKS\\' |translate}}</md-option><md-option \\nng-value=\\\"\\'MONTHS\\'\\\">{{\\'B2B_ECOMMERCE.GLOBAL_LEAD_TIME_UNIT_MONTHS\\' |translate}}</md-option></md-select>\\n</md-input-container></div></div><label ng-if=\\\"vm.b2bEcommerce.global_lead_time_prefix\\\">\\n{{\\'B2B_ECOMMERCE.GLOBAL_LEAD_TIME_PREVIEW\\' |translate}}</label><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"leat-time-container md-padding\\\" ng-if=\\\"vm.b2bEcommerce.global_lead_time_prefix\\\"><div class=\\\"leat-time-banner\\\">\\n{{vm.getLeatTimePreview()}}</div></div></div><h3 translate=\\\"B2B_ECOMMERCE.CONTACT_FIELDS\\\" class=\\\"text-bold\\\">\\nSocial media links</h3><div layout=\\\"row\\\" layout-wrap class=\\\"md-padding\\\"><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<md-input-container class=\\\"md-block m-0\\\"><label>{{\\'B2B_ECOMMERCE.FOOTER_PHONE\\' | translate}}</label><md-icon \\nmd-font-icon=\\\"icon-phone\\\" class=\\\"icon\\\"></md-icon><input type=\\\"text\\\" name=\\\"phone\\\" ng-model=\\\"vm.b2bEcommerce.phone\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n</md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\">\\n<label>{{\\'B2B_ECOMMERCE.FOOTER_MAIL\\' | translate}}</label><md-icon md-font-icon=\\\"icon-email\\\" class=\\\"icon\\\"></md-icon>\\n<input type=\\\"email\\\" name=\\\"email\\\" ng-model=\\\"vm.b2bEcommerce.email\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n</md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\">\\n<label>Instagram</label><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/instagram.e5f5d20a.svg\\\" class=\\\"icon\\\">\\n</md-icon><input type=\\\"url\\\" name=\\\"instagram_link\\\" ng-model=\\\"vm.b2bEcommerce.instagram_link\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nng-messages=\\\"form.instagram_link.$error\\\" ng-show=\\\"form.instagram_link.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"url\\\">\\n<span translate=\\\"B2B_ECOMMERCE.URL_NOT_VALID\\\"></span></div></div></md-input-container></div><div class=\\\"pr-10\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\"><label>Facebook</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/facebook.fedb3809.svg\\\" class=\\\"icon\\\"></md-icon><input type=\\\"url\\\" \\nname=\\\"facebook_link\\\" ng-model=\\\"vm.b2bEcommerce.facebook_link\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nng-messages=\\\"form.facebook_link.$error\\\" ng-show=\\\"form.facebook_link.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"url\\\"><span \\ntranslate=\\\"B2B_ECOMMERCE.URL_NOT_VALID\\\"></span></div></div></md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\"><label>YouTube</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/youtube.9ab2f8ab.svg\\\" class=\\\"icon\\\"></md-icon><input type=\\\"url\\\" \\nname=\\\"youtube_link\\\" ng-model=\\\"vm.b2bEcommerce.youtube_link\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nng-messages=\\\"form.youtube_link.$error\\\" ng-show=\\\"form.youtube_link.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"url\\\"><span \\ntranslate=\\\"B2B_ECOMMERCE.URL_NOT_VALID\\\"></span></div></div></md-input-container></div><div class=\\\"pr-10\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><md-input-container class=\\\"md-block m-0\\\"><label>X (Twitter)</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/x.a915b798.svg\\\" class=\\\"icon\\\"></md-icon><input type=\\\"url\\\" \\nname=\\\"twitter_link\\\" ng-model=\\\"vm.b2bEcommerce.twitter_link\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\"><div \\nng-messages=\\\"form.twitter_link.$error\\\" ng-show=\\\"form.twitter_link.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"url\\\"><span \\ntranslate=\\\"B2B_ECOMMERCE.URL_NOT_VALID\\\"></span></div></div></md-input-container></div></div>\\n<nd-contracted-plan-limit-alert-box ng-if=\\\"vm.contractedPlanLimit && !vm.b2bEcommerce.id\\\" \\ncontracted-plan-limit=\\\"vm.contractedPlanLimit\\\"></nd-contracted-plan-limit-alert-box><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex \\nhas-permission=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerces.b2b_ecommerce.update\\\"><md-button\\n ng-click=\\\"vm.cancelChanges()\\\" class=\\\"stroked\\\" ng-disabled=\\\"vm.saveingB2bEcommerce\\\">{{\\'GENERAL.CANCEL\\' | translate }}\\n</md-button><md-button class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!form.$valid\\\" ng-disabled=\\\"vm.saveingB2bEcommerce\\\" \\ntype=\\\"submit\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saveingB2bEcommerce\\\" \\nmd-diameter=\\\"24px\\\" class=\\\"mr-5\\\"></md-progress-circular>{{\\'GENERAL.SAVE\\' | translate }}</div></md-button></div></form>\\n</md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/b2b-ecommerces/b2b-ecommerces.html\",\"<div id=\\\"b2b-ecommerces\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"B2B_ECOMMERCE.B2B_ECOMMERCES\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button ng-if=\\\"vm.showOldCreateB2bButton\\\" \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create\\\" \\nui-sref=\\\"app.wholesale.b2b_ecommerces.b2b_ecommerce\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'B2B_ECOMMERCE.NEW_B2B_ECOMMERCE\\' | translate}}</div></md-button>\\n<md-button ng-if=\\\"vm.hasSubscription\\\" class=\\\"md-primary md-raised\\\" \\nhas-permission-and-feature=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create\\\" \\nui-sref=\\\"app.wholesale.b2b_ecommerces.b2b_ecommerce\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'B2B_ECOMMERCE.NEW_B2B_ECOMMERCE\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\">\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container \\nmd-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input \\nid=\\\"ecommerce-search\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/deliveries/deliveries.html\",\"<div id=\\\"deliveries\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div\\n class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"NAVIGATION.DELIVERIES\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" ui-sref=\\\"app.wholesale.sales.new.details\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'SALE.NEW_SALE\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav \\nclass=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" \\nms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/wholesale/views/deliveries/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div\\n layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md \\nng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.getFilterNotifications() != 0\\\"><span class=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span>\\n<md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"sale-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><div layout=\\\"row\\\" class=\\\"mr-8 ml-16\\\"><md-button \\nclass=\\\"mr-10 w-40\\\" ng-click=\\\"vm.filterDates()\\\"><md-icon md-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip>\\n{{\\'INVOICES.FILTER_DATES\\' | translate}}</md-tooltip></md-button></div><span ng-if=\\\"vm.filterDateRange.dateStart\\\">\\n{{vm.filterDateRange.dateStart | date:\\'dd/MM/yyyy\\'}} - {{vm.filterDateRange.dateEnd | date:\\'dd/MM/yyyy\\'}}</span></div>\\n<md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\">\\n</table></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presale/presale.html\",\"<div id=\\\"wholesale-presale\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\" flex ms-scroll><div \\nclass=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex>\\n<md-button class=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.wholesale.presales\\\" translate \\ntranslate-attr-aria-label=\\\"PRESALE.GO_TO_PRESALE_COLLECTIONS\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<div class=\\\"h2\\\" translate=\\\"PRESALE.PRESALE_COLLECTION\\\"></div><div class=\\\"h2 secondary-text ml-10 pl-10 border-left\\\">\\n{{vm.presale.code}}</div></div><md-button class=\\\"m-0 mr-16 md-warn stroked\\\" translate=\\\"GENERAL.DELETE\\\" \\nhas-permission=\\\"wholesale.presales.delete\\\" ng-click=\\\"vm.deleteCollection($event)\\\"></md-button></div></div></div><div \\nclass=\\\"content\\\" layout=\\\"column\\\" flex><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" \\nnav-bar-aria-label=\\\"navigation links\\\" data-test-id=\\\"product-tab-bar\\\"><md-nav-item \\nmd-nav-sref=\\\"app.wholesale.presales.presale.details\\\" has-permission=\\\"app.wholesale.presales.presale.details\\\" \\nname=\\\"details\\\">{{\\\"PRESALE.DETAILS\\\" | translate}}</md-nav-item><md-nav-item \\nmd-nav-sref=\\\"app.wholesale.presales.presale.products\\\" has-permission=\\\"app.wholesale.presales.presale.products\\\" \\nname=\\\"products\\\">{{\\\"PRESALE.PRODUCTS\\\" | translate}}</md-nav-item><md-nav-item \\nmd-nav-sref=\\\"app.wholesale.presales.presale.preorders\\\" has-permission=\\\"app.wholesale.presales.presale.preorders\\\" \\nname=\\\"preorders\\\">{{\\\"PRESALE.PREORDERS\\\" | translate}}</md-nav-item><md-nav-item \\nmd-nav-sref=\\\"app.wholesale.presales.presale.preordered_products\\\" \\nhas-permission=\\\"app.wholesale.presales.presale.preorderedproducts\\\" name=\\\"preorders\\\">\\n{{\\\"PRESALE.PREORDERED_PRODUCTS\\\" | translate}}</md-nav-item><md-nav-item \\nmd-nav-sref=\\\"app.wholesale.presales.presale.purchases\\\" has-permission=\\\"app.wholesale.presales.presale.purchases\\\" \\nname=\\\"purchases\\\">{{\\\"PRESALE.PURCHASES\\\" | translate}}</md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presales/presales.html\",\"<div id=\\\"wholesale-presales\\\" class=\\\"page-layout carded left-sidenav\\\" layout=\\\"row\\\"><div class=\\\"center\\\" layout=\\\"column\\\" \\nflex><div class=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"PRESALES.PRESALE_COLLECTIONS\\\"></span><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"wholesale.presales.create\\\" ng-click=\\\"vm.newCollection($even)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'PRESALES.NEW_PRESALE_COLLECTION\\' | translate}}</div></md-button></div></div><div layout=\\\"row\\\" class=\\\"content-card\\\">\\n<md-sidenav class=\\\"sidenav border-right\\\" md-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" \\nmd-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/wholesale/views/presales/sidenavs/main/main-sidenav.html\\'\\\"></div></md-content></md-sidenav>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-xs hide-sm hide-md \\nng-click=\\\"vm.sidenavLockedOpen = !vm.sidenavLockedOpen\\\" aria-label=\\\"Toggle left sidenav\\\"><md-icon \\nmd-font-icon=\\\"icon-filter-variant\\\" class=\\\"icon\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.filtersNotifications\\\"><span class=\\\"notification-number\\\">{{vm.filtersNotifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container md-no-float \\nclass=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"collection-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/sale.html\",\"<div id=\\\"sale\\\" class=\\\"page-layout simple right-sidenav\\\" layout=\\\"row\\\"><div class=\\\"page-layout simple tabbed\\\" \\nlayout=\\\"column\\\" flex ms-scroll><div class=\\\"header no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button ng-if=\\\"!vm.isPreorderPage && !vm.sale.collection\\\" \\nclass=\\\"md-icon-button black-fg\\\" ui-sref=\\\"app.wholesale.sales\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon>\\n</md-button><md-button ng-if=\\\"vm.isPreorderPage || vm.sale.collection\\\" class=\\\"md-icon-button black-fg\\\" \\nui-sref=\\\"app.wholesale.presales.presale.preorders({idPresale:vm.sale.collection})\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div \\nng-if=\\\"!vm.isNewSale\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"h2\\\" \\nng-if=\\\"!vm.sale.collection && !vm.sale.is_devolution\\\" translate=\\\"SALE.SALE_ORDER\\\"></div><div class=\\\"h2\\\" \\nng-if=\\\"!vm.sale.collection  && vm.sale.is_devolution\\\" translate=\\\"SALE.SALE_ORDER_DEVOLUTION\\\"></div><div \\nng-if=\\\"vm.sale.collection\\\" class=\\\"h2\\\" translate=\\\"PRESALE.PRESALE_ORDER\\\"></div><div \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\"><span data-test-id=\\\"sale-order-autocode\\\">{{vm.sale.autocode}}</span>\\n</div><div flex hide-xs hide-sm hide-md ng-if=\\\"vm.sale.source_warehouse\\\" \\nclass=\\\"h2 secondary-text ml-10 pl-10 border-left\\\"><span flex translate=\\\"SALE.FROM_WAREHOUSE\\\"></span>: <span flex>\\n{{vm.sale.source_warehouse_name}}</span></div><span class=\\\"secondary-text ml-10 pl-10 border-left left-bar\\\"></span> \\n<span class=\\\"status status-badge\\\" ng-class=\\\"vm.getStatusColorClass()\\\">{{vm.getStatusLabel()}}</span></div><div \\nng-if=\\\"vm.isNewSale\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div ng-if=\\\"!vm.isPreorderPage && !vm.isDevolution\\\" \\nclass=\\\"h2\\\" translate=\\\"SALE.NEW_SALE\\\"></div><div ng-if=\\\"!vm.isPreorderPage && vm.isDevolution\\\" class=\\\"h2\\\" \\ntranslate=\\\"SALE.NEW_DEVOLUTION\\\"></div><div ng-if=\\\"vm.isPreorderPage\\\" class=\\\"h2\\\" translate=\\\"PRESALE.NEW_PRESALE_ORDER\\\">\\n</div></div><span flex></span><md-button class=\\\"m-0 mr-16 md-primary stroked\\\" has-permission=\\\"wholesale.sales.delete\\\" \\nng-click=\\\"vm.finish()\\\" \\nng-if=\\\"!vm.changingStatus && vm.sale.status === vm.saleOrderStatus.SALE_ORDER_STATUS_PARTIALLY_SHIPPED\\\" \\ntranslate=\\\"SALE.FINISH\\\"></md-button><md-button class=\\\"m-0 mr-16 md-warn stroked\\\" translate=\\\"SALE.DELETE\\\" \\nng-if=\\\"vm.sale.status == 1 || vm.sale.status == 10 || vm.sale.status == 11\\\" has-permission=\\\"wholesale.sales.delete\\\" \\nng-click=\\\"vm.deleteSale()\\\"></md-button></div></div></div><div class=\\\"content pb-16\\\" layout=\\\"column\\\" flex><md-nav-bar \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\" md-no-ink-bar=\\\"true\\\" nav-bar-aria-label=\\\"navigation links\\\" \\ndata-test-id=\\\"product-tab-bar\\\" ng-if=\\\"!vm.isNewSale\\\"><md-nav-item md-nav-sref=\\\"app.wholesale.sales.sale.details\\\" \\nhas-permission=\\\"app.wholesale.sales.sale.details\\\" name=\\\"details\\\"><span translate=\\\"SALE.DETAILS\\\">Details</span>\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.wholesale.sales.sale.products\\\" \\nhas-permission=\\\"app.wholesale.sales.sale.products\\\" name=\\\"products\\\"><span translate=\\\"SALE.ORDER\\\">Order</span>\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.wholesale.sales.sale.deliveries\\\" \\nhas-permission=\\\"app.wholesale.sales.sale.deliveries\\\" name=\\\"deliveries\\\" \\nng-if=\\\"vm.sale.status >= 2 && vm.sale.status <= 10\\\"><span translate=\\\"SALE.DELIVERY_NOTES\\\">Delivery Notes</span>\\n</md-nav-item><md-nav-item md-nav-sref=\\\"app.wholesale.sales.sale.invoicing\\\" \\nhas-permission=\\\"app.wholesale.sales.sale.invoicing\\\" name=\\\"invoicing\\\"><span translate=\\\"SALE.INVOICING\\\"></span>\\n</md-nav-item></md-nav-bar><md-content ui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content>\\n</div></div><md-sidenav class=\\\"sidenav md-sidenav-right\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-md\\') && vm.barcodeLogOpened\\\" \\nmd-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper><div ng-repeat=\\\"pendingBarcode in vm.pendingBarcodes\\\"><div \\nclass=\\\"p-5 border-bottom\\\" layout=\\\"column\\\" layout-align=\\\"center start\\\" style=\\\"background-color: #36C1F1; height: 120px\\\" \\nng-if=\\\"$index==0\\\" \\nng-class=\\\"{\\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\'}\\\">\\n<div class=\\\"md-padding\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><h1 class=\\\"m-0 p-0\\\">\\n{{pendingBarcode.size}} - {{pendingBarcode.color}}</h1><h2 class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</h2><p \\nclass=\\\"m-0 p-0 secondary-text\\\">{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 pl-15\\\" \\nng-if=\\\"pendingBarcode.status != \\'success\\'\\\"><md-progress-circular ng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" \\nmd-diameter=\\\"30px\\\" class=\\\"mh-8\\\"></md-progress-circular><p>{{pendingBarcode.barcode}}</p></div></div><div \\nclass=\\\"m-0 p-15 border-bottom\\\" ng-if=\\\"$index!=0\\\" \\nng-class=\\\"{\\'white-fg red-500-bg\\': pendingBarcode.status == \\'error\\', \\'yellow-300-bg\\': pendingBarcode.status == \\'pending\\', \\'white-bg\\': pendingBarcode.status == \\'success\\'}\\\">\\n<div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status == \\'success\\'\\\"><p class=\\\"m-0 p-0\\\">{{pendingBarcode.code}}</p><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.size}} - {{pendingBarcode.color}}</p><p class=\\\"m-0 p-0 secondary-text\\\">\\n{{pendingBarcode.barcode}}</p></div><div class=\\\"m-0 p-5\\\" ng-if=\\\"pendingBarcode.status != \\'success\\'\\\" layout=\\\"row\\\"><p \\nclass=\\\"m-0 p-0\\\">{{pendingBarcode.barcode}}</p><span flex></span><md-progress-circular \\nng-if=\\\"pendingBarcode.status == \\'pending\\'\\\" md-diameter=\\\"10px\\\" class=\\\"mh-8\\\"></md-progress-circular></div></div></div>\\n</md-sidenav></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sales/sales.html\",\"<div class=\\\"page-layout carded left-sidenav\\\" id=\\\"sales\\\" layout=\\\"row\\\"><div class=\\\"center\\\" flex layout=\\\"column\\\"><div \\nclass=\\\"header no-margin\\\" layout=\\\"row\\\"><span class=\\\"h2\\\" translate=\\\"SALES.SALES\\\"></span><div flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"m-0 mr-10 md-primary stroked\\\" has-permission=\\\"wholesale.sales.create\\\" \\nnd-track-click=\\\"new devolution\\\" ui-sref=\\\"app.wholesale.sales.new.details({type:\\'devolution\\'})\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'SALE.NEW_DEVOLUTION\\' | translate}}</div></md-button><md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"wholesale.sales.create\\\" nd-track-click=\\\"new wholesale\\\" \\nui-sref=\\\"app.wholesale.sales.new.details({type:\\'sale\\'})\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nclass=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'SALE.NEW_SALE\\' | translate}}</div></md-button></div></div><div \\nclass=\\\"content mb-16 flex-scrollable flex-noshrink\\\" layout=\\\"row\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" \\nmd-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nclass=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(status.code)\\\" name=\\\"{{status.code}}\\\" \\nng-class=\\\"{\\'border-right\\':status.code==\\'6\\'||status.code==\\'9\\'}\\\" \\nng-if=\\\"status.code!=\\'10\\' && status.code!=\\'11\\' && status.code!=\\'3\\' && status.code!=\\'5\\' && status.code!=\\'8\\'\\\" \\nng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span>\\n{{\\'SALES.TAB_\\' + status.name | translate}}</span><div class=\\\"custom-badge status-badge\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-class=\\\"vm.orderStatusColors[status.code]\\\"><md-progress-circular md-diameter=\\\"14px\\\" \\nng-if=\\\"vm.loading\\\"></md-progress-circular><span ng-if=\\\"!vm.loading\\\">{{vm.totalsByStatus[status.code]||0 | number:0}}\\n</span></div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'all\\')\\\" name=\\\"all\\\"><span translate=\\\"GENERAL.ALL\\\"></span></md-nav-item></md-nav-bar>\\n</div><div class=\\\"content-card\\\" layout=\\\"row\\\"><md-sidenav class=\\\"sidenav border-right\\\" md-component-id=\\\"sidenav\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" ms-scroll ms-sidenav-helper><md-content class=\\\"content\\\" \\nflex ms-scroll><div ng-include=\\\"\\'app/main/apps/wholesale/views/sales/sidenavs/main-sidenav.html\\'\\\"></div></md-content>\\n</md-sidenav><div flex layout=\\\"column\\\"><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-md hide-sm hide-xs \\nng-click=\\\"vm.toggleSidenavDesktop(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon>\\n</md-button><div class=\\\"filter-notification\\\" ng-if=\\\"vm.getFilterNotifications() != 0\\\"><span \\nclass=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span><md-icon md-font-icon=\\\"icon-close\\\" \\nng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"sale-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nng-change=\\\"vm.reloadSales()\\\" ng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:200}\\\" placeholder=\\\"Search\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><div class=\\\"mr-8 ml-16\\\" \\nlayout=\\\"row\\\"><md-button class=\\\"mr-10 w-40\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.filterDates()\\\">\\n<md-icon md-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip>{{\\'INVOICES.FILTER_DATES\\' | translate}}</md-tooltip>\\n</md-button></div><span ng-if=\\\"vm.status.filters.startDate\\\">\\n{{vm.status.filters.startDate | date:\\'dd/MM/yyyy\\'}} - {{vm.status.filters.endDate | date:\\'dd/MM/yyyy\\'}}</span></div>\\n<md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><nd-sales-list status=\\\"vm.status\\\">\\n</nd-sales-list></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/pages/sign-up/validate-sign-up-two/dialogs/complete-sign-up-two-dialog.html\",\"<md-dialog layout-padding ms-scroll><div ng-show=\\\"!vm.signUpLoaded && !vm.error\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"signup-content\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular md-mode=\\\"indeterminate\\\" md-diameter=\\\"40\\\">\\n</md-progress-circular></div></div></div></div><div ng-if=\\\"vm.signUpLoaded\\\"><nd-signup-complete-form \\nng-if=\\\"vm.getFormVersion() === \\'1\\'\\\" form-version=\\\"1\\\" signup=\\\"vm.signUp\\\" \\ngeneration-in-progress=\\\"vm.generationInProgress\\\" form-done-callback=\\\"vm.formDoneCallback\\\"></nd-signup-complete-form>\\n<nd-signup-complete-form ng-if=\\\"vm.getFormVersion() === \\'2\\'\\\" form-version=\\\"2\\\" signup=\\\"vm.signUp\\\" \\ngeneration-in-progress=\\\"vm.generationInProgress\\\" form-done-callback=\\\"vm.formDoneCallback\\\"></nd-signup-complete-form>\\n</div><div layout=\\\"column\\\" class=\\\"signup-content\\\" ng-if=\\\"vm.error\\\"><h2 class=\\\"mt-0\\\">{{ vm.getErrorTitle() | translate}}\\n</h2><div ng-class=\\\"vm.getErrorClass()\\\" class=\\\"did-you-know\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-alert\\\"></md-icon></div><div \\nclass=\\\"did-you-know-message\\\" flex><span translate=\\\"{{vm.getErrorMessage()}}\\\"></span></div></div></div></div>\\n</md-dialog>\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html\",\"<md-button class=\\\"ms-stepper-navigation-item\\\" \\nng-class=\\\"{\\'current\\': MsStepper.isStepCurrent(stepInfo.stepNumber), \\'valid\\': MsStepper.isStepValid(stepInfo.stepNumber), \\'disabled\\': MsStepper.isStepDisabled(stepInfo.stepNumber), \\'optional\\': MsStepper.isStepOptional(stepInfo.stepNumber)}\\\" \\nng-click=\\\"MsStepper.gotoStep(stepInfo.stepNumber)\\\" ng-disabled=\\\"MsStepper.isStepDisabled(stepInfo.stepNumber)\\\" \\nng-hide=\\\"MsStepper.isStepHidden(stepInfo.stepNumber)\\\" aria-label=\\\"Stepper navigation button\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"step\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\nng-if=\\\"!MsStepper.isStepValid(stepInfo.stepNumber) || MsStepper.isStepOptional(stepInfo.stepNumber)\\\"><i \\nclass=\\\"icon icon-checkbox-blank-circle-outline s18 md-accent-fg\\\"></i> </span><span \\nng-if=\\\"MsStepper.isStepValid(stepInfo.stepNumber) && !MsStepper.isStepOptional(stepInfo.stepNumber)\\\"><i \\nclass=\\\"icon icon-check-circle s18 md-accent-fg\\\"></i></span></div><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div \\nclass=\\\"title\\\" ng-if=\\\"stepInfo.stepTitleTranslate\\\">{{stepInfo.stepTitleTranslate | translate }}</div><div class=\\\"title\\\" \\nng-if=\\\"!stepInfo.stepTitleTranslate\\\">{{stepInfo.stepTitle}}</div><div class=\\\"subtitle\\\" \\nng-if=\\\"MsStepper.isStepOptional(stepInfo.stepNumber)\\\">Optional</div></div></md-button><div \\nclass=\\\"ms-stepper-step-content\\\" ng-transclude></div><div class=\\\"ms-stepper-controls\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-show=\\\"MsStepper.isStepCurrent(stepInfo.stepNumber)\\\"><md-button \\nclass=\\\"md-accent md-raised\\\" ng-disabled=\\\"MsStepper.isFirstStep()\\\" ng-click=\\\"MsStepper.gotoPreviousStep()\\\">Back\\n</md-button><md-button class=\\\"md-accent md-raised\\\" ng-if=\\\"!MsStepper.isLastStep()\\\" \\nng-disabled=\\\"!MsStepper.isStepValid(MsStepper.currentStepNumber)\\\" ng-click=\\\"MsStepper.gotoNextStep()\\\">Next</md-button>\\n<md-button type=\\\"submit\\\" class=\\\"md-accent md-raised\\\" ng-click=\\\"MsStepper.resetForm()\\\" ng-if=\\\"MsStepper.isLastStep()\\\" \\nng-disabled=\\\"!MsStepper.isFormValid()\\\">Submit</md-button></div>\");\n$templateCache.put(\"app/main/apps/account/views/subscriptions/upgrade-plan/upgrade-plan.html\",\"<md-card id=\\\"upgrade-plan\\\" flex=\\\"100\\\" layout=\\\"column\\\"><md-card-header class=\\\"primary-gradient-bg\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><a class=\\\"md-button md-accent-bg md-ink-ripple\\\" \\nhas-permission=\\\"app.account.upgrade_plan.purchase\\\" href=\\\"https://stockagile.com/solicitar-una-llamada/\\\" \\ntarget=\\\"_blank\\\" translate=\\\"UPGRADE_PLAN.CONTACT_WITH_SALES\\\"></a> <a \\nclass=\\\"md-button blue-50-fg stroked-2 md-ink-ripple\\\" has-permission=\\\"app.account.upgrade_plan.purchase\\\" \\nhref=\\\"mailto:sales@stockagile.com\\\">{{\\'UPGRADE_PLAN.SEND_EMAIL\\' | translate }}</a></div></md-card-header>\\n<md-card-content class=\\\"full-height\\\"><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"full-height\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\" class=\\\"p-10\\\" flex><h1 ng-if=\\\"vm.featureData.name\\\" \\ntranslate=\\\"{{ vm.featureData.name }}\\\"></h1><h4 class=\\\"secondary-text\\\" ng-if=\\\"!vm.addOnId\\\" \\ntranslate=\\\"UPGRADE_PLAN.FEATURE_NOT_AVAILABLE\\\"></h4><h4 class=\\\"secondary-text\\\" ng-if=\\\"vm.addOnId\\\" \\ntranslate=\\\"UPGRADE_PLAN.THIS_IS_AN_ADD_ON_FEATURE\\\"></h4><div ng-if=\\\"vm.featureData.description\\\" \\ntranslate=\\\"{{vm.featureData.description}}\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\" \\nng-if=\\\"vm.featureData.landingLink\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"md-primary-fg mr-15\\\"></md-icon><h4 \\ntranslate=\\\"UPGRADE_PLAN.MORE_INFO\\\" translate-values=\\\"{link: vm.featureData.landingLink }\\\" flex></h4></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\" ng-if=\\\"vm.featureData.academyLink\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/school-outline.4417d336.svg\\\" class=\\\"md-primary-fg mr-15\\\"></md-icon><h4 \\ntranslate=\\\"UPGRADE_PLAN.MORE_ACADEMY\\\" translate-values=\\\"{link: vm.featureData.academyLink }\\\" flex></h4></div><md-button\\n ng-if=\\\"vm.addOnId\\\" has-permission=\\\"app.account.upgrade_plan.purchase\\\" ng-disabled=\\\"vm.fetching\\\" \\nclass=\\\"md-primary md-raised full-width\\\" ng-click=\\\"vm.purchaseAddOn()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" ng-if=\\\"!vm.fetching\\\" class=\\\"mr-5\\\">\\n</md-icon><md-progress-circular ng-if=\\\"vm.fetching\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular><span flex>{{\\'UPGRADE_PLAN.ADD_TO_THE_SUBSCRIPTION\\' | translate }}</span></div></md-button><a \\nng-if=\\\"!vm.addOnId\\\" has-permission=\\\"app.account.upgrade_plan.purchase\\\" \\nclass=\\\"md-button md-accent md-ink-ripple full-width\\\" href=\\\"https://stockagile.com/solicitar-una-llamada/\\\" \\ntarget=\\\"_blank\\\" translate=\\\"UPGRADE_PLAN.CONTACT_WITH_SALES\\\"></a></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nflex class=\\\"full-height\\\"><img src=\\\"{{vm.featureData.imageSrc}}\\\" class=\\\"feature-image\\\"></div></div></md-card-content>\\n</md-card>\");\n$templateCache.put(\"app/main/apps/account/views/subscriptions/subscription/subscription.html\",\"<div id=\\\"account-subscription\\\" class=\\\"blank\\\" layout=\\\"column\\\"><div class=\\\"header md-background-bg md-hue-2\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><h2 class=\\\"mh-16\\\" flex translate=\\\"SUBSCRIPTION.YOUR_PLAN\\\"></h2><div \\nclass=\\\"period-switch\\\" ng-if=\\\"vm.showSubscriptionDetails && vm.editing\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\nclass=\\\"monthly-label mr-8 cursor-pointer\\\" ng-click=\\\"vm.yearlyPeriod = false\\\">{{\\'SUBSCRIPTION.MONTHLY\\' | translate }}\\n</span><md-switch ng-model=\\\"vm.yearlyPeriod\\\" ng-change=\\\"vm.periodChanged()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span translate=\\\"SUBSCRIPTION.YEARLY\\\"></span><div><span class=\\\"text-boxed green\\\" \\ntranslate=\\\"SUBSCRIPTION.YEARLY_DISCOUNT\\\"></span></div></div></md-switch></div><span flex></span><md-button \\nclass=\\\"md-primary stroked\\\" ng-if=\\\"vm.showSubscriptionDetails && !vm.editing\\\" ng-click=\\\"vm.setEditing(true)\\\" \\ntranslate=\\\"GENERAL.EDIT\\\"></md-button><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.showSubscriptionDetails && vm.editing\\\"><md-button class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\" \\nng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.setEditing(false)\\\"></md-button><md-button class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.saveSubscription()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n<span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></div></div><div class=\\\"center\\\" layout=\\\"column\\\" flex><div \\nclass=\\\"plans-container\\\" ng-if=\\\"vm.showSubscriptionDetails\\\" ng-class=\\\"{\\'editing\\': vm.editing, \\'readonly\\': !vm.editing}\\\" \\nlayout=\\\"column\\\"><div layout=\\\"column\\\" ng-repeat=\\\"hub in vm.hubs\\\"><h3>{{\\'SUBSCRIPTION.\\' + hub.name | translate }}</h3>\\n<div layout=\\\"row\\\"><div layout=\\\"column\\\" class=\\\"features-column\\\" flex=\\\"25\\\"><div \\nclass=\\\"fixed-header-height mt-8 pb-16 md-background-bg md-hue-2\\\"><div class=\\\"secondary-text mr-16\\\">\\n{{\\'SUBSCRIPTION.\\' + hub.code + \\'_DESCRIPTION\\' | translate }}</div></div><div class=\\\"features-list\\\"><div \\nng-repeat=\\\"feature in vm.mockFeatures[hub.name]\\\"><div class=\\\"feature-name\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\" \\nng-class=\\\"{\\'feature\\': feature.type == \\'feature\\', \\'section\\': feature.type == \\'section\\'}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + feature.name | translate }}<div class=\\\"feature-help\\\">\\n<md-icon md-font-icon=\\\"icon-information-outline\\\" ng-if=\\\"feature.help\\\"><md-tooltip>\\n{{\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + feature.help | translate }}</md-tooltip></md-icon></div><span flex></span></div>\\n</div></div></div></div><div layout=\\\"column\\\" flex=\\\"25\\\" ng-repeat=\\\"plan in vm.getPlansByHub(hub.id)\\\"><div \\nclass=\\\"plan-widget\\\" \\nng-class=\\\"{\\'selected\\': plan.selected, \\'disabled\\': !vm.editing, \\'editing\\': vm.editing, \\'readonly\\': !vm.editing}\\\" \\nng-click=\\\"vm.planClicked(plan)\\\" layout=\\\"column\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"fixed-header-height full-width\\\" \\nng-class=\\\"{\\'selected\\': plan.selected , \\'with-coupon-repeating\\': vm.showDiscountInputs && plan.coupon && plan.coupon.duration === \\'repeating\\'}\\\" \\nlayout=\\\"column\\\" layout-align=\\\"start center\\\"><div class=\\\"checkbox-container\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\">\\n<md-checkbox ng-click=\\\"vm.planClicked(plan)\\\" ng-if=\\\"vm.editing\\\" class=\\\"m-0\\\" ng-model=\\\"plan.selected\\\" \\nng-disabled=\\\"vm.saving\\\"></md-checkbox></div><div class=\\\"plan-name\\\">{{vm.getPlanName(plan)}}</div><div \\nclass=\\\"plan-price\\\" ng-if=\\\"plan.getPrice(vm.period)\\\"><div class=\\\"price\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"!vm.getPlanDiscountAmount(plan)\\\">{{vm.formatPriceWithCurrencyAndPeriod(plan.getPrice(vm.period))}}</div><div \\nclass=\\\"price\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-if=\\\"vm.getPlanDiscountAmount(plan)\\\"><span \\nclass=\\\"text-strike mr-5 secondary-text\\\">{{plan.getPrice(vm.period) | price }}</span> <span>\\n{{vm.formatPriceWithCurrencyAndPeriod(vm.getPlanPrice(plan))}}</span></div></div><nd-coupon-input model=\\\"plan.coupon\\\" \\nng-if=\\\"plan.getPrice(vm.period) && vm.showDiscountInputs\\\" disabled=\\\"!vm.editing || vm.saving\\\" period=\\\"vm.period\\\" \\non-changed=\\\"vm.onCouponChanged()\\\"></nd-coupon-input></div><div class=\\\"plan-features-list\\\"><div class=\\\"plan-feature\\\" \\nng-repeat=\\\"feature in vm.mockFeatures[hub.name]\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nng-if=\\\"feature.type == \\'section\\'\\\" class=\\\"section\\\">&nbsp;</div><div id=\\\"template-{{plan.id}}-{{feature.name}}\\\"></div>\\n</div></div></div></div></div></div></div><md-card ng-if=\\\"vm.showSubscriptionDetails\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"SUBSCRIPTION.YOUR_PLAN_LIMITS\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><table class=\\\"simple\\\"><tr><th translate=\\\"SUBSCRIPTION.LIMIT_NAME\\\"></th><th \\ntranslate=\\\"SUBSCRIPTION.PURCHASES_AMOUNT\\\"></th><th></th><th translate=\\\"SUBSCRIPTION.QUANTITY\\\" class=\\\"text-right\\\"></th>\\n<th translate=\\\"SUBSCRIPTION.PRICE\\\" class=\\\"text-right\\\"></th><th translate=\\\"SUBSCRIPTION.DISCOUNT\\\" class=\\\"text-right\\\">\\n</th><th translate=\\\"SUBSCRIPTION.TOTAL_PRICE\\\" class=\\\"text-right\\\"></th></tr><tr \\nng-if=\\\"!vm.getBillabledPlanLimits().length\\\"><td colspan=\\\"7\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\nclass=\\\"text-italic secondary-text\\\" translate=\\\"SUBSCRIPTION.YOUR_PLAN_DOES_NOT_HAVE_ANY_LIMIT\\\"></span></div></td></tr>\\n<tr ng-repeat=\\\"contractedPlanLimit in vm.getBillabledPlanLimits()\\\"><td>\\n{{\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + contractedPlanLimit.code | translate}}</td><td>\\n{{contractedPlanLimit.current_amount}}/{{contractedPlanLimit.included_amount}}</td><td><nd-coupon-input \\nmodel=\\\"contractedPlanLimit.coupon\\\" ng-if=\\\"vm.showDiscountInputs\\\" disabled=\\\"!vm.editing || vm.saving\\\" \\nperiod=\\\"vm.period\\\" on-changed=\\\"vm.onCouponChanged()\\\"></nd-coupon-input></td><td class=\\\"text-right\\\">\\n{{contractedPlanLimit.contracted_packs}}</td><td class=\\\"text-right\\\">\\n{{contractedPlanLimit.getPrice(vm.period) | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\"><div \\nng-if=\\\"contractedPlanLimit.getDiscountAmount(vm.period)\\\">\\n{{contractedPlanLimit.getDiscountAmount(vm.period) |price }} {{vm.currencyCharacter}}</div></td><td class=\\\"text-right\\\">\\n{{contractedPlanLimit.getTotal(vm.period, true) | price}} {{vm.currencyCharacter}}</td></tr></table></md-card-content>\\n</md-card><md-card ng-if=\\\"vm.showSubscriptionDetails\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"SUBSCRIPTION.YOUR_ADD_ONS\\\"></span></md-card-title-text></md-card-title><md-card-content><table \\nclass=\\\"simple\\\"><tr><th translate=\\\"SUBSCRIPTION.ADD_ON_NAME\\\"></th><th></th><th translate=\\\"SUBSCRIPTION.PRICE\\\" \\nclass=\\\"text-right\\\"></th><th translate=\\\"SUBSCRIPTION.DISCOUNT\\\" class=\\\"text-right\\\"></th><th \\ntranslate=\\\"SUBSCRIPTION.TOTAL_PRICE\\\" class=\\\"text-right\\\"></th></tr><tr ng-if=\\\"!vm.contractedAddOns.length\\\"><td \\ncolspan=\\\"5\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span class=\\\"text-italic secondary-text\\\" \\ntranslate=\\\"SUBSCRIPTION.YOUR_PLAN_DOES_NOT_HAVE_ANY_ADD_ON\\\"></span></div></td></tr><tr \\nng-repeat=\\\"contractedAddOn in vm.contractedAddOns\\\"><td><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-checkbox \\nng-model=\\\"contractedAddOn.selected\\\" ng-disabled=\\\"!vm.editing || vm.saving\\\" \\nng-change=\\\"vm.onAddOnChanged(contractedAddOn)\\\"></md-checkbox><div layout=\\\"column\\\"><div class=\\\"add-on-name\\\">\\n{{\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + contractedAddOn.plan_feature.feature.code | translate}}</div><div \\nclass=\\\"add-on-description secondary-text\\\" \\nng-bind-html=\\\"\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + contractedAddOn.plan_feature.feature.code + \\'_DESCRIPTION\\' | translate\\\">\\n</div></div></div></td><td><nd-coupon-input model=\\\"contractedAddOn.coupon\\\" ng-if=\\\"vm.showDiscountInputs\\\" \\ndisabled=\\\"!vm.editing || vm.saving\\\"></nd-coupon-input></td><td class=\\\"text-right\\\">\\n{{contractedAddOn.getPrice(vm.period, false) | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\"><div \\nng-if=\\\"contractedAddOn.getDiscountAmount(vm.period)\\\">\\n{{contractedAddOn.getDiscountAmount(vm.period) | price}} {{vm.currencyCharacter}}</div></td><td class=\\\"text-right\\\">\\n{{contractedAddOn.getPrice(vm.period, true) | price}} {{vm.currencyCharacter}}</td></tr></table></md-card-content>\\n</md-card><md-card ng-if=\\\"vm.showSubscriptionDetails\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"SUBSCRIPTION.TOTAL\\\"></span></md-card-title-text></md-card-title><md-card-content><table class=\\\"simple\\\"><tr>\\n<th translate=\\\"SUBSCRIPTION.CONCEPT\\\"></th><th translate=\\\"SUBSCRIPTION.QUANTITY\\\" class=\\\"text-right\\\"></th><th \\ntranslate=\\\"SUBSCRIPTION.PRICE\\\" class=\\\"text-right\\\"></th><th translate=\\\"SUBSCRIPTION.DISCOUNT\\\" class=\\\"text-right\\\"></th>\\n<th translate=\\\"SUBSCRIPTION.FINAL_PRICE\\\" class=\\\"text-right\\\"></th></tr><tr ng-repeat=\\\"plan in vm.getSelectedPlans()\\\">\\n<td>{{\\'SUBSCRIPTION.\\' + plan.code | translate}}</td><td class=\\\"text-right\\\">1</td><td class=\\\"text-right\\\">\\n{{plan.getPrice(vm.period) | price }} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\"><div \\nng-if=\\\"vm.getPlanDiscountAmount(plan)\\\">{{vm.getPlanDiscountAmount(plan) | price}} {{vm.currencyCharacter}}</div></td>\\n<td class=\\\"text-right\\\">{{vm.getPlanPrice(plan) | price }} {{vm.currencyCharacter}}</td></tr><tr \\nng-repeat=\\\"contractedPlanLimit in vm.getBillabledPlanLimits()\\\"><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n{{\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + contractedPlanLimit.code | translate}} <span \\nclass=\\\"text-boxed pink text-lowercase ml-5\\\" translate=\\\"SUBSCRIPTION.LIMIT\\\"></span></div></td><td class=\\\"text-right\\\">\\n{{contractedPlanLimit.contracted_packs}}</td><td class=\\\"text-right\\\">\\n{{contractedPlanLimit.getPrice(vm.period) | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\"><div \\nng-if=\\\"contractedPlanLimit.getDiscountAmount(vm.period)\\\">\\n{{contractedPlanLimit.getDiscountAmount(vm.period) | price}} {{vm.currencyCharacter}}</div></td><td class=\\\"text-right\\\">\\n{{contractedPlanLimit.getTotal(vm.period, true) | price}} {{vm.currencyCharacter}}</td></tr><tr \\nng-repeat=\\\"contractedAddOn in vm.contractedAddOns | filter:{selected:true}\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{\\'FEATURES_LIMITS_AND_ADD_ONS.\\' + contractedAddOn.plan_feature.feature.code | translate}} \\n<span class=\\\"text-boxed blue text-lowercase ml-5\\\" translate=\\\"SUBSCRIPTION.ADD_ON\\\"></span></div></td><td \\nclass=\\\"text-right\\\">1</td><td class=\\\"text-right\\\">\\n{{contractedAddOn.getPrice(vm.period, false) | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\"><div \\nng-if=\\\"contractedAddOn.getDiscountAmount(vm.period)\\\">\\n{{contractedAddOn.getDiscountAmount(vm.period) | price}} {{vm.currencyCharacter}}</div></td><td class=\\\"text-right\\\">\\n{{contractedAddOn.getPrice(vm.period, true) | price}} {{vm.currencyCharacter}}</td></tr><tr class=\\\"total-row\\\"><td \\ncolspan=\\\"3\\\" class=\\\"text-right\\\"><div layout=\\\"column\\\" layout-align=\\\"end end\\\"><div translate=\\\"SUBSCRIPTION.SUBTOTAL\\\">\\n</div><div ng-if=\\\"!vm.disabled && vm.showDiscountInputs\\\" class=\\\"h-35\\\"></div><div \\ntranslate=\\\"SUBSCRIPTION.COMMERCIAL_DISCOUNT\\\" ng-if=\\\"vm.getSubscriptionCommercialDiscount()\\\"></div><div \\ntranslate=\\\"SUBSCRIPTION.TOTAL_WITHOUT_TAXES\\\" ng-if=\\\"vm.getSubscriptionCommercialDiscount()\\\"></div><div>{{vm.TAX_NAME}}\\n</div></div></td><td colspan=\\\"2\\\"><div layout=\\\"column\\\" layout-align=\\\"end end\\\"><div>\\n{{vm.getSubscriptionSubtotal() | price }}{{vm.currencyCharacter}}</div><div \\nng-if=\\\"!vm.disabled && vm.showDiscountInputs\\\" class=\\\"h-35\\\"><nd-coupon-input model=\\\"vm.subscription.coupon\\\" \\nclass=\\\"h-35\\\" one-row=\\\"true\\\" disabled=\\\"!vm.editing || vm.saving\\\"></nd-coupon-input></div><div \\nng-if=\\\"vm.getSubscriptionCommercialDiscount()\\\">\\n{{vm.getSubscriptionCommercialDiscount() * -1 | price }}{{vm.currencyCharacter}}</div><div \\nng-if=\\\"vm.getSubscriptionCommercialDiscount()\\\">\\n{{vm.getSubscriptionSubtotal(true, true) | price }}{{vm.currencyCharacter}}</div><div>\\n{{vm.getSubscriptionTaxes() | price }}{{vm.currencyCharacter}}</div></div></td></tr><tr class=\\\"total-row\\\"><td \\ncolspan=\\\"3\\\" class=\\\"text-right\\\"><div layout=\\\"column\\\" layout-align=\\\"end end\\\" translate=\\\"SUBSCRIPTION.TOTAL\\\" class=\\\"h2\\\">\\n</div></td><td colspan=\\\"2\\\"><div layout=\\\"column\\\" layout-align=\\\"end end\\\" class=\\\"h2\\\">\\n{{vm.getSubscriptionTotal() | price }}{{vm.currencyCharacter}}</div></td></tr></table></md-card-content></md-card>\\n<md-card ng-if=\\\"vm.subscriptionMessage\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"SUBSCRIPTION.YOUR_SUBSCRIPTION_DETAILS\\\"></span></div></md-card-title-text></md-card-title><md-card-content \\nlayout-fill><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-align=\\\"start start\\\"><div flex>{{vm.subscriptionMessage}} \\n<span class=\\\"orange-fg\\\" ng-if=\\\"vm.subscriptionChanged\\\" translate=\\\"SUBSCRIPTION.SUBSCRIPTION_PENDING_TO_SYNCHRONIZE\\\">\\n</span></div><md-button ng-if=\\\"vm.showBillingPortalButton\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.billingPortalUrl || vm.saving\\\" target=\\\"_blank\\\" ng-href=\\\"{{vm.billingPortalUrl}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span translate=\\\"SUBSCRIPTION.BILLING_PORTAL\\\"></span><md-icon \\nmd-font-icon=\\\"icon-open-in-new s16\\\" class=\\\"ml-8\\\"></md-icon></div></md-button></div></md-card-content></md-card></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoice/directives/nd-invoice-integration-app-details-card.html\",\"<md-card class=\\\"nd-invoice-integration-app-details-card\\\" ng-if=\\\"integrationApp\\\"><md-card-title><md-card-title-text><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"integration-app-icon\\\"><img src=\\\"{{integrationApp.icon}}\\\"></div>\\n<span class=\\\"h3\\\" translate=\\\"INVOICE.INTEGRATION_TITLE_INFORMATION\\\" translate-values=\\\"{name: integrationApp.type}\\\">\\n</span></div></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" ng-if=\\\"holdedInvoiceData\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\" ng-if=\\\"holdedInvoiceData.external_invoice_id\\\" flex=\\\"25\\\"><small \\nclass=\\\"secondary-text\\\">{{\\'INVOICE.EXTERNAL_INVOICE_ID\\' | translate}}</small> <span>\\n{{holdedInvoiceData.external_invoice_id}}</span></div><div layout=\\\"column\\\" layout-align=\\\"start start\\\" \\nng-if=\\\"holdedInvoiceData.external_contact_id\\\" flex=\\\"25\\\"><small class=\\\"secondary-text\\\">\\n{{\\'INVOICE.EXTERNAL_CONTACT_ID\\' | translate}}</small> <span>{{holdedInvoiceData.external_contact_id}}</span></div><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\" flex=\\\"25\\\"><small class=\\\"secondary-text\\\">\\n{{\\'INVOICE.LAST_UPDATE\\' | translate}}</small> <span>{{updatedAt | date: \\'short\\'}}</span></div></div><div \\nng-if=\\\"kubibaiInvoiceData\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\" ng-if=\\\"kubibaiInvoiceData.is_valid\\\"><span>\\n{{kubibaiInvoiceData.tbai_code}}</span> <a href=\\\"{{kubibaiInvoiceData.batuz_qr_value}}\\\" target=\\\"_blank\\\"><img \\nclass=\\\"w-64\\\" ng-src=\\\"data:image/png;base64,{{kubibaiInvoiceData.batuz_qr_image}}\\\"></a><div \\nng-if=\\\"kubibaiInvoiceData.kubibai_cancelled_invoice_data\\\"><small class=\\\"secondary-text mr-5\\\">\\n{{\\'INVOICE.CANCELLATION_ID\\' | translate}}:</small> <span>\\n{{kubibaiInvoiceData.kubibai_cancelled_invoice_data.external_id}}</span></div></div><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\" ng-if=\\\"!kubibaiInvoiceData.is_valid\\\"><div class=\\\"md-warn\\\" flex>\\n{{\\\"INVOICE_DATA.THERE_ARE_KUBIBAI_ERRORS\\\" | translate }}</div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nclass=\\\"full-width\\\"><md-button class=\\\"md-warn\\\" ng-click=\\\"showErrors(kubibaiInvoiceData)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\"></md-icon><span>\\n{{\\\"INVOICE_DATA.VIEW_ERROR\\\" | translate }}</span></div></md-button></div></div></div><div ng-if=\\\"eposItalyInvoiceData\\\">\\n<div layout=\\\"column\\\" layout-align=\\\"start start\\\" ng-if=\\\"!eposItalyInvoiceData.is_valid\\\"><div class=\\\"md-warn\\\" flex>\\n{{\\\"INVOICE_DATA.THERE_ARE_EPOS_ITALY_ERRORS\\\" | translate }}</div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nclass=\\\"full-width\\\"><md-button class=\\\"md-warn\\\" ng-click=\\\"showErrors(eposItalyInvoiceData)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\"></md-icon><span>\\n{{\\\"INVOICE_DATA.VIEW_ERROR\\\" | translate }}</span></div></md-button></div></div><div layout=\\\"column\\\" \\nng-if=\\\"eposItalyInvoiceData.is_valid\\\" layout-align=\\\"start start\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"green-fg integration-app-icon-success\\\" \\nmd-font-icon=\\\"icon-checkbox-marked-circle-outline\\\"></md-icon><span>{{\\'INVOICE_DATA.SUCCESS\\' | translate}}</span></div>\\n</div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoice/subviews/invoice-header.html\",\"<div class=\\\"header md-background-bg md-hue-2\\\" layout=\\\"column\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button aria-label=\\\"Go to invoices\\\" class=\\\"md-icon-button\\\" ng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE\\\" translate \\ntranslate-attr-aria-label=\\\"INVOICES.INVOICES\\\" ui-sref=\\\"app.accounting.invoices\\\"><md-icon class=\\\"black-fg\\\" \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><md-button aria-label=\\\"Go to quotes\\\" class=\\\"md-icon-button\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.QUOTE\\\" translate translate-attr-aria-label=\\\"INVOICES.QUOTES\\\" \\nui-sref=\\\"app.accounting.quotes\\\"><md-icon class=\\\"black-fg\\\" md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<md-button aria-label=\\\"Go to proformas\\\" class=\\\"md-icon-button\\\" ng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA\\\" translate \\ntranslate-attr-aria-label=\\\"INVOICES.PROFORMAS\\\" ui-sref=\\\"app.accounting.proformas\\\"><md-icon class=\\\"black-fg\\\" \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div class=\\\"h2\\\">\\n<nd-invoice-autocode invoice=\\\"vm.invoice\\\"></nd-invoice-autocode></div></div><span flex></span><md-menu \\nng-if=\\\"!vm.isNewInvoice\\\"><md-button aria-label=\\\"More actions\\\" class=\\\"stroked\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.openMenu($mdMenu, $event)\\\" ng-disabled=\\\"vm.waiting\\\"><md-progress-circular \\nclass=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.waiting\\\"></md-progress-circular><span translate=\\\"GENERAL.MORE_ACTIONS\\\">\\n</span></md-button><md-menu-content width=\\\"4\\\"><md-menu-item has-permission=\\\"accounting.invoices.create\\\"><md-button \\nng-click=\\\"vm.newDocument()\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon><span \\nng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.PROFORMA\\\">{{\\'INVOICES.NEW_PROFORMA\\' | translate}}</span> <span \\nng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.QUOTE\\\">{{\\'INVOICES.NEW_QUOTE\\' | translate}}</span> <span \\nng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.INVOICE\\\">{{\\'INVOICES.NEW_INVOICE\\' | translate}}</span></md-button>\\n</md-menu-item><md-menu-item has-permission=\\\"accounting.invoices.invoice.update\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA\\\"><md-button ng-click=\\\"vm.createInvoiceFromProforma()\\\" \\nng-disabled=\\\"vm.saving\\\"><md-icon md-font-icon=\\\"icon-receipt\\\"></md-icon>{{\\'INVOICE.CREATE_INVOICE\\' | translate}}\\n</md-button></md-menu-item><md-menu-item has-permission=\\\"wholesale.sales.sale.details.update\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA || vm.type === vm.INVOICE_TYPES.QUOTE\\\"><md-button \\nng-click=\\\"vm.createSaleOrder(false)\\\" ng-disabled=\\\"vm.saving\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/proforma-to-sale.71bd4248.svg\\\" \\nng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/quote-to-sale.f94e9acc.svg\\\" ng-if=\\\"vm.type === vm.INVOICE_TYPES.QUOTE\\\">\\n</md-icon>{{\\'INVOICE.CREATE_SALE_ORDER_FROM_INVOICE\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"accounting.invoices.invoice.update\\\"><md-button ng-click=\\\"vm.duplicate()\\\" \\nng-disabled=\\\"!vm.canDuplicateInvoice()\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\"></md-icon>\\n{{\\'GENERAL.DUPLICATE\\' | translate}}</md-button></md-menu-item><md-menu-item><md-menu \\nng-if=\\\"vm.invoice.canBeCorrected()\\\" class=\\\"m-0\\\"><md-button ng-click=\\\"$mdMenu.open()\\\" class=\\\"custom-indent-button\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/file-document-alert-outline.83998f64.svg\\\">\\n</md-icon>{{\\'INVOICE.CREATE_CORRECTIVE_INVOICE\\' | translate }}</md-button><md-menu-content><md-menu-item><md-button \\naction ng-click=\\\"vm.createCorrectiveInvoice(vm.CORRECTIVE_INVOICE_TYPES.FORMAL_MATERIAL_ERROR)\\\" \\ntranslate=\\\"INVOICE.CREATE_CORRECTIVE_INVOICE_DUE_TO_FORM_ISSUE\\\"></md-button></md-menu-item><md-menu-item><md-button \\naction ng-click=\\\"vm.createCorrectiveInvoice(vm.CORRECTIVE_INVOICE_TYPES.TOTAL_OR_PARTIAL_DEVOLUTION)\\\" \\ntranslate=\\\"INVOICE.CREATE_CORRECTIVE_TOTAL_OR_PARTIAL_DEVOLUTION\\\"></md-button></md-menu-item></md-menu-content>\\n</md-menu></md-menu-item><md-divider ng-if=\\\"!vm.invoice.is_closed || vm.isValidKubiBaiInvoice()\\\"></md-divider>\\n<md-menu-item has-permission=\\\"accounting.invoices.delete\\\" ng-if=\\\"!vm.invoice.is_closed\\\"><md-button class=\\\"md-warn\\\" \\nng-click=\\\"vm.delete()\\\" ng-disabled=\\\"vm.isDisabledInvoice()\\\"><md-icon md-font-icon=\\\"icon-delete font-size-10\\\"></md-icon>\\n<span ng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.PROFORMA\\\">{{\\'INVOICE.DELETE_PROFORMA\\' | translate}}</span> <span \\nng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.QUOTE\\\">{{\\'INVOICE.DELETE_QUOTE\\' | translate}}</span> <span \\nng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.INVOICE\\\">{{\\'INVOICE.DELETE_INVOICE\\' | translate}}</span></md-button>\\n</md-menu-item><md-menu-item has-permission=\\\"accounting.invoices.delete\\\" ng-if=\\\"vm.isValidKubiBaiInvoice()\\\"><md-button \\nclass=\\\"md-warn\\\" ng-click=\\\"vm.cancelInvoice()\\\" ng-disabled=\\\"vm.invoice.is_cancelled && vm.isDisabledInvoice()\\\"><md-icon \\nmd-font-icon=\\\"icon-delete font-size-10\\\"></md-icon><span ng-if=\\\"vm.invoice.type === vm.INVOICE_TYPES.INVOICE\\\">\\n{{\\'INVOICE.CANCEL_INVOICE\\' | translate}}</span></md-button></md-menu-item></md-menu-content></md-menu><md-button \\nclass=\\\"stroked\\\" ng-if=\\\"vm.isInvoiceType()\\\" ng-disabled=\\\"vm.isSaveButtonDisabled()\\\" ng-click=\\\"vm.saveInvoice(false)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-document-edit-outline.0e561aaf.svg\\\" \\nng-if=\\\"!vm.invoice.is_closed && !vm.saving\\\"></md-icon><md-progress-circular class=\\\"mr-5\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\" ng-if=\\\"vm.saving\\\"></md-progress-circular><span ng-if=\\\"!vm.invoice.is_closed\\\" \\ntranslate=\\\"GENERAL.SAVE_DRAFT\\\"></span> <span ng-if=\\\"vm.invoice.is_closed\\\" translate=\\\"GENERAL.SAVE\\\"></span></div>\\n</md-button><md-button class=\\\"stroked\\\" ng-if=\\\"vm.invoice.id\\\" ng-disabled=\\\"vm.isDownloadButtonDisabled()\\\" \\nng-click=\\\"vm.downloadInvoice()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" \\nng-if=\\\"!vm.downloading\\\" md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/file-download-outline.d0fba88e.svg\\\">\\n</md-icon><md-progress-circular class=\\\"mr-5\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.downloading\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.DOWNLOAD\\\"></span></div></md-button><md-button \\nng-click=\\\"vm.openSendEmailDialog()\\\" ng-disabled=\\\"vm.isSendButtonDisabled()\\\" \\nng-class=\\\"{\\'md-primary md-raised\\': !vm.showEmitButton(), \\'stroked\\': vm.showEmitButton()}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/send-outline.13f66f65.svg\\\"></md-icon><span translate=\\\"GENERAL.SEND\\\">\\n</span></div></md-button><md-button class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.showEmitButton()\\\" \\nng-disabled=\\\"vm.isCloseButtonDisabled()\\\" ng-click=\\\"vm.closeInvoice()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"mr-5\\\" md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/lock-check-outline.5b1808a4.svg\\\" \\nng-if=\\\"!vm.saving\\\"></md-icon><md-progress-circular class=\\\"mr-5\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" \\nng-if=\\\"vm.saving\\\"></md-progress-circular>{{\\'INVOICE.EMIT\\' | translate }}</div></md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-if=\\\"vm.showSaveButton()\\\" ng-disabled=\\\"vm.isSaveButtonDisabled()\\\" \\nng-click=\\\"vm.saveInvoice(true)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"mr-5\\\" \\nmd-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.saving\\\"></md-progress-circular>{{\\'GENERAL.SAVE\\' | translate }}</div>\\n</md-button></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/inventory/tabs/abc-analysis.html\",\"<div id=\\\"analytics-inventory-abc-analysis\\\" layout=\\\"column\\\"><md-card class=\\\"full-height\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVENTORY_DASHBOARD.ABC_ANALYSIS_SUMMARY_TITLE\\\"></span>\\n</md-card-title-text><md-progress-circular md-mode=\\\"indeterminate\\\" md-diameter=\\\"32\\\" ng-if=\\\"vm.performingAnalysis\\\">\\n</md-progress-circular></md-card-title><md-card-content><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstanceABCAnalysisSummary\\\" dt-options=\\\"vm.dtOptionsABCAnalysisSummary\\\" \\ndt-columns=\\\"vm.dtColumnsABCAnalysisSummary\\\" id=\\\"abc-analysis-summary-table\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/inventory/tabs/distribution.html\",\"<div id=\\\"analytics-inventory-distribution\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" class=\\\"full-width\\\" layout-wrap><ms-widget \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE\\' | translate}}</span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget></div><md-card class=\\\"mb-16\\\"><md-card-title layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVENTORY_DASHBOARD.STOCK_LEVEL_HISTORY\\\">\\n</span></md-card-title-text><div layout=\\\"row\\\" flex class=\\\"p-0\\\" layout-align=\\\"end center\\\"><div flex-gt-md=\\\"25\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" class=\\\"mr-10\\\"><md-select class=\\\"m-0\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_WAREHOUSES\\' | translate}}\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedWarehouses\\\" \\nmd-on-close=\\\"vm.reloadStockKpisChart()\\\"><md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">\\n{{warehouse.name}}</md-option></md-select></div><div flex-gt-md=\\\"25\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\"><md-date-range \\nflex-gt-md=\\\"25\\\" class=\\\"m-0\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.dateRange\\\" auto-confirm=\\\"true\\\" \\nshow-template=\\\"true\\\" one-panel=\\\"false\\\" flex></md-date-range></div></div></md-card-title><md-card-content><div \\nid=\\\"stockKpiChart\\\" class=\\\"h-300\\\"></div></md-card-content></md-card><div layout=\\\"row\\\" flex><md-card class=\\\"mb-16\\\" \\nflex-gt-md=\\\"50\\\" flex-sm=\\\"100\\\" flex-xs=\\\"100\\\"><md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVENTORY_DASHBOARD.DISCONTINUED_STOCK\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content layout=\\\"row\\\" layout-align=\\\"center center\\\"><div id=\\\"stockQuantityByProductStatusChart\\\" \\nclass=\\\"h-300 w-300\\\"></div></md-card-content></md-card><md-card class=\\\"mb-16\\\" flex-gt-md=\\\"50\\\" flex-sm=\\\"100\\\" \\nflex-xs=\\\"100\\\"><md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"INVENTORY_DASHBOARD.AVAILABLE_STOCK\\\"></span></md-card-title-text></md-card-title><md-card-content \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div id=\\\"availableStockChart\\\" class=\\\"h-300 w-300\\\"></div></md-card-content>\\n</md-card></div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.selectedSeasonId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.seasonsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SEASONS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasons | filter:vm.seasonsSearchText | orderBy: \\'position\\'\\\" value=\\\"{{season.id}}\\\">\\n{{season.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.selectedBrandId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.brandsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_BRANDS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"brand in vm.brands | filter:vm.brandsSearchText | orderBy: \\'name\\'\\\" value=\\\"{{brand.id}}\\\">{{brand.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.selectedCategoryId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.categoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_CATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"category in vm.categories | filter:vm.categoriesSearchText | orderBy: \\'name\\'\\\" value=\\\"{{category.id}}\\\">\\n{{category.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.selectedSubcategoryId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"vm.subcategoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SUBCATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | filter:vm.subcategoriesSearchText | orderBy: \\'name\\'\\\" \\nvalue=\\\"{{subcategory.id}}\\\" ng-if=\\\"vm.selectedCategoryId == null || subcategory.category.id == vm.selectedCategoryId\\\">\\n{{subcategory.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.includeNoos\\\" ng-change=\\\"vm.applyFilters()\\\"><md-option translate=\\\"INVENTORY_DASHBOARD.INCLUDE_NOOS\\\" \\nng-value=\\\"1\\\"></md-option><md-option translate=\\\"INVENTORY_DASHBOARD.EXCLUDE_NOOS\\\" ng-value=\\\"2\\\"></md-option><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ONLY_NOOS\\\" ng-value=\\\"3\\\"></md-option></md-select><md-autocomplete flex-gt-md=\\\"20\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-items=\\\"provider in vm.providerQuerySearch()\\\" \\nmd-selected-item=\\\"vm.selectedProvider\\\" md-search-text=\\\"vm.providerSearchText\\\" \\nmd-selected-item-change=\\\"vm.applyFilters()\\\" md-item-text=\\\"provider.name\\\" md-min-length=\\\"1\\\" \\nplaceholder=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" class=\\\"autocomplete\\\" md-delay=\\\"500\\\" \\nmd-no-cache=\\\"true\\\"><md-item-template><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nmd-highlight-text=\\\"vm.providerSearchText\\\" md-highlight-flags=\\\"gi\\\" class=\\\"m-0\\\">{{provider.name}}</span></div>\\n</md-item-template><md-not-found><span translate=\\\"PRODUCT.NO_PROVIDERS_FOUND\\\" \\ntranslate-values=\\\"{name: vm.providerSearchText}\\\">No provider matching \\\"{{vm.providerSearchText}}\\\" were found.</span>\\n</md-not-found></md-autocomplete></div><nd-health-check-widget show-products=\\\"true\\\" , show-product-variants=\\\"true\\\">\\n</nd-health-check-widget><div layout=\\\"row\\\" class=\\\"full-width\\\" layout-wrap><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" \\nflex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" \\nlayout=\\\"column\\\"><div layout=\\\"row\\\"><span class=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK\\' | translate}}</span>\\n<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div class=\\\"md-display-1\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.PURCHASES\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{(vm.stocks.purchases_to_receive || 0) | number:0}}</div><span class=\\\"h6\\\" ng-if=\\\"vm.stocks\\\">\\n{{\\'INVENTORY_DASHBOARD.PURCHASES_PENDING_TO_DECEIVE\\' | translate}}</span></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TRANSFERS\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">\\n{{(vm.stocks.transfers_to_prepare + vm.stocks.transfers_to_ship + vm.stocks.transfers_to_receive) | number:0}}</div>\\n<span class=\\\"h6\\\" ng-if=\\\"vm.stocks\\\">\\n{{\\'INVENTORY_DASHBOARD.PREPARED_SHIP_RECEIVE\\' | translate: { p: vm.stocks.transfers_to_prepare, s: vm.stocks.transfers_to_ship, r: vm.stocks.transfers_to_receive} }}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.SALES\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{(vm.stocks.sales_to_prepare + vm.stocks.sales_to_ship) | number:0}}</div><span class=\\\"h6\\\" \\nng-if=\\\"vm.stocks\\\">\\n{{\\'INVENTORY_DASHBOARD.PREPARED_SHIP\\' | translate: { p: vm.stocks.sales_to_prepare, s: vm.stocks.sales_to_ship} }}\\n</span></ms-widget-front></ms-widget></div><div layout=\\\"row\\\" class=\\\"full-width\\\"><md-card flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_CATEGORY\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><nvd3 class=\\\"h-400\\\" \\nconfig=\\\"vm.categoriesWidget.mainChart.config\\\" options=\\\"vm.categoriesWidget.mainChart.options\\\" \\ndata=\\\"vm.categoriesWidget.mainChart.data\\\"></nvd3></md-card-content></md-card><md-card flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_SEASON\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><nvd3 class=\\\"h-400\\\" config=\\\"vm.seasonsWidget.mainChart.config\\\" \\noptions=\\\"vm.seasonsWidget.mainChart.options\\\" data=\\\"vm.seasonsWidget.mainChart.data\\\"></nvd3></md-card-content></md-card>\\n</div><div layout=\\\"row\\\" class=\\\"full-width\\\" id=\\\"subcategories-chart-card\\\"><md-card flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_SUBCATEGORY\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"full-height\\\"><div id=\\\"subcategories-chart\\\" class=\\\"h-500\\\">\\n</div></md-card-content></md-card><md-card flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" id=\\\"brands-chart-card\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_BRAND\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><div id=\\\"brands-chart\\\" class=\\\"h-500\\\"></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/inventory/tabs/low-stock.html\",\"<div id=\\\"analytics-inventory-low-stock\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" class=\\\"full-width\\\" layout-wrap><ms-widget \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE\\' | translate}}</span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-140\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.stocks.total || 0) | number:0}}</div><span \\nclass=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.stocks.total_cost | price}} {{session.company.currency}}\\n</span></ms-widget-front></ms-widget></div><md-card class=\\\"mb-16\\\"><md-card-title layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVENTORY_DASHBOARD.STOCK_LEVEL_HISTORY\\\">\\n</span></md-card-title-text><div layout=\\\"row\\\" flex class=\\\"p-0\\\" layout-align=\\\"end center\\\"><div flex-gt-md=\\\"25\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" class=\\\"mr-10\\\"><md-select class=\\\"m-0\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_WAREHOUSES\\' | translate}}\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedWarehouses\\\" \\nmd-on-close=\\\"vm.reloadStockKpisChart()\\\"><md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">\\n{{warehouse.name}}</md-option></md-select></div><div flex-gt-md=\\\"25\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\"><md-date-range \\nflex-gt-md=\\\"25\\\" class=\\\"m-0\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.dateRange\\\" auto-confirm=\\\"true\\\" \\nshow-template=\\\"true\\\" one-panel=\\\"false\\\" flex></md-date-range></div></div></md-card-title><md-card-content><div \\nid=\\\"stockKpiChart\\\" class=\\\"h-300\\\"></div></md-card-content></md-card><div layout=\\\"row\\\" flex><md-card class=\\\"mb-16\\\" \\nflex-gt-md=\\\"50\\\" flex-sm=\\\"100\\\" flex-xs=\\\"100\\\"><md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVENTORY_DASHBOARD.DISCONTINUED_STOCK\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content layout=\\\"row\\\" layout-align=\\\"center center\\\"><div id=\\\"stockQuantityByProductStatusChart\\\" \\nclass=\\\"h-300 w-300\\\"></div></md-card-content></md-card><md-card class=\\\"mb-16\\\" flex-gt-md=\\\"50\\\" flex-sm=\\\"100\\\" \\nflex-xs=\\\"100\\\"><md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"INVENTORY_DASHBOARD.AVAILABLE_STOCK\\\"></span></md-card-title-text></md-card-title><md-card-content \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div id=\\\"availableStockChart\\\" class=\\\"h-300 w-300\\\"></div></md-card-content>\\n</md-card></div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.selectedSeasonId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.seasonsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SEASONS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasons | filter:vm.seasonsSearchText | orderBy: \\'position\\'\\\" value=\\\"{{season.id}}\\\">\\n{{season.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.selectedBrandId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.brandsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_BRANDS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"brand in vm.brands | filter:vm.brandsSearchText | orderBy: \\'name\\'\\\" value=\\\"{{brand.id}}\\\">{{brand.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.selectedCategoryId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.categoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_CATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"category in vm.categories | filter:vm.categoriesSearchText | orderBy: \\'name\\'\\\" value=\\\"{{category.id}}\\\">\\n{{category.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.selectedSubcategoryId\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"vm.subcategoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SUBCATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | filter:vm.subcategoriesSearchText | orderBy: \\'name\\'\\\" \\nvalue=\\\"{{subcategory.id}}\\\" ng-if=\\\"vm.selectedCategoryId == null || subcategory.category.id == vm.selectedCategoryId\\\">\\n{{subcategory.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.includeNoos\\\" ng-change=\\\"vm.applyFilters()\\\"><md-option translate=\\\"INVENTORY_DASHBOARD.INCLUDE_NOOS\\\" \\nng-value=\\\"1\\\"></md-option><md-option translate=\\\"INVENTORY_DASHBOARD.EXCLUDE_NOOS\\\" ng-value=\\\"2\\\"></md-option><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ONLY_NOOS\\\" ng-value=\\\"3\\\"></md-option></md-select><md-autocomplete flex-gt-md=\\\"20\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-items=\\\"provider in vm.providerQuerySearch()\\\" \\nmd-selected-item=\\\"vm.selectedProvider\\\" md-search-text=\\\"vm.providerSearchText\\\" \\nmd-selected-item-change=\\\"vm.applyFilters()\\\" md-item-text=\\\"provider.name\\\" md-min-length=\\\"1\\\" \\nplaceholder=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" class=\\\"autocomplete\\\" md-delay=\\\"500\\\" \\nmd-no-cache=\\\"true\\\"><md-item-template><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nmd-highlight-text=\\\"vm.providerSearchText\\\" md-highlight-flags=\\\"gi\\\" class=\\\"m-0\\\">{{provider.name}}</span></div>\\n</md-item-template><md-not-found><span translate=\\\"PRODUCT.NO_PROVIDERS_FOUND\\\" \\ntranslate-values=\\\"{name: vm.providerSearchText}\\\">No provider matching \\\"{{vm.providerSearchText}}\\\" were found.</span>\\n</md-not-found></md-autocomplete></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/inventory/tabs/overview.html\",\"<div id=\\\"analytics-inventory-overview\\\" layout=\\\"column\\\"><md-card><md-card-title layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" layout-xs=\\\"column\\\"><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"INVENTORY_DASHBOARD.STOCK_LEVEL_HISTORY\\\"></span></md-card-title-text><div layout=\\\"row\\\" flex class=\\\"p-0\\\" \\nlayout-align=\\\"end center\\\"><div flex-gt-md=\\\"25\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" class=\\\"mr-10\\\"><md-select class=\\\"m-0\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_WAREHOUSES\\' | translate}}\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedWarehouses\\\" \\nmd-on-close=\\\"vm.selectedWarehousesFunction()\\\"><md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" \\nng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select></div><div flex-gt-md=\\\"25\\\" flex-sm=\\\"50\\\" \\nflex-xs=\\\"100\\\"><md-date-range flex-gt-md=\\\"25\\\" class=\\\"m-0\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.dateRange\\\" \\nauto-confirm=\\\"true\\\" show-template=\\\"true\\\" one-panel=\\\"false\\\" flex></md-date-range></div></div></md-card-title>\\n<md-card-content><div id=\\\"stockKpiChart\\\" class=\\\"h-300\\\"></div></md-card-content></md-card><div layout=\\\"row\\\" \\nclass=\\\"full-width\\\" layout-wrap><div layout=\\\"row\\\" flex=\\\"100\\\" class=\\\"m-10\\\" \\nstyle=\\\"display: flex;\\n        flex-wrap: wrap\\\"><div flex-gt-md=\\\"20\\\" flex-sm=\\\"10\\\" flex-xs=\\\"50\\\" class=\\\"mr-10\\\" \\nlayout=\\\"column\\\"><md-select class=\\\"m-0\\\" placeholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_WAREHOUSES\\' | translate}}\\\" \\nmultiple=\\\"true\\\" ng-model=\\\"vm.selectedWarehouses\\\" md-on-close=\\\"vm.selectedWarehousesFunction()\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select></div><div \\nflex-gt-md=\\\"15\\\" flex-sm=\\\"10\\\" flex-xs=\\\"40\\\" class=\\\"mr-10\\\" layout=\\\"column\\\"><md-select class=\\\"m-0\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_SEASONS\\' | translate}}\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedSeasons\\\" \\nmd-on-close=\\\"vm.reloadAggregatesFilters()\\\"><md-option ng-repeat=\\\"season in vm.seasons\\\" ng-value=\\\"season.id\\\">\\n{{season.name}}</md-option></md-select></div><div flex-gt-md=\\\"15\\\" flex-sm=\\\"10\\\" flex-xs=\\\"50\\\" class=\\\"mr-10\\\" \\nlayout=\\\"column\\\"><md-select class=\\\"m-0\\\" placeholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_BRANDS\\' | translate}}\\\" multiple=\\\"true\\\" \\nng-model=\\\"vm.selectedBrands\\\" md-on-close=\\\"vm.reloadAggregatesFilters()\\\"><md-option ng-repeat=\\\"brand in vm.brands\\\" \\nng-value=\\\"brand.id\\\">{{brand.name}}</md-option></md-select></div><div flex-gt-md=\\\"15\\\" flex-sm=\\\"10\\\" flex-xs=\\\"49\\\" \\nclass=\\\"mr-10\\\" layout=\\\"column\\\"><md-select class=\\\"m-0\\\" \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_CATEGORIES\\' | translate}}\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedCategories\\\" \\nmd-on-close=\\\"vm.reloadAggregatesFilters()\\\"><md-option ng-repeat=\\\"category in vm.categories\\\" ng-value=\\\"category.id\\\">\\n{{category.name}}</md-option></md-select></div><div flex-gt-md=\\\"15\\\" flex-sm=\\\"10\\\" flex-xs=\\\"50\\\" class=\\\"mr-10\\\" \\nlayout=\\\"column\\\"><md-select class=\\\"m-0\\\" placeholder=\\\"{{\\'INVENTORY_DASHBOARD.ALL_SUBCATEGORIES\\' | translate}}\\\" \\nmultiple=\\\"true\\\" ng-model=\\\"vm.selectedSubcategories\\\" md-on-close=\\\"vm.reloadAggregatesFilters()\\\"><md-option \\nng-repeat=\\\"subcategory in vm.subcategories\\\" ng-value=\\\"subcategory.id\\\">{{subcategory.name}}</md-option></md-select>\\n</div><div flex-gt-md=\\\"15\\\" flex-sm=\\\"10\\\" flex-xs=\\\"49\\\" class=\\\"mr-10\\\" layout=\\\"column\\\"><md-select class=\\\"m-0\\\" \\nplaceholder=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" multiple=\\\"true\\\" ng-model=\\\"vm.selectedProviders\\\" \\nmd-on-close=\\\"vm.reloadAggregatesFilters()\\\"><md-option ng-repeat=\\\"provider in vm.providers\\\" ng-value=\\\"provider.id\\\">\\n{{provider.name}}</md-option></md-select></div></div><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" \\nflex-gt-md=\\\"25\\\" class=\\\"h-170\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between start\\\"><div layout=\\\"row\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE\\' | translate}}</span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"black-fg ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><md-progress-circular \\nmd-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\"></md-progress-circular></div><div \\nng-if=\\\"!vm.showNegatives\\\" flex=\\\"100\\\" layout=\\\"column\\\"><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{(vm.aggregatedStock.available_on_hand.positive || 0) | number:0}}</div><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.aggregatedStock.available_on_hand.positive_cost || 0 | price}} {{session.company.currency}}\\n</span><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><span class=\\\"h6\\\" flex \\nng-class=\\\"{\\'red-fg\\': vm.aggregatedStock.available_on_hand.positive - vm.aggregatedStock.available_on_hand.positive_with_cost != 0}\\\">\\n{{vm.aggregatedStock.available_on_hand.positive - vm.aggregatedStock.available_on_hand.positive_with_cost || 0 | number:0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</span><md-checkbox class=\\\"m-0 count-negatives\\\" ng-model=\\\"vm.showNegatives\\\"><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.COUNT_NEGATIVE_STOCK\\' | translate}}</span></md-checkbox></div></div><div \\nng-if=\\\"vm.showNegatives\\\" flex=\\\"100\\\" layout=\\\"column\\\"><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">\\n{{(vm.aggregatedStock.available_on_hand.positive + vm.aggregatedStock.available_on_hand.negative || 0) | number:0}}\\n</div><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.aggregatedStock.available_on_hand.positive_cost + vm.aggregatedStock.available_on_hand.negative_cost || 0 | price}} {{session.company.currency}}\\n</span><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><span class=\\\"h6\\\" flex \\nng-class=\\\"{\\'red-fg\\': vm.aggregatedStock.available_on_hand.positive-vm.aggregatedStock.available_on_hand.positive_with_cost + vm.aggregatedStock.available_on_hand.negative-vm.aggregatedStock.available_on_hand.negative_with_cost != 0}\\\">\\n{{vm.aggregatedStock.available_on_hand.positive-vm.aggregatedStock.available_on_hand.positive_with_cost + vm.aggregatedStock.available_on_hand.negative-vm.aggregatedStock.available_on_hand.negative_with_cost || 0 | number:0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</span><md-checkbox class=\\\"m-0 count-negatives\\\" ng-model=\\\"vm.showNegatives\\\"><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.COUNT_NEGATIVE_STOCK\\' | translate}}</span></md-checkbox></div></div></ms-widget-front>\\n</ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-170\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between start\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER\\' | translate}}</span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"black-fg ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><md-progress-circular\\n md-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\"></md-progress-circular></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{(vm.aggregatedStock.in_transit_on_transfer.stock || 0) | number:0}}</div><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.aggregatedStock.in_transit_on_transfer.stock_cost || 0 | price}} {{session.company.currency}}\\n</span> <span class=\\\"h6\\\" \\nng-class=\\\"{\\'red-fg\\': vm.aggregatedStock.in_transit_on_transfer.stock-vm.aggregatedStock.in_transit_on_transfer.stock_with_cost != 0}\\\">\\n{{vm.aggregatedStock.in_transit_on_transfer.stock-vm.aggregatedStock.in_transit_on_transfer.stock_with_cost || 0 | number:0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-170\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between start\\\"><div layout=\\\"row\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div>\\n<md-progress-circular md-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\">\\n</md-progress-circular></div><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{(vm.aggregatedStock.in_transit_on_purchase.stock || 0) | number:0}}</div><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.aggregatedStock.in_transit_on_purchase.stock_cost || 0 | price}} {{session.company.currency}}\\n</span> <span class=\\\"h6\\\" \\nng-class=\\\"{\\'red-fg\\': vm.aggregatedStock.in_transit_on_purchase.stock-vm.aggregatedStock.in_transit_on_purchase.stock_with_cost != 0}\\\">\\n{{vm.aggregatedStock.in_transit_on_purchase.stock-vm.aggregatedStock.in_transit_on_purchase.stock_with_cost || 0 | number:0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"h-170\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between start\\\"><div layout=\\\"row\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED\\' | translate}}</span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"black-fg ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><md-progress-circular \\nmd-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\"></md-progress-circular></div><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{(vm.aggregatedStock.allocated_on_retail.stock + vm.aggregatedStock.allocated_on_wholesale.stock || 0) | number:0}}\\n</div><span class=\\\"h6\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}} {{vm.aggregatedStock.allocated_on_retail.stock_cost + vm.aggregatedStock.allocated_on_wholesale.stock_cost || 0 | price}} {{session.company.currency}}\\n</span> <span class=\\\"h6\\\" \\nng-class=\\\"{\\'red-fg\\': vm.aggregatedStock.allocated_on_retail.stock-vm.aggregatedStock.allocated_on_retail.stock_with_cost + vm.aggregatedStock.allocated_on_wholesale.stock-vm.aggregatedStock.allocated_on_wholesale.stock_with_cost != 0}\\\">\\n{{vm.aggregatedStock.allocated_on_retail.stock - vm.aggregatedStock.allocated_on_retail.stock_with_cost + vm.aggregatedStock.allocated_on_wholesale.stock - vm.aggregatedStock.allocated_on_wholesale.stock_with_cost || 0 | number:0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</span></ms-widget-front></ms-widget></div><div layout=\\\"column\\\" flex layout-gt-md=\\\"row\\\"><md-card flex-gt-md=\\\"50\\\">\\n<md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-card-title-text layout=\\\"row\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"INVENTORY_DASHBOARD.STOCKS_BY_PRODUCT_STATUS\\\"></span><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"black-fg ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.STOCKS_BY_PRODUCT_STATUS_TOOLTIP\\' | translate}}</md-tooltip></md-icon></md-card-title-text>\\n<md-progress-circular md-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\">\\n</md-progress-circular></md-card-title><md-card-content layout=\\\"column\\\" flex layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"space-around center\\\"><div id=\\\"stockCostByProductStatusChart\\\" class=\\\"h-280 full-width\\\" flex-gt-sm=\\\"50\\\" \\nflex></div><div id=\\\"stockQuantityByProductStatusChart\\\" class=\\\"h-280 full-width\\\" flex-gt-sm=\\\"50\\\" flex></div>\\n</md-card-content></md-card><md-card flex-gt-md=\\\"50\\\"><md-card-title layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-card-title-text layout=\\\"row\\\"><span class=\\\"h3\\\" translate=\\\"INVENTORY_DASHBOARD.AVAILABLE_STOCK\\\"></span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg margin-left-8\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'INVENTORY_DASHBOARD.AVAILABLE_STOCK_TOOLTIP\\' | translate}}</md-tooltip></md-icon></md-card-title-text>\\n<md-progress-circular md-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\">\\n</md-progress-circular></md-card-title><md-card-content layout=\\\"column\\\" flex layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"space-around center\\\"><div id=\\\"availableStockOnPermanentProductsChart\\\" class=\\\"h-280 full-width\\\" flex>\\n</div><div id=\\\"availableStockOnSeasonalProductsChart\\\" class=\\\"h-280 full-width\\\" flex></div></md-card-content></md-card>\\n</div><md-card class=\\\"mb-16\\\" flex-gt-md=\\\"33\\\" flex-sm=\\\"100\\\" flex-xs=\\\"100\\\"><md-card-title layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"INVENTORY_DASHBOARD.CURRENT_STOCK_BY_WAREHOUSE\\\"></span></md-card-title-text><md-progress-circular \\nmd-diameter=\\\"32\\\" md-mode=\\\"indeterminate\\\" ng-show=\\\"vm.retrievingAggregates\\\"></md-progress-circular></md-card-title>\\n<md-card-content layout=\\\"row\\\" layout-align=\\\"center center\\\"><table class=\\\"simple m-0\\\" ms-responsive-table flex><tr><td>\\n{{\\'PRODUCT.WAREHOUSE\\' | translate}}</td><td class=\\\"text-center\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE\\' | translate}}</td><td class=\\\"text-center\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED\\' | translate}}</td><td class=\\\"text-center\\\">\\n{{\\'INVENTORY_DASHBOARD.OCCUPANCY\\' | translate}}</td><td class=\\\"text-right\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_COST\\' | translate}}</td><td class=\\\"text-right\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_NEGATIVE_STOCK_COST\\' | translate}}</td><td class=\\\"text-center\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_IN_TRANSFER\\' | translate}}</td><td class=\\\"text-center\\\">\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_PURCHASED_IN_TRANSIT\\' | translate}}</td></tr><tr \\nng-repeat=\\\"warehouse in vm.aggregatedStockByWarehouseArray | orderBy:\\'-order\\'\\\"><td>{{warehouse.warehouse_name}}</td><td\\n class=\\\"text-center\\\">{{warehouse.available_on_hand.positive || 0}} <span class=\\\"red-fg\\\" \\nng-if=\\\"warehouse.available_on_hand.negative && warehouse.available_on_hand.negative != 0\\\"><br><small>\\n({{warehouse.available_on_hand.negative || 0}})</small></span></td><td class=\\\"text-center\\\">\\n{{warehouse.allocated_on_retail.stock + warehouse.allocated_on_wholesale.stock || 0}}</td><td class=\\\"text-center\\\"><div \\nng-init=\\\"progress = vm.getUsedVolumePercentage((warehouse.available_on_hand.total_volume + warehouse.allocated_on_retail.total_volume), vm.warehouseById[warehouse.warehouse_id].total_volume)\\\">\\n<md-progress-linear ng-class=\\\"{\\'md-warn\\': progress > 100}\\\" class=\\\"md-primary\\\" md-mode=\\\"determinate\\\" \\nvalue=\\\"{{progress}}\\\"></md-progress-linear><md-tooltip>{{ progress | number:2}}%</md-tooltip></div><div class=\\\"mt-3\\\">\\n<small class=\\\"secondary-text nowrap\\\"><span>{{warehouse.available_on_hand.total_volume || 0 | number:2 }} m<sup>3</sup>\\n<md-tooltip>{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_AVAILABLE\\' | translate}}</md-tooltip></span>+ <span>\\n{{warehouse.allocated_on_retail.total_volume || 0 | number:2 }} m<sup>3</sup><md-tooltip>\\n{{\\'INVENTORY_DASHBOARD.TOTAL_STOCK_ALLOCATED\\' | translate}}</md-tooltip></span>/ <span>\\n{{vm.warehouseById[warehouse.warehouse_id].total_volume || 0}} m<sup>3</sup><md-tooltip>\\n{{\\'WAREHOUSE.TOTAL_VOLUME\\' | translate}}</md-tooltip></span></small></div></td><td class=\\\"text-right\\\">\\n{{warehouse.available_on_hand.positive_cost || 0 | price}} {{session.company.currency}}<br><small \\nng-if=\\\"warehouse.available_on_hand.positive - warehouse.available_on_hand.positive_with_cost != 0\\\" \\nclass=\\\"secondary-text red-fg\\\">\\n{{warehouse.available_on_hand.positive - warehouse.available_on_hand.positive_with_cost || 0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</small></td><td class=\\\"text-right yellow-fg\\\">\\n{{warehouse.available_on_hand.negative_cost || 0 | price}} {{session.company.currency}}<br><small \\nng-if=\\\"warehouse.available_on_hand.negative - warehouse.available_on_hand.negative_with_cost != 0\\\" \\nclass=\\\"secondary-text red-fg\\\">\\n{{warehouse.available_on_hand.negative - warehouse.available_on_hand.negative_with_cost || 0}} {{\\'INVENTORY_DASHBOARD.WITHOUT_COST_PRICE\\' | translate}}\\n</small></td><td class=\\\"text-center\\\">{{warehouse.in_transit_on_transfer.stock || 0}}</td><td class=\\\"text-center\\\">\\n{{warehouse.in_transit_on_purchase.stock || 0}}</td></tr></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/sidenav/main-sidenav.html\",\"<div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div class=\\\"sidenav-item ph-15\\\" \\nng-repeat=\\\"(code, option) in vm.reportTypes\\\" has-permission=\\\"{{option.permission}}\\\"><div \\nclass=\\\"item text-truncate text-bold p-0\\\" flex>{{option.translate | translate}}</div><md-button \\nclass=\\\"item button md-indent\\\" ng-repeat=\\\"(buttonCode, button) in option.buttons\\\" \\nhas-permission-and-feature=\\\"{{button.permission}}\\\" aria-label=\\\"configuration\\\" ng-click=\\\"vm.goTo(button)\\\" \\nng-class=\\\"{\\'selected\\': vm.isActive(button)}\\\" ng-disabled=\\\"option.disabled\\\" flex><span class=\\\"title text-truncate\\\" flex>\\n{{button.translate | translate}}</span><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" class=\\\"s16 has-permission-and-feature-icon\\\">\\n</md-icon><md-tooltip>{{button.translate | translate}}</md-tooltip></md-button></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/cash-movement.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" custom-fields=\\\"vm.customFields\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.CASH_MOVEMENT_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/catalog.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" show-date-range=\\\"false\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" description=\\\"\\'REPORTS.CATALOG_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/daily-billings.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.DAILY_BILLING_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/inventory.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" description=\\\"\\'REPORTS.INVENTORY_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/invoices.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" description=\\\"\\'REPORTS.INVOICES_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/payments.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.PAYMENTS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/pre-orders.html\",\"<div id=\\\"reports-purchases\\\" layout=\\\"column\\\" flex></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/product-status.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" description=\\\"\\'REPORTS.PRODUCT_STATUS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/purchase-orders.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" description=\\\"\\'REPORTS.PURCHASE_ORDERS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/register-closures.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.REGISTER_CLOSURES_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/retail-customers.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" disabled=\\\"vm.submitDisabled\\\" \\ndescription=\\\"\\'REPORTS.RETAIL_CUSTOMERS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/retail-kpis.html\",\"<div class=\\\"fullpage-datatable\\\" flex><table class=\\\"simple\\\"><thead><tr><th></th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'netSalesActualChart\\')\\\">{{\\'BASIC_RETAIL_KPI.GROSS_SALES\\' | translate}}</th><th \\nclass=\\\"cursor-pointer\\\" ng-click=\\\"vm.sortByHeader(\\'unitsSoldChart\\')\\\">{{\\'BASIC_RETAIL_KPI.UNITS_SOLD\\' | translate}}</th>\\n<th class=\\\"cursor-pointer\\\" ng-click=\\\"vm.sortByHeader(\\'transactionsChart\\')\\\">\\n{{\\'BASIC_RETAIL_KPI.TRANSACTIONS\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'unitsPerTransactionChart\\')\\\">{{\\'BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION\\' | translate}}</th><th\\n class=\\\"cursor-pointer\\\" ng-click=\\\"vm.sortByHeader(\\'averageUnitRetailChart\\')\\\">\\n{{\\'BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'returnsChart\\')\\\">{{\\'BASIC_RETAIL_KPI.RETURNS\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'unitsReturnedChart\\')\\\">{{\\'BASIC_RETAIL_KPI.UNITS_RETURNED\\' | translate}}</th></tr></thead>\\n<tbody><tr ng-repeat=\\\"warehouse in vm.warehouses\\\"><td>{{warehouse.name}}</td><td><div class=\\\"text-right h1\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].netSalesActualChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].netSalesActualChart[0].values[6].y | price}} <span \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 class=\\\"w-150\\\" \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.netSalesActualChart\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].netSalesActualChart\\\"></nvd3></td><td><div class=\\\"text-right h2\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].unitsSoldChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].unitsSoldChart[0].values[6].y}}</div><nvd3 class=\\\"w-150\\\" config=\\\"vm.cartConfig\\\" \\noptions=\\\"vm.chartOptionsDict.unitsSoldChart\\\" data=\\\"vm.basicRetailKpisDict[warehouse.id].unitsSoldChart\\\"></nvd3></td>\\n<td><div class=\\\"text-right h2\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].transactionsChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].transactionsChart[0].values[6].y}}</div><nvd3 class=\\\"w-150\\\" \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.transactionsChart\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].transactionsChart\\\"></nvd3></td><td><div class=\\\"text-right h2\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].unitsPerTransactionChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].unitsPerTransactionChart[0].values[6].y | price}}</div><nvd3 class=\\\"w-150\\\" \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsPerTransactionChart\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].unitsPerTransactionChart\\\"></nvd3></td><td><div class=\\\"text-right h2\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].averageUnitRetailChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].averageUnitRetailChart[0].values[6].y | price}} <span \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 class=\\\"w-150\\\" \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.averageUnitRetailChart\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].averageUnitRetailChart\\\"></nvd3></td><td><div class=\\\"text-right h2\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].returnsChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].returnsChart[0].values[6].y | price}} <span \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 class=\\\"w-150\\\" \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.returnsChart\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].returnsChart\\\"></nvd3></td><td><div class=\\\"text-right h2\\\" \\nng-class=\\\"{\\'secondary-text \\': vm.basicRetailKpisDict[warehouse.id].unitsReturnedChart[0].values[6].y === 0}\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].unitsReturnedChart[0].values[6].y}}</div><nvd3 class=\\\"w-150\\\" \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsReturnedChart\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].unitsReturnedChart\\\"></nvd3></td></tr></tbody></table></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/retail-taxes.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.RETAIL_TAXES_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/retail-transactions.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" custom-fields=\\\"vm.customFields\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.RETAIL_TRANSACTIONS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/seller-transactions.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.SELLER_TRANSACTIONS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/stock-movements.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.STOCK_MOVEMENTS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/stock-replenishment.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" show-pdf-download-button=\\\"true\\\" description=\\\"\\'REPORTS.STOCK_REPLENISHMENT_DESCRIPTION\\'\\\">\\n</nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/tickets.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" description=\\\"\\'REPORTS.TICKETS_DESCRIPTION\\'\\\">\\n</nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/transfer-orders.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndisabled=\\\"vm.submitDisabled\\\" description=\\\"\\'REPORTS.TRANSFER_ORDER_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/uid-stock-movements.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.UID_STOCK_MOVEMENTS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/uid-stock.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange, customFields)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.UID_STOCK_DESCRIPTION\\'\\\" show-date-range=\\\"false\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/wholesale-customers.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" disabled=\\\"vm.submitDisabled\\\" \\ndescription=\\\"\\'REPORTS.WHOLESALE_CUSTOMERS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/wholesale-delivery-notes.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.WHOLESALE_DELIVERY_NOTES_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/wholesale-products-sold.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" custom-fields=\\\"vm.customFields\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.WHOLESALE_PRODUCTS_SOLD_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/wholesale-sales.html\",\"<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" custom-fields=\\\"vm.customFields\\\" \\ncallback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.WHOLESALE_SALES_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/wholesale-transactions.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.WHOLESALE_TRANSACTIONS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/tabs/workdays.html\",\"<div layout=\\\"column\\\" layout-align=\\\"center center\\\"><nd-report-filter columns=\\\"vm.columns\\\" \\ncustom-fields=\\\"vm.customFields\\\" callback=\\\"vm.download(fileType, dateRange)\\\" downloading=\\\"vm.downloading\\\" \\ndescription=\\\"\\'REPORTS.WORKDAYS_DESCRIPTION\\'\\\"></nd-report-filter></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/tabs/categories.html\",\"<div id=\\\"retail-dashboard-categories\\\" layout=\\\"column\\\" flex><div layout-wrap layout=\\\"row\\\" flex class=\\\"m-10\\\">\\n<md-date-range class=\\\"m-0 p-10\\\" flex-gt-md=\\\"25\\\" flex-gt-xs=\\\"50\\\" flex=\\\"100\\\" ng-model=\\\"vm.filters.dateRange\\\" \\nauto-confirm=\\\"true\\\" show-template=\\\"true\\\" one-panel=\\\"false\\\" flex md-on-select=\\\"vm.applyFilters()\\\"></md-date-range>\\n<md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"25\\\" flex-gt-xs=\\\"50\\\" flex=\\\"100\\\" ng-model=\\\"vm.filters.season\\\" \\nng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"seasonSearchText\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SEASONS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasons | filter:seasonSearchText | orderBy: \\'position\\'\\\" value=\\\"{{season.id}}\\\">{{season.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"25\\\" flex-gt-xs=\\\"50\\\" flex=\\\"100\\\" \\nng-model=\\\"vm.filters.brand\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"brandsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_BRANDS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"brand in vm.brands | filter:brandsSearchText | orderBy: \\'name\\'\\\" value=\\\"{{brand.id}}\\\">{{brand.name}}\\n</md-option></md-select><div class=\\\"m-0 p-10\\\" flex-gt-md=\\\"25\\\" flex-gt-xs=\\\"50\\\" flex=\\\"100\\\"><md-checkbox class=\\\"m-0\\\" \\nng-model=\\\"vm.filters.is_noos\\\" ng-change=\\\"vm.applyFilters()\\\"><span tranlsate=\\\"INVENTORY_DASHBOARD.INCLUDE_NOOS\\\">\\nInclude NOOS</span></md-checkbox></div></div><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.REVENUE\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"vm.loading\\\"><md-progress-circular class=\\\"mh-8\\\"></md-progress-circular></div><div \\nclass=\\\"simple-table-container\\\" ng-if=\\\"!vm.loading\\\" flex><table class=\\\"simple\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" ms-responsive-table><thead><tr><th translate=\\\"PRODUCTS.SUBCATEGORY\\\"></th><th \\nng-repeat=\\\"week in vm.categoryKpis\\\" class=\\\"text-right\\\">\\n{{week.week_start | date:\\\"dd/MM\\\"}} - {{week.week_end | date:\\\"dd/MM\\\"}}, {{week.week_end | date:\\\"yyyy\\\"}}</th></tr>\\n</thead><tbody><tr ng-repeat=\\\"subcategory in vm.subcategoriesWithSales | orderBy:\\'name\\'\\\"><td class=\\\"text-truncate\\\">\\n{{subcategory.name || \\'Others\\'}}</td><td ng-repeat=\\\"week in vm.categoryKpis\\\" class=\\\"text-right\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><span \\nng-init=\\\"diff=vm.compare(vm.salesBySubcategoryCodeAndWeek[subcategory.code][vm.salesBySubcategoryCodeAndWeek[subcategory.code][week.week_start].lastWeekStart].total__sum, vm.salesBySubcategoryCodeAndWeek[subcategory.code][week.week_start].total__sum)\\\">\\n<span ng-if=\\\"diff && diff>=0\\\" class=\\\"green-900-fg\\\"><span style=\\\"position:relative;top:-2px\\\">&#8593; </span>{{diff}}%\\n</span> <span ng-if=\\\"diff && diff<0\\\" class=\\\"red-900-fg\\\"><span style=\\\"position:relative;top:-2px\\\">&#8595;</span>\\n {{-1 * diff}}%</span> </span><span class=\\\"ml-5\\\">\\n{{vm.salesBySubcategoryCodeAndWeek[subcategory.code][week.week_start].total__sum || 0 | price}}{{session.company.currency | currencyCharacter}}\\n</span></div></td></tr><tr><td translate=\\\"GENERAL.TOTAL\\\" class=\\\"text-bold\\\"></td><td \\nng-repeat=\\\"week in vm.categoryKpis\\\" class=\\\"text-right text-bold\\\"><div layout=\\\"row\\\"><span flex></span>\\n {{vm.totalsByWeek[week.week_start] || 0 | price}} {{session.company.currency | currencyCharacter}}</div></td></tr>\\n</tbody></table></div></md-card-content></md-card><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.UNITS\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"vm.loading\\\"><md-progress-circular class=\\\"mh-8\\\"></md-progress-circular></div><div \\nclass=\\\"simple-table-container\\\" ng-if=\\\"!vm.loading\\\" flex><table class=\\\"simple\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" ms-responsive-table><thead><tr><th translate=\\\"PRODUCTS.SUBCATEGORY\\\"></th><th \\nng-repeat=\\\"week in vm.categoryKpis\\\" class=\\\"text-center\\\">\\n{{week.week_start | date:\\\"dd/MM\\\"}} - {{week.week_end | date:\\\"dd/MM\\\"}}, {{week.week_end | date:\\\"yyyy\\\"}}</th></tr>\\n</thead><tbody><tr ng-repeat=\\\"subcategory in vm.subcategoriesWithSales | orderBy:\\'name\\'\\\"><td class=\\\"text-truncate\\\">\\n{{subcategory.name || \\'Others\\'}}</td><td ng-repeat=\\\"week in vm.categoryKpis\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><span \\nng-init=\\\"diff=vm.compare(vm.salesBySubcategoryCodeAndWeek[subcategory.code][vm.salesBySubcategoryCodeAndWeek[subcategory.code][week.week_start].lastWeekStart].amount__sum, vm.salesBySubcategoryCodeAndWeek[subcategory.code][week.week_start].amount__sum)\\\">\\n<span ng-if=\\\"diff && diff>=0\\\" class=\\\"green-900-fg\\\"><span style=\\\"position:relative;top:-2px\\\">&#8593; </span>{{diff}}%\\n</span> <span ng-if=\\\"diff && diff<0\\\" class=\\\"red-900-fg\\\"><span style=\\\"position:relative;top:-2px\\\">&#8595;</span>\\n {{-1 * diff}}%</span> </span><span class=\\\"ml-5\\\">\\n{{vm.salesBySubcategoryCodeAndWeek[subcategory.code][week.week_start].amount__sum || 0}}</span></div></td></tr><tr><td \\ntranslate=\\\"GENERAL.TOTAL\\\" class=\\\"text-bold\\\"></td><td ng-repeat=\\\"week in vm.categoryKpis\\\" class=\\\"text-right text-bold\\\">\\n<div layout=\\\"row\\\"><span flex></span> {{vm.amountsByWeek[week.week_start] || 0}}</div></td></tr></tbody></table></div>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/tabs/performance.html\",\"<div id=\\\"retail-dashboard-performance\\\" layout=\\\"column\\\" flex><div layout=\\\"row\\\" class=\\\"md-padding\\\" \\nlayout-align=\\\"end center\\\"><md-date-range flex-gt-md=\\\"25\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.dateRange\\\" \\nauto-confirm=\\\"true\\\" show-template=\\\"true\\\" one-panel=\\\"false\\\" flex></md-date-range></div><nd-company-basic-retail-kpis \\nwarehouse-ids=\\\"vm.warehouseIds\\\" vertical-layout=\\\"true\\\" date-range=\\\"vm.dateRange\\\"></nd-company-basic-retail-kpis>\\n<nd-weekly-heatmap date-range=\\\"vm.dateRange\\\" accumulate-headmap=\\\"vm.accumulateHeadmap\\\" warehouse-ids=\\\"vm.warehouseIds\\\" \\nflex></nd-weekly-heatmap><div layout=\\\"row\\\" class=\\\"pb-0 mb-10 mt-10\\\"><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" \\nflex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.filters.season\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"seasonSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SEASONS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasons | filter:seasonSearchText | orderBy: \\'position\\'\\\" value=\\\"{{season.id}}\\\">{{season.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.brand\\\" ng-change=\\\"vm.applyFilters()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"brandsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_BRANDS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"brand in vm.brands | filter:brandsSearchText | orderBy: \\'name\\'\\\" value=\\\"{{brand.id}}\\\">{{brand.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.category\\\" ng-change=\\\"vm.categoriesFilterHasChanged() && vm.applyFilters()\\\"><md-select-header>\\n<input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"categoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_CATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"category in vm.categories | filter:categoriesSearchText | orderBy: \\'name\\'\\\" value=\\\"{{category.id}}\\\">\\n{{category.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.subcategory\\\" ng-change=\\\"vm.categoriesFilterHasChanged() && vm.applyFilters()\\\"><md-select-header>\\n<input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"subcategoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SUBCATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"subcategory in vm.availableSubcategories() | filter:subcategoriesSearchText | orderBy: \\'name\\'\\\" \\nvalue=\\\"{{subcategory.id}}\\\" ng-if=\\\"vm.selectedCategoryId == null || subcategory.category.id == vm.selectedCategoryId\\\">\\n{{subcategory.name}} - {{subcategory.category.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" \\nflex-gt-md=\\\"25\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.filters.is_noos\\\" ng-change=\\\"vm.applyFilters()\\\"><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.INCLUDE_NOOS\\\" ng-value=\\\"1\\\"></md-option><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.EXCLUDE_NOOS\\\" ng-value=\\\"2\\\"></md-option><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ONLY_NOOS\\\" ng-value=\\\"3\\\"></md-option></md-select></div><nd-top-ten class=\\\"full-width\\\" \\ndate-range=\\\"vm.dateRange\\\" top-ten-type=\\\"\\'products\\'\\\" warehouse-ids=\\\"vm.warehouseIds\\\" filters=\\\"vm.filters\\\"></nd-top-ten>\\n<div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex><nd-top-ten date-range=\\\"vm.dateRange\\\" top-ten-type=\\\"\\'categories\\'\\\" \\nwarehouse-ids=\\\"vm.warehouseIds\\\" flex filters=\\\"vm.filters\\\"></nd-top-ten><nd-top-ten date-range=\\\"vm.dateRange\\\" \\ntop-ten-type=\\\"\\'subcategories\\'\\\" warehouse-ids=\\\"vm.warehouseIds\\\" flex filters=\\\"vm.filters\\\"></nd-top-ten></div><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex><nd-top-ten date-range=\\\"vm.dateRange\\\" top-ten-type=\\\"\\'brands\\'\\\" \\nwarehouse-ids=\\\"vm.warehouseIds\\\" flex filters=\\\"vm.filters\\\"></nd-top-ten></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/tabs/products.html\",\"<div id=\\\"retail-dashboard-products\\\" layout=\\\"column\\\" flex><div layout=\\\"row\\\" class=\\\"pb-0 mb-10 mt-10\\\"><md-select \\nclass=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.filters.season\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"seasonSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SEASONS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasons | filter:seasonSearchText | orderBy: \\'position\\'\\\" value=\\\"{{season.id}}\\\">{{season.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.brand\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"brandsSearchText\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_BRANDS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"brand in vm.brands | filter:brandsSearchText | orderBy: \\'name\\'\\\" value=\\\"{{brand.id}}\\\">{{brand.name}}\\n</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.category\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"categoriesSearchText\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_CATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"category in vm.categories | filter:categoriesSearchText | orderBy: \\'name\\'\\\" value=\\\"{{category.id}}\\\">\\n{{category.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.subcategory\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"subcategoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option translate=\\\"INVENTORY_DASHBOARD.ALL_SUBCATEGORIES\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | filter:subcategoriesSearchText | orderBy: \\'name\\'\\\" \\nvalue=\\\"{{subcategory.id}}\\\" ng-if=\\\"vm.selectedCategoryId == null || subcategory.category.id == vm.selectedCategoryId\\\">\\n{{subcategory.name}}</md-option></md-select><md-select class=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" \\nng-model=\\\"vm.filters.is_noos\\\"><md-option translate=\\\"INVENTORY_DASHBOARD.INCLUDE_NOOS\\\" ng-value=\\\"1\\\"></md-option>\\n<md-option translate=\\\"INVENTORY_DASHBOARD.EXCLUDE_NOOS\\\" ng-value=\\\"2\\\"></md-option><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ONLY_NOOS\\\" ng-value=\\\"3\\\"></md-option></md-select></div><div layout=\\\"row\\\" flex>\\n<nd-product-kpis date-range=\\\"vm.dateRange\\\" sell-out-type=\\\"\\'products\\'\\\" warehouse-ids=\\\"vm.warehouseIds\\\" flex \\nfilters=\\\"vm.filters\\\"></nd-product-kpis></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex><nd-product-kpis \\ndate-range=\\\"vm.dateRange\\\" sell-out-type=\\\"\\'brands\\'\\\" warehouse-ids=\\\"vm.warehouseIds\\\" flex filters=\\\"vm.filters\\\">\\n</nd-product-kpis></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex><nd-product-kpis date-range=\\\"vm.dateRange\\\" \\nsell-out-type=\\\"\\'categories\\'\\\" warehouse-ids=\\\"vm.warehouseIds\\\" flex filters=\\\"vm.filters\\\"></nd-product-kpis></div><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex><nd-product-kpis date-range=\\\"vm.dateRange\\\" sell-out-type=\\\"\\'subcategories\\'\\\" \\nwarehouse-ids=\\\"vm.warehouseIds\\\" flex filters=\\\"vm.filters\\\"></nd-product-kpis></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/tabs/realtime.html\",\"<div id=\\\"retail-dashboard-realtime\\\"><div class=\\\"widget-group\\\" layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap><ms-widget \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" \\nlayout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">{{\\'BASIC_RETAIL_KPI.VISITORS\\' | translate}}</span><div class=\\\"md-display-1\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.basicRetailKpi.traffic}}</div></ms-widget-front></ms-widget>\\n<ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'BASIC_RETAIL_KPI.TRANSACTIONS\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{vm.basicRetailKpi.transactions}}</div></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" \\nlayout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">{{\\'BASIC_RETAIL_KPI.CONVERSION\\' | translate}}</span><div \\nclass=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.basicRetailKpi.conversion | price}}%</div>\\n</ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES\\' | translate}}</span><div class=\\\"md-display-1 green-fg\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{vm.basicRetailKpi.gross_sales_actual | price}}€</div></ms-widget-front></ms-widget>\\n<ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES_PLAN\\' | translate}}</span> <span class=\\\"secondary-text\\\" \\nng-if=\\\"!vm.basicRetailKpi.gross_sales_plan\\\">{{\\'BASIC_RETAIL_KPI.NOT_GROSS_SALES_PLAN_PLANED\\' | translate}}</span><div \\nclass=\\\"md-display-1 purple-fg\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{vm.basicRetailKpi.gross_sales_plan | price}}€</div></ms-widget-front></ms-widget></div><nd-company-basic-retail-kpis \\nwarehouse-ids=\\\"vm.warehouseIds\\\"></nd-company-basic-retail-kpis><div class=\\\"widget-group\\\" layout=\\\"row\\\" flex=\\\"100\\\" \\nlayout-wrap><md-card flex flex-md=\\\"100\\\" flex-sm=\\\"100\\\" flex-xs=\\\"100\\\"><md-card-title><md-card-title-text><span \\nclass=\\\"h3\\\" translate=\\\"RETAIL_DASHBOARD.SALES_BY_VENDOR\\\">Sales by vendor</span></md-card-title-text></md-card-title>\\n<md-card-content><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\">\\n<md-nav-item name=\\\"sales\\\" md-nav-click=\\\"vm.currentNavItem=\\'sales\\';vm.updateChart();\\\">\\n{{\\'RETAIL_DASHBOARD.SALES\\' | translate}}</md-nav-item><md-nav-item name=\\\"products\\\" \\nmd-nav-click=\\\"vm.currentNavItem=\\'products\\';vm.updateChart();\\\">{{\\'RETAIL_DASHBOARD.PRODUCTS\\' | translate}}</md-nav-item>\\n</md-nav-bar><nvd3 class=\\\"h-400\\\" config=\\\"vm.pieWidget.mainChart.config\\\" options=\\\"vm.pieWidget.mainChart.options\\\" \\ndata=\\\"vm.mainChartData\\\" api=\\\"vm.chartApi\\\"></nvd3></md-card-content></md-card><md-card flex flex-md=\\\"100\\\" flex-sm=\\\"100\\\" \\nflex-xs=\\\"100\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"RETAIL_DASHBOARD.TOP_VENDORS\\\">Top vendors\\n</span></md-card-title-text></md-card-title><md-card-content class=\\\"full-height\\\"><table class=\\\"simple\\\" \\nms-responsive-table><thead><tr><td translate=\\\"RETAIL_DASHBOARD.VENDOR\\\"></td><td class=\\\"text-right\\\"><md-tooltip>\\n{{\\'RETAIL_DASHBOARD.PRODUCTS_SOLD_TOOLTIP\\' | translate}}</md-tooltip>{{\\'RETAIL_DASHBOARD.PRODUCTS_SOLD\\' | translate}}\\n</td><td class=\\\"text-right\\\"><md-tooltip>{{\\'RETAIL_DASHBOARD.PRODUCTS_RETURNED_TOOLTIP\\' | translate}}</md-tooltip>\\n{{\\'RETAIL_DASHBOARD.PRODUCTS_RETURNED\\' | translate}}</td></tr></thead><tbody><tr \\nng-repeat=\\\"employee in vm.data.today.employees_sales_2 | orderBy:\\'-total_products_sold\\'\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"nowrap\\\"><nd-user-picture fullname=\\\"vm.getLabel(employee, \\' \\')\\\"></nd-user-picture>\\n<span class=\\\"ml-5\\\">{{vm.getLabel(employee, \\' \\')}} </span><span class=\\\"secondary-text ml-5\\\">\\n{{employee.total_transactions}} {{\\'RETAIL_DASHBOARD.SALES\\' | translate}}</span></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\">{{employee.total_products_sold |price }} {{vm.currencyCharacter}} <span \\nclass=\\\"secondary-text ml-8\\\">({{employee.amount_products_sold}})</span></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\">{{(employee.total_products_returned * -1) |price }} {{vm.currencyCharacter}} <span \\nclass=\\\"secondary-text ml-8\\\">({{employee.amount_products_returned * -1}})</span></div></td></tr></tbody></table>\\n</md-card-content></md-card></div><nd-basic-retail-kpis-todate-table warehouse-ids=\\\"vm.warehouseIds\\\">\\n</nd-basic-retail-kpis-todate-table></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/wholesale-dashboard/tabs/realtime.html\",\"<div id=\\\"wholesale-dashboard-realtime\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-select \\nclass=\\\"m-0 p-10\\\" flex-gt-md=\\\"20\\\" flex-sm=\\\"50\\\" flex-xs=\\\"100\\\" ng-model=\\\"vm.filters.season\\\" ng-change=\\\"vm.applyFilters()\\\">\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"seasonSearchText\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\ntranslate=\\\"INVENTORY_DASHBOARD.ALL_SEASONS\\\" ng-value=\\\"null\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasons | filter:seasonSearchText | orderBy: \\'position\\'\\\" value=\\\"{{season.id}}\\\">{{season.name}}\\n</md-option></md-select><div class=\\\"pl-16\\\"><md-checkbox class=\\\"m-0 ml-10\\\" ng-model=\\\"vm.filters.showInclTaxes\\\" \\nng-change=\\\"vm.applyFilters()\\\">{{\\\"SALE.SHOW_INCL_TAXES\\\" | translate}}</md-checkbox></div></div><md-card><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"WHOLESALE_DASHBOARD.CUSTOMERS\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><div layout=\\\"row\\\" ng-if=\\\"vm.loading\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular class=\\\"mh-8\\\"></md-progress-circular></div><table class=\\\"simple m-0\\\" ng-if=\\\"!vm.loading\\\" \\nms-responsive-table flex><thead><tr><th class=\\\"text-left\\\" width=\\\"34%\\\" translate=\\\"WHOLESALE_DASHBOARD.CUSTOMER\\\"></th><th\\n class=\\\"text-right\\\" width=\\\"11%\\\" translate=\\\"WHOLESALE_DASHBOARD.SALES_OPEN\\\"></th><th class=\\\"text-right\\\" width=\\\"11%\\\" \\ntranslate=\\\"WHOLESALE_DASHBOARD.ORDERED\\\"></th><th class=\\\"text-right\\\" width=\\\"11%\\\" \\ntranslate=\\\"WHOLESALE_DASHBOARD.SHIPPED\\\"></th><th class=\\\"text-right\\\" width=\\\"11%\\\" \\ntranslate=\\\"WHOLESALE_DASHBOARD.INVOICED\\\"></th><th class=\\\"text-right\\\" width=\\\"11%\\\" translate=\\\"WHOLESALE_DASHBOARD.PAID\\\">\\n</th></tr></thead><tbody><tr ng-repeat=\\\"customer_data in vm.data.data_by_customer | orderBy:\\'-current_year_invoiced\\'\\\">\\n<td ng-if=\\\"!customer_data.is_negative\\\" rowspan=\\\"{{customer_data.has_negative? 2 : 1}}\\\" class=\\\"text-left\\\" width=\\\"34%\\\" \\nstyle=\\\"vertical-align: top\\\"><a ui-sref=\\\"app.contacts.contact.overview({id:customer_data.id})\\\" class=\\\"text-bold\\\">\\n{{customer_data.name}}</a></td><td width=\\\"11%\\\" class=\\\"text-right\\\" \\nng-class=\\\"{\\'red-500-fg\\': customer_data.is_negative, \\'secondary-text\\': customer_data.opened==0}\\\">\\n{{customer_data.opened || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" width=\\\"11%\\\" \\nng-class=\\\"{\\'red-500-fg\\': customer_data.is_negative, \\'secondary-text\\': customer_data.ordered==0}\\\">\\n{{customer_data.ordered || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" width=\\\"11%\\\" \\nng-class=\\\"{\\'red-500-fg\\': customer_data.is_negative, \\'secondary-text\\': customer_data.shipped==0}\\\">\\n{{customer_data.shipped || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" width=\\\"11%\\\" \\nng-class=\\\"{\\'red-500-fg\\': customer_data.is_negative, \\'secondary-text\\': customer_data.invoiced==0, \\'green-fg\\': !customer_data.is_negative && customer_data.shipped > customer_data.invoiced}\\\">\\n{{customer_data.invoiced || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" width=\\\"11%\\\" \\nng-class=\\\"{\\'red-500-fg\\': customer_data.is_negative, \\'secondary-text\\': customer_data.paid==0}\\\">\\n{{customer_data.paid || 0 | price}} {{vm.currencyCharacter}}</td></tr><tr \\nng-repeat=\\\"customer_data in vm.data.data_by_customer_total\\\"><td class=\\\"text-left text-bold\\\" width=\\\"34%\\\">\\n{{\\'WHOLESALE_DASHBOARD.\\' + customer_data.name | translate}}</td><td class=\\\"text-right text-bold\\\" width=\\\"11%\\\">\\n{{customer_data.total_opened || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right text-bold\\\" width=\\\"11%\\\">\\n{{customer_data.total_ordered || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right text-bold\\\" width=\\\"11%\\\">\\n{{customer_data.total_shipped || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right text-bold\\\" width=\\\"11%\\\">\\n{{customer_data.total_invoiced || 0 | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right text-bold\\\" \\nwidth=\\\"11%\\\">{{customer_data.total_paid || 0 | price}} {{vm.currencyCharacter}}</td></tr></tbody></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/addresses.html\",\"<div id=\\\"contacts-contact-details\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.ADDRESSES\\\"></div></div><md-button class=\\\"m-0 mr-8 md-primary md-raised\\\" \\nng-disabled=\\\"vm.saving\\\" data-test-id=\\\"addcontact-button-add-adress\\\" has-permission=\\\"contacts.contact.addresses.create\\\" \\nng-click=\\\"vm.newAddress()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" \\nclass=\\\"mr-5\\\"></md-icon>{{\\'CONTACTS.NEW_ADDRESS\\' | translate}}</div></md-button></div></div></div><div class=\\\"content\\\">\\n<md-card><md-card-content><md-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table \\nclass=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"><tbody></tbody></table></md-content></md-card-content></md-card></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/b2b-ecommerce.html\",\"<div id=\\\"contacts-contact-b2b-ecommerce\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.B2B_ECOMMERCE\\\"></div></div></div></div></div><div class=\\\"content\\\"><md-card>\\n<md-card-content class=\\\"no-padding-bottom\\\"><md-list><md-list-item class=\\\"no-spaces\\\"><div layout=\\\"row\\\" class=\\\"\\\" flex>\\n<div layout=\\\"column\\\" layout-align=\\\"start start\\\"><h3 translate=\\\"CONTACTS.CREDENTIALS\\\"></h3></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end start\\\" class=\\\"md-secondary\\\"><md-button ng-disabled=\\\"vm.sending || !vm.b2bEcommercePassword\\\" \\nclass=\\\"stroked\\\" translate=\\\"CONTACTS.SAVE_AND_SEND_CREDENTIALS\\\" \\nhas-permission=\\\"contacts.contact.b2b_ecommerces.b2b_ecommerce.update\\\" ng-click=\\\"vm.saveB2BPassword(true)\\\"></md-button>\\n<md-button ng-disabled=\\\"vm.sending || !vm.b2bEcommercePassword\\\" class=\\\"md-raised md-primary\\\" translate=\\\"GENERAL.SAVE\\\" \\nhas-permission=\\\"contacts.contact.b2b_ecommerces.b2b_ecommerce.update\\\" ng-click=\\\"vm.saveB2BPassword(false)\\\"></md-button>\\n</div></div></md-list-item></md-list><form name=\\\"b2b_ecommerceForm\\\" class=\\\"md-inline-form md-padding\\\" novalidate \\nlayout=\\\"column\\\" flex><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container \\nng-disabled=\\\"true\\\" flex=\\\"25\\\" class=\\\"password-input\\\"><label translate=\\\"USERS.EMAIL\\\">Email</label><md-icon \\nmd-font-icon=\\\"icon-account\\\" class=\\\"name icon\\\"></md-icon><input ng-model=\\\"vm.contact.email\\\" disabled=\\\"true\\\">\\n</md-input-container><md-button ng-if=\\\"!vm.changePassword\\\" class=\\\"md-primary change-password-button\\\" \\nng-click=\\\"vm.changePassword = true\\\" translate=\\\"CONTACTS.CHANGE_PASSWORD\\\"></md-button><md-input-container \\nng-disabled=\\\"!vm.contact.b2b_ecommerce\\\" flex=\\\"25\\\" ng-if=\\\"vm.changePassword\\\" class=\\\"password-input\\\"><label \\ntranslate=\\\"USERS.NEW_PASSWORD\\\">New password</label><md-icon md-font-icon=\\\"icon-key\\\" class=\\\"name icon\\\"></md-icon><input \\nng-model=\\\"vm.b2bEcommercePassword\\\" autocomplete=\\\"new-password\\\" \\nhas-permission-else-disable=\\\"contacts.contact.b2b_ecommerces.b2b_ecommerce.update\\\" type=\\\"password\\\">\\n</md-input-container></div></div></form></md-card-content></md-card><md-card><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><h3 translate=\\\"CONTACTS.ENABLE_B2B_ECOMMERCE\\\"></h3><span flex></span><md-button \\nng-disabled=\\\"vm.sending || b2b_ecommerceForm.$invalid || b2b_ecommerceForm.$pristine || vm.contact.b2b_ecommerce_password == \\'\\' \\\" \\nclass=\\\"md-raised md-primary\\\" translate=\\\"GENERAL.SAVE\\\" \\nhas-permission=\\\"contacts.contact.b2b_ecommerces.b2b_ecommerce.update\\\" \\nng-click=\\\"vm.save() && b2b_ecommerceForm.$setPristine()\\\"></md-button></div><div class=\\\"did-you-know\\\" \\nhas-permission=\\\"app.wholesale.b2b_ecommerces.b2b_ecommerce\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"blue-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span class=\\\"font-size-14\\\">\\n{{\\'CONTACTS.SETUP_B2B_ECOMMERCE\\' | translate}}</span> <span class=\\\"secondary-text\\\">\\n{{\\'CONTACTS.SETUP_B2B_ECOMMERCE_MSG\\' | translate}}</span></div></div></div><table class=\\\"simple\\\" flex><thead><tr \\nclass=\\\"md-background-bg\\\"><th></th><th width=\\\"10%\\\" translate=\\\"CONTACTS.NAME\\\"></th><th width=\\\"30%\\\" \\ntranslate=\\\"CONTACTS.URL\\\"></th><th width=\\\"10%\\\" translate=\\\"\\\"></th></tr></thead><tbody><tr \\nng-repeat=\\\"ecommerce in vm.selectedEcommerces\\\"><td width=\\\"10%\\\"><md-switch ng-model=\\\"ecommerce.selected\\\" \\nng-change=\\\"vm.setDirty()\\\" has-permission-else-disable=\\\"contacts.contact.b2b_ecommerces.b2b_ecommerce.update\\\">\\n</md-switch></td><td width=\\\"20%\\\">{{ ecommerce.slug }}</td><td width=\\\"30%\\\">{{ ecommerce.url }}</td><td width=\\\"10%\\\">\\n<md-button class=\\\"md-primary\\\" ui-sref=\\\"app.wholesale.b2b_ecommerces.b2b_ecommerce({id:ecommerce.id})\\\" \\nstyle=\\\"color:#4a5ff0\\\">{{\\'CONTACTS.SETUP_B2B_ECOMMERCE\\' | translate}}</md-button></td></tr></tbody></table>\\n</md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/billing.html\",\"<div id=\\\"contacts-contact-details\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.BILLING\\\"></div></div>\\n<div><md-button ng-disabled=\\\"vm.saving\\\" class=\\\"m-0 mr-8 md-primary md-raised\\\" translate=\\\"GENERAL.SAVE\\\" \\ndata-test-id=\\\"addcontact-button-billing-save\\\" has-permission=\\\"contacts.contact.billing.update\\\" ng-click=\\\"vm.save()\\\">\\n</md-button></div></div></div></div><div class=\\\"content\\\"><md-card><md-card-content><form name=\\\"vm.billingForm\\\" \\nclass=\\\"md-inline-form md-padding\\\" novalidate layout=\\\"column\\\" flex><div layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap>\\n<md-input-container class=\\\"md-icon-float\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon md-font-icon=\\\"icon-bank\\\" class=\\\"icon\\\">\\n</md-icon><label translate=\\\"CONTACTS.PAYMENT_METHOD\\\"></label><md-select ng-model=\\\"vm.contact.payment_method\\\" \\ndata-test-id=\\\"addcontact-billing-select-payment-type\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'contacts.contact.billing.update\\')\\\" ng-change=\\\"vm.onPaymentMethodChange()\\\">\\n<md-option ng-repeat=\\\"payment_method in vm.paymentMethods\\\" ng-value=\\\"payment_method.id\\\" \\ndata-test-id=\\\"addcontact-billing-select-payment-type-individual\\\">{{payment_method.name}}</md-option></md-select>\\n</md-input-container><md-input-container flex=\\\"50\\\" flex-gt-sm=\\\"25\\\" class=\\\"mt-5\\\"><md-checkbox \\nng-model=\\\"vm.contact.exclude_taxes\\\" aria-label=\\\"Exclude taxes\\\" flex \\nhas-permission-else-disable=\\\"contacts.contact.billing.update\\\">{{\\'CONTACTS.EXCLUDE_TAXES\\' | translate }}</md-checkbox>\\n</md-input-container><md-input-container flex=\\\"50\\\" flex-gt-sm=\\\"25\\\" class=\\\"mt-5\\\"><md-checkbox \\nng-model=\\\"vm.contact.surcharge\\\" \\nng-disabled=\\\"vm.contact.exclude_taxes || !Session.hasPermission(\\'contacts.contact.billing.update\\')\\\" \\naria-label=\\\"Equivalence surcharge\\\" flex>{{\\'CONTACTS.EQUIVALENCE_SURCHARGE\\' | translate }}</md-checkbox>\\n</md-input-container><div flex=\\\"100\\\"></div><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"vm.contact.payment_method\\\"><label translate=\\\"CONTACTS.PAYMENT_METHOD_DAYS\\\"></label><md-icon \\nmd-font-icon=\\\"icon-calendar\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.paymentMethodDays\\\" type=\\\"number\\\" min=\\\"0\\\" \\nplaceholder=\\\"{{\\'CONTACTS.PAYMENT_METHOD_DAYS_PLACEHOLDER\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"contacts.contact.billing.update\\\"><div class=\\\"hint\\\">\\n{{\\'CONTACTS.PAYMENT_METHOD_DAYS_HINT\\' | translate}}</div></md-input-container><div flex=\\\"100\\\"></div><md-input-container\\n class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.IBAN\\\"></label><md-icon \\nmd-font-icon=\\\"icon-credit-card\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.iban\\\" type=\\\"text\\\" \\ndata-test-id=\\\"addcontact-billing-iban\\\" maxlength=\\\"34\\\" ng-iban \\nhas-permission-else-disable=\\\"contacts.contact.billing.update\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.SWIFT\\\"></label><md-icon \\nmd-font-icon=\\\"icon-credit-card\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.swift\\\" type=\\\"text\\\" maxlength=\\\"11\\\" \\ndata-test-id=\\\"addcontact-billing-swift\\\" has-permission-else-disable=\\\"contacts.contact.billing.update\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.INVOICE_TYPE\\\"></label><md-icon md-font-icon=\\\"icon-document\\\" class=\\\"icon\\\"></md-icon><md-select \\nng-model=\\\"vm.contact.invoice_type\\\" ng-disabled=\\\"!Session.hasPermission(\\'contacts.contact.billing.update\\')\\\"><md-option \\nng-repeat=\\\"(code,value) in vm.contactInvoicingTypes\\\" value=\\\"{{value}}\\\">{{\\'CONTACTS.\\' + code | translate}}</md-option>\\n</md-select></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.PRICING_TIER\\\"></label><md-icon md-font-icon=\\\"icon-layers\\\" class=\\\"icon\\\"></md-icon><md-select \\nng-model=\\\"vm.contact.pricing_tier\\\" data-test-id=\\\"addcontact-billing-select-pricing-tier\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'contacts.contact.billing.update\\')\\\"><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers\\\" data-test-id=\\\"addcontact-billing-select-pricing-tier-individual\\\" \\nvalue=\\\"{{pricingTier.id}}\\\">{{pricingTier.name}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block mt-40\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.DISCOUNT\\\"></label><md-icon \\nmd-font-icon=\\\"icon-percent\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.discount\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"contacts.contact.billing.update\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block mt-40\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.EARLY_PAYMENT_DISCOUNT\\\"></label><md-icon \\nmd-font-icon=\\\"icon-percent\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.early_payment_discount\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"contacts.contact.billing.update\\\"></md-input-container><md-autocomplete flex=\\\"50\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'contacts.contact.billing.update\\')\\\" \\nmd-floating-label=\\\"{{\\'CONTACTS.CUSTOMER_SALES_CHANNEL\\' | translate}}\\\" \\nmd-items=\\\"salesChannel in vm.salesChannelQuerySearch()\\\" md-selected-item=\\\"vm.contact.sales_channel\\\" \\nmd-search-text=\\\"vm.salesChannelSearchText\\\" md-selected-item-change=\\\"vm.selectSalesChannel(salesChannel)\\\" \\nmd-item-text=\\\"vm.contact.sales_channel_instance.name\\\" md-min-length=\\\"0\\\" md-delay=\\\"300\\\" \\nplaceholder=\\\"{{\\'CONTACTS.CUSTOMER_SALES_CHANNEL\\' | translate}}\\\" md-no-cache=\\\"true\\\"><md-item-template><div layout=\\\"row\\\">\\n<span md-highlight-text=\\\"vm.salesChannelSearchText\\\" md-highlight-flags=\\\"^i\\\">{{salesChannel.name}}</span></div>\\n</md-item-template><md-not-found>Not found. <a href=\\\"#\\\" ng-disabled=\\\"vm.creatingSalesChannel\\\" \\nng-click=\\\"vm.createSalesChannel(vm.salesChannelSearchText)\\\">Create it</a></md-not-found></md-autocomplete>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label>{{\\'CONTACTS.COUNTRY\\' | translate }}</label><md-select \\nng-model=\\\"vm.contact.country\\\" ng-disabled=\\\"!Session.hasPermission(\\'contacts.contact.billing.update\\')\\\"><md-option \\nng-repeat=\\\"(countryCode, countryName) in vm.countries\\\" ng-value=\\\"countryCode\\\">{{countryName}}</md-option></md-select>\\n</md-input-container></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/details.html\",\"<div id=\\\"contacts-contact-details\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-menu\\\"></md-icon></md-button><div flex \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2 pl-8\\\" \\nng-if=\\\"vm.isNew\\\" translate=\\\"CONTACTS.NEW_CONTACT\\\"></div><div class=\\\"h2 pl-8\\\" ng-if=\\\"!vm.isNew\\\" \\ntranslate=\\\"CONTACTS.DETAILS\\\"></div></div><div><md-button class=\\\"stroked md-warn\\\" \\nng-click=\\\"vm.deleteContactConfirm($event)\\\" ng-disabled=\\\"vm.loadingDelete\\\" translate=\\\"CONTACTS.DELETE\\\"></md-button>\\n<md-button class=\\\"m-0 mr-8 md-primary md-raised\\\" data-test-id=\\\"addcontact-button-save-details\\\" \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"vm.saving\\\" \\ntranslate=\\\"GENERAL.SAVE\\\"></md-button></div></div></div></div><div class=\\\"content\\\"><md-card><md-card-content><form \\nclass=\\\"md-inline-form md-padding\\\" data-test-id=\\\"addcontact-formDetails\\\" flex layout=\\\"column\\\" name=\\\"vm.contactForm\\\" \\nnovalidate><div flex=\\\"100\\\" layout=\\\"row\\\" layout-wrap><md-input-container class=\\\"md-icon-float md-block mb-40\\\" flex=\\\"50\\\" \\nflex-gt-sm=\\\"25\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-clipboard-account\\\"></md-icon><label translate=\\\"CONTACTS.TYPE\\\">\\n</label><md-select data-test-id=\\\"addcontact-select-type\\\" flex=\\\"100\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" md-no-asterisk=\\\"false\\\" \\nng-model=\\\"vm.contact.type\\\" required translate-attr-placeholder=\\\"CONTACTS.TYPE\\\"><md-option \\ndata-test-id=\\\"addcontact-select-type-individual\\\" ng-repeat=\\\"(code,value) in vm.contactTypes\\\" ng-value=\\\"code\\\">\\n{{\\'CONTACTS.\\' + value | translate}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block mb-40\\\" flex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-account-multiple\\\"></md-icon><label>{{\\'CONTACTS.GROUPS\\' | translate }}</label><md-select \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" multiple=\\\"true\\\" \\nng-model=\\\"vm.contact.groups\\\"><md-select-header><input class=\\\"md-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nng-model=\\\"vm.contactGroupsSearchText\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header>\\n<md-option ng-repeat=\\\"group in vm.contactGroups | filter:{\\'name\\':vm.contactGroupsSearchText} | orderBy: \\'name\\'\\\" \\nng-value=\\\"group.id\\\">{{group.name}}</md-option><nd-new-object-option api-name=\\\"\\'contactGroups\\'\\\" \\narray=\\\"vm.contact.groups\\\" callback=\\\"vm.newGroupAdded(newObject)\\\" dialog-title=\\\"\\'NEW_GROUP\\'\\\" \\noption-label=\\\"\\'ADD_NEW_GROUP\\'\\\"></nd-new-object-option></md-select></md-input-container><md-autocomplete flex=\\\"50\\\" \\nflex-gt-sm=\\\"25\\\" has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" md-delay=\\\"300\\\" \\nmd-floating-label=\\\"{{\\'CONTACTS.SALES_AGENT\\' | translate}}\\\" md-item-text=\\\"vm.getSelectedSalesAgentName()\\\" \\nmd-items=\\\"salesAgent in vm.salesAgentQuerySearch()\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" \\nmd-search-text=\\\"vm.salesAgentSearchText\\\" md-selected-item=\\\"vm.contact.sales_agent\\\" \\nmd-selected-item-change=\\\"vm.selectSalesAgent(salesAgent)\\\" placeholder=\\\"{{\\'CONTACTS.SALES_AGENT\\' | translate}}\\\">\\n<md-item-template><div layout=\\\"row\\\"><span md-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"vm.salesAgentSearchText\\\">\\n{{salesAgent.first_name}} {{salesAgent.last_name}}</span></div></md-item-template><md-not-found>Not found.\\n</md-not-found></md-autocomplete><md-autocomplete flex=\\\"50\\\" flex-gt-sm=\\\"25\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" md-delay=\\\"300\\\" \\nmd-floating-label=\\\"{{\\'CONTACTS.SALES_WAREHOUSE\\' | translate}}\\\" md-item-text=\\\"vm.getSelectedSalesWarehouseName()\\\" \\nmd-items=\\\"warehouse in vm.salesWarehouseQuerySearch()\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" \\nmd-search-text=\\\"vm.salesWarehouseSearchText\\\" md-selected-item=\\\"vm.contact.sales_warehouse\\\" \\nmd-selected-item-change=\\\"vm.selectSalesWarehouse(warehouse)\\\" placeholder=\\\"{{\\'CONTACTS.SALES_WAREHOUSE\\' | translate}}\\\">\\n<md-item-template><div layout=\\\"row\\\"><span md-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"vm.salesWarehouseSearchText\\\">\\n{{warehouse.name}}</span></div></md-item-template><md-not-found>Not found.</md-not-found></md-autocomplete>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.COMPANY_LEGAL_NAME\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-domain\\\"></md-icon><input \\ndata-test-id=\\\"addcontact-company-name\\\" has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" \\nmaxlength=\\\"128\\\" ng-model=\\\"vm.contact.name\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"CONTACTS.VAT\\\"></label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-bank\\\"></md-icon><input data-test-id=\\\"addcontact-company-vat\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" maxlength=\\\"255\\\" \\nng-model=\\\"vm.contact.vat\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"GENERAL.CODE\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-code-tags\\\">\\n</md-icon><input data-test-id=\\\"addcontact-company-code\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" maxlength=\\\"128\\\" \\nng-model=\\\"vm.contact.code\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"CONTACTS.FIRST_NAME\\\"></label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-account\\\"></md-icon><input data-test-id=\\\"addcontact-company-first-name\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" maxlength=\\\"255\\\" \\nng-model=\\\"vm.contact.first_name\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-block\\\" flex=\\\"50\\\" \\nflex-gt-sm=\\\"25\\\"><label translate=\\\"CONTACTS.LAST_NAME\\\"></label><input data-test-id=\\\"addcontact-company-last-name\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" maxlength=\\\"255\\\" \\nng-model=\\\"vm.contact.last_name\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-gender-transgender\\\"></md-icon><label>\\n{{\\'CONTACTS.GENDER\\' | translate }}</label><md-select \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-model=\\\"vm.contact.gender\\\" \\nplaceholder=\\\"{{\\'CONTACTS.GENDER\\' | translate }}\\\"><md-option ng-value=\\\"1\\\" translate=\\\"CUSTOMERS.MALE\\\"></md-option>\\n<md-option ng-value=\\\"2\\\" translate=\\\"CUSTOMERS.FEMALE\\\"></md-option><md-option ng-value=\\\"3\\\" translate=\\\"CUSTOMERS.OTHER\\\">\\n</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float md-icon-left md-block\\\" flex=\\\"50\\\" \\nflex-gt-sm=\\\"25\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-cake\\\"></md-icon><label>{{\\'CONTACTS.BIRTHDAY\\' | translate }}\\n</label><md-datepicker md-hide-icons=\\\"calendar\\\" md-open-on-focus ng-model=\\\"vm.contact.birthday\\\"></md-datepicker>\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-phone\\\">\\n</md-icon><label translate=\\\"CONTACTS.PHONE_NUMBER\\\"></label><textarea data-test-id=\\\"addcontact-company-phone\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" max-rows=\\\"4\\\" maxlength=\\\"63\\\" \\nng-model=\\\"vm.contact.phone\\\" type=\\\"text\\\"></textarea></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-cellphone-iphone\\\"></md-icon><label translate=\\\"CONTACTS.MOBILE_PHONE_NUMBER\\\">\\n</label><textarea has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" max-rows=\\\"4\\\" \\nmaxlength=\\\"63\\\" ng-model=\\\"vm.contact.mobile_phone\\\" type=\\\"text\\\"></textarea></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"CONTACTS.EMAIL\\\"></label><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-email\\\"></md-icon><input data-test-id=\\\"addcontact-company-email\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" maxlength=\\\"255\\\" \\nng-model=\\\"vm.contact.email\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"CONTACTS.WEBSITE\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-web\\\">\\n</md-icon><input has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" maxlength=\\\"128\\\" \\nng-model=\\\"vm.contact.website\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"\\\" flex=\\\"100\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-note\\\"></md-icon><label translate=\\\"CONTACTS.NOTES\\\"></label>\\n<textarea has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" max-rows=\\\"4\\\" \\nng-model=\\\"vm.contact.notes\\\" type=\\\"text\\\"></textarea></md-input-container><md-input-container class=\\\"\\\" flex=\\\"100\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"USERS.DEFAULT_LANGUAGE\\\">Language</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-flag-checkered-variant\\\"></md-icon><md-select \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-model=\\\"vm.contact.lang\\\" translate>\\n<md-option aria-label=\\\"{{lang.title}}\\\" ng-repeat=\\\"(iso, lang) in vm.languages\\\" ng-value=\\\"lang.code\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag mr-5\\\" src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span>\\n{{lang.translation | translate}}</span></div></md-option></md-select></md-input-container><div class=\\\"\\\" flex=\\\"100\\\" \\nflex flex-gt-sm=\\\"50\\\" layout=\\\"row\\\"><md-icon class=\\\"icon m-5 mt-15\\\" md-font-icon=\\\"icon-tag\\\"></md-icon><md-chips \\nclass=\\\"s16\\\" flex ng-model=\\\"vm.contact.tags\\\" placeholder=\\\"{{\\'PRODUCT.TYPE_A_TAG\\' | translate}}\\\" \\nsecondary-placeholder=\\\"{{\\'PRODUCT.TYPE_ANOTHER_TAG\\' | translate}}\\\"></md-chips></div><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"vm.isProvider()\\\"><label \\ntranslate=\\\"CONTACTS.PURCHASE_LEAD_TIME\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-truck\\\"></md-icon><input \\nname=\\\"purchase_lead_time\\\" nd-no-float ng-model=\\\"vm.contact.purchase_lead_time\\\" step=\\\"1\\\" type=\\\"number\\\">\\n</md-input-container><md-input-container class=\\\"mt-40\\\" flex=\\\"100\\\" layout=\\\"column\\\"><md-checkbox flex \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-model=\\\"vm.contact.data_consent\\\">\\n{{\\'CONTACTS.DATA_CONSENT\\' | translate }}</md-checkbox><md-checkbox flex \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" \\nng-model=\\\"vm.contact.marketing_consent\\\">{{\\'CONTACTS.MARKETING_CONSENT\\' | translate }}</md-checkbox>\\n</md-input-container></div></form></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/invoices.html\",\"<div id=\\\"contacts-contact-invoices\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-lg hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-menu\\\"></md-icon></md-button><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2 pl-8 pr-16\\\" flex ng-if=\\\"vm.type === vm.INVOICE_TYPES.PROFORMA\\\" \\ntranslate=\\\"CONTACTS.PROFORMAS\\\"></div><div class=\\\"h2 pl-8 pr-16\\\" flex ng-if=\\\"vm.type === vm.INVOICE_TYPES.QUOTE\\\" \\ntranslate=\\\"CONTACTS.QUOTES\\\"></div><div class=\\\"h2 pl-8 pr-16\\\" flex ng-if=\\\"vm.type === vm.INVOICE_TYPES.INVOICE\\\" \\ntranslate=\\\"CONTACTS.INVOICES\\\"></div></div></div></div><div class=\\\"content p-0\\\" layout-fill><md-card layout-fill>\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container \\nclass=\\\"nd-search-input\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"invoices-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-change=\\\"vm.reloadInvoices()\\\" ng-model=\\\"vm.status.search\\\" \\nng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container><md-button class=\\\"mr-10 w-40\\\" ng-click=\\\"vm.showDateRangeDialog()\\\"><md-icon \\nmd-font-icon=\\\"icon-calendar\\\"></md-icon><md-tooltip>{{\\'INVOICES.FILTER_DATES\\' | translate}}</md-tooltip></md-button>\\n<span ng-if=\\\"vm.dateRange.dateStart\\\">\\n{{vm.dateRange.dateStart | date:\\'dd/MM/yyyy\\'}} - {{vm.dateRange.dateEnd | date:\\'dd/MM/yyyy\\'}}</span> <span flex></span>\\n<md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.waiting\\\"></md-progress-circular><md-button \\nclass=\\\"m-0 mr-8 md-primary\\\" ng-click=\\\"vm.downloadZip()\\\" ng-disabled=\\\"vm.waiting || vm.selected.length == 0\\\" \\ntranslate=\\\"INVOICES.DOWNLOAD_ZIP\\\"></md-button></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0 full-height\\\"><nd-invoices-list storage-label=\\\"vm.storageLabel\\\" \\nselected=\\\"vm.selected\\\" status=\\\"vm.status\\\" type=\\\"vm.type\\\"></nd-invoices-list></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/loyalty.html\",\"<div id=\\\"contacts-contact-balance\\\" layout=\\\"column\\\" flex><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg aria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" \\nclass=\\\"icon\\\"></md-icon></md-button><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" \\ntranslate=\\\"CONTACTS.LOYALTY\\\"></div></div></div><div class=\\\"did-you-know md-margin\\\" \\nng-if=\\\"!vm.configurationData.default_contact_balance_ratio_active\\\" \\nhas-permission-else-disable=\\\"app.inventory.configuration.loyalty.update\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"blue-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span class=\\\"font-size-14\\\">\\n{{\\'CONTACTS.COMPANY_BALANCE_NOT_ACTIVE\\' | translate}}</span> <span class=\\\"secondary-text\\\">\\n{{\\'CONTACTS.COMPANY_BALANCE_NOT_ACTIVE_BANNER\\' | translate}}</span></div><md-button ng-disabled=\\\"vm.saving\\\" \\nui-sref=\\\"app.inventory.configuration.loyalty\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"md-accent mh-8\\\"></md-progress-circular>\\n{{\\'CONTACTS.GO_TO_CONFIGURATION\\' |translate}}</div></md-button></div></div><div layout=\\\"row\\\"><div class=\\\"widget-group\\\" \\nlayout=\\\"row\\\" flex=\\\"100\\\" layout-wrap><ms-widget layout=\\\"column\\\" flex=\\\"25\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'CONTACTS.PURCHASES_MADE\\' | translate}}</span><div class=\\\"md-display-1 blue-fg\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{vm.contactData.purchase_count}}</div></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" flex=\\\"25\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'CONTACTS.AVAILABLE_BALANCE\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.contactData.balance}}€</div></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" flex=\\\"25\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span \\nclass=\\\"h3 text-bold\\\">{{\\'CONTACTS.TOTAL_ACCUMULATED_BALANCE\\' | translate}}</span><div class=\\\"md-display-1 green-fg\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.contactData.total_accumulated_balance | price}}€</div>\\n</ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"25\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'CONTACTS.TOTAL_USED_BALANCE\\' | translate}}</span><div class=\\\"md-display-1 red-fg\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\">{{vm.contactData.total_used_balance | price}}€</div></ms-widget-front></ms-widget></div></div>\\n<div layout=\\\"row\\\" flex=\\\"100\\\"><md-card flex=\\\"50\\\"><md-card-title class=\\\"loyalty-card-title mb-16\\\"><md-card-title-text>\\n<span class=\\\"h3\\\" translate=\\\"CONTACTS.LOYALTY_DETAIL_TITLE\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><div layout=\\\"column\\\"><div layout=\\\"row\\\" class=\\\"mb-32\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"CONTACTS.LOYALTY_START_DATE\\\" class=\\\"mr-8 secondary-text\\\"></span> <span>\\n{{vm.getLoyaltyStartDate() | date: \\'mediumDate\\'}}</span></div><div layout=\\\"row\\\" class=\\\"mb-32\\\"><div layout=\\\"column\\\" \\nclass=\\\"mr-8\\\"><span><b>{{\\'CONFIGURATION.BALANCE_RATIO_MESSAGE\\' | translate}}</b></span> <span \\ntranslate=\\\"CONFIGURATION.BALANCE_RATIO_RECOMMENDATION\\\" class=\\\"secondary-text font-size-12\\\"></span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"balance-ratio-container\\\"><input type=\\\"number\\\" min=\\\"0\\\" max=\\\"100\\\" \\nname=\\\"balance-ratio\\\" ng-model=\\\"vm.contactData.balance_ratio\\\" \\nhas-permission-else-disable=\\\"contacts.contact.loyalty.update\\\" ng-click=\\\"vm.startBalanceRatioEdition()\\\" \\nng-blur=\\\"vm.saveClientLoyaltyConfiguration()\\\" step=\\\"0.01\\\" class=\\\"text-right nd-input w-70\\\" \\nplaceholder=\\\"{{vm.configurationData.default_contact_balance_ratio}}\\\" \\nng-class=\\\"{\\'active-balance-ratio-input\\': vm.configurationData.default_contact_balance_ratio_active}\\\"> %</div></div><div\\n layout=\\\"column\\\" layout-align=\\\"center center\\\"><span \\nng-bind-html=\\\"\\'CONTACTS.DEFAULT_BALANCE_RATIO_MESSAGE\\' | translate: {defaultBalanceRatio: vm.getDefaultBalanceRatio()}\\\">\\n</span><md-button class=\\\"md-primary stroked\\\" ng-disabled=\\\"vm.saving || vm.editingBalanceRatio\\\" \\nng-click=\\\"vm.setBalanceRatioToDefault()\\\" ng-bind-html=\\\"\\'CONTACTS.DEFAULT_BALANCE_RATIO_BUTTON\\' | translate\\\">\\n</md-button></div></div></md-card-content></md-card><md-card flex=\\\"50\\\"><md-card-title class=\\\"loyalty-card-title\\\">\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><span class=\\\"h3 mr-16\\\" \\ntranslate=\\\"CONTACTS.LOYALTY_HISTORIC_TITLE\\\"></span><md-select ng-model=\\\"vm.historicMode\\\" \\nng-change=\\\"vm.setHistoricVisibleColumns()\\\" class=\\\"m-0 nd-input outlined h-30\\\"><md-option \\nng-value=\\\"vm.HISTORIC_ONLY_CHANGE\\\" translate=\\\"CONTACTS.LOYALTY_HISTORIC_ONLY_CHANGE\\\"></md-option><md-option \\nng-value=\\\"vm.HISTORIC_ACCUMULATED_AND_SPENT\\\" translate=\\\"CONTACTS.LOYALTY_HISTORIC_ACCUMULATED_AND_SPENT\\\"></md-option>\\n<md-option ng-value=\\\"vm.HISTORIC_ALL\\\" translate=\\\"CONTACTS.LOYALTY_HISTORIC_ALL\\\"></md-option></md-select></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll>\\n<table class=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstanceRelatedPosOrders\\\" \\ndt-options=\\\"vm.dtOptionsRelatedPosOrders\\\" dt-columns=\\\"vm.dtColumnsRelatedPosOrders\\\" \\nid=\\\"balance-related-pos-orders-table\\\"></table></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/overview.html\",\"<div id=\\\"contacts-contact-details\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.OVERVIEW\\\"></div><div>\\n<md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.printBalance()\\\">{{\\'GENERAL.PRINT\\' | translate}}</md-button></div>\\n</div></div></div><div class=\\\"content\\\"><md-card><md-card-content><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nlayout-align=\\\"center center\\\" flex class=\\\"md-padding pt-40 pb-40\\\"><div layout=\\\"column\\\" flex-gt-sm=\\\"33\\\" \\nlayout-align=\\\"center center\\\" flex><div layout=\\\"column\\\" class=\\\"p-30 pr-40 pl-40\\\" layout-align=\\\"center center\\\"><strong \\nclass=\\\"font-size-40\\\" ng-class=\\\"{\\'green-500-fg\\': vm.pendingDifference < 0, \\'red-500-fg\\': vm.pendingDifference >= 0}\\\">\\n{{vm.pendingDifference | price}}{{session.company.currency | currencyCharacter}}</strong><label class=\\\"secondary-text\\\" \\ntranslate=\\\"CONTACTS.PENDING_DIFFERENCE\\\"></label></div></div><div id=\\\"sales-vs-returns-chart\\\" class=\\\"h-150\\\" \\nflex-gt-sm=\\\"33\\\" flex></div><div id=\\\"payment-chart\\\" class=\\\"h-150\\\" flex-gt-sm=\\\"33\\\" flex></div></div><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\" flex><div class=\\\"simple-table-container\\\" flex=\\\"50\\\"><table class=\\\"dataTable row-border hover\\\" flex>\\n<thead><tr class=\\\"green-50-bg\\\"><th colspan=\\\"3\\\"><span class=\\\"text-left text-bold green-900-fg\\\" \\ntranslate=\\\"CONTACTS.SALE_INVOICES\\\"></span></th><th><span class=\\\"text-right green-900-fg\\\">\\n{{vm.totalSaleInvoices | price}} {{session.company.currency}}</span></th></tr><tr><th class=\\\"text-left\\\" \\ntranslate=\\\"INVOICES.SERIAL_NUMBER_TYPE\\\"></th><th class=\\\"text-left\\\" translate=\\\"INVOICES.BILLING_DATE\\\"></th><th \\nclass=\\\"text-right\\\" translate=\\\"INVOICES.TOTAL_INCL_TAX\\\"></th><th class=\\\"text-right\\\" translate=\\\"INVOICES.PAYMENT\\\"></th>\\n</tr></thead><tbody><tr ng-repeat=\\\"invoice in vm.saleInvoices\\\"><td><a \\nui-sref=\\\"app.accounting.invoices.invoice({id:invoice.id})\\\">{{invoice.autocode}}</a></td><td>\\n{{invoice.billing_date | date}}</td><td class=\\\"text-right\\\">\\n{{invoice.total_incl_tax | price}} {{session.company.currency}}</td><td class=\\\"text-right\\\"><span \\nng-if=\\\"invoice.payment_status==10\\\" class=\\\"text-boxed red\\\" translate=\\\"INVOICE.PENDING\\\"></span> <span \\nng-if=\\\"invoice.payment_status==20\\\" class=\\\"text-boxed green\\\" translate=\\\"INVOICE.PAID\\\"></span></td></tr></tbody></table>\\n</div><div class=\\\"simple-table-container\\\" flex=\\\"50\\\"><table class=\\\"dataTable row-border hover\\\" flex><thead><tr \\nclass=\\\"red-50-bg\\\"><th colspan=\\\"3\\\"><span class=\\\"text-left text-bold red-900-fg\\\" translate=\\\"CONTACTS.RETURN_INVOICES\\\">\\n</span></th><th><span class=\\\"text-right red-900-fg\\\">{{vm.totalReturnInvoices | price}} {{session.company.currency}}\\n</span></th></tr><tr><th class=\\\"text-left\\\" translate=\\\"INVOICES.SERIAL_NUMBER_TYPE\\\"></th><th class=\\\"text-left\\\" \\ntranslate=\\\"INVOICES.BILLING_DATE\\\"></th><th class=\\\"text-right\\\" translate=\\\"INVOICES.TOTAL_INCL_TAX\\\"></th><th \\nclass=\\\"text-right\\\" translate=\\\"INVOICES.PAYMENT\\\"></th></tr></thead><tbody><tr ng-repeat=\\\"invoice in vm.returnInvoices\\\">\\n<td><a ui-sref=\\\"app.accounting.invoices.invoice({id:invoice.id})\\\">{{invoice.autocode}}</a></td><td>\\n{{invoice.billing_date | date}}</td><td class=\\\"text-right\\\">\\n{{invoice.total_incl_tax | price}} {{session.company.currency}}</td><td class=\\\"text-right\\\"><span \\nng-if=\\\"invoice.payment_status==10\\\" class=\\\"text-boxed red\\\" translate=\\\"INVOICE.PENDING\\\"></span> <span \\nng-if=\\\"invoice.payment_status==20\\\" class=\\\"text-boxed green\\\" translate=\\\"INVOICE.PAID\\\"></span></td></tr></tbody></table>\\n</div></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/persons.html\",\"<div id=\\\"contacts-contact-persons\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.OTHER_CONTACTS\\\"></div>\\n</div><div><md-button class=\\\"m-0 mr-8 md-primary md-raised\\\" has-permission=\\\"contacts.contact.persons.create\\\" \\ndata-test-id=\\\"addcontact-button-addperson\\\" ng-click=\\\"vm.addPerson()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'CONTACTS.ADD_NEW_PERSON\\' | translate}}</div></md-button>\\n</div></div></div></div><div class=\\\"content p-8\\\" flex layout-fill><md-card flex layout-fill><md-card-content flex \\nlayout-fill><div class=\\\"content-wrapper\\\" layout=\\\"row\\\" flex layout-fill><md-content \\nclass=\\\"content no-padding fullpage-datatable border-right\\\" flex=\\\"50\\\" ms-scroll flex=\\\"column\\\" \\nng-if=\\\"!vm.addingNewPerson\\\" layout-fill><table class=\\\"dataTable row-border hover\\\" height=\\\"100%\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"contacts-contact-persons-table\\\">\\n</table></md-content><div class=\\\"content thread-detail\\\" ms-scroll layout=\\\"column\\\" flex layout-fill><div \\nng-if=\\\"!vm.selectedPerson\\\" class=\\\"no-thread-selected\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" flex><div \\nlayout=\\\"column\\\"><md-icon md-font-icon=\\\"icon-account\\\" class=\\\"s120 grey-400-fg\\\"></md-icon><span class=\\\"hint-text\\\" \\ntranslate=\\\"CONTACTS.SELECT_A_CONTACT_PERSON\\\"></span></div></div><div ng-if=\\\"vm.selectedPerson\\\" layout=\\\"column\\\" \\nlayout-align=\\\"space-between start\\\" flex><form id=\\\"persons-form\\\" name=\\\"vm.personForm\\\" class=\\\"md-inline-form p-8\\\" \\nnovalidate layout=\\\"column\\\" ng-if=\\\"vm.selectedPerson\\\"><span ng-if=\\\"!vm.addingNewPerson\\\" class=\\\"md-subhead mb-16\\\" \\ntranslate=\\\"CONTACTS.CONTACT_PERSON\\\"></span> <span ng-if=\\\"vm.addingNewPerson\\\" class=\\\"md-subhead mb-16\\\" \\ntranslate=\\\"CONTACTS.ADD_NEW_PERSON\\\"></span><div layout=\\\"row\\\" layout-wrap><md-input-container flex=\\\"50\\\" \\nclass=\\\"mb-0 mb-0\\\"><label translate=\\\"CONTACTS.FIRST_NAME\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"vm.selectedPerson.first_name\\\" data-test-id=\\\"addcontact-person-first-name\\\" \\nhas-permission-else-disable=\\\"contacts.contact.persons.create,contacts.contact.persons.update\\\" required>\\n</md-input-container><md-input-container flex=\\\"50\\\" class=\\\"mb-0 mb-0\\\"><label translate=\\\"CONTACTS.LAST_NAME\\\"></label>\\n<input type=\\\"text\\\" ng-model=\\\"vm.selectedPerson.last_name\\\" data-test-id=\\\"addcontact-person-last-name\\\" \\nhas-permission-else-disable=\\\"contacts.contact.persons.create,contacts.contact.persons.update\\\"></md-input-container>\\n<md-input-container flex=\\\"50\\\" class=\\\"mb-0 mb-0\\\"><label translate=\\\"CONTACTS.EMAIL\\\"></label><input type=\\\"email\\\" \\nng-model=\\\"vm.selectedPerson.email\\\" data-test-id=\\\"addcontact-person-email\\\" \\nhas-permission-else-disable=\\\"contacts.contact.persons.create,contacts.contact.persons.update\\\"></md-input-container>\\n<md-input-container flex=\\\"50\\\" class=\\\"mb-0 mb-0\\\"><label translate=\\\"CONTACTS.PHONE_NUMBER\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"vm.selectedPerson.phone\\\" data-test-id=\\\"addcontact-person-phone\\\" \\nhas-permission-else-disable=\\\"contacts.contact.persons.create,contacts.contact.persons.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" class=\\\"mb-0 mb-0\\\"><label translate=\\\"CONTACTS.NOTES\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"vm.selectedPerson.notes\\\" \\nhas-permission-else-disable=\\\"contacts.contact.persons.create,contacts.contact.persons.update\\\"></md-input-container>\\n<md-chips ng-model=\\\"vm.selectedPerson.tags\\\" flex=\\\"100\\\" class=\\\"s16 pb-25\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'contacts.contact.persons.create,contacts.contact.persons.update\\')\\\" \\nplaceholder=\\\"{{\\'PRODUCT.TYPE_A_TAG\\' | translate}}\\\" secondary-placeholder=\\\"{{\\'PRODUCT.TYPE_ANOTHER_TAG\\' | translate}}\\\">\\n</md-chips><md-input-container flex=\\\"50\\\" class=\\\"mb-0 mb-0\\\"><md-select ng-model=\\\"vm.selectedPerson.gender\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'contacts.contact.persons.create,contacts.contact.persons.update\\')\\\" \\nplaceholder=\\\"{{\\'CONTACTS.GENDER\\' | translate}}\\\"><md-option ng-value=\\\"1\\\" translate=\\\"CUSTOMERS.MALE\\\"></md-option>\\n<md-option ng-value=\\\"2\\\" translate=\\\"CUSTOMERS.FEMALE\\\"></md-option><md-option ng-value=\\\"3\\\" translate=\\\"CUSTOMERS.OTHER\\\">\\n</md-option></md-select></md-input-container><md-input-container flex=\\\"50\\\" class=\\\"mb-0 mb-0\\\"><md-datepicker \\nmd-open-on-focus \\nng-disabled=\\\"!Session.hasPermissions(\\'contacts.contact.persons.create,contacts.contact.persons.update\\')\\\" \\nng-model=\\\"vm.selectedPerson.birthday\\\" md-placeholder=\\\"{{\\'CONTACTS.BIRTHDAY\\' | translate}}\\\" md-hide-icons=\\\"calendar\\\">\\n</md-datepicker></md-input-container></div></form><div layout=\\\"row\\\" layout-align=\\\"start start\\\" flex \\nclass=\\\"full-width mv-16\\\"><md-button ng-if=\\\"!vm.addingNewPerson\\\" class=\\\"md-warn stroked\\\" \\nhas-permission=\\\"contacts.contact.persons.delete\\\" translate=\\\"GENERAL.DELETE\\\" ng-click=\\\"vm.deletePerson()\\\"></md-button>\\n<span flex></span><md-button class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\" ng-click=\\\"vm.cancelAddPerson()\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" data-test-id=\\\"addcontact-button-save-person\\\" \\nhas-permission=\\\"contacts.contact.persons.create,contacts.contact.persons.update\\\" translate=\\\"GENERAL.SAVE\\\" \\nng-click=\\\"vm.savePerson()\\\"></md-button></div></div></div></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/purchases.html\",\"<div id=\\\"contacts-contact-purchases\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.PURCHASES\\\"></div><div>\\n</div></div></div></div><div class=\\\"content p-0\\\" layout-fill><md-card layout-fill><md-card-content layout-fill \\nclass=\\\"fullpage-datatable p-0\\\"><nd-purchases-list status=\\\"vm.status\\\" storage-label=\\\"vm.storageLabel\\\">\\n</nd-purchases-list></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/retail-sales.html\",\"<div id=\\\"contacts-contact-retail-sales\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.RETAIL_SALES\\\"></div>\\n<div></div></div></div></div><div class=\\\"content no-padding\\\" layout-fill><md-card layout-fill><md-card-content \\nlayout-fill class=\\\"fullpage-datatable no-padding\\\"><nd-pos-orders-list status=\\\"vm.status\\\" \\nstorage-label=\\\"vm.storageLabel\\\" context=\\\"\\'contact_detail\\'\\\"></nd-pos-orders-list></md-card-content></md-card></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/wholesale-sales.html\",\"<div id=\\\"contacts-contact-wholesale-sales\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div class=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.WHOLESALE_SALES\\\"></div>\\n<div></div></div></div></div><div class=\\\"content p-0\\\" layout-fill><md-card layout-fill><md-card-content layout-fill \\nclass=\\\"fullpage-datatable p-0\\\"><nd-sales-list status=\\\"vm.status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-sales-list>\\n</md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contact/tabs/wishlist.html\",\"<div id=\\\"contacts-contact-wishlist\\\" layout=\\\"column\\\"><div class=\\\"header no-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><md-button \\nclass=\\\"md-icon-button sidenav-toggle\\\" hide-gt-md ng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\" hide-gt-lg \\naria-label=\\\"Toggle left sidenav\\\"><md-icon md-font-icon=\\\"icon-menu\\\" class=\\\"icon\\\"></md-icon></md-button><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"h2 pl-8\\\" translate=\\\"CONTACTS.WISHLIST\\\"></div></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"md-warn stroked\\\" ng-disabled=\\\"vm.NoneChecked()\\\" ng-click=\\\"vm.deleteProductVariants()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\">{{\\'GENERAL.DELETE\\' | translate}}</div></md-button><md-button class=\\\"m-0 mr-8 stroked\\\" \\nng-click=\\\"vm.openProductSearchDialog()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'CONTACTS.ADD_PRODUCT_VARIANT\\' | translate}}</div></md-button>\\n<md-button class=\\\"m-0 mr-8 md-primary md-raised\\\" ng-disabled=\\\"vm.NoneChecked()\\\" ng-click=\\\"vm.createPosOrder()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\">{{\\'CONTACTS.SELL_PRODUCT_VARIANTS_WISHLIST\\' | translate}}</div></md-button>\\n</div></div></div></div><md-card class=\\\"mb-20\\\"><md-card-content><table class=\\\"dataTable\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/orders/sidenavs/main-sidenav.html\",\"<div class=\\\"header\\\" layout=\\\"column\\\" layout-align=\\\"space-between start\\\"></div><md-content class=\\\"content\\\" flex \\nms-scroll><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div translate=\\\"GENERAL.FILTERS\\\">Filters</div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"h-75\\\"><md-checkbox ng-model=\\\"vm.filterIncidence\\\" \\nng-change=\\\"vm.filterBooleanByColumn(vm.filterIncidence, 9, \\'\\')\\\" flex class=\\\"m-0\\\">\\n{{\\'SALES_LOG.MARKED_AS_INCIDENCE\\' |translate}}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"h-75\\\"><md-checkbox ng-model=\\\"vm.filterWarning\\\" \\nng-change=\\\"vm.filterBooleanByColumn(vm.filterWarning, vm.filterIndexes.warning, \\'\\')\\\" flex class=\\\"m-0\\\">\\n{{\\'SALES_LOG.WITH_WARNING\\' |translate}}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"h-75\\\">\\n<md-checkbox ng-model=\\\"vm.filterDeleted\\\" ng-change=\\\"vm.filterBooleanByColumn(vm.filterDeleted, 10, \\'False\\')\\\" flex \\nclass=\\\"m-0\\\">{{\\'SALES_LOG.DELETED_SALES\\' |translate}}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon md-font-icon=\\\"icon-store\\\"></md-icon><md-select ng-model=\\\"vm.filterSourceWarehouse\\\" \\nplaceholder=\\\"{{\\'ORDERS.FILTER_BY_WAREHOUSE\\' | translate}}\\\" flex multiple=\\\"multiple\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/orders/subviews/dynamic-filters.html\",\"<div layout=\\\"row\\\" layout-wrap layout-align=\\\"start center\\\"><div layout=\\\"row\\\"><div class=\\\"mr-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.status.dynamicFilters.sites.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" md-font-icon=\\\"icon-laptop\\\"></md-icon>\\n<md-select ng-model=\\\"vm.status.filters.sites\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'PICKING.FILTER_BY_SITE\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"site in vm.sites | orderBy: \\'position\\'\\\" ng-value=\\\"site.id\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-ecommerce-icon class=\\\"mh-8\\\" style=\\\"zoom:.8\\\" platform=\\\"site.platform\\\"></nd-ecommerce-icon>{{site.name}}</div>\\n</md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'sites\\', vm.status.dynamicFilters.sites)\\\"><md-icon md-font-icon=\\\"icon-close\\\">\\n</md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.status.dynamicFilters.paymentStatus.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-font-icon=\\\"{{vm.status.dynamicFilters.paymentStatus.icon}}\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.paymentStatus\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'SALES_LOG.FILTER_BY_PAYMENT_STATUS\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-value=\\\"vm.POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_PENDING\\\">\\n{{ \\'ORDER.POS_ORDER_PAYMENT_STATUS_PENDING\\' | translate }}</md-option><md-option \\nng-value=\\\"vm.POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_PAID\\\">\\n{{ \\'ORDER.POS_ORDER_PAYMENT_STATUS_PAID\\' | translate }}</md-option><md-option \\nng-value=\\\"vm.POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_REFUNDED\\\">\\n{{ \\'ORDER.POS_ORDER_PAYMENT_STATUS_REFUNDED\\' | translate }}</md-option><md-option \\nng-value=\\\"vm.POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_UNPAID\\\">\\n{{ \\'ORDER.POS_ORDER_PAYMENT_STATUS_UNPAID\\' | translate }}</md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'paymentStatus\\', vm.status.dynamicFilters.paymentStatus)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.status.dynamicFilters.warehouses.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" md-font-icon=\\\"icon-store\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.warehouses\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'PICKING.FILTER_BY_WAREHOUSE\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'position\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'warehouses\\', vm.status.dynamicFilters.warehouses)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.status.dynamicFilters.stockWarehouses.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" md-font-icon=\\\"icon-store\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.stockWarehouses\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'ORDERS.FILTER_BY_WAREHOUSE_STOCK\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"warehouse in vm.stockWarehouses | orderBy: \\'position\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'stockWarehouses\\', vm.status.dynamicFilters.stockWarehouses)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.orders.length\\\"><md-input-container md-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon \\nclass=\\\"mr-8 s18 secondary-text\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/shopping_cart.0dec4fd4.svg\\\"></md-icon>\\n<md-select ng-model=\\\"vm.selectedOrders\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'PICKING.FILTER_BY_ORDER_IDS\\' | translate: {ordersCount: vm.orders.length} }}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"order in vm.orders\\\" ng-value=\\\"order.id\\\">{{order.autocode}}\\n</md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.removeOrderFilter()\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.status.dynamicFilters.fulfillmentTypes.visible\\\"><md-input-container \\nmd-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-font-icon=\\\"icon-package-variant-closed\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.fulfillmentTypes\\\" \\nmultiple=\\\"multiple\\\" flex placeholder=\\\"{{\\'PICKING.FILTER_BY_FULFILLMENT_TYPE\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"fulfillmentType in vm.fulfillmentTypes\\\" \\nng-value=\\\"fulfillmentType\\\"><nd-fulfillment-text-box type=\\\"fulfillmentType\\\"></nd-fulfillment-text-box></md-option>\\n</md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'fulfillmentTypes\\', vm.status.dynamicFilters.fulfillmentTypes)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.status.dynamicFilters.shippingMethods.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/truck-outline.a4d963ff.svg\\\" md-font-icon></md-icon><md-select \\nng-model=\\\"vm.status.filters.shippingMethods\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'CONFIGURATION.SHIPPING_METHODS\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"shippingMethod in vm.shippingMethods | orderBy: \\'position\\'\\\" ng-value=\\\"shippingMethod.id\\\">\\n{{shippingMethod.name}}</md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'shippingMethods\\', vm.status.dynamicFilters.shippingMethods)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.status.dynamicFilters.countries.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/location-outline.6aae76c0.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.countries\\\" multiple=\\\"multiple\\\" flex placeholder=\\\"{{\\'SIGNUP.COUNTRY\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"country in vm.countries | orderBy: \\'position\\'\\\" ng-value=\\\"country\\\">\\n{{vm.COUNTRIES_DICT[country]}}</md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'countries\\', vm.status.dynamicFilters.countries)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isOrdersState() && vm.status.dynamicFilters.warnings.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\" md-font-icon></md-icon><md-select \\nng-model=\\\"vm.status.filters.warnings\\\" flex multiple=\\\"multiple\\\" placeholder=\\\"{{\\'SALES_LOG.WITH_WARNING\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"warning in vm.warnings | orderBy: \\'position\\'\\\" \\nng-value=\\\"warning.withWarning\\\">{{warning.name | translate}}</md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.toggleFilterVisibility(\\'warnings\\', vm.status.dynamicFilters.warnings)\\\">\\n<md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.isOrdersState() && vm.status.dynamicFilters.stockLocations.visible\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input nd-filter-input no-margin\\\"><md-icon \\nclass=\\\"mr-8 s18 secondary-text\\\" md-font-icon md-svg-icon=\\\"{{vm.status.dynamicFilters.stockLocations.svgIcon}}\\\">\\n</md-icon><input flex maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.status.filters.stockLocations\\\" \\nng-change=\\\"vm.filterChanged()\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'stockLocations\\', vm.status.dynamicFilters.stockLocations)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.status.dynamicFilters.replenishmentStatuses.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/truck-outline.a4d963ff.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.replenishmentStatuses\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'PICKING.FILTER_BY_REPLENISHMENT_STATUS\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-value=\\\"1\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" translate=\\\"PURCHASES.PURCHASE_ORDER_STATUS_DRAFT\\\"></div>\\n</md-option><md-option ng-value=\\\"2\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\ntranslate=\\\"PURCHASES.PURCHASE_ORDER_STATUS_ORDERED\\\"></div></md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'replenishmentStatuses\\', vm.status.dynamicFilters.replenishmentStatuses)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isPickingState() && vm.status.dynamicFilters.stockAvailability.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.stockAvailability\\\" flex \\nplaceholder=\\\"{{\\'ORDERS.FILTER_BY_STOCK_AVAILABILITY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"option in vm.stockAvailabilityOptions\\\" ng-value=\\\"option.value\\\">{{option.labelKey | translate}}</md-option>\\n</md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'stockAvailability\\', vm.status.dynamicFilters.stockAvailability)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isPickingState() && vm.status.dynamicFilters.unitsFilter.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"mr-8 s18 secondary-text\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.unitsFilter\\\" flex placeholder=\\\"{{\\'ORDERS.FILTER_BY_UNITS\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"option in vm.unitsFilterOptions\\\" ng-value=\\\"option.value\\\">\\n{{option.labelKey | translate}}</md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'unitsFilter\\', vm.status.dynamicFilters.unitsFilter)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div></div><md-menu class=\\\"mr-5\\\"><md-button \\nclass=\\\"md-button md-primary stroked no-margin\\\" ng-click=\\\"$mdMenu.open($event)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-menu-origin class=\\\"mr-5\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/filter-variant-plus.90ad7787.svg\\\"></md-icon>\\n{{\\'INVENTORY_DASHBOARD.ADD_FILTER\\' | translate}}</div></md-button><md-menu-content><md-menu-item \\nng-repeat=\\\"(property, filter) in vm.status.dynamicFilters\\\" ng-hide=\\\"filter.visible\\\"><md-button \\nng-click=\\\"vm.toggleFilterVisibility(property, filter)\\\"><md-icon md-menu-align-target md-font-icon \\nng-if=\\\"filter.svgIcon\\\" md-svg-icon=\\\"{{filter.svgIcon}}\\\"></md-icon><md-icon md-menu-align-target \\nmd-font-icon=\\\"{{filter.icon}}\\\" ng-if=\\\"!filter.svgIcon\\\"></md-icon>{{filter.title | translate}}</md-button>\\n</md-menu-item></md-menu-content></md-menu><div ng-if=\\\"vm.selectedFulfillments.length\\\" class=\\\"secondary-text\\\"><span \\ntranslate=\\\"GENERAL.ONE_ROW_SELECTED\\\" ng-if=\\\"vm.selectedFulfillments.length == 1\\\"></span> <span \\ntranslate=\\\"GENERAL.N_ROWS_SELECTED\\\" translate-values=\\\"{n: vm.selectedFulfillments.length}\\\" \\nng-if=\\\"vm.selectedFulfillments.length > 1\\\"></span></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/orders/subviews/nav-bar.html\",\"<div layout=\\\"row\\\" class=\\\"content mb-16 flex-scrollable\\\"><md-nav-bar data-test-id=\\\"product-tab-bar\\\" \\nmd-no-ink-bar=\\\"true\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nng-hide=\\\"!vm.totalItemsInRepositionCount\\\" class=\\\"nav-item-badge border-right\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'in_reposition\\')\\\" name=\\\"in_reposition\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<span translate=\\\"ORDERS.IN_REPOSITION\\\"></span><div class=\\\"custom-badge in-reposition\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-class=\\\"vm.currentNavItem!==\\'in_reposition\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>\\n{{vm.totalItemsInRepositionCount | number:0}}</span></div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'to_prepare\\')\\\" name=\\\"to_prepare\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"ORDERS.TO_PREPARE\\\"></span><div class=\\\"custom-badge to_prepare\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.currentNavItem!==\\'to_prepare\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>{{vm.totalItemsToPrepareCount | number:0}}\\n</span></div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'picking\\')\\\" name=\\\"picking\\\" ng-if=\\\"vm.isOrdersState() && vm.hasPickingAndPacking\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span translate=\\\"ORDERS.IN_PICKING\\\"></span><div class=\\\"custom-badge picking\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-class=\\\"vm.currentNavItem!==\\'picking\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>\\n{{vm.totalItemsPickingCount | number:0}}</span></div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" \\ndisabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(\\'picked\\')\\\" name=\\\"picked\\\" \\nng-if=\\\"vm.isOrdersState() && vm.hasPickingAndPacking\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"ORDERS.PICKED\\\"></span><div class=\\\"custom-badge picked\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.currentNavItem!==\\'picked\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>{{vm.totalItemsPickedCount | number:0}}</span>\\n</div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" ng-if=\\\"vm.hasSendcloudInstalledAppEnabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'prepared\\')\\\" name=\\\"prepared\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"ORDERS.PREPARED\\\"></span><div class=\\\"custom-badge prepared\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.currentNavItem!==\\'prepared\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>{{vm.totalItemsPreparedCount | number:0}}</span>\\n</div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge border-right\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'finished\\')\\\" name=\\\"finished\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"ORDER.FINISHED\\\"></span><div class=\\\"custom-badge finished\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.currentNavItem!==\\'finished\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>{{vm.totalItemsFinishedCount | number:0}}</span>\\n</div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'incidence\\')\\\" name=\\\"incidence\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"ORDERS.WITH_INCIDENCE\\\"></span><div class=\\\"custom-badge with-incidence\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-class=\\\"vm.currentNavItem!==\\'incidence\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>\\n{{vm.totalItemsIncidenceCount | number:0}}</span></div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" \\ndisabled=\\\"disabled\\\" md-nav-click=\\\"vm.handleNavClick(\\'returned\\')\\\" name=\\\"returned\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span translate=\\\"ORDER.FULFILLMENT_STATUS_RETURNED_RECEIVED\\\"></span><div \\nclass=\\\"custom-badge returned\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.currentNavItem!==\\'returned\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>{{vm.totalItemsReturnedCount | number:0}}</span>\\n</div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'deleted\\')\\\" name=\\\"deleted\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"ORDERS.DELETED\\\"></span><div class=\\\"custom-badge deleted\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"vm.currentNavItem!==\\'deleted\\' ? \\'opacity-light\\' : \\'\\'\\\"><span>{{vm.totalItemsDeletedCount | number:0}}</span>\\n</div></div></md-nav-item><md-nav-item class=\\\"nav-item-badge\\\" disabled=\\\"disabled\\\" \\nmd-nav-click=\\\"vm.handleNavClick(\\'all\\')\\\" name=\\\"all\\\"><span translate=\\\"ORDERS.ALL\\\"></span></md-nav-item></md-nav-bar>\\n</div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/order/subviews/invoice-list-item.html\",\"<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><a class=\\\"cursor-pointer\\\" ng-click=\\\"vm.goToInvoice(invoice.id)\\\" flex>\\n{{invoice.getAutocodeOrDraft()}}</a><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.downloadInvoice(invoice.id)\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/file-download-outline.d0fba88e.svg\\\"><md-tooltip>\\n{{\\'GENERAL.DOWNLOAD\\' | translate}}</md-tooltip></md-icon></md-button><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.openSendEmailDialog(invoice)\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/send-outline.13f66f65.svg\\\"><md-tooltip>{{\\'GENERAL.SEND\\' | translate}}\\n</md-tooltip></md-icon></md-button><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.goToInvoice(invoice.id)\\\"><md-icon \\nmd-font-icon=\\\"icon-open-in-new\\\"><md-tooltip>{{\\'SALE.VIEW_INVOICE\\' | translate}}</md-tooltip></md-icon></md-button>\\n</div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/dialogs/auto-assign-warehouse-by-stock-availability-info-dialog.html\",\"<md-dialog id=\\\"auto-assign-warehouse-by-stock-availability-info-dialog\\\"><md-dialog-content><h1>\\n{{\\'SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY\\' | translate}}</h1><p \\ntranslate=\\\"SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY_BODY\\\"></p><p \\ntranslate=\\\"SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY_EXAMPLE_TEXT\\\"></p><h3 \\ntranslate=\\\"ORDERS.ORDER\\\"></h3><div><table class=\\\"simple\\\"><thead><tr><th>{{\\\"PRODUCT.PRODUCT\\\" | translate}}</th><th>\\n{{\\\"PRODUCT.AMOUNT\\\" | translate}}</th></tr></thead><tbody><tr><td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 1</td><td>2</td>\\n</tr><tr><td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 2</td><td>5</td></tr><tr><td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 3</td>\\n<td>3</td></tr></tbody></table><h3 translate=\\\"WAREHOUSES.WAREHOUSES\\\"></h3><table class=\\\"simple\\\"><thead><tr><th>\\n{{\\\"PRODUCT.PRODUCT\\\" | translate}}</th><th>{{\\\"WAREHOUSES.WAREHOUSE\\\" | translate}} 1</th><th>\\n{{\\\"WAREHOUSES.WAREHOUSE\\\" | translate}} 2</th><th>{{\\\"WAREHOUSES.WAREHOUSE\\\" | translate}} 3</th></tr></thead><tbody><tr>\\n<td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 1</td><td>1</td><td>1</td><td>1</td></tr><tr><td>\\n{{\\\"PRODUCT.PRODUCT\\\" | translate}} 2</td><td>0</td><td>0</td><td>5</td></tr><tr><td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 3\\n</td><td>2</td><td>0</td><td>3</td></tr></tbody></table></div><h3>{{\\\"APPS.SUBTYPE_SHIPMENTS\\\" | translate}}</h3><div \\nclass=\\\"mb-10\\\" \\ntranslate=\\\"SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_SELECTED_BY_STOCK_AVAILABILITY_EXAMPLE_EXPLANATION\\\">\\n</div><h4>{{\\\"ORDER.FULFILLMENT\\\" | translate}} 1 → {{\\\"WAREHOUSES.WAREHOUSE\\\" | translate}} 1</h4><table class=\\\"simple\\\">\\n<caption></caption><thead><tr><th>{{\\\"PRODUCT.PRODUCT\\\" | translate}}</th><th>{{\\\"PRODUCT.AMOUNT\\\" | translate}}</th></tr>\\n</thead><tbody><tr><td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 1</td><td>1</td></tr><tr><td>\\n{{\\\"PRODUCT.PRODUCT\\\" | translate}} 3</td><td>2</td></tr></tbody></table><h4>\\n{{\\\"ORDER.FULFILLMENT\\\" | translate}} 2 → {{\\\"WAREHOUSES.WAREHOUSE\\\" | translate}} 2</h4><table class=\\\"simple\\\"><thead><tr>\\n<th>{{\\\"PRODUCT.PRODUCT\\\" | translate}}</th><th>{{\\\"PRODUCT.AMOUNT\\\" | translate}}</th></tr></thead><tbody><tr><td>\\n{{\\\"PRODUCT.PRODUCT\\\" | translate}} 1</td><td>1</td></tr></tbody></table><h4>\\n{{\\\"ORDER.FULFILLMENT\\\" | translate}} 3 → {{\\\"WAREHOUSES.WAREHOUSE\\\" | translate}} 3</h4><table class=\\\"simple\\\"><thead><tr>\\n<th>{{\\\"PRODUCT.PRODUCT\\\" | translate}}</th><th>{{\\\"PRODUCT.AMOUNT\\\" | translate}}</th></tr></thead><tbody><tr><td>\\n{{\\\"PRODUCT.PRODUCT\\\" | translate}} 2</td><td>5</td></tr><tr><td>{{\\\"PRODUCT.PRODUCT\\\" | translate}} 3</td><td>1</td></tr>\\n</tbody></table></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><span flex></span><md-button ng-click=\\\"vm.close()\\\" \\nclass=\\\"md-primary\\\" ng-disabled=\\\"vm.saving\\\">{{\\'GENERAL.CLOSE\\' | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/dialogs/auto-assign-warehouse-info-dialog.html\",\"<md-dialog id=\\\"auto-assign-warehouse-info-dialog\\\"><md-dialog-content><h1>\\n{{\\'SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE\\' | translate}}</h1><div \\ntranslate=\\\"SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE_BODY\\\"></div><div layout=\\\"row\\\" \\nclass=\\\"mv-16 did-you-know\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-5 md-primary\\\"></md-icon><div \\nlayout=\\\"column\\\" flex><div class=\\\"md-primary text-bold\\\" translate=\\\"GENERAL.EXAMPLE\\\"></div><div>\\nhttps://api.stockagile.com/open/api/1.1/ecommerce/wordpress/orders?key=XXX&<b>warehouse=123</b></div></div></div><div \\ntranslate=\\\"SITE.AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE_BODY_WAREHOUSES\\\"></div><div \\nclass=\\\"p-16\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pb-10\\\" ng-repeat=\\\"warehouse in vm.warehouses\\\"><div \\nclass=\\\"secondary-text\\\">{{ warehouse.name }}</div><div class=\\\"text-bold ml-10\\\">{{ warehouse.id }}</div><md-icon \\nmd-font-icon=\\\"icon-content-copy\\\" ng-click=\\\"vm.copyToClipboard(warehouse.id)\\\" class=\\\"ml-10 md-primary cursor-pointer\\\">\\n<md-tooltip md-direction=\\\"bottom\\\">{{\\'SITE.COPY_IDENTIFIER\\' | translate}}</md-tooltip></md-icon></div></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><span flex></span><md-button ng-click=\\\"vm.close()\\\" \\nclass=\\\"md-primary\\\" ng-disabled=\\\"vm.saving\\\">{{\\'GENERAL.CLOSE\\' | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/dialogs/ecommerce-category-dialog.html\",\"<md-dialog aria-label=\\\"Category\\\" class=\\\"w-400\\\"><form ng-cloak name=\\\"categoryForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"CONFIGURATION.NEW_CATEGORY\\\" ng-if=\\\"!vm.category.id\\\" class=\\\"mb-32\\\">New Category</h2><h2 \\ntranslate=\\\"CONFIGURATION.EDIT_CATEGORY\\\" translate-values=\\\"{name: vm.category.name}\\\" ng-if=\\\"vm.category.id\\\" \\nclass=\\\"mb-32\\\">Edit Category {{vm.category.name}}</h2><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input ng-model=\\\"vm.category.name\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><div layout=\\\"row\\\" align-layout=\\\"start center\\\" class=\\\"mt-10\\\"><md-icon \\nclass=\\\"icon icon-information-outline font-size-18\\\"></md-icon><span class=\\\"secondary-text ml-10 s-12\\\">\\n{{\\'SITE.SHOPIFY_HANDLE_TIP\\' | translate}}</span></div><md-input-container \\nng-if=\\\"vm.site.platform == vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\" class=\\\"md-block mb-0 w-300\\\" flex><md-icon\\n class=\\\"icon icon-link name font-size-24\\\"></md-icon><input ng-model=\\\"vm.category.handle\\\" \\nplaceholder=\\\"{{vm.category.default_handle}}\\\" autocomplete=\\\"off\\\" type=\\\"text\\\"></md-input-container><fieldset \\nlayout=\\\"column\\\" class=\\\"m-10\\\" flex ng-repeat=\\\"translation in vm.category.translations\\\"><legend \\nid=\\\"ecommerce-categories-popup-legend\\\"><md-select ng-model=\\\"translation.lang\\\"><md-option \\nng-repeat=\\\"language in vm.languages\\\" ng-value=\\\"language.code\\\">{{language.name}}</md-option></md-select></legend><div \\nlayout=\\\"row\\\" class=\\\"p-5\\\"><md-input-container class=\\\"md-block mb-0\\\"><label translate=\\\"PRODUCT.NAME\\\">Name</label><input \\ntype=\\\"text\\\" ng-model=\\\"translation.name\\\" required></md-input-container><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-button class=\\\"md-icon-button m-0\\\" ng-click=\\\"vm.deleteTranslation(translation)\\\" ng-disabled=\\\"vm.saving\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon></md-button><md-button class=\\\"md-primary m-0 md-raised\\\" \\nng-disabled=\\\"!translation.lang || vm.saving\\\" ng-click=\\\"vm.saveTranslation(translation)\\\">{{\\'GENERAL.SAVE\\' | translate}}\\n</md-button></div></div></fieldset><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-primary\\\" \\nng-click=\\\"vm.addTranslation()\\\" ng-disabled=\\\"vm.languages.length == vm.category.length\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PRODUCT.ADD_TRANSLATION\\' | translate}}\\n</div></md-button></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!categoryForm.$valid || !categoryForm.$dirty\\\" class=\\\"md-primary md-raised\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/dialogs/import-missing-products.html\",\"<md-dialog id=\\\"import-missing-products-prestashop\\\"><md-dialog-content class=\\\"w-600\\\"><h2 \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP\\\" class=\\\"mb-32\\\"></h2><p \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_MSG\\\"></p><ol><li><p \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_STEP_1\\\"></p></li><li><div \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_STEP_2\\\"></div><div class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.goToImportation()\\\"><button class=\\\"m-0\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"link\\\">\\n{{\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_STEP_2_LINK\\\" | translate }}<md-icon md-font-icon=\\\"icon-open-in-new\\\" \\nclass=\\\"link size-16\\\"></md-icon>.</div></button></div></li><li><p \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_STEP_3\\\"></p></li><li><p \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_STEP_4\\\"></p></li></ol><p \\ntranslate=\\\"SITE.IMPORT_PRODUCTS_FROM_PRESTASHOP_FINAL_CHECK\\\"></p></md-dialog-content><md-dialog-actions layout=\\\"row\\\">\\n<md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" translate=\\\"SITE.START_IMPORTATION\\\">Save</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/dialogs/import-products.html\",\"<md-dialog><md-dialog-content><h2 translate=\\\"SITE.IMPORT_ALL_PRODUCTS\\\" class=\\\"mb-32\\\">Import products</h2><p>\\n{{\\'SITE.IMPORT_ALL_PRODUCTS_MSG\\' | translate}}</p><md-input-container flex class=\\\"md-block mb-0\\\"><input \\nng-model=\\\"vm.maxProducts\\\" placeholder=\\\"{{\\'SITE.IMPORT_AMOUNT\\' | translate}}\\\" autocomplete=\\\"off\\\" type=\\\"number\\\">\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0\\\"><label>\\n{{\\'SITE.IMPORT_ONLY_SPECIFIC_PRODUCTS\\' | translate}}</label><input ng-model=\\\"vm.externalIds\\\" autocomplete=\\\"off\\\" \\nplaceholder=\\\"1432,1246,5443, etc...\\\" type=\\\"text\\\"></md-input-container></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" translate=\\\"SITE.IMPORT\\\">Save</md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/tabs/categories.html\",\"<div id=\\\"ecommerce-site-categories\\\" layout=\\\"column\\\"><md-card><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button ng-if=\\\"editable\\\" class=\\\"stroked md-primary\\\" ng-click=\\\"add()\\\" \\nng-disabled=\\\"importing || saving\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" \\nclass=\\\"mr-5\\\"></md-icon>{{\\'CONFIGURATION.ADD_NEW_CATEGORY\\' | translate}}</div></md-button><md-button ng-if=\\\"editable\\\" \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"save()\\\" ng-disabled=\\\"importing || saving\\\">{{\\'GENERAL.SAVE\\' | translate}}\\n</md-button></div></md-card-title-text></md-card-title><md-card-content><div class=\\\"did-you-know md-margin\\\" \\nng-if=\\\"showEcommerceInit()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon>\\n</div><div layout=\\\"column\\\" flex><span class=\\\"font-size-14\\\">{{\\'CONFIGURATION.IMPORT_FROM_ECOMMERCE\\' | translate}}</span>\\n <span class=\\\"secondary-text\\\">{{\\'CONFIGURATION.IMPORT_FROM_ECOMMERCE_MESSAGE\\' | translate}}</span></div><md-button \\nng-click=\\\"importFromEcommerce()\\\" ng-disabled=\\\"importing || saving\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular ng-if=\\\"importing\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular>\\n{{\\'CONFIGURATION.IMPORT\\' | translate}}</div></md-button></div></div><script type=\\\"text/ng-template\\\" \\nid=\\\"nodes_renderer.html\\\">\\n<!-- Ediable tree -->\\n        <div ui-tree-handle\\n             ng-if=\\\"editable\\\"\\n             class=\\\"tree-node tree-node-content h-40\\\"\\n             layout=\\\"row\\\"\\n             layout-align=\\\"start center\\\">\\n          <md-button class=\\\"md-icon-button toggle-button\\\"\\n                     ng-if=\\\"node.children && node.children.length > 0\\\"\\n                     data-nodrag\\n                     ng-click=\\\"toggle(this)\\\"\\n                     ng-disabled=\\\"importing || saving\\\">\\n            <span class=\\\"icon\\\"\\n                  ng-class=\\\"{\\'icon-chevron-right\\': collapsed,\\'icon-chevron-down\\': !collapsed}\\\"></span>\\n          </md-button>\\n\\n          <span class=\\\"node-name\\\"\\n                ng-class=\\\"{\\'ml-16\\': !node.children || !node.children.length}\\\">{{node.name}}</span>\\n\\n          <small class=\\\"ml-10 secondary-text\\\">({{node.products_amount}})</small>\\n\\n          <span ng-if=\\\"node.translations.length\\\"\\n                class=\\\"ml-10 text-boxed\\\">\\n            <span ng-repeat=\\\"trans in node.translations\\\">{{trans.name}}<span ng-if=\\\"!$first\\\">,</span></span>\\n          </span>\\n\\n          <span flex></span>\\n\\n          <div ng-if=\\\"node.company\\\">\\n            <md-button class=\\\"md-icon-button no-margin\\\"\\n                      data-nodrag\\n                      ng-click=\\\"translations(node)\\\"\\n                      ng-disabled=\\\"importing || saving\\\">\\n              <md-icon class=\\\"icon\\\"\\n                      md-font-icon=\\\"icon-pencil\\\"></md-icon>\\n            </md-button>\\n            <md-button class=\\\"md-icon-button no-margin\\\"\\n                      data-nodrag\\n                      ng-click=\\\"remove(this)\\\"\\n                      ng-disabled=\\\"importing || saving\\\">\\n              <md-icon class=\\\"icon\\\"\\n                      md-font-icon=\\\"icon-delete\\\"></md-icon>\\n            </md-button>\\n            <md-button class=\\\"md-icon-button no-margin\\\"\\n                      data-nodrag\\n                      ng-click=\\\"newSubItem(this)\\\"\\n                      ng-disabled=\\\"importing || saving\\\">\\n              <md-icon class=\\\"icon\\\"\\n                      md-font-icon=\\\"icon-plus\\\"></md-icon>\\n            </md-button>\\n          </div>\\n        </div>\\n        <!-- Non-ediable tree -->\\n        <div ng-if=\\\"!editable\\\"\\n             class=\\\"tree-node tree-node-content h-40\\\"\\n             layout=\\\"row\\\"\\n             layout-align=\\\"start center\\\">\\n          <md-button class=\\\"md-icon-button toggle-button\\\"\\n                     ng-if=\\\"node.children && node.children.length > 0\\\"\\n                     data-nodrag\\n                     ng-click=\\\"toggle(this)\\\"\\n                     ng-disabled=\\\"importing || saving\\\">\\n            <span class=\\\"icon\\\"\\n                  ng-class=\\\"{\\'icon-chevron-right\\': collapsed,\\'icon-chevron-down\\': !collapsed}\\\"></span>\\n          </md-button>\\n\\n          <span class=\\\"node-name\\\"\\n                ng-class=\\\"{\\'ml-16\\': !node.children || !node.children.length}\\\">{{node.name}}</span>\\n\\n          <small class=\\\"ml-10 secondary-text\\\">({{node.products_amount}})</small>\\n\\n          <span ng-if=\\\"node.translations.length\\\"\\n                class=\\\"ml-10 text-boxed\\\">\\n            <span ng-repeat=\\\"trans in node.translations\\\">{{trans.name}}<span ng-if=\\\"!$first\\\">,</span></span>\\n          </span>\\n\\n          <span flex></span>\\n\\n          <div ng-if=\\\"node.company\\\">\\n            <md-button class=\\\"md-icon-button no-margin\\\"\\n                       data-nodrag\\n                       ng-click=\\\"translations(node)\\\"\\n                       ng-disabled=\\\"importing || saving\\\">\\n              <md-icon class=\\\"icon\\\"\\n                       md-font-icon=\\\"icon-pencil\\\"></md-icon>\\n            </md-button>\\n            <md-button class=\\\"md-icon-button no-margin\\\"\\n                       data-nodrag\\n                       ng-click=\\\"remove(this)\\\"\\n                       ng-disabled=\\\"importing || saving\\\">\\n              <md-icon class=\\\"icon\\\"\\n                       md-font-icon=\\\"icon-delete\\\"></md-icon>\\n            </md-button>\\n            <md-button class=\\\"md-icon-button no-margin\\\"\\n                       data-nodrag\\n                       ng-click=\\\"newSubItem(this)\\\"\\n                       ng-disabled=\\\"importing || saving\\\">\\n              <md-icon class=\\\"icon\\\"\\n                       md-font-icon=\\\"icon-plus\\\"></md-icon>\\n            </md-button>\\n          </div>\\n        </div>\\n        <ol ui-tree-nodes=\\\"\\\"\\n            ng-model=\\\"node.children\\\"\\n            ng-class=\\\"{hidden: collapsed}\\\">\\n          <li ng-repeat=\\\"node in node.children\\\"\\n              ui-tree-node\\n              ng-include=\\\"\\'nodes_renderer.html\\'\\\">\\n          </li>\\n        </ol>\\n</script><div ui-tree=\\\"treeOptions\\\" id=\\\"tree-root\\\" ng-if=\\\"data.length\\\"><ol ui-tree-nodes ng-model=\\\"data\\\"><li \\nng-repeat=\\\"node in data\\\" ui-tree-node ng-include=\\\"\\'nodes_renderer.html\\'\\\"></li></ol></div></md-card-content></md-card>\\n</div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/tabs/details.html\",\"<div id=\\\"ecommerce-site-details\\\" class=\\\"pl-2 pr-2\\\"><div class=\\\"widget-group layout-wrap\\\" layout=\\\"row\\\" flex=\\\"100\\\" \\nlayout-wrap=\\\"\\\"><ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front\\n layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'SITE.TOTAL_PRODUCTS\\' |translate}}</span><div class=\\\"value\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.siteCopy.site_products}}</div></ms-widget-front></ms-widget><ms-widget \\nclass=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front layout=\\\"column\\\"><span \\nclass=\\\"title\\\">{{\\'SITE.LAST_SYNC\\' |translate}}</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\"><div layout=\\\"column\\\" class=\\\"full-width\\\" layout-align=\\\"end start\\\" flex><div class=\\\"hint-value\\\">\\n{{vm.siteCopy.last_sync | date:\\'d-M-yyyy\\'}}</div><md-button ng-if=\\\"vm.syncErrors.length > 0\\\" \\nng-click=\\\"vm.showSyncErrors()\\\" class=\\\"md-icon-button\\\"><md-icon class=\\\"red-fg\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-circle-outline.5706d718.svg\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\'SITE.SYNC_ERRORS\\' |translate}}</md-tooltip></md-icon></md-button>{{vm.siteCopy.last_sync | date:\\'H:mm:ss\\'}}</div>\\n</div></ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO\\\" layout=\\\"column\\\" flex=\\\"100\\\" \\nflex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'SITE.NEXT_SYNC\\' |translate}}\\n</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"column\\\" layout-align=\\\"end start\\\"><span class=\\\"hint-value\\\">\\n{{vm.siteCopy.next_sync | date:\\'d-M-yyyy\\'}} </span>{{vm.siteCopy.next_sync | date:\\'H:mm:ss\\'}}</div></ms-widget-front>\\n</ms-widget><ms-widget class=\\\"nd-widget\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\" layout=\\\"column\\\" flex=\\\"100\\\" \\nflex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">\\n{{\\'SITE.NEXT_PRODUCTS_SYNC\\' |translate}}</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"column\\\" layout-align=\\\"end start\\\">\\n<span class=\\\"hint-value\\\">{{vm.siteCopy.next_sync_products | date:\\'d-M-yyyy\\'}} </span>\\n{{vm.siteCopy.next_sync_products | date:\\'H:mm:ss\\'}}</div></ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" \\nlayout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\"><ms-widget-front layout=\\\"column\\\">\\n<span class=\\\"title\\\">{{\\'SITE.NEXT_STOCK_SYNC\\' |translate}}</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"column\\\" \\nlayout-align=\\\"end start\\\"><span class=\\\"hint-value\\\">{{vm.siteCopy.next_sync | date:\\'d-M-yyyy\\'}} </span>\\n{{vm.siteCopy.next_sync | date:\\'H:mm:ss\\'}}</div></ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" \\nlayout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nng-if=\\\"vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO && vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\">\\n<ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'SITE.TOTAL_PRODUCTS_SYNCHRONIZING\\' |translate}}</span><div \\nclass=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.siteCopy.site_products_synchronizing}}</div>\\n</ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nng-if=\\\"vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO && vm.site.platform !== vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\">\\n<ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'SITE.TOTAL_PRODUCTS_WAITING_TO_SYNCHRONIZE\\' |translate}}</span>\\n<div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{vm.siteCopy.site_products_waiting_to_synchronize}}</div></ms-widget-front></ms-widget></div><div layout=\\\"row\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY && vm.site.id\\\"><form id=\\\"shopifyForm\\\" \\nname=\\\"shopifyForm\\\" method=\\\"GET\\\" action=\\\"{{vm.trustSrc(vm.shopifyAuthUrl)}}\\\" \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\"><input \\nstyle=\\\"visibility: hidden; position: absolute; left: -9999px\\\" ng-model=\\\"vm.site.url\\\" type=\\\"text\\\" name=\\\"shop\\\" required>\\n</form></div><nd-site-details site=\\\"vm.site\\\" is-new-site=\\\"false\\\" callback=\\\"vm.save()\\\" warehouses=\\\"vm.warehouses\\\" \\nattribute-categories=\\\"vm.attributeCategories\\\" ticket-configurations=\\\"vm.ticketConfigurations\\\" \\nserial-number-types=\\\"vm.serialNumberTypes\\\" pricing-tiers=\\\"vm.pricingTiers\\\"></nd-site-details><md-card class=\\\"mb-16\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV || vm.site.platform === vm.ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"CSV.CSV_CONFIG\\\"></span></md-card-title-text><span flex>\\n</span><md-progress-circular ng-if=\\\"saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex has-permission=\\\"ecommerce.sites.site.details.update\\\"><md-button \\nng-click=\\\"vm.cancelCsvConfig()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_HIPERCALZADO\\\" \\nng-click=\\\"vm.resetHipercalzadosCsv()\\\" class=\\\"stroked\\\" translate=\\\"CSV.RESET_CONFIGURATION\\\">Reset configuration\\n</md-button><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.saveCsvConfig()\\\" translate=\\\"GENERAL.SAVE\\\"></md-button>\\n</div></md-card-title><md-card-content><p id=\\\"info\\\" class=\\\"pl-15\\\">{{\\'CSV.INFO\\' | translate}}</p><div layout=\\\"row\\\">\\n<nd-csv-ecommerce flex site=\\\"vm.site.id\\\" path=\\\"\\'products\\'\\\"></nd-csv-ecommerce><nd-csv-ecommerce \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\" class=\\\"border-left\\\" flex=\\\"50\\\" \\nsite=\\\"vm.site.id\\\" path=\\\"\\'stock\\'\\\"></nd-csv-ecommerce></div></md-card-content></md-card><md-card class=\\\"mb-8\\\" \\nng-if=\\\"vm.showAdvancedCard()\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"{{ vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE ||\\n                           vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP ||\\n                           vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY ?\\n                           \\'SITE.WEBHOOKS\\' : \\'SITE.ADVANCED\\' }}\\\">\\n</span></md-card-title-text><span flex></span></md-card-title><md-card-content><md-input-container \\nclass=\\\"md-icon-float md-block mb-0\\\" ng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE\\\">\\n<label translate=\\\"WEBHOOKS.WEBHOOK_TYPE_ORDERS\\\">Orders</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" class=\\\"icon\\\"></md-icon><input \\nvalue=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/wordpress/orders?key={{vm.site.key}}\\\" type=\\\"text\\\" disabled=\\\"disabled\\\">\\n<md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/wordpress/orders?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><md-input-container class=\\\"md-icon-float md-block mb-0\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><label \\ntranslate=\\\"WEBHOOKS.WEBHOOK_TYPE_ORDERS\\\">Orders</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" class=\\\"icon\\\"></md-icon><input \\nvalue=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/prestashop/orders?key={{vm.site.key}}\\\" type=\\\"text\\\" disabled=\\\"disabled\\\">\\n<md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/prestashop/orders?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><md-input-container class=\\\"md-icon-float md-block mb-0\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\"><label \\ntranslate=\\\"WEBHOOKS.WEBHOOK_TYPE_ORDERS\\\">Orders</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" class=\\\"icon\\\"></md-icon><input \\nvalue=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/shopify/orders?key={{vm.site.key}}\\\" type=\\\"text\\\" disabled=\\\"disabled\\\">\\n<md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/shopify/orders?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><md-input-container class=\\\"md-icon-float md-block mb-0\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\"><label \\ntranslate=\\\"WEBHOOKS.WEBHOOK_TYPE_PRODUCTS\\\">Products</label><md-icon md-font-icon=\\\"icon-package-variant-closed\\\" \\nclass=\\\"icon\\\"></md-icon><input value=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/shopify/products?key={{vm.site.key}}\\\" \\ntype=\\\"text\\\" disabled=\\\"disabled\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/shopify/products?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><md-input-container class=\\\"md-icon-float md-block mb-0\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO\\\"><label>Zalando OEA</label><md-icon \\nmd-font-icon=\\\"icon-key-variant\\\" class=\\\"icon\\\"></md-icon><input \\nvalue=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/zalando/orders\\\" type=\\\"text\\\" disabled=\\\"disabled\\\"><div class=\\\"hint\\\" \\ntranslate=\\\"SITE.ZALANDO_WEBHOOK_HINT\\\" translate-values=\\\"{key: vm.site.key, header: vm.ZALANDO_HEADER_KEY}\\\"></div>\\n<md-icon md-font-icon=\\\"icon-content-copy\\\" ng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/zalando/orders\\')\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><md-input-container class=\\\"md-icon-float md-block mb-0\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_MIINTO\\\"><label>Miinto TSV</label><md-icon \\nmd-font-icon=\\\"icon-key-variant\\\" class=\\\"icon\\\"></md-icon><input \\nvalue=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/miinto/products?key={{vm.site.key}}\\\" type=\\\"text\\\" disabled=\\\"disabled\\\">\\n<md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/miinto/products?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><div layout=\\\"row\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WIX\\\" layout-align=\\\"start center\\\">\\n<md-input-container class=\\\"md-icon-float md-block mb-0\\\" flex><label>Wix CSV</label><md-icon \\nmd-font-icon=\\\"icon-file-document\\\" class=\\\"icon\\\"></md-icon><input \\nvalue=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/wix/products?key={{vm.site.key}}\\\" type=\\\"text\\\" disabled=\\\"disabled\\\">\\n</md-input-container><md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/wix/products?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer double-input-button ml-5\\\"></md-icon><md-icon md-font-icon=\\\"icon-open-in-new\\\" \\nng-click=\\\"vm.goTo(vm.API_URL + \\'open/api/1.1/ecommerce/wix/products?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer double-input-button ml-5\\\"></md-icon></div><md-input-container \\nclass=\\\"md-icon-float md-block mb-0\\\" ng-if=\\\"vm.showProductsCsvEndpoint()\\\"><label>\\n{{\\'SITE.PRODUCTS_CSV_ENDPOINT\\' | translate}}</label><md-icon md-font-icon=\\\"icon-file-document\\\" class=\\\"icon\\\"></md-icon>\\n<input value=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/custom-csv/products?key={{vm.site.key}}\\\" type=\\\"text\\\" \\ndisabled=\\\"disabled\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/custom-csv/products?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><md-input-container class=\\\"md-icon-float md-block mb-0\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\"><label>\\n{{\\'SITE.STOCK_CSV_ENDPOINT\\' | translate}}</label><md-icon md-font-icon=\\\"icon-file-document\\\" class=\\\"icon\\\"></md-icon>\\n<input value=\\\"{{vm.API_URL}}open/api/1.1/ecommerce/custom-csv/stock?key={{vm.site.key}}\\\" type=\\\"text\\\" \\ndisabled=\\\"disabled\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\" \\nng-click=\\\"vm.copy(vm.API_URL + \\'open/api/1.1/ecommerce/custom-csv/stock?key=\\' + vm.site.key)\\\" \\nclass=\\\"icon cursor-pointer\\\"></md-icon></md-input-container><div layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.site.platform == vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO\\\"><span class=\\\"secondary-text\\\">\\n{{\\'SITE.DOWNLOAD_CSV_BODY\\' |translate }}</span> <button class=\\\"md-button\\\" ng-click=\\\"vm.downloadDataFile()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"md-primary\\\"><md-icon md-font-icon=\\\"icon-download\\\"></md-icon>\\n{{\\'GENERAL.DOWNLOAD\\' | translate}}</div></button></div></md-card-content></md-card><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"full-width\\\"><md-button class=\\\"stroked md-warn\\\" \\nng-click=\\\"vm.showDeleteSiteDialog()\\\" has-permission=\\\"ecommerce.sites.site.details.delete\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"md-warn\\\"><md-progress-circular ng-if=\\\"vm.deleting\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span>{{\\'GENERAL.DELETE\\' | translate}}</span></div></md-button></div></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/tabs/products.html\",\"<div id=\\\"ecommerce-site-products\\\"><md-card flex><md-card-title><md-card-title-text layout=\\\"column\\\" \\nlayout=\\\"start center\\\"><div class=\\\"did-you-know mb-10\\\" layout-align=\\\"start start\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\" flex=\\\"100\\\"><div flex \\nclass=\\\"pt-4 mb-4 did-you-know-message\\\"><div class=\\\"mb-8 center-vertically\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"m-0 pr-32\\\"></md-icon><span class=\\\"pt-2\\\" \\ntranslate=\\\"SITE.ADVICE_NON_VISIBLE_PRODUCT_SALES_CHANNEL_TITLE\\\"></span></div><div class=\\\"secondary-text\\\" \\ntranslate=\\\"SITE.ADVICE_NON_VISIBLE_PRODUCT_SALES_CHANNEL_DESC\\\"></div></div></div><div layout-align=\\\"start start\\\" \\nlayout=\\\"row\\\"><md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<input id=\\\"search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span \\nclass=\\\"w-8\\\"></span> <span flex></span> <span class=\\\"w-8\\\"></span><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select ng-model=\\\"vm.filterBrands\\\" \\nflex class=\\\"no-margin\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.filterBrandsSelector = \\'\\'\\\"><md-select-header>\\n<input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.filterBrandsSelector\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"PRODUCT.ALL_BRANDS\\\">All Brands</md-option><md-option \\nng-repeat=\\\"brand in vm.brandsList | orderBy: \\'name\\' | filter: vm.filterBrandsSelector\\\" ng-value=\\\"brand.id\\\">\\n{{brand.name}}</md-option></md-select></md-input-container><span class=\\\"w-8\\\"></span><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select ng-model=\\\"vm.filterSeasons\\\" \\nflex md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.filterSeasonsSelector = \\'\\'\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.filterSeasonsSelector\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"PRODUCT.ALL_SEASONS\\\">All Seasons</md-option><md-option \\nng-repeat=\\\"season in vm.seasonsList | orderBy: \\'position\\' | filter: vm.filterSeasonsSelector\\\" ng-value=\\\"season.id\\\">\\n{{season.name}}</md-option></md-select></md-input-container><span class=\\\"w-8\\\"></span><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-folder-multiple\\\"></md-icon><md-select \\nng-model=\\\"vm.filterCategories\\\" flex md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.filterCategoriesSelector = \\'\\'\\\">\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.filterCategoriesSelector\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"\\'\\'\\\" translate=\\\"PRODUCT.ALL_CATEGORIES\\\">All Categories</md-option><md-option \\nng-repeat=\\\"category in vm.categoriesList | orderBy: \\'name\\' | filter: vm.filterCategoriesSelector\\\" \\nng-value=\\\"category.id\\\">{{category.name}}</md-option></md-select></md-input-container><span class=\\\"w-8\\\"></span>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-archive\\\"></md-icon><md-select \\nng-model=\\\"vm.filterArchived\\\" flex ng-change=\\\"vm.reloadSiteProducts()\\\"><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"PRODUCT.ALL_PRODUCTS\\\"></md-option><md-option ng-repeat=\\\"(key, archived) in vm.archivedDict\\\" \\nng-value=\\\"archived\\\">{{\\\"PRODUCT.\\\" + key |translate}}</md-option></md-select></md-input-container></div>\\n</md-card-title-text></md-card-title><md-card-content><table class=\\\"dataTable row-border\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"styles-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/tabs/routing-rules.html\",\"<div id=\\\"routing-rules\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"ROUTING_RULES.ROUTING_RULES\\\"></span></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"vm.saving || !vm.routingRule.isValid()\\\" class=\\\"md-primary md-raised\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></div></div><table \\nclass=\\\"full-width simple\\\" ms-responsive-table><thead><tr><th>{{\\'ROUTING_RULES.POSITION\\' | translate}}</th><th>\\n{{\\'ROUTING_RULES.RULE_NAME\\' | translate}}</th><th>{{\\'ROUTING_RULES.RULE_CRITERIA\\' | translate}}</th><th>\\n{{\\'ROUTING_RULES.ACTION\\' | translate}}</th><th></th></tr></thead><tbody><tr \\nng-repeat=\\\"ruleLine in vm.routingRule.rule_lines | orderBy: \\'order\\'\\\"><td>{{ruleLine.order + 1}}</td><td>\\n<md-input-container class=\\\"m-0 custom-style\\\"><input ng-model=\\\"ruleLine.name\\\" \\nplaceholder=\\\"{{\\'ROUTING_RULES.RULE_NAME\\' | translate}}\\\" ng-model-options=\\\"{debounce: 500}\\\" type=\\\"text\\\">\\n</md-input-container></td><td><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start stretch\\\" ng-repeat=\\\"ruleCriteria in ruleLine.rule_criteria\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\"><div layout=\\\"column\\\" class=\\\"criteria-box\\\"><md-input-container class=\\\"custom-style\\\"><label>\\n{{\\'ROUTING_RULES.CRITERIA_TYPE\\' | translate}}</label><md-select ng-model=\\\"ruleCriteria.criteria_type\\\" \\nng-change=\\\"ruleCriteria.resetCriteriaValues()\\\" placeholder=\\\"{{\\'ROUTING_RULES.CRITERIA_TYPE\\' | translate}}\\\" class=\\\"m-0\\\">\\n<md-option ng-repeat=\\\"(type, id) in ruleCriteria.getAvailableCriteriaTypes()\\\" ng-value=\\\"id\\\">\\n{{\\'ROUTING_RULES.CRITERIA_TYPE_\\' + type | translate}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"custom-style\\\" ng-if=\\\"ruleCriteria.hasOperations()\\\"><label>{{\\'ROUTING_RULES.OPERATOR\\' | translate}}</label>\\n<md-select ng-model=\\\"ruleCriteria.operator\\\" placeholder=\\\"{{\\'ROUTING_RULES.OPERATOR\\' | translate}}\\\" \\nng-disabled=\\\"!ruleCriteria.criteria_type\\\" class=\\\"mb-0\\\"><md-option \\nng-repeat=\\\"(type, id) in ruleCriteria.getOperatorByCriteria()\\\" ng-value=\\\"id\\\">\\n{{\\'ROUTING_RULES.OPERATOR_\\' + type | translate}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"m-0 custom-style\\\" ng-if=\\\"ruleCriteria.isMultiSelect()\\\"><label>{{\\'ROUTING_RULES.VALUE\\' | translate}}</label>\\n<md-select ng-model=\\\"ruleCriteria.criteria_value_list\\\" multiple=\\\"multiple\\\" \\nng-disabled=\\\"!ruleCriteria.criteria_type || !ruleCriteria.operator\\\"><md-option \\nng-repeat=\\\"country in ruleCriteria.getMultiselectOptions() | orderBy:\\'name\\'\\\" ng-value=\\\"country.code\\\">{{country.name}}\\n</md-option></md-select></md-input-container><md-input-container class=\\\"m-0 custom-style\\\" \\nng-if=\\\"ruleCriteria.isTextInput()\\\"><label>{{\\'ROUTING_RULES.VALUE\\' | translate}}</label><md-chips \\nng-model=\\\"ruleCriteria.criteria_value_list\\\" ng-disabled=\\\"!ruleCriteria.criteria_type || !ruleCriteria.operator\\\" \\nplaceholder=\\\"{{\\'ROUTING_RULES.VALUE\\' | translate}}\\\"></md-chips><span class=\\\"hint-text\\\">{{ruleCriteria.getHintText()}}\\n</span></md-input-container><md-input-container class=\\\"m-0 custom-style\\\" ng-if=\\\"ruleCriteria.isNumberInput()\\\"><label>\\n{{\\'ROUTING_RULES.VALUE\\' | translate}}</label><input ng-model=\\\"ruleCriteria.criteria_value\\\" \\nng-disabled=\\\"!ruleCriteria.criteria_type || !ruleCriteria.operator\\\" ng-model-options=\\\"{debounce: 500}\\\" type=\\\"number\\\">\\n</md-input-container><md-autocomplete ng-if=\\\"ruleCriteria.isAutocomplete()\\\" \\nmd-floating-label=\\\"{{\\'ROUTING_RULES.SEARCH_\\' + vm.RULE_CRITERIA_TYPES[ruleCriteria.criteria_type] | translate}}\\\" \\nmd-items=\\\"dynamicObject in vm.dynamicQuerySearch(ruleCriteria)\\\" md-selected-item=\\\"ruleCriteria.criteria_object_id\\\" \\nmd-search-text=\\\"ruleCriteria.searchText\\\" \\nmd-selected-item-change=\\\"vm.selectDynamicObjectValue(ruleCriteria, dynamicObject)\\\" \\nmd-item-text=\\\"vm.getAutocompleteObjectName(ruleCriteria)\\\" md-min-length=\\\"3\\\" md-delay=\\\"300\\\" md-no-cache=\\\"true\\\" \\nclass=\\\"mb-0\\\"><md-item-template><div layout=\\\"row\\\"><span md-highlight-text=\\\"ruleLine.searchText\\\" md-highlight-flags=\\\"^i\\\">\\n{{dynamicObject.name}}</span></div></md-item-template></md-autocomplete><div layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button ng-if=\\\"ruleLine.allowedToRemoveRuleCriteria()\\\" ng-click=\\\"ruleLine.removeRuleCriteria($index)\\\" \\ntranslate=\\\"GENERAL.REMOVE\\\"></md-button></div></div></div><md-icon md-font-icon=\\\"icon-plus\\\" \\nng-if=\\\"$index !== ruleLine.rule_criteria.length - 1\\\"></md-icon></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-button class=\\\"md-icon-button md-primary\\\" ng-disabled=\\\"!ruleLine.allowedToAddRuleCriteria()\\\" \\nng-click=\\\"ruleLine.addRuleCriteria()\\\"><md-icon md-font-icon=\\\"icon-plus-circle-outline\\\"></md-icon></md-button></div>\\n</div></td><td><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\"><div layout=\\\"column\\\" class=\\\"action-box\\\">\\n<md-input-container class=\\\"custom-style\\\"><label>{{\\'ROUTING_RULES.ACTION_TYPE\\' | translate}}</label><md-select \\nng-model=\\\"ruleLine.action_type\\\" ng-change=\\\"ruleLine.resetActionValues()\\\" \\nplaceholder=\\\"{{\\'ROUTING_RULES.ACTION_TYPE\\' | translate}}\\\" class=\\\"m-0\\\"><md-option \\nng-repeat=\\\"(type, id) in ruleLine.getAvailableActionTypes()\\\" ng-value=\\\"id\\\">\\n{{\\'ROUTING_RULES.ACTION_TYPE_\\' + type | translate}}</md-option></md-select></md-input-container><md-input-container \\nng-if=\\\"ruleLine.isAddScoring()\\\" class=\\\"m-0 custom-style\\\"><input ng-model=\\\"ruleLine.action_value\\\" \\nplaceholder=\\\"{{\\'ROUTING_RULES.SCORE\\' | translate}}\\\" type=\\\"number\\\"></md-input-container><div><md-autocomplete \\nng-if=\\\"ruleLine.isForceOrDiscardWarehouse()\\\" md-floating-label=\\\"{{\\'ROUTING_RULES.LOCATION\\' | translate}}\\\" \\nmd-items=\\\"warehouse in vm.warehouseQuerySearch(ruleLine)\\\" md-selected-item=\\\"ruleLine.action_object_id\\\" \\nmd-search-text=\\\"ruleLine.searchWarehouseText\\\" md-selected-item-change=\\\"vm.selectWarehouseValue(ruleLine, warehouse)\\\" \\nmd-item-text=\\\"vm.getSelectedWarehouseName(ruleLine)\\\" md-min-length=\\\"3\\\" md-delay=\\\"300\\\" md-no-cache=\\\"true\\\">\\n<md-item-template><div layout=\\\"row\\\"><span md-highlight-text=\\\"ruleLine.searchWarehouseText\\\" md-highlight-flags=\\\"^i\\\">\\n{{warehouse.name}}</span></div></md-item-template></md-autocomplete></div></div></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.routingRule.removeRuleLine($index)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon></md-button></div></td></tr><tr><td colspan=\\\"5\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button ng-click=\\\"vm.createRuleLine()\\\" class=\\\"md-primary stroked\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"ROUTING_RULES.NEW_RULE_CRITERIA\\\"></span></div></md-button></div></td></tr></tbody></table></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/adjustment/tabs/details.html\",\"<div id=\\\"adjustment-details\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"ADJUSTMENT.DETAILS\\\"></span></md-card-title-text></md-card-title><md-card-content><form name=\\\"detailsForm\\\">\\n<div layout=\\\"row\\\" flex=\\\"100\\\"><md-input-container class=\\\"ml-5 pr-10\\\" flex=\\\"25\\\" ng-if=\\\"vm.isNewAdjustment\\\"><label><span \\ntranslate=\\\"ADJUSTMENT.SERIAL_NUMBER\\\">Serial Number</span></label><md-select \\nng-model=\\\"vm.adjustment.serial_number_type\\\" required \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.adjustments.create\\') && !Session.hasPermission(\\'inventory.adjustments.adjustment.details.update\\')\\\">\\n<md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_ADJUSTMENT_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"25\\\" \\nclass=\\\"pl-5 pr-10\\\" ng-if=\\\"!vm.isNewAdjustment\\\"><label translate=\\\"ADJUSTMENT.SERIAL_NUMBER\\\">Serial Number</label><input \\nng-model=\\\"vm.adjustment.autocode\\\" ng-disabled=\\\"true\\\"></md-input-container></div><div layout=\\\"row\\\" flex>\\n<md-input-container class=\\\"ml-5 pr-10\\\" flex=\\\"50\\\"><label><span translate=\\\"ADJUSTMENT.WAREHOUSE\\\"></span></label>\\n<md-select ng-model=\\\"vm.adjustment.source_warehouse.id\\\" \\nng-disabled=\\\"vm.adjustment.status>1 || !Session.hasPermission(\\'inventory.adjustments.create\\') || !Session.hasPermission(\\'inventory.adjustments.adjustment.details.update\\')\\\" \\nmd-on-close=\\\"vm.searchSelectHeader[0] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" required><md-select-header><input \\nng-model=\\\"vm.searchSelectHeader[0]\\\" type=\\\"search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-text\\\"></md-select-header><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[0]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"ml-5 pr-10\\\" flex=\\\"50\\\"><label><span translate=\\\"ADJUSTMENT.REASON\\\"></span></label><md-select \\nng-model=\\\"vm.adjustment.reason\\\" \\nng-disabled=\\\"vm.adjustment.status>1 || !Session.hasPermission(\\'inventory.adjustments.create\\') || !Session.hasPermission(\\'inventory.adjustments.adjustment.details.update\\')\\\" \\nrequired><md-option ng-repeat=\\\"reason in vm.reasons_reverse\\\" ng-value=\\\"reason\\\">\\n{{\\'ADJUSTMENT.\\'+ vm.reasons[reason] | translate}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><md-input-container class=\\\"ml-5 pr-10\\\" flex=\\\"50\\\" ng-if=\\\"vm.adjustment.reason==21\\\"><label><span \\ntranslate=\\\"ADJUSTMENT.OPERATION\\\"></span></label><md-select ng-model=\\\"vm.adjustment.operation\\\" \\nng-disabled=\\\"vm.adjustment.status>1 || !Session.hasPermission(\\'inventory.adjustments.create\\') || !Session.hasPermission(\\'inventory.adjustments.adjustment.details.update\\')\\\" \\nrequired><md-option ng-repeat=\\\"operation in vm.operations_reverse\\\" ng-value=\\\"operation\\\">\\n{{\\'ADJUSTMENT.\\'+ vm.operations[operation] | translate}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container></div><div layout=\\\"row\\\" flex><md-input-container class=\\\"ml-5 pr-10\\\" flex><label \\ntranslate=\\\"ADJUSTMENT.NOTES\\\"></label><textarea ng-model=\\\"vm.adjustment.notes\\\" md-maxlength=\\\"1000\\\" rows=\\\"1\\\" \\nmd-select-on-focus \\nhas-permission-else-disable=\\\"inventory.adjustments.create,inventory.adjustments.adjustment.details.update\\\"></textarea>\\n</md-input-container><md-chips ng-model=\\\"vm.adjustment.tags\\\" placeholder=\\\"Tag and press enter\\\" \\ndelete-button-label=\\\"Remove tag\\\" delete-hint=\\\"Press delete to remove tag\\\" secondary-placeholder=\\\"Type another tag\\\" \\nclass=\\\"ml-5 pr-10\\\" flex></md-chips></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex \\nhas-permission=\\\"inventory.adjustments.adjustment.details.update,inventory.adjustments.create\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" ng-disabled=\\\"vm.saving\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" has-permission=\\\"inventory.adjustments.adjustment.details.update\\\" \\nng-disabled=\\\"vm.saving\\\" ng-if=\\\"!vm.isNewAdjustment\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button><md-button \\nclass=\\\"md-primary\\\" ng-click=\\\"vm.create()\\\" has-permission=\\\"inventory.adjustments.create\\\" \\nng-disabled=\\\"!detailsForm.$dirty || detailsForm.$invalid || vm.saving\\\" ng-if=\\\"vm.isNewAdjustment\\\" \\ntranslate=\\\"GENERAL.CONTINUE\\\">Continue</md-button></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/adjustment/tabs/products.html\",\"<div id=\\\"adjustment-products\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\">\\n</nd-barcode-listener><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" ng-if=\\\"vm.adjustment.status != 1\\\" translate=\\\"ADJUSTMENT.PRODUCTS\\\"></span>\\n<nd-product-autocomplete ng-if=\\\"vm.adjustment.status == 1\\\" \\nhas-permission=\\\"inventory.adjustments.adjustment.products.add_product\\\" callback=\\\"vm.searchProductCallback(product)\\\" \\nplaceholder=\\\"\\'ADJUSTMENT.ADD_PRODUCT\\'\\\" manage-uids=\\\"false\\\" manage-lots=\\\"false\\\" class=\\\"w-300 mr-10\\\">\\n</nd-product-autocomplete><md-button ng-if=\\\"vm.adjustment.status == 1\\\" class=\\\"md-icon-button\\\" \\nhas-permission=\\\"inventory.adjustments.adjustment.products.add_product\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\">\\n<md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>{{\\'ADJUSTMENT.ADVANCED_SEARCH\\' | translate}}</md-tooltip>\\n</md-button><span flex></span><md-progress-circular ng-if=\\\"vm.changingStatus\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><div><md-button ng-if=\\\"vm.adjustment.status==2\\\" \\nhas-permission=\\\"inventory.adjustments.adjustment.products.adjust\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"md-warn stroked\\\" \\nng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"></md-button><md-button \\nng-if=\\\"vm.adjustment.status==1\\\" has-permission=\\\"inventory.adjustments.adjustment.products.adjust\\\" \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.adjust()\\\" translate=\\\"ADJUSTMENT.ADJUST\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"></md-button></div><md-button \\nng-if=\\\"vm.adjustment.status == 1 && $parent.vm.pendingBarcodes.length\\\" class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.toggleSidenav(\\'sidenav\\')\\\"><md-icon style=\\\"transform: rotate(180deg)\\\" md-font-icon=\\\"icon-backburger\\\">\\n</md-icon></md-button></md-card-title-text></md-card-title><md-progress-linear class=\\\"md-primary\\\" \\nmd-mode=\\\"indeterminate\\\" ng-if=\\\"vm.fetching || vm.addingProduct\\\"></md-progress-linear><md-card-content><table \\nclass=\\\"dataTable\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" \\nid=\\\"datatable-table\\\"></table></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"ADJUSTMENT.TOTAL_ITEMS\\\"></span> <span flex></span> <span \\nclass=\\\"h3\\\">{{vm.total_adjustment_order_product_variants || 0}}</span></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/adjustments/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-20\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon>\\n<md-select ng-model=\\\"vm.status.filters.filterStatus\\\" flex multiple=\\\"true\\\" class=\\\"status-select\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"status in vm.statusList | orderBy: \\'code\\'\\\" \\nng-value=\\\"status.code\\\"><span class=\\\"status-badge\\\" ng-class=\\\"vm.orderStatusColors[status.code]\\\">\\n{{\\'ADJUSTMENTS.\\' + status.name | translate}}</span></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-20\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-icon \\nclass=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.filterSourceWarehouse\\\" flex><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"TRANSFERS.ALL_SOURCE_WAREHOUSES\\\">All Source Warehouses</md-option><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.name\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/collection/dialogs/delete-collection.html\",\"<md-dialog><md-dialog-content><div layout=\\\"column\\\" flex><h2 translate=\\\"COLLECTION.DELETE_COLLECTION\\\" class=\\\"mt-0\\\">\\nDeleting Collection</h2><p translate=\\\"COLLECTION.DELETE_COLLECTION_MESSAGE\\\"></p><md-input-container flex=\\\"100\\\" \\nclass=\\\"no-margin\\\"><label translate=\\\"COLLECTION.DELETE_COLLECTION_WORD\\\">Type \\\"delete collection\\\" to confirm</label>\\n<input ng-model=\\\"text\\\"></md-input-container></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button ng-click=\\\"cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">CANCEL</md-button>\\n<md-button ng-click=\\\"hide()\\\" translate=\\\"GENERAL.DELETE\\\" ng-disabled=\\\"text != securityWord\\\">DELETE</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/collection/tabs/details.html\",\"<div id=\\\"collection-details\\\"><div layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><md-card flex><md-card-title><md-card-title-text>\\n<span class=\\\"h2\\\" translate=\\\"COLLECTION.DETAILS\\\">Billing</span></md-card-title-text></md-card-title><md-card-content>\\n<form name=\\\"collectionForm\\\"><div layout=\\\"column\\\" flex><md-input-container class=\\\"md-icon-float md-block mr-10\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"GENERAL.CODE\\\">Code</label><md-icon md-font-icon=\\\"icon-android-studio\\\" \\nclass=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.collection.code\\\" type=\\\"text\\\" required md-auto-focus \\nhas-permission-else-disable=\\\"inventory.collections.collection.details.update\\\"></md-input-container><md-input-container \\nclass=\\\"md-block h-60 mr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"COLLECTION.SEASON\\\">Brand</label><md-icon \\nmd-font-icon=\\\"icon-weather-sunny\\\" class=\\\"icon\\\"></md-icon><md-select required \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.collections.collection.details.update\\')\\\" \\nng-model=\\\"vm.collection.season\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header>\\n<md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"mr-5\\\" class=\\\"icon\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-select-header><md-option ng-value=\\\"season.id\\\" \\nng-repeat=\\\"season in vm.seasons | filter:vm.selectFilter | orderBy: \\'name\\'\\\">{{season.name}}</md-option>\\n<nd-new-object-option array=\\\"vm.seasons\\\" , api-name=\\\"\\'seasons\\'\\\" option-label=\\\"\\'ADD_NEW_SEASON\\'\\\" \\ndialog-title=\\\"\\'NEW_SEASON\\'\\\" callback=\\\"vm.newSeasonAdded(newObject)\\\"></nd-new-object-option></md-select>\\n</md-input-container><div layout-align=\\\"end center\\\" layout=\\\"row\\\" flex \\nhas-permission=\\\"inventory.collections.collection.details.update\\\"><md-button ng-disabled=\\\"!collectionForm.$dirty\\\" \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"!collectionForm.$dirty\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">\\n</md-button></div></div></form></md-card-content></md-card><md-card flex><md-card-title><md-card-title-text><span \\nclass=\\\"h2\\\" translate=\\\"COLLECTION.CATALOG\\\">Billing</span></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"row\\\" flex class=\\\"pb-25\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.collection.catalog && !vm.collection.catalog_in_process\\\"><md-icon md-font-icon=\\\"icon-file-pdf-box\\\" \\nclass=\\\"red-700-fg mr-10\\\"></md-icon><a class=\\\"md-link mr-10\\\" href=\\\"{{vm.collection.catalog}}\\\" download>\\n{{vm.collection.code}}.pdf</a><br><span translate=\\\"COLLECTION.LAST_UPDATE\\\" class=\\\"mr-5 secondary-text\\\">Last Update:\\n</span> <span flex class=\\\"secondary-text\\\">{{vm.collection.catalog_last_update | date: \\'short\\'}}</span></div><div \\nlayout=\\\"column\\\"><md-input-container flex=\\\"50\\\" class=\\\"pl-5 pr-10\\\"><label translate=\\\"COLLECTION.WHOLESALE_PRICING_TIER\\\">\\nWholesale Pricing Tier</label><md-select ng-model=\\\"vm.selectedWholesalePricingTier\\\" \\nng-required=\\\"!vm.selectedRetailPricingTier\\\" \\nng-disabled=\\\"!session.hasPermission(\\'inventory.collections.collection.details.generate_catalog\\')\\\" \\nmd-on-close=\\\"vm.selectedWholesalePricingTierSearch = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input \\nng-model=\\\"vm.selectedWholesalePricingTierSearch\\\" type=\\\"search\\\" autofocus maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-text\\\"></md-select-header><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.selectedWholesalePricingTierSearch\\\" \\nng-value=\\\"pricingTier.id\\\">{{pricingTier.code}} - {{pricingTier.name}}</md-option></md-select><div \\nclass=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"50\\\" class=\\\"pl-5 pr-10\\\"><label \\ntranslate=\\\"COLLECTION.RETAIL_PRICING_TIER\\\">RetailPricing Tier</label><md-select \\nng-model=\\\"vm.selectedRetailPricingTier\\\" ng-required=\\\"!vm.selectedWholesalePricingTier\\\" \\nng-disabled=\\\"!session.hasPermission(\\'inventory.collections.collection.details.generate_catalog\\')\\\" \\nmd-on-close=\\\"vm.selectedRetailPricingTierSearch = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input \\nng-model=\\\"vm.selectedRetailPricingTierSearch\\\" type=\\\"search\\\" autofocus maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-text\\\"></md-select-header><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.selectedRetailPricingTierSearch\\\" \\nng-value=\\\"pricingTier.id\\\">{{pricingTier.code}} - {{pricingTier.name}}</md-option></md-select><div \\nclass=\\\"md-errors-spacer\\\"></div></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nng-click=\\\"vm.generateStylesCSV()\\\" class=\\\"mr-20 md-raised m-0\\\" \\nhas-permission=\\\"inventory.collections.collection.details.generate_products_csv\\\" ng-disabled=\\\"vm.generateClicked\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" \\nng-if=\\\"vm.generateClicked\\\"></md-progress-circular><span translate=\\\"COLLECTION.PRODUCTS_CSV\\\" \\nng-class=\\\"{\\'ml-8\\': vm.generateClicked}\\\"></span></div></md-button><md-button ng-click=\\\"vm.generatePDFCatalog()\\\" \\nclass=\\\"md-primary md-raised m-0\\\" has-permission=\\\"inventory.collections.collection.details.generate_catalog\\\" \\nng-disabled=\\\"vm.printing\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.printing\\\"></md-progress-circular><span translate=\\\"COLLECTION.GENERATE_CATALOG\\\" \\nng-class=\\\"{\\'ml-8\\': vm.printing}\\\"></span></div></md-button></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/collection/tabs/products.html\",\"<div id=\\\"collection-products\\\"><md-card flex><md-card-title><md-input-container md-no-float \\nclass=\\\"nd-search-input ml-15 mr-15\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"search-input\\\" \\nng-model=\\\"vm.search\\\" type=\\\"search\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span flex></span><md-button \\nclass=\\\"md-raised md-primary ml-15 mr-15\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\"><span \\ntranslate=\\\"COLLECTION.ADD_PRODUCT\\\"></span></md-button></md-card-title><md-card-content class=\\\"p-0 border-top\\\"><table \\nclass=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"styles-table\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/activate-verifactu-dialog.html\",\"<md-dialog aria-label=\\\"activate-verifactu\\\" class=\\\"w-500\\\"><form ng-cloak name=\\\"activateVerifactuForm\\\">\\n<md-dialog-content><h2 class=\\\"mb-32\\\" translate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU_HEADER\\\"></h2><div class=\\\"mb-16\\\"><p \\nclass=\\\"mb-16\\\" translate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU_BODY\\\"></p><p class=\\\"mb-16\\\" \\ntranslate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU_WARNING_INTRO\\\"></p><ul class=\\\"mb-16\\\"><li \\ntranslate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU_WARNING_1\\\"></li><li translate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU_WARNING_2\\\">\\n</li></ul><p class=\\\"\\\" translate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU_QUESTION\\\"></p></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" \\nnd-track-click=\\\"cancel activate verifactu\\\"></md-button><md-button ng-click=\\\"vm.activate()\\\" class=\\\"md-primary stroked\\\" \\ntranslate=\\\"CONFIGURATION.ACTIVATE_AND_LINK_VERIFACTU\\\" nd-track-click=\\\"activate verifactu\\\"><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/verifactu-color.62a97f20.svg\\\"></md-icon></md-button></md-dialog-actions>\\n</form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/attribute-dialog.html\",\"<md-dialog aria-label=\\\"New AttributeCategory\\\"><form ng-cloak name=\\\"attributeCategoryForm\\\"><md-dialog-content><h2 \\nclass=\\\"mb-30\\\" ng-if=\\\"vm.isNew && vm.isAttributeCategory\\\">{{\\'CONFIGURATION.NEW_ATTRIBUTE_CATEGORY\\' | translate}}</h2><h2\\n class=\\\"mb-30\\\" ng-if=\\\"!vm.isNew && vm.isAttributeCategory\\\">{{\\'CONFIGURATION.EDIT_ATTRIBUTE_CATEGORY\\' | translate}}</h2>\\n<h2 class=\\\"mb-30\\\" ng-if=\\\"vm.isNew && !vm.isAttributeCategory\\\">{{\\'CONFIGURATION.NEW_ATTRIBUTE\\' | translate}}</h2><h2 \\nclass=\\\"mb-30\\\" ng-if=\\\"!vm.isNew && !vm.isAttributeCategory\\\">{{\\'CONFIGURATION.EDIT_ATTRIBUTE\\' | translate}}</h2>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon>\\n<input ng-model=\\\"vm.object.name\\\" placeholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" required \\nhas-permission-else-disable=\\\"inventory.configuration.attributes.update\\\"></md-input-container><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\" ng-if=\\\"vm.isAttributeCategory\\\"><md-icon md-font-icon=\\\"icon-code-tags\\\"></md-icon><md-select \\nng-model=\\\"vm.object.type\\\" ng-disabled=\\\"!vm.isNew\\\" placeholder=\\\"{{\\'CONFIGURATION.ATTRIBUTE_TYPE\\' | translate}}\\\" \\nautocomplete=\\\"off\\\" required has-permission-else-disable=\\\"inventory.configuration.attributes.update\\\"><md-option \\nng-repeat=\\\"type in vm.attributeCategoryTypes\\\" ng-value=\\\"type\\\">\\n{{ \\'CONFIGURATION.ATTRIBUTE_TYPE_\\' + vm.ATTRIBUTE_CATEGORY_TYPES[type] | translate}}</md-option></md-select>\\n</md-input-container><md-input-container flex ng-if=\\\"!vm.isAttributeCategory && !vm.specificAttributeCategory\\\" \\nclass=\\\"w-300\\\" has-permission=\\\"inventory.configuration.attributes.update\\\"><md-icon \\nclass=\\\"icon icon-book-variant name font-size-24\\\"></md-icon><label>{{\\'PRODUCT.ATTRIBUTE_CATEGORY\\' | translate}}</label>\\n<md-select ng-model=\\\"vm.object.attribute_category\\\" required md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"attributeCategory in vm.attributeCategories | orderBy: \\'position\\' | filter:vm.selectFilter track by attributeCategory.id\\\" \\nng-value=\\\"attributeCategory.id\\\">{{attributeCategory.name}}</md-option></md-select></md-input-container>\\n<md-input-container flex ng-if=\\\"!vm.isAttributeCategory && vm.specificAttributeCategory\\\" class=\\\"md-block mb-0 w-300\\\">\\n<md-icon class=\\\"icon icon-clipboard-outline name font-size-24\\\"></md-icon><input \\nplaceholder=\\\"{{\\'PRODUCT.ATTRIBUTE_CATEGORY\\' | translate}}\\\" value=\\\"{{vm.specificAttributeCategory.name}}\\\" \\nng-disabled=\\\"true\\\"></md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.attributes.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\nnd-track-click=\\\"cancel attribute\\\" class=\\\"stroked\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" nd-track-click=\\\"save attribute\\\" \\nng-disabled=\\\"!attributeCategoryForm.$valid || !attributeCategoryForm.$dirty\\\">{{\\'GENERAL.SAVE\\' | translate}}</md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/brand-dialog.html\",\"<md-dialog aria-label=\\\"Brand\\\"><form ng-cloak name=\\\"brandForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"CONFIGURATION.NEW_BRAND\\\" ng-if=\\\"!vm.brand.id\\\" class=\\\"mb-32\\\">New Brand</h2><h2 \\ntranslate=\\\"CONFIGURATION.EDIT_BRAND\\\" translate-values=\\\"{name: vm.brand.name}\\\" ng-if=\\\"vm.brand.id\\\" class=\\\"mb-32\\\">\\nEdit Brand {{vm.brand.name}}</h2><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input ng-model=\\\"vm.brand.code\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.CODE\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.brands.update\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input ng-model=\\\"vm.brand.name\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.brands.update\\\" type=\\\"text\\\" required></md-input-container>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-sort-numeric name font-size-24\\\">\\n</md-icon><input ng-model=\\\"vm.brand.position\\\" placeholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.brands.update\\\" type=\\\"number\\\">\\n</md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.brands.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" \\nclass=\\\"stroked\\\" nd-track-click=\\\"cancel brand\\\">Cancel</md-button><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!brandForm.$valid || !brandForm.$dirty\\\" class=\\\"md-primary md-raised\\\" nd-track-click=\\\"save brand\\\" \\ntranslate=\\\"GENERAL.SAVE\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/category-dialog.html\",\"<md-dialog aria-label=\\\"New Category\\\"><form name=\\\"categoryForm\\\" ng-cloak><md-dialog-content><h2 class=\\\"mb-30\\\" \\nng-if=\\\"vm.isNew && vm.isCategory\\\">{{\\'CONFIGURATION.NEW_CATEGORY\\' | translate}}</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"!vm.isNew && vm.isCategory\\\">{{\\'CONFIGURATION.EDIT_CATEGORY\\' | translate}}</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"vm.isNew && !vm.isCategory\\\">{{\\'CONFIGURATION.NEW_SUBCATEGORY\\' | translate}}</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"!vm.isNew && !vm.isCategory\\\">{{\\'CONFIGURATION.EDIT_SUBCATEGORY\\' | translate}}</h2><md-input-container \\nclass=\\\"md-block mb-0 w-300\\\" flex><md-icon class=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.categories.update\\\" md-auto-focus \\nng-model=\\\"vm.object.code\\\" placeholder=\\\"{{\\'CONFIGURATION.CODE\\' | translate}}\\\" required></md-input-container>\\n<md-input-container class=\\\"md-block mb-0 w-300\\\" flex><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon>\\n<input autocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.categories.update\\\" \\nng-model=\\\"vm.object.name\\\" placeholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" required></md-input-container>\\n<md-input-container class=\\\"md-block mb-40 w-300\\\" flex><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon>\\n<md-select has-permission-else-disable=\\\"inventory.configuration.categories.update\\\" \\nng-model=\\\"vm.object.attribute_categories\\\" multiple=\\\"true\\\" placeholder=\\\"{{\\'CONFIGURATION.ATTRIBUTES\\' | translate}}\\\">\\n<md-option ng-repeat=\\\"attribute in vm.attributes\\\" ng-value=\\\"attribute.id\\\">{{attribute.name}}</md-option></md-select>\\n<div class=\\\"hint secondary-text\\\">{{\\'CONFIGURATION.CATEGORY_ATTRIBUTES_HELP\\' | translate}}</div></md-input-container>\\n<md-input-container class=\\\"md-block mb-0 w-300\\\" flex><md-icon class=\\\"icon icon-sort-numeric name font-size-24\\\">\\n</md-icon><input autocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.categories.update\\\" \\nng-model=\\\"vm.object.position\\\" placeholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" type=\\\"number\\\">\\n</md-input-container><md-input-container class=\\\"w-300\\\" flex has-permission=\\\"inventory.configuration.categories.update\\\" \\nng-if=\\\"!vm.isCategory && !vm.specificCategory\\\"><md-icon class=\\\"icon icon-book-variant name font-size-24\\\"></md-icon>\\n<label>{{\\'CONFIGURATION.CATEGORY\\' | translate}}\\\"</label><md-select md-on-close=\\\"vm.onSelectorClose()\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" ng-model=\\\"vm.object.category.id\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.selectFilter\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\ntype=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"category in vm.categories | orderBy: \\'position\\' | filter:vm.selectFilter track by category.id\\\" \\nng-value=\\\"category.id\\\">{{category.code}}, {{category.name}}</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"md-block mb-0 w-300\\\" flex ng-if=\\\"!vm.isCategory && vm.specificCategory\\\"><md-icon \\nclass=\\\"icon icon-clipboard-outline name font-size-24\\\"></md-icon><input ng-disabled=\\\"true\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.CATEGORY\\' | translate}}\\\" value=\\\"{{vm.specificCategory | codename}}\\\"></md-input-container>\\n</md-dialog-content><md-dialog-actions has-permission=\\\"inventory.configuration.categories.update\\\" layout=\\\"row\\\">\\n<md-button class=\\\"stroked\\\" nd-track-click=\\\"cancel category\\\" ng-click=\\\"vm.cancel()\\\">{{\\'GENERAL.CANCEL\\' | translate}}\\n</md-button><md-button class=\\\"md-primary md-raised\\\" nd-track-click=\\\"save category\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!categoryForm.$valid || !categoryForm.$dirty\\\">{{\\'GENERAL.SAVE\\' | translate}}</md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/composition-dialog.html\",\"<md-dialog aria-label=\\\"Composition\\\" style=\\\"z-index: 10000\\\"><form ng-cloak name=\\\"compositionForm\\\"><md-dialog-content><h2\\n translate=\\\"CONFIGURATION.NEW_COMPOSITION\\\" ng-if=\\\"!vm.composition.id\\\" class=\\\"mb-32\\\">New Composition</h2><h2 \\ntranslate=\\\"CONFIGURATION.EDIT_COMPOSITION\\\" translate-values=\\\"{name: vm.composition.name}\\\" ng-if=\\\"vm.composition.id\\\" \\nclass=\\\"mb-32\\\">Edit Composition {{vm.composition.name}}</h2><md-input-container flex class=\\\"md-block mb-0 w-300\\\">\\n<md-icon class=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input ng-model=\\\"vm.composition.code\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.CODE\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.compositions.update\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input ng-model=\\\"vm.composition.name\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.compositions.update\\\" type=\\\"text\\\" required></md-input-container>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-sort-numeric name font-size-24\\\">\\n</md-icon><input ng-model=\\\"vm.composition.position\\\" placeholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.compositions.update\\\" type=\\\"number\\\">\\n</md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.compositions.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel composition\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" ng-disabled=\\\"!compositionForm.$valid || !compositionForm.$dirty\\\" class=\\\"md-primary md-raised\\\" \\ntranslate=\\\"GENERAL.SAVE\\\" nd-track-click=\\\"save composition\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/delete-pricing-tier-dialog.html\",\"<md-dialog id=\\\"delete-pricing-tier-dialog\\\" aria-label=\\\"Delete pricing tier\\\"><form name=\\\"categoryForm\\\" ng-cloak>\\n<md-dialog-content><h2 class=\\\"mb-20\\\">{{\\'GENERAL.DELETE\\' | translate}} {{vm.fromPricingTierName}}</h2><div><p>\\n{{\\'CONFIGURATION.DELETE_PRICING_TIER_MESSAGE\\' | translate}}</p><md-select ng-model=\\\"vm.selectedPricingTier\\\" \\nmd-floating-label=\\\"{{\\'CONFIGURATION.REPLACE_PRICING_TIER_FOR\\' | translate}}\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.REPLACE_PRICING_TIER_FOR\\' | translate}}\\\" required><md-option ng-value=\\\"pricingTier\\\" \\nng-repeat=\\\"pricingTier in vm.allPricingTiers\\\" ng-if=\\\"pricingTier.id != vm.fromPricingTierId\\\">{{ pricingTier.name }}\\n</md-option></md-select></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.pricing_tiers.delete\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\nnd-track-click=\\\"cancel pricing tier\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.remove()\\\" \\nng-disabled=\\\"!categoryForm.$dirty || !categoryForm.$valid|| vm.loading\\\" nd-track-click=\\\"save pricing tier\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"16px\\\" ng-show=\\\"vm.loading\\\">\\n</md-progress-circular><span class=\\\"mh-10\\\" ng-if=\\\"!vm.loading\\\" translate=\\\"GENERAL.DELETE\\\">Save</span> <span \\nclass=\\\"mh-10\\\" ng-if=\\\"vm.loading\\\" translate=\\\"GENERAL.DELETE\\\">Saving</span></div></md-button></md-dialog-actions></form>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/exchange-variant-dialog.html\",\"<md-dialog aria-label=\\\"Exchange variant\\\" style=\\\"max-width: 500px; width: 100%\\\"><form name=\\\"categoryForm\\\" ng-cloak>\\n<md-dialog-content><h2 class=\\\"mb-20\\\">{{\\'CONFIGURATION.EXCHANGE_VARIANT\\' | translate}}</h2><div layout=\\\"row\\\" \\nclass=\\\"mb-20\\\"><span>{{\\'CONFIGURATION.EXCHANGE_VARIANT_DIALOG_DESC\\' | translate: {selectedVariant: vm.object.name} }}\\n</span></div><md-input-container flex class=\\\"md-block mb-0\\\"><md-icon class=\\\"icon icon-book-variant name font-size-24\\\">\\n</md-icon><input ng-model=\\\"vm.variantTag\\\" placeholder=\\\"{{\\'PRODUCT.SELECTED_VARIANT\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nng-disabled=\\\"true\\\"></md-input-container><md-autocomplete \\nmd-floating-label=\\\"{{\\'CONFIGURATION.EXCHANGE_VARIANT_FOR\\' | translate}}\\\" md-items=\\\"variant in vm.querySearch()\\\" \\nmd-selected-item=\\\"vm.selectedItem\\\" md-search-text=\\\"vm.searchText\\\" md-item-text=\\\"vm.getSelectedVariantName(variant)\\\" \\nmd-min-length=\\\"1\\\" md-delay=\\\"500\\\" placeholder=\\\"{{\\'CONFIGURATION.EXCHANGE_VARIANT_FOR\\' | translate}}\\\" md-no-cache=\\\"true\\\">\\n<md-item-template><div layout=\\\"row\\\"><span md-highlight-text=\\\"vm.searchText\\\" md-highlight-flags=\\\"^i\\\">\\n{{variant.name}} ({{variant.category.name}})</span></div></md-item-template><md-not-found>Not found.</md-not-found>\\n</md-autocomplete><div class=\\\"did-you-know mb-10\\\" ng-if=\\\"vm.affected && vm.errorMessageKey == null\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg mr-5\\\"></md-icon><div \\nlayout=\\\"column\\\" flex><div class=\\\"did-you-know-message\\\">\\n{{\\'CONFIGURATION.AFFECTED_BY_ACTION\\' | translate: {amount: vm.affected} }}</div></div></div></div><div \\nclass=\\\"did-you-know yellow mb-10\\\" ng-show=\\\"vm.showWaringMessage\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon\\n md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\" class=\\\"yellow mr-5\\\"></md-icon>\\n<div layout=\\\"column\\\" flex><div class=\\\"did-you-know-message\\\">\\n{{\\'CONFIGURATION.EXCHANGE_VARIANT_MESSAGE_CONFIRMATION\\' | translate: {sourceVariant: vm.object.name, targetVariant: vm.selectedItem.name} }}\\n</div></div></div></div><div class=\\\"did-you-know red mb-10\\\" ng-if=\\\"vm.errorMessageKey\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-alert-octagon\\\" class=\\\"red-fg\\\"></md-icon><div layout=\\\"column\\\" \\nflex><div class=\\\"did-you-know-message\\\" ng-bind-html=\\\"vm.errorMessageKey\\\"></div></div></div></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" has-permission=\\\"inventory.configuration.variants.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\" \\nnd-track-click=\\\"cancel exchange variant o variant cateogry\\\">Cancel</md-button><md-button ng-if=\\\"vm.isCategory\\\" \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!categoryForm.$dirty || !categoryForm.$valid\\\" \\ntranslate=\\\"GENERAL.SAVE\\\" nd-track-click=\\\"save exchange variant category\\\">Save</md-button><md-button \\nng-if=\\\"!vm.isCategory\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!categoryForm.$dirty || !categoryForm.$valid\\\" translate=\\\"CONFIGURATION.REPLACE\\\" \\nnd-track-click=\\\"save exchange variant\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/fiscal-address-dialog.html\",\"<md-dialog aria-label=\\\"Fiscal address\\\"><form name=\\\"fiscalAddressForm\\\" ng-cloak><md-dialog-content><h2 class=\\\"mb-32\\\" \\nng-if=\\\"!vm.fiscalAddress.id\\\" translate=\\\"FISCAL_ADDRESSES.NEW_FISCAL_ADDRESS\\\">New fiscal address</h2><h2 class=\\\"mb-32\\\" \\nng-if=\\\"vm.fiscalAddress.id\\\" translate=\\\"FISCAL_ADDRESSES.EDIT_FISCAL_ADDRESS\\\">Edit fiscal address</h2><div layout=\\\"row\\\" \\nlayout-wrap><md-input-container class=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon \\nclass=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" md-auto-focus ng-model=\\\"vm.fiscalAddress.code\\\" \\nplaceholder=\\\"{{\\'GENERAL.CODE\\' | translate}}\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon class=\\\"icon icon-domain name font-size-24\\\"></md-icon>\\n<input autocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.company.update\\\" \\nng-model=\\\"vm.fiscalAddress.legal_name\\\" placeholder=\\\"{{\\'COMPANY.LEGAL_NAME\\' | translate}}\\\" required type=\\\"text\\\">\\n</md-input-container><md-input-container class=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon \\nclass=\\\"icon icon-bank name font-size-24\\\"></md-icon><input autocomplete=\\\"off\\\" name=\\\"vat\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-disabled=\\\"vm.isVerifactuActive\\\" \\nng-model=\\\"vm.fiscalAddress.vat\\\" placeholder=\\\"{{\\'COMPANY.VAT\\' | translate}}\\\" required type=\\\"text\\\"><div class=\\\"hint\\\" \\nng-if=\\\"vm.isVerifactuActive\\\"><small translate=\\\"COMPANY.NIF_VERIFACTU_ACTIVE\\\"></small></div></md-input-container>\\n<md-input-container class=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.address_1\\\" \\nplaceholder=\\\"{{\\'COMPANY.ADDRESS\\' | translate}}\\\" required type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.zip\\\" \\nplaceholder=\\\"{{\\'COMPANY.ZIP\\' | translate}}\\\" required type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.city\\\" \\nplaceholder=\\\"{{\\'COMPANY.CITY\\' | translate}}\\\" required type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.state\\\" \\nplaceholder=\\\"{{\\'COMPANY.STATE\\' | translate}}\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"COMPANY.COUNTRY\\\"></label><md-select \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.country\\\" required>\\n<md-option ng-repeat=\\\"country in vm.countries\\\" value=\\\"{{country.code}}\\\">{{country.name}}</md-option></md-select><div \\nng-messages=\\\"fiscalAddressForm.country.$error\\\" ng-show=\\\"fiscalAddressForm.country.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container class=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.phone\\\" \\nplaceholder=\\\"{{\\'COMPANY.PHONE\\' | translate}}\\\" type=\\\"tel\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\" ng-model=\\\"vm.fiscalAddress.email\\\" \\nplaceholder=\\\"{{\\'COMPANY.EMAIL\\' | translate}}\\\" type=\\\"email\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 pr-8\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"CONFIGURATION.INVOICING_METHOD\\\"></label>\\n<md-select has-permission-else-disable=\\\"inventory.configuration.company.update\\\" \\nng-model=\\\"vm.fiscalAddress.invoicing_method\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option \\nng-value=\\\"{{vm.FISCAL_ADDRESS_INVOICING_METHODS.FISCAL_ADDRESS_INVOICING_METHOD_FIRM_SALE}}\\\">\\n{{\\'CONFIGURATION.INVOICING_METHOD_FIRM_SALE\\' | translate}}</md-option><md-option \\nng-value=\\\"{{vm.FISCAL_ADDRESS_INVOICING_METHODS.FISCAL_ADDRESS_INVOICING_METHOD_CONSIGNMENT_SALE}}\\\">\\n{{\\'CONFIGURATION.CONSIGNMENT_SALE\\' | translate}}</md-option></md-select><div \\nng-messages=\\\"fiscalAddressForm.country.$error\\\" ng-show=\\\"fiscalAddressForm.country.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><div flex=\\\"100\\\" \\nflex-gt-md=\\\"25\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><nd-contacts contact-id=\\\"vm.fiscalAddress.invoicing_contact\\\" \\ncontact-instance=\\\"vm.fiscalAddress.invoicing_contact_instance\\\" create-button=\\\"true\\\" \\nplaceholder=\\\"\\'CONFIGURATION.INVOICING_CONTACT\\'\\\" required=\\\"false\\\"></nd-contacts></div><md-input-container \\nclass=\\\"m-0 p-0\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><div flex=\\\"100\\\" flow-file-added=\\\"vm.fileAdded($file)\\\" \\nflow-file-success=\\\"vm.fileSuccess($file, $message)\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nlayout=\\\"row\\\"><div class=\\\"mr-10\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" layout-wrap><img class=\\\"h-40\\\" \\nng-show=\\\"vm.logo\\\" ng-src=\\\"{{vm.logo}}\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"m-0 mr-10 md-raised\\\" flow-btn has-permission-else-disable=\\\"inventory.configuration.company.update\\\" \\nng-if=\\\"vm.fiscalAddress.logo\\\" translate=\\\"COMPANY.CHANGE_LOGO\\\">Change Logo</md-button><md-button \\nclass=\\\"m-0 mr-10 md-raised\\\" flow-btn has-permission-else-disable=\\\"inventory.configuration.company.update\\\" \\nng-if=\\\"!vm.fiscalAddress.logo\\\" translate=\\\"COMPANY.ADD_LOGO\\\">Set Logo</md-button><span class=\\\"secondary-text\\\">\\nPNG, JPG - Max. 1MB</span></div></div></md-input-container></div><div ng-if=\\\"vm.contractedPlanLimit\\\" class=\\\"mt-16\\\">\\n<nd-contracted-plan-limit-alert-box contracted-plan-limit=\\\"vm.contractedPlanLimit\\\" flex=\\\"100\\\">\\n</nd-contracted-plan-limit-alert-box></div></md-dialog-content><md-dialog-actions \\nhas-permission=\\\"inventory.configuration.company.update\\\" layout=\\\"row\\\"><md-button class=\\\"stroked\\\" \\nnd-track-click=\\\"cancel fiscal address\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" nd-track-click=\\\"save fiscal address\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!fiscalAddressForm.$valid || !fiscalAddressForm.$dirty || vm.saving\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/payment-method-dialog.html\",\"<md-dialog aria-label=\\\"Cash Movement\\\" class=\\\"w-400\\\"><form ng-cloak name=\\\"form\\\"><md-dialog-content><h2 \\ntranslate=\\\"PAYMENT_METHODS.NEW_PAYMENT_METHOD\\\" ng-if=\\\"!vm.paymentMethod.id\\\" class=\\\"mb-32\\\">New Payment Method</h2><h2 \\ntranslate=\\\"PAYMENT_METHODS.EDIT_PAYMENT_METHOD\\\" ng-if=\\\"vm.paymentMethod.id\\\" class=\\\"mb-32\\\">Edit Payment Method</h2>\\n<md-input-container flex class=\\\"md-block mb-0\\\"><input ng-model=\\\"vm.paymentMethod.name\\\" \\nplaceholder=\\\"{{\\'PAYMENT_METHODS.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.payment_methods.update\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0\\\"><label>\\n{{\\'PAYMENT_METHODS.DESCRIPTION\\' | translate}}</label><textarea ng-model=\\\"vm.paymentMethod.text\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.payment_methods.update\\\"></textarea></md-input-container><div \\nlayout=\\\"row\\\"><md-input-container flex class=\\\"md-block mb-0\\\"><md-checkbox \\nng-model=\\\"vm.paymentMethod.show_customer_bank\\\">{{\\'CONFIGURATION.SHOW_CUSTOMER_BANK\\' | translate}}</md-checkbox>\\n</md-input-container></div><div layout=\\\"row\\\"><md-input-container flex class=\\\"md-block mb-0\\\"><md-checkbox \\nng-model=\\\"vm.paymentMethod.is_retail_method\\\" \\nng-disabled=\\\"vm.paymentMethod.is_default_card || vm.paymentMethod.is_default_cash\\\">\\n{{\\'PAYMENT_METHODS.VISIBLE_FOR_RETAIL\\' | translate}}</md-checkbox></md-input-container><md-input-container flex \\nclass=\\\"md-block mb-0\\\"><md-checkbox ng-model=\\\"vm.paymentMethod.is_wholesale_method\\\">\\n{{\\'PAYMENT_METHODS.VISIBLE_FOR_WHOLESALE\\' | translate}}</md-checkbox></md-input-container></div><div layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.payment_methods.update\\\"><md-input-container flex class=\\\"md-block mb-0\\\"><label>\\n{{\\'PAYMENT_METHODS.COLOR\\' | translate}}</label><md-select ng-model=\\\"vm.paymentMethod.foreground_color\\\"><md-option \\nng-repeat=\\\"color in vm.colors\\\" ng-value=\\\"color.color\\\"><md-icon md-font-icon=\\\"icon-checkbox-blank-circle\\\" \\nstyle=\\\"color:#{{color.color}}\\\"></md-icon>{{color.code}}</md-option></md-select></md-input-container><md-input-container\\n flex class=\\\"md-block mb-0\\\"><label>{{\\'PAYMENT_METHODS.ICON\\' | translate}}</label><md-select \\nng-model=\\\"vm.paymentMethod.icon\\\"><md-option ng-repeat=\\\"icon in vm.icons track by $index\\\" ng-value=\\\"icon\\\"><md-icon \\nmd-font-icon=\\\"{{icon}}\\\"></md-icon></md-option></md-select></md-input-container></div><small class=\\\"secondary-text\\\">\\n{{\\'PAYMENT_METHODS.PREVIEW\\' | translate}}:</small><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"md-padding\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"{{vm.paymentMethod.icon}}\\\" \\nstyle=\\\"color:#{{vm.paymentMethod.foreground_color}}\\\"></md-icon><span class=\\\"ml-8\\\">{{vm.paymentMethod.name}}</span>\\n</div></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.payment_methods.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel payment method\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!form.$valid || !form.$dirty\\\" translate=\\\"GENERAL.SAVE\\\" \\nnd-track-click=\\\"save payment method\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/pricing-tier-dialog.html\",\"<md-dialog aria-label=\\\"PricingTier\\\"><form ng-cloak name=\\\"pricingTierForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"CONFIGURATION.NEW_PRICING_TIER\\\" ng-if=\\\"!vm.pricingTier.id\\\" class=\\\"mb-32\\\">New Pricing Tier</h2><h2 \\ntranslate=\\\"CONFIGURATION.EDIT_PRICING_TIER\\\" translate-values=\\\"{name: vm.pricingTier.name}\\\" ng-if=\\\"vm.pricingTier.id\\\" \\nclass=\\\"mb-32\\\">Edit Pricing Tier {{vm.pricingTier.name}}</h2><md-input-container flex class=\\\"md-block mb-0 w-300\\\">\\n<md-icon class=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input ng-model=\\\"vm.pricingTier.code\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.CODE\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input ng-model=\\\"vm.pricingTier.name\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\" type=\\\"text\\\" required></md-input-container>\\n<md-input-container flex class=\\\"w-300 mb-0\\\" has-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\">\\n<md-icon class=\\\"icon icon-cash font-size-24\\\"></md-icon><label>{{\\'CONFIGURATION.CURRENCY\\' | translate}}</label>\\n<md-select ng-model=\\\"vm.pricingTier.currency\\\"><md-option ng-value=\\\"null\\\"><em class=\\\"secondary-text\\\">\\n{{vm.Session.company.currency}} ({{vm.CURRENCIES[vm.Session.company.currency]}})</em></md-option><md-option \\nng-repeat=\\\"(key, symbol) in vm.currencies\\\" ng-value=\\\"key\\\">{{key}} ({{symbol}})</md-option></md-select>\\n</md-input-container><div layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-if=\\\"vm.pricingTier.currency\\\"><span flex></span>\\n {{1 | price}} {{vm.CURRENCIES[vm.Session.company.currency]}}<md-icon md-font-icon=\\\"icon-swap-horizontal\\\" class=\\\"mh-8\\\">\\n</md-icon><input ng-model=\\\"vm.pricingTier.currency_convertion\\\" class=\\\"nd-input text-right w-100\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\" type=\\\"number\\\">\\n {{vm.CURRENCIES[vm.pricingTier.currency]}} <span flex></span></div><div layout=\\\"row\\\"><div class=\\\"pt-16 pl-5\\\">\\n<md-radio-group ng-model=\\\"vm.pricingTier.type\\\" required><md-radio-button ng-value=\\\"1\\\" class=\\\"md-primary\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\"><span translate=\\\"CONFIGURATION.WHOLESALE\\\">\\n</span></md-radio-button><md-radio-button ng-value=\\\"2\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\"><span translate=\\\"CONFIGURATION.RETAIL\\\">\\n</span></md-radio-button><md-radio-button ng-value=\\\"3\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\"><span translate=\\\"CONFIGURATION.OUTLET\\\">\\n</span></md-radio-button></md-radio-group></div></div><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-checkbox\\n ng-model=\\\"vm.pricingTier.default\\\" has-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\"><span \\ntranslate=\\\"CONFIGURATION.DEFAULT\\\"></span></md-checkbox></md-input-container><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-sort-numeric name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.pricingTier.position\\\" placeholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.pricing_tiers.update\\\" type=\\\"number\\\"></md-input-container>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" has-permission=\\\"inventory.configuration.pricing_tiers.update\\\">\\n<md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel pricing tier\\\">\\nCancel</md-button><md-button ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!pricingTierForm.$valid || !pricingTierForm.$dirty\\\" \\nclass=\\\"md-primary md-raised\\\" translate=\\\"GENERAL.SAVE\\\" nd-track-click=\\\"save pricing tier\\\">Save</md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/season-dialog.html\",\"<md-dialog aria-label=\\\"Season\\\" id=\\\"season-dialog\\\"><form ng-cloak name=\\\"seasonForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"CONFIGURATION.NEW_SEASON\\\" ng-if=\\\"!vm.season.id\\\" class=\\\"mb-32\\\">New Season</h2><h2 \\ntranslate=\\\"CONFIGURATION.EDIT_SEASON\\\" translate-values=\\\"{name: vm.season.name}\\\" ng-if=\\\"vm.season.id\\\" class=\\\"mb-32\\\">\\nEdit Season {{vm.season.name}}</h2><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input ng-model=\\\"vm.season.code\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.CODE\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.seasons.update\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input ng-model=\\\"vm.season.name\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.seasons.update\\\" type=\\\"text\\\" required></md-input-container>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-checkbox ng-model=\\\"vm.season.permanent\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.seasons.update\\\"><span translate=\\\"CONFIGURATION.PERMANENT\\\"></span>\\n</md-checkbox></md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><div layout=\\\"row\\\"><md-icon \\nclass=\\\"icon icon-calendar name font-size-24\\\"></md-icon><md-datepicker md-hide-icons=\\\"calendar\\\" flex=\\\"100\\\" \\nng-model=\\\"vm.season.active_date\\\" md-placeholder=\\\"{{\\'CONFIGURATION.ACTIVE_DATE\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.seasons.update\\\" md-open-on-focus class=\\\"ml-8\\\"></md-datepicker>\\n</div></md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><div layout=\\\"row\\\"><md-icon \\nclass=\\\"icon icon-calendar name font-size-24\\\"></md-icon><md-datepicker md-hide-icons=\\\"calendar\\\" flex=\\\"100\\\" \\nng-model=\\\"vm.season.discontinued_date\\\" md-placeholder=\\\"{{\\'CONFIGURATION.DISCONTINUED_DATE\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.seasons.update\\\" md-open-on-focus class=\\\"ml-8\\\"></md-datepicker>\\n</div></md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-sort-numeric name font-size-24\\\"></md-icon><input ng-model=\\\"vm.season.position\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.seasons.update\\\" type=\\\"number\\\"></md-input-container>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" has-permission=\\\"inventory.configuration.seasons.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel season\\\">Cancel</md-button>\\n<md-button ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!seasonForm.$valid || !seasonForm.$dirty\\\" class=\\\"md-primary md-raised\\\" \\ntranslate=\\\"GENERAL.SAVE\\\" nd-track-click=\\\"save season\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/serial-number-type-dialog.html\",\"<md-dialog aria-label=\\\"Brand\\\" id=\\\"serial-number-type-dialog\\\"><form name=\\\"serialNumberTypeForm\\\" ng-cloak>\\n<md-dialog-content><h2 class=\\\"mb-0\\\" ng-if=\\\"!vm.serialNumberType.id\\\" translate=\\\"CONFIGURATION.NEW_SERIAL_NUMBER_TYPE\\\">\\nNew Brand</h2><h2 class=\\\"mb-0\\\" ng-if=\\\"vm.serialNumberType.id\\\" translate=\\\"CONFIGURATION.EDIT_SERIAL_NUMBER_TYPE\\\" \\ntranslate-values=\\\"{name: vm.serialNumberType.name}\\\">Edit Brand {{vm.serialNumberType.name}}</h2><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"md-padding\\\" flex=\\\"50\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"p-4 pl-8 green-100-bg\\\">{{vm.examplePrefix}}</div><div class=\\\"p-4 m-2 mt-0 mb-0 grey-400-bg\\\">\\n{{vm.exampleCounter}}</div><div class=\\\"p-4 pr-8 md-blue-100-bg\\\">{{vm.exampleSuffix}}</div><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\'CONFIGURATION.SERIAL_NUMBER_TYPE_TOOLTIP\\' | translate: { prefix: vm.examplePrefix, counter: vm.exampleCounter, suffix: vm.exampleSuffix, length: vm.exampleLength} }}\\n</md-tooltip></md-icon></div></div><div layout=\\\"row\\\"><md-input-container class=\\\"md-block mb-0 w-300\\\" flex><md-icon \\nclass=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.serial_number_types.update\\\" md-auto-focus \\nng-model=\\\"vm.serialNumberType.name\\\" ng-disabled=\\\"vm.showActivated()\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.NAME\\' | translate}}\\\" required type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 w-300\\\" flex><md-icon class=\\\"icon icon-shape-plus name font-size-24\\\"></md-icon><label \\ntranslate=\\\"CONFIGURATION.TYPE\\\"></label><md-select ng-model=\\\"vm.serialNumberType.type\\\" ng-disabled=\\\"vm.showActivated()\\\" \\nrequired md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(vm.serialNumberTypesSearchText)\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.TYPE\\' | translate}}\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.serialNumberTypesSearchText\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header>\\n<md-optgroup ng-repeat=\\\"group in vm.serialNumberTypes\\\" label=\\\"{{group.groupName}}\\\"><md-option \\nng-repeat=\\\"type in group.values | filter:vm.serialNumberTypesSearchText\\\" ng-value=\\\"type.value\\\">{{type.name}}\\n</md-option></md-optgroup></md-select></md-input-container></div><div layout=\\\"row\\\"><md-input-container \\nclass=\\\"md-block mb-15 w-300\\\" flex><md-icon class=\\\"icon icon-bank name font-size-24\\\"></md-icon><label \\ntranslate=\\\"WAREHOUSE.FISCAL_ADDRESS\\\"></label><md-select ng-model=\\\"vm.serialNumberType.fiscal_address\\\" \\nng-disabled=\\\"vm.showActivated()\\\" placeholder=\\\"{{\\'WAREHOUSE.FISCAL_ADDRESS\\' | translate}}\\\"><md-option ng-value=\\\"null\\\">\\n{{\\'INVOICE.COMPANYS_FISCAL_ADDRESS\\' | translate}}</md-option><md-option \\nng-repeat=\\\"fiscalAddress in vm.fiscalAddresses\\\" ng-value=\\\"fiscalAddress.id\\\">{{fiscalAddress.legal_name || \\'-\\'}}\\n</md-option></md-select></md-input-container></div><div layout=\\\"row\\\"><md-input-container class=\\\"md-block mb-0 w-300\\\" \\nflex><md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/arrow-collapse-left.2185be70.svg\\\"></md-icon>\\n<input autocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.serial_number_types.update\\\" \\nng-model=\\\"vm.serialNumberType.prefix\\\" ng-disabled=\\\"vm.showActivated()\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.PREFIX\\' | translate}}\\\" type=\\\"text\\\"><div class=\\\"hint secondary-text\\\" \\ntranslate=\\\"CONFIGURATION.USER_YY_OR_YYYY\\\"></div></md-input-container><md-input-container class=\\\"md-block mb-0 w-300\\\" \\nflex><md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/arrow-collapse-right.ca4575fe.svg\\\"></md-icon>\\n<input autocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.serial_number_types.update\\\" \\nng-model=\\\"vm.serialNumberType.suffix\\\" ng-disabled=\\\"vm.showActivated()\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.SUFFIX\\' | translate}}\\\" type=\\\"text\\\"><div class=\\\"hint secondary-text\\\" \\ntranslate=\\\"CONFIGURATION.USER_YY_OR_YYYY\\\"></div></md-input-container></div><div layout=\\\"row\\\"><md-input-container \\nclass=\\\"md-block mb-0 w-300\\\" flex><md-icon class=\\\"icon icon-sort-numeric name font-size-24\\\"></md-icon><input \\nautocomplete=\\\"off\\\" min=\\\"1\\\" step=\\\"1\\\" has-permission-else-disable=\\\"inventory.configuration.serial_number_types.update\\\" \\nng-model=\\\"vm.serialNumberType.counter\\\" ng-disabled=\\\"vm.showActivated()\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.COUNTER\\' | translate}}\\\" required type=\\\"number\\\"></md-input-container><md-input-container \\nclass=\\\"md-block mb-0 w-300\\\" flex><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/arrow-expand-horizontal.a0352349.svg\\\"></md-icon><input \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.serial_number_types.update\\\" \\nng-model=\\\"vm.serialNumberType.counter_length\\\" ng-disabled=\\\"vm.showActivated()\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.LENGTH\\' | translate}}\\\" required type=\\\"number\\\"></md-input-container></div><span \\nclass=\\\"h3 mt-16\\\">{{\\'CONFIGURATION.PREVIEW\\' | translate}}:</span><div class=\\\"preview\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><nd-serial-number-type value=\\\"vm.serialNumberType\\\"></nd-serial-number-type></div><div \\nclass=\\\"did-you-know mt-16\\\" ng-if=\\\"vm.showAssociate()\\\"><div layout=\\\"row ml-4\\\"><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/verifactu-color.62a97f20.svg\\\"></md-icon><span \\nclass=\\\"did-you-know-title text-bold\\\" translate=\\\"CONFIGURATION.VERIFACTU_IS_INSTALLED\\\" flex></span></div><div \\nlayout=\\\"row\\\"><div flex=\\\"75\\\" class=\\\"did-you-know-message secondary-text no-margin\\\" \\ntranslate=\\\"CONFIGURATION.VERIFACTU_IS_INSTALLED_MESSAGE\\\"></div><div flex=\\\"25\\\" layout-align=\\\"end start\\\"><md-button \\nclass=\\\"md-primary stroked m-0\\\" ng-click=\\\"vm.openActivateVerifactuDialog()\\\" \\ntranslate=\\\"CONFIGURATION.ACTIVATE_VERIFACTU\\\"></md-button></div></div></div><div class=\\\"did-you-know green mt-16\\\" \\nng-if=\\\"vm.showActivated()\\\"><div layout=\\\"row ml-4\\\"><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/verifactu-color.62a97f20.svg\\\"></md-icon><span \\nclass=\\\"did-you-know-title text-bold\\\" translate=\\\"CONFIGURATION.VERIFACTU_IS_INSTALLED_AND_ACTIVATED\\\" flex></span></div>\\n<div layout=\\\"row\\\"><div class=\\\"did-you-know-message secondary-text no-margin\\\" \\ntranslate=\\\"CONFIGURATION.VERIFACTU_IS_INSTALLED_AND_ACTIVATED_MESSAGE\\\"></div></div></div><div \\nclass=\\\"did-you-know mt-16\\\" ng-if=\\\"!vm.showActivated()\\\"><div layout=\\\"row\\\"><md-icon class=\\\"blue-fg\\\" \\nmd-font-icon=\\\"icon-lightbulb-outline\\\"></md-icon><span class=\\\"did-you-know-title\\\" flex>\\n{{\\'GENERAL.DID_YOU_KNOW\\' | translate}}</span></div><div class=\\\"did-you-know-message\\\" flex>\\n{{\\'CONFIGURATION.SERIAL_NUMBER_TYPE_YY_OR_YYYY\\' | translate}}</div></div></md-dialog-content><md-dialog-actions \\nhas-permission=\\\"inventory.configuration.serial_number_types.update\\\" layout=\\\"row\\\"><md-button class=\\\"stroked\\\" \\nnd-track-click=\\\"cancel serial number type\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button>\\n<md-button class=\\\"md-primary md-raised\\\" nd-track-click=\\\"save serial number type\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!serialNumberTypeForm.$valid || !serialNumberTypeForm.$dirty || vm.showActivated()\\\" \\ntranslate=\\\"GENERAL.SAVE\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/set-discount-to-purchase-products.html\",\"<md-dialog id=\\\"set-purchase-discount-dialog\\\" class=\\\"\\\"><form name=\\\"setDiscountForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"PURCHASE.ADD_DISCOUNT_TO_ALL_PRODUCTS\\\"></h2><h3 \\ntranslate=\\\"PURCHASE.ADD_DISCOUNT_TO_ALL_PRODUCTS_DIALOG_TITLE_DESCRIPTION\\\"></h3><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><md-input-container flex class=\\\"mb-0 md-icon-right\\\"><input ng-model=\\\"vm.discount\\\" \\nplaceholder=\\\"{{\\'PURCHASE.DISCOUNT\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"app.inventory.purchases.purchase.products\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"100\\\" step=\\\"0.01\\\" \\nrequired md-auto-focus><md-icon md-font-icon=\\\"icon-percent\\\"></md-icon></md-input-container></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.products\\')}}\\\" ng-click=\\\"vm.setDiscount()\\\" \\nng-disabled=\\\"!setDiscountForm.$dirty || setDiscountForm.$invalid\\\" translate=\\\"PURCHASE.APPLY_DISCOUNT\\\"></md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/shipping-box-dialog.html\",\"<md-dialog aria-label=\\\"Cash Movement\\\" class=\\\"w-400\\\"><form ng-cloak name=\\\"form\\\"><md-dialog-content><h2 \\ntranslate=\\\"CONFIGURATION.NEW_SHIPPING_BOX\\\" ng-if=\\\"!vm.shippingBox.id\\\" class=\\\"mb-32\\\"></h2><h2 \\ntranslate=\\\"CONFIGURATION.EDIT_SHIPPING_BOX\\\" ng-if=\\\"vm.shippingBox.id\\\" class=\\\"mb-32\\\"></h2><md-input-container flex \\nclass=\\\"md-block mb-0\\\"><input ng-model=\\\"vm.shippingBox.name\\\" placeholder=\\\"{{\\'GENERAL.NAME\\' | translate}}\\\" \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.shipping_boxes.update\\\" type=\\\"text\\\" required \\nmd-auto-focus maxlength=\\\"128\\\"></md-input-container><div layout=\\\"row\\\"><md-input-container flex class=\\\"md-block mb-0\\\" \\nflex=\\\"33\\\"><input ng-model=\\\"vm.shippingBox.length\\\" \\nplaceholder=\\\"{{\\'GENERAL.LENGTH\\' | translate}} ({{vm.session.company.measurement_unit}})\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.shipping_boxes.update\\\" type=\\\"number\\\" required md-auto-focus \\nmaxlength=\\\"128\\\"></md-input-container><md-input-container flex class=\\\"md-block mb-0\\\" flex=\\\"33\\\"><input \\nng-model=\\\"vm.shippingBox.height\\\" \\nplaceholder=\\\"{{\\'GENERAL.HEIGHT\\' | translate}} ({{vm.session.company.measurement_unit}})\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.shipping_boxes.update\\\" type=\\\"number\\\" required md-auto-focus \\nmaxlength=\\\"128\\\"></md-input-container><md-input-container flex class=\\\"md-block mb-0\\\" flex=\\\"33\\\"><input \\nng-model=\\\"vm.shippingBox.width\\\" \\nplaceholder=\\\"{{\\'GENERAL.WIDTH\\' | translate}} ({{vm.session.company.measurement_unit}})\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.shipping_boxes.update\\\" type=\\\"number\\\" required md-auto-focus \\nmaxlength=\\\"128\\\"></md-input-container></div><md-input-container flex class=\\\"md-block mb-0\\\" flex=\\\"33\\\"><input \\nng-model=\\\"vm.shippingBox.barcode\\\" placeholder=\\\"{{\\'CONFIGURATION.BARCODE\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.shipping_boxes.update\\\" type=\\\"text\\\" maxlength=\\\"128\\\">\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-checkbox \\nng-model=\\\"vm.shippingBox.default\\\" has-permission-else-disable=\\\"inventory.configuration.shipping_boxes.update\\\"><span \\ntranslate=\\\"CONFIGURATION.DEFAULT\\\"></span></md-checkbox></md-input-container></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\" has-permission=\\\"inventory.configuration.shipping_boxes.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel shipping box\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.shippingBox.name || !vm.shippingBox.length || !vm.shippingBox.height || !vm.shippingBox.width || !form.$dirty || vm.saving\\\" \\nnd-track-click=\\\"save shipping box\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular><span \\ntranslate=\\\"GENERAL.SAVE\\\"></span></div></md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/shipping-method-dialog.html\",\"<md-dialog aria-label=\\\"Cash Movement\\\" class=\\\"w-400\\\" id=\\\"shipping-method-dialog\\\"><form ng-cloak name=\\\"form\\\">\\n<md-dialog-content><h2 translate=\\\"CONFIGURATION.NEW_SHIPPING_METHOD\\\" ng-if=\\\"!vm.shippingMethod.id\\\" class=\\\"mb-32\\\">\\nNew Payment Method</h2><h2 translate=\\\"CONFIGURATION.EDIT_SHIPPING_METHOD\\\" ng-if=\\\"vm.shippingMethod.id\\\" class=\\\"mb-32\\\">\\nEdit Payment Method</h2><md-input-container flex class=\\\"md-block mb-0\\\"><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon>\\n<input ng-model=\\\"vm.shippingMethod.name\\\" placeholder=\\\"{{\\'GENERAL.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.payment_methods.update\\\" type=\\\"text\\\" required md-auto-focus \\nmaxlength=\\\"128\\\"></md-input-container><md-input-container flex class=\\\"md-block mb-0\\\"><md-icon md-font-icon=\\\"icon-cash\\\">\\n</md-icon><input ng-model=\\\"vm.shippingMethod.price_incl_tax\\\" placeholder=\\\"{{\\'PRODUCT.PRICE_INCL_TAX\\' | translate}}\\\" \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.shipping_methods.update\\\" type=\\\"number\\\" \\nstep=\\\"0.01\\\" required maxlength=\\\"12\\\"></md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.payment_methods.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel shipping method\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.shippingMethod.name || !vm.shippingMethod.price_incl_tax || !form.$dirty\\\" translate=\\\"GENERAL.SAVE\\\" \\nnd-track-click=\\\"save shipping method\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/tax-dialog.html\",\"<md-dialog aria-label=\\\"Cash Movement\\\"><form ng-cloak name=\\\"taxForm\\\"><md-dialog-content><h2 translate=\\\"TAXES.NEW_TAX\\\" \\nng-if=\\\"!vm.tax.id\\\" class=\\\"mb-32\\\">New Tax</h2><h2 translate=\\\"TAXES.EDIT_TAX\\\" translate-values=\\\"{name: vm.tax.name}\\\" \\nng-if=\\\"vm.tax.id\\\" class=\\\"mb-32\\\">Edit Tax {{vm.tax.name}}</h2><md-input-container flex class=\\\"md-block mb-0 w-300\\\">\\n<md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input ng-model=\\\"vm.tax.name\\\" \\nplaceholder=\\\"{{\\'TAXES.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.taxes.update\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-percent name font-size-24\\\"></md-icon><input name=\\\"value\\\" ng-model=\\\"vm.tax.percent_value\\\" \\nplaceholder=\\\"{{\\'TAXES.VALUE\\' | translate}}\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" step=\\\"0.01\\\" value=\\\"0.00\\\" required \\nmin=\\\"0.00\\\" max=\\\"100.00\\\" has-permission-else-disable=\\\"inventory.configuration.taxes.update\\\"><div \\nng-messages=\\\"taxForm.value.$error\\\" ng-show=\\\"taxForm.value.$touched\\\" role=\\\"alert\\\"><div ng-message-exp=\\\"[\\'min\\', \\'max\\']\\\">\\n{{\\'TAXES.WRONG_VALUE\\' | translate}}</div></div></md-input-container><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-percent name font-size-24\\\"></md-icon><input name=\\\"value\\\" \\nng-model=\\\"vm.tax.surcharge\\\" placeholder=\\\"{{\\'TAXES.SURCHARGE\\' | translate}}\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" \\nstep=\\\"0.01\\\" value=\\\"0.00\\\" required min=\\\"0.00\\\" max=\\\"100.00\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.taxes.update\\\"><div ng-messages=\\\"taxForm.value.$error\\\" \\nng-show=\\\"taxForm.value.$touched\\\" role=\\\"alert\\\"><div ng-message-exp=\\\"[\\'min\\', \\'max\\']\\\">{{\\'TAXES.WRONG_VALUE\\' | translate}}\\n</div></div></md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-sort-numeric name font-size-24\\\"></md-icon><input ng-model=\\\"vm.tax.position\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.taxes.update\\\" type=\\\"number\\\"></md-input-container>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-checkbox ng-model=\\\"vm.tax.default\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.taxes.update\\\">{{\\'TAXES.DEFAULT\\' | translate}}</md-checkbox>\\n</md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.taxes.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" \\nclass=\\\"stroked\\\" nd-track-click=\\\"cancel tax\\\">Cancel</md-button><md-button ng-click=\\\"vm.save()\\\" \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"!taxForm.$dirty || !taxForm.$valid\\\" translate=\\\"GENERAL.SAVE\\\" \\nnd-track-click=\\\"save tax\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/tax-selector.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content><h2 \\ntranslate=\\\"PURCHASE.ADD_TAX_TO_ALL_PRODUCTS_DIALOG_TITLE\\\"></h2><h3 \\ntranslate=\\\"PURCHASE.ADD_TAX_TO_ALL_PRODUCTS_DIALOG_TITLE_DESCRIPTION\\\"></h3><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\" class=\\\"nd-input\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon>\\n<input id=\\\"invoice-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" flex></div><table class=\\\"dataTable\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\nclass=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.createTax()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'PURCHASE.NEW_TAX\\' | translate}}</div></md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.update\\')}}\\\" \\nng-click=\\\"vm.selectTax(vm.tax)\\\" translate=\\\"PURCHASE.ADD_TAX\\\"></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/ticket-template-dialog.html\",\"<md-dialog id=\\\"ticket-template-dialog\\\"><form ng-cloak name=\\\"ticketTemplateForm\\\"><md-dialog-content layout=\\\"column\\\" \\nstyle=\\\"min-width: 600px\\\"><h2 translate=\\\"CONFIGURATION.NEW_TICKET_TEMPLATE\\\" ng-if=\\\"!vm.ticketTemplate.id\\\" class=\\\"mb-32\\\">\\nNew Ticket Template</h2><h2 translate=\\\"CONFIGURATION.EDIT_TICKET_TEMPLATE\\\" \\ntranslate-values=\\\"{name: vm.ticketTemplate.name}\\\" ng-if=\\\"vm.ticketTemplate.id\\\" class=\\\"mb-32\\\">Edit Ticket Template</h2>\\n<md-input-container class=\\\"pb-0 mb-0\\\"><input type=\\\"text\\\" name=\\\"name\\\" ng-model=\\\"vm.ticketTemplate.name\\\" md-auto-focus \\nmaxlength=\\\"64\\\" required placeholder=\\\"{{\\'CONFIGURATION.TICKET_TEMPLATE_NAME\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\"></md-input-container><span \\nclass=\\\"h3 bold\\\" translate=\\\"CONFIGURATION.TICKET\\\"></span><p class=\\\"mt-0 secondary-text\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_INFO\\\"></p><div layout=\\\"column\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nflow-file-success=\\\"vm.fileSuccess($file, $message)\\\" flow-file-added=\\\"vm.fileAdded($file)\\\"><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" layout-wrap><img class=\\\"h-40\\\" \\nng-show=\\\"vm.logo\\\" ng-src=\\\"{{vm.logo}}\\\"></div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nhas-permission=\\\"inventory.configuration.ticket_templates.update\\\"><div flex=\\\"50\\\"><md-button \\nng-if=\\\"vm.ticketTemplate.logo\\\" class=\\\"md-raised\\\" flow-btn translate=\\\"CONFIGURATION.TICKET_TEMPLATE_CHANGE_LOGO\\\">\\nChange Logo</md-button><md-button ng-if=\\\"!vm.ticketTemplate.logo\\\" class=\\\"md-raised\\\" flow-btn \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_SET_LOGO\\\">Set Logo</md-button><span class=\\\"secondary-text\\\">PNG, JPG - Max. 1MB\\n</span></div><md-input-container flex=\\\"50\\\" class=\\\"pb-0 mb-0 mr-20\\\"><md-checkbox \\nng-model=\\\"vm.ticketTemplate.print_logo\\\" has-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\">\\n{{\\'CONFIGURATION.TICKET_TEMPLATE_PRINT_LOGO\\' | translate}}</md-checkbox></md-input-container></div></div>\\n<md-input-container class=\\\"pb-0 mb-24\\\"><label translate=\\\"CONFIGURATION.TICKET_TEMPLATE_PRODUCT_IDENTIFIER_LABEL\\\">\\n</label><md-select ng-model=\\\"vm.ticketTemplate.product_identifier\\\" flex><md-option \\nng-value=\\\"vm.PRODUCT_IDENTIFIER_TYPES[\\'NAME_IDENTIFIER\\']\\\" translate=\\\"CONFIGURATION.TICKET_TEMPLATE_NAME_IDENTIFIER\\\">\\n</md-option><md-option ng-value=\\\"vm.PRODUCT_IDENTIFIER_TYPES[\\'CODE_IDENTIFIER\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_CODE_IDENTIFIER\\\"></md-option><md-option \\nng-value=\\\"vm.PRODUCT_IDENTIFIER_TYPES[\\'NAME_CODE_IDENTIFIER\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_NAME_CODE_IDENTIFIER\\\"></md-option><md-option \\nng-value=\\\"vm.PRODUCT_IDENTIFIER_TYPES[\\'CODE_NAME_IDENTIFIER\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_CODE_NAME_IDENTIFIER\\\"></md-option></md-select></md-input-container>\\n<md-input-container class=\\\"pb-0 mb-24\\\"><label translate=\\\"CONFIGURATION.TICKET_TEMPLATE_VARIANT_IDENTIFIER_LABEL\\\">\\n</label><md-select ng-model=\\\"vm.ticketTemplate.variant_identifier\\\" flex><md-option \\nng-value=\\\"vm.VARIANT_IDENTIFIER_TYPES[\\'COLOR_AND_SIZE_IDENTIFIER\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_COLOR_AND_SIZE_IDENTIFIER\\\"></md-option><md-option \\nng-value=\\\"vm.VARIANT_IDENTIFIER_TYPES[\\'SKU_IDENTIFIER\\']\\\" translate=\\\"CONFIGURATION.TICKET_TEMPLATE_SKU_IDENTIFIER\\\">\\n</md-option><md-option ng-value=\\\"vm.VARIANT_IDENTIFIER_TYPES[\\'DO_NOT_SHOW\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_DO_NOT_SHOW\\\"></md-option></md-select></md-input-container><md-input-container \\nclass=\\\"pb-0 mb-24\\\"><label translate=\\\"CONFIGURATION.TICKET_TEMPLATE_PRODUCT_PRICE_POSITION_LABEL\\\"></label><md-select \\nng-model=\\\"vm.ticketTemplate.product_price_position\\\" name=\\\"product_price_position\\\" flex><md-option \\nng-value=\\\"vm.PRODUCT_PRICE_POSITION_TYPES[\\'NEW_LINE\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_PRODUCT_PRICE_POSITION_NEW_LINE\\\"></md-option><md-option \\nng-value=\\\"vm.PRODUCT_PRICE_POSITION_TYPES[\\'SAME_LINE_AS_PRODUCT\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_PRODUCT_PRICE_POSITION_SAME_LINE_AS_PRODUCT\\\"></md-option></md-select>\\n</md-input-container><md-input-container class=\\\"pb-0 mb-24\\\"><label \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_BARCODE_DESIGN_LABEL\\\"></label><md-select \\nng-model=\\\"vm.ticketTemplate.barcode_design\\\" name=\\\"barcode_design\\\" flex><md-option \\nng-value=\\\"vm.BARCODE_DESIGN_TYPES[\\'DO_NOT_SHOW\\']\\\" translate=\\\"CONFIGURATION.TICKET_TEMPLATE_BARCODE_DESIGN_DO_NOT_SHOW\\\">\\n</md-option><md-option ng-value=\\\"vm.BARCODE_DESIGN_TYPES[\\'SMALL\\']\\\" \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_BARCODE_DESIGN_SMALL\\\"></md-option><md-option \\nng-value=\\\"vm.BARCODE_DESIGN_TYPES[\\'NORMAL\\']\\\" translate=\\\"CONFIGURATION.TICKET_TEMPLATE_BARCODE_DESIGN_NORMAL\\\">\\n</md-option></md-select></md-input-container><md-input-container class=\\\"pb-0 mb-24\\\"><label \\ntranslate=\\\"CONFIGURATION.TICKET_TEMPLATE_TOTAL_DESIGN_LABEL\\\"></label><md-select \\nng-model=\\\"vm.ticketTemplate.total_design\\\" name=\\\"total_design\\\" flex><md-option \\nng-value=\\\"vm.TOTAL_DESIGN_TYPES[\\'NORMAL\\']\\\" translate=\\\"CONFIGURATION.TICKET_TEMPLATE_TOTAL_DESIGN_NORMAL\\\"></md-option>\\n<md-option ng-value=\\\"vm.TOTAL_DESIGN_TYPES[\\'BIG\\']\\\" translate=\\\"CONFIGURATION.TICKET_TEMPLATE_TOTAL_DESIGN_BIG\\\">\\n</md-option></md-select></md-input-container><span class=\\\"h3 bold\\\" translate=\\\"CONFIGURATION.DIRECT_AND_SYSTEM_TICKET\\\">\\n</span><p class=\\\"mt-0 secondary-text\\\" translate=\\\"CONFIGURATION.FOOTER_INFO\\\"></p><md-input-container \\nstyle=\\\"height: initial\\\" class=\\\"pb-0 mb-0\\\"><textarea name=\\\"footer\\\" ng-model=\\\"vm.ticketTemplate.footer\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.TICKET_TEMPLATE_FOOTER\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\"></textarea></md-input-container>\\n<md-input-container style=\\\"height: initial\\\" class=\\\"pb-0 mb-0\\\"><textarea name=\\\"footer\\\" \\nng-model=\\\"vm.ticketTemplate.footer_devolution_card\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.VOUCHER_TEMPLATE_FOOTER\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\"></textarea></md-input-container>\\n<md-input-container class=\\\"pb-0 mb-0\\\"><input name=\\\"closure\\\" ng-model=\\\"vm.ticketTemplate.closure\\\" type=\\\"text\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.TICKET_TEMPLATE_CLOSURE\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\"></md-input-container><span \\nclass=\\\"h3 bold\\\" translate=\\\"CONFIGURATION.PDF_TICKET\\\"></span><p class=\\\"mt-0 secondary-text\\\" \\ntranslate=\\\"CONFIGURATION.PDF_INFO\\\"></p><md-input-container class=\\\"pb-0 mb-0\\\"><input name=\\\"return_policy\\\" \\nng-model=\\\"vm.ticketTemplate.return_policy\\\" type=\\\"text\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.TICKET_TEMPLATE_RETURN_POLICY\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\"></md-input-container><md-input-container \\nclass=\\\"pb-0 mb-0\\\"><input name=\\\"return_instructions\\\" ng-model=\\\"vm.ticketTemplate.return_instructions\\\" type=\\\"text\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.TICKET_TEMPLATE_RETURN_INSTRUCTIONS\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.ticket_templates.update\\\"></md-input-container><div><span \\nclass=\\\"h3 bold\\\" translate=\\\"CONFIGURATION.POS_ORDER_MAIL_TEMPLATE\\\"></span><div layout=\\\"column\\\" layout-gt-sm=\\\"column\\\"><p \\ntranslate=\\\"CONFIGURATION.POS_ORDER_MAIL_TEMPLATE_INFO\\\" class=\\\"mt-0 secondary-text\\\"></p><md-input-container \\nclass=\\\"w-400\\\"><label translate=\\\"CONFIGURATION.EMAIL_SUBJECT\\\"></label><input type=\\\"text\\\" name=\\\"pos-order-email-subject\\\" \\nng-model=\\\"vm.ticketTemplate.pos_order_email_subject\\\" class=\\\"mt-0\\\"></md-input-container><div \\nclass=\\\"secondary-text m-0 mb-10\\\"><label translate=\\\"CONFIGURATION.EMAIL_BODY\\\"></label>:</div><text-angular \\nng-change=\\\"vm.normalizeHTML(vm.ticketTemplate.pos_order_email_body)\\\" ta-toolbar=\\\"vm.taToolbar\\\" \\nng-model=\\\"vm.ticketTemplate.pos_order_email_body\\\"></text-angular></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex><md-input-container class=\\\"mb-0\\\" flex><label translate=\\\"CONFIGURATION.TEST_EMAIL\\\"></label><input type=\\\"email\\\" \\nname=\\\"emailTest\\\" ng-model=\\\"vm.emailTestPosOrder\\\"></md-input-container><div layout=\\\"column\\\"><md-button \\nclass=\\\"md-primary\\\" aria-label=\\\"Enviar email de prueba\\\" ng-click=\\\"vm.sendTestEmail(false)\\\" \\nng-disabled=\\\"!vm.emailTestPosOrder\\\" translate=\\\"CONFIGURATION.SEND_TEST_EMAIL\\\">Enviar email de prueba</md-button></div>\\n</div></div><div><span class=\\\"h3 bold\\\" translate=\\\"CONFIGURATION.POS_ORDER_INVOICE_MAIL_TEMPLATE\\\"></span><div \\nlayout=\\\"column\\\"><p class=\\\"mt-0 secondary-text\\\" translate=\\\"CONFIGURATION.POS_ORDER_INVOICE_MAIL_TEMPLATE_INFO\\\"></p>\\n<md-input-container class=\\\"w-400\\\"><label translate=\\\"CONFIGURATION.EMAIL_SUBJECT\\\"></label><input type=\\\"text\\\" \\nname=\\\"pos-order-invoice-email-subject\\\" ng-model=\\\"vm.ticketTemplate.pos_order_invoice_email_subject\\\" class=\\\"mt-0\\\">\\n</md-input-container><div class=\\\"secondary-text m-0 mb-10\\\"><label translate=\\\"CONFIGURATION.EMAIL_BODY\\\"></label>:</div>\\n<text-angular ng-change=\\\"vm.normalizeHTML(vm.ticketTemplate.pos_order_invoice_email_body)\\\" ta-toolbar=\\\"vm.taToolbar\\\" \\nng-model=\\\"vm.ticketTemplate.pos_order_invoice_email_body\\\"></text-angular></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex><md-input-container class=\\\"mb-0\\\" flex><label translate=\\\"CONFIGURATION.TEST_EMAIL\\\">\\n</label><input type=\\\"email\\\" name=\\\"emailTest\\\" ng-model=\\\"vm.emailTestPosOrderInvoice\\\"></md-input-container><div \\nlayout=\\\"column\\\"><md-button class=\\\"md-primary\\\" aria-label=\\\"Enviar email de prueba\\\" ng-click=\\\"vm.sendTestEmail(true)\\\" \\nng-disabled=\\\"!vm.emailTestPosOrderInvoice\\\" translate=\\\"CONFIGURATION.SEND_TEST_EMAIL\\\">Enviar email de prueba</md-button>\\n</div></div></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.ticket_templates.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel ticket templace\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.saveTicketTemplate()\\\" translate=\\\"GENERAL.SAVE\\\" \\nng-disabled=\\\"!ticketTemplateForm.$valid || !ticketTemplateForm.$dirty\\\" class=\\\"md-primary md-raised\\\" \\nnd-track-click=\\\"save ticket template\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/variant-category-dialog.html\",\"<md-dialog aria-label=\\\"New Category\\\"><form name=\\\"categoryForm\\\" ng-cloak><md-dialog-content><h2 class=\\\"mb-30\\\" \\nng-if=\\\"!vm.isNew && vm.isCategory\\\">{{\\'CONFIGURATION.EDIT_VARIANT_CATEGORY\\' | translate}}</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"vm.isNew && vm.isCategory\\\">{{\\'CONFIGURATION.NEW_VARIANT_CATEGORY\\' | translate}}</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"!vm.isNew && !vm.isCategory\\\">{{\\'CONFIGURATION.EDIT_VARIANT\\' | translate}}</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"vm.isNew &&!vm.isCategory\\\">{{\\'CONFIGURATION.NEW_VARIANT\\' | translate}}</h2><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.object.code\\\" placeholder=\\\"{{\\'GENERAL.CODE\\' | translate}}\\\" autocomplete=\\\"off\\\" md-autofocus required \\nhas-permission-else-disable=\\\"inventory.configuration.variants.update\\\"></md-input-container><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.object.name\\\" placeholder=\\\"{{\\'GENERAL.NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" required \\nhas-permission-else-disable=\\\"inventory.configuration.variants.update\\\"></md-input-container><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-input-container class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-pencil name font-size-24 mr-0\\\"></md-icon><input ng-model=\\\"vm.object.generic_name\\\" \\nplaceholder=\\\"{{\\'GENERAL.GENERIC_NAME\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.variants.update\\\"></md-input-container><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-0\\\"><md-tooltip ng-if=\\\"vm.isCategory\\\">\\n{{\\'CONFIGURATION.INFO_VARIANT_CATEGORY_GENERIC_NAME\\' | translate}}</md-tooltip><md-tooltip ng-if=\\\"!vm.isCategory\\\">\\n{{\\'CONFIGURATION.INFO_VARIANT_GENERIC_NAME\\' | translate}}</md-tooltip></md-icon></div><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-sort-numeric name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.object.position\\\" placeholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.variants.update\\\"></md-input-container><div layout=\\\"row\\\" \\nng-if=\\\"vm.isCategory\\\"><div class=\\\"pt-16 pl-5\\\"><md-radio-group ng-model=\\\"vm.object.is_principal\\\" required>\\n<md-radio-button ng-value=\\\"true\\\" ng-disabled=\\\"!vm.Session.hasPermission(\\'inventory.configuration.variants.update\\')\\\">\\n<span translate=\\\"CONFIGURATION.IS_MEASUREMENT_CATEGORY\\\">Is measurement category (size, length, etc.)</span>\\n</md-radio-button><md-radio-button ng-value=\\\"false\\\" \\nng-disabled=\\\"!vm.Session.hasPermission(\\'inventory.configuration.variants.update\\')\\\"><span \\ntranslate=\\\"CONFIGURATION.IS_COLOR_CATEGORY\\\">Is color category (color, flavour, etc.)</span></md-radio-button>\\n</md-radio-group></div></div><md-input-container flex class=\\\"md-block mb-0 w-300\\\" \\nng-if=\\\"!vm.isCategory && vm.specificCategory\\\"><md-icon class=\\\"icon icon-clipboard-outline name font-size-24\\\"></md-icon>\\n<label translate=\\\"CONFIGURATION.VARIANT_CATEGORY\\\">Variant category</label><md-select flex class=\\\"md-block\\\" \\nng-model=\\\"vm.selectedId\\\" ng-class=\\\"{\\'required\\': !vm.fixed}\\\" ng-disabled=\\\"vm.fixed\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"category in vm.allCategories | filter:vm.selectFilter\\\" value=\\\"{{category.id}}\\\">\\n{{category.code}} - {{category.name}}</md-option></md-select></md-input-container><div ng-if=\\\"vm.isCategory\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-16 pl-5\\\"><md-input-container class=\\\"md-block mb-0 w-300\\\">\\n<md-checkbox ng-model=\\\"vm.object.update_products\\\" aria-label=\\\"Update products\\\" flex>\\n{{\\'CONFIGURATION.UPDATE_PRODUCTS\\' | translate }}</md-checkbox></md-input-container><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-0\\\"><md-tooltip>\\n{{\\'CONFIGURATION.UPDATE_PRODUCTS_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" has-permission=\\\"inventory.configuration.variants.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel variant category\\\">Cancel\\n</md-button><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!categoryForm.$dirty || !categoryForm.$valid\\\" translate=\\\"GENERAL.SAVE\\\" \\nnd-track-click=\\\"save variant category\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/webhook-dialog.html\",\"<md-dialog aria-label=\\\"Webhook\\\"><form ng-cloak name=\\\"webhookForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"WEBHOOKS.NEW_WEBHOOK\\\" ng-if=\\\"!vm.webhook.id\\\" class=\\\"mb-32\\\">New Webhook</h2><h2 \\ntranslate=\\\"WEBHOOKS.EDIT_WEBHOOK\\\" ng-if=\\\"vm.webhook.id\\\" class=\\\"mb-32\\\">Edit Webhook</h2><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.webhook.name\\\" name=\\\"name\\\" placeholder=\\\"{{\\'WEBHOOKS.NEW_WEBHOOK\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.webhooks.update\\\" type=\\\"text\\\" md-auto-focus></md-input-container>\\n<md-input-container flex class=\\\"w-300 mb-0\\\" has-permission-else-disable=\\\"inventory.configuration.webhooks.update\\\">\\n<md-icon class=\\\"icon name font-size-24\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/webhook.0eafbdff.svg\\\"></md-icon>\\n<label>{{\\'WEBHOOKS.WEBHOOK_TYPE\\' | translate}}</label><md-select ng-model=\\\"vm.webhook.type\\\" required><md-optgroup \\nng-repeat=\\\"group in vm.webhookTypes\\\" label=\\\"{{group.name | translate}}\\\"><md-option ng-repeat=\\\"type in group.webhooks\\\" \\nng-disabled=\\\"vm.webhookTypesAvailable.indexOf(type) === -1\\\" ng-value=\\\"type\\\">\\n{{(\\'WEBHOOKS.WEBHOOK_TYPE_\\' + vm.WEBHOOK_TYPES[type]) | translate}}</md-option></md-optgroup></md-select>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-code-braces name font-size-24\\\"></md-icon><textarea ng-model=\\\"vm.webhook.headers\\\" \\nplaceholder=\\\"{{\\'WEBHOOKS.WEBHOOK_HEADERS\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.webhooks.update\\\" rows=\\\"1\\\"></textarea><small \\nclass=\\\"secondary-text\\\">{{\\'WEBHOOKS.WEBHOOK_HEADERS_HELP\\' | translate}}</small></md-input-container><md-input-container \\nflex class=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-web name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.webhook.url\\\" name=\\\"url\\\" placeholder=\\\"{{\\'WEBHOOKS.WEBHOOK_URL\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.webhooks.update\\\" type=\\\"url\\\" required></md-input-container>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-checkbox ng-model=\\\"vm.webhook.active\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.webhooks.update\\\">{{\\'WEBHOOKS.WEBHOOK_IS_ACTIVE\\' | translate}}\\n</md-checkbox></md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.webhooks.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.saveing\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel webhook\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!webhookForm.$dirty || !webhookForm.$valid || vm.saveing\\\" translate=\\\"GENERAL.SAVE\\\" \\nnd-track-click=\\\"save webhook\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/appearance.html\",\"<div id=\\\"appearance\\\" class=\\\"m-5 md-padding\\\" layout=\\\"column\\\"><div class=\\\"appearance md-whiteframe-1dp white-bg mb-32\\\" \\nflex=\\\"100\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\" flex><md-icon \\nmd-font-icon=\\\"icon-monitor-multiple\\\" class=\\\"m-0 mr-10\\\"></md-icon><h2 class=\\\"secondary-text m-0\\\" \\ntranslate=\\\"APPEARANCE.LAYOUT_STYLE\\\">Layout Style</h2></div><div class=\\\"ms-theme-options-list\\\" layout=\\\"column\\\"><div \\nclass=\\\"theme-option layout-options\\\"><md-radio-group layout=\\\"row\\\" layout-align=\\\"start start\\\" layout-wrap \\nng-model=\\\"vm.layoutStyle\\\" ng-change=\\\"vm.updateLayoutStyle()\\\"><md-radio-button \\nng-repeat=\\\"layoutStyle in vm.layoutStyles\\\" ng-value=\\\"layoutStyle.value\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><img ng-src=\\\"{{layoutStyle.figure}}\\\"> <span class=\\\"text-center font-size-12 mt-8\\\">\\n{{layoutStyle.label}}</span></div></md-radio-button></md-radio-group></div></div></div><div \\nclass=\\\"appearance md-whiteframe-1dp white-bg mb-32\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-padding\\\" flex><md-icon md-font-icon=\\\"icon-panorama-horizontal\\\" class=\\\"m-0 mr-10\\\"></md-icon><h2 \\nclass=\\\"secondary-text m-0\\\" translate=\\\"APPEARANCE.LAYOUT_MODE\\\">Layout Mode</h2></div><div class=\\\"md-padding\\\" \\nlayout=\\\"column\\\"><div class=\\\"theme-option\\\"><md-radio-group layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-model=\\\"vm.layoutMode\\\" ng-change=\\\"vm.updateLayoutMode()\\\"><md-radio-button ng-repeat=\\\"layoutMode in vm.layoutModes\\\" \\nng-value=\\\"layoutMode.value\\\">{{layoutMode.label}}</md-radio-button></md-radio-group></div></div></div><div \\nclass=\\\"appearance md-whiteframe-1dp white-bg mb-32\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-padding\\\" flex><md-icon md-font-icon=\\\"icon-palette\\\" class=\\\"m-0 mr-10\\\"></md-icon><h2 \\nclass=\\\"secondary-text m-0\\\" translate=\\\"APPEARANCE.LAYOUT_COLOR\\\">Color Palette</h2></div><div \\nclass=\\\"ms-theme-options-list\\\" layout=\\\"column\\\"><div class=\\\"theme-option color-palettes\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" layout-wrap><md-button ng-repeat=\\\"(themeName, theme) in vm.themes.list\\\" \\nclass=\\\"md-raised theme-button\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" aria-label=\\\"{{themeName}}\\\" \\nng-click=\\\"vm.setActiveTheme(themeName)\\\" \\nng-style=\\\"{\\'background-color\\': theme.primary.color,\\'border-color\\': theme.primary.color,\\'color\\': theme.primary.contrast1}\\\" \\nng-class=\\\"{active: vm.getActiveTheme().name === themeName}\\\"><md-icon ng-style=\\\"{\\'color\\': theme.primary.contrast1}\\\" \\nmd-font-icon=\\\"icon-palette\\\" class=\\\"icon s32\\\"></md-icon></md-button></div></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/attributes.html\",\"<div flex id=\\\"attributes\\\" layout=\\\"row\\\" layout-fill><div class=\\\"p-8\\\" flex=\\\"50\\\" layout-fill><md-card layout-fill \\nlayout=\\\"column\\\"><md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container \\nclass=\\\"nd-search-input\\\" md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nid=\\\"attribute-category-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container></div></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><nd-new-feature-badge \\nid=\\\"DYNAMIC_ATTRIBUTES\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge><table class=\\\"dataTable row-border hover\\\" \\ndatatable dt-columns=\\\"vm.dtColumns\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div><div class=\\\"p-8\\\" flex=\\\"50\\\" layout-fill><md-card layout-fill layout=\\\"column\\\">\\n<md-card-content class=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\" ng-if=\\\"vm.selectedAttributeCategory\\\"><table \\nclass=\\\"dataTable row-border hover\\\" datatable dt-columns=\\\"vm.dtColumns2\\\" dt-instance=\\\"vm.dtInstance2\\\" \\ndt-options=\\\"vm.dtOptions2\\\" id=\\\"datatable-table2\\\"></table></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/barcodes.html\",\"<div id=\\\"barcodes\\\" layout=\\\"column\\\"><md-card><md-card-content layout=\\\"column\\\"><form name=\\\"delivery_noteForm\\\"><p \\nclass=\\\"mb-32\\\" translate=\\\"CONFIGURATION.WHAT_IS_BARCODES\\\"></p><div class=\\\"mb-32\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><h4 class=\\\"secondary-text m-0\\\" translate=\\\"CONFIGURATION.EAN_13_DEFINITION\\\"></h4></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container class=\\\"mr-8\\\" flex><label \\ntranslate=\\\"CONFIGURATION.EAN_13_COMPANY_PREFIX\\\">GS1 Company Prefix</label><input \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"11\\\" md-no-asterisk name=\\\"company_prefix\\\" \\nng-change=\\\"vm.getNextEan13()\\\" ng-model=\\\"vm.configuration.ean_13_company_prefix\\\"></md-input-container>\\n<md-input-container flex><label translate=\\\"CONFIGURATION.COUNTER\\\">Counter</label><input class=\\\"text-right\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"{{vm.maxNumberCounterEan13}}\\\" \\nmd-no-asterisk min=\\\"0\\\" name=\\\"gs1_product_counter\\\" ng-change=\\\"vm.getNextEan13()\\\" \\nng-model=\\\"vm.configuration.ean_13_product_counter\\\" type=\\\"number\\\"></md-input-container><div flex=\\\"50\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><svg id=\\\"ean-13\\\" ng-show=\\\"!vm.errorEan13\\\"></svg><div class=\\\"did-you-know yellow m-16\\\" \\nng-show=\\\"vm.errorEan13\\\" translate=\\\"CONFIGURATION.ERROR_BARCODE_OVERFLOW\\\"></div></div></div><div class=\\\"mb-32\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><h4 class=\\\"secondary-text m-0\\\" translate=\\\"CONFIGURATION.EAN_8_DEFINITION\\\">\\n</h4></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container class=\\\"mr-8\\\" flex><label \\ntranslate=\\\"CONFIGURATION.EAN_8_COMPANY_PREFIX\\\">GS1 Company Prefix</label><input \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"6\\\" md-no-asterisk name=\\\"company_prefix\\\" \\nng-change=\\\"vm.getNextEan8()\\\" ng-model=\\\"vm.configuration.ean_8_company_prefix\\\"></md-input-container><md-input-container \\nflex><label translate=\\\"CONFIGURATION.COUNTER\\\">Counter</label><input class=\\\"text-right\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"{{vm.maxNumberCounterEan8}}\\\" md-no-asterisk \\nmin=\\\"0\\\" name=\\\"gs1_product_counter\\\" ng-change=\\\"vm.getNextEan8()\\\" ng-model=\\\"vm.configuration.ean_8_product_counter\\\" \\ntype=\\\"number\\\"></md-input-container><div flex=\\\"50\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><svg id=\\\"ean-8\\\" \\nng-show=\\\"!vm.errorEan8\\\"></svg><div class=\\\"did-you-know yellow m-16\\\" ng-show=\\\"vm.errorEan8\\\" \\ntranslate=\\\"CONFIGURATION.ERROR_BARCODE_OVERFLOW\\\"></div></div></div><div class=\\\"mb-32\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><h4 class=\\\"secondary-text m-0\\\" translate=\\\"CONFIGURATION.UPC_A_DEFINITION\\\"></h4></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container class=\\\"mr-8\\\" flex><label \\ntranslate=\\\"CONFIGURATION.UPC_A_COMPANY_PREFIX\\\">GS1 Company Prefix</label><input \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"10\\\" md-no-asterisk name=\\\"company_prefix\\\" \\nng-change=\\\"vm.getNextUpcA()\\\" ng-model=\\\"vm.configuration.upc_a_company_prefix\\\"></md-input-container><md-input-container \\nflex><label translate=\\\"CONFIGURATION.COUNTER\\\">Counter</label><input class=\\\"text-right\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"{{vm.maxNumberCounterUpca}}\\\" md-no-asterisk \\nmin=\\\"0\\\" name=\\\"gs1_product_counter\\\" ng-change=\\\"vm.getNextUpcA()\\\" ng-model=\\\"vm.configuration.upc_a_product_counter\\\" \\ntype=\\\"number\\\"></md-input-container><div flex=\\\"50\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><svg id=\\\"upc-a\\\" \\nng-show=\\\"!vm.errorUpcA\\\"></svg><div class=\\\"did-you-know yellow m-16\\\" ng-show=\\\"vm.errorUpcA\\\" \\ntranslate=\\\"CONFIGURATION.ERROR_BARCODE_OVERFLOW\\\"></div></div></div><div class=\\\"mb-32\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><h4 class=\\\"secondary-text m-0\\\" translate=\\\"CONFIGURATION.CODE_128_DEFINITION\\\"></h4></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container flex><label translate=\\\"CONFIGURATION.COUNTER\\\">Counter\\n</label><input class=\\\"text-right\\\" has-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" md-no-asterisk \\nmin=\\\"0\\\" name=\\\"gs1_product_counter\\\" ng-change=\\\"vm.getNextCode128()\\\" \\nng-model=\\\"vm.configuration.code_128_product_counter\\\" type=\\\"number\\\"> <small class=\\\"secondary-text\\\">\\n{{\\'CONFIGURATION.MIN_3_CHARACTER_LENGTH\\' | translate}}</small></md-input-container><div flex=\\\"50\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><svg id=\\\"code-128\\\"></svg></div></div></form><div class=\\\"mt-16\\\" flex \\nhas-permission=\\\"inventory.configuration.barcodes.update\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/brands.html\",\"<div class=\\\"p-8\\\" flex id=\\\"brands\\\" layout=\\\"column\\\" layout-fill><md-card layout-fill layout=\\\"column\\\"><md-card-title \\nclass=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-columns=\\\"vm.dtColumns\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/categories.html\",\"<div id=\\\"categories\\\" layout=\\\"row\\\" layout-fill flex><div class=\\\"p-8\\\" flex=\\\"50\\\" layout-fill><md-card layout-fill>\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"category-search\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\" ms-scroll><table \\nclass=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-card-content></md-card></div><div class=\\\"p-8\\\" flex=\\\"50\\\" \\nlayout-fill><md-card layout-fill><md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container \\nmd-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"subcategory-search\\\" \\ntype=\\\"text\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" \\ndatatable dt-instance=\\\"vm.dtInstance2\\\" dt-options=\\\"vm.dtOptions2\\\" dt-columns=\\\"vm.dtColumns2\\\" id=\\\"datatable-table2\\\">\\n</table></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/company.html\",\"<div id=\\\"company\\\" layout=\\\"column\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"COMPANY.COMPANY_INFORMATION\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"companyForm\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"vm.saveCompany()\\\"><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-input-container flex><label translate=\\\"COMPANY.COMPANY_NAME\\\"></label><input type=\\\"text\\\" \\nname=\\\"name\\\" ng-model=\\\"vm.company.name\\\" required has-permission-else-disable=\\\"inventory.configuration.company.update\\\">\\n<div ng-messages=\\\"companyForm.name.$error\\\" ng-show=\\\"companyForm.name.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex><label \\ntranslate=\\\"COMPANY.VAT\\\"></label><input type=\\\"text\\\" name=\\\"vat\\\" ng-model=\\\"vm.company.vat\\\" required \\nng-disabled=\\\"vm.isVerifactuActive\\\" has-permission-else-disable=\\\"inventory.configuration.company.update\\\"><div \\nng-messages=\\\"companyForm.vat.$error\\\" ng-show=\\\"companyForm.vat.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div><div ng-message=\\\"maxlength\\\"><span \\ntranslate=\\\"COMPANY.BEWTEEN_0_AND_100\\\"></span></div></div><div class=\\\"hint\\\" ng-if=\\\"vm.isVerifactuActive\\\"><small \\ntranslate=\\\"COMPANY.NIF_VERIFACTU_ACTIVE\\\"></small></div></md-input-container></div><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" class=\\\"md-block\\\"><label translate=\\\"COMPANY.ADDRESS\\\">\\n</label><input type=\\\"text\\\" name=\\\"address\\\" ng-model=\\\"vm.company.address_1\\\" required \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\"><div ng-messages=\\\"companyForm.address.$error\\\" \\nng-show=\\\"companyForm.address.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\" class=\\\"md-block\\\"><label translate=\\\"COMPANY.CITY\\\"></label><input type=\\\"text\\\" name=\\\"city\\\" \\nng-model=\\\"vm.company.city\\\" required has-permission-else-disable=\\\"inventory.configuration.company.update\\\"><div \\nng-messages=\\\"companyForm.city.$error\\\" ng-show=\\\"companyForm.city.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span\\n translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\" class=\\\"md-block\\\"><input ng-model=\\\"vm.company.state\\\" placeholder=\\\"{{\\'COMPANY.STATE\\' | translate}}\\\" \\nautocomplete=\\\"off\\\" has-permission-else-disable=\\\"inventory.configuration.company.update\\\" type=\\\"text\\\"><div \\nng-messages=\\\"companyForm.state.$error\\\" ng-show=\\\"companyForm.state.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container></div><div layout=\\\"column\\\" \\nlayout-gt-xs=\\\"row\\\"><md-input-container flex><label translate=\\\"COMPANY.ZIP\\\"></label><input type=\\\"text\\\" name=\\\"zip\\\" \\nng-model=\\\"vm.company.zip\\\" required has-permission-else-disable=\\\"inventory.configuration.company.update\\\"><div \\nng-messages=\\\"companyForm.zip.$error\\\" ng-show=\\\"companyForm.zip.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex><label \\ntranslate=\\\"COMPANY.COUNTRY\\\"></label><md-select ng-model=\\\"vm.company.country\\\" required \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\"><md-option ng-repeat=\\\"country in vm.countries\\\" \\nvalue=\\\"{{country.code}}\\\">{{country.name}}</md-option></md-select><div ng-messages=\\\"companyForm.country.$error\\\" \\nng-show=\\\"companyForm.country.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><md-input-container flex><label \\ntranslate=\\\"COMPANY.PHONE\\\"></label><input type=\\\"text\\\" name=\\\"phone\\\" ng-model=\\\"vm.company.phone\\\" \\nng-pattern=\\\"/^(\\\\+?\\\\d+[\\\\s-]*)+$/\\\" has-permission-else-disable=\\\"inventory.configuration.company.update\\\"><div \\nng-messages=\\\"companyForm.phone.$error\\\" ng-show=\\\"companyForm.phone.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div><div ng-message=\\\"pattern\\\"><span translate=\\\"COMPANY.NOT_A_PHONE\\\">\\n</span></div></div></md-input-container><md-input-container flex><label translate=\\\"COMPANY.EMAIL\\\"></label><input \\ntype=\\\"text\\\" name=\\\"email\\\" ng-model=\\\"vm.company.email\\\"><div ng-messages=\\\"companyForm.email.$error\\\" \\nng-show=\\\"companyForm.email.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\">\\n</span></div><div ng-message=\\\"pattern\\\"><span translate=\\\"COMPANY.NOT_A_EMAIL\\\"></span></div></div></md-input-container>\\n</div><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container flex><label \\ntranslate=\\\"COMPANY.TRADE_MARK\\\"></label><textarea maxlength=\\\"256\\\" ng-model=\\\"vm.company.trade_mark\\\"></textarea>\\n</md-input-container></div><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container \\nclass=\\\"m-0 p-0\\\" flex><div flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nflow-file-success=\\\"vm.fileSuccess($file, $message)\\\" flow-file-added=\\\"vm.fileAdded($file)\\\" flex=\\\"100\\\" layout=\\\"row\\\"><div \\nlayout=\\\"row\\\" class=\\\"mr-10\\\" layout-align=\\\"center center\\\" layout-wrap><img class=\\\"h-40\\\" ng-show=\\\"vm.logo\\\" \\nng-src=\\\"{{vm.logo}}\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button ng-if=\\\"vm.company.logo\\\" \\nclass=\\\"m-0 mr-10 md-raised\\\" flow-btn translate=\\\"CONFIGURATION.TICKET_TEMPLATE_CHANGE_LOGO\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\">Change Logo</md-button><md-button \\nng-if=\\\"!vm.company.logo\\\" class=\\\"m-0 mr-10 md-raised\\\" flow-btn translate=\\\"CONFIGURATION.TICKET_TEMPLATE_SET_LOGO\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.company.update\\\">Set Logo</md-button><span class=\\\"secondary-text\\\">\\nPNG, JPG - Max. 1MB</span></div></div></md-input-container></div><div layout=\\\"row\\\" flex \\nhas-permission=\\\"inventory.configuration.company.update\\\"><span flex></span><md-button aria-label=\\\"Cancel\\\" \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" ng-disabled=\\\"companyForm.$pristine\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button type=\\\"submitAccount\\\" class=\\\"md-primary md-raised\\\" aria-label=\\\"Save\\\" \\nng-disabled=\\\"companyForm.$invalid || companyForm.$pristine\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></form>\\n</md-card-content></md-card><md-card><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h3\\\" translate=\\\"FISCAL_ADDRESSES.OTHER_FISCAL_ADDRESSES\\\"></span>\\n<md-button ng-if=\\\"!vm.hasSubscription\\\" has-permission=\\\"inventory.configuration.company.update\\\" \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.createClicked()\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-8\\\"></md-icon><span>{{\\'FISCAL_ADDRESSES.ADD_NEW_FISCAL_ADDRESS\\' | translate}}</span>\\n</md-button><md-button ng-if=\\\"vm.hasSubscription && vm.multipleFiscalDirectionsLimit\\\" \\nhas-permission=\\\"inventory.configuration.company.update\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.createClicked()\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" ng-if=\\\"vm.allowFiscalAddressCreation()\\\" \\nclass=\\\"mr-8\\\"></md-icon><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nng-if=\\\"vm.blockFiscalAddressCreation()\\\" class=\\\"mr-8\\\"></md-icon><span>\\n{{\\'FISCAL_ADDRESSES.ADD_NEW_FISCAL_ADDRESS\\' | translate}}</span></md-button></md-card-title-text></md-card-title>\\n<md-card-content><table ng-if=\\\"!vm.hasSubscription || vm.hasSubscription && vm.multipleFiscalDirectionsLimit\\\" \\nclass=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-card-content></md-card><md-card \\nng-if=\\\"vm.showFiscalProfile\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><span \\nclass=\\\"h3\\\" translate=\\\"COMPANY.FISCAL_INFORMATION\\\"></span><md-button \\nhas-permission=\\\"inventory.configuration.company.update\\\" ng-disabled=\\\"vm.savingFiscalProfile\\\" \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.saveFiscalProfile()\\\"><span>{{\\'GENERAL.SAVE\\' | translate}}</span></md-button>\\n</md-card-title-text></md-card-title><md-card-content><div ng-include=\\\"vm.fiscalProfileTemplate\\\"></div>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/compositions.html\",\"<div id=\\\"compositions\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\"><md-card-title\\n class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/default-serial-numbers.html\",\"<div id=\\\"autoids\\\" layout=\\\"column\\\"><md-card><md-card-content><div flex layout=\\\"column\\\"><h3 \\ntranslate=\\\"CONFIGURATION.PRODUCT_DEFAULT_SERIAL_NUMBERS\\\"></h3><md-radio-group class=\\\"pl-16\\\" \\nng-model=\\\"vm.inventoryConfiguration.use_product_default_serial_number_type\\\"><div class=\\\"mb-16\\\" layout=\\\"row\\\">\\n<md-radio-button class=\\\"md-primary\\\" ng-value=\\\"false\\\"></md-radio-button><md-input-container class=\\\"mr-8\\\" flex=\\\"80\\\">\\n<label translate=\\\"CONFIGURATION.PRODUCT_CODE_TEMPLATE\\\"></label><input \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" class=\\\"mb-5\\\" md-no-asterisk \\nname=\\\"product_code_template\\\" ng-model=\\\"vm.inventoryConfiguration.product_code_template\\\" type=\\\"text\\\"><div \\nclass=\\\"hint secondary-text font-size-12 mt-10\\\" translate=\\\"CONFIGURATION.PRODUCT_CODE_TEMPLATE_HINT\\\"></div>\\n</md-input-container><md-input-container flex=\\\"20\\\"><label translate=\\\"CONFIGURATION.COUNTER_LENGTH\\\"></label><input \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" md-no-asterisk \\nname=\\\"product_code_template_counter_length\\\" ng-model=\\\"vm.inventoryConfiguration.product_code_template_counter_length\\\" \\ntype=\\\"number\\\"></md-input-container></div><div layout=\\\"row\\\"><md-radio-button class=\\\"md-primary\\\" ng-value=\\\"true\\\">\\n</md-radio-button><md-input-container class=\\\"m-0\\\" flex><label><span \\ntranslate=\\\"CONFIGURATION.PRODUCTS_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.product_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PRODUCT\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div></md-radio-group><h3 \\ntranslate=\\\"CONFIGURATION.PRODUCT_SKU_TEMPLATE\\\"></h3><div class=\\\"pl-16\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><div \\nflex layout=\\\"column\\\"><md-input-container class=\\\"mr-8\\\" flex><label translate=\\\"CONFIGURATION.PRODUCT_SKU_TEMPLATE\\\">\\n</label><input has-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"11\\\" md-no-asterisk \\nname=\\\"product_code_template\\\" ng-model=\\\"vm.inventoryConfiguration.product_variant_sku_template\\\"></md-input-container>\\n<md-input-container class=\\\"mr-8\\\" flex><label translate=\\\"CONFIGURATION.COUNTER_LENGTH\\\"></label><input \\nhas-permission-else-disable=\\\"inventory.configuration.barcodes.update\\\" max=\\\"11\\\" md-no-asterisk \\nname=\\\"product_code_template_counter_length\\\" \\nng-model=\\\"vm.inventoryConfiguration.product_variant_sku_template_counter_length\\\"></md-input-container></div><div \\nclass=\\\"mb-32 pl-20\\\" flex layout=\\\"column\\\" layout-align=\\\"start start\\\"><label class=\\\"pb-20 secondary-text\\\" \\ntranslate=\\\"CONFIGURATION.OPTIONS\\\"></label><span><b class=\\\"pr-10\\\">{product}</b> -> <span class=\\\"secondary-text pl-10\\\" \\ntranslate=\\\"CONFIGURATION.PRODUCT_CODE\\\"></span> </span><span><b class=\\\"pr-10\\\">{brand}</b> -> <span \\nclass=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.BRAND_CODE\\\"></span> </span><span><b class=\\\"pr-10\\\">{season}</b> ->\\n<span class=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.SEASON_CODE\\\"></span></span> <span><b class=\\\"pr-10\\\">\\n{category}</b> -><span class=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.CATEGORY_CODE\\\"></span></span> <span><b \\nclass=\\\"pr-10\\\">{subcategory}</b> -><span class=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.SUBCATEGORY_CODE\\\"></span>\\n</span> <span><b class=\\\"pr-10\\\">{composition}</b> -> <span class=\\\"secondary-text pl-10\\\" \\ntranslate=\\\"CONFIGURATION.COMPOSITION_CODE\\\"></span> </span><span><b class=\\\"pr-10\\\">{counter}</b> -><span \\nclass=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.PRODUCT_COUNTER\\\"></span></span> <span><b class=\\\"pr-10\\\">{color}\\n</b> -><span class=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.COLOR_CODE\\\"></span></span> <span><b class=\\\"pr-10\\\">\\n{size}</b> -><span class=\\\"secondary-text pl-10\\\" translate=\\\"CONFIGURATION.SIZE_CODE\\\"></span></span></div></div><h3 \\ntranslate=\\\"CONFIGURATION.ORDER_AND_DELIVERIES_DEFAULT_SERIAL_NUMBERS\\\"></h3><div class=\\\"pl-16\\\" layout=\\\"column\\\">\\n<md-input-container class=\\\"mb-0\\\"><label><span translate=\\\"CONFIGURATION.PURCHASE_ORDER_DEFAULT_SERIAL_NUMBER\\\">\\nDefault Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.purchase_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PURCHASE_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.PURCHASE_ORDER_DELIVERY_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span>\\n</label><md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.purchase_order_delivery_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PURCHASE_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.TRANSFER_ORDER_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.transfer_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_TRANSFER_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.TRANSFER_ORDER_DELIVERY_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span>\\n</label><md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.transfer_order_delivery_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_TRANSFER_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.SALE_ORDER_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.sale_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.SALE_ORDER_DELIVERY_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.sale_order_delivery_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.SALE_ORDER_DEVOLUTION_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.sale_order_devolution_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.SALE_ORDER_DELIVERY_DEVOLUTION_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number\\n</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.sale_order_delivery_devolution_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.POS_ORDER_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label><md-select \\nflex ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.pos_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_POS_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.STOCKTAKING_ORDER_DEFAULT_SERIAL_NUMBER\\\"></span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.stocktaking_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_STOCKTAKING_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.PRODUCTION_ORDER_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.production_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PRODUCTION_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"NAVIGATION.ADJUSTMENTS\\\">Default Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.adjustment_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_ADJUSTMENT_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.PICKING_ORDER_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.picking_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PICKING_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.PACKING_ORDER_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.packing_order_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PACKING_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><h3 \\ntranslate=\\\"CONFIGURATION.INVOICING_DEFAULT_SERIAL_NUMBERS\\\"></h3><div class=\\\"pl-16\\\" layout=\\\"column\\\"><md-input-container \\nclass=\\\"mb-0\\\"><label><span translate=\\\"CONFIGURATION.RETAIL_SIMPLIFIED_INVOICE_DEFAULT_SERIAL_NUMBER\\\">\\nDefault Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.retail_simplified_invoice_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.RETAIL_INVOICE_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.retail_invoice_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\" \\nid=\\\"corrective-invoice-serial-number\\\"><label><span translate=\\\"CONFIGURATION.CORRECTIVE_INVOICE_DEFAULT_SERIAL_NUMBER\\\">\\nDefault Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.corrective_invoice_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_CORRECTIVE_INVOICE\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.WHOLESALE_INVOICE_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span></label>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.wholesale_invoice_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_INVOICE\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.WHOLESALE_PROFORMA_INVOICE_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span>\\n</label><md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.wholesale_proforma_invoice_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PROFORMA_INVOICE\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-0\\\">\\n<label><span translate=\\\"CONFIGURATION.WHOLESALE_QUOTE_INVOICE_DEFAULT_SERIAL_NUMBER\\\">Default Serial Number</span>\\n</label><md-select ng-disabled=\\\"!Session.hasPermission(\\'inventory.configuration.default_serial_numbers.update\\')\\\" \\nng-model=\\\"vm.inventoryConfiguration.wholesale_quote_invoice_default_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_QUOTE\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div></div><div flex \\nhas-permission=\\\"inventory.configuration.default_serial_numbers.update\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancelDefaults()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.saveDefaults()\\\" ng-disabled=\\\"!vm.isValid()\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/documents.html\",\"<div id=\\\"documents\\\" layout=\\\"column\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"INVOICES.INVOICES\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\">\\n<md-input-container class=\\\"pr-20\\\" flex><textarea ng-model=\\\"vm.configuration.invoice_data_protection\\\" \\nclass=\\\"full-width border md-padding\\\" \\nng-readonly=\\\"!Session.hasPermission(\\'app.inventory.configuration.documents.update\\')\\\" type=\\\"text\\\">\\n          </textarea>\\n<label translate=\\\"CONFIGURATION.INVOICE_DATA_PROTECTION_TEXT\\\"></label><em class=\\\"hint-text\\\">\\n{{\\'CONFIGURATION.INVOICE_DATA_PROTECTION_TEXT_HINT\\' | translate}}</em></md-input-container></div><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex has-permission=\\\"app.inventory.configuration.documents.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></md-card-content>\\n</md-card><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVOICES.PROFORMAS\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\"><md-input-container class=\\\"pr-20\\\" flex>\\n<textarea ng-model=\\\"vm.configuration.proforma_data_protection\\\" class=\\\"full-width border md-padding\\\" \\nng-readonly=\\\"!Session.hasPermission(\\'app.inventory.configuration.documents.update\\')\\\" type=\\\"text\\\">\\n          </textarea>\\n<label translate=\\\"CONFIGURATION.PROFORMA_DATA_PROTECTION_TEXT\\\"></label><em class=\\\"hint-text\\\">\\n{{\\'CONFIGURATION.PROFORMA_DATA_PROTECTION_TEXT_HINT\\' | translate}}</em></md-input-container></div><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex has-permission=\\\"app.inventory.configuration.documents.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></md-card-content>\\n</md-card><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"INVOICES.QUOTES\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\"><md-input-container class=\\\"pr-20\\\" flex>\\n<textarea ng-model=\\\"vm.configuration.quote_data_protection\\\" class=\\\"full-width border md-padding\\\" \\nng-readonly=\\\"!Session.hasPermission(\\'app.inventory.configuration.documents.update\\')\\\" type=\\\"text\\\">\\n          </textarea>\\n<label translate=\\\"CONFIGURATION.QUOTE_DATA_PROTECTION_TEXT\\\"></label><em class=\\\"hint-text\\\">\\n{{\\'CONFIGURATION.QUOTE_DATA_PROTECTION_TEXT_HINT\\' | translate}}</em></md-input-container></div><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex has-permission=\\\"app.inventory.configuration.documents.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/email.html\",\"<div id=\\\"email\\\" layout=\\\"column\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"COMPANY.EMAIL_INFORMATION\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"emailForm\\\" class=\\\"md-inline-form\\\" novalidate autocomplete=\\\"off\\\"><div layout=\\\"row\\\" layout-wrap><md-input-container\\n flex=\\\"100\\\" flex-gt-xs=\\\"50\\\"><label translate=\\\"COMPANY.EMAIL_HOST\\\"></label><input type=\\\"text\\\" name=\\\"email_host\\\" \\nng-model=\\\"vm.company.email_host\\\" required has-permission-else-disable=\\\"app.inventory.configuration.email.update\\\"><div \\nng-messages=\\\"emailForm.email_host.$error\\\" ng-show=\\\"emailForm.email_host.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-xs=\\\"50\\\"><label translate=\\\"COMPANY.EMAIL_HOST_EMAIL\\\"></label><input type=\\\"text\\\" \\nname=\\\"email_host_email\\\" ng-model=\\\"vm.company.email_host_email\\\" required \\nhas-permission-else-disable=\\\"app.inventory.configuration.email.update\\\"><div \\nng-messages=\\\"emailForm.email_host_email.$error\\\" ng-show=\\\"emailForm.email_host_email.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-xs=\\\"50\\\"><label translate=\\\"COMPANY.EMAIL_HOST_USER\\\"></label><input type=\\\"text\\\" \\nname=\\\"email_host_user\\\" ng-model=\\\"vm.company.email_host_user\\\" required \\nhas-permission-else-disable=\\\"app.inventory.configuration.email.update\\\"><div \\nng-messages=\\\"emailForm.email_host_user.$error\\\" ng-show=\\\"emailForm.email_host_user.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-xs=\\\"50\\\"><label translate=\\\"COMPANY.EMAIL_HOST_PASS\\\"></label><input \\ntype=\\\"password\\\" name=\\\"email_host_pass\\\" ng-model=\\\"vm.company.email_host_pass\\\" required \\nhas-permission-else-disable=\\\"app.inventory.configuration.email.update\\\"><div \\nng-messages=\\\"emailForm.email_host_pass.$error\\\" ng-show=\\\"emailForm.email_host_pass.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex=\\\"50\\\"><label translate=\\\"COMPANY.EMAIL_HOST_PORT\\\"></label><input \\ntype=\\\"number\\\" name=\\\"email_host_port\\\" ng-model=\\\"vm.company.email_host_port\\\" required \\nhas-permission-else-disable=\\\"app.inventory.configuration.email.update\\\"><div \\nng-messages=\\\"emailForm.email_host_port.$error\\\" ng-show=\\\"emailForm.email_host_port.$touched\\\" role=\\\"alert\\\"><div \\nng-message=\\\"required\\\"><span translate=\\\"COMPANY.FIELD_REQUIRED\\\"></span></div></div></md-input-container><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pl-10\\\"><md-checkbox ng-model=\\\"vm.company.email_host_use_tls\\\" \\nclass=\\\"pr-10\\\" has-permission-else-disable=\\\"app.inventory.configuration.email.update\\\">\\n{{ \\\"COMPANY.EMAIL_HOST_USE_TLS\\\" | translate }}</md-checkbox><md-checkbox ng-model=\\\"vm.company.email_host_use_ssl\\\" \\nhas-permission-else-disable=\\\"app.inventory.configuration.email.update\\\">{{ \\\"COMPANY.EMAIL_HOST_USE_SSL\\\" | translate}}\\n</md-checkbox></div></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nhas-permission=\\\"app.inventory.configuration.email.update\\\"><md-button aria-label=\\\"Send\\\" ng-click=\\\"vm.test()\\\" \\nclass=\\\"md-primary stroked\\\" ng-disabled=\\\"emailForm.$dirty\\\" translate=\\\"CONFIGURATION.SEND_TEST_EMAIL\\\">Send testing email\\n</md-button><md-button aria-label=\\\"Cancel\\\" ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" ng-disabled=\\\"emailForm.$pristine\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-primary md-raised\\\" aria-label=\\\"Save\\\" \\nng-disabled=\\\"emailForm.$invalid || emailForm.$pristine\\\" \\nhas-permission-else-disable=\\\"app.inventory.configuration.email.update\\\" translate=\\\"GENERAL.SAVE\\\" , ng-click=\\\"vm.save()\\\">\\nSave</md-button></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/loyalty.html\",\"<div id=\\\"company-balance-config\\\" layout=\\\"column\\\"><div layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><div flex=\\\"66\\\" \\nlayout=\\\"column\\\"><md-card class=\\\"loyalty-card\\\"><md-card-content class=\\\"md-padding\\\"><md-switch \\nng-model=\\\"vm.configurationData.default_contact_balance_ratio_active\\\" ng_disabled=\\\"vm.saving\\\" class=\\\"mt-0\\\" \\nng-change=\\\"vm.saveLoyaltyConfiguration()\\\">{{\\'CONFIGURATION.ACTIVATE_BALANCE_ACCUMULATION\\' | translate}}</md-switch><div\\n layout=\\\"column\\\" class=\\\"mb-16\\\"><div layout=\\\"row\\\" class=\\\"mb-8\\\"><div layout=\\\"column\\\" class=\\\"mr-8\\\"><span>\\n{{\\'CONFIGURATION.BALANCE_RATIO_MESSAGE\\' | translate}}</span> <span \\ntranslate=\\\"CONFIGURATION.BALANCE_RATIO_RECOMMENDATION\\\" class=\\\"secondary-text font-size-12\\\"></span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"balance-ratio-container\\\"><input type=\\\"number\\\" min=\\\"0\\\" max=\\\"100\\\" \\nname=\\\"balance-ratio\\\" ng-model=\\\"vm.configurationData.default_contact_balance_ratio\\\" \\nng-disabled=\\\"!vm.configurationData.default_contact_balance_ratio_active || vm.saving\\\" \\nhas-permission-else-disable=\\\"inventory.configuration.loyalty.update\\\" ng-blur=\\\"vm.saveLoyaltyConfiguration()\\\" \\nstep=\\\"0.01\\\" class=\\\"text-right nd-input w-70\\\" \\nng-class=\\\"{\\'active-balance-ratio-input\\': vm.configurationData.default_contact_balance_ratio_active}\\\"> %</div></div><div\\n layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-8\\\"></md-icon><div layout=\\\"column\\\" flex><span \\nflex class=\\\"did-you-know-title\\\">{{\\'GENERAL.EXAMPLE\\' | translate}} </span><span flex \\nclass=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'CONFIGURATION.BALANCE_RATIO_EXAMPLE\\' | translate: {balanceRatio: vm.configurationData.default_contact_balance_ratio, exampleAccumulated: vm.exampleAccumulated(50)}\\\">\\n</span></div></div></div><md-switch ng-model=\\\"vm.configurationData.accumulate_balance_when_balance_discount\\\" \\nng_disabled=\\\"!vm.configurationData.default_contact_balance_ratio_active || vm.saving\\\" class=\\\"mt-0\\\" \\nng-change=\\\"vm.saveLoyaltyConfiguration()\\\">{{\\'CONFIGURATION.ACCUMULATE_ON_SALES_WITH_BALANCE_DISCOUNT\\' | translate}}\\n</md-switch><div layout=\\\"column\\\" class=\\\"mb-16\\\"><md-switch ng-model=\\\"vm.configurationData.loyalty_rounding\\\" \\nng_disabled=\\\"vm.saving\\\" class=\\\"mt-0 mb-8\\\" ng-change=\\\"vm.saveLoyaltyConfiguration()\\\">\\n{{\\'CONFIGURATION.ACTIVATE_LOYALTY_ROUNDING\\' | translate}}</md-switch><div layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-8\\\"></md-icon><div layout=\\\"column\\\" flex><span flex \\nclass=\\\"did-you-know-title\\\">{{\\'GENERAL.EXAMPLE\\' | translate}} </span><span flex \\nclass=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'CONFIGURATION.LOYALTY_ROUNDING_EXAMPLE\\' | translate\\\"></span></div></div></div></md-card-content>\\n</md-card><md-card><md-card-title><md-card-title-text layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"CONFIGURATION.LOYALTY_BY_CATEGORIES\\\"></span><nd-new-feature-badge id=\\\"INVENTORY_LOYALTY_BY_CATEGORIES\\\">\\n</nd-new-feature-badge></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\"><md-input-container \\nclass=\\\"nd-search-input\\\" flex=\\\"100\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"sales-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"CONFIGURATION.SEARCH_CATEGORY\\\" type=\\\"text\\\"></md-input-container></div><span flex></span>\\n<md-button class=\\\"m-5 w-40 h-40 md-primary\\\" ng-click=\\\"vm.openAdvancedCategorySearch()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\\\" class=\\\"md-primary\\\"></md-icon></div>\\n<md-tooltip>{{\\'PRODUCT.ADD_CATEGORY\\' | translate}}</md-tooltip></md-button><md-button class=\\\"m-5 w-40 h-40 md-primary\\\" \\nng-click=\\\"vm.openCategoryMassivePercentage()\\\" ng-disabled=\\\"vm.noneChecked()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"md-primary\\\" md-font-icon=\\\"icon-pencil\\\"></md-icon></div><md-tooltip>\\n{{\\'PRODUCTS.BULK_EDIT\\' | translate}}</md-tooltip></md-button></div></md-card-content><div \\nclass=\\\"content no-padding uid-grid-container\\\"><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-pagination \\nui-grid-resize-columns ui-grid-save-state ui-grid-auto-resize ui-grid-selection ui-grid-pinning class=\\\"grid\\\" \\nstyle=\\\"height: 100%; overflow: hidden\\\"></div></div></md-card></div><div class=\\\"did-you-know md-margin loyalty-card\\\" \\nflex=\\\"33\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\" class=\\\"mb-8\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon><span class=\\\"did-you-know-title\\\">\\n{{\\'CONFIGURATION.LOYALTY_INFO_TITLE\\' | translate}}</span></div><div class=\\\"did-you-know-message\\\"><span \\ntranslate=\\\"CONFIGURATION.LOYALTY_INFO_MESSAGE_HEADER\\\"></span><ul class=\\\"pl-24\\\"><li><span \\ntranslate=\\\"CONFIGURATION.LOYALTY_INFO_MESSAGE_ITEM_1\\\"></span></li><li><span \\ntranslate=\\\"CONFIGURATION.LOYALTY_INFO_MESSAGE_ITEM_2\\\"></span></li><li><span \\ntranslate=\\\"CONFIGURATION.LOYALTY_INFO_MESSAGE_ITEM_3\\\"></span></li><li><span \\ntranslate=\\\"CONFIGURATION.LOYALTY_INFO_MESSAGE_ITEM_4\\\"></span></li></ul></div></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/mail-templates.html\",\"<div id=\\\"balance\\\" layout=\\\"column\\\"><md-card><md-card-title class=\\\"p-6\\\"><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"CONFIGURATION.POS_ORDER_MAIL_TEMPLATE\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"PosOrderMailTemplateForm\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"vm.save(false)\\\"><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"column\\\"><p translate=\\\"CONFIGURATION.POS_ORDER_MAIL_TEMPLATE_INFO\\\" class=\\\"mt-0\\\"></p><md-input-container \\nclass=\\\"w-400\\\"><label translate=\\\"CONFIGURATION.EMAIL_SUBJECT\\\"></label><input type=\\\"text\\\" name=\\\"pos-order-email-subject\\\" \\nng-model=\\\"vm.posOrderEmailSubject\\\" class=\\\"mt-0\\\"></md-input-container><div class=\\\"secondary-text m-0 mb-10\\\"><label \\ntranslate=\\\"CONFIGURATION.EMAIL_BODY\\\"></label>:</div><text-angular ng-change=\\\"vm.normalizeHTML(vm.posOrderEmailBody)\\\" \\nta-toolbar=\\\"vm.taToolbar\\\" ng-model=\\\"vm.posOrderEmailBody\\\"></text-angular></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex><md-input-container class=\\\"mb-0 w-200\\\"><label translate=\\\"CONFIGURATION.TEST_EMAIL\\\">\\n</label><input type=\\\"email\\\" name=\\\"emailTest\\\" ng-model=\\\"vm.emailTestPosOrder\\\"></md-input-container><div layout=\\\"column\\\">\\n<md-button class=\\\"md-primary\\\" aria-label=\\\"Enviar email de prueba\\\" ng-click=\\\"vm.sendTestEmail(false)\\\" \\nng-disabled=\\\"!vm.emailTestPosOrder\\\" translate=\\\"CONFIGURATION.SEND_TEST_EMAIL\\\">Enviar email de prueba</md-button></div>\\n<span flex></span><md-button aria-label=\\\"Cancel\\\" ng-click=\\\"vm.cancel(false)\\\" class=\\\"stroked\\\" \\nng-disabled=\\\"PosOrderMailTemplateForm.$pristine\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button type=\\\"submit\\\" \\nclass=\\\"md-primary md-raised\\\" aria-label=\\\"Save\\\" \\nng-disabled=\\\"PosOrderMailTemplateForm.$invalid || PosOrderMailTemplateForm.$pristine\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></div></form></md-card-content></md-card><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"CONFIGURATION.POS_ORDER_INVOICE_MAIL_TEMPLATE\\\"></span></md-card-title-text></md-card-title><md-card-content>\\n<form name=\\\"PosOrderInvoiceMailTemplateForm\\\" class=\\\"md-inline-form\\\" novalidate ng-submit=\\\"vm.save(true)\\\"><div \\nlayout=\\\"column\\\"><p class=\\\"mt-0\\\" translate=\\\"CONFIGURATION.POS_ORDER_INVOICE_MAIL_TEMPLATE_INFO\\\"></p><md-input-container \\nclass=\\\"w-400\\\"><label translate=\\\"CONFIGURATION.EMAIL_SUBJECT\\\"></label><input type=\\\"text\\\" \\nname=\\\"pos-order-invoice-email-subject\\\" ng-model=\\\"vm.posOrderInvoiceEmailSubject\\\" class=\\\"mt-0\\\"></md-input-container><div\\n class=\\\"secondary-text m-0 mb-10\\\"><label translate=\\\"CONFIGURATION.EMAIL_BODY\\\"></label>:</div><text-angular \\nng-change=\\\"vm.normalizeHTML(vm.posOrderInvoiceEmailBody)\\\" ta-toolbar=\\\"vm.taToolbar\\\" \\nng-model=\\\"vm.posOrderInvoiceEmailBody\\\"></text-angular></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex>\\n<md-input-container class=\\\"mb-0 w-200\\\"><label translate=\\\"CONFIGURATION.TEST_EMAIL\\\"></label><input type=\\\"email\\\" \\nname=\\\"emailTest\\\" ng-model=\\\"vm.emailTestPosOrderInvoice\\\"></md-input-container><div layout=\\\"column\\\"><md-button \\nclass=\\\"md-primary\\\" aria-label=\\\"Enviar email de prueba\\\" ng-click=\\\"vm.sendTestEmail(true)\\\" \\nng-disabled=\\\"!vm.emailTestPosOrderInvoice\\\" translate=\\\"CONFIGURATION.SEND_TEST_EMAIL\\\">Enviar email de prueba</md-button>\\n</div><span flex></span><md-button aria-label=\\\"Cancel\\\" ng-click=\\\"vm.cancel(true)\\\" class=\\\"stroked\\\" \\nng-disabled=\\\"PosOrderInvoiceMailTemplateForm.$pristine\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\ntype=\\\"submit\\\" class=\\\"md-primary md-raised\\\" aria-label=\\\"Save\\\" \\nng-disabled=\\\"PosOrderInvoiceMailTemplateForm.$invalid || PosOrderInvoiceMailTemplateForm.$pristine\\\" \\ntranslate=\\\"GENERAL.SAVE\\\">Save</md-button></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/payment-methods.html\",\"<div id=\\\"payment-methods\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\">\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/pricing-tiers.html\",\"<div id=\\\"pricingTiers\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\"><md-card-title\\n class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/seasons.html\",\"<div id=\\\"seasons\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\"><md-card-title \\nclass=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/serial-number-types.html\",\"<div id=\\\"serial-number-types\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\">\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" layout-fill datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/shipping-boxes.html\",\"<div id=\\\"shipping-boxes\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\">\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/shipping-methods.html\",\"<div id=\\\"shipping-methods\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\">\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/stocks-optimization.html\",\"<div id=\\\"stocks-optimization\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><div layout=\\\"column\\\" flex=\\\"70\\\"><md-card>\\n<md-card-title><md-card-title-text><h3 class=\\\"mt-0\\\" translate=\\\"INVENTORY_CONFIGURATION.GENERAL_PLANNING_CONFIGURATION\\\">\\n</h3></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div layout=\\\"row\\\" \\nflex class=\\\"pr-16\\\" layout-align=\\\"start center\\\"><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.ANALYSIS_PERIOD_DAYS\\\"></label><div layout=\\\"row\\\"><input type=\\\"number\\\" \\nname=\\\"analysis_period_days\\\" min=\\\"0\\\" ng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\" \\nng-model=\\\"vm.configurationData.analysis_period_days\\\" class=\\\"text-right\\\"></div></md-input-container><span>\\n{{\\'INVENTORY_CONFIGURATION.DAYS\\' | translate}}</span></div><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.REPLENISHMENT_WAREHOUSE\\\"></label><md-select \\nng-model=\\\"vm.configurationData.replenishment_warehouse\\\" ng-init=\\\"vm.initWarehouseSelect()\\\" \\nng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{trackBy: \\'$value\\'}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses\\\" value=\\\"{{warehouse.id}}\\\">{{warehouse.name}}</md-option></md-select>\\n</md-input-container></div><h3 translate=\\\"INVENTORY_CONFIGURATION.REPLENISHMENTS_CONFIGURATION\\\"></h3><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div layout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16\\\" layout-align=\\\"start center\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.ORDER_FREQUENCY_DAYS\\\"></label><div layout=\\\"row\\\">\\n<input type=\\\"number\\\" min=\\\"0\\\" name=\\\"order_frequency_days\\\" ng-blur=\\\"vm.saveStockOptimization()\\\" \\nng-model=\\\"vm.configurationData.order_frequency_days\\\" class=\\\"text-right\\\"></div></md-input-container><span>\\n{{\\'INVENTORY_CONFIGURATION.DAYS\\' | translate}}</span></div><div layout=\\\"row\\\" flex=\\\"50\\\" layout-align=\\\"start center\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.TRANSFER_LEAD_TIME_DAYS\\\"></label><div layout=\\\"row\\\">\\n<input type=\\\"number\\\" min=\\\"0\\\" name=\\\"transfer_lead_time_days\\\" ng-blur=\\\"vm.saveStockOptimization()\\\" \\nng-model=\\\"vm.configurationData.transfer_lead_time_days\\\" class=\\\"text-right\\\"></div></md-input-container><span>\\n{{\\'INVENTORY_CONFIGURATION.DAYS\\' | translate}}</span></div></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div \\nlayout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16\\\" layout-align=\\\"start center\\\"><md-input-container flex><label \\ntranslate=\\\"PLANNING.MAX_TOTAL_OVER_EXCEED_PERCENTAGE\\\"></label><div layout=\\\"row\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nname=\\\"replenishment_max_total_overexceed_percentage\\\" ng-blur=\\\"vm.saveStockOptimization()\\\" \\nng-model=\\\"vm.configurationData.replenishment_max_total_overexceed_percentage\\\" class=\\\"text-right\\\"></div>\\n</md-input-container><span>%</span></div><div layout=\\\"row\\\" flex=\\\"50\\\"><md-input-container flex><label \\ntranslate=\\\"PLANNING.DELIVERY_DAYS\\\"></label><md-select ng-model=\\\"vm.configurationData.delivery_days\\\" \\nng-blur=\\\"vm.saveStockOptimization()\\\" multiple=\\\"multiple\\\"><md-option ng-value=\\\"deliveryDay\\\" \\nng-repeat=\\\"deliveryDay in vm.deliveryDays\\\">{{ (\\'GENERAL.\\' + (deliveryDay | uppercase)) | translate }}</md-option>\\n</md-select></md-input-container></div></div><h3 translate=\\\"INVENTORY_CONFIGURATION.REORDER_CONFIGURATION\\\"></h3><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div layout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16\\\" layout-align=\\\"start center\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.PURCHASE_ORDER_FREQUENCY\\\"></label><div layout=\\\"row\\\">\\n<input type=\\\"number\\\" min=\\\"0\\\" name=\\\"purchase_order_frequency_days\\\" ng-change=\\\"vm.saveStockOptimization()\\\" \\nng-model-options=\\\"{debounce:500}\\\" ng-model=\\\"vm.configurationData.purchase_order_frequency_days\\\" class=\\\"text-right\\\">\\n</div></md-input-container><span>{{\\'INVENTORY_CONFIGURATION.DAYS\\' | translate}}</span></div><div layout=\\\"row\\\" \\nflex=\\\"50\\\" layout-align=\\\"start center\\\"><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.PURCHASE_LEAD_TIME_DAYS\\\"></label><div layout=\\\"row\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nname=\\\"purchase_lead_time_days\\\" ng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\" \\nng-model=\\\"vm.configurationData.purchase_lead_time_days\\\" class=\\\"text-right\\\"></div></md-input-container><span>\\n{{\\'INVENTORY_CONFIGURATION.DAYS\\' | translate}}</span></div></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div \\nlayout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16\\\" layout-align=\\\"start center\\\"><md-input-container class=\\\"mb-0\\\"><div layout=\\\"row\\\">\\n<md-checkbox ng-model=\\\"vm.configurationData.only_replenishment_stock_for_coverage\\\" \\nng-blur=\\\"vm.saveStockOptimization()\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"INVENTORY_CONFIGURATION.ONLY_REPLENISHMENT_STOCK_FOR_COVERAGE\\\"></span></md-checkbox></div>\\n</md-input-container></div></div></md-card-content></md-card></div><div class=\\\"did-you-know md-margin\\\" flex=\\\"30\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\" class=\\\"mb-8\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon><span class=\\\"did-you-know-title\\\">\\n{{\\'INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_TITLE\\' | translate}}</span></div><div class=\\\"did-you-know-message\\\">\\n<span>{{\\'INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_TITLE_MESSAGE_1\\' | translate}}</span><ul class=\\\"pl-24\\\"><li \\ntranslate=\\\"INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_MESSAGE_1\\\"></li></ul><span>\\n{{\\'INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_TITLE_MESSAGE_2\\' | translate}}</span><ul class=\\\"pl-24\\\"><li \\ntranslate=\\\"INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_MESSAGE_2\\\"></li></ul><span>\\n{{\\'INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_TITLE_MESSAGE_3\\' | translate}}</span><ul class=\\\"pl-24\\\"><li \\ntranslate=\\\"INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_MESSAGE_3\\\"></li></ul><span>\\n{{\\'INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_TITLE_MESSAGE_4\\' | translate}}</span><ul class=\\\"pl-24\\\"><li \\ntranslate=\\\"INVENTORY_CONFIGURATION.OPTIMIZATION_INFO_CARD_MESSAGE_4\\\"></li></ul><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button ng-href=\\\"{{vm.academyLink}}\\\" target=\\\"_blank\\\" class=\\\"md-primary\\\"><div \\nlayout=\\\"row\\\"><span translate=\\\"GENERAL.MORE_INFO\\\"></span><md-icon md-font-icon=\\\"icon-open-in-new s16\\\" class=\\\"ml-8\\\">\\n</md-icon></div></md-button></div></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/tags.html\",\"<div id=\\\"tags\\\" layout=\\\"column\\\"><md-card><md-card-content><div layout=\\\"row\\\" class=\\\"mb-20\\\"><md-chips \\nng-model=\\\"vm.configuration.tags\\\" placeholder=\\\"{{\\'CONFIGURATION.TYPE_A_TAG\\' | translate}}\\\" \\nsecondary-placeholder=\\\"{{\\'CONFIGURATION.TYPE_ANOTHER_TAG\\' | translate}}\\\" \\ndelete-button-label=\\\"{{\\'CONFIGURATION.DELETE_TAG\\' | translate}}\\\" \\ndelete-hint=\\\"{{\\'CONFIGURATION.TAG_DELETE_HINT\\' | translate}}\\\" \\nreadonly=\\\"!Session.hasPermission(\\'inventory.configuration.tags.update\\')\\\" class=\\\"pr-20\\\" flex></md-chips></div><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex has-permission=\\\"inventory.configuration.tags.update\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/taxes.html\",\"<div id=\\\"taxes\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\"><md-card-title \\nclass=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/ticket-templates.html\",\"<div id=\\\"ticket-templates\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\">\\n<md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" \\nmd-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"input-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" \\ntype=\\\"text\\\"></md-input-container></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/variants.html\",\"<div flex id=\\\"variants\\\" layout=\\\"row\\\" layout-fill><div class=\\\"p-8\\\" flex=\\\"50\\\" layout-fill><md-card layout=\\\"column\\\" \\nlayout-fill><md-card-title class=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container \\nclass=\\\"nd-search-input\\\" md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nid=\\\"variant-category-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchVariantCategory\\\" \\nplaceholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table \\nclass=\\\"dataTable row-border hover\\\" datatable dt-columns=\\\"vm.dtColumns\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" id=\\\"datatable-table\\\"></table></md-card-content></md-card></div><div class=\\\"p-8\\\" flex=\\\"50\\\" \\nlayout-fill><md-card layout-fill><md-card-title class=\\\"p-6\\\"><div layout=\\\"row\\\"><md-input-container \\nclass=\\\"nd-search-input\\\" md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" \\nid=\\\"variant-search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchVariant\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container></div></md-card-title><md-card-content \\nclass=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\" ng-if=\\\"vm.selectedVariantCategory\\\"><table \\nclass=\\\"dataTable row-border hover\\\" datatable dt-columns=\\\"vm.dtColumns2\\\" dt-instance=\\\"vm.dtInstance2\\\" \\ndt-options=\\\"vm.dtOptions2\\\" id=\\\"datatable-table2\\\"></table></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/tabs/webhooks.html\",\"<div id=\\\"webhooks\\\" layout=\\\"column\\\" class=\\\"p-8\\\" layout-fill flex><md-card layout-fill layout=\\\"column\\\"><md-card-title \\nclass=\\\"p-6\\\"><md-card-title-text><div layout=\\\"row\\\"><md-input-container class=\\\"nd-search-input\\\" md-no-float><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" id=\\\"variant-category-search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchVariantCategory\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container></div></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"fullpage-datatable border-top p-0\\\" flex=\\\"100\\\"><table \\nclass=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/labels-generator/subviews/label-preview.html\",\"<div class=\\\"label-size-real-preview white-bg md-whiteframe-2dp\\\" flex layout=\\\"row\\\" \\nng-class=\\\"{\\'layout-align-center-center\\': !vm.productLabelDesign.page_layout == \\'custom\\' }\\\" \\nstyle=\\\"{{vm.getLabelPreviewStyle()}}\\\"><div style=\\\"height: 100%; width: 100%\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\') && vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_align === \\'top\\'\\\">\\n<img src=\\\"/assets/images/example-barcode-with-numbers.eb49f29c.png\\\" \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\"> \\n<img src=\\\"/assets/images/example-barcode.3bf8158e.png\\\" \\nng-if=\\\"!vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\">\\n</div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"full-width\\\"><div \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\') && vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_align === \\'left\\'\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"20\\\"><img src=\\\"/assets/images/example-barcode-with-numbers.eb49f29c.png\\\" \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\"> \\n<img src=\\\"/assets/images/example-barcode.3bf8158e.png\\\" \\nng-if=\\\"!vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\">\\n</div><div layout=\\\"column\\\" flex><div ng-repeat=\\\"field in vm.productLabelDesign.fields track by $index\\\" \\nstyle=\\\"{{vm.getStyleFromPreviewProductVariant(field)}}\\\">{{vm.getFieldFromPreviewProductVariant(field)}}</div></div><div\\n \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\') && vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_align === \\'right\\'\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"20\\\"><img src=\\\"/assets/images/example-barcode-with-numbers.eb49f29c.png\\\" \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\"> \\n<img src=\\\"/assets/images/example-barcode.3bf8158e.png\\\" \\nng-if=\\\"!vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\">\\n</div><div ng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'image\\')\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"20\\\"><img src=\\\"/assets/images/package-variant-closed.9c71cbbe.png\\\" class=\\\"grey-200-bg\\\"></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\') && vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_align === \\'bottom\\'\\\">\\n<img src=\\\"/assets/images/example-barcode-with-numbers.eb49f29c.png\\\" \\nng-if=\\\"vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\"> \\n<img src=\\\"/assets/images/example-barcode.3bf8158e.png\\\" \\nng-if=\\\"!vm.productLabelDesign.getFieldByFieldName(\\'barcode\\').barcode_numbers\\\" style=\\\"{{vm.getPreviewBarcodeStyle()}}\\\">\\n</div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/labels-generator/subviews/page-label-preview.html\",\"<div ng-if=\\\"!vm.productLabelDesign.isButterfly()\\\" class=\\\"label-size-preview md-whiteframe-1dp mr-24\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" style=\\\"{{vm.getLabelPreviewStyle()}}\\\"><div style=\\\"height: 100%; width: 100%\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"></div></div><div layout=\\\"row\\\" ng-if=\\\"vm.productLabelDesign.isButterfly()\\\"><div \\nclass=\\\"butterfly-design\\\" ng-class=\\\"vm.productLabelDesign.page_layout\\\" style=\\\"{{vm.getButterflyRowStyle()}}\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div ng-repeat=\\\"cell in [0, 1, 2, 3, 4] track by $index\\\" \\nclass=\\\"cell cell-{{cell}}\\\" layout=\\\"row\\\" style=\\\"{{vm.getButterflyCellStyle(cell)}}\\\" layout-align=\\\"center center\\\">\\n{{vm.getPartNumber(cell)}}&nbsp;</div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/labels-generator/subviews/page-preview.html\",\"<div \\nclass=\\\"page-layout-preview md-whiteframe-1dp {{vm.productLabelDesign.page_size}} {{vm.productLabelDesign.page_layout}}\\\" \\nstyle=\\\"{{vm.getSheetPreviewMarginStyle()}}\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><table \\nstyle=\\\"height: 100%; width: 100%\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\"><tr ng-repeat=\\\"row in vm.getTableRows()\\\"><td \\nng-repeat=\\\"col in vm.getTableCols()\\\" class=\\\"cursor-pointer\\\" ng-click=\\\"vm.setSkipped($parent.$index, $index)\\\" \\nstyle=\\\"{{vm.getLabelRowStyle()}}\\\" \\nng-class=\\\"{\\n                      \\'skiped\\': vm.isSkiped($parent.$index, $index),\\n                      \\'print-grid\\': vm.productLabelDesign.print_grid,\\n                      \\'md-red-50-bg\\': ($parent.$index > 0 || $index > 0) && vm.productLabelDesign.one_label_per_page}\\\">\\n</td></tr></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/labels-generator/warehouse-select-dialog/warehouse-select-dialog.html\",\"<md-dialog class=\\\"w-350\\\"><md-dialog-content ms-scroll><h2 class=\\\"md-title\\\">\\n{{\\'LABELS_GENERATOR.SELECT_WAREHOUSE\\' | translate}}</h2><div>{{\\'LABELS_GENERATOR.SELECT_WAREHOUSE_MSG\\' | translate}}\\n</div><md-input-container class=\\\"md-icon-float md-block\\\"><label>{{\\'LABELS_GENERATOR.WAREHOUSE\\' | translate}}</label>\\n<md-icon md-font-icon=\\\"icon-store\\\"></md-icon><md-select ng-model=\\\"vm.warehouse\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon md-font-icon=\\\"icon-magnify\\\" style=\\\"cursor:pointer; top: 0px\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\">\\n</md-icon><span ng-if=\\\"!vm.selectedProducts.length\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\" \\nstyle=\\\"cursor:pointer\\\" class=\\\"secondary-text pl-35\\\">All products selected</span> <span \\nng-if=\\\"vm.selectedProducts.length\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\" style=\\\"cursor:pointer\\\" class=\\\"pl-35\\\">\\n{{vm.selectedProducts.length}} products selected</span></md-input-container></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button ng-click=\\\"vm.select()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.warehouse\\\" aria-label=\\\"SAVE\\\" translate=\\\"LABELS_GENERATOR.SELECT\\\">Save</md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/bundles.html\",\"<div id=\\\"product-bundles\\\"><nd-bundle-content-variants product=\\\"vm.product\\\" is-new=\\\"false\\\"></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/details.html\",\"<div id=\\\"details\\\"><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div layout=\\\"column\\\" layout-gt-sm=\\\"column\\\" flex>\\n<nd-product-main-information product=\\\"vm.product\\\" compositions=\\\"vm.compositions\\\" collections=\\\"vm.collections\\\" \\ncurrencies=\\\"vm.currencies\\\" save-callback=\\\"vm.saveProductCallback()\\\" cancel-callback=\\\"vm.cancelProductCallback()\\\" \\npricing-tiers=\\\"vm.pricingTiers\\\" variant-categories=\\\"vm.variantCategories\\\" \\ninventory-configuration=\\\"vm.inventoryConfiguration\\\" ecommerce-product-restrictions=\\\"vm.ecommerceProductRestrictions\\\" \\nshow-buttons=\\\"true\\\" is-new=\\\"false\\\"></nd-product-main-information><nd-attributes-card class=\\\"mb-16\\\" \\nproduct=\\\"vm.product\\\" attribute-categories=\\\"vm.attributeCategories\\\"></nd-attributes-card><md-card class=\\\"mb-16\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.DESCRIPTION\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content layout-padding><form name=\\\"descriptionForm\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start end\\\" class=\\\"m-0 mb-10\\\"><label class=\\\"secondary-text\\\" translate=\\\"PRODUCT.DESCRIPTION_SHORT\\\"></label>\\n: <span flex></span><md-button ng-click=\\\"vm.toggleDescriptionWidget(false)\\\" class=\\\"cursor-pointer md-primary\\\" \\nng-if=\\\"!vm.showDescriptionCustomTextArea\\\">{{\\\"PRODUCT.TOGGLE_TO_PLAIN_DESCRIPTION_EDITOR\\\" | translate}}</md-button>\\n<md-icon md-font-icon=\\\"icon-information-outline\\\" ng-if=\\\"!vm.showDescriptionCustomTextArea\\\" class=\\\"ml-5\\\"><md-tooltip>\\n{{\\\"PRODUCT.TOGGLE_PLAIN_DESCRIPTION_EDITOR_INFO\\\" | translate}}</md-tooltip></md-icon><md-button \\nng-click=\\\"vm.toggleDescriptionWidget(false)\\\" ng-if=\\\"vm.showDescriptionCustomTextArea\\\" \\nclass=\\\"cursor-pointer md-primary\\\" translate=\\\"PRODUCT.TOGGLE_TO_HTML_DESCRIPTION_EDITOR\\\"></md-button></div><text-angular\\n ng-if=\\\"!vm.showDescriptionCustomTextArea\\\" ng-paste=\\\"vm.descriptionPasted=true;\\\" ng-blur=\\\"vm.normalizeHTML(\\'short\\')\\\" \\nta-toolbar=\\\"vm.taToolbar\\\" ng-model=\\\"vm.product.description\\\"></text-angular><textarea \\nng-if=\\\"vm.showDescriptionCustomTextArea\\\" class=\\\"full-width border md-padding\\\" ng-model=\\\"vm.product.description\\\">\\n</textarea><div class=\\\"did-you-know warning-message md-margin\\\" \\nng-if=\\\"vm.product.description.length >= vm.ecommerceProductRestrictions[\\'description_short\\'][\\'min_length\\']\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"amber-fg\\\"></md-icon></div><span class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.DESCRIPTION_SHORT_WARNING\\\" \\ntranslate-values=\\\"{min_length: vm.ecommerceProductRestrictions[\\'description_short\\'][\\'min_length\\']}\\\"></span></div></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start end\\\" class=\\\"m-0 mt-30 mb-10\\\"><label class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.DESCRIPTION_LONG\\\"></label>: <span flex></span><md-button \\nng-click=\\\"vm.toggleDescriptionWidget(true)\\\" class=\\\"cursor-pointer md-primary\\\" \\nng-if=\\\"!vm.showLongDescriptionCustomTextArea\\\">{{\\\"PRODUCT.TOGGLE_TO_PLAIN_DESCRIPTION_EDITOR\\\" | translate}}</md-button>\\n<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\" ng-if=\\\"!vm.showLongDescriptionCustomTextArea\\\">\\n<md-tooltip>{{\\\"PRODUCT.TOGGLE_PLAIN_DESCRIPTION_EDITOR_INFO\\\" | translate}}</md-tooltip></md-icon><md-button \\nng-click=\\\"vm.toggleDescriptionWidget(true)\\\" ng-if=\\\"vm.showLongDescriptionCustomTextArea\\\" \\nclass=\\\"cursor-pointer md-primary\\\" translate=\\\"PRODUCT.TOGGLE_TO_HTML_DESCRIPTION_EDITOR\\\"></md-button></div><text-angular\\n ng-if=\\\"!vm.showLongDescriptionCustomTextArea\\\" ng-paste=\\\"vm.descriptionPasted=true;\\\" \\nng-blur=\\\"vm.normalizeHTML(\\'long\\')\\\" ta-toolbar=\\\"vm.taToolbar\\\" ng-model=\\\"vm.product.description_long\\\"></text-angular>\\n<textarea ng-if=\\\"vm.showLongDescriptionCustomTextArea\\\" class=\\\"full-width border md-padding\\\" \\nng-model=\\\"vm.product.description_long\\\"></textarea></form></md-card-content></md-card><nd-product-planning-configuration\\n ng-if=\\\"session.company.has_inventory_analytics\\\" id=\\\"nd-product-planning-config\\\" product=\\\"vm.product\\\">\\n</nd-product-planning-configuration><md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.TRANSLATIONS\\\"></span></md-card-title-text></md-card-title><md-card-content><nd-product-translations \\nproduct=\\\"vm.product\\\" product-translations=\\\"vm.productTranslations\\\"></nd-product-translations></md-card-content>\\n</md-card></div><div layout=\\\"column\\\" flex-gt-sm=\\\"33\\\" flex=\\\"100\\\"><md-card class=\\\"mb-16\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.COVER\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content layout-padding><div id=\\\"product-image-uploader\\\" ng-if=\\\"!vm.product.cover\\\" \\nflow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" flow-files-submitted=\\\"vm.upload($files, $event, $flow)\\\" \\nflow-file-success=\\\"vm.fileSuccess($file, $message)\\\" flow-complete=\\\"vm.uploadComplete()\\\" flow-drop \\nflow-drag-enter=\\\"vm.dropping=true\\\" flow-drag-leave=\\\"vm.dropping=false\\\" ng-class=\\\"{\\'dropping\\':vm.dropping}\\\" \\nclass=\\\"drag\\\"><div class=\\\"drop-text hint-text\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"PRODUCT.DROP_TO_UPLOAD\\\">Drop to upload</span></div><div class=\\\"upload-button\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary md-raised\\\" flow-btn translate=\\\"PRODUCT.UPLOAD_IMAGE\\\" \\ndata-test-id=\\\"addproduct-button-image\\\">Upload Image</md-button><span class=\\\"secondary-text mt-8\\\">\\n{{\\'PRODUCT.UPLOAD_IMAGE_HINT\\' | translate}}</span></div><div ng-if=\\\"vm.product.cover\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center start\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\" flex=\\\"50\\\"></div></div></div><div \\nclass=\\\"product-image\\\" ng-class=\\\"{\\'\\': cover}\\\" ng-if=\\\"vm.product.cover\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nlayout-wrap><img class=\\\"media\\\" ng-show=\\\"vm.product.cover\\\" ng-src=\\\"{{vm.product.cover}}\\\"></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.product.cover\\\"><span flex></span><md-button class=\\\"md-warn stroked\\\" \\nng-click=\\\"vm.deleteCover()\\\" translate=\\\"GENERAL.DELETE\\\">Delete</md-button><md-button \\nclass=\\\"md-primary md-raised no-margin\\\" ng-click=\\\"vm.showModalChangeCover()\\\">\\n{{\\'PRODUCT.CHANGE_COVER_IMAGE\\' | translate}}</md-button></div></md-card-content></md-card></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/ecommerce.html\",\"<div id=\\\"ecommerce\\\"><nd-product-ecommerce product=\\\"vm.product\\\" sites=\\\"vm.sites\\\" site-products=\\\"vm.siteProducts\\\" \\ncancel-callback=\\\"vm.cancelProductCallback()\\\"></nd-product-ecommerce></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/images.html\",\"<div class=\\\"p-8\\\" flex id=\\\"images\\\" layout=\\\"column\\\" layout-fill><md-card layout=\\\"column\\\" layout-fill><md-card-title>\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" translate=\\\"PRODUCT.PRODUCT_IMAGES\\\">\\n</span> <span flex></span><md-button class=\\\"md-primary stroked m-0\\\" ng-click=\\\"vm.uploadDialog($event)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span>\\n{{\\'PRODUCT.UPLOAD_IMAGE\\' | translate}}</span></div></md-button></div><span class=\\\"h3\\\" ng-if=\\\"vm.isBundle\\\">\\n{{vm.selectedImage.product_name}}</span></md-card-title-text></md-card-title><md-card-content flex=\\\"100\\\" \\nlayout=\\\"column\\\"><div flex=\\\"100\\\" flow-complete=\\\"vm.uploadComplete()\\\" flow-drag-enter=\\\"vm.dropping=true\\\" \\nflow-drag-leave=\\\"vm.dropping=false\\\" flow-drop flow-file-success=\\\"vm.fileSuccess($file, $message)\\\" \\nflow-files-added=\\\"vm.filesAdded($files, $event, $flow)\\\" flow-files-submitted=\\\"vm.upload($files, $event, $flow)\\\" \\nflow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" id=\\\"product-image-uploader\\\" layout=\\\"column\\\" \\nng-class=\\\"{\\'dropping\\':vm.dropping}\\\"><div class=\\\"drop-text hint-text\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"PRODUCT.DROP_TO_UPLOAD\\\">Drop to upload</span></div><div class=\\\"upload-button\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"!vm.images.length\\\"><md-button class=\\\"md-primary md-raised\\\" \\ndata-test-id=\\\"addproduct-button-image\\\" flow-btn translate=\\\"PRODUCT.UPLOAD_IMAGE\\\"></md-button><span \\nclass=\\\"secondary-text mt-8\\\">{{\\'PRODUCT.UPLOAD_IMAGE_HINT\\' | translate}}</span></div><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center start\\\" ng-if=\\\"vm.images.length\\\"><div class=\\\"full-height\\\" flex=\\\"50\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><img class=\\\"big-image full-height\\\" ng-if=\\\"vm.firstImageLoaded\\\" \\nsrc=\\\"{{vm.imageZoomOptions.images[0].medium}}\\\"></div><div class=\\\"pl-20\\\" flex=\\\"50\\\" layout=\\\"column\\\"><div \\nstyle=\\\"overflow:scroll\\\" layout=\\\"column\\\"><table class=\\\"images-list\\\"><tbody dnd-list=\\\"vm.visibleImages\\\"><tr \\ndnd-draggable=\\\"image\\\" dnd-effect-allowed=\\\"move\\\" dnd-handle \\ndnd-moved=\\\"vm.changes=true; vm.visibleImages.splice($index, 1); vm.updatePositions();\\\" \\nng-repeat=\\\"image in vm.visibleImages\\\"><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-drag-vertical\\\"></md-icon><div flex><img class=\\\"thumbnail\\\" ng-if=\\\"image.url\\\" \\nng-click=\\\"vm.selectImage(image)\\\" src=\\\"{{image.url}}\\\"><md-progress-circular ng-if=\\\"!image.url\\\" md-diameter=\\\"20\\\" \\nclass=\\\"ml-20\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular><md-tooltip ng-if=\\\"!image.url\\\">\\n{{\\'IMPORT.IMPORTING_IMAGE\\' | translate}}</md-tooltip></div></div></td><td class=\\\"expand\\\"><md-input-container \\nng-if=\\\"image.url\\\" flex><md-select class=\\\"nd-input\\\" md-on-close=\\\"vm.onSelectorClose(image)\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" multiple=\\\"multiple\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.products.product.images.update\\')\\\" ng-model=\\\"image.product_variants\\\" \\nplaceholder=\\\"{{\\'PRODUCT.PRODUCT_VARIANTS\\' | translate}}\\\"><md-select-header layout=\\\"row\\\"><input class=\\\"md-text\\\" flex \\nng-model=\\\"vm.colorSearch[image.id]\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" type=\\\"search\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"productVariant in vm.product.product_variants | filter:{\\'color_name\\': vm.colorSearch[image.id]} | orderBy: [\\'color_name\\', \\'size_name\\'] track by productVariant.id\\\" \\nng-value=\\\"productVariant.id\\\">{{productVariant.color_name}} - {{productVariant.size_name}}</md-option></md-select>\\n</md-input-container></td><td class=\\\"w-200\\\"><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-menu class=\\\"no-margin\\\">\\n<md-button ng-disabled=\\\"!image.url\\\" class=\\\"md-icon-button no-margin\\\" ng-click=\\\"$mdMenu.open($event)\\\"><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/palette-outline.552eddf7.svg\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"4\\\"><md-menu-item ng-repeat=\\\"color in vm.product.color_variants_instances | orderBy: [\\'name\\']\\\">\\n<md-button ng-disabled=\\\"!image.url\\\" ng-click=\\\"vm.selectAllFromColor(image, color)\\\">{{ color.name }} <span \\nclass=\\\"secondary-text\\\">({{\\\"PRODUCT.SELECT_ALL\\\"| translate}})</span></md-button></md-menu-item></md-menu-content>\\n<md-tooltip>{{\\'PRODUCT.SELECT_ALL\\' | translate}}</md-tooltip></md-menu><md-button class=\\\"md-icon-button no-margin\\\" \\nng-disabled=\\\"!image.url\\\" href=\\\"{{image.url}}\\\" target=\\\"_blank\\\"><md-tooltip>{{\\'GENERAL.DOWNLOAD\\' | translate}}\\n</md-tooltip><md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/download-outline.f1f5613e.svg\\\">\\n</md-icon></md-button><md-button class=\\\"md-icon-button no-margin\\\" ng-disabled=\\\"!image.url\\\" \\nng-click=\\\"vm.useAsCover(image)\\\"><md-tooltip>{{\\'PRODUCT.USE_AS_COVER\\' | translate}}</md-tooltip><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sticker-plus-outline.66fff323.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.deleteImage(image)\\\"><md-tooltip>{{\\'GENERAL.DELETE\\' | translate}}\\n</md-tooltip><md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/delete-outline.7530da0d.svg\\\">\\n</md-icon></md-button></div></td></tr></tbody></table></div><div class=\\\"pagination-div\\\" ng-if=\\\"vm.images.length > 10\\\" \\nlayout=\\\"row\\\"><div class=\\\"mr-16\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"vm.goToFirstPage()\\\" ng-disabled=\\\"vm.pagination.pageNumber === 1\\\"><md-icon md-font-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/skip-previous.98ccc477.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.goToPreviousPage()\\\" ng-disabled=\\\"vm.pagination.pageNumber === 1\\\"><md-icon \\nmd-font-icon md-svg-icon=\\\"assets/images/custom-material-design-icons/menu-left.6b533c90.svg\\\"></md-icon></md-button><input \\nclass=\\\"nd-input white\\\" max=\\\"{{vm.pagination.totalPages}}\\\" min=\\\"1\\\" ng-model=\\\"vm.pagination.pageNumber\\\" \\nng-change=\\\"vm.updateVisibleImages()\\\" type=\\\"number\\\"> <span class=\\\"mh-5\\\">/</span> <span class=\\\"mr-5\\\">\\n{{vm.pagination.totalPages}}</span><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.goToNextPage()\\\" \\nng-disabled=\\\"vm.pagination.pageNumber === vm.pagination.totalPages\\\"><md-icon md-font-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/menu-right.b20aba89.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.goToLastPage()\\\" \\nng-disabled=\\\"vm.pagination.pageNumber === vm.pagination.totalPages\\\"><md-icon md-font-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/skip-next.c89ca1d1.svg\\\"></md-icon></md-button></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-select class=\\\"page-size-selector nd-input mr-8 white m-0\\\" \\nng-change=\\\"vm.changePageSize()\\\" ng-model=\\\"vm.pagination.pageSize\\\"><md-option ng-value=\\\"10\\\">10</md-option><md-option \\nng-value=\\\"20\\\">20</md-option><md-option ng-value=\\\"50\\\">50</md-option><md-option ng-value=\\\"100\\\">100</md-option>\\n</md-select></div></div></div></div></div></md-card-content></md-card></div><div style=\\\"visibility: hidden\\\"><div \\nclass=\\\"md-dialog-container\\\" id=\\\"uploadDialog\\\"><md-dialog layout-padding><div flow-complete=\\\"vm.uploadComplete()\\\" \\nflow-drag-enter=\\\"vm.dropping=true\\\" flow-drag-leave=\\\"vm.dropping=false\\\" flow-drop \\nflow-file-success=\\\"vm.fileSuccess($file, $message)\\\" flow-files-added=\\\"vm.filesAdded($files, $event, $flow)\\\" \\nflow-files-submitted=\\\"vm.upload($files, $event, $flow)\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nid=\\\"product-image-uploader-dialog\\\" ng-class=\\\"{\\'dropping\\':vm.dropping}\\\"><h2 class=\\\"mt-0\\\" \\ntranslate=\\\"PRODUCT.UPLOAD_IMAGE\\\"></h2><div class=\\\"drop-text hint-text\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"PRODUCT.DROP_TO_UPLOAD\\\">Drop to upload</span></div><div flex layout=\\\"column\\\"><div class=\\\"md-inline-form\\\" \\nflex layout=\\\"row\\\"><md-input-container class=\\\"m-0 p-0\\\" flex><label translate=\\\"PRODUCT.PRODUCT_VARIANTS\\\">Product Variants\\n</label><md-select class=\\\"m-0\\\" multiple=\\\"multiple\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.products.product.images.update\\')\\\" \\nng-model=\\\"vm.selectedToUpload.product_variants\\\"><md-option ng-repeat=\\\"productVariant in vm.product.product_variants\\\" \\nng-value=\\\"productVariant.id\\\">{{productVariant.size_name}} - {{productVariant.color_name}}</md-option></md-select>\\n</md-input-container><md-input-container class=\\\"m-0 p-0\\\" flex><label translate=\\\"PRODUCT.VARIANTS\\\">Variants</label>\\n<md-select class=\\\"m-0\\\" multiple=\\\"multiple\\\" \\nng-change=\\\"vm.selectImageVariants(vm.selectedToUpload.variants, vm.selectedToUpload)\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.products.product.images.update\\')\\\" \\nng-model=\\\"vm.selectedToUpload.variants\\\"><md-option ng-repeat=\\\"variant in vm.product.size_variants_instances\\\" \\nng-value=\\\"variant.id\\\">{{variant.code}} - {{variant.name}}</md-option><md-option \\nng-repeat=\\\"variant in vm.product.color_variants_instances\\\" ng-value=\\\"variant.id\\\">{{variant.code}} - {{variant.name}}\\n</md-option></md-select></md-input-container></div><div class=\\\"upload-button p-30\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary md-raised\\\" flow-btn translate=\\\"PRODUCT.UPLOAD_IMAGE\\\">\\nUpload Image</md-button><span class=\\\"secondary-text mt-8\\\">{{\\'PRODUCT.UPLOAD_IMAGE_HINT\\' | translate}}</span></div>\\n</div></div></md-dialog></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/manufacturing.html\",\"<div id=\\\"manufacturing\\\" layout=\\\"column\\\" flex><section layout=\\\"row\\\" flex class=\\\"m-10 ml-0\\\"><div flex=\\\"15\\\" \\nlayout=\\\"column\\\"><label class=\\\"m-10\\\" translate=\\\"PRODUCT.PRODUCT_VARIANTS\\\">Product Variants</label><md-button \\nng-repeat=\\\"product_variant in vm.product.product_variants\\\" class=\\\"side-button\\\" \\nng-class=\\\"{\\'md-primary\\': vm.selectedProductVariant.id == product_variant.id}\\\" \\nng-click=\\\"vm.selectSelectedProductVariant(product_variant)\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><span>\\n{{product_variant.size_name}} - {{product_variant.color_name}}</span> <small>{{product_variant.barcode}}</small></div>\\n</md-button></div><md-card flex=\\\"85\\\" ng-if=\\\"vm.selectedProductVariant != null\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><img ng-if=\\\"vm.product.cover\\\" class=\\\"thumbnail-40\\\" \\nng-src=\\\"{{vm.product.cover}}\\\"><div layout=\\\"column\\\" class=\\\"mr-8\\\"><span class=\\\"h3\\\">\\n{{vm.product.name}} / {{vm.selectedProductVariant.size_name}} / {{vm.selectedProductVariant.color_name}} / {{vm.calculateTotalCost() | price}} {{session.company.currency}} \\n</span><span class=\\\"h4\\\">{{vm.product.code}} - {{vm.selectedProductVariant.barcode}}</span></div><span flex></span>\\n<md-progress-circular ng-if=\\\"vm.loading\\\" md-diameter=\\\"30px\\\" class=\\\"mr-10\\\"></md-progress-circular><md-button \\nclass=\\\"md-primary stroked\\\" ng-click=\\\"vm.copyManufacturingToProduct()\\\" translate=\\\"PRODUCT.COPY_TO_ALL_VARIANTS\\\">\\n</md-button><md-button class=\\\"md-primary stroked\\\" ng-click=\\\"vm.setManufacturingDDPPrice()\\\" \\ntranslate=\\\"PRODUCT.SET_AS_DDP_PRICE\\\"></md-button></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"full-height\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3 text-bold\\\" \\ntranslate=\\\"PRODUCT.COMPONENTS\\\">Other Costs</span> <span flex></span><md-button class=\\\"md-primary stroked m-0\\\" \\nng-click=\\\"vm.addProductVariantManufacturing(1)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'PRODUCT.ADD_COMPONENT\\' | translate}}</div></md-button></div><div \\nclass=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" layout-wrap layout-align=\\\"start start\\\"><table \\nclass=\\\"simple m-0 border-bottom\\\" flex=\\\"100\\\"><tr><td class=\\\"border-bottom border-right text-left\\\" width=\\\"20%\\\" \\ntranslate=\\\"PRODUCT.PRODUCT\\\">Product</td><td class=\\\"border-bottom border-right text-left\\\" width=\\\"20%\\\" \\ntranslate=\\\"PRODUCT.VARIANT\\\">VARIANT</td><td class=\\\"border-bottom border-right text-left\\\" width=\\\"20%\\\" \\ntranslate=\\\"PRODUCT.MATERIAL_CATEGORY\\\">Material Categoy</td><td class=\\\"border-bottom border-right text-cente\\\" \\nwidth=\\\"5%\\\" translate=\\\"PRODUCT.QUANTITY\\\">Quantity</td><td class=\\\"border-bottom border-right text-center\\\" width=\\\"5%\\\" \\ntranslate=\\\"PRODUCT.WASTAGE\\\">Wastage</td><td class=\\\"border-bottom border-right text-center\\\" width=\\\"10%\\\" \\ntranslate=\\\"PRODUCT.COST_PER_ITEM\\\">Cost Per Item</td><td class=\\\"border-bottom border-right text-center\\\" width=\\\"10%\\\" \\ntranslate=\\\"PRODUCT.TOTAL_COST\\\">Total Cost</td><td class=\\\"border-bottom text-left\\\" width=\\\"10%\\\" \\ntranslate=\\\"GENERAL.ACTIONS\\\"></td></tr><tr ng-if=\\\"!vm.selectedProductVariantManufacturings.length\\\"><td colspan=\\\"8\\\" \\nclass=\\\"text-center\\\"><em class=\\\"secondary-text\\\">{{\\'PRODUCT.NO_COMPONENTS\\' | translate}}</em></td></tr><tr \\nng-repeat=\\\"productVariantManufacturing in vm.selectedProductVariantManufacturings | filter:{type: 1}\\\" \\nclass=\\\"component-line\\\"><td class=\\\"border-right\\\" width=\\\"20%\\\"><md-autocomplete \\nmd-items=\\\"product in vm.productsQuerySearch(productVariantManufacturing)\\\" \\nmd-selected-item=\\\"productVariantManufacturing.selected_product_instance\\\" \\nmd-search-text=\\\"productVariantManufacturing.productSearchText\\\" \\nmd-selected-item-change=\\\"vm.selectProduct(productVariantManufacturing, product)\\\" \\nmd-item-text=\\\"vm.getAutocompleteText(product)\\\" md-min-length=\\\"3\\\" md-delay=\\\"300\\\" \\nplaceholder=\\\"{{\\'SALES.SEARCH_PRODUCT\\' | translate}}\\\" md-no-cache=\\\"true\\\" class=\\\"mr-10\\\" flex><md-item-template><div \\nlayout=\\\"row\\\"><div><strong>{{product.code}}</strong> - <span md-highlight-text=\\\"vm.productSearchText\\\" \\nmd-highlight-flags=\\\"^i\\\">{{product.name}}</span></div></div></md-item-template><md-not-found><span \\ntranslate=\\\"SALES.NO_PRODUCT_FOUND\\\" translate-values=\\\"{name: productVariantManufacturing.productSearchText}\\\">\\nNo products matching \\\"{{productVariantManufacturing.productSearchText}}\\\" were found.</span></md-not-found>\\n</md-autocomplete></td><td class=\\\"border-right\\\" width=\\\"20%\\\"><md-autocomplete \\nng-if=\\\"productVariantManufacturing.selected_product\\\" ng-disabled=\\\"!productVariantManufacturing.selected_product\\\" \\nmd-items=\\\"productVariant in vm.productVariantsQuerySearch(productVariantManufacturing)\\\" \\nmd-selected-item=\\\"productVariantManufacturing.selected_product_variant_instance\\\" \\nmd-search-text=\\\"productVariantManufacturing.productVariantSearchText\\\" \\nmd-selected-item-change=\\\"vm.selectProductVariant(productVariantManufacturing, productVariant)\\\" \\nmd-item-text=\\\"vm.getProductVariantAutocompleteText(productVariant)\\\" md-min-length=\\\"0\\\" md-delay=\\\"300\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" md-no-cache=\\\"true\\\" class=\\\"mr-10\\\" flex><md-item-template><div \\nlayout=\\\"row\\\"><strong md-highlight-text=\\\"productVariant.productVariantSearchText\\\" md-highlight-flags=\\\"^i\\\">\\n{{productVariant.size_name}} / {{productVariant.color_name}}</strong> <span ng-if=\\\"productVariant.barcode\\\" \\nmd-highlight-text=\\\"productVariant.productVariantSearchText\\\" md-highlight-flags=\\\"^i\\\">- {{productVariant.barcode}}</span>\\n</div></md-item-template><md-not-found><span translate=\\\"SALES.NO_PRODUCT_FOUND\\\" \\ntranslate-values=\\\"{name: productVariant.productVariantSearchText}\\\">\\nNo products matching \\\"{{productVariant.productVariantSearchText}}\\\" were found.</span></md-not-found></md-autocomplete>\\n</td><td class=\\\"border-right\\\" width=\\\"20%\\\" ng-init=\\\"productVariantManufacturing.manufacturingCategorySearchText=\\'\\';\\\">\\n<md-autocomplete md-items=\\\"manufacturingCategory in vm.manufacturingCategoryQuerySearch(productVariantManufacturing)\\\" \\nmd-selected-item=\\\"productVariantManufacturing.manufacturing_category_instance\\\" \\nmd-search-text=\\\"productVariantManufacturing.manufacturingCategorySearchText\\\" \\nmd-selected-item-change=\\\"vm.selectManufacturingCategory(productVariantManufacturing, manufacturingCategory)\\\" \\nmd-item-text=\\\"manufacturingCategory.name || \\'-\\'\\\" md-min-length=\\\"0\\\" md-delay=\\\"300\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" md-no-cache=\\\"true\\\" class=\\\"mr-10\\\" flex><md-item-template><div \\nlayout=\\\"row\\\"><span md-highlight-text=\\\"productVariantManufacturing.manufacturingCategorySearchText\\\" \\nmd-highlight-flags=\\\"^i\\\">{{manufacturingCategory.name}}</span></div></md-item-template><md-not-found>Not found. <a \\nhref=\\\"#\\\" ng-disabled=\\\"vm.creatingCategory\\\" \\nng-click=\\\"vm.createManufacturingCategory(productVariantManufacturing, productVariantManufacturing.manufacturingCategorySearchText)\\\">\\nCreate it</a></md-not-found></md-autocomplete></td><td class=\\\"border-right text-center\\\" width=\\\"5%\\\"><input \\ntype=\\\"number\\\" class=\\\"text-center\\\" ng-model=\\\"productVariantManufacturing.quantity\\\" \\nng-change=\\\"vm.updateProductVariantManufacturing(productVariantManufacturing)\\\"></td><td \\nclass=\\\"border-right text-center\\\" width=\\\"5%\\\"><input type=\\\"number\\\" class=\\\"text-center\\\" \\nng-model=\\\"productVariantManufacturing.wastage\\\" \\nng-change=\\\"vm.updateProductVariantManufacturing(productVariantManufacturing)\\\"></td><td \\nclass=\\\"border-right text-center\\\" width=\\\"10%\\\">\\n{{(productVariantManufacturing.selected_product_variant_instance.ddp_price || productVariantManufacturing.selected_product_instance.ddp_price || 0) | number : 5}}\\n</td><td class=\\\"border-right text-center\\\" width=\\\"10%\\\">\\n{{vm.calculateProductVariantManufacturingTotal(productVariantManufacturing) | number : 5}}</td><td class=\\\"text-left\\\" \\nwidth=\\\"10%\\\"><md-button ng-click=\\\"vm.removeProductVariantManufacturing(productVariantManufacturing)\\\" \\nclass=\\\"md-icon-button md-warn\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button></td></tr></table></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"PRODUCT.OTHER_COSTS\\\">Other Costs</span> <span \\nflex></span><md-button class=\\\"md-primary stroked m-0\\\" ng-click=\\\"vm.addProductVariantManufacturing(2)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'PRODUCT.ADD_COST\\' | translate}}</div></md-button></div><div class=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" \\nlayout-wrap layout-align=\\\"start start\\\"><table class=\\\"simple m-0 border-bottom\\\" flex=\\\"100\\\"><tr><td \\nclass=\\\"border-bottom border-right text-left\\\" width=\\\"45%\\\" translate=\\\"PRODUCT.NAME\\\">Name</td><td \\nclass=\\\"border-bottom border-right text-center\\\" width=\\\"5%\\\" translate=\\\"PRODUCT.QUANTITY\\\">Quantity</td><td \\nclass=\\\"border-bottom border-right text-center\\\" width=\\\"10%\\\" translate=\\\"PRODUCT.COST_PER_ITEM\\\">Cost Per Item</td><td \\nclass=\\\"border-bottom border-right text-center\\\" width=\\\"10%\\\" translate=\\\"PRODUCT.TOTAL_COST\\\">Total Cost</td><td \\nclass=\\\"border-bottom text-left\\\" width=\\\"10%\\\" translate=\\\"GENERAL.ACTIONS\\\"></td></tr><tr \\nng-if=\\\"!vm.selectedProductVariantManufacturings.length\\\"><td colspan=\\\"5\\\" class=\\\"text-center\\\"><em class=\\\"secondary-text\\\">\\n{{\\'PRODUCT.NO_COSTS\\' | translate}}</em></td></tr><tr \\nng-repeat=\\\"productVariantManufacturing in vm.selectedProductVariantManufacturings | filter:{type: 2}\\\" \\nclass=\\\"component-line\\\"><td class=\\\"border-right text-center\\\" width=\\\"60%\\\"><input type=\\\"text\\\" class=\\\"text-left\\\" \\nng-model=\\\"productVariantManufacturing.item_name\\\" \\nng-blur=\\\"vm.updateProductVariantManufacturing(productVariantManufacturing)\\\" \\nplaceholder=\\\"{{\\'PRODUCT.OTHER_COST_EXAMPLE\\' | translate}}\\\"></td><td class=\\\"border-right text-center\\\" width=\\\"10%\\\"><input\\n type=\\\"number\\\" class=\\\"text-center\\\" ng-model=\\\"productVariantManufacturing.quantity\\\" \\nng-blur=\\\"vm.updateProductVariantManufacturing(productVariantManufacturing)\\\"></td><td class=\\\"border-right text-center\\\" \\nwidth=\\\"10%\\\"><input type=\\\"number\\\" class=\\\"text-center\\\" ng-model=\\\"productVariantManufacturing.cost_per_item\\\" \\nng-blur=\\\"vm.updateProductVariantManufacturing(productVariantManufacturing)\\\"></td><td class=\\\"border-right text-center\\\" \\nwidth=\\\"10%\\\">{{vm.calculateOtherCostTotal(productVariantManufacturing) | price}}</td><td class=\\\"text-left\\\" width=\\\"10%\\\">\\n<md-button ng-click=\\\"vm.removeProductVariantManufacturing(productVariantManufacturing)\\\" class=\\\"md-icon-button md-warn\\\">\\n<md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button></td></tr></table></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><h2 translate=\\\"PRODUCT.MANUFACTURING_TOTAL_COST\\\" flex class=\\\"text-right\\\">Total Cost</h2><h2 \\nflex=\\\"25\\\" class=\\\"text-right pr-20\\\">{{vm.calculateTotalCost() | number:5}} {{session.company.currency}}</h2></div>\\n</md-card-content></md-card></section></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/overview.html\",\"<div id=\\\"overview\\\"><div class=\\\"widget-group layout-wrap\\\" ng-if=\\\"vm.product.manage_stock\\\" layout=\\\"row\\\" flex=\\\"100\\\" \\nlayout-wrap=\\\"\\\"><ms-widget class=\\\"nd-widget\\\" has-permission=\\\"app.inventory.purchases\\\" layout=\\\"column\\\" flex=\\\"100\\\" \\nflex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'PRODUCT.RECEIVED\\' | translate}}\\n</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.product.received}}</div>\\n</ms-widget-front></ms-widget><ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\">\\n<ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'PRODUCT.STOCK_AVAILABLE\\' | translate}}</span><div \\nclass=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.product.stock}}</div></ms-widget-front></ms-widget>\\n<ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\"><ms-widget-front \\nlayout=\\\"column\\\"><div layout=\\\"row\\\"><span class=\\\"title\\\">{{\\'PRODUCT.STOCK_IN_TRANSFER\\' | translate}}</span><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"black-fg ml-8 m-0\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'PRODUCT.STOCK_IN_TRANSFER_TOOLTIP\\' | translate}}</md-tooltip></md-icon></div><div class=\\\"value\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.product.stock_in_transfer}}</div></ms-widget-front></ms-widget><ms-widget \\nclass=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" has-permission=\\\"app.sale.sales_log\\\">\\n<ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">{{\\'PRODUCT.RETAIL_SALES\\' | translate}}</span><div class=\\\"value\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{vm.product.retail_sales}}</div></ms-widget-front></ms-widget>\\n<ms-widget class=\\\"nd-widget\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" \\nhas-permission=\\\"app.wholesale.sales\\\"><ms-widget-front layout=\\\"column\\\"><span class=\\\"title\\\">\\n{{\\'PRODUCT.WHOLESALES\\' | translate}}</span><div class=\\\"value\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{vm.product.wholesale_sales}}</div></ms-widget-front></ms-widget></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\">\\n<md-card flex=\\\"100\\\" flex-gt-sm=\\\"30\\\"><img ng-if=\\\"vm.product.cover\\\" ng-src=\\\"{{vm.product.cover}}\\\" class=\\\"md-card-image\\\" \\nalt=\\\"Cover\\\"><md-card-content><div layout=\\\"column\\\"><div ng-if=\\\"vm.product.code\\\" layout=\\\"column\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.CODE\\\"></small> <span class=\\\"text-truncate mb-5\\\">{{vm.product.code}}\\n<md-tooltip>{{vm.product.code}}</md-tooltip></span></div><div ng-if=\\\"vm.product.origin_code\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" layout=\\\"column\\\"><small class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.ORIGIN_CODE\\\"></small> <span class=\\\"text-truncate mb-5\\\">{{vm.product.origin_code}}<md-tooltip>\\n{{vm.product.origin_code}}</md-tooltip></span></div><div ng-if=\\\"vm.product.group_code\\\" layout=\\\"column\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.GROUP_CODE\\\"></small> <span class=\\\"text-truncate mb-5\\\">\\n{{vm.product.group_code}}<md-tooltip>{{vm.product.group_code}}</md-tooltip></span></div><div ng-if=\\\"vm.product\\\" \\nlayout=\\\"column\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.NAME\\\"></small> <span class=\\\"text-truncate mb-5\\\">\\n{{vm.product.name}}<md-tooltip>{{vm.product.name}}</md-tooltip></span></div><div ng-if=\\\"vm.product.brand\\\" \\nlayout=\\\"column\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.BRAND\\\"></small> <span class=\\\"text-truncate mb-5\\\">\\n{{vm.product.brand}}<md-tooltip>{{vm.product.brand}}</md-tooltip></span></div><div ng-if=\\\"vm.product.season\\\" \\nlayout=\\\"column\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.SEASON\\\"></small> <span class=\\\"text-truncate mb-5\\\">\\n{{vm.product.season}}<md-tooltip>{{vm.product.season}}</md-tooltip></span></div><div ng-if=\\\"vm.product.category\\\" \\nlayout=\\\"column\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.CATEGORY\\\"></small> <span class=\\\"text-truncate mb-5\\\">\\n{{vm.product.category}}<md-tooltip>{{vm.product.category}}</md-tooltip></span></div><div \\nng-if=\\\"vm.product.subcategory\\\" layout=\\\"column\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.SUBCATEGORY\\\"></small> \\n<span class=\\\"text-truncate mb-5\\\">{{vm.product.subcategory}}<md-tooltip>{{vm.product.subcategory}}</md-tooltip></span>\\n</div><div ng-if=\\\"vm.product.composition\\\" layout=\\\"column\\\"><small class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.COMPOSITION\\\"></small> <span class=\\\"text-truncate mb-5\\\">{{vm.product.composition}}<md-tooltip>\\n{{vm.product.composition}}</md-tooltip></span></div><div ng-if=\\\"vm.product.provider\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" layout=\\\"column\\\"><small class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.PROVIDER\\\"></small> <span class=\\\"text-truncate mb-5\\\">{{vm.product.provider}}<md-tooltip>\\n{{vm.product.provider}}</md-tooltip></span></div><div has-permission=\\\"inventory.products.product.details.cost\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.FOB_PRICE\\\"></small> <span class=\\\"text-truncate mb-5\\\" \\nng-if=\\\"vm.product.fob_price !== null\\\">\\n{{vm.product.fob_price | price}}{{vm.product.fob_price_currency | currencyCharacter}}</span> <span \\nclass=\\\"text-truncate mb-5 text-italic\\\" ng-if=\\\"vm.product.fob_price == null\\\" translate=\\\"GENERAL.NOT_SET\\\"></span> <small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.INITIAL_DDP_PRICE\\\"></small> <span class=\\\"text-truncate mb-5\\\" \\nng-if=\\\"vm.product.initial_ddp_price !== null\\\">\\n{{vm.product.initial_ddp_price | number:5}}{{vm.company.currency | currencyCharacter}}</span> <span \\nclass=\\\"text-truncate mb-5 text-italic\\\" ng-if=\\\"vm.product.initial_ddp_price == null\\\" translate=\\\"GENERAL.NOT_SET\\\"></span>\\n <small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.CURRENT_DDP_PRICE\\\"></small> <span class=\\\"text-truncate mb-5\\\" \\nng-if=\\\"vm.product.ddp_price !== null\\\">{{vm.product.ddp_price | number:5}}{{vm.company.currency | currencyCharacter}}\\n</span> <span class=\\\"text-truncate mb-5 text-italic\\\" ng-if=\\\"vm.product.ddp_price == null\\\" translate=\\\"GENERAL.NOT_SET\\\">\\n</span></div><div ng-if=\\\"vm.product.size_variants_instances\\\" layout=\\\"column\\\" class=\\\"mb-5\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.SIZES\\\"></small><div layout=\\\"row\\\" layout-wrap><span \\nng-repeat=\\\"size in ::vm.product.size_variants_instances | orderBy: \\'position\\'\\\" class=\\\"nowrap text-boxed variant-box\\\">\\n{{::size.name}}</span></div></div><div ng-if=\\\"vm.product.color_variants_instances\\\" layout=\\\"column\\\" class=\\\"mb-5\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.COLORS\\\"></small><div layout=\\\"row\\\" layout-wrap><span \\nng-repeat=\\\"color in vm.product.color_variants_instances | orderBy: \\'position\\'\\\" class=\\\"nowrap text-boxed variant-box\\\">\\n{{::color.name}}</span></div></div><div layout=\\\"column\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.MEASUREMENTS\\\">\\n</small> <span class=\\\"text-truncate mb-5 text-italic\\\" ng-if=\\\"!vm.product.measurements\\\" translate=\\\"GENERAL.NOT_SET\\\">\\n</span> <span class=\\\"mb-5\\\" ng-if=\\\"vm.product.measurements\\\">{{vm.product.measurements}}</span></div><div \\nng-if=\\\"vm.product.weight\\\" layout=\\\"column\\\"><div layout=\\\"column\\\"><small class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.WEIGHT\\\"></small> <span class=\\\"mb-5\\\">{{vm.product.weight}}</span></div></div><div layout=\\\"column\\\">\\n<small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.MANAGE_STOCK\\\"></small><div class=\\\"mb-5\\\"><md-icon \\nng-if=\\\"vm.product.manage_stock\\\" md-font-icon=\\\"icon-check\\\"></md-icon><md-icon ng-if=\\\"!vm.product.manage_stock\\\" \\nmd-font-icon=\\\"icon-close\\\"></md-icon></div></div><div layout=\\\"column\\\" has-permission=\\\"app.manufacture\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.IS_RAW_MATERIAL\\\"></small><div class=\\\"mb-5\\\"><md-icon \\nng-if=\\\"vm.product.is_raw_material\\\" md-font-icon=\\\"icon-check\\\"></md-icon><md-icon ng-if=\\\"!vm.product.is_raw_material\\\" \\nmd-font-icon=\\\"icon-close\\\"></md-icon></div></div><div layout=\\\"column\\\"><small class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.IS_NOOS\\\"></small><div class=\\\"mb-5\\\"><md-icon ng-if=\\\"vm.product.is_noos\\\" md-font-icon=\\\"icon-check\\\">\\n</md-icon><md-icon ng-if=\\\"!vm.product.is_noos\\\" md-font-icon=\\\"icon-close\\\"></md-icon></div></div><div layout=\\\"column\\\" \\nhas-permission=\\\"app.wholesale.sales\\\"><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.CATALOG\\\"></small><div \\nclass=\\\"mb-5\\\"><md-icon ng-if=\\\"vm.product.catalog\\\" md-font-icon=\\\"icon-check\\\"></md-icon><md-icon \\nng-if=\\\"!vm.product.catalog\\\" md-font-icon=\\\"icon-close\\\"></md-icon></div></div><div layout=\\\"column\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\"></small><div class=\\\"mb-5\\\"><md-icon \\nng-if=\\\"vm.product.discount_active\\\" md-font-icon=\\\"icon-check\\\"></md-icon><md-icon ng-if=\\\"!vm.product.discount_active\\\" \\nmd-font-icon=\\\"icon-close\\\"></md-icon></div></div><small class=\\\"secondary-text\\\" translate=\\\"PRODUCT.TAGS\\\"></small><div \\nclass=\\\"mb-5\\\"><span ng-repeat=\\\"tag in vm.product.tags\\\" class=\\\"badge md-primary-bg p-4\\\">{{tag}}</span> <em \\nclass=\\\"secondary-text\\\" ng-if=\\\"!vm.product.tags || vm.product.tags.length == 0\\\" translate=\\\"PRODUCT.NO_TAGS\\\">\\nThis product doesn\\'t have any tag</em></div><div layout=\\\"column\\\" ng-if=\\\"vm.product.description\\\"><small \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.DESCRIPTION\\\"></small><div class=\\\"mb-5\\\"><text-angular \\nta-toolbar=\\\"vm.taToolbar\\\" ng-model=\\\"vm.product.description\\\" ta-disabled=\\\"true\\\" flex class=\\\"no-border\\\"></text-angular>\\n</div></div></div></md-card-content></md-card><div layout=\\\"column\\\" flex><md-card \\nng-if=\\\"vm.productVariantKpis.length>0\\\"><md-card-content class=\\\"p-0\\\"><table class=\\\"simple m-0\\\" ms-responsive-table>\\n<thead><tr><th class=\\\"text-left\\\"><b>{{vm.product.color_category_name}}</b></th><th class=\\\"text-left\\\"><b>\\n{{vm.product.size_category_name}}</b></th><th class=\\\"text-center\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_IN\\\"></b></th><th \\nclass=\\\"text-center\\\" has-permission=\\\"app.wholesale.sales\\\"><b translate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\"></b></th>\\n<th class=\\\"text-center\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\"></b></th><th class=\\\"text-center\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\"></b></th><th class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\"><b translate=\\\"RETAIL_DASHBOARD.COST\\\"></b></th><th \\nclass=\\\"text-center\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\"></b></th></tr></thead><tbody><tr \\nng-repeat=\\\"productVariantKpi in vm.productVariantKpis\\\"><td class=\\\"text-left\\\">{{productVariantKpi.color}}</td><td \\nclass=\\\"text-left\\\">{{productVariantKpi.size}}</td><td class=\\\"text-center\\\">{{productVariantKpi.sell_in}}</td><td \\nclass=\\\"text-center\\\" has-permission=\\\"app.wholesale.sales\\\">{{productVariantKpi.wholesale_sell_out}}</td><td \\nclass=\\\"text-center\\\">{{productVariantKpi.sell_out}}</td><td class=\\\"text-center\\\">{{productVariantKpi.current_stock}}</td>\\n<td class=\\\"text-right\\\" has-permission=\\\"inventory.products.product.details.cost\\\">\\n{{productVariantKpi.current_stock_cost | price}} {{session.company.currency | currencyCharacter}}</td><td \\nclass=\\\"text-center\\\">{{productVariantKpi.sell_through | price}} %</td></tr></tbody></table></md-card-content></md-card>\\n<md-card ng-if=\\\"vm.product.manage_stock\\\" has-permission=\\\"app.inventory.purchases\\\"><md-card-content class=\\\"p-0\\\"><table \\nclass=\\\"simple m-0\\\" ms-responsive-table><thead><tr><th class=\\\"text-left\\\" width=\\\"20%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.STORE\\\">Store</b></th><th class=\\\"text-left\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN_DATE\\\">Store</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"10%\\\"><b translate=\\\"RETAIL_DASHBOARD.COST\\\">Cost</b></th>\\n<th class=\\\"text-center\\\" width=\\\"10%\\\"><b translate=\\\"RETAIL_DASHBOARD.RETAIL_VALUE\\\">Retail Value</b></th><th \\nclass=\\\"text-center\\\" width=\\\"10%\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through %</b></th><th \\nclass=\\\"text-center\\\" width=\\\"10%\\\"><b translate=\\\"RETAIL_DASHBOARD.COVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_kpi in vm.product.product_kpis\\\" ng-if=\\\"product_kpi.warehouse && product_kpi.first_sell_in_date\\\"><td \\nclass=\\\"text-left\\\" width=\\\"20%\\\">{{product_kpi.warehouse_name}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_kpi.first_sell_in_date | date:\\\"dd/MM/yyyy\\\"}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_kpi.sell_in || \\'-\\'}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">{{product_kpi.sell_out || \\'-\\'}}</td><td \\nclass=\\\"text-center\\\" width=\\\"10%\\\">{{product_kpi.stock || \\'-\\'}}</td><td class=\\\"text-center\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"10%\\\"><span ng-if=\\\"product_kpi.cost\\\">\\n{{product_kpi.cost || \\'-\\' | price}}</span> <span ng-if=\\\"!product_kpi.cost\\\">-</span></td><td class=\\\"text-center\\\" \\nwidth=\\\"10%\\\"><span ng-if=\\\"product_kpi.stock_retail_value\\\">{{product_kpi.stock_retail_value || \\'-\\' | price}}</span> <span\\n ng-if=\\\"!product_kpi.stock_retail_value\\\">-</span></td><td class=\\\"text-center\\\" width=\\\"10%\\\"><span \\nng-if=\\\"product_kpi.sell_through\\\">{{product_kpi.sell_through | price}} <span ng-if=\\\"product_variant.sell_through\\\">%\\n</span></span> <span ng-if=\\\"!product_kpi.sell_through\\\">-</span></td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_kpi.coverage || \\'-\\'}}</td></tr></tbody></table></md-card-content></md-card><nd-product-variants-information \\nproduct=\\\"vm.product\\\" variant-categories=\\\"vm.variantCategories\\\" pricing-tiers=\\\"vm.pricingTiers\\\" company=\\\"vm.company\\\" \\neditable=\\\"false\\\" show-deleted=\\\"false\\\"></nd-product-variants-information></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/pricing-tiers.html\",\"<div id=\\\"pricing-tiers\\\"><nd-product-pricing-tiers product=\\\"vm.product\\\" pricing-tiers=\\\"vm.pricingTiers\\\" \\nsave-callback=\\\"vm.saveProductCallback()\\\" cancel-callback=\\\"vm.cancelProductPricesCallback()\\\" show-buttons=\\\"true\\\" \\ntaxes=\\\"vm.taxes\\\"></nd-product-pricing-tiers><nd-product-provider-price product=\\\"vm.product\\\" \\nproduct-provider-prices=\\\"vm.productProviderPrices\\\" taxes=\\\"vm.taxes\\\"></nd-product-provider-price></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/product-variants.html\",\"<div id=\\\"product-variants\\\"><nd-product-variants-information product=\\\"vm.product\\\" \\nvariant-categories=\\\"vm.variantCategories\\\" pricing-tiers=\\\"vm.pricingTiers\\\" company=\\\"vm.company\\\" editable=\\\"true\\\">\\n</nd-product-variants-information><nd-product-chip-variants save-callback=\\\"vm.saveProductVariantsCallback()\\\" \\nproduct=\\\"vm.product\\\" show-buttons=\\\"true\\\"></nd-product-chip-variants></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/stock-locations.html\",\"<div id=\\\"stock-locations\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.STOCK_LOCATIONS\\\"></span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"p-0 table-container\\\"><table class=\\\"simple\\\" ms-responsive-table><thead><tr><th class=\\\"sticky\\\">\\n{{\\'PRODUCT.COLOR\\' | translate}}</th><th class=\\\"sticky\\\">{{\\'PRODUCT.SIZE\\' | translate}}</th><th class=\\\"sticky\\\"><span \\nng-if=\\\"vm.product.default_barcode_type\\\">\\n{{\\'BARCODES.\\' + vm.GS1_BARCODE_TYPES_BY_ID[vm.product.default_barcode_type].code | translate }} </span><span \\nng-if=\\\"!vm.product.default_barcode_type\\\" translate=\\\"BARCODES.BARCODE\\\"></span></th><th class=\\\"text-left\\\" \\nng-repeat=\\\"warehouse in vm.filteredWarehouses | orderBy: \\'position\\' track by $index\\\"><nd-a \\nstate=\\\"\\'app.inventory.warehouses.warehouse.stock-locations\\'\\\" style=\\\"display: inline-block\\\" \\nstate-params=\\\"{id: warehouse.id}\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'WAREHOUSE.LOCATION_CONFIGURATION\\' | translate }}\\n</md-tooltip>{{::warehouse.name}}</nd-a></th></tr></thead><tbody><tr \\nng-repeat=\\\"productVariant in vm.product.product_variants | orderBy: [\\'color_name\\',\\'size_name\\']\\\"><td \\nclass=\\\"secondary-text sticky\\\">{{productVariant.color_name}}</td><td class=\\\"secondary-text sticky\\\">\\n{{productVariant.size_name}}</td><td class=\\\"secondary-text sticky\\\">{{productVariant.barcode}}</td><td \\nclass=\\\"text-left\\\" ng-repeat=\\\"warehouse in vm.filteredWarehouses | orderBy: \\'position\\' track by $index\\\"><div flex \\nlayout=\\\"column\\\" class=\\\"full-height\\\" layout-align=\\\"start start\\\"><div \\nng-repeat=\\\"stockLocation in vm.stockLocationsDict[warehouse.id][productVariant.id] track by stockLocation.id\\\" \\nclass=\\\"product-variant-item\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"md-caption\\\">\\n{{stockLocation.location}}</span></div></div></td></tr></tbody></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/stock-movements.html\",\"<md-card ng-class=\\\"{\\'full-height\\': vm.currentStateItem != \\'movements\\' && vm.currentStateItem != \\'pending-orders\\'}\\\" \\nid=\\\"stock-movements\\\" layout=\\\"column\\\"><md-card-title class=\\\"border-bottom\\\"><md-nav-bar \\nmd-selected-nav-item=\\\"vm.currentMovItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nhas-permission=\\\"app.inventory.products.product.stock\\\" md-nav-sref=\\\"app.inventory.products.product.stock\\\" name=\\\"stock\\\">\\n{{\\'PRODUCT.STOCK\\' | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.inventory.products.product.uid-stocks\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.uid-stocks\\\" name=\\\"uid-stocks\\\" \\nng-if=\\\"!vm.product.is_bundle && vm.product.manage_uids\\\">{{\\'PRODUCT.UID_STOCKS\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.products.product.stock-movements\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'movements\\'})\\\" name=\\\"movements\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{\\'PRODUCT.STOCK_MOVEMENT\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.transfers,app.inventory.purchases,app.sale.sales_log,app.wholesale.sales\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'pending-orders\\'})\\\" name=\\\"pending-orders\\\" \\nng-if=\\\"!vm.product.is_bundle\\\"><span layout=\\\"row\\\">{{ \\'NAVIGATION.PENDING_ORDERS\\' | translate}}<nd-new-feature-badge \\nid=\\\"PRODUCT_PENDING_ORDERS\\\" visible-badge=\\\"true\\\" is-beta=\\\"true\\\"></nd-new-feature-badge></span></md-nav-item>\\n<md-nav-item has-permission=\\\"app.inventory.transfers\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'transfers\\'})\\\" name=\\\"transfers\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{ \\'NAVIGATION.TRANSFERS\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.purchases\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'purchases\\'})\\\" name=\\\"purchases\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{ \\'NAVIGATION.PURCHASES\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.sale.sales_log\\\" md-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'sales\\'})\\\" \\nname=\\\"sales\\\">{{ \\'NAVIGATION.SALES\\' | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.wholesale.sales\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'wholesales-sales\\'})\\\" name=\\\"wholesales-sales\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{ \\'NAVIGATION.WHOLESALE_SALES\\' | translate}}</md-nav-item></md-nav-bar></md-card-title>\\n<md-card-content class=\\\"p-0\\\" flex=\\\"100\\\"><nd-product-orders ng-if=\\\"vm.currentStateItem == \\'pending-orders\\'\\\" \\nproduct=\\\"vm.product\\\" show-info=\\\"false\\\" warehouses=\\\"vm.warehouses\\\"></nd-product-orders><nd-transfers-list \\nng-if=\\\"vm.currentStateItem == \\'transfers\\'\\\" status=\\\"vm.status\\\" storage-label=\\\"vm.transfersStorageLabel\\\">\\n</nd-transfers-list><nd-purchases-list ng-if=\\\"vm.currentStateItem == \\'purchases\\'\\\" status=\\\"vm.status\\\" \\nstorage-label=\\\"vm.purchasesStorageLabel\\\"></nd-purchases-list><nd-sales-list \\nng-if=\\\"vm.currentStateItem == \\'wholesales-sales\\'\\\" status=\\\"vm.status\\\" storage-label=\\\"vm.wholesaleSalesStorageLabel\\\">\\n</nd-sales-list><nd-pos-orders-list ng-if=\\\"vm.currentStateItem == \\'sales\\'\\\" status=\\\"vm.status\\\" \\nstorage-label=\\\"vm.salesStorageLabel\\\"></nd-pos-orders-list><div layout=\\\"column\\\" \\nng-if=\\\"vm.currentStateItem == \\'movements\\'\\\"><div layout=\\\"row\\\" class=\\\"border-bottom md-padding\\\"><md-select \\nclass=\\\"nd-input\\\" flex ng-change=\\\"vm.refreshMovements()\\\" ng-model=\\\"vm.selectedWarehouse\\\"><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_WAREHOUSES\\\">All Warehouses</md-option><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select><md-select class=\\\"nd-input\\\" flex ng-change=\\\"vm.refreshMovements()\\\" ng-model=\\\"vm.selectedSize\\\"><md-option \\nng-value=\\\"null\\\" translate=\\\"PRODUCT.ALL_SIZES\\\">All Sizes</md-option><md-option \\nng-repeat=\\\"size in vm.product.size_variants | orderBy: \\'name\\'\\\" ng-value=\\\"size.id\\\">{{size.name}}</md-option></md-select>\\n<md-select class=\\\"nd-input\\\" flex ng-change=\\\"vm.refreshMovements()\\\" ng-model=\\\"vm.selectedColor\\\"><md-option \\nng-value=\\\"null\\\" translate=\\\"PRODUCT.ALL_COLORS\\\">All Colors</md-option><md-option \\nng-repeat=\\\"color in vm.product.color_variants | orderBy: \\'name\\'\\\" ng-value=\\\"color.id\\\">{{color.name}}</md-option>\\n</md-select></div><table class=\\\"dataTable row-border hover\\\" flex=\\\"100\\\" datatable=\\\"\\\" dt-columns=\\\"vm.dtColumns\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" id=\\\"transfers-table\\\"></table></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/stock.html\",\"<md-card id=\\\"product-stock\\\"><md-card-title class=\\\"border-bottom\\\"><md-nav-bar class=\\\"nd-nav-bar-tab\\\" \\nmd-selected-nav-item=\\\"vm.currentMovItem\\\" nav-bar-aria-label=\\\"navigation links\\\"><md-nav-item \\nhas-permission=\\\"app.inventory.products.product.stock\\\" md-nav-sref=\\\"app.inventory.products.product.stock\\\" name=\\\"stock\\\">\\n{{\\'PRODUCT.STOCK\\' | translate}}</md-nav-item><div class=\\\"nd-new-feature-badge-container\\\"><nd-new-feature-badge \\nclass=\\\"ml-8\\\" class=\\\"new-feature-width\\\" id=\\\"NEW_PRODUCT_STOCKS_SCREEN\\\" remove-margin=\\\"true\\\"></nd-new-feature-badge>\\n</div><md-nav-item has-permission=\\\"app.inventory.products.product.uid-stocks\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.uid-stocks\\\" name=\\\"uid-stocks\\\" ng-if=\\\"vm.product.manage_uids\\\">\\n{{\\'PRODUCT.UID_STOCKS\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.products.product.stock-movements\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'movements\\'})\\\" name=\\\"movements\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{\\'PRODUCT.STOCK_MOVEMENT\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.transfers,app.inventory.purchases,app.sale.sales_log,app.wholesale.sales\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'pending-orders\\'})\\\" name=\\\"pending-orders\\\" \\nng-if=\\\"!vm.product.is_bundle\\\"><span layout=\\\"row\\\">{{ \\'NAVIGATION.PENDING_ORDERS\\' | translate}}<nd-new-feature-badge \\nid=\\\"PRODUCT_PENDING_ORDERS\\\" visible-badge=\\\"true\\\" is-beta=\\\"true\\\"></nd-new-feature-badge></span></md-nav-item>\\n<md-nav-item has-permission=\\\"app.inventory.transfers\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'transfers\\'})\\\" name=\\\"transfers\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{ \\'NAVIGATION.TRANSFERS\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.purchases\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'purchases\\'})\\\" name=\\\"purchases\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{ \\'NAVIGATION.PURCHASES\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.sale\\\" has-permission=\\\"app.sale.sales_log\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'sales\\'})\\\" name=\\\"sales\\\">\\n{{ \\'NAVIGATION.SALES\\' | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.wholesale\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'wholesales-sales\\'})\\\" name=\\\"wholesales-sales\\\" \\nng-if=\\\"!vm.product.is_bundle\\\">{{ \\'NAVIGATION.WHOLESALE_SALES\\' | translate}}</md-nav-item><div flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"vm.product.is_bundle\\\"><span flex></span><md-icon class=\\\"under-minimum-fg mh-8\\\" \\nmd-font-icon=\\\"icon-checkbox-blank-circle\\\"></md-icon><span translate=\\\"STOCKS.UNDER_MINIMUM\\\">Stock under minimum</span>\\n</div></md-nav-bar></md-card-title><md-card-content class=\\\"p-0\\\"><div class=\\\"pr-16 border-bottom\\\" layout=\\\"row\\\" \\nlayout-align=\\\"end start\\\"><div ng-if=\\\"!vm.product.is_bundle\\\" \\nng-include=\\\"\\'app/directives/nd-stock-legend/nd-stock-legend.html\\'\\\"></div></div><nd-product-stock-kpis \\nallow-edition=\\\"true\\\" product=\\\"vm.product\\\" view-type=\\\"vm.viewType\\\" warehouses=\\\"vm.warehouses\\\"></nd-product-stock-kpis>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/translations.html\",\"<div id=\\\"details\\\"><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.TRANSLATIONS\\\"></span></md-card-title-text></md-card-title><md-card-content><nd-product-translations \\nproduct=\\\"vm.product\\\" product-translations=\\\"vm.productTranslations\\\"></nd-product-translations></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/tabs/uid-stocks.html\",\"<nd-barcode-listener callback=\\\"vm.uidListenerCallback(barcode)\\\"></nd-barcode-listener><md-card id=\\\"uid-stocks\\\">\\n<md-card-title class=\\\"border-bottom\\\"><md-nav-bar md-selected-nav-item=\\\"vm.currentMovItem\\\" \\nnav-bar-aria-label=\\\"navigation links\\\"><md-nav-item has-permission=\\\"app.inventory.products.product.stock\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock\\\" name=\\\"stock\\\">{{\\'PRODUCT.STOCK\\' | translate}}</md-nav-item>\\n<md-nav-item has-permission=\\\"app.inventory.products.product.uid-stocks\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.uid-stocks\\\" name=\\\"uid-stocks\\\" ng-if=\\\"vm.product.manage_uids\\\">\\n{{\\'PRODUCT.UID_STOCKS\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.products.product.stock-movements\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'movements\\'})\\\" name=\\\"movements\\\">\\n{{\\'PRODUCT.STOCK_MOVEMENT\\' | translate}}</md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.transfers,app.inventory.purchases,app.sale.sales_log,app.wholesale.sales\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'pending-orders\\'})\\\" name=\\\"pending-orders\\\" \\nng-if=\\\"!vm.product.is_bundle\\\"><span layout=\\\"row\\\">{{ \\'NAVIGATION.PENDING_ORDERS\\' | translate}}<nd-new-feature-badge \\nid=\\\"PRODUCT_PENDING_ORDERS\\\" visible-badge=\\\"true\\\" is-beta=\\\"true\\\"></nd-new-feature-badge></span></md-nav-item>\\n<md-nav-item has-permission=\\\"app.inventory.transfers\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'transfers\\'})\\\" name=\\\"transfers\\\">\\n{{ \\'NAVIGATION.TRANSFERS\\' | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.inventory.purchases\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'purchases\\'})\\\" name=\\\"purchases\\\">\\n{{ \\'NAVIGATION.PURCHASES\\' | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.sale.sales_log\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'sales\\'})\\\" name=\\\"sales\\\">\\n{{ \\'NAVIGATION.SALES\\' | translate}}</md-nav-item><md-nav-item has-permission=\\\"app.wholesale.sales\\\" \\nmd-nav-sref=\\\"app.inventory.products.product.stock-movements({option:\\'wholesales-sales\\'})\\\" name=\\\"wholesales-sales\\\">\\n{{ \\'NAVIGATION.WHOLESALE_SALES\\' | translate}}</md-nav-item></md-nav-bar></md-card-title><md-card-content class=\\\"p-0\\\">\\n<div class=\\\"pl-5 full-width border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container \\nclass=\\\"nd-search-input mr-8\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"uid-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.search\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div><md-input-container class=\\\"nd-search-input nd-filter-input\\\" md-no-float><md-icon \\nclass=\\\"secondary-text\\\" md-font-icon=\\\"icon-flag-variant\\\"></md-icon><md-select flex ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.statusFilter\\\" placeholder=\\\"{{\\'PRODUCT.STOCK_DETAIL_STATUS\\' | translate}}\\\"><md-option \\nng-value=\\\"\\'available\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" translate=\\\"PRODUCT.STOCK_DETAIL_STATUS_AVAILABLE\\\">\\n</div></md-option><md-option ng-value=\\\"\\'allocated\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\ntranslate=\\\"PRODUCT.STOCK_DETAIL_STATUS_ALLOCATED\\\"></div></md-option><md-option ng-value=\\\"\\'shipped\\'\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" translate=\\\"PRODUCT.STOCK_DETAIL_STATUS_SHIPPED\\\"></div></md-option><md-option \\nng-value=\\\"\\'not_available\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\ntranslate=\\\"PRODUCT.STOCK_DETAIL_STATUS_NOT_AVAILABLE\\\"></div></md-option></md-select></md-input-container></div><div \\nclass=\\\"ml-10\\\"><md-input-container class=\\\"nd-search-input nd-filter-input\\\" md-no-float><md-icon class=\\\"secondary-text\\\" \\nmd-font-icon=\\\"icon-package-variant-closed\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" \\nng-change=\\\"vm.filterChanged()\\\" ng-model=\\\"vm.filters.productVariants\\\" \\nplaceholder=\\\"{{\\'PRODUCT.PRODUCT_VARIANT\\' | translate}}\\\"><md-option \\nng-repeat=\\\"productVariant in vm.product.product_variants\\\" ng-value=\\\"productVariant.id\\\">\\n{{vm.getProductVariantName(productVariant)}}</md-option></md-select></md-input-container></div><div class=\\\"ml-10\\\">\\n<md-input-container class=\\\"nd-search-input nd-filter-input\\\" md-no-float><md-icon class=\\\"secondary-text\\\" \\nmd-font-icon=\\\"icon-store\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.filterChanged()\\\" \\nng-model=\\\"vm.filters.warehouses\\\" placeholder=\\\"{{\\'PRODUCT.WAREHOUSE\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container></div></div><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"md-raised md-primary\\\" data-test-id=\\\"add-uid-lot-button\\\" ng-click=\\\"vm.editUID()\\\" \\nng-disabled=\\\"!vm.session.hasPermissions(\\'inventory.products.product.uid_stocks.create\\')\\\" ng-if=\\\"!vm.addingUidStock\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><p class=\\\"m-0\\\" \\nng-if=\\\"!vm.product.manage_lots\\\">{{\\'PRODUCT.ADD_UID\\' | translate}}</p><p class=\\\"m-0\\\" ng-if=\\\"vm.product.manage_lots\\\">\\n{{\\'PRODUCT.ADD_LOT\\' | translate}}</p></div></md-button></div></div><table class=\\\"dataTable row-border hover\\\" \\ndatatable=\\\"\\\" dt-columns=\\\"vm.dtColumns\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" flex=\\\"100\\\" flex \\nid=\\\"uid-stocks-table\\\"></table></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/collections/dialogs/new-collection.html\",\"<md-dialog aria-label=\\\"New Collection\\\" class=\\\"w-300\\\" id=\\\"new-collection-dialog\\\"><md-dialog-content \\nclass=\\\"no-padding no-scroll\\\"><md-tabs md-dynamic-height md-selected=\\\"vm.selectedTab\\\"><md-tab label=\\\"collection\\\">\\n<md-content class=\\\"md-padding\\\"><form name=\\\"collectionForm\\\" ng-cloak><h2 class=\\\"mb-30\\\" \\ntranslate=\\\"COLLECTION.NEW_COLLECTION\\\">New Collection</h2><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\">\\n<label translate=\\\"GENERAL.CODE\\\">Code</label><md-icon md-font-icon=\\\"icon-tile-four\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.collection.code\\\" type=\\\"text\\\" required md-autofocus></md-input-container><md-input-container \\nclass=\\\"md-block h-60 mb-0\\\" flex=\\\"100\\\"><label translate=\\\"COLLECTIONS.SEASON\\\">Season</label><md-icon \\nmd-font-icon=\\\"icon-weather-sunny\\\" class=\\\"icon\\\"></md-icon><md-select required ng-model=\\\"vm.collection.season\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"mr-5\\\" class=\\\"icon\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-value=\\\"season.id\\\" \\nng-repeat=\\\"season in vm.seasons | filter:vm.selectFilter | orderBy: \\'name\\'\\\">{{season.name}}</md-option><md-option \\nng-click=\\\"vm.selectedTab = 1\\\" class=\\\"md-primary-fg\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\"></md-icon>\\n{{\\'CONFIGURATION.ADD_NEW_SEASON\\' | translate}}</md-option></md-select></md-input-container></form></md-content>\\n</md-tab><md-tab label=\\\"season\\\"><md-content class=\\\"md-padding\\\"><form ng-cloak><h2 class=\\\"mb-30\\\" \\ntranslate=\\\"CONFIGURATION.NEW_SEASON\\\">New Season</h2><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\">\\n<label translate=\\\"GENERAL.CODE\\\">Code</label><md-icon md-font-icon=\\\"icon-code-tags\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.newSeason.code\\\" type=\\\"text\\\" required md-autofocus></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\"><label translate=\\\"GENERAL.NAME\\\">Name</label><md-icon \\nmd-font-icon=\\\"icon-pencil\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.newSeason.name\\\" type=\\\"text\\\" required>\\n</md-input-container></form></md-content></md-tab></md-tabs></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nng-if=\\\"vm.selectedTab == 0\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!collectionForm.$dirty || !vm.collection.code || !vm.collection.season\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></md-dialog-actions><md-dialog-actions layout=\\\"row\\\" ng-if=\\\"vm.selectedTab == 1\\\"><md-button \\nng-click=\\\"vm.selectedTab = 0\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.saveSeason()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.newSeason.code || !vm.newSeason.name || vm.savingSeason\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" ng-if=\\\"vm.savingSeason\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\" ng-class=\\\"{\\'ml-8\\': vm.savingSeason}\\\">Save</span></div>\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/tabs/deliveries.html\",\"<div class=\\\"pl-8 pr-8 pb-8 pt-8\\\" flex id=\\\"purchase-deliveries\\\" layout=\\\"column\\\" layout-fill><md-card flex \\nlayout=\\\"column\\\" layout-fill><md-card-title class=\\\"p-5\\\" flex=\\\"none\\\"><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h3\\\" translate=\\\"PURCHASE.DELIVERY_NOTES\\\"></span> <span flex></span>\\n<md-button class=\\\"mr-0 md-primary stroked\\\" ng-click=\\\"vm.linkWithInvoice()\\\" ng-disabled=\\\"vm.creatingNewDelivery\\\" \\nng-if=\\\"vm.selected.length > 0\\\" translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\"></md-button><div class=\\\"mr-15\\\"></div><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" id=\\\"new-delivery-button\\\" ng-click=\\\"vm.newDelivery()\\\" \\nng-disabled=\\\"vm.creatingNewDelivery\\\" ng-if=\\\"vm.purchase.status < 10\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'PURCHASE.NEW_DELIVERY\\' | translate}}</div></md-button>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"p-0\\\" flex layout=\\\"column\\\" layout-fill>\\n<nd-purchase-deliveries-list class=\\\"border-top\\\" flex layout=\\\"column\\\" layout-fill selected=\\\"vm.selected\\\" \\nstatus=\\\"vm.purchasesStatus\\\" storage-label=\\\"vm.purchasesStorageLabel\\\"></nd-purchase-deliveries-list></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/tabs/delivery.html\",\"<div id=\\\"purchase-delivery\\\" flex><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex><md-card flex-gt-sm=\\\"75\\\" layout=\\\"column\\\">\\n<md-card-title><md-card-title-text class=\\\"pr-5\\\"><div layout=\\\"row\\\" layout-align=\\\"left center\\\"><md-button \\nid=\\\"go-to-deliveries-button\\\" class=\\\"md-icon-button black-fg ml-0\\\" \\nui-sref=\\\"app.inventory.purchases.purchase.deliveries({idPurchase: vm.purchase.id})\\\" translate \\ntranslate-attr-aria-label=\\\"DELIVERY.GO_TO_DELIVERIES\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div class=\\\"h2\\\" translate=\\\"PURCHASE.DELIVERY_NOTE\\\"></div><div \\nclass=\\\"h2 ml-10 ph-10 border-left secondary-text border-right\\\">{{vm.purchaseOrderDelivery.autocode}}</div><span \\nclass=\\\"status-badge ml-10\\\" ng-class=\\\"vm.getStatusColorClass(vm.purchaseOrderDelivery.status)\\\">\\n{{vm.getStatusLabel(vm.purchaseOrderDelivery.status)}}</span></div></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"pb-30\\\" flex><form name=\\\"deliveriesForm\\\" layout=\\\"column\\\"><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\" flex><md-input-container class=\\\"no-md-errors-spacer\\\" flex layout=\\\"column\\\"><input \\nng-model=\\\"vm.purchaseOrderDelivery.origin_code\\\" \\nng-model-options=\\\"{ debounce: { default: 1000, blur: 0}, updateOn: \\'default blur\\'}\\\" ng-change=\\\"vm.saveExpectedDate()\\\" \\nng-disabled=\\\"vm.isNotAllowedToEdit()\\\" placeholder=\\\"{{\\'PURCHASE.ORIGIN_CODE\\' | translate}}\\\"></md-input-container>\\n<md-input-container class=\\\"no-md-errors-spacer\\\" flex layout=\\\"column\\\"><label>{{\\'PURCHASE.SHIPPING_DATE\\'|translate}}\\n</label><md-datepicker md-open-on-focus layout=\\\"column\\\" ng-model=\\\"vm.purchaseOrderDelivery.shipped_at\\\" \\nmd-hide-icons=\\\"calendar\\\" ng-disabled=\\\"vm.isNotAllowedToEdit()\\\" ng-change=\\\"vm.saveExpectedDate()\\\"></md-datepicker>\\n</md-input-container><md-input-container class=\\\"no-md-errors-spacer\\\" flex layout=\\\"column\\\"><label>\\n{{\\'PURCHASE.EXPECTED_DATE\\'|translate}}</label><md-datepicker md-open-on-focus layout=\\\"column\\\" \\nng-model=\\\"vm.purchaseOrderDelivery.expected_at\\\" md-hide-icons=\\\"calendar\\\" ng-disabled=\\\"vm.isNotAllowedToEdit()\\\" \\nng-change=\\\"vm.saveExpectedDate()\\\"></md-datepicker></md-input-container></div></form></md-card-content></md-card>\\n<md-card flex-gt-sm=\\\"25\\\"><md-card-content><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"pb-8 created-recieved-card border-bottom-card\\\"><div class=\\\"text-bold w-100 user-row\\\" \\ntranslate=\\\"PURCHASE.CREATED_BY\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture \\nuser=\\\"vm.purchaseOrderDelivery.created_by_instance\\\"></nd-user-picture><div class=\\\"ml-10\\\">\\n{{vm.purchaseOrderDelivery.created_by_instance.first_name }}&nbsp;{{vm.purchaseOrderDelivery.created_by_instance.last_name }}\\n<div class=\\\"secondary-text\\\">{{vm.purchaseOrderDelivery.created_at | date:\\'medium\\'}}</div></div></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-8 created-recieved-card\\\"><div class=\\\"text-bold w-100 user-row\\\" \\ntranslate=\\\"PURCHASE.RECEIVED_BY\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture \\nng-if=\\\"vm.purchaseOrderDelivery.received_by_instance\\\" user=\\\"vm.purchaseOrderDelivery.received_by_instance\\\">\\n</nd-user-picture><div class=\\\"ml-10\\\"><div ng-if=\\\"vm.purchaseOrderDelivery.received_by_instance\\\">\\n{{vm.purchaseOrderDelivery.received_by_instance.first_name}}&nbsp;{{vm.purchaseOrderDelivery.received_by_instance.last_name}}\\n</div><div ng-if=\\\"!vm.purchaseOrderDelivery.received_by_instance\\\">-</div><div \\nng-if=\\\"vm.purchaseOrderDelivery.received_at\\\" class=\\\"secondary-text\\\">\\n{{vm.purchaseOrderDelivery.received_at | date:\\'medium\\'}}</div></div></div></div></md-card-content></md-card></div>\\n<md-card><order-products order=\\\"vm.purchaseOrderDelivery\\\" type=\\\"\\'PurchaseOrderDelivery\\'\\\" \\noptions=\\\"vm.visualizationOptions\\\" taxes=\\\"vm.taxes\\\" show-prices=\\\"true\\\" edit-prices=\\\"false\\\" disable-taxes=\\\"false\\\" flex>\\n</order-products></md-card><div layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><div layout=\\\"row\\\" layout-gt-md=\\\"column\\\" \\nflex-gt-md=\\\"33\\\" flex=\\\"100\\\"><md-card flex id=\\\"file-uploader\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nflow-files-submitted=\\\"vm.upload($files, $event, $flow)\\\" flow-files-added=\\\"vm.filesAdded($files, $event, $flow)\\\" \\nflow-file-success=\\\"vm.fileSuccess($file, $message)\\\" flow-complete=\\\"vm.uploadComplete()\\\" flow-drop \\nflow-drag-enter=\\\"vm.dropping=true\\\" flow-drag-leave=\\\"vm.dropping=false\\\" ng-class=\\\"{\\'dropping\\':vm.dropping}\\\">\\n<md-card-title flex=\\\"nogrow\\\"><md-card-title-text layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h2\\\" \\ntranslate=\\\"PURCHASE.DOCUMENTS\\\"></span></md-card-title-text></md-card-title><md-card-content flex class=\\\"pt-10\\\"><div \\nng-if=\\\"vm.files.length\\\" layout=\\\"column\\\" flex layout-align=\\\"start start\\\"><table class=\\\"simple half-padding\\\"><tr \\nng-repeat=\\\"file in vm.files\\\"><td><b><a href=\\\"{{file.file}}\\\" ng-if=\\\"file.type==\\'file\\'\\\" target=\\\"_blank\\\" \\nclass=\\\"md-primary\\\" download>{{vm.getFilename(file.file)}}</a></b><div ng-if=\\\"file.type==\\'uploading\\'\\\" \\nclass=\\\"text-center\\\"><md-progress-circular class=\\\"md-primary\\\" md-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular></div></td><td class=\\\"text-right\\\"><md-menu \\nng-if=\\\"file.type==\\'file\\' && !vm.isNotAllowedToEdit()\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdMenu.open($event)\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.deleteFile(file)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span translate=\\\"PURCHASE.DELETE_DOCUMENT\\\"></span></md-button></md-menu-item>\\n</md-menu-content></md-menu></td></tr></table></div><div class=\\\"drag full-width border border-radius\\\" \\nng-class=\\\"{\\'dropping\\':vm.dropping, \\'full-height\\': vm.files.length === 0}\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"p-16\\\"><md-icon md-font-icon=\\\"icon-cloud-upload\\\" \\nclass=\\\"icon secondary-text s42\\\"></md-icon><p class=\\\"secondary-text text-center\\\"><span \\ntranslate=\\\"PURCHASE.DRAG_AND_DROP\\\"></span></p><md-button class=\\\"md-primary\\\" flow-btn translate=\\\"IMPORT.SET_FILE\\\">\\n</md-button></div></div></div></md-card-content></md-card></div><div layout=\\\"row\\\" layout-gt-md=\\\"column\\\" \\nflex-gt-md=\\\"33\\\" flex=\\\"100\\\"><md-card flex><md-card-title flex=\\\"nogrow\\\"><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><div class=\\\"h2\\\">{{\\'PURCHASE.RELATED_INVOICE\\'|translate}}</div><span flex></span><div \\nng-show=\\\"vm.purchaseOrderDelivery.invoice\\\"><md-menu ng-if=\\\"!vm.isNotAllowedToEdit()\\\"><md-icon \\nng-click=\\\"$mdMenu.open($event)\\\" md-font-icon=\\\"icon-dots-vertical\\\" class=\\\"icon cursor-pointer\\\"></md-icon>\\n<md-menu-content width=\\\"3\\\"><md-menu-item><md-button ng-click=\\\"vm.editRelatedInvoice()\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil\\\"></md-icon><span translate=\\\"PURCHASE.EDIT_RELATED_INVOICE\\\"></span></md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.unbindInvoiceDialog()\\\"><md-icon \\nmd-font-icon=\\\"icon-link-off\\\"></md-icon><span translate=\\\"PURCHASE.UNLINK_INVOICE\\\"></span></md-button></md-menu-item>\\n</md-menu-content></md-menu></div></md-card-title-text></md-card-title><md-card-content><div \\nng-if=\\\"!vm.purchaseOrderDelivery.invoice\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"full-width text-center pt-10 pb-20\\\"><p class=\\\"secondary-text m-0\\\"><span translate=\\\"PURCHASE.NO_RELATED_INVOICE\\\">\\n</span></p><p class=\\\"secondary-text\\\"><span translate=\\\"PURCHASE.NO_RELATED_INVOICE_CREATE\\\"></span></p></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.createInvoice()\\\" translate=\\\"PURCHASE.NEW_INVOICE\\\"></md-button><md-button \\nclass=\\\"mr-0 md-primary md-raised\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.update\\')}}\\\" \\nng-click=\\\"vm.linkWithInvoice()\\\" translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\"></md-button></div></div><div \\nng-if=\\\"vm.purchaseOrderDelivery.invoice\\\" class=\\\"purchase-invoice-data\\\"><div layout=\\\"row\\\" layout-algin=\\\"left center\\\">\\n<div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">{{\\'INVOICE.REFERENCE\\'|translate}}</div><div layout=\\\"column\\\" \\nflex=\\\"50\\\">{{vm.purchaseOrderDelivery.invoice.getAutocodeOrDraft()}}</div></div><div layout=\\\"row\\\" \\nlayout-algin=\\\"left center\\\"><div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">{{\\'INVOICE.BILLING_DATE\\'|translate}}\\n</div><div layout=\\\"column\\\" flex=\\\"50\\\"><span ng-if=\\\"vm.purchaseOrderDelivery.invoice.billing_date\\\">\\n{{vm.purchaseOrderDelivery.invoice.billing_date | date:\\'dd/MM/yyyy\\'}} </span><span \\nng-if=\\\"!vm.purchaseOrderDelivery.invoice.billing_date\\\">-</span></div></div><div layout=\\\"row\\\" \\nlayout-algin=\\\"left center\\\"><div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">\\n{{\\'PURCHASE.EXPIRATION_DATE\\'|translate}}</div><div layout=\\\"column\\\" flex=\\\"50\\\"><span \\nng-if=\\\"vm.purchaseOrderDelivery.invoice.expiration_date\\\">\\n{{vm.purchaseOrderDelivery.invoice.expiration_date | date:\\'dd/MM/yyyy\\'}} </span><span \\nng-if=\\\"!vm.purchaseOrderDelivery.invoice.expiration_date\\\">-</span></div></div><div layout=\\\"row\\\" \\nlayout-algin=\\\"left center\\\"><div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">{{\\'INVOICE.TOTAL\\'|translate}}</div>\\n<div layout=\\\"column\\\" flex=\\\"50\\\">\\n{{vm.purchaseOrderDelivery.invoice.total_incl_tax | price}} {{vm.purchaseOrderDelivery.invoice.currency | currencyCharacter}}\\n</div></div><div layout=\\\"row\\\" layout-algin=\\\"left center\\\"><div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">\\n{{\\'PURCHASE.FILE\\'|translate}}</div><div layout=\\\"column\\\" flex=\\\"50\\\"><a ng-click=\\\"vm.downloadInvoicePdf()\\\" \\nclass=\\\"cursor-pointer\\\">{{vm.purchaseOrderDelivery.invoice.getFileName()}}</a></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary md-raised\\\" \\nng-href=\\\"/accounting/invoices/{{vm.purchaseOrderDelivery.invoice.id}}\\\">{{\\'PURCHASE.VIEW_INVOICE\\'|translate}}\\n</md-button></div></div></md-card-content></md-card></div><div layout=\\\"row\\\" layout-gt-md=\\\"column\\\" flex-gt-md=\\\"33\\\" \\nflex=\\\"100\\\"><md-card flex flex-gt-md=\\\"nogrow\\\" class=\\\"full-height\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASE.SUMMARY\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content flex><div class=\\\"purchase-summary-data\\\" flex=\\\"100\\\"><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nclass=\\\"mb-8 secondary-text\\\"><span flex translate=\\\"PURCHASE.SUBTOTAL\\\"></span> <span>\\n{{(vm.summary.total_price_excl_tax || 0) | price}} {{session.company.currency | currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" class=\\\"mb-8 secondary-text\\\" ng-repeat=\\\"tax in vm.summary.tax_summary\\\"><span flex>\\n{{tax.tax_name}} - {{tax.tax_percent_value}}%</span> <span>\\n{{(tax.tax_cost || 0) | price}} {{session.company.currency | currencyCharacter}}</span></div></div><md-divider \\nclass=\\\"mb-8\\\"></md-divider><div layout=\\\"row\\\" class=\\\"h2\\\"><span flex translate=\\\"PURCHASE.TOTAL\\\"></span> <span>\\n{{(vm.summary.total_price_incl_tax || 0) | price}} {{session.company.currency | currencyCharacter}}</span></div></div>\\n</md-card-content></md-card></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/tabs/details.html\",\"<div id=\\\"purchase-details\\\"><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-card flex=\\\"70\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"PURCHASE.DETAILS\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><form name=\\\"detailsForm\\\"><div flex layout=\\\"column\\\"><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" layout-wrap>\\n<div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"row\\\" ng-if=\\\"vm.isNewPurchase\\\"><md-input-container flex \\nhas-permission=\\\"inventory.purchases.create,inventory.purchases.purchase.details.update\\\"><label><span \\ntranslate=\\\"PURCHASE.SERIAL_NUMBER\\\">Serial Number</span></label><md-select ng-model=\\\"vm.purchase.serial_number_type\\\" \\nrequired><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PURCHASE_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"!vm.isNewPurchase\\\"><label translate=\\\"PURCHASE.SERIAL_NUMBER\\\">Serial Number</label><input \\nng-disabled=\\\"true\\\" ng-model=\\\"vm.purchase.autocode\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<label><span translate=\\\"PURCHASE.DELIVERY_NOTES\\\">Delivery Notes</span> <span translate=\\\"SALE.SERIAL_NUMBER\\\">\\nSerial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.purchases.create\\') && !Session.hasPermission(\\'inventory.purchases.purchase.details.update\\')\\\" \\nng-model=\\\"vm.purchase.delivery_notes_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PURCHASE_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div layout=\\\"row\\\" \\nlayout-gt-sm=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-datepicker flex \\nmd-hide-icons=\\\"calendar\\\" md-min-date=\\\"vm.minDate\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'SALE.START_SHIPPING_DATE\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.purchases.create\\') && !Session.hasPermission(\\'inventory.purchases.purchase.details.update\\')\\\" \\nng-model=\\\"vm.purchase.start_date\\\"></md-datepicker></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"column\\\"><md-datepicker flex md-hide-icons=\\\"calendar\\\" md-min-date=\\\"vm.purchase.start_date\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'SALE.CANCEL_DATE\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.purchases.create\\') && !Session.hasPermission(\\'inventory.purchases.purchase.details.update\\')\\\" \\nng-model=\\\"vm.purchase.cancel_date\\\"></md-datepicker></md-input-container></div><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" \\nlayout-wrap><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PURCHASE.PROVIDER_CONTACT\\' | translate}}\\\" md-item-text=\\\"vm.displayFunction(contact)\\\" \\nmd-items=\\\"contact in vm.querySearch()\\\" md-min-length=\\\"3\\\" md-search-text=\\\"vm.searchContact\\\" \\nmd-selected-item=\\\"vm.purchase.contact_instance\\\" md-selected-item-change=\\\"vm.selectContact(contact)\\\" \\nmd-item-text=\\\"contact.name\\\" data-test-id=\\\"provider-contact-id\\\" \\nmd-floating-label=\\\"{{\\'PURCHASE.PROVIDER_CONTACT\\' | translate}}\\\" md-min-length=\\\"3\\\" md-delay=\\\"500\\\" \\nng-disabled=\\\"vm.checkChangeProvider() && !vm.isNewPurchase\\\"><span md-highlight-text=\\\"vm.searchContact\\\">\\n{{contact.name}} - {{contact.first_name}} {{contact.last_name}}</span></md-autocomplete><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"PURCHASE.ORIGIN_CODE\\\">Origin code</label><input ng-model=\\\"vm.purchase.origin_code\\\" \\ntype=\\\"text\\\"></md-input-container></div><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"PURCHASE.TO_WAREHOUSE\\\">To warehouse</label><md-select \\nmd-on-close=\\\"vm.searchSelectHeader[1] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"vm.purchase.status>1 || (!Session.hasPermission(\\'inventory.purchases.create\\') && !Session.hasPermission(\\'inventory.purchases.purchase.details.update\\'))\\\" \\nng-model=\\\"vm.purchase.target_warehouse\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[1]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[1]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"PURCHASE.SEASON\\\">Season</label><md-select \\nmd-on-close=\\\"vm.searchSelectHeader[2] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" ng-model=\\\"vm.purchase.season\\\" required>\\n<md-select-header><input class=\\\"md-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[2]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"season in vm.seasons | filter:vm.searchSelectHeader[2]\\\" ng-value=\\\"season.id\\\">{{season.name}}</md-option>\\n</md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" \\nlayout-wrap><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"PURCHASE.NOTES\\\">Notes</label><textarea \\nmd-maxlength=\\\"1000\\\" md-select-on-focus ng-model=\\\"vm.purchase.notes\\\" rows=\\\"1\\\"></textarea></md-input-container><md-chips \\nclass=\\\"mb-40\\\" delete-button-label=\\\"Remove tag\\\" delete-hint=\\\"Press delete to remove tag\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-model=\\\"vm.purchase.tags\\\" placeholder=\\\"Tag and press enter\\\" secondary-placeholder=\\\"Type another tag\\\"></md-chips>\\n</div></div><div flex has-permission=\\\"inventory.purchases.purchase.details.update,inventory.purchases.create\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"md-primary md-raised no-margin\\\" \\nhas-permission=\\\"inventory.purchases.purchase.details.update\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"vm.updating\\\" \\nng-if=\\\"!vm.isNewPurchase\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"mh-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.updating\\\"></md-progress-circular><span translate=\\\"PURCHASE.SAVE\\\">Save</span></div>\\n</md-button><md-button class=\\\"md-primary md-raised no-margin\\\" data-test-id=\\\"newpurchase-button-detailsnext\\\" \\nhas-permission=\\\"inventory.purchases.create\\\" ng-click=\\\"vm.create()\\\" \\nng-disabled=\\\"vm.continueDisable() || detailsForm.$invalid\\\" ng-if=\\\"vm.isNewPurchase\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.creating\\\">\\n</md-progress-circular><span translate=\\\"PURCHASE.CONTINUE\\\">Continue</span></div></md-button></div></form>\\n</md-card-content></md-card><div class=\\\"did-you-know md-margin\\\" flex=\\\"30\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\"><div layout=\\\"row\\\"><md-icon class=\\\"blue-fg\\\" md-font-icon=\\\"icon-information-outline\\\">\\n</md-icon><span class=\\\"did-you-know-title\\\">{{\\'PURCHASE.CREATE_AND_RECIEVE_CARD_TITLE\\' | translate}}</span></div><div \\nclass=\\\"p-8\\\"><div class=\\\"did-you-know-message\\\" translate=\\\"PURCHASE.CREATE_AND_RECIEVE_CARD_MESSAGE\\\"></div></div></div>\\n<div class=\\\"pl-16\\\"><a href=\\\"https://support.stockagile.com/hc/es/articles/5546312503837\\\" target=\\\"_blank\\\" \\ntranslate=\\\"GENERAL.MORE_INFO\\\"></a></div></div></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-card flex=\\\"70\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"SITE.ADVANCED_SETTINGS\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><div layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" layout-wrap class=\\\"pl-10\\\"><md-checkbox \\nng-model=\\\"vm.purchase.use_stock_in_transit_for_online_availability\\\"><span \\ntranslate=\\\"PURCHASE.USE_STOCK_IN_TRANSIT_FOR_ONLINE_AVAILABILITY\\\"></span></md-checkbox></div></md-card-content>\\n</md-card><div class=\\\"md-margin\\\" flex=\\\"30\\\"></div></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-card flex=\\\"70\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"PURCHASE.PRODUCT_REPLENISHMENT_TITLE\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div class=\\\"pl-10\\\" flex=\\\"100\\\" layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\"><md-checkbox class=\\\"m-0\\\" ng-disabled=\\\"!vm.isNewPurchase\\\" \\nng-model=\\\"vm.purchase.minimum_stock_replenishment\\\">{{\\\"PURCHASE.REPLENISHMENT_MINIMUM_STOCK\\\" | translate}}<md-icon \\nclass=\\\"mb-5 ml-5\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\\"PURCHASE.REPLENISHMENT_MINIMUM_STOCK_INFORMATION\\\" | translate}}</md-tooltip></md-icon></md-checkbox><md-checkbox \\nclass=\\\"m-0\\\" ng-disabled=\\\"!vm.isNewPurchase\\\" ng-model=\\\"vm.purchase.no_stock_replenishment\\\">\\n{{\\\"PURCHASE.REPLENISHMENT_NO_STOCK\\\" | translate}}<md-icon class=\\\"mb-5 ml-5\\\" md-font-icon=\\\"icon-information-outline\\\">\\n<md-tooltip md-direction=\\\"bottom\\\">{{\\\"PURCHASE.REPLENISHMENT_NO_STOCK_INFORMATION\\\" | translate}}</md-tooltip></md-icon>\\n</md-checkbox><md-checkbox class=\\\"m-0\\\" ng-disabled=\\\"!vm.isNewPurchase\\\" \\nng-model=\\\"vm.purchase.negative_stock_replenishment\\\">{{\\\"PURCHASE.REPLENISHMENT_NEGATIVE_STOCK\\\" | translate}}<md-icon \\nclass=\\\"mb-5 ml-5\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\\"PURCHASE.REPLENISHMENT_NEGATIVE_STOCK_INFORMATION\\\" | translate}}</md-tooltip></md-icon></md-checkbox></div><div \\nclass=\\\"mt-30 h4\\\" translate=\\\"PURCHASE.SALES_REPLENISHMENT\\\"></div><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><md-input-container class=\\\"m-0 ml-8 mt-10\\\"><md-checkbox ng-disabled=\\\"!vm.isNewPurchase\\\" \\nng-model=\\\"vm.purchase.is_replenishment\\\">{{\\'PURCHASE.IS_REPLENISHMENT\\' | translate }}</md-checkbox></md-input-container>\\n</div><div flex layout=\\\"row\\\" layout-gt-sm=\\\"row\\\" layout-wrap class=\\\"pl-10\\\"><md-input-container class=\\\"mt-5\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-datepicker flex=\\\"100\\\" md-hide-icons=\\\"calendar\\\" md-max-date=\\\"vm.maxDate\\\" \\nmd-min-date=\\\"vm.replenishment_min_date\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'PURCHASE.REPLENISHMENT_PERIOD_START\\' | translate}}\\\" \\nng-disabled=\\\"!vm.purchase.is_replenishment || !vm.isNewPurchase || (!Session.hasPermission(\\'inventory.purchases.create\\') && !Session.hasPermission(\\'inventory.purchases.purchase.details.update\\'))\\\" \\nng-model=\\\"vm.purchase.replenishment_period_start\\\" ng-required=\\\"vm.purchase.is_replenishment\\\"></md-datepicker>\\n</md-input-container><md-input-container class=\\\"mt-5\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-datepicker \\nmd-hide-icons=\\\"calendar\\\" md-max-date=\\\"vm.maxDate\\\" md-min-date=\\\"vm.replenishment_min_date\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'PURCHASE.REPLENISHMENT_PERIOD_END\\' | translate}}\\\" \\nng-disabled=\\\"!vm.purchase.is_replenishment || !vm.isNewPurchase || (!Session.hasPermission(\\'inventory.purchases.create\\') && !Session.hasPermission(\\'inventory.purchases.purchase.details.update\\'))\\\" \\nng-model=\\\"vm.purchase.replenishment_period_end\\\" ng-required=\\\"vm.purchase.is_replenishment\\\"></md-datepicker>\\n</md-input-container></div></md-card-content></md-card><div class=\\\"did-you-know md-margin yellow\\\" flex=\\\"30\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\"></md-icon><span \\nclass=\\\"did-you-know-title\\\">{{\\'PURCHASE.STOCK_FILTERS_CARD_TITLE\\' | translate}}</span></div><div class=\\\"p-8\\\"><div \\nclass=\\\"did-you-know-message\\\"><li translate=\\\"PURCHASE.STOCK_FILTERS_CARD_MESSAGE_1\\\"></li><li \\ntranslate=\\\"PURCHASE.STOCK_FILTERS_CARD_MESSAGE_2\\\"></li><li translate=\\\"PURCHASE.STOCK_FILTERS_CARD_MESSAGE_3\\\"></li>\\n</div></div></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/tabs/invoices.html\",\"<div id=\\\"purchase-invoices\\\" class=\\\"page-layout carded left-sidenav pl-8 pr-8 pb-8 pt-8\\\"><div class=\\\"center no-margin\\\" \\nlayout=\\\"column\\\" flex><div layout=\\\"row\\\" class=\\\"content-card\\\"><md-sidenav class=\\\"sidenav border-right\\\" \\nmd-is-locked-open=\\\"vm.sidenavLockedOpen && $mdMedia(\\'gt-md\\')\\\" md-component-id=\\\"sidenav\\\" ms-scroll ms-sidenav-helper>\\n<md-content class=\\\"content\\\" flex ms-scroll><div \\nng-include=\\\"\\'app/main/apps/inventory/views/purchases/sidenavs/main-sidenav.html\\'\\\"></div></md-content></md-sidenav><div \\nlayout=\\\"column\\\" flex><div class=\\\"toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"purchase-search\\\" \\nng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex>\\n<md-button class=\\\"m-0 md-primary md-raised\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.createDocument()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" \\nclass=\\\"mr-5\\\"></md-icon>{{\\'PURCHASE.NEW_INVOICE\\' | translate}}</div></md-button></div></div><md-content \\nclass=\\\"content no-padding fullpage-datatable\\\" flex ms-scroll><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table>\\n</md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/tabs/payments.html\",\"<div id=\\\"purchase-payments\\\"><div class=\\\"widget-group layout-wrap\\\" layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap=\\\"\\\"><ms-widget \\nlayout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140 ms-widget\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span flex=\\\"50\\\" class=\\\"h3 text-bold\\\">\\n{{\\'PURCHASES.PAYMENTS_PAID\\' | translate}}</span><div flex=\\\"50\\\" class=\\\"md-display-1 secondary-text\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{vm.purchase.paid_payments}}</div></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140 ms-widget\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span flex=\\\"50\\\" class=\\\"h3 text-bold\\\">\\n{{\\'PURCHASES.PAYMENTS_PENDING\\' | translate}}</span><div flex=\\\"50\\\" class=\\\"md-display-1 secondary-text\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{vm.purchase.pending_payments}}</div></ms-widget-front></ms-widget><ms-widget\\n layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140 ms-widget\\\"><ms-widget-front \\nclass=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span flex=\\\"50\\\" class=\\\"h3 text-bold\\\">\\n{{\\'PURCHASES.PENDING_TO_PAY\\' | translate}}</span><div flex=\\\"50\\\" class=\\\"md-display-1 yellow-fg\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{vm.purchase.pending_amount | price}}€</div></ms-widget-front></ms-widget><ms-widget \\nlayout=\\\"column\\\" layout-align=\\\"start space-between\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"h-140 ms-widget\\\">\\n<ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span flex=\\\"50\\\" class=\\\"h3 text-bold\\\">\\n{{\\'PURCHASES.TOTAL_PURCHASE_AMOUNT\\' | translate}}</span><div flex=\\\"50\\\" class=\\\"md-display-1 md-primary-fg\\\" flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{vm.purchase.total_amount | price}}€</div></ms-widget-front></ms-widget>\\n</div><nd-order-payments purchase-order=\\\"vm.purchase\\\" payment-methods=\\\"vm.paymentMethods\\\" \\nshow-pending-amount-button=\\\"true\\\"></nd-order-payments></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/tabs/products.html\",\"<div id=\\\"purchase-products\\\"><md-card><order-products order=\\\"vm.purchase\\\" type=\\\"\\'PurchaseOrder\\'\\\" \\noptions=\\\"vm.visualizationOptions\\\" show-prices=\\\"true\\\" edit-prices=\\\"true\\\" disable-taxes=\\\"false\\\" taxes=\\\"vm.taxes\\\" flex>\\n</order-products></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchases/sidenavs/main-sidenav.html\",\"<md-content class=\\\"content no-padding\\\" flex ms-scroll><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div \\nclass=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem == \\'all\\'\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon><md-select class=\\\"status-select\\\" flex multiple=\\\"true\\\" \\nng-change=\\\"vm.reloadPurchases()\\\" ng-model=\\\"vm.status.filters.statuses\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\" \\nng-value=\\\"status.code\\\"><span class=\\\"status-badge\\\" ng-class=\\\"vm.orderStatusColors[status.code]\\\">\\n{{ \\'PURCHASES.\\' + status.name | translate }}</span></md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select flex \\nmultiple=\\\"true\\\" ng-change=\\\"vm.reloadPurchases()\\\" ng-model=\\\"vm.status.filters.seasons\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_SEASONS\\' | translate}}\\\"><md-option ng-repeat=\\\"season in vm.seasons | orderBy: \\'position\\'\\\" \\nng-value=\\\"season.id\\\">{{season.name}}</md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-store\\\"></md-icon><md-select flex multiple=\\\"true\\\" ng-change=\\\"vm.reloadPurchases()\\\" \\nng-model=\\\"vm.status.filters.targetWarehouses\\\" placeholder=\\\"{{\\'TRANSFERS.ALL_TARGET_WAREHOUSES\\' | translate}}\\\">\\n<md-option ng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select flex \\nmultiple=\\\"true\\\" ng-change=\\\"vm.reloadPurchases()\\\" ng-model=\\\"vm.status.filters.brands\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_BRANDS\\' | translate}}\\\"><md-option ng-repeat=\\\"brand in vm.brands | orderBy: \\'name\\'\\\" \\nng-value=\\\"brand.id\\\">{{brand.name}}</md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder-multiple\\\"></md-icon><md-select flex \\nmultiple=\\\"true\\\" ng-change=\\\"vm.reloadPurchases()\\\" ng-model=\\\"vm.status.filters.categories\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_CATEGORIES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"category in vm.categories | orderBy: \\'name\\'\\\" ng-value=\\\"category.id\\\">{{category.name}}</md-option>\\n</md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-folder\\\"></md-icon><md-select flex multiple=\\\"true\\\" ng-change=\\\"vm.reloadPurchases()\\\" \\nng-model=\\\"vm.status.filters.subcategories\\\" placeholder=\\\"{{\\'PRODUCT.ALL_SUBCATEGORIES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | orderBy: \\'name\\'\\\" ng-value=\\\"subcategory.id\\\">\\n{{subcategory.category.name}} > {{subcategory.name}}</md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchases-calendar/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div class=\\\"item\\\" \\ntranslate=\\\"GENERAL.FILTERS\\\">Filters</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"ph-24\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterBrands\\\" \\nflex ng-change=\\\"vm.reloadPurchases()\\\" placeholder=\\\"{{\\'PRODUCT.ALL_BRANDS\\' | translate}}\\\"><md-option \\nng-repeat=\\\"brand in vm.brands | orderBy: \\'name\\'\\\" ng-value=\\\"brand.id\\\">{{brand.name}}</md-option></md-select></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"ph-24\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder-multiple\\\">\\n</md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterCategories\\\" flex ng-change=\\\"vm.reloadPurchases()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_CATEGORIES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"category in vm.categories | orderBy: \\'name\\'\\\" ng-value=\\\"category.id\\\">{{category.name}}</md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"ph-24\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-folder\\\"></md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterSubcategories\\\" flex \\nng-change=\\\"vm.reloadPurchases()\\\" placeholder=\\\"{{\\'PRODUCT.ALL_SUBCATEGORIES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | orderBy: \\'name\\' | filter: vm.filterCategories? {category: { name: vm.filterCategories}} : true\\\" \\nng-value=\\\"subcategory.id\\\">{{subcategory.name}}</md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-24\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon>\\n<md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterSeasons\\\" flex ng-change=\\\"vm.reloadPurchases()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_SEASONS\\' | translate}}\\\"><md-option ng-repeat=\\\"season in vm.seasons | orderBy: \\'position\\'\\\" \\nng-value=\\\"season.id\\\">{{season.name}}</md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/tabs/details.html\",\"<div id=\\\"stocktaking-details\\\"><md-card ng-if=\\\"!vm.isNewStocktaking\\\"><md-card-title><md-card-title-text><span \\nclass=\\\"h3\\\" translate=\\\"STOCKTAKING.STATUS\\\"></span></md-card-title-text></md-card-title><md-card-content><table \\nclass=\\\"simple\\\" flex><thead><tr class=\\\"md-background-bg\\\"><th></th><th translate=\\\"STOCKTAKING.CREATED_COLUMN_TITLE\\\" \\nwidth=\\\"40%\\\"></th><th translate=\\\"STOCKTAKING.APPLIED_COLUMN_TITLE\\\" width=\\\"40%\\\"></th><th \\ntranslate=\\\"STOCKTAKING.LAST_CLONE\\\" width=\\\"20%\\\"></th></tr></thead><tbody><tr><td><span class=\\\"status\\\" \\nng-class=\\\"vm.getStatusColorClass(vm.stocktaking.status)\\\">{{vm.getStatusLabel(vm.stocktaking.status)}}</span></td><td \\nwidth=\\\"40%\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"secondary-text\\\">\\n{{vm.stocktaking.created_at | date:\\'medium\\'}}</span><div class=\\\"ml-32\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.stocktaking.created_by_instance\\\"><nd-user-picture class=\\\"mr-8\\\" \\nfullname=\\\"vm.stocktaking.created_by_instance.full_name\\\"></nd-user-picture>\\n{{vm.stocktaking.created_by_instance.full_name}}</div></div></td><td width=\\\"40%\\\"><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"secondary-text\\\">{{vm.stocktaking.applied_at | date:\\'medium\\'}}</span><div \\nclass=\\\"ml-32\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.stocktaking.applied_by_instance\\\"><nd-user-picture \\nclass=\\\"mr-8\\\" fullname=\\\"vm.stocktaking.applied_by_instance.full_name\\\"></nd-user-picture>\\n{{vm.stocktaking.applied_by_instance.full_name}}</div></div></td><td width=\\\"20%\\\"><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"secondary-text\\\" ng-if=\\\"vm.stocktaking.last_clone\\\"><a class=\\\"mr-10\\\" \\nhref=\\\"/inventory/stocktakings/{{::vm.stocktaking.last_clone.id}}/products\\\" tabindex=\\\"-1\\\">\\n{{::vm.stocktaking.last_clone.autocode}}</a> </span><span class=\\\"secondary-text\\\" ng-if=\\\"!vm.stocktaking.last_clone\\\">-\\n</span></div></td></tr></tbody></table></md-card-content></md-card><div layout=\\\"row\\\" layout-align=\\\"start start\\\">\\n<md-card flex=\\\"70\\\"><md-card-title><md-card-title-text><span class=\\\"h2\\\" translate=\\\"STOCKTAKING.DETAILS\\\">Details</span>\\n</md-card-title-text></md-card-title><md-card-content><form name=\\\"detailsForm\\\"><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"row\\\" ng-if=\\\"vm.isNewStocktaking\\\"><md-input-container class=\\\"\\\" flex \\nhas-permission=\\\"inventory.stocktakings.create\\\"><label><span translate=\\\"STOCKTAKING.SERIAL_NUMBER\\\">Serial Number</span>\\n</label><md-select ng-model=\\\"vm.stocktaking.serial_number_type\\\" required><md-option \\nng-repeat=\\\"serialNumberType in  vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_STOCKTAKING_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'STOCKTAKING.STOCKTAKING_LOCATION\\' | translate}}\\\" md-item-text=\\\"warehouse.name\\\" \\nmd-items=\\\"warehouse in vm.querySearch(\\'warehouse\\')\\\" md-min-length=\\\"0\\\" md-require-match \\nmd-search-text=\\\"vm.searchWarehouse\\\" md-selected-item=\\\"vm.warehouse\\\" ng-disabled=\\\"vm.disableDetails()\\\" required><span \\nmd-highlight-text=\\\"vm.searchWarehouse\\\">{{warehouse.name}}</span></md-autocomplete><md-select class=\\\"pr-10\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-disabled=\\\"vm.disableDetails()\\\" ng-model=\\\"vm.stocktaking.partial\\\" \\nplaceholder=\\\"{{\\'STOCKTAKING.STOCKTAKING_TYPE\\' | translate}}\\\"><md-option ng-value=\\\"false\\\">\\n{{\\'STOCKTAKING.TOTAL_STOCKTAKING\\' | translate }}</md-option><md-option ng-value=\\\"true\\\">\\n{{\\'STOCKTAKING.PARTIAL_STOCKTAKING\\' | translate }}</md-option></md-select></div><div layout=\\\"row\\\" layout-wrap \\nng-if=\\\"vm.stocktaking.partial\\\"><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'STOCKTAKING.FILTER_BRAND\\' | translate}}\\\" md-item-text=\\\"brand.name\\\" \\nmd-items=\\\"brand in vm.querySearch(\\'brand\\')\\\" md-min-length=\\\"3\\\" md-require-match md-search-text=\\\"vm.searchBrand\\\" \\nmd-selected-item=\\\"vm.brand\\\" ng-disabled=\\\"vm.disableDetails()\\\"><span md-highlight-text=\\\"vm.searchBrand\\\">{{brand.name}}\\n</span></md-autocomplete><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'STOCKTAKING.FILTER_CATEGORY\\' | translate}}\\\" md-item-text=\\\"category.name\\\" \\nmd-items=\\\"category in vm.querySearch(\\'category\\')\\\" md-min-length=\\\"3\\\" md-require-match \\nmd-search-text=\\\"vm.searchCategory\\\" md-selected-item=\\\"vm.category\\\" ng-disabled=\\\"vm.disableDetails()\\\"><span \\nmd-highlight-text=\\\"vm.searchBrand\\\">{{category.name}}</span></md-autocomplete><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" md-floating-label=\\\"{{\\'STOCKTAKING.FILTER_SUBCATEGORY\\' | translate}}\\\" \\nmd-item-text=\\\"subcategory.name\\\" md-items=\\\"subcategory in vm.querySearch(\\'subcategory\\')\\\" md-min-length=\\\"3\\\" \\nmd-require-match md-search-text=\\\"vm.searchSubcategory\\\" md-selected-item=\\\"vm.subcategory\\\" \\nng-disabled=\\\"vm.disableDetails() || !vm.category\\\"><span md-highlight-text=\\\"vm.searchBrand\\\">{{subcategory.name}}</span>\\n</md-autocomplete><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'STOCKTAKING.FILTER_SEASON\\' | translate}}\\\" md-item-text=\\\"season.name\\\" \\nmd-items=\\\"season in vm.querySearch(\\'season\\')\\\" md-min-length=\\\"3\\\" md-require-match md-search-text=\\\"vm.searchSeason\\\" \\nmd-selected-item=\\\"vm.season\\\" ng-disabled=\\\"vm.disableDetails()\\\"><span md-highlight-text=\\\"vm.searchSeason\\\">\\n{{season.name}}</span></md-autocomplete><md-autocomplete class=\\\"pr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'STOCKTAKING.FILTER_COLLECTION\\' | translate}}\\\" md-item-text=\\\"collection.code\\\" \\nmd-items=\\\"collection in vm.querySearch(\\'collection\\')\\\" md-min-length=\\\"3\\\" md-require-match \\nmd-search-text=\\\"vm.searchCollection\\\" md-selected-item=\\\"vm.collection\\\" ng-disabled=\\\"vm.disableDetails()\\\"><span \\nmd-highlight-text=\\\"vm.searchCollection\\\">{{collection.code}}</span></md-autocomplete><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-checkbox aria-label=\\\"Update non selected products to 0\\\" class=\\\"m-0\\\" \\nng-disabled=\\\"vm.disableDetails()\\\" ng-model=\\\"vm.stocktaking.apply_raw_materials\\\"><span>\\n{{\\'STOCKTAKING.APPLY_RAW_MATERIALS\\' | translate }}</span></md-checkbox></div></div><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"column\\\"><md-checkbox ng-model=\\\"vm.stocktaking.stock_on_hand\\\" \\nclass=\\\"no-margin\\\"><span translate=\\\"STOCKTAKING.STOCK_ON_HAND\\\"></span></md-checkbox><div layout=\\\"row\\\" \\nclass=\\\"ml-30 secondary-text\\\"><div layout=\\\"column\\\"><span class=\\\"secondary-text\\\" \\ntranslate=\\\"STOCKTAKING.STOCK_ON_HAND_HELP\\\"></span> <span translate=\\\"STOCKTAKING.STOCK_ON_HAND_EXAMPLE\\\"></span></div>\\n</div></div></div><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div flex></div><md-button class=\\\"stroked\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.details.update_draft\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.stocktaking.changing_status\\\" ng-if=\\\"vm.stocktaking.status<2\\\" translate=\\\"STOCKTAKING.CANCEL\\\">Cancel\\n</md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.details.update_draft\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"vm.stocktaking.changing_status || detailsForm.$invalid\\\" \\nng-if=\\\"!vm.isNewStocktaking && vm.stocktaking.status<2\\\" translate=\\\"STOCKTAKING.SAVE\\\">Save</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" has-permission=\\\"inventory.stocktakings.create\\\" ng-click=\\\"vm.create()\\\" \\nng-disabled=\\\"!detailsForm.$dirty || detailsForm.$invalid\\\" ng-if=\\\"vm.isNewStocktaking\\\" translate=\\\"STOCKTAKING.CONTINUE\\\">\\nContinue</md-button></div></form></md-card-content></md-card><div class=\\\"did-you-know md-margin\\\" flex=\\\"30\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\"><md-icon class=\\\"blue-fg\\\" \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon><span class=\\\"did-you-know-title\\\">\\n{{\\'GENERAL.DID_YOU_KNOW\\' | translate}}</span></div><div class=\\\"p-8\\\"><div class=\\\"did-you-know-message\\\" \\ntranslate=\\\"STOCKTAKING.STOCKTAKING_MESSAGE\\\"></div><a \\nhref=\\\"https://support.stockagile.com/hc/es/articles/5556467209757-Realizar-un-inventariado-total-o-parcial-de-un-almac%C3%A9n\\\" \\ntarget=\\\"_blank\\\" translate=\\\"GENERAL.MORE_INFO\\\"></a></div></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/tabs/products.html\",\"<div id=\\\"stocktaking-products\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\">\\n</nd-barcode-listener><md-card class=\\\"mb-20\\\" class=\\\"no-padding\\\"><md-card-title layout=\\\"column\\\" class=\\\"no-padding\\\">\\n<md-card-title-text layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"p-10 pr-5\\\"><nd-product-autocomplete \\nng-if=\\\"vm.stocktaking.status === vm.STOCKTAKING_STATUSES.DRAFT\\\" flex=\\\"50\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.add_product\\\" callback=\\\"vm.searchProductCallback(product)\\\" \\nplaceholder=\\\"\\'STOCKTAKING.ADD_PRODUCT\\'\\\" brand=\\\"vm.stocktaking.brand\\\" collection=\\\"vm.stocktaking.collection\\\" \\ncategory=\\\"vm.stocktaking.category\\\" subcategory=\\\"vm.stocktaking.subcategory\\\" season=\\\"vm.stocktaking.season\\\" \\nng-disabled=\\\"vm.isDisabled()\\\"></nd-product-autocomplete><md-button ng-if=\\\"vm.stocktaking.status == 1\\\" \\nclass=\\\"md-button md-primary stroked\\\" data-test-id=\\\"stocktaking-button-advanced-search\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.add_product\\\" ng-click=\\\"vm.openProductSearchDialog($event)\\\" \\nng-disabled=\\\"vm.isDisabled()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\\\"></md-icon>\\n{{\\'STOCKTAKING.ADVANCED_SEARCH\\' | translate}}</div></md-button><span flex></span><md-progress-circular \\nng-if=\\\"vm.showProgressCircular()\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8 cursor-pointer\\\" ng-click=\\\"vm.showStatusDialog()\\\">\\n</md-progress-circular><md-button ng-if=\\\"vm.stocktaking.status == vm.STOCKTAKING_STATUSES.DRAFT\\\" \\nclass=\\\"mr-10 md-raised md-primary\\\" has-permission=\\\"inventory.stocktakings.stocktaking.products.apply_draft\\\" \\nng-click=\\\"vm.apply()\\\" ng-disabled=\\\"vm.isDisabled()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"STOCKTAKING.APPLY\\\"></span></div></md-button><md-menu md-position-mode=\\\"target-right target\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.menuOpened($mdMenu, $event)\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon>\\n</md-button><md-menu-content id=\\\"stocktaking-products-menu\\\"><md-menu-item ng-if=\\\"vm.showImportAction()\\\"><md-button \\nng-click=\\\"vm.showImportStocktakingDialog(null)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/publish.6e703bc5.svg\\\" class=\\\"import-stocktaking-icon\\\"></md-icon><span>\\n{{\\'STOCKTAKING.IMPORT\\' | translate}}</span></div></md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.switchShowStocktakingHistoric()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-clock\\\" class=\\\"s18\\\"></md-icon><span ng-if=\\\"!vm.getSwitchShowStocktakingHistoric()\\\">\\n{{\\'STOCKTAKING.SHOW_HISTORIC\\' | translate}}</span> <span ng-if=\\\"vm.getSwitchShowStocktakingHistoric()\\\">\\n{{\\'STOCKTAKING.HIDE_HISTORIC\\' | translate}}</span></div></md-button></md-menu-item><md-menu-item><md-button \\nhas-permission=\\\"inventory.stocktakings.create\\\" ng-click=\\\"vm.cloneStocktaking()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\" class=\\\"name icon\\\"></md-icon><span>\\n{{\\'STOCKTAKING.CLONE_STOCKTAKING\\' | translate}}</span></div></md-button></md-menu-item><md-divider \\nng-if=\\\"vm.importations.length\\\"></md-divider><div class=\\\"md-padding h-48\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.importations.length\\\"><md-progress-circular ng-if=\\\"vm.loadingImportations\\\" class=\\\"mr-8\\\" md-diameter=\\\"20px\\\">\\n</md-progress-circular><div flex translate=\\\"IMPORTER.IMPORTATIONS\\\"></div></div><md-menu-item \\nng-repeat=\\\"importation in vm.importations\\\"><md-button ng-click=\\\"vm.openImportation(importation)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"column\\\" flex>{{importation.created_at | date:\\'dd/MM/yyyy HH:mm\\'}}</div><div>\\n<span class=\\\"text-boxed stocktaking-products {{vm.IMPORTER_STATUS[importation.status]}}\\\">\\n{{\\'IMPORTER.\\' + vm.IMPORTER_STATUS[importation.status] | translate}}</span></div></div></md-button></md-menu-item>\\n</md-menu-content></md-menu></md-card-title-text><div class=\\\"md-card-subtitle p-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-input-container md-no-float class=\\\"nd-search-input\\\" flex=\\\"50\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"stocktaking-search\\\" ng-model=\\\"vm.search\\\" \\nng-change=\\\"vm.searchProduct()\\\" ng-model-options=\\\"{debounce:1500}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"STOCKTAKING.SEARCH_PRODUCTS\\\">\\n</md-input-container><div class=\\\"pl-10\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\"><md-checkbox class=\\\"m-0 ml-10\\\" \\nng-model=\\\"vm.showStocks\\\">{{\\\"SALE.SHOW_STOCKS\\\" | translate}}</md-checkbox></div><span flex></span><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"mr-5\\\"><span translate=\\\"STOCKTAKING.PRODUCTS\\\"></span>\\n {{vm.totalStocktakingOrderProducts || 0 }} </span><span class=\\\"mh-5 secondary-text\\\">|</span> <span \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\">{{vm.totalPreviousAmount || 0 }}\\n</span><md-icon class=\\\"mh-8 s14\\\" has-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\" \\nmd-font-icon=\\\"icon-arrow-right\\\"></md-icon><span class=\\\"mr-16\\\">{{vm.totalAmount || 0 }}</span></div></div>\\n</md-card-title><md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"md-primary\\\" ng-if=\\\"vm.fetching\\\">\\n</md-progress-linear><md-card-content class=\\\"no-padding\\\"><div layout=\\\"row\\\" class=\\\"pb-24\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.stocktaking.status==1 && !vm.stocktakingOrderProducts || vm.stocktakingOrderProducts.length == 0\\\"><img \\nclass=\\\"w-200 mt-24 mb-24 box-icon\\\" src=\\\"/assets/stockagile/icons/new-transfer.786ad255.png\\\"></div><table class=\\\"dataTable\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" data-test-id=\\\"stocktaking-table-products\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-card-content></md-card><md-card class=\\\"mb-16\\\" \\nng-show=\\\"vm.hasUIDs\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"space-between start\\\"><span \\nclass=\\\"h3\\\" translate=\\\"PRODUCT.UID_STOCKS\\\"></span><md-progress-circular ng-if=\\\"vm.fetching\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mh-8\\\"></md-progress-circular></div></md-card-title-text><span flex></span><md-input-container md-no-float \\nflex=\\\"50\\\" class=\\\"nd-search-input mr-16\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input \\nid=\\\"uid-search\\\" ng-model=\\\"vm.uidToSearch\\\" ng-change=\\\"vm.searchUID()\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></md-card-title>\\n<md-progress-linear ng-show=\\\"vm.fetching\\\" class=\\\"md-primary\\\" md-mode=\\\"query\\\"></md-progress-linear><md-card-content>\\n<table flex class=\\\"dataTable simple\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtUIDInstance\\\" dt-options=\\\"vm.dtUIDOptions\\\" \\ndt-columns=\\\"vm.dtUIDColumns\\\" id=\\\"datatable-table-2\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktakings/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon><md-select \\nng-model=\\\"vm.filterStatus\\\" flex multiple=\\\"true\\\" class=\\\"status-select\\\" \\nplaceholder=\\\"{{\\'STOCKTAKINGS.ALL_STATUS\\' | translate}}\\\"><md-option \\nng-repeat=\\\"status in vm.statusList | orderBy: \\'code\\'\\\" ng-value=\\\"status.code\\\"><span class=\\\"status-badge\\\" \\nng-class=\\\"vm.orderStatusColors[status.code]\\\">{{\\'STOCKTAKINGS.\\' + status.name | translate}}</span></md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-right\\\">\\n</md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select ng-model=\\\"vm.filterWarehouse\\\" flex>\\n<md-option ng-value=\\\"\\'\\'\\\" translate=\\\"STOCKTAKINGS.ALL_WAREHOUSES\\\">All Warehouses</md-option><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/tabs/deliveries.html\",\"<div id=\\\"transfer-deliveries\\\" layout=\\\"row\\\" flex><div layout=\\\"column\\\" ng-if=\\\"vm.transferOrderDelivery\\\" flex><md-card>\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"TRANSFER.DELIVERY_DETAILS\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><md-content class=\\\"content pt-0\\\" flex><form name=\\\"deliveriesForm\\\" layout=\\\"column\\\"><div\\n layout=\\\"row\\\" flex><table class=\\\"simple\\\" flex><thead><tr><th translate=\\\"TRANSFER.SERIAL_NUMBER\\\">Serial Number</th><th \\ntranslate=\\\"TRANSFER.STATUS\\\">Status</th><th translate=\\\"TRANSFER.CREATED_BY\\\">Created by</th><th \\ntranslate=\\\"TRANSFER.PREPARED_BY\\\">Prepared by</th><th translate=\\\"TRANSFER.SHIPPED_BY\\\">Shipped by</th><th \\ntranslate=\\\"TRANSFER.RECEIVED_BY\\\">Received by</th></tr></thead><tbody><tr><td \\ndata-test-id=\\\"transfer-order-delivery-autocode-id\\\">{{vm.transferOrderDelivery.autocode}}</td><td><span class=\\\"status\\\" \\nng-class=\\\"vm.getStatusColorClass(vm.transferOrderDelivery.status)\\\">\\n{{vm.getStatusLabel(vm.transferOrderDelivery.status)}}</span></td><td><nd-user-avatar \\nfullname=\\\"vm.transferOrderDelivery.created_by_fullname\\\" is-ai=\\\"vm.transferOrderDelivery.created_by_ai\\\" \\ninfo-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" date=\\\"vm.transferOrderDelivery.created_at\\\">\\n</nd-user-avatar></td><td><nd-user-avatar fullname=\\\"vm.transferOrderDelivery.prepared_by_fullname\\\" \\ndate=\\\"vm.transferOrderDelivery.prepared_at\\\"></nd-user-avatar><span \\nng-if=\\\"!vm.transferOrderDelivery.prepared_by_fullname\\\">-</span><br \\nng-if=\\\"!vm.transferOrderDelivery.prepared_by_fullname\\\"><span ng-if=\\\"!vm.transferOrderDelivery.prepared_at\\\" \\nclass=\\\"secondary-text\\\">-</span></td><td><nd-user-avatar fullname=\\\"vm.transferOrderDelivery.shipped_by_fullname\\\" \\ndate=\\\"vm.transferOrderDelivery.shipped_at\\\"></nd-user-avatar><span \\nng-if=\\\"!vm.transferOrderDelivery.shipped_by_fullname\\\">-</span><br \\nng-if=\\\"!vm.transferOrderDelivery.shipped_by_fullname\\\"><span ng-if=\\\"!vm.transferOrderDelivery.shipped_at\\\" \\nclass=\\\"secondary-text\\\">-</span></td><td><nd-user-avatar fullname=\\\"vm.transferOrderDelivery.received_by_fullname\\\" \\ndate=\\\"vm.transferOrderDelivery.received_at\\\"></nd-user-avatar><span \\nng-if=\\\"!vm.transferOrderDelivery.received_by_fullname\\\">-</span><br \\nng-if=\\\"!vm.transferOrderDelivery.received_by_fullname\\\"><span ng-if=\\\"!vm.transferOrderDelivery.received_at\\\" \\nclass=\\\"secondary-text\\\">-</span></td></tr></tbody></table></div></form></md-content></md-card-content></md-card><div \\nng-if=\\\"vm.isInPickingPackingProcess()\\\" class=\\\"did-you-know yellow m-8\\\" layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div class=\\\"pt-10 mb-8 did-you-know-message\\\"><span \\nclass=\\\"secondary-text\\\" translate=\\\"ORDER.WARNING_PICKING_AND_PACKING_TEXT\\\"></span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center start\\\" layout-align-gt-xs=\\\"start center\\\"><md-button class=\\\"yellow-fg\\\" \\nng-click=\\\"vm.goPickingAndPackingView()\\\">{{\\\"ORDER.WARNING_PICKING_AND_PACKING_BUTTON\\\" | translate}}</md-button></div>\\n</div><md-card><order-products order=\\\"vm.transferOrderDelivery\\\" type=\\\"\\'TransferOrderDelivery\\'\\\" \\noptions=\\\"vm.visualizationOptions\\\" taxes=\\\"null\\\" flex></order-products></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/tabs/details.html\",\"<div id=\\\"transfer-details\\\"><md-card class=\\\"mb-20\\\" ng-if=\\\"!vm.isNewTransfer\\\"><md-card-title><md-card-title-text><span \\nclass=\\\"h3\\\" translate=\\\"TRANSFER.STATUS\\\"></span></md-card-title-text></md-card-title><md-card-content><md-content \\nclass=\\\"content pt-0\\\" flex><table class=\\\"simple\\\" flex><thead><tr class=\\\"md-background-bg\\\"><th></th><th \\ntranslate=\\\"TRANSFER.CREATED_BY\\\">Created by</th><th translate=\\\"TRANSFER.CONFIRMED_BY\\\">Confirmed by</th><th \\ntranslate=\\\"TRANSFER.ALLOCATED_BY\\\">Allocated by</th><th translate=\\\"TRANSFER.SHIPPED_BY\\\">Shipped by</th><th \\ntranslate=\\\"TRANSFER.RECEIVED_BY\\\">Received by</th></tr></thead><tbody><tr><td><span class=\\\"status\\\" \\nng-class=\\\"vm.getStatusColorClass(vm.transfer.status)\\\">{{vm.getStatusLabel(vm.transfer.status)}}</span></td><td>\\n<nd-user-avatar date=\\\"vm.transfer.created_at\\\" fullname=\\\"vm.transfer.created_by_fullname\\\" \\ninfo-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" is-ai=\\\"vm.transfer.created_by_ai\\\">\\n</nd-user-avatar></td><td><nd-user-avatar date=\\\"vm.transfer.ordered_at\\\" default-date=\\\"vm.transfer.created_at\\\" \\nfullname=\\\"vm.transfer.ordered_by_fullname\\\" info-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" \\nis-ai=\\\"vm.transfer.created_by_ai\\\"></nd-user-avatar></td><td><nd-user-avatar date=\\\"vm.transfer.allocated_at\\\" \\nfullname=\\\"vm.transfer.allocated_by_fullname\\\"></nd-user-avatar><span ng-if=\\\"!vm.transfer.allocated_by\\\">-</span><br \\nng-if=\\\"!vm.transfer.allocated_by\\\"><span class=\\\"secondary-text\\\" ng-if=\\\"!vm.transfer.allocated_at\\\">-</span></td><td>\\n<nd-user-avatar date=\\\"vm.transfer.shipped_at\\\" fullname=\\\"vm.transfer.shipped_by_fullname\\\"></nd-user-avatar><span \\nng-if=\\\"!vm.transfer.shipped_by\\\">-</span><br ng-if=\\\"!vm.transfer.shipped_by\\\"><span class=\\\"secondary-text\\\" \\nng-if=\\\"!vm.transfer.shipped_at\\\">-</span></td><td><nd-user-avatar date=\\\"vm.transfer.received_at\\\" \\nfullname=\\\"vm.transfer.received_by_fullname\\\"></nd-user-avatar><span ng-if=\\\"!vm.transfer.received_by\\\">-</span><br \\nng-if=\\\"!vm.transfer.received_by\\\"><span class=\\\"secondary-text\\\" ng-if=\\\"!vm.transfer.received_at\\\">-</span></td></tr>\\n</tbody></table></md-content></md-card-content></md-card><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text>\\n<span class=\\\"h3\\\" translate=\\\"TRANSFER.DETAILS\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"detailsForm\\\"><div flex=\\\"100\\\" layout=\\\"row\\\"><md-input-container class=\\\"ml-5 pr-10\\\" flex=\\\"25\\\" \\nng-if=\\\"vm.isNewTransfer\\\"><label><span translate=\\\"TRANSFER.SERIAL_NUMBER\\\">Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.transfers.create\\') && !Session.hasPermission(\\'inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.transfer.serial_number_type\\\" required><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_TRANSFER_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"pl-5 pr-10\\\" flex=\\\"25\\\" ng-if=\\\"!vm.isNewTransfer\\\"><label translate=\\\"TRANSFER.SERIAL_NUMBER\\\">Serial Number</label>\\n<input ng-disabled=\\\"true\\\" ng-model=\\\"vm.transfer.autocode\\\"></md-input-container><md-input-container class=\\\"ml-5 pr-10\\\" \\nflex=\\\"25\\\"><label><span translate=\\\"TRANSFER.DELIVERY_NOTES\\\">Delivery Notes</span> <span \\ntranslate=\\\"TRANSFER.SERIAL_NUMBER\\\">Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.transfers.create\\') && !Session.hasPermission(\\'inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.transfer.delivery_notes_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_TRANSFER_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"pl-5 pr-10\\\" flex=\\\"25\\\" ng-if=\\\"!vm.isReplenishment\\\"><label translate=\\\"TRANSFER.EXPECTED_DATE\\\">Expected date\\n</label><md-datepicker md-min-date=\\\"vm.minDate\\\" md-open-on-focus=\\\"true\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.transfers.create\\') && !Session.hasPermission(\\'inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.transfer.expected_at\\\"></md-datepicker></md-input-container></div><div flex layout=\\\"row\\\">\\n<md-input-container class=\\\"ml-5 pr-10\\\" flex=\\\"50\\\"><label><span translate=\\\"TRANSFER.FROM_WAREHOUSE\\\">From warehouse</span>\\n</label><md-select data-test-id=\\\"transfer-select-source-warehouse\\\" md-on-close=\\\"vm.searchSelectHeader[0] = \\'\\'\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"vm.transfer.status>1 || !Session.hasPermission(\\'inventory.transfers.create\\') || !Session.hasPermission(\\'inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.transfer.source_warehouse.id\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[0]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\ndata-test-id=\\\"transfer-option-warehouse-source\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[0]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"ml-5 pr-10\\\" flex=\\\"50\\\"><label><span ng-if=\\\"!vm.isReplenishment\\\" translate=\\\"TRANSFER.TO_WAREHOUSE\\\">To warehouse\\n</span> <span ng-if=\\\"vm.isReplenishment\\\" translate=\\\"TRANSFER.WAREHOUSE_TO_REPLENISH\\\">To warehouse</span></label>\\n<md-select data-test-id=\\\"transfer-select-target-warehouse\\\" md-on-close=\\\"vm.searchSelectHeader[1] = \\'\\'\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"(vm.transfer.status>1 && vm.transfer.status!==2) || !Session.hasPermission(\\'inventory.transfers.create\\') || !Session.hasPermission(\\'inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.transfer.target_warehouse.id\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[1]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\ndata-test-id=\\\"transfer-option-warehouse-target\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[1]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div flex layout=\\\"row\\\">\\n<md-input-container class=\\\"ml-5 pr-10\\\" flex><label translate=\\\"TRANSFER.NOTES\\\">Notes</label><textarea \\nhas-permission-else-disable=\\\"inventory.transfers.create,inventory.transfers.transfer.details.update\\\" \\nmd-maxlength=\\\"1000\\\" md-select-on-focus ng-model=\\\"vm.transfer.notes\\\" rows=\\\"1\\\"></textarea></md-input-container><md-chips \\nclass=\\\"ml-5 pr-10\\\" delete-button-label=\\\"Remove tag\\\" delete-hint=\\\"Press delete to remove tag\\\" flex \\nng-model=\\\"vm.transfer.tags\\\" placeholder=\\\"Tag and press enter\\\" secondary-placeholder=\\\"Type another tag\\\"></md-chips>\\n</div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-padding ng-cloak ng-if=\\\"vm.isReplenishment\\\"><md-input-container \\nflex=\\\"50\\\" flex-gt-sm=\\\"25\\\" layout=\\\"column\\\"><label translate=\\\"{{\\'TRANSFER.SALES_PERIOD_START\\' | translate}}\\\"></label>\\n<md-datepicker flex md-hide-icons=\\\"calendar\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'TRANSFER.SALES_PERIOD_START\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'nventory.transfers.create,inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.dateStart\\\"></md-datepicker></md-input-container><md-input-container flex=\\\"50\\\" flex-gt-sm=\\\"25\\\" \\nlayout=\\\"column\\\"><label translate=\\\"{{\\'TRANSFER.SALES_PERIOD_END\\' | translate}}\\\"></label><md-datepicker flex \\nmd-hide-icons=\\\"calendar\\\" md-open-on-focus md-placeholder=\\\"{{\\'TRANSFER.SALES_PERIOD_END\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'nventory.transfers.create,inventory.transfers.transfer.details.update\\')\\\" \\nng-model=\\\"vm.dateEnd\\\"></md-datepicker></md-input-container></div><div flex \\nhas-permission=\\\"inventory.transfers.transfer.details.update,inventory.transfers.create\\\" layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" data-test-id=\\\"transfer-button-cancel\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.saving\\\" translate=\\\"TRANSFER.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-primary md-raised\\\" \\ndata-test-id=\\\"transfer-button-save\\\" has-permission=\\\"inventory.transfers.transfer.details.update\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"vm.saving\\\" ng-if=\\\"!vm.isNewTransfer\\\" translate=\\\"TRANSFER.SAVE\\\">Save</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" data-test-id=\\\"transfer-button-continue\\\" has-permission=\\\"inventory.transfers.create\\\" \\nng-click=\\\"vm.create()\\\" ng-disabled=\\\"!detailsForm.$dirty || detailsForm.$invalid || vm.saving\\\" ng-if=\\\"vm.isNewTransfer\\\" \\ntranslate=\\\"TRANSFER.CONTINUE\\\">Continue</md-button></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/tabs/products.html\",\"<div id=\\\"transfer-products\\\"><div ng-if=\\\"vm.isInPickingPackingProcess()\\\" class=\\\"did-you-know yellow m-8 mb-16\\\" \\nlayout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\"><span class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.WARNING_PICKING_AND_PACKING_TEXT\\\"></span></div><div layout=\\\"row\\\" layout-align=\\\"center start\\\" \\nlayout-align-gt-xs=\\\"start center\\\"><md-button class=\\\"yellow-fg\\\" ng-click=\\\"vm.goPickingAndPackingView()\\\">\\n{{\\\"ORDER.WARNING_PICKING_AND_PACKING_BUTTON\\\" | translate}}</md-button></div></div><div id=\\\"transfer-order-products\\\">\\n<md-card><order-products order=\\\"vm.transfer\\\" type=\\\"\\'TransferOrder\\'\\\" options=\\\"vm.visualizationOptions\\\" taxes=\\\"null\\\" \\nflex></order-products></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfers/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-20\\\" ng-if=\\\"vm.currentNavItem==\\'all\\'\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.statuses\\\" flex \\nmultiple=\\\"true\\\" class=\\\"status-select\\\" ng-change=\\\"vm.reloadTransfers()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\" \\nng-value=\\\"status.code\\\"><span class=\\\"status-badge\\\" ng-class=\\\"vm.orderStatusColors[status.code]\\\">\\n{{\\'TRANSFERS.\\' + status.name | translate}}</span></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-20\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-left\\\"></md-icon><md-icon \\nclass=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select multiple=\\\"true\\\" \\nng-model=\\\"vm.status.filters.sourceWarehouses\\\" ng-change=\\\"vm.reloadTransfers()\\\" flex \\nplaceholder=\\\"{{\\'TRANSFERS.ALL_SOURCE_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-20\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon \\nclass=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select multiple=\\\"true\\\" \\nng-model=\\\"vm.status.filters.targetWarehouses\\\" ng-change=\\\"vm.reloadTransfers()\\\" flex \\nplaceholder=\\\"{{\\'TRANSFERS.ALL_TARGET_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-bookmark-outline\\\"></md-icon><md-select flex \\nng-change=\\\"vm.reloadTransfers()\\\" ng-model=\\\"vm.status.filters.type\\\"><md-option \\nng-repeat=\\\"transferType in vm.transfersTypes\\\" ng-value=\\\"transferType.value\\\">{{transferType.name | translate}}\\n</md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/uids/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-store\\\"></md-icon><md-select ng-model=\\\"vm.filterWarehouse\\\" flex><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"STOCKTAKINGS.ALL_WAREHOUSES\\\">All Warehouses</md-option><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.name\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/tabs/details.html\",\"<div id=\\\"inventory-warehouse-details\\\"><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"WAREHOUSE.WAREHOUSE_INFORMATION\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"detailsForm\\\"><div flex layout=\\\"column\\\"><div layout=\\\"row\\\"><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.CODE\\\">Code</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-code-tags\\\"></md-icon><input autocomplete=\\\"off\\\" \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update\\\" md-autofocus ng-model=\\\"vm.warehouse.code\\\" required \\ntype=\\\"text\\\"></md-input-container><md-input-container class=\\\"name-input-container md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\">\\n<label translate=\\\"WAREHOUSES.NAME\\\">Name</label><nd-warehouse-icon type=\\\"vm.warehouse.type\\\"></nd-warehouse-icon><input \\nautocomplete=\\\"off\\\" has-permission=\\\"inventory.warehouses.warehouse.details.update\\\" md-autofocus \\nng-model=\\\"vm.warehouse.name\\\" required type=\\\"text\\\"></md-input-container><div flex=\\\"50\\\" layout=\\\"row\\\"><md-input-container \\nclass=\\\"md-icon-float md-block mr-10\\\"><md-checkbox aria-label=\\\"Is principal\\\" ng-model=\\\"vm.warehouse.is_principal\\\">\\n{{\\'WAREHOUSE.IS_PRINCIPAL_LOCATION\\' | translate }}</md-checkbox></md-input-container></div></div><div layout=\\\"row\\\">\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.ADDRESS_1\\\">\\nAddress 1</label><md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/map-marker-outline.5e31356d.svg\\\" \\nmd-font-icon></md-icon><input has-permission=\\\"inventory.warehouses.warehouse.details.update\\\" \\nng-model=\\\"vm.warehouse.address_1\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.ADDRESS_2\\\">Address 2</label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/map-marker-outline.5e31356d.svg\\\" md-font-icon></md-icon><input \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update\\\" ng-model=\\\"vm.warehouse.address_2\\\" type=\\\"text\\\">\\n</md-input-container></div><div layout=\\\"row\\\"><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.CITY\\\">City</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-city\\\">\\n</md-icon><input has-permission=\\\"inventory.warehouses.warehouse.details.update\\\" ng-model=\\\"vm.warehouse.city\\\" \\ntype=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label \\ntranslate=\\\"WAREHOUSES.ZIP_CODE\\\">Zip code</label><input has-permission=\\\"inventory.warehouses.warehouse.details.update\\\" \\nng-model=\\\"vm.warehouse.zip\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.COUNTRY\\\"></label><md-select class=\\\"mb-25\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.warehouses.warehouse.details.update\\')\\\" ng-model=\\\"vm.warehouse.country\\\">\\n<md-select-header><input ng-model=\\\"vm.countrySearch\\\" type=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option \\nng-repeat=\\\"country in (vm.countries | orderBy:\\'name\\' | filter: { name: vm.countrySearch })\\\" ng-value=\\\"country.code\\\">\\n{{country.name}}</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.PHONE_NUMBER\\\">Phone number</label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/phone-outline.476dbd8d.svg\\\" md-font-icon></md-icon><input \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update\\\" ng-model=\\\"vm.warehouse.phone\\\" type=\\\"text\\\">\\n</md-input-container></div><div layout=\\\"row\\\"><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.POSITION\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-sort-numeric\\\">\\n</md-icon><input has-permission=\\\"inventory.warehouses.warehouse.details.update\\\" ng-model=\\\"vm.warehouse.position\\\" \\ntype=\\\"number\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label\\n translate=\\\"WAREHOUSE.TOTAL_AREA\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-border-all\\\"></md-icon><input \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update\\\" ng-model=\\\"vm.warehouse.total_area\\\" type=\\\"number\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label \\ntranslate=\\\"WAREHOUSE.TOTAL_VOLUME\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-codepen\\\"></md-icon><input \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update\\\" ng-model=\\\"vm.warehouse.total_volume\\\" type=\\\"number\\\">\\n</md-input-container></div><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"!detailsForm.$dirty\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!detailsForm.$dirty\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></div></div></form></md-card-content></md-card><md-card class=\\\"mb-16\\\" \\nng-if=\\\"vm.warehouse.type === vm.WAREHOUSE_TYPES.STORE\\\" class=\\\"mb-16\\\"><md-card-title><md-card-title-text><span \\nclass=\\\"h3\\\" translate=\\\"WAREHOUSE.STORE_SETTINGS\\\"></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"configurationForm\\\" layout=\\\"row\\\" layout-wrap><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"PRODUCT.PRICING_TIER\\\"></label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/layers-outline.f65f063a.svg\\\" md-font-icon></md-icon><md-select \\nclass=\\\"mb-25\\\" name=\\\"pricing_tier\\\" ng-model=\\\"vm.warehouse.pricing_tier\\\" required><md-select-header><input \\nng-model=\\\"vm.pricingTierSearch\\\" type=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option \\nng-repeat=\\\"pricingTier in (vm.pricingTiers | orderBy: \\'position\\' | filter: { name: vm.pricingTierSearch })\\\" \\nng-value=\\\"pricingTier.id\\\">{{pricingTier.name}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"WAREHOUSE.TICKET_TEMPLATE\\\"></label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-receipt\\\"></md-icon><md-select class=\\\"mb-25\\\" name=\\\"ticket_configuration\\\" \\nng-model=\\\"vm.warehouse.ticket_configuration\\\" required><md-select-header><input ng-model=\\\"vm.ticketConfigurationSearch\\\" \\ntype=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-select-header-input\\\" \\nng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option \\nng-repeat=\\\"ticketConfiguration in (vm.ticketConfigurations | filter: { name: vm.ticketConfigurationSearch })\\\" \\nng-value=\\\"ticketConfiguration.id\\\">{{ticketConfiguration.name}}</md-option></md-select></md-input-container><div \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"!configurationForm.$dirty\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!configurationForm.$dirty\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></div></form></md-card-content></md-card><md-card \\nng-if=\\\"vm.warehouse.type === vm.WAREHOUSE_TYPES.STORE && session.company.has_inventory_analytics\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.PLANNING_SETTINGS\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><form name=\\\"configurationForm\\\"><div layout=\\\"column\\\" flex><div \\nng-show=\\\"Session.company.has_inventory_analytics\\\"><div layout=\\\"row\\\"><div layout=\\\"row\\\" flex=\\\"50\\\"><md-input-container \\nflex><label translate=\\\"INVENTORY_CONFIGURATION.ORDER_FREQUENCY_DAYS\\\"></label><md-icon md-font-icon=\\\"icon-refresh\\\" \\nclass=\\\"icon\\\"></md-icon><input type=\\\"number\\\" name=\\\"order_frequency\\\" ng-model=\\\"vm.warehouse.order_frequency\\\" \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update_inventory_optimization_configuration\\\"><div \\nng-messages=\\\"stocksOptimization.order_frequency.$error\\\" ng-show=\\\"stocksOptimization.order_frequency.$touched\\\" \\nrole=\\\"alert\\\"></div></md-input-container></div><div layout=\\\"row\\\" flex=\\\"50\\\"><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.TRANSFER_LEAD_TIME_DAYS\\\"></label><md-icon md-font-icon=\\\"icon-truck\\\" class=\\\"icon\\\">\\n</md-icon><input type=\\\"number\\\" name=\\\"transfer_lead_time\\\" ng-model=\\\"vm.warehouse.transfer_lead_time\\\" \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update_inventory_optimization_configuration\\\"><div \\nng-messages=\\\"stocksOptimization.transfer_lead_time.$error\\\" ng-show=\\\"stocksOptimization.transfer_lead_time.$touched\\\" \\nrole=\\\"alert\\\"></div></md-input-container></div></div><div layout=\\\"row\\\"><div layout=\\\"row\\\" flex=\\\"50\\\"><md-input-container \\nflex class=\\\"md-icon-float md-block\\\"><label translate=\\\"WAREHOUSE.REPLENISHMENT_WAREHOUSE\\\"></label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/warehouse.1e982d37.svg\\\" class=\\\"icon\\\"></md-icon><md-select \\nng-model=\\\"vm.warehouse.replenishment_warehouse\\\" class=\\\"mb-25\\\" name=\\\"replenishment_warehouse\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'inventory.warehouses.warehouse.details.update_inventory_optimization_configuration\\')\\\">\\n<md-select-header><input ng-model=\\\"vm.replenishmentWarehouseSearch\\\" type=\\\"search\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\">\\n</md-select-header><md-option ng-value=\\\"null\\\"><em>\\n{{\\'WAREHOUSE.DEFAULT_REPLENISHMENT_WAREHOUSE\\' | translate}} ({{vm.getDefaultReplenishmentWarehouseName()}})</em>\\n</md-option><md-option ng-repeat=\\\"warehouse in (vm.warehouses | filter: { name: vm.replenishmentWarehouseSearch })\\\" \\nng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select></md-input-container></div><div layout=\\\"row\\\" \\nflex=\\\"50\\\"><md-input-container flex class=\\\"md-icon-float md-block\\\"><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.EXPANSION_PERCENTAGE\\\"></label><md-icon md-font-icon=\\\"icon-trending-up\\\" class=\\\"icon\\\">\\n</md-icon><input type=\\\"number\\\" name=\\\"expansion_percentage\\\" ng-model=\\\"vm.warehouse.expansion_percentage\\\" \\nhas-permission=\\\"inventory.warehouses.warehouse.details.update_inventory_optimization_configuration\\\"> <small \\nclass=\\\"secondary-text\\\">{{\\'INVENTORY_CONFIGURATION.EXPANSION_PERCENTAGE_HELP\\' | translate}}</small></md-input-container>\\n<span>%</span></div></div></div><div layout-align=\\\"end center\\\" layout=\\\"row\\\" flex><md-button class=\\\"stroked\\\" \\nng-disabled=\\\"!configurationForm.$dirty\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"!configurationForm.$dirty\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></div></div></form></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text>\\n<span class=\\\"h3\\\" translate=\\\"WAREHOUSE.INVOICING_SETTINGS\\\"></span></md-card-title-text></md-card-title><md-card-content>\\n<form name=\\\"invoicingForm\\\"><div layout=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" layout=\\\"row\\\"><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"WAREHOUSE.FISCAL_ADDRESS\\\"></label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-bank\\\"></md-icon><md-select class=\\\"mb-25\\\" name=\\\"fiscal_address\\\" \\nng-change=\\\"vm.fiscalAddressChanged()\\\" ng-model=\\\"vm.warehouse.fiscal_address\\\"><md-option ng-value=\\\"null\\\">\\n{{\\'INVOICE.COMPANYS_FISCAL_ADDRESS\\' | translate}}</md-option><md-option \\nng-repeat=\\\"fiscalAddress in vm.fiscalAddresses\\\" ng-value=\\\"fiscalAddress.id\\\">\\n{{fiscalAddress.legal_name}} {{fiscalAddress.vat}}, <span class=\\\"secondary-text\\\">{{fiscalAddress | location}}</span>\\n</md-option></md-select><small class=\\\"hint secondary-text\\\">{{\\'WAREHOUSE.FISCAL_ADDRESS_HELP\\' | translate}}</small>\\n</md-input-container><div ng-if=\\\"vm.warehouse.type === vm.WAREHOUSE_TYPES.STORE\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" flex=\\\"50\\\" class=\\\"autocomplete-container no-md-errors-spacer\\\"><div><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/bank-outline.d3312f95.svg\\\" class=\\\"autocomplete-icon\\\"></md-icon></div><div\\n layout=\\\"column\\\" flex><md-autocomplete md-delay=\\\"300\\\" md-floating-label=\\\"{{\\'WAREHOUSE.DEFAULT_TAX\\' | translate}}\\\" \\nmd-items=\\\"item in vm.taxQuerySearch()\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"vm.taxSearchText\\\" \\nmd-selected-item=\\\"vm.selectedTax\\\" md-item-text=\\\"item.name\\\" md-selected-item-change=\\\"vm.selectedTaxChanged(item)\\\">\\n<md-item-template>{{item.name}}</md-item-template></md-autocomplete><small class=\\\"hint-autocomplete secondary-text\\\">\\n{{\\'WAREHOUSE.DEFAULT_TAX_HELP\\' | translate}}</small></div></div></div><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"WAREHOUSE.SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE\\\"></label>\\n<md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/file-document-outline.0472566f.svg\\\"></md-icon>\\n<md-select class=\\\"mb-25\\\" name=\\\"simplified_invoice_serial_number_type\\\" \\nng-model=\\\"vm.warehouse.simplified_invoice_serial_number_type\\\"><md-select-header><input \\nng-model=\\\"vm.simplifiedInvoiceSerialNumberTypeSearch\\\" type=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option ng-value=\\\"null\\\">\\n{{\\'WAREHOUSE.COMPANYS_DEFAULT_INVOICE_SERIAL_NUMBER_TYPE\\' | translate}}</md-option><md-option \\nng-repeat=\\\"serialNumberType in (vm.getVerifactuSerialNumberTypes() | filter: { name: vm.simplifiedInvoiceSerialNumberTypeSearch })\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"WAREHOUSE.CORRECTIVE_SIMPLIFIED_INVOICE_SERIAL_NUMBER_TYPE\\\"></label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-document-outline.0472566f.svg\\\"></md-icon><md-select class=\\\"mb-25\\\" \\nname=\\\"corrective_simplified_invoice_serial_number_type\\\" \\nng-model=\\\"vm.warehouse.corrective_simplified_invoice_serial_number_type\\\"><md-select-header><input \\nng-model=\\\"vm.correctiveSimplifiedInvoiceSerialNumberTypeSearch\\\" type=\\\"search\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\">\\n</md-select-header><md-option ng-value=\\\"null\\\">{{\\'WAREHOUSE.COMPANYS_DEFAULT_INVOICE_SERIAL_NUMBER_TYPE\\' | translate}}\\n</md-option><md-option \\nng-repeat=\\\"serialNumberType in (vm.getVerifactuSerialNumberTypes() | filter: { name: vm.correctiveSimplifiedInvoiceSerialNumberTypeSearch })\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"WAREHOUSE.CUSTOM_INVOICE_SERIAL_NUMBER_TYPE\\\"></label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-document-outline.0472566f.svg\\\"></md-icon><md-select class=\\\"mb-25\\\" \\nname=\\\"custom_invoice_serial_number_type\\\" ng-model=\\\"vm.warehouse.custom_invoice_serial_number_type\\\"><md-select-header>\\n<input ng-model=\\\"vm.customInvoiceSerialNumberTypeSearch\\\" type=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option ng-value=\\\"null\\\">\\n{{\\'WAREHOUSE.COMPANYS_DEFAULT_INVOICE_SERIAL_NUMBER_TYPE\\' | translate}}</md-option><md-option \\nng-repeat=\\\"serialNumberType in (vm.getVerifactuSerialNumberTypes() | filter: { name: vm.customInvoiceSerialNumberTypeSearch })\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><small class=\\\"hint secondary-text\\\">\\n{{\\'WAREHOUSE.COMPANYS_DEFAULT_INVOICE_SERIAL_NUMBER_TYPE_HELP\\' | translate}}</small></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\"><md-checkbox \\nng-model=\\\"vm.warehouse.create_register_activity_invoices\\\"><div layout=\\\"column\\\">\\n{{\\'WAREHOUSE.CREATE_REGISTER_ACTIVITY_INVOICES\\' | translate }} <small class=\\\"secondary-text\\\">\\n{{\\'WAREHOUSE.CREATE_REGISTER_ACTIVITY_INVOICES_INFO\\' | translate }}</small></div></md-checkbox></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" ng-if=\\\"vm.warehouse.create_register_activity_invoices\\\" flex=\\\"50\\\">\\n<label translate=\\\"WAREHOUSE.REGISTER_ACTIVITY_INVOICE_SERIAL_NUMBER_TYPE\\\"></label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file-document-outline.0472566f.svg\\\"></md-icon><md-select class=\\\"mb-25\\\" \\nname=\\\"register_activity_invoice_serial_number_type\\\" \\nng-model=\\\"vm.warehouse.register_activity_invoice_serial_number_type\\\"><md-select-header><input \\nng-model=\\\"vm.registerActivityInvoiceSerialNumberTypeSearch\\\" type=\\\"search\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"serialNumberType in (vm.getVerifactuSerialNumberTypes() | filter: { name: vm.registerActivityInvoiceSerialNumberTypeSearch })\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select></md-input-container><div flex=\\\"50\\\" ng-if=\\\"vm.warehouse.create_register_activity_invoices\\\" \\nlayout=\\\"column\\\"><nd-contacts contact-id=\\\"vm.warehouse.register_activity_invoice_contact\\\" \\ncontact-instance=\\\"vm.warehouse.register_activity_invoice_contact_instance\\\" create-button=\\\"true\\\" \\nplaceholder=\\\"\\'WAREHOUSE.REGISTER_ACTIVITY_INVOICE_CONTACT\\'\\\" required=\\\"false\\\"></nd-contacts></div><div flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"!invoicingForm.$dirty\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!invoicingForm.$dirty\\\" translate=\\\"GENERAL.SAVE\\\">Save\\n</md-button></div></div></form></md-card-content></md-card><md-card class=\\\"mb-16\\\" ng-if=\\\"vm.hasPickingAndPacking\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.PICKING_PACKING_SETTINGS\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><form name=\\\"pickingPackingForm\\\" layout=\\\"row\\\" layout-wrap>\\n<nd-paginated-dropdown flex=\\\"50\\\" additional-class=\\\"full-width\\\" url=\\\"vm.usersUrl\\\" \\nselected-items=\\\"vm.warehouse.contact_person\\\" transform-callback=\\\"vm.transformCallback(item)\\\" \\non-changed=\\\"vm.filterChanged()\\\" select-placeholder=\\\"CONTACTS.CONTACT_PERSON\\\" search=\\\"true\\\" variant=\\\"nd-form\\\" \\nis-multiple=\\\"false\\\" icon=\\\"icon-account\\\"><item-template><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-user-picture user=\\\"$parent.item\\\" style=\\\"width: 26px; height: 26px\\\"></nd-user-picture><div class=\\\"ml-8\\\">\\n{{$parent.item.name}}</div></div></item-template></nd-paginated-dropdown><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"!pickingPackingForm.$dirty\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!pickingPackingForm.$dirty\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div></form></md-card-content>\\n</md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/tabs/registers.html\",\"<div id=\\\"inventory-warehouse-registers\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"WAREHOUSE.REGISTERS\\\"></span> <span flex></span><md-button \\nng-if=\\\"!vm.hasSubscription\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.newRegister()\\\" \\nhas-permission=\\\"inventory.warehouses.warehouse.registers.add\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span>{{\\'REGISTERS.NEW_REGISTER\\' | translate}}</span></md-button>\\n<md-button ng-if=\\\"vm.hasSubscription && vm.registerLimit\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.newRegister()\\\" \\nhas-permission=\\\"inventory.warehouses.warehouse.registers.add\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/plan-limit-icon.3daed9e6.svg\\\" ng-if=\\\"vm.allowRegisterCreation()\\\" \\nclass=\\\"mr-8\\\"></md-icon><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\" \\nng-if=\\\"vm.blockRegisterCreation()\\\" class=\\\"mr-8\\\"></md-icon><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\" \\nng-if=\\\"!vm.allowRegisterCreation() && !vm.blockRegisterCreation()\\\"></md-icon><span>\\n{{\\'REGISTERS.NEW_REGISTER\\' | translate}}</span></md-button></md-card-title-text></md-card-title><md-card-content><table\\n class=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/tabs/stock-locations.html\",\"<div flex=\\\"100\\\" id=\\\"inventory-warehouse-stock-locations\\\" layout=\\\"column\\\"><md-card flex=\\\"100\\\" layout=\\\"column\\\"><div \\nclass=\\\"p-8 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container class=\\\"nd-search-input\\\" \\nng-if=\\\"vm.currentNavItem==\\'products\\'\\\" md-no-float><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-change=\\\"vm.reloadStockLocations()\\\" \\nng-model=\\\"vm.statusByProducts.search\\\" placeholder=\\\"Search\\\" translate ng-if=\\\"vm.currentNavItem==\\'products\\'\\\" \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"nd-search-input\\\" ng-if=\\\"vm.currentNavItem==\\'locations\\'\\\" md-no-float><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks \\nng-change=\\\"vm.reloadStockLocations()\\\" ng-model=\\\"vm.statusByStockLocation.search\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><div class=\\\"pl-10\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-checkbox class=\\\"no-margin\\\" ng-change=\\\"vm.reloadStockLocations()\\\" \\nng-model=\\\"vm.getStatus().filters.show_only_available\\\"><span ng-if=\\\"vm.currentNavItem==\\'locations\\'\\\" \\ntranslate=\\\"WAREHOUSE.SHOW_EMPTY_LOCATIONS\\\"></span> <span ng-if=\\\"vm.currentNavItem==\\'products\\'\\\" \\ntranslate=\\\"WAREHOUSE.SHOW_EMPTY_PRODUCTS\\\"></span></md-checkbox></div><span flex></span><nd-tabs \\ntabs=\\\"[\\n          {name: \\'locations\\', label: \\'WAREHOUSE.LOCATIONS\\'},\\n          {name: \\'products\\', label: \\'WAREHOUSE.PRODUCTS\\'}\\n        ]\\\" \\nselected=\\\"vm.currentNavItem\\\"></nd-tabs></div><md-card-content class=\\\"no-padding\\\" flex layout=\\\"column\\\" layout-fill>\\n<nd-stock-locations-by-warehouse-list flex layout=\\\"column\\\" layout-fill ng-if=\\\"vm.currentNavItem==\\'locations\\'\\\" \\nstatus=\\\"vm.statusByStockLocation\\\"></nd-stock-locations-by-warehouse-list><nd-stock-locations-by-products-list flex \\nlayout=\\\"column\\\" layout-fill ng-if=\\\"vm.currentNavItem==\\'products\\'\\\" status=\\\"vm.statusByProducts\\\">\\n</nd-stock-locations-by-products-list></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/tabs/stock.html\",\"<div id=\\\"inventory-warehouse-stock\\\"><div class=\\\"widget-group\\\" layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap><ms-widget \\nflippable=\\\"true\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"25\\\"><ms-widget-front class=\\\"white-bg\\\"><div \\nclass=\\\"pl-16 pr-8 pv-16 h-55\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><div class=\\\"h3\\\">\\n{{\\'WAREHOUSE.TOTAL_STOCK\\' | translate}}</div></div><div class=\\\"pt-8 pb-32\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"light-blue-fg font-size-72 line-height-72\\\">{{vm.stocks.total || 0}}</div><div \\nclass=\\\"h3 secondary-text font-weight-500\\\">{{\\'WAREHOUSE.STOCK_ITEMS\\' | translate}}</div></div><div \\nclass=\\\"p-16 grey-50-bg border-top\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nclass=\\\"h4 secondary-text text-truncate\\\">{{\\'WAREHOUSE.IN\\' | translate:{warehouse_name: vm.warehouse.name} }}</span>\\n</div></ms-widget-front></ms-widget><ms-widget flippable=\\\"true\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" \\nflex-gt-md=\\\"25\\\"><ms-widget-front class=\\\"white-bg\\\"><div class=\\\"pl-16 pr-8 pv-16 h-55\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><div class=\\\"h3\\\">{{\\'WAREHOUSE.TO_PREPARE\\' | translate}}</div></div><div \\nclass=\\\"pt-8 pb-32\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"red-fg font-size-72 line-height-72\\\">\\n{{vm.stocks.sold_pending_to_prepare + vm.stocks.transferred_pending_to_prepare}}</div><div \\nclass=\\\"h3 secondary-text font-weight-500\\\">{{\\'WAREHOUSE.STOCK_ITEMS\\' | translate}}</div></div><div \\nclass=\\\"p-16 grey-50-bg border-top\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nclass=\\\"h4 secondary-text text-truncate\\\">{{\\'WAREHOUSE.SOLD\\' | translate}}:</span> <span class=\\\"h4 ml-8\\\">\\n{{vm.stocks.sold_pending_to_prepare}}</span> <span flex></span> <span class=\\\"h4 secondary-text text-truncate\\\">\\n{{\\'WAREHOUSE.TRANSFERRED\\' | translate}}:</span> <span class=\\\"h4 ml-8\\\">{{vm.stocks.transferred_pending_to_prepare}}\\n</span></div></ms-widget-front></ms-widget><ms-widget flippable=\\\"true\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" \\nflex-gt-md=\\\"25\\\"><ms-widget-front class=\\\"white-bg\\\"><div class=\\\"pl-16 pr-8 pv-16 h-55\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><div class=\\\"h3\\\">{{\\'WAREHOUSE.TO_SHIP\\' | translate}}</div></div><div \\nclass=\\\"pt-8 pb-32\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"orange-fg font-size-72 line-height-72\\\">\\n{{vm.stocks.sold_pending_to_ship + vm.stocks.transferred_pending_to_ship}}</div><div \\nclass=\\\"h3 secondary-text font-weight-500\\\">{{\\'WAREHOUSE.STOCK_ITEMS\\' | translate}}</div></div><div \\nclass=\\\"p-16 grey-50-bg border-top\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nclass=\\\"h4 secondary-text text-truncate\\\">{{\\'WAREHOUSE.SOLD\\' | translate}}:</span> <span class=\\\"h4 ml-8\\\">\\n{{vm.stocks.sold_pending_to_ship}}</span> <span flex></span> <span class=\\\"h4 secondary-text text-truncate\\\">\\n{{\\'WAREHOUSE.TRANSFERRED\\' | translate}}:</span> <span class=\\\"h4 ml-8\\\">{{vm.stocks.transferred_pending_to_ship}}</span>\\n</div></ms-widget-front></ms-widget><ms-widget flippable=\\\"true\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" \\nflex-gt-md=\\\"25\\\"><ms-widget-front class=\\\"white-bg\\\"><div class=\\\"pl-16 pr-8 pv-16 h-55\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><div class=\\\"h3\\\">{{\\'WAREHOUSE.TO_RECEIVE\\' | translate}}</div></div><div \\nclass=\\\"pt-8 pb-32\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"blue-grey-fg font-size-72 line-height-72\\\">\\n{{vm.stocks.purchased_pending_to_receive + vm.stocks.transferred_pending_to_receive}}</div><div \\nclass=\\\"h3 secondary-text font-weight-500\\\">{{\\'WAREHOUSE.STOCK_ITEMS\\' | translate}}</div></div><div \\nclass=\\\"p-16 grey-50-bg border-top\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nclass=\\\"h4 secondary-text text-truncate\\\">{{\\'WAREHOUSE.PURCHASED\\' | translate}}:</span> <span class=\\\"h4 ml-8\\\">\\n{{vm.stocks.purchased_pending_to_receive}}</span> <span flex></span> <span class=\\\"h4 secondary-text text-truncate\\\">\\n{{\\'WAREHOUSE.TRANSFERRED\\' | translate}}:</span> <span class=\\\"h4 ml-8\\\">{{vm.stocks.transferred_pending_to_receive}}\\n</span></div></ms-widget-front></ms-widget></div><div class=\\\"widget-group\\\" layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap>\\n<ms-widget layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><ms-widget-front class=\\\"white-bg\\\"><div \\nclass=\\\"ph-16 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"pv-16 h3\\\" \\ntranslate=\\\"WAREHOUSE.STOCK_BY_CATEGORY\\\"></div></div><div class=\\\"p-16\\\"><nvd3 class=\\\"h-400\\\" \\nconfig=\\\"vm.categoriesWidget.mainChart.config\\\" options=\\\"vm.categoriesWidget.mainChart.options\\\" \\ndata=\\\"vm.categoriesWidget.mainChart.data\\\"></nvd3></div></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><ms-widget-front class=\\\"white-bg\\\"><div class=\\\"ph-16 border-bottom\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"pv-16 h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_SEASON\\\"></div></div><div class=\\\"p-16\\\">\\n<nvd3 class=\\\"h-400\\\" config=\\\"vm.seasonsWidget.mainChart.config\\\" options=\\\"vm.seasonsWidget.mainChart.options\\\" \\ndata=\\\"vm.seasonsWidget.mainChart.data\\\"></nvd3></div></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" \\nflex=\\\"100\\\"><ms-widget-front class=\\\"white-bg\\\"><div class=\\\"ph-16 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<div class=\\\"pv-16 h3\\\" translate=\\\"WAREHOUSE.STOCK_BY_SUBCATEGORY\\\"></div></div><div class=\\\"p-16\\\"><nvd3 \\noptions=\\\"vm.subcategoriesWidget.mainChart.options\\\" data=\\\"vm.subcategoriesWidget.mainChart.data\\\"></nvd3></div>\\n</ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"100\\\"><ms-widget-front class=\\\"white-bg\\\"><div \\nclass=\\\"ph-16 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"pv-16 h3\\\" \\ntranslate=\\\"WAREHOUSE.STOCK_BY_BRAND\\\"></div></div><div class=\\\"p-16\\\"><nvd3 \\noptions=\\\"vm.subcategoriesWidget.mainChart.options\\\" data=\\\"vm.brandsWidget.mainChart.data\\\"></nvd3></div>\\n</ms-widget-front></ms-widget></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/dialogs/transfer-all.html\",\"<md-dialog class=\\\"w-400 transfer-all-dialog\\\" aria-label=\\\"Transfer All\\\"><md-dialog-content layout=\\\"column\\\" ms-scroll \\nlayout-wrap><div ng-if=\\\"vm.creating\\\"><h2 class=\\\"mb-5 mt-0 pt-0\\\" flex=\\\"100\\\" translate=\\\"WAREHOUSE.CREATING_TRANSFER\\\">\\n</h2><p class=\\\"mb-30\\\" translate=\\\"WAREHOUSE.CREATING_TRANSFER_MSG\\\" translate-values=\\\"{email: vm.userEmail}\\\"></p></div>\\n<div ng-if=\\\"!vm.unableToDelete && !vm.creating\\\"><h2 class=\\\"mb-30 mt-0 pt-0\\\" flex=\\\"100\\\" \\ntranslate=\\\"WAREHOUSE.TRANSFER_ALL\\\"></h2><p translate=\\\"WAREHOUSES.SELECT_WAREHOUSE_TO_TRANSFER_MSG\\\"></p></div><div \\nng-if=\\\"vm.unableToDelete && !vm.creating\\\"><h2 class=\\\"mb-30 mt-0 pt-0\\\" flex=\\\"100\\\" \\ntranslate=\\\"WAREHOUSES.WAREHOUSE_STILL_HAVE_STOCKS\\\"></h2><p translate=\\\"WAREHOUSES.WAREHOUSE_STILL_HAVE_STOCKS_MSG\\\"></p>\\n</div><md-autocomplete class=\\\"mr-20\\\" md-selected-item=\\\"vm.targetWarehouse\\\" md-search-text=\\\"vm.searchWarehouse\\\" \\nmd-items=\\\"warehouse in vm.querySearch()\\\" md-item-text=\\\"warehouse.name\\\" \\nmd-floating-label=\\\"{{\\'GENERAL.SEARCH_WAREHOUSE_BY_NAME\\' | translate}}\\\" md-require-match md-min-length=\\\"3\\\" \\nmd-delay=\\\"500\\\" ng-if=\\\"!vm.creating\\\" required><span md-highlight-text=\\\"vm.searchWarehouse\\\">{{warehouse.name}}</span>\\n</md-autocomplete></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"!vm.creating\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.closeDialog()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.transferAll()\\\" translate=\\\"WAREHOUSE.TRANSFER_ALL\\\" class=\\\"md-primary md-raised\\\" \\nhotkey=\\\"{\\'enter\\': vm.transferAll}\\\" ng-disabled=\\\"vm.loading || !vm.targetWarehouse\\\">Transfer all</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouses/dialogs/warehouse-dialog.html\",\"<md-dialog class=\\\"warehouse-dialog\\\" aria-label=\\\"New\\\"><form name=\\\"warehouseForm\\\"><md-dialog-content layout=\\\"row\\\" \\nms-scroll layout-wrap><h2 class=\\\"mb-16 mt-0 pt-0\\\" flex=\\\"100\\\" translate=\\\"WAREHOUSES.NEW_WAREHOUSE\\\"></h2>\\n<md-input-container flex=\\\"100\\\" class=\\\"md-icon-float\\\"><label translate=\\\"WAREHOUSE.WAREHOUSE_TYPE\\\"></label><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/shape-outline.ca84450a.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.warehouse.type\\\" ng-change=\\\"vm.setContractedPlanLimit()\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-option \\nng-value=\\\"vm.WAREHOUSE_TYPES.WAREHOUSE\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-warehouse-badge \\ntype=\\\"vm.WAREHOUSE_TYPES.WAREHOUSE\\\"></nd-warehouse-badge></div></md-option><md-option \\nng-value=\\\"vm.WAREHOUSE_TYPES.STORE\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-warehouse-badge \\ntype=\\\"vm.WAREHOUSE_TYPES.STORE\\\"></nd-warehouse-badge></div></md-option></md-select></md-input-container>\\n<md-input-container class=\\\"md-icon-float\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.CODE\\\"></label>\\n<md-icon md-font-icon=\\\"icon-code-tags\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.warehouse.code\\\" type=\\\"text\\\" \\nautocomplete=\\\"off\\\"></md-input-container><md-input-container class=\\\"md-icon-float name-input-container\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.NAME\\\">Name</label><nd-warehouse-icon type=\\\"vm.warehouse.type\\\">\\n</nd-warehouse-icon><input ng-model=\\\"vm.warehouse.name\\\" type=\\\"text\\\" required autocomplete=\\\"off\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"PRODUCT.PRICING_TIER\\\"></label>\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/layers-outline.f65f063a.svg\\\" class=\\\"icon\\\">\\n</md-icon><md-select ng-model=\\\"vm.warehouse.pricing_tier\\\" class=\\\"mb-25\\\" required><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | orderBy: \\'position\\'\\\" ng-value=\\\"pricingTier.id\\\">{{pricingTier.name}}\\n</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<label translate=\\\"WAREHOUSES.PHONE_NUMBER\\\">Phone number</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/phone-outline.476dbd8d.svg\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.warehouse.phone\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.ADDRESS_1\\\">Address 1</label><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/map-marker-outline.5e31356d.svg\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.warehouse.address_1\\\" type=\\\"text\\\" required></md-input-container><md-input-container class=\\\"md-icon-float\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\"><label translate=\\\"WAREHOUSES.CITY\\\">City</label><md-icon></md-icon><input \\nng-model=\\\"vm.warehouse.city\\\" type=\\\"text\\\" required></md-input-container><md-input-container class=\\\"no-md-icon-float\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\"><label translate=\\\"WAREHOUSES.ZIP_CODE\\\">Zip code</label><md-icon></md-icon>\\n<input ng-model=\\\"vm.warehouse.zip\\\" type=\\\"text\\\" required></md-input-container><md-input-container class=\\\"md-icon-float\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.COUNTRY\\\"></label><md-icon></md-icon><md-select \\nng-model=\\\"vm.warehouse.country\\\" class=\\\"mb-25\\\" required><md-option ng-repeat=\\\"country in vm.countries | orderBy:\\'name\\'\\\" \\nng-value=\\\"country.code\\\">{{country.name}}</md-option></md-select></md-input-container>\\n<nd-contracted-plan-limit-alert-box contracted-plan-limit=\\\"vm.contractedPlanLimit\\\" flex=\\\"100\\\">\\n</nd-contracted-plan-limit-alert-box></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><span flex></span><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.closeDialog()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.saveWarehouse()\\\" ng-disabled=\\\"warehouseForm.$invalid\\\" translate=\\\"GENERAL.CREATE\\\" \\nclass=\\\"md-primary md-raised\\\" type=\\\"submit\\\" hotkey=\\\"{\\'enter\\': vm.saveWarehouse}\\\">Create</md-button></md-dialog-actions>\\n</form></md-dialog>\");\n$templateCache.put(\"app/main/apps/manufacture/views/production/tabs/details.html\",\"<div id=\\\"production-details\\\"><md-card flex><md-card-title><md-card-title-text><span class=\\\"h2\\\" \\ntranslate=\\\"COLLECTION.DETAILS\\\"></span> <span flex></span></md-card-title-text></md-card-title><md-card-content><form \\nname=\\\"detailsForm\\\"><div flex layout=\\\"row\\\"><md-input-container class=\\\"ml-5 pr-10\\\" flex=\\\"50\\\" ng-if=\\\"vm.isNewProduction\\\">\\n<label><span translate=\\\"PRODUCTION.SERIAL_NUMBER\\\">Serial Number</span></label><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'manufacture.productions.create\\') && !Session.hasPermission(\\'manufacture.productions.production.details.update\\')\\\" \\nng-model=\\\"vm.production.serial_number_type\\\" required><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_PRODUCTION_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"pl-5 pr-10\\\" flex=\\\"50\\\" ng-if=\\\"!vm.isNewProduction\\\"><label translate=\\\"PRODUCTION.SERIAL_NUMBER\\\">Serial Number\\n</label><input ng-disabled=\\\"true\\\" ng-model=\\\"vm.production.autocode\\\"></md-input-container><div flex layout=\\\"row\\\">\\n<md-input-container flex=\\\"50\\\" layout=\\\"column\\\"><md-datepicker flex md-hide-icons=\\\"calendar\\\" md-min-date=\\\"vm.minDate\\\" \\nmd-open-on-focus md-placeholder=\\\"{{\\'SALE.START_SHIPPING_DATE\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'manufacture.productions.create\\') && !Session.hasPermission(\\'manufacture.productions.production.details.update\\')\\\" \\nng-model=\\\"vm.production.start_date\\\"></md-datepicker></md-input-container><md-input-container flex=\\\"50\\\" layout=\\\"column\\\">\\n<md-datepicker flex md-hide-icons=\\\"calendar\\\" md-min-date=\\\"vm.production.start_date\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'SALE.CANCEL_DATE\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'manufacture.productions.create\\') && !Session.hasPermission(\\'manufacture.productions.production.details.update\\')\\\" \\nng-model=\\\"vm.production.cancel_date\\\"></md-datepicker></md-input-container></div></div><div flex layout=\\\"row\\\">\\n<md-input-container class=\\\"pl-5 pr-10\\\" flex><label translate=\\\"PRODUCTION.MATERIALS_WAREHOUSE\\\">Material Warehouse\\n</label><md-select md-on-close=\\\"vm.searchSelectHeader[1] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"vm.production.status>=1 || (!Session.hasPermission(\\'manufacture.productions.create\\') && !Session.hasPermission(\\'manufacture.productions.production.details.update\\'))\\\" \\nng-model=\\\"vm.production.source_warehouse.id\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[1]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[1]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"pl-5 pr-10\\\" flex><label translate=\\\"PRODUCTION.PRODUCTION_WAREHOUSE\\\">Production Warehouse</label><md-select \\nmd-on-close=\\\"vm.searchSelectHeader[1] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"vm.production.status>=1 || (!Session.hasPermission(\\'manufacture.productions.create\\') && !Session.hasPermission(\\'manufacture.productions.production.details.update\\'))\\\" \\nng-model=\\\"vm.production.target_warehouse.id\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[1]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[1]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div flex layout=\\\"row\\\">\\n<md-input-container class=\\\"pl-5 pr-10\\\" flex><label translate=\\\"PRODUCTION.SEASON\\\">Season</label><md-select \\nmd-on-close=\\\"vm.searchSelectHeader[2] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" ng-disabled=\\\"vm.production.status>=1\\\" \\nng-model=\\\"vm.production.season.id\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[2]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"season in vm.seasons | filter:vm.searchSelectHeader[2]\\\" ng-value=\\\"season.id\\\">{{season.name}}</md-option>\\n</md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div flex layout=\\\"row\\\"><md-input-container \\nclass=\\\"pl-5 pr-10\\\" flex><label translate=\\\"PRODUCTION.NOTES\\\">Notes</label><textarea md-maxlength=\\\"1000\\\" \\nmd-select-on-focus ng-model=\\\"vm.production.notes\\\" rows=\\\"1\\\"></textarea></md-input-container><md-chips \\nclass=\\\"pl-5 pr-10\\\" delete-button-label=\\\"Remove tag\\\" delete-hint=\\\"Press delete to remove tag\\\" flex \\nng-model=\\\"vm.production.tags\\\" placeholder=\\\"Tag and press enter\\\" secondary-placeholder=\\\"Type another tag\\\"></md-chips>\\n</div><div flex has-permission=\\\"manufacture.productions.production.details.update,manufacture.productions.create\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"\\\" translate=\\\"PRODUCTION.CANCEL\\\">\\nCancel</md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"manufacture.productions.production.details.update\\\" ng-click=\\\"vm.save()\\\" ng-if=\\\"!vm.isNewProduction\\\" \\ntranslate=\\\"PRODUCTION.SAVE\\\">Save</md-button><md-button class=\\\"md-primary\\\" \\nhas-permission=\\\"manufacture.productions.create\\\" ng-click=\\\"vm.create()\\\" \\nng-disabled=\\\"!detailsForm.$dirty || detailsForm.$invalid\\\" ng-if=\\\"vm.isNewProduction\\\" translate=\\\"PRODUCTION.CONTINUE\\\">\\nContinue</md-button></div></form></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/manufacture/views/production/tabs/materials.html\",\"<div id=\\\"production-products\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\">\\n</nd-barcode-listener><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h2\\\" translate=\\\"PRODUCTION.MATERIALS\\\"></span> <span flex></span>\\n<md-progress-circular ng-if=\\\"vm.changingStatus\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><md-button \\nng-if=\\\"vm.production.status == 10\\\" class=\\\"\\\" ng-disabled=\\\"vm.calculatingMaterials\\\" \\nhas-permission=\\\"manufacture.productions.production.products.add\\\" ng-click=\\\"vm.calculateMaterials()\\\" \\ntranslate=\\\"PRODUCTION.CALCULATE_MATERIALS\\\"></md-button></md-card-title-text></md-card-title><md-progress-linear \\nmd-mode=\\\"indeterminate\\\" class=\\\"md-primary\\\" ng-if=\\\"vm.fetching\\\"></md-progress-linear><md-card-content><div layout=\\\"row\\\" \\nclass=\\\"pb-24\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.production.status==1 && !vm.productionOrderProducts || vm.productionOrderProducts.length == 0\\\"><img \\nclass=\\\"w-200 mt-24 mb-24 box-icon\\\" src=\\\"/assets/stockagile/icons/new-transfer.786ad255.png\\\"></div><table class=\\\"dataTable\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\">\\n</table></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"TRANSFER.TOTAL_ITEMS\\\"></span> <span flex></span> <span \\nclass=\\\"h3 ml-16 pl-16\\\">{{vm.total_production_order_product_variants || 0}}</span></div></md-card-content></md-card>\\n</div>\");\n$templateCache.put(\"app/main/apps/manufacture/views/production/tabs/products.html\",\"<div id=\\\"production-products\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\">\\n</nd-barcode-listener><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" layout=\\\"start center\\\">\\n<span class=\\\"h2\\\" ng-if=\\\"!vm.editable\\\" translate=\\\"PRODUCTION.ORDER_PRODUCTS\\\"></span><nd-product-autocomplete \\nng-if=\\\"vm.editable\\\" has-permission=\\\"manufacture.productions.production.products.add\\\" \\ncallback=\\\"vm.searchProductCallback(product)\\\" placeholder=\\\"\\'SALE.ADD_PRODUCT\\'\\\" class=\\\"w-300\\\"></nd-product-autocomplete>\\n<md-button ng-if=\\\"vm.editable\\\" class=\\\"mr-10 w-40\\\" has-permission=\\\"manufacture.productions.production.products.add\\\" \\nng-click=\\\"vm.openProductSearchDialog($event)\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>\\n{{\\'PRODUCTION.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button><span flex></span><md-progress-circular \\nng-if=\\\"vm.changingStatus\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><md-button \\nng-if=\\\"vm.production.status == 10\\\" class=\\\"mr-10\\\" has-permission=\\\"manufacture.productions.production.products.produce\\\" \\nng-click=\\\"vm.order()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" translate=\\\"PRODUCTION.ORDER\\\">Order\\n</md-button><md-button ng-if=\\\"vm.production.status == 20\\\" class=\\\"mr-10\\\" \\nhas-permission=\\\"manufacture.productions.production.products.produce\\\" ng-click=\\\"vm.cancelOrder()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" translate=\\\"PRODUCTION.CANCEL\\\">Cancel</md-button><md-button \\nng-if=\\\"vm.production.status == 30\\\" class=\\\"mr-10\\\" has-permission=\\\"manufacture.productions.production.products.produce\\\" \\nng-click=\\\"vm.cancelProduce()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" translate=\\\"PRODUCTION.CANCEL\\\">\\nCancel</md-button><md-button ng-if=\\\"vm.production.status == 10 || vm.production.status == 20\\\" \\nclass=\\\"md-raised md-primary\\\" has-permission=\\\"manufacture.productions.production.products.produce\\\" \\nng-click=\\\"vm.produce()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" translate=\\\"PRODUCTION.PRODUCE\\\">\\nProduce</md-button><md-menu ng-if=\\\"vm.production.status < 20 || vm.editable\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"more\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item has-permission=\\\"manufacture.productions.production.products.produce\\\" \\nng-if=\\\"vm.production.status < 20 || vm.editable\\\"><md-button ng-click=\\\"vm.importSaleOrdersDialog()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\"></md-icon>\\n{{\\'PURCHASE.IMPORT_SALE_ORDERS\\' | translate}}</md-button></md-menu-item></md-menu-content></md-menu>\\n</md-card-title-text></md-card-title><md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"md-primary\\\" \\nng-if=\\\"vm.fetching\\\"></md-progress-linear><md-card-content><div layout=\\\"row\\\" class=\\\"pb-24\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.production.status==1 && !vm.productionOrderProducts || vm.productionOrderProducts.length == 0\\\"><img \\nclass=\\\"w-200 mt-24 mb-24 box-icon\\\" src=\\\"/assets/stockagile/icons/new-transfer.786ad255.png\\\"></div><table class=\\\"dataTable\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\">\\n</table></md-card-content></md-card><md-card class=\\\"mb-16\\\"><md-card-content><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"TRANSFER.TOTAL_ITEMS\\\"></span> <span flex></span> <span \\nclass=\\\"h3 ml-16 pl-16\\\">{{vm.total_production_order_product_variants || 0}}</span></div></md-card-content></md-card>\\n</div>\");\n$templateCache.put(\"app/main/apps/planning/views/dialogs/planning-validation-errors-dialog/planning-validation-errors-dialog.html\",\"<md-dialog layout=\\\"column\\\" class=\\\"w-500\\\"><md-dialog-content><h2 class=\\\"md-title\\\">{{vm.textTitle | translate}}</h2><div \\nclass=\\\"did-you-know yellow\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\">\\n</md-icon></div><div layout=\\\"column\\\" flex><span class=\\\"ml-5\\\">{{ vm.textWarning | translate }}</span></div></div></div>\\n<div><ul><li>\\n{{ vm.message | translate: { minQuantity: vm.minQuantity, orderedStock: vm.orderedStock, percentage: vm.percentage, proposedStock: vm.proposedStock, minStock: vm.minStock, amount: vm.amount } }}\\n</li></ul></div><span>{{vm.textFooter | translate}}</span></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary\\\">{{\\'GENERAL.CLOSE\\' | translate}}\\n</md-button><md-button ng-click=\\\"vm.goTo()\\\" class=\\\"md-primary\\\">{{\\'LOW_STOCK.GO_TO_CONFIGURATION\\' | translate}}\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/manufacture/views/productions/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div class=\\\"item\\\" \\ntranslate=\\\"GENERAL.FILTERS\\\">Filters</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"ph-24\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.filterStatus\\\" flex multiple=\\\"true\\\" class=\\\"status-select\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"status in vm.statusList | orderBy: \\'code\\'\\\" \\nng-value=\\\"status.code\\\"><span class=\\\"status-badge\\\" ng-class=\\\"vm.orderStatusColors[status.code]\\\">\\n{{\\'PRODUCTIONS.\\' + status.name | translate}}</span></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-24\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon \\nclass=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.filterTargetWarehouse\\\" \\nflex><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"TRANSFERS.ALL_TARGET_WAREHOUSES\\\">All Target Warehouses</md-option><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.name\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/sale/views/register-closure/subviews/cash-movements-table.html\",\"<table class=\\\"simple\\\" flex><thead><tr><th><span ng-if=\\\"!vm.hideCashMovementColumns\\\" \\ntranslate=\\\"REGISTER_CLOSURE.DATE_TIME\\\"></span> <span ng-if=\\\"vm.hideCashMovementColumns\\\" \\ntranslate=\\\"REGISTER_CLOSURE.CASH_MOVEMENTS\\\"></span></th><th translate=\\\"REGISTER_CLOSURE.USER\\\" \\nng-hide=\\\"vm.hideCashMovementColumns\\\">User</th><th translate=\\\"REGISTER_CLOSURE.NOTES\\\" \\nng-hide=\\\"vm.hideCashMovementColumns\\\">Notes</th><th translate=\\\"REGISTER_CLOSURE.TOTAL\\\" class=\\\"text-right\\\">Total</th>\\n</tr></thead><tbody><tr ng-repeat=\\\"cashMovements in vm.registerActivity.cash_movements | orderBy: \\'-id\\'\\\"><td><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{cashMovements.created_at | date:\\'MMM d, y H:mm:ss\\'}} <span \\nng-if=\\\"cashMovements.is_opening\\\" class=\\\"text-boxed\\\">{{\\'REGISTER_CLOSURE.OPENING\\' | translate}} </span><span \\nng-if=\\\"cashMovements.is_closure\\\" class=\\\"text-boxed\\\">{{\\'REGISTER_CLOSURE.CLOSURE\\' | translate}}</span></div></td><td \\nng-hide=\\\"vm.hideCashMovementColumns\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture \\nuser=\\\"cashMovements.created_by\\\" class=\\\"mr-8\\\"></nd-user-picture>{{cashMovements.created_by | personname}}</div></td><td \\nng-hide=\\\"vm.hideCashMovementColumns\\\">{{cashMovements.notes}}</td><td class=\\\"text-right\\\"><span \\nng-class=\\\"{\\n        \\'red-fg\\': cashMovements.amount < 0,\\n       }\\\">\\n{{cashMovements.amount | price}} {{vm.currencyCharacter}}</span></td></tr></tbody></table>\");\n$templateCache.put(\"app/main/apps/sale/views/register-closure/subviews/gift-cards-tbody.html\",\"<tr><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-wallet-membership\\\" class=\\\"pink-fg\\\">\\n</md-icon><md-icon md-font-icon=\\\"icon-arrow-right\\\" class=\\\"s14\\\"></md-icon><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" class=\\\"mr-8\\\"></md-icon><span flex>\\n{{\\'REPORTS.USED_VOUCHERS\\' | translate}}</span></div></td><td><div layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n{{vm.registerActivity.total_used_devolution_cards | price}} {{vm.currencyCharacter}}</div></td></tr><tr><td><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" class=\\\"\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-arrow-right\\\" class=\\\"s14\\\"></md-icon><md-icon md-font-icon=\\\"icon-wallet-membership\\\" \\nclass=\\\"pink-fg mr-8\\\"></md-icon><span flex>{{\\'REPORTS.GENERATED_VOUCHERS\\' | translate}}</span></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\">\\n{{vm.registerActivity.total_generated_devolution_cards | price}} {{vm.currencyCharacter}}</div></td></tr><tr \\nng-if=\\\"vm.registerActivity.total_used_gift_cards !== null\\\"><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-giftcard\\\" class=\\\"indigo-fg\\\"></md-icon><md-icon md-font-icon=\\\"icon-arrow-right\\\" class=\\\"s14\\\">\\n</md-icon><md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" \\nclass=\\\"mr-8\\\"></md-icon><span flex>{{\\'REPORTS.USED_GIFT_CARDS\\' | translate}}</span></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\">{{vm.registerActivity.total_used_gift_cards | price}} {{vm.currencyCharacter}}</div></td>\\n</tr><tr ng-if=\\\"vm.registerActivity.total_generated_gift_cards !== null\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/shopping-outline.b80fe817.svg\\\" class=\\\"\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-arrow-right\\\" class=\\\"s14\\\"></md-icon><md-icon md-font-icon=\\\"icon-wallet-giftcard\\\" \\nclass=\\\"indigo-fg mr-8\\\"></md-icon><span flex>{{\\'REPORTS.GENERATED_GIFT_CARDS\\' | translate}}</span></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\">\\n{{vm.registerActivity.total_generated_gift_cards | price}} {{vm.currencyCharacter}}</div></td></tr>\");\n$templateCache.put(\"app/main/apps/sale/views/register-closure/subviews/payment-methods-table.html\",\"<table class=\\\"simple\\\" flex><thead><tr><th translate=\\\"REGISTER_CLOSURE.PAYMENT_METHODS\\\">Payments</th><th \\nclass=\\\"text-right\\\">{{\\'REGISTER_CLOSURE.TOTAL\\' | translate}} {{vm.totalPaymentAmounts | price}} {{vm.currencyCharacter}}\\n</th></tr></thead><tbody><tr \\nng-repeat=\\\"registerActivityTotalPaymentAmount in vm.registerActivity.total_payment_amounts | orderBy: \\'payment_method\\'\\\">\\n<td><md-icon md-font-icon=\\\"{{vm.paymentMethodsDict[registerActivityTotalPaymentAmount.payment_method].icon}}\\\" \\nstyle=\\\"color:#{{vm.paymentMethodsDict[registerActivityTotalPaymentAmount.payment_method].foreground_color}}\\\" \\nclass=\\\"mr-8\\\"></md-icon>{{vm.paymentMethodsDict[registerActivityTotalPaymentAmount.payment_method].name}}</td><td><div \\nlayout=\\\"column\\\" layout-align=\\\"start end\\\" class=\\\"full-width\\\">\\n{{registerActivityTotalPaymentAmount.total | price}} {{vm.currencyCharacter}} <small class=\\\"secondary-text text-right\\\" \\nng-if=\\\"registerActivityTotalPaymentAmount.total_from_old_devolution_cards\\\" \\ntranslate=\\\"REGISTER_CLOSURE.TOTAL_PAYMENT_METHOD_BREAKDOWN\\\" \\ntranslate-values=\\\"{\\n               net_amount: (registerActivityTotalPaymentAmount.total - registerActivityTotalPaymentAmount.total_from_old_devolution_cards | price),\\n               total_from_old_devolution_cards: (registerActivityTotalPaymentAmount.total_from_old_devolution_cards | price),\\n               currency: vm.currencyCharacter\\n               }\\\">\\n</small></div></td></tr></tbody></table>\");\n$templateCache.put(\"app/main/apps/sale/views/register-closures/sidenav/main-sidenav.html\",\"<md-content class=\\\"content\\\" flex ms-scroll><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" \\nng-show=\\\"vm.currentView == vm.POS_ORDERS_VIEW || vm.currentView == vm.POS_ORDERS_PRODYCT_VARIANTS_VIEW\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-monitor-multiple\\\"></md-icon><md-select ng-model=\\\"vm.filterRegister\\\" flex \\nng-change=\\\"vm.selectedRegisterChanged()\\\"><md-option ng-value=\\\"\\'\\'\\\">{{\\'SALES_LOG.ALL_REGISTERS\\' |translate}}</md-option>\\n<md-option ng-repeat=\\\"register in vm.registers\\\" ng-value=\\\"register.id\\\">{{register.code}}<br><md-icon \\nmd-font-icon=\\\"icon-store\\\" class=\\\"s14\\\"></md-icon><small class=\\\"secondary-text\\\">{{register.warehouse.name}}</small>\\n</md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-show=\\\"vm.currentView == vm.POS_ORDERS_VIEW\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-account-multiple\\\">\\n</md-icon><md-select ng-model=\\\"vm.filterUser\\\" flex ng-change=\\\"vm.filterUserHasChanged()\\\"><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"SALES_LOG.ALL_USERS\\\">All Users</md-option><md-option ng-repeat=\\\"user in vm.users\\\" ng-value=\\\"user.id\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture user=\\\"user\\\" class=\\\"mr-5\\\"></nd-user-picture>\\n{{user | personname}}</div></md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/directives/nd-payment-methods-icon.html\",\"<div flex><md-icon class=\\\"mb-5\\\" md-font-icon=\\\"{{getIcon()}}\\\" ng-if=\\\"hasIcon()\\\"></md-icon><span \\nng-if=\\\"hasPaymentMethods() && !hasIcon() && hasCapital\\\" class=\\\"text-boxed blue-bg white-fg ml-0\\\">{{getCapital()}}\\n</span> <span class=\\\"ml-10 mt-5\\\">{{getNumberOfPaymentMethods()}}</span><md-tooltip md-direction=\\\"bottom\\\" \\nng-if=\\\"hasCapital\\\">{{getIconsTooltip()}}</md-tooltip></div>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/directives/nd-pos-order-verifactu-card.html\",\"<md-card class=\\\"nd-pos-order-verifactu-card border\\\" ng-if=\\\"hasInvoices()\\\"><md-card-title><md-card-title-text><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><div class=\\\"integration-app-icon\\\"><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/verifactu-color.62a97f20.svg\\\"></md-icon></div><div layout=\\\"column\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"VERIFACTU.TITLE\\\"></span><nd-a class=\\\"ml-8\\\" \\nstate=\\\"\\'app.accounting.invoices.invoice\\'\\\" state-params=\\\"{id: selectedInvoice.id}\\\">{{ selectedInvoice.autocode }}</nd-a>\\n</div><div class=\\\"fiscal-info secondary-text\\\" ng-if=\\\"selectedInvoice && selectedInvoice.fiscalInfo\\\"><span \\nng-if=\\\"selectedInvoice.fiscalInfo.legalName\\\"><strong>{{selectedInvoice.fiscalInfo.legalName}}</strong> </span><span \\nng-if=\\\"selectedInvoice.fiscalInfo.vat\\\"><span ng-if=\\\"selectedInvoice.fiscalInfo.legalName\\\">· </span>\\nNIF: {{selectedInvoice.fiscalInfo.vat}} </span><span ng-if=\\\"selectedInvoice.fiscalInfo.address\\\"><span \\nng-if=\\\"selectedInvoice.fiscalInfo.legalName || selectedInvoice.fiscalInfo.vat\\\">· </span>\\n{{selectedInvoice.fiscalInfo.address}} </span><span ng-if=\\\"selectedInvoice.fiscalInfo.cityZip\\\"><span \\nng-if=\\\"selectedInvoice.fiscalInfo.address\\\">, </span>{{selectedInvoice.fiscalInfo.cityZip}}</span></div></div></div>\\n</md-card-title-text></md-card-title><div ng-if=\\\"invoiceTabs.length > 1\\\" class=\\\"verifactu-tabs-container\\\"><nd-tabs \\ntabs=\\\"tabsConfig\\\" selected=\\\"selectedTabName\\\" on-tab-change=\\\"onTabChange(tab)\\\"></nd-tabs></div><md-card-content \\nng-if=\\\"selectedInvoice\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between end\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\" flex><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-8\\\"><span class=\\\"status-badge\\\" \\nng-class=\\\"getStatusBadgeClass(selectedInvoice.status)\\\">{{getStatusLabel(selectedInvoice.status)}} </span><span \\nclass=\\\"secondary-text ml-8\\\" ng-if=\\\"selectedInvoice.updatedAt\\\">\\n{{selectedInvoice.updatedAt | date: \\'dd/MM/yyyy\\'}} · {{selectedInvoice.updatedAt | date: \\'HH:mm\\'}}h</span></div><div \\nng-if=\\\"selectedInvoice.url\\\"><a ng-if=\\\"isValid() || isValidWithErrors()\\\" href=\\\"{{selectedInvoice.url}}\\\" target=\\\"_blank\\\" \\nclass=\\\"aeat-link\\\"><span translate=\\\"VERIFACTU.SHOW_IN_AEAT\\\"></span><md-icon md-font-icon=\\\"icon-open-in-new\\\" class=\\\"s16\\\">\\n</md-icon></a><a ng-if=\\\"hasError()\\\" ng-click=\\\"showErrorDetails()\\\" class=\\\"aeat-link error-link\\\"><span \\ntranslate=\\\"VERIFACTU.SHOW_ERROR\\\"></span><md-icon md-font-icon=\\\"icon-open-in-new\\\" class=\\\"s16\\\"></md-icon></a></div></div>\\n<div ng-if=\\\"selectedInvoice.qrCodeImage\\\"><a href=\\\"{{selectedInvoice.url}}\\\" target=\\\"_blank\\\" class=\\\"qr-link\\\"><img \\nclass=\\\"verifactu-qr-image\\\" ng-src=\\\"{{selectedInvoice.qrCodeImage}}\\\" alt=\\\"VeriFactu QR\\\"></a></div></div>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/bottom-sheets/numeric-keyword-bottom-sheet.html\",\"<md-bottom-sheet layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"grey-100-bg\\\"><div layout=\\\"row\\\"><div \\nclass=\\\"font-size-32 white-bg w-400 h-80 mb-5 mt-20 md-padding border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\">{{vm.value}}</div></div><div layout=\\\"row\\\"><div \\nclass=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(1)\\\">1</div><div class=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(2)\\\">2</div><div \\nclass=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(3)\\\">3</div><div class=\\\"font-size-32 orange-100-bg h-80 w-130 m-5 border-radius\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.clearValue()\\\">C</div></div><div layout=\\\"row\\\"><div \\nclass=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(4)\\\">4</div><div class=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(5)\\\">5</div><div \\nclass=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(6)\\\">6</div><div class=\\\"font-size-32 white-bg h-80 w-130 m-5 border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.removeValue()\\\"><md-icon md-font-icon=\\\"icon-keyboard-backspace\\\"></md-icon>\\n</div></div><div layout=\\\"row\\\"><div layout=\\\"column\\\"><div layout=\\\"row\\\"><div \\nclass=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(7)\\\">7</div><div class=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(8)\\\">8</div><div \\nclass=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(9)\\\">9</div></div><div layout=\\\"row\\\"><div \\nclass=\\\"font-size-32 white-bg h-80 w-170 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(0)\\\">0</div><div class=\\\"font-size-32 white-bg h-80 w-80 m-5 border-radius\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(\\',\\')\\\">,</div></div></div><div layout=\\\"row\\\"><div \\nclass=\\\"indigo-200-bg h-170 w-130 m-5 border-radius\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.returnValue()\\\"><md-icon md-font-icon=\\\"icon-keyboard-return\\\"></md-icon></div></div></div></md-bottom-sheet>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/bottom-sheets/users-bottom-sheet.html\",\"<md-bottom-sheet layout=\\\"column\\\"><div hide-xs hide-sm hide-md><h4 layout=\\\"row\\\" layout-align=\\\"center center\\\" \\ntranslate=\\\"SALES.WHO_MADE_SALE\\\"></h4><div><div flex layout=\\\"row\\\" layout-align=\\\"center center\\\" layout-wrap><md-button \\nng-click=\\\"vm.setUser(user)\\\" ng-repeat=\\\"user in vm.users\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"p-5\\\">\\n<nd-user-picture user=\\\"user.data\\\"></nd-user-picture>{{user.data.first_name}}</div></md-button></div></div></div><div \\nclass=\\\"h-400\\\" hide-lg hide-xl layout=\\\"column\\\" layout-align=\\\"center center\\\"><h4 layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" translate=\\\"SALES.WHO_MADE_SALE\\\"></h4><div class=\\\"pb-16\\\"><div flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" layout-wrap><md-button ng-click=\\\"vm.setUser(user)\\\" ng-repeat=\\\"user in vm.users\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"p-5\\\"><nd-user-picture user=\\\"user.data\\\"></nd-user-picture>\\n{{user.data.first_name}}</div></md-button></div></div></div></md-bottom-sheet>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/payment-status-dialog.html\",\"<md-dialog id=\\\"payment-gateway-status-dialog\\\"><md-dialog-content flex><div flex=\\\"100\\\" layout=\\\"row\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.pulling\\\" class=\\\"md-accent mr-16\\\" \\nmd-diameter=\\\"40\\\"></md-progress-circular></div><div flex layout=\\\"column\\\"><div layout=\\\"row\\\"><h2 class=\\\"m-0\\\" \\nng-if=\\\"vm.pulling && !vm.isDevolution\\\" translate=\\\"SALES.GATEWAY_PROCESSING_PAYMENT\\\"></h2><h2 class=\\\"m-0\\\" \\nng-if=\\\"vm.pulling && vm.isDevolution\\\" translate=\\\"SALES.GATEWAY_PROCESSING_DEVOLUTION\\\"></h2><h2 class=\\\"mt-0\\\" \\nng-if=\\\"!vm.pulling && vm.errorMessage && !vm.isDevolution\\\" translate=\\\"SALES.DEFAULT_TITLE_ERROR_GATEWAY\\\"></h2><h2 \\nclass=\\\"mt-0\\\" ng-if=\\\"!vm.pulling && vm.errorMessage && vm.isDevolution\\\" \\ntranslate=\\\"SALES.DEFAULT_TITLE_DEVOLUTION_ERROR_GATEWAY\\\"></h2></div><div layout=\\\"row\\\" \\nng-show=\\\"vm.pulling && !vm.errorMessage\\\"><h3 class=\\\"m-0\\\" translate=\\\"SALES.GATEWAY_FOLLOW_TERMINAL_INSTRUCTIONS\\\"></h3>\\n</div><div layout=\\\"row\\\" ng-show=\\\"vm.errorMessage && !vm.pulling\\\"><div class=\\\"did-you-know red animate-fade-in-out\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\" class=\\\"red-fg mr-8\\\" \\nng-if=\\\"!vm.pulling && vm.errorMessage\\\"></md-icon><span ng-if=\\\"vm.errorMessage && !vm.pulling\\\"><span \\nng-if=\\\"!vm.dialogErrorMessage\\\"><span ng-if=\\\"!vm.isDevolution\\\" translate=\\\"SALES.DEFAULT_ERROR_GATEWAY\\\"></span> <span \\nng-if=\\\"vm.isDevolution\\\" translate=\\\"SALES.DEFAULT_ERROR_DEVOLUTION_GATEWAY\\\"></span> </span><span \\nng-if=\\\"vm.dialogErrorMessage\\\" ng-bind=\\\"vm.dialogErrorMessage\\\"></span></span></div></div></div></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><div ng-if=\\\"!vm.confirmCancel\\\"><span flex></span><md-button \\nng-click=\\\"vm.close()\\\" class=\\\"md-primary\\\" ng-if=\\\"!vm.pulling\\\">{{\\'SALES.CHANGE_PAYMENT_METHOD\\' | translate}}</md-button>\\n<md-button ng-click=\\\"vm.confirmCancel = true\\\" ng-disabled=\\\"vm.isDevolution\\\" ng-if=\\\"vm.pulling\\\" class=\\\"md-primary\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button ng-click=\\\"vm.retry()\\\" class=\\\"md-primary\\\" \\nng-disabled=\\\"vm.pulling\\\">{{\\'GENERAL.RETRY\\' | translate}}</md-button></div><div ng-if=\\\"vm.confirmCancel\\\"><span \\ntranslate=\\\"SALES.CANCEL_PAYMENT_MSG\\\"></span><md-button ng-click=\\\"vm.confirmCancel = false\\\" ng-disabled=\\\"vm.cancelling\\\" \\nclass=\\\"stroked\\\">{{\\'GENERAL.NO\\' | translate}}</md-button><md-button ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.isDevolution || vm.cancelling\\\" ng-if=\\\"vm.pulling\\\" class=\\\"md-primary md-raised\\\">\\n{{\\'SALES.CANCEL_PAYMENT_BUTTON\\' | translate}}</md-button></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/product-not-found-dialog.html\",\"<md-dialog><md-dialog-content><h2 class=\\\"mb-32\\\">{{\\'SALES.PRODUCT_NOT_FOUND\\' | translate}}</h2><h3 class=\\\"mb-30\\\">\\n{{\\'SALES.PRODUCT_NOT_FOUND\\' | translate}}: {{vm.barcode}}</h3></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><span\\n flex></span><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" ng-disabled=\\\"vm.saving\\\">{{\\'GENERAL.CANCEL\\' | translate}}\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/product-variant-selector-dialog.html\",\"<md-dialog class=\\\"product-variant-selector-dialog w-400\\\"><md-dialog-content><h2>{{vm.product.name}}</h2><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"variants-loader\\\" ng-if=\\\"vm.fetching\\\"><md-progress-circular \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular></div><div layout=\\\"row\\\" layout-wrap flex><div \\nclass=\\\"md-background-bg md-hue-2 h-90 variant-box\\\" layout-align=\\\"center center\\\" layout=\\\"row\\\" flex=\\\"25\\\" \\nng-repeat=\\\"variant in vm.getAvailableVariants() | orderBy: \\'position\\'\\\" ng-click=\\\"vm.onVariantSelected(variant)\\\">\\n{{variant.name}}</div></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button translate=\\\"SALES.BACK\\\" \\nng-disabled=\\\"vm.disableBackButton()\\\" ng-click=\\\"vm.back()\\\" class=\\\"stroked\\\">Back</md-button><md-button \\ntranslate=\\\"GENERAL.CANCEL\\\" ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">Cancel</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/search-devolution-card-dialog.html\",\"<md-dialog aria-label=\\\"Search Voucher\\\" class=\\\"w-350\\\"><form ng-cloak name=\\\"voucherForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"SALES.FIND_VOUCHER\\\">Find Voucher</h2><h3 class=\\\"mb-30\\\" translate=\\\"SALES.FIND_VOUCHER_MSG\\\">\\nSetting the opening cash drawer amount</h3><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-membership\\\" class=\\\"name font-size-24\\\"></md-icon><input ng-model=\\\"vm.barcode\\\" \\nplaceholder=\\\"{{\\'SALES.VOUCHER_NUMBER\\' | translate}}\\\" autocomplete=\\\"off\\\" ng-disable=\\\"vm.searching\\\" name=\\\"barcode\\\" \\nnd-mute-barcode-callbacks type=\\\"text\\\" md-auto-focus><div ng-messages=\\\"voucherForm.barcode.$error\\\" role=\\\"alert\\\"><div \\nng-message=\\\"NotFoundCodeError\\\"><span translate=\\\"SALES.VOUCHER_NOT_FOUND\\\"></span></div></div></md-input-container><div \\nclass=\\\"did-you-know\\\"><div layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-lightbulb-outline\\\" class=\\\"blue-fg\\\"></md-icon><span \\nflex class=\\\"did-you-know-title\\\">{{\\'GENERAL.DID_YOU_KNOW\\' | translate}}</span></div><div flex \\nclass=\\\"did-you-know-message\\\">{{\\'SALES.FIND_VOUCHER_INFO\\' | translate}}</div></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel\\n</md-button><md-button id=\\\"test-search-voucher-button\\\" ng-click=\\\"vm.search()\\\" class=\\\"md-primary md-raised\\\" \\ntranslate=\\\"GENERAL.SEARCH\\\" hotkey=\\\"{\\'enter\\': vm.search}\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/search-gift-card-dialog.html\",\"<md-dialog aria-label=\\\"Search Gift Card\\\" class=\\\"w-400\\\"><form ng-cloak name=\\\"giftCardForm\\\"><md-dialog-content><h2>\\n{{\\'SALES.GIFT_CARD\\' | translate}}</h2><h3 class=\\\"mb-30\\\" translate=\\\"SALES.GIFT_CARD_MSG\\\"></h3><div layout=\\\"row\\\" flex>\\n<md-input-container flex class=\\\"mb-0\\\"><md-icon md-font-icon=\\\"icon-wallet-giftcard\\\" class=\\\"name font-size-24\\\"></md-icon>\\n<input ng-model=\\\"vm.barcode\\\" ng-disable=\\\"vm.searching\\\" name=\\\"barcode\\\" ng-disabled=\\\"!!vm.posOrderProductVariant\\\" \\nplaceholder=\\\"{{\\'SALES.GIFT_CARD_NUMBER\\' | translate}}\\\" autocomplete=\\\"off\\\" type=\\\"text\\\" nd-mute-barcode-callbacks \\nmd-auto-focus><div ng-messages=\\\"giftCardForm.barcode.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"NotFoundCodeError\\\"><span \\ntranslate=\\\"SALES.GIFT_CARD_NOT_FOUND\\\"></span></div></div></md-input-container><md-progress-circular \\nng-if=\\\"vm.searching\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8 mt-25 pl-10\\\"></md-progress-circular></div><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"vm.posOrderProductVariant\\\"><span>\\n{{\\'SALES.CURRENT_BALANCE_IN_GIFT_CARD\\' | translate}}</span><h1>\\n{{-1 * vm.posOrderProductVariant.price_incl_tax | price}} {{vm.currency | currencyCharacter}}</h1></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-if=\\\"!vm.posOrderProductVariant\\\" \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\"></md-button><md-button \\nng-if=\\\"!vm.posOrderProductVariant\\\" ng-click=\\\"vm.search()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.SEARCH\\\"></md-button>\\n<md-button ng-if=\\\"vm.posOrderProductVariant\\\" ng-click=\\\"vm.posOrderProductVariant = null\\\" \\ntranslate=\\\"SALES.SEARCH_OTHER\\\"></md-button><md-button ng-if=\\\"vm.posOrderProductVariant\\\" ng-click=\\\"vm.useGiftCard()\\\" \\nclass=\\\"md-primary\\\" translate=\\\"SALES.USE_GIFT_CARD\\\"></md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/subviews/category-layout-old.html\",\"<div layout=\\\"row\\\" flex ng-if=\\\"!vm.selectedRegister.is_closed && vm.layoutStyle == vm.CATEGORY_LAYOUT\\\" layout-padding \\nng-show=\\\"sale.currentView == vm.SELL_VIEW\\\" layout-fill><div layout=\\\"column\\\" layout-align=\\\"start stretch\\\" flex=\\\"50\\\"><div\\n layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-autocomplete ng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" \\nng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" md-items=\\\"product in vm.productsQuerySearch(sale)\\\" \\nmd-selected-item=\\\"sale.productAutocomplete.selectedItem\\\" md-search-text=\\\"sale.productAutocomplete.productSearchText\\\" \\nmd-selected-item-change=\\\"vm.selectedProductChange(sale, product)\\\" md-item-text=\\\"product.name\\\" \\nmd-min-length=\\\"vm.MIN_QUERY_LENGTH\\\" md-delay=\\\"vm.AUTOCOMPLETE_MS_TIMEOUT\\\" \\nplaceholder=\\\"{{\\'SALES.SEARCH_PRODUCT\\' | translate}}\\\" md-no-cache=\\\"true\\\" class=\\\"mr-8\\\" flex><md-item-template><div \\nlayout=\\\"row\\\"><div><strong>{{product.code}}</strong> - <span \\nmd-highlight-text=\\\"sale.productAutocomplete.productSearchText\\\" md-highlight-flags=\\\"^i\\\">{{product.name}}</span></div>\\n<div flex class=\\\"text-right\\\">{{product.price_incl_tax | price}}{{::vm.currencyCharacter}}</div></div>\\n</md-item-template><md-not-found><span ng-show=\\\"sale.in_stock\\\" translate=\\\"SALES.NO_PRODUCT_FOUND_STOCK\\\" \\ntranslate-values=\\\"{name: sale.productAutocomplete.productSearchText}\\\">\\nNo products matching \\\"{{sale.productAutocomplete.productSearchText}}\\\" were found in stock.</span> <span \\nng-show=\\\"!sale.in_stock\\\" translate=\\\"SALES.NO_PRODUCT_FOUND\\\" \\ntranslate-values=\\\"{name: sale.productAutocomplete.productSearchText}\\\">\\nNo products matching \\\"{{sale.productAutocomplete.productSearchText}}\\\" were found.</span></md-not-found>\\n</md-autocomplete><div class=\\\"ml-15 pt-5\\\"><md-tooltip md-direction=\\\"top\\\" md-delay=\\\"750\\\">\\n{{\\'SALES.SEARCH_IN_STOCK\\' | translate}}</md-tooltip><md-checkbox ng-model=\\\"sale.in_stock\\\" class=\\\"no-margin\\\">\\n{{\\'SALES.IN_STOCK\\' | translate}}</md-checkbox></div></div><md-whiteframe \\nclass=\\\"md-whiteframe-1dp white-bg mt-16 md-padding\\\" flex ms-scroll><md-grid-list md-cols=\\\"4\\\" md-cols-xs=\\\"1\\\" \\nmd-cols-sm=\\\"2\\\" md-cols-lg=\\\"4\\\" md-cols-gt-lg=\\\"6\\\" md-row-height=\\\"1:1\\\" md-gutter=\\\"16px\\\" ng-show=\\\"!sale.selectedCategory\\\">\\n<md-grid-tile class=\\\"md-background-bg md-hue-2\\\" ng-click=\\\"vm.categoryClicked(sale, category)\\\" \\nng-repeat=\\\"category in vm.categories | orderBy: \\'position\\' track by $index\\\"><md-icon md-font-icon=\\\"icon-folder\\\" \\nclass=\\\"s60 yellow-700-fg\\\"></md-icon><md-grid-tile-footer class=\\\"grey-600-fg font-size-12\\\"><h3>\\n{{category.name || category.code}}</h3></md-grid-tile-footer></md-grid-tile></md-grid-list><md-grid-list md-cols=\\\"4\\\" \\nmd-cols-xs=\\\"1\\\" md-cols-sm=\\\"2\\\" md-cols-lg=\\\"4\\\" md-cols-gt-lg=\\\"6\\\" md-row-height=\\\"1:1\\\" md-gutter=\\\"16px\\\" \\nng-show=\\\"sale.selectedCategory\\\"><md-grid-tile class=\\\"md-background-bg md-hue-2\\\" \\nng-if=\\\"!sale.selectedCategory.products\\\"><md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n</md-grid-tile><md-grid-tile class=\\\"md-background-bg md-hue-2\\\" ng-if=\\\"sale.selectedCategory.products\\\" \\nng-click=\\\"sale.selectedCategory = null\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\" class=\\\"s50 grey-300-fg\\\"></md-icon>\\n</md-grid-tile><md-grid-tile class=\\\"md-background-bg md-hue-2\\\" ng-click=\\\"vm.selectedProductChange(sale, product)\\\" \\nng-repeat=\\\"product in sale.selectedCategory.products track by $index\\\"><md-grid-tile-footer \\nclass=\\\"grey-600-fg font-size-10 category-grid-tile-footer\\\"><h3>{{product.name || product.code}}</h3>\\n</md-grid-tile-footer></md-grid-tile><md-grid-tile class=\\\"md-background-bg md-hue-2\\\" \\nng-if=\\\"sale.selectedCategory.products\\\" ng-click=\\\"sale.selectedCategory = null\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\" \\nclass=\\\"s50 grey-300-fg\\\"></md-icon></md-grid-tile></md-grid-list></md-whiteframe></div><div layout=\\\"column\\\" flex=\\\"50\\\">\\n<form name=\\\"vm.customerForm\\\"><div layout=\\\"row\\\"><md-autocomplete class=\\\"customer-autocomplete\\\" md-no-cache=\\\"true\\\" \\nmd-items=\\\"customer in vm.customersQuerySearch(sale.customerAutocomplete.customerSearchText)\\\" \\nmd-selected-item=\\\"sale.customerAutocomplete.selectedItem\\\" \\nmd-search-text=\\\"sale.customerAutocomplete.customerSearchText\\\" \\nmd-selected-item-change=\\\"vm.selectedCustomerChange(sale, customer)\\\" md-item-text=\\\"vm.getCustomerText(customer)\\\" \\nmd-min-length=\\\"vm.MIN_QUERY_LENGTH\\\" md-delay=\\\"vm.AUTOCOMPLETE_MS_TIMEOUT\\\" \\nplaceholder=\\\"{{\\'SALES.SEARCH_CUSTOMER\\' | translate}}\\\" flex><md-item-template><md-icon md-font-icon=\\\"icon-account\\\">\\n</md-icon><span md-highlight-text=\\\"sale.customerAutocomplete.customerSearchText\\\" md-highlight-flags=\\\"^i\\\">\\n{{ vm.getCustomerText(customer)}}</span></md-item-template><md-not-found><span translate=\\\"SALES.NO_CUSTOMER_FOUND\\\" \\ntranslate-values=\\\"{name: sale.customerAutocomplete.customerSearchText}\\\">\\nNo products matching \\\"{{sale.customerAutocomplete.customerSearchText}}\\\" were found.</span> <a \\nng-click=\\\"vm.createCustomer(sale.customerAutocomplete)\\\" translate=\\\"SALES.CLICL_TO_CREATE\\\">Click here to create it</a>\\n</md-not-found></md-autocomplete></div></form><md-whiteframe class=\\\"md-whiteframe-1dp white-bg mt-16\\\" flex \\nlayout=\\\"column\\\"><div flex layout=\\\"column\\\" ms-scroll><div \\nng-if=\\\"sale.pos_order_product_variants.length == 0 && !sale.isFetching\\\" class=\\\"text-center md-padding\\\"><em \\nclass=\\\"m-0 secondary-text text-center hint-text\\\" translate=\\\"SALES.NO_PRODUCTS\\\" flex>No products selected</em></div><div\\n ng-if=\\\"sale.isFetching\\\" class=\\\"grey-100-bg ph-16 pv-8\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"20px\\\"></md-progress-circular><h3 class=\\\"ml-16\\\">\\n{{\\'SALES.FETCHING_PRODUCT\\' | translate}}</h3></div></div><div ng-repeat=\\\"product in sale.pos_order_product_variants\\\" \\nng-class=\\\"{\\'grey-100-bg\\' : product.isFetching}\\\"><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-16 pv-8\\\"><h3 ng-class=\\\"{\\'md-warn-fg\\': product.devolution_of}\\\" \\nclass=\\\"cursor-pointer\\\">{{ product.amount }}</h3><div class=\\\"md-list-item-text pl-16 cursor-pointer\\\" layout=\\\"column\\\" \\nng-click=\\\"vm.togglePosOrderProductVariant(sale, product)\\\"><h4 class=\\\"m-0\\\"><strong>{{ product.product_name }}</strong>\\n {{ product.product_variant_code }}</h4><p class=\\\"m-0 secondary-text\\\">{{ product.brand_name}}</p></div><div \\nclass=\\\"text-right md-list-item-text pl-16\\\" layout=\\\"row\\\" flex ng-show=\\\"product.editingPrice\\\"><span flex></span> <input \\nng-model=\\\"product.custom_price_incl_tax\\\" placeholder=\\\"{{ vm.getPrice(product, true) | price}}\\\" \\nng-blur=\\\"vm.finishCustomPriceEdition(product, sale)\\\" focus-if=\\\"{{product.editingPrice}}\\\" type=\\\"number\\\" \\nng-keypress=\\\"vm.checkEnterPressed($event)\\\" class=\\\"text-right custom-prices-input\\\" md-auto-focus><h3 class=\\\"no-margin\\\">\\n{{::vm.currencyCharacter}}</h3></div><div class=\\\"text-right md-list-item-text pl-16 cursor-pointer\\\" layout=\\\"column\\\" \\nflex ng-if=\\\"!product.editingPrice\\\"><h3 class=\\\"no-margin\\\" ng-click=\\\"vm.priceClicket(product)\\\" \\nng-class=\\\"{\\'indigo-500-fg\\': product.custom_price_incl_tax}\\\">\\n{{ vm.getPrice(product, true) | price}}{{::vm.currencyCharacter}}</h3><p class=\\\"m-0 secondary-text text-strike\\\" \\nng-if=\\\"product.discount || (product.custom_price_incl_tax && product.custom_price_incl_tax < product.price_incl_tax)\\\">\\n{{ product.price_incl_tax * product.amount | price}}{{vm.session.company.currency | currencyCharacter}}</p></div>\\n<md-icon md-font-icon=\\\"icon-trash\\\" class=\\\"ml-8 md-secondary md-hue-3\\\" \\nng-click=\\\"vm.deletePosOrderProductVariant(sale, $index)\\\"></md-icon></div><div layout=\\\"column\\\" flex \\nng-if=\\\"product.is_open\\\" class=\\\"border-top md-padding border-bottom md-background-bg md-hue-2\\\"><div layout=\\\"row\\\" flex>\\n<md-input-container flex class=\\\"mb-0\\\"><label translate=\\\"GENERAL.AMOUNT\\\">Amount</label><input ng-model=\\\"product.amount\\\" \\ntype=\\\"number\\\" ng-change=\\\"vm.updateSale(sale)\\\"></md-input-container><md-input-container flex class=\\\"mb-0\\\"><label \\ntranslate=\\\"SALE.DISCOUNT\\\">Discount (%)</label><input ng-model=\\\"product.discount\\\" min=\\\"0\\\" max=\\\"100\\\" type=\\\"number\\\" \\nng-disabled=\\\"sale.amount < 0\\\" autofocus ng-change=\\\"vm.updateSale(sale)\\\"></md-input-container></div><div layout=\\\"row\\\" \\nflex class=\\\"mb-8\\\"><strong translate=\\\"GENERAL.NAME\\\" flex>Name:</strong> <span class=\\\"ml-8\\\" flex>{{product.product_name}}\\n</span> <strong translate=\\\"PRODUCT.BRAND\\\" flex>Brand:</strong> <span class=\\\"ml-8\\\" flex>{{product.brand_name}}</span>\\n</div><div layout=\\\"row\\\" flex class=\\\"mb-8\\\"><strong translate=\\\"PRODUCT.SEASON\\\" flex>Season:</strong> <span class=\\\"ml-8\\\" \\nflex>{{product.season_name}}</span> <strong translate=\\\"PRODUCT.COMPOSITION\\\" flex>Composition:</strong> <span \\nclass=\\\"ml-8\\\" flex>{{product.composition_name}}</span></div><div layout=\\\"row\\\" flex class=\\\"mb-8\\\"><strong \\ntranslate=\\\"CONFIGURATION.CATEGORY\\\" flex>Category:</strong> <span class=\\\"ml-8\\\" flex>{{product.category_name}}</span> \\n<strong translate=\\\"CONFIGURATION.SUBCATEGORY\\\" flex>Subcategory:</strong> <span class=\\\"ml-8\\\" flex>\\n{{product.subcategory_name}}</span></div><div layout=\\\"row\\\" flex class=\\\"mb-8\\\"><strong translate=\\\"PRODUCT.PRICE\\\" \\nflex=\\\"25\\\" x>Price:</strong> <span class=\\\"ml-8\\\" flex=\\\"25\\\">\\n{{product.price_excl_tax | price}} + {{product.price_incl_tax - product.price_excl_tax | price}}{{::vm.currencyCharacter}}\\n</span></div></div></div></div><div ng-repeat=\\\"devolutionCard in sale.devolution_cards\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-16 pv-8\\\"><h3 class=\\\"md-warn-fg\\\">1</h3><div class=\\\"md-list-item-text pl-16\\\" \\nlayout=\\\"column\\\"><h4 class=\\\"m-0 md-warn-fg\\\"><strong translate=\\\"SALES.VOUCHER\\\">Voucher</strong></h4></div><div \\nclass=\\\"text-right md-list-item-text pl-16\\\" layout=\\\"column\\\" flex><h3 class=\\\"no-margin md-warn-fg\\\">\\n{{ devolutionCard.amount | price}}{{::vm.currencyCharacter}}</h3></div><md-icon md-font-icon=\\\"icon-trash\\\" \\nclass=\\\"ml-8 md-secondary md-hue-3\\\" ng-click=\\\"vm.deleteDevolutionCard(sale, $index)\\\"></md-icon></div></div></div>\\n<md-divider></md-divider><div layout=\\\"column\\\" class=\\\"pv-8 ph-16\\\"><div layout=\\\"row\\\" ng-if=\\\"vm.showSubtotal\\\"><div \\nclass=\\\"h3\\\" translate=\\\"SALES.SUBTOTAL\\\" flex>Sub-total</div><div class=\\\"h3 text-right\\\" flex>\\n{{sale.subtotal | price}}{{vm.session.company.currency | currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nclass=\\\"secondary-text\\\" ng-if=\\\"vm.showSubtotal\\\" ng-repeat=\\\"(taxId, productVariantsGroupedByTax) in sale.taxes\\\"><div \\nclass=\\\"h3\\\" flex>{{\\'SALES.TAX\\' | translate}}&nbsp; {{productVariantsGroupedByTax[0].tax_percent_value | price}}%</div>\\n<div class=\\\"h3 text-right\\\" flex>\\n{{vm.getTotalTaxByGroup(productVariantsGroupedByTax) | price}}{{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nclass=\\\"secondary-text\\\" ng-show=\\\"vm.showTotalTaxes(sale)\\\" ng-if=\\\"vm.showSubtotal\\\"><div class=\\\"h3\\\" flex \\ntranslate=\\\"SALES.TOTAL_TAXES\\\">Total Taxes</div><div class=\\\"h3 text-right\\\" flex>\\n{{sale.total_taxes | price}}{{vm.session.company.currency | currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nng-if=\\\"sale.devolution_cards && sale.devolution_cards.length > 0 && vm.showSubtotal\\\"><div class=\\\"h3 md-warn-fg\\\" \\ntranslate=\\\"SALES.TOTAL_VOUCHERS\\\" flex>Sub-total</div><div class=\\\"h3 text-right md-warn-fg\\\" flex>\\n{{vm.getTotalDevolutionCardAmount(sale) | price}}{{vm.session.company.currency | currencyCharacter}}</div></div>\\n<md-divider class=\\\"mv-8\\\" ng-if=\\\"vm.showSubtotal\\\"></md-divider><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.showSubtotal = !vm.showSubtotal\\\"><md-icon md-font-icon=\\\"icon-chevron-up\\\" \\nng-show=\\\"!vm.showSubtotal\\\"></md-icon><md-icon md-font-icon=\\\"icon-chevron-down\\\" ng-show=\\\"vm.showSubtotal\\\"></md-icon>\\n</md-button><div class=\\\"h2\\\" translate=\\\"SALES.TOTAL\\\">Total</div><div class=\\\"h2 text-right\\\" flex>\\n{{sale.total | price}}{{vm.session.company.currency | currencyCharacter}}</div></div><div layout=\\\"row\\\" class=\\\"pt-16\\\">\\n<md-button class=\\\"md-raised\\\" flex ng-if=\\\"sale.total >= 0\\\" ng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" \\nng-click=\\\"vm.pay(sale)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span flex translate=\\\"SALES.PAY\\\">PAY</span>\\n</div></md-button><md-button class=\\\"md-raised\\\" flex ng-if=\\\"sale.total >= 0\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" ng-click=\\\"vm.payByCard(sale)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-credit-card\\\" \\nng-class=\\\"{\\'blue-fg\\': sale.pos_order_product_variants.length > 0}\\\"></md-icon><span flex translate=\\\"SALES.PAY_CARD\\\">\\nPAY BY CARD</span></div></md-button><md-button class=\\\"md-raised\\\" flex ng-if=\\\"sale.total >= 0\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" ng-click=\\\"vm.payByCash(sale)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-cash-multiple\\\" \\nng-class=\\\"{\\'green-fg\\': sale.pos_order_product_variants.length > 0}\\\"></md-icon><span flex translate=\\\"SALES.PAY_CASH\\\">\\nPAY BY CASH</span></div></md-button><md-button class=\\\"md-raised orange-bg white-fg\\\" flex ng-if=\\\"sale.total < 0\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" ng-click=\\\"vm.payByVoucher(sale)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-wallet-membership\\\" class=\\\"white-fg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.GENERATE_VOUCHER\\\">GENERATE VOUCHER</span></div></md-button><md-button \\nclass=\\\"md-raised orange-bg white-fg\\\" flex ng-if=\\\"sale.total < 0\\\" \\nng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" ng-click=\\\"vm.payByRefundCash(sale)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-cash-multiple\\\" class=\\\"white-fg\\\"></md-icon><span flex \\ntranslate=\\\"SALES.REFUND_MONEY_CASH\\\">REFUND BY CASH</span></div></md-button><md-button \\nclass=\\\"md-raised orange-bg white-fg\\\" ng-if=\\\"sale.total < 0\\\" ng-disabled=\\\"sale.pos_order_product_variants.length == 0\\\" \\nng-click=\\\"vm.payByRefundCard(sale)\\\" flex><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-credit-card\\\" class=\\\"white-fg\\\"></md-icon><span flex translate=\\\"SALES.REFUND_MONEY_CARD\\\">\\nREFUND BY CARD</span></div></md-button></div></div></md-whiteframe></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/subviews/payment-methods-header.html\",\"<div layout=\\\"row\\\" class=\\\"payment-methods-header h-40\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-button md-icon-button stroked mr-16\\\" layout=\\\"column\\\" ng-if=\\\"!sale.successfullyPaid\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"sale.currentView = vm.SELL_VIEW\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button><div class=\\\"ml-10 mr-10\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><span class=\\\"h3\\\"><span translate=\\\"SALES.TOTAL\\\"></span> <span id=\\\"test-final-price\\\">\\n{{sale.total | price}}{{vm.currencyCharacter}}</span> </span><span class=\\\"h3\\\" ng-if=\\\"vm.isNormalPayingWorkflow(sale)\\\">\\n<span translate=\\\"SALES.PENDING_TO_ASSIGN\\\"></span> <span class=\\\"secondary-text\\\" \\nng-class=\\\"{\\'red-fg\\': vm.getPendingToAssigned(sale) > 0}\\\">\\n{{vm.getPendingToAssigned(sale) | price}}{{vm.currencyCharacter}} </span></span><span class=\\\"h3\\\" \\nng-if=\\\"vm.isNormalPayingWorkflow(sale)\\\"><span translate=\\\"SALES.BALANCE\\\"></span> <span class=\\\"secondary-text\\\">\\n{{vm.getBalance(sale) | price}}{{vm.currencyCharacter}}</span></span></div></div><md-divider class=\\\"mt-10\\\">\\n</md-divider>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/subviews/receipt.html\",\"<div layout=\\\"column\\\" class=\\\"receipt-subview\\\"><md-whiteframe class=\\\"white-bg receipt\\\"><div class=\\\"md-padding\\\" \\nlayout=\\\"column\\\"><div class=\\\"h3\\\" translate=\\\"SALES.RECEIPT\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\" \\nclass=\\\"secondary-text mb-5 border-bottom\\\" ng-if=\\\"sale.pos_order_product_variants.length > 0\\\"><span>\\n{{vm.countTotalProductVariants(sale)}}</span> <span class=\\\"ml-5\\\" ng-if=\\\"vm.countTotalProductVariants(sale) === 1\\\">\\n{{\\'SALES.TOTAL_PRODUCT\\' | translate}}</span> <span class=\\\"ml-5\\\" ng-if=\\\"vm.countTotalProductVariants(sale) > 1\\\">\\n{{\\'SALES.TOTAL_PRODUCTS\\' | translate}}</span></div><div \\nng-repeat=\\\"posOrderProductVariant in sale.pos_order_product_variants track by $index\\\" \\nng-if=\\\"posOrderProductVariant.consumed_gift_card === null && sale.currentViewType !== vm.CURRENT_VIEW_TYPE_LIST\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><span>{{posOrderProductVariant.amount}}</span> <span class=\\\"ml-5\\\">\\n{{posOrderProductVariant.product_name}} <small class=\\\"secondary-text\\\">\\n{{posOrderProductVariant.product_variant_color_name}} - {{posOrderProductVariant.product_variant_size_name}}</small> \\n</span><span flex></span> <span style=\\\"white-space: nowrap\\\">\\n{{ vm.getPrice(posOrderProductVariant, true) | price}} {{::vm.currencyCharacter}}</span></div><div layout=\\\"row\\\" \\nng-if=\\\"posOrderProductVariant.uid_stock_uid\\\" layout-align=\\\"start start\\\"><span class=\\\"ml-5 secondary-text long-text\\\">\\n{{posOrderProductVariant.uid_stock_uid}}</span></div><ul class=\\\"m-0 pl-20\\\"><li layout=\\\"row\\\" layout-align=\\\"start start\\\" \\nng-repeat=\\\"bundlePosOrderProductVariant in posOrderProductVariant.bundle_content\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span>{{bundlePosOrderProductVariant.amount}}</span> <span class=\\\"ml-5\\\">\\n{{bundlePosOrderProductVariant.product_name}} <small class=\\\"secondary-text\\\">\\n{{bundlePosOrderProductVariant.color_name}} - {{bundlePosOrderProductVariant.size_name}}</small></span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"ml-5 secondary-text long-text\\\">\\n{{posOrderProductVariant.uid_stock_uid}}</span></div></li></ul><md-divider class=\\\"mv-8\\\"></md-divider></div><div \\nng-repeat=\\\"posOrderProductVariant in sale.pos_order_product_variants track by $index\\\" \\nng-if=\\\"posOrderProductVariant.consumed_gift_card !== null\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><span>\\n{{posOrderProductVariant.amount}}</span> <span class=\\\"ml-5\\\">{{posOrderProductVariant.product_name}} <small \\nclass=\\\"secondary-text\\\">{{(-1 * posOrderProductVariant.price_incl_tax) | price}} {{::vm.currencyCharacter}}</small> \\n</span><span flex></span> <span style=\\\"white-space: nowrap\\\">\\n{{ vm.getPrice(posOrderProductVariant, true) | price}} {{::vm.currencyCharacter}}</span><md-divider \\nng-if=\\\"sale.pos_order_product_variants.length == 1\\\" class=\\\"mv-8\\\"></md-divider></div><div \\nng-if=\\\"sale.balance_discount && sale.balance_discount != 0 && !sale.isDevolution\\\"><div><div layout=\\\"row\\\"><div \\ntranslate=\\\"SALES.TOTAL_WITHOUT_DISCOUNT\\\" flex></div><div class=\\\"text-right\\\" flex>\\n{{sale.balance_discount + sale.total | price}} {{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\"><div \\nng-if=\\\"sale.balance_discount > 0\\\" class=\\\"balance-discount\\\" translate=\\\"SALES.APPLIED_BALANCE\\\" flex></div><div \\nng-if=\\\"sale.balance_discount < 0\\\" class=\\\"balance-discount\\\" translate=\\\"SALES.PENDING_NEGATIVE_BALANCE\\\" flex></div><div \\nclass=\\\"text-right balance-discount\\\" flex>{{-sale.balance_discount | price}} {{::vm.currencyCharacter}}</div></div>\\n</div><md-divider class=\\\"mv-8\\\"></md-divider></div><div ng-if=\\\"!sale.generateDevolutionCardClicked\\\"><div layout=\\\"row\\\" \\nclass=\\\"cursor-pointer\\\" ng-click=\\\"vm.toggleShowTaxesDict(sale)\\\"><md-icon md-font-icon=\\\"icon-chevron-right\\\" class=\\\"s16\\\" \\nng-if=\\\"!sale.showTaxesDict\\\"></md-icon><md-icon md-font-icon=\\\"icon-chevron-down\\\" class=\\\"s16\\\" ng-if=\\\"sale.showTaxesDict\\\">\\n</md-icon><div translate=\\\"SALES.SUBTOTAL\\\" flex>Sub-total</div><div class=\\\"text-right\\\" flex>\\n{{sale.subtotal | price}} {{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" class=\\\"secondary-text\\\" \\nng-if=\\\"sale.showTaxesDict\\\" ng-repeat=\\\"(taxId, productVariantsGroupedByTax) in sale.taxes\\\"><div flex>\\n{{\\'SALES.TAX\\' | translate}}&nbsp; {{productVariantsGroupedByTax[0].tax_percent_value | price}}%</div><div \\nclass=\\\"text-right\\\" flex>{{vm.getTotalTaxByGroup(productVariantsGroupedByTax) | price}} {{::vm.currencyCharacter}}</div>\\n</div><div layout=\\\"row\\\" class=\\\"secondary-text\\\" ng-show=\\\"vm.showTotalTaxes(sale)\\\"><div class=\\\"h3\\\" flex \\ntranslate=\\\"SALES.TOTAL_TAXES\\\">Total Taxes</div><div class=\\\"h3 text-right\\\" flex>\\n{{sale.total_taxes | price}} {{::vm.currencyCharacter}}</div></div><md-divider class=\\\"mv-8\\\"></md-divider><div \\nlayout=\\\"row\\\" class=\\\"h3\\\" ng-if=\\\"!sale.devolution_cards || sale.devolution_cards.length === 0\\\"><div \\ntranslate=\\\"SALES.TOTAL\\\" flex>Total</div><div id=\\\"test-total-price\\\" class=\\\"text-right\\\" flex><div \\nng-class=\\\"sale.balance_discount > 0 ? \\'balance-discount\\' : \\'\\'\\\">{{sale.total | price}} {{::vm.currencyCharacter}}</div>\\n</div></div><div layout=\\\"row\\\" \\nng-repeat=\\\"posOrderPaymentMethod in sale.pos_order_payment_methods | orderBy:\\'payment_method\\'\\\" \\nng-if=\\\"sale.currentView == vm.PAY_VIEW\\\" ng-show=\\\"posOrderPaymentMethod.given_amount\\\"><div class=\\\"h3\\\" flex>\\n{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].name}}</div><div class=\\\"h3 text-right\\\" flex>\\n{{posOrderPaymentMethod.given_amount | price}} {{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" class=\\\"h3\\\"><span\\n translate=\\\"SALES.BALANCE\\\" flex></span> {{vm.getBalance(sale) | price}} {{vm.currencyCharacter}}</div></div><div \\nng-if=\\\"sale.generateDevolutionCardClicked\\\"><div layout=\\\"row\\\" ng-if=\\\"sale.currentView == vm.PAY_VIEW\\\"><div class=\\\"h4\\\" \\nflex translate=\\\"SALES.GENERATE_VOUCHER\\\"></div><div class=\\\"h4 text-right\\\" flex>\\n{{vm.getBalance(sale) | price}} {{vm.currencyCharacter}}</div></div></div></div></md-whiteframe><md-card \\nclass=\\\"contact-discount-card\\\" \\nng-if=\\\"sale.customerAutocomplete.selectedItem.notes || sale.customerAutocomplete.selectedItem.discount\\\">\\n<md-card-content><div ng-if=\\\"sale.customerAutocomplete.selectedItem.notes\\\" class=\\\"mb-16\\\"><div>\\n{{\\'SALES.CUSTOMER_NOTES\\' | translate}}</div><blockquote class=\\\"secondary-text\\\">\\n{{sale.customerAutocomplete.selectedItem.notes}}</blockquote></div><div layout=\\\"column\\\" layout-align=\\\"start start\\\" \\nng-show=\\\"sale.customerAutocomplete.selectedItem.discount\\\"><div class=\\\"mb-16\\\" ng-if=\\\"!sale.customer_discount_applied\\\">\\n{{\\'SALES.APPLY_DISCOUNT_BODY\\' | translate: {discount: sale.customerAutocomplete.selectedItem.discount} }}</div><div \\nclass=\\\"mb-16\\\" ng-if=\\\"sale.customer_discount_applied\\\">\\n{{\\'SALES.APPLY_DISCOUNT_BODY_APPLIED\\' | translate: {discount: sale.customerAutocomplete.selectedItem.discount} }}</div>\\n<div class=\\\"full-width\\\"><md-button class=\\\"stroked full-width m-0\\\" ng-click=\\\"vm.applyCustomerDiscount(sale)\\\" \\nng-disabled=\\\"sale.customer_discount_applied\\\"><div ng-if=\\\"!sale.customer_discount_applied\\\">\\n{{\\'SALES.APPLY_DISCOUNT\\' | translate: {discount: sale.customerAutocomplete.selectedItem.discount} }}</div><div \\nng-if=\\\"sale.customer_discount_applied\\\">\\n{{\\'SALES.APPLY_DISCOUNT_APPLIED\\' | translate: {discount: sale.customerAutocomplete.selectedItem.discount} }}</div>\\n</md-button></div></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/deliveries/sidenavs/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"ph-20\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon>\\n<md-select ng-model=\\\"vm.filterStatus\\\" flex multiple=\\\"true\\\" placeholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\">\\n<md-option ng-repeat=\\\"status in vm.statusList | orderBy: \\'code\\'\\\" ng-value=\\\"status.code\\\"><span class=\\\"status-badge\\\" \\nng-class=\\\"vm.orderStatusColors[status.code]\\\">{{\\'SALE.\\' + status.name | translate}}</span></md-option></md-select></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"ph-20\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon>\\n<md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-select ng-model=\\\"vm.filterSourceWarehouse\\\" \\nflex><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"TRANSFERS.ALL_SOURCE_WAREHOUSES\\\">All Source Warehouses</md-option><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"autocomplete-filter ph-20\\\"><md-icon class=\\\"mr-8 s12 autocomplete-icon\\\" \\nmd-font-icon=\\\"icon-account\\\"></md-icon><md-autocomplete flex ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" \\nmd-items=\\\"provider in vm.providerQuerySearch()\\\" md-selected-item=\\\"vm.selectedProvider\\\" \\nmd-search-text=\\\"vm.providerSearchText\\\" md-selected-item-change=\\\"vm.updateProviderFilter(provider)\\\" \\nmd-item-text=\\\"provider.name\\\" md-min-length=\\\"1\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" class=\\\"autocomplete\\\" md-delay=\\\"500\\\" \\nmd-no-cache=\\\"true\\\"><md-item-template><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nmd-highlight-text=\\\"vm.providerSearchText\\\" md-highlight-flags=\\\"gi\\\" class=\\\"m-0\\\">{{provider.name}}</span></div>\\n</md-item-template><md-not-found><span translate=\\\"PRODUCT.NO_PROVIDERS_FOUND\\\" \\ntranslate-values=\\\"{name: vm.providerSearchText}\\\">No provider matching \\\"{{vm.providerSearchText}}\\\" were found.</span>\\n</md-not-found></md-autocomplete></div><div class=\\\"multiselect-chips\\\"><md-chips ng-model=\\\"vm.status.filters.providers\\\" \\nmd-on-remove=\\\"vm.updateMultiselectFilters(vm.TYPE_PROVIDER)\\\" readonly=\\\"true\\\" md-removable=\\\"true\\\"><md-chip-template>\\n<strong>{{$chip.name}}&nbsp;</strong></md-chip-template></md-chips></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presale/dialogs/delete-presale.html\",\"<md-dialog><md-dialog-content><div layout=\\\"column\\\" flex><h2 translate=\\\"PRESALE.DELETE_PRESALE_COLLECTION\\\" class=\\\"mt-0\\\">\\nDeleting Presale</h2><p translate=\\\"PRESALE.DELETE_COLLECTION_MESSAGE\\\"></p><md-input-container flex=\\\"100\\\"><label \\ntranslate=\\\"PRESALE.DELETE_COLLECTION_WORD\\\">Type \\\"delete presale\\\" to confirm</label><input ng-model=\\\"text\\\">\\n</md-input-container></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">CANCEL</md-button><md-button ng-click=\\\"hide()\\\" \\ntranslate=\\\"GENERAL.DELETE\\\" ng-disabled=\\\"checkSecurityWord()\\\">DELETE</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presale/tabs/details.html\",\"<div id=\\\"presale-details\\\"><div class=\\\"widget-group\\\" layout=\\\"row\\\" flex=\\\"100\\\" layout-wrap><ms-widget layout=\\\"column\\\" \\nflex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" class=\\\"h-150\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" \\nlayout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">{{\\'PRESALE.PRODUCTS\\' | translate}}</span><div class=\\\"md-display-1\\\" \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">{{(vm.presale.total_products || 0) | number:0}}</div><span class=\\\"h6\\\">\\n{{\\'PRESALE.TOTAL_PRODUCTS\\' | translate}}<div ng-class=\\\"{\\'md-warn-fg\\': vm.presale.total_products_without_provider>0}\\\">\\n{{(vm.presale.total_products_without_provider || 0) | number:0}} {{\\'PRESALE.WITHOUT_PROVIDER\\' | translate}}</div>\\n</span></ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" \\nclass=\\\"h-150\\\"><ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'PRESALE.PREORDERS\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{(vm.presale.total_orders || 0) | number:0}}</div><span class=\\\"h6\\\">{{\\'PRESALE.TOTAL_ORDERS\\' | translate}}</span>\\n</ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" class=\\\"h-150\\\">\\n<ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'PRESALE.ORDERED_ITEMS\\' | translate}}</span><p><span class=\\\"secondary-text\\\">\\n{{\\'PRESALE.DRAFTS\\' | translate}}: {{(vm.presale.total_ordered_draft_items || 0) | number:0}}</span><br><b>\\n{{\\'PRESALE.ORDERED\\' | translate}}: {{(vm.presale.total_ordered_items || 0) | number:0}}</b><br><b>\\n{{\\'PRESALE.DELIVERED\\' | translate}}: {{(vm.presale.total_ordered_delivered_items || 0) | number:0}}</b></p>\\n</ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" class=\\\"h-150\\\">\\n<ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'PRESALE.PURCHASED_ITEMS\\' | translate}}</span><p><span class=\\\"secondary-text\\\">\\n{{\\'PRESALE.DRAFTS\\' | translate}}: {{(vm.presale.total_purchase_draft_items || 0) | number:0}}</span><br><b \\nng-class=\\\"{\\'md-warn-fg\\': vm.presale.total_ordered_items>vm.presale.total_purchase_ordered_items}\\\">\\n{{\\'PRESALE.PURCHASED\\' | translate}}: {{(vm.presale.total_purchase_ordered_items || 0) | number:0}} / {{(vm.presale.total_ordered_items || 0) | number:0}}\\n</b><br><b>{{\\'PRESALE.RECEIVED\\' | translate}}: {{(vm.presale.total_purchase_received_items || 0) | number:0}}</b></p>\\n</ms-widget-front></ms-widget><ms-widget layout=\\\"column\\\" flex=\\\"50\\\" flex-gt-xs=\\\"50\\\" flex-gt-md=\\\"20\\\" class=\\\"h-150\\\">\\n<ms-widget-front class=\\\"md-padding white-bg ms-widget-front\\\" layout=\\\"column\\\"><span class=\\\"h3 text-bold\\\">\\n{{\\'PRESALE.REVENUE\\' | translate}}</span><div class=\\\"md-display-1\\\" flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start end\\\">\\n{{vm.presale.total_revenue || 0 | price}}</div><span class=\\\"h6\\\">{{\\'PRESALE.TOTAL_REVENUE\\' | translate}}</span>\\n</ms-widget-front></ms-widget></div><div layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><md-card flex><md-card-title>\\n<md-card-title-text><span class=\\\"h2\\\" translate=\\\"PRESALE.DETAILS\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><form name=\\\"collectionForm\\\"><div layout=\\\"column\\\" flex><md-input-container \\nclass=\\\"md-icon-float md-block mb-0 mr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"GENERAL.CODE\\\">Code</label>\\n<md-icon md-font-icon=\\\"icon-android-studio\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.presale.code\\\" type=\\\"text\\\" \\nrequired md-auto-focus has-permission-else-disable=\\\"wholesale.presales.presale.details.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-block h-60 m-0 mr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"PRESALE.BRAND\\\">\\n</label><md-icon md-font-icon=\\\"icon-tag-text-outline\\\" class=\\\"icon\\\"></md-icon><md-select required \\nng-disabled=\\\"!Session.hasPermission(\\'wholesale.presales.presale.details.update\\')\\\" ng-model=\\\"vm.presale.brand\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"mr-5\\\" class=\\\"icon\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-select-header><md-option ng-value=\\\"brand.id\\\" \\nng-repeat=\\\"brand in vm.brands | filter:vm.selectFilter | orderBy: \\'name\\'\\\">{{brand.name}}</md-option>\\n<nd-new-object-option array=\\\"vm.brands\\\" , api-name=\\\"\\'brands\\'\\\" option-label=\\\"\\'ADD_NEW_BRAND\\'\\\" \\ndialog-title=\\\"\\'NEW_BRAND\\'\\\" callback=\\\"vm.newBrandAdded(newObject)\\\"></nd-new-object-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-block h-60 m-0 mr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"PRESALE.SEASON\\\"></label><md-icon md-font-icon=\\\"icon-weather-sunny\\\" class=\\\"icon\\\"></md-icon><md-select \\nrequired ng-disabled=\\\"!Session.hasPermission(\\'wholesale.presales.presale.details.update\\')\\\" \\nng-model=\\\"vm.presale.season\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header>\\n<md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"mr-5\\\" class=\\\"icon\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-select-header><md-option ng-value=\\\"season.id\\\" \\nng-repeat=\\\"season in vm.seasons | filter:vm.selectFilter | orderBy: \\'name\\'\\\">{{season.name}}</md-option>\\n<nd-new-object-option array=\\\"vm.seasons\\\" , api-name=\\\"\\'seasons\\'\\\" option-label=\\\"\\'ADD_NEW_SEASON\\'\\\" \\ndialog-title=\\\"\\'NEW_SEASON\\'\\\" callback=\\\"vm.newSeasonAdded(newObject)\\\"></nd-new-object-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-block h-60 m-0 mr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-checkbox flex \\nng-model=\\\"vm.presale.allocate_orders\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.ALLOCATE_ORDERS\\' | translate }}</md-checkbox></md-input-container><md-input-container \\nclass=\\\"md-block h-60 m-0 mr-10\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-checkbox flex \\nng-model=\\\"vm.presale.show_products_without_stock\\\" \\nhas-permission-else-disable=\\\"wholesale.b2b_ecommerces.b2b_ecommerce.create,wholesale.b2b_ecommerce.update\\\">\\n{{\\'B2B_ECOMMERCE.SHOW_PRODUCTS_WITHOUT_STOCK\\' | translate }}</md-checkbox></md-input-container><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex has-permission=\\\"wholesale.presales.presale.details.update\\\"><md-button \\nclass=\\\"stroked\\\" ng-disabled=\\\"!collectionForm.$dirty\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!collectionForm.$dirty\\\" ng-click=\\\"vm.save()\\\" \\ntranslate=\\\"GENERAL.SAVE\\\"></md-button></div></div></form></md-card-content></md-card><md-card flex><md-card-content \\nflex layout=\\\"column\\\" layout-align=\\\"start start\\\"><span class=\\\"h2\\\" translate=\\\"PRESALE.CATALOG\\\"></span><div layout=\\\"row\\\" \\nclass=\\\"pb-25\\\" layout-align=\\\"center center\\\" ng-if=\\\"vm.presale.catalog && !vm.presale.catalog_in_process\\\"><md-icon \\nmd-font-icon=\\\"icon-file-pdf-box\\\" class=\\\"red-700-fg mr-10\\\"></md-icon><a class=\\\"md-link mr-10\\\" \\nhref=\\\"{{vm.presale.catalog}}\\\" download>{{vm.presale.code}}.pdf</a><br><span translate=\\\"PRESALE.LAST_UPDATE\\\" \\nclass=\\\"mr-5 secondary-text\\\"></span> <span flex class=\\\"secondary-text\\\">\\n{{vm.presale.catalog_last_update | date: \\'short\\'}}</span></div><md-input-container class=\\\"pt-20 pl-5 pr-10 mb-0\\\" flex>\\n<label translate=\\\"PRESALE.WHOLESALE_PRICING_TIER\\\"></label><md-select ng-model=\\\"vm.selectedWholesalePricingTier\\\" \\nng-required=\\\"!vm.selectedRetailPricingTier\\\" \\nng-disabled=\\\"!session.hasPermission(\\'wholesale.presales.presale.details.export_pdf\\')\\\" \\nmd-on-close=\\\"vm.selectedWholesalePricingTierSearch = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input \\nclass=\\\"md-text\\\" ng-model=\\\"vm.selectedWholesalePricingTierSearch\\\" type=\\\"search\\\" autofocus \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"null\\\">-</md-option><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.selectedWholesalePricingTierSearch\\\" ng-value=\\\"pricingTier.id\\\">\\n{{pricingTier.code}} - {{pricingTier.name}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><md-input-container class=\\\"pl-5 pr-10 m-0\\\" flex><label translate=\\\"PRESALE.RETAIL_PRICING_TIER\\\">\\nRetailPricing Tier</label><md-select ng-model=\\\"vm.selectedRetailPricingTier\\\" \\nng-required=\\\"!vm.selectedWholesalePricingTier\\\" \\nng-disabled=\\\"!session.hasPermission(\\'wholesale.presales.presale.details.export_pdf\\')\\\" \\nmd-on-close=\\\"vm.selectedRetailPricingTierSearch = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input \\nclass=\\\"md-text\\\" ng-model=\\\"vm.selectedRetailPricingTierSearch\\\" type=\\\"search\\\" autofocus \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"null\\\">-</md-option><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.selectedRetailPricingTierSearch\\\" ng-value=\\\"pricingTier.id\\\">\\n{{pricingTier.code}} - {{pricingTier.name}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><span flex></span><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nng-click=\\\"vm.generateCSV()\\\" class=\\\"mr-20 md-raised m-0\\\" has-permission=\\\"wholesale.presales.presale.details.export_csv\\\" \\nng-disabled=\\\"vm.generateClicked\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.generateClicked\\\"></md-progress-circular><span translate=\\\"PRESALE.EXPORT_CSV\\\" \\nng-class=\\\"{\\'ml-8\\': vm.generateClicked}\\\"></span></div></md-button><md-button ng-click=\\\"vm.generatePDF()\\\" \\nclass=\\\"md-primary md-raised m-0\\\" has-permission=\\\"wholesale.presales.presale.details.export_pdf\\\" \\nng-disabled=\\\"vm.generateClicked\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.generateClicked\\\"></md-progress-circular><span translate=\\\"PRESALE.EXPORT_PDF\\\" \\nng-class=\\\"{\\'ml-8\\': vm.generateClicked}\\\"></span></div></md-button></div></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presale/tabs/preorders.html\",\"<div id=\\\"presale-preorders\\\"><md-card flex><md-card-title><md-input-container md-no-float class=\\\"nd-search-input\\\">\\n<md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"search\\\" \\nplaceholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span flex></span><md-button \\nclass=\\\"stroked md-primary\\\" translate=\\\"PRESALE.CREATE_PURCHASES\\\" \\nhas-permission=\\\"wholesale.presales.presale.preorders.create_purchases\\\" \\nng-disabled=\\\"vm.selected.length == 0 || vm.creatingPurchases\\\" ng-click=\\\"vm.createPurchases()\\\"></md-button><md-button \\nclass=\\\"stroked md-primary\\\" translate=\\\"PRESALE.CREATE_PENDING_PURCHASES\\\" \\nhas-permission=\\\"wholesale.presales.presale.preorders.create_purchases\\\" ng-disabled=\\\"vm.creatingPurchases\\\" \\nng-click=\\\"vm.createPendingPurchases()\\\"></md-button><md-button class=\\\"md-raised md-primary\\\" \\ntranslate=\\\"PRESALE.CREATE_PRESALE_ORDER\\\" has-permission=\\\"wholesale.presales.presale.preorders.create\\\" \\nng-click=\\\"vm.newPreorder()\\\"></md-button></md-card-title><md-card-content layout-fill class=\\\"p-0 border-top\\\"><div \\nclass=\\\"fullpage-datatable\\\"><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"preorders-table\\\"></table></div></md-card-content></md-card>\\n</div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presale/tabs/products.html\",\"<div id=\\\"presale-products\\\"><md-card flex><md-card-title><md-card-title-text layout=\\\"row\\\" layout=\\\"start center\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\ntranslate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span flex></span><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"wholesale.presales.presale.products.add\\\" \\nng-click=\\\"vm.openProductSearchDialog($event)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'PRESALE.ADD_EXISTING_PRODUCT\\' | translate}}</div></md-button>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"content no-padding fullpage-datatable border-top\\\" flex \\nms-scroll><table class=\\\"dataTable dataTable-products row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"products-table\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presale/tabs/purchases.html\",\"<div id=\\\"presale-preorders\\\"><md-card flex><md-card-title><md-card-title-text layout=\\\"row\\\" layout=\\\"start center\\\"><span \\nclass=\\\"h2 mr-16\\\" translate=\\\"PRESALE.PURCHASES\\\"></span><md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-input-container></md-card-title-text></md-card-title><md-card-content><table class=\\\"dataTable row-border hover\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"purchases-table\\\">\\n</table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presales/dialogs/new-presale.html\",\"<md-dialog aria-label=\\\"New Collection\\\" class=\\\"w-300\\\" id=\\\"new-collection-dialog\\\"><md-dialog-content class=\\\"no-padding\\\">\\n<md-tabs md-dynamic-height md-selected=\\\"vm.selectedTab\\\"><md-tab label=\\\"collection\\\"><md-content class=\\\"md-padding\\\"><form\\n name=\\\"collectionForm\\\" ng-cloak><h2 class=\\\"mb-30\\\" translate=\\\"COLLECTION.NEW_COLLECTION\\\">New Collection</h2>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\"><label translate=\\\"GENERAL.CODE\\\">Code</label><md-icon \\nmd-font-icon=\\\"icon-android-studio\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.collection.code\\\" type=\\\"text\\\" required \\nmd-autofocus></md-input-container><md-input-container class=\\\"md-block h-60\\\" flex=\\\"100\\\"><label \\ntranslate=\\\"PRODUCT.BRAND\\\"></label><md-icon md-font-icon=\\\"icon-tag-text-outline\\\" class=\\\"icon\\\"></md-icon><md-select \\nrequired ng-model=\\\"vm.collection.brand\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\">\\n<md-select-header><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"mr-5\\\" class=\\\"icon\\\"></md-icon><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option ng-value=\\\"brand.id\\\" \\nng-repeat=\\\"brand in vm.brands | filter:vm.selectFilter | orderBy: \\'name\\'\\\">{{brand.name}}</md-option><md-option \\nng-click=\\\"vm.selectedTab = 2\\\" class=\\\"md-primary-fg\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\"></md-icon>\\n{{\\'CONFIGURATION.ADD_NEW_BRAND\\' | translate}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-block h-60 mb-0\\\" flex=\\\"100\\\"><label translate=\\\"PRODUCT.SEASON\\\">Season</label><md-icon \\nmd-font-icon=\\\"icon-weather-sunny\\\" class=\\\"icon\\\"></md-icon><md-select required ng-model=\\\"vm.collection.season\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"mr-5\\\" class=\\\"icon\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-value=\\\"season.id\\\" \\nng-repeat=\\\"season in vm.seasons | filter:vm.selectFilter | orderBy: \\'name\\'\\\">{{season.name}}</md-option><md-option \\nng-click=\\\"vm.selectedTab = 1\\\" class=\\\"md-primary-fg\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\"></md-icon>\\n{{\\'CONFIGURATION.ADD_NEW_SEASON\\' | translate}}</md-option></md-select></md-input-container></form></md-content>\\n</md-tab><md-tab label=\\\"season\\\"><md-content class=\\\"md-padding\\\"><form ng-cloak><h2 class=\\\"mb-30\\\" \\ntranslate=\\\"CONFIGURATION.NEW_SEASON\\\">New Season</h2><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\">\\n<label translate=\\\"GENERAL.CODE\\\">Code</label><md-icon md-font-icon=\\\"icon-code-tags\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.newSeason.code\\\" type=\\\"text\\\" required md-autofocus></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\"><label translate=\\\"GENERAL.NAME\\\">Name</label><md-icon \\nmd-font-icon=\\\"icon-pencil\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.newSeason.name\\\" type=\\\"text\\\" required>\\n</md-input-container></form></md-content></md-tab><md-tab label=\\\"brand\\\"><md-content class=\\\"md-padding\\\"><form ng-cloak>\\n<h2 class=\\\"mb-30\\\" translate=\\\"CONFIGURATION.NEW_BRAND\\\">New Brand</h2><md-input-container class=\\\"md-icon-float md-block\\\" \\nflex=\\\"100\\\"><label translate=\\\"GENERAL.CODE\\\">Code</label><md-icon md-font-icon=\\\"icon-code-tags\\\" class=\\\"icon\\\"></md-icon>\\n<input ng-model=\\\"vm.newBrand.code\\\" type=\\\"text\\\" required md-autofocus></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\"><label translate=\\\"GENERAL.NAME\\\">Name</label><md-icon \\nmd-font-icon=\\\"icon-pencil\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.newBrand.name\\\" type=\\\"text\\\" required>\\n</md-input-container></form></md-content></md-tab></md-tabs></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nng-if=\\\"vm.selectedTab == 0\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button ng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!collectionForm.$dirty || !vm.collection.code || !vm.collection.season || !vm.collection.brand\\\" \\ntranslate=\\\"GENERAL.SAVE\\\">Save</md-button></md-dialog-actions><md-dialog-actions layout=\\\"row\\\" \\nng-if=\\\"vm.selectedTab == 1\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.selectedTab = 0\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button ng-click=\\\"vm.saveSeason()\\\" class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"!vm.newSeason.code || !vm.newSeason.name || vm.savingSeason\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" ng-if=\\\"vm.savingSeason\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\" ng-class=\\\"{\\'ml-8\\': vm.savingSeason}\\\">Save</span></div>\\n</md-button></md-dialog-actions><md-dialog-actions layout=\\\"row\\\" ng-if=\\\"vm.selectedTab == 2\\\"><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.selectedTab = 0\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.saveBrand()\\\" \\nclass=\\\"md-raised md-primary\\\" ng-disabled=\\\"!vm.newBrand.code || !vm.newBrand.name || vm.savingBrand\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" ng-if=\\\"vm.savingBrand\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\" ng-class=\\\"{\\'ml-8\\': vm.savingBrand}\\\">Save</span></div></md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/tabs/deliveries.html\",\"<div id=\\\"sale-deliveries\\\" layout=\\\"column\\\" flex><md-card><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between start\\\"><span class=\\\"h2\\\" translate=\\\"SALE.DELIVERY_NOTES\\\">Delivery Notes</span><md-button \\nng-disabled=\\\"vm.creatingNewDelivery\\\" class=\\\"stroked md-primary m-0\\\" \\nhas-permission=\\\"wholesale.sales.sale.deliveries.create,wholesale.presales.presale.preorders.preorder.deliveries.create\\\" \\nng-if=\\\"vm.showNewDeliveryButton()\\\" data-test-id=\\\"sale-order-new-delivery-button\\\" ng-click=\\\"vm.newDelivery()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'SALE.NEW_DELIVERY\\' | translate}}</div></md-button></div></md-card-title-text></md-card-title><md-card-content><table\\n class=\\\"dataTable row-border\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/tabs/delivery.html\",\"<div id=\\\"sale-delivery\\\" layout=\\\"column\\\" flex><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><md-card flex-gt-sm=\\\"75\\\" \\nlayout=\\\"column\\\"><md-card-title><md-card-title-text class=\\\"pr-5\\\"><div layout=\\\"row\\\" layout-align=\\\"left center\\\"><md-button\\n id=\\\"go-to-deliveries-button\\\" class=\\\"md-icon-button black-fg ml-0\\\" \\nui-sref=\\\"app.wholesale.sales.sale.deliveries({id: vm.sale.id})\\\" translate \\ntranslate-attr-aria-label=\\\"DELIVERY.GO_TO_DELIVERIES\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\"></md-icon></md-button>\\n<div class=\\\"h2\\\" translate=\\\"PURCHASE.DELIVERY_NOTE\\\"></div><div data-test-id=\\\"sale-order-delivery-autocode\\\" \\nclass=\\\"h2 ml-10 ph-10 border-left secondary-text border-right\\\">{{vm.saleOrderDelivery.autocode}}</div><span \\nclass=\\\"status-badge ml-10\\\" ng-class=\\\"vm.getStatusColorClass()\\\">{{vm.getStatusLabel()}}</span></div>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"full-height\\\"><form name=\\\"deliveriesForm\\\" layout-wrap \\nlayout=\\\"row\\\"><md-input-container class=\\\"mt-12 mb-15 full-width\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><label \\ntranslate=\\\"SALE.SERIAL_NUMBER\\\"></label><input ng-model=\\\"vm.saleOrderDelivery.autocode\\\" \\nng-change=\\\"vm.saveSaleOrderDelivery()\\\" ng-disabled=\\\"vm.saleOrderDelivery.status > 1\\\"></md-input-container>\\n<md-input-container class=\\\"mt-12 mb-15 full-width\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><label \\ntranslate=\\\"SALE.SHIPPING_ADDRESS\\\"></label><md-select ng-model=\\\"vm.saleOrderDelivery.shipping_address\\\" multiple=\\\"false\\\" \\nng-disabled=\\\"vm.isShippingAddressSelectorEnabled()\\\" ng-change=\\\"vm.setShippingAddress()\\\"><md-option \\nng-repeat=\\\"shippingAddress in vm.shippingAddresses\\\" ng-value=\\\"shippingAddress.id\\\">{{shippingAddress | largeLocation}}\\n</md-option></md-select></md-input-container><md-input-container class=\\\"mt-12 mb-15 full-width\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><label translate=\\\"INVOICE.NOTES\\\">Notes</label><textarea \\nng-model=\\\"vm.saleOrderDelivery.notes\\\" md-maxlength=\\\"1000\\\" rows=\\\"1\\\" nd-mute-barcode-callbacks \\nng-blur=\\\"vm.setSaleOrderDeliveryNotes()\\\"></textarea></md-input-container><md-input-container \\nclass=\\\"mt-12 mb-15 full-width\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><label translate=\\\"INVOICE.PRIVATE_NOTES\\\">\\nPrivate Notes</label><textarea ng-model=\\\"vm.saleOrderDelivery.private_notes\\\" md-maxlength=\\\"1000\\\" rows=\\\"1\\\" \\nnd-mute-barcode-callbacks ng-blur=\\\"vm.setSaleOrderDeliveryNotes()\\\"></textarea></md-input-container></form>\\n</md-card-content></md-card><md-card flex-gt-sm=\\\"25\\\"><md-card-content><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"pb-8 created-recieved-card border-bottom-card\\\"><div class=\\\"text-bold w-100 user-row\\\" \\ntranslate=\\\"SALE.CREATED_BY\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-avatar \\nfullname=\\\"vm.saleOrderDelivery.created_by_fullname\\\" is-ai=\\\"false\\\" \\ninfo-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" date=\\\"vm.saleOrderDelivery.created_at\\\">\\n</nd-user-avatar></div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"!vm.saleOrderDelivery.sale_order_is_devolution\\\" class=\\\"pt-8 pb-8 created-recieved-card border-bottom-card\\\"><div \\nclass=\\\"text-bold w-100 user-row\\\" translate=\\\"SALE.PREPARED_BY\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-user-avatar fullname=\\\"vm.saleOrderDelivery.prepared_by_fullname\\\" is-ai=\\\"false\\\" \\ninfo-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" date=\\\"vm.saleOrderDelivery.prepared_at\\\">\\n</nd-user-avatar></div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"!vm.saleOrderDelivery.sale_order_is_devolution\\\" class=\\\"pt-8 pb-8 created-recieved-card\\\"><div \\nclass=\\\"text-bold w-100 user-row\\\" translate=\\\"SALE.SHIPPED_BY\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-user-avatar fullname=\\\"vm.saleOrderDelivery.shipped_by_fullname\\\" is-ai=\\\"false\\\" \\ninfo-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" date=\\\"vm.saleOrderDelivery.shipped_at\\\">\\n</nd-user-avatar></div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.saleOrderDelivery.sale_order_is_devolution\\\" class=\\\"pt-8 pb-8 created-recieved-card\\\"><div \\nclass=\\\"text-bold w-100 user-row\\\" translate=\\\"SALE.RECEIVED_BY\\\"></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-user-avatar fullname=\\\"vm.saleOrderDelivery.received_by_fullname\\\" is-ai=\\\"false\\\" \\ninfo-tooltip=\\\"\\'ORDER.TRANSFER_CREATED_BY_AI_TOOLTIP_MESSAGE\\' | translate\\\" date=\\\"vm.saleOrderDelivery.received_at\\\">\\n</nd-user-avatar></div></div></md-card-content></md-card></div><div ng-if=\\\"vm.isInPickingPackingProcess()\\\" \\nclass=\\\"did-you-know yellow m-8\\\" layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\" \\nclass=\\\"yellow-fg\\\"></md-icon><div class=\\\"pt-10 mb-8 did-you-know-message\\\"><span class=\\\"secondary-text\\\" \\ntranslate=\\\"ORDER.WARNING_PICKING_AND_PACKING_TEXT\\\"></span></div><div layout=\\\"row\\\" layout-align=\\\"center start\\\" \\nlayout-align-gt-xs=\\\"start center\\\"><md-button class=\\\"yellow-fg\\\" ng-click=\\\"vm.goPickingAndPackingView()\\\">\\n{{\\\"ORDER.WARNING_PICKING_AND_PACKING_BUTTON\\\" | translate}}</md-button></div></div><md-card><order-products \\norder=\\\"vm.saleOrderDelivery\\\" type=\\\"\\'SaleOrderDelivery\\'\\\" options=\\\"vm.visualizationOptions\\\" taxes=\\\"vm.taxes\\\" \\nshow-prices=\\\"true\\\" edit-prices=\\\"false\\\" disable-taxes=\\\"true\\\" flex></order-products></md-card><div layout=\\\"column\\\" \\nlayout-gt-md=\\\"row\\\"><div layout=\\\"row\\\" layout-gt-md=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\"><md-card flex id=\\\"file-uploader\\\" \\nflow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" flow-files-submitted=\\\"vm.upload($files, $event, $flow)\\\" \\nflow-files-added=\\\"vm.filesAdded($files, $event, $flow)\\\" flow-file-success=\\\"vm.fileSuccess($file, $message)\\\" \\nflow-complete=\\\"vm.uploadComplete()\\\" flow-drop flow-drag-enter=\\\"vm.dropping=true\\\" flow-drag-leave=\\\"vm.dropping=false\\\" \\nng-class=\\\"{\\'dropping\\':vm.dropping}\\\"><md-card-title flex=\\\"nogrow\\\"><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASE.DOCUMENTS\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content flex class=\\\"pt-10\\\"><div ng-if=\\\"vm.files.length\\\" layout=\\\"column\\\" flex layout-align=\\\"start start\\\"><table\\n class=\\\"simple half-padding\\\"><tr ng-repeat=\\\"file in vm.files\\\"><td><b><a href=\\\"{{file.file}}\\\" ng-if=\\\"file.type==\\'file\\'\\\" \\ntarget=\\\"_blank\\\" class=\\\"md-primary\\\" download>{{vm.getFilename(file.file)}}</a></b><div ng-if=\\\"file.type==\\'uploading\\'\\\" \\nclass=\\\"text-center\\\"><md-progress-circular class=\\\"md-primary\\\" md-diameter=\\\"24\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular></div></td><td class=\\\"text-right\\\"><md-menu \\nng-if=\\\"file.type==\\'file\\' && !vm.isNotAllowedToEdit()\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdMenu.open($event)\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\" class=\\\"icon\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.deleteFile(file)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span translate=\\\"PURCHASE.DELETE_DOCUMENT\\\"></span></md-button></md-menu-item>\\n</md-menu-content></md-menu></td></tr></table></div><div class=\\\"drag full-width\\\" \\nng-class=\\\"{\\'dropping\\':vm.dropping, \\'full-height\\': vm.files.length === 0}\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"p-16\\\"><md-icon md-font-icon=\\\"icon-cloud-upload\\\" \\nclass=\\\"icon secondary-text s42\\\"></md-icon><p class=\\\"secondary-text text-center\\\"><span \\ntranslate=\\\"PURCHASE.DRAG_AND_DROP\\\"></span></p><md-button class=\\\"md-primary\\\" flow-btn translate=\\\"IMPORT.SET_FILE\\\">\\n</md-button></div></div></div></md-card-content></md-card></div><div layout=\\\"row\\\" layout-gt-md=\\\"column\\\" \\nflex-gt-md=\\\"33\\\" flex=\\\"100\\\"><md-card flex><md-card-title flex=\\\"nogrow\\\"><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><div class=\\\"h2\\\">{{\\'PURCHASE.RELATED_INVOICE\\'|translate}}</div><span flex></span><div \\nng-show=\\\"vm.saleOrderDelivery.invoice\\\"><md-menu ng-if=\\\"!vm.isNotAllowedToEdit()\\\"><md-icon \\nng-click=\\\"$mdMenu.open($event)\\\" md-font-icon=\\\"icon-dots-vertical\\\" class=\\\"icon cursor-pointer\\\"></md-icon>\\n<md-menu-content width=\\\"3\\\"><md-menu-item><md-button ng-click=\\\"vm.linkWithInvoice()\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil\\\"></md-icon><span translate=\\\"PURCHASE.EDIT_RELATED_INVOICE\\\"></span></md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.unbindInvoiceDialog()\\\"><md-icon \\nmd-font-icon=\\\"icon-link-off\\\"></md-icon><span translate=\\\"PURCHASE.UNLINK_INVOICE\\\"></span></md-button></md-menu-item>\\n</md-menu-content></md-menu></div></md-card-title-text></md-card-title><md-card-content><div \\nng-if=\\\"!vm.saleOrderDelivery.invoice\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"full-width text-center pt-10 pb-20\\\"><p class=\\\"secondary-text m-0\\\"><span translate=\\\"PURCHASE.NO_RELATED_INVOICE\\\">\\n</span></p><p class=\\\"secondary-text\\\"><span translate=\\\"PURCHASE.NO_RELATED_INVOICE_CREATE\\\"></span></p></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'wholesale.sales.sale.delivery.generate_invoice\\')}}\\\" \\nng-click=\\\"vm.generateInvoice()\\\" translate=\\\"PURCHASE.NEW_INVOICE\\\"></md-button><md-button \\nclass=\\\"mr-0 md-primary md-raised\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.sales.sale.invoices.update\\')}}\\\" ng-click=\\\"vm.linkWithInvoice()\\\" \\ntranslate=\\\"PURCHASE.LINK_WITH_INVOICE\\\"></md-button></div></div><div ng-if=\\\"vm.saleOrderDelivery.invoice\\\" \\nclass=\\\"sale-invoice-data\\\"><div layout=\\\"row\\\" layout-algin=\\\"left center\\\"><div layout=\\\"column\\\" class=\\\"secondary-text\\\" \\nflex=\\\"50\\\">{{\\'INVOICE.REFERENCE\\'|translate}}</div><div layout=\\\"column\\\" flex=\\\"50\\\">\\n{{vm.saleOrderDelivery.invoice.getAutocodeOrDraft()}}</div></div><div layout=\\\"row\\\" layout-algin=\\\"left center\\\"><div \\nlayout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">{{\\'INVOICE.BILLING_DATE\\'|translate}}</div><div layout=\\\"column\\\" \\nflex=\\\"50\\\"><span ng-if=\\\"vm.saleOrderDelivery.invoice.billing_date\\\">\\n{{vm.saleOrderDelivery.invoice.billing_date | date:\\'dd/MM/yyyy\\'}} </span><span \\nng-if=\\\"!vm.saleOrderDelivery.invoice.billing_date\\\">-</span></div></div><div layout=\\\"row\\\" layout-algin=\\\"left center\\\">\\n<div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">{{\\'PURCHASE.EXPIRATION_DATE\\'|translate}}</div><div \\nlayout=\\\"column\\\" flex=\\\"50\\\"><span ng-if=\\\"vm.saleOrderDelivery.invoice.expiration_date\\\">\\n{{vm.saleOrderDelivery.invoice.expiration_date | date:\\'dd/MM/yyyy\\'}} </span><span \\nng-if=\\\"!vm.saleOrderDelivery.invoice.expiration_date\\\">-</span></div></div><div layout=\\\"row\\\" layout-algin=\\\"left center\\\">\\n<div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">{{\\'INVOICE.TOTAL\\'|translate}}</div><div layout=\\\"column\\\" \\nflex=\\\"50\\\">\\n{{vm.saleOrderDelivery.invoice.total_incl_tax | price}} {{vm.saleOrderDelivery.invoice.currency | currencyCharacter}}\\n</div></div><div layout=\\\"row\\\" layout-algin=\\\"left center\\\"><div layout=\\\"column\\\" class=\\\"secondary-text\\\" flex=\\\"50\\\">\\n{{\\'PURCHASE.FILE\\'|translate}}</div><div layout=\\\"column\\\" flex=\\\"50\\\"><a ng-click=\\\"vm.downloadInvoicePdf()\\\" \\nclass=\\\"cursor-pointer\\\">{{vm.saleOrderDelivery.invoice.getFileName()}}</a></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary md-raised\\\" \\ndata-test-id=\\\"sale-order-delivery-view-invoice-button\\\" \\nng-href=\\\"/accounting/invoices/{{vm.saleOrderDelivery.invoice.id}}\\\">{{\\'PURCHASE.VIEW_INVOICE\\'|translate}}</md-button>\\n</div></div></md-card-content></md-card></div><div layout=\\\"row\\\" layout-gt-md=\\\"column\\\" flex-gt-md=\\\"33\\\" flex=\\\"100\\\">\\n<md-card flex flex-gt-md=\\\"nogrow\\\" class=\\\"full-height\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h2\\\" translate=\\\"PURCHASE.SUMMARY\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content flex><div class=\\\"sale-summary-data\\\" flex=\\\"100\\\"><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nclass=\\\"mb-8 secondary-text\\\"><span flex translate=\\\"PURCHASE.SUBTOTAL\\\"></span> <span>\\n{{(vm.saleOrderDelivery.total_excl_tax || 0) | price}} {{vm.currency | currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" class=\\\"mb-8 secondary-text\\\" ng-if=\\\"vm.saleOrderDelivery.subtotal_early_payment_discount\\\"><span flex \\ntranslate=\\\"INVOICE.EARLY_PAYMENT_DISCOUNT\\\"></span> <span>\\n-{{(vm.saleOrderDelivery.subtotal_early_payment_discount || 0) | price}} {{vm.currency | currencyCharacter}}</span>\\n</div><div layout=\\\"row\\\" class=\\\"mb-8 secondary-text\\\" ng-if=\\\"vm.saleOrderDelivery.subtotal_discount\\\"><span flex \\ntranslate=\\\"INVOICE.DISCOUNT\\\"></span> <span>\\n-{{(vm.saleOrderDelivery.subtotal_discount || 0) | price}} {{vm.currency | currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" class=\\\"mb-8 secondary-text\\\" ng-if=\\\"vm.saleOrderDelivery.subtotal !== vm.saleOrderDelivery.total_excl_tax\\\">\\n<span flex translate=\\\"REPORTS.SUBTOTAL_DISCOUNT\\\"></span> <span>\\n{{(vm.saleOrderDelivery.subtotal || 0) | price}} {{vm.currency | currencyCharacter}}</span></div><div layout=\\\"row\\\" \\nclass=\\\"mb-8 secondary-text\\\" ng-repeat=\\\"tax in vm.saleOrderDelivery.subtotals_by_tax\\\"><span flex>\\n{{tax.name}} - {{tax.percent_value}}%</span> <span>{{(tax.amount || 0) | price}} {{vm.currency | currencyCharacter}}\\n</span></div></div><md-divider class=\\\"mb-8\\\"></md-divider><div layout=\\\"row\\\" class=\\\"h2\\\"><span flex \\ntranslate=\\\"PURCHASE.TOTAL\\\"></span> <span>\\n{{(vm.saleOrderDelivery.total_incl_tax || 0) | price}} {{vm.currency | currencyCharacter}}</span></div></div>\\n</md-card-content></md-card></div></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/tabs/details.html\",\"<div id=\\\"sale-details\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\" layout-gt-sm=\\\"row\\\"><md-card class=\\\"mb-20\\\">\\n<md-card-title ng-if=\\\"!vm.isNewSale\\\"><md-card-title-text><span class=\\\"h3\\\" translate=\\\"SALE.DETAILS\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><form name=\\\"detailsForm\\\"><div flex layout=\\\"column\\\"><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><nd-contacts contact-id=\\\"vm.sale.customer\\\" \\ncontact-id-change=\\\"vm.customerChanged()\\\" contact-instance=\\\"vm.sale.customer_instance\\\" create-button=\\\"true\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" contact-instance=\\\"vm.sale.customer_instance\\\" contact-id=\\\"vm.sale.customer\\\" \\nplaceholder=\\\"\\'SALE.CUSTOMER\\'\\\" required=\\\"true\\\" contact-id-change=\\\"vm.customerChanged()\\\" create-button=\\\"true\\\">\\n</nd-contacts><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"SALE.PRICING_TIER\\\"></label><md-select \\nmd-on-close=\\\"vm.searchSelectHeader[2] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" ng-change=\\\"vm.pricingTierChanged()\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.pricing_tier\\\" required><md-select-header><input autofocus class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[2]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.searchSelectHeader[2]\\\" ng-value=\\\"pricingTier.id\\\">\\n{{pricingTier.name}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"SALE.FROM_WAREHOUSE\\\"></label><md-select \\nmd-on-close=\\\"vm.searchSelectHeader[0] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"vm.sale.status>=2 || !Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.source_warehouse\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[0]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[0]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\"><label translate=\\\"SALE.SALE_WAREHOUSE\\\"></label><md-select md-on-close=\\\"vm.searchSelectHeader[0] = \\'\\'\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.showroom\\\"><md-select-header><input class=\\\"md-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nng-model=\\\"vm.searchSelectHeader[0]\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header>\\n<md-option ng-value=\\\"null\\\">-</md-option><md-option ng-if=\\\"vm.showroomsAvailable[warehouse.id]\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | filter:vm.searchSelectHeader[0]\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-autocomplete flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" md-delay=\\\"300\\\" md-floating-label=\\\"{{\\'CONTACTS.SALES_AGENT\\' | translate}}\\\" \\nmd-item-text=\\\"vm.getSelectedSalesAgentName()\\\" md-items=\\\"salesAgent in vm.salesAgentQuerySearch()\\\" md-min-length=\\\"0\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.salesAgentSearchText\\\" md-selected-item=\\\"vm.sale.sales_agent\\\" \\nmd-selected-item-change=\\\"vm.selectSalesAgent(salesAgent)\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nplaceholder=\\\"{{\\'CONTACTS.SALES_AGENT\\' | translate}}\\\"><md-item-template><div layout=\\\"row\\\"><span md-highlight-flags=\\\"^i\\\" \\nmd-highlight-text=\\\"vm.salesAgentSearchText\\\">{{salesAgent.first_name}} {{salesAgent.last_name}}</span></div>\\n</md-item-template><md-not-found>Not found.</md-not-found></md-autocomplete><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"SALE.SEASON\\\"></label><md-select md-on-close=\\\"vm.searchSelectHeader[2] = \\'\\'\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" ng-model=\\\"vm.sale.season\\\" required><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[2]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"season in vm.seasons | filter:vm.searchSelectHeader[2]\\\" ng-value=\\\"season.id\\\">{{season.name}}</md-option>\\n</md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"mb-40\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"PRESALE.PRESALE_COLLECTION\\\"></label><md-select \\nmd-on-close=\\\"vm.onSelectorClose(\\'collection\\')\\\" ng-model=\\\"vm.sale.collection\\\"><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.selectFilter[\\'collection\\']\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option \\nng-repeat=\\\"collection in vm.collections | filter:vm.selectFilter[\\'collection\\'] | orderBy: \\'code\\'\\\" \\nng-value=\\\"collection.id\\\">{{collection.code}}</md-option></md-select></md-input-container><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"SALE.SERIAL_NUMBER\\\"></label><md-select \\nhas-permission=\\\"wholesale.sales.create,wholesale.presales.presale.preorders.create\\\" ng-if=\\\"vm.isNewSale\\\" \\nng-model=\\\"vm.sale.serial_number_type\\\" required><md-option ng-value=\\\"-1\\\">{{\\'GENERAL.CUSTOM\\' | translate}}</md-option>\\n<md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\" \\nhas-permission=\\\"wholesale.sales.create,wholesale.presales.presale.preorders.create\\\" ng-if=\\\"vm.isNewSale\\\"></div><input \\nng-disabled=\\\"vm.sale.status>2 || !Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-if=\\\"vm.sale.serial_number_type == -1\\\" ng-model=\\\"vm.sale.autocode\\\"> <input \\nng-disabled=\\\"vm.sale.status>2 || !Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-if=\\\"!vm.isNewSale\\\" ng-model=\\\"vm.sale.autocode\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<label><span translate=\\\"SALE.DELIVERY_NOTES\\\"></span> <span translate=\\\"SALE.SERIAL_NUMBER\\\"></span></label><md-select \\nng-model=\\\"vm.sale.delivery_notes_serial_number_type\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_SALE_ORDER_DELIVERY\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-datepicker flex md-hide-icons=\\\"calendar\\\" md-min-date=\\\"vm.minDate\\\" md-open-on-focus \\nmd-placeholder=\\\"{{\\'SALE.START_SHIPPING_DATE\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.start_date\\\"></md-datepicker></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"column\\\"><md-datepicker class=\\\"mr-0\\\" flex md-hide-icons=\\\"calendar\\\" md-min-date=\\\"vm.sale.start_date\\\" \\nmd-open-on-focus md-placeholder=\\\"{{\\'SALE.CANCEL_DATE\\' | translate}}\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.cancel_date\\\"></md-datepicker></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\">\\n<label translate=\\\"SALE.RETAIL_PRICING_TIER\\\"></label><md-select class=\\\"mr-0\\\" \\nmd-on-close=\\\"vm.searchSelectHeader[2] = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.retail_pricing_tier\\\"><md-select-header><input autofocus class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"vm.searchSelectHeader[2]\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-repeat=\\\"pricingTier in vm.pricingTiers | filter:vm.searchSelectHeader[2]\\\" \\nng-value=\\\"pricingTier.id\\\">{{pricingTier.name}}</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div>\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"INVOICE.LANGUAGE\\\"></label>\\n<md-select \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nng-model=\\\"vm.sale.language\\\" required><md-option ng-repeat=\\\"(key, value) in vm.languages\\\" ng-value=\\\"key\\\">{{value}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"SALE.NOTES\\\"></label><textarea class=\\\"p-10\\\" \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\" \\nmd-maxlength=\\\"1000\\\" md-select-on-focus ng-model=\\\"vm.sale.notes\\\" rows=\\\"1\\\"></textarea></md-input-container><md-chips \\nclass=\\\"pl-5 pr-10\\\" delete-button-label=\\\"{{\\'CONFIGURATION.DELETE_TAG\\' | translate}}\\\" \\ndelete-hint=\\\"{{\\'CONFIGURATION.TAG_DELETE_HINT\\' | translate}}\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-model=\\\"vm.sale.tags\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.TYPE_A_TAG\\' | translate}}\\\" \\nreadonly=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nsecondary-placeholder=\\\"{{\\'CONFIGURATION.TYPE_ANOTHER_TAG\\' | translate}}\\\"></md-chips></div><div layout=\\\"row\\\" \\nlayout-wrap \\nng-if=\\\"vm.sale.status==12 ||\\n                        vm.sale.status==11 ||\\n                        vm.sale.customer_carrier_name ||\\n                        vm.sale.customer_transport_import_account_number ||\\n                        vm.sale.customer_comments\\\">\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"!vm.isNewSale\\\"><label translate=\\\"SALE.CUSTOMER_CARRIER_NAME\\\">\\n</label><textarea class=\\\"p-10\\\" has-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create\\\" \\nmd-select-on-focus ng-disabled=\\\"true\\\" ng-model=\\\"vm.sale.customer_carrier_name\\\" rows=\\\"1\\\"></textarea>\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"!vm.isNewSale\\\"><label \\ntranslate=\\\"SALE.CUSTOMER_TRANSPORT_IMPORT_ACCOUNT_NUMBER\\\"></label><textarea class=\\\"p-10\\\" \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\" \\nmd-select-on-focus ng-disabled=\\\"true\\\" ng-model=\\\"vm.sale.customer_transport_import_account_number\\\" rows=\\\"1\\\"></textarea>\\n</md-input-container><md-input-container flex=\\\"100\\\" ng-if=\\\"!vm.isNewSale\\\"><label translate=\\\"SALE.CUSTOMER_COMMENTS\\\">\\n</label><textarea class=\\\"p-10\\\" has-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create\\\" \\nmd-select-on-focus ng-disabled=\\\"true\\\" ng-model=\\\"vm.sale.customer_comments\\\" rows=\\\"1\\\"></textarea></md-input-container>\\n</div><div flex \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"SALE.CANCEL\\\">Cancel\\n</md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\" \\nng-click=\\\"vm.actionSaveButton(vm.isNewSale)\\\" ng-disabled=\\\"!detailsForm.$dirty || detailsForm.$invalid\\\" \\ntranslate=\\\"{{vm.translateSaveButton(vm.isNewSale)}}\\\">Save</md-button></div></div></form></md-card-content></md-card>\\n<div class=\\\"did-you-know md-margin\\\" flex=\\\"30\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\">\\n<md-icon class=\\\"blue-fg\\\" md-font-icon=\\\"icon-information-outline\\\"></md-icon><span class=\\\"did-you-know-title\\\">\\n{{\\'SALE.CREATE_AND_RECEIVE_CARD_TITLE\\' | translate}}</span></div><div class=\\\"p-8\\\"><div class=\\\"did-you-know-message\\\" \\ntranslate=\\\"SALE.CREATE_AND_RECEIVE_CARD_MESSAGE\\\"></div></div></div><div class=\\\"pl-16\\\"><a \\nhref=\\\"https://support.stockagile.com/hc/es/articles/5529729959837-Crear-y-entregar-un-pedido-de-venta\\\" target=\\\"_blank\\\" \\ntranslate=\\\"GENERAL.MORE_INFO\\\"></a></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/tabs/invoicing.html\",\"<div id=\\\"sale-invoicing\\\"><md-card><md-card-title><md-card-title-text><span class=\\\"h2\\\" translate=\\\"SALE.BILLING\\\">Billing\\n</span></md-card-title-text></md-card-title><md-card-content><form name=\\\"billingForm\\\"><div layout=\\\"column\\\" flex><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><md-input-container class=\\\"pl-5 pr-10\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"SALE.BILLING_ADDRESS\\\">Billing Address</label><md-select ng-model=\\\"vm.sale.billing_address\\\" required \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\">\\n<md-option ng-repeat=\\\"postalAddress in vm.sale.customer_instance.postal_addresses\\\" \\nng-if=\\\"postalAddress.is_billing_address\\\" ng-value=\\\"postalAddress.id\\\"><div layout=\\\"column\\\" class=\\\"p-5\\\"><strong>\\n{{postalAddress.name}}</strong><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-map-marker\\\" \\nclass=\\\"s16\\\"></md-icon><small>{{postalAddress.address_1}} <span ng-if=\\\"postalAddress.address_2\\\">\\n({{postalAddress.address_2}})</span> {{postalAddress.city}},&nbsp;<span ng-if=\\\"postalAddress.state\\\">\\n{{postalAddress.state}},&nbsp;</span>{{postalAddress.zip}}, {{vm.countries[postalAddress.country]}}</small><md-icon \\nng-if=\\\"postalAddress.phone\\\" md-font-icon=\\\"icon-phone\\\" class=\\\"s16 mh-5\\\"></md-icon><small ng-if=\\\"postalAddress.phone\\\">\\n{{postalAddress.phone | phonenumber}}</small> <span flex></span></div></div></md-option></md-select><div \\nclass=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container class=\\\"pl-5 pr-10\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"SALE.SHIPPING_ADDRESS\\\">Shipping Address</label><md-select ng-model=\\\"vm.sale.shipping_address\\\" required \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\">\\n<md-option ng-repeat=\\\"postalAddress in vm.sale.customer_instance.postal_addresses\\\" \\nng-if=\\\"postalAddress.is_shipping_address\\\" ng-value=\\\"postalAddress.id\\\"><div layout=\\\"column\\\" class=\\\"p-5\\\"><strong>\\n{{postalAddress.name}}</strong><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-map-marker\\\" \\nclass=\\\"s16\\\"></md-icon><small>{{postalAddress.address_1}} <span ng-if=\\\"postalAddress.address_2\\\">\\n({{postalAddress.address_2}})</span> {{postalAddress.city}},&nbsp;<span ng-if=\\\"postalAddress.state\\\">\\n{{postalAddress.state}},&nbsp;</span>{{postalAddress.zip}}, {{vm.countries[postalAddress.country]}}</small><md-icon \\nng-if=\\\"postalAddress.phone\\\" md-font-icon=\\\"icon-phone\\\" class=\\\"s16 mh-5\\\"></md-icon><small ng-if=\\\"postalAddress.phone\\\">\\n{{postalAddress.phone | phonenumber}}</small> <span flex></span></div></div></md-option></md-select><div \\nclass=\\\"md-errors-spacer\\\"></div></md-input-container></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><md-input-container \\nflex=\\\"25\\\" class=\\\"pl-5 pr-10\\\"><label translate=\\\"INVOICE.PAYMENT_METHOD\\\">Payment Method</label><md-select \\nng-model=\\\"vm.sale.payment_method\\\" \\nng-disabled=\\\"vm.invoice.status >= 1 || !Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nrequired><md-option ng-repeat=\\\"paymentMethod in vm.paymentMethods\\\" ng-value=\\\"paymentMethod.id\\\">{{paymentMethod.name}}\\n</md-option></md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container><md-input-container \\nclass=\\\"pl-5 pr-10\\\" flex=\\\"25\\\"><label translate=\\\"CONTACTS.INVOICE_TYPE\\\"></label><md-select \\nng-model=\\\"vm.sale.invoice_type\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\">\\n<md-option ng-repeat=\\\"(code,value) in vm.contactInvoicingTypes\\\" value=\\\"{{value}}\\\">{{\\'CONTACTS.\\' + code | translate}}\\n</md-option></md-select></md-input-container><md-input-container class=\\\"pl-5 pr-10\\\" flex=\\\"25\\\"><md-checkbox \\nng-model=\\\"vm.sale.exclude_taxes\\\" aria-label=\\\"Exclude taxes\\\" flex \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\">\\n{{\\'CONTACTS.EXCLUDE_TAXES\\' | translate }}</md-checkbox></md-input-container><md-input-container class=\\\"pl-5 pr-10\\\" \\nflex=\\\"25\\\"><md-checkbox ng-model=\\\"vm.sale.surcharge\\\" aria-label=\\\"Equivalence surcharge\\\" flex \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\">\\n{{\\'CONTACTS.EQUIVALENCE_SURCHARGE\\' | translate }}</md-checkbox></md-input-container></div><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\"><md-input-container flex=\\\"25\\\" class=\\\"pl-5 pr-10\\\"><label translate=\\\"SALE.DISCOUNT\\\">Discount</label>\\n<input type=\\\"number\\\" ng-model=\\\"vm.sale.discount\\\" \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\">\\n</md-input-container><md-input-container flex=\\\"25\\\" class=\\\"pl-5 pr-10\\\"><label \\ntranslate=\\\"CONTACTS.EARLY_PAYMENT_DISCOUNT\\\">Early Payment Discount</label><input type=\\\"number\\\" \\nng-model=\\\"vm.sale.early_payment_discount\\\" \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\">\\n</md-input-container><md-input-container flex=\\\"50\\\" class=\\\"pl-5 pr-10\\\"><label translate=\\\"INVOICE.CURRENCY\\\">Currency\\n</label><md-select ng-model=\\\"vm.sale.currency\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\')\\\" \\nrequired><md-option ng-repeat=\\\"(key, symbol) in vm.currencies\\\" ng-value=\\\"key\\\">{{key}} ({{symbol}})</md-option>\\n</md-select><div class=\\\"md-errors-spacer\\\"></div></md-input-container></div><div layout-align=\\\"end center\\\" layout=\\\"row\\\" \\nclass=\\\"\\\" flex \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.sales.create,wholesale.presales.presale.preorders.preorder.details.update,wholesale.presales.presale.preorders.create\\\">\\n<md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"SALE.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"wholesale.sales.sale.details.update,wholesale.presales.presale.preorders.preorder.details.update\\\" \\nng-click=\\\"vm.save()\\\" ng-disabled=\\\"!billingForm.$dirty || billingForm.$invalid\\\" ng-if=\\\"!vm.isNewSale\\\" \\ntranslate=\\\"SALE.SAVE\\\">Save</md-button></div></div></form></md-card-content></md-card><nd-order-payments \\nsale-order=\\\"vm.sale\\\" payment-methods=\\\"vm.paymentMethods\\\"></nd-order-payments></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/tabs/products.html\",\"<div id=\\\"sale-products\\\"><md-card><order-products order=\\\"vm.sale\\\" type=\\\"\\'SaleOrder\\'\\\" options=\\\"vm.visualizationOptions\\\" \\nshow-prices=\\\"true\\\" edit-prices=\\\"true\\\" disable-taxes=\\\"false\\\" taxes=\\\"vm.taxes\\\" flex></order-products></md-card></div>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sales/sidenavs/main-sidenav.html\",\"<md-content class=\\\"content no-padding\\\" flex ms-scroll><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div \\nclass=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem==\\'all\\'\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon><md-select flex multiple=\\\"true\\\" ng-change=\\\"vm.reloadSales()\\\" \\nng-model=\\\"vm.status.filters.statuses\\\" placeholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\"><md-option \\nng-if=\\\"status.code!=\\'10\\'\\\" ng-repeat=\\\"status in vm.orderStatuses | orderBy: \\'code\\'\\\" ng-value=\\\"status.code\\\"><span \\nclass=\\\"status-badge\\\" ng-class=\\\"vm.orderStatusColors[status.code]\\\">{{\\'SALES.\\' + status.name | translate}}</span>\\n</md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-bookmark-outline\\\"></md-icon><md-select flex ng-change=\\\"vm.reloadSales()\\\" \\nng-model=\\\"vm.status.filters.type\\\"><md-option ng-repeat=\\\"saleType in vm.salesTypes\\\" ng-value=\\\"saleType.value\\\">\\n{{saleType.name | translate}}</md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-left\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\">\\n</md-icon><md-select flex multiple=\\\"true\\\" ng-change=\\\"vm.reloadSales()\\\" ng-model=\\\"vm.status.filters.sourceWarehouses\\\" \\nplaceholder=\\\"{{\\'TRANSFERS.ALL_SOURCE_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-store\\\"></md-icon><md-select flex multiple=\\\"true\\\" ng-change=\\\"vm.reloadSales()\\\" \\nng-model=\\\"vm.status.filters.targetWarehouses\\\" placeholder=\\\"{{\\'TRANSFERS.ALL_TARGET_WAREHOUSES\\' | translate}}\\\">\\n<md-option ng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div class=\\\"ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select flex \\nmultiple=\\\"true\\\" ng-change=\\\"vm.reloadSales()\\\" ng-model=\\\"vm.status.filters.seasons\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_SEASONS\\' | translate}}\\\"><md-option ng-repeat=\\\"season in vm.seasons | orderBy: \\'position\\'\\\" \\nng-value=\\\"season.id\\\">{{season.name}}</md-option></md-select></div><div class=\\\"autocomplete-filter ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-account\\\"></md-icon>\\n<md-autocomplete class=\\\"autocomplete\\\" flex md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_SALE_AGENTS\\' | translate}}\\\" md-item-text=\\\"salesAgent.name\\\" \\nmd-items=\\\"salesAgent in vm.salesAgentQuerySearch()\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.salesAgentSearchText\\\" md-selected-item=\\\"vm.selectedSalesAgent\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_SALES_AGENT)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_SALE_AGENTS\\' | translate}}\\\"><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.salesAgentSearchText\\\">{{salesAgent.name}}</span></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_SALES_AGENT_FOUND\\\" translate-values=\\\"{name: vm.salesAgentSearchText}\\\">\\nNo customer matching \\\"{{vm.salesAgentSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips ph-20\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters(vm.TYPE_SALES_AGENT)\\\" \\nmd-removable=\\\"true\\\" ng-model=\\\"vm.status.filters.salesAgents\\\" readonly=\\\"true\\\"><md-chip-template><strong>\\n{{$chip.name}}&nbsp;</strong></md-chip-template></md-chips></div><div class=\\\"autocomplete-filter ph-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-account\\\"></md-icon>\\n<md-autocomplete class=\\\"autocomplete\\\" flex md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_CUSTOMERS\\' | translate}}\\\" md-item-text=\\\"customer.name\\\" \\nmd-items=\\\"customer in vm.customerQuerySearch()\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.customerSearchText\\\" md-selected-item=\\\"vm.selectedCustomer\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_CUSTOMER)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_CUSTOMERS\\' | translate}}\\\"><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.customerSearchText\\\">{{customer.name}}</span></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_CUSTOMERS_FOUND\\\" translate-values=\\\"{name: vm.customerSearchText}\\\">\\nNo customer matching \\\"{{vm.customerSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips ph-20\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters(vm.TYPE_CUSTOMER)\\\" \\nmd-removable=\\\"true\\\" ng-model=\\\"vm.status.filters.customers\\\" readonly=\\\"true\\\"><md-chip-template><strong>\\n{{$chip.name}}&nbsp;</strong></md-chip-template></md-chips></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/account/views/roles/dialogs/role-editor/role-editor.html\",\"<md-dialog aria-label=\\\"New Collection\\\" class=\\\"w-400\\\"><md-dialog-content layout=\\\"row\\\" layout-wrap ms-scroll><form \\nname=\\\"roleForm\\\" novalidate flex=\\\"100\\\"><span ng-if=\\\"vm.option == \\'create\\'\\\" class=\\\"h2 mb-30\\\" translate=\\\"ROLES.NEW_ROLE\\\">\\nNew role</span> <span ng-if=\\\"vm.option == \\'rename\\'\\\" class=\\\"h2 mb-30\\\" translate=\\\"ROLES.CHANGE_NAME\\\">Rename role</span> \\n<span ng-if=\\\"vm.option == \\'delete\\'\\\" class=\\\"h2 mb-30\\\" translate=\\\"GENERAL.DELETE\\\">Delete role</span><p \\nng-if=\\\"vm.option == \\'create\\'\\\" translate=\\\"ROLES.NEW_ROLE_DIALOG_TEXT\\\">Write the name of the role you want to create</p>\\n<p ng-if=\\\"vm.option == \\'rename\\'\\\" translate=\\\"ROLES.CHANGE_NAME_DIALOG_TEXT\\\">\\nWrite a new name for the role you just selected</p><p ng-if=\\\"vm.option == \\'delete\\'\\\" \\ntranslate=\\\"ROLES.DELETE_DIALOG_TEXT\\\">Name of the role you are going to delete</p><md-input-container \\nclass=\\\"md-icon-float md-block\\\"><label translate=\\\"ROLES.NEW_ROLE_DIALOG_INPUT\\\">Name</label><md-icon \\nmd-font-icon=\\\"icon-pencil\\\" class=\\\"name icon\\\"></md-icon><input ng-model=\\\"vm.role.name\\\" \\nng-disabled=\\\"vm.option == \\'delete\\'\\\"></md-input-container><md-checkbox ng-model=\\\"vm.role.isDuplicate\\\" \\nng-if=\\\"vm.option == \\'create\\'\\\">{{\\'ROLES.IS_DUPLICATE\\' | translate }}</md-checkbox><span ng-if=\\\"vm.option == \\'delete\\'\\\" \\ntranslate=\\\"ROLES.REPLACE_FOR\\\"></span><br><md-input-container ng-if=\\\"vm.option == \\'create\\' || vm.option == \\'delete\\'\\\" \\nclass=\\\"mb-0 w-350\\\" flex><md-icon md-font-icon=\\\"icon-content-copy\\\" class=\\\"name icon\\\"></md-icon><label \\ntranslate=\\\"ROLES.SELECT_ROLE\\\">Select a role</label><md-select ng-model=\\\"vm.role.origin\\\" \\nng-disabled=\\\"vm.option == \\'create\\' && !vm.role.isDuplicate\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.countrySearch)\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'ROLES.SELECT_ROLE\\' | translate}}\\\">\\n</md-select-header><md-option ng-repeat=\\\"role in vm.getAvailableRoles() | filter: vm.search\\\" ng-value=\\\"role.id\\\">\\n{{role.title}}</md-option></md-select></md-input-container></form></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-disabled=\\\"vm.fetching || vm.saving\\\" \\nhas-permission=\\\"account.roles.update\\\" ng-click=\\\"vm.cancel()\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-if=\\\"vm.option != \\'delete\\'\\\" ng-disabled=\\\"!vm.isCorrect()\\\" \\nhas-permission=\\\"account.roles.update\\\" ng-click=\\\"vm.save()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n{{\\'GENERAL.SAVE\\' | translate}}</div></md-button><md-button class=\\\"md-primary md-raised md-warn\\\" \\nng-if=\\\"vm.option == \\'delete\\'\\\" ng-disabled=\\\"!vm.isCorrect()\\\" has-permission=\\\"account.roles.delete\\\" ng-click=\\\"vm.save()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular>{{\\'GENERAL.DELETE\\' | translate}}</div></md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/account/views/subscriptions/upgrade-plan/dialogs/purchase-add-on-dialog.html\",\"<md-dialog id=\\\"purchase-add-on-dialog\\\"><md-dialog-content><h2 class=\\\"mb-30\\\" translate=\\\"UPGRADE_PLAN.ADD_ADDON\\\"></h2><p \\ntranslate=\\\"UPGRADE_PLAN.ADD_ADDON_MESSAGE\\\" translate-values=\\\"vm.messageParams\\\"></p><p class=\\\"red-fg\\\" ng-if=\\\"vm.error\\\" \\ntranslate=\\\"UPGRADE_PLAN.ADD_ADDON_MESSAGE_ERROR\\\"></p></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\" ng-disabled=\\\"vm.purchasing\\\">Cancel</md-button>\\n<md-button ng-click=\\\"vm.purchase()\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.purchasing\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.purchasing\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular><span translate=\\\"UPGRADE_PLAN.PURCHASE_ADDON\\\"></span></div></md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/account/views/users/dialogs/user/user-dialog.html\",\"<md-dialog class=\\\"no-padding h-600\\\" id=\\\"user-dialog\\\" layout-padding><form autocomplete=\\\"false\\\" \\nclass=\\\"md-inline-form no-padding\\\" name=\\\"userForm\\\" novalidate><div class=\\\"p-0 h-60\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div class=\\\"h2\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"md-toolbar-tools\\\">\\n{{(vm.user && vm.user.id ? \\'USERS.EDIT_USER\\' : \\'USERS.NEW_USER\\') | translate}}</div></div><span flex></span></div>\\n<md-dialog-content layout=\\\"row\\\" layout-wrap ms-scroll><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" \\nflex-gt-md=\\\"50\\\"><label translate=\\\"USERS.USERNAME\\\">Username (required)</label><md-icon class=\\\"name icon\\\" \\nmd-font-icon=\\\"icon-account\\\"></md-icon><input has-permission-else-disable=\\\"account.users.update\\\" name=\\\"username\\\" \\nng-change=\\\"vm.usernameChange()\\\" ng-disabled=\\\"!vm.newUser\\\" ng-model=\\\"vm.user.username\\\" required type=\\\"text\\\"><div \\nng-if=\\\"vm.errors\\\" ng-messages=\\\"userForm.username.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"username\\\" \\nng-repeat=\\\"error in vm.errors.username\\\">{{error}}</div></div></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\"><label translate=\\\"USERS.PASSWORD\\\">Password</label><md-icon \\nclass=\\\"name icon\\\" md-font-icon=\\\"icon-key\\\"></md-icon><input autocomplete=\\\"new-password\\\" \\nhas-permission-else-disable=\\\"account.users.update\\\" name=\\\"password\\\" ng-model=\\\"vm.user.password\\\" type=\\\"password\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\"><label \\ntranslate=\\\"USERS.FIRST_NAME\\\">Name</label><md-icon class=\\\"name icon\\\" md-font-icon=\\\"only-space\\\"></md-icon><input \\nhas-permission-else-disable=\\\"account.users.update\\\" md-auto-focus name=\\\"first_name\\\" ng-model=\\\"vm.user.first_name\\\" \\nrequired type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" \\nflex-gt-md=\\\"50\\\"><label translate=\\\"USERS.LAST_NAME\\\">Last name</label><md-icon class=\\\"name icon\\\" \\nmd-font-icon=\\\"only-space\\\"></md-icon><input has-permission-else-disable=\\\"account.users.update\\\" name=\\\"last_name\\\" \\nng-model=\\\"vm.user.last_name\\\" required type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-block\\\" flex=\\\"100\\\" \\nflex-gt-md=\\\"50\\\"><label translate=\\\"USERS.PHONE_NUMBER\\\">Phone number</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-phone\\\"></md-icon><input has-permission-else-disable=\\\"account.users.update\\\" name=\\\"phone_number\\\" \\nng-model=\\\"vm.user.phone\\\" translate type=\\\"text\\\"></md-input-container><md-input-container class=\\\"md-block\\\" flex=\\\"100\\\" \\nflex-gt-md=\\\"50\\\"><label translate=\\\"USERS.EMAIL\\\">Email (required)</label><md-icon class=\\\"email icon\\\" \\nmd-font-icon=\\\"icon-email\\\"></md-icon><input has-permission-else-disable=\\\"account.users.update\\\" ng-model=\\\"vm.user.email\\\" \\nrequired translate type=\\\"email\\\"></md-input-container><md-input-container class=\\\"md-block mb-40\\\" flex=\\\"100\\\" \\nflex-gt-md=\\\"50\\\" ng-if=\\\"vm.roles && vm.customRoles.length\\\"><label translate=\\\"USERS.ROLE\\\">Role</label><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-worker\\\"></md-icon><md-select has-permission=\\\"account.users.update\\\" multiple=\\\"multiple\\\" \\nng-model=\\\"vm.user.roles\\\" required><md-optgroup label=\\\"{{\\'USERS.DEFAULT_ROLES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"role in vm.roles\\\" ng-value=\\\"role.id\\\">{{ \\'USERS.\\' + vm.USER_ROLES[role.id] | translate }}</md-option>\\n</md-optgroup><md-optgroup label=\\\"{{\\'USERS.CUSTOM_ROLES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"customRole in vm.customRoles\\\" ng-value=\\\"customRole.id\\\">{{ customRole.name }}</md-option></md-optgroup>\\n</md-select></md-input-container><md-input-container class=\\\"md-block mb-40\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\" \\nng-if=\\\"vm.roles && !vm.customRoles.length\\\"><label translate=\\\"USERS.ROLE\\\">Role</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-worker\\\"></md-icon><md-select has-permission=\\\"account.users.update\\\" multiple=\\\"multiple\\\" \\nng-if=\\\"!vm.customRoles.length\\\" ng-model=\\\"vm.user.roles\\\" required><md-option ng-repeat=\\\"role in vm.roles\\\" \\nng-value=\\\"role.id\\\">{{ \\'USERS.\\' + vm.USER_ROLES[role.id] | translate }}</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"md-block mb-40\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\" ng-if=\\\"vm.roles\\\"><label \\ntranslate=\\\"WAREHOUSES.WAREHOUSES\\\">Warehouses</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-store\\\"></md-icon>\\n<md-select has-permission-else-disable=\\\"account.users.update\\\" multiple=\\\"multiple\\\" ng-model=\\\"vm.user.warehouses\\\" \\ntranslate><md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container><md-input-container class=\\\"md-block mb-40\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\" \\nng-if=\\\"vm.hasMultipleFiscalDirectionFeature\\\"><label translate=\\\"USERS.FISCAL_ADDRESSES\\\">Role</label><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-bank\\\"></md-icon><md-select has-permission=\\\"account.users.update\\\" multiple=\\\"multiple\\\" \\nng-model=\\\"vm.user.fiscal_addresses\\\"><md-option ng-repeat=\\\"fiscalAddress in vm.fiscalAddresses\\\" \\nng-value=\\\"fiscalAddress.id\\\">{{fiscalAddress.legal_name}}</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"md-block\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\"><label translate=\\\"USERS.DEFAULT_LANGUAGE\\\">Language\\n</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-flag-checkered-variant\\\"></md-icon><md-select \\nhas-permission-else-disable=\\\"account.users.update\\\" ng-model=\\\"vm.user.lang\\\" translate><md-option \\naria-label=\\\"{{lang.title}}\\\" ng-repeat=\\\"(iso, lang) in vm.languages\\\" ng-value=\\\"lang.code\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag mr-5\\\" src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span>\\n{{lang.translation | translate}}</span></div></md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-block\\\" flex=\\\"100\\\" flex-gt-md=\\\"50\\\"><label translate=\\\"USERS.PIN\\\">Pin</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-key\\\"></md-icon><input has-permission-else-disable=\\\"account.users.update\\\" inputmode=\\\"numeric\\\" \\nmaxlength=\\\"4\\\" name=\\\"pin\\\" ng-model=\\\"vm.user.pin\\\" pattern=\\\"[0-9]{4}\\\" type=\\\"password\\\"><div class=\\\"hint secondary-text\\\" \\ntranslate=\\\"USERS.PIN_HINT\\\"></div><div ng-messages=\\\"userForm.pin.$error\\\" role=\\\"alert\\\"><div ng-message=\\\"pattern\\\"><span \\ntranslate=\\\"USERS.PIN_NOT_VALID_4_NUMBERS\\\"></span></div></div></md-input-container><md-input-container class=\\\"md-block\\\" \\nflex=\\\"100\\\" flex-gt-md=\\\"50\\\"><label translate=\\\"USERS.VAT\\\">VAT</label><md-icon class=\\\"icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/card-account-details-outline.919d7431.svg\\\"></md-icon><input \\nhas-permission-else-disable=\\\"account.users.update\\\" name=\\\"vat\\\" ng-model=\\\"vm.user.vat\\\" type=\\\"text\\\"><div \\nclass=\\\"hint secondary-text\\\" ng-if=\\\"vm.showVatHint\\\" translate=\\\"USERS.VAT_HINT\\\"></div></md-input-container><div \\nlayout=\\\"row\\\" flex=\\\"100\\\" class=\\\"pt-40 pb-40\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-bell-ring-outline\\\" \\nclass=\\\"mr-16\\\"></md-icon><md-switch class=\\\"no-margin\\\" flex=\\\"100\\\" has-permission-else-disable=\\\"account.users.update\\\" \\nng-model=\\\"vm.user.has_notifications\\\">{{ \\'USERS.GET_NOTIFICATIONS\\' | translate }}</md-switch></div><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.ADDRESS_1\\\">Address 1</label>\\n<md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/map-marker-outline.5e31356d.svg\\\" md-font-icon>\\n</md-icon><input has-permission=\\\"account.users.update\\\" ng-model=\\\"vm.user.address_1\\\" type=\\\"text\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"WAREHOUSES.ADDRESS_2\\\">\\nAddress 2</label><md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/map-marker-outline.5e31356d.svg\\\" \\nmd-font-icon></md-icon><input has-permission=\\\"account.users.update\\\" ng-model=\\\"vm.user.address_2\\\" type=\\\"text\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"WAREHOUSES.CITY\\\">City</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-city\\\"></md-icon><input \\nhas-permission=\\\"account.users.update\\\" ng-model=\\\"vm.user.city\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.ZIP_CODE\\\">Zip code</label><input\\n has-permission=\\\"account.users.update\\\" ng-model=\\\"vm.user.zip\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"WAREHOUSES.COUNTRY\\\"></label><md-select \\nclass=\\\"mb-25\\\" ng-disabled=\\\"!Session.hasPermission(\\'account.users.update\\')\\\" ng-model=\\\"vm.user.country\\\">\\n<md-select-header><input ng-model=\\\"vm.countrySearch\\\" type=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option \\nng-repeat=\\\"country in (vm.countries | orderBy:\\'name\\' | filter: { name: vm.countrySearch })\\\" ng-value=\\\"country.code\\\">\\n{{country.name}}</md-option></md-select></md-input-container><div ng-if=\\\"vm.contractedPlanLimit && vm.newUser\\\" \\nclass=\\\"mt-16\\\" flex=\\\"100\\\"><nd-contracted-plan-limit-alert-box contracted-plan-limit=\\\"vm.contractedPlanLimit\\\" flex=\\\"100\\\">\\n</nd-contracted-plan-limit-alert-box></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button class=\\\"md-warn stroked\\\" has-permission=\\\"account.users.delete\\\" \\nnd-track-click=\\\"delete user\\\" ng-click=\\\"vm.deleteUserConfirm($event)\\\" ng-if=\\\"vm.showDeleteButton()\\\" \\ntranslate=\\\"USERS.DELETE\\\" translate-attr-aria-label=\\\"USERS.DELETE\\\"></md-button><span flex></span><md-button \\nclass=\\\"stroked\\\" hotkey=\\\"{esc: cancel}\\\" ng-click=\\\"vm.closeDialog()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button>\\n<md-button aria-label=\\\"SAVE\\\" class=\\\"md-primary md-raised\\\" has-permission=\\\"account.users.update\\\" \\nnd-track-click=\\\"save user\\\" ng-click=\\\"vm.saveUser()\\\" ng-disabled=\\\"userForm.$invalid || userForm.$pristine\\\" \\nng-if=\\\"!vm.newUser\\\" translate=\\\"USERS.SAVE\\\" translate-attr-aria-label=\\\"USERS.SAVE\\\" type=\\\"submit\\\"></md-button><md-button \\naria-label=\\\"Add Task\\\" class=\\\"md-primary md-raised\\\" has-permission=\\\"account.users.create\\\" nd-track-click=\\\"add user\\\" \\nng-click=\\\"vm.addNewUser()\\\" ng-disabled=\\\"userForm.$invalid || userForm.$pristine\\\" ng-if=\\\"vm.newUser\\\" \\ntranslate=\\\"USERS.ADD_USER\\\" translate-attr-aria-label=\\\"USERS.ADD_USER\\\" type=\\\"submit\\\"></md-button></md-dialog-actions>\\n</form></md-dialog>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoice/dialogs/add-delivery-note/add-delivery-note.html\",\"<md-dialog class=\\\"\\\" id=\\\"add-delivery-note-dialog\\\" layout=\\\"column\\\"><md-dialog-header class=\\\"pr-15\\\"><div class=\\\"pl-15\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><h2 translate=\\\"INVOICE.ADD_DELIVERY_NOTE\\\"></h2><span flex></span><md-nav-bar \\nclass=\\\"no-border\\\" md-selected-nav-item=\\\"vm.currentNavItem\\\"><md-nav-bar class=\\\"no-border\\\" \\nmd-selected-nav-item=\\\"vm.currentNavItem\\\"><md-nav-item md-nav-click=\\\"vm.currentNavItem=\\'sales\\'\\\" \\nng-if=\\\"!vm.receivedInvoice\\\" name=\\\"sales\\\"><span translate=\\\"NAVIGATION.WHOLESALE_SALES\\\"></span></md-nav-item><md-nav-item\\n md-nav-click=\\\"vm.currentNavItem=\\'purchases\\'\\\" ng-if=\\\"vm.receivedInvoice\\\" name=\\\"purchases\\\"><span \\ntranslate=\\\"NAVIGATION.PURCHASES\\\"></span></md-nav-item><md-nav-item md-nav-click=\\\"vm.currentNavItem=\\'transfers\\'\\\" \\nng-if=\\\"!vm.receivedInvoice\\\" name=\\\"transfers\\\"><span translate=\\\"INVOICE.FRANCHISE_TRANSFERS\\\"></span></md-nav-item>\\n<md-nav-item md-nav-click=\\\"vm.currentNavItem=\\'fiscal-address-pos-orders\\'\\\" ng-if=\\\"!vm.receivedInvoice\\\" \\nname=\\\"fiscal-address-pos-orders\\\"><span translate=\\\"INVOICE.FRANCHISE_SALES\\\"></span></md-nav-item></md-nav-bar>\\n</md-nav-bar></div><div class=\\\"pl-5 pb-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nclass=\\\"md-icon-button sidenav-toggle ml-0\\\" ng-click=\\\"vm.toggleSidenav(\\'left\\')\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><div class=\\\"filter-notification\\\" \\nng-if=\\\"vm.getFilterNotifications() != 0\\\"><span class=\\\"notification-number\\\">{{vm.getFilterNotifications()}}</span>\\n<md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><md-input-container \\nclass=\\\"nd-search-input mr-20\\\" md-no-float ng-if=\\\"vm.currentNavItem==\\'transfers\\'\\\"><md-icon md-font-icon=\\\"icon-magnify\\\">\\n</md-icon><input class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-change=\\\"vm.searchChanged()\\\" \\nng-model=\\\"vm.transfersStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"nd-search-input mr-20\\\" md-no-float ng-if=\\\"vm.currentNavItem==\\'sales\\'\\\"><md-icon md-font-icon=\\\"icon-magnify\\\">\\n</md-icon><input class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-change=\\\"vm.searchChanged()\\\" \\nng-model=\\\"vm.salesStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"nd-search-input mr-20\\\" md-no-float ng-if=\\\"vm.currentNavItem==\\'purchases\\'\\\"><md-icon md-font-icon=\\\"icon-magnify\\\">\\n</md-icon><input class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" ng-change=\\\"vm.searchChanged()\\\" \\nng-model=\\\"vm.purchasesStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"nd-search-input mr-20\\\" md-no-float ng-if=\\\"vm.currentNavItem==\\'fiscal-address-pos-orders\\'\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nng-change=\\\"vm.searchChanged()\\\" ng-model=\\\"vm.fiscalAddressPosOrdersStatus.search\\\" ng-model-options=\\\"{debounce:500}\\\" \\nplaceholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><div \\nclass=\\\"pl-15\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-checkbox class=\\\"no-margin no-padding\\\" \\nid=\\\"checkbox-only-my-contact\\\" ng-change=\\\"vm.searchChanged()\\\" ng-model=\\\"vm.onlyMyContact\\\" \\nng-model-options=\\\"{debounce:500}\\\"><span translate=\\\"INVOICE.ONLY_MY_CONTACT\\\"></span></md-checkbox></div></div>\\n</md-dialog-header><md-sidenav class=\\\"md-sidenav-left border-right\\\" flex md-component-id=\\\"left\\\"><md-content \\nclass=\\\"md-padding m-0\\\" layout-margin><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem==\\'sales\\'\\\">>\\n<md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-left\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\">\\n</md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.salesStatus.filters.sourceWarehouses\\\" ng-change=\\\"vm.searchChanged()\\\" \\nflex placeholder=\\\"{{\\'TRANSFERS.ALL_SOURCE_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem==\\'transfers\\'\\\"><md-icon class=\\\"s12\\\" md-font-icon=\\\"icon-arrow-left\\\">\\n</md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select multiple=\\\"true\\\" \\nng-model=\\\"vm.transfersStatus.filters.sourceWarehouses\\\" ng-change=\\\"vm.searchChanged()\\\" flex \\nplaceholder=\\\"{{\\'TRANSFERS.ALL_SOURCE_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem==\\'transfers\\'\\\"><md-icon class=\\\"s12\\\" \\nmd-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select \\nmultiple=\\\"true\\\" ng-model=\\\"vm.transfersStatus.filters.targetWarehouses\\\" ng-change=\\\"vm.searchChanged()\\\" flex \\nplaceholder=\\\"{{\\'TRANSFERS.ALL_TARGET_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem==\\'purchases\\'\\\"><md-icon class=\\\"s12\\\" \\nmd-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select \\nmultiple=\\\"true\\\" ng-model=\\\"vm.purchasesStatus.filters.targetWarehouses\\\" ng-change=\\\"vm.searchChanged()\\\" flex \\nplaceholder=\\\"{{\\'TRANSFERS.ALL_TARGET_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"vm.currentNavItem==\\'fiscal-address-pos-orders\\'\\\"><md-icon class=\\\"s12\\\" \\nmd-font-icon=\\\"icon-arrow-right\\\"></md-icon><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-store\\\"></md-icon><md-select \\nmultiple=\\\"true\\\" ng-model=\\\"vm.fiscalAddressPosOrdersStatus.filters.sourceWarehouses\\\" ng-change=\\\"vm.searchChanged()\\\" \\nflex placeholder=\\\"{{\\'TRANSFERS.ALL_TARGET_WAREHOUSES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{warehouse.name}}</div></md-option></md-select></div><div layout=\\\"row\\\" \\nclass=\\\"mb-40 mt-20\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-calendar\\\" class=\\\"mr-8 s16\\\"></md-icon>\\n<md-date-range flex ng-class=\\\"{\\'has-value\\': vm.createdDateRange.dateStart}\\\" \\nplaceholder=\\\"{{vm.createdDateRange.format(vm.createdDateRange.dateStart, vm.createdDateRange.dateEnd)}}\\\" \\ndate-start=\\\"vm.createdDateRange.dateStart\\\" date-end=\\\"vm.createdDateRange.dateEnd\\\" \\nlocalization-map=\\\"vm.mdLocalizationMap\\\" ng-model=\\\"vm.createdDateRange\\\" show-template=\\\"true\\\" show-clear=\\\"true\\\" \\nmd-on-select=\\\"vm.setDateRangeFilters()\\\" md-on-clear=\\\"vm.setDateRangeFilters()\\\" class=\\\"date-range-filter\\\">\\n</md-date-range></div></md-content></md-sidenav><md-dialog-content class=\\\"no-padding\\\" flex layout=\\\"column\\\" layout-fill>\\n<nd-transfer-deliveries-list class=\\\"border-top\\\" flex layout=\\\"column\\\" layout-fill \\nng-if=\\\"vm.currentNavItem==\\'transfers\\'\\\" selected=\\\"vm.selectedTransfers\\\" status=\\\"vm.transfersStatus\\\" \\nstorage-label=\\\"vm.transfersStorageLabel\\\"></nd-transfer-deliveries-list><nd-sale-deliveries-list class=\\\"border-top\\\" \\nflex layout=\\\"column\\\" layout-fill ng-if=\\\"vm.currentNavItem==\\'sales\\'\\\" selected=\\\"vm.selectedSales\\\" \\nstatus=\\\"vm.salesStatus\\\" storage-label=\\\"vm.salesStorageLabel\\\"></nd-sale-deliveries-list><nd-purchase-deliveries-list \\nclass=\\\"border-top\\\" flex layout=\\\"column\\\" layout-fill ng-if=\\\"vm.currentNavItem==\\'purchases\\'\\\" \\nselected=\\\"vm.selectedPurchases\\\" status=\\\"vm.purchasesStatus\\\" storage-label=\\\"vm.purchasesStorageLabel\\\">\\n</nd-purchase-deliveries-list><nd-pos-orders-list class=\\\"border-top\\\" flex layout=\\\"column\\\" layout-fill \\nng-if=\\\"vm.currentNavItem==\\'fiscal-address-pos-orders\\'\\\" selected=\\\"vm.selectedFiscalAddressPosOrders\\\" \\nstatus=\\\"vm.fiscalAddressPosOrdersStatus\\\" storage-label=\\\"vm.fiscalAddressPosOrdersStorageLabel\\\"></nd-pos-orders-list>\\n</md-dialog-content><md-dialog-actions class=\\\"border-top\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"vm.addDeliveryNote()\\\" translate=\\\"INVOICE.ADD_TO_INVOICE\\\"></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoice/dialogs/conflict-deleted-products/conflict-deleted-products-dialog.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"w-650\\\"><md-dialog-content><h2 \\ntranslate=\\\"INVOICE.CONFLICTED_DELETED_PRODUCT_TITLE\\\"></h2><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div \\nng-repeat=\\\"product_variant in vm.deletedProducts\\\">· <span class=\\\"text-bold\\\">{{product_variant.label}} </span>· <span \\nclass=\\\"text-bold\\\">{{product_variant.description}}</span></div></div><br><div class=\\\"did-you-know mb-10\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg mr-5\\\">\\n</md-icon><div layout=\\\"column\\\" flex><div class=\\\"did-you-know-message\\\" \\ntranslate=\\\"INVOICE.CONFLICTED_DELETED_PRODUCT_BODY\\\"></div></div></div></div><span \\ntranslate=\\\"INVOICE.CONFLICTED_DELETED_PRODUCT_QUESTION\\\"></span></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.confirm()\\\" translate=\\\"INVOICE.DELETE_PRODUCTS_AND_CONTINUE\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoice/dialogs/missing-corrective-serial-number-type-dialog/missing-corrective-serial-number-type-dialog.html\",\"<md-dialog id=\\\"missing-corrective-serial-number-type-dialog\\\" style=\\\"max-width: 500px\\\"><md-dialog-content><h2 \\nclass=\\\"mb-32\\\">{{\\'INVOICE.MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE_TITLE\\' | translate}}</h2><div><span \\ntranslate=\\\"INVOICE.MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE_BODY_1\\\"></span><nd-a \\nstate=\\\"\\'app.inventory.configuration.default_serial_numbers\\'\\\" scroll-to=\\\"\\'corrective-invoice-serial-number\\'\\\">\\n{{\\'INVOICE.MISSING_CORRECTIVE_INVOICE_SERIAL_NUMBER_TYPE_BODY_2\\' | translate}}</nd-a></div></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoices/dialogs/generate-invoices/generate-invoices.html\",\"<md-dialog id=\\\"generate-invoices-dialog\\\" id=\\\"generateInvoicesDialog\\\" class=\\\"no-padding\\\" layout-padding><md-toolbar \\nclass=\\\"md-primary no-padding\\\" layout=\\\"column\\\" flex=\\\"nogrow\\\"><div class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"title\\\" translate=\\\"INVOICES.GENERATE_INVOICES\\\">Generate Invoices</span></div>\\n</md-toolbar><md-dialog-content class=\\\"md-padding\\\" layout=\\\"column\\\" flex><div class=\\\"p-20\\\"><label><span \\ntranslate=\\\"INVOICES.SELECT_DATES\\\"></span></label><md-date-range ng-model=\\\"vm.dateRange\\\" auto-confirm=\\\"true\\\" \\nshow-template=\\\"true\\\"></md-date-range></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nclass=\\\"border-top text-center\\\" flex><md-button class=\\\"md-raised md-primary\\\" ng-click=\\\"vm.generate()\\\" \\ntranslate=\\\"INVOICES.GENERATE\\\" flex></md-button><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" flex></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/accounting/views/invoices/sidenavs/main/main-sidenav.html\",\"<md-content class=\\\"content no-padding\\\" flex ms-scroll><div class=\\\"navigation-simple pt-15\\\" layout=\\\"column\\\"><div \\nclass=\\\"ph-20 pv-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-calendar\\\" class=\\\"mr-8 s16\\\">\\n</md-icon><md-date-range flex placeholder=\\\"{{\\'INVOICES.FILTER_BY_BILLING_DATE\\' | translate}}\\\" \\nlocalization-map=\\\"vm.mdLocalizationMap\\\" ng-model=\\\"vm.dateRange\\\" show-template=\\\"true\\\" \\nmd-on-select=\\\"vm.setDateRangeFilters()\\\" class=\\\"date-range-filter\\\"></md-date-range></div><div class=\\\"ph-20\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s12\\\" md-font-icon=\\\"icon-bookmark-outline\\\"></md-icon>\\n<md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.reloadInvoices()\\\" ng-model=\\\"vm.status.filters.contactTypes\\\" \\nplaceholder=\\\"{{\\'CONTACTS.FILTER_BY_TYPE\\' | translate}}\\\"><md-option ng-repeat=\\\"(key, value) in vm.contactTypes\\\" \\nng-value=\\\"key\\\">{{\\'CONTACTS.\\' + value | translate}}</md-option></md-select></div><div class=\\\"navigation-simple\\\" \\nlayout=\\\"column\\\"><div class=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-bookmark-outline\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.reloadInvoices()\\\" \\nng-model=\\\"vm.status.filters.serialNumberTypes\\\" placeholder=\\\"{{\\'INVOICES.FILTER_BY_SERIAL_NUMBER_TYPE\\' | translate}}\\\">\\n<md-option ng-repeat=\\\"snt in vm.serialNumberTypes\\\" ng-value=\\\"snt\\\">{{snt.name}}</md-option></md-select></div></div>\\n</div></md-content>\");\n$templateCache.put(\"app/main/apps/accounting/views/payments/sidenavs/main/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"></div>\\n</md-content>\");\n$templateCache.put(\"app/main/apps/analytics/views/report/directives/nd-report-filter/nd-report-filter.html\",\"<div ng-if=\\\"description\\\" class=\\\"w-custom did-you-know md-margin\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"blue-fg\\\"></md-icon></div><span translate=\\\"{{description}}\\\"></span></div></div><md-card \\nclass=\\\"w-custom nd-report-filter\\\"><md-card-content><form name=\\\"reportForm\\\"><div ng-show=\\\"showDateRange\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\" flex><md-icon md-font-icon=\\\"icon-calendar\\\" \\nclass=\\\"m-0 mr-10\\\"></md-icon><h2 class=\\\"secondary-text m-0\\\" translate=\\\"REPORTS.DATE_RANGE\\\">Date range</h2></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\" ng-class=\\\"{\\'pb-0\\': customFields}\\\" flex><md-radio-group \\nng-model=\\\"datesFilter\\\" ng-change=\\\"updateDateRange()\\\" flex><div ng-repeat=\\\"(key, date) in dateRangeDict\\\" layout=\\\"row\\\">\\n<md-radio-button value=\\\"{{key}}\\\" flex=\\\"40\\\">{{\\\"REPORTS.\\\" + key | translate}}</md-radio-button><span \\nng-if=\\\"datesFilter != key && key != \\'ALL\\' &&  key != \\'TODAY\\'\\\" class=\\\"secondary-text\\\" flex>\\n{{ date.dateStartString | date:\\'EEE, dd of MMM\\'}} - {{ date.dateEndString | date:\\'EEE, dd of MMM\\'}}</span> <span \\nng-if=\\\"datesFilter == key && key != \\'ALL\\' &&  key != \\'TODAY\\'\\\" flex>\\n{{ date.dateStartString | date:\\'EEE, dd of MMM\\'}} - {{ date.dateEndString | date:\\'EEE, dd of MMM\\'}}</span> <span \\nng-if=\\\"datesFilter != key &&  key == \\'TODAY\\'\\\" class=\\\"secondary-text\\\" flex>\\n{{ date.dateStartString | date:\\'EEE, dd of MMM\\'}}</span> <span ng-if=\\\"datesFilter == key &&  key == \\'TODAY\\'\\\" flex>\\n{{ date.dateStartString | date:\\'EEE, dd of MMM\\'}}</span></div><div layout=\\\"row\\\"><md-radio-button value=\\\"PERSONALIZED\\\" \\nng-click=\\\"filterDates()\\\" flex=\\\"40\\\">{{\\\"REPORTS.PERSONALIZED\\\" | translate}}</md-radio-button><span \\nng-if=\\\"datesFilter == \\'PERSONALIZED\\'\\\" flex>\\n{{dateRange.dateStartString | date:\\'EEE, dd of MMM yyyy\\'}} - {{dateRange.dateEndString | date:\\'EEE, dd of MMM yyyy\\'}}\\n</span></div></md-radio-group></div></div><div ng-if=\\\"customFields\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-padding\\\" flex><md-icon md-font-icon=\\\"icon-filter-outline\\\" class=\\\"m-0 mr-10\\\"></md-icon><h2 \\nclass=\\\"secondary-text m-0\\\" translate=\\\"REPORTS.OTHER_FILTERS\\\"></h2></div><div class=\\\"md-padding\\\"><div \\nng-repeat=\\\"field in customFields\\\"><md-checkbox ng-if=\\\"field.type == FIELD_TYPE_CHECKBOX\\\" ng-model=\\\"field.checked\\\" \\nclass=\\\"mt-16\\\">{{field.value | translate}}</md-checkbox><md-select ng-model=\\\"field.selectChecked\\\" \\nng-if=\\\"field.type == FIELD_TYPE_SELECT\\\" class=\\\"mt-16\\\" flex><md-option ng-repeat=\\\"(key, value) in field.options\\\" \\nng-value=\\\"value\\\">{{key | translate}}</md-option></md-select><md-input-container \\nng-if=\\\"field.type == FIELD_TYPE_AUTOCOMPLETE && field.multiple\\\" class=\\\"custom-field-select-input-container full-width\\\">\\n<md-chips ng-model=\\\"field.selected\\\" placeholder=\\\"{{field.title | translate}}\\\" md-add-on-blur=\\\"true\\\" \\nmd-require-match=\\\"true\\\"><md-chip-template><span ng-if=\\\"!$chip.name\\\">{{$chip.code}}</span> <span ng-if=\\\"$chip.name\\\">\\n{{$chip.name}}</span></md-chip-template><md-autocomplete placeholder=\\\"{{\\'REPORTS.AUTOCOMPLETE_SEARCH\\' | translate}}\\\" \\nmd-selected-item=\\\"field.selectedItem\\\" md-search-text=\\\"field.searchText\\\" md-items=\\\"item in field.querySearch(field)\\\" \\nmd-item-text=\\\"item.name\\\" md-min-length=\\\"3\\\" md-delay=\\\"500\\\" md-require-match><span ng-if=\\\"item.name\\\" \\nmd-highlight-text=\\\"field.searchText\\\">{{item.name}}</span> <span ng-if=\\\"!item.name\\\" \\nmd-highlight-text=\\\"field.searchText\\\">{{item.code}}</span></md-autocomplete></md-chips></md-input-container>\\n<md-autocomplete class=\\\"custom-field-select-input-container\\\" \\nng-if=\\\"field.type == FIELD_TYPE_AUTOCOMPLETE && !field.multiple && field.id !== \\'subcategories\\'\\\" \\nmd-floating-label=\\\"{{field.title | translate}}\\\" md-selected-item=\\\"field.selectedItem\\\" \\nmd-search-text=\\\"field.searchText\\\" md-items=\\\"item in field.querySearch(field)\\\" md-item-text=\\\"getItemText(item)\\\" \\nmd-selected-item-change=\\\"selectedItemChange(item, field)\\\" md-min-length=\\\"3\\\" md-delay=\\\"500\\\"><span \\nmd-highlight-text=\\\"field.searchText\\\">{{getItemText(item, field.id)}}</span></md-autocomplete><md-autocomplete \\nclass=\\\"custom-field-select-input-container\\\" \\nng-if=\\\"field.type == FIELD_TYPE_AUTOCOMPLETE && !field.multiple && field.id === \\'subcategories\\'\\\" \\nmd-floating-label=\\\"{{field.title | translate}}\\\" md-selected-item=\\\"field.selectedItem\\\" \\nmd-search-text=\\\"field.searchText\\\" md-items=\\\"item in field.querySearch(field, {\\'category_id\\':selectedCategory})\\\" \\nmd-item-text=\\\"getItemText(item)\\\" md-min-length=\\\"3\\\" md-delay=\\\"500\\\"><span md-highlight-text=\\\"field.searchText\\\">\\n{{getItemText(item, field.id)}}</span></md-autocomplete><md-input-container ng-if=\\\"field.type == \\'text\\'\\\" \\nclass=\\\"custom-field-select-input-container full-width\\\"><label>{{field.title | translate}}</label><input \\nng-model=\\\"field.selected\\\" placeholder=\\\"{{\\'REPORTS.TEXT_FILTER_INFO\\' | translate}}\\\"></md-input-container></div></div>\\n</div><div ng-show=\\\"columns.length\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\" flex><md-icon \\nmd-font-icon=\\\"icon-view-column\\\" class=\\\"m-0 mr-10\\\"></md-icon><h2 class=\\\"secondary-text m-0\\\" translate=\\\"REPORTS.COLUMNS\\\">\\nColumns</h2></div><div layout=\\\"row\\\" layout-align=\\\"start start\\\" class=\\\"md-padding\\\" flex><md-select \\nng-model=\\\"columnFilter\\\" ng-change=\\\"filterColumns()\\\" class=\\\"m-0\\\" flex><md-option \\nng-repeat=\\\"(key, value) in columnFilterDict\\\" ng-value=\\\"value\\\">{{\\\"REPORTS.\\\" + key | translate}} ({{countColumns(key)}})\\n</md-option></md-select><span flex></span></div><div class=\\\"md-padding\\\" layout=\\\"row\\\" layout-wrap><span \\nclass=\\\"secondary-text mr-5\\\">{{getSelectedColumns()}}</span></div><div class=\\\"md-padding\\\" layout=\\\"row\\\" layout-wrap \\nng-if=\\\"columnFilter == columnFilterDict[\\'PERSONALIZED\\']\\\"><div ng-repeat=\\\"column in columns\\\" flex=\\\"33\\\"><md-checkbox \\nng-model=\\\"column.selected\\\"><span translate=\\\"REPORTS.{{column.name}}\\\"></span></md-checkbox></div></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"end start\\\"><md-button class=\\\"md-primary md-raised pr-15\\\" ng-if=\\\"showPdfDownloadButton\\\" \\nng-click=\\\"checkFilters(\\'pdf\\')\\\" aria-label=\\\"DownloadPDF\\\" ng-disabled=\\\"downloading || disabled || reportForm.$invalid\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon ng-if=\\\"!vm.downloading\\\" class=\\\"m-0 p-0 mr-5\\\" \\nmd-font-icon=\\\"icon-download\\\"></md-icon><md-progress-circular ng-if=\\\"vm.downloading\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular>{{\\\"REPORTS.DOWNLOAD_PDF\\\" | translate}}</md-button><md-button class=\\\"md-primary md-raised pr-15\\\" \\nng-click=\\\"checkFilters(\\'xlsx\\')\\\" aria-label=\\\"Download XLSX\\\" \\nng-disabled=\\\"downloading || disabled || reportForm.$invalid\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nng-if=\\\"!vm.downloading\\\" class=\\\"m-0 p-0 mr-5\\\" md-font-icon=\\\"icon-download\\\"></md-icon><md-progress-circular \\nng-if=\\\"vm.downloading\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular>\\n{{(showPdfDownloadButton ? \\\"REPORTS.DOWNLOAD_XLSX\\\" : \\\"REPORTS.DOWNLOAD\\\") | translate}}</md-button></div></form>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-basic-retail-kpis-todate-table/nd-basic-retail-kpis-todate-table.html\",\"<md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"RETAIL_DASHBOARD.RETAIL_KPIS\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><table class=\\\"simple\\\" ms-responsive-table flex><thead><tr><td>\\n</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\"><b>{{\\'BASIC_RETAIL_KPI.TODAY\\' | translate}}</b></td><td class=\\\"text-right\\\" \\nng-if=\\\"vm.kpiWtd\\\"><b>{{\\'BASIC_RETAIL_KPI.WEEK_TO_DATE\\' | translate}}</b></td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n<b>{{\\'BASIC_RETAIL_KPI.MONTH_TO_DATE\\' | translate}}</b></td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\"><b>\\n{{\\'BASIC_RETAIL_KPI.YEAR_TO_DATE\\' | translate}}</b></td></tr></thead><tbody><tr><td class=\\\"\\\">\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES\\' | translate}}</td><td class=\\\"text-right text-bold green-fg\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.gross_sales_actual | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right text-bold green-fg\\\" \\nng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.gross_sales_actual | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right text-bold green-fg\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.gross_sales_actual | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right text-bold green-fg\\\" \\nng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.gross_sales_actual | price}} {{vm.currencyCharacter}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES_PLAN\\' | translate}}</td><td class=\\\"text-right purple-fg\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.gross_sales_plan | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right purple-fg\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.gross_sales_plan | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right purple-fg\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.gross_sales_plan | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right purple-fg\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.gross_sales_plan | price}} {{vm.currencyCharacter}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES_PERCENTAGE_TO_PLAN\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.gross_sales_percentage_to_plan | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.gross_sales_percentage_to_plan | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.gross_sales_percentage_to_plan | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.gross_sales_percentage_to_plan | price}} %</td></tr><tr><td>{{\\'BASIC_RETAIL_KPI.TRANSACTIONS\\' | translate}}\\n</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.transactions}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.transactions}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">{{vm.kpiMtd.transactions}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.transactions}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.VISITORS\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.traffic}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.traffic}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.traffic}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.traffic}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.CONVERSION\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.conversion | price}} %\\n</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.conversion | price}} %</td><td class=\\\"text-right\\\" \\nng-if=\\\"vm.kpiMtd\\\">{{vm.kpiMtd.conversion | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.conversion | price}} %</td></tr><tr has-permission=\\\"inventory.products.product.details.cost\\\"><td class=\\\"\\\">\\n{{\\'BASIC_RETAIL_KPI.NET_SALES_ACTUAL\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.net_sales_actual | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.net_sales_actual | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.net_sales_actual | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.net_sales_actual | price}} {{vm.currencyCharacter}}</td></tr><tr \\nhas-permission=\\\"inventory.products.product.details.cost\\\"><td>{{\\'BASIC_RETAIL_KPI.NET_SALES_LAST_YEAR\\' | translate}}\\n</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.net_sales_last_year | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.net_sales_last_year | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">{{vm.kpiMtd.net_sales_last_year | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.net_sales_last_year | price}} {{vm.currencyCharacter}}</td></tr><tr \\nhas-permission=\\\"inventory.products.product.details.cost\\\"><td>{{\\'BASIC_RETAIL_KPI.UNITS_SOLD_COST\\' | translate}}</td><td\\n class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.units_sold_cost | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.units_sold_cost | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">{{vm.kpiMtd.units_sold_cost | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.units_sold_cost | price}} {{vm.currencyCharacter}}</td></tr><tr \\nhas-permission=\\\"inventory.products.product.details.cost\\\"><td>{{\\'BASIC_RETAIL_KPI.GROSS_PROFIT_MARGIN\\' | translate}}\\n</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.gross_profit_margin | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.gross_profit_margin | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">{{vm.kpiMtd.gross_profit_margin | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.gross_profit_margin | price}} {{vm.currencyCharacter}}</td></tr><tr>\\n<td>{{\\'BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.units_per_transaction | price}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.units_per_transaction | price}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.units_per_transaction | price}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.units_per_transaction | price}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALE_PER_TRANSACTION\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.average_unit_retail | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.average_unit_retail | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.average_unit_retail | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.average_unit_retail | price}} {{vm.currencyCharacter}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.UNITS_SOLD\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.units_sold}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.units_sold}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.units_sold}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.units_sold}}</td></tr><tr \\nhas-permission=\\\"inventory.products.product.details.cost\\\"><td>{{\\'BASIC_RETAIL_KPI.AVERAGE_UNIT_COST\\' | translate}}</td>\\n<td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.average_unit_cost | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.average_unit_cost | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">{{vm.kpiMtd.average_unit_cost | price}} {{vm.currencyCharacter}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.average_unit_cost | price}} {{vm.currencyCharacter}}</td></tr><tr \\nhas-permission=\\\"inventory.products.product.details.cost\\\"><td>{{\\'BASIC_RETAIL_KPI.UNITS_WITH_DDP_PRICE\\' | translate}}\\n</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">{{vm.kpi.units_sold_with_cost}} <small class=\\\"secondary-text\\\">\\n/{{vm.kpi.units_sold}}</small></td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.units_sold_with_cost}} <small \\nclass=\\\"secondary-text\\\">/{{vm.kpiWtd.units_sold}}</small></td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.units_sold_with_cost}} <small class=\\\"secondary-text\\\">/{{vm.kpiMtd.units_sold}}</small></td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.units_sold_with_cost}} <small class=\\\"secondary-text\\\">\\n/{{vm.kpiYtd.units_sold}}</small></td></tr><tr><td>{{\\'BASIC_RETAIL_KPI.RETURNS\\' | translate}}</td><td \\nclass=\\\"text-right\\\" ng-class=\\\"{\\'orange-fg\\': vm.kpi.returns}\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.returns | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" \\nng-class=\\\"{\\'orange-fg\\': vm.kpiWtd.returns}\\\" ng-if=\\\"vm.kpiWtd\\\">{{vm.kpiWtd.returns | price}} {{vm.currencyCharacter}}\\n</td><td class=\\\"text-right\\\" ng-class=\\\"{\\'orange-fg\\': vm.kpiMtd.returns}\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.returns | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" \\nng-class=\\\"{\\'orange-fg\\': vm.kpiYtd.returns}\\\" ng-if=\\\"vm.kpiYtd\\\">{{vm.kpiYtd.returns | price}} {{vm.currencyCharacter}}\\n</td></tr><tr><td>{{\\'BASIC_RETAIL_KPI.UNITS_RETURNED\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\" \\nng-class=\\\"{\\'orange-fg\\': vm.kpi.units_returned}\\\">{{vm.kpi.units_returned}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\" \\nng-class=\\\"{\\'orange-fg\\': vm.kpiWtd.units_returned}\\\">{{vm.kpiWtd.units_returned}}</td><td class=\\\"text-right\\\" \\nng-if=\\\"vm.kpiMtd\\\" ng-class=\\\"{\\'orange-fg\\': vm.kpiMtd.units_returned}\\\">{{vm.kpiMtd.units_returned}}</td><td \\nclass=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\" ng-class=\\\"{\\'orange-fg\\': vm.kpiYtd.units_returned}\\\">{{vm.kpiYtd.units_returned}}\\n</td></tr><tr><td>{{\\'BASIC_RETAIL_KPI.GROSS_SALES_LAST_YEAR\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.gross_sales_last_year | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.gross_sales_last_year | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.gross_sales_last_year | price}} {{vm.currencyCharacter}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.gross_sales_last_year | price}} {{vm.currencyCharacter}}</td></tr><tr><td>\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES_PERCENTAGE_LAST_YEAR\\' | translate}}</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpi\\\">\\n{{vm.kpi.gross_sales_percentage_last_year | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiWtd\\\">\\n{{vm.kpiWtd.gross_sales_percentage_last_year | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiMtd\\\">\\n{{vm.kpiMtd.gross_sales_percentage_last_year | price}} %</td><td class=\\\"text-right\\\" ng-if=\\\"vm.kpiYtd\\\">\\n{{vm.kpiYtd.gross_sales_percentage_last_year | price}} %</td></tr></tbody></table></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-company-basic-retail-kpis/nd-company-basic-retail-kpis.html\",\"<ms-widget layout=\\\"row\\\" flex><ms-widget-front class=\\\"white-bg\\\" ng-if=\\\"!vm.verticalLayout\\\"><div layout=\\\"row\\\" \\nlayout-wrap><div layout=\\\"row\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout-wrap><div class=\\\"p-10 h-110 kpi-chart-cell\\\" \\nlayout=\\\"column\\\" flex=\\\"100\\\" flex-gt-xs=\\\"33\\\" layout-align=\\\"start start\\\" ng-repeat=\\\"chartKey in vm.chartKeys\\\" \\nng-class=\\\"{active: vm.selectedChartId === chartKey}\\\" ng-click=\\\"vm.selectChart(chartKey)\\\"><div \\nclass=\\\"h5 secondary-text\\\" ng-if=\\\"vm.basicRetailKpisDict[chartKey]\\\">{{vm.basicRetailKpisDict[chartKey].key}}</div><div \\nclass=\\\"h2\\\" ng-if=\\\"vm.basicRetailKpisDict[chartKey] && vm.basicRetailKpisDict[chartKey].isDecimal\\\" flex>\\n{{vm.basicRetailKpisDict[chartKey].values[vm.todayIndex] | price}} {{::vm.basicRetailKpisDict[chartKey].titleUnit}}\\n</div><div class=\\\"h2\\\" ng-if=\\\"vm.basicRetailKpisDict[chartKey] && !vm.basicRetailKpisDict[chartKey].isDecimal\\\" flex>\\n{{vm.basicRetailKpisDict[chartKey].values[vm.todayIndex]}}</div><div ng-class=\\\"chartKey\\\" class=\\\"h-40\\\" flex=\\\"100\\\" \\nng-if=\\\"vm.basicRetailKpisDict[chartKey]\\\" style=\\\"width: 100%\\\"></div><md-progress-circular md-diameter=\\\"24\\\" \\nng-if=\\\"!vm.basicRetailKpisDict[chartKey]\\\"></md-progress-circular></div></div><div class=\\\"p-16\\\" layout=\\\"row\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" hide-xs hide-sm><div id=\\\"selected-chart\\\" flex=\\\"100\\\" style=\\\"height: 100%\\\"></div></div></div>\\n</ms-widget-front><ms-widget-front class=\\\"white-bg\\\" ng-if=\\\"vm.verticalLayout\\\"><div layout=\\\"column\\\" layout-wrap><div \\nlayout=\\\"row\\\" class=\\\"fullwidth\\\"><div id=\\\"selected-chart\\\" hide-xs hide-sm class=\\\"h-300\\\" flex=\\\"100\\\"></div></div><div \\nlayout=\\\"row\\\" layout-wrap><div class=\\\"p-10 h-135 kpi-chart-cell\\\" layout=\\\"column\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\" \\nlayout-align=\\\"space-between start\\\" ng-repeat=\\\"chartKey in vm.chartKeys\\\" \\nng-class=\\\"{active: vm.selectedChartId === chartKey}\\\" ng-click=\\\"vm.selectChart(chartKey)\\\"><div \\nclass=\\\"h5 secondary-text\\\" ng-if=\\\"vm.basicRetailKpisDict[chartKey]\\\">{{vm.basicRetailKpisDict[chartKey].key}}</div><div \\nclass=\\\"h2\\\" ng-if=\\\"vm.basicRetailKpisDict[chartKey] && vm.basicRetailKpisDict[chartKey].isDecimal\\\" flex>\\n{{vm.basicRetailKpiAggregated[chartKey] | price}} {{::vm.basicRetailKpisDict[chartKey].titleUnit}}</div><div \\nclass=\\\"h2\\\" ng-if=\\\"vm.basicRetailKpisDict[chartKey] && !vm.basicRetailKpisDict[chartKey].isDecimal\\\" flex>\\n{{vm.basicRetailKpiAggregated[chartKey]}}</div><div ng-class=\\\"chartKey\\\" class=\\\"h-40\\\" flex=\\\"100\\\" \\nng-if=\\\"vm.basicRetailKpisDict[chartKey]\\\" style=\\\"width: 100%\\\"></div><md-progress-circular md-diameter=\\\"24\\\" \\nng-if=\\\"!vm.basicRetailKpisDict[chartKey]\\\"></md-progress-circular></div></div></div></ms-widget-front></ms-widget>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-basic-retail-kpis-widget/nd-basic-retail-kpis-widget.html\",\"<ms-widget layout=\\\"row\\\" flex><ms-widget-front class=\\\"white-bg\\\"><div class=\\\"ph-16 pv-8\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><div class=\\\"pv-8 h3\\\">{{\\'BASIC_RETAIL_KPI.BASIC_RETAIL_KPI\\' | translate}}</div><span\\n flex></span><md-button ng-click=\\\"vm.filterDates()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-calendar\\\" class=\\\"mr-5\\\"></md-icon>{{vm.dateRange.dateStart | date}} - {{vm.dateRange.dateEnd | date}}\\n</div></md-button><md-menu class=\\\"mh-8\\\"><md-button ng-click=\\\"$mdMenu.open($event)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-store\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'BASIC_RETAIL_KPI.WAREHOUSES\\' | translate}}</div></md-button><md-menu-content><md-menu-item \\nng-repeat=\\\"warehouse in vm.warehouses\\\"><md-button class=\\\"ph-16\\\" md-prevent-menu-close=\\\"md-prevent-menu-close\\\" \\nng-click=\\\"vm.toggleWarehouse(warehouse.id)\\\"><md-icon md-font-icon=\\\"icon-checkbox-blank-outline\\\" \\nng-if=\\\"!vm.selectedWarehouses[warehouse.id]\\\"></md-icon><md-icon md-font-icon=\\\"icon-checkbox-marked\\\" \\nng-if=\\\"vm.selectedWarehouses[warehouse.id]\\\"></md-icon>{{warehouse.name}}</md-button></md-menu-item></md-menu-content>\\n</md-menu><md-menu md-position-mode=\\\"target-right target\\\"><md-button ng-click=\\\"$mdMenu.open($event)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-table-column-plus-after\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'BASIC_RETAIL_KPI.COLUMNS\\' | translate}}</div></md-button><md-menu-content \\nmd-prevent-menu-close=\\\"md-prevent-menu-close\\\"><md-menu-item ng-repeat=\\\"column in vm.getColumns()\\\"><md-button \\nclass=\\\"ph-16\\\" md-prevent-menu-close=\\\"md-prevent-menu-close\\\" ng-click=\\\"vm.toggleColumn(column)\\\"><md-icon \\nmd-font-icon=\\\"icon-checkbox-blank-outline\\\" ng-if=\\\"!column.visible\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-checkbox-marked\\\" ng-if=\\\"column.visible\\\"></md-icon>{{column.name}}</md-button></md-menu-item>\\n</md-menu-content></md-menu></div><table class=\\\"simple\\\"><thead><tr><th></th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'netSalesActualChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'netSalesActualChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.GROSS_SALES\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'unitsSoldChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'unitsSoldChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.UNITS_SOLD\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'transactionsChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'transactionsChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.TRANSACTIONS\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'unitsPerTransactionChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'unitsPerTransactionChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.UNITS_PER_TRANSACTION\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'averageUnitRetailChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'averageUnitRetailChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.AVERAGE_UNIT_RETAIL\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'returnsChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'returnsChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.RETURNS\\' | translate}}</th><th class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.sortByHeader(\\'unitsReturnedChart\\')\\\" ng-if=\\\"vm.selectedColumns[\\'unitsReturnedChart\\'].visible\\\">\\n{{\\'BASIC_RETAIL_KPI.UNITS_RETURNED\\' | translate}}</th></tr></thead><tbody><tr><td class=\\\"text-uppercase text-bold\\\">\\n{{vm.company.name}}</td><td ng-if=\\\"vm.selectedColumns[\\'netSalesActualChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].netSalesActualChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].netSalesActualChart[0].values.length - 1].y | price}} \\n<span ng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.netSalesActualChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].netSalesActualChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'unitsSoldChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].unitsSoldChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].unitsSoldChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsSoldChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].unitsSoldChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'transactionsChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].transactionsChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].transactionsChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.transactionsChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].transactionsChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'unitsPerTransactionChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].unitsPerTransactionChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].unitsPerTransactionChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsPerTransactionChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].unitsPerTransactionChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'averageUnitRetailChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].averageUnitRetailChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].averageUnitRetailChart[0].values.length - 1].y}} \\n<span ng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.averageUnitRetailChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].averageUnitRetailChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'returnsChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].returnsChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].returnsChart[0].values.length - 1].y}} \\n<span ng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 \\nconfig=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.returnsChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].returnsChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'unitsReturnedChart\\'].visible\\\"><div class=\\\"h1\\\">\\n{{vm.basicRetailKpisByCompanyDict[vm.company.id].unitsReturnedChart[0].values[vm.basicRetailKpisByCompanyDict[vm.company.id].unitsReturnedChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsReturnedChart\\\" \\nng-if=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id]\\\" \\ndata=\\\"vm.basicRetailKpisByCompanyDict[vm.company.id].unitsReturnedChart\\\"></nvd3></td></tr><tr \\nng-repeat=\\\"warehouse in vm.warehouses\\\" ng-if=\\\"vm.selectedWarehouses[warehouse.id]\\\"><td class=\\\"text-uppercase\\\">\\n{{warehouse.name}}</td><td ng-if=\\\"vm.selectedColumns[\\'netSalesActualChart\\'].visible\\\"><div class=\\\"h2\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].netSalesActualChart[0].values[vm.basicRetailKpisDict[warehouse.id].netSalesActualChart[0].values.length - 1].y | price}} \\n<span ng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 config=\\\"vm.cartConfig\\\" \\noptions=\\\"vm.chartOptionsDict.netSalesActualChart\\\" ng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].netSalesActualChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'unitsSoldChart\\'].visible\\\"><div class=\\\"h3\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].unitsSoldChart[0].values[vm.basicRetailKpisDict[warehouse.id].unitsSoldChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsSoldChart\\\" \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" data=\\\"vm.basicRetailKpisDict[warehouse.id].unitsSoldChart\\\"></nvd3></td><td\\n ng-if=\\\"vm.selectedColumns[\\'transactionsChart\\'].visible\\\"><div class=\\\"h3\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].transactionsChart[0].values[vm.basicRetailKpisDict[warehouse.id].transactionsChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.transactionsChart\\\" \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" data=\\\"vm.basicRetailKpisDict[warehouse.id].transactionsChart\\\"></nvd3></td>\\n<td ng-if=\\\"vm.selectedColumns[\\'unitsPerTransactionChart\\'].visible\\\"><div class=\\\"h3\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].unitsPerTransactionChart[0].values[vm.basicRetailKpisDict[warehouse.id].unitsPerTransactionChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsPerTransactionChart\\\" \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" data=\\\"vm.basicRetailKpisDict[warehouse.id].unitsPerTransactionChart\\\">\\n</nvd3></td><td ng-if=\\\"vm.selectedColumns[\\'averageUnitRetailChart\\'].visible\\\"><div class=\\\"h3\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].averageUnitRetailChart[0].values[vm.basicRetailKpisDict[warehouse.id].averageUnitRetailChart[0].values.length - 1].y | price}} \\n<span ng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 config=\\\"vm.cartConfig\\\" \\noptions=\\\"vm.chartOptionsDict.averageUnitRetailChart\\\" ng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].averageUnitRetailChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'returnsChart\\'].visible\\\"><div class=\\\"h3\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].returnsChart[0].values[vm.basicRetailKpisDict[warehouse.id].returnsChart[0].values.length - 1].y | price}} \\n<span ng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\">{{::vm.currencyCharacter}}</span></div><nvd3 config=\\\"vm.cartConfig\\\" \\noptions=\\\"vm.chartOptionsDict.returnsChart\\\" ng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" \\ndata=\\\"vm.basicRetailKpisDict[warehouse.id].returnsChart\\\"></nvd3></td><td \\nng-if=\\\"vm.selectedColumns[\\'unitsReturnedChart\\'].visible\\\"><div class=\\\"h3\\\">\\n{{vm.basicRetailKpisDict[warehouse.id].unitsReturnedChart[0].values[vm.basicRetailKpisDict[warehouse.id].unitsReturnedChart[0].values.length - 1].y}}\\n</div><nvd3 config=\\\"vm.cartConfig\\\" options=\\\"vm.chartOptionsDict.unitsReturnedChart\\\" \\nng-if=\\\"vm.basicRetailKpisDict[warehouse.id]\\\" data=\\\"vm.basicRetailKpisDict[warehouse.id].unitsReturnedChart\\\"></nvd3>\\n</td></tr></tbody></table></ms-widget-front></ms-widget>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-product-kpis/nd-product-kpis.html\",\"<md-card class=\\\"nd-product-kpis\\\"><md-card-title><md-card-title-text><div class=\\\"h3\\\" ng-if=\\\"vm.sellOutType==\\'products\\'\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.TOP_PRODUCTS\\\">Top Products</div><div class=\\\"h3\\\" ng-if=\\\"vm.sellOutType==\\'categories\\'\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.TOP_CATEGORIES\\\">Top Categories</div><div class=\\\"h3\\\" \\nng-if=\\\"vm.sellOutType==\\'subcategories\\'\\\" translate=\\\"RETAIL_DASHBOARD.TOP_SUBCATEGORIES\\\">Top Subcategories</div><div \\nclass=\\\"h3\\\" ng-if=\\\"vm.sellOutType==\\'brands\\'\\\" translate=\\\"RETAIL_DASHBOARD.TOP_BRANDS\\\">Top Brands</div>\\n</md-card-title-text></md-card-title><md-card-content><div class=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><table class=\\\"simple m-0\\\" ms-responsive-table ng-if=\\\"vm.sellOutType==\\'products\\'\\\"><thead><tr>\\n<th class=\\\"text-left\\\" width=\\\"40%\\\"><b translate=\\\"RETAIL_DASHBOARD.CODE\\\">Code</b></th><th class=\\\"text-center\\\" \\nwidth=\\\"10%\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT_COST\\\">Sell Out Cost</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.STORES\\\">Stores</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COST\\\">Cost</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.RETAIL_VALUE\\\">Retail Value</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through %</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_variant in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"40%\\\"><a \\nui-sref=\\\"app.inventory.products.product.overview({id:product_variant.product__id})\\\">{{product_variant.product__code}}\\n</a><br>{{product_variant.product__name}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">{{vm.print(product_variant.sell_in)}}\\n</td><td class=\\\"text-center\\\" width=\\\"10%\\\">{{vm.print(product_variant.wholesale_sell_out)}}</td><td class=\\\"text-center\\\" \\nwidth=\\\"10%\\\">{{vm.print(product_variant.sell_out)}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{vm.print(product_variant.sell_out_cost)}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">{{vm.print(product_variant.stock)}}\\n</td><td class=\\\"text-center\\\" width=\\\"10%\\\">{{vm.print(product_variant.stores_with_stock)}}</td><td class=\\\"text-center\\\" \\nwidth=\\\"10%\\\">{{vm.print(product_variant.cost) | price}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{vm.print(product_variant.stock_retail_value) | price}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{vm.print(product_variant.sell_through) | price}}<span ng-if=\\\"product_variant.sell_through\\\">%</span></td><td \\nclass=\\\"text-center\\\" width=\\\"10%\\\">{{vm.print(product_variant.coverage)}}</td></tr></tbody></table><table \\nclass=\\\"simple m-0\\\" ng-if=\\\"vm.sellOutType==\\'categories\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Wholesale Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT_COST\\\">Sell Out Cost</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COST\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through%</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE_AVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_category in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"16%\\\">{{product_category.category__name}}</td>\\n<td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.sell_in__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_category.wholesale_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.sell_out__sum}}\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.sell_out_cost__sum}}</td><td class=\\\"text-center\\\" \\nwidth=\\\"14%\\\">{{product_category.stock__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.cost__sum}}</td>\\n<td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{vm.percentage(product_category.sell_in__sum, product_category.wholesale_sell_out__sum + product_category.sell_out__sum)}}\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.coverage__avg}}</td></tr></tbody></table><table \\nclass=\\\"simple m-0\\\" ng-if=\\\"vm.sellOutType==\\'subcategories\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Wholesale Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT_COST\\\">Sell Out Cost</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COST\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through%</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE_AVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_subcategory in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"16%\\\">\\n{{product_subcategory.subcategory__name}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_subcategory.sell_in__sum}}\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_subcategory.wholesale_sell_out__sum}}</td><td class=\\\"text-center\\\" \\nwidth=\\\"14%\\\">{{product_subcategory.sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_subcategory.sell_out_cost__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_subcategory.stock__sum}}\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_subcategory.cost__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{vm.percentage(product_subcategory.sell_in__sum , product_subcategory.wholesale_sell_out__sum + product_subcategory.sell_out__sum)}}\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_subcategory.coverage__avg}}</td></tr></tbody></table><table \\nclass=\\\"simple m-0\\\" ng-if=\\\"vm.sellOutType==\\'brands\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Wholesale Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT_COST\\\">Sell Out Cost</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COST\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through%</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE_AVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_brand in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"16%\\\">{{product_brand.brand__name}}</td><td \\nclass=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.sell_in__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_brand.wholesale_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.sell_out__sum}}</td>\\n<td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.sell_out_cost__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_brand.stock__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.cost__sum}}</td><td \\nclass=\\\"text-center\\\" width=\\\"14%\\\">\\n{{vm.percentage(product_brand.sell_in__sum, product_brand.wholesale_sell_out__sum + product_brand.sell_out__sum)}}</td>\\n<td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.coverage__avg}}</td></tr></tbody></table></div></md-card-content>\\n</md-card>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-sell-out/nd-sell-out.html\",\"<ms-widget class=\\\"nd-sell-out\\\" layout=\\\"row\\\" flex=\\\"100\\\"><ms-widget-front class=\\\"white-bg\\\"><div \\nclass=\\\"ph-16 pv-8 border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\" layout-wrap><div class=\\\"pv-8 h3\\\" \\nng-if=\\\"vm.sellOutType==\\'products\\'\\\" translate=\\\"RETAIL_DASHBOARD.TOP_PRODUCTS\\\">Top Products</div><div class=\\\"pv-8 h3\\\" \\nng-if=\\\"vm.sellOutType==\\'categories\\'\\\" translate=\\\"RETAIL_DASHBOARD.TOP_CATEGORIES\\\">Top Categories</div><div \\nclass=\\\"pv-8 h3\\\" ng-if=\\\"vm.sellOutType==\\'subcategories\\'\\\" translate=\\\"RETAIL_DASHBOARD.TOP_SUBCATEGORIES\\\">\\nTop Subcategories</div><div class=\\\"pv-8 h3\\\" ng-if=\\\"vm.sellOutType==\\'brands\\'\\\" translate=\\\"RETAIL_DASHBOARD.TOP_BRANDS\\\">\\nTop Brands</div></div><div class=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><table \\nclass=\\\"simple m-0\\\" ms-responsive-table ng-if=\\\"vm.sellOutType==\\'products\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"20%\\\">\\n<b translate=\\\"RETAIL_DASHBOARD.CODE\\\">Code</b></th><th class=\\\"text-left\\\" width=\\\"20%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through %</b></th><th class=\\\"text-center\\\" width=\\\"10%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_variant in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"20%\\\"><a \\nui-sref=\\\"app.inventory.products.product.overview({id:product_variant.id})\\\">{{product_variant.code}}</a></td><td \\nclass=\\\"text-left\\\" width=\\\"20%\\\">{{product_variant.name}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_variant.total_sell_in || \\'-\\'}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_variant.total_wholesale_sell_out || \\'-\\'}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_variant.total_sell_out || \\'-\\'}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_variant.total_stock || \\'-\\'}}</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_variant.total_sell_through|| \\'-\\'}} %</td><td class=\\\"text-center\\\" width=\\\"10%\\\">\\n{{product_variant.total_coverage || \\'-\\'}}</td></tr></tbody></table><table class=\\\"simple m-0\\\" \\nng-if=\\\"vm.sellOutType==\\'categories\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.NAME\\\">\\nName</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th \\nclass=\\\"text-center\\\" width=\\\"14%\\\"><b translate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Wholesale Sell Out</b></th><th \\nclass=\\\"text-center\\\" width=\\\"14%\\\"><b translate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" \\nwidth=\\\"14%\\\"><b translate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through%</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE_AVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_category in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"16%\\\">{{product_category.category__name}}</td>\\n<td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.total_sell_in__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_category.total_wholesale_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_category.total_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.total_stock__sum}}\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{vm.percentage(product_category.total_sell_in__sum, product_category.total_wholesale_sell_out__sum + product_category.total_sell_out__sum)}} %\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_category.total_coverage__avg}}</td></tr></tbody></table><table \\nclass=\\\"simple m-0\\\" ng-if=\\\"vm.sellOutType==\\'subcategories\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Wholesale Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through%</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE_AVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_subcategory in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"16%\\\">\\n{{product_subcategory.subcategory__name}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_subcategory.total_sell_in__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_subcategory.total_wholesale_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_subcategory.total_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_subcategory.total_stock__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{vm.percentage(product_subcategory.total_sell_in__sum , product_subcategory.total_wholesale_sell_out__sum + product_subcategory.total_sell_out__sum)}} %\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_subcategory.total_coverage__avg}}</td></tr></tbody></table><table \\nclass=\\\"simple m-0\\\" ng-if=\\\"vm.sellOutType==\\'brands\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_IN\\\">Sell In</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.WHOLESALE_SELL_OUT\\\">Wholesale Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_OUT\\\">Sell Out</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SELL_THROUGH\\\">Sell Through%</b></th><th class=\\\"text-center\\\" width=\\\"14%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.COVERAGE_AVERAGE\\\">Coverage</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_brand in vm.sellOut\\\"><td class=\\\"text-left\\\" width=\\\"16%\\\">{{product_brand.brand__name}}</td><td \\nclass=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.total_sell_in__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_brand.total_wholesale_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{product_brand.total_sell_out__sum}}</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.total_stock__sum}}</td>\\n<td class=\\\"text-center\\\" width=\\\"14%\\\">\\n{{vm.percentage(product_brand.total_sell_in__sum, product_brand.total_wholesale_sell_out__sum + product_brand.total_sell_out__sum)}} %\\n</td><td class=\\\"text-center\\\" width=\\\"14%\\\">{{product_brand.total_coverage__avg}}</td></tr></tbody></table></div>\\n</ms-widget-front></ms-widget>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-top-ten/nd-top-ten.html\",\"<md-card class=\\\"nd-top-ten\\\"><md-card-title><md-card-title-text><div class=\\\"h3\\\" ng-if=\\\"vm.topTenType==\\'products\\'\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.TOP_PRODUCTS\\\">Top Products</div><div class=\\\"h3\\\" ng-if=\\\"vm.topTenType==\\'categories\\'\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.TOP_CATEGORIES\\\">Top Categories</div><div class=\\\"h3\\\" ng-if=\\\"vm.topTenType==\\'subcategories\\'\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.TOP_SUBCATEGORIES\\\">Top Subcategories</div><div class=\\\"h3\\\" ng-if=\\\"vm.topTenType==\\'brands\\'\\\" \\ntranslate=\\\"RETAIL_DASHBOARD.TOP_BRANDS\\\">Top Brands</div></md-card-title-text></md-card-title><md-card-content><div \\nclass=\\\"simple-table-container p-0\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><table class=\\\"simple m-0\\\" \\nms-responsive-table ng-if=\\\"vm.topTenType==\\'products\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"20%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.CODE\\\">Code</b></th><th class=\\\"text-left\\\" width=\\\"20%\\\"><b translate=\\\"RETAIL_DASHBOARD.NAME\\\">\\nName</b></th><th class=\\\"text-left\\\" width=\\\"20%\\\"><b translate=\\\"RETAIL_DASHBOARD.COLOR\\\">Color</b></th><th \\nng-if=\\\"vm.showSellOuts\\\" class=\\\"text-center\\\" width=\\\"8%\\\"><b translate=\\\"RETAIL_DASHBOARD.RECEIVED\\\">Received</b></th><th \\nng-if=\\\"vm.showSellOuts\\\" class=\\\"text-right\\\" width=\\\"8%\\\"><b translate=\\\"RETAIL_DASHBOARD.CURRENT_STOCK\\\">Current Stock</b>\\n</th><th class=\\\"text-right\\\" width=\\\"8%\\\"><b translate=\\\"RETAIL_DASHBOARD.SOLD\\\">Sold</b></th><th class=\\\"text-right\\\" \\nwidth=\\\"8%\\\"><b translate=\\\"RETAIL_DASHBOARD.REVENUE_PERCENTAGE\\\">Revenue%</b></th><th class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"8%\\\"><b translate=\\\"RETAIL_DASHBOARD.MARGIN\\\">Margin</b>\\n</th><th class=\\\"text-right\\\" width=\\\"8%\\\"><b translate=\\\"RETAIL_DASHBOARD.REVENUE\\\">Revenue</b></th></tr></thead><tbody><tr \\nng-repeat=\\\"product_variant in vm.topTen\\\"><td class=\\\"text-left\\\" width=\\\"20%\\\"><a \\nng-if=\\\"product_variant.product_type === \\'product\\'\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:product_variant.product_id})\\\">{{product_variant.product_code}}</a>\\n <span ng-if=\\\"product_variant.product_type !== \\'product\\'\\\">-</span></td><td class=\\\"text-left\\\" width=\\\"20%\\\"><span \\nng-if=\\\"product_variant.product_type === \\'product\\'\\\">{{product_variant.product__name}}</span> <span \\nng-if=\\\"product_variant.product_type === \\'charged_gift_card\\'\\\"><span translate=\\\"REPORTS.GENERATED_VOUCHERS\\\">\\nGenerated Vouchers</span></span> <span ng-if=\\\"product_variant.product_type === \\'consumed_gift_card\\'\\\"><span \\ntranslate=\\\"REPORTS.USED_VOUCHERS\\\">Consumed Vouchers</span></span></td><td class=\\\"text-left\\\" width=\\\"20%\\\">\\n{{product_variant.product_variant__color_name || \\'-\\'}}</td><td ng-if=\\\"vm.showSellOuts\\\" class=\\\"text-center\\\" width=\\\"8%\\\">\\n{{product_variant.product__total_received - product_variant.product__total_wholesale_sales}}</td><td \\nng-if=\\\"vm.showSellOuts\\\" class=\\\"text-right\\\" width=\\\"8%\\\">{{product_variant.product__total_stock}}</td><td \\nclass=\\\"text-right\\\" width=\\\"8%\\\">{{product_variant.amount__sum}}</td><td class=\\\"text-right\\\" width=\\\"8%\\\">\\n{{vm.percentage(product_variant.total_revenue, product_variant.total__sum)}} %</td><td class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"8%\\\">{{product_variant.margin__sum}}</td><td \\nclass=\\\"text-right\\\" width=\\\"8%\\\">{{product_variant.total__sum}}</td></tr></tbody></table><table class=\\\"simple m-0\\\" \\nng-if=\\\"vm.topTenType==\\'categories\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"20%\\\"><b translate=\\\"RETAIL_DASHBOARD.NAME\\\">\\nName</b></th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.SOLD\\\">Sold</b></th><th \\nclass=\\\"text-right\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.REVENUE_PERCENTAGE\\\">Revenue%</b></th><th \\nclass=\\\"text-right\\\" has-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.MARGIN\\\">Margin</b></th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.REVENUE\\\">Revenue</b></th></tr></thead><tbody><tr ng-repeat=\\\"product_category in vm.topTen\\\">\\n<td class=\\\"text-left\\\" width=\\\"20%\\\"><span ng-if=\\\"product_category.product_type === \\'product\\'\\\">\\n{{product_category.category_name}}</span> <span ng-if=\\\"product_category.product_type === \\'charged_gift_card\\'\\\"><span \\ntranslate=\\\"REPORTS.GENERATED_VOUCHERS\\\">Generated Vouchers</span></span> <span \\nng-if=\\\"product_category.product_type === \\'consumed_gift_card\\'\\\"><span translate=\\\"REPORTS.USED_VOUCHERS\\\">\\nConsumed Vouchers</span></span></td><td class=\\\"text-right\\\" width=\\\"16%\\\">{{product_category.amount__sum}}</td><td \\nclass=\\\"text-right\\\" width=\\\"16%\\\">{{vm.percentage(product_category.total_revenue, product_category.total__sum)}} %</td><td\\n class=\\\"text-right\\\" has-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"16%\\\">\\n{{product_category.margin__sum}}</td><td class=\\\"text-right\\\" width=\\\"16%\\\">{{product_category.total__sum}}</td></tr>\\n</tbody></table><table class=\\\"simple m-0\\\" ng-if=\\\"vm.topTenType==\\'subcategories\\'\\\"><thead><tr><th class=\\\"text-left\\\" \\nwidth=\\\"20%\\\"><b translate=\\\"RETAIL_DASHBOARD.NAME\\\">Name</b></th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.SOLD\\\">Sold</b></th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b \\ntranslate=\\\"RETAIL_DASHBOARD.REVENUE_PERCENTAGE\\\">Revenue%</b></th><th class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.MARGIN\\\">Margin</b>\\n</th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.REVENUE\\\">Revenue</b></th></tr></thead><tbody><tr\\n ng-repeat=\\\"product_subcategory in vm.topTen\\\"><td class=\\\"text-left\\\" width=\\\"20%\\\"><span \\nng-if=\\\"product_subcategory.product_type === \\'product\\'\\\">{{product_subcategory.subcategory_name || \\'-\\'}}</span> <span \\nng-if=\\\"product_subcategory.product_type === \\'charged_gift_card\\'\\\"><span translate=\\\"REPORTS.GENERATED_VOUCHERS\\\">\\nGenerated Vouchers</span></span> <span ng-if=\\\"product_subcategory.product_type === \\'consumed_gift_card\\'\\\"><span \\ntranslate=\\\"REPORTS.USED_VOUCHERS\\\">Consumed Vouchers</span></span></td><td class=\\\"text-right\\\" width=\\\"16%\\\">\\n{{product_subcategory.amount__sum}}</td><td class=\\\"text-right\\\" width=\\\"16%\\\">\\n{{vm.percentage(product_subcategory.total_revenue, product_subcategory.total__sum)}} %</td><td class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"16%\\\">{{product_subcategory.margin__sum}}</td><td \\nclass=\\\"text-right\\\" width=\\\"16%\\\">{{product_subcategory.total__sum}}</td></tr></tbody></table><table class=\\\"simple m-0\\\" \\nng-if=\\\"vm.topTenType==\\'brands\\'\\\"><thead><tr><th class=\\\"text-left\\\" width=\\\"20%\\\"><b translate=\\\"RETAIL_DASHBOARD.NAME\\\">Name\\n</b></th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.SOLD\\\">Sold</b></th><th class=\\\"text-right\\\" \\nwidth=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.REVENUE_PERCENTAGE\\\">Revenue%</b></th><th class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.MARGIN\\\">Margin</b>\\n</th><th class=\\\"text-right\\\" width=\\\"16%\\\"><b translate=\\\"RETAIL_DASHBOARD.REVENUE\\\">Revenue</b></th></tr></thead><tbody><tr\\n ng-repeat=\\\"product_brand in vm.topTen\\\"><td class=\\\"text-left\\\" width=\\\"20%\\\"><span \\nng-if=\\\"product_brand.product_type === \\'product\\'\\\">{{product_brand.brand_name}}</span> <span \\nng-if=\\\"product_brand.product_type === \\'charged_gift_card\\'\\\"><span translate=\\\"REPORTS.GENERATED_VOUCHERS\\\">\\nGenerated Vouchers</span></span> <span ng-if=\\\"product_brand.product_type === \\'consumed_gift_card\\'\\\"><span \\ntranslate=\\\"REPORTS.USED_VOUCHERS\\\">Consumed Vouchers</span></span></td><td class=\\\"text-right\\\" width=\\\"16%\\\">\\n{{product_brand.amount__sum}}</td><td class=\\\"text-right\\\" width=\\\"16%\\\">\\n{{vm.percentage(product_brand.total_revenue, product_brand.total__sum)}} %</td><td class=\\\"text-right\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" width=\\\"16%\\\">{{product_brand.margin__sum}}</td><td \\nclass=\\\"text-right\\\" width=\\\"16%\\\">{{product_brand.total__sum}}</td></tr></tbody></table></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/analytics/views/retail-dashboard/directives/nd-weekly-heatmap/nd-weekly-heatmap.html\",\"<md-card><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">\\n{{\\'RETAIL_DASHBOARD.WEEK_HEATMAP\\' |translate}}</span> <span flex></span><md-checkbox class=\\\"m-0 ml-20\\\" \\nng-model=\\\"vm.accumulateHeadmap\\\" ng-change=\\\"vm.updateHeatmap()\\\">{{\\'RETAIL_DASHBOARD.ACCUMULATED\\' |translate}}\\n</md-checkbox></div></md-card-title-text></md-card-title><md-card-content><div style=\\\"height: 600px !important\\\" flex>\\n<div id=\\\"heatmap\\\" style=\\\"height: 100%\\\"></div></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/analytics/views/sale-analytics/dialogs/dynamic-report/export-report-dialog.html\",\"<md-dialog aria-label=\\\"Export Report\\\" class=\\\"w-400\\\" id=\\\"export-report-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"exportForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"DYNAMIC_REPORTS.EXPORT_REPORT\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"column\\\"><md-input-container \\nclass=\\\"md-block\\\"><label translate=\\\"EXPORT_FORMAT\\\"></label><md-select ng-model=\\\"vm.fileType\\\" required><md-option \\nvalue=\\\"html\\\">HTML</md-option><md-option value=\\\"csv\\\">CSV</md-option><md-option value=\\\"xlsx\\\">XLSX</md-option></md-select>\\n</md-input-container><md-checkbox ng-model=\\\"vm.sendEmail\\\"><span translate=\\\"SEND_BY_EMAIL\\\"></span></md-checkbox>\\n<md-input-container ng-if=\\\"vm.sendEmail\\\" class=\\\"mb-0 md-block\\\"><label translate=\\\"CONTACTS.EMAIL\\\"></label><input \\nng-model=\\\"vm.emailTo\\\" type=\\\"email\\\" required></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" class=\\\"md-raised\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button \\nng-click=\\\"vm.exportReport()\\\" class=\\\"md-raised md-primary\\\" ng-disabled=\\\"exportForm.$invalid\\\"><span \\ntranslate=\\\"GENERAL.EXPORT\\\"></span></md-button></div></form></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/analytics/views/sale-analytics/directives/dynamic-report/nd-dynamic-report.html\",\"<div class=\\\"nd-dynamic-report\\\" layout=\\\"column\\\" layout-fill><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"md-padding pb-0\\\"><span class=\\\"h1 mr-8\\\">{{reportTitle}}</span><md-select ng-if=\\\"vm.presets\\\" ng-model=\\\"vm.report\\\" \\nng-change=\\\"vm.presetChanged()\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.searchPresetFilter)\\\" class=\\\"nd-input\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"vm.searchPresetFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-select-header><md-option \\nng-repeat=\\\"preset in vm.presets | orderBy:\\'trans\\' | filter:{ trans: vm.searchPresetFilter }\\\" ng-value=\\\"preset\\\">\\n{{preset.trans}}</md-option></md-select><div flex></div><div layout=\\\"row\\\" ng-if=\\\"showChart\\\" \\nlayout-align=\\\"center center\\\" class=\\\"mr-8 date-range-container\\\"><md-date-range auto-confirm=\\\"true\\\" \\nng-model=\\\"vm.dateRange\\\" md-on-select=\\\"vm.changeDate()\\\" one-panel=\\\"false\\\" show-template=\\\"true\\\" \\nlocalization-map=\\\"vm.mdLocalizationMap\\\"></md-date-range></div><md-button class=\\\"no-margin md-primary\\\" \\nng-disabled=\\\"vm.fetching\\\" ng-click=\\\"vm.openExportDialog()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nclass=\\\"mr-5\\\" md-font-icon=\\\"icon-download\\\"></md-icon>{{\\'DYNAMIC_REPORTS.EXPORT_REPORT\\' | translate}}</div></md-button>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start start\\\" flex layout-wrap layout-fill layout-padding><div flex=\\\"100\\\" \\nflex-gt-sm=\\\"60\\\" flex-gt-md=\\\"75\\\" flex-gt-lg=\\\"80\\\" layout=\\\"column\\\" class=\\\"chart-table-card-wrapper\\\" layout-fill><md-card \\nlayout=\\\"column\\\" class=\\\"chart-and-table-card m-0\\\" flex><md-card-title class=\\\"md-padding h-64\\\" ng-if=\\\"showChart\\\" \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" layout-wrap><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\ntranslate=\\\"DYNAMIC_REPORTS.TIME_INTERVAL\\\" class=\\\"pr-5\\\">Time interval</span><md-select class=\\\"nd-input\\\" \\nng-change=\\\"vm.timeIntervalChanged()\\\" ng-model=\\\"vm.timeInterval\\\"><md-option ng-value=\\\"\\'day\\'\\\">{{\\'GOALS.DAY\\'|translate}}\\n</md-option><md-option ng-value=\\\"\\'week\\'\\\">{{\\'GOALS.WEEK\\'|translate}}</md-option><md-option ng-value=\\\"\\'month\\'\\\">\\n{{\\'GOALS.MONTH\\'|translate}}</md-option></md-select></div></md-card-title><md-card-content \\nclass=\\\"no-padding chart-table-card-content\\\" layout=\\\"column\\\"><div class=\\\"h-250 border-bottom\\\" ng-if=\\\"showChart\\\" \\nflex=\\\"100\\\" id=\\\"dynamic-report-chart\\\" style=\\\"width: 100%\\\"><div ng-if=\\\"!vm.chart\\\" class=\\\"full-height\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular></div></div><div \\nclass=\\\"table-container\\\" layout-fill layout=\\\"row\\\"><table class=\\\"dynamic-report-table\\\" \\nng-class=\\\"{\\'totals\\': vm.selectedTotals}\\\"><thead><tr><th ng-repeat=\\\"column in vm.columns\\\" \\ntitle=\\\"{{ column.field_value }}\\\" ng-class=\\\"{\\'metric-column\\': column.isMetric, \\'dimension-column\\': !column.isMetric}\\\">\\n{{ vm.getFieldName(column) }}</th></tr></thead><tbody><tr ng-repeat=\\\"row in vm.data\\\"><td \\nng-repeat=\\\"column in vm.columns\\\" \\nng-class=\\\"{\\'metric-column\\': column.isMetric, \\'dimension-column\\': !column.isMetric, \\'image-cell\\': column.field === \\'product_cover_thumbnail\\'}\\\" \\nng-bind-html=\\\"vm.getRowValue(row, column.field)\\\"></td></tr></tbody></table></div><div \\nng-include=\\\"\\'app/main/apps/analytics/views/sale-analytics/directives/dynamic-report/pagination.html\\'\\\" \\nng-if=\\\"!vm.fetching\\\" class=\\\"pagination-sticky\\\"></div></md-card-content></md-card></div><div flex=\\\"100\\\" flex-gt-sm=\\\"40\\\" \\nflex-gt-md=\\\"25\\\" flex-gt-lg=\\\"20\\\" layout-fill><md-card layout=\\\"column\\\" class=\\\"filters-card m-0\\\"><md-card-title \\nclass=\\\"sticky\\\"><md-card-title-text class=\\\"ph-16 pb-10 border-bottom\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<span class=\\\"h3\\\" flex translate=\\\"DYNAMIC_REPORTS.CUSTOMIZE_REPORT\\\"></span><div><md-button \\nng-click=\\\"vm.restoreFilters()\\\" class=\\\"md-icon-button\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-replay\\\"></md-icon>\\n<md-tooltip>{{\\'DYNAMIC_REPORTS.RESTORE_DEFAULT_FIELDS\\' | translate}}</md-tooltip></md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.applyFilters()\\\" ng-disabled=\\\"vm.fetching\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.fetching\\\" md-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\" \\nmd-diameter=\\\"14\\\"></md-progress-circular><span translate=\\\"DYNAMIC_REPORTS.APPLY_FILTER\\\"></span></div></md-button></div>\\n</div></md-card-title-text></md-card-title><md-card-content class=\\\"full-height\\\"><div class=\\\"dynamic-fields-container\\\">\\n<nd-dynamic-report-field-card available-options=\\\"vm.dimensions\\\" id=\\\"dimensions-directive\\\" \\non-selection-change=\\\"vm.dimensionsChanged(selection)\\\" selected-options=\\\"vm.selectedDimensions\\\" \\nhelp-text=\\\"\\'DYNAMIC_REPORTS.DIMENSIONS_HELP\\'\\\" title=\\\"\\'DYNAMIC_REPORTS.DIMENSIONS\\'\\\"></nd-dynamic-report-field-card>\\n<md-divider></md-divider><nd-dynamic-report-field-card available-options=\\\"vm.columnDimensions\\\" \\nid=\\\"column-dimensions-directive\\\" ng-if=\\\"vm.columnDimensions.length > 0\\\" \\non-selection-change=\\\"vm.columnDimensionsChanged(selection)\\\" selected-options=\\\"vm.selectedColumnDimensions\\\" \\nhelp-text=\\\"\\'DYNAMIC_REPORTS.COLUMN_DIMENSIONS_HELP\\'\\\" title=\\\"\\'DYNAMIC_REPORTS.COLUMN_DIMENSIONS\\'\\\">\\n</nd-dynamic-report-field-card><md-divider></md-divider><nd-dynamic-report-field-card available-options=\\\"vm.metrics\\\" \\nid=\\\"metrics-directive\\\" on-selection-change=\\\"vm.metricsChanged(selection)\\\" selected-options=\\\"vm.selectedMetrics\\\" \\noption-headers=\\\"vm.metricHeaders\\\" help-text=\\\"\\'DYNAMIC_REPORTS.METRICS_HELP\\'\\\" title=\\\"\\'DYNAMIC_REPORTS.METRICS\\'\\\">\\n</nd-dynamic-report-field-card><md-divider></md-divider><nd-dynamic-report-field-card available-filters=\\\"vm.filters\\\" \\nid=\\\"filters-directive\\\" on-selection-change=\\\"vm.filtersChanged(selection)\\\" selected-filters=\\\"vm.selectedFilters\\\" \\ntitle=\\\"\\'DYNAMIC_REPORTS.FILTERS\\'\\\" localization-map=\\\"vm.mdLocalizationMap\\\"></nd-dynamic-report-field-card><md-divider>\\n</md-divider><nd-dynamic-report-field-card available-sorting=\\\"vm.sorting\\\" id=\\\"sorting-directive\\\" \\non-selection-change=\\\"vm.sortingChanged(selection)\\\" selected-sorting=\\\"vm.selectedSorting\\\" \\noption-headers=\\\"vm.metricHeaders\\\" title=\\\"\\'DYNAMIC_REPORTS.SORTING\\'\\\"></nd-dynamic-report-field-card><md-divider>\\n</md-divider><div class=\\\"md-padding pt-20 pr-16\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"DYNAMIC_REPORTS.TOTALS\\\"></span> <span flex></span><md-checkbox class=\\\"mb-0 mr-16\\\" \\nng-model=\\\"vm.selectedTotals\\\">{{\\'DYNAMIC_REPORTS.SHOW_TOTALS\\' | translate }}</md-checkbox></div></div></md-card-content>\\n</md-card></div></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/sale-analytics/directives/dynamic-report/pagination.html\",\"<div layout=\\\"row\\\" class=\\\"pagination-div\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mr-16\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-disabled=\\\"vm.pagination.pageNumber === 1\\\" ng-click=\\\"vm.goToFirstPage()\\\"><md-icon \\nmd-font-icon md-svg-icon=\\\"assets/images/custom-material-design-icons/skip-previous.98ccc477.svg\\\"></md-icon></md-button>\\n<md-button class=\\\"md-icon-button\\\" ng-disabled=\\\"vm.pagination.pageNumber === 1\\\" ng-click=\\\"vm.goToPreviousPage()\\\">\\n<md-icon md-font-icon md-svg-icon=\\\"assets/images/custom-material-design-icons/menu-left.6b533c90.svg\\\"></md-icon></md-button>\\n<input class=\\\"nd-input white\\\" type=\\\"number\\\" ng-change=\\\"vm.changePageManually()\\\" ng-model-options=\\\"{debounce:500}\\\" \\nng-model=\\\"vm.pagination.pageNumber\\\" min=\\\"1\\\" max=\\\"{{vm.pagination.totalPages}}\\\"> <span class=\\\"mh-5\\\">/</span> <span \\nclass=\\\"mr-5\\\">{{vm.pagination.totalPages}}</span><md-button class=\\\"md-icon-button\\\" \\nng-disabled=\\\"vm.pagination.pageNumber === vm.pagination.totalPages\\\" ng-click=\\\"vm.goToNextPage()\\\"><md-icon md-font-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/menu-right.b20aba89.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" ng-disabled=\\\"vm.pagination.pageNumber === vm.pagination.totalPages\\\" \\nng-click=\\\"vm.goToLastPage()\\\"><md-icon md-font-icon \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/skip-next.c89ca1d1.svg\\\"></md-icon></md-button></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-select class=\\\"page-size-selector nd-input mr-8 white\\\" \\nng-model=\\\"vm.pagination.pageSize\\\" ng-change=\\\"vm.changePageSize()\\\"><md-option ng-value=\\\"10\\\">10</md-option><md-option \\nng-value=\\\"20\\\">20</md-option><md-option ng-value=\\\"50\\\">50</md-option><md-option ng-value=\\\"100\\\">100</md-option>\\n</md-select><span class=\\\"ml-8\\\" translate=\\\"DYNAMIC_REPORTS.REGISTERS_PER_PAGE\\\"></span></div></div>\");\n$templateCache.put(\"app/main/apps/analytics/views/sale-analytics/directives/dynamic-report-field-card/nd-dynamic-report-field-card.html\",\"<md-card class=\\\"nd-dynamic-report-field-card card-in-card\\\" title=\\\"\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"h3\\\" translate=\\\"{{vm.title}}\\\"></span><md-icon \\nclass=\\\"secondary-text switch-info ml-8\\\" md-font-icon=\\\"icon-information-outline\\\" ng-if=\\\"vm.helpText\\\"><md-tooltip \\nmd-direction=\\\"bottom\\\">{{vm.helpText | translate}}</md-tooltip></md-icon><span flex></span><md-menu \\nmd-position-mode=\\\"target-right target\\\" ng-if=\\\"!vm.useFilters && !vm.sorting\\\"><md-button \\naria-label=\\\"{{ \\'GENERAL.ADD\\' | translate }}\\\" class=\\\"md-icon-button md-primary\\\" md-menu-origin \\nng-click=\\\"$mdMenu.open($event)\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon></md-button><md-menu-content \\nclass=\\\"nd-dynamic-report-field-card-md-menu-content p-0\\\" width=\\\"5\\\"><md-menu-item \\nclass=\\\"sticky-header ph-16 border-bottom\\\"><input maxlength=\\\"{{ vm.SEARCH_MAX_LENGTH }}\\\" \\nng-keydown=\\\"$event.stopPropagation()\\\" ng-model=\\\"vm.searchFilter\\\" placeholder=\\\"{{ \\'GENERAL.SEARCH\\' | translate }}\\\" \\ntype=\\\"search\\\"></md-menu-item><md-menu-item \\nng-repeat=\\\"option in vm.availableOptions\\n                             | filter:vm.optionMatchesSearch\\n                             | orderBy:vm.translatedSortKey\\\">\\n<md-button md-prevent-menu-close ng-click=\\\"vm.toggleOption(option)\\\"><div class=\\\"w-full\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span flex>{{vm.getFieldName(option)}}</span><md-icon md-font-icon=\\\"icon-check\\\" \\nng-if=\\\"vm.isSelected(option)\\\"></md-icon></div></md-button></md-menu-item></md-menu-content></md-menu><md-menu \\nmd-position-mode=\\\"target-right target\\\" ng-if=\\\"vm.useFilters && !vm.sorting\\\"><md-button \\naria-label=\\\"{{ \\'GENERAL.ADD\\' | translate }}\\\" class=\\\"md-icon-button md-primary\\\" md-menu-origin \\nng-click=\\\"$mdMenu.open($event)\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon></md-button><md-menu-content \\nclass=\\\"nd-dynamic-report-field-card-md-menu-content p-0\\\" width=\\\"5\\\"><md-menu-item \\nclass=\\\"sticky-header ph-16 border-bottom\\\"><input maxlength=\\\"{{ vm.SEARCH_MAX_LENGTH }}\\\" \\nng-keydown=\\\"$event.stopPropagation()\\\" ng-model=\\\"vm.searchFilter\\\" placeholder=\\\"{{ \\'GENERAL.SEARCH\\' | translate }}\\\" \\ntype=\\\"search\\\"></md-menu-item><md-menu-item ng-repeat=\\\"filter in vm.availableFilters | filter: vm.searchFilter\\\">\\n<md-button md-prevent-menu-close ng-click=\\\"vm.toggleFilterOption(filter)\\\"><div class=\\\"w-full\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span flex>{{ filter.name }}</span><md-icon md-font-icon=\\\"icon-check\\\" \\nng-if=\\\"vm.isSelected(filter)\\\"></md-icon></div></md-button></md-menu-item></md-menu-content></md-menu><md-menu \\nmd-position-mode=\\\"target-right target\\\" ng-if=\\\"vm.sorting\\\"><md-button aria-label=\\\"{{ \\'GENERAL.ADD\\' | translate }}\\\" \\nclass=\\\"md-icon-button md-primary\\\" md-menu-origin ng-click=\\\"$mdMenu.open($event)\\\"><md-icon md-font-icon=\\\"icon-plus\\\">\\n</md-icon></md-button><md-menu-content class=\\\"nd-dynamic-report-field-card-md-menu-content p-0\\\" width=\\\"5\\\"><md-menu-item\\n class=\\\"sticky-header ph-16 border-bottom\\\"><input maxlength=\\\"{{ vm.SEARCH_MAX_LENGTH }}\\\" \\nng-keydown=\\\"$event.stopPropagation()\\\" ng-model=\\\"vm.searchFilter\\\" placeholder=\\\"{{ \\'GENERAL.SEARCH\\' | translate }}\\\" \\ntype=\\\"search\\\"></md-menu-item><md-menu-item \\nng-repeat=\\\"field in vm.availableSorting | filter: vm.optionMatchesSearch | orderBy:vm.translatedSortKey\\\"><md-button \\nmd-prevent-menu-close ng-click=\\\"vm.toggleSortingField(field)\\\"><div class=\\\"w-full\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span flex>{{vm.getFieldName(field)}}</span><md-icon md-font-icon=\\\"icon-check\\\" \\nng-if=\\\"vm.isSelected({ field: field })\\\"></md-icon></div></md-button></md-menu-item></md-menu-content></md-menu>\\n</md-card-title-text></md-card-title><md-card-content ng-if=\\\"!vm.useFilters && !vm.sorting\\\"><md-list class=\\\"md-dense\\\" \\ndnd-list=\\\"vm.selectedOptionsForDnd\\\"><md-list-item class=\\\"cursor-dnd\\\" dnd-draggable=\\\"selectedOption\\\" \\ndnd-effect-allowed=\\\"move\\\" dnd-moved=\\\"vm.dndItemMoved($index)\\\" ng-repeat=\\\"selectedOption in vm.selectedOptionsForDnd\\\">\\n<div class=\\\"full-width\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-drag-vertical\\\"></md-icon>\\n<div flex layout=\\\"row\\\" layout-align=\\\"start center\\\">{{vm.getFieldName(selectedOption.label)}}<md-icon class=\\\"s16 ml-8\\\" \\nmd-font-icon=\\\"icon-chart-line\\\" ng-if=\\\"$index === 0 && vm.title === \\'DYNAMIC_REPORTS.METRICS\\'\\\"><md-tooltip>\\n{{\\\"DYNAMIC_REPORTS.VISIBLE_IN_THE_CHART\\\" | translate }}</md-tooltip></md-icon><span flex></span></div><md-button \\nclass=\\\"md-icon-button no-margin\\\"><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.removeOption(selectedOption)\\\">\\n</md-icon></md-button></div></md-list-item></md-list></md-card-content><md-card-content \\nng-if=\\\"vm.useFilters && !vm.sorting\\\"><md-list class=\\\"md-dense\\\"><md-list-item class=\\\"cursor-dnd filter-list-item\\\" \\nng-repeat=\\\"selectedDynamicReportFilter in vm.selectedOptionsForDnd\\\"><div class=\\\"full-width\\\" layout=\\\"column\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"filter-title\\\" flex>\\n{{vm.getFieldName(selectedDynamicReportFilter.name)}}</div><md-button class=\\\"md-icon-button no-margin\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.removeOption(selectedDynamicReportFilter)\\\"></md-icon></md-button></div><div \\nclass=\\\"filter-item-parameters\\\" layout=\\\"column\\\"><md-select class=\\\"operation-selector nd-input\\\" \\nng-change=\\\"vm.sendChangeCallback()\\\" ng-model=\\\"selectedDynamicReportFilter.operation\\\" \\nng-if=\\\"selectedDynamicReportFilter.type !== \\'date\\'\\\"><md-option \\nng-repeat=\\\"operation in selectedDynamicReportFilter.getAvailableOperations()\\\" ng-value=\\\"operation\\\">\\n{{\\'DYNAMIC_REPORTS.OPERATION_\\' + operation |translate}}</md-option></md-select><div \\nng-if=\\\"selectedDynamicReportFilter.type == \\'fk\\'\\\"><md-autocomplete flex=\\\"100\\\" md-delay=\\\"300\\\" \\nmd-item-text=\\\"vm.displayFunction(selectedDynamicReportFilter, item)\\\" \\nmd-items=\\\"item in vm.querySearch(selectedDynamicReportFilter)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" \\nmd-search-text=\\\"selectedDynamicReportFilter.searchText\\\" md-selected-item=\\\"selectedDynamicReportFilter.itemInstance\\\" \\nmd-selected-item-change=\\\"vm.selectItem(selectedDynamicReportFilter, item)\\\" \\nplaceholder=\\\"{{vm.getFieldName(selectedDynamicReportFilter.name)}}\\\"><md-item-template>\\n{{vm.displayFunction(selectedDynamicReportFilter, item)}}</md-item-template></md-autocomplete><md-chips \\nmd-on-remove=\\\"vm.sendChangeCallback()\\\" md-removable=\\\"true\\\" ng-model=\\\"selectedDynamicReportFilter.value\\\" \\nreadonly=\\\"true\\\"><md-chip-template>{{vm.getChipDisplayValue($chip)}}</md-chip-template></md-chips></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pv-10\\\" \\nng-if=\\\"selectedDynamicReportFilter.type === \\'int\\' || selectedDynamicReportFilter.type === \\'decimal\\'\\\"><input \\nng-change=\\\"vm.sendChangeCallback()\\\" ng-model=\\\"selectedDynamicReportFilter.value\\\" \\nplaceholder=\\\"{{\\'DYNAMIC_REPORTS.VALUE\\' | translate}}\\\" type=\\\"number\\\" ng-model-options=\\\"{debounce:500}\\\" class=\\\"nd-input\\\" \\nflex></div><div class=\\\"mb-10\\\" ng-if=\\\"selectedDynamicReportFilter.type === \\'date\\'\\\"><md-date-range auto-confirm=\\\"true\\\" \\nng-model=\\\"selectedDynamicReportFilter.value\\\" md-on-select=\\\"vm.onDateFilterChange(selectedDynamicReportFilter)\\\" \\none-panel=\\\"false\\\" show-template=\\\"true\\\" localization-map=\\\"vm.localizationMap\\\"></md-date-range></div></div></div>\\n</md-list-item></md-list></md-card-content><md-card-content ng-if=\\\"vm.sorting\\\"><md-list><md-list-item \\nng-repeat=\\\"sorting in vm.selectedSorting\\\"><div class=\\\"full-width\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"p-8\\\" flex>{{vm.getFieldName(sorting.field)}}</div><md-select class=\\\"nd-input\\\" flex=\\\"30\\\" \\nng-change=\\\"vm.updateSortingDirection($index, sorting.direction)\\\" ng-model=\\\"sorting.direction\\\"><md-option value=\\\"asc\\\">\\n{{\\'DYNAMIC_REPORTS.ASCENDING\\' | translate}}</md-option><md-option value=\\\"desc\\\">\\n{{\\'DYNAMIC_REPORTS.DESCENDING\\' | translate}}</md-option></md-select><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.removeSorting(sorting)\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div></md-list-item>\\n</md-list></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/address/contact-address-dialog.html\",\"<md-dialog layout=\\\"column\\\"><md-dialog-content><h2 class=\\\"md-title\\\" ng-if=\\\"vm.address.id\\\">\\n{{\\'CONTACTS.EDIT_ADDRESS\\' |translate}}</h2><h2 class=\\\"md-title\\\" ng-if=\\\"!vm.address.id\\\">\\n{{\\'CONTACTS.NEW_ADDRESS\\' |translate}}</h2><form name=\\\"addressForm\\\"><div layout=\\\"row\\\" layout-wrap flex>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.ADDRESS_NAME\\' | translate }}</label>\\n<input type=\\\"text\\\" ng-model=\\\"vm.address.name\\\" data-test-id=\\\"addcontact-adress-name\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.ADDRESS_1\\' | translate }}</label>\\n<input type=\\\"text\\\" ng-model=\\\"vm.address.address_1\\\" data-test-id=\\\"addcontact-adress-1\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.ADDRESS_2\\' | translate }}</label>\\n<input type=\\\"text\\\" ng-model=\\\"vm.address.address_2\\\" data-test-id=\\\"addcontact-adress-2\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.CITY\\' | translate }}</label><input \\ntype=\\\"text\\\" ng-model=\\\"vm.address.city\\\" data-test-id=\\\"addcontact-adress-city\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.STATE\\' | translate }}</label><input \\ntype=\\\"text\\\" ng-model=\\\"vm.address.state\\\" data-test-id=\\\"addcontact-adress-state\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.ZIP\\' | translate }}</label><input \\ntype=\\\"text\\\" ng-model=\\\"vm.address.zip\\\" data-test-id=\\\"addcontact-adress-zip\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.COUNTRY\\' | translate }}</label>\\n<md-select ng-model=\\\"vm.address.country\\\" data-test-id=\\\"addcontact-adress-select-country\\\" \\nng-disabled=\\\"!Session.hasPermissions(\\'contacts.contact.addresses.create,contacts.contact.addresses.update\\')\\\"><md-option\\n ng-repeat=\\\"(countryCode, countryName) in vm.countries\\\" data-test-id=\\\"addcontact-adress-select-country-individual\\\" \\nng-value=\\\"countryCode\\\">{{countryName}}</md-option></md-select></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.PHONE_NUMBER\\' | translate }}</label><input type=\\\"text\\\" \\nng-model=\\\"vm.address.phone\\\"></md-input-container></div><div layout=\\\"row\\\" data-test-id=\\\"addcontact-adress-div-type\\\"><div\\n layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><md-checkbox \\nng-model=\\\"vm.address.is_billing_address\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\">\\n{{\\'CONTACTS.IS_BILLING_ADDRESS\\' | translate }}</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><md-checkbox ng-model=\\\"vm.address.is_shipping_address\\\" \\nhas-permission-else-disable=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\">\\n{{\\'CONTACTS.IS_SHIPPING_ADDRESS\\' | translate }}</md-checkbox></div></div></form></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"md-warn\\\" ng-if=\\\"vm.address.id\\\" \\nhas-permission=\\\"contacts.contact.addresses.delete\\\" ng-click=\\\"vm.deleteAddress()\\\">{{\\'GENERAL.DELETE\\' | translate}}\\n</md-button><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" data-test-id=\\\"addcontact-button-addadress-save\\\" \\nng-disabled=\\\"!addressForm.$valid || !addressForm.$dirty\\\" \\nhas-permission=\\\"contacts.contact.addresses.create,contacts.contact.addresses.update\\\" ng-click=\\\"vm.saveAddress()\\\">\\n{{\\'GENERAL.SAVE\\' | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/contact-dialog.html\",\"<md-dialog aria-label=\\\"New Task\\\" class=\\\"contact-dialog\\\" flex layout=\\\"column\\\"><md-toolbar class=\\\"border-bottom\\\" \\nflex=\\\"nogrow\\\" layout=\\\"column\\\"><div class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h2\\\">\\n{{vm.title}}</span> <span flex></span><md-button ng-click=\\\"vm.cancelDialog()\\\"><span translate=\\\"GENERAL.CANCEL\\\"></span>\\n</md-button><div layout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"vm.showInformationActions()\\\"><md-button \\naria-label=\\\"Delete\\\" has-permission=\\\"contacts.contacts.delete\\\" ng-click=\\\"vm.deleteContactConfirm($event)\\\" \\nng-disabled=\\\"vm.savingContact\\\" ng-if=\\\"!vm.newContact\\\" translate=\\\"GENERAL.DELETE\\\" \\ntranslate-attr-aria-label=\\\"CONTACTS.DELETE\\\"></md-button><md-button aria-label=\\\"SAVE\\\" \\nclass=\\\"send-button md-primary md-raised\\\" has-permission=\\\"contacts.contacts.update\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.saveContact()\\\" \\nng-disabled=\\\"vm.contactForm.$invalid || vm.contactForm.$pristine && vm.billingForm.$pristine || vm.savingContact\\\" \\nng-if=\\\"!vm.newContact\\\" type=\\\"submit\\\"><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.savingContact\\\">\\n</md-progress-circular><span translate=\\\"CONTACTS.SAVE\\\" translate-attr-aria-label=\\\"CONTACTS.SAVE\\\"></span></md-button>\\n<md-button aria-label=\\\"SAVE\\\" class=\\\"send-button md-primary md-raised\\\" has-permission=\\\"contacts.contacts.create\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.addNewContact()\\\" \\nng-disabled=\\\"vm.contactForm.$invalid || vm.contactForm.$pristine || vm.savingContact\\\" ng-if=\\\"vm.newContact\\\" \\ntype=\\\"submit\\\"><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"vm.savingContact\\\"></md-progress-circular>\\n<span translate=\\\"CONTACTS.ADD_CONTACT\\\" translate-attr-aria-label=\\\"CONTACTS.ADD_CONTACT\\\"></span></md-button></div><div \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"vm.showAddressActions()\\\"><span flex></span><div class=\\\"address-actions\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button aria-label=\\\"Add Task\\\" class=\\\"send-button\\\" ng-click=\\\"vm.cancelEditingAddress()\\\" \\nng-disabled=\\\"vm.savingContact\\\" ng-if=\\\"vm.editingAddress\\\" translate=\\\"PRODUCT.CANCEL\\\" \\ntranslate-attr-aria-label=\\\"PRODUCT.CANCEL\\\">CANCEL</md-button><md-button aria-label=\\\"SAVE\\\" \\nclass=\\\"send-button md-primary md-raised\\\" ng-click=\\\"vm.saveEditingAddress()\\\" \\nng-disabled=\\\"vm.addressForm.$invalid || vm.addressForm.$pristine || vm.savingContact\\\" ng-show=\\\"vm.editingAddress\\\" \\ntranslate=\\\"CONTACTS.SAVE\\\" translate-attr-aria-label=\\\"CONTACTS.SAVE\\\" type=\\\"submit\\\"></md-button></div></div><div \\nclass=\\\"border-top\\\" flex=\\\"nogrow\\\" has-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\" layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" ng-if=\\\"vm.showPersonsActions()\\\"><span flex></span><div class=\\\"person-actions\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button aria-label=\\\"Add Task\\\" class=\\\"send-button\\\" ng-click=\\\"vm.cancelEditingPerson()\\\" \\nng-if=\\\"vm.editingPerson\\\" translate=\\\"PRODUCT.CANCEL\\\" translate-attr-aria-label=\\\"PRODUCT.CANCEL\\\">CANCEL</md-button>\\n<md-button aria-label=\\\"SAVE\\\" class=\\\"send-button md-primary md-raised\\\" ng-click=\\\"vm.saveEditingPerson()\\\" \\nng-disabled=\\\"vm.personForm.$invalid || vm.personForm.$pristine\\\" ng-show=\\\"vm.editingPerson\\\" translate=\\\"CONTACTS.SAVE\\\" \\ntranslate-attr-aria-label=\\\"CONTACTS.SAVE\\\" type=\\\"submit\\\"></md-button></div></div></div></md-toolbar><md-dialog-content \\nclass=\\\"no-padding pb-30\\\" flex><md-tabs md-border-bottom md-dynamic-height md-selected=\\\"vm.selectedTab\\\"><md-tab \\nlabel=\\\"{{\\'CONTACTS.INFORMATION\\' | translate}}\\\" \\nng-disabled=\\\"vm.editingAddress && vm.selectedTab == 1 && vm.contact.id || vm.editingPerson && vm.selectedTab == 3 && vm.contact.id\\\">\\n<md-content class=\\\"md-padding\\\" \\nng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/information.html\\'\\\"></md-content></md-tab>\\n<md-tab label=\\\"{{\\'CONTACTS.ADDRESSES\\' | translate}}\\\" \\nng-disabled=\\\"vm.editingPerson && vm.selectedTab == 3 && vm.contact.id\\\"><md-content class=\\\"md-padding\\\" \\nng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/addresses.html\\'\\\"></md-content></md-tab><md-tab \\nlabel=\\\"{{\\'CONTACTS.BILLING\\' | translate}}\\\" \\nng-disabled=\\\"vm.editingAddress && vm.selectedTab == 1 && vm.contact.id || vm.editingPerson && vm.selectedTab == 3 && vm.contact.id\\\">\\n<md-content class=\\\"md-padding\\\" ng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/billing.html\\'\\\">\\n</md-content></md-tab><md-tab label=\\\"{{\\'CONTACTS.OTHER_CONTACTS\\' | translate}}\\\" \\nng-disabled=\\\"!vm.contact.id || vm.editingAddress && vm.selectedTab == 1\\\"><md-content class=\\\"md-padding\\\" \\nng-if=\\\"vm.contact.id\\\" ng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/persons.html\\'\\\">\\n</md-content></md-tab><md-tab label=\\\"{{\\'CONTACTS.PURCHASES\\' | translate}}\\\" \\nng-disabled=\\\"!vm.contact.id || vm.editingAddress && vm.selectedTab == 1\\\"><md-content class=\\\"no-padding\\\" \\nng-if=\\\"vm.contact.id\\\" ng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/purchases.html\\'\\\">\\n</md-content></md-tab><md-tab label=\\\"{{\\'INVOICES.INVOICES\\' | translate}}\\\" \\nng-disabled=\\\"!vm.contact.id || vm.editingAddress && vm.selectedTab == 1\\\"><md-content class=\\\"no-padding\\\" \\nng-if=\\\"vm.contact.id\\\" ng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/invoices.html\\'\\\">\\n</md-content></md-tab></md-tabs></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/import/import.html\",\"<md-dialog aria-label=\\\"Import Contacts\\\" class=\\\"w-300\\\" id=\\\"import-contacts-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"CONTACTS.IMPORT_CONTACTS\\\"></h2><p class=\\\"mr-0 mb-30\\\" ng-show=\\\"!vm.success\\\" \\nng-bind-html=\\\"\\'CONTACTS.IMPORT_CONTACTS_XLSX\\' | translate:{url: vm.IMPORT_URL}\\\"></p><div id=\\\"contacts-uploader\\\" \\nng-show=\\\"!vm.success\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nflow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" flow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button ng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" \\nflow-btn><span translate=\\\"IMPORT.FILE\\\">Change File</span></md-button><md-button ng-if=\\\"!product.cover\\\" \\nclass=\\\"md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Set File</span></md-button><span \\nng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span ng-if=\\\"!vm.fileLoaded\\\" \\nclass=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div><md-input-container \\nclass=\\\"md-block mt-0 mb-30\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\" ng-show=\\\"!vm.success\\\"><label translate=\\\"CONTACTS.TYPE\\\"></label>\\n<md-select ng-model=\\\"vm.contactType\\\" translate-attr-placeholder=\\\"CONTACTS.TYPE\\\" required md-no-asterisk=\\\"false\\\" \\nflex=\\\"100\\\"><md-option ng-repeat=\\\"(code,value) in vm.contactTypes\\\" ng-value=\\\"code\\\">{{\\'CONTACTS.\\' + value | translate}}\\n</md-option></md-select></md-input-container><div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p \\nng-if=\\\"vm.success\\\"><span translate=\\\"IMPORT.CONTACTS_IMPORTATION_ENQUEUED\\\"></span></p><div layout=\\\"row\\\"><md-button \\nng-disabled=\\\"vm.loading || !vm.contactType\\\" ng-if=\\\"!vm.success || !vm.fileLoaded\\\" ng-click=\\\"vm.uploadFile()\\\" \\nclass=\\\"md-raised md-primary m-0\\\" translate=\\\"IMPORT.IMPORT\\\" flex></md-button><span flex ng-if=\\\"vm.success\\\"></span>\\n<md-button ng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.success\\\" ng-click=\\\"vm.hide()\\\" class=\\\"m-0\\\" translate=\\\"GENERAL.CLOSE\\\">\\n</md-button></div></form></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/sidenavs/main/main-sidenav.html\",\"<md-content class=\\\"content no-padding\\\" flex ms-scroll><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div \\nclass=\\\"ph-20\\\" ng-if=\\\"vm.view==\\'contacts\\'\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-bookmark-outline\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.reloadContacts()\\\" \\nng-model=\\\"vm.status.filters.types\\\" placeholder=\\\"{{\\'CONTACTS.FILTER_BY_TYPE\\' | translate}}\\\"><md-option \\nng-repeat=\\\"(key, value) in vm.types\\\" ng-value=\\\"key\\\">{{\\'CONTACTS.\\' + value | translate}}</md-option></md-select></div>\\n<div class=\\\"ph-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s12\\\" \\nmd-font-icon=\\\"icon-account-multiple\\\"></md-icon><md-select flex multiple=\\\"multiple\\\" ng-change=\\\"vm.reloadContacts()\\\" \\nng-model=\\\"vm.status.filters.groups\\\" placeholder=\\\"{{\\'CONTACTS.FILTER_BY_GROUP\\' | translate}}\\\"><md-option \\nng-repeat=\\\"group in vm.groups\\\" ng-value=\\\"group\\\">{{group.name}}</md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/orders/dialogs/generate-labels-with-sendcloud/generate-labels-with-sendcloud-dialog.html\",\"<md-dialog id=\\\"generate-labels-with-sendcloud-dialog\\\"><md-dialog-content><h2 translate=\\\"{{vm.title}}\\\"></h2><div \\nlayout=\\\"column\\\" ng-if=\\\"!vm.generating && !vm.errors.length\\\"><p ng-if=\\\"vm.tab==\\'picked\\'\\\" \\ntranslate=\\\"ORDERS.GENERATE_LABELS_WITH_SENDCLOUD_DIALOG_MSG\\\"></p><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"vm.tab==\\'picked\\'\\\"><md-switch ng-model=\\\"vm.volumetricWeight\\\" ng-disabled=\\\"vm.generating\\\" \\nng-change=\\\"vm.storeVolumetricWeight()\\\" flex><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span class=\\\"mr-5\\\" \\ntranslate=\\\"SCAN_AND_GO.USE_VOLUMETRIC_WEIGHT\\\"></span></div></md-switch></div><md-switch \\nng-model=\\\"vm.printDeliveriesAutomatically\\\" ng-change=\\\"vm.storePrintDeliveriesAutomatically()\\\" class=\\\"mr-0\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><span class=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.PRINT_DELIVERIES\\\"></span></div>\\n</md-switch><md-input-container ng-if=\\\"vm.volumetricWeight && vm.tab==\\'picked\\'\\\" class=\\\"md-icon-float\\\"><md-icon \\nng-if=\\\"!vm.fetchingBoxes\\\" md-font-icon=\\\"icon-package-variant-closed\\\"></md-icon><div class=\\\"progress-container\\\">\\n<md-progress-circular md-font-icon ng-if=\\\"vm.fetchingBoxes\\\" md-diameter=\\\"20px\\\" md-mode=\\\"indeterminate\\\">\\n</md-progress-circular></div><label>{{\\'ORDER.PACKAGE\\' | translate}}</label><md-select \\nng-model=\\\"vm.selectedShippingBoxId\\\" ng-disabled=\\\"vm.generating || vm.fetchingBoxes\\\"><md-option \\nng-value=\\\"shippingBox.id\\\" ng-repeat=\\\"shippingBox in vm.shippingBoxes\\\">{{shippingBox.getFullName()}}</md-option>\\n</md-select></md-input-container><md-input-container class=\\\"md-icon-float\\\" ng-if=\\\"vm.tab==\\'picked\\'\\\"><md-icon \\nmd-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\"></md-icon><label>\\n{{\\'ORDER.SHIPPING_METHOD\\' | translate}}</label><md-select ng-model=\\\"vm.selectedShippingMethodId\\\" \\nng-change=\\\"vm.storeSelectedShippingMethodId()\\\" ng-disabled=\\\"vm.generating\\\"><md-option \\nng-repeat=\\\"shippingMethod in vm.shippingMethods\\\" ng-value=\\\"shippingMethod.id\\\">{{shippingMethod.name | translate}}\\n</md-option></md-select></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.generating\\\" class=\\\"mv-50\\\"><md-progress-circular md-mode=\\\"indeterminate\\\"></md-progress-circular></div><div \\nlayout=\\\"column\\\" ng-if=\\\"!vm.generating && vm.errors.length\\\"><div class=\\\"did-you-know red full-width mb-16\\\"><div \\nlayout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert-octagon\\\" class=\\\"red-fg\\\"></md-icon><div layout=\\\"column\\\" flex><span \\nclass=\\\"did-you-know-message\\\" translate=\\\"ORDERS.ERRORS_DETECTED_WHEN_GENERATING_THE_LABELS\\\"></span></div></div></div>\\n<table class=\\\"simple\\\"><tr><td translate=\\\"ORDERS.ORDER_WITH_ERROR\\\"></td><td translate=\\\"ORDERS.ERRORS\\\"></td></tr><tr \\nng-repeat=\\\"error in vm.errors\\\"><td><nd-a state=\\\"\\'app.ecommerce.orders.order\\'\\\" target=\\\"\\'_blank\\'\\\" \\nstate-params=\\\"{id: error.pos_order_id}\\\">{{error.pos_order}}<md-icon md-font-icon=\\\"icon-open-in-new\\\" \\nclass=\\\"md-primary-fg s16\\\"></md-icon></nd-a></td><td>{{error.error}}</td></tr></table></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><md-button ng-if=\\\"!vm.errors.length\\\" ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-if=\\\"vm.errors.length && ! vm.generating\\\" \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.close()\\\" translate=\\\"GENERAL.CLOSE\\\"></md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.generateLabels()\\\" ng-if=\\\"!vm.errors.length\\\" \\nng-disabled=\\\"!vm.isValid() || vm.generating\\\" translate=\\\"{{vm.buttonActionText}}\\\"></md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/orders/dialogs/new-order-origin/new-order-origin-dialog.html\",\"<md-dialog aria-label=\\\"Select channel\\\"><form ng-cloak name=\\\"form\\\"><md-dialog-content><h2 \\ntranslate=\\\"ORDER.SELECT_CHANNEL\\\" ng-if=\\\"vm.sitesData\\\"></h2><p translate=\\\"ORDER.SELECT_CHANNEL_MSG\\\" \\nng-if=\\\"vm.sitesData\\\"></p><h2 translate=\\\"ORDER.SELECT_STORE\\\" ng-if=\\\"!vm.sitesData\\\"></h2><p \\ntranslate=\\\"ORDER.SELECT_STORE_MSG\\\" ng-if=\\\"!vm.sitesData\\\"></p><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-input-container ng-if=\\\"vm.sitesData\\\" class=\\\"w-300\\\"><label translate=\\\"ORDER.CHANNEL\\\">Channel</label><md-select \\nng-model=\\\"vm.site\\\" placeholder=\\\"{{\\'ORDER.CHANNEL\\' | translate}}\\\"><md-option \\nng-repeat=\\\"site in vm.sitesData | orderBy: \\'name\\'\\\" ng-value=\\\"site.id\\\">{{site.name}}</md-option></md-select>\\n</md-input-container><md-input-container ng-if=\\\"!vm.sitesData\\\" class=\\\"w-300\\\"><label translate=\\\"ORDER.STORE\\\">Store\\n</label><md-select ng-model=\\\"vm.warehouse\\\" placeholder=\\\"{{\\'ORDER.STORE\\' | translate}}\\\"><md-option \\nng-repeat=\\\"warehouse in vm.warehousesData | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option>\\n</md-select></md-input-container></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" ng-disabled=\\\"!vm.warehouse && !vm.site\\\" translate=\\\"GENERAL.SELECT\\\">\\nSave</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/order/dialogs/add-delivery-note/add-delivery-note.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"no-padding w-400\\\" layout-padding><md-toolbar \\nclass=\\\"md-primary no-padding\\\" layout=\\\"column\\\" flex=\\\"nogrow\\\"><div class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"title\\\" translate=\\\"INVOICE.ADD_DELIVERY_NOTE\\\">Add Delivery Note</span></div>\\n</md-toolbar><md-dialog-content layout=\\\"column\\\" flex><div class=\\\"md-padding\\\"><md-autocomplete \\nmd-selected-item=\\\"vm.selectedDelivery\\\" md-item-text=\\\"item.autocode\\\" md-search-text=\\\"searchText\\\" \\nmd-items=\\\"item in vm.search(searchText)\\\" md-delay=\\\"500\\\" placeholder=\\\"Type a serial number or a customer name..\\\">\\n<md-item-template><span md-highlight-text=\\\"searchText\\\">{{item.autocode}} - {{item.customer_name}}</span>\\n</md-item-template></md-autocomplete></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nclass=\\\"border-top text-center\\\" flex><md-button class=\\\"md-raised md-primary\\\" ng-click=\\\"vm.addDeliveryNote()\\\" \\ntranslate=\\\"INVOICE.ADD_TO_INVOICE\\\" flex></md-button><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" flex></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/order/dialogs/execute-supplying-policy/execute-supplying-policy.html\",\"<md-dialog id=\\\"execute-supplying-policy\\\" style=\\\"max-width: 700px !important\\\"><md-dialog-content layout=\\\"column\\\" flex>\\n<div layout=\\\"column\\\"><h2 class=\\\"mt-0 mb-0\\\">{{ \\\"ORDERS.EXECUTE_SUPPLYING_POLICY\\\" | translate }}</h2><p \\nclass=\\\"secondary-text max-width-600\\\" ng-bind-html=\\\"vm.getSupplyingPolicyText()\\\"></p></div><div \\nng-if=\\\"vm.loadingFilteredFulfillments\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mt-20\\\"><md-progress-circular \\nclass=\\\"md-primary\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div><div \\nng-if=\\\"!vm.posOrder.pos_order_fulfillments.length\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"mt-5\\\"><p>\\n{{ \\\"ORDERS.NO_PRODUCTS_TO_REPLENISH\\\" | translate }}</p></div><md-card class=\\\"stockout-pos-order-fulfillment-card\\\" \\nng-repeat=\\\"fulfillment in vm.filteredFulfillments\\\"><md-card-content><div layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\">\\n{{\\'ORDER.FULFILLMENT\\' | translate}} #{{fulfillment.number}}</span><nd-fulfillment-text-box type=\\\"fulfillment.type\\\" \\nng-if=\\\"fulfillment.type\\\"></nd-fulfillment-text-box></div><span class=\\\"secondary-text\\\">\\n{{fulfillment.updated_at | date: \\'medium\\'}} | {{vm.getWarehouseLabel(fulfillment)}}</span></div></div><span flex>\\n</span><nd-information-panel variation=\\\"warning\\\" class=\\\"mt-10 mb-10\\\" \\nng-if=\\\"fulfillment.isInPickingButNoPackingProcess()\\\"><information-content>\\n{{ \\\"PICKING.WARNING_MESSAGE_SUPPLYING_POLICY\\\" | translate }}</information-content></nd-information-panel><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><table><tbody \\nng-repeat=\\\"pofpv in fulfillment.getVisiblePosOrderFulfillmentProductVariantInstances()\\\"><tr><td><md-checkbox \\nng-init=\\\"vm.initIsCheckedForReplenish(pofpv)\\\" ng-change=\\\"vm.stockoutChecked(pofpv)\\\" \\nng-model=\\\"pofpv.isCheckedForReplenish\\\" class=\\\"centered-checkbox\\\"></md-checkbox></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><input type=\\\"number\\\" class=\\\"nd-input text-right w-50\\\" \\nng-disabled=\\\"!pofpv.isCheckedForReplenish\\\" ng-change=\\\"vm.updateStockoutAmount(pofpv)\\\" \\nng-blur=\\\"vm.ensureNotEmpty(pofpv)\\\" ng-model=\\\"pofpv.stockoutAmount\\\" min=\\\"0\\\"> <small class=\\\"secondary-text nowrap ml-5\\\">\\n/ {{pofpv.maxStockoutAmount}}</small></div></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img \\nclass=\\\"thumbnail-40 mr-10\\\" ng-class=\\\"{\\'default-icon\\': !pofpv.pos_order_product_variant_instance.cover_thumbnail}\\\" \\nsrc=\\\"{{pofpv.pos_order_product_variant_instance.cover_thumbnail ? pofpv.pos_order_product_variant_instance.cover_thumbnail : \\'/assets/images/package-variant-closed.9c71cbbe.png\\'}}\\\">\\n<div layout=\\\"column\\\" class=\\\"mr-8\\\"><a ng-if=\\\"pofpv.pos_order_product_variant_instance.product\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:pofpv.pos_order_product_variant_instance.product})\\\">\\n{{::pofpv.getProductInstanceFullName()}} </a><span ng-if=\\\"!pofpv.pos_order_product_variant_instance.product\\\">\\n{{::pofpv.pos_order_product_variant_instance.product_name }} </span><small class=\\\"secondary-text\\\" \\nng-if=\\\"!pofpv.pos_order_product_variant_instance.is_gift_card\\\">{{::pofpv.pos_order_product_variant_instance.sku}} <span\\n ng-if=\\\"pofpv.pos_order_product_variant_instance.sku && pofpv.pos_order_product_variant_instance.barcode\\\">-</span> \\n<span ng-if=\\\"pofpv.pos_order_product_variant_instance.barcode\\\" class=\\\"barcode-text\\\">\\n{{::pofpv.pos_order_product_variant_instance.barcode}}</span><span class=\\\"uid-text\\\" \\nng-if=\\\"pofpv.pos_order_product_variant_instance.uid_stocks && pofpv.pos_order_product_variant_instance.uid_stocks.length > 0\\\">\\n{{::pofpv.getPosOrderProductVariantInstanceLots()}} </span></small><span \\nng-if=\\\"pofpv.pos_order_product_variant_instance.promotion\\\" class=\\\"m-0\\\">\\n{{ pofpv.pos_order_product_variant_instance.promotion_name}}</span></div></div></td></tr><tr \\nng-if=\\\"pofpv.stockout_data[\\'repositions\\'].length > 0 || pofpv.stockout_data[\\'purchases\\'].length > 0\\\"><td></td><td></td>\\n<td><div layout=\\\"column\\\" class=\\\"padding-bottom-10\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"pofpv.stockout_data[\\'repositions\\'].length > 0\\\" ng-repeat=\\\"transfer in pofpv.stockout_data[\\'repositions\\']\\\" \\nclass=\\\"mb-5 pl-50\\\" flex><small class=\\\"secondary-text\\\" style=\\\"margin-right: 4px\\\">{{\\'ORDERS.IN_REPOSITION\\' | translate}}\\n</small><nd-a state=\\\"\\'app.inventory.transfers.transfer.products\\'\\\" state-params=\\\"{id: transfer.id}\\\" \\nng-click=\\\"vm.closeDialog()\\\">{{transfer.autocode}}</nd-a><div \\nclass=\\\"status-badge ml-10 {{vm.TRANSFER_ORDER_STATUS_COLORS[transfer.status]}}\\\">\\n{{vm.getTransferStatusLabel(transfer.status)}}</div></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"pofpv.stockout_data[\\'purchases\\'].length > 0\\\" ng-repeat=\\\"purchase in pofpv.stockout_data[\\'purchases\\']\\\" \\nclass=\\\"mb-5 pl-50\\\" flex><small class=\\\"secondary-text\\\" style=\\\"margin-right: 4px\\\">{{\\'ORDERS.IN_REPOSITION\\' | translate}}\\n</small><nd-a state=\\\"\\'app.inventory.purchases.purchase.products\\'\\\" state-params=\\\"{id: purchase.id}\\\" \\nng-click=\\\"vm.closeDialog()\\\">{{purchase.autocode}}</nd-a><div \\nclass=\\\"status-badge ml-10 {{vm.PURCHASE_ORDER_STATUS_COLORS[purchase.status]}}\\\">\\n{{vm.getPurchaseStatusLabel(purchase.status)}}</div></div></div></td></tr></tbody></table></div></div>\\n</md-card-content></md-card></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nclass=\\\"border-top\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">{{ \\\"GENERAL.CANCEL\\\" | translate }}</md-button>\\n<md-button ng-click=\\\"vm.selectAll()\\\" class=\\\"stroked md-primary ml-0\\\">\\n{{ vm.allSelected ? \\\"ORDERS.UNMARK_ALL_VARIANTS\\\" : \\\"ORDERS.MARK_ALL_VARIANTS\\\" | translate }}</md-button><md-button \\nng-click=\\\"vm.save()\\\" class=\\\"md-raised md-primary ml-0\\\">\\n{{ vm.action_is_replenish ? \\\"INVENTORY_DASHBOARD.CREATE_REPLENISHMENT_DRAFT\\\" : \\\"COLLECTION.CREATE_PURCHASE\\\" | translate }}\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/order/dialogs/select-register-activity/select-register-activity.html\",\"<md-dialog id=\\\"select-register-activity\\\"><md-dialog-content layout=\\\"column\\\" flex><div layout=\\\"column\\\" \\nclass=\\\"md-padding\\\"><h2 translate class=\\\"mt-0\\\">ORDER.SELECT_REGISTER_ACTIVITY</h2><div translate>\\nORDER.SELECT_REGISTER_ACTIVITY_MSG</div></div><table datatable flex dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" dt-instance=\\\"vm.dtInstance\\\" class=\\\"row-border hover\\\" \\nng-class=\\\"{\\'no-hover-checkbox-table\\': getVariants}\\\"></table></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" class=\\\"border-top\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"vm.selectedRegisterActityId === null\\\" ng-click=\\\"vm.save()\\\">{{\\'GENERAL.SELECT\\' | translate }}</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/directives/nd-site-details/nd-site-details.html\",\"<form name=\\\"siteForm\\\"><md-card class=\\\"mb-16\\\"><md-card-title><md-card-title-text><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\" layout-gt-sm=\\\"row\\\"><span class=\\\"h3\\\" translate=\\\"SITE.DETAILS\\\"></span><div flex></div><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY && !isNewSite\\\"><div layout=\\\"row\\\"><span \\nclass=\\\"label grey-fg\\\" style=\\\"line-height:36px\\\" translate=\\\"SITE.LAST_AUTHENTICATION_DATE\\\"></span> <span \\nclass=\\\"label grey-fg mr-32\\\" style=\\\"line-height:36px\\\">{{ (site.authenticated_at | date:\\'dd-MM-yyyy\\') || \\'-\\' }}</span>\\n</div><div><md-button class=\\\"m-0 pl-0 md-primary\\\" ng-click=\\\"submitShopifyForm()\\\" ng-disabled=\\\"saving\\\" \\ntranslate=\\\"SITE.SHOPIFY_CONNECT\\\"></md-button></div></div><div layout=\\\"row\\\" \\nng-if=\\\"!isNewSite && (site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US)\\\">\\n<div layout=\\\"row\\\"><md-button class=\\\"m-0 md-primary\\\" ng-click=\\\"connect()\\\" ng-disabled=\\\"saving\\\" \\ntranslate=\\\"SITE.AMAZON_CONNECT\\\"></md-button></div></div><div layout=\\\"row\\\" \\nng-if=\\\"!isNewSite && (site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAVIA)\\\"><div layout=\\\"row\\\"><md-button\\n class=\\\"m-0 md-primary\\\" ng-click=\\\"connect()\\\" ng-disabled=\\\"saving\\\" translate=\\\"SITE.CONNECT\\\"></md-button></div></div>\\n</div></md-card-title-text></md-card-title><md-card-content id=\\\"nd-site-details\\\"><div flex layout=\\\"column\\\"><div \\nclass=\\\"did-you-know yellow mb-10\\\" flex layout=\\\"column\\\" layout-align=\\\"start center\\\" layout-gt-xs=\\\"row\\\" \\nng-if=\\\"site.authenticated_at === null && site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\"><div \\nclass=\\\"did-you-know-message\\\" flex><div class=\\\"mb-8 center-vertically\\\"><md-icon class=\\\"m-0 pr-32\\\" \\nmd-font-icon=\\\"icon-alert\\\"></md-icon><span translate=\\\"SITE.UNAUTHENTICATED_SHOPIFY_TITLE\\\"></span></div><div \\nclass=\\\"secondary-text\\\" translate=\\\"SITE.UNAUTHENTICATED_SHOPIFY_MESSAGE\\\"></div></div></div><div \\nclass=\\\"did-you-know yellow mb-10\\\" flex layout=\\\"column\\\" layout-align=\\\"start center\\\" layout-gt-xs=\\\"row\\\" \\nng-if=\\\"site.reauthentication_required === true && site.authenticated_at !== null && site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\">\\n<div class=\\\"did-you-know-message\\\" flex><div class=\\\"mb-8 center-vertically\\\"><md-icon class=\\\"m-0 pr-32\\\" \\nmd-font-icon=\\\"icon-alert\\\"></md-icon><span translate=\\\"SITE.REAUTHENTICATION_SHOPIFY_TITLE\\\"></span></div><div \\nclass=\\\"secondary-text\\\" translate=\\\"SITE.REAUTHENTICATION_SHOPIFY_MESSAGE\\\"></div></div></div><div \\nclass=\\\"did-you-know green mb-20\\\" flex=\\\"100\\\" \\nng-if=\\\"isDateWithinLast10Minutes(site.authenticated_at) && site.reauthentication_required === false && site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nclass=\\\"green-fg\\\" md-font-icon=\\\"icon-check-circle\\\"></md-icon></div><div flex layout=\\\"column\\\"><span class=\\\"pl-5\\\">\\n{{\\'SITE.SHOPIFY_CONNECTED_SUCCESSFULLY\\' | translate}}</span></div></div></div></div><div flex layout=\\\"column\\\"><div \\nflex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" ng-if=\\\"isNewSite\\\">\\n<md-input-container class=\\\"mb-0 pr-10 no-md-errors-spacer h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-cog\\\"></md-icon><label translate=\\\"SITE.ECOMMERCE_PLATFORMS\\\">Platforms</label><md-select \\nclass=\\\"platform-multiselector\\\" ng-change=\\\"checkFields()\\\" ng-model=\\\"site.platform\\\" required><md-option \\nng-repeat=\\\"(key, name) in ECOMMERCE_PLATFORMS_NAMES_TO_LIST\\\" ng-value=\\\"ECOMMERCE_PLATFORMS_TO_LIST[key]\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-ecommerce-icon class=\\\"mr-8\\\" platform=\\\"ECOMMERCE_PLATFORMS_TO_LIST[key]\\\">\\n</nd-ecommerce-icon><span flex=\\\"100\\\">{{name}}</span></div></md-option></md-select></md-input-container></div><div \\nflex=\\\"100\\\" flex-gt-sm=\\\"100\\\" layout=\\\"row\\\"><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\"><label translate=\\\"GENERAL.NAME\\\">Name</label>\\n<md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-laptop\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.name\\\" required type=\\\"text\\\">\\n</md-input-container></div></div><md-input-container class=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><md-switch class=\\\"green\\\" has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" \\nng-change=\\\"enabledChanged()\\\" ng-model=\\\"site.enabled\\\">{{ (site.enabled ? \\'SITE.ENABLED\\' : \\'SITE.DISABLED\\') | translate}}\\n</md-switch></md-input-container><md-input-container class=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"showAutoServeOrder(site)\\\"><md-switch class=\\\"green\\\" \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.auto_serve_order\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{ \\'SITE.AUTO_SERVE_ORDER\\' | translate}}<md-icon class=\\\"ml-5\\\" \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'SITE.AUTO_SERVE_ORDER_MESSAGE\\' | translate}}</md-tooltip>\\n</md-icon></div></md-switch></md-input-container><div class=\\\"no-padding\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\">\\n<md-input-container class=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"showSyncStockOnly(site)\\\"><md-switch class=\\\"green\\\" \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.sync_stock_only\\\">\\n{{ \\'SITE.SYNC_STOCK_ONLY\\' | translate}}</md-switch></md-input-container></div><div class=\\\"no-padding\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-input-container class=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"showSyncStockOnly(site)\\\"><md-switch class=\\\"green\\\" \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.consider_pending_transfer_stock\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{ \\'SITE.CONSIDER_PENDING_TRANSFER_STOCK\\' | translate}}<md-icon class=\\\"ml-5\\\" \\nmd-font-icon=\\\"icon-information-outline\\\" \\nng-click=\\\"showAlert(\\'SITE.CONSIDER_PENDING_TRANSFER_STOCK\\',\\'SITE.CONSIDER_PENDING_TRANSFER_STOCK_MESSAGE\\',$event)\\\">\\n</md-icon></div></md-switch></md-input-container></div><div class=\\\"no-padding\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"column\\\"><md-input-container class=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"showSyncStockOnly(site)\\\"><md-switch class=\\\"green\\\" \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.consider_pending_purchase_stock\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{ \\'SITE.CONSIDER_PENDING_PURCHASE_STOCK\\' | translate}}<md-icon class=\\\"ml-5\\\" \\nmd-font-icon=\\\"icon-information-outline\\\" \\nng-click=\\\"showAlert(\\'SITE.CONSIDER_PENDING_PURCHASE_STOCK\\',\\'SITE.CONSIDER_PENDING_PURCHASE_STOCK_MESSAGE\\',$event)\\\">\\n</md-icon></div></md-switch></md-input-container></div></div></div></md-card-content></md-card><md-card class=\\\"mb-16\\\">\\n<md-card-title><md-card-title-text><div layout=\\\"column\\\" layout-align=\\\"start start\\\" layout-gt-sm=\\\"row\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"SITE.PRINCIPAL_SETTINGS\\\"></span> <span flex></span></div></md-card-title-text></md-card-title>\\n<md-card-content id=\\\"nd-site-details\\\"><div flex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><div \\nclass=\\\"did-you-know mb-10\\\" flex=\\\"100\\\" layout=\\\"column\\\" layout-align=\\\"start center\\\" layout-gt-md=\\\"row\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY && !isNewSite\\\"><div \\nclass=\\\"pt-4 mb-4 did-you-know-message\\\" flex><div class=\\\"mb-8 center-vertically\\\"><md-icon class=\\\"m-0 pr-32\\\" \\nmd-font-icon=\\\"icon-information-outline\\\"></md-icon><span translate=\\\"SITE.SHOPIFY_WARNING_TITLE\\\"></span></div><div \\nclass=\\\"secondary-text\\\" translate=\\\"SITE.SHOPIFY_WARNING_BODY\\\"></div></div></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"column\\\"><md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-store\\\"></md-icon><label translate=\\\"SITE.WAREHOUSES\\\">Warehouses</label><md-select \\nclass=\\\"warehouse-multiselector\\\" md-on-close=\\\"searchWarehouse = \\'\\'\\\" md-on-open=\\\"onSelectorOpen()\\\" multiple=\\\"multiple\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" ng-model=\\\"site.warehouses\\\" required>\\n<md-select-header class=\\\"demo-select-header\\\"><input class=\\\"demo-header-searchbox md-text\\\" \\nmaxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"searchWarehouse\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\ntype=\\\"search\\\"></md-select-header><md-optgroup><md-option \\nng-repeat=\\\"warehouse in warehouses | filter: searchWarehouse | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\">\\n{{warehouse.name}}</md-option></md-optgroup></md-select></md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"column\\\" ng-if=\\\"showWarehouse()\\\"><md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-store\\\"></md-icon><label translate=\\\"SITE.WAREHOUSE\\\">Warehouses\\n</label><md-select ng-model=\\\"site.warehouse\\\" required><md-option ng-repeat=\\\"warehouse in warehouses | orderBy: \\'name\\'\\\" \\nng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select></md-input-container></div><div flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\\\">\\n<md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.AUTO_FULFILLMENT_POLICY\\\"></label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"/assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\"></md-icon><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.auto_fulfillment_policy\\')\\\" \\nng-model=\\\"site.auto_assign_custom_warehouse_policy\\\"><md-option ng-if=\\\"policy.show\\\" \\nng-repeat=\\\"policy in fulfillmentPolicies\\\" ng-value=\\\"policy.value\\\">{{policy.name | translate}}</md-option></md-select>\\n<md-icon class=\\\"ml-5 icon cursor-pointer\\\" md-font-icon=\\\"icon-information-outline\\\" \\nng-click=\\\"openInfoDialog(warehouses, site.warehouses)\\\" ng-hide=\\\"!showInfoDialogForFulfillmentPolicies()\\\"></md-icon>\\n</md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\\\">\\n<md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.AUTO_ASSIGN_REPLENISHMENT_WAREHOUSE_POLICY\\\"></label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-package-variant-closed\\\"></md-icon><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" \\nng-model=\\\"site.auto_assign_replenishment_warehouse_policy\\\"><md-option \\nng-repeat=\\\"(key, value) in replenishmentWarehousePolicy\\\" ng-value=\\\"value\\\">{{\\\"SITE.\\\" + key | translate}}</md-option>\\n</md-select></md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_US || site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_AMAZON_EUROPE_ES\\\">\\n<md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.RETURN_MANAGEMENT_POLICY\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-box-download\\\"></md-icon>\\n<md-select ng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" \\nng-model=\\\"site.return_management_policy\\\"><md-option ng-repeat=\\\"(key, value) in returnManagementPolicy\\\" \\nng-value=\\\"value\\\">{{\\\"SITE.\\\" + key | translate}}</md-option></md-select></md-input-container></div><div flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\" ng-if=\\\"showDefaultPaymentMethod()\\\"><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-credit-card\\\">\\n</md-icon><label translate=\\\"SITE.DEFAULT_PAYMENT_METHOD\\\">Default payment method</label><md-select \\nng-model=\\\"site.default_payment_method\\\"><md-option ng-value=\\\"null\\\" translate=\\\"SITE.WITHOUT_DEFAULT_PAYMENT_METHOD\\\">\\n</md-option><md-option ng-repeat=\\\"paymentMethod in paymentMethods | orderBy: \\'position\\'\\\" ng-value=\\\"paymentMethod.id\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"{{paymentMethod.icon}}\\\" \\nng-if=\\\"paymentMethod.icon\\\" style=\\\"color:#{{paymentMethod.foreground_color}}\\\"></md-icon><span class=\\\"text-truncate\\\" \\nflex>{{paymentMethod.name}}</span></div></md-option></md-select><md-icon class=\\\"ml-5 icon\\\" \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip md-direction=\\\"left\\\">\\n{{\\'SITE.DEFAULT_PAYMENT_METHOD_MESSAGE\\' | translate }}</md-tooltip></md-icon></md-input-container></div><div \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" ng-if=\\\"showTicketConfig()\\\"><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"SITE.TICKET_CONFIGURATION\\\">Register\\n</label><md-icon aria-hidden=\\\"true\\\" class=\\\"icon\\\" md-font-icon=\\\"icon-receipt\\\" role=\\\"img\\\"></md-icon><md-select \\nng-model=\\\"site.ticket_configuration\\\" required><md-option \\nng-repeat=\\\"ticketConfiguration in ticketConfigurations | orderBy: \\'name\\'\\\" ng-value=\\\"ticketConfiguration.id\\\">\\n{{ticketConfiguration.name}}</md-option></md-select></md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nlayout=\\\"column\\\" ng-if=\\\"showSerialNumber()\\\"><md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"SITE.SERIAL_NUMBER\\\">Serial Number</label><md-icon aria-hidden=\\\"true\\\" class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-numeric\\\" role=\\\"img\\\"></md-icon><md-select ng-model=\\\"site.serial_number_type\\\" required><md-option \\nng-repeat=\\\"serialNumberType in serialNumberTypes | serialNumberTypeFilter: SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_POS_ORDER\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option></md-select></md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\"><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64 md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"SITE.PRICING_TIER\\\">\\nPricing tier</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-layers\\\"></md-icon><md-select \\nmd-on-close=\\\"searchWarehouse = \\'\\'\\\" md-on-open=\\\"onSelectorOpen()\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" ng-model=\\\"site.pricing_tier\\\" required>\\n<md-select-header><input class=\\\"md-text\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"searchPricingTier\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-optgroup><md-option \\nng-repeat=\\\"pricingTier in pricingTiers | filter: searchPricingTier | orderBy: \\'name\\'\\\" ng-value=\\\"pricingTier.id\\\">\\n{{pricingTier.name}}</md-option></md-optgroup></md-select></md-input-container></div><div class=\\\"calendar-div\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"row\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/calendar-start-outline.fde1d4eb.svg\\\"></md-icon>\\n<md-input-container class=\\\"no-md-errors-spacer mb-0 h-64 md-block\\\" flex><label translate=\\\"SITE.DISCOUNT_START_DATE\\\">\\nDiscount start date</label><md-datepicker has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" \\nmd-hide-icons=\\\"calendar\\\" md-max-date=\\\"site.discount_end_date\\\" ng-model=\\\"site.discount_start_date\\\"></md-datepicker>\\n</md-input-container></div><div class=\\\"calendar-div\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"row\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/calendar-end-outline.72090abe.svg\\\"></md-icon><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64 md-block\\\" flex><label translate=\\\"SITE.DISCOUNT_END_DATE\\\">Discount end date</label>\\n<md-datepicker has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" md-hide-icons=\\\"calendar\\\" \\nmd-min-date=\\\"site.discount_start_date\\\" ng-model=\\\"site.discount_end_date\\\"></md-datepicker></md-input-container></div>\\n<div class=\\\"calendar-div\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"row\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/calendar-start-outline.fde1d4eb.svg\\\"></md-icon><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64 md-block\\\" flex><label translate=\\\"SITE.DISCOUNT_START_DATE\\\">Discount start date\\n</label><md-datepicker has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" md-hide-icons=\\\"calendar\\\" \\nng-model=\\\"site.discount_start_datetime\\\"></md-datepicker></md-input-container></div><div class=\\\"calendar-div\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"row\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\">\\n<md-icon md-font-icon md-svg-src=\\\"assets/images/custom-material-design-icons/calendar-end-outline.72090abe.svg\\\"></md-icon>\\n<md-input-container class=\\\"no-md-errors-spacer mb-0 h-64 md-block\\\" flex><label translate=\\\"SITE.DISCOUNT_END_DATE\\\">\\nDiscount end date</label><md-datepicker has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" \\nmd-hide-icons=\\\"calendar\\\" ng-model=\\\"site.discount_end_datetime\\\"></md-datepicker></md-input-container></div></div>\\n</md-card-content></md-card><md-card class=\\\"mb-16\\\" ng-if=\\\"hasAdvancedConfiguration()\\\"><md-card-title>\\n<md-card-title-text><div layout=\\\"column\\\" layout-align=\\\"start start\\\" layout-gt-sm=\\\"row\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"SITE.ADVANCED_SETTINGS\\\"></span> <span flex></span></div></md-card-title-text></md-card-title>\\n<md-card-content id=\\\"nd-site-details\\\"><div flex layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" layout=\\\"column\\\" ng-if=\\\"showUrlStock()\\\"><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\nclass=\\\"ng-scope md-required\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\" \\ntranslate=\\\"SITE.URL_STOCKS\\\"></label><label class=\\\"ng-scope md-required\\\" \\nng-if=\\\"site.platform !== ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\" translate=\\\"SITE.URL\\\"></label><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-web\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.url\\\" required type=\\\"text\\\">\\n</md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\"><md-input-container \\nclass=\\\"md-icon-float md-block m-0 no-md-errors-spacer\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-switch class=\\\"green\\\" \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.thumbnail_always_in_first_position\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\">{{ \\'SITE.THUMBNAIL_ALWAYS_IN_FIRST_POSITION\\' | translate}}<md-icon \\nclass=\\\"ml-5\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip>\\n{{ \\'SITE.THUMBNAIL_ALWAYS_IN_FIRST_POSITION_MESSAGE\\' | translate}}</md-tooltip></md-icon></div></md-switch>\\n</md-input-container></div><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\"><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.URL_PRODUCTS\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-web\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.url_products\\\" required type=\\\"text\\\">\\n</md-input-container></div><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\"><label \\ntranslate=\\\"SITE.SCHEDULED_HOURS_PRODUCTS\\\">Scheduled hours</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-timer\\\">\\n</md-icon><input has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" \\nng-model=\\\"site.scheduled_hours_products\\\" type=\\\"number\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\"><label \\ntranslate=\\\"SITE.SCHEDULED_HOURS_STOCK\\\">Scheduled hours</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-timer\\\">\\n</md-icon><input has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.scheduled_hours\\\" \\ntype=\\\"number\\\"></md-input-container><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.MARKETPLACE_PLATFORM_MIRAKL_ECI\\\"><label \\ntranslate=\\\"SITE.ECI_API_KEY\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-key-variant\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.api_key\\\" required type=\\\"text\\\"><md-icon\\n class=\\\"md-icon-button clickable-icon\\\" md-font-icon=\\\"icon-information-outline\\\" ng-click=\\\"showEciInfo()\\\" \\ntitle=\\\"{{\\'SITE.CLICK_INFO\\' | translate}}\\\"></md-icon></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE\\\"><label translate=\\\"SITE.CONSUMER_KEY\\\">\\n</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-key-variant\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.consumer_key\\\" required type=\\\"text\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE\\\"><label \\ntranslate=\\\"SITE.CONSUMER_SECRET\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-key-variant\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.consumer_secret\\\" required type=\\\"text\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO || site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\">\\n<label translate=\\\"SITE.KEY\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-key-variant\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.key\\\" required type=\\\"text\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO\\\"><label \\ntranslate=\\\"SITE.SCHEDULED_HOURS\\\">Scheduled hours</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-timer\\\"></md-icon>\\n<input has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.scheduled_hours\\\" type=\\\"number\\\">\\n</md-input-container><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_CUSTOM_CSV\\\"><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64 md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.CSV_DELIMITER_CHARACTER\\\">Delimiter character</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-code-tags\\\"></md-icon><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" ng-model=\\\"site.csv_delimiter\\\"><md-option \\nng-repeat=\\\"delimiter in delimiters track by $index\\\" ng-value=\\\"delimiter.value\\\">{{delimiter.name | translate}} <strong>\\n(\\\"{{delimiter.character}}\\\")</strong></md-option></md-select></md-input-container></div><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_ZALANDO\\\"><md-checkbox \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.meta.receive_returns_automatically\\\">\\n{{\\'SITE.ZALANDO_MARK_RECEIVE_RETURNS_AUTOMATICALLY\\' | translate}}</md-checkbox></md-input-container><md-input-container\\n class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE\\\"><label \\ntranslate=\\\"SITE.WOOCOMMERCE_BRAND_NAME\\\">Nombre del atributo marca en WooCommerce</label><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-web\\\"></md-icon><input has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" \\nng-model=\\\"site.meta.brand_category_name\\\" placeholder=\\\"Brand\\\" type=\\\"text\\\" value=\\\"Brand\\\"><md-icon \\nclass=\\\"md-icon-button clickable-icon\\\" md-font-icon=\\\"icon-information-outline\\\" ng-click=\\\"showBrandInfo()\\\" \\ntitle=\\\"{{\\'SITE.CLICK_INFO\\' | translate}}\\\"></md-icon></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_WOOCOMMERCE\\\"><md-checkbox \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.sync_product_attributes\\\">\\n{{\\'SITE.SYNC_PRODUCT_ATTRIBUTES\\' | translate}}</md-checkbox></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><label \\ntranslate=\\\"SITE.PRESTASHOP_COMPOSITION_NAME\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-web\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" ng-model=\\\"site.meta.composition_name\\\" type=\\\"text\\\">\\n<md-icon class=\\\"md-icon-button clickable-icon\\\" md-font-icon=\\\"icon-information-outline\\\" \\nng-click=\\\"showCompositionInfo()\\\" title=\\\"{{\\'SITE.CLICK_INFO\\' | translate}}\\\"></md-icon></md-input-container>\\n<md-input-container class=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-pencil\\\"></md-icon><label translate=\\\"PRODUCT.ATTRIBUTE_CATEGORY\\\">Warehouses</label><md-select \\nclass=\\\"attribute-categories-multiselector\\\" md-on-close=\\\"searchAttributeCategory = \\'\\'\\\" md-on-open=\\\"onSelectorOpen()\\\" \\nmultiple=\\\"multiple\\\" ng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" \\nng-model=\\\"site.attribute_categories\\\"><md-select-header class=\\\"demo-select-header\\\"><input \\nclass=\\\"demo-header-searchbox md-text\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" ng-model=\\\"searchAttributeCategory\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-optgroup><md-option \\nng-repeat=\\\"attributeCategory in attributeCategories | filter: searchAttributeCategory | orderBy: \\'name\\'\\\" \\nng-value=\\\"attributeCategory.id\\\">{{attributeCategory.name}}</md-option></md-optgroup></md-select></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.MIN_STOCK_THRESHOLD\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-sync-off\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" min=\\\"0\\\" ng-model=\\\"site.min_stock_threshold\\\" \\ntype=\\\"number\\\"> <small class=\\\"secondary-text\\\">{{\\'SITE.MIN_STOCK_THRESHOLD_INFO\\' | translate }}</small>\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"SITE.SAFETY_STOCK\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-sync-off\\\">\\n</md-icon><input has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" min=\\\"0\\\" \\nng-model=\\\"site.safety_stock\\\" type=\\\"number\\\"> <small class=\\\"secondary-text\\\">{{\\'SITE.SAFETY_STOCK_INFO\\' | translate }}\\n</small></md-input-container><md-input-container class=\\\"md-icon-float md-block no-md-errors-spacer mb-0 h-64\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"SITE.TIMEZONE\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-clock\\\">\\n</md-icon><md-select has-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" md-on-open=\\\"getTimezones()\\\" \\nng-model=\\\"site.timezone\\\"><md-select-header><input class=\\\"md-text\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" \\nng-model=\\\"searchTimezone\\\" placeholder=\\\"{{\\'SITE.SELECT_A_TIMEZONE\\' | translate}}\\\" type=\\\"search\\\"></md-select-header>\\n<md-option id=\\\"opt\\\" ng-if=\\\"timezones.length === 0\\\" ng-value=\\\"site.timezone\\\">{{ site.timezone }}</md-option><md-option \\nng-repeat=\\\"timezone in timezones | filter: searchTimezone\\\" ng-value=\\\"timezone\\\">{{ timezone }}</md-option></md-select>\\n</md-input-container><div flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"column\\\" \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><md-input-container \\nclass=\\\"no-md-errors-spacer mb-0 h-64\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"SITE.AUTO_MANAGE_PRODUCT_VISIBILITY_POLICY\\\"></label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"/assets/images/custom-material-design-icons/store-outline.583690c9.svg\\\"></md-icon><md-select \\nng-disabled=\\\"!Session.hasPermission(\\'ecommerce.sites.site.details.update\\')\\\" \\nng-model=\\\"site.auto_manage_product_visibility_policy\\\"><md-option ng-if=\\\"policy.show\\\" \\nng-repeat=\\\"policy in autoManageProductVisibilityPolicies\\\" ng-value=\\\"policy.value\\\">{{policy.name | translate}}\\n</md-option></md-select><md-icon class=\\\"ml-5 icon cursor-pointer\\\" md-font-icon=\\\"icon-information-outline\\\" \\nng-click=\\\"openInfoDialog(warehouses, site.warehouses)\\\" \\nng-hide=\\\"site.auto_assign_custom_warehouse_policy !== customWarehousePolicy[\\'AUTO_ASSIGN_CUSTOM_WAREHOUSE_POLICY_WAREHOUSE_ID_SELECTED_BY_SITE\\']\\\">\\n</md-icon></md-input-container></div><nd-contracted-plan-limit-alert-box \\ncontracted-plan-limit=\\\"cplData.contractedPlanLimitsDict[site.platform]\\\" flex=\\\"100\\\">\\n</nd-contracted-plan-limit-alert-box></div></md-card-content></md-card><div class=\\\"full-width\\\" layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-disabled=\\\"!siteForm.$dirty\\\" translate=\\\"GENERAL.CANCEL\\\" \\nui-sref=\\\"app.ecommerce.sites\\\"></md-button><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"save()\\\" \\nng-disabled=\\\"!siteForm.$dirty || siteForm.$invalid\\\" translate=\\\"GENERAL.SAVE\\\"></md-button></div></form><md-card \\nclass=\\\"mb-16\\\" has-permission=\\\"ecommerce.sites.site.details.test\\\" ng-if=\\\"showTests()\\\"><md-card-title flex>\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><h3 class=\\\"text-bold\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'SITE.TEST\\' | translate}}</span><md-icon class=\\\"ml-5 black-fg\\\" \\nmd-font-icon=\\\"icon-information-outline\\\"><md-tooltip md-direction=\\\"right\\\">{{\\'SITE.TEST_SIDE_MESSAGE\\' | translate }}\\n</md-tooltip></md-icon></div></h3><span flex></span><div has-permission=\\\"ecommerce.sites.site.details.update\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"testSite()\\\" ng-disabled=\\\"site.testing || !siteForm.$valid\\\" ng-if=\\\"showTests()\\\" \\ntranslate=\\\"GENERAL.TEST\\\"></md-button></div></div></md-card-title-text></md-card-title><md-card-content><div \\nclass=\\\"md-padding\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap layout-xs=\\\"column\\\" \\nng-if=\\\"site.last_test && !site.testing\\\"><div flex=\\\"25\\\" ng-repeat=\\\"testResult in site.test_results\\\"><div layout=\\\"row\\\">\\n<md-icon class=\\\"mr-5 ml-0 green-fg\\\" md-font-icon=\\\"icon-check-circle\\\" ng-if=\\\"testResult.result == 1\\\"></md-icon><button \\nng-click=\\\"showTestErrors(testResult.error_message, site.platform.name)\\\" ng-if=\\\"testResult.result == 0\\\"><md-icon \\nclass=\\\"mr-5 ml-0 red-fg\\\" md-font-icon=\\\"icon-close-circle-outline\\\"></md-icon></button> <span \\ntranslate=\\\"SITE.{{testResult.code}}\\\"></span></div></div></div><div layout=\\\"column\\\" \\nng-if=\\\"!site.last_test && !site.testing\\\">{{site.test_results}} <em class=\\\"secondary-text\\\" \\ntranslate=\\\"SITE.NEVER_TESTED\\\"></em></div><div layout=\\\"column\\\" layout-align=\\\"center center\\\" ng-if=\\\"site.testing\\\"><span \\nclass=\\\"m-5\\\" translate=\\\"SITE.TESTING\\\"></span><md-progress-circular></md-progress-circular></div></div></md-card-content>\\n</md-card>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/site/dialogs/sync-order-from-site/sync-order-from-site.html\",\"<md-dialog id=\\\"sync-order-from-site-dialog\\\"><md-dialog-content style=\\\"width:500px\\\"><h2 translate=\\\"SITE.SYNC_ORDER\\\" \\nclass=\\\"mb-32\\\">Import products</h2><md-input-container flex class=\\\"md-block mt-30 mb-0\\\"><label>\\n{{\\'ORDER.ORIGIN_CODE\\' | translate}}</label><input ng-model=\\\"vm.originId\\\" autocomplete=\\\"off\\\" md-auto-focus \\nplaceholder=\\\"1432,1246,5443, etc...\\\" type=\\\"text\\\"></md-input-container><md-date-range flex \\nlocalization-map=\\\"vm.mdLocalizationMap\\\" ng-model=\\\"vm.dateRange\\\" placeholder=\\\"{{\\'INVOICES.FILTER_DATES\\' | translate}}\\\" \\nshow-template=\\\"true\\\" class=\\\"date-range-filter\\\"></md-date-range><md-input-container flex class=\\\"md-block mt-30 mb-0\\\">\\n<md-checkbox md-prevent-menu-close=\\\"md-prevent-menu-close\\\" ng-model=\\\"vm.onlyMissingOrders\\\">\\n{{ \\'SITES.SYNC_ONLY_MISSING_ORDERS\\' | translate}}</md-checkbox><md-checkbox \\nmd-prevent-menu-close=\\\"md-prevent-menu-close\\\" ng-model=\\\"vm.onlyWarningOrders\\\">\\n{{ \\'SITES.SYNC_ONLY_WARNING_ORDERS\\' | translate}}</md-checkbox></md-input-container></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">\\n</md-button><md-button ng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" translate=\\\"SITE.IMPORT\\\"></md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/ecommerce/views/sorting/sidenavs/main/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div \\ntranslate=\\\"GENERAL.FILTERS\\\">Filters</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select ng-model=\\\"vm.filterBrands\\\" flex><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_BRANDS\\\">All Brands</md-option><md-option ng-repeat=\\\"brand in vm.brandsList | orderBy: \\'name\\'\\\" \\nng-value=\\\"brand.id\\\">{{brand.name}}</md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder-multiple\\\"></md-icon><md-select ng-model=\\\"vm.filterCategories\\\" \\nng-change=\\\"vm.checkSubcategory(vm.filterCategories)\\\" flex><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_CATEGORIES\\\">All Categories</md-option><md-option \\nng-repeat=\\\"category in vm.categoriesList | orderBy: \\'name\\'\\\" ng-value=\\\"category.id\\\">{{category.name}}</md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder\\\">\\n</md-icon><md-select ng-model=\\\"vm.filterSubcategories\\\" flex><md-option ng-value=\\\"null\\\" \\ntranslate=\\\"PRODUCT.ALL_SUBCATEGORIES\\\">All Subcategories</md-option><md-option \\nng-repeat=\\\"subcategory in vm.subcategoriesList | filter: vm.filterCategories? vm.filterCategories : false | orderBy: \\'name\\'\\\" \\nng-value=\\\"subcategory.id\\\">{{subcategory.name}}</md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select \\nng-model=\\\"vm.filterSeasons\\\" flex><md-option ng-value=\\\"null\\\" translate=\\\"PRODUCT.ALL_SEASONS\\\">All Seasons</md-option>\\n<md-option ng-repeat=\\\"season in vm.seasonsList | orderBy: \\'position\\'\\\" ng-value=\\\"season.id\\\">{{season.name}}</md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" has-permission=\\\"app.ecommerce\\\"><md-icon \\nclass=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-web\\\"></md-icon><md-select ng-model=\\\"vm.filterSites\\\" flex><md-option \\nng-value=\\\"null\\\" translate=\\\"PRODUCT.ALL_SITES\\\">All Sites</md-option><md-option \\nng-repeat=\\\"site in vm.sitesList | orderBy: \\'name\\'\\\" ng-value=\\\"site.id\\\">{{site.name}}</md-option></md-select></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.discountActive\\\"><span \\ntranslate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\"></span></md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.isNoos\\\"><span translate=\\\"PRODUCT.IS_NOOS\\\"></span></md-checkbox></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.duplicatedProducts\\\"><span \\ntranslate=\\\"PRODUCT.DUPLICATED\\\"></span></md-checkbox></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/verifactu/tabs/details/details.html\",\"<md-card class=\\\"verifactu-details\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\">\\n<span class=\\\"h3\\\" flex>{{\\'VERIFACTU.DETAILS\\' | translate}}</span><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"app.integration_apps.verifactu.details.create\\\" ng-click=\\\"vm.createVeriFactuApp()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>\\n{{\\'VERIFACTU.CREATE_NEW_VERIFACTU\\' | translate}}</div></md-button></div></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"full-height no-padding\\\"><div class=\\\"no-data-area\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"!vm.verifactuIntegrationInstalledApps.length\\\"><span translate=\\\"VERIFACTU.NO_VERIFACTU_DATA_TITLE\\\"></span> <span \\nclass=\\\"secondary-text mt-8\\\" translate=\\\"VERIFACTU.NO_VERIFACTU_DATA_MSG\\\"></span></div><md-tabs md-dynamic-height \\nmd-selected=\\\"vm.selectedTabIndex\\\" md-border-bottom ng-if=\\\"vm.verifactuIntegrationInstalledApps.length\\\"><md-tab \\nng-repeat=\\\"viia in vm.verifactuIntegrationInstalledApps\\\"><md-tab-label><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<span>{{viia.getName()}}</span></div></md-tab-label><md-tab-body><nd-verifactu-integration-installed-app-form \\nintegration-installed-app=\\\"viia\\\" fiscal-addresses=\\\"vm.fiscalAddresses\\\"></nd-verifactu-integration-installed-app-form>\\n</md-tab-body></md-tab></md-tabs></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/forms/epos-italy.html\",\"<form ng-cloak><div class=\\\"mt-16\\\" layout=\\\"column\\\"><h2 class=\\\"h2 mt-0 mb-10\\\">{{vm.name}}</h2><span \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{vm.description}}</span></div></form>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/forms/holded.html\",\"<form ng-cloak><div class=\\\"mt-16\\\" layout=\\\"column\\\"><h2 class=\\\"h2 mt-0 mb-10\\\">{{vm.name}}</h2><span \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{vm.description}}</span><md-input-container ng-if=\\\"!vm.showUpgradePlan\\\"><label \\ntranslate=\\\"APPS.HOLDED_API_KEY\\\">Key</label><md-icon class=\\\"icon icon-key font-size-24\\\"></md-icon><input \\ntype=\\\"password\\\" ng-model=\\\"vm.app.instance.key\\\"></md-input-container><md-switch \\nng-model=\\\"vm.app.instance.sync_invoices\\\" class=\\\"mt-0 mb-16\\\">{{ \\'APPS.HOLDED_SEND_INVOICES\\' | translate }}</md-switch>\\n<md-switch ng-model=\\\"vm.app.instance.sync_pos_orders\\\" class=\\\"mt-0 mb-16\\\">\\n{{ \\'APPS.HOLDED_SEND_STORE_SALES\\' | translate }}</md-switch><md-switch ng-model=\\\"vm.app.instance.sync_site_orders\\\" \\nclass=\\\"mt-0 mb-16\\\">{{ \\'APPS.HOLDED_SEND_ECOMMERCE_ORDERS\\' | translate }}<div layout=\\\"row\\\" class=\\\"secondary-text\\\" \\nstyle=\\\"margin-top: -8px\\\">{{ \\'APPS.HOLDED_SEND_ECOMMERCE_ORDERS_SECONDARY\\' | translate }}</div></md-switch><md-switch \\nng-model=\\\"vm.app.instance.sync_amazon\\\" class=\\\"mt-0 mb-16\\\">{{ \\'APPS.HOLDED_SEND_AMAZON_ORDERS\\' | translate }}<div \\nlayout=\\\"row\\\" class=\\\"secondary-text\\\" style=\\\"margin-top: -8px\\\">\\n{{ \\'APPS.HOLDED_SEND_AMAZON_ORDERS_SECONDARY\\' | translate }}</div></md-switch><md-switch \\nng-model=\\\"vm.app.instance.sync_sale_orders_deliveries\\\" class=\\\"mt-0 mb-16\\\">\\n{{ \\'APPS.HOLDED_SEND_WHOLESALE_RECEIPTS\\' | translate }}</md-switch></div></form>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/forms/kubibai.html\",\"<form ng-cloak><div class=\\\"mt-16\\\" layout=\\\"column\\\"><h2 class=\\\"h2 mt-0 mb-10\\\">{{vm.name}}</h2><span \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{vm.description}}</span><md-input-container ng-if=\\\"!vm.showUpgradePlan\\\"><label \\ntranslate=\\\"APPS.KUBIBAI_API_KEY\\\">Key</label><md-icon class=\\\"icon icon-key font-size-24\\\"></md-icon><input \\ntype=\\\"password\\\" ng-model=\\\"vm.app.instance.key\\\"></md-input-container><md-checkbox ng-model=\\\"vm.app.instance.surcharge\\\">\\n{{\\'INVOICE.SURCHARGE_COMPANY_MESSAGE\\' | translate }}</md-checkbox></div></form>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/forms/sage200.html\",\"<form ng-cloak><div class=\\\"mt-16\\\" layout=\\\"column\\\"><h2 class=\\\"h2 mt-0 mb-10\\\">{{vm.name}}</h2><span \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{vm.description}}</span> <span class=\\\"secondary-text mt-0 mb-16\\\" \\ntranslate=\\\"APPS.SAGE_200_TOKEN_HELP\\\"></span><div layout=\\\"column\\\" ng-if=\\\"!vm.showUpgradePlan && vm.app.instance.id\\\" \\nclass=\\\"mb-10\\\"><md-input-container class=\\\"mb-0 token-container\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button\\n class=\\\"md-icon-button input-action-button\\\" ng-click=\\\"vm.copyToClipboard(vm.app.instance.api_token)\\\"><md-icon \\nmd-font-icon=\\\"icon-content-copy\\\"></md-icon><md-tooltip>{{\\'GENERAL.COPY_TO_CLIPBOARD\\' | translate}}</md-tooltip>\\n</md-button><input flex ng-model=\\\"vm.app.instance.api_token\\\" readonly=\\\"readonly\\\"></div></md-input-container></div><div \\nng-if=\\\"!vm.showUpgradePlan\\\"><md-switch ng-model=\\\"vm.app.instance.sync_tickets\\\" class=\\\"mt-0 mb-16\\\">\\n{{ \\'APPS.SAGE_200_SYNC_SALES_TICKETS\\' | translate }}</md-switch><md-switch ng-model=\\\"vm.app.instance.sync_users\\\" \\nclass=\\\"mt-0 mb-16\\\">{{ \\'APPS.SAGE_200_SYNC_USERS\\' | translate }}</md-switch><md-switch \\nng-model=\\\"vm.app.instance.sync_cash_movements\\\" class=\\\"mt-0 mb-16\\\">{{ \\'APPS.SAGE_200_SYNC_CASH_MOVEMENTS\\' | translate }}\\n</md-switch></div></div></form>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/forms/sendcloud.html\",\"<form ng-cloak><div class=\\\"mt-16\\\" layout=\\\"column\\\"><h2 class=\\\"h2 mt-0 mb-10\\\">{{vm.name}}</h2><span \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{vm.description}}</span><div layout=\\\"column\\\" ng-if=\\\"!vm.showUpgradePlan\\\" \\nclass=\\\"mb-10\\\"><md-input-container><label translate=\\\"APPS.PUBLIC_KEY\\\">Public key</label><md-icon \\nclass=\\\"icon icon-key font-size-24\\\"></md-icon><input type=\\\"password\\\" ng-model=\\\"vm.app.instance.public_key\\\">\\n</md-input-container><md-input-container class=\\\"mb-0\\\"><label translate=\\\"APPS.SECRET_KEY\\\">Private key</label><md-icon \\nclass=\\\"icon icon-key font-size-24\\\"></md-icon><input type=\\\"password\\\" ng-model=\\\"vm.app.instance.secret_key\\\">\\n</md-input-container></div><h3 class=\\\"h3 mt-0 mb-10\\\" translate=\\\"APPS.SENDER_ADDRESS_MAPPING\\\"></h3><span \\nclass=\\\"secondary-text mt-0 mb-16\\\" translate=\\\"APPS.ADD_SENDER_ADDRESS_ID\\\"></span><div \\nng-repeat=\\\"warehouse in vm.warehouses\\\" layout=\\\"column\\\" layout-gt-sm=\\\"row\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\"><div class=\\\"pl-0 pr-0\\\"><nd-warehouse-icon class=\\\"mr-5\\\" type=\\\"warehouse.type\\\">\\n</nd-warehouse-icon></div><md-input-container flex><label>{{warehouse.name}}</label><div layout=\\\"row\\\"><input \\ntype=\\\"number\\\" name=\\\"{{warehouse.id}}\\\" min=\\\"0\\\" \\nng-change=\\\"vm.saveWarehouseSenderAddress(\\n                   warehouse.sendcloud_warehouse_sender_address.sender_address, warehouse.id)\\\" \\nng-model-options=\\\"{debounce:500}\\\" ng-model=\\\"warehouse.sendcloud_warehouse_sender_address.sender_address\\\" \\nclass=\\\"text-left\\\"></div></md-input-container></div></div></div></form>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/forms/verifactu.html\",\"<form ng-cloak><div class=\\\"mt-16\\\" layout=\\\"column\\\"><h2 class=\\\"h2 mt-0 mb-10\\\">{{vm.name}}</h2><span \\nclass=\\\"secondary-text mt-0 mb-16\\\">{{vm.description}}</span></div></form>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/dialogs/nd-integration-dialog/nd-integration-dialog.html\",\"<md-dialog id=\\\"integration-dialog\\\" class=\\\"w-500\\\"><md-dialog-content><div class=\\\"mb-16\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between start\\\"><div class=\\\"integration-app-icon\\\"><img src=\\\"{{vm.app.icon}}\\\"></div><md-switch \\nmd-invert ng-if=\\\"vm.app.instance.id\\\" class=\\\"m-0\\\" ng-model=\\\"vm.app.instance.installed\\\"><span \\nng-class=\\\"{\\'green-fg\\': vm.app.instance.installed}\\\">\\n{{(vm.app.instance.installed ? \\\"APPS.APP_INSTALLED\\\" : \\\"APPS.APP_UNINSTALLED\\\") | translate}}</span></md-switch></div>\\n<div ng-include=\\\"vm.getFormFilepath()\\\"></div><nd-upgrade-subscription-plan-banner ng-if=\\\"vm.showUpgradePlan\\\" \\ntitle=\\\"vm.showUpgradePlanTitle\\\" body=\\\"vm.showUpgradePlanBody\\\" source=\\\"\\'app.integration_apps.apps\\'\\\" \\nclick-callback=\\\"vm.cancel()\\\" button-below=\\\"true\\\"></nd-upgrade-subscription-plan-banner>\\n<nd-contracted-plan-limit-alert-box ng-if=\\\"vm.showPlanLimitAlert\\\" contracted-plan-limit=\\\"vm.contractedPlanLimit\\\" \\nflex=\\\"100\\\"></nd-contracted-plan-limit-alert-box></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"vm.disableSaveButton()\\\" class=\\\"md-primary md-raised\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/integration-apps/views/apps/directives/nd-integration-card/nd-integration-card.html\",\"<md-card class=\\\"integration-card p-24 card-height\\\"><md-card-header layout=\\\"row\\\" layout-align=\\\"start\\\" class=\\\"p-0 mb-24\\\">\\n<div class=\\\"integration-app-icon\\\"><img src=\\\"{{app.icon}}\\\"></div><div><h2 class=\\\"h2 mv-5\\\">{{getIntegrationName()}}</h2>\\n<p class=\\\"margin-between-titles secondary-text mv-5\\\">{{getSubType()}}</p><div layout=\\\"row\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start\\\" ng-show=\\\"isBeta()\\\" class=\\\"pr-5\\\"><span class=\\\"text-boxed-square amber\\\" translate=\\\"APPS.IN_BETA\\\">\\nIn beta</span></div><div layout=\\\"row\\\" layout-align=\\\"start\\\" ng-show=\\\"isNotAvailable()\\\" class=\\\"pr-5\\\"><span \\nclass=\\\"text-boxed-square\\\" translate=\\\"APPS.COMING_SOON\\\">Comming soon</span></div><div layout=\\\"row\\\" layout-align=\\\"start\\\" \\nng-show=\\\"isInstalled()\\\" class=\\\"pr-5\\\"><span class=\\\"text-boxed-square green\\\" translate=\\\"APPS.APP_INSTALLED\\\">Installed\\n</span></div><span class=\\\"text-boxed-square background-hidden m-0\\\">&nbsp;</span></div></div></md-card-header>\\n<md-card-content class=\\\"p-0 pb-24\\\"><p class=\\\"secondary-text\\\" ng-bind-html=\\\"getIntegrationDescription()\\\"></p><small \\nng-if=\\\"!isCompatible()\\\" class=\\\"red-fg m-0 ng-scope text-right pb-5\\\" \\ntranslate-values=\\\"{application : getIncompatibleApplication()}\\\" translate=\\\"APPS.NOT_SUPPORTED\\\" style=\\\"\\\"></small>\\n</md-card-content><md-card-footer class=\\\"p-0\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between\\\" layout-wrap><md-button \\nclass=\\\"md-primary\\\" ng-disabled=\\\"!isAvailable() || !isCompatible()\\\" ng-click=\\\"openIntegrationAppDialog()\\\"><div \\nlayout=\\\"row\\\" leyout-align=\\\"center center\\\"><span translate=\\\"APPS.SETTING\\\"></span></div></md-button><a \\nng-if=\\\"hasWebUrl()\\\" href=\\\"{{getWebUrl()}}\\\" target=\\\"_blank\\\"><md-button class=\\\"md-primary\\\">\\n{{\\'APPS.OPEN_NEW_WINDOW\\' | translate:{integration_name: getIntegrationName()} }}</md-button></a></div></md-card-footer>\\n</md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/directives/nd-new-object-option/nd-new-object-option.html\",\"<md-option ng-click=\\\"showNewObjectOptionDialog($event)\\\" class=\\\"md-primary-fg nd-new-object-md-option\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\"></md-icon>{{\\'CONFIGURATION.\\' + optionLabel | translate}}</md-option><div\\n style=\\\"visibility: hidden\\\"><div class=\\\"md-dialog-container\\\" id=\\\"{{\\'objectOptionDialog\\' + apiName}}\\\"><md-dialog \\nclass=\\\"md-padding\\\"><md-dialog-content class=\\\"no-padding\\\" layout=\\\"column\\\" flex><h2 class=\\\"mb-30\\\">\\n{{\\'CONFIGURATION.\\' + dialogTitle | translate}}</h2><span ng-if=\\\"apiName == \\'compositions\\'\\\" \\nclass=\\\"secondaty-text w-400 mb-16\\\" translate=\\\"CONFIGURATION.COMPOSITION_EXPLANATION\\\"></span><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\" ng-if=\\\"apiName != \\'contactGroups\\'\\\"><label translate=\\\"GENERAL.CODE\\\" class=\\\"font-size-16\\\">\\n</label><md-icon class=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input ng-model=\\\"object.code\\\" \\nclass=\\\"font-size-16\\\" autocomplete=\\\"off\\\" md-autofocus ng-keypress=\\\"keypressHandler($event, \\'secondInput\\')\\\">\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0 w-300\\\" ng-if=\\\"apiName != \\'compositions\\'\\\"><label \\ntranslate=\\\"GENERAL.NAME\\\" class=\\\"font-size-16\\\"></label><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon>\\n<input id=\\\"secondInput\\\" class=\\\"font-size-16\\\" ng-model=\\\"object.name\\\" autocomplete=\\\"off\\\" md-autofocus \\nng-keypress=\\\"keypressHandler($event, null)\\\"></md-input-container><div layout=\\\"row\\\" class=\\\"mt-32\\\" \\nng-if=\\\"apiName == \\'compositions\\'\\\"><md-icon class=\\\"icon icon-pencil name font-size-24 mr-10\\\"></md-icon><md-chips flex \\nng-model=\\\"object.name\\\" md-removable=\\\"true\\\" placeholder=\\\"{{placeholder}}\\\" \\nsecondary-placeholder=\\\"{{secondaryPlaceholder}}\\\" md-on-add=\\\"formatComposition($index)\\\"><md-chip-template><strong>\\n{{getChipNumber($chip)}}</strong> <span>{{getChipName($chip)}}</span></md-chip-template></md-chips></div>\\n<md-input-container flex ng-if=\\\"selectedParent\\\" class=\\\"md-block mb-0 w-300\\\"><label class=\\\"font-size-16\\\">\\n{{\\'CONFIGURATION.\\' + parentName | translate}}</label><md-icon class=\\\"icon name font-size-24\\\" ng-class=\\\"parentIcon\\\">\\n</md-icon><input class=\\\"font-size-16\\\" value=\\\"{{selectedParent | codename}}\\\" ng-disabled=\\\"true\\\"></md-input-container>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" class=\\\"no-padding\\\"><md-button ng-click=\\\"cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"saveAndClose()\\\" translate=\\\"GENERAL.CREATE\\\" \\nng-disabled=\\\"apiName != \\'contactGroups\\' && (creating || !object.name || !object.code)\\\">Create</md-button>\\n</md-dialog-actions></md-dialog></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/forms/fiscal-profile-forms/spain-fiscal-profile-form.html\",\"<div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h4 text-bold\\\" \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_SYSTEM\\\"></span></div><p \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_SYSTEM_INFO\\\"></p><span translate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_OPTIONS\\\">\\n</span><ul><li><strong translate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_ASAP\\\"></strong><br><span \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_ASAP_MSG\\\"></span></li><li><strong \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01\\\"></strong><br><span \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01_MSG\\\"></span></li><li><strong \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07\\\"></strong><br><span \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07_MSG\\\"></span></li><li><strong \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SII\\\"></strong><br><span \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SII_MSG\\\"></span></li><li><strong \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_OTHER\\\"></strong><br><span \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_OTHER_MSG\\\"></span></li></ul><form name=\\\"spainFiscalProfileForm\\\">\\n<md-input-container class=\\\"full-width\\\"><label translate=\\\"SPAIN_FISCAL_PROFILE.CHOSE_VERIFACTU_TYPE\\\" \\ndata-translate-values=\\\"{companyName: vm.company.name}\\\"></label><md-select class=\\\"full-width\\\" name=\\\"verifactu_type\\\" \\nrequired ng-model=\\\"vm.fiscalProfile.verifactu_type\\\"><md-option \\nng-value=\\\"vm.SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES.VERIFACTU_TYPE_ASAP\\\" \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_ASAP\\\"></md-option><md-option \\nng-value=\\\"vm.SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01\\\" \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_01\\\"></md-option><md-option \\nng-value=\\\"vm.SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07\\\" \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SI_VERIFACTU_FROM_2027_07\\\"></md-option><md-option \\nng-value=\\\"vm.SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES.VERIFACTU_TYPE_SII\\\" \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_SII\\\"></md-option><md-option \\nng-value=\\\"vm.SPAIN_FISCAL_PROFILE_VERIFACTU_TYPES.VERIFACTU_TYPE_OTHER\\\" \\ntranslate=\\\"SPAIN_FISCAL_PROFILE.VERIFACTU_TYPE_OTHER\\\"></md-option></md-select></md-input-container></form></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/category-tree/category-tree-dialog.html\",\"<md-dialog id=\\\"category-tree-dialog\\\"><md-dialog-content><h2 class=\\\"mb-20\\\">{{\\'CONFIGURATION.CATEGORIES\\' | translate }}\\n</h2><div layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-if=\\\"vm.loading\\\" class=\\\"h-180\\\"><md-progress-circular>\\n</md-progress-circular></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\"><md-input-container md-no-float \\nng-if=\\\"!vm.loading\\\" class=\\\"nd-search-input\\\" flex=\\\"100\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input ng-model=\\\"vm.search\\\" type=\\\"text\\\" ng-model-options=\\\"{debounce:200}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div>\\n<ul class=\\\"mt-30\\\"><li ng-repeat=\\\"category in vm.categories | filter: {\\'filterPath\\': vm.search}\\\"><md-checkbox \\nng-checked=\\\"vm.exists(category)\\\" ng-click=\\\"vm.toggle(category)\\\"><span class=\\\"category-code\\\">{{category.code}}</span> \\n<span class=\\\"category-code\\\">{{category.name}}</span></md-checkbox></li></ul></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\"><a class=\\\"hint mr-5\\\" ng-click=\\\"vm.close()\\\" ui-sref=\\\"app.inventory.configuration.categories\\\" \\ntranslate=\\\"PRODUCT.GO_TO_WEB_CATEGORIES\\\"></a> <span flex></span><md-button class=\\\"md-raised stroked\\\" \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Close</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"vm.close()\\\" translate=\\\"GENERAL.SAVE\\\">Close</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/configuration/dialogs/category-massive-percentage/category-massive-percentage-dialog.html\",\"<md-dialog aria-label=\\\"category_massive_percentage_dialog\\\" style=\\\"max-width: 600px\\\"><form \\nname=\\\"category_massive_percentage_dialog\\\" novalidate><md-dialog-content><div><h2 class=\\\"mb-16 mt-0\\\" \\ntranslate=\\\"CONFIGURATION.CATEGORY_MASSIVE_PERCENTAGE_DIALOG_TITLE\\\"></h2><p \\ntranslate=\\\"CONFIGURATION.CATEGORY_MASSIVE_PERCENTAGE_DIALOG_TEXT\\\"></p><div layout=\\\"row\\\" class=\\\"mt-16\\\" \\nlayout-align=\\\"start center\\\"><md-input-container class=\\\"full-width mb-0\\\"><label \\ntranslate=\\\"CONFIGURATION.ACCUMULATED_PERCENTAGE\\\"></label><input type=\\\"number\\\" ng-model=\\\"vm.loyaltyPercentage\\\" \\nname=\\\"loyaltyPercentage\\\" max=\\\"100\\\" min=\\\"0\\\" required></md-input-container><span>%</span></div></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button ng-click=\\\"vm.save(vm.loyaltyPercentage)\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.loyaltyPercentage === null\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></md-dialog-actions></form>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/importation-wizard-dialog.html\",\"<ms-form-wizard flex id=\\\"importation-wizard\\\"><md-tabs md-dynamic-height md-selected=\\\"vm.selectedIndex\\\" \\nmd-center-tabs=\\\"true\\\"><md-tab><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.selectedIndex==0\\\">1</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.selectedIndex>0\\\"><i class=\\\"icon-check s16\\\"></i></span></span>\\n</md-tab-label><md-tab-body><form name=\\\"wizardStep1\\\" ms-form-wizard-form novalidate class=\\\"pb-0\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div ng-if=\\\"vm.allowToUpload()\\\" class=\\\"h2\\\">{{\\'IMPORT.UPLOAD_FILE\\' | translate}}</div><div \\nng-if=\\\"!vm.allowToUpload()\\\" class=\\\"h2\\\">{{\\'IMPORT.DOWNLOAD_FILE\\' | translate}}</div><div ng-if=\\\"vm.allowToUpload()\\\" \\nclass=\\\"secondary-text mb-16\\\" translate=\\\"IMPORTER.UPLOAD_FILE_SUBHEADER\\\" translate-values=\\\"{url : vm.templateUrl}\\\">\\n{{\\'IMPORTER.UPLOAD_FILE_SUBHEADER\\' | translate}}</div><div id=\\\"product-image-uploader\\\" flex layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" class=\\\"p-5 full-width\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nflow-file-success=\\\"vm.allowToUpload() && vm.onceFileUploaded($message)\\\" \\nflow-file-error=\\\"vm.allowToUpload() && vm.onceFileUploaded($message, true)\\\" \\nflow-file-added=\\\"vm.allowToUpload() && vm.fileAdded($file)\\\"><div class=\\\"drag full-width\\\" \\nng-class=\\\"{\\'readonly\\': !vm.allowToUpload(), \\'drop\\': vm.draggingFile}\\\" flow-drop \\nflow-drag-enter=\\\"vm.draggingFile = true && vm.allowToUpload()\\\" flow-drag-leave=\\\"vm.draggingFile = false\\\" \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\" flex><md-icon ng-if=\\\"!vm.hasFileAttached && vm.allowToUpload()\\\" \\nmd-font-icon=\\\"icon-cloud-upload\\\" class=\\\"s64 hint-text\\\"></md-icon><md-icon \\nng-if=\\\"vm.hasFileAttached && vm.allowToUpload()\\\" md-font-icon=\\\"icon-cloud-check\\\" class=\\\"s64 hint-text\\\"></md-icon>\\n<md-icon ng-if=\\\"vm.hasFileAttached && !vm.allowToUpload()\\\" md-font-icon=\\\"icon-cloud-download\\\" class=\\\"s64 hint-text\\\">\\n</md-icon><span class=\\\"secondary-text m-5\\\" ng-if=\\\"!vm.draggingFile && vm.allowToUpload()\\\">\\n{{\\'IMPORTER.DRAG\\' | translate}} {{\\'IMPORTER.OR\\' | translate}} </span><span class=\\\"secondary-text m-5\\\" \\ntranslate=\\\"IMPORTER.DROP\\\" ng-if=\\\"vm.draggingFile && vm.allowToUpload()\\\">Drop your file to upload it </span><span \\nclass=\\\"secondary-text m-5\\\" ng-if=\\\"!vm.allowToUpload()\\\">{{\\'IMPORTER.DOWNLOAD_TITLE\\' | translate}}</span><div \\nclass=\\\"m-5 mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button ng-if=\\\"vm.hasFileAttached && vm.allowToUpload()\\\" \\nclass=\\\"md-primary no-margin\\\" flow-btn><span translate=\\\"IMPORT.CHANGE_FILE\\\">Change File</span></md-button><md-button \\nng-disabled=\\\"vm.draggingFile\\\" ng-if=\\\"!vm.hasFileAttached && vm.allowToUpload()\\\" class=\\\"md-primary no-margin\\\" flow-btn>\\n<span translate=\\\"IMPORT.SET_FILE\\\">Set File</span></md-button><md-button \\nng-if=\\\"vm.hasFileAttached && !vm.allowToUpload()\\\" class=\\\"md-primary no-margin\\\" ng-click=\\\"vm.downloadImportationFile()\\\">\\n<span translate=\\\"IMPORTER.DOWNLOAD\\\">Download</span></md-button><span class=\\\"secondary-text pl-8\\\" \\nng-if=\\\"vm.allowToUpload()\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div></div></form>\\n</md-tab-body></md-tab><md-tab ng-disabled=\\\"vm.stepDisabled(2)\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\">\\n<span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.importation.status != vm.IMPORTER_STATUS[\\'DONE\\'] && vm.selectedIndex<=1\\\">2</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" \\nng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS[\\'DONE\\'] || vm.selectedIndex>1\\\"><i class=\\\"icon-check s16\\\"></i></span>\\n</span></md-tab-label><md-tab-body><form name=\\\"wizardStep2\\\" ms-form-wizard-form novalidate class=\\\"pb-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><div flex layout=\\\"column\\\" layout-align=\\\"center center\\\"><div class=\\\"h2\\\">\\n{{\\'IMPORT.SELECT_COLUMNS\\' | translate}}</div><div class=\\\"secondary-text mb-16 text-center\\\">\\n{{\\'IMPORTER.SELECT_COLUMNS_SUBHEADER\\' | translate}}</div><nd-columns-selector ng-if=\\\"vm.selectedIndex == 1\\\" \\nclass=\\\"full-width\\\" headers=\\\"vm.fileColumnsRules.headers\\\" rows=\\\"vm.fileColumnsRules.rows\\\" \\nproperties=\\\"vm.fileColumnsRules.properties\\\" callback=\\\"vm.onMandatoryHeadersChange\\\" readonly=\\\"vm.readonly\\\" \\npreset=\\\"vm.importation.selected_properties\\\"></nd-columns-selector><div ng-if=\\\"vm.requiredToAssign\\\" \\nclass=\\\"red-fg text-center\\\">{{\\'IMPORTER.THESE_FIELDS_ARE_REQUIRED\\' | translate}}<br><em>{{vm.requiredToAssign}}</em>\\n</div></div></form></md-tab-body></md-tab><md-tab ng-disabled=\\\"vm.stepDisabled(3)\\\"><md-tab-label><span \\nclass=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.importation.status != vm.IMPORTER_STATUS[\\'DONE\\'] && vm.selectedIndex<=2\\\">3</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" \\nng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS[\\'DONE\\'] || vm.selectedIndex>2\\\"><i class=\\\"icon-check s16\\\"></i></span>\\n</span></md-tab-label><md-tab-body><form id=\\\"preview-form-3\\\" name=\\\"wizardStep3\\\" layout=\\\"column\\\" \\nlayout-align=\\\"start center\\\" ms-form-wizard-form novalidate class=\\\"pb-0\\\"><div class=\\\"h2 mb-16\\\" \\nng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.VALIDATION_DONE\\\">{{\\'IMPORTER.VALIDATION\\' | translate}}</div><div \\nclass=\\\"h2\\\" ng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.VALIDATING\\\">{{\\'IMPORTER.VALIDATING_COLUMNS\\' | translate}}\\n</div><div class=\\\"secondary-text mb-16 text-center\\\" ng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.VALIDATING\\\">\\n{{\\'IMPORTER.VALIDATING_COLUMNS_MSG\\' | translate}}</div><div layout=\\\"column\\\" layout-align=\\\"center center\\\" flex>\\n<md-progress-circular class=\\\"m-8\\\" ng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.VALIDATING\\\">\\n</md-progress-circular><h1 ng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.PENDING_TO_VALIDATE\\\"></h1><div \\nclass=\\\"did-you-know green w-500 animate-fade-in-out\\\" \\nng-if=\\\"(vm.importation.status == vm.IMPORTER_STATUS.VALIDATION_DONE || vm.importation.status == vm.IMPORTER_STATUS.DONE) && !vm.validationErrors\\\">\\n<div layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-check-circle\\\" class=\\\"green-fg\\\"></md-icon><div layout=\\\"column\\\" flex><span \\nclass=\\\"did-you-know-title\\\">{{\\'IMPORTER.VALIDATED_MESSAGE_TITLE\\' | translate}}</span> <span \\nclass=\\\"did-you-know-message\\\" translate=\\\"IMPORTER.VALIDATED_MESSAGE_MSG\\\"></span></div></div></div><div layout=\\\"column\\\" \\nclass=\\\"animate-fade-in-out\\\" \\nng-if=\\\"(vm.importation.status == vm.IMPORTER_STATUS.VALIDATION_DONE || vm.importation.status == vm.IMPORTER_STATUS.DONE) && vm.validationErrors\\\">\\n<div class=\\\"did-you-know red full-width\\\"><div layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert-octagon\\\" class=\\\"red-fg\\\">\\n</md-icon><div layout=\\\"column\\\" flex><span class=\\\"did-you-know-title\\\">{{\\'IMPORTER.ERRORS_MESSAGE_TITLE\\' | translate}}\\n</span> <span class=\\\"did-you-know-message\\\" translate=\\\"IMPORTER.ERRORS_MESSAGE_MSG\\\"></span></div></div></div><table \\nclass=\\\"dataTable row-border hover full-width\\\" \\nng-if=\\\"(vm.importation.status == vm.IMPORTER_STATUS.VALIDATION_DONE || vm.importation.status == vm.IMPORTER_STATUS.DONE) && vm.selectedIndex == 2 && vm.validationErrors\\\" \\ndatatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></div></div>\\n</form></md-tab-body></md-tab><md-tab ng-disabled=\\\"vm.stepDisabled(4)\\\"><md-tab-label><span \\nclass=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.importation.status != vm.IMPORTER_STATUS.DONE && vm.selectedIndex<=3\\\">4</span> <span \\nclass=\\\"ms-form-wizard-step-number green-bg\\\" ng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.DONE\\\"><i \\nclass=\\\"icon-check s16\\\"></i></span></span></md-tab-label><md-tab-body><form id=\\\"preview-form-4\\\" name=\\\"wizardStep4\\\" \\nms-form-wizard-form novalidate class=\\\"pb-0\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><div ng-if=\\\"vm.readonly\\\" \\nclass=\\\"did-you-know full-width mb-20 w-500\\\"><div layout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-eye\\\" class=\\\"blue-fg\\\">\\n</md-icon><div layout=\\\"column\\\" flex><span class=\\\"did-you-know-title\\\">{{\\'IMPORTER.READ_ONLY_TITLE\\' | translate}}</span> \\n<span class=\\\"did-you-know-message\\\" translate=\\\"IMPORTER.READ_ONLY_MSG\\\"></span></div></div></div><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" flex ng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.IN_PROGRESS\\\"><div class=\\\"h2\\\">\\n{{\\'IMPORTER.IMPORTING_PRODUCTS\\' | translate}} {{vm.importation.total_items}}/{{vm.importation.total_items_in_file}}\\n</div><div class=\\\"secondary-text mb-16 text-center\\\" translate=\\\"IMPORTER.IMPORTING_PRODUCTS_MSG\\\"></div><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\" flex><md-progress-circular \\nng-if=\\\"vm.importation.total_items !== vm.importation.total_items_in_file\\\" class=\\\"mb-16\\\"></md-progress-circular></div>\\n</div><div layout=\\\"column\\\" layout-align=\\\"center center\\\" flex \\nng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.ENQUEUED\\\"><div class=\\\"h2\\\">\\n{{\\'IMPORTER.ENQUEUED_IMPORTATION\\' | translate}}</div><div class=\\\"secondary-text mb-16 text-center\\\" \\ntranslate=\\\"IMPORTER.ENQUEUED_IMPORTATION_MSG\\\"></div><div layout=\\\"column\\\" layout-align=\\\"center center\\\" flex>\\n<md-progress-circular class=\\\"mb-16\\\"></md-progress-circular></div></div><div layout=\\\"row\\\" layout-align=\\\"center start\\\" \\nng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.DONE\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"vm.importation.status == vm.IMPORTER_STATUS.DONE\\\"><div class=\\\"h2 mb-16\\\">\\n{{\\'IMPORTER.IMPORTATION_COMPLETED\\' | translate}}</div><md-icon md-font-icon=\\\"icon-check-circle\\\" \\nclass=\\\"s128 grey-200-fg\\\"></md-icon></div></div></form></md-tab-body></md-tab></md-tabs><div class=\\\"navigation\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button ng-click=\\\"vm.close()\\\" class=\\\"stroked\\\" \\nng-if=\\\"vm.selectedIndex != 3 || vm.readonly\\\">{{\\'GENERAL.CLOSE\\' |translate}}</md-button><md-button \\nng-click=\\\"vm.goBack(msWizard)\\\" ng-if=\\\"vm.selectedIndex == 2 || vm.readonly\\\" class=\\\"stroked\\\" \\nng-disabled=\\\"vm.importation.status == vm.IMPORTER_STATUS.IN_PROGRESS ||\\n                            vm.importation.status == vm.IMPORTER_STATUS.VALIDATING ||\\n                            (vm.readonly && vm.selectedIndex == 0)\\\">\\n{{\\'PRODUCT.BACK\\' |translate}}</md-button><md-button class=\\\"md-raised md-primary\\\" ng-if=\\\"!vm.readonly\\\" \\nng-click=\\\"vm.checkCurrentStep(msWizard)\\\" \\nng-disabled=\\\"vm.loading ||\\n                            (vm.selectedIndex == 0 && !vm.hasFileAttached) ||\\n                            (vm.selectedIndex == 1 && !vm.requirementsCompleted) ||\\n                            (vm.selectedIndex == 2 && vm.importation.status == vm.IMPORTER_STATUS.VALIDATING) ||\\n                            vm.importation.status == vm.IMPORTER_STATUS.DONE ||\\n                            vm.importation.status == vm.IMPORTER_STATUS.IN_PROGRESS\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.loading\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mh-8\\\"></md-progress-circular><span translate=\\\"IMPORTER.UPLOAD_FILE\\\" \\nng-show=\\\"vm.selectedIndex == 0 && !vm.loading\\\"></span> <span translate=\\\"IMPORTER.UPLOADING_FILE\\\" \\nng-show=\\\"vm.selectedIndex == 0 && vm.loading\\\"></span> <span translate=\\\"IMPORTER.SELECT_COLUMNS\\\" \\nng-show=\\\"vm.selectedIndex == 1\\\"></span> <span translate=\\\"IMPORT.IMPORT\\\" \\nng-disabled=\\\"vm.importation.status == vm.IMPORTER_STATUS.VALIDATING || vm.importation.status == vm.IMPORTER_STATUS.IN_PROGRESS\\\" \\nng-show=\\\"vm.selectedIndex == 2\\\">Import</span></div></md-button><md-button class=\\\"stroked\\\" ng-if=\\\"vm.readonly\\\" \\nng-click=\\\"vm.goFront(msWizard)\\\" ng-disabled=\\\"vm.selectedIndex > 2\\\"><span translate=\\\"IMPORTER.FRONT\\\">Front</span>\\n</md-button></div></ms-form-wizard>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/views/images/import-images.html\",\"<div id=\\\"inventory-import-images\\\" class=\\\"page-layout simple tabbed\\\" layout=\\\"column\\\"><div \\nclass=\\\"header sa-gradient md-whiteframe-1dp no-padding\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nclass=\\\"white-fg pl-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex><div class=\\\"h2\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-5\\\" md-font-icon=\\\"icon-import\\\"></md-icon><span translate=\\\"IMPORT.IMPORT\\\">\\nImport</span></div><span flex></span><md-button class=\\\"md-raised m-0 mr-25\\\" translate=\\\"GENERAL.RESTART\\\" \\nng-click=\\\"vm.restart()\\\"></md-button></div></div><div class=\\\"content md-padding\\\"><div \\nclass=\\\"md-background-bg md-whiteframe-1dp m-10 mb-25\\\"><ms-form-wizard flex><md-tabs md-dynamic-height \\nmd-selected=\\\"vm.selectedStep\\\" md-center-tabs=\\\"true\\\"><md-tab><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span\\n class=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.productImport.step==1\\\">1</span> <span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.productImport.step>1\\\"><i class=\\\"icon-check s16\\\"></i> </span>\\n<span class=\\\"ms-form-wizard-step-text\\\" translate=\\\"IMPORT.UPLOAD_FILE\\\">Upload File</span></span></md-tab-label>\\n<md-tab-body><div layout=\\\"row\\\" class=\\\"md-padding\\\" flex><div layout=\\\"column\\\" flex><div id=\\\"product-image-uploader\\\" \\nclass=\\\"p-5\\\" flow-init=\\\"vm.ngFlowOptions\\\" flow-name=\\\"vm.ngFlow.flow\\\" \\nflow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" flow-file-added=\\\"vm.fileAdded($file)\\\"><div layout=\\\"row\\\" \\nclass=\\\"mb-10\\\"><span>{{\\'IMPORT.DOWNLOAD_FILE_INFO\\' | translate}}:</span> <a class=\\\"ml-5 mr-5\\\" \\nhref=\\\"https://docs.google.com/spreadsheets/d/1p7ra8ttWl1eZvElkuc0T0wWtZ2XgWZY7X8-Vo6wCol0/edit?usp=sharing\\\" \\ntarget=\\\"_blank\\\">{{\\'IMPORT.TEMPLATE\\' | translate}}</a></div><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button ng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.CHANGE_FILE\\\">\\nChange File</span></md-button><md-button ng-if=\\\"!product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span \\ntranslate=\\\"IMPORT.SET_FILE\\\">Set File</span></md-button><span class=\\\"secondary-text pl-8\\\" \\ntranslate=\\\"IMPORT.FILE_FORMAT_ZIP\\\">Only XLS and XLSX</span></div><md-input-container flex><label \\ntranslate=\\\"IMPORT.CODE_SEPARATOR\\\"></label><input type=\\\"text\\\" ng-model=\\\"vm.productImport.code_separator\\\">\\n</md-input-container></div></div></div></md-tab-body></md-tab><md-tab ng-disabled=\\\"vm.productImport.step<2\\\">\\n<md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.productImport.step<=2\\\">2</span> <span class=\\\"ms-form-wizard-step-number md-primary-bg\\\" \\nng-if=\\\"vm.productImport.step>2\\\"><i class=\\\"icon-check s16\\\"></i> </span><span class=\\\"ms-form-wizard-step-text\\\" \\ntranslate=\\\"IMPORT.SELECT_COLUMNS\\\">Select Columns</span></span></md-tab-label><md-tab-body><div layout=\\\"row\\\" \\nlayout-wrap><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.NAME\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.name_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.CODE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select required \\nng-model=\\\"vm.productImport.code_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.ORIGIN_CODE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.origin_code_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.GROUP_CODE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.group_code_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.COVER\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.cover_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.IMAGES\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.images_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.CATEGORY_CODE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.category_code_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.CATEGORY\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.category_name_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.SUBCATEGORY_CODE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.subcategory_code_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option \\nng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span \\nclass=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.SUBCATEGORY\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.subcategory_name_index\\\"><md-option ng-value=\\\"null\\\">\\n-</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.COMPOSITION\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.composition_name_index\\\"><md-option ng-value=\\\"null\\\">\\n-</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.BRAND_CODE\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.brand_code_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.BRAND\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.brand_name_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.SEASON_CODE\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.season_code_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.SEASON\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.season_name_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.PROVIDER\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.provider_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.COLOR_CATEGORY\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.color_category_name_index\\\"><md-option \\nng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.COLOR_CODE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.color_code_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.COLOR\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.color_name_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.SIZE_CATEGORY\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.size_category_name_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option \\nng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span \\nclass=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.SIZE\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.size_name_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.TAGS\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.tags_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.DESCRIPTION_SHORT\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.description_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.DESCRIPTION_LONG\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.description_long_index\\\"><md-option ng-value=\\\"null\\\">\\n-</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.FOB_PRICE\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.fob_price_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.FOB_PRICE_CURRENCY\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.fob_price_currency_index\\\"><md-option \\nng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.DDP_PRICE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.ddp_price_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.discount_active_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.MANAGE_STOCK\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.manage_stock_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.IS_NOOS\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.is_noos_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.CATALOG\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.catalog_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.IS_RAW_MATERIAL\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.is_raw_material_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.WIDTH\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.width_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.HEIGHT\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.height_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.DEPTH\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.depth_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.WEIGHT\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.weight_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.EXTRA_SHIPPING_FEE\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.extra_shipping_fee_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option \\nng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span \\nclass=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.BARCODE\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.product_variant_barcode_index\\\"><md-option \\nng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label translate=\\\"PRODUCT.SKU\\\" flex=\\\"50\\\"></label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.product_variant_sku_index\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option \\nng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span \\nclass=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.ATTRIBUTES\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.attributes_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label translate=\\\"PRODUCT.WEB_CATEGORY\\\" flex=\\\"50\\\"></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.web_categories_index\\\"><md-option ng-value=\\\"null\\\">-\\n</md-option><md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} \\n<span class=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div><div ng-repeat=\\\"pricingTier in vm.pricingTiers\\\" \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label flex=\\\"30\\\"><strong>{{pricingTier.name}}</strong> <span translate=\\\"PRODUCT.PRICING_TIER\\\">Pricing Tier</span>\\n</label><md-input-container class=\\\"ml-10 mr-10\\\" flex=\\\"25\\\"><md-select \\nng-model=\\\"vm.productImport.pricing_tiers_indexes[pricingTier.id][\\'index\\']\\\"><md-option ng-value=\\\"null\\\">-</md-option>\\n<md-option ng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span \\nclass=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"45\\\"><md-input-container \\nclass=\\\"ml-10 mr-10 secondary-text\\\" flex><md-checkbox \\nng-model=\\\"vm.productImport.pricing_tiers_indexes[pricingTier.id][\\'offer_price\\']\\\" class=\\\"m-0 mt-5\\\"><span \\ntranslate=\\\"IMPORT.OFFER_PRICE\\\">Offer Price</span></md-checkbox><md-checkbox \\nng-model=\\\"vm.productImport.pricing_tiers_indexes[pricingTier.id][\\'include_tax\\']\\\" class=\\\"m-0 mt-5\\\"><span \\ntranslate=\\\"IMPORT.INCLUDING_TAX\\\">Including Tax</span></md-checkbox></md-input-container><md-input-container \\nclass=\\\"ml-10\\\"><md-select ng-model=\\\"vm.productImport.pricing_tiers_indexes[pricingTier.id][\\'tax_id\\']\\\"><md-option \\nng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"tax.id\\\" ng-repeat=\\\"tax in vm.taxes track by $index\\\">{{tax.name}}\\n</md-option></md-select></md-input-container></div></div><div ng-repeat=\\\"warehouse in vm.warehouses\\\" \\nclass=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"33\\\">\\n<label flex=\\\"50\\\"><strong>{{warehouse.name}}</strong> <span translate=\\\"PRODUCT.STOCK\\\">Stock</span></label>\\n<md-input-container flex=\\\"50\\\"><md-select ng-model=\\\"vm.productImport.warehouses_stock_indexes[warehouse.id]\\\"><md-option \\nng-value=\\\"null\\\">-</md-option><md-option ng-value=\\\"$index\\\" \\nng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span class=\\\"secondary-text\\\">\\n( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select></md-input-container></div><div \\nng-repeat=\\\"site in vm.sites\\\" class=\\\"pl-20 pr-20 border-bottom border-right\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"33\\\"><label flex=\\\"50\\\"><strong>{{site.name}}</strong>\\n {{\\'PRODUCT.EXTERNAL_PRODUCT_ID\\' | translate}}</label><md-input-container flex=\\\"50\\\"><md-select \\nng-model=\\\"vm.productImport.sites_external_ids_indexes[site.id]\\\"><md-option ng-value=\\\"null\\\">-</md-option><md-option \\nng-value=\\\"$index\\\" ng-repeat=\\\"column in vm.productImport.columns track by $index\\\">{{column}} <span \\nclass=\\\"secondary-text\\\">( {{vm.productImport.first_row[$index]}}, .. )</span></md-option></md-select>\\n</md-input-container></div></div></md-tab-body></md-tab><md-tab ng-disabled=\\\"vm.productImport.step<2\\\" \\nmd-on-select=\\\"vm.reloadTable()\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.productImport.step<=3\\\">3</span> <span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.productImport.step>3\\\"><i class=\\\"icon-check s16\\\"></i> </span>\\n<span class=\\\"ms-form-wizard-step-text\\\" translate=\\\"IMPORT.CONFIRM_DRAFT\\\">Confirm Draft</span></span></md-tab-label>\\n<md-tab-body><table ng-if=\\\"vm.productImport.step==3\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" class=\\\"dataTable row-border hover\\\"></table></md-tab-body></md-tab>\\n<md-tab ng-disabled=\\\"vm.productImport.step<3\\\"><md-tab-label><span class=\\\"ms-form-wizard-step-label\\\"><span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.productImport.step<=4\\\">4</span> <span \\nclass=\\\"ms-form-wizard-step-number md-primary-bg\\\" ng-if=\\\"vm.productImport.step>4\\\"><i class=\\\"icon-check s16\\\"></i> </span>\\n<span ng-if=\\\"vm.productImport.step<=4\\\" class=\\\"ms-form-wizard-step-text\\\" translate=\\\"IMPORT.IMPORTING_PRODUCTS\\\"></span> \\n<span ng-if=\\\"vm.productImport.step==5\\\" class=\\\"ms-form-wizard-step-text\\\" translate=\\\"IMPORT.PRODUCTS_IMPORTED\\\"></span>\\n</span></md-tab-label><md-tab-body flex><div layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"p-30\\\" flex><br><br>\\n<br><md-progress-circular ng-if=\\\"vm.productImport.step==4\\\" md-diameter=\\\"30px\\\" class=\\\"mh-8\\\"></md-progress-circular><span\\n ng-if=\\\"vm.productImport.step==5\\\" translate=\\\"IMPORT.PRODUCTS_IMPORTED_SUCCESSFULLY\\\"></span><br></div></md-tab-body>\\n</md-tab></md-tabs><div class=\\\"navigation\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-raised\\\" \\nng-click=\\\"vm.previousStep()\\\" ng-disable=\\\"vm.loading\\\" ng-disabled=\\\"vm.selectedStep == 0\\\" \\nng-hide=\\\"vm.productImport.step>3\\\"><span translate=\\\"IMPORT.PREVIOUS\\\">Previous</span></md-button><md-button \\nclass=\\\"md-raised md-primary\\\" ng-click=\\\"vm.nextStep()\\\" ng-disabled=\\\"vm.loading\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.loading\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"IMPORT.UPLOAD_FILE\\\" ng-show=\\\"vm.selectedStep == 0\\\">Upload</span> <span \\ntranslate=\\\"IMPORT.SELECT_COLUMNS\\\" ng-show=\\\"vm.selectedStep == 1\\\">Import</span> <span translate=\\\"IMPORT.IMPORT\\\" \\nng-show=\\\"vm.selectedStep == 2\\\">Import</span> <span translate=\\\"IMPORT.FINISH\\\" \\nng-show=\\\"vm.selectedStep > 2 && vm.productImport.step==5\\\">Finish</span></div></md-button></div></ms-form-wizard></div>\\n</div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/directives/nd-columns-selector/nd-columns-selector.html\",\"<table class=\\\"nd-columns-selector simple\\\"><thead><tr><th translate=\\\"IMPORTER.ORIGIN_HEADER\\\">Origin header</th><th \\ntranslate=\\\"IMPORTER.TARGET_HEADER\\\">Target header</th></tr></thead><tbody><tr \\nng-repeat=\\\"header in ::getOriginHeaders() track by $index\\\"><td><div layout=\\\"column\\\"><span>{{::header}}</span><div \\nlayout=\\\"row text-truncate\\\"><span ng-repeat=\\\"item in ::getPreviewItemsByHeader(header) track by $index\\\" \\nclass=\\\"secondary-text item-span\\\"><span ng-if=\\\"$index > 0\\\">,&nbsp;</span>{{::item}}</span></div></div></td><td>\\n<md-select class=\\\"m-0 nd-input\\\" ng-model=\\\"targetHeadersByOrigin[header]\\\" ng-change=\\\"onTargetSelectorChange()\\\" \\nng-disabled=\\\"readonly\\\" md-on-open=\\\"onSelectorOpen()\\\" md-on-close=\\\"onSelectorClose()\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"selectFilter\\\" ng-model-options=\\\"{debounce:500}\\\" \\nmaxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"\\\">-</md-option><md-option ng-repeat=\\\"target in targetHeaders | filter:{translationNormalized: selectFilter}\\\" \\nng-show=\\\"isTargetHeaderAvailable(header, target)\\\" ng-value=\\\"target\\\">\\n{{::target.translation}}&nbsp;{{target.mandatory ? \\'*\\' : \\'\\'}}</md-option></md-select></td></tr></tbody></table>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/views/products/import-products.html\",\"<div id=\\\"importer-products\\\" class=\\\"page-layout simple\\\" layout=\\\"column\\\"><div class=\\\"header\\\" layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h2\\\" translate=\\\"IMPORTER.IMPORTER_PRODUCTS\\\">Products importer</span>\\n<md-button class=\\\"md-raised md-primary m-0\\\" ng-click=\\\"vm.showImportationTypeDialog($event)\\\" \\nhas-permission=\\\"inventory.products.create\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'IMPORTER.NEW_IMPORTATION\\' | translate}}</div></md-button></div><div \\nclass=\\\"content ml-8 mr-8 mb-8\\\" layout=\\\"column\\\" flex><md-card><md-card-content class=\\\"content fullpage-datatable\\\"><table\\n class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" id=\\\"importer-products-table\\\"></table></md-card-content></md-card></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/labels-generator/directives/nd-product-label-design-card/nd-product-label-design-card.html\",\"<md-card class=\\\"nd-product-label-design mb-16\\\" ng-if=\\\"vm.hasCustomLabelFeature\\\"><md-card-title layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3 mr-16\\\" \\ntranslate=\\\"LABELS_GENERATOR.TEMPLATE\\\"></span><md-input-container class=\\\"md-icon-float m-0 mr-16\\\" flex=\\\"25\\\"><md-select \\nng-model=\\\"vm.productLabelDesign\\\" ng-change=\\\"vm.onProductLabelDesignChange({{vm.productLabelDesign.pricing_tier}})\\\">\\n<md-option ng-value=\\\"productLabelDesign\\\" \\nng-repeat=\\\"productLabelDesign in vm.productLabelDesigns | orderBy: \\'position\\' track by $index\\\">\\n{{productLabelDesign.name}}</md-option><md-option ng-value=\\\"vm.newProductLabelDesign\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"md-primary-fg\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-8 md-primary-fg\\\">\\n</md-icon><span translate=\\\"LABELS_GENERATOR.NEW_LABEL_DESIGN\\\"></span></div></md-option></md-select>\\n</md-input-container><span flex></span><div style=\\\"zoom: 0.27\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"!vm.productLabelDesign.isButterfly()\\\"><div \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/label-preview.html\\'\\\"></div></div></div>\\n</md-card-title-text></md-card-title></md-card><md-card class=\\\"nd-product-label-design\\\"><md-card-title layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><span class=\\\"h3\\\" \\ntranslate=\\\"LABELS_GENERATOR.LABEL_DESIGN\\\"></span> <span flex></span><md-button ng-if=\\\"vm.hasCustomLabelFeature\\\" \\nclass=\\\"stroked md-primary h-40\\\" translate=\\\"LABELS_GENERATOR.SAVE_AS_NEW_DESIGN\\\" ng-click=\\\"vm.saveAsNewDesign()\\\" \\nng-disabled=\\\"vm.saving\\\"></md-button><md-button ng-if=\\\"vm.hasCustomLabelFeature\\\" \\nclass=\\\"stroked md-raised md-primary h-40\\\" ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.saveDesign()\\\" \\ntranslate=\\\"LABELS_GENERATOR.SAVE_DESIGN\\\"></md-button></div></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"column\\\" class=\\\"card-body\\\"><div class=\\\"md-padding\\\" layout=\\\"row\\\"><md-input-container \\nng-if=\\\"vm.hasCustomLabelFeature\\\" class=\\\"md-icon-float label-name-input\\\" flex=\\\"25\\\"><label \\ntranslate=\\\"LABELS_GENERATOR.LABEL_DESIGN_NAME\\\"></label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-tag-text-outline\\\">\\n</md-icon><input ng-model=\\\"vm.productLabelDesign.name\\\" type=\\\"text\\\"></md-input-container><md-input-container \\nclass=\\\"md-icon-float mr-8\\\" flex=\\\"25\\\"><label translate=\\\"LABELS_GENERATOR.PRICING_TIER\\\">Pricing tier</label><md-icon \\nclass=\\\"icon\\\" md-font-icon=\\\"icon-layers\\\"></md-icon><md-select required ng-model=\\\"vm.productLabelDesign.pricing_tier\\\">\\n<md-option ng-value=\\\"pricingTier.id\\\" ng-repeat=\\\"pricingTier in vm.pricingTiers | orderBy: \\'position\\'\\\">\\n{{pricingTier.name}}</md-option></md-select></md-input-container></div><md-card class=\\\"card-in-card\\\"><md-card-title>\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8 border\\\"><div style=\\\"zoom: 0.1\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div ng-if=\\\"vm.productLabelDesign.isCustomLandscapeOrPortrait()\\\" \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/page-preview.html\\'\\\"></div><div \\nng-if=\\\"vm.productLabelDesign.isCustomLayout() || vm.productLabelDesign.isButterfly()\\\" \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/page-label-preview.html\\'\\\"></div></div></div><span \\nclass=\\\"h3\\\" translate=\\\"LABELS_GENERATOR.SHEET_LAYOUT\\\"></span> <span flex></span><md-button \\nclass=\\\"md-button md-primary m-0\\\" ng-click=\\\"vm.layoutClosed = !vm.layoutClosed\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-chevron-up\\\" class=\\\"toggle-icon\\\" \\nng-class=\\\"{\\'upside-down\\': vm.layoutClosed}\\\"></md-icon>{{\\'LABELS_GENERATOR.CONFIGURATION\\' | translate}}</div>\\n</md-button></div></md-card-title-text></md-card-title><md-card-content ng-class=\\\"{\\'closed\\': vm.layoutClosed}\\\"><div \\nlayout=\\\"column\\\" flex><div layout=\\\"column\\\" class=\\\"md-padding\\\"><div layout=\\\"row\\\" class=\\\"full-width\\\"><md-input-container \\nclass=\\\"md-icon-float w-200 mr-8\\\"><label translate=\\\"LABELS_GENERATOR.PAGE_LAYOUT\\\">Layout</label><md-icon \\nng-if=\\\"vm.productLabelDesign.isCustomLandscapeOrPortrait()\\\" class=\\\"icon\\\" \\nmd-font-icon=\\\"{{\\'icon-crop-\\' + vm.productLabelDesign.page_layout}}\\\"></md-icon><md-icon \\nng-if=\\\"vm.productLabelDesign.isCustomLayout()\\\" class=\\\"icon\\\" md-font-icon=\\\"icon-ruler\\\"></md-icon><md-icon \\nng-if=\\\"vm.productLabelDesign.isButterfly()\\\" class=\\\"icon\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/ring.c4b38462.svg\\\"></md-icon><md-select \\nng-model=\\\"vm.productLabelDesign.page_layout\\\" ng-change=\\\"vm.productLabelDesign.layoutChanged()\\\" \\nmd-on-close=\\\"vm.layoutSelected()\\\"><md-option value=\\\"{{\\'portrait\\'}}\\\">\\n{{\\'LABELS_GENERATOR.PAGE_LAYOUT_portrait\\' | translate}}</md-option><md-option value=\\\"{{\\'landscape\\'}}\\\" \\nng-click=\\\"vm.upgradePlan($event)\\\"><md-icon ng-if=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'LABELS_GENERATOR.PAGE_LAYOUT_landscape\\' | translate}}</md-option><md-option value=\\\"{{\\'custom\\'}}\\\" \\nng-click=\\\"vm.upgradePlan($event)\\\"><md-icon ng-if=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'LABELS_GENERATOR.PAGE_LAYOUT_custom\\' | translate}}</md-option><md-option value=\\\"{{\\'s_butterfly\\'}}\\\" \\nng-click=\\\"vm.upgradePlan($event)\\\"><md-icon ng-if=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'LABELS_GENERATOR.PAGE_LAYOUT_s_butterfly\\' | translate}}</md-option><md-option value=\\\"{{\\'c_butterfly\\'}}\\\" \\nng-click=\\\"vm.upgradePlan($event)\\\"><md-icon ng-if=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'LABELS_GENERATOR.PAGE_LAYOUT_c_butterfly\\' | translate}}</md-option><md-option value=\\\"{{\\'lc_butterfly\\'}}\\\" \\nng-click=\\\"vm.upgradePlan($event)\\\"><md-icon ng-if=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'LABELS_GENERATOR.PAGE_LAYOUT_lc_butterfly\\' | translate}}</md-option></md-select></md-input-container>\\n<md-input-container ng-if=\\\"vm.productLabelDesign.isCustomLayout()\\\" class=\\\"md-icon-float w-200 mr-8 ml-8\\\"><label>\\n{{\\'LABELS_GENERATOR.LABEL_WIDTH\\' | translate}}</label><input ng-model=\\\"vm.productLabelDesign.label_width\\\" \\nclass=\\\"text-right\\\" min=\\\"0\\\" step=\\\"1\\\" type=\\\"number\\\" required></md-input-container><md-input-container \\nng-if=\\\"vm.productLabelDesign.isCustomLayout() || vm.productLabelDesign.isButterfly()\\\" \\nclass=\\\"md-icon-float w-200 mr-8 ml-8\\\"><label>{{\\'LABELS_GENERATOR.LABEL_HEIGHT\\' | translate}}</label><input \\nng-model=\\\"vm.productLabelDesign.label_height\\\" class=\\\"text-right\\\" min=\\\"0\\\" step=\\\"1\\\" type=\\\"number\\\" required>\\n</md-input-container><div ng-if=\\\"vm.productLabelDesign.isButterfly()\\\"><md-input-container \\nng-repeat=\\\"butterflyWith in vm.productLabelDesign.multilabel_width track by $index\\\" \\nclass=\\\"md-icon-float w-200 mr-8 ml-8\\\"><label>{{\\'LABELS_GENERATOR.LABEL_WIDTH_PART_N\\' | translate:{part: $index + 1} }}\\n</label><input ng-model=\\\"vm.productLabelDesign.multilabel_width[$index]\\\" class=\\\"text-right\\\" min=\\\"0\\\" step=\\\"1\\\" \\ntype=\\\"number\\\" required></md-input-container></div></div><div ng-if=\\\"vm.productLabelDesign.isButterfly()\\\" \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/page-label-preview.html\\'\\\"></div><div layout=\\\"row\\\" \\nclass=\\\"full-width\\\" ng-if=\\\"!vm.productLabelDesign.isCustomLayout()\\\" ng-hide=\\\"vm.productLabelDesign.isButterfly()\\\">\\n<md-input-container class=\\\"md-icon-float w-200 mr-8\\\"><label>{{\\'LABELS_GENERATOR.ROWS_PER_PAGE\\' | translate}}</label>\\n<md-icon class=\\\"icon\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/table-row.dd122424.svg\\\"></md-icon><input \\nng-model=\\\"vm.productLabelDesign.rows\\\" ng-disabled=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"text-right\\\" min=\\\"1\\\" type=\\\"number\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float w-200 mr-8\\\"><label>\\n{{\\'LABELS_GENERATOR.LABELS_PER_ROW\\' | translate}}</label><md-icon class=\\\"icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/table-column.9857cc7b.svg\\\"></md-icon><input \\nng-model=\\\"vm.productLabelDesign.columns\\\" min=\\\"1\\\" ng-disabled=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"text-right\\\" \\ntype=\\\"number\\\"></md-input-container><md-input-container class=\\\"md-icon-float w-200 mr-40\\\"><label>\\n{{\\'LABELS_GENERATOR.START_AT\\' | translate}}</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-keyboard-tab\\\"></md-icon>\\n<input ng-model=\\\"vm.productLabelDesign.start_at\\\" ng-disabled=\\\"vm.productLabelDesign.one_label_per_page\\\" min=\\\"1\\\" \\nclass=\\\"text-right\\\" type=\\\"number\\\"></md-input-container><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\">\\n<md-checkbox ng-model=\\\"vm.productLabelDesign.print_grid\\\">{{\\'LABELS_GENERATOR.PRINT_GRID\\' | translate}}</md-checkbox>\\n</div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-checkbox ng-model=\\\"vm.productLabelDesign.one_label_per_page\\\">\\n{{\\'LABELS_GENERATOR.ONE_LABEL_PER_PAGE\\' | translate}}</md-checkbox></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" ng-hide=\\\"vm.productLabelDesign.isButterfly()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"pl-16\\\" ng-if=\\\"!vm.productLabelDesign.isCustomLayout()\\\"><div \\nclass=\\\"mb-8\\\">{{\\'LABELS_GENERATOR.PAGE_PREVIEW\\' | translate}}</div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nlayout=\\\"column\\\" class=\\\"m-8\\\"><small class=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_TOP\\' | translate}} (mm)</small> \\n<input ng-model=\\\"vm.productLabelDesign.page_top_margin\\\" class=\\\"nd-input w-100 text-right\\\" min=\\\"0\\\" type=\\\"number\\\"></div>\\n</div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"m-8\\\"><small class=\\\"secondary-text\\\">\\n{{\\'LABELS_GENERATOR.MARGIN_LEFT\\' | translate}} (mm)</small> <input ng-model=\\\"vm.productLabelDesign.page_left_margin\\\" \\nclass=\\\"nd-input w-100 text-right\\\" min=\\\"0\\\" type=\\\"number\\\"></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/page-preview.html\\'\\\"></div></div><div \\nlayout=\\\"column\\\" class=\\\"m-8\\\"><small class=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_RIGHT\\' | translate}} (mm)</small> \\n<input ng-model=\\\"vm.productLabelDesign.page_right_margin\\\" class=\\\"nd-input w-100 text-right\\\" min=\\\"0\\\" type=\\\"number\\\">\\n</div></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"m-8\\\"><small \\nclass=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_BOTTOM\\' | translate}} (mm)</small> <input \\nng-model=\\\"vm.productLabelDesign.page_bottom_margin\\\" class=\\\"nd-input w-100 text-right\\\" min=\\\"0\\\" type=\\\"number\\\"></div>\\n</div></div></div><div layout=\\\"column\\\" class=\\\"pl-16\\\"><div class=\\\"mb-8\\\">{{\\'LABELS_GENERATOR.LABEL_SIZES\\' | translate}}: \\n<span><b>\\n{{vm.productLabelDesign.getLabelWidth() | number: 2}} mm x {{vm.productLabelDesign.getLabelHeight() | number: 2}} mm\\n</b></span></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"m-8\\\"><small \\nclass=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_TOP\\' | translate}} (mm)</small> <input \\nng-model=\\\"vm.productLabelDesign.label_top_margin\\\" class=\\\"nd-input w-100 text-right\\\" ng-disabled=\\\"true\\\" min=\\\"0\\\" \\ntype=\\\"number\\\"></div></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"m-8\\\"><small \\nclass=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_LEFT\\' | translate}} (mm)</small> <input \\nng-model=\\\"vm.productLabelDesign.label_left_margin\\\" class=\\\"nd-input w-100 text-right\\\" min=\\\"0\\\" type=\\\"number\\\"></div><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/page-label-preview.html\\'\\\"></div></div><div \\nlayout=\\\"column\\\" class=\\\"m-8\\\"><small class=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_RIGHT\\' | translate}} (mm)</small> \\n<input ng-model=\\\"vm.productLabelDesign.label_right_margin\\\" class=\\\"nd-input w-100 text-right\\\" min=\\\"0\\\" type=\\\"number\\\">\\n</div></div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" class=\\\"m-8\\\"><small \\nclass=\\\"secondary-text\\\">{{\\'LABELS_GENERATOR.MARGIN_BOTTOM\\' | translate}} (mm)</small> <input \\nng-model=\\\"vm.productLabelDesign.label_bottom_margin\\\" class=\\\"nd-input w-100 text-right\\\" ng-disabled=\\\"true\\\" min=\\\"0\\\" \\ntype=\\\"number\\\"></div></div></div></div></div></div></md-card-content></md-card><md-card class=\\\"card-in-card\\\">\\n<md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"mr-8 border\\\"><div \\nstyle=\\\"zoom: 0.1\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/label-preview.html\\'\\\"></div></div></div><span \\nclass=\\\"h3\\\" translate=\\\"LABELS_GENERATOR.FIELDS_INSIDE_LABEL\\\"></span> <span flex></span><md-button \\nclass=\\\"md-button md-primary m-0\\\" ng-click=\\\"vm.fieldsClosed = !vm.fieldsClosed\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-chevron-up\\\" class=\\\"toggle-icon\\\" \\nng-class=\\\"{\\'upside-down\\': vm.fieldsClosed}\\\"></md-icon>{{\\'LABELS_GENERATOR.CONFIGURATION\\' | translate}}</div>\\n</md-button></div></md-card-title-text></md-card-title><md-card-content ng-class=\\\"{\\'closed\\': vm.fieldsClosed}\\\"><div \\nlayout=\\\"column\\\" flex><table class=\\\"simple list-view\\\" ms-responsive-table flex><thead><tr><th \\ntranslate=\\\"LABELS_GENERATOR.PRODUCT_FIELD\\\">Product field</th><th translate=\\\"LABELS_GENERATOR.FONT_SIZE\\\">Font size</th>\\n<th translate=\\\"LABELS_GENERATOR.ALIGN\\\">Align</th><th translate=\\\"LABELS_GENERATOR.STYLES\\\">Styles</th><th \\ntranslate=\\\"LABELS_GENERATOR.OTHERS\\\">Others</th><th ng-if=\\\"vm.productLabelDesign.isButterfly()\\\" \\ntranslate=\\\"LABELS_GENERATOR.BUTTERFLY_POSITION\\\">Butterfly Position</th><th class=\\\"w-50\\\"></th></tr></thead><tbody><tr \\nng-repeat=\\\"field in vm.productLabelDesign.fields | orderBy: \\'position\\' track by $index\\\"><td><md-input-container \\nclass=\\\"m-0\\\"><md-select ng-model=\\\"field.field_name\\\" class=\\\"nd-input\\\" \\nplaceholder=\\\"{{\\'LABELS_GENERATOR.PRODUCT_FIELD\\' | translate}}\\\"><md-option \\nng-repeat=\\\"(code, translation) in vm.productLabelDesign.AVAILABLE_FIELDS\\\" ng-value=\\\"code\\\">\\n{{(\\'LABELS_GENERATOR.\\' + translation) | translate}}</md-option></md-select><small class=\\\"secondary-text\\\" \\nng-if=\\\"field.field_name === \\'image\\'\\\">{{\\'LABELS_GENERATOR.COVER_IMAGE_DISCLAIMER\\' | translate}} </small><small \\nclass=\\\"secondary-text\\\" ng-if=\\\"field.field_name === \\'description\\'\\\">\\n{{\\'LABELS_GENERATOR.DESCRIPTION_DISCLAIMER\\' | translate}} </small><small class=\\\"secondary-text\\\" \\nng-if=\\\"field.field_name === \\'description_long\\'\\\">{{\\'LABELS_GENERATOR.DESCRIPTION_DISCLAIMER\\' | translate}}</small>\\n</md-input-container></td><td><md-input-container class=\\\"m-0\\\" \\nng-if=\\\"field.field_name !== \\'barcode\\' && field.field_name !== \\'image\\' && field.field_name !== \\'spacer\\'\\\"><md-select \\nng-model=\\\"field.font_size\\\" class=\\\"nd-input\\\" placeholder=\\\"{{\\'LABELS_GENERATOR.FONT_SIZE\\' | translate}}\\\"><md-option \\nng-repeat=\\\"fontSize in vm.productLabelDesign.AVAILABLE_FONT_SIZES\\\" ng-value=\\\"fontSize\\\">{{fontSize}}</md-option>\\n</md-select></md-input-container></td><td \\nng-if=\\\"field.field_name !== \\'barcode\\' && field.field_name !== \\'image\\' && field.field_name !== \\'spacer\\'\\\"><md-icon \\nmd-font-icon=\\\"icon-format-align-left\\\" class=\\\"small-square-button\\\" ng-if=\\\"!vm.productLabelDesign.isButterfly()\\\" \\nng-class=\\\"{\\'selected\\': field.text_align ==\\'left\\'}\\\" ng-click=\\\"field.text_align = \\'left\\'\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-format-align-center\\\" class=\\\"small-square-button\\\" ng-if=\\\"!vm.productLabelDesign.isButterfly()\\\" \\nng-class=\\\"{\\'selected\\': field.text_align ==\\'center\\'}\\\" ng-click=\\\"field.text_align = \\'center\\'\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-format-align-right\\\" class=\\\"small-square-button\\\" ng-if=\\\"!vm.productLabelDesign.isButterfly()\\\" \\nng-class=\\\"{\\'selected\\': field.text_align ==\\'right\\'}\\\" ng-click=\\\"field.text_align = \\'right\\'\\\"></md-icon></td><td \\nng-if=\\\"field.field_name === \\'barcode\\' && field.field_name !== \\'image\\' && field.field_name !== \\'spacer\\' \\\"><div \\nng-if=\\\"!vm.productLabelDesign.isButterfly()\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/format-horizontal-align-left.5f8ddbc6.svg\\\" class=\\\"small-square-button\\\" \\nng-class=\\\"{\\'selected\\': field.barcode_align ==\\'left\\'}\\\" ng-click=\\\"field.barcode_align = \\'left\\'\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/format-vertical-align-top.0748b81a.svg\\\" class=\\\"small-square-button\\\" \\nng-class=\\\"{\\'selected\\': field.barcode_align ==\\'top\\'}\\\" ng-click=\\\"field.barcode_align = \\'top\\'\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/format-vertical-align-bottom.de32f546.svg\\\" class=\\\"small-square-button\\\" \\nng-class=\\\"{\\'selected\\': field.barcode_align ==\\'bottom\\'}\\\" ng-click=\\\"field.barcode_align = \\'bottom\\'\\\"></md-icon><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/format-horizontal-align-right.72eac1cd.svg\\\" class=\\\"small-square-button\\\" \\nng-class=\\\"{\\'selected\\': field.barcode_align ==\\'right\\'}\\\" ng-click=\\\"field.barcode_align = \\'right\\'\\\"></md-icon></div></td>\\n<td ng-if=\\\"field.field_name === \\'spacer\\'\\\"></td><td><div \\nng-if=\\\"field.field_name !== \\'barcode\\' && field.field_name !== \\'image\\' && field.field_name !== \\'spacer\\' && !vm.productLabelDesign.isButterfly()\\\">\\n<md-icon md-font-icon=\\\"icon-format-bold\\\" class=\\\"small-square-button\\\" ng-class=\\\"{\\'selected\\': field.bold}\\\" \\nng-click=\\\"field.bold = !field.bold\\\"></md-icon><md-icon md-font-icon=\\\"icon-format-italic\\\" class=\\\"small-square-button\\\" \\nng-class=\\\"{\\'selected\\': field.italic}\\\" ng-click=\\\"field.italic = !field.italic\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-format-underline\\\" class=\\\"small-square-button\\\" ng-class=\\\"{\\'selected\\': field.underline}\\\" \\nng-click=\\\"field.underline = !field.underline\\\"></md-icon></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"pt-5\\\" ng-if=\\\"field.field_name === \\'barcode\\' && !vm.productLabelDesign.isButterfly()\\\"><md-icon \\nmd-font-icon=\\\"icon-barcode\\\" class=\\\"small-square-button\\\" ng-click=\\\"field.barcode_vertical = false\\\" \\nng-class=\\\"{\\'selected\\': !field.barcode_vertical}\\\"></md-icon><md-icon md-font-icon=\\\"icon-barcode\\\" \\nclass=\\\"small-square-button rotate-90\\\" ng-click=\\\"field.barcode_vertical = true\\\" \\nng-class=\\\"{\\'selected\\': field.barcode_vertical}\\\"></md-icon><span flex></span></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"pt-5\\\" \\nng-if=\\\"field.field_name === \\'size\\' || field.field_name === \\'size__code\\' || field.field_name === \\'size__name_code\\'\\\">\\n<md-input-container class=\\\"nd-input m-0 no-border\\\"><label>{{\\'LABELS_GENERATOR.CUSTOM_TEXT\\' | translate}}</label><input \\nng-model=\\\"field.custom_label\\\" placeholder=\\\"{{\\'LABELS_GENERATOR.CUSTOM_TEXT\\' | translate}}\\\" class=\\\"w-75\\\">\\n</md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-5\\\" \\nng-if=\\\"field.field_name === \\'price\\'\\\"><md-input-container class=\\\"nd-input m-0 mr-8 no-border\\\"><label>\\n{{\\'LABELS_GENERATOR.CUSTOM_TEXT\\' | translate}}</label><input ng-model=\\\"field.custom_label\\\" \\nplaceholder=\\\"{{\\'LABELS_GENERATOR.CUSTOM_TEXT\\' | translate}}\\\" class=\\\"w-75\\\"></md-input-container><md-checkbox \\nng-model=\\\"field.price_excl_tax\\\" class=\\\"m-0\\\">{{\\'LABELS_GENERATOR.USE_PRICE_EXCL_TAX\\' | translate}}</md-checkbox></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-5\\\" ng-if=\\\"field.field_name === \\'barcode\\'\\\"><md-checkbox \\nng-model=\\\"field.barcode_numbers\\\" class=\\\"m-0\\\">{{\\'LABELS_GENERATOR.BARCODE_NUMBERS\\' | translate}}</md-checkbox>\\n<md-input-container ng-if=\\\"field.barcode_numbers\\\" class=\\\"nd-input m-0 ml-8 mr-8 no-border\\\"><label>\\n{{\\'LABELS_GENERATOR.FONT_SIZE\\' | translate}}</label><input ng-model=\\\"field.barcode_font_size\\\" type=\\\"number\\\" step=\\\"1\\\" \\nmin=\\\"8\\\" placeholder=\\\"{{\\'LABELS_GENERATOR.AUTOMATIC\\' | translate}}\\\" class=\\\"w-75\\\"></md-input-container>\\n<md-input-container class=\\\"nd-input m-0 ml-8 mr-8 no-border\\\"><label>{{\\'LABELS_GENERATOR.BARCODE_HEIGHT\\' | translate}}\\n</label><input ng-model=\\\"field.barcode_height\\\" type=\\\"number\\\" step=\\\"1\\\" min=\\\"0\\\" \\nplaceholder=\\\"{{\\'LABELS_GENERATOR.AUTOMATIC\\' | translate}}\\\" class=\\\"w-75\\\"></md-input-container><md-input-container \\nclass=\\\"nd-input m-0 ml-8 mr-8 no-border\\\" ng-if=\\\"!vm.productLabelDesign.isButterfly()\\\"><label>\\n{{\\'LABELS_GENERATOR.BARCODE_SPACE\\' | translate}}</label><input ng-model=\\\"field.barcode_space\\\" type=\\\"number\\\" min=\\\"0\\\" \\nstep=\\\"1\\\" max=\\\"100\\\" placeholder=\\\"{{\\'LABELS_GENERATOR.AUTOMATIC\\' | translate}}\\\" class=\\\"w-75\\\" \\nng-disabled=\\\"!field.barcode_vertical\\\"><md-tooltip ng-if=\\\"!field.barcode_vertical\\\">\\n{{\\'LABELS_GENERATOR.FIELD_NOT_AVAILABLE_HORIZONTAL\\' | translate}}</md-tooltip></md-input-container><span flex></span>\\n</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-5\\\" ng-if=\\\"field.field_name === \\'custom_text\\'\\\">\\n<md-input-container class=\\\"nd-input m-0 mr-8 no-border\\\"><label>{{\\'LABELS_GENERATOR.CUSTOM_TEXT\\' | translate}}</label>\\n<input ng-model=\\\"field.custom_label\\\" placeholder=\\\"{{\\'LABELS_GENERATOR.CUSTOM_TEXT\\' | translate}}\\\" class=\\\"w-75\\\">\\n</md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-5\\\" \\nng-if=\\\"field.field_name === \\'spacer\\'\\\"><md-input-container class=\\\"nd-input m-0 no-border\\\"><label>\\n{{\\'LABELS_GENERATOR.SPACER_HEIGHT_MM\\' | translate}}</label><input ng-model=\\\"field.spacer_height\\\" \\nplaceholder=\\\"{{\\'LABELS_GENERATOR.SPACER_HEIGHT_MM\\' | translate}}\\\" class=\\\"nd-input w-75\\\"></md-input-container></div>\\n</td><td ng-if=\\\"vm.productLabelDesign.isButterfly()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pt-5\\\" \\nng-if=\\\"vm.productLabelDesign.isButterfly()\\\"><md-input-container class=\\\"m-0 w-100\\\"><md-select class=\\\"nd-input\\\" \\nng-model=\\\"field.butterfly_position\\\"><md-option value=\\\"left\\\" translate=\\\"LABELS_GENERATOR.BUTTERFLY_LEFT\\\"></md-option>\\n<md-option value=\\\"center\\\" ng-if=\\\"vm.productLabelDesign.isLabelCenteredButterfly()\\\" \\ntranslate=\\\"LABELS_GENERATOR.BUTTERFLY_CENTER\\\"></md-option><md-option value=\\\"right\\\" \\ntranslate=\\\"LABELS_GENERATOR.BUTTERFLY_RIGHT\\\"></md-option></md-select></md-input-container></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"md-icon-button action-button\\\" ng-disabled=\\\"$index === 0\\\" \\nng-if=\\\"field.allowMove() || vm.productLabelDesign.isButterfly()\\\" ng-click=\\\"vm.moveFieldForward($event, $index)\\\">\\n<md-icon md-font-icon=\\\"icon-arrow-up\\\"></md-icon></md-button><md-button class=\\\"md-icon-button action-button\\\" \\nng-if=\\\"field.allowMove() || vm.productLabelDesign.isButterfly()\\\" \\nng-disabled=\\\"$index === vm.productLabelDesign.fields.length - 1\\\" ng-click=\\\"vm.moveFieldBackward($event, $index)\\\">\\n<md-icon md-font-icon=\\\"icon-arrow-down\\\"></md-icon></md-button><md-button class=\\\"md-icon-button action-button\\\" \\nng-click=\\\"vm.productLabelDesign.removeField($index)\\\"><md-icon md-font-icon=\\\"icon-trash\\\"></md-icon></md-button></div>\\n</td></tr></tbody></table><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\nclass=\\\"md-primary stroked mb-0 mt-16\\\" ng-click=\\\"vm.productLabelDesign.addEmptyField()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>\\n{{\\'LABELS_GENERATOR.ADD_NEW_FIELD\\' | translate}}</div></md-button></div><h4 translate=\\\"LABELS_GENERATOR.PREVIEW\\\" \\nng-hide=\\\"vm.productLabelDesign.isButterfly()\\\"></h4><div layout=\\\"column\\\" layout-align=\\\"center center\\\" flex \\nclass=\\\"preview-conatiner md-padding\\\" ng-hide=\\\"vm.productLabelDesign.isButterfly()\\\"><div \\nng-include=\\\"\\'app/main/apps/inventory/views/labels-generator/subviews/label-preview.html\\'\\\"></div></div></div>\\n</md-card-content></md-card><div ng-if=\\\"!vm.hasCustomLabelFeature\\\" class=\\\"p-8\\\"><nd-upgrade-subscription-plan-banner \\ntitle=\\\"\\'LABELS_GENERATOR.UPGRADE_PLAN\\'\\\" body=\\\"\\'LABELS_GENERATOR.UPGRADE_PLAN_MSG\\'\\\" \\nsource=\\\"\\'inventory.labels-generator.custom-labels\\'\\\"></nd-upgrade-subscription-plan-banner></div></div>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/packing/dialogs/finish-packing-order-dialog/finish-packing-order-dialog.html\",\"<md-dialog id=\\\"finish-picking-order-dialog\\\" class=\\\"w-500\\\"><md-dialog-content><h2 \\ntranslate=\\\"PACKING.FINISH_PACKING_ORDER\\\"></h2><p translate=\\\"PACKING.SUMMARY_PACKED\\\" \\ndata-translate-values=\\\"vm.translationData\\\"></p><p translate=\\\"PACKING.FINISH_BODY_DIALOG\\\"></p><md-checkbox \\nng-model=\\\"vm.allPicked\\\"><span translate=\\\"PICKING.MARK_ALL_AS\\\"></span> <span translate=\\\"{{vm.statusName}}\\\" \\nclass=\\\"status-badge\\\" ng-class=\\\"vm.colorBadgeClass\\\"></span></md-checkbox></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button>\\n<md-button ng-click=\\\"vm.finish()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.FINISH\\\">Delete</md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/packing/dialogs/shipping-dialog/shipping-dialog.html\",\"<md-dialog id=\\\"shipping-dialog\\\" class=\\\"w-500\\\"><md-dialog-content><h2 translate=\\\"PACKING.MARK_AS_SHIPPED\\\"></h2><div><p>\\n{{ \\'PACKING.MARK_AS_SHIPPED_DIALOG_DESCRIPTION_PHRASE_1\\' | translate:vm.translationData }}</p></div><div \\nclass=\\\"did-you-know blue mt-8 mb-16\\\" layout=\\\"column\\\" ng-if=\\\"vm.hasParcels\\\" layout-align=\\\"start center\\\" \\nlayout-gt-xs=\\\"row\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon><div \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\"><span translate=\\\"PACKING.MARK_AS_SHIPPED_DIALOG_DESCRIPTION_PHRASE_2\\\"></span>\\n</div></div><div><p>{{ \\'PACKING.MARK_AS_SHIPPED_DIALOG_DESCRIPTION_PHRASE_3\\' | translate }}</p></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.markAsShipped()\\\" class=\\\"md-primary md-raised\\\" \\ntranslate=\\\"PACKING.MARK_AS_SHIPPED\\\">Delete</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking/dialogs/finish-picking-and-pack-picking-order-dialog/finish-picking-and-pack-picking-order-dialog.html\",\"<md-dialog id=\\\"finish-picking-and-pack-picking-order-dialog\\\" class=\\\"w-500\\\"><md-dialog-content><h2 \\ntranslate=\\\"PICKING.PICKING_AND_PROCESS_PACKING_DIALOG_TITLE\\\"></h2><p>\\n{{ \\'PICKING.PICKING_AND_PROCESS_PACKING_DIALOG_DESCRIPTION\\' | translate }}</p><p>\\n{{ \\'PICKING.PICKING_AND_PROCESS_PACKING_FINISH_BODY_DIALOG\\' | translate }}</p><md-checkbox \\nng-model=\\\"vm.sendPackingOrder\\\">{{ \\'PICKING.SEND_PACKING_ORDER\\' | translate }}</md-checkbox></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button ng-click=\\\"vm.finish()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.FINISH\\\">Delete</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking/dialogs/finish-picking-order-dialog/finish-picking-order-dialog.html\",\"<md-dialog id=\\\"finish-picking-order-dialog\\\" class=\\\"w-500\\\"><md-dialog-content><h2 translate=\\\"{{vm.mainTitle}}\\\"></h2><p \\ntranslate=\\\"PICKING.SUMMARY_PICKED\\\" data-translate-values=\\\"vm.translationData\\\"></p><p \\ntranslate=\\\"PICKING.FINISH_BODY_DIALOG\\\"></p><md-checkbox ng-model=\\\"vm.allPicked\\\"><span translate=\\\"PICKING.MARK_ALL_AS\\\">\\n</span> <span translate=\\\"{{vm.statusName}}\\\" class=\\\"status-badge\\\" ng-class=\\\"vm.colorBadgeClass\\\"></span></md-checkbox>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.finish()\\\" class=\\\"md-primary\\\" \\ntranslate=\\\"GENERAL.FINISH\\\">Delete</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/packing/tabs/details/details.html\",\"<md-card class=\\\"packing-details\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"GENERAL.DETAILS\\\">\\n</span></md-card-title-text></md-card-title><md-card-content><form name=\\\"detailsForm\\\"><div flex layout=\\\"column\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mb-16\\\" ng-if=\\\"vm.packingOrder.pickingOrder\\\"><span class=\\\"mr-8\\\" \\ntranslate=\\\"PACKING.PICKING_ORDER\\\"></span><md-button class=\\\"md-primary no-margin\\\" \\nng-href=\\\"/inventory/picking-packing/picking/{{vm.packingOrder.pickingOrder.id}}\\\">\\n{{vm.packingOrder.pickingOrder.autocode || (\\'PACKING.NO_CODE\\' | translate)}}</md-button></div><div layout=\\\"row\\\" \\nlayout-gt-sm=\\\"row\\\" layout-wrap><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"PICKING.WAREHOUSE\\\">\\n</label><input ng-model=\\\"vm.packingOrder.warehouse.name\\\" disabled=\\\"disabled\\\" type=\\\"text\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"GENERAL.CREATED_AT\\\"></label><input \\nng-model=\\\"vm.packingOrder.createdAt\\\" \\nng-value=\\\"vm.packingOrder.createdAt ?\\n                   (vm.packingOrder.createdAt | date:\\'dd/MM/yyyy · HH:mm\\') + \\'h\\' : null\\\" \\ndisabled=\\\"disabled\\\" type=\\\"text\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"GENERAL.UNITS_UPPERCASE\\\"></label><input ng-model=\\\"vm.packingOrder.amount\\\" disabled=\\\"disabled\\\" type=\\\"text\\\">\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"GENERAL.CREATED_BY\\\"></label>\\n<input ng-model=\\\"vm.packingOrder.createdByInstance\\\" \\nng-value=\\\"vm.packingOrder.createdByInstance.first_name + \\' \\' + vm.packingOrder.createdByInstance.last_name\\\" \\ndisabled=\\\"disabled\\\" type=\\\"text\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"GENERAL.ASSIGNED_TO\\\"></label><md-select multiple=\\\"true\\\" \\nng-disabled=\\\"vm.packingOrder.isPendingToShip() || vm.packingOrder.isShipped()\\\" \\nng-model=\\\"vm.packingOrder.packingActivity.packedBy\\\" ng-change=\\\"vm.updatePackedBy()\\\" \\nplaceholder=\\\"{{\\'PICKING.PICKED_BY\\' | translate}}\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.userSearchText = \\'\\'\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.userSearchText\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-repeat=\\\"user in vm.usersList | filter: vm.userSearchText | orderBy: \\'username\\'\\\" \\nng-value=\\\"user.id\\\"><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><nd-user-picture user=\\\"user\\\" \\nstyle=\\\"width: 26px; height: 26px\\\"></nd-user-picture><span class=\\\"username ph-5\\\" hide show-gt-sm ng-if=\\\"user\\\">\\n{{user.first_name}} {{user.last_name}}</span></div></md-option></md-select></md-input-container><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"GENERAL.STARTED_AT\\\"></label><input \\nng-model=\\\"vm.packingOrder.packingActivity.startedAt\\\" \\nng-value=\\\"vm.packingOrder.packingActivity.startedAt ?\\n                   (vm.packingOrder.packingActivity.startedAt | date:\\'dd/MM/yyyy · HH:mm\\') + \\'h\\' : null\\\" \\ndisabled=\\\"disabled\\\" type=\\\"text\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"GENERAL.ENDED_AT\\\"></label><input ng-model=\\\"vm.packingOrder.packingActivity.finishedAt\\\" \\nng-value=\\\"vm.packingOrder.packingActivity.finishedAt ?\\n                   (vm.packingOrder.packingActivity.finishedAt | date:\\'dd/MM/yyyy · HH:mm\\') + \\'h\\' : null\\\" \\ndisabled=\\\"disabled\\\" type=\\\"text\\\"></md-input-container></div></div></form></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/packing/tabs/products/products.html\",\"<div flex class=\\\"packing-products\\\" layout=\\\"row\\\"><nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\">\\n</nd-barcode-listener><md-card flex layout=\\\"column\\\"><md-card-content layout=\\\"column\\\" flex layout-fill \\nclass=\\\"no-padding\\\"><md-content class=\\\"content no-padding transparent-bg\\\" flex layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"border-bottom ph-5\\\"><md-input-container md-no-float class=\\\"nd-search-input w-200\\\">\\n<md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"product-search\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.getGridProductsPage()\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><span flex></span><md-menu><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"\\\" \\nng-disabled=\\\"!vm.selected.length ||\\n                               vm.packingOrder.isPendingToShip() || vm.packingOrder.isShipped()\\\" \\nng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"more\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil-box\\\"></md-icon><span class=\\\"ml-8\\\">{{\\'PICKING.BULK_EDIT\\' | translate}}</span></div>\\n</md-button></div><md-menu-content><md-menu-item><md-button ng-click=\\\"vm.bulkEditStatus(vm.ITEM_STATUS.PENDING)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span translate=\\\"PICKING.MARK_AS\\\"></span><md-button layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"text-boxed amber-200-bg p-0 text-black\\\" \\nstyle=\\\"line-height: 25px; min-height: 0; color: black\\\"><md-icon class=\\\"s16\\\" style=\\\"margin:0\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/circle-pending.bbd9c65e.svg\\\"></md-icon><span class=\\\"ml-10 text-bold\\\" \\ntranslate=\\\"PACKING.PENDING_TO_PACK\\\"></span></md-button></div></md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.bulkEditStatus(vm.ITEM_STATUS.PACKED)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"PICKING.MARK_AS\\\"></span><md-button layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nclass=\\\"text-boxed md-green-A700-bg p-0 text-black\\\" style=\\\"line-height: 25px; min-height: 0; color: black\\\"><md-icon \\nid=\\\"md-icon-no-margin\\\" style=\\\"margin:0\\\" class=\\\"s16\\\" md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/circle-picked.374e1f2a.svg\\\"></md-icon><span class=\\\"ml-10 text-bold\\\" \\ntranslate=\\\"PACKING.PACKED\\\"></span></md-button></div></md-button></md-menu-item></md-menu-content></md-menu><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.printDeliveriesPdf()\\\" ng-disabled=\\\"vm.generatingDelivieresPdf\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\" class=\\\"mr-5\\\" \\nng-if=\\\"!vm.generatingDelivieresPdf\\\"></md-icon><md-progress-circular md-diameter=\\\"16\\\" \\nng-if=\\\"vm.generatingDelivieresPdf\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular><span \\nng-if=\\\"!vm.deliveryUrl\\\" translate=\\\"PICKING.PRINT_DELIVERIES\\\"></span> <span ng-if=\\\"vm.deliveryUrl\\\" \\ntranslate=\\\"PICKING.DOWNLOAD_DELIVERIES\\\"></span></div></md-button><md-menu md-position-mode=\\\"target-right target\\\" \\nng-if=\\\"vm.hasSendcloud\\\"><md-button class=\\\"md-icon-button no-margin\\\" ng-click=\\\"$mdMenu.open($event)\\\"><md-icon \\nclass=\\\"icon-dots-vertical font-size-24\\\"></md-icon></md-button><md-menu-content width=\\\"4\\\"><md-menu-item><md-button \\nng-click=\\\"vm.toggleVisibilitySendcloudSettings()\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sendcloud-logo-b&w.71ff75e9.svg\\\" class=\\\"mr-8\\\"></md-icon><span \\nng-if=\\\"vm.showSendcloudSettings\\\" translate=\\\"PACKING.HIDE_SENDCLOUD_SETTINGS\\\"></span> <span \\nng-if=\\\"!vm.showSendcloudSettings\\\" translate=\\\"PACKING.SHOW_SENDCLOUD_SETTINGS\\\"></span></md-button></md-menu-item>\\n</md-menu-content></md-menu></div><nd-packing-products-list status=\\\"vm.status\\\" flex packing-order=\\\"vm.packingOrder\\\">\\n</nd-packing-products-list></md-content></md-card-content></md-card><md-card \\nng-if=\\\"vm.showSendcloudSettings && vm.hasSendcloud\\\" layout=\\\"column\\\" flex=\\\"25\\\"><md-card-content layout=\\\"column\\\" flex \\nlayout-fill><md-content class=\\\"content no-padding\\\"><div layout=\\\"column\\\"><span class=\\\"h3 mb-8\\\" \\ntranslate=\\\"PICKING_AND_PACKING.TAG_WITH_SENDCLOUD\\\"></span><md-switch \\nng-model=\\\"vm.sendcloudOptions.printDeliveriesAutomatically\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\" \\nng-change=\\\"vm.storeShippingMethod()\\\" class=\\\"mr-0 mt-8 mb-8\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><span \\nclass=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.PRINT_DELIVERIES\\\"></span><md-icon md-font-icon=\\\"icon-information-outline\\\">\\n<md-tooltip>{{ \\'SCAN_AND_GO.PRINT_DELIVERIES_AND_LABELS\\' | translate}}</md-tooltip></md-icon></div></md-switch>\\n<md-switch ng-model=\\\"vm.sendcloudOptions.volumetricWeight\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\" \\nclass=\\\"mr-0 mt-8 mb-8\\\" ng-change=\\\"vm.storeShippingMethod()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" flex><span \\nclass=\\\"mr-5\\\" translate=\\\"SCAN_AND_GO.USE_VOLUMETRIC_WEIGHT\\\"></span><md-icon md-font-icon=\\\"icon-information-outline\\\">\\n<md-tooltip>{{ \\'SCAN_AND_GO.VOLUMETRIC_WEIGHT_HELP\\' | translate}}</md-tooltip></md-icon></div></md-switch><div \\nlayout=\\\"row\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\" \\nlayout-align=\\\"start stretch\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/icon-sendcloud.35e5d41b.svg\\\" class=\\\"mr-8\\\"></md-icon><md-input-container \\nflex><label translate=\\\"PICKING_AND_PACKING.SHIPPING_METHOD\\\"></label><md-select \\nng-model=\\\"vm.sendcloudOptions.selectedSendcloudShippingMethod\\\" ng-change=\\\"vm.storeShippingMethod()\\\" \\nng-model-options=\\\"{debounce:500}\\\" ng-disabled=\\\"vm.saving\\\" class=\\\"nd-input outlined white no-border\\\" flex \\nmd-on-close=\\\"vm.shippingMethodSearch = \\'\\'\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input class=\\\"md-text\\\" \\nng-model=\\\"vm.shippingMethodSearch\\\" type=\\\"search\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"sendcloudShippingMethod in vm.sendcloudShippingMethods | orderBy: \\'id\\' | filter:vm.shippingMethodSearch\\\" \\nng-value=\\\"sendcloudShippingMethod.id\\\">{{sendcloudShippingMethod.name}}</md-option></md-select><div \\nng-if=\\\"!volumetricWeight\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"pr-8\\\">{{vm.getRealWeight(true)}}</span>\\n <span class=\\\"pr-8\\\">{{vm.weightUnit}}</span></div></md-input-container></div><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\"><div layout=\\\"column\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\" \\nflex><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"posb in vm.packingOrder.packingOrderShippingBoxes | orderBy: \\'id\\'\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"mr-8\\\"></md-icon><md-input-container flex><label>\\n{{\\'ORDER.PACKAGE\\' | translate}} {{$index + 1}}</label><md-select ng-model=\\\"posb.shipping_box\\\" \\nng-model-options=\\\"{debounce:500}\\\" ng-change=\\\"vm.updateShippingBox(posb)\\\" ng-disabled=\\\"vm.saving\\\" \\nclass=\\\"nd-input outlined white no-border\\\" flex><md-option ng-value=\\\"shippingBox.id\\\" \\nng-repeat=\\\"shippingBox in vm.shippingBoxes\\\">{{shippingBox.getFullName()}}</md-option></md-select></md-input-container>\\n<div ng-if=\\\"volumetricWeight\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"pr-8\\\">\\n{{vm.getVolumetricWeight(posb, true)}}</span> <span class=\\\"pr-8\\\">{{vm.weightUnit}}</span></div><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-if=\\\"posb && (vm.packingOrder.isInProgress() || vm.packingOrder.isPendingToPack())\\\" \\nng-click=\\\"vm.removeShippingBox(posb)\\\"><md-icon ng-if=\\\"!posb.removing\\\" md-font-icon=\\\"icon-close\\\"></md-icon>\\n<md-progress-circular ng-if=\\\"posb.removing\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n</md-button></div></div><div layout=\\\"row\\\" \\nng-if=\\\"vm.packingOrder.isPendingToPack() || vm.packingOrder.isInProgress() || (vm.packingOrder.isPendingToShip() && !vm.packingOrder.hasParcels())\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary no-margin\\\" ng-disabled=\\\"vm.creatingShippingBox\\\" \\nng-click=\\\"vm.createShippingBox(true)\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nng-if=\\\"!vm.creatingShippingBox\\\" md-font-icon=\\\"icon-plus\\\"></md-icon><span \\ntranslate=\\\"PICKING_AND_PACKING.ADD_NEW_PACKAGE\\\" flex></span><md-progress-circular ng-if=\\\"vm.creatingShippingBox\\\" \\nmd-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></div></md-button></div></div><div layout=\\\"column\\\" \\nng-if=\\\"(vm.packingOrder.isPendingToShip() || vm.packingOrder.isShipped()) && vm.packingOrder.hasParcels()\\\" flex \\nng-repeat=\\\"posb in vm.packingOrder.packingOrderShippingBoxes | orderBy: \\'id\\'\\\"><div layout=\\\"column\\\" flex><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"mr-8\\\"></md-icon>\\n<div class=\\\"text-bold\\\" flex>{{\\'ORDER.PACKAGE\\' | translate}} {{$index + 1}}</div><md-button \\nclass=\\\"text-bold md-primary no-margin hover-icon-button\\\" target=\\\"_blank\\\" \\nng-if=\\\"posb.packingOrderSendcloudData.externalParcelId\\\" href=\\\"{{posb.packingOrderSendcloudData.parcelUrl}}\\\"><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{posb.packingOrderSendcloudData.externalParcelId}}<md-icon \\nmd-font-icon=\\\"icon-open-in-new\\\" class=\\\"s16 hover-icon\\\"></md-icon></div></md-button><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-if=\\\"posb.packingOrderSendcloudData\\\" \\nng-click=\\\"vm.downloadLabels([posb.packingOrderSendcloudData.externalParcelId])\\\"><md-icon ng-if=\\\"!posb.removing\\\" \\nclass=\\\"s16 md-primary\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/etiqueta-envio.08b02db0.svg\\\"></md-icon><md-tooltip\\n md-direction=\\\"bottom\\\">{{ SCAN_AND_GO.VIEW_LABEL | translate }}</md-tooltip></md-button></div></div></div><div \\nlayout=\\\"row\\\" ng-if=\\\"vm.packingOrder.isPendingToShip() || vm.packingOrder.isShipped()\\\" flex><md-button \\nclass=\\\"stroked ml-0 full-width\\\" ng-if=\\\"vm.packingOrder.hasParcels()\\\" ng-disabled=\\\"vm.finishing\\\" \\nng-click=\\\"vm.handleCancel()\\\" translate=\\\"PICKING_AND_PACKING.CANCEL_LABELS\\\">></md-button></div></div></md-content>\\n</md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/dialogs/select-serial-number-type-dialog/select-serial-number-type-dialog.html\",\"<md-dialog id=\\\"select-serial-number-type-dialog\\\" layout-padding><md-dialog-content><h2 class=\\\"mb-32\\\">\\n{{\\\"GENERAL.SELECT_DEFAULT_SERIAL_NUMBER_TYPE\\\" | translate}}</h2><p>\\n{{\\\"GENERAL.SELECT_DEFAULT_SERIAL_NUMBER_TYPE_MSG\\\" | translate}}</p><md-input-container class=\\\"mb-0\\\" \\nstyle=\\\"display: inherit !important\\\"><label translate=\\\"GENERAL.DEFAULT_SERIAL_NUMBER\\\">Serial Number</label><md-select \\nng-model=\\\"vm.serialNumberType\\\"><md-option \\nng-repeat=\\\"serialNumberType in vm.serialNumberTypes | serialNumberTypeFilter: vm.serialNumberTypeType\\\" \\nng-value=\\\"serialNumberType.id\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-full-serial-number-type \\nvalue=\\\"serialNumberType\\\"></nd-full-serial-number-type></md-option></md-select></md-input-container><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><p translate=\\\"GENERAL.OR_CREATE_SERIAL_NUMBER_TYPE\\\"></p><a \\nui-sref=\\\"app.inventory.configuration.serial_number_types\\\" target=\\\"_blank\\\"><md-icon md-font-icon=\\\"icon-open-in-new\\\">\\n</md-icon></a></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.select()\\\" ng-disabled=\\\"!vm.serialNumberType\\\" translate=\\\"GENERAL.SELECT\\\">\\nSelect</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/directives/nd-picking-packing-actions/nd-picking-packing-actions.html\",\"<div flex layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-if=\\\"vm.showPackingButton()\\\" class=\\\"m-0 ml-8 md-primary\\\" \\nng-class=\\\"{\\'md-raised\\' : !vm.showPickingButton(), \\'stroked\\': vm.showPickingButton()}\\\" \\nng-disabled=\\\"anySelection || creating || !canCreatePackingOrder\\\" \\nhas-permission-and-feature=\\\"inventory.picking_packing.create_packing\\\" ng-click=\\\"vm.createPackingOrder()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"PICKING_AND_PACKING.NEW_PACKING_ORDER\\\"></span></div><md-tooltip \\nng-if=\\\"!anySelection && !canCreatePackingOrder\\\">\\n{{\\'PICKING_AND_PACKING.MULTIPLE_DESTINATIONS_NOT_ALLOWED_FOR_PACKING\\' | translate}}</md-tooltip></md-button><md-button \\nng-if=\\\"vm.showPickingButton()\\\" class=\\\"m-0 ml-8 md-primary md-raised\\\" ng-disabled=\\\"anySelection || creating\\\" \\nhas-permission-and-feature=\\\"inventory.picking_packing.create_picking\\\" ng-click=\\\"vm.createPickingOrder()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"PICKING.NEW_PICKING_ORDER\\\"></span></div></md-button><md-menu ng-if=\\\"vm.showShippingButton()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button ng-disabled=\\\"anySelection\\\" ng-click=\\\"$mdOpenMenu()\\\" \\naria-label=\\\"more\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-pencil-box\\\"></md-icon>\\n<span class=\\\"ml-8\\\">{{\\'PICKING.BULK_EDIT\\' | translate}}</span></div></md-button></div><md-menu-content><md-menu-item>\\n<md-button ng-click=\\\"vm.openShippingPackingDialog()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\ntranslate=\\\"PACKING.MARK_AS_SENT\\\"></span></div></md-button></md-menu-item></md-menu-content></md-menu></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/tabs/packed/packed-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nenable-grouping=\\\"true\\\"></nd-grid>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/tabs/packing/packing-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nenable-grouping=\\\"true\\\"></nd-grid>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/tabs/picking/picking-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nenable-grouping=\\\"true\\\"></nd-grid>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/tabs/picked/picked-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nenable-grouping=\\\"true\\\"></nd-grid>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/tabs/shipped/shipped-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\" \\nenable-grouping=\\\"true\\\"></nd-grid>\");\n$templateCache.put(\"app/main/apps/inventory/views/picking-packing/tabs/to-prepare/to-prepare-list.html\",\"<nd-grid columns=\\\"vm.columns\\\" layout-fill url=\\\"vm.url\\\" status=\\\"status\\\" storage-label=\\\"vm.storageLabel\\\"></nd-grid>\");\n$templateCache.put(\"app/main/apps/inventory/views/low-stock/tabs/purchases/purchases.html\",\"<div id=\\\"inventory-low-stock-purchases\\\" class=\\\"content-card\\\" layout=\\\"column\\\"><div class=\\\"full-width\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" class=\\\"nd-nav-bar-tab\\\" flex>\\n<md-nav-item has-permission=\\\"app.inventory.low_stock.purchases.by_product\\\" \\nmd-nav-sref=\\\"app.inventory.low_stock.purchases.by_product\\\" name=\\\"purchases_by_product\\\"><span \\ntranslate=\\\"LOW_STOCK.BY_PRODUCT\\\"></span></md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.low_stock.purchases.by_provider\\\" \\nmd-nav-sref=\\\"app.inventory.low_stock.purchases.by_provider\\\" name=\\\"purchases_by_provider\\\"><span \\ntranslate=\\\"LOW_STOCK.BY_PROVIDER\\\"></span></md-nav-item></md-nav-bar></div><md-content ui-view=\\\"subcontent\\\" \\nclass=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/low-stock/tabs/replenishments/replenishments.html\",\"<div id=\\\"inventory-low-stock-replenishments\\\" class=\\\"content-card\\\" layout=\\\"column\\\"><div class=\\\"full-width\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-nav-bar md-selected-nav-item=\\\"vm.currentNavItem\\\" class=\\\"nd-nav-bar-tab\\\" flex>\\n<md-nav-item has-permission=\\\"app.inventory.low_stock.replenishments.by_product\\\" \\nmd-nav-sref=\\\"app.inventory.low_stock.replenishments.by_product\\\" name=\\\"by_product\\\"><span \\ntranslate=\\\"LOW_STOCK.BY_PRODUCT\\\"></span></md-nav-item><md-nav-item \\nhas-permission=\\\"app.inventory.low_stock.replenishments.by_warehouse\\\" \\nmd-nav-sref=\\\"app.inventory.low_stock.replenishments.by_warehouse\\\" name=\\\"by_warehouse\\\"><span \\ntranslate=\\\"LOW_STOCK.BY_WAREHOUSE\\\"></span></md-nav-item><span flex class=\\\"border-bottom-nav-bar\\\"></span><md-button \\nng-click=\\\"vm.openAnalysisInformationDialog()\\\" class=\\\"md-icon-button no-margin h-48 w-48 mr-10\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg mr-5\\\"></md-icon></md-button></md-nav-bar></div><md-content \\nui-view=\\\"subcontent\\\" class=\\\"transparent-bg\\\" layout=\\\"column\\\" flex></md-content></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/pricing/sidenavs/main/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div \\ntranslate=\\\"GENERAL.FILTERS\\\">Filters</div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterBrands\\\" flex \\nng-change=\\\"vm.reloadProducts()\\\" placeholder=\\\"{{\\'PRODUCT.ALL_BRANDS\\' | translate}}\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.brandsSearchText)\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.brandsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"brand in vm.brandsList | filter:{\\'name\\':vm.brandsSearchText} | orderBy: \\'name\\'\\\" ng-value=\\\"brand.id\\\">\\n{{brand.name}}</md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-folder-multiple\\\"></md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterCategories\\\" flex \\nng-change=\\\"vm.reloadProducts()\\\" placeholder=\\\"{{\\'PRODUCT.ALL_CATEGORIES\\' | translate}}\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(vm.categoriesList)\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.categoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"category in vm.categoriesList | filter:{\\'name\\':vm.categoriesSearchText} | orderBy: \\'name\\'\\\" \\nng-value=\\\"category.id\\\">{{category.name}}</md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-folder\\\"></md-icon><md-select multiple=\\\"true\\\" \\nng-model=\\\"vm.filterSubcategories\\\" flex ng-change=\\\"vm.reloadProducts()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_SUBCATEGORIES\\' | translate}}\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.subcategoriesList)\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.subcategoriesSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"subcategory in vm.subcategoriesList | filter:{\\'name\\':vm.subcategoriesSearchText} | orderBy: \\'name\\'\\\" \\nng-value=\\\"subcategory.id\\\">{{subcategory.name}}</md-option></md-select></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select \\nmultiple=\\\"true\\\" ng-model=\\\"vm.filterSeasons\\\" flex ng-change=\\\"vm.reloadProducts()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ALL_SEASONS\\' | translate}}\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(vm.seasonsSearchText)\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.seasonsSearchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"season in vm.seasonsList | filter:{\\'name\\':vm.seasonsSearchText} | orderBy: \\'-name\\'\\\" ng-value=\\\"season.id\\\">\\n{{season.name}}</md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-star\\\"></md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterStatus\\\" flex \\nng-change=\\\"vm.reloadProducts()\\\" placeholder=\\\"{{\\'PRODUCT.ALL_STATUS\\' | translate}}\\\"><md-option \\nng-repeat=\\\"(key, value) in vm.statuses\\\" ng-value=\\\"key\\\">{{value | translate}}</md-option></md-select></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" has-permission=\\\"app.ecommerce\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-web\\\"></md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.filterSites\\\" flex \\nng-change=\\\"vm.reloadProducts()\\\" placeholder=\\\"{{\\'PRODUCT.ALL_SITES\\' | translate}}\\\"><md-option \\nng-repeat=\\\"site in vm.sitesList | orderBy: \\'name\\'\\\" ng-value=\\\"site.id\\\">{{site.name}}</md-option></md-select></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.discountActive\\\" \\nng-change=\\\"vm.reloadProducts()\\\"><span translate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\"></span></md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.duplicatedProducts\\\" \\nng-change=\\\"vm.reloadProducts()\\\"><span translate=\\\"PRODUCT.DUPLICATED\\\"></span></md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mt-20\\\"><md-checkbox ng-model=\\\"vm.isNoos\\\" ng-change=\\\"vm.reloadProducts()\\\"><span \\ntranslate=\\\"PRODUCT.IS_NOOS\\\"></span></md-checkbox></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/change-cover/change-cover-dialog.html\",\"<md-dialog id=\\\"change-cover-dialog\\\"><md-dialog-content><h2>{{\\'PRODUCT.CHANGE_COVER_IMAGE\\' | translate}}</h2><h3>\\n{{\\'PRODUCT.SELECT_NEW_COVER\\' | translate}}</h3><div layout=\\\"row\\\" layout-wrap layout-align=\\\"center center\\\"><div \\nlayout-align=\\\"center center\\\" ng-repeat=\\\"image in vm.images\\\"><div class=\\\"product-image\\\" layout=\\\"row\\\" \\nng-click=\\\"vm.changeSelectedImage(image)\\\" ng-class=\\\"vm.selectedImage.id == image.id ? \\'selected-image\\' : \\'\\'\\\" \\nlayout-align=\\\"center center\\\" style=\\\"background-image:url({{image.url}})\\\"><md-icon md-font-icon=\\\"icon-check-circle\\\" \\nng-if=\\\"vm.selectedImage.id == image.id\\\" class=\\\"blue-fg corner-right\\\"></md-icon></div></div></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><span flex></span><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button class=\\\"md-primary\\\" ng-click=\\\"vm.save()\\\">\\n{{\\'GENERAL.SAVE\\' | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/ecommerce-category-tree/ecommerce-category-tree-dialog.html\",\"<md-dialog id=\\\"ecommerce-category-tree-dialog\\\"><md-dialog-content><h2 class=\\\"mb-20\\\">\\n{{\\'PRODUCT.WEB_CATEGORIES_OF_SITE\\' | translate: {name: vm.site.name} }}</h2><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"vm.loading\\\" class=\\\"h-180\\\"><md-progress-circular></md-progress-circular></div>\\n<md-input-container md-no-float ng-if=\\\"!vm.loading\\\" class=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" \\nclass=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.search\\\" type=\\\"text\\\" ng-model-options=\\\"{debounce:200}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><script\\n type=\\\"text/ng-template\\\" id=\\\"menu.html\\\">\\n<ul>\\n        <li ng-repeat=\\\"category in category.children | filter: {\\'filterPath\\': vm.search}\\\">\\n          <md-checkbox ng-checked=\\\"vm.exists(category)\\\"\\n                       ng-click=\\\"vm.toggle(category)\\\">\\n            {{category.name}}\\n            <md-tooltip>{{category.filterPath}}</md-tooltip>\\n          </md-checkbox>\\n          <div ng-if=\\\"category.children.length\\\"\\n               ng-include=\\\"\\'menu.html\\'\\\"></div>\\n        </li>\\n      </ul>\\n</script><ul class=\\\"mt-30\\\"><li ng-repeat=\\\"category in vm.categories | filter: {\\'filterPath\\': vm.search}\\\"><md-checkbox \\nng-checked=\\\"vm.exists(category)\\\" ng-click=\\\"vm.toggle(category)\\\">{{category.name}}</md-checkbox><div \\nng-if=\\\"category.children.length\\\" ng-include=\\\"\\'menu.html\\'\\\"></div></li></ul></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\"><a class=\\\"hint mr-5\\\" ng-click=\\\"vm.close()\\\" has-permission=\\\"app.ecommerce.sites.site.categories\\\" \\nui-sref=\\\"app.ecommerce.sites.site.categories({id:vm.site.id})\\\" translate=\\\"PRODUCT.GO_TO_WEB_CATEGORIES\\\"></a> <span \\nflex></span><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.close()\\\" translate=\\\"GENERAL.CLOSE\\\">Close</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/exchange/exchange-product-variants-dialog.html\",\"<md-dialog aria-label=\\\"New Category\\\" style=\\\"max-width: 600px; width: 100%\\\"><form name=\\\"categoryForm\\\" ng-cloak>\\n<md-dialog-content><h2 class=\\\"mb-20\\\">{{\\'PRODUCT.MERGE_PRODUCT_VARIANTS\\' | translate}}</h2><div \\nclass=\\\"did-you-know mb-10\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg mr-5\\\"></md-icon><div layout=\\\"column\\\" flex><div \\nclass=\\\"did-you-know-message\\\"><div class=\\\"mb-5\\\">{{\\'PRODUCT.MERGE_VARIANTS_DESCRIPTION\\' | translate}}</div><li \\nclass=\\\"mb-5\\\">{{\\'PRODUCT.MERGE_VARIANTS_STOCK_INFO\\' | translate}}</li><li class=\\\"mb-5\\\">\\n{{\\'PRODUCT.MERGE_VARIANTS_ORDERS_INFO\\' | translate}}</li><li class=\\\"mb-5\\\">\\n{{\\'PRODUCT.MERGE_VARIANTS_WARNING\\' | translate}}</li></div></div></div></div><div \\nng-repeat=\\\"variant in vm.productVariants\\\"><md-icon class=\\\"icon icon-book-variant name font-size-24 mr-10\\\"></md-icon>\\n<text>{{ vm.product.name + \\' \\' }}</text><b>{{variant.color_name + \\' - \\' + variant.size_name}} </b><span \\nclass=\\\"secondary-text\\\">({{vm.getProductVariantDetails(variant)}})</span></div><md-input-container flex \\nclass=\\\"md-block mb-10\\\"><md-icon class=\\\"icon icon-swap-horizontal name font-size-24\\\"></md-icon><label \\ntranslate=\\\"PRODUCT.MERGE_VARIANTS_AS\\\">Serial Number</label><md-select required flex class=\\\"md-block\\\" \\nng-model=\\\"vm.selectedId\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"variant in vm.productVariants | filter:vm.selectFilter\\\" value=\\\"{{variant.id}}\\\">\\n{{variant.color_name}} - {{variant.size_name}} <span class=\\\"secondary-text\\\">({{vm.getProductVariantDetails(variant)}})\\n</span></md-option></md-select></md-input-container><div class=\\\"did-you-know yellow mb-10\\\" \\nng-show=\\\"vm.showWaringMessage\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\" class=\\\"yellow mr-5\\\"></md-icon><div \\nlayout=\\\"column\\\" flex><div class=\\\"did-you-know-message\\\">\\n{{\\'PRODUCT.MERGE_VARIANTS_CONFIRMATION\\' | translate: {targetVariant: vm.selectedVariant.product_variant_name} }}</div>\\n</div></div></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.variants.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-raised md-primary\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!categoryForm.$dirty || !categoryForm.$valid\\\" translate=\\\"CONFIGURATION.MERGE_ACTION\\\">Save</md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/product-search/product-search.html\",\"<md-dialog class=\\\"no-padding h-800\\\" id=\\\"product-search-dialog\\\" layout-padding><div class=\\\"border-bottom p-0 h-60\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\naria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" ng-click=\\\"toggleSidenav(\\'left\\')\\\" \\nng-if=\\\"!$mdMedia(\\'gt-sm\\')\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><div \\nclass=\\\"md-toolbar-tools\\\">{{(tabIndex === 0 ? \\'PRODUCT.SEARCH_PRODUCTS\\' : \\'PRODUCT.SELECT_VARIANT\\') | translate}}</div>\\n<div class=\\\"filter-notification mt-25 ml-20\\\" ng-if=\\\"status.notifications\\\"><span class=\\\"notification-number\\\">\\n{{status.notifications}}</span><md-icon md-font-icon=\\\"icon-close\\\" ng-click=\\\"clearFilter()\\\"></md-icon></div></div>\\n<md-button ng-click=\\\"setVisibleTable(0)\\\" ng-if=\\\"tabIndex === 1\\\"><div layout=\\\"row\\\"><md-icon class=\\\"mr-5\\\" \\nmd-font-icon=\\\"icon-arrow-left\\\"></md-icon>{{\\'PRODUCTS.PRODUCTS\\' | translate}}</div></md-button><div \\nclass=\\\"secondary-text ml-10 font-size-14\\\" ng-if=\\\"result.products.length && !getVariants\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: { n: result.products.length } }}</div><div \\nclass=\\\"secondary-text ml-10 font-size-14\\\" ng-if=\\\"result.products.length && getVariants\\\">\\n{{ \\'PRODUCTS.N_PRODUCTSVARIANTS_SELECTED\\' | translate: { pv: result.productVariants.length, p: result.products.length } }}\\n</div><span flex></span><md-button class=\\\"stroked\\\" hotkey=\\\"{esc: cancel}\\\" ng-click=\\\"cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-primary md-raised\\\" \\ndata-test-id=\\\"transfer-button-advanced-search-done\\\" ng-click=\\\"select()\\\" ng-disabled=\\\"selected.length == 0\\\" \\nng-if=\\\"multipleProducts\\\" translate=\\\"GENERAL.SELECT\\\">Select</md-button></div><md-dialog-content class=\\\"no-padding\\\" flex \\nlayout=\\\"row\\\" ng-show=\\\"!selectedProductVariants.length\\\"><md-sidenav class=\\\"md-sidenav-left border-right\\\" flex \\nmd-component-id=\\\"left\\\" md-is-locked-open=\\\"$mdMedia(\\'gt-sm\\')\\\"><md-content class=\\\"md-padding m-0\\\" layout-margin>\\n<md-input-container class=\\\"nd-search-input\\\" flex md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nclass=\\\"secondary-text\\\" flex id=\\\"product-search-input\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks \\nng-model=\\\"search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container><nd-products-filters status=\\\"status\\\" \\non-filters-change=\\\"reloadProducts()\\\"></nd-products-filters><div class=\\\"m-0 p-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"sourceWarehouse\\\"><md-checkbox \\nng-change=\\\"reloadProducts(\\'source\\', sourceUnderMinimum)\\\" ng-model=\\\"sourceUnderMinimum\\\"><div layout=\\\"column\\\"><span \\ntranslate=\\\"STOCKS.UNDER_MINIMUM\\\"></span> <small class=\\\"secondary-text\\\" translate=\\\"STOCKS.SOURCE_WAREHOUSE\\\"></small>\\n</div></md-checkbox></div><div class=\\\"m-0 p-0\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"targetWarehouse\\\">\\n<md-checkbox ng-change=\\\"reloadProducts(\\'target\\', targetUnderMinimum)\\\" ng-model=\\\"targetUnderMinimum\\\"><div \\nlayout=\\\"column\\\"><span translate=\\\"STOCKS.UNDER_MINIMUM\\\"></span> <small class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.TARGET_WAREHOUSE\\\"></small></div></md-checkbox></div></md-content></md-sidenav><md-tabs flex \\nlayout-fill md-selected=\\\"tabIndex\\\"><md-tab label=\\\"0\\\"><table class=\\\"row-border hover\\\" datatable dt-columns=\\\"dtColumns\\\" \\ndt-instance=\\\"dtInstance\\\" dt-options=\\\"dtOptions\\\" flex ng-class=\\\"{\\'no-hover-checkbox-table\\': getVariants}\\\"></table>\\n</md-tab><md-tab label=\\\"1\\\" ng-hide=\\\"!getVariants\\\"><table class=\\\"row-border hover\\\" datatable \\ndt-columns=\\\"dtVariantsColumns\\\" dt-instance=\\\"dtVariantsInstance\\\" dt-options=\\\"dtVariantsOptions\\\" flex></table></md-tab>\\n</md-tabs></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/product-variant-selector-grid/product-variant-selector-grid.html\",\"<md-dialog class=\\\"no-padding h-800\\\" id=\\\"product-variant-selector-grid-dialog\\\" layout-padding><div \\nclass=\\\"border-bottom\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div class=\\\"h2\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button aria-label=\\\"Toggle left sidenav\\\" class=\\\"md-icon-button sidenav-toggle\\\" \\nng-click=\\\"vm.toggleSidenav(\\'left\\')\\\" ng-if=\\\"!vm.$mdMedia(\\'gt-sm\\')\\\"><md-icon class=\\\"icon\\\" \\nmd-font-icon=\\\"icon-filter-variant\\\"></md-icon></md-button><div class=\\\"h2 pl-15 pr-15\\\" \\ntranslate=\\\"PRODUCT.ADD_PRODUCT_VARIANTS\\\"></div><div class=\\\"filter-notification mt-25 ml-20\\\" \\nng-if=\\\"vm.status.notifications\\\"><span class=\\\"notification-number\\\">{{vm.status.notifications}}</span><md-icon \\nmd-font-icon=\\\"icon-close\\\" ng-click=\\\"vm.clearFilter()\\\"></md-icon></div><span class=\\\"secondary-text ml-10 font-size-14\\\" \\nng-if=\\\"vm.keptSelectionArray.length\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: { n: vm.keptSelectionArray.length } }} </span><span flex></span>\\n<md-button class=\\\"stroked\\\" hotkey=\\\"{esc: cancel}\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.confirm()\\\" translate=\\\"GENERAL.SELECT\\\">Select</md-button></div>\\n</div><md-dialog-content class=\\\"no-padding\\\" flex layout=\\\"row\\\"><md-sidenav class=\\\"md-sidenav-left border-right\\\" flex \\nmd-component-id=\\\"left\\\" md-is-locked-open=\\\"vm.$mdMedia(\\'gt-sm\\')\\\"><md-content class=\\\"md-padding m-0\\\" layout-margin>\\n<md-input-container class=\\\"nd-search-input\\\" flex md-no-float><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nclass=\\\"secondary-text\\\" flex id=\\\"product-search-input\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.status.search\\\" ng-model-options=\\\"{debounce:500}\\\" placeholder=\\\"Search\\\" translate \\nng-change=\\\"vm.filterChanged()\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" type=\\\"text\\\"></md-input-container>\\n<nd-products-filters status=\\\"vm.status\\\" on-filters-change=\\\"vm.filterChanged()\\\"></nd-products-filters></md-content>\\n</md-sidenav><md-content class=\\\"content no-padding uid-grid-container\\\" flex><md-progress-linear \\nclass=\\\"loader md-primary\\\" md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.loading\\\"></md-progress-linear><div class=\\\"grid\\\" flex \\nstyle=\\\"height: 100%; max-height: 100%; overflow: hidden\\\" ui-grid=\\\"vm.gridOptions\\\" ui-grid-auto-resize ui-grid-cellnav \\nui-grid-exporter ui-grid-grouping ui-grid-pagination ui-grid-pinning ui-grid-resize-columns ui-grid-save-state \\nui-grid-selection></div></md-content></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/stock-movement/stock-movement.html\",\"<md-dialog id=\\\"stock-movement-reason\\\" class=\\\"w-400\\\"><md-dialog-content layout=\\\"column\\\" flex><div layout=\\\"column\\\"><h2 \\ntranslate class=\\\"mt-0\\\">STOCKS.MOVEMENT</h2><div translate>STOCKS.ADD_MOVEMENT_MSG</div><md-select \\nng-model=\\\"vm.movement.reason\\\" placeholder=\\\"{{\\'MOVEMENTS.REASON\\' | translate}}\\\" ng-disabled=\\\"vm.readonly\\\"><md-option \\nng-repeat=\\\"movement in vm.movements\\\" ng-value=\\\"movement\\\">\\n{{\\'MOVEMENTS.\\' + vm.STOCK_MOVEMENT_REASONS[movement] | translate }}</md-option></md-select><md-input-container \\nclass=\\\"md-block\\\"><label translate=\\\"MOVEMENTS.NOTES\\\">Notes</label><textarea ng-model=\\\"vm.movement.notes\\\" \\nmd-maxlength=\\\"vm.maxLength\\\" rows=\\\"1\\\" ng-disabled=\\\"vm.readonly\\\" md-select-on-focus></textarea></md-input-container>\\n</div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><div ng-if=\\\"vm.hasReasonWhenInit\\\">\\n<md-button ng-click=\\\"vm.deleteReason()\\\" class=\\\"md-warn mr-75 ml-0\\\">{{\\'GENERAL.DELETE\\' | translate }}</md-button></div>\\n<div><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">\\n{{(vm.readonly? \\'GENERAL.CLOSE\\' : \\'GENERAL.CANCEL\\') | translate }}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"vm.accept()\\\" ng-if=\\\"!vm.readonly\\\" ng-disabled=\\\"vm.movement.notes.length > vm.maxLength\\\">\\n{{\\'GENERAL.SAVE\\' | translate }}</md-button></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/uid-resurrect/uid-resurrect-dialog.html\",\"<md-dialog id=\\\"uid-resurrect-dialog\\\"><md-dialog-content layout=\\\"column\\\" flex><div layout=\\\"column\\\"><h2 translate \\nclass=\\\"mt-0\\\">PRODUCT.RESURRECT_UID</h2></div><div layout=\\\"column\\\" class=\\\"md-padding\\\"><span translate \\nclass=\\\"mt-0 mb-10\\\">PRODUCT.RESURRECT_UID_DIALOG_MESSAGE</span> <span class=\\\"mt-0 mb-10\\\" translate>\\nPRODUCT.RESURRECT_UID_WAREHOUSE_MESSAGE</span><md-input-container class=\\\"w-300 m-15\\\"><label \\ntranslate=\\\"GOALS.WAREHOUSE\\\">Warehouse</label><md-select name=\\\"warehouse\\\" ng-model=\\\"vm.selectedWarehouse\\\" required>\\n<md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}</md-option></md-select>\\n</md-input-container></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nclass=\\\"border-top\\\"><span translate class=\\\"mt-0 mr-30\\\">PRODUCT.RESURRECT_UID_CONFIRM_MESSAGE</span><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.cancel()\\\">{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"!vm.validForm()\\\" ng-click=\\\"vm.accept()\\\">{{\\'GENERAL.OK\\' | translate }}\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/uid-movements/uid-movements.html\",\"<md-dialog id=\\\"uid-movements-dialog\\\" style=\\\"width: 960px\\\"><md-dialog-content layout=\\\"column\\\"><div layout=\\\"column\\\" \\nclass=\\\"md-padding border-bottom\\\"><h2 ng-if=\\\"!vm.product.manage_lots\\\" translate>PRODUCT.UID_MOVEMENTS</h2><h2 \\nng-if=\\\"vm.product.manage_lots\\\" translate>PRODUCT.LOT_MOVEMENTS</h2></div><md-content \\nclass=\\\"content uid-grid-container m-10 mt-0 overflow-x-hidden\\\" flex><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination \\nui-grid-move-columns ui-grid-exporter ui-grid-resize-columns ui-grid-pinning ui-grid-cellnav ui-grid-save-state \\nui-grid-auto-resize ui-grid-selection class=\\\"grid mt-0\\\" style=\\\"height: 100%; width: 930px\\\"></div></md-content>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"border-top\\\"><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.accept()\\\">{{\\'GENERAL.CANCEL\\' | translate }}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/uids-add/uids-add.html\",\"<md-dialog id=\\\"uid-add-dialog\\\"><md-dialog-content layout=\\\"column\\\" flex><nd-barcode-listener \\ncallback=\\\"vm.uidListenerCallback(barcode)\\\"></nd-barcode-listener><div layout=\\\"column\\\" class=\\\"md-padding\\\"><h2 translate \\nclass=\\\"mt-0\\\">SALE.ADD_UIDS</h2><div translate>SALE.ADD_UIDS_MSG</div></div><div class=\\\"h-400\\\" flex><div \\nclass=\\\"md-padding\\\" flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><input class=\\\"nd-input mr-8\\\" \\nplaceholder=\\\"{{ \\'PRODUCT.UID\\' | translate}}\\\" flex nd-mute-barcode-callbacks ng-model=\\\"vm.newUidStock.uid\\\" type=\\\"text\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.addUidStock()\\\" ng-disabled=\\\"vm.saving || !vm.newUidStock.uid\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-8\\\"></md-icon>\\n{{\\'PRODUCT.ADD_UID_STOCK\\' | translate}}</div></md-button></div><table datatable flex=\\\"100\\\" dt-options=\\\"vm.dtOptions\\\" \\ndt-columns=\\\"vm.dtColumns\\\" dt-instance=\\\"vm.dtInstance\\\" class=\\\"row-border hover\\\" \\nng-class=\\\"{\\'no-hover-checkbox-table\\': getVariants}\\\"></table></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" class=\\\"border-top\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.accept()\\\">\\n{{\\'GENERAL.CONTINUE\\' | translate }}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/uids-edit/edit-uid-dialog.html\",\"<md-dialog id=\\\"edit-uid-dialog\\\" aria-label=\\\"Edit Uid Stock Dialog\\\"><form ng-cloak name=\\\"editUidForm\\\">\\n<md-dialog-content><h2 translate=\\\"PRODUCT.CREATE_SERIES\\\" ng-if=\\\"!vm.uidStock.id && !vm.manageLots\\\" class=\\\"mb-32\\\"></h2>\\n<h2 translate=\\\"PRODUCT.CREATE_LOT\\\" ng-if=\\\"!vm.uidStock.id && vm.manageLots\\\" class=\\\"mb-32\\\"></h2><h2 \\ntranslate=\\\"PRODUCT.EDIT_SERIES\\\" ng-if=\\\"vm.uidStock.id && !vm.manageLots\\\" class=\\\"mb-32\\\"></h2><h2 \\ntranslate=\\\"PRODUCT.EDIT_LOT\\\" ng-if=\\\"vm.uidStock.id && vm.manageLots\\\" class=\\\"mb-32\\\"></h2><div layout=\\\"row\\\" layout-wrap>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" class=\\\"no-errors-spacer\\\"><md-icon class=\\\"mr-8 secondary-text\\\" \\nmd-font-icon=\\\"icon-store\\\"></md-icon><label translate=\\\"PRODUCT.WAREHOUSE\\\"></label><md-select \\nng-model=\\\"vm.uidStock.warehouse\\\" ng-disabled=\\\"vm.warehouseIsDisabled()\\\" data-test-id=\\\"create-uid-warehouse-input\\\" \\nrequired><md-option ng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'name\\'\\\" ng-value=\\\"warehouse.id\\\">{{warehouse.name}}\\n</md-option></md-select></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nng-disabled=\\\"vm.disableVariantSelector\\\" class=\\\"no-errors-spacer\\\"><md-icon class=\\\"mr-8 secondary-text\\\" \\nmd-font-icon=\\\"icon-package-variant-closed\\\"></md-icon><label ng-if=\\\"vm.uidStock.product_variant\\\" \\ntranslate=\\\"PRODUCT.PRODUCT_VARIANT\\\"></label><md-select ng-model=\\\"vm.uidStock.product_variant\\\" required \\ndata-test-id=\\\"create-uid-product-variant-input\\\" ng-disabled=\\\"vm.productVariantIsDisabled()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.PRODUCT_VARIANT\\' | translate}}\\\"><md-option \\nng-repeat=\\\"productVariant in vm.productVariants | filter:{\\'deleted\\':false}\\\" ng-value=\\\"productVariant.id\\\">\\n{{productVariant.color_name}}/{{productVariant.size_name}}</md-option></md-select></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" class=\\\"no-errors-spacer\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/fingerprint.bc1e8f69.svg\\\" class=\\\"icon font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.uidStock.uid\\\" placeholder=\\\"{{\\'PRODUCT.LOTE_UID\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nnd-mute-barcode-callbacks ng-disabled=\\\"vm.isEditMode()\\\" data-test-id=\\\"create-uid-uid-input\\\" type=\\\"text\\\" required>\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nclass=\\\"md-icon-float md-icon-left no-errors-spacer\\\"><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-calendar\\\"></md-icon><label\\n ng-if=\\\"vm.uidStock.expiration_date\\\" translate=\\\"PRODUCT.EXPIRATION_DATE\\\"></label><md-datepicker class=\\\"full-width\\\" \\nmd-is-open=\\\"vm.datePickerOpen\\\" ng-click=\\\"vm.datePickerOpen = true;\\\" md-hide-icons=\\\"calendar\\\" flex \\nng-disabled=\\\"vm.isEditMode()\\\" md-placeholder=\\\"{{ \\'PRODUCT.EXPIRATION_DATE\\' | translate}}\\\" \\nng-model=\\\"vm.uidStock.expiration_date\\\"></md-datepicker></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" class=\\\"no-errors-spacer\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/numeric.97480417.svg\\\" \\nclass=\\\"icon font-size-24\\\"></md-icon><input name=\\\"value\\\" ng-model=\\\"vm.uidStock.amount\\\" \\nplaceholder=\\\"{{\\'PRODUCT.AMOUNT\\' | translate}}\\\" type=\\\"number\\\" ng-change=\\\"vm.amountChanged=true\\\" \\ndata-test-id=\\\"create-uid-quantity-input\\\" nd-mute-barcode-callbacks ng-disabled=\\\"!vm.manageLots\\\" step=\\\"1\\\" required \\nmin=\\\"0\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"!vm.hideMovementReason\\\" \\nclass=\\\"no-errors-spacer\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/doble-arrow.ad5d6bd9.svg\\\" \\nclass=\\\"icon font-size-24\\\"></md-icon><md-select ng-model=\\\"vm.uidStock.reason\\\" \\nplaceholder=\\\"{{\\'MOVEMENTS.REASON\\' | translate}}\\\"><md-option ng-repeat=\\\"movement in vm.movements\\\" ng-value=\\\"movement\\\">\\n{{\\'MOVEMENTS.\\' + vm.STOCK_MOVEMENT_REASONS[movement] | translate }}</md-option></md-select></md-input-container>\\n<md-input-container flex=\\\"100\\\" ng-if=\\\"!vm.hideNotes\\\" class=\\\"mb-0\\\"><label translate=\\\"MOVEMENTS.NOTES\\\">Notes</label>\\n<md-icon md-font-icon=\\\"icon-pencil-box-outline\\\" class=\\\"icon font-size-24\\\"></md-icon><textarea \\nng-model=\\\"vm.uidStock.notes\\\" nd-mute-barcode-callbacks md-maxlength=\\\"256\\\" rows=\\\"1\\\"></textarea></md-input-container>\\n</div></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\"></md-button><md-button ng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised\\\" \\ndata-test-id=\\\"create-uid-save-button\\\" ng-disabled=\\\"!editUidForm.$valid || vm.saving || vm.disableSavingButton()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular md-mode=\\\"indeterminate\\\" ng-if=\\\"vm.saving\\\" \\nmd-diameter=\\\"20\\\" class=\\\"mr-5\\\"></md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/uids-search/uids-search.html\",\"<md-dialog id=\\\"uid-search-dialog\\\" style=\\\"width: 900px !important\\\"><md-dialog-content layout=\\\"column\\\" flex><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\"><h2 ng-if=\\\"vm.manageLots && vm.manageUids\\\" translate \\nclass=\\\"m-0\\\">PRODUCT.SELECTED_LOTS</h2><h2 translate ng-if=\\\"!vm.manageLots && vm.manageUids\\\" class=\\\"m-0 ml-10\\\">\\nPRODUCT.SELECT_SERIES</h2><div class=\\\"ml-10\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><div><md-input-container \\nmd-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon class=\\\"secondary-text\\\" md-font-icon=\\\"icon-flag-variant\\\">\\n</md-icon><md-select ng-model=\\\"vm.statusFilter\\\" flex placeholder=\\\"{{\\'PRODUCT.STOCK_DETAIL_STATUS\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-value=\\\"\\'available\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\ntranslate=\\\"PRODUCT.STOCK_DETAIL_STATUS_AVAILABLE\\\"></div></md-option><md-option ng-value=\\\"\\'allocated\\'\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" translate=\\\"PRODUCT.STOCK_DETAIL_STATUS_ALLOCATED\\\"></div></md-option><md-option\\n ng-value=\\\"\\'shipped\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" translate=\\\"PRODUCT.STOCK_DETAIL_STATUS_SHIPPED\\\">\\n</div></md-option><md-option ng-value=\\\"\\'not_available\\'\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\ntranslate=\\\"PRODUCT.STOCK_DETAIL_STATUS_NOT_AVAILABLE\\\"></div></md-option></md-select></md-input-container></div></div>\\n<span flex></span><md-input-container md-no-float flex=\\\"50\\\" class=\\\"nd-search-input mr-16\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"uid-search\\\" nd-mute-barcode-callbacks \\nng-model=\\\"vm.uidToSearch\\\" ng-change=\\\"vm.searchUID()\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" \\ndata-test-id=\\\"search-series-input\\\" placeholder=\\\"Search\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-input-container></div><div class=\\\"h-450 ml-16\\\"><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination \\nui-grid-resize-columns ui-grid-auto-resize class=\\\"grid\\\"></div></div></md-dialog-content><md-dialog-actions \\nlayout=\\\"row border-top\\\"><div flex><md-button class=\\\"md-primary\\\" ng-if=\\\"vm.allowCreate\\\" ng-click=\\\"vm.editUID()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-8\\\"></md-icon><p class=\\\"m-0\\\" \\nng-if=\\\"!vm.manageLots\\\">{{\\'PRODUCT.ADD_UID\\' | translate}}</p><p class=\\\"m-0\\\" ng-if=\\\"vm.manageLots\\\">\\n{{\\'PRODUCT.ADD_LOT\\' | translate}}</p></div></md-button></div><div><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button class=\\\"md-primary md-raised\\\" \\ndata-test-id=\\\"uids-search-dialog-ok-button\\\" ng-click=\\\"vm.accept()\\\">{{\\'GENERAL.CONTINUE\\' | translate }}</md-button>\\n</div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/dialogs/variants-selector/variants-selector-dialog.html\",\"<md-dialog class=\\\"md-padding w-500\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\" flex><md-icon \\nmd-font-icon=\\\"icon-book-variant\\\" class=\\\"m-0 mr-10\\\"></md-icon><h2 class=\\\"secondary-text m-0\\\" \\ntranslate=\\\"PRODUCT.SELECTED_VARIANTS\\\"></h2></div><md-dialog-content class=\\\"m-0 p-0\\\"><form id=\\\"selectVariantsForm\\\" \\nname=\\\"selectVariantsForm\\\" layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><div layout=\\\"column\\\" flex><div layout=\\\"column\\\" flex>\\n<fieldset class=\\\"mb-10 md-padding pb-50 fieldset-box\\\" flex=\\\"100\\\"><legend class=\\\"legend w-200\\\"><md-select required \\nng-model=\\\"vm.currentCategoryId\\\" ng-change=\\\"vm.onSelectorChange()\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose()\\\" placeholder=\\\"{{\\'PRODUCT.SIZE_VARIANT_CATEGORY\\' | translate}}\\\"><md-select-header>\\n<input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"category in vm.allCategories | filter:vm.selectFilter | orderBy: \\'name\\'\\\" ng-value=\\\"category.id\\\">\\n{{category | codename}}</md-option></md-select></legend><div layout=\\\"row\\\" class=\\\"mb-16\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"vm.selectAll[vm.currentCategoryId]\\\"></md-checkbox><div class=\\\"divider-vertical mt-10\\\"></div>\\n<md-input-container md-no-float class=\\\"no-margin\\\"><md-icon class=\\\"icon icon-magnify name font-size-24 md-primary-fg\\\">\\n</md-icon><input ng-model=\\\"vm.variantsFilter\\\" class=\\\"search-dark\\\"></md-input-container></div><span flex></span>\\n<md-button class=\\\"md-icon-button md-raised\\\" ng-click=\\\"vm.createNewVariant($event, \\'size\\')\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\"></md-icon></md-button></div><div layout=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" \\nflex-gt-sm=\\\"25\\\" flex-gt-md=\\\"50\\\" \\nng-repeat=\\\"variant in vm.variantsByCategoryId[vm.currentCategoryId] | orderBy: \\'position\\' | filter: vm.variantsFilter track by $index\\\">\\n<div class=\\\"text-right\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\" flex><md-tooltip ng-if=\\\"variant.hasStock\\\">\\n{{\\'PRODUCT.NOT_CLICKABLE_BECAUSE_HAS_STOCK\\' | translate: {variant: variant.name} }}</md-tooltip><md-checkbox \\nng-checked=\\\"vm.isSelected(variant)\\\" ng-model=\\\"variant.selected\\\" ng-disabled=\\\"variant.hasStock\\\">{{variant | codename}}\\n</md-checkbox></div></div></div></fieldset></div></div></form></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"inventory.configuration.variants.update\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">\\nCancel</md-button><md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!selectVariantsForm.$dirty || !selectVariantsForm.$valid\\\" translate=\\\"GENERAL.DONE\\\">Save</md-button>\\n</md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-adjustment-order-product/nd-adjustment-order-product.html\",\"<div id=\\\"nd-ajustment-order-product\\\" class=\\\"flex\\\"><table class=\\\"simple\\\" ms-responsive-table><tbody><tr \\nng-repeat=\\\"color in orderProduct.color_variants | orderBy: \\'position\\'\\\"><td \\nng-if=\\\"orderProduct.product_cover_thumbnail && ($index % orderProduct.color_variants.length) == 0\\\" \\nclass=\\\"border-top border-right image\\\" rowspan=\\\"{{orderProduct.color_variants.length}}\\\" \\nstyle=\\\"background-image:url({{::orderProduct.product_cover_thumbnail}})\\\"></td><td \\nng-if=\\\"!orderProduct.product_cover_thumbnail && ($index % orderProduct.color_variants.length) == 0\\\" \\nclass=\\\"border-top border-right image\\\" rowspan=\\\"{{orderProduct.color_variants.length}}\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s40 grey-300-fg\\\"></md-icon></td><td \\nclass=\\\"border-top border-right large\\\" rowspan=\\\"{{orderProduct.color_variants.length}}\\\" \\nng-if=\\\"($index % orderProduct.color_variants.length) == 0\\\"><a tabindex=\\\"-1\\\" \\nhref=\\\"/inventory/products/{{orderProduct.product}}/overview\\\">{{::orderProduct.product_code}}</a> <a tabindex=\\\"-1\\\" \\nng-if=\\\"editable\\\" class=\\\"remove-button red-fg\\\" ng-click=\\\"deleteOrderProductWrapper(orderProduct)\\\" \\ntranslate=\\\"PRODUCT.DELETE\\\" ng-if=\\\"{{deletePermission}}\\\"></a><br>{{::orderProduct.product_name}}<br><span \\nclass=\\\"secondary-text\\\"><small>\\n{{::orderProduct.brand_name}} - {{::orderProduct.category_name}} - {{::orderProduct.subcategory_name}}</small></span>\\n</td><td class=\\\"border-top border-right auto\\\">{{::color.code}} - {{::color.name}}</td><td \\nclass=\\\"border-top text-uppercase text-center border-right small\\\" \\nng-repeat=\\\"size in orderProduct.size_variants | orderBy: \\'position\\'\\\" \\nng-init=\\\"orderProductVariant=orderProductVariantByColorAndSize[color.id][size.id]\\\" \\nng-class=\\\"{\\'show-stocks\\': editable && (!!orderProduct.target_stocks || !!orderProduct.source_stocks)}\\\"><div \\nclass=\\\"size-header md-background-bg md-hue-2 border-bottom text-truncate\\\"><small>{{::size.code}}</small><md-tooltip>\\n{{::size.name}}</md-tooltip></div><div style=\\\"min-height:40px\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><input \\nclass=\\\"amount\\\" ng-model=\\\"orderProductVariant.amount\\\" \\nng-model-options=\\\"{ debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" ng-if=\\\"editable\\\" \\nng-disable=\\\"!updateAmountPermission\\\" ng-change=\\\"saveOrderProductVariant(orderProductVariant, color.id)\\\" type=\\\"number\\\"> \\n<span class=\\\"amount\\\" ng-if=\\\"!editable\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><span>\\n{{::orderProductVariant.amount || 0}}</span></span><div ng-if=\\\"editable && !!orderProduct.source_stocks\\\" \\nclass=\\\"stocks border-bottom\\\" layout=\\\"row\\\"><span class=\\\"stock source\\\" flex \\nng-class=\\\"{\\'danger\\':sourceStock==0 && orderProductVariant.amount>0}\\\" \\nng-init=\\\"sourceStock=(sourceStockByColorAndSize[color.id] ? sourceStockByColorAndSize[color.id][size.id] : 0) || 0\\\">\\n<md-tooltip md-direction=\\\"top\\\">{{::sourceWarehouse.name}}: {{::sourceStock}}</md-tooltip>{{::sourceStock}}</span></div>\\n</div></td><td class=\\\"border-top text-center border-right md-background-bg md-hue-2 total\\\">\\n{{orderProductVariantByColorAndSize[color.id][\\'total\\']}}</td></tr></tbody></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-attributes-card/nd-attributes-card.html\",\"<md-card class=\\\"nd-attributes-card\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<span class=\\\"h3\\\" translate=\\\"PRODUCT.ATTRIBUTES\\\"></span> <span flex></span><md-button class=\\\"md-primary\\\" \\nng-click=\\\"vm.setCategoryAttributes()\\\" translate=\\\"PRODUCT.LOAD_FROM_CATEGORY\\\"></md-button></div></md-card-title-text>\\n</md-card-title><md-card-content><p class=\\\"secondary-text\\\" has-permission=\\\"app.inventory.configuration.attributes\\\">\\n<span translate=\\\"PRODUCT.ATTRIBUTES_MESSAGE\\\"></span> <a translate=\\\"PRODUCT.ATTRIBUTES_MESSAGE_LINK\\\" \\nui-sref=\\\"app.inventory.configuration.attributes\\\"></a></p><div layout=\\\"column\\\"><div layout=\\\"row\\\"><md-autocomplete \\nclass=\\\"m-0 attribute-category-autocomplete mb-16\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"300\\\" md-min-length=\\\"0\\\" \\nmd-floating-label=\\\"{{\\'ATTRIBUTES.ADD_ATTRIBUTE\\' | translate }}\\\" md-item-text=\\\"attributeCategory.name\\\" \\nmd-items=\\\"attributeCategory in vm.attributeCategoriesQuerySearch()\\\" \\nmd-search-text=\\\"vm.attributeCategoriesAutocomplete.searchText\\\" \\nmd-selected-item=\\\"vm.attributeCategoriesAutocomplete.selectedItem\\\" \\nmd-selected-item-change=\\\"vm.addAttributeCategory(attributeCategory)\\\" \\nplaceholder=\\\"{{\\'ATTRIBUTES.ADD_ATTRIBUTE\\' | translate }}\\\"><md-item-template>{{attributeCategory.name}}\\n</md-item-template></md-autocomplete></div><div layout=\\\"row\\\" layout-wrap><div class=\\\"pr-5\\\" flex=\\\"50\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" ng-repeat=\\\"acv in vm.attributeCategoryValues\\\"><md-input-container class=\\\"no-errors-spacer\\\" \\nflex ng-if=\\\"vm.displayedInInputContainer(acv)\\\"><label>{{acv.attributecategory_instance.name}}</label><input flex \\nng-if=\\\"acv.isText()\\\" ng-model=\\\"acv.value\\\" type=\\\"text\\\"><textarea flex ng-if=\\\"acv.isJson()\\\" ng-model=\\\"acv.value\\\" \\ntype=\\\"text\\\"></textarea><input flex ng-if=\\\"acv.isInt()\\\" ng-model=\\\"acv.value\\\" step=\\\"1\\\" type=\\\"number\\\"> <input flex \\nng-if=\\\"acv.isDecimal()\\\" ng-model=\\\"acv.value\\\" step=\\\"0.01\\\" type=\\\"number\\\"></md-input-container><md-autocomplete \\nng-if=\\\"acv.isSingleAttribute()\\\" class=\\\"no-errors-spacer\\\" flex=\\\"100\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{acv.attributecategory_instance.name}}\\\" md-items=\\\"item in vm.attributeQuerySearch(acv)\\\" \\nmd-item-text=\\\"item.name\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"acv.attributeSearchText\\\" \\nmd-selected-item=\\\"acv.singleAttributeInstance\\\" md-selected-item-change=\\\"vm.singleAttributeChanged(item, acv)\\\">\\n<md-item-template>{{item.name}}</md-item-template><md-not-found>\\n{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}</md-not-found></md-autocomplete><div \\nng-if=\\\"acv.isMultipleAttribute()\\\" flex=\\\"100\\\" layout=\\\"column\\\"><md-autocomplete md-delay=\\\"500\\\" class=\\\"no-errors-spacer\\\" \\nmd-floating-label=\\\"{{acv.attributecategory_instance.name}}\\\" md-items=\\\"item in vm.attributeQuerySearch(acv)\\\" \\nmd-item-text=\\\"item.name\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"acv.attributeSearchText\\\" \\nmd-selected-item-change=\\\"vm.multipleAttributeChanged(item, acv)\\\"><md-item-template>{{item.name}}</md-item-template>\\n<md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}</md-not-found></md-autocomplete><md-chips \\nmd-on-remove=\\\"vm.removeMultipleAttribute(acv, $index)\\\" md-removable=\\\"true\\\" ng-model=\\\"acv.multipleAttributeInstances\\\">\\n<md-chip-template>{{$chip.name}}&nbsp;</md-chip-template></md-chips></div><div class=\\\"secondary-text font-size-10\\\" \\nflex=\\\"100\\\" ng-if=\\\"acv.isHtmlText()\\\"><label>{{acv.attributecategory_instance.name}}</label><text-angular \\nng-model=\\\"acv.value\\\" ta-toolbar=\\\"vm.taToolbar\\\"></text-angular></div><md-button \\nclass=\\\"remove-attribute md-icon-button m-0\\\"><md-icon md-font-icon=\\\"icon-close\\\" \\nng-click=\\\"vm.removeAttributeCategoryValue(acv, $index)\\\"></md-icon></md-button></div></div></div></md-card-content>\\n</md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-bundle-content-variants/nd-bundle-content-variants.html\",\"<md-card class=\\\"bundle-content mb-16\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\" ng-repeat=\\\"pv in product.product_variants\\\">\\n<md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"h3\\\" flex><span \\ntranslate=\\\"PRODUCT.PACK_CONTENT\\\"></span> {{pv.color_name}} / {{pv.size_name}}</span><md-button \\nclass=\\\"md-primary stroked\\\" ng-click=\\\"openProductSearchDialog(pv)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-icon md-font-icon=\\\"icon-plus\\\"></md-icon><span>{{\\'PRODUCT.ADD_PRODUCT_VARIANT\\' | translate}}</span></div>\\n</md-button></div></md-card-title-text></md-card-title><md-card-content class=\\\"p-0\\\"><div \\nclass=\\\"ms-responsive-table-wrapper\\\"><form layout-align=\\\"start start\\\" layout-wrap name=\\\"bundleContentForm\\\"><table \\nclass=\\\"simple compact\\\"><thead><tr><th class=\\\"w-80\\\" translate=\\\"PRODUCT.AMOUNT\\\"></th><th translate=\\\"PRODUCT.PRODUCT\\\">\\n</th><th translate=\\\"PRODUCT.DETAILS\\\"></th><th translate=\\\"PRODUCT.SKU\\\"></th><th translate=\\\"PRODUCT.BARCODE\\\"></th><th \\nclass=\\\"w-80\\\"></th></tr></thead><tbody><tr ng-repeat=\\\"bundleContentVariant in pv.bundle_content_variants\\\"><td><input \\nclass=\\\"text-right nd-input w-80\\\" flex min=\\\"0\\\" ng-blur=\\\"saveBundleContentVariant(pv, bundleContentVariant)\\\" \\nng-init=\\\"initBundleContentVariantAmount(bundleContentVariant)\\\" ng-model=\\\"bundleContentVariant.amount\\\" type=\\\"number\\\">\\n</td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"thumbnail-40 mr-10\\\" \\nsrc=\\\"{{getCover(bundleContentVariant)}}\\\"><div class=\\\"mr-8\\\" layout=\\\"column\\\"><a \\nui-sref=\\\"app.inventory.products.product.overview({id:bundleContentVariant.product})\\\"><span \\nng-if=\\\"bundleContentVariant.product_name\\\">{{ bundleContentVariant.product_name }} </span></a><small><span \\nng-if=\\\"bundleContentVariant.product_code\\\">{{ bundleContentVariant.product_code }} </span>- <span \\nclass=\\\"secondary-text\\\" ng-if=\\\"bundleContentVariant.brand_name\\\">{{ bundleContentVariant.brand_name }}</span></small>\\n</div></div></td><td><a class=\\\"md-primary m-0\\\" href=\\\"#\\\" ng-click=\\\"changeVariants(bundleContentVariant)\\\"><md-tooltip \\nmd-delay=\\\"1000\\\">{{\\'SALES.CHANGE_VARIANTS\\' | translate}}</md-tooltip><span>\\n{{ bundleContentVariant.color_name }}-{{bundleContentVariant.size_name}}</span></a></td><td><span>\\n{{ bundleContentVariant.sku }}</span></td><td><span>{{ bundleContentVariant.barcode }}</span></td><td><md-button \\nclass=\\\"md-warn md-icon-button\\\" ng-click=\\\"deleteBundleContentVariant(pv, bundleContentVariant)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon></md-button></td></tr></tbody></table><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"product.bundleContentVariants.length === 0\\\"><div \\nclass=\\\"mt-30 mb-15 secondary-text\\\" translate=\\\"PRODUCT.BUNDLE_VARIANTS_EMPTY_TABLE\\\"></div></div></form></div>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-csv-ecommerce/nd-csv-ecommerce.html\",\"<div class=\\\"csv-ecommerce md-padding pt-0\\\" flex layout=\\\"column\\\"><div layout=\\\"column\\\" class=\\\"preview\\\"><p>\\n{{\\'CSV.PREVIEW_\\' + path.toUpperCase() | translate}}</p><div class=\\\"table-wrapper grey-100-bg md-padding h-105\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div id=\\\"table-scroll\\\"><table class=\\\"simple shadowed\\\" ng-if=\\\"leafs.length\\\">\\n<tr><th ng-repeat=\\\"rule in leafs\\\" class=\\\"grey-200-bg\\\">\\n{{rule.custom_name? rule.custom_name : rule.noTranslate ? rule.name : (\\'CSV.\\' + rule.name | translate)}}</th></tr><tr>\\n<td ng-repeat=\\\"rule in leafs\\\" class=\\\"white-bg\\\">{{\\'CSV.FAKE_VALUE\\' | translate}}</td></tr></table><em \\nng-if=\\\"!leafs.length\\\" class=\\\"secondary-text\\\">{{\\'CSV.NO_PREVIEW\\' | translate }}</em></div></div></div><script \\ntype=\\\"text/ng-template\\\" id=\\\"node_all.html\\\">\\n<ul>\\n      <li ng-repeat=\\\"col in rule.available_collection\\\">\\n\\n        <md-checkbox ng-model=\\\"rule.meta.collectionById[col.id].selected\\\"\\n                     ng-change=\\\"updateLeafs()\\\"\\n                     class=\\\"mt-8\\\">\\n          {{col.name}}\\n        </md-checkbox>\\n        <md-input-container ng-if=\\\"rule.meta.collectionById[col.id].selected\\\"\\n                            flex>\\n          <label class=\\\"ml-10\\\"\\n                 translate=\\\"CSV.COLUMN_NAME\\\"\\n                 ng-if=\\\"!rule.custom_name\\\"></label>\\n          <input class=\\\"w-150 ml-10\\\"\\n                 ng-model=\\\"rule.meta.collectionById[col.id].custom_name\\\"\\n                 ng-change=\\\"updateLeafs()\\\"/>\\n        </md-input-container>\\n        <span class=\\\"ml-10 red-500-fg\\\"\\n              ng-if=\\\"rule.meta.collectionById[col.id].error\\\">\\n            {{\\'CSV.\\' + rule.meta.collectionById[col.id].error | translate}}\\n          </span>\\n      </li>\\n    </ul>\\n</script><script type=\\\"text/ng-template\\\" id=\\\"node.html\\\">\\n<ul>\\n      <li ng-repeat=\\\"rule in rule.children\\\">\\n        <div ng-if=\\\"rule.type.indexOf(\\'node\\') == -1\\\">\\n          <md-checkbox ng-model=\\\"rule.selected\\\"\\n                       ng-change=\\\"updateLeafs()\\\"\\n                       class=\\\"mt-8\\\">\\n            {{\\'CSV.\\' + rule.name | translate}}\\n          </md-checkbox>\\n          <md-input-container>\\n            <md-select class=\\\"w-150 m-10\\\"\\n                       ng-if=\\\"rule.available_collection.length\\\"\\n                       ng-model=\\\"rule.collection\\\"\\n                       ng-change=\\\"updateLeafs()\\\"\\n                       multiple\\n                       flex>\\n              <label class=\\\"ml-10\\\"\\n                     translate=\\\"CSV.SELECT\\\"\\n                     ng-if=\\\"!rule.custom_name\\\"></label>\\n              <md-option ng-repeat=\\\"collection in rule.available_collection\\\"\\n                         ng-value=\\\"collection.id\\\">\\n                {{collection.name}}\\n              </md-option>\\n            </md-select>\\n          </md-input-container>\\n\\n          <md-input-container\\n            ng-if=\\\"rule.selected && !(rule.available_collection.length && !rule.meta.collection.length)\\\"\\n            flex>\\n            <label class=\\\"ml-10\\\"\\n                   translate=\\\"CSV.COLUMN_NAME\\\"\\n                   ng-if=\\\"!rule.custom_name\\\"></label>\\n            <input class=\\\"w-150 ml-10\\\"\\n                   ng-model=\\\"rule.custom_name\\\"\\n                   ng-change=\\\"updateLeafs()\\\"/>\\n          </md-input-container>\\n          <span class=\\\"ml-10 red-500-fg\\\"\\n                ng-if=\\\"rule.meta.error\\\">\\n            {{\\'CSV.\\' + rule.meta.error | translate}}\\n          </span>\\n        </div>\\n\\n        <div ng-if=\\\"rule.type == \\'node\\'\\\">\\n          <button ng-click=\\\"switchCollapsible(rule)\\\"\\n                  class=\\\"node mt-8 mb-16\\\"\\n                  layout=\\\"row\\\"\\n                  layout-align=\\\"center center\\\">\\n            <md-icon md-font-icon=\\\"icon-chevron-down\\\"\\n                     ng-class=\\\"{rotate: !rule.meta.visible}\\\"></md-icon>\\n            <span class=\\\"pl-10\\\">{{\\'CSV.\\' + rule.name | translate}}</span>\\n          </button>\\n          <div class=\\\"collapsible\\\"\\n               ng-class=\\\"{visible: rule.meta.visible}\\\"\\n               ng-include=\\\"\\'node.html\\'\\\"></div>\\n        </div>\\n\\n        <div ng-if=\\\"rule.type == \\'node_all\\'\\\">\\n          <button ng-click=\\\"switchCollapsible(rule)\\\"\\n                  class=\\\"node mt-8 mb-16\\\"\\n                  layout=\\\"row\\\"\\n                  layout-align=\\\"center center\\\">\\n            <md-icon md-font-icon=\\\"icon-chevron-down\\\"\\n                     ng-class=\\\"{rotate: !rule.meta.visible}\\\"></md-icon>\\n            <span class=\\\"pl-10\\\">{{\\'CSV.\\' + rule.name | translate}}</span>\\n          </button>\\n          <div class=\\\"collapsible\\\"\\n               ng-class=\\\"{visible: rule.meta.visible}\\\"\\n               ng-include=\\\"\\'node_all.html\\'\\\"></div>\\n        </div>\\n      </li>\\n    </ul>\\n</script><md-content><div layout=\\\"column\\\"><p>{{\\'CSV.OPTIONS\\' | translate}}</p><ul><li ng-repeat=\\\"rule in rules\\\"><div \\nng-if=\\\"rule.type.indexOf(\\'node\\') == -1\\\"><md-checkbox ng-model=\\\"rule.selected\\\" ng-change=\\\"updateLeafs()\\\" class=\\\"mt-8\\\">\\n{{\\'CSV.\\' + rule.name | translate}}</md-checkbox><md-input-container ng-if=\\\"rule.selected\\\"><label class=\\\"ml-10\\\" \\ntranslate=\\\"CSV.SELECT\\\" ng-if=\\\"!rule.custom_name\\\"></label><md-select class=\\\"w-150 ml-10\\\" \\nng-if=\\\"rule.available_collection.length\\\" ng-model=\\\"rule.meta.collection\\\" ng-change=\\\"updateLeafs()\\\" multiple=\\\"multiple\\\" \\nflex><md-option ng-repeat=\\\"collection in rule.available_collection\\\" ng-value=\\\"collection.id\\\">{{collection.name}}\\n</md-option></md-select></md-input-container><md-input-container \\nng-if=\\\"rule.selected && !(rule.available_collection.length && !rule.meta.collection.length)\\\" flex><label class=\\\"ml-10\\\" \\ntranslate=\\\"CSV.COLUMN_NAME\\\" ng-if=\\\"!rule.custom_name\\\"></label><input class=\\\"w-150 ml-10\\\" ng-model=\\\"rule.custom_name\\\" \\nng-change=\\\"updateLeafs()\\\"></md-input-container><span class=\\\"ml-10 red-500-fg\\\" ng-if=\\\"rule.meta.error\\\">\\n{{\\'CSV.\\' + rule.meta.error | translate}}</span></div><div ng-if=\\\"rule.type == \\'node\\'\\\"><button \\nng-click=\\\"switchCollapsible(rule)\\\" class=\\\"node mt-8 mb-16\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-chevron-down\\\" ng-class=\\\"{rotate: !rule.meta.visible}\\\"></md-icon><span class=\\\"pl-10\\\">\\n{{\\'CSV.\\' + rule.name | translate}}</span></button><div class=\\\"collapsible\\\" ng-class=\\\"{visible: rule.meta.visible}\\\" \\nng-include=\\\"\\'node.html\\'\\\"></div></div><div ng-if=\\\"rule.type == \\'node_all\\'\\\"><button ng-click=\\\"switchCollapsible(rule)\\\" \\nclass=\\\"node mt-8 mb-16\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-chevron-down\\\" \\nng-class=\\\"{rotate: !rule.meta.visible}\\\"></md-icon><span class=\\\"pl-10\\\">{{\\'CSV.\\' + rule.name | translate}}</span>\\n</button><div class=\\\"collapsible\\\" ng-class=\\\"{visible: rule.meta.visible}\\\" ng-include=\\\"\\'node_all.html\\'\\\"></div></div>\\n</li></ul></div></md-content></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-order-delivery-product/nd-order-delivery-product.html\",\"<div id=\\\"nd-order-delivery-product\\\" class=\\\"flex\\\"><table class=\\\"simple\\\" ms-responsive-table><tbody><tr \\nng-repeat=\\\"color in orderProduct.color_variants\\\"><td class=\\\"border-top border-right text-left image\\\" \\nng-if=\\\"$index == 0 && orderProduct.product.cover_thumbnail\\\" rowspan=\\\"{{orderProduct.color_variants.length}}\\\" \\nstyle=\\\"background-image:url({{::orderProduct.product.cover_thumbnail}})\\\"></td><td \\nclass=\\\"border-top border-right text-left image\\\" ng-if=\\\"$index == 0 && !orderProduct.product.cover_thumbnail\\\" \\nrowspan=\\\"{{orderProduct.color_variants.length}}\\\"><md-icon tabindex=\\\"-1\\\" md-font-icon=\\\"icon-package-variant-closed\\\" \\nclass=\\\"s40 grey-300-fg\\\"></md-icon></td><td class=\\\"border-top border-right text-left large\\\" ng-if=\\\"$index == 0\\\" \\nrowspan=\\\"{{orderProduct.color_variants.length}}\\\"><a tabindex=\\\"-1\\\" \\nhref=\\\"/inventory/products/{{orderProduct.product.id}}/overview\\\">{{orderProduct.product_code}}</a> <span \\nng-if=\\\"status.editable\\\">-</span> <a tabindex=\\\"-1\\\" ng-if=\\\"status.editable\\\" class=\\\"remove-button red-fg\\\" \\nng-click=\\\"deleteOrderProductWrapper(orderProduct)\\\" translate=\\\"PRODUCT.DELETE\\\"></a><br>{{::orderProduct.product_name}}\\n<br><small><span class=\\\"secondary-text\\\">\\n({{::orderProduct.brand_name}} - {{::orderProduct.category_name}} - {{::orderProduct.subcategory_name}})</span></small>\\n</td><td class=\\\"border-top border-right text-left auto\\\">{{color.code}} - {{color.name}}</td><td \\nclass=\\\"border-top border-right small\\\" ng-repeat=\\\"size in orderProduct.size_variants\\\"><div \\nclass=\\\"size-header md-background-bg md-hue-2 border-bottom text-truncate\\\"><small>{{::size.code}}</small><md-tooltip>\\n{{::size.name}}</md-tooltip></div><div style=\\\"min-height:40px\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"orderType==\\'sale\\'\\\" class=\\\"show-difference\\\"><input ng-if=\\\"status == 1\\\" class=\\\"amount\\\" \\nng-model=\\\"orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"{{updateAmountPermission}}\\\" ng-model-options=\\\"{ debounce: 500 }\\\" \\nng-change=\\\"saveOrderDeliveryProductVariant(orderDeliveryProductVariantsByColorAndSize[color.id][size.id])\\\"> <span \\nng-if=\\\"status == 2\\\" class=\\\"m-0 amount\\\" \\nng-class=\\\"{\\'secondary-text\\': orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount==0}\\\">\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount}} </span><span ng-if=\\\"status == 3\\\" \\nclass=\\\"m-0 amount\\\" \\nng-class=\\\"{\\'secondary-text\\': orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount==0}\\\">\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount}}</span><div \\nclass=\\\"differences border-bottom\\\" layout=\\\"row\\\"><span class=\\\"difference source\\\" flex><md-tooltip md-direction=\\\"top\\\">\\n<span translate=\\\"ORDER.ORDERED\\\"></span></md-tooltip>\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount}} </span><span \\nclass=\\\"difference target border-left\\\" flex \\nng-class=\\\"{\\'danger\\':(orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_prepared_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_shipped_amount)>0 && status == 1 || (orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_prepared_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_shipped_amount)>0 && status > 1}\\\">\\n<md-tooltip md-direction=\\\"top\\\"><span translate=\\\"ORDER.PREPARED\\\"></span>\\n: {{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_prepared_amount}} | <span \\ntranslate=\\\"ORDER.SHIPPED\\\"></span>\\n: {{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_shipped_amount}}</md-tooltip>\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_prepared_amount + orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_shipped_amount}}\\n</span></div></div><div style=\\\"min-height:40px\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"orderType==\\'purchase\\'\\\" class=\\\"show-difference\\\"><span ng-if=\\\"status == 5\\\" class=\\\"m-0 amount\\\" \\nng-class=\\\"{\\'secondary-text\\': orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount==0}\\\">\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount}} </span><input ng-if=\\\"status == 4\\\" \\ntype=\\\"number\\\" class=\\\"amount\\\" ng-model=\\\"orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount\\\" \\nng-change=\\\"saveOrderDeliveryProductVariant(orderDeliveryProductVariantsByColorAndSize[color.id][size.id])\\\" \\nng-model-options=\\\"{ debounce: 500 }\\\" has-permission-else-disable=\\\"{{updateAmountPermission}}\\\"><div \\nclass=\\\"differences border-bottom\\\" layout=\\\"row\\\"><span class=\\\"difference source\\\" flex><md-tooltip md-direction=\\\"top\\\">\\n<span translate=\\\"ORDER.ORDERED\\\"></span></md-tooltip>\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount}} </span><span \\nclass=\\\"difference target border-left\\\" flex \\nng-class=\\\"{\\'danger\\':(orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_received_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount)>0 && status == 4 || (orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_received_amount)>0 && status == 5}\\\">\\n<md-tooltip md-direction=\\\"top\\\"><span translate=\\\"ORDER.RECEIVED\\\"></span></md-tooltip>\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].total_received_amount}}</span></div></div><div \\nstyle=\\\"min-height:40px\\\" class=\\\"show-difference\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"orderType==\\'transfer\\' || orderType==\\'replenishment\\'\\\"><input ng-if=\\\"status == 1\\\" type=\\\"number\\\" class=\\\"amount\\\" \\nng-model=\\\"orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount\\\" \\nng-change=\\\"saveOrderDeliveryProductVariant(orderDeliveryProductVariantsByColorAndSize[color.id][size.id])\\\" \\nng-model-options=\\\"{ debounce: 500 }\\\" has-permission-else-disable=\\\"{{updateAmountPermission}}\\\"> <span \\nng-if=\\\"status == 2\\\" class=\\\"m-0 amount\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"{\\'secondary-text\\': orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount==0}\\\">\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount}} </span><span ng-if=\\\"status == 3\\\" \\nclass=\\\"m-0 amount\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"{\\'secondary-text\\': orderDeliveryProductVariantsByColorAndSize[color.id][size.id].shipped_amount==0}\\\">\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].shipped_amount}} </span><input ng-if=\\\"status == 4\\\" \\nclass=\\\"amount\\\" ng-model=\\\"orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount\\\" type=\\\"number\\\" \\nng-change=\\\"saveOrderDeliveryProductVariant(orderDeliveryProductVariantsByColorAndSize[color.id][size.id])\\\" \\nhas-permission-else-disable=\\\"{{updateAmountPermission}}\\\"> <span class=\\\"m-0 amount\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\" \\nng-class=\\\"{\\'secondary-text\\': orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount==0}\\\" \\nng-if=\\\"status == 5\\\">{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount}}</span><div \\nclass=\\\"differences border-bottom\\\" layout=\\\"row\\\"><span class=\\\"difference source\\\" flex \\nng-class=\\\"{\\'danger\\':(orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount != orderDeliveryProductVariantsByColorAndSize[color.id][size.id].received_amount) && orderType==\\'transfer\\'}\\\">\\n<md-tooltip md-direction=\\\"top\\\">{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount}} <span\\n translate=\\\"ORDER.ORDERED\\\"></span></md-tooltip>\\n{{::orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount}} </span><span \\nclass=\\\"difference target border-left\\\" flex ng-if=\\\"orderType==\\'replenishment\\'\\\" \\nng-class=\\\"{\\'danger\\':(orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount)>0}\\\">\\n<md-tooltip md-direction=\\\"top\\\">\\n{{orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount}} \\n<span translate=\\\"ORDER.MISSING\\\"></span></md-tooltip>\\n{{orderDeliveryProductVariantsByColorAndSize[color.id][size.id].ordered_amount - orderDeliveryProductVariantsByColorAndSize[color.id][size.id].prepared_amount}}\\n</span></div></div></td><td class=\\\"border-top md-hue-2 total\\\"><span ng-if=\\\"orderType==\\'sale\\'\\\">\\n{{orderDeliveryProductVariantsByColorAndSize[color.id].totals().prepared_amount}}</span> <span \\nng-if=\\\"orderType==\\'transfer\\' || orderType==\\'replenishment\\'\\\">\\n{{orderDeliveryProductVariantsByColorAndSize[color.id].totals().received_amount}}</span> <span \\nng-if=\\\"orderType==\\'purchase\\'\\\">{{orderDeliveryProductVariantsByColorAndSize[color.id].totals().received_amount}}</span>\\n</td></tr></tbody></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-order-product/nd-order-product.html\",\"<div id=\\\"nd-order-product\\\" class=\\\"flex\\\"><table class=\\\"simple\\\" ms-responsive-table><tbody><tr \\nng-repeat=\\\"secondaryVariantAndTotal in orderProduct.secondaryVariantsAndTotals | orderBy: \\'position\\' | filter: totalAmountFilter\\\" \\nng-class=\\\"{\\'md-warn-bg md-hue-1\\': secondaryVariantAndTotal.deprecated==true}\\\"><td \\nng-if=\\\"orderProduct.product.cover_thumbnail && !secondaryVariantAndTotal.isTotal && ($index % colorsWithAmount) == 0\\\" \\nclass=\\\"border-top border-right image\\\" style=\\\"background-image:url({{::orderProduct.product.cover_thumbnail}})\\\" \\nrowspan=\\\"{{colorsWithAmount}}\\\"></td><td \\nng-if=\\\"!orderProduct.product.cover_thumbnail && !secondaryVariantAndTotal.isTotal && ($index % colorsWithAmount) == 0\\\" \\nclass=\\\"border-top border-right image\\\" rowspan=\\\"{{colorsWithAmount}}\\\"><md-icon \\nmd-font-icon=\\\"icon-package-variant-closed\\\" class=\\\"s40 grey-300-fg\\\"></md-icon></td><td \\nng-if=\\\"!secondaryVariantAndTotal.isTotal && ($index % colorsWithAmount) == 0\\\" class=\\\"border-top border-right large\\\" \\nrowspan=\\\"{{colorsWithAmount}}\\\"><a tabindex=\\\"-1\\\" href=\\\"/inventory/products/{{orderProduct.product.id}}/overview\\\">\\n{{orderProduct.product_code}}</a> <a tabindex=\\\"-1\\\" ng-if=\\\"editable\\\" class=\\\"remove-button red-fg\\\" \\nng-click=\\\"deleteOrderProductWrapper(orderProduct)\\\" translate=\\\"PRODUCT.DELETE\\\" has-permission=\\\"{{deletePermission}}\\\">\\n</a><br>{{::orderProduct.product_name}}<br><span class=\\\"secondary-text\\\"><small>\\n{{::orderProduct.brand_name}} - {{::orderProduct.category_name}} - {{::orderProduct.subcategory_name}}</small></span>\\n<md-datepicker ng-if=\\\"orderType == \\'purchase\\'\\\" class=\\\"start-date-mini\\\" md-is-open=\\\"isOpen\\\" md-hide-icons=\\\"calendar\\\" \\nflex ng-model=\\\"orderProduct.start_date\\\" ng-change=\\\"changePurchaseOrderProductDate(orderProduct)\\\" \\nmd-placeholder=\\\"{{\\'SALE.START_SHIPPING_DATE\\' | translate}}\\\" md-open-on-focus></md-datepicker><span \\nng-if=\\\"orderProduct.need_update\\\" class=\\\"red-600-fg\\\"><br><span translate=\\\"PRODUCT.NEED_UPDATE\\\">\\nThere are new variants, need to be updated!</span></span></td><td class=\\\"border-top border-right auto\\\" \\nng-if=\\\"!secondaryVariantAndTotal.isTotal\\\">\\n{{::secondaryVariantAndTotal.variant.code}} - {{::secondaryVariantAndTotal.variant.name}}</td><td \\nclass=\\\"border-top text-uppercase text-center border-right small\\\" \\nng-if=\\\"!secondaryVariantAndTotal.isTotal && !secondaryVariantAndTotal.deprecated\\\" \\nng-repeat=\\\"size in orderProduct.size_variants | orderBy: \\'position\\'\\\" \\nng-init=\\\"orderProductVariant=orderProduct.orderProductVariantByVariantsIds[size.id][secondaryVariantAndTotal.variant.id]\\\" \\nng-class=\\\"{\\'secondary-text\\': !orderProductVariant.amount, \\'show-prices\\': showPrices, \\'show-stocks\\': editable && (!!orderProduct.target_stocks || !!orderProduct.source_stocks) || orderType==\\'production\\', \\'missing-manufacturing-information\\': orderProductVariant.missing_manufacturing_information, \\'removed\\': !orderProductVariant.product_variant}\\\">\\n<md-tooltip ng-if=\\\"orderProductVariant.missing_manufacturing_information\\\" md-direction=\\\"top\\\"><span \\ntranslate=\\\"PRODUCT.MISSING_MANUFACTURING_INFORMATION\\\"></span></md-tooltip><md-tooltip \\nng-if=\\\"orderProductVariant.removed\\\" md-direction=\\\"top\\\"><span translate=\\\"PRODUCT.VARIANT_REMOVED\\\"></span></md-tooltip>\\n<div class=\\\"size-header md-background-bg md-hue-2 border-bottom text-truncate\\\"><small>{{::size.code}}</small>\\n<md-tooltip>{{::size.name}}</md-tooltip></div><div style=\\\"min-height:40px\\\" layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><input class=\\\"amount\\\" ng-model=\\\"orderProductVariant.amount\\\" \\nng-model-options=\\\"{ debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" ng-if=\\\"editable\\\" \\nhas-permission-else-disable=\\\"{{updateAmountPermission}}\\\" \\nng-change=\\\"saveOrderProductVariant(orderProduct.orderProductVariantByVariantsIds[size.id][secondaryVariantAndTotal.variant.id], 2, secondaryVariantAndTotal)\\\" \\ntype=\\\"number\\\"> <span class=\\\"amount\\\" ng-if=\\\"!editable\\\" layout=\\\"column\\\" layout-align=\\\"center center\\\"><span>\\n{{::orderProductVariant.amount || 0}}</span></span><div ng-if=\\\"orderType == \\'sale\\' && showPrices\\\" \\nclass=\\\"price_excl_tax border-top\\\" layout=\\\"row\\\"><input flex ng-model=\\\"orderProductVariant.price_excl_tax\\\" \\nng-model-options=\\\"{ debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" ng-if=\\\"editable\\\" \\nplaceholder=\\\"{{orderProduct.price_excl_tax}}\\\" has-permission-else-disable=\\\"{{updateAmountPermission}}\\\" \\nng-change=\\\"saveOrderProductVariant(orderProduct.orderProductVariantByVariantsIds[size.id][secondaryVariantAndTotal.variant.id], 2, secondaryVariantAndTotal)\\\" \\ntype=\\\"number\\\"> <span class=\\\"value\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" flex ng-if=\\\"!editable\\\">\\n{{::orderProductVariant.price_excl_tax || orderProduct.price_excl_tax}}</span> <span \\nclass=\\\"currency md-background-bg md-hue-2 border-left\\\">{{session.company.currency | currencyCharacter}}</span></div>\\n<div ng-if=\\\"orderType == \\'transfer\\' && editable && !!orderProduct.target_stocks && !!orderProduct.source_stocks\\\" \\nclass=\\\"stocks border-bottom\\\" layout=\\\"row\\\"><span class=\\\"stock source\\\" flex \\nng-class=\\\"{\\'danger\\':sourceStock==0 && orderProductVariant.amount>0, \\'warning\\':orderProductVariant.amount>sourceStock && sourceStock>0, \\'success\\':orderProductVariant.amount<=sourceStock}\\\" \\nng-init=\\\"sourceStock=orderProduct.sourceStockByProductVariantId[orderProductVariant.product_variant] || 0\\\"><md-tooltip \\nmd-direction=\\\"top\\\">{{sourceStock}} <span translate=\\\"ORDER.IN\\\"></span> {{sourceWarehouse.name}}</md-tooltip>\\n{{sourceStock}} </span><span class=\\\"stock target border-left\\\" flex \\nng-class=\\\"{\\'danger\\':(targetStock + orderProductVariant.amount)==0, \\'warning\\':(targetStock + orderProductVariant.amount)>0 && (targetStock + orderProductVariant.amount)<=2, \\'success\\':(targetStock + orderProductVariant.amount)>2}\\\" \\nng-init=\\\"targetStock=orderProduct.targetStockByProductVariantId[orderProductVariant.product_variant] || 0\\\"><md-tooltip \\nmd-direction=\\\"top\\\">{{targetStock}} <span translate=\\\"ORDER.IN\\\"></span> {{targetWarehouse.name}}</md-tooltip>\\n{{targetStock}}</span></div><div ng-if=\\\"::orderType == \\'production\\'\\\" class=\\\"stocks border-bottom\\\" layout=\\\"row\\\"><span \\nng-if=\\\"!!orderProduct.source_stocks\\\" class=\\\"stock source\\\" flex \\nng-class=\\\"{\\'danger\\':sourceStock==0 && orderProductVariant.amount>0, \\'warning\\':orderProductVariant.amount>sourceStock && sourceStock>0, \\'success\\':orderProductVariant.amount<=sourceStock}\\\" \\nng-init=\\\"sourceStock=orderProduct.sourceStockByProductVariantId[orderProductVariant.product_variant] || 0\\\"><md-tooltip \\nmd-direction=\\\"top\\\" ng-if=\\\"::!orderProductVariant.missing_manufacturing_information\\\">{{sourceStock}} <span \\ntranslate=\\\"ORDER.IN\\\"></span> {{sourceWarehouse.name}}</md-tooltip>{{sourceStock}} </span><span \\nng-if=\\\"!!orderProduct.target_stocks\\\" class=\\\"stock target\\\" flex \\nng-class=\\\"{\\'danger\\':(targetStock + orderProductVariant.amount)==0, \\'warning\\':(targetStock + orderProductVariant.amount)>0 && (targetStock + orderProductVariant.amount)<=2, \\'success\\':(targetStock + orderProductVariant.amount)>2}\\\" \\nng-init=\\\"targetStock=orderProduct.targetStockByProductVariantId[orderProductVariant.product_variant] || 0\\\"><md-tooltip \\nmd-direction=\\\"top\\\" ng-if=\\\"::!orderProductVariant.missing_manufacturing_information\\\">{{targetStock}} <span \\ntranslate=\\\"ORDER.IN\\\"></span> {{targetWarehouse.name}}</md-tooltip>{{targetStock}}</span></div></div></td><td \\nclass=\\\"border-top border-right\\\" ng-if=\\\"secondaryVariantAndTotal.deprecated\\\" \\ncolspan=\\\"{{orderProduct.size_variants.length}}\\\"><span translate=\\\"PRODUCT.PRODUCT_DOES_NOT_EXIST\\\" \\nng-if=\\\"secondaryVariantAndTotal.deleted\\\">The product does not exist anymore!</span> <span \\ntranslate=\\\"PRODUCT.COLOR_SIZES_CHANGED\\\" ng-if=\\\"!secondaryVariantAndTotal.deleted\\\">Color or sizes has changed!</span>\\n</td><td class=\\\"border-top text-center border-right total\\\" \\nng-class=\\\"{\\'secondary-text\\': !secondaryVariantAndTotal.totalAmount, \\'md-background-bg md-hue-2 cost\\': !secondaryVariantAndTotal.deprecated==true}\\\" \\nng-if=\\\"!secondaryVariantAndTotal.isTotal\\\">{{secondaryVariantAndTotal.totalAmount}}<br><small \\nng-if=\\\"orderType == \\'purchase\\'\\\"><span class=\\\"secondary-text\\\">x <b>\\n{{::orderProduct.ddp_price || 0 | number:5}}{{session.company.currency | currencyCharacter}}</b> </span></small><small \\nng-if=\\\"orderType == \\'production\\'\\\"><span class=\\\"secondary-text\\\">x <b>\\n{{::orderProduct.ddp_price || 0 | number:5}}{{session.company.currency | currencyCharacter}}</b> </span></small><small \\nng-if=\\\"orderType == \\'sale\\' && !showPrices\\\"><span class=\\\"secondary-text\\\"><b>\\nx {{::orderProduct.price_excl_tax || 0 | price}}{{session.company.currency | currencyCharacter}}</b></span></small>\\n</td><td class=\\\"border-top text-center\\\" \\nng-class=\\\"{\\'secondary-text\\': !secondaryVariantAndTotal.totalCost, \\'md-background-bg md-hue-2 cost\\': !secondaryVariantAndTotal.deprecated==true}\\\" \\nng-if=\\\"!secondaryVariantAndTotal.isTotal && orderType == \\'sale\\'\\\">\\n{{secondaryVariantAndTotal.totalCost | price}}{{session.company.currency | currencyCharacter}}</td><td \\nclass=\\\"border-top text-center\\\" \\nng-class=\\\"{\\'secondary-text\\': !secondaryVariantAndTotal.totalAmount, \\'md-background-bg md-hue-2 cost\\': !secondaryVariantAndTotal.deprecated==true}\\\" \\nng-if=\\\"orderType == \\'purchase\\' && !secondaryVariantAndTotal.isTotal\\\">\\n{{(secondaryVariantAndTotal.totalAmount * orderProduct.ddp_price) | number:5}}{{session.company.currency | currencyCharacter}}\\n</td><td class=\\\"border-top text-center\\\" \\nng-class=\\\"{\\'secondary-text\\': !secondaryVariantAndTotal.totalAmount, \\'md-background-bg md-hue-2 cost\\': !secondaryVariantAndTotal.deprecated==true}\\\" \\nng-if=\\\"orderType == \\'production\\' && !secondaryVariantAndTotal.isTotal\\\">\\n{{(secondaryVariantAndTotal.totalAmount * orderProduct.ddp_price) | number:5}}{{session.company.currency | currencyCharacter}}\\n</td><td \\nng-if=\\\"orderType == \\'replenishment\\' && editable && !secondaryVariantAndTotal.isTotal && ($index %  orderProduct.secondaryVariantsAndTotals.length) == 0\\\" \\nclass=\\\"border-top options\\\" rowspan=\\\"{{orderProduct.secondaryVariantsAndTotals.length}}\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"validateOrderProductWrapper(orderProduct)\\\"><md-icon ng-if=\\\"!orderProduct.validated\\\" \\nclass=\\\"red-fg\\\" md-font-icon=\\\"icon-checkbox-blank-circle-outline\\\"></md-icon><md-icon ng-if=\\\"orderProduct.validated\\\" \\nclass=\\\"green-fg\\\" md-font-icon=\\\"icon-checkbox-marked-circle-outline\\\"></md-icon></md-button></td></tr></tbody></table>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-chip-variants/nd-product-chip-variants.html\",\"<md-card id=\\\"product-variants\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h3\\\" flex translate=\\\"PRODUCT.SELECTED_VARIANTS\\\"></span><md-button \\nclass=\\\"md-primary stroked\\\" ng-click=\\\"showSwapCategoriesDialog()\\\" \\nng-disabled=\\\"swappingVariants ||\\n                   loading\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-progress-circular md-diameter=\\\"16px\\\" ng-show=\\\"swappingVariants\\\"></md-progress-circular><md-icon \\nmd-font-icon=\\\"icon-swap-horizontal\\\" class=\\\"mr-5\\\" ng-if=\\\"!swappingVariants\\\"></md-icon><span ng-if=\\\"!swappingVariants\\\">\\n{{\\'PRODUCT.SWAP_CATEGORIES\\' | translate}}</span> <span ng-if=\\\"swappingVariants\\\">\\n{{\\'PRODUCT.SWAPPING_CATEGORIES\\' | translate}}</span></div></md-button></div></md-card-title-text></md-card-title>\\n<md-card-content><form name=\\\"variantsForm\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"start start\\\" class=\\\"md-padding\\\" flex ng-if=\\\"ready\\\"><md-input-container class=\\\"m-0 w-300\\\"><label>\\n{{getCategoryNameLabel(firstOption)}}</label><input type=\\\"text\\\" name=\\\"firstOption\\\" ng-model=\\\"firstOption.categoryName\\\" \\nng-change=\\\"onCategoryNameUpdate(firstOption)\\\"></md-input-container><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button class=\\\"md-icon-button show-variants-button md-primary\\\" aria-label=\\\"exchange\\\" \\nng-click=\\\"showAllVariants(firstOption)\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>\\n{{\\'PRODUCT.SHOW_ALL_VARIANTS\\' | translate}}</md-tooltip></md-button><md-chips ng-model=\\\"firstOption.selectedVariants\\\" \\nmd-on-add=\\\"onVariantsUpdate(firstOption, $chip, false)\\\" md-on-remove=\\\"onVariantsUpdate(firstOption, $chip, true)\\\" \\nmd-require-match=\\\"true\\\" md-removable=\\\"true\\\" readonly=\\\"false\\\"><md-autocomplete md-search-text=\\\"firstOption.searchText\\\" \\nmd-items=\\\"item in querySearch(firstOption)\\\" md-min-length=\\\"1\\\" md-delay=\\\"500\\\" \\nmd-close=\\\"onOptionVariantsChanged(firstOption)\\\" placeholder=\\\"{{\\'PRODUCT.ADD_VARIANTS\\' | translate}}\\\"><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span md-highlight-text=\\\"firstOption.searchText\\\">{{item | codename}}\\n</span> <small class=\\\"secondary-text ml-5\\\">({{item.category.name}})</small></div></md-item-template><md-not-found>\\n{{\\\"GENERAL.NOT_MATCHES_FOUND\\\" | translate}}</md-not-found></md-autocomplete><md-chip-template><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-class=\\\"{\\'mr-24\\': !$chip.hasStock}\\\"><text>{{$chip.name}}</text><small \\nclass=\\\"secondary-text ml-5\\\">({{$chip.category.name}})</small><md-icon class=\\\"hint-text\\\" md-font-icon=\\\"icon-close\\\" \\nng-if=\\\"$chip.hasStock\\\"><md-tooltip>{{\\'PRODUCT.NOT_DELETABLE_BECAUSE_HAS_STOCK\\' | translate: {variant: variant.name} }}\\n</md-tooltip></md-icon></div></md-chip-template><button ng-if=\\\"!$chip.hasStock\\\" md-chip-remove \\nclass=\\\"remove-chip-icon\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></button></md-chips></div></div><div \\nlayout=\\\"column\\\" layout-align=\\\"start start\\\" class=\\\"md-padding\\\" flex ng-if=\\\"ready\\\"><md-input-container class=\\\"m-0 w-300\\\">\\n<label>{{getCategoryNameLabel(secondOption)}}</label><input type=\\\"text\\\" ng-model=\\\"secondOption.categoryName\\\" \\nng-change=\\\"onCategoryNameUpdate(secondOption)\\\"></md-input-container><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-button class=\\\"md-icon-button show-variants-button md-primary\\\" aria-label=\\\"exchange\\\" \\nng-click=\\\"showAllVariants(secondOption)\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-tooltip>\\n{{\\'PRODUCT.SHOW_ALL_VARIANTS\\' | translate}}</md-tooltip></md-button><md-chips ng-model=\\\"secondOption.selectedVariants\\\" \\nmd-on-add=\\\"onVariantsUpdate(secondOption, $chip, false)\\\" md-on-remove=\\\"onVariantsUpdate(secondOption, $chip, true)\\\" \\nmd-require-match=\\\"true\\\" md-removable=\\\"true\\\" readonly=\\\"false\\\"><md-autocomplete md-search-text=\\\"secondOption.searchText\\\" \\nmd-items=\\\"item in querySearch(secondOption)\\\" md-min-length=\\\"1\\\" md-delay=\\\"500\\\" \\nmd-close=\\\"onOptionVariantsChanged(secondOption)\\\" placeholder=\\\"{{\\'PRODUCT.ADD_VARIANTS\\' | translate}}\\\">\\n<md-item-template><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span md-highlight-text=\\\"firstOption.searchText\\\">\\n{{item | codename}}</span> <small class=\\\"secondary-text ml-5\\\">({{item.category.name}})</small></div></md-item-template>\\n<md-not-found>{{\\\"GENERAL.NOT_MATCHES_FOUND\\\" | translate}}</md-not-found></md-autocomplete><md-chip-template><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-class=\\\"{\\'mr-24\\': !$chip.hasStock}\\\"><text>{{$chip.name}}</text><small \\nclass=\\\"secondary-text ml-5\\\">({{$chip.category.name}})</small><md-icon class=\\\"hint-text\\\" md-font-icon=\\\"icon-close\\\" \\nng-if=\\\"$chip.hasStock\\\"><md-tooltip>{{\\'PRODUCT.NOT_DELETABLE_BECAUSE_HAS_STOCK\\' | translate: {variant: variant.name} }}\\n</md-tooltip></md-icon></div></md-chip-template><button ng-if=\\\"!$chip.hasStock\\\" md-chip-remove \\nclass=\\\"remove-chip-icon\\\"><md-icon md-font-icon=\\\"icon-close\\\"></md-icon></button></md-chips></div></div></form><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" flex ng-if=\\\"showButtons\\\"><span flex></span><md-button \\nng-disabled=\\\"!variantsForm.$dirty\\\" class=\\\"stroked\\\" ng-click=\\\"cancelProductVariants()\\\" translate=\\\"PRODUCT.CANCEL\\\">Cancel\\n</md-button><md-button class=\\\"md-raised md-primary\\\" ng-click=\\\"preSaveProductVariants()\\\" \\nng-disabled=\\\"!product.color_variants.length || !product.size_variants.length || loading || !dirty\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular md-diameter=\\\"16px\\\" ng-show=\\\"loading\\\"></md-progress-circular><span \\nclass=\\\"mh-10\\\" ng-if=\\\"!loading\\\" translate=\\\"PRODUCT.SAVE\\\">Save</span> <span class=\\\"mh-10\\\" ng-if=\\\"loading\\\" \\ntranslate=\\\"PRODUCT.SAVING\\\">Saving</span></div></md-button></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-autocomplete/nd-product-autocomplete.html\",\"<md-autocomplete flex data-test-id=\\\"newpurchase-autocomplete-products\\\" \\nng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" ng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" ng-disabled=\\\"disabled\\\" \\nhotkey=\\\"{\\'ctrl+enter\\': vm.setFocus}\\\" class=\\\"nd-product-autocomplete\\\" md-items=\\\"product in vm.productsQuerySearch()\\\" \\nmd-selected-item=\\\"vm.selectedItem\\\" md-search-text=\\\"vm.productSearchText\\\" \\nmd-selected-item-change=\\\"vm.selectedProductChange(product)\\\" md-item-text=\\\"product.name\\\" \\nplaceholder=\\\"{{(vm.placeholder || \\'SALES.SEARCH_PRODUCT\\') | translate}} {{\\'UTILS.AUTOCOMPLETE_SHORTCUT\\' | translate}}\\\" \\nmd-min-length=\\\"3\\\" md-delay=\\\"300\\\"><md-item-template><div layout=\\\"row\\\"><div><strong>{{product.code}}</strong> - <span \\nmd-highlight-text=\\\"vm.productSearchText\\\" md-highlight-flags=\\\"^i\\\">{{product.name}}</span></div><div flex \\nclass=\\\"text-right\\\">{{product.price_incl_tax | price}}{{::vm.currencyCharacter}}</div></div></md-item-template>\\n<md-not-found><span translate=\\\"SALES.NO_PRODUCT_FOUND\\\" translate-values=\\\"{name: vm.productSearchText}\\\">\\nNo products matching \\\"{{vm.productSearchText}}\\\" were found.</span></md-not-found></md-autocomplete>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-ecommerce/nd-product-ecommerce.html\",\"<div id=\\\"product-ecommerce\\\"><md-card><md-card-title><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\">\\n<span class=\\\"h3\\\" translate=\\\"PRODUCT.SITES\\\"></span> <span flex></span><md-progress-circular class=\\\"mh-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"saving\\\"></md-progress-circular></div></md-card-title-text></md-card-title><md-card-content>\\n<table class=\\\"simple\\\" flex><thead><tr><th>{{\\'PRODUCT.CHANNEL\\' | translate}}</th><th>{{\\'GENERAL.LAST_SYNC\\' | translate}}\\n</th></tr></thead><tbody><tr \\nng-class=\\\"{\\'md-background-bg md-hue-2\\': siteProductsDict[site.id] && (siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize), \\'no-border-bottom\\': site.showConfig}\\\" \\nng-click=\\\"showAndHideConfig(site)\\\" ng-repeat-start=\\\"site in sites | orderBy: \\'id\\'\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-switch class=\\\"m-0\\\" ng-change=\\\"saveSiteProduct(site)\\\" \\nng-click=\\\"clickSiteSwitch(site, $event)\\\" \\nng-disabled=\\\"siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].saving || siteProductsDict[site.id].waiting_to_synchronize\\\" \\nng-model=\\\"siteProductsDict[site.id].sync_enabled\\\"></md-switch><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<nd-ecommerce-icon class=\\\"mh-8\\\" platform=\\\"site.platform\\\"></nd-ecommerce-icon><div layout=\\\"column\\\"><a \\nhas-permission=\\\"app.ecommerce.sites.site.details\\\" ui-sref=\\\"app.ecommerce.sites.site.details({id:site.id})\\\">\\n{{site.name}} </a><span has-not-permission=\\\"app.ecommerce.sites.site.details\\\">{{site.name}} </span><small \\nclass=\\\"secondary-text\\\" ng-if=\\\"siteProductsDict[site.id].external_id\\\">ID: {{siteProductsDict[site.id].external_id}}\\n</small></div><span class=\\\"text-boxed yellow-bg black-fg ml-16\\\" ng-if=\\\"site.sync_stock_only\\\">\\n{{\\'SITE.SYNC_STOCK_ONLY\\' | translate}}</span></div></div></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"column\\\" ng-class=\\\"{\\'secondary-text\\': !siteProductsDict[site.id].sync_enabled}\\\"><span \\nng-if=\\\"siteProductsDict[site.id] && siteProductsDict[site.id].last_sync\\\">\\n{{siteProductsDict[site.id].last_sync | date: \\'medium\\'}} </span><em class=\\\"secondary-text\\\" \\nng-if=\\\"showNeverSynchronizedText(site)\\\">{{\\'PRODUCT.NEVER_SYNCHRONIZED\\' | translate}} </em><span \\nng-if=\\\"showNextSyncText(site)\\\">\\n{{\\'SITE.NEXT_SYNC\\' | translate}}: {{siteProductsDict[site.id].next_sync | date: \\'medium\\'}}</span></div><span flex>\\n</span><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"siteProductsDict[site.id] && showSyncColumn(site)\\\"><span flex></span><md-icon class=\\\"w-40\\\" \\nmd-svg-src=\\\"/assets/images/custom-material-design-icons/eye-off-outline.7ce39b1f.svg\\\" ng-if=\\\"!siteProductsDict[site.id].active\\\">\\n</md-icon><md-button class=\\\"md-icon-button md-warn\\\" ng-click=\\\"showErrors(site, $event)\\\" \\nng-disabled=\\\"siteProductBlocked(site)\\\" ng-if=\\\"siteProductsDict[site.id] && siteProductsDict[site.id].error\\\"><md-icon \\nmd-svg-src=\\\"/assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button amber\\\" ng-click=\\\"showWarnings(site, $event)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" \\nng-if=\\\"siteProductsDict[site.id] && siteProductsDict[site.id].warning_message && siteProductsDict[site.id].warning_message.length\\\">\\n<md-icon class=\\\"amber-fg\\\" md-font-icon=\\\"icon-alert\\\"></md-icon></md-button><md-menu><md-button \\nclass=\\\"md-primary md-raised synchronize-button\\\" md-menu-align-target md-menu-origin \\nng-click=\\\"$event.stopPropagation();$mdMenu.open()\\\"><span layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-progress-circular\\n class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize\\\">\\n</md-progress-circular><span layout=\\\"row\\\" layout=\\\"start center\\\"><span translate=\\\"GENERAL.SYNC\\\"></span><md-icon \\nclass=\\\"toggle-icon\\\" md-font-icon=\\\"icon-chevron-down\\\"></md-icon></span></span></md-button><md-menu-content width=\\\"4\\\">\\n<md-menu-item><md-button class=\\\"md-button\\\" \\nng-click=\\\"syncSiteProduct(site, $event, ECOMMERCE_SYNC_OPTIONS.ECOMMERCE_SYNC_STOCK)\\\" \\nng-disabled=\\\"siteProductBlocked(site)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" \\nmd-font-icon=\\\"icon-arrow-up\\\" ng-if=\\\"!siteProductsDict[site.id].synchronizing\\\"></md-icon><md-progress-circular \\nclass=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize\\\">\\n</md-progress-circular>{{ getButtonText(site.id, \\'stock\\') }}</div></md-button></md-menu-item><md-menu-item \\nng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_PRESTASHOP\\\"><md-button class=\\\"md-button\\\" \\nng-click=\\\"syncSiteProduct(site, $event, ECOMMERCE_SYNC_OPTIONS.ECOMMERCE_SYNC_PRICE)\\\" \\nng-disabled=\\\"siteProductBlocked(site)\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" \\nmd-font-icon=\\\"icon-arrow-up\\\" ng-if=\\\"!siteProductsDict[site.id].synchronizing\\\"></md-icon><md-progress-circular \\nclass=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize\\\">\\n</md-progress-circular>{{ getButtonText(site.id, \\'price\\') }}</div></md-button></md-menu-item><md-menu-item><md-button \\nclass=\\\"md-button\\\" ng-click=\\\"syncSiteProduct(site, $event)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-up\\\" \\nng-if=\\\"!siteProductsDict[site.id].synchronizing\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize\\\">\\n</md-progress-circular>{{ getButtonText(site.id, \\'product\\') }}</div></md-button></md-menu-item><md-menu-item \\nng-if=\\\"showAdminActions()\\\"><md-button class=\\\"md-button md-warn\\\" ng-click=\\\"importProduct(site, $event)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-arrow-down\\\" \\nng-if=\\\"!siteProductsDict[site.id].synchronizing\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"siteProductsDict[site.id].synchronizing || siteProductsDict[site.id].waiting_to_synchronize\\\">\\n</md-progress-circular>{{\\'SITE.IMPORT_PRODUCT\\' | translate}}</div></md-button></md-menu-item></md-menu-content>\\n</md-menu><md-button class=\\\"md-icon-button m-0\\\"><md-icon class=\\\"toggle-icon\\\" md-font-icon=\\\"icon-chevron-up\\\" \\nng-class=\\\"{\\'upside-down\\': site.showConfig}\\\" ng-if=\\\"!site.sync_stock_only\\\"></md-icon><div class=\\\"w-40\\\" \\nng-if=\\\"site.sync_stock_only\\\"></div></md-button></div></div></div></td></tr><tr ng-if=\\\"site.showConfig\\\" ng-repeat-end>\\n<td class=\\\"show-config-td\\\" colspan=\\\"2\\\"><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start stretch\\\"><md-card \\nclass=\\\"card-in-card\\\" flex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" translate=\\\"PRODUCT.OPTIONS\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content layout-fill><div flex layout=\\\"column\\\"><md-checkbox \\nng-change=\\\"saveSiteProduct(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" ng-model=\\\"siteProductsDict[site.id].active\\\">\\n<span ng-if=\\\"siteProductsDict[site.id]\\\">{{\\'PRODUCT.PRODUCT_VISIBLE\\' | translate}}</span> <span \\nng-if=\\\"!siteProductsDict[site.id]\\\">{{\\'PRODUCT.NEVER_SYNCHRONIZED\\' | translate}}</span><md-icon class=\\\"ml-5\\\" \\nmd-font-icon=\\\"icon-information-outline\\\" ng-if=\\\"site.platform === ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\">\\n<md-tooltip>{{\\'SITE.ADVICE_NON_VISIBLE_PRODUCT_SALES_CHANNEL_DESC\\' | translate}}</md-tooltip></md-icon></md-checkbox>\\n<md-checkbox ng-change=\\\"saveSiteProduct(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" ng-if=\\\"showForceSizeVariations\\\" \\nng-model=\\\"siteProductsDict[site.id].force_sync_size_as_variations\\\">{{\\'PRODUCT.FORCE_SIZE_AS_VARIANT\\' | translate }}\\n</md-checkbox><md-checkbox ng-change=\\\"saveSiteProduct(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" \\nng-if=\\\"showForceColorVariations\\\" ng-model=\\\"siteProductsDict[site.id].force_sync_color_as_variations\\\">\\n{{\\'PRODUCT.FORCE_COLOR_AS_VARIANT\\' | translate }}</md-checkbox><md-checkbox ng-disabled=\\\"siteProductBlocked(site)\\\" \\nng-if=\\\"siteProductsDict[site.id].showForceCreationCheckbox\\\" ng-model=\\\"siteProductsDict[site.id].force_creation\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span>{{\\'PRODUCT.FORCE_PRODUCT_CREATION\\' | translate }}</span><md-icon \\nclass=\\\"ml-5\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{\\'PRODUCT.FORCE_PRODUCT_CREATION_INFO\\' | translate }}\\n</md-tooltip></md-icon></div></md-checkbox></div><div layout=\\\"column\\\" ng-if=\\\"hasCustomOptions(site)\\\">\\n<md-input-container class=\\\"no-md-errors-spacer\\\" flex ng-if=\\\"hasCustomCode(site)\\\"><label translate=\\\"PRODUCT.CODE\\\">\\n</label><input ng-model=\\\"siteProductsDict[site.id].product_code\\\" placeholder=\\\"{{product.code}}\\\" type=\\\"text\\\">\\n</md-input-container><md-input-container class=\\\"no-md-errors-spacer\\\" flex ng-if=\\\"hasCustomName(site)\\\"><label \\ntranslate=\\\"PRODUCT.NAME\\\"></label><input ng-model=\\\"siteProductsDict[site.id].product_name\\\" \\nplaceholder=\\\"{{product.name}}\\\" type=\\\"text\\\"></md-input-container><md-input-container class=\\\"no-md-errors-spacer\\\" flex \\nng-if=\\\"showSlug(site)\\\"><label layout=\\\"row\\\" layout-align=\\\"start center\\\"><span>Slug</span><md-icon \\nclass=\\\"ml-5 secondary-text\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip>{{ \\'PRODUCT.SLUG_HELP\\' | translate }}\\n</md-tooltip></md-icon></label><input ng-model=\\\"siteProductsDict[site.id].slug\\\" type=\\\"text\\\"></md-input-container><label\\n class=\\\"secondary-text\\\" ng-if=\\\"hasCustomDescription(site)\\\" translate=\\\"PRODUCT.DESCRIPTION\\\"></label><text-angular \\nng-if=\\\"hasCustomDescription(site)\\\" ng-model=\\\"siteProductsDict[site.id].product_description\\\" \\nplaceholder=\\\"{{product.description}}\\\" ta-toolbar=\\\"taToolbar\\\"></text-angular><div \\nng-if=\\\"hasCustomLongDescription(site)\\\"><label class=\\\"secondary-text\\\" translate=\\\"PRODUCT.DESCRIPTION_LONG\\\"></label>\\n<text-angular ng-model=\\\"siteProductsDict[site.id].product_description_long\\\" placeholder=\\\"{{product.description_long}}\\\" \\nta-toolbar=\\\"taToolbar\\\"></text-angular></div></div></md-card-content></md-card><div flex=\\\"50\\\" layout-fill><md-card \\nclass=\\\"mb-15 card-in-card\\\" flex=\\\"100\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" \\ntranslate=\\\"NAVIGATION.STOCKS\\\"></span></md-card-title-text></md-card-title><md-card-content><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0 mt-0\\\" flex=\\\"100\\\"><label translate=\\\"SITE.MIN_STOCK_THRESHOLD\\\">\\n</label><md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-sync-off\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" min=\\\"0\\\" \\nng-model=\\\"siteProductsDict[site.id].min_stock_threshold\\\" type=\\\"number\\\"> <small class=\\\"secondary-text\\\">\\n{{\\'SITE.MIN_STOCK_THRESHOLD_INFO\\' | translate }}</small></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block no-md-errors-spacer mb-0\\\" flex=\\\"100\\\"><label translate=\\\"SITE.SAFETY_STOCK\\\"></label>\\n<md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-sync-off\\\"></md-icon><input \\nhas-permission-else-disable=\\\"ecommerce.sites.site.details.update\\\" min=\\\"0\\\" \\nng-model=\\\"siteProductsDict[site.id].safety_stock\\\" type=\\\"number\\\"> <small class=\\\"secondary-text\\\">\\n{{\\'SITE.SAFETY_STOCK_INFO\\' | translate }}</small></md-input-container></md-card-content></md-card><md-card \\nclass=\\\"mb-15 card-in-card\\\" flex=\\\"100\\\" ng-if=\\\"site.allow_sync_productvariants_by_variant\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h4\\\" translate=\\\"PRODUCT.VARIANTS_TO_SYNCHRONIZE\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content layout=\\\"row\\\"><md-select class=\\\"nd-input m-0 sync-variants-select\\\" flex \\nmultiple=\\\"multiple\\\" ng-model=\\\"siteProductsDict[site.id].sync_variants\\\"><md-optgroup \\nlabel=\\\"{{product.color_category_name}}\\\"><md-option ng-repeat=\\\"color in variants.colors | orderBy: [\\'name\\']\\\" \\nng-value=\\\"color.id\\\">{{color.name}}</md-option></md-optgroup><md-optgroup label=\\\"{{product.size_category_name}}\\\">\\n<md-option ng-repeat=\\\"size in variants.sizes | orderBy: [\\'name\\']\\\" ng-value=\\\"size.id\\\">{{size.name}}</md-option>\\n</md-optgroup></md-select><md-button class=\\\"md-primary m-0 ml-10\\\" \\nng-click=\\\"selectAllVariants(site.id, variants.colors)\\\">{{\\'PRODUCT.ALL_COLORS\\' | translate}}</md-button><md-button \\nclass=\\\"md-primary m-0 ml-10\\\" ng-click=\\\"selectAllVariants(site.id, variants.sizes)\\\">{{\\'PRODUCT.ALL_SIZES\\' | translate}}\\n</md-button></md-card-content></md-card><md-card class=\\\"card-in-card\\\" flex=\\\"100\\\"><md-card-title><md-card-title-text>\\n<span class=\\\"h4\\\" translate=\\\"PRODUCT.CATEGORIES_ASSIGNED_TO_THE_PRODUCT\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content layout-fill><div flex layout=\\\"column\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-autocomplete \\nflex md-delay=\\\"500\\\" md-item-text=\\\"item.path\\\" md-items=\\\"item in querySearch(site)\\\" md-min-length=\\\"3\\\" md-require-match \\nmd-search-text=\\\"siteProductsEditDict[site.id].searchText\\\" \\nmd-selected-item=\\\"siteProductsEditDict[site.id].selectedItem\\\" md-selected-item-change=\\\"siteCategorySelected(site)\\\" \\nng-disabed=\\\"siteProductBlocked(site)\\\" placeholder=\\\"{{\\'PRODUCT.AUTOCOMPLETE_SEARCH_CATEGORY\\' | translate}}\\\"><div \\nclass=\\\"autocomplete-site-category\\\" layout=\\\"column\\\"><span>{{item.name}}</span> <small class=\\\"secondary-text\\\">\\n{{item.path}}</small></div></md-autocomplete><md-button class=\\\"md-button md-primary stroked\\\" \\nng-click=\\\"openAdvancedCategorySearch(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" class=\\\"md-primary\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\\\"></md-icon>\\n{{\\'PRODUCT.ADVANCED_SEARCH\\' | translate}}</div></md-button></div><md-chips md-removable=\\\"true\\\" \\nng-model=\\\"siteProductsEditDict[site.id].selectedCategories\\\" readonly=\\\"true\\\"><md-chip-template>{{$chip.path}}\\n</md-chip-template></md-chips></div></md-card-content></md-card><div flex layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button class=\\\"md-icon-button\\\" ng-click=\\\"showLog(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" \\nng-if=\\\"siteProductsDict[site.id].log\\\"><md-icon md-font-icon=\\\"icon-eye\\\"></md-icon><md-tooltip>\\n{{\\'PRODUCT.VIEW_LAST_LOG\\' | translate}}</md-tooltip></md-button><md-button class=\\\"md-warn\\\" \\nng-click=\\\"deleteSiteProduct(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" ng-if=\\\"showDeleteButton(site)\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon class=\\\"mr-8\\\" md-font-icon=\\\"icon-trash\\\" \\nng-if=\\\"!siteProductsDict[site.id].deleting\\\"></md-icon><md-progress-circular class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"siteProductsDict[site.id].deleting\\\"></md-progress-circular><span ng-if=\\\"!siteProductsDict[site.id].deleting\\\">\\n{{\\'GENERAL.DELETE\\' | translate }}</span> <span ng-if=\\\"siteProductsDict[site.id].deleting\\\">\\n{{\\'GENERAL.DELETING\\' | translate }}</span></div></md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"saveSiteProduct(site)\\\" ng-disabled=\\\"siteProductBlocked(site)\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></div>\\n</div></div></div></td></tr></tbody></table></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-main-information/nd-product-main-information.html\",\"<div flex id=\\\"product-main-information\\\" data-test-id=\\\"product-main-information\\\"><ng-form name=\\\"productForm\\\" novalidate>\\n<md-card id=\\\"type-product-information\\\" ng-if=\\\"isNew\\\" data-test-id=\\\"type-product-information\\\" class=\\\"mb-16\\\" \\nng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.PRODUCT_TYPE\\\">\\n</span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" layout-fill><md-radio-group \\nlayout=\\\"column\\\" layout-fill ng-change=\\\"productTypeChanged()\\\" ng-model=\\\"product.product_type\\\"><div ng-if=\\\"product.id\\\" \\nclass=\\\"did-you-know blue mt-8 mb-16\\\" layout=\\\"column\\\" layout-align=\\\"start center\\\" layout-gt-xs=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon><div class=\\\"pt-10 mb-8 did-you-know-message\\\"><span \\nclass=\\\"secondary-text\\\" translate=\\\"PRODUCT.WARNING_CANT_CHANGE_TYPE\\\"></span></div><div flex></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" layout-align-gt-xs=\\\"start center\\\"><md-button class=\\\"blue-fg\\\" ng-click=\\\"goToNewProductPage()\\\">\\n{{\\\"PRODUCT.CREATE_NEW\\\" | translate}}</md-button></div></div><div layout=\\\"row\\\" layout-wrap><md-radio-button flex=\\\"50\\\" \\nng-repeat=\\\"(key, value) in PRODUCT_TYPES\\\" ng-value=\\\"key\\\" ng-disabled=\\\"isProductTypeDisabled(key) || product.id\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-svg-src=\\\"{{getProductTypeImage(key)}}\\\"></md-icon><span \\nclass=\\\"ml-8\\\">{{\\\"PRODUCT.\\\" + value |translate}}</span></div></md-radio-button></div></md-radio-group>\\n<nd-upgrade-subscription-plan-banner ng-if=\\\"!hasProductBundlesFeature\\\" title=\\\"\\'UPGRADE_PLAN.PRODUCT_BUNDLES.NAME\\'\\\" \\nbody=\\\"\\'UPGRADE_PLAN.PRODUCT_BUNDLES.DESCRIPTION\\'\\\" source=\\\"\\'app.inventory.products.product.bundles\\'\\\" \\nbutton-below=\\\"true\\\"></nd-upgrade-subscription-plan-banner></div></md-card-content></md-card><md-card \\nid=\\\"basic-product-information\\\" data-test-id=\\\"basic-product-information\\\" class=\\\"mb-16\\\" \\nng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.MAIN_INFORMATION\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"row\\\" \\nlayout-wrap flex><div layout=\\\"row\\\" layout-wrap flex=\\\"100\\\" flex-gt-sm=\\\"100\\\"><md-input-container class=\\\"md-block pr-20\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"PRODUCT.NAME\\\">Name</label><input type=\\\"text\\\" \\ndata-test-id=\\\"addproduct-name\\\" ng-model=\\\"product.name\\\" required></md-input-container><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"25\\\" class=\\\"pr-10\\\"><md-input-container flex><label \\ntranslate=\\\"PRODUCT.CODE\\\"></label><input type=\\\"text\\\" ng-model=\\\"product.code\\\" name=\\\"code\\\" \\nng-class=\\\"{\\'green-fg\\': codeAlreadyExists == 0, \\'red-fg\\': codeAlreadyExists > 1}\\\" required focus-if=\\\"true\\\" \\nng-change=\\\"checkCodeUnique()\\\"><div ng-messages=\\\"productForm.code.$error\\\" role=\\\"alert\\\" ng-if=\\\"codeAlreadyExists != -1\\\">\\n<div ng-message=\\\"uniqueCodeError\\\"><span translate=\\\"PRODUCT.CODE_ALREADY_EXISTS\\\"></span> {{codeAlreadyExists}}</div>\\n</div></md-input-container><md-progress-circular ng-disabled=\\\"codeAlreadyExists != -1\\\" md-diameter=\\\"20px\\\">\\n</md-progress-circular><md-progress-circular ng-if=\\\"gettingCode\\\" md-diameter=\\\"20px\\\"></md-progress-circular></div>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><md-checkbox id=\\\"test-autogenerate-checkbox\\\" type=\\\"text\\\" \\ndata-test-id=\\\"addproduct-autogenerate-checkbox\\\" class=\\\"mb-0 mt-5 mr-20\\\" ng-model=\\\"product.autogenerate\\\" \\nng-change=\\\"autogenerateCode()\\\"><span translate=\\\"PRODUCT.AUTOGENERATE_CODE\\\"></span></md-checkbox></md-input-container>\\n<md-autocomplete class=\\\"pr-20\\\" required flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.BRAND\\' | translate}}\\\" md-items=\\\"item in brandQuerySearch()\\\" \\nmd-item-text=\\\"codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"brandSearchText\\\" \\nmd-selected-item=\\\"product.brand_instance\\\" md-selected-item-change=\\\"brandChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete><md-autocomplete class=\\\"pr-20\\\" required flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.SEASON\\' | translate}}\\\" md-items=\\\"item in seasonQuerySearch()\\\" \\nmd-item-text=\\\"codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"seasonSearchText\\\" \\nmd-selected-item=\\\"product.season_instance\\\" md-selected-item-change=\\\"seasonChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete><md-autocomplete class=\\\"pr-20\\\" required flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.CATEGORY\\' | translate}}\\\" md-items=\\\"item in categoryQuerySearch()\\\" \\nmd-item-text=\\\"codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"categorySearchText\\\" \\nmd-selected-item=\\\"product.category_instance\\\" md-selected-item-change=\\\"categoryChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete><md-autocomplete class=\\\"pr-20\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.SUBCATEGORY\\' | translate}}\\\" md-items=\\\"item in subcategoryQuerySearch()\\\" \\nmd-item-text=\\\"codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"subcategorySearchText\\\" \\nmd-selected-item=\\\"product.subcategory_instance\\\" md-selected-item-change=\\\"subcategoryChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete></div></div></md-card-content></md-card><md-card id=\\\"advanced-product-information\\\" \\ndata-test-id=\\\"advanced-product-information\\\" class=\\\"mb-16\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.ADVANCED_INFORMATION\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><div layout=\\\"row\\\" layout-wrap flex><div layout=\\\"row\\\" layout-wrap flex=\\\"100\\\">\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" class=\\\"pr-20\\\"><label translate=\\\"PRODUCT.GROUP_CODE\\\">Group Code</label>\\n<input type=\\\"text\\\" ng-change=\\\"autogenerateCode()\\\" ng-model=\\\"product.group_code\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" class=\\\"pr-20\\\"><label translate=\\\"PRODUCT.HARMONISED_CODE\\\"></label><input \\ntype=\\\"text\\\" ng-model=\\\"product.harmonised_code\\\"></md-input-container><md-input-container class=\\\"pr-20\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label translate=\\\"PRODUCT.COLLECTIONS\\\">Collections</label><md-select ng-model=\\\"product.collections\\\" \\nmd-on-open=\\\"onSelectorOpen()\\\" md-on-close=\\\"onSelectorClose(\\'collection\\')\\\" multiple=\\\"multiple\\\"><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"selectFilter[\\'collection\\']\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option ng-value=\\\"collection.id\\\" \\nng-repeat=\\\"collection in collections | filter:selectFilter[\\'collection\\'] | orderBy: \\'code\\'\\\">{{collection.code}}\\n</md-option></md-select></md-input-container><md-autocomplete class=\\\"pr-20\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.COMPOSITION\\' | translate}}\\\" md-items=\\\"item in compositionQuerySearch()\\\" \\nmd-item-text=\\\"codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"compositionSearchText\\\" \\nmd-selected-item=\\\"product.composition_instance\\\" md-selected-item-change=\\\"compositionChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" class=\\\"mb-0 pr-20\\\"><md-chips \\nng-model=\\\"product.tags\\\" placeholder=\\\"{{\\'PRODUCT.TYPE_A_TAG\\' | translate}}\\\" \\nsecondary-placeholder=\\\"{{\\'PRODUCT.TYPE_ANOTHER_TAG\\' | translate}}\\\" flex=\\\"100\\\" class=\\\"pr-20\\\"></md-chips><div \\nclass=\\\"did-you-know warning-message md-margin\\\" \\nng-if=\\\"largestTagLength(product.tags) > ecommerceProductRestrictions[\\'tag\\'][\\'max_length\\']\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"amber-fg\\\"></md-icon></div><span class=\\\"secondary-text\\\" \\ntranslate=\\\"PRODUCT.TAG_WARNING\\\" translate-values=\\\"{max_length: ecommerceProductRestrictions[\\'tag\\'][\\'max_length\\']}\\\">\\n</span></div></div></md-input-container></div></div></md-card-content></md-card><md-card \\nid=\\\"stock-product-information\\\" \\nng-hide=\\\"product.product_type == PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE || product.is_bundle\\\" \\ndata-test-id=\\\"stock-product-information\\\" class=\\\"mb-16\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.STOCK_INFORMATION\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><div layout=\\\"row\\\" layout-align=\\\"start center\\\" layout-wrap flex=\\\"100\\\"><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"!product.is_sample\\\"><md-checkbox ng-model=\\\"product.manage_stock\\\" \\nng-change=\\\"manageStockChanged()\\\" aria-label=\\\"Manage Stock\\\" flex><div layout-align=\\\"start center\\\" layout=\\\"row\\\">\\n{{\\'PRODUCT.MANAGE_STOCK\\' | translate }}<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>\\n{{\\'PRODUCT.MANAGE_STOCK_TOOLTIP\\' | translate }}</md-tooltip></md-icon></div></md-checkbox></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-if=\\\"!product.is_raw_material\\\"><md-checkbox \\nng-model=\\\"product.is_noos\\\" ng-disabled=\\\"!product.manage_stock\\\" aria-label=\\\"Is Noos\\\" flex><div \\nlayout-align=\\\"start center\\\" layout=\\\"row\\\">{{\\'PRODUCT.IS_NOOS\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.IS_NOOS_TOOLTIP\\' | translate }}\\n</md-tooltip></md-icon></div></md-checkbox></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nhas-feature-or-addon=\\\"app.inventory.products.product.uid-stocks\\\" ng-if=\\\"!product.is_sample\\\"><md-checkbox \\nng-model=\\\"product.manage_uids\\\" ng-disabled=\\\"!product.manage_stock\\\" aria-label=\\\"Manage UDIs\\\" flex><div \\nlayout-align=\\\"start center\\\" layout=\\\"row\\\">{{\\'PRODUCT.MANAGE_UIDS\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.MANAGE_UIDS_TOOLTIP\\' | translate }}\\n</md-tooltip></md-icon></div></md-checkbox></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nhas-feature-or-addon=\\\"app.inventory.products.product.uid-stocks\\\" ng-if=\\\"!product.is_sample\\\"><md-checkbox \\nng-model=\\\"product.manage_lots\\\" ng-disabled=\\\"!product.manage_uids || !product.manage_stock\\\" aria-label=\\\"Manage UDIs\\\" \\nflex><div layout-align=\\\"start center\\\" layout=\\\"row\\\">{{\\'PRODUCT.MANAGE_LOTS\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.MANAGE_LOTS_TOOLTIP\\' | translate }}\\n</md-tooltip></md-icon></div></md-checkbox></md-input-container><md-input-container class=\\\"pr-20\\\" flex=\\\"100\\\" \\ndata-test-id=\\\"inventory-policy-type-selector-id\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"PRODUCT.INVENTORY_POLICY_TYPE\\\">\\n</label><md-select ng-disabled=\\\"!product.manage_uids || !product.manage_stock\\\" \\nng-model=\\\"product.inventory_policy_type\\\"><md-option ng-value=\\\"policy_type.id\\\" \\nng-repeat=\\\"policy_type in INVENTORY_POLICY_TYPES\\\">{{\\'PRODUCT.\\' + policy_type.name | translate }}</md-option>\\n</md-select></md-input-container></div></md-card-content></md-card><md-card id=\\\"sale-sell-product-information\\\" \\ndata-test-id=\\\"stock-product-information\\\" class=\\\"mb-16\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title>\\n<md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.SALE_INFORMATION\\\"></span></md-card-title-text></md-card-title>\\n<md-card-content><div layout=\\\"column\\\" layout-wrap flex><div layout=\\\"row\\\" flex=\\\"50\\\"><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" ng-if=\\\"!product.is_sample && !product.is_raw_material\\\"><md-checkbox ng-model=\\\"product.discount_active\\\" \\ndata-test-id=\\\"addproduct-button-discount-active\\\" aria-label=\\\"Discount Active\\\" flex><div layout-align=\\\"start center\\\" \\nlayout=\\\"row\\\">{{\\'PRODUCT.DISCOUNT_ACTIVE\\' | translate }}<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\">\\n<md-tooltip>{{\\'PRODUCT.DISCOUNT_ACTIVE_TOOLTIP\\' | translate }}</md-tooltip></md-icon></div></md-checkbox>\\n</md-input-container><md-input-container class=\\\"pr-20\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"BARCODES.BARCODE_TYPE\\\">Barcode Type</label><md-select ng-model=\\\"product.default_barcode_type\\\"><md-option \\nng-value=\\\"barcode.id\\\" ng-repeat=\\\"(barcodeId, barcode) in GS1_BARCODE_TYPES_BY_ID\\\">\\n{{\\'BARCODES.\\' + barcode.code | translate }}</md-option></md-select></md-input-container></div><div layout=\\\"row\\\" \\nflex=\\\"50\\\"><div flex=\\\"50\\\"><h4 class=\\\"text-bold\\\" translate=\\\"SALES.RETAIL\\\">Retail</h4><div layout=\\\"column\\\">\\n<md-input-container flex=\\\"100\\\" ng-if=\\\"!product.is_sample && !product.is_raw_material\\\"><md-checkbox \\nng-model=\\\"product.backorders_allowed\\\" aria-label=\\\"Backorders Allowed\\\" flex><div layout-align=\\\"start center\\\" \\nlayout=\\\"row\\\">{{\\'PRODUCT.BACKORDERS_ALLOWED\\' | translate }}<md-icon md-font-icon=\\\"icon-information-outline\\\" \\nclass=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.BACKORDERS_ALLOWED_TOOLTIP\\' | translate }}</md-tooltip></md-icon></div>\\n</md-checkbox></md-input-container></div></div><div flex=\\\"50\\\" has-permission=\\\"app.wholesale\\\"><h4 class=\\\"text-bold\\\" \\ntranslate=\\\"SALES.WHOLESALE\\\">Wholesale</h4><div layout=\\\"column\\\"><md-input-container \\nng-if=\\\"!product.is_raw_material && !session.company.has_multiple_b2b\\\" has-permission=\\\"app.wholesale\\\"><md-checkbox \\nng-model=\\\"selectedUniqueB2b\\\" aria-label=\\\"Catalog\\\" ng-change=\\\"setUniqueB2bToProduct()\\\" \\nng-if=\\\"!session.company.has_multiple_b2b\\\" flex><div layout-align=\\\"start center\\\" layout=\\\"row\\\">\\n{{\\'PRODUCT.CATALOG\\' | translate }}<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>\\n{{\\'PRODUCT.CATALOG_TOOLTIP\\' | translate }}</md-tooltip></md-icon></div></md-checkbox></md-input-container>\\n<md-input-container ng-if=\\\"!product.is_raw_material && session.company.has_multiple_b2b\\\" \\nhas-permission=\\\"app.wholesale\\\"><label translate=\\\"PRODUCT.CATALOG\\\"></label><md-select ng-model=\\\"product.b2b_ecommerces\\\" \\nmultiple=\\\"{{true}}\\\" class=\\\"full-width\\\"><md-option ng-repeat=\\\"ecommerce in b2bEcommerces\\\" ng-value=\\\"ecommerce.id\\\">\\n{{ecommerce.slug}}</md-option></md-select></md-input-container><md-input-container ng-if=\\\"!product.is_raw_material\\\" \\nhas-permission=\\\"app.wholesale\\\"><md-checkbox ng-model=\\\"product.allow_b2b_pre_sales\\\" aria-label=\\\"Allowo B2B pre sales\\\" \\nflex><div layout-align=\\\"start center\\\" layout=\\\"row\\\">{{\\'PRODUCT.ALLOW_B2B_PRE_SALES\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.ALLOW_B2B_PRE_SALES_TOOLTIP\\' | translate }}\\n</md-tooltip></md-icon></div></md-checkbox></md-input-container></div></div></div></div></md-card-content></md-card>\\n<md-card id=\\\"default-provider-product-information\\\" data-test-id=\\\"advanced-product-information\\\" \\nng-hide=\\\"product.product_type == PRODUCT_TYPES_REVERSE.PRODUCT_BUNDLE\\\" class=\\\"mb-16\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\">\\n<md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"PRODUCT.DEFAULT_PROVIDER\\\"></span></md-card-title-text>\\n</md-card-title><md-card-content><div layout=\\\"row\\\" layout-wrap flex><div layout=\\\"row\\\" layout-wrap flex=\\\"100\\\">\\n<md-autocomplete class=\\\"pr-20\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.PROVIDER\\' | translate}}\\\" md-items=\\\"item in providerQuerySearch()\\\" \\nmd-item-text=\\\"item.name\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"providerSearchText\\\" \\nmd-selected-item=\\\"product.provider_instance\\\" md-selected-item-change=\\\"providerChanged(item)\\\"><md-item-template><div \\nlayout=\\\"row\\\"><span md-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"providerSearchText\\\" ng-if=\\\"item.name\\\">{{item.name}}\\n</span> <span md-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"providerSearchText\\\" ng-if=\\\"!item.name && item.first_name\\\">\\n{{(item.first_name)}}</span> <span md-highlight-flags=\\\"^i\\\" md-highlight-text=\\\"providerSearchText\\\" \\nng-if=\\\"!item.name && item.last_name\\\">{{(item.last_name)}}</span></div></md-item-template><md-not-found>\\n{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}</md-not-found></md-autocomplete><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\" class=\\\"pr-20\\\"><label translate=\\\"PRODUCT.ORIGIN_CODE\\\">Origin Code</label><input type=\\\"text\\\" \\nng-change=\\\"autogenerateCode()\\\" ng-model=\\\"product.origin_code\\\"></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"25\\\" class=\\\"pr-20\\\"><label translate=\\\"INVENTORY_DASHBOARD.LEAD_TIME\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"product.purchase_lead_time\\\"></md-input-container><md-input-container class=\\\"pr-20\\\" flex=\\\"70\\\" flex-gt-sm=\\\"25\\\">\\n<label translate=\\\"PRODUCT.FOB_PRICE\\\">FOB Price</label><input type=\\\"number\\\" ng-model=\\\"product.fob_price\\\" \\ndata-test-id=\\\"addproduct-provider-price\\\" min=\\\"0.00000\\\" step=\\\"0.00001\\\" class=\\\"text-right\\\"></md-input-container>\\n<md-input-container class=\\\"pr-20\\\" flex=\\\"30\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"PRODUCT.FOB_PRICE_CURRENCY\\\">FOB Currency\\n</label><md-select ng-model=\\\"product.fob_price_currency\\\"><md-option ng-repeat=\\\"(code, symbol) in currencies\\\" \\nng-value=\\\"code\\\">{{code}} ({{symbol}})</md-option></md-select></md-input-container><md-input-container class=\\\"pr-20\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"25\\\"><label translate=\\\"PRODUCT.INITIAL_DDP_PRICE\\\"></label><input type=\\\"number\\\" \\nng-model=\\\"product.initial_ddp_price\\\" data-test-id=\\\"addproduct-ddp\\\" min=\\\"0\\\" step=\\\"0.00001\\\" class=\\\"text-right\\\">\\n</md-input-container><md-input-container class=\\\"pr-20\\\" flex=\\\"product.is_bundle ? 95 : 100\\\" \\nflex-gt-sm=\\\"product.is_bundle ? 45 : 25\\\"><label translate=\\\"PRODUCT.CURRENT_DDP_PRICE\\\"></label><input type=\\\"number\\\" \\nng-model=\\\"product.ddp_price\\\" min=\\\"0\\\" ng-disabled=\\\"product.is_bundle\\\" step=\\\"0.00001\\\" class=\\\"text-right\\\">\\n</md-input-container><div layout-align=\\\"start center\\\" flex=\\\"5\\\" ng-if=\\\"product.is_bundle\\\" layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.DDP_BUNDLE_INFO\\' | translate }}\\n</md-tooltip></md-icon></div><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"100\\\" class=\\\"pr-20\\\"><label \\ntranslate=\\\"PRODUCT.COST_PRICE_NOTES\\\"></label><input type=\\\"text\\\" maxlength=\\\"{{NOTES_MAX_LENGTH}}\\\" \\nng-model=\\\"product.cost_price_notes\\\"></md-input-container></div></div></md-card-content></md-card><md-card \\nid=\\\"shipping-product-information\\\" data-test-id=\\\"stock-product-information\\\" class=\\\"mb-16\\\" \\nng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title><md-card-title-text><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.SHIPPING_INFORMATION\\\"></span></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"row\\\" layout-wrap flex><div layout=\\\"row\\\" layout-wrap flex=\\\"100\\\"><md-input-container class=\\\"pr-20\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\"><label><span translate=\\\"PRODUCT.WIDTH\\\"></span> ({{session.company.measurement_unit}})</label><input \\ntype=\\\"number\\\" ng-model=\\\"product.width\\\" min=\\\"0.00\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container>\\n<md-input-container class=\\\"pr-20\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label><span translate=\\\"PRODUCT.HEIGHT\\\"></span>\\n ({{session.company.measurement_unit}})</label><input type=\\\"number\\\" ng-model=\\\"product.height\\\" min=\\\"0.00\\\" step=\\\"0.01\\\" \\nclass=\\\"text-right\\\"></md-input-container><md-input-container class=\\\"pr-20\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label><span \\ntranslate=\\\"PRODUCT.DEPTH\\\"></span> ({{session.company.measurement_unit}})</label><input type=\\\"number\\\" \\nng-model=\\\"product.depth\\\" min=\\\"0.00\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container><md-input-container \\nclass=\\\"pr-20\\\" flex=\\\"70\\\" flex-gt-sm=\\\"30\\\"><label><span translate=\\\"PRODUCT.WEIGHT\\\"></span>\\n ({{WEIGHT_UNITS_FORMATTED[session.company.weight_unit]}})</label><input type=\\\"number\\\" ng-model=\\\"product.weight\\\" \\nmin=\\\"0.00\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container><md-input-container class=\\\"pr-20\\\" \\nflex=\\\"product.is_bundle ? 25 : 30\\\" flex-gt-sm=\\\"product.is_bundle ? 15 : 20\\\"><label translate=\\\"PRODUCT.WEIGHT_UNIT\\\">\\nWeight unit</label><md-select ng-model=\\\"product.weight_unit\\\"><md-option ng-value=\\\"name\\\" \\nng-repeat=\\\"(code, name) in WEIGHT_UNITS\\\">{{WEIGHT_UNITS_FORMATTED[name]}}</md-option></md-select></md-input-container>\\n<div layout-align=\\\"start center\\\" ng-if=\\\"product.is_bundle\\\" flex=\\\"5\\\" flex-gt-sm=\\\"5\\\" layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>{{\\'PRODUCT.WEIGHT_BUNDLE_INFO\\' | translate }}\\n</md-tooltip></md-icon></div></div></div></md-card-content></md-card></ng-form></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-orders/nd-product-orders.html\",\"<div id=\\\"nd-product-orders\\\" class=\\\"flex border-bottom\\\" data-test-id=\\\"product-tableStockDetails\\\"><table class=\\\"simple\\\" \\nms-responsive-table><tr class=\\\"h-40\\\"><td class=\\\"auto kpi-title\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nlayout-wrap><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"showInfo\\\" flex><img \\nng-if=\\\"::vm.product.cover_thumbnail\\\" class=\\\"brad-3 thumbnail-40 mr-5\\\" src=\\\"{{::vm.product.cover_thumbnail}}\\\"> <span \\nng-if=\\\"::vm.product.cover_thumbnail\\\"></span> <span layout=\\\"column\\\" class=\\\"kpi-title-code-name\\\"><a class=\\\"mr-5\\\" \\nng-if=\\\"vm.session.hasPermission(\\'app.inventory.products\\')\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:vm.product.id})\\\">{{::vm.product.code}}</a> <span><span \\nclass=\\\"mr-5\\\" ng-if=\\\"!vm.session.hasPermission(\\'app.inventory.products\\')\\\"><b>{{::vm.product.code}}</b></span> <span \\nclass=\\\"text-truncate\\\">{{::vm.product.name}}</span></span></span></div><span flex></span><md-select multiple=\\\"true\\\" \\nclass=\\\"nd-input m-0\\\" ng-change=\\\"vm.changeWarehouses()\\\" ng-model=\\\"vm.selectedWarehouses\\\"><md-option \\nng-value=\\\"warehouse.id\\\" ng-repeat=\\\"warehouse in vm.warehouses\\\">{{warehouse.name}}</md-option></md-select>\\n<md-progress-circular class=\\\"ml-10\\\" ng-if=\\\"vm.loading\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\">\\n</md-progress-circular></div></td><td class=\\\"small kpi-title border-left\\\" \\nng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><span class=\\\"text-truncate\\\">{{::size.name}}<md-tooltip>\\n{{::(size | codename)}}</md-tooltip></span></td></tr><tr \\nng-repeat-start=\\\"color in vm.colorVariants | orderBy: \\'position\\'\\\" class=\\\"no-border\\\"><td class=\\\"auto cell-total\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{::color.name}}<md-progress-circular class=\\\"ml-10\\\" ng-if=\\\"vm.loading\\\" \\nmd-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\"></md-progress-circular></div></td><td \\nclass=\\\"small cell-total border-left\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\">\\n{{vm.productVariantKpisColorSizeTotals[color.id][size.id][vm.view] || 0}}</td></tr><tr \\nng-repeat-start=\\\"warehouse in vm.selectedWarehouses | orderBy: \\'position\\'\\\"><td class=\\\"auto\\\"><span class=\\\"pl-10\\\"><b>\\n{{vm.warehousesById[warehouse].name}}</b></span></td><td class=\\\"small border-left\\\" \\nng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"></td></tr><tr \\nng-repeat-start=\\\"filterType in [\\'on_hand\\', \\'available_on_hand\\']\\\"><td class=\\\"auto text-left\\\"><span class=\\\"pl-20\\\" \\nng-if=\\\"filterType===\\'on_hand\\'\\\" translate=\\\"PRODUCT.STOCK_ON_HAND\\\"></span> <span class=\\\"pl-20\\\" \\nng-if=\\\"filterType===\\'available_on_hand\\'\\\" translate=\\\"PRODUCT.STOCK_AVAILABLE_ON_HAND\\\"></span></td><td \\nclass=\\\"small border-left cell-total\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><span \\nng-if=\\\"filterType===\\'on_hand\\'\\\">\\n{{vm.aggregatedDict[color.id][warehouse][size.id][vm.view].stock + vm.totalAllocatedByWarehouseColorSize[warehouse][color.id][size.id]}} \\n</span><span ng-if=\\\"filterType===\\'available_on_hand\\'\\\">\\n{{vm.aggregatedDict[color.id][warehouse][size.id][vm.view].stock}}</span><md-tooltip md-delay=\\\"500\\\">\\n{{color.name}} - {{size.name}}</md-tooltip></td></tr><tr \\nng-repeat=\\\"(purchaseId, purchase) in vm.purchaseOrders track by purchaseId\\\" \\nng-if=\\\"vm.checkPurchase(purchase, color, size, warehouse, filterType)\\\"><td class=\\\"auto\\\"><span \\nclass=\\\"pl-30 w-90 secondary-text\\\" translate=\\\"PRODUCT.PURCHASE\\\"></span> <a \\nui-sref=\\\"app.inventory.purchases.purchase.products({id:purchase.id})\\\">{{ purchase.autocode }}</a> <span \\nclass=\\\"status-badge {{ vm.PURCHASE_ORDER_STATUS_COLORS[purchase.status] }}\\\" \\ntranslate=\\\"PURCHASES.{{ vm.PURCHASE_ORDER_STATUSES[purchase.status] }}\\\"></span> <span class=\\\"pl-10\\\">\\n{{ purchase.contact_name }}</span></td><td class=\\\"small border-left\\\" \\nng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><div class=\\\"amount\\\">\\n{{vm.getPurchaseAmount(purchase, color, size, warehouse, filterType)}}<md-tooltip md-delay=\\\"500\\\">\\n{{color.name}} - {{size.name}}</md-tooltip></div></td></tr><tr \\nng-repeat=\\\"(transferId, transfer) in vm.transferOrders track by transferId\\\" \\nng-if=\\\"vm.checkTransfer(transfer, color, size, warehouse, filterType)\\\"><td class=\\\"auto\\\"><span \\nclass=\\\"pl-30 w-90 secondary-text\\\" translate=\\\"PRODUCT.TRANSFER\\\"></span> <a \\nui-sref=\\\"app.inventory.transfers.transfer.details({id:transfer.id})\\\">{{ transfer.autocode }}</a> <span \\nclass=\\\"status-badge {{ vm.TRANSFER_ORDER_STATUS_COLORS[transfer.status] }}\\\" \\ntranslate=\\\"TRANSFERS.{{ vm.TRANSFER_ORDER_STATUSES[transfer.status] }}\\\"></span> <span class=\\\"pl-10\\\">\\n{{ transfer.source_warehouse_name }}<md-icon md-font-icon=\\\"icon-arrow-right\\\"></md-icon>\\n{{ transfer.target_warehouse_name }}</span></td><td class=\\\"small border-left\\\" \\nng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><div class=\\\"amount\\\">\\n{{vm.getTransferAmount(transfer, color, size, warehouse, filterType)}}<md-tooltip md-delay=\\\"500\\\">\\n{{color.name}} - {{size.name}}</md-tooltip></div></td></tr><tr \\nng-repeat=\\\"(saleId, sale) in vm.saleOrders track by saleId\\\" \\nng-if=\\\"vm.checkSale(sale, color, size, warehouse, filterType)\\\"><td class=\\\"auto\\\"><span \\nclass=\\\"pl-30 w-90 secondary-text\\\" translate=\\\"PRODUCT.SALE\\\"></span> <a \\nui-sref=\\\"app.wholesale.sales.sale.products({id:sale.id})\\\">{{ sale.autocode }}</a> <span \\nclass=\\\"status-badge {{ vm.SALE_ORDER_STATUS_COLORS[sale.status] }}\\\" \\ntranslate=\\\"SALES.{{ vm.SALE_ORDER_STATUSES[sale.status] }}\\\"></span> <span class=\\\"pl-10\\\">{{ sale.contact_name }}</span>\\n</td><td class=\\\"small border-left\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><div class=\\\"amount\\\">\\n{{vm.getSaleAmount(sale, color, size, warehouse, filterType)}}<md-tooltip md-delay=\\\"500\\\">{{color.name}} - {{size.name}}\\n</md-tooltip></div></td></tr><tr ng-repeat=\\\"(posOrderId, posOrder) in vm.posOrders track by posOrderId\\\" \\nng-if=\\\"posOrder.source_warehouse_id===warehouse && filterType===\\'on_hand\\' && posOrder.totalAllocatedByColor[color.id]>0\\\">\\n<td class=\\\"auto\\\"><span class=\\\"pl-30 w-90 secondary-text\\\" translate=\\\"PRODUCT.SALE\\\"></span> <a \\nui-sref=\\\"app.ecommerce.orders.order({id:posOrder.id})\\\">{{ posOrder.autocode }}</a> <span \\nclass=\\\"status-badge {{ vm.TRANSFER_ORDER_STATUS_COLORS[4] }}\\\" \\ntranslate=\\\"TRANSFERS.{{ vm.TRANSFER_ORDER_STATUSES[4] }}\\\"></span></td><td class=\\\"small border-left\\\" \\nng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><div class=\\\"amount\\\">\\n-{{posOrder.posOrderProductVariants[color.id][size.id].amount}}<md-tooltip md-delay=\\\"500\\\">\\n{{color.name}} - {{size.name}}</md-tooltip></div></td></tr><tr ng-repeat-end></tr><tr class=\\\"border-bottom\\\"><td \\nclass=\\\"auto text-left border-bottom\\\"><span class=\\\"pl-20\\\" translate=\\\"PRODUCT.FUTUR_STOCK_AVAILABLE\\\"></span></td><td \\nclass=\\\"small border-left cell-total border-bottom\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\">\\n{{vm.aggregatedDict[color.id][warehouse][size.id][vm.view].stock + vm.totalPendingByWarehouseColorSize[warehouse][color.id][size.id]}}\\n</td></tr><tr ng-repeat-end></tr><tr ng-repeat-end></tr></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-pricing-tiers/nd-product-pricing-tiers.html\",\"<md-card class=\\\"product-pricing-tiers-directive mb-16\\\" ng-class=\\\"{\\'card-in-card\\':isNew}\\\"><md-card-title>\\n<md-card-title-text><div layout=\\\"row\\\"><span class=\\\"h3\\\" translate=\\\"PRODUCT.PRICING_TIERS\\\"></span><nd-new-feature-badge \\nid=\\\"PRICE_DECIMALS\\\"></nd-new-feature-badge></div><div class=\\\"did-you-know md-margin\\\" ng-if=\\\"vm.showDiscountBanner()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span \\nclass=\\\"font-size-14\\\">{{\\'PRODUCT.DISCOUNT_NOT_ACTIVE_BANNER_TITLE\\' | translate}}</span> <span class=\\\"secondary-text\\\">\\n{{\\'PRODUCT.DISCOUNT_NOT_ACTIVE_BANNER\\' | translate}}</span></div><md-button ng-click=\\\"vm.enableDiscounts()\\\" \\nng-disabled=\\\"vm.saving\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular>{{\\'PRODUCT.ACTIVATE_DISCOUNTS\\' | translate}}</div></md-button>\\n</div></div></md-card-title-text></md-card-title><md-card-content class=\\\"ph-0\\\"><div \\nclass=\\\"ms-responsive-table-wrapper\\\"><div layout=\\\"row\\\" class=\\\"full-width\\\"><form name=\\\"productPricesForm\\\" flex><table \\nflex class=\\\"simple\\\"><thead><th translate=\\\"PRODUCT.PRICING_TIER\\\" width=\\\"12.5%\\\" class=\\\"text-center\\\"></th><th \\ntranslate=\\\"PRODUCT.TAX\\\" width=\\\"12.5%\\\" class=\\\"text-center\\\"></th><th ng-if=\\\"product && product.ddp_price\\\" width=\\\"12.5%\\\" \\nclass=\\\"text-center\\\">{{\\'PRODUCT.DDP_PRICE\\' | translate}}</th><th class=\\\"text-right\\\" width=\\\"12.5%\\\">\\n{{\\'PRODUCT.EXCL_TAX\\' | translate}}</th><th class=\\\"text-right\\\" width=\\\"12.5%\\\">{{\\'PRODUCT.INCL_TAX\\' | translate}}</th><th \\nclass=\\\"text-right\\\" width=\\\"12.5%\\\">{{\\'PRODUCT.DISCOUNT\\' | translate}}</th><th class=\\\"text-right\\\" width=\\\"12.5%\\\">\\n{{\\'PRODUCT.DISCOUNT_EXCL_TAX\\' | translate}}</th><th class=\\\"text-right\\\" width=\\\"12.5%\\\">\\n{{\\'PRODUCT.DISCOUNT_INCL_TAX\\' | translate}}</th></thead><tbody><tr \\nng-repeat=\\\"pricingTier in vm.pricingTiers| orderBy: \\'position\\' track by $index\\\"><td class=\\\"text-center\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"purple-500-fg mr-5\\\" \\nng-if=\\\"vm.pricesMatrix[pricingTier.id].discount\\\"></md-icon><span flex \\nng-class=\\\"{\\'secondary-text\\': !vm.pricesMatrix[pricingTier.id].selected}\\\">{{pricingTier.name}}</span></div></td><td \\nclass=\\\"text-center\\\"><md-select ng-model=\\\"vm.pricesMatrix[pricingTier.id].tax\\\" ng-disabled=\\\"vm.saving\\\" \\nng-change=\\\"vm.priceTaxChanged(pricingTier.id, $event)\\\" md-on-open=\\\"vm.backupTax = vm.pricesMatrix[pricingTier.id].tax\\\" \\nmd-on-close=\\\"vm.showNewTaxOptionDialog(pricingTier, $event)\\\" class=\\\"no-margin\\\"><md-option \\nng-repeat=\\\"tax in vm.taxes | orderBy: \\'percent_value\\'\\\" ng-value=\\\"tax.id\\\">{{tax.name}}: <strong>\\n{{tax.percent_value | price}}%</strong></md-option></md-select></td><td ng-if=\\\"product && product.ddp_price\\\" \\nclass=\\\"text-center secondary-text\\\">{{product.ddp_price | number:5}} {{vm.session.company.currency | currencyCharacter}}\\n</td><td><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].focused != \\'price_excl_tax\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'price_excl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">{{vm.pricesMatrix[pricingTier.id].price_excl_tax | price}} \\n</span><input ng-show=\\\"vm.pricesMatrix[pricingTier.id].focused == \\'price_excl_tax\\'\\\" \\nng-blur=\\\"vm.pricesMatrix[pricingTier.id].focused = null\\\" type=\\\"number\\\" class=\\\"text-right nd-input w-100\\\" \\nng-disabled=\\\"vm.saving\\\" ng-model=\\\"vm.pricesMatrix[pricingTier.id].price_excl_tax\\\" flex \\nng-change=\\\"vm.priceExclTaxChanged(pricingTier.id)\\\"> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].price_excl_tax !== null\\\" class=\\\"ml-5\\\">\\n{{(pricingTier.currency || vm.session.company.currency) | currencyCharacter}}</span> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].price_excl_tax === null && vm.pricesMatrix[pricingTier.id].focused != \\'price_excl_tax\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'price_excl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">+ {{\\'PRODUCT.ADD\\' | translate}}</span></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><span ng-show=\\\"vm.pricesMatrix[pricingTier.id].focused != \\'price_incl_tax\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'price_incl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">{{vm.pricesMatrix[pricingTier.id].price_incl_tax | price}} \\n</span><input ng-show=\\\"vm.pricesMatrix[pricingTier.id].focused == \\'price_incl_tax\\'\\\" \\nng-blur=\\\"vm.pricesMatrix[pricingTier.id].focused = null\\\" style=\\\"width: 100%\\\" type=\\\"number\\\" \\nclass=\\\"text-right nd-input w-100\\\" ng-disabled=\\\"vm.saving\\\" ng-model=\\\"vm.pricesMatrix[pricingTier.id].price_incl_tax\\\" \\nflex ng-change=\\\"vm.priceInclTaxChanged(pricingTier.id)\\\"> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].price_incl_tax !== null\\\" class=\\\"ml-5\\\">\\n{{(pricingTier.currency || vm.session.company.currency) | currencyCharacter}}</span> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].price_incl_tax === null && vm.pricesMatrix[pricingTier.id].focused != \\'price_incl_tax\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'price_incl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">+ {{\\'PRODUCT.ADD\\' | translate}}</span></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><span ng-show=\\\"vm.pricesMatrix[pricingTier.id].focused != \\'discount\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'discount\\')\\\" class=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">\\n{{vm.pricesMatrix[pricingTier.id].discount | price}} </span><input \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].focused == \\'discount\\'\\\" \\nng-blur=\\\"vm.pricesMatrix[pricingTier.id].focused = null\\\" type=\\\"number\\\" class=\\\"text-right purple-500-fg nd-input w-100\\\" \\nng-model=\\\"vm.pricesMatrix[pricingTier.id].discount\\\" flex \\nng-disabled=\\\"!vm.pricesMatrix[pricingTier.id].selected || vm.saving\\\" \\nng-change=\\\"vm.offerPercentValueChanged(pricingTier.id)\\\"> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].discount !== null\\\" class=\\\"ml-5\\\">%</span> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].discount === null &&\\n                  vm.pricesMatrix[pricingTier.id].focused != \\'discount\\' && vm.pricesMatrix[pricingTier.id].price_incl_tax\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'discount\\')\\\" class=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">\\n+ {{\\'PRODUCT.ADD\\' | translate}}</span></div></td><td><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].focused != \\'discount_price_excl_tax\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'discount_price_excl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">\\n{{vm.pricesMatrix[pricingTier.id].discount_price_excl_tax | price}} </span><input \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].focused == \\'discount_price_excl_tax\\'\\\" \\nng-blur=\\\"vm.pricesMatrix[pricingTier.id].focused = null\\\" type=\\\"number\\\" class=\\\"text-right purple-500-fg nd-input w-100\\\" \\nng-model=\\\"vm.pricesMatrix[pricingTier.id].discount_price_excl_tax\\\" flex \\nng-disabled=\\\"!vm.pricesMatrix[pricingTier.id].selected || vm.saving\\\" \\nng-change=\\\"vm.offerPriceExclTaxChanged(pricingTier.id)\\\"> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].discount_price_excl_tax !== null\\\" class=\\\"ml-5\\\">\\n{{(pricingTier.currency || vm.session.company.currency) | currencyCharacter}} </span><span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].discount_price_excl_tax === null &&\\n                  vm.pricesMatrix[pricingTier.id].focused != \\'discount_price_excl_tax\\' && vm.pricesMatrix[pricingTier.id].price_incl_tax\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'discount_price_excl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">+ {{\\'PRODUCT.ADD\\' | translate}}</span></div></td><td><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].focused != \\'discount_price_incl_tax\\'\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'discount_price_incl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">\\n{{vm.pricesMatrix[pricingTier.id].discount_price_incl_tax | price}} </span><input \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].focused == \\'discount_price_incl_tax\\'\\\" \\nfocus-if=\\\"vm.pricesMatrix[pricingTier.id].focused == \\'discount_price_incl_tax\\'\\\" \\nng-blur=\\\"vm.pricesMatrix[pricingTier.id].focused = null\\\" type=\\\"number\\\" class=\\\"text-right purple-500-fg nd-input w-100\\\" \\nng-model=\\\"vm.pricesMatrix[pricingTier.id].discount_price_incl_tax\\\" flex \\nng-disabled=\\\"!vm.pricesMatrix[pricingTier.id].selected || vm.saving\\\" \\nng-change=\\\"vm.offerPriceInclTaxChanged(pricingTier.id)\\\"> <span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].discount_price_incl_tax !== null\\\" class=\\\"ml-5\\\">\\n{{(pricingTier.currency || vm.session.company.currency) | currencyCharacter}} </span><span \\nng-show=\\\"vm.pricesMatrix[pricingTier.id].discount_price_incl_tax === null &&\\n                  vm.pricesMatrix[pricingTier.id].focused != \\'discount_price_incl_tax\\' && vm.pricesMatrix[pricingTier.id].price_incl_tax\\\" \\nng-click=\\\"vm.changeFocused(pricingTier.id, \\'discount_price_incl_tax\\')\\\" \\nclass=\\\"md-primary-fg text-bold cursor-pointer text-right\\\">+ {{\\'PRODUCT.ADD\\' | translate}}</span></div></td></tr>\\n</tbody></table></form></div></div><div layout-align=\\\"end center\\\" layout=\\\"row\\\" flex ng-show=\\\"vm.showButtons\\\"><md-button\\n ng-disabled=\\\"!productPricesForm.$dirty || vm.saving\\\" class=\\\"stroked\\\" ng-click=\\\"vm.cancelProductPrices()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"!vm.getIsValid() || !productPricesForm.$dirty || vm.saving\\\" ng-click=\\\"vm.saveProductPrices()\\\">\\n{{\\'GENERAL.SAVE\\' | translate}}</md-button></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-provider-price/nd-product-provider-price.html\",\"<md-card class=\\\"product-provider-price-directive\\\"><md-card-title ng-if=\\\"::!vm.hasProviderPricesFeature\\\">\\n<md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\" flex><span class=\\\"h3\\\" \\ntranslate=\\\"PRODUCT.PURCHASE_PRICES\\\"></span></div></md-card-title-text></md-card-title><md-card-title \\nng-if=\\\"::vm.hasProviderPricesFeature\\\"><md-card-title-text><div layout=\\\"row\\\" layout-align=\\\"start start\\\" flex><span \\nclass=\\\"h3\\\" translate=\\\"PRODUCT.PURCHASE_PRICES\\\"></span> <span flex></span><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.adding\\\" ng-click=\\\"vm.addProductProviderPrice()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon\\n md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon>{{\\'PRODUCT.ADD_PRICE\\' | translate}}</div></md-button><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" class=\\\"mr-10\\\"><md-button ng-disabled=\\\"vm.saving\\\" class=\\\"stroked\\\" \\nng-click=\\\"vm.cancelProductProviderPrices()\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.saving || !vm.hasDirtyness() || !vm.allRowsValid()\\\" \\nng-click=\\\"vm.saveProductProviderPrices()\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular>\\n{{\\'GENERAL.SAVE\\' | translate}}</div></md-button></div></div></md-card-title-text></md-card-title><md-card-content \\nng-if=\\\"::!vm.hasProviderPricesFeature\\\"><nd-upgrade-subscription-plan-banner \\ntitle=\\\"\\'UPGRADE_PLAN.PROVIDER_PRICES.BANNER_NAME\\'\\\" body=\\\"\\'UPGRADE_PLAN.PROVIDER_PRICES.DESCRIPTION\\'\\\" \\nsource=\\\"\\'inventory.products.product.pricing-tiers.provider-prices\\'\\\" button-below=\\\"true\\\" class=\\\"full-width\\\">\\n</nd-upgrade-subscription-plan-banner></md-card-content><md-card-content ng-if=\\\"::vm.hasProviderPricesFeature\\\"><div \\nclass=\\\"ms-responsive-table-wrapper\\\"><div layout=\\\"row\\\" class=\\\"full-width\\\"><form name=\\\"productPricesForm\\\" flex><table \\nclass=\\\"simple hover\\\"><thead><tr><th translate=\\\"PRODUCT.PROVIDER\\\" flex></th><th translate=\\\"PRODUCT.TAX\\\" flex></th><th \\nclass=\\\"text-center\\\" translate=\\\"PRODUCT.PROVIDER_PRODUCT_CODE\\\" flex></th><th class=\\\"text-center\\\" \\ntranslate=\\\"PRODUCT.PROVIDER_PRICE\\\" flex></th><th translate=\\\"PRODUCT.FOB_PRICE_CURRENCY\\\" flex></th><th \\ntranslate=\\\"PRODUCT.PRICE_TYPES\\\" flex></th><th class=\\\"text-center\\\" translate=\\\"PRODUCT.FINAL_COST_PRICE\\\" flex></th><th \\ntranslate=\\\"PRODUCT.DATE\\\" flex></th><th class=\\\"text-right\\\" translate=\\\"PRODUCT.ACTIONS\\\"></th></tr></thead><tbody><tr \\nng-if=\\\"!vm.productProviderPrices.length\\\"><td colspan=\\\"8\\\" class=\\\"text-center\\\"><em class=\\\"secondary-text\\\">\\n{{\\'PRODUCT.NO_PRODUCT_PROVIDER_PRICE_SPECIFIED\\' | translate}}</em></td></tr><tr \\nng-repeat-start=\\\"productProviderPrice in vm.productProviderPrices\\\" \\nng-click=\\\"vm.showAndHideVariants(productProviderPrice, pppIndex)\\\" ng-init=\\\"pppIndex=$index\\\" class=\\\"provider-row\\\"><td>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-menu-right\\\" \\nng-if=\\\"!productProviderPrice.showVariants\\\" class=\\\"mr-5\\\"></md-icon><md-icon md-font-icon=\\\"icon-menu-down\\\" \\nng-if=\\\"productProviderPrice.showVariants\\\" class=\\\"mr-5\\\"></md-icon><span flex>\\n{{vm.getProviderName(productProviderPrice.provider_instance)}}</span></div></td><td class=\\\"text-left\\\">\\n{{productProviderPrice.tax_instance.name}}: <strong>{{productProviderPrice.tax_instance.percent_value | price}}%\\n</strong></td><td class=\\\"text-center\\\">{{productProviderPrice.provider_product_code}}</td><td class=\\\"text-center\\\">\\n{{productProviderPrice.provider_price | price}} {{productProviderPrice.provider_currency | currencyCharacter}}</td><td>\\n{{productProviderPrice.provider_currency}}</td><td><span ng-if=\\\"productProviderPrice.provider_price_type\\\">\\n{{\\\"PRODUCT.\\\" + vm.PROVIDER_PRICE_TYPES_REVERSE[productProviderPrice.provider_price_type] | translate}}</span></td><td \\nclass=\\\"text-center\\\">\\n{{productProviderPrice.final_cost_price | price}} {{vm.session.company.currency | currencyCharacter}}</td><td>\\n{{productProviderPrice.date | date}}</td><td layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button \\nclass=\\\"md-icon-button md-primary m-0 p-0\\\" \\nng-click=\\\"vm.editProductProviderPrice(productProviderPrice, pppIndex, $event)\\\"><md-icon md-font-icon=\\\"icon-pencil\\\">\\n</md-icon></md-button><md-button class=\\\"md-icon-button md-warn mr-5\\\" ng-disabled=\\\"productProviderPrice.deleting\\\" \\nng-click=\\\"vm.deleteProductProviderPrice(productProviderPrice, $event)\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-icon ng-if=\\\"!productProviderPrice.deleting\\\" md-font-icon=\\\"icon-trash\\\"></md-icon><md-progress-circular \\nng-if=\\\"productProviderPrice.deleting\\\" class=\\\"mr-8\\\" md-diameter=\\\"20px\\\" flex></md-progress-circular></div></md-button>\\n</td></tr><tr ng-repeat-end ng-if=\\\"productProviderPrice.showVariants\\\"><td colspan=\\\"8\\\" \\nclass=\\\"md-background-bg md-hue-2 product-variant-td\\\"><div layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><h3 flex>{{\\'PRODUCT.PURCHASE_VARIANT_PRICES\\' | translate}}</h3></div><md-card class=\\\"m-0\\\">\\n<md-card-content><table class=\\\"simple\\\"><thead><th translate=\\\"PRODUCT.COLOR\\\" flex></th><th translate=\\\"PRODUCT.SIZE\\\" \\nflex></th><th class=\\\"text-center\\\" translate=\\\"PRODUCT.PROVIDER_SKU\\\" flex></th><th class=\\\"text-center\\\" \\ntranslate=\\\"PRODUCT.PROVIDER_BARCODE\\\" flex></th><th class=\\\"text-center\\\" translate=\\\"PRODUCT.PROVIDER_PRICE\\\" flex></th><th\\n class=\\\"text-center\\\" translate=\\\"PRODUCT.FINAL_COST_PRICE\\\" flex></th></thead><tbody><tr \\nng-repeat=\\\"productVariant in vm.product.product_variants\\\"><td>{{productVariant.color_name}}</td><td>\\n{{productVariant.size_name}}</td><td class=\\\"text-center\\\"><input \\nng-model=\\\"productProviderPrice.productVariantProviderPriceById[productVariant.id].provider_sku\\\" \\nng-change=\\\"vm.setAsDirty(productProviderPrice)\\\" placeholder=\\\"{{\\'PRODUCT.ADD_PROVIDER_SKU\\' | translate}}\\\" \\nclass=\\\"text-right nd-input no-margin\\\" type=\\\"text\\\"></td><td class=\\\"text-center\\\"><input \\nng-model=\\\"productProviderPrice.productVariantProviderPriceById[productVariant.id].provider_barcode\\\" \\nng-change=\\\"vm.setAsDirty(productProviderPrice)\\\" class=\\\"text-right nd-input no-margin\\\" \\nplaceholder=\\\"{{\\'PRODUCT.ADD_PROVIDER_BARCODE\\' | translate}}\\\" type=\\\"text\\\"></td><td class=\\\"text-center\\\"><input \\nng-model=\\\"productProviderPrice.productVariantProviderPriceById[productVariant.id].provider_price\\\" \\nplaceholder=\\\"{{productProviderPrice.provider_price}}\\\" ng-change=\\\"vm.setAsDirty(productProviderPrice)\\\" \\nclass=\\\"text-right nd-input w-80 no-margin\\\" \\nng-class=\\\"{\\'nd-invalid\\': !vm.isRowValid(productProviderPrice.productVariantProviderPriceById[productVariant.id])}\\\" \\nmin=\\\"0\\\" step=\\\"0.000001\\\" type=\\\"number\\\"> {{productProviderPrice.provider_currency | currencyCharacter}}</td><td \\nclass=\\\"text-center\\\"><input \\nng-model=\\\"productProviderPrice.productVariantProviderPriceById[productVariant.id].final_cost_price\\\" \\nplaceholder=\\\"{{productProviderPrice.final_cost_price}}\\\" ng-change=\\\"vm.setAsDirty(productProviderPrice)\\\" \\nclass=\\\"text-right nd-input w-80 no-margin\\\" \\nng-class=\\\"{\\'nd-invalid\\': !vm.isRowValid(productProviderPrice.productVariantProviderPriceById[productVariant.id])}\\\" \\nmin=\\\"0\\\" step=\\\"0.000001\\\" type=\\\"number\\\"> {{vm.session.company.currency | currencyCharacter}}</td></tr></tbody></table>\\n</md-card-content></md-card></div></td></tr></tbody></table></form></div></div><div layout-align=\\\"end center\\\" \\nlayout=\\\"row\\\"><md-button ng-disabled=\\\"vm.saving\\\" class=\\\"stroked\\\" ng-click=\\\"vm.cancelProductProviderPrices()\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"vm.saving || !vm.hasDirtyness() || !vm.allRowsValid()\\\" ng-click=\\\"vm.saveProductProviderPrices()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\" class=\\\"mr-5\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular>{{\\'GENERAL.SAVE\\' | translate}}</div></md-button></div></md-card-content>\\n</md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-selector/nd-product-selector.html\",\"\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-selector/nd-product-variant-matrix-cell.html\",\"\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-selector/nd-product-variant-selector.html\",\"\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-stock-kpis/nd-product-stock-kpis.html\",\"<div id=\\\"nd-product-stock-kpis\\\" class=\\\"flex\\\" data-test-id=\\\"product-tableStockDetails\\\"><table class=\\\"simple\\\" \\nms-responsive-table><tr class=\\\"h-40\\\"><td class=\\\"auto kpi-title\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nlayout-wrap><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"showInfo\\\" flex><img \\nng-if=\\\"::vm.product.cover_thumbnail\\\" class=\\\"brad-3 thumbnail-40 mr-5\\\" src=\\\"{{::vm.product.cover_thumbnail}}\\\"> <span \\nng-if=\\\"::vm.product.cover_thumbnail\\\"></span> <span layout=\\\"column\\\" class=\\\"kpi-title-code-name\\\"><a class=\\\"mr-5\\\" \\nng-if=\\\"vm.session.hasPermission(\\'app.inventory.products\\')\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:vm.product.id})\\\">{{::vm.product.code}}</a> <span><span \\nclass=\\\"mr-5\\\" ng-if=\\\"!vm.session.hasPermission(\\'app.inventory.products\\')\\\"><b>{{::vm.product.code}}</b></span> <span \\nclass=\\\"text-truncate\\\">{{::vm.product.name}}</span></span></span></div><span ng-if=\\\"!showInfo && !vm.product.is_bundle\\\" \\nflex></span><div layout=\\\"row\\\" layout-align=\\\"start center\\\" layout-wrap flex><div flex=\\\"none\\\"><md-select \\nng-if=\\\"vm.product.is_bundle && vm.showAggregates\\\" class=\\\"nd-input outlined m-0 text-left no-background no-padding\\\" \\nng-change=\\\"vm.changeSelectedProduct()\\\" ng-model=\\\"vm.selectedProduct\\\"><md-option ng-value=\\\"vm.product\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"thumbnail-select thumbnail-40 mr-10\\\" \\nng-class=\\\"{\\'default-icon\\': !product.cover_thumbnail}\\\" src=\\\"{{::vm.product.cover_thumbnail}}\\\"> <strong \\nng-if=\\\"vm.product.code\\\">{{vm.product.code}}</strong> <span ng-if=\\\"vm.product.code\\\">&nbsp-&nbsp</span> <span>\\n{{\\'PRODUCT.PACK\\' | translate }}</span></div></md-option><md-option \\nng-repeat=\\\"bundleContentVariant in vm.product.bundle_content_variants\\\" ng-value=\\\"bundleContentVariant\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><img class=\\\"thumbnail-select thumbnail-40 mr-10\\\" \\nng-class=\\\"{\\'default-icon\\': !product.cover_thumbnail}\\\" src=\\\"{{vm.getCover(bundleContentVariant)}}\\\"> <strong \\nng-if=\\\"bundleContentVariant.sku\\\">{{bundleContentVariant.sku}}</strong> <span \\nng-if=\\\"bundleContentVariant.sku && bundleContentVariant.full_name\\\">&nbsp-&nbsp</span> <span \\nng-if=\\\"bundleContentVariant.full_name\\\">{{bundleContentVariant.full_name}}</span></div></md-option></md-select></div>\\n<div flex></div><div flex=\\\"none\\\"><md-progress-circular class=\\\"ml-10\\\" \\nng-if=\\\"vm.loadingTransferOrderProductVariantDrafts\\\" md-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\">\\n</md-progress-circular><md-menu layout=\\\"column\\\" class=\\\"md-menu-view-options m-0\\\" layout-align=\\\"center center\\\">\\n<md-button ng-click=\\\"$mdMenu.open()\\\" class=\\\"md-icon-button no-margin\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\" \\nclass=\\\"s18\\\"></md-icon></md-button><md-menu-content><md-menu-item ng-if=\\\"vm.showEditButton()\\\" \\nhas-permission=\\\"inventory.products.product.details.update\\\"><md-button ng-click=\\\"vm.toggleEdition()\\\"><md-icon \\nng-if=\\\"vm.edit\\\" md-font-icon=\\\"icon-checkbox-marked\\\" class=\\\"no-md-accent\\\"></md-icon><md-icon ng-if=\\\"!vm.edit\\\" \\nmd-font-icon=\\\"icon-checkbox-blank-outline\\\"></md-icon>{{\\'PRODUCT.EDIT_STOCK\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item ng-if=\\\"vm.showEditTransfersButton()\\\" has-permission=\\\"inventory.products.product.details.update\\\">\\n<md-button ng-click=\\\"vm.toggleEditTransfers()\\\" md-prevent-menu-close><md-icon ng-if=\\\"vm.editTransfer\\\" \\nmd-font-icon=\\\"icon-checkbox-marked\\\" class=\\\"no-md-accent\\\"></md-icon><md-icon ng-if=\\\"!vm.editTransfer\\\" \\nmd-font-icon=\\\"icon-checkbox-blank-outline\\\"></md-icon>{{\\'PRODUCT.EDIT_TRANSFERS\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item ng-if=\\\"vm.showEditTransfersButton()\\\" \\nhas-permission=\\\"inventory.products.product.details.update\\\"><md-button \\nng-disabled=\\\"!vm.editTransfer || vm.edit || vm.view !== \\'available_on_hand\\'\\\" md-prevent-menu-close \\nng-click=\\\"vm.togglePrevisualizeTransferDrafts()\\\"><md-icon ng-if=\\\"vm.previsualizeTransferDraft\\\" \\nmd-font-icon=\\\"icon-checkbox-marked\\\" class=\\\"no-md-accent\\\"></md-icon><md-icon ng-if=\\\"!vm.previsualizeTransferDraft\\\" \\nmd-font-icon=\\\"icon-checkbox-blank-outline\\\"></md-icon>{{\\'PRODUCT.PREVISUALIZE_TRANSFER_DRAFTS\\' | translate}}</md-button>\\n</md-menu-item><md-divider ng-if=\\\"vm.showEditTransfersButton()\\\"></md-divider><md-menu-item ng-if=\\\"vm.showAggregates\\\">\\n<md-button ng-disabled=\\\"vm.view==\\'available_on_hand\\'\\\" ng-click=\\\"vm.setView(\\'available_on_hand\\');\\\">\\n{{\\'PRODUCT.STOCK\\' | translate}}</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAggregates\\\"><md-button \\nng-disabled=\\\"vm.view==\\'minimum_stock\\'\\\" \\nng-click=\\\"vm.upgradePlan($event, vm.hasMinStockFeature, \\'inventory.stocks.min_stock\\'); vm.setView(\\'minimum_stock\\');\\\">\\n<md-icon ng-if=\\\"!vm.hasMinStockFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>{{\\'PRODUCT.MINIMUM_STOCK\\' | translate}}\\n</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAggregates\\\"><md-button \\nng-disabled=\\\"vm.view==\\'allocated_on_retail\\'\\\" ng-click=\\\"vm.setView(\\'allocated_on_retail\\');\\\">\\n{{\\'PRODUCT.ALLOCATED\\' | translate}}</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAggregates\\\"><md-button \\nng-disabled=\\\"vm.view==\\'in_transit_on_transfer\\'\\\" \\nng-click=\\\"vm.upgradePlan($event, vm.hasTransferOrderFeature, \\'app.inventory.transfers\\'); vm.setView(\\'in_transit_on_transfer\\');\\\">\\n<md-icon ng-if=\\\"!vm.hasTransferOrderFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'PRODUCT.TRANSFERRED_IN_TRANSIT\\' | translate}}</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAggregates\\\">\\n<md-button ng-disabled=\\\"vm.view==\\'in_transit_on_purchase\\'\\\" \\nng-click=\\\"vm.upgradePlan($event, vm.hasPurchaseOrderFeature, \\'app.inventory.purchases\\'); vm.setView(\\'in_transit_on_purchase\\');\\\">\\n<md-icon ng-if=\\\"!vm.hasPurchaseOrderFeature\\\" class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/feature.6e6eefb5.svg\\\"></md-icon>\\n{{\\'PRODUCT.PURCHASED_IN_TRANSIT\\' | translate}}</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.showAggregates\\\">\\n<md-button ng-disabled=\\\"vm.view==\\'sold_on_retail\\'\\\" ng-click=\\\"vm.setView(\\'sold_on_retail\\');\\\">\\n{{\\'PRODUCT.SOLD\\' | translate}}</md-button></md-menu-item></md-menu-content></md-menu></div></div></div></td><td \\nclass=\\\"small kpi-title border-left\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><span \\nclass=\\\"text-truncate\\\">{{::size.name}}<md-tooltip>{{::(size | codename)}}</md-tooltip></span></td><td \\nng-if=\\\"vm.showStockColumn()\\\" ng-class=\\\"{\\'cell-total\\': vm.view==\\'available_on_hand\\'}\\\" \\nclass=\\\"small kpi-title aggregated border-left border-double\\\"><span class=\\\"text-truncate\\\" \\nng-click=\\\"vm.setView(\\'available_on_hand\\')\\\">{{\\'PRODUCT.STOCK\\' | translate}}<md-tooltip>\\n{{\\'PRODUCT.STOCK_TOOLTIP\\' | translate}}</md-tooltip></span></td><td ng-if=\\\"vm.showAllocatedColumn()\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'allocated_on_retail\\'}\\\" class=\\\"small kpi-title aggregated border-left\\\"><span \\nclass=\\\"text-truncate\\\" ng-click=\\\"vm.setView(\\'allocated_on_retail\\')\\\">{{\\'PRODUCT.ALLOCATED\\' | translate}}<md-tooltip>\\n{{\\'PRODUCT.ALLOCATED_TOOLTIP\\' | translate}}</md-tooltip></span></td><td ng-if=\\\"vm.showTransferredInTransitColumn()\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'in_transit_on_transfer\\'}\\\" class=\\\"small kpi-title aggregated border-left\\\"><span \\nclass=\\\"text-truncate\\\" ng-click=\\\"vm.setView(\\'in_transit_on_transfer\\')\\\">{{\\'PRODUCT.TRANSFERRED_IN_TRANSIT\\' | translate}}\\n<md-tooltip>{{\\'PRODUCT.TRANSFERRED_IN_TRANSIT_TOOLTIP\\' | translate}}</md-tooltip></span></td><td \\nng-if=\\\"vm.showPurchasedInTransitColumn()\\\" ng-class=\\\"{\\'cell-total\\': vm.view==\\'in_transit_on_purchase\\'}\\\" \\nclass=\\\"small kpi-title aggregated border-left\\\"><span class=\\\"text-truncate\\\" \\nng-click=\\\"vm.setView(\\'in_transit_on_purchase\\')\\\">{{\\'PRODUCT.PURCHASED_IN_TRANSIT\\' | translate}}<md-tooltip>\\n{{\\'PRODUCT.PURCHASED_IN_TRANSIT_TOOLTIP\\' | translate}}</md-tooltip></span></td><td ng-if=\\\"vm.showSoldColumn()\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'sold_on_retail\\'}\\\" class=\\\"small kpi-title aggregated kpi-title-last border-left\\\">\\n<span class=\\\"text-truncate\\\" ng-click=\\\"vm.setView(\\'sold_on_retail\\')\\\">{{\\'PRODUCT.SOLD\\' | translate}}<md-tooltip>\\n{{\\'PRODUCT.SOLD_TOOLTIP\\' | translate}}</md-tooltip></span></td></tr><tr \\nng-repeat-start=\\\"color in vm.colorVariants | orderBy: \\'position\\'\\\" class=\\\"no-border\\\"><td class=\\\"auto cell-total\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{::color.name}}<md-progress-circular class=\\\"ml-10\\\" ng-if=\\\"vm.loading\\\" \\nmd-diameter=\\\"20\\\" md-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\"></md-progress-circular></div></td><td \\nclass=\\\"small cell-total border-left\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\">\\n{{vm.productVariantKpisColorSizeTotals[color.id][size.id][vm.view] || 0}}</td><td ng-if=\\\"vm.showStockColumn()\\\" \\nng-click=\\\"vm.setView(\\'available_on_hand\\')\\\" ng-class=\\\"{\\'cell-total\\': vm.view==\\'available_on_hand\\'}\\\" \\nclass=\\\"small border-left border-double kpi-cell\\\">{{vm.productVariantKpisColorTotals[color.id].available_on_hand || 0}}\\n</td><td ng-if=\\\"vm.showAllocatedColumn()\\\" ng-click=\\\"vm.setView(\\'allocated_on_retail\\')\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'allocated_on_retail\\'}\\\" class=\\\"small border-left kpi-cell\\\">\\n{{vm.productVariantKpisColorTotals[color.id].allocated_on_retail || 0}}</td><td \\nng-if=\\\"vm.showTransferredInTransitColumn()\\\" ng-click=\\\"vm.setView(\\'in_transit_on_transfer\\')\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'in_transit_on_transfer\\'}\\\" class=\\\"small border-left kpi-cell\\\">\\n{{vm.productVariantKpisColorTotals[color.id].in_transit_on_transfer || 0}}</td><td \\nng-if=\\\"vm.showPurchasedInTransitColumn()\\\" ng-click=\\\"vm.setView(\\'in_transit_on_purchase\\')\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'in_transit_on_purchase\\'}\\\" class=\\\"small border-left kpi-cell\\\">\\n{{vm.productVariantKpisColorTotals[color.id].in_transit_on_purchase || 0}}</td><td ng-if=\\\"vm.showSoldColumn()\\\" \\nng-click=\\\"vm.setView(\\'sold_on_retail\\')\\\" ng-class=\\\"{\\'cell-total\\': vm.view==\\'sold_on_retail\\'}\\\" \\nclass=\\\"small border-left kpi-cell\\\">{{vm.productVariantKpisColorTotals[color.id].sold_on_retail || 0}}</td></tr><tr \\nng-repeat=\\\"warehouse in ::vm.warehouses | orderBy: \\'position\\'\\\"><td class=\\\"auto\\\">{{::warehouse.name}}</td><td \\nclass=\\\"small border-left\\\" ng-repeat=\\\"size in vm.sizeVariants | orderBy: \\'position\\'\\\"><div \\nclass=\\\"amount preview {{vm.view}} editable-{{!!vm.edit}} clickable-{{!!vm.editTransfer}}\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.aggregatedDict[color.id][warehouse.id][size.id][vm.view].stock,\\n             \\'under-minimum-bg\\': vm.paintUnderMinimumBg(color.id, warehouse.id, size.id)}\\\" \\nng-click=\\\"vm.previewProductVariantTransfers($event, color.id, size.id, warehouse.id)\\\"><span \\nng-if=\\\"!vm.edit && !vm.previsualizeTransferDraft\\\" \\nng-class=\\\"{\\'red-fg\\': vm.aggregatedDict[color.id][warehouse.id][size.id][vm.view].stock < 0}\\\">\\n{{vm.aggregatedDict[color.id][warehouse.id][size.id][vm.view].stock || 0}} </span><span \\nng-if=\\\"!vm.edit && vm.previsualizeTransferDraft\\\">\\n{{vm.aggregatedDict[color.id][warehouse.id][size.id][vm.view].stock + vm.transferOrderProductVariants[color.id][size.id][warehouse.id] || 0}} \\n</span><input ng-if=\\\"vm.edit\\\" class=\\\"transparent-bg\\\" type=\\\"number\\\" placeholder=\\\"0\\\" \\nng-class=\\\"{\\'secondary-text\\':vm.aggregatedDict[color.id][warehouse.id][size.id][vm.view].stock==0}\\\" \\nng-model-options=\\\"{updateOn:\\'blur\\'}\\\" ng-model=\\\"vm.aggregatedDict[color.id][warehouse.id][size.id][vm.view].stock\\\" \\nonclick=\\\"this.focus()\\\" ng-change=\\\"vm.updateStock(color, warehouse, size)\\\"><md-tooltip md-delay=\\\"500\\\">\\n{{color.name}} - {{size.name}}</md-tooltip></div></td><td ng-if=\\\"vm.showStockColumn()\\\" \\nng-click=\\\"vm.view=\\'available_on_hand\\'\\\" class=\\\"small border-left border-double kpi-cell\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'available_on_hand\\', \\'secondary-text\\': !vm.productVariantKpisTotals[color.id][warehouse.id].available_on_hand, \\'red-fg\\': vm.productVariantKpisTotals[color.id][warehouse.id].available_on_hand<0}\\\">\\n{{vm.productVariantKpisTotals[color.id][warehouse.id].available_on_hand || 0}}</td><td \\nng-if=\\\"vm.showAllocatedColumn()\\\" ng-click=\\\"vm.view=\\'allocated_on_retail\\'\\\" class=\\\"small border-left kpi-cell\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'allocated_on_retail\\', \\'secondary-text\\': !vm.productVariantKpisTotals[color.id][warehouse.id].allocated_on_retail, \\'red-fg\\': vm.productVariantKpisTotals[color.id][warehouse.id].allocated_on_retail<0}\\\">\\n{{vm.productVariantKpisTotals[color.id][warehouse.id].allocated_on_retail || 0}}</td><td \\nng-if=\\\"vm.showTransferredInTransitColumn()\\\" ng-click=\\\"vm.view=\\'in_transit_on_transfer\\'\\\" \\nclass=\\\"small border-left kpi-cell\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'in_transit_on_transfer\\', \\'secondary-text\\': !vm.productVariantKpisTotals[color.id][warehouse.id].in_transit_on_transfer, \\'red-fg\\': vm.productVariantKpisTotals[color.id][warehouse.id].in_transit_on_transfer<0}\\\">\\n{{vm.productVariantKpisTotals[color.id][warehouse.id].in_transit_on_transfer || 0}}</td><td \\nng-if=\\\"vm.showPurchasedInTransitColumn()\\\" ng-click=\\\"vm.view=\\'in_transit_on_purchase\\'\\\" \\nclass=\\\"small border-left kpi-cell\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'in_transit_on_purchase\\', \\'secondary-text\\': !vm.productVariantKpisTotals[color.id][warehouse.id].in_transit_on_purchase, \\'red-fg\\': vm.productVariantKpisTotals[color.id][warehouse.id].in_transit_on_purchase<0}\\\">\\n{{vm.productVariantKpisTotals[color.id][warehouse.id].in_transit_on_purchase || 0}}</td><td \\nng-if=\\\"vm.showSoldColumn()\\\" ng-click=\\\"vm.view=\\'sold_on_retail\\'\\\" class=\\\"small border-left kpi-cell\\\" \\nng-class=\\\"{\\'cell-total\\': vm.view==\\'sold_on_retail\\', \\'secondary-text\\': !vm.productVariantKpisTotals[color.id][warehouse.id].sold_on_retail, \\'red-fg\\': vm.productVariantKpisTotals[color.id][warehouse.id].sold_on_retail<0}\\\">\\n{{vm.productVariantKpisTotals[color.id][warehouse.id].sold_on_retail || 0}}</td></tr><tr ng-repeat-end></tr></table>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-planning-configuration/nd-product-planning-configuration.html\",\"<md-card><md-card-title><md-card-title-text><span class=\\\"h3\\\" translate=\\\"CONFIGURATION.PLANNING\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div id=\\\"product-replenishment-optimization-configuration\\\"><h4 \\nclass=\\\"mt-0\\\" translate=\\\"INVENTORY_CONFIGURATION.REPLENISHMENTS_CONFIGURATION\\\"></h4><div layout=\\\"column\\\" \\nlayout-gt-sm=\\\"row\\\" flex=\\\"100\\\"><md-input-container class=\\\"mb-0\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"vm.product.replenishment_planning_configuration.is_limit_min\\\" ng-blur=\\\"vm.saveStockOptimization()\\\" \\nflex=\\\"100\\\"><span translate=\\\"INVENTORY_CONFIGURATION.IS_LIMIT_MIN_RESTOCK\\\"></span></md-checkbox></div>\\n</md-input-container></div><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex=\\\"100\\\" layout-align=\\\"start center\\\"><div \\nlayout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16\\\" layout-align=\\\"start center\\\"><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.LIMIT_MIN_RESTOCK_QTY\\\"></label><div layout=\\\"row\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nng-blur=\\\"vm.saveStockOptimization()\\\" name=\\\"limit_min_qty\\\" \\nng-disabled=\\\"!vm.product.replenishment_planning_configuration.is_limit_min\\\" \\nng-model=\\\"vm.product.replenishment_planning_configuration.limit_min_qty\\\" class=\\\"text-right\\\"></div></md-input-container>\\n<span>{{\\'GENERAL.AMT\\' | translate}}</span></div><div layout=\\\"row\\\" flex=\\\"50\\\"></div></div><md-input-container flex=\\\"100\\\" \\nclass=\\\"mb-0\\\"><div layout=\\\"row\\\"><md-checkbox ng-model=\\\"vm.product.replenishment_planning_configuration.is_limit_max\\\" \\nng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"INVENTORY_CONFIGURATION.IS_LIMIT_MAX_RESTOCK\\\"></span></md-checkbox></div></md-input-container><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" flex class=\\\"pr-16\\\" layout-align=\\\"start center\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.MAX_RESTOCK_TYPE\\\"></label><md-select \\nng-model=\\\"vm.product.replenishment_planning_configuration.max_type\\\" ng-init=\\\"vm.initWarehouseSelect()\\\" \\nng-change=\\\"vm.changeMaxValueInput()\\\" ng-disabled=\\\"!vm.product.replenishment_planning_configuration.is_limit_max\\\" \\nng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\"><md-option \\nng-repeat=\\\"max_type in vm.maxTypes\\\" value=\\\"{{max_type.id}}\\\">{{\\'INVENTORY_CONFIGURATION.\\' + max_type.name | translate}}\\n</md-option></md-select></md-input-container></div><div layout=\\\"row\\\" flex layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isPercentage(vm.product.replenishment_planning_configuration.max_type)\\\"><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.MAX_PERCENTAGE_VALUE\\\"></label><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><input \\ntype=\\\"number\\\" min=\\\"0\\\" name=\\\"max_percentage_value\\\" \\nng-disabled=\\\"!vm.product.replenishment_planning_configuration.is_limit_max\\\" \\nng-model=\\\"vm.product.replenishment_planning_configuration.max_percentage_value\\\" ng-change=\\\"vm.saveStockOptimization()\\\" \\nng-model-options=\\\"{debounce:500}\\\" class=\\\"text-right\\\"></div></md-input-container><span>%</span></div><div layout=\\\"row\\\" \\nflex layout-align=\\\"start center\\\" ng-if=\\\"vm.isFixedAmount(vm.product.replenishment_planning_configuration.max_type)\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.MAX_FIXED_AMOUNT_VALUE\\\"></label><div layout=\\\"row\\\">\\n<input type=\\\"number\\\" min=\\\"0\\\" name=\\\"max_fixed_amount_value\\\" \\nng-disabled=\\\"!vm.product.replenishment_planning_configuration.is_limit_max\\\" \\nng-model=\\\"vm.product.replenishment_planning_configuration.max_fixed_amount_value\\\" \\nng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\" class=\\\"text-right\\\"></div></md-input-container>\\n<span>{{\\'GENERAL.AMT\\' | translate}}</span></div></div><div layout=\\\"row\\\" class=\\\"mb-16\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-8\\\"></md-icon><div layout=\\\"column\\\" flex><span flex \\nclass=\\\"did-you-know-title\\\"><b>{{\\'GENERAL.EXAMPLE\\' | translate}}</b> </span><span \\nng-if=\\\"!vm.isPercentage(vm.product.replenishment_planning_configuration.max_type) && !vm.isFixedAmount(vm.product.replenishment_planning_configuration.max_type)\\\" \\nflex class=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'INVENTORY_CONFIGURATION.MAX_PURCHASE_TYPE_EXAMPLE\\' | translate\\\"></span> <span \\nng-if=\\\"vm.isPercentage(vm.product.replenishment_planning_configuration.max_type)\\\" flex \\nclass=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'INVENTORY_CONFIGURATION.MAX_RESTOCK_TYPE_EXAMPLE_1\\' | translate: {restock_percentage_value: vm.product.replenishment_planning_configuration.max_percentage_value, exampleAccumulated: vm.examplePercentage(10, vm.product.replenishment_planning_configuration.max_percentage_value)}\\\">\\n</span> <span ng-if=\\\"vm.isFixedAmount(vm.product.replenishment_planning_configuration.max_type)\\\" flex \\nclass=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'INVENTORY_CONFIGURATION.MAX_RESTOCK_TYPE_EXAMPLE_2\\' | translate: {restock_fixed_amount_value: vm.product.replenishment_planning_configuration.max_fixed_amount_value, exampleAccumulated: vm.product.replenishment_planning_configuration.max_fixed_amount_value + 1}\\\">\\n</span></div></div><md-input-container flex=\\\"100\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"vm.product.replenishment_planning_configuration.is_limit_max_to_min_stock_origin\\\" \\nng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"INVENTORY_CONFIGURATION.IS_LIMIT_MAX_TO_MIN_STOCK_ORIGIN\\\"></span></md-checkbox></div></md-input-container>\\n</div><md-divider></md-divider><div id=\\\"product-purchase-optimization-configuration\\\"><h4 \\ntranslate=\\\"INVENTORY_CONFIGURATION.REORDER_CONFIGURATION\\\"></h4><div layout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex=\\\"100\\\">\\n<md-input-container class=\\\"mb-0\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"vm.product.purchase_planning_configuration.is_limit_min\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"INVENTORY_CONFIGURATION.IS_LIMIT_MIN_PURCHASE\\\"></span></md-checkbox></div></md-input-container></div><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex=\\\"100\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16\\\" \\nlayout-align=\\\"start center\\\"><md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.LIMIT_MIN_PURCHASE_QTY\\\">\\n</label><div layout=\\\"row\\\"><input type=\\\"number\\\" min=\\\"0\\\" name=\\\"limit_min_qty\\\" \\nng-disabled=\\\"!vm.product.purchase_planning_configuration.is_limit_min\\\" \\nng-model=\\\"vm.product.purchase_planning_configuration.limit_min_qty\\\" class=\\\"text-right\\\"></div></md-input-container>\\n<span>{{\\'GENERAL.AMT\\' | translate}}</span></div><div layout=\\\"row\\\" flex=\\\"50\\\"></div></div><md-input-container flex=\\\"100\\\" \\nclass=\\\"mb-0\\\"><div layout=\\\"row\\\"><md-checkbox ng-model=\\\"vm.product.purchase_planning_configuration.is_limit_max\\\" \\nng-change=\\\"vm.saveStockOptimization()\\\" ng-model-options=\\\"{debounce:500}\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"INVENTORY_CONFIGURATION.IS_LIMIT_MAX_PURCHASE\\\"></span></md-checkbox></div></md-input-container><div \\nlayout=\\\"column\\\" layout-gt-sm=\\\"row\\\" flex=\\\"100\\\"><div layout=\\\"row\\\" flex class=\\\"pr-16\\\" layout-align=\\\"start center\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.MAX_PURCHASE_TYPE\\\"></label><md-select \\nng-model=\\\"vm.product.purchase_planning_configuration.max_type\\\" ng-init=\\\"vm.initWarehouseSelect()\\\" \\nng-disabled=\\\"!vm.product.purchase_planning_configuration.is_limit_max\\\" ng-change=\\\"vm.saveStockOptimization()\\\" \\nng-model-options=\\\"{debounce:500}\\\"><md-option ng-repeat=\\\"max_type in vm.maxTypes\\\" value=\\\"{{max_type.id}}\\\">\\n{{\\'INVENTORY_CONFIGURATION.\\' + max_type.name | translate}}</md-option></md-select></md-input-container></div><div \\nlayout=\\\"row\\\" flex layout-align=\\\"start center\\\" \\nng-if=\\\"vm.isPercentage(vm.product.purchase_planning_configuration.max_type)\\\"><md-input-container flex><label \\ntranslate=\\\"INVENTORY_CONFIGURATION.MAX_PERCENTAGE_VALUE\\\"></label><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><input \\ntype=\\\"number\\\" min=\\\"0\\\" name=\\\"max_percentage_value\\\" \\nng-disabled=\\\"!vm.product.purchase_planning_configuration.is_limit_max\\\" \\nng-model=\\\"vm.product.purchase_planning_configuration.max_percentage_value\\\" ng-change=\\\"vm.saveStockOptimization()\\\" \\nng-model-options=\\\"{debounce:500}\\\" class=\\\"text-right\\\"></div></md-input-container><span>%</span></div><div layout=\\\"row\\\" \\nflex layout-align=\\\"start center\\\" ng-if=\\\"vm.isFixedAmount(vm.product.purchase_planning_configuration.max_type)\\\">\\n<md-input-container flex><label translate=\\\"INVENTORY_CONFIGURATION.MAX_FIXED_AMOUNT_VALUE\\\"></label><div layout=\\\"row\\\">\\n<input type=\\\"number\\\" min=\\\"0\\\" name=\\\"max_fixed_amount_value\\\" \\nng-disabled=\\\"!vm.product.purchase_planning_configuration.is_limit_max\\\" \\nng-model=\\\"vm.product.purchase_planning_configuration.max_fixed_amount_value\\\" ng-change=\\\"vm.saveStockOptimization()\\\" \\nng-model-options=\\\"{debounce:500}\\\" class=\\\"text-right\\\"></div></md-input-container><span>{{\\'GENERAL.AMT\\' | translate}}\\n</span></div></div><div layout=\\\"row\\\" class=\\\"mb-16\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"mr-8\\\">\\n</md-icon><div layout=\\\"column\\\" flex><span flex class=\\\"did-you-know-title\\\"><b>{{\\'GENERAL.EXAMPLE\\' | translate}}</b> \\n</span><span \\nng-if=\\\"!vm.isPercentage(vm.product.purchase_planning_configuration.max_type) && !vm.isFixedAmount(vm.product.purchase_planning_configuration.max_type)\\\" \\nflex class=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'INVENTORY_CONFIGURATION.MAX_PURCHASE_TYPE_EXAMPLE\\' | translate\\\"></span> <span \\nng-if=\\\"vm.isPercentage(vm.product.purchase_planning_configuration.max_type)\\\" flex \\nclass=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'INVENTORY_CONFIGURATION.MAX_PURCHASE_TYPE_EXAMPLE_1\\' | translate: {max_percentage_value: vm.product.purchase_planning_configuration.max_percentage_value, exampleAccumulated: vm.examplePercentage(10, vm.product.purchase_planning_configuration.max_percentage_value)}\\\">\\n</span> <span ng-if=\\\"vm.isFixedAmount(vm.product.purchase_planning_configuration.max_type)\\\" flex \\nclass=\\\"did-you-know-message secondary-text font-size-12\\\" \\nng-bind-html=\\\"\\'INVENTORY_CONFIGURATION.MAX_PURCHASE_TYPE_EXAMPLE_2\\' | translate: {max_fixed_amount_value: vm.product.purchase_planning_configuration.max_fixed_amount_value, exampleAccumulated: vm.product.purchase_optimization_configuration.max_fixed_amount_value + 1}\\\">\\n</span></div></div><md-input-container flex=\\\"100\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"vm.product.purchase_planning_configuration.is_limit_max_to_min_stock_origin\\\" flex=\\\"100\\\"><span \\ntranslate=\\\"INVENTORY_CONFIGURATION.IS_LIMIT_MAX_TO_MIN_STOCK_ORIGIN\\\"></span></md-checkbox></div></md-input-container>\\n</div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-translations/nd-product-translations.html\",\"<div id=\\\"product-translations\\\" flex><div layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"\\\" flex><md-progress-circular \\nng-if=\\\"saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><md-button class=\\\"stroked md-primary\\\" \\nng-click=\\\"addTranslation()\\\" translate=\\\"PRODUCT.ADD_TRANSLATION\\\" \\nng-disabled=\\\"languages.length == productTranslations.length\\\"></md-button></div><md-content layout-padding \\nclass=\\\"md-padding\\\"><fieldset layout=\\\"column\\\" class=\\\"m-10 mb-32\\\" flex ng-repeat=\\\"translation in productTranslations\\\">\\n<legend class=\\\"legend\\\"><md-select ng-model=\\\"translation.lang\\\"><md-option ng-repeat=\\\"language in languages\\\" \\nng-value=\\\"language.code\\\">{{language.name}}</md-option></md-select></legend><div layout=\\\"column\\\" class=\\\"md-padding\\\">\\n<md-input-container class=\\\"md-block\\\"><label translate=\\\"PRODUCT.NAME\\\">Name</label><input type=\\\"text\\\" \\nng-model=\\\"translation.name\\\" required></md-input-container><h2 class=\\\"secondary-text\\\" translate=\\\"PRODUCT.DESCRIPTION\\\">\\nDescription</h2><text-angular ta-toolbar=\\\"taToolbar\\\" ng-model=\\\"translation.description\\\"></text-angular><div \\nlayout-align=\\\"end center\\\" layout=\\\"row\\\" class=\\\"mt-20\\\" flex><md-button class=\\\"md-link red-fg\\\" \\nng-click=\\\"deleteTranslation(translation)\\\" ng-disabled=\\\"saving\\\" translate=\\\"GENERAL.DELETE\\\">Delete</md-button><md-button \\nclass=\\\"md-raised md-primary\\\" ng-disabled=\\\"!translation.lang || saving\\\" ng-click=\\\"saveTranslation(translation)\\\" \\ntranslate=\\\"GENERAL.SAVE\\\">Save</md-button></div></div></fieldset></md-content></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-variants/nd-product-variants.html\",\"<div id=\\\"product-variants\\\" data-test-id=\\\"addproduct-variants-page\\\" layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"md-padding\\\" flex><md-icon md-font-icon=\\\"icon-book-variant\\\" class=\\\"m-0 mr-10\\\">\\n</md-icon><h2 class=\\\"secondary-text m-0\\\" translate=\\\"PRODUCT.SELECTED_VARIANTS\\\" data-test-id=\\\"product-variantsTitle\\\">\\n</h2></div><md-content class=\\\"md-padding\\\"><form name=\\\"variantsForm\\\" layout=\\\"column\\\" layout-gt-md=\\\"row\\\"><div \\nlayout=\\\"column\\\" flex class=\\\"p-8\\\"><div layout=\\\"column\\\" flex><fieldset class=\\\"mb-10 md-padding pb-50 fieldset-box\\\" \\nflex=\\\"100\\\"><legend class=\\\"legend\\\"><md-select required ng-model=\\\"secondOption.currentCategory\\\" \\ndata-test-id=\\\"addproduct-size-category\\\" md-on-open=\\\"onSelectorOpen()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.SIZE_VARIANT_CATEGORY\\' | translate}}\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"secondOption.categoriesFilter\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"category in variantCategories | filter:secondOption.categoriesFilter | orderBy: \\'name\\'\\\" \\nng-disabled=\\\"categoryIsSelected(category.id, firstOption) || category.id == firstOption.currentCategory\\\" \\nng-value=\\\"category.id\\\" data-test-id=\\\"addproduct-SizeinSize-category\\\">{{category |codename}}</md-option></md-select>\\n</legend><div layout=\\\"row\\\" class=\\\"mb-16\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"secondOption.selectAll[secondOption.currentCategory]\\\" \\nng-click=\\\"setSelectionForAllVariants(secondOption.currentCategory, secondOption)\\\" \\nng-disabled=\\\"!secondOption.currentCategory\\\"></md-checkbox><div class=\\\"divider-vertical mt-10\\\"></div><md-input-container\\n md-no-float class=\\\"no-margin\\\"><md-icon class=\\\"icon icon-magnify name font-size-24 md-primary-fg\\\"></md-icon><input \\nng-model=\\\"secondOption.optionsFilter\\\" class=\\\"search-dark\\\"></md-input-container></div><span flex></span><md-button \\nclass=\\\"md-icon-button md-raised\\\" ng-click=\\\"createNewVariant($event, \\'size\\')\\\"><md-icon md-font-icon=\\\"icon-plus\\\">\\n</md-icon></md-button></div><div layout=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-sm=\\\"25\\\" \\nflex-gt-md=\\\"50\\\" \\nng-repeat=\\\"variant in categoriesById[secondOption.currentCategory].variants | orderBy: \\'position\\' | filter: secondOption.optionsFilter track by $index\\\" \\nng-if=\\\"!secondOption.collapsed || variant.selected || !collapse\\\" data-test-id=\\\"addproduct-size-category-individual\\\">\\n<div class=\\\"text-right\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\" flex><md-tooltip ng-if=\\\"variant.hasStock\\\">\\n{{\\'PRODUCT.NOT_CLICKABLE_BECAUSE_HAS_STOCK\\' | translate: {variant: variant.name} }}</md-tooltip><md-checkbox \\nng-checked=\\\"variant.selected\\\" ng-click=\\\"setSelection(variant, secondOption)\\\" ng-disabled=\\\"variant.hasStock\\\">\\n{{variant | codename}}</md-checkbox></div></div></div><div class=\\\"variant-category-show-button\\\" ng-if=\\\"collapse\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-primary\\\" ng-click=\\\"toggleCollapse(secondOption)\\\">\\n{{ \\'PRODUCT.SHOW_\\' + (secondOption.collapsed? \\'ALL\\' : \\'LESS\\') | translate }}</md-button></div></fieldset></div></div>\\n<div layout=\\\"column\\\" flex class=\\\"p-8\\\"><div layout=\\\"column\\\" flex><fieldset class=\\\"mb-10 md-padding pb-50 fieldset-box\\\" \\nflex=\\\"100\\\"><legend class=\\\"legend\\\"><md-select required ng-model=\\\"firstOption.currentCategory\\\" \\ndata-test-id=\\\"addproduct-color-category\\\" md-on-open=\\\"onSelectorOpen()\\\" \\nplaceholder=\\\"{{\\'PRODUCT.COLOR_VARIANT_CATEGORY\\' | translate}}\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"firstOption.categoriesFilter\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"category in variantCategories | filter:firstOption.categoriesFilter | orderBy: \\'name\\'\\\" \\nng-disabled=\\\"categoryIsSelected(category.id, secondOption) || category.id == secondOption.currentCategory\\\" \\nng-value=\\\"category.id\\\" data-test-id=\\\"addproduct-ColorinColors-category\\\">{{category | codename}}</md-option></md-select>\\n</legend><div layout=\\\"row\\\" class=\\\"mb-16\\\"><div layout=\\\"row\\\"><md-checkbox \\nng-model=\\\"firstOption.selectAll[firstOption.currentCategory]\\\" \\nng-click=\\\"setSelectionForAllVariants(firstOption.currentCategory, firstOption)\\\" \\nng-disabled=\\\"!firstOption.currentCategory\\\"></md-checkbox><div class=\\\"divider-vertical mt-10\\\"></div><md-input-container \\nmd-no-float class=\\\"no-margin\\\"><md-icon class=\\\"icon icon-magnify name font-size-24 md-primary-fg\\\"></md-icon><input \\nng-model=\\\"firstOption.optionsFilter\\\" class=\\\"search-dark\\\"></md-input-container></div><span flex></span><md-button \\nclass=\\\"md-icon-button md-raised\\\" ng-click=\\\"createNewVariant($event, \\'color\\')\\\"><md-icon md-font-icon=\\\"icon-plus\\\">\\n</md-icon></md-button></div><div layout=\\\"row\\\" layout-wrap><div flex=\\\"100\\\" flex-gt-xs=\\\"50\\\" flex-gt-sm=\\\"25\\\" \\nflex-gt-md=\\\"50\\\" \\nng-repeat=\\\"variant in categoriesById[firstOption.currentCategory].variants | orderBy: \\'position\\' | filter: firstOption.optionsFilter track by $index\\\" \\nng-if=\\\"!firstOption.collapsed || variant.selected || !collapse\\\" data-test-id=\\\"addproduct-color-category-individual\\\">\\n<div class=\\\"text-left\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\" flex><md-tooltip ng-if=\\\"variant.hasStock\\\">\\n{{\\'PRODUCT.NOT_CLICKABLE_BECAUSE_HAS_STOCK\\' | translate: {variant: size.name} }}</md-tooltip><md-checkbox \\nng-checked=\\\"variant.selected\\\" ng-click=\\\"setSelection(variant, firstOption)\\\" ng-disabled=\\\"variant.hasStock\\\">\\n{{variant | codename}}</md-checkbox></div></div></div><div class=\\\"variant-category-show-button\\\" ng-if=\\\"collapse\\\" \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button class=\\\"md-primary\\\" ng-click=\\\"toggleCollapse(firstOption)\\\">\\n{{ \\'PRODUCT.SHOW_\\' + (firstOption.collapsed? \\'ALL\\' : \\'LESS\\') | translate }}</md-button></div></fieldset></div></div>\\n</form><div layout-align=\\\"end center\\\" layout=\\\"row\\\" flex ng-if=\\\"showButtons\\\"><span flex></span><md-button \\nng-disabled=\\\"!variantsForm.$dirty\\\" ng-click=\\\"vm.cancelSelectVariants()\\\" translate=\\\"PRODUCT.CANCEL\\\">Cancel</md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!product.color_variants.length || !product.size_variants.length\\\" \\nng-click=\\\"preSaveProductVariants()\\\" translate=\\\"PRODUCT.SAVE\\\">Save</md-button></div></md-content></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-variants-information/nd-product-variants-information.html\",\"<md-card class=\\\"product-pricing-directive mb-16\\\"><md-card-title><md-card-title-text><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\"><span class=\\\"h3\\\" translate=\\\"PRODUCT.PRODUCT_VARIANTS\\\"></span> <span flex></span><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button class=\\\"md-icon-button\\\" aria-label=\\\"exchange\\\" \\nng-click=\\\"vm.preExchangeProductVariant($event)\\\" ng-disabled=\\\"vm.checkedVariants < 2\\\" ng-if=\\\"vm.editable\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/merge.cfa19043.svg\\\"></md-icon><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\'PRODUCT.MERGE_PRODUCT_VARIANTS\\' | translate}}</md-tooltip></md-button><md-button class=\\\"md-icon-button\\\" \\naria-label=\\\"delete\\\" ng-click=\\\"vm.deleteProductVariant($event)\\\" ng-disabled=\\\"!vm.isCheckedSomeDeletableVariant()\\\" \\nng-if=\\\"vm.editable\\\"><md-icon md-font-icon=\\\"icon-trash\\\"></md-icon><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\'PRODUCT.DELETE_SELECTED_PRODUCT_VARIANTS\\' | translate}}</md-tooltip></md-button><md-button class=\\\"md-icon-button\\\" \\naria-label=\\\"show deleted\\\" ng-click=\\\"vm.onShowDeletedVariantsClick()\\\" ng-if=\\\"vm.editable\\\"><md-icon \\nng-if=\\\"vm.showDeletedVariants\\\" md-font-icon=\\\"icon-eye-off\\\"></md-icon><md-icon ng-if=\\\"!vm.showDeletedVariants\\\" \\nmd-font-icon=\\\"icon-eye\\\"></md-icon><md-tooltip ng-if=\\\"vm.showDeletedVariants\\\" md-direction=\\\"bottom\\\">\\n{{\\'PRODUCT.HIDE_DELETED_VARIANTS\\' | translate}}</md-tooltip><md-tooltip ng-if=\\\"!vm.showDeletedVariants\\\" \\nmd-direction=\\\"bottom\\\">{{\\'PRODUCT.SHOW_DELETED_VARIANTS\\' | translate}}</md-tooltip></md-button><md-checkbox \\nng-model=\\\"vm.showPriceInclTax\\\" ng-change=\\\"vm.onShowPriceInclTaxChange()\\\" class=\\\"taxes-checkbox\\\"><span \\ntranslate=\\\"PRODUCT.SHOW_PRICE_INCL_TAX\\\"></span></md-checkbox></div></div></md-card-title-text></md-card-title>\\n<md-card-content class=\\\"p-0\\\"><div class=\\\"did-you-know md-margin\\\" \\nhas-permission=\\\"app.inventory.products.product.pricing-tiers\\\" ng-if=\\\"!vm.product.discount_active\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span \\nclass=\\\"font-size-14\\\">{{\\'PRODUCT.DISCOUNT_NOT_ACTIVE_BANNER_TITLE\\' | translate}}</span> <span class=\\\"secondary-text\\\">\\n{{\\'PRODUCT.DISCOUNT_NOT_ACTIVE_BANNER\\' | translate}}</span></div><md-button ng-click=\\\"vm.enableDiscounts()\\\" \\nng-disabled=\\\"vm.saving\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular>{{\\'PRODUCT.ACTIVATE_DISCOUNTS\\' |translate}}</div></md-button>\\n</div></div><div class=\\\"did-you-know md-margin yellow\\\" ng-if=\\\"vm.showWooCommerceBanner\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon></div><div layout=\\\"column\\\" flex><span class=\\\"font-size-14\\\">\\n{{\\'PRODUCT.WOOCOMMERCE_STRANGE_CHARACTERS_BANNER_TITLE\\' | translate}}</span> <span class=\\\"secondary-text\\\">\\n{{\\'PRODUCT.WOOCOMMERCE_STRANGE_CHARACTERS_BANNER_BODY\\' | translate}}</span></div></div></div><table class=\\\"simple\\\" \\nms-responsive-table><thead><tr><th ng-if=\\\"vm.editable\\\"></th><th>{{vm.product.color_category_name}}</th><th>\\n{{vm.product.size_category_name}}</th><th>{{\\'PRODUCT.SKU\\' | translate}}</th><th><span \\nng-if=\\\"vm.product.default_barcode_type\\\">\\n{{\\'BARCODES.\\' + vm.GS1_BARCODE_TYPES_BY_ID[vm.product.default_barcode_type].code | translate }} </span><span \\nng-if=\\\"!vm.product.default_barcode_type\\\" translate=\\\"BARCODES.BARCODE\\\">Barcode</span></th><th class=\\\"text-left\\\"><span \\ntranslate=\\\"PRODUCT.DDP_PRICE\\\" has-permission=\\\"inventory.products.product.details.cost\\\"></span></th><th \\nclass=\\\"text-left\\\" ng-if=\\\"vm.pricingTiersById[productPrice.pricing_tier]\\\" \\nng-repeat=\\\"productPrice in vm.product.prices | orderBy: \\'position\\' track by $index\\\">\\n{{::vm.pricingTiersById[productPrice.pricing_tier].name}}</th></tr></thead><tbody><tr \\nng-repeat=\\\"productVariant in vm.product.product_variants\\\" ng-if=\\\"!productVariant.deleted || vm.showDeletedVariants\\\" \\nng-class=\\\"{\\'yellow-100-bg\\': productVariant.deleted}\\\"><td ng-if=\\\"vm.editable\\\" layout=\\\"row\\\" layout_align=\\\"center center\\\">\\n<md-tooltip ng-if=\\\"productVariant.hasStock\\\">\\n{{\\'PRODUCT.NOT_DELETABLE_BECAUSE_HAS_STOCK\\' | translate: {variant: variant.name} }}</md-tooltip><md-checkbox \\nclass=\\\"no-margin\\\" aria-label=\\\"Item\\\" ng-model=\\\"productVariant.selected\\\" ng-if=\\\"!productVariant.deleted\\\" \\nng-click=\\\"vm.onCheckChanged(productVariant)\\\"></md-checkbox><md-button \\nng-if=\\\"productVariant.deleted && !productVariant.restoring\\\" ng-click=\\\"vm.restore(productVariant)\\\"><span \\ntranslate=\\\"PRODUCT.RECOVER\\\"></span></md-button><md-progress-circular ng-if=\\\"productVariant.restoring\\\" md-diameter=\\\"20\\\" \\nclass=\\\"mr-5\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular></td><td class=\\\"secondary-text\\\"><span class=\\\"nowrap\\\">\\n{{productVariant.color_name}}<md-tooltip md-direction=\\\"right\\\" ng-if=\\\"vm.editable\\\">\\n{{vm.getVariantTag(productVariant.color)}}</md-tooltip></span></td><td class=\\\"secondary-text\\\"><span class=\\\"nowrap\\\">\\n{{productVariant.size_name}}<md-tooltip md-direction=\\\"right\\\" ng-if=\\\"vm.editable\\\">\\n{{vm.getVariantTag(productVariant.size)}}</md-tooltip></span></td><td class=\\\"secondary-text\\\" ng-if=\\\"vm.editable\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><input maxlength=\\\"128\\\" ng-model=\\\"productVariant.sku\\\" \\nng-model-options=\\\"{updateOn: \\'blur\\'}\\\" ng-change=\\\"vm.updateProductVariant(productVariant)\\\" \\nng-disabled=\\\"productVariant.deleted\\\" class=\\\"nd-input text-right\\\"><md-button class=\\\"md-icon-button md-primary\\\" \\nng-if=\\\"editable && !productVariant.generatingSku && !productVariant.deleted\\\" \\nng-click=\\\"vm.generateCode(productVariant, \\'sku\\')\\\"><md-tooltip>{{\\'PRODUCT.GENERATE_SKU\\' |translate}}</md-tooltip>\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/sku-plus.de18b3ec.svg\\\"></md-icon></md-button><div layout=\\\"row\\\" \\nlayout-align=\\\"start start\\\" ng-if=\\\"vm.hasInvalidSku(productVariant.sku)\\\"><md-icon md-font-icon=\\\"icon-alert\\\" \\nclass=\\\"yellow-fg\\\"><md-tooltip md-direction=\\\"bottom\\\">{{vm.getInvalidSkuTooltip(productVariant.sku)}}</md-tooltip>\\n</md-icon></div><md-progress-circular ng-disabled=\\\"!productVariant.generatingSku\\\" md-diameter=\\\"20px\\\" class=\\\"ml-15\\\">\\n</md-progress-circular></div></td><td ng-if=\\\"!vm.editable\\\"><span class=\\\"secondary-text\\\">{{::productVariant.sku}}</span>\\n</td><td class=\\\"barcode-input\\\" ng-if=\\\"editable\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"column\\\" \\nng-class=\\\"{\\'move-down\\' : productVariant.barcodeInvalid }\\\"><input \\nng-class=\\\"{\\'nd-invalid\\' : productVariant.barcodeInvalid }\\\" ng-model=\\\"productVariant.barcode\\\" \\nng-model-options=\\\"{updateOn: \\'blur\\'}\\\" ng-focus=\\\"vm.backupBarcode(productVariant.barcode)\\\" \\nng-change=\\\"vm.updateBarcode(productVariant)\\\" ng-disabled=\\\"productVariant.generatingBarcode || productVariant.deleted\\\" \\nclass=\\\"nd-input text-right\\\"><div class=\\\"nd-hint\\\" role=\\\"alert\\\" ng-if=\\\"productVariant.barcodeInvalid\\\">\\n{{\\'PRODUCT.BARCODE_NOT_VALID\\' | translate}}</div></div><md-button class=\\\"md-icon-button md-primary\\\" \\nng-if=\\\"editable && !productVariant.generatingBarcode && !productVariant.deleted\\\" \\nng-click=\\\"vm.generateCode(productVariant, \\'barcode\\')\\\"><md-tooltip>{{\\'PRODUCT.GENERATE_BARCODE\\' |translate}}\\n</md-tooltip><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/new-barcode.ec0d6eee.svg\\\"></md-icon></md-button>\\n<span ng-if=\\\"productVariant.barcodeAlreadyExists > 0\\\" class=\\\"orange-fg\\\"><span translate=\\\"PRODUCT.ALREADY_USED\\\"></span>\\n {{productVariant.barcodeAlreadyExists}} <span translate=\\\"PRODUCT.TIMES\\\"></span></span><md-progress-circular \\nng-disabled=\\\"!productVariant.generatingBarcode && productVariant.barcodeAlreadyExists != -1\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"ml-15\\\"></md-progress-circular></div></td><td ng-if=\\\"!editable\\\"><span class=\\\"secondary-text\\\">\\n{{::productVariant.barcode}}</span></td><td><div layout=\\\"row\\\" has-permission=\\\"inventory.products.product.details.cost\\\" \\nlayout-align=\\\"start center\\\"><span \\nng-if=\\\"(productVariant.ddp_price === null || productVariant.ddp_price === undefined)\\\"><span \\nng-if=\\\"vm.product.ddp_price || vm.product.ddp_price === 0\\\" class=\\\"nowrap\\\">\\n{{vm.product.ddp_price | number:5}}{{vm.currency}} </span></span><span \\nng-if=\\\"productVariant.ddp_price != null && productVariant.ddp_price != undefined\\\"><span class=\\\"blue-fg nowrap\\\">\\n<md-tooltip md-direction=\\\"top\\\">{{\\'PRODUCT.UNIT_COST_OVERWRITTEN\\' | translate}}</md-tooltip>\\n{{productVariant.ddp_price | number:5}} {{vm.currency}}</span></span><md-button class=\\\"md-icon-button md-primary\\\" \\nng-if=\\\"editable && !productVariant.deleted\\\" ng-click=\\\"vm.editUnitCostPrice(productVariant)\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil\\\"></md-icon></md-button></div></td><td \\nng-repeat=\\\"productPrice in vm.product.prices | orderBy: \\'position\\' track by $index\\\" \\nng-if=\\\"vm.pricingTiersById[productPrice.pricing_tier]\\\"><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-show=\\\"vm.isCase1(productVariant, productPrice)\\\"><span ng-if=\\\"vm.showPriceInclTax\\\" \\nclass=\\\"nowrap\\\">\\n{{vm.pricesByPricingTierDict[productPrice.pricing_tier].price_incl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span> <span ng-if=\\\"!vm.showPriceInclTax\\\" class=\\\"nowrap\\\">\\n{{vm.pricesByPricingTierDict[productPrice.pricing_tier].price_excl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span></div><div layout=\\\"column\\\" ng-show=\\\"vm.isCase2(productVariant, productPrice)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"ml-10 mr-5 purple-500-fg\\\"></md-icon><span \\nclass=\\\"purple-500-fg nowrap\\\"><span ng-if=\\\"vm.showPriceInclTax\\\">\\n{{vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_incl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span> <span ng-if=\\\"!vm.showPriceInclTax\\\">\\n{{vm.pricesByPricingTierDict[productPrice.pricing_tier].discount_price_excl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span></span></div></div><div layout=\\\"column\\\" ng-show=\\\"vm.isCase3(productVariant, productPrice)\\\"><span \\nclass=\\\"blue-fg nowrap\\\"><span ng-if=\\\"vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].price_incl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span> <span ng-if=\\\"!vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].price_excl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span></span></div><div layout=\\\"column\\\" ng-show=\\\"vm.isCase4(productVariant, productPrice)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"mr-5 purple-100-fg s14\\\"></md-icon></div><span \\nclass=\\\"blue-fg nowrap text-right\\\"><span ng-if=\\\"vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].price_incl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span> <span ng-if=\\\"!vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].price_excl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span></span></div><div layout=\\\"column\\\" ng-show=\\\"vm.isCase5(productVariant, productPrice)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"mr-5 purple-500-fg\\\"></md-icon><span \\nclass=\\\"purple-500-fg nowrap\\\"><span ng-if=\\\"vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_incl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span> <span ng-if=\\\"!vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_excl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span></span></div></div><div layout=\\\"column\\\" ng-show=\\\"vm.isCase6(productVariant, productPrice)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"mr-5 purple-500-fg\\\"></md-icon><span \\nclass=\\\"purple-500-fg nowrap\\\"><span ng-if=\\\"vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_incl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span> <span ng-if=\\\"!vm.showPriceInclTax\\\">\\n{{vm.productVariantPricesMatrix[productVariant.id][productPrice.id].discount_price_excl_tax | price}} {{(vm.pricingTiersById[productPrice.pricing_tier].currency || vm.company.currency) | currencyCharacter}}\\n</span></span></div></div><md-button class=\\\"md-icon-button md-primary\\\" \\nid=\\\"edit-button-{{productVariant.id}}-{{productPrice.id}}\\\" ng-if=\\\"editable && !productVariant.deleted\\\" \\nng-click=\\\"vm.editProductVariantPrice(productVariant, productPrice)\\\"><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon>\\n</md-button></div></td></tr></tbody></table><div class=\\\"p-24\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-if=\\\"!vm.hasProductVariants() && !vm.showDeletedVariants\\\"><strong>{{\\\"PRODUCT.NO_PRODUCT_VARIANTS\\\" | translate}}\\n</strong></div></md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-quick-product-creator-button/nd-quick-product-creator-button.html\",\"<md-button class=\\\"md-icon-button md-primary no-margin\\\" layout=\\\"row\\\" ng-click=\\\"vm.openDialog()\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/new-quick-product.374c42ba.svg\\\"></md-icon><md-tooltip>\\n{{\\'PRODUCT.CREATE_PRODUCT\\' | translate}}</md-tooltip></md-button>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-quick-product-creator-button/quick-product-creator-dialog.html\",\"<md-dialog class=\\\"quick-product-creator-dialog\\\"><md-dialog-content><h2 ng-if=\\\"vm.productType === \\'p\\'\\\">\\n{{\\'PRODUCT.NEW_PRODUCT\\' | translate}}</h2><h2 ng-if=\\\"vm.productType === \\'m\\'\\\">{{\\'MATERIAL.NEW_MATERIAL\\' | translate}}\\n</h2><h2 ng-if=\\\"vm.productType === \\'b\\'\\\">{{\\'PRODUCT.NEW_PRODUCT_BUNDLE\\' | translate}}</h2><div layout=\\\"column\\\"><div \\nlayout=\\\"row\\\"><md-input-container class=\\\"mt-0\\\" ng-class=\\\"{\\'mb-0\\': !vm.codeAlreadyExists}\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"PRODUCT.CODE\\\"></label><input type=\\\"text\\\" ng-model=\\\"vm.product.code\\\" ng-disabled=\\\"vm.saving\\\" name=\\\"code\\\" \\nng-class=\\\"{\\'red-fg\\': vm.codeAlreadyExists > 1}\\\" required focus-if=\\\"true\\\" ng-change=\\\"vm.checkCodeUnique()\\\"><div \\nng-if=\\\"vm.codeAlreadyExists\\\"><span class=\\\"red-fg\\\">\\n{{\\'PRODUCT.CODE_ALREADY_EXISTS\\' | translate}} {{vm.codeAlreadyExists}}</span></div></md-input-container>\\n<md-progress-circular ng-disabled=\\\"vm.codeAlreadyExists != -1\\\" md-diameter=\\\"20px\\\"></md-progress-circular>\\n<md-input-container flex=\\\"50\\\" class=\\\"mt-0\\\"><md-checkbox id=\\\"test-autogenerate-checkbox\\\" type=\\\"text\\\" \\ndata-test-id=\\\"addproduct-autogenerate-checkbox\\\" class=\\\"mb-0 mt-5 mr-20\\\" ng-model=\\\"vm.product.autogenerate\\\" \\nng-change=\\\"vm.autogenerateChanged()\\\"><span translate=\\\"PRODUCT.AUTOGENERATE_CODE\\\"></span></md-checkbox>\\n</md-input-container></div><div layout=\\\"row\\\"><md-input-container class=\\\"mt-0\\\" \\nng-class=\\\"{\\'mb-0\\': !vm.codeAlreadyExists}\\\" flex=\\\"100\\\"><label translate=\\\"PRODUCT.NAME\\\">Name</label><input type=\\\"text\\\" \\nng-disabled=\\\"vm.saving\\\" ng-model=\\\"vm.product.name\\\" required></md-input-container></div><div layout=\\\"row\\\">\\n<md-autocomplete class=\\\"pr-20\\\" required flex=\\\"100\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.CATEGORY\\' | translate}}\\\" md-items=\\\"item in vm.categoryQuerySearch()\\\" \\nmd-item-text=\\\"vm.codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"vm.categorySearchText\\\" \\nmd-selected-item=\\\"vm.product.category_instance\\\" md-selected-item-change=\\\"vm.categoryChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete><md-autocomplete class=\\\"pr-20\\\" flex=\\\"100\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.SUBCATEGORY\\' | translate}}\\\" md-items=\\\"item in vm.subcategoryQuerySearch()\\\" \\nmd-item-text=\\\"vm.codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" \\nmd-search-text=\\\"vm.subcategorySearchText\\\" md-selected-item=\\\"vm.product.subcategory_instance\\\" \\nmd-selected-item-change=\\\"vm.subcategoryChanged(item)\\\" ng-disabled=\\\"!vm.product.category\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete></div><div layout=\\\"row\\\"><md-autocomplete class=\\\"pr-20\\\" required flex=\\\"100\\\" \\nmd-delay=\\\"500\\\" md-floating-label=\\\"{{\\'PRODUCT.SEASON\\' | translate}}\\\" md-items=\\\"item in vm.seasonQuerySearch()\\\" \\nmd-item-text=\\\"vm.codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"vm.seasonSearchText\\\" \\nmd-selected-item=\\\"vm.product.season_instance\\\" md-selected-item-change=\\\"vm.seasonChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete><md-autocomplete class=\\\"pr-20\\\" required flex=\\\"100\\\" md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.BRAND\\' | translate}}\\\" md-items=\\\"item in vm.brandQuerySearch()\\\" \\nmd-item-text=\\\"vm.codeNameFormatter(item)\\\" md-min-length=\\\"0\\\" md-no-cache=\\\"true\\\" md-search-text=\\\"vm.brandSearchText\\\" \\nmd-selected-item=\\\"vm.product.brand_instance\\\" md-selected-item-change=\\\"vm.brandChanged(item)\\\"><md-item-template>\\n{{item | codename}}</md-item-template><md-not-found>{{\\'PRODUCT.NO_REGISTER_FOUND_WITH_THIS_NAME\\' | translate}}\\n</md-not-found></md-autocomplete></div><div layout=\\\"row\\\"><md-input-container class=\\\"mt-0\\\" flex=\\\"50\\\"><label>\\n{{\\'PRODUCT.DDP_PRICE\\' | translate}} ({{vm.currency | currencyCharacter}})</label><input type=\\\"number\\\" \\nng-model=\\\"vm.product.ddp_price\\\" ng-disabled=\\\"vm.saving\\\" min=\\\"0\\\" step=\\\"0.00001\\\" class=\\\"text-right\\\"></md-input-container>\\n</div><div layout=\\\"row\\\"><md-checkbox ng-model=\\\"vm.product.set_price\\\" ng-disabled=\\\"vm.saving\\\" \\nng-change=\\\"vm.setPriceChanged()\\\">{{\\'PRODUCT.SET_PRICE\\' | translate}}</md-checkbox></div><div layout=\\\"row\\\" \\nng-if=\\\"vm.product.set_price\\\"><md-input-container flex><label translate=\\\"PRODUCT.PRICING_TIER\\\"></label><md-select \\nng-model=\\\"vm.product.pricing_tier\\\" ng-disabled=\\\"vm.saving\\\" name=\\\"pricing_tier\\\" ng-change=\\\"vm.pricingTierChanged()\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'pricing_tier\\')\\\" required><md-select-header><input \\ntype=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter[\\'pricing_tier\\']\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"pricingTier in vm.pricingTiers | orderBy: \\'position\\' | filter:vm.selectFilter[\\'pricing_tier\\'] track by pricingTier.id\\\" \\nng-value=\\\"pricingTier.id\\\">&nbsp;{{pricingTier.name}}</md-option></md-select></md-input-container><md-input-container \\nflex><label translate=\\\"PRODUCT.TAX\\\"></label><md-select ng-model=\\\"vm.product.tax\\\" ng-disabled=\\\"vm.saving\\\" name=\\\"tax\\\" \\nng-change=\\\"vm.taxChanged()\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'brand\\')\\\" required>\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter[\\'tax\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"tax in vm.taxes | orderBy: \\'position\\' | filter:vm.selectFilter[\\'tax\\'] track by tax.id\\\" ng-value=\\\"tax.id\\\">\\n&nbsp;{{tax.name}} ({{tax.percent_value}}%)</md-option></md-select></md-input-container></div><div layout=\\\"row\\\" \\nng-if=\\\"vm.product.set_price\\\"><md-input-container flex=\\\"50\\\" class=\\\"mt-0\\\"><label>\\n{{\\'PRODUCT.PRICE_INCL_TAX\\' | translate}} ({{vm.currency | currencyCharacter}})</label><input type=\\\"number\\\" \\nng-model=\\\"vm.product.price_incl_tax\\\" ng-disabled=\\\"vm.saving\\\" min=\\\"0\\\" class=\\\"text-right\\\"></md-input-container></div><div\\n layout=\\\"row\\\"><md-checkbox ng-model=\\\"vm.product.has_variants\\\" ng-disabled=\\\"vm.saving\\\" \\nng-change=\\\"vm.hasVariantsChanged()\\\">{{\\'PRODUCT.HAS_VARIANTS\\' | translate}}</md-checkbox></div><div layout=\\\"row\\\" \\nng-if=\\\"vm.product.has_variants\\\"><md-input-container class=\\\"mb-0\\\" flex=\\\"100\\\"><label \\ntranslate=\\\"PRODUCT.SIZE_VARIANT_CATEGORY\\\"></label><md-select ng-model=\\\"vm.product.size_category\\\" \\nng-disabled=\\\"vm.saving\\\" name=\\\"sizeVariantCategory\\\" ng-change=\\\"vm.sizeVariantCategoryChanged()\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'sizeVariantCategory\\')\\\" required><md-select-header>\\n<input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter[\\'sizeVariantCategory\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"sizeVariantCategory in vm.sizeVariantCategories | orderBy: \\'position\\' | filter:vm.selectFilter[\\'sizeVariantCategory\\'] track by sizeVariantCategory.id\\\" \\nng-value=\\\"sizeVariantCategory.id\\\">&nbsp;{{sizeVariantCategory.name}}</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"mb-0\\\" flex=\\\"100\\\"><label translate=\\\"PRODUCT.SIZES\\\"></label><md-select \\nng-model=\\\"vm.product.size_variants\\\" ng-disabled=\\\"vm.saving\\\" name=\\\"sizeVariants\\\" multiple=\\\"multiple\\\" \\nng-change=\\\"vm.sizeVariantsChanged()\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'sizeVariants\\')\\\" \\nrequired><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter[\\'sizeVariants\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"sizeVariantCategory in vm.sizeVariants | orderBy: \\'position\\' | filter:vm.selectFilter[\\'sizeVariants\\'] track by sizeVariantCategory.id\\\" \\nng-value=\\\"sizeVariantCategory.id\\\">&nbsp;{{sizeVariantCategory.name}}</md-option></md-select></md-input-container></div>\\n<div layout=\\\"row\\\" ng-if=\\\"vm.product.has_variants\\\"><md-input-container class=\\\"mb-0\\\" flex=\\\"100\\\"><label \\ntranslate=\\\"PRODUCT.COLOR_VARIANT_CATEGORY\\\"></label><md-select ng-model=\\\"vm.product.color_category\\\" \\nng-disabled=\\\"vm.saving\\\" name=\\\"colorVariantCategory\\\" ng-change=\\\"vm.colorVariantCategoryChanged()\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'colorVariantCategory\\')\\\" required><md-select-header>\\n<input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.selectFilter[\\'colorVariantCategory\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"colorVariantCategory in vm.colorVariantCategories | orderBy: \\'position\\' | filter:vm.selectFilter[\\'colorVariantCategory\\'] track by colorVariantCategory.id\\\" \\nng-value=\\\"colorVariantCategory.id\\\">&nbsp;{{colorVariantCategory.name}}</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"mb-0\\\" flex=\\\"100\\\"><label translate=\\\"PRODUCT.COLORS\\\"></label><md-select \\nng-model=\\\"vm.product.color_variants\\\" ng-disabled=\\\"vm.saving\\\" name=\\\"colorVariants\\\" multiple=\\\"multiple\\\" \\nng-change=\\\"vm.colorVariantsChanged()\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(\\'colorVariants\\')\\\" required><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.selectFilter[\\'colorVariants\\']\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"colorVariantCategory in vm.colorVariants | orderBy: \\'position\\' | filter:vm.selectFilter[\\'colorVariants\\'] track by colorVariantCategory.id\\\" \\nng-value=\\\"colorVariantCategory.id\\\">&nbsp;{{colorVariantCategory.name}}</md-option></md-select></md-input-container>\\n</div><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"max-width-500\\\"><nd-upgrade-subscription-plan-banner \\nng-if=\\\"!vm.hasProductBundlesFeature\\\" title=\\\"\\'UPGRADE_PLAN.PRODUCT_BUNDLES.NAME\\'\\\" \\nbody=\\\"\\'UPGRADE_PLAN.PRODUCT_BUNDLES.DESCRIPTION\\'\\\" source=\\\"\\'app.inventory.products.product.bundles\\'\\\" \\nbutton-below=\\\"true\\\" click-callback=\\\"vm.cancel()\\\"></nd-upgrade-subscription-plan-banner></div></div></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><a class=\\\"md-primary cursor-pointer\\\" \\nng-click=\\\"vm.goToNewProductPage()\\\">{{\\'PRODUCT.ALSO_YOU_CAN_USE_THE_ADVANCED_CREATOR\\' | translate}} </a><span flex>\\n</span><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" ng-disabled=\\\"vm.saving\\\">{{\\'GENERAL.CANCEL\\' | translate}}\\n</md-button><md-button class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!vm.isValid() || vm.saving\\\" ng-click=\\\"vm.save()\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" class=\\\"mr-5\\\" md-diameter=\\\"24px\\\">\\n</md-progress-circular>{{\\'GENERAL.SAVE\\' | translate}}</div></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-stock-overview/nd-stock-overview.html\",\"<div id=\\\"nd-stock-overview\\\" class=\\\"flex\\\"><table class=\\\"simple\\\" ms-responsive-table><thead ng-if=\\\"vm.header\\\"></thead>\\n<tbody><tr><md-card class=\\\"product-card\\\"><md-card-content class=\\\"m-8 p-0\\\"><div class=\\\"m-0 p-0\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img ng-if=\\\"::vm.product.cover_thumbnail\\\" class=\\\"brad-3 thumbnail-40 mr-5\\\" \\nsrc=\\\"{{::vm.product.cover_thumbnail}}\\\"> <span ng-if=\\\"::vm.product.cover_thumbnail\\\"></span><div \\nclass=\\\"m-0 p-0 h-40 w-0\\\"></div><a class=\\\"mr-5\\\" ng-if=\\\"vm.session.hasPermission(\\'app.inventory.products\\')\\\" \\nui-sref=\\\"app.inventory.products.product.overview({id:vm.product.id})\\\">{{::vm.product.code}}</a> <span class=\\\"mr-5\\\" \\nng-if=\\\"!vm.session.hasPermission(\\'app.inventory.products\\')\\\"><b>{{::vm.product.code}}</b></span> {{::vm.product.name}}\\n</div></md-card-content></md-card></tr><tr class=\\\"custom-header\\\"><td class=\\\"text-uppercase auto\\\"><span>&nbsp;</span>\\n</td><td class=\\\"small\\\" ng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'position\\'\\\"><div \\nclass=\\\"margins border border-radius first-row custom\\\"><span class=\\\"text-truncate two-lines p-2\\\">{{::warehouse.name}}\\n</span></div><md-tooltip md-direction=\\\"top\\\">{{::warehouse.name}}</md-tooltip></td><td class=\\\"small\\\"><div \\nclass=\\\"border border-radius first-row margins-final\\\"><span translate=\\\"STOCKS.TOTAL\\\">Total</span></div></td></tr><tr \\nng-repeat=\\\"totals in ::vm.product.totalsByColor | orderBy: \\'position\\'\\\" class=\\\"no-border\\\"><td class=\\\"auto pl-112\\\">\\n{{::totals.color.code}} / {{::totals.color.name}}</td><td class=\\\"small\\\" \\nng-repeat=\\\"warehouse in vm.warehouses | orderBy: \\'position\\'\\\" \\nng-init=\\\"total=totals.totalsByWarehouseId[warehouse.id].totalInWarehouse + totals.totalsByWarehouseId[warehouse.id].totalInTransit\\\">\\n<div class=\\\"margins border border-radius common-row\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-class=\\\"{\\'secondary-text\\':total==0, \\'md-yellow-200-bg\\':totals.totalsByWarehouseId[warehouse.id].totalInTransit>0}\\\">\\n<div class=\\\"common-row w-0\\\"></div><span>{{total}}</span><md-tooltip md-direction=\\\"top\\\">\\n{{::warehouse.name}} &nbsp;&nbsp; ({{totals.totalsByWarehouseId[warehouse.id].totalInTransit}} in transit)</md-tooltip>\\n</div></td><td class=\\\"small\\\" ng-class=\\\"{\\'secondary-text\\': !secondaryVariantAndTotal.total}\\\"><div \\nclass=\\\"margins-final border border-radius common-row\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"common-row w-0\\\"></div>{{::totals.total}}</div></td></tr></tbody></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/collections/sidenavs/main/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select \\nng-model=\\\"vm.filterSeasons\\\" flex><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"COLLECTIONS.ALL_SEASONS\\\">All Seasons</md-option>\\n<md-option ng-repeat=\\\"season in vm.seasonsList | orderBy: \\'position\\'\\\" ng-value=\\\"season.name\\\">{{season.name}}\\n</md-option></md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/products/dialogs/products-edit/products-edit-dialog.html\",\"<md-dialog class=\\\"products-edit-dialog\\\" aria-label=\\\"Bulk edit\\\"><md-dialog-content layout=\\\"column\\\" class=\\\"p-0\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"space-between center\\\" class=\\\"title-row\\\"><div class=\\\"h2\\\" flex translate=\\\"PRODUCTS.BULK_EDIT\\\">\\n</div><md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.closeDialog()\\\" aria-label=\\\"Close dialog\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div layout=\\\"column\\\" layout-align=\\\"center center\\\" \\nclass=\\\"ph-30 pv-50\\\" ng-if=\\\"vm.saving\\\"><md-progress-circular></md-progress-circular></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"p-30 pb-50\\\" ng-if=\\\"vm.showSaveMessage\\\"><div class=\\\"did-you-know\\\" flex><div \\nlayout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon><span flex \\nclass=\\\"did-you-know-title\\\">{{\\'PRODUCTS.BULK_EDIT_ENQUEUED\\' | translate}}</span></div><div flex \\nclass=\\\"did-you-know-message\\\">{{\\'PRODUCTS.BULK_EDIT_ENQUEUED_MSG\\' | translate}}</div></div></div><div layout=\\\"column\\\" \\nng-if=\\\"!vm.saving && !vm.showSaveMessage\\\"><md-tabs md-dynamic-height md-border-bottom><md-tab \\nlabel=\\\"{{ \\'PRODUCT.MAIN_INFORMATION\\' | translate }}\\\"><md-content layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap \\nlayout-padding><div flex=\\\"50\\\"><md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.ORIGIN_CODE\\\">\\nOrigin Code</label><input type=\\\"text\\\" ng-model=\\\"vm.selectedOriginCode\\\"></md-input-container></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.GROUP_CODE\\\">Group Code</label><input type=\\\"text\\\" \\nng-model=\\\"vm.selectedGroupCode\\\"></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\"><md-input-container \\nclass=\\\"md-block\\\"><label translate=\\\"PRODUCT.BRAND\\\">Brand</label><md-select md-on-close=\\\"vm.onSelectorClose(\\'brand\\')\\\" \\nng-model=\\\"vm.selectedBrandId\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"selectFilter[\\'brand\\']\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option ng-value=\\\"brand.id\\\" \\nng-repeat=\\\"brand in vm.brands | filter:selectFilter[\\'brand\\'] | orderBy: \\'code\\'\\\">{{brand | codename}}</md-option>\\n</md-select></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\"><md-input-container class=\\\"md-block\\\"><label \\ntranslate=\\\"PRODUCT.SEASON\\\">Season</label><md-select ng-model=\\\"vm.selectedSeasonId\\\" \\nmd-on-close=\\\"vm.onSelectorClose(\\'season\\')\\\" md-on-open=\\\"vm.onSelectorOpen()\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text\\\" ng-model=\\\"selectFilter[\\'season\\']\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option ng-value=\\\"season.id\\\" \\nng-repeat=\\\"season in vm.seasons | filter:selectFilter[\\'season\\'] | orderBy: \\'code\\'\\\">{{season | codename}}</md-option>\\n</md-select></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\"><md-input-container class=\\\"md-block\\\"><label \\ntranslate=\\\"PRODUCT.CATEGORIES\\\">Categories</label><md-select ng-model=\\\"vm.selectedCategoryId\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'category\\')\\\"><md-select-header><input type=\\\"search\\\" \\nclass=\\\"md-text category-input\\\" ng-model=\\\"selectFilter[\\'category\\']\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option ng-value=\\\"category.id\\\" \\nng-repeat=\\\"category in vm.categories | filter: selectFilter[\\'category\\'] | orderBy: \\'name\\'\\\">{{category | codename}}\\n</md-option></md-select></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\"><md-input-container class=\\\"md-block\\\">\\n<label translate=\\\"PRODUCT.SUBCATEGORIES\\\">Subcategories</label><md-select ng-model=\\\"vm.selectedSubcategoryId\\\" \\nng-disabled=\\\"!vm.selectedCategoryId\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'subcategory\\')\\\">\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"selectFilter[\\'subcategory\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"subcategory.id\\\" \\nng-repeat=\\\"subcategory in vm.subcategories | filter: {category: {id: vm.selectedCategoryId}} | filter: selectFilter[\\'subcategory\\'] | orderBy: \\'code\\'\\\">\\n{{subcategory | codename}}</md-option></md-select></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\">\\n<md-input-container class=\\\"md-block\\\"><label translate=\\\"PRODUCT.COMPOSITION\\\">Composition</label><md-select \\nng-model=\\\"vm.selectedCompositionId\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'composition\\')\\\">\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"selectFilter[\\'composition\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"composition.id\\\" \\nng-repeat=\\\"composition in vm.compositions | filter:selectFilter[\\'composition\\'] | orderBy: \\'code\\'\\\">\\n{{composition | codename}}</md-option></md-select></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\">\\n<md-input-container class=\\\"md-block\\\"><label translate=\\\"PRODUCT.PROVIDER\\\">Provider</label><md-select \\nng-model=\\\"vm.selectedProviderId\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose(\\'provider\\')\\\">\\n<md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"selectFilter[\\'provider\\']\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-value=\\\"provider.id\\\" ng-repeat=\\\"provider in vm.contacts | filter:selectFilter[\\'provider\\'] | orderBy: \\'name\\'\\\">\\n{{provider.name}}</md-option></md-select></md-input-container></div><div flex=\\\"50\\\" class=\\\"h-95\\\"><md-input-container \\nclass=\\\"md-block\\\"><label translate=\\\"BARCODES.BARCODE_TYPE\\\">Barcode Type</label><md-select \\nng-model=\\\"vm.selectedDefaultBarcodeType\\\"><md-option ng-value=\\\"barcode.id\\\" \\nng-repeat=\\\"(barcodeId, barcode) in vm.barcode_types\\\">{{\\'BARCODES.\\' + barcode.code | translate }}</md-option>\\n</md-select></md-input-container></div><div flex=\\\"50\\\"></div><div flex=\\\"50\\\"><md-chips ng-model=\\\"vm.selectedAddTags\\\" \\nplaceholder=\\\"{{ \\'PRODUCTS.ADD_TAG_BY_NAME\\' | translate }}\\\" \\ndelete-button-label=\\\"{{ \\'PRODUCTS.REMOVE_TAG\\' | translate }}\\\" \\ndelete-hint=\\\"{{ \\'PRODUCTS.REMOVE_TAG_HINT\\' | translate }}\\\" \\nsecondary-placeholder=\\\"{{ \\'PRODUCTS.ADD_ANOTHER_TAG\\' | translate }}\\\" md-add-on-blur=\\\"true\\\" class=\\\"pr-20 mt-5 h-95\\\">\\n<md-autocomplete md-selected-item=\\\"vm.selectedItemAdd\\\" md-search-text=\\\"vm.searchTextAdd\\\" \\nmd-items=\\\"addTag in vm.querySearch(vm.searchTextAdd)\\\" md-item-text=\\\"addTag\\\" \\nplaceholder=\\\"{{ \\'PRODUCTS.ADD_TAG_BY_NAME\\' | translate }}\\\"><span md-highlight-text=\\\"vm.searchTextAdd\\\">{{addTag}}</span>\\n</md-autocomplete></md-chips></div><div flex=\\\"50\\\"><md-chips ng-model=\\\"vm.selectedRemoveTags\\\" \\nplaceholder=\\\"{{ \\'PRODUCTS.REMOVE_TAG_BY_NAME\\' | translate }}\\\" \\ndelete-button-label=\\\"{{ \\'PRODUCTS.REMOVE_TAG\\' | translate }}\\\" \\ndelete-hint=\\\"{{ \\'PRODUCTS.REMOVE_TAG_HINT\\' | translate }}\\\" \\nsecondary-placeholder=\\\"{{ \\'PRODUCTS.ADD_ANOTHER_TAG\\' | translate }}\\\" md-add-on-blur=\\\"true\\\" class=\\\"pr-20 mt-5 h-95\\\">\\n<md-autocomplete md-selected-item=\\\"vm.selectedItemRemove\\\" md-search-text=\\\"vm.searchTextRemove\\\" \\nmd-items=\\\"removeTag in vm.querySearch(vm.searchTextRemove)\\\" md-item-text=\\\"removeTag\\\" \\nplaceholder=\\\"{{ \\'PRODUCTS.REMOVE_TAG_BY_NAME\\' | translate }}\\\"><span md-highlight-text=\\\"vm.searchTextRemove\\\">\\n{{removeTag}}</span></md-autocomplete></md-chips></div><div flex=\\\"50\\\"><md-input-container class=\\\"mb-0 md-block\\\"><label>\\n<span translate=\\\"PRODUCT.WIDTH\\\"></span> ({{vm.session.company.measurement_unit}})</label><input type=\\\"number\\\" \\nng-model=\\\"vm.selectedWidth\\\" min=\\\"0.00\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label><span translate=\\\"PRODUCT.HEIGHT\\\"></span>\\n ({{vm.session.company.measurement_unit}})</label><input type=\\\"number\\\" ng-model=\\\"vm.selectedHeight\\\" min=\\\"0.00\\\" \\nstep=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container></div><div flex=\\\"50\\\"><md-input-container class=\\\"mb-0 md-block\\\">\\n<label><span translate=\\\"PRODUCT.DEPTH\\\"></span> ({{vm.session.company.measurement_unit}})</label><input type=\\\"number\\\" \\nng-model=\\\"vm.selectedDepth\\\" min=\\\"0.00\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label><span translate=\\\"PRODUCT.WEIGHT\\\"></span>\\n ({{vm.WEIGHT_UNITS_FORMATTED[vm.selectedWeightUnit] || vm.session.company.weight_unit}})</label><input type=\\\"number\\\" \\nng-model=\\\"vm.selectedWeight\\\" min=\\\"0.00\\\" step=\\\"0.01\\\" class=\\\"text-right\\\"></md-input-container></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.WEIGHT_UNIT\\\">Weight unit</label><md-select \\nng-model=\\\"vm.selectedWeightUnit\\\"><md-option ng-value=\\\"name\\\" ng-repeat=\\\"(code, name) in vm.WEIGHT_UNITS\\\">\\n{{vm.WEIGHT_UNITS_FORMATTED[name]}}</md-option></md-select></md-input-container></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.FOB_PRICE\\\">FOB Price</label><input type=\\\"number\\\" \\nng-model=\\\"vm.selectedFOBPrice\\\" min=\\\"0.00000\\\" step=\\\"0.00001\\\" class=\\\"text-right\\\"></md-input-container></div><div \\nflex=\\\"50\\\"><md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.FOB_PRICE_CURRENCY\\\">FOB Currency</label>\\n<md-select ng-model=\\\"vm.selectedFOBPriceCurrency\\\"><md-option ng-value=\\\"code\\\" \\nng-repeat=\\\"(code, symbol) in vm.currencies\\\">{{code}} ({{symbol}})</md-option></md-select></md-input-container></div>\\n<div flex=\\\"50\\\"><md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.DDP_PRICE\\\">DDP Price</label><input \\ntype=\\\"number\\\" ng-model=\\\"vm.selectedDDPPrice\\\" min=\\\"0.00000\\\" step=\\\"0.00001\\\" class=\\\"text-right\\\"></md-input-container>\\n</div><div flex=\\\"50\\\" class=\\\"h-95\\\"><md-chips ng-model=\\\"vm.selectedSizes\\\" \\nplaceholder=\\\"{{ \\'PRODUCTS.ADD_SIZE_BY_NAME\\' | translate }}\\\" \\ndelete-button-label=\\\"{{ \\'PRODUCTS.REMOVE_SIZE\\' | translate }}\\\" md-add-on-blur=\\\"true\\\" \\ndelete-hint=\\\"{{ \\'PRODUCTS.REMOVE_SIZE_HINT\\' | translate }}\\\" \\nsecondary-placeholder=\\\"{{ \\'PRODUCTS.ADD_ANOTHER_SIZE\\' | translate }}\\\"></md-chips></div><div flex=\\\"50\\\" class=\\\"h-95\\\">\\n<md-chips ng-model=\\\"vm.selectedColors\\\" placeholder=\\\"{{ \\'PRODUCTS.ADD_COLOR_BY_NAME\\' | translate }}\\\" \\ndelete-button-label=\\\"{{ \\'PRODUCTS.REMOVE_COLOR\\' | translate }}\\\" md-add-on-blur=\\\"true\\\" \\ndelete-hint=\\\"{{ \\'PRODUCTS.REMOVE_COLOR_HINT\\' | translate }}\\\" \\nsecondary-placeholder=\\\"{{ \\'PRODUCTS.ADD_ANOTHER_COLOR\\' | translate }}\\\"></md-chips></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.COLOR_CATEGORY_NAME\\\">Color category name</label>\\n<input type=\\\"text\\\" ng-model=\\\"vm.selectedColorCategoryName\\\"></md-input-container></div><div flex=\\\"50\\\">\\n<md-input-container class=\\\"mb-0 md-block\\\"><label translate=\\\"PRODUCT.SIZE_CATEGORY_NAME\\\">Size category name</label>\\n<input type=\\\"text\\\" ng-model=\\\"vm.selectedSizeCategoryName\\\"></md-input-container></div><div flex=\\\"50\\\"><md-checkbox \\nclass=\\\"md-block\\\" ng-model=\\\"vm.generateCodes\\\" ng-class=\\\"{\\'secondary-text\\': !vm.generateCodes}\\\"><span \\ntranslate=\\\"PRODUCTS.CODE_AUTOGENERATON\\\">Code Generation</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox \\nclass=\\\"md-block\\\" ng-model=\\\"vm.generateBarcodes\\\" ng-class=\\\"{\\'secondary-text\\': !vm.generateBarcodes}\\\"><span \\ntranslate=\\\"PRODUCTS.BARCODE_GENERATON\\\">Barcode Generation</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox \\nclass=\\\"md-block\\\" ng-model=\\\"vm.discountActive\\\" ng-disabled=\\\"vm.discountInactive\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.discountActive}\\\"><span translate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\">Discount Active</span>\\n</md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.generateSkus\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.generateSkus}\\\"><span translate=\\\"PRODUCT.SKU_GENERATION\\\">SKU Generation</span>\\n</md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.discountInactive\\\" \\nng-disabled=\\\"vm.discountActive\\\" ng-class=\\\"{\\'secondary-text\\': !vm.discountInactive}\\\"><span \\ntranslate=\\\"PRODUCT.DISCOUNT_NOT_ACTIVE\\\">Discount Not Active</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox \\nclass=\\\"md-block\\\" ng-model=\\\"vm.isNoos\\\" ng-disabled=\\\"vm.isNotNoos\\\" ng-class=\\\"{\\'secondary-text\\': !vm.isNoos}\\\"><span \\ntranslate=\\\"PRODUCT.IS_NOOS\\\">Is NOOS</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" \\nng-model=\\\"vm.isNotNoos\\\" ng-disabled=\\\"vm.isNoos\\\" ng-class=\\\"{\\'secondary-text\\': !vm.isNotNoos}\\\"><span \\ntranslate=\\\"PRODUCT.IS_NOT_NOOS\\\">Is Not NOOS</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" \\nng-model=\\\"vm.isRawMaterial\\\" ng-disabled=\\\"vm.isNotRawMaterial\\\" ng-class=\\\"{\\'secondary-text\\': !vm.isRawMaterial}\\\"><span \\ntranslate=\\\"PRODUCT.IS_RAW_MATERIAL\\\">Is Raw Material</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox \\nclass=\\\"md-block\\\" ng-model=\\\"vm.isNotRawMaterial\\\" ng-disabled=\\\"vm.isRawMaterial\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.isNotRawMaterial}\\\"><span translate=\\\"PRODUCT.IS_NOT_RAW_MATERIAL\\\">Is Not Raw Material\\n</span></md-checkbox></div><div ng-if=\\\"!vm.session.company.has_multiple_b2b\\\" flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" \\nng-model=\\\"vm.catalog\\\" ng-disabled=\\\"vm.notCatalog\\\" ng-class=\\\"{\\'secondary-text\\': !vm.catalog}\\\"><span \\ntranslate=\\\"PRODUCT.CATALOG\\\"></span></md-checkbox></div><div ng-if=\\\"!vm.session.company.has_multiple_b2b\\\" flex=\\\"50\\\">\\n<md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.notCatalog\\\" ng-disabled=\\\"vm.catalog\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.notCatalog}\\\"><span translate=\\\"PRODUCT.NOT_CATALOG\\\"></span></md-checkbox></div><div \\nflex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.allowB2bPreSales\\\" ng-disabled=\\\"vm.notAllowB2bPreSales\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.allowB2bPreSales}\\\"><span translate=\\\"PRODUCT.ALLOW_B2B_PRE_SALES\\\"></span></md-checkbox>\\n</div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.notAllowB2bPreSales\\\" ng-disabled=\\\"vm.allowB2bPreSales\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.notAllowB2bPreSales}\\\"><span translate=\\\"PRODUCT.NOT_ALLOW_B2B_PRE_SALES\\\"></span>\\n</md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.backordersAllowed\\\" \\nng-disabled=\\\"vm.notBackordersAllowed\\\" ng-class=\\\"{\\'secondary-text\\': !vm.backordersAllowed}\\\"><span \\ntranslate=\\\"PRODUCT.BACKORDERS_ALLOWED\\\"></span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" \\nng-model=\\\"vm.notBackordersAllowed\\\" ng-disabled=\\\"vm.backordersAllowed\\\" \\nng-class=\\\"{\\'secondary-text\\': !vm.notBackordersAllowed}\\\"><span translate=\\\"PRODUCT.BACKORDERS_NOT_ALLOWED\\\"></span>\\n</md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.manageUids\\\" \\nng-disabled=\\\"vm.unmanageUids\\\" ng-class=\\\"{\\'secondary-text\\': !vm.manageUids}\\\"><span translate=\\\"PRODUCT.MANAGE_UIDS\\\">\\n</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.unmanageUids\\\" \\nng-disabled=\\\"vm.manageUids\\\" ng-class=\\\"{\\'secondary-text\\': !vm.unmanageUids}\\\"><span translate=\\\"PRODUCT.UNMANAGE_UIDS\\\">\\n</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.manageLots\\\" \\nng-disabled=\\\"vm.unmanageLots\\\" ng-class=\\\"{\\'secondary-text\\': !vm.manageLots}\\\"><span translate=\\\"PRODUCT.MANAGE_LOTS\\\">\\n</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox class=\\\"md-block\\\" ng-model=\\\"vm.unmanageLots\\\" \\nng-disabled=\\\"vm.manageLots\\\" ng-class=\\\"{\\'secondary-text\\': !vm.unmanageLots}\\\"><span translate=\\\"PRODUCT.UNMANAGE_LOTS\\\">\\n</span></md-checkbox></div><div flex=\\\"50\\\"><md-checkbox ng-model=\\\"vm.archive\\\" class=\\\"md-block md-warn\\\" \\nng-disabled=\\\"vm.unarchive\\\" ng-class=\\\"{\\'secondary-text\\': !vm.archive}\\\"><span translate=\\\"GENERAL.ARCHIVE\\\"></span>\\n</md-checkbox></div><div flex=\\\"50\\\"><md-checkbox ng-model=\\\"vm.unarchive\\\" class=\\\"md-block md-warn\\\" \\nng-disabled=\\\"vm.archive\\\" ng-class=\\\"{\\'secondary-text\\': !vm.unarchive}\\\"><span translate=\\\"GENERAL.UNARCHIVE\\\"></span>\\n</md-checkbox></div><div ng-if=\\\"vm.session.company.has_multiple_b2b\\\" layout=\\\"row\\\" flex=\\\"100\\\"><md-card flex-gt-sm=\\\"50\\\" \\nflex=\\\"100\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" translate=\\\"PRODUCT.ADD_TO_B2B\\\"></span>\\n</md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" flex><md-progress-circular \\nng-if=\\\"vm.loadingEcommerces\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div class=\\\"scrollable\\\" ms-scroll \\nng-if=\\\"!vm.loadingEcommerces\\\"><ul class=\\\"pl-5 mb-0\\\"><li ng-repeat=\\\"ecommerce in vm.b2bEcommerces\\\"><md-checkbox \\nng-checked=\\\"vm.exists(ecommerce.id, vm.ecommercesToAdd)\\\" ng-click=\\\"vm.toggle(ecommerce.id, vm.ecommercesToAdd)\\\" \\nng-disabled=\\\"vm.exists(ecommerce.id, vm.ecommercesToRemove)\\\">{{ecommerce.slug}}</md-checkbox></li></ul></div></div>\\n</md-card-content></md-card><md-card flex-gt-sm=\\\"50\\\" flex=\\\"100\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" \\ntranslate=\\\"PRODUCT.REMOVE_FROM_B2B\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" \\nflex><md-progress-circular ng-if=\\\"vm.loadingEcommerces\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div \\nclass=\\\"scrollable\\\" ms-scroll><ul class=\\\"pl-5 mb-0\\\"><li ng-repeat=\\\"ecommerce in vm.b2bEcommerces\\\"><md-checkbox \\nng-checked=\\\"vm.exists(ecommerce.id, vm.ecommercesToRemove)\\\" ng-click=\\\"vm.toggle(ecommerce.id, vm.ecommercesToRemove)\\\" \\nng-disabled=\\\"vm.exists(ecommerce.id, vm.ecommercesToAdd)\\\">{{ecommerce.slug}}</md-checkbox></li></ul></div></div>\\n</md-card-content></md-card></div><div><div class=\\\"secondary-text m-0 mb-10\\\"><label \\ntranslate=\\\"PRODUCT.DESCRIPTION_SHORT\\\"></label>:</div><text-angular class=\\\"mt-20\\\" ta-toolbar=\\\"vm.taToolbar\\\" \\nng-model=\\\"vm.selectedShortDescription\\\"></text-angular></div><div class=\\\"mt-30\\\"><div class=\\\"secondary-text m-0 mb-10\\\">\\n<label translate=\\\"PRODUCT.DESCRIPTION_LONG\\\"></label>:</div><text-angular class=\\\"mt-20\\\" ta-toolbar=\\\"vm.taToolbar\\\" \\nng-model=\\\"vm.selectedLongDescription\\\"></text-angular></div></div></md-content></md-tab><md-tab \\nlabel=\\\"{{ \\'PRODUCT.PRICING_TIERS\\' | translate }}\\\"><md-content class=\\\"pt-16\\\"><div layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"md-padding\\\"><label class=\\\"mr-8\\\"><span translate=\\\"PRODUCT.SET_PRICES_TYPE\\\"></span>:\\n</label><md-select ng-model=\\\"vm.setPriceMethod\\\" ng-change=\\\"vm.resetPricingTiers()\\\" class=\\\"no-margin nd-input\\\">\\n<md-option ng-value=\\\"vm.FIXED\\\" translate=\\\"PRODUCT.SET_FIXED_PRICES\\\"></md-option><md-option \\nng-value=\\\"vm.PURCHASE_RELATED\\\" translate=\\\"PRODUCT.SET_RELATIVE_PRICES_BASED_ON_COST_PRICE\\\"></md-option><md-option \\nng-value=\\\"vm.SALES_RELATED\\\" translate=\\\"PRODUCT.SET_RELATIVE_PRICES_BASED_ON_PRICING_TIER\\\"></md-option></md-select>\\n<md-button class=\\\"md-primary md-icon-button\\\" target=\\\"_blank\\\" \\nhref=\\\"https://support.stockagile.com/hc/es/articles/16060118090653-Definir-margen-de-beneficio-de-un-producto\\\"><md-icon\\n md-font-icon=\\\"icon-information-outline\\\"></md-icon><md-tooltip>{{\\'GENERAL.MORE_INFO\\' | translate}}</md-tooltip>\\n</md-button></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"md-padding\\\"><md-checkbox \\nng-model=\\\"vm.setProductVariantPrices\\\"><span translate=\\\"PRODUCTS.SET_TO_PRODUCT_VARIANT_PRICES\\\"></span></md-checkbox>\\n</div></div><table class=\\\"simple\\\" ng-if=\\\"vm.setPriceMethod === vm.FIXED\\\"><thead><th translate=\\\"PRODUCT.PRICING_TIER\\\" \\nflex></th><th class=\\\"text-center\\\" flex>\\n{{\\'PRODUCT.PRICE_EXCL_TAX\\' | translate}} ({{vm.session.company.currency | currencyCharacter}})</th><th \\nclass=\\\"text-center\\\" flex>{{\\'PRODUCT.PRICE_INCL_TAX\\' | translate}} ({{vm.session.company.currency | currencyCharacter}})\\n</th><th class=\\\"text-center\\\" flex>{{\\'PRODUCT.OFFER_PERCENTAGE\\' | translate}} (%)</th><th class=\\\"text-center\\\" flex>\\n{{\\'PRODUCT.DISCOUNT_PRICE_EXCL_TAX\\' | translate}} ({{vm.session.company.currency | currencyCharacter}})</th><th \\nclass=\\\"text-center\\\" flex>\\n{{\\'PRODUCT.DISCOUNT_PRICE_INCL_TAX\\' | translate}} ({{vm.session.company.currency | currencyCharacter}})</th></thead>\\n<tbody><tr ng-repeat=\\\"pricingTier in vm.pricingTiers| orderBy: \\'position\\' track by $index\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"purple-500-fg mr-5\\\" ng-if=\\\"pricingTier.discount\\\">\\n</md-icon><span flex ng-class=\\\"{\\'secondary-text\\': !pricingTier.selected}\\\">{{pricingTier.name}}</span></div></td><td \\nclass=\\\"text-center\\\"><input type=\\\"number\\\" min=\\\"0\\\" class=\\\"text-right nd-input\\\" \\nng-disabled=\\\"pricingTier.price_incl_tax || pricingTier.discount || pricingTier.discount_price_excl_tax || pricingTier.discount_price_incl_tax\\\" \\nng-model=\\\"pricingTier.price_excl_tax\\\" flex></td><td class=\\\"text-center\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nclass=\\\"text-right nd-input\\\" \\nng-disabled=\\\"pricingTier.price_excl_tax || pricingTier.discount || pricingTier.discount_price_excl_tax || pricingTier.discount_price_incl_tax\\\" \\nng-model=\\\"pricingTier.price_incl_tax\\\" flex></td><td class=\\\"text-center\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nclass=\\\"text-right purple-500-fg nd-input\\\" \\nng-disabled=\\\"pricingTier.price_excl_tax || pricingTier.price_incl_tax || pricingTier.discount_price_excl_tax || pricingTier.discount_price_incl_tax\\\" \\nng-model=\\\"pricingTier.discount\\\" flex></td><td class=\\\"text-center\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nclass=\\\"text-right purple-500-fg nd-input\\\" \\nng-disabled=\\\"pricingTier.price_excl_tax || pricingTier.price_incl_tax || pricingTier.discount || pricingTier.discount_price_incl_tax\\\" \\nng-model=\\\"pricingTier.discount_price_excl_tax\\\"></td><td class=\\\"text-center\\\"><input type=\\\"number\\\" min=\\\"0\\\" \\nclass=\\\"text-right purple-500-fg nd-input\\\" \\nng-disabled=\\\"pricingTier.price_excl_tax || pricingTier.price_incl_tax || pricingTier.discount || pricingTier.discount_price_excl_tax\\\" \\nng-model=\\\"pricingTier.discount_price_incl_tax\\\" flex></td></tr></tbody></table><table class=\\\"simple\\\" \\nng-if=\\\"vm.setPriceMethod === vm.PURCHASE_RELATED || vm.setPriceMethod === vm.SALES_RELATED\\\"><thead><th \\ntranslate=\\\"PRODUCT.PRICING_TIER\\\" flex></th><th class=\\\"text-center\\\" flex>{{\\'PRODUCT.PRICE_EXCL_TAX\\' | translate}} (%)\\n</th><th class=\\\"text-center\\\" flex>{{\\'PRODUCT.PRICE_INCL_TAX\\' | translate}} (%)</th><th class=\\\"text-center\\\" flex>\\n{{\\'PRODUCT.RELATIVE_PRICING_ROUNDING\\' | translate}}</th></thead><tbody><tr \\nng-repeat=\\\"pricingTier in vm.pricingTiers| orderBy: \\'position\\' track by $index\\\"><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-sale\\\" class=\\\"purple-500-fg mr-5\\\" ng-if=\\\"pricingTier.discount\\\">\\n</md-icon><span flex ng-class=\\\"{\\'secondary-text\\': !pricingTier.selected}\\\">{{pricingTier.name}}</span></div></td><td \\nclass=\\\"text-center\\\"><input type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right nd-input full-width\\\" \\nng-if=\\\"vm.setPriceMethod === vm.PURCHASE_RELATED\\\" \\nng-change=\\\"vm.setDefaultRoundType(pricingTier, pricingTier.round_type)\\\" \\nng-disabled=\\\"pricingTier.relative_cost_price_incl_tax\\\" ng-model=\\\"pricingTier.relative_cost_price_excl_tax\\\" flex> <input\\n type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right nd-input full-width\\\" ng-if=\\\"vm.setPriceMethod === vm.SALES_RELATED\\\" \\nng-change=\\\"vm.setDefaultRoundType(pricingTier, pricingTier.round_type)\\\" \\nng-disabled=\\\"pricingTier.relative_sale_price_incl_tax\\\" ng-model=\\\"pricingTier.relative_sale_price_excl_tax\\\" flex></td>\\n<td class=\\\"text-center\\\"><input type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right nd-input full-width\\\" \\nng-if=\\\"vm.setPriceMethod === vm.PURCHASE_RELATED\\\" \\nng-change=\\\"vm.setDefaultRoundType(pricingTier, pricingTier.round_type)\\\" \\nng-disabled=\\\"pricingTier.relative_cost_price_excl_tax\\\" ng-model=\\\"pricingTier.relative_cost_price_incl_tax\\\" flex> <input\\n type=\\\"number\\\" step=\\\"0.01\\\" class=\\\"text-right nd-input full-width\\\" ng-if=\\\"vm.setPriceMethod === vm.SALES_RELATED\\\" \\nng-change=\\\"vm.setDefaultRoundType(pricingTier, pricingTier.round_type)\\\" \\nng-disabled=\\\"pricingTier.relative_sale_price_excl_tax\\\" ng-model=\\\"pricingTier.relative_sale_price_incl_tax\\\" flex></td>\\n<td class=\\\"text-center\\\"><md-select ng-model=\\\"pricingTier.round_type\\\" class=\\\"no-margin nd-input\\\"><md-option \\nng-value=\\\"vm.ROUNDING_PRICE_TYPES.PRICE_NO_ROUND\\\" translate=\\\"PRODUCT.RELATIVE_PRICE_NO_ROUND\\\"></md-option><md-option \\nng-value=\\\"vm.ROUNDING_PRICE_TYPES.PRICE_ROUND_UP\\\" translate=\\\"PRODUCT.RELATIVE_PRICE_ROUND_UP\\\"></md-option><md-option \\nng-value=\\\"vm.ROUNDING_PRICE_TYPES.PRICE_ROUND_UP_99\\\" translate=\\\"PRODUCT.RELATIVE_PRICE_ROUND_UP_99\\\"></md-option>\\n<md-option ng-value=\\\"vm.ROUNDING_PRICE_TYPES.PRICE_ROUND_DOWN\\\" translate=\\\"PRODUCT.RELATIVE_PRICE_ROUND_DOWN\\\">\\n</md-option><md-option ng-value=\\\"vm.ROUNDING_PRICE_TYPES.PRICE_ROUND_DOWN_99\\\" \\ntranslate=\\\"PRODUCT.RELATIVE_PRICE_ROUND_DOWN_99\\\"></md-option></md-select></td></tr></tbody></table></md-content>\\n</md-tab><md-tab label=\\\"{{ \\'PRODUCT.ECOMMERCE\\' | translate }}\\\" has-permission=\\\"app.ecommerce\\\"><md-content \\nclass=\\\"md-padding\\\"><div layout=\\\"row\\\" class=\\\"mt-20 pl-20\\\"><md-checkbox flex ng-model=\\\"vm.syncEcommerceProducts\\\" \\nng-disabled=\\\"!vm.webSites.length || vm.syncEcommerceStocks || vm.syncEcommercePrices\\\"><span \\ntranslate=\\\"PRODUCTS.SYNC_PRODUCTS\\\"></span></md-checkbox></div><div layout=\\\"row\\\" class=\\\"mt-20 pl-20\\\"><md-checkbox flex \\nng-model=\\\"vm.syncEcommercePrices\\\" ng-if=\\\"vm.webSitesHasPrestashop\\\" \\nng-disabled=\\\"!vm.webSites.length || vm.syncEcommerceStocks || vm.syncEcommerceProducts\\\"><span \\ntranslate=\\\"PRODUCTS.SYNC_PRICES\\\"></span></md-checkbox></div><div layout=\\\"row\\\" class=\\\"mt-20 pl-20\\\"><md-checkbox flex \\nng-model=\\\"vm.syncEcommerceStocks\\\" \\nng-disabled=\\\"!vm.webSites.length || vm.syncEcommerceProducts || vm.syncEcommercePrices\\\"><span \\ntranslate=\\\"PRODUCTS.SYNC_STOCKS\\\"></span></md-checkbox></div><div layout=\\\"row\\\" class=\\\"mt-20 pl-20\\\"><md-checkbox flex \\nng-model=\\\"vm.forceSiteProductSizeVariations\\\" ng-disabled=\\\"vm.doNotForceSiteProductSizeVariations\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{\\'PRODUCT.FORCE_SIZE_AS_VARIANT\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>\\n{{\\'PRODUCT.FORCE_SIZE_VARIATIONS_TOOLTIP_2\\' | translate }}</md-tooltip></md-icon></div></md-checkbox><md-checkbox flex \\nng-model=\\\"vm.doNotForceSiteProductSizeVariations\\\" ng-disabled=\\\"vm.forceSiteProductSizeVariations\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\">{{\\'PRODUCT.DO_NOT_FORCE_SIZE_VARIATIONS\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>\\n{{\\'PRODUCT.DO_NOT_FORCE_SIZE_VARIATIONS_TOOLTIP_2\\' | translate }}</md-tooltip></md-icon></div></md-checkbox></div><div \\nlayout=\\\"row\\\" class=\\\"mt-20 pl-20\\\"><md-checkbox flex ng-model=\\\"vm.forceSiteProductColorVariations\\\" \\nng-disabled=\\\"vm.doNotForceSiteProductColorVariations\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n{{\\'PRODUCT.FORCE_COLOR_AS_VARIANT\\' | translate }}<md-icon md-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\">\\n<md-tooltip>{{\\'PRODUCT.FORCE_COLOR_VARIATIONS_TOOLTIP_2\\' | translate }}</md-tooltip></md-icon></div></md-checkbox>\\n<md-checkbox flex ng-model=\\\"vm.doNotForceSiteProductColorVariations\\\" ng-disabled=\\\"vm.forceSiteProductColorVariations\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\">{{\\'PRODUCT.DO_NOT_FORCE_COLOR_VARIATIONS\\' | translate }}<md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"ml-5\\\"><md-tooltip>\\n{{\\'PRODUCT.DO_NOT_FORCE_COLOR_VARIATIONS_TOOLTIP_2\\' | translate }}</md-tooltip></md-icon></div></md-checkbox></div><div\\n layout=\\\"row\\\"><md-card flex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\">\\n{{\\'PRODUCTS.CATEGORIES_TO_ADD\\' | translate}}</span></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"full-height\\\"><div layout=\\\"column\\\" flex><div ng-repeat=\\\"site in vm.webSites\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><md-autocomplete flex \\nmd-floating-label=\\\"{{site.name}}\\\" placeholder=\\\"{{\\'PRODUCT.AUTOCOMPLETE_SEARCH_CATEGORY\\' | translate}}\\\" \\nmd-selected-item=\\\"vm.addCategoriesDict[site.id].selectedItem\\\" \\nmd-selected-item-change=\\\"vm.siteCategorySelected(site, vm.addCategoriesDict)\\\" \\nmd-search-text=\\\"vm.addCategoriesDict[site.id].searchText\\\" \\nmd-items=\\\"item in vm.querySearchCategories(site, vm.addCategoriesDict)\\\" md-item-text=\\\"item.path\\\" md-min-length=\\\"3\\\" \\nmd-delay=\\\"500\\\" md-require-match nd-mute-barcode-callbacks><div layout=\\\"column\\\" class=\\\"autocomplete-site-category\\\">\\n<span>{{item.name}}</span> <small class=\\\"secondary-text\\\">{{item.path}}</small></div></md-autocomplete><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.openAdvancedCategorySearch(site, vm.addCategoriesDict)\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\\\" class=\\\"md-primary\\\"></md-icon>\\n<md-tooltip>{{\\'PRODUCT.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button></div><md-chips \\nng-model=\\\"vm.addCategoriesDict[site.id].selectedCategories\\\" readonly=\\\"true\\\" md-removable=\\\"true\\\"><md-chip-template>\\n{{$chip.path}}</md-chip-template></md-chips></div><span flex></span></div></md-card-content></md-card><md-card \\nflex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\">{{\\'PRODUCTS.CATEGORIES_TO_REMOVE\\' | translate}}</span>\\n</md-card-title-text></md-card-title><md-card-content class=\\\"full-height\\\"><div layout=\\\"column\\\" flex><div \\nng-repeat=\\\"site in vm.webSites\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-magnify\\\">\\n</md-icon><md-autocomplete flex md-floating-label=\\\"{{site.name}}\\\" \\nplaceholder=\\\"{{\\'PRODUCT.AUTOCOMPLETE_SEARCH_CATEGORY\\' | translate}}\\\" \\nmd-selected-item=\\\"vm.removeCategoriesDict[site.id].selectedItem\\\" \\nmd-selected-item-change=\\\"vm.siteCategorySelected(site, vm.removeCategoriesDict)\\\" \\nmd-search-text=\\\"vm.removeCategoriesDict[site.id].searchText\\\" \\nmd-items=\\\"item in vm.querySearchCategories(site, vm.removeCategoriesDict)\\\" md-item-text=\\\"item.path\\\" md-min-length=\\\"3\\\" \\nmd-delay=\\\"500\\\" md-require-match nd-mute-barcode-callbacks><div layout=\\\"column\\\" class=\\\"autocomplete-site-category\\\">\\n<span>{{item.name}}</span> <small class=\\\"secondary-text\\\">{{item.path}}</small></div></md-autocomplete><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"vm.openAdvancedCategorySearch(site, vm.removeCategoriesDict)\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/advanced-search-primary.d3a4c548.svg\\\" class=\\\"md-primary\\\"></md-icon>\\n<md-tooltip>{{\\'PRODUCT.ADVANCED_SEARCH\\' | translate}}</md-tooltip></md-button></div><md-chips \\nng-model=\\\"vm.removeCategoriesDict[site.id].selectedCategories\\\" readonly=\\\"true\\\" md-removable=\\\"true\\\"><md-chip-template>\\n{{$chip.path}}</md-chip-template></md-chips></div><span flex></span></div></md-card-content></md-card></div><div \\nlayout=\\\"row\\\"><md-card flex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" translate=\\\"PRODUCTS.SITES_TO_ADD\\\">\\n</span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" flex><md-progress-circular \\nng-if=\\\"vm.loadingWebSites\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div class=\\\"scrollable\\\" ms-scroll \\nng-if=\\\"!vm.loadingWebSites\\\"><ul class=\\\"pl-5 mb-0\\\"><li ng-repeat=\\\"site in vm.webSites\\\"><md-checkbox \\nng-checked=\\\"vm.exists(site.id, vm.webSitesToAdd)\\\" ng-click=\\\"vm.toggle(site.id, vm.webSitesToAdd)\\\" \\nng-disabled=\\\"vm.exists(site.id, vm.webSitesToRemove)\\\">{{site.name}}</md-checkbox></li></ul></div></div>\\n</md-card-content></md-card><md-card flex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" \\ntranslate=\\\"PRODUCTS.SITES_TO_REMOVE\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" \\nflex><md-progress-circular ng-if=\\\"vm.loadingWebSites\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div \\nclass=\\\"scrollable\\\" ms-scroll><ul class=\\\"pl-5 mb-0\\\"><li ng-repeat=\\\"site in vm.webSites\\\"><md-checkbox \\nng-checked=\\\"vm.exists(site.id, vm.webSitesToRemove)\\\" ng-click=\\\"vm.toggle(site.id, vm.webSitesToRemove)\\\" \\nng-disabled=\\\"vm.exists(site.id, vm.webSitesToAdd)\\\">{{site.name}}</md-checkbox></li></ul></div></div></md-card-content>\\n</md-card></div><div layout=\\\"row\\\"><md-card flex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" \\ntranslate=\\\"PRODUCTS.VISIBLE_ON_SITE\\\"></span></md-card-title-text></md-card-title><md-card-content><div layout=\\\"column\\\" \\nflex><md-progress-circular ng-if=\\\"vm.loadingWebSites\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular><div \\nclass=\\\"scrollable\\\" ms-scroll ng-if=\\\"!vm.loadingWebSites\\\"><ul class=\\\"pl-5 mb-0\\\"><li ng-repeat=\\\"site in vm.webSites\\\">\\n<md-checkbox ng-checked=\\\"vm.exists(site.id, vm.visibleOnSites)\\\" ng-click=\\\"vm.toggle(site.id, vm.visibleOnSites)\\\" \\nng-disabled=\\\"vm.exists(site.id, vm.notVisibleOnSites)\\\">{{site.name}}</md-checkbox></li></ul></div></div>\\n</md-card-content></md-card><md-card flex=\\\"50\\\"><md-card-title><md-card-title-text><span class=\\\"h4\\\" \\ntranslate=\\\"PRODUCTS.NOT_VISIBLE_ON_SITE\\\"></span></md-card-title-text></md-card-title><md-card-content><div \\nlayout=\\\"column\\\" flex><md-progress-circular ng-if=\\\"vm.loadingWebSites\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><div class=\\\"scrollable\\\" ms-scroll><ul class=\\\"pl-5 mb-0\\\"><li ng-repeat=\\\"site in vm.webSites\\\">\\n<md-checkbox ng-checked=\\\"vm.exists(site.id, vm.notVisibleOnSites)\\\" ng-click=\\\"vm.toggle(site.id, vm.notVisibleOnSites)\\\" \\nng-disabled=\\\"vm.exists(site.id, vm.visibleOnSites)\\\">{{site.name}}</md-checkbox><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" ng-if=\\\"site.platform === vm.ECOMMERCE_PLATFORMS.ECOMMERCE_PLATFORM_SHOPIFY\\\">\\n<md-tooltip>{{\\'SITE.ADVICE_NON_VISIBLE_PRODUCT_SALES_CHANNEL_DESC\\' | translate}}</md-tooltip></md-icon></li></ul></div>\\n</div></md-card-content></md-card></div></md-content></md-tab></md-tabs></div></md-dialog-content><md-dialog-actions \\nclass=\\\"border-top\\\" has-permission=\\\"inventory.products.bulk_update\\\"><md-button type=\\\"submit\\\" \\nng-if=\\\"!vm.showSaveMessage\\\" ng-click=\\\"vm.closeDialog()\\\" ng-disabled=\\\"vm.saving\\\" aria-label=\\\"CANCEL\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" class=\\\"stroked\\\" translate-attr-aria-label=\\\"GENERAL.CANCEL\\\">Cancel\\n</md-button><md-button type=\\\"submit\\\" ng-if=\\\"!vm.showSaveMessage\\\" ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.save()\\\" \\nclass=\\\"md-primary md-raised\\\" aria-label=\\\"SAVE\\\" translate=\\\"GENERAL.SAVE\\\" translate-attr-aria-label=\\\"GENERAL.SAVE\\\">SAVE\\n</md-button><md-button ng-if=\\\"vm.showSaveMessage\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.CLOSE\\\">\\nCLOSE</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/products/directives/nd-products-filters/nd-products-filters.html\",\"<div class=\\\"nd-products-filters\\\"><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><md-input-container \\nclass=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_BRAND\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select flex md-on-close=\\\"vm.onSelectorClose(vm.brandsSearchText)\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" multiple=\\\"true\\\" ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.brands\\\" \\nplaceholder=\\\"{{\\'PRODUCTS.FILTER_BY_BRAND\\' | translate}}\\\"><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.brandsSearchText\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"brand in vm.brands | filter:{\\'name\\':vm.brandsSearchText} | orderBy: \\'name\\'\\\" ng-value=\\\"brand.id\\\">\\n{{brand.name}}</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float\\\"><label \\ntranslate=\\\"PRODUCTS.FILTER_BY_CATEGORY\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" \\nmd-font-icon=\\\"icon-folder-multiple\\\"></md-icon><md-select flex md-on-close=\\\"vm.onSelectorClose(vm.categories)\\\" \\nmd-on-open=\\\"vm.onSelectorOpen()\\\" multiple=\\\"true\\\" ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.categories\\\" \\nplaceholder=\\\"{{\\'PRODUCTS.FILTER_BY_CATEGORY\\' | translate}}\\\"><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.categoriesSearchText\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"category in vm.categories | filter:{\\'name\\':vm.categoriesSearchText} | orderBy: \\'name\\'\\\" \\nng-value=\\\"category.id\\\">{{category.name}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_SUBCATEGORY\\\"></label><md-icon \\nclass=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-folder\\\"></md-icon><md-select flex \\nmd-on-close=\\\"vm.onSelectorClose(vm.subcategories)\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" multiple=\\\"true\\\" \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.subcategories\\\" \\nplaceholder=\\\"{{\\'PRODUCTS.FILTER_BY_SUBCATEGORY\\' | translate}}\\\"><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.subcategoriesSearchText\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | filter:vm.filterCategory | filter:{\\'name\\':vm.subcategoriesSearchText} | orderBy: \\'name\\'\\\" \\nng-value=\\\"subcategory.id\\\">{{subcategory.name}} ({{subcategory.category.name}})</md-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_SEASON\\\"></label>\\n<md-icon class=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select flex \\nmd-on-close=\\\"vm.onSelectorClose(vm.seasonsSearchText)\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" multiple=\\\"true\\\" \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.seasons\\\" \\nplaceholder=\\\"{{\\'PRODUCTS.FILTER_BY_SEASON\\' | translate}}\\\"><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.seasonsSearchText\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"season in vm.seasons | filter:{\\'name\\':vm.seasonsSearchText} | orderBy: \\'-name\\'\\\" ng-value=\\\"season.id\\\">\\n{{season.name}}</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float\\\"><label \\ntranslate=\\\"PRODUCTS.FILTER_BY_COMPOSITION\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-puzzle\\\">\\n</md-icon><md-select flex md-on-close=\\\"vm.onSelectorClose(vm.compositionsSearchText)\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmultiple=\\\"true\\\" ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.compositions\\\" \\nplaceholder=\\\"{{\\'PRODUCTS.FILTER_BY_COMPOSITION\\' | translate}}\\\"><md-select-header><input class=\\\"md-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.compositionsSearchText\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" type=\\\"search\\\"></md-select-header><md-option \\nng-repeat=\\\"composition in vm.compositions | filter:{\\'name\\':vm.compositionsSearchText} | orderBy: \\'name\\'\\\" \\nng-value=\\\"composition.id\\\">{{composition.name}}</md-option></md-select></md-input-container><div layout=\\\"row\\\" \\nclass=\\\"mb-40 mt-20\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-calendar\\\" class=\\\"mr-8 s16\\\"></md-icon>\\n<md-date-range flex ng-class=\\\"{\\'has-value\\': vm.productCreatedDateRange.dateStart}\\\" \\nplaceholder=\\\"{{vm.productCreatedDateRange.format(vm.productCreatedDateRange.dateStart, vm.productCreatedDateRange.dateEnd)}}\\\" \\ndate-start=\\\"vm.productCreatedDateRange.dateStart\\\" date-end=\\\"vm.productCreatedDateRange.dateEnd\\\" \\nlocalization-map=\\\"vm.mdLocalizationMap\\\" ng-model=\\\"vm.productCreatedDateRange\\\" show-template=\\\"true\\\" show-clear=\\\"true\\\" \\nmd-on-select=\\\"vm.setDateRangeFilters()\\\" md-on-clear=\\\"vm.setDateRangeFilters()\\\" class=\\\"date-range-filter\\\">\\n</md-date-range></div><div layout=\\\"row\\\" class=\\\"mb-40\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-calendar\\\" class=\\\"mr-8 s16\\\"></md-icon><md-date-range flex \\nng-class=\\\"{\\'has-value\\': vm.productUpdatedDateRange.dateStart}\\\" \\nplaceholder=\\\"{{vm.productUpdatedDateRange.format(vm.productUpdatedDateRange.dateStart, vm.productUpdatedDateRange.dateEnd)}}\\\" \\ndate-start=\\\"vm.productUpdatedDateRange.dateStart\\\" date-end=\\\"vm.productUpdatedDateRange.dateEnd\\\" \\nlocalization-map=\\\"vm.mdLocalizationMap\\\" ng-model=\\\"vm.productUpdatedDateRange\\\" show-template=\\\"true\\\" \\nmd-on-select=\\\"vm.setDateRangeFilters()\\\" md-on-clear=\\\"vm.setDateRangeFilters()\\\" class=\\\"date-range-filter\\\">\\n</md-date-range></div><div layout=\\\"row\\\" class=\\\"mb-20\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-calendar\\\" class=\\\"mr-8 s16\\\"></md-icon><md-date-range flex \\nng-class=\\\"{\\'has-value\\': vm.productPriceUpdatedDateRange.dateStart}\\\" \\nplaceholder=\\\"{{vm.productPriceUpdatedDateRange.format(vm.productPriceUpdatedDateRange.dateStart, vm.productPriceUpdatedDateRange.dateEnd)}}\\\" \\ndate-start=\\\"vm.productPriceUpdatedDateRange.dateStart\\\" date-end=\\\"vm.productPriceUpdatedDateRange.dateEnd\\\" \\nlocalization-map=\\\"vm.mdLocalizationMap\\\" ng-model=\\\"vm.productPriceUpdatedDateRange\\\" show-template=\\\"true\\\" \\nmd-on-select=\\\"vm.setDateRangeFilters()\\\" md-on-clear=\\\"vm.setDateRangeFilters()\\\" class=\\\"date-range-filter\\\">\\n</md-date-range></div><md-input-container class=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_STATUS\\\"></label>\\n<md-icon class=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-flag-outline-variant\\\"></md-icon><md-select flex \\nmultiple=\\\"true\\\" ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.status\\\" \\nplaceholder=\\\"{{\\'PRODUCTS.FILTER_BY_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"(key, value) in vm.statuses\\\" \\nng-value=\\\"key\\\">{{value | translate}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_SITE\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" \\nmd-font-icon=\\\"icon-web\\\"></md-icon><md-select flex multiple=\\\"true\\\" ng-change=\\\"vm.filtersChanged()\\\" \\nng-model=\\\"status.filters.sites\\\" placeholder=\\\"{{\\'PRODUCTS.FILTER_BY_SITE\\' | translate}}\\\"><md-option \\nng-repeat=\\\"site in vm.sites | orderBy: \\'name\\'\\\" ng-value=\\\"site.id\\\">{{\\'PRODUCTS.FILTER_IN\\' | translate}} {{site.name}}\\n</md-option><md-option ng-repeat=\\\"site in vm.sites | orderBy: \\'name\\'\\\" ng-value=\\\"-site.id\\\">\\n{{\\'PRODUCTS.FILTER_NOT_IN\\' | translate}} {{site.name}}</md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float\\\" has-permission=\\\"app.ecommerce\\\" ng-if=\\\"vm.visibleInEcommerceDict && status.filters.sites != \\'\\'\\\">\\n<label translate=\\\"PRODUCTS.FILTER_BY_SITE_VISIBILITY\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" \\nmd-font-icon=\\\"icon-eye\\\"></md-icon><md-select flex ng-change=\\\"vm.filtersChanged()\\\" \\nng-model=\\\"status.filters.visibleInEcommerce\\\"><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"PRODUCTS.FILTER_BY_SITE_VISIBILITY\\\">\\nAll products</md-option><md-option ng-repeat=\\\"(key, visible) in vm.visibleInEcommerceDict\\\" ng-value=\\\"visible\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{\\\"PRODUCT.\\\" + key | translate}}</div></md-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-icon-float\\\" has-permission=\\\"app.ecommerce\\\"><label \\ntranslate=\\\"PRODUCTS.FILTER_BY_COVER_IMAGE\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" \\nmd-font-icon=\\\"icon-file-image-box\\\"></md-icon><md-select flex ng-change=\\\"vm.filtersChanged()\\\" \\nng-model=\\\"status.filters.cover\\\" placeholder=\\\"{{\\'PRODUCTS.FILTER_BY_COVER_IMAGE\\' | translate}}\\\"><md-option \\nng-value=\\\"\\'\\'\\\">{{\\'PRODUCTS.WITH_AND_WITHOUT_COVER\\' | translate}}</md-option><md-option ng-value=\\\"\\'1\\'\\\">\\n{{\\'PRODUCTS.WITH_COVER\\' | translate}}</md-option><md-option ng-value=\\\"\\'-1\\'\\\">{{\\'PRODUCTS.WITHOUT_COVER\\' | translate}}\\n</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float\\\" ng-if=\\\"vm.stockDict\\\"><label \\ntranslate=\\\"PRODUCTS.FILTER_BY_STOCK_STATUS\\\"></label><md-icon class=\\\"mr-8 s16 secondary-text\\\" \\nmd-font-icon=\\\"icon-checkbox-multiple-marked-outline\\\"></md-icon><md-select flex ng-change=\\\"vm.filtersChanged()\\\" \\nng-model=\\\"status.filters.stock\\\"><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"PRODUCT.ALL_STOCKS\\\">All Stocks</md-option>\\n<md-option ng-repeat=\\\"(key, stock) in vm.stockDict\\\" ng-value=\\\"stock\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n{{\\\"PRODUCT.\\\" + key | translate}}</div></md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_DISCOUNT_PRICE\\\"></label><md-icon \\nclass=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-percent\\\"></md-icon><md-select flex ng-change=\\\"vm.filtersChanged()\\\" \\nng-model=\\\"status.filters.discountPrice\\\"><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"PRODUCT.ALL_PRODUCTS\\\">All Products\\n</md-option><md-option ng-repeat=\\\"(key, discountPrice) in vm.discountPriceDict\\\" ng-value=\\\"discountPrice\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\">{{\\\"PRODUCT.\\\" + key | translate}}</div></md-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_BARCODE_STATUS\\\">\\n</label><md-icon class=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-barcode\\\"></md-icon><md-select flex \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.barcode\\\"><md-option ng-value=\\\"\\'\\'\\\" \\ntranslate=\\\"PRODUCT.ALL_PRODUCTS\\\">All Products</md-option><md-option ng-value=\\\"vm.WITH_BARCODE_FILTER\\\" \\ntranslate=\\\"PRODUCT.WITH_BARCODE_ONLY\\\">Only with barcode</md-option><md-option ng-value=\\\"vm.WITHOUT_BARCODE_FILTER\\\" \\ntranslate=\\\"PRODUCT.WITHOUT_BARCODE_ONLY\\\">Only without barcode</md-option></md-select></md-input-container>\\n<md-input-container class=\\\"md-icon-float\\\"><label translate=\\\"PRODUCTS.FILTER_BY_SKU_STATUS\\\"></label><md-icon \\nclass=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-numeric\\\"></md-icon><md-select flex ng-change=\\\"vm.filtersChanged()\\\" \\nng-model=\\\"status.filters.sku\\\"><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"PRODUCT.ALL_PRODUCTS\\\">All Products</md-option>\\n<md-option ng-value=\\\"vm.WITH_SKU_FILTER\\\" translate=\\\"PRODUCT.WITH_SKU_ONLY\\\">Only with SKU</md-option><md-option \\nng-value=\\\"vm.WITHOUT_SKU_FILTER\\\" translate=\\\"PRODUCT.WITHOUT_SKU_ONLY\\\">Only without SKU</md-option></md-select>\\n</md-input-container><div class=\\\"autocomplete-filter\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16 secondary-text\\\" md-font-icon=\\\"icon-tag\\\"></md-icon><md-input-container class=\\\"mb-0\\\" flex><label \\ntranslate=\\\"PRODUCT.FILTER_BY_TAG\\\"></label><input class=\\\"secondary-text\\\" id=\\\"product-tag-search\\\" \\nnd-mute-barcode-callbacks ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.tag\\\" \\nng-model-options=\\\"{debounce:750}\\\" type=\\\"text\\\"></md-input-container></div><div class=\\\"autocomplete-filter\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-ruler\\\"></md-icon>\\n<md-autocomplete class=\\\"autocomplete\\\" flex md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_SIZES\\' | translate}}\\\" \\nmd-item-text=\\\"size.code + \\'-\\' + size.name + \\' (\\' + size.category.name +\\')\\'\\\" \\nmd-items=\\\"size in vm.variantQuerySearch(vm.TYPE_SIZE)\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.sizeSearchText\\\" md-selected-item=\\\"vm.selectedSize\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_SIZE)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_SIZES\\' | translate}}\\\"><md-item-template><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.sizeSearchText\\\">{{size.name}}</span> <small class=\\\"secondary-text ml-5\\\" \\nng-if=\\\"vm.sizeSearchText\\\">({{size.category.name}})</small></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_SIZES_FOUND\\\" translate-values=\\\"{name: vm.sizeSearchText}\\\">\\nNo products matching \\\"{{vm.sizeSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters()\\\" md-removable=\\\"true\\\" \\nng-model=\\\"status.filters.sizes\\\" readonly=\\\"true\\\"><md-chip-template><strong>{{$chip.name}}&nbsp;</strong><md-tooltip \\nmd-direction=\\\"right\\\">{{$chip.category.name}}</md-tooltip></md-chip-template></md-chips></div><div \\nclass=\\\"autocomplete-filter\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16 autocomplete-icon\\\" \\nmd-font-icon=\\\"icon-palette\\\"></md-icon><md-autocomplete class=\\\"autocomplete\\\" flex md-delay=\\\"500\\\" \\nmd-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_COLORS\\' | translate}}\\\" \\nmd-item-text=\\\"color.code + \\'-\\' + color.name + \\' (\\' + color.category.name +\\')\\'\\\" \\nmd-items=\\\"color in vm.variantQuerySearch(vm.TYPE_COLOR)\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.colorSearchText\\\" md-selected-item=\\\"vm.selectedColor\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_COLOR)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_COLORS\\' | translate}}\\\"><md-item-template><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.colorSearchText\\\">{{color.name}}</span> <small class=\\\"secondary-text ml-5\\\" \\nng-if=\\\"vm.colorSearchText\\\">({{color.category.name}})</small></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_COLORS_FOUND\\\" translate-values=\\\"{name: vm.colorSearchText}\\\">\\nNo products matching \\\"{{vm.colorSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters()\\\" md-removable=\\\"true\\\" \\nng-model=\\\"status.filters.colors\\\" readonly=\\\"true\\\"><md-chip-template><strong>{{$chip.name}}&nbsp;</strong><md-tooltip \\nmd-direction=\\\"right\\\">{{$chip.category.name}}</md-tooltip></md-chip-template></md-chips></div><div \\nclass=\\\"autocomplete-filter\\\" has-permission=\\\"app.ecommerce\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-web\\\"></md-icon><md-autocomplete class=\\\"autocomplete\\\" flex \\nmd-delay=\\\"500\\\" md-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_WEB_CATEGORY\\' | translate}}\\\" md-item-text=\\\"webCategory.name\\\" \\nmd-items=\\\"webCategory in vm.webCategoryQuerySearch()\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"3\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.webCategorySearchText\\\" md-selected-item=\\\"vm.selectedWebCategory\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.WEB_CATEGORY)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_WEB_CATEGORY\\' | translate}}\\\">\\n<md-item-template><div class=\\\"web-category-autocomplete-item\\\" layout=\\\"column\\\" layout-align=\\\"start start\\\"><span \\nclass=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" md-highlight-text=\\\"vm.webCategorySearchText\\\">{{webCategory.name}}</span> <small \\nclass=\\\"secondary-text\\\" ng-if=\\\"vm.webCategorySearchText\\\">{{webCategory.category_group.name}} > {{webCategory.path}}\\n</small></div></md-item-template><md-not-found><span translate=\\\"PRODUCT.NO_WEB_CATEGORIES_FOUND\\\" \\ntranslate-values=\\\"{name: vm.webCategorySearchText}\\\">No products matching \\\"{{vm.webCategorySearchText}}\\\" were found.\\n</span></md-not-found></md-autocomplete></div><div class=\\\"multiselect-chips\\\"><md-chips \\nmd-on-remove=\\\"vm.updateMultiselectFilters()\\\" md-removable=\\\"true\\\" ng-model=\\\"status.filters.webCategories\\\" \\nreadonly=\\\"true\\\"><md-chip-template><strong>{{$chip.name}}&nbsp;</strong><md-tooltip md-direction=\\\"right\\\">{{$chip.path}}\\n</md-tooltip></md-chip-template></md-chips></div><div class=\\\"autocomplete-filter\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-account\\\"></md-icon><md-autocomplete class=\\\"autocomplete\\\" flex \\nmd-delay=\\\"500\\\" md-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\" md-item-text=\\\"provider.name\\\" \\nmd-items=\\\"provider in vm.providerQuerySearch()\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.providerSearchText\\\" md-selected-item=\\\"vm.selectedProvider\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_PROVIDER)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_PROVIDERS\\' | translate}}\\\"><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.providerSearchText\\\">{{provider.name}}</span></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_PROVIDERS_FOUND\\\" translate-values=\\\"{name: vm.providerSearchText}\\\">\\nNo provider matching \\\"{{vm.providerSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters(vm.TYPE_PROVIDER)\\\" md-removable=\\\"true\\\" \\nng-model=\\\"status.filters.providers\\\" readonly=\\\"true\\\"><md-chip-template><strong>{{$chip.name}}&nbsp;</strong>\\n</md-chip-template></md-chips></div><div class=\\\"autocomplete-filter\\\" \\nhas-permission=\\\"inventory.products.product.details.cost\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-truck\\\"></md-icon><md-autocomplete class=\\\"autocomplete\\\" flex \\nmd-delay=\\\"500\\\" md-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_PURCHASES\\' | translate}}\\\" md-item-text=\\\"purchase.autocode\\\" \\nmd-items=\\\"purchase in vm.purchaseQuerySearch()\\\" md-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" \\nmd-no-cache=\\\"true\\\" md-search-text=\\\"vm.purchaseSearchText\\\" md-selected-item=\\\"vm.selectedPurchase\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_PURCHASE)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_PURCHASES\\' | translate}}\\\"><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.purchaseSearchText\\\">{{purchase.autocode}}</span></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_PURCHASES_FOUND\\\" translate-values=\\\"{name: vm.purchaseSearchText}\\\">\\nNo purchase matching \\\"{{vm.purchaseSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters(vm.TYPE_PURCHASE)\\\" md-removable=\\\"true\\\" \\nng-model=\\\"status.filters.purchases\\\" readonly=\\\"true\\\"><md-chip-template><strong>{{$chip.autocode}}&nbsp;</strong>\\n</md-chip-template></md-chips></div><div class=\\\"autocomplete-filter\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 s16 autocomplete-icon\\\" md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-autocomplete \\nclass=\\\"autocomplete\\\" flex md-delay=\\\"500\\\" md-floating-label=\\\"{{\\'PRODUCT.FILTER_BY_COLLECTIONS\\' | translate}}\\\" \\nmd-item-text=\\\"collection.code\\\" md-items=\\\"collection in vm.collectionQuerySearch()\\\" \\nmd-menu-class=\\\"test-nd-products-dropdawn\\\" md-min-length=\\\"1\\\" md-no-cache=\\\"true\\\" \\nmd-search-text=\\\"vm.collectionSearchText\\\" md-selected-item=\\\"vm.selectedCollection\\\" \\nmd-selected-item-change=\\\"vm.updateMultiselectFilters(vm.TYPE_COLLECTION)\\\" ng-blur=\\\"vm.enableBarcodeListener()\\\" \\nng-focus=\\\"vm.disableBarcodeListener()\\\" placeholder=\\\"{{\\'PRODUCT.FILTER_BY_COLLECTIONS\\' | translate}}\\\"><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span class=\\\"m-0\\\" md-highlight-flags=\\\"gi\\\" \\nmd-highlight-text=\\\"vm.collectionSearchText\\\">{{collection.code}}</span></div></md-item-template><md-not-found><span \\ntranslate=\\\"PRODUCT.NO_COLLECTIONS_FOUND\\\" translate-values=\\\"{name: vm.collectionSearchText}\\\">\\nNo collection matching \\\"{{vm.collectionSearchText}}\\\" were found.</span></md-not-found></md-autocomplete></div><div \\nclass=\\\"multiselect-chips\\\"><md-chips md-on-remove=\\\"vm.updateMultiselectFilters(vm.TYPE_COLLECTION)\\\" md-removable=\\\"true\\\" \\nng-model=\\\"status.filters.collections\\\" readonly=\\\"true\\\"><md-chip-template><strong>{{$chip.code}}&nbsp;</strong>\\n</md-chip-template></md-chips></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-checkbox \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.discountActive\\\"><span translate=\\\"PRODUCT.DISCOUNT_ACTIVE\\\">\\n</span></md-checkbox></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-checkbox \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.stockBelowMinimum\\\"><span \\ntranslate=\\\"PRODUCT.STOCK_BELOW_MINIMUM\\\"></span></md-checkbox></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-checkbox ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.isNoos\\\"><span \\ntranslate=\\\"PRODUCT.IS_NOOS\\\"></span></md-checkbox></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-checkbox ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.archived\\\"><span translate=\\\"PRODUCT.ARCHIVED\\\">\\n</span></md-checkbox></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-checkbox \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.duplicatedProducts\\\"><span translate=\\\"PRODUCT.DUPLICATED\\\">\\n</span></md-checkbox></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-checkbox \\nng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.duplicatedBarcode\\\"><span \\ntranslate=\\\"PRODUCT.DUPLICATED_BARCODE\\\"></span></md-checkbox></div><div class=\\\"mt-20\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-checkbox ng-change=\\\"vm.filtersChanged()\\\" ng-model=\\\"status.filters.duplicatedSku\\\"><span \\ntranslate=\\\"PRODUCT.DUPLICATED_SKU\\\"></span></md-checkbox></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/bind-invoice-to-order/bind-invoice-to-order.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content><h2 translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\"></h2>\\n<div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-icon ng-if=\\\"vm.order.invoices.length > 0\\\" class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input id=\\\"invoice-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" \\nng-if=\\\"vm.hasInvoices\\\" class=\\\"nd-input\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" flex></div><table class=\\\"dataTable\\\" datatable=\\\"\\\" ng-if=\\\"vm.hasInvoices\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table><div \\nclass=\\\"mb-10\\\" ng-if=\\\"!vm.hasInvoices\\\">{{\\'PURCHASE.NO_INVOICES_TO_LINK\\' | translate}}</div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice()\\\" ng-disabled=\\\"vm.invoice != \\'\\'\\\" translate=\\\"PURCHASE.NEW_INVOICE\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.hasInvoices\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.update\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice(vm.invoice)\\\" ng-disabled=\\\"vm.invoice == \\'\\'\\\" translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/change-provider/change-provider.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content class=\\\"pt-24\\\"><h2 translate=\\\"MODAL.TITLE\\\" \\nclass=\\\"no-margin\\\"></h2><p translate=\\\"MODAL.SUBHEADER\\\"></p><div class=\\\"did-you-know yellow mt-16\\\" layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div><div flex class=\\\"mb-8 did-you-know-message\\\"><span \\ntranslate=\\\"MODAL.DESCRIPTION\\\"></span></div><ul class=\\\"no-margin\\\"><li translate=\\\"MODAL.OPTION_1_DESCRIPTION\\\"></li><li \\ntranslate=\\\"MODAL.OPTION_2_DESCRIPTION\\\"></li></ul></div></div></md-dialog-content><md-dialog-actions class=\\\"mt-8\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" flex><span translate=\\\"MODAL.FOOTER_DESCRIPTION\\\"></span><md-button \\nng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nng-click=\\\"vm.save(false)\\\" translate=\\\"MODAL.OPTION_1\\\"></md-button><md-button class=\\\"md-primary stroked md-raised\\\" \\nng-click=\\\"vm.save(true)\\\" translate=\\\"MODAL.OPTION_2\\\"></md-button></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/delivery/delivery.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content class=\\\"pt-24\\\"><h2 \\ntranslate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_TITLE\\\" class=\\\"no-margin\\\"></h2><div class=\\\"did-you-know yellow mt-16\\\" \\nlayout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div flex \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\"><span translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_BODY_WARNING\\\"></span></div>\\n</div></md-dialog-content><md-dialog-actions class=\\\"mt-8 mb-8\\\"><div layout=\\\"row\\\" class=\\\"pl-10 pr-10\\\" \\nlayout-align=\\\"space-between center\\\" flex><span translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_FOOTER_DESCRIPTION\\\"></span>\\n<div><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary stroked\\\" translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_CANCEL\\\">\\n</md-button><md-button class=\\\"md-primary stroked md-raised\\\" ng-click=\\\"vm.save()\\\" \\ntranslate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_OK\\\"></md-button></div></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/import/import.html\",\"<md-dialog aria-label=\\\"Import Purchase\\\" class=\\\"w-300\\\" id=\\\"import-purchase-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\"><span \\ntranslate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" href=\\\"/assets/files/purchase_order_import.9d458711.xlsx\\\" \\ntarget=\\\"_blank\\\">purchase_order_import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"purchase-order-products-uploader\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Change File</span>\\n</md-button><md-button ng-if=\\\"!product.cover\\\" class=\\\"md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">\\nSet File</span></md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.purchase_order_products.length > 0\\\">\\n{{vm.purchase_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div layout=\\\"row\\\"><md-button \\nng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length == 0 || !vm.fileLoaded\\\" \\nng-click=\\\"vm.uploadFile(true)\\\" class=\\\"md-raised md-primary m-0\\\" translate=\\\"IMPORT.IMPORT\\\" flex></md-button><md-button \\nng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" \\nclass=\\\"md-raised md-primary m-0\\\" translate=\\\"GENERAL.CLOSE\\\" flex></md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/import-purchase-order-delivery-products/import-purchase-order-delivery-products-dialog.html\",\"<md-dialog aria-label=\\\"Import Purchase\\\" class=\\\"w-300\\\" id=\\\"import-purchase-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30 center\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\">\\n<span translate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" ng-if=\\\"vm.isUid\\\" \\nhref=\\\"/assets/files/purchase_order_delivery_import.b1728635.xlsx\\\" target=\\\"_blank\\\">import.xlsx</a> <a class=\\\"ml-5 mr-5\\\" \\nng-if=\\\"!vm.isUid\\\" \\nhref=\\\"https://docs.google.com/spreadsheets/d/14AVMeYmSraO08xKXurXnobhJcKLWHE5NyvvGUi1zlaU/edit?usp=sharing\\\" \\ntarget=\\\"_blank\\\">import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"purchase-order-products-uploader\\\" ng-show=\\\"vm.purchase_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-accent md-raised md-secondary md-grey-400-bg no-margin\\\" flow-btn><span \\ntranslate=\\\"IMPORT.FILE\\\">Change File</span></md-button><md-button ng-if=\\\"!product.cover\\\" \\nclass=\\\"md-raised md-secondary md-grey-400-bg no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Set File</span>\\n</md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.purchase_order_products.length > 0\\\">\\n{{vm.purchase_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div><div style=\\\"float:right\\\">\\n<md-button ng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length == 0 || !vm.fileLoaded\\\" \\nng-click=\\\"vm.uploadFile(true)\\\" class=\\\"md-raised md-primary m-0 md-button\\\" translate=\\\"IMPORT.IMPORT\\\"></md-button>\\n<md-button ng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.purchase_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" \\nclass=\\\"md-raised md-accent m-0\\\" translate=\\\"GENERAL.CLOSE\\\"></md-button></div></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/import-sale-orders/import-sale-orders.html\",\"<md-dialog id=\\\"import-sale-orders-dialog\\\"><md-toolbar class=\\\"white-bg\\\"><div class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><h2 translate=\\\"PURCHASE.IMPORT_SALE_ORDERS\\\" class=\\\"mt-0 black-fg\\\"></h2><span flex></span>\\n<md-input-container md-no-float class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon>\\n<input id=\\\"sale-order-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"search\\\" placeholder=\\\"Search\\\" class=\\\"secondary-text\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div>\\n</md-toolbar><md-dialog-content class=\\\"p-0\\\"><table class=\\\"dataTable row-border hover\\\" datatable=\\\"\\\" \\ndt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"orders-table\\\"></table>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"border-top\\\"><md-button \\nclass=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\">{{\\'GENERAL.CANCEL\\' | translate }}</md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.accept()\\\">{{\\'IMPORT.IMPORT\\' | translate }}</md-button></md-dialog-actions>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/link-with-invoice/link-with-invoice.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content><h2 translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\" add \\ndelivery note></h2><div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-icon \\nng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"invoice-search-input\\\" ng-model=\\\"vm.search\\\" type=\\\"text\\\" ng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" \\nclass=\\\"nd-input\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\" flex></div>\\n<table class=\\\"dataTable\\\" datatable=\\\"\\\" ng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"datatable-table\\\"></table><div class=\\\"mb-10\\\" \\nng-if=\\\"vm.purchaseOrder.invoices.length == 0\\\">{{\\'PURCHASE.NO_INVOICES_TO_LINK\\' | translate}}</div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.create\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice()\\\" ng-disabled=\\\"vm.invoice != \\'\\'\\\" translate=\\\"PURCHASE.NEW_INVOICE\\\"></md-button>\\n<md-button class=\\\"md-primary md-raised\\\" ng-if=\\\"vm.purchaseOrder.invoices.length > 0\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.invoices.update\\')}}\\\" \\nng-click=\\\"vm.linkOrCreateInvoice(vm.invoice)\\\" ng-disabled=\\\"vm.invoice == \\'\\'\\\" translate=\\\"PURCHASE.LINK_WITH_INVOICE\\\">\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/print/print.html\",\"<md-dialog aria-label=\\\"Print Purchase Order\\\" class=\\\"w-400\\\" id=\\\"purchase-print-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"GENERAL.PRINT_SEND\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"column\\\"><md-input-container class=\\\"md-block\\\"><label\\n translate=\\\"PURCHASE.DESIGN\\\"></label><md-select ng-model=\\\"vm.printType\\\" ng-change=\\\"vm.changePrintType()\\\"><md-option \\nvalue=\\\"products\\\" translate=\\\"PURCHASE.PRODUCT_PER_ROW\\\"></md-option><md-option value=\\\"variants\\\" \\ntranslate=\\\"PURCHASE.PRODUCT_VARIANT_PER_ROW\\\"></md-option></md-select></md-input-container><md-checkbox \\nng-model=\\\"vm.showBrand\\\"><span translate=\\\"PRODUCT.BRAND\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showHsCode\\\">\\n<span translate=\\\"PRODUCT.HARMONISED_CODE\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showComposition\\\"><span \\ntranslate=\\\"PRODUCT.COMPOSITION\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showAttributes\\\"><span \\ntranslate=\\\"PRODUCT.ATTRIBUTES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.printPrices\\\" \\nng-disabled=\\\"vm.printSalePrices\\\"><span translate=\\\"PURCHASE.PRINT_PRICES_EXCL_TAX\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.printSalePrices\\\" ng-change=\\\"vm.printSalePricesChanged()\\\"><span translate=\\\"PURCHASE.PRINT_SALE_PRICES\\\">\\n</span></md-checkbox><md-select ng-if=\\\"vm.printSalePrices\\\" ng-model=\\\"vm.pricingTier\\\"><md-option \\nng-value=\\\"pricingTier.id\\\" ng-repeat=\\\"pricingTier in vm.pricingTiers | orderBy: \\'position\\'\\\">{{pricingTier.name}}\\n</md-option></md-select><md-checkbox ng-model=\\\"vm.printOriginCodes\\\"><span translate=\\\"PURCHASE.PRINT_ORIGIN_CODES\\\">\\n</span></md-checkbox><md-checkbox ng-model=\\\"vm.printImages\\\"><span translate=\\\"PURCHASE.PRINT_IMAGES\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.sendEmail\\\"><span translate=\\\"PURCHASE.SEND_BY_EMAIL\\\"></span></md-checkbox>\\n<md-input-container ng-if=\\\"vm.sendEmail\\\" class=\\\"mb-0 md-block\\\"><label translate=\\\"CONTACTS.EMAIL\\\"></label><input \\nng-model=\\\"vm.emailTo\\\" type=\\\"email\\\" required></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button \\nng-click=\\\"vm.print()\\\" class=\\\"md-raised md-primary\\\" ng-disabled=\\\"importForm.$invalid\\\">\\n{{(vm.sendEmail ? \\'GENERAL.SEND\\' : \\'GENERAL.PRINT\\') | translate }}</md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/print-catalog/print-catalog.html\",\"<md-dialog aria-label=\\\"Print Catalog\\\" class=\\\"w-300\\\" id=\\\"purchase-print-catalog-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"PURCHASE.PRINT_CATALOG\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"row\\\" layout-wrap><div><label \\ntranslate=\\\"PURCHASE.PRODUCTS_PER_PAGE\\\">Products per page</label><md-select ng-model=\\\"vm.data.productsPerPage\\\" \\nclass=\\\"mt-0 mb-10\\\"><md-option ng-repeat=\\\"number in vm.productsPerPageOptions\\\" ng-value=\\\"number\\\">{{number}}</md-option>\\n</md-select></div><md-checkbox ng-model=\\\"vm.data.showOriginCode\\\"><span translate=\\\"PURCHASE.SHOW_ORIGIN_CODE\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.data.showProductDescription\\\"><span \\ntranslate=\\\"PURCHASE.SHOW_PRODUCT_DESCRIPTION\\\"></span></md-checkbox><md-checkbox ng-if=\\\"!vm.isSaleOrder\\\" \\nng-model=\\\"vm.data.showPrice\\\"><span translate=\\\"PURCHASE.SHOW_FOB_PRICE\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.data.showTotals\\\"><span translate=\\\"PURCHASE.SHOW_TOTALS\\\"></span></md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button>\\n<md-button ng-click=\\\"vm.print()\\\" class=\\\"md-primary\\\" translate=\\\"GENERAL.PRINT\\\"></md-button></div></form>\\n</md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/dialogs/show-ddp-prices/show-ddp-prices-dialog.html\",\"<md-dialog id=\\\"show-ddp-prices-dialog\\\" aria-label=\\\"Show Ddp Prices\\\"><md-dialog-content><div layout=\\\"column\\\"><h2 \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_TITLE\\\"></h2><p \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_DESCRIPTION\\\"></p><div class=\\\"did-you-know yellow\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/alert-outline.74ba4705.svg\\\"></md-icon></div><div layout=\\\"column\\\" flex>\\n<span class=\\\"secondary-text ml-5\\\" translate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_WARNING\\\"></span></div>\\n</div></div></div><div class=\\\"datatable-div\\\"><table datatable ng-if=\\\"vm.datatableReady\\\" class=\\\"row-border hover\\\" \\nid=\\\"ddp-price\\\" dt-instance=\\\"vm.dtInstance\\\" dt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\"></table></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" ng-hide=\\\"vm.showConfirmAction || vm.showCancelAction\\\"><p \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_FOOTER\\\"></p><md-button ng-click=\\\"vm.showCancelAction = true\\\" \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CANCEL_BUTTON_TEXT\\\" class=\\\"stroked\\\">Cancel</md-button>\\n<md-button id=\\\"test-applyreg-button\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.showConfirmAction = true\\\" \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CONFIRM_BUTTON_TEXT\\\">Save</md-button></md-dialog-actions>\\n<md-dialog-actions layout=\\\"row\\\" ng-show=\\\"vm.showCancelAction\\\"><span>{{\\'PURCHASE.CALCULATE_CANCEL_MSG\\' | translate}}\\n</span><md-button ng-click=\\\"vm.showCancelAction = false\\\" translate=\\\"PURCHASE.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button>\\n<md-button id=\\\"test-applyreg-button\\\" class=\\\"md-primary stroked\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CANCEL_CONFIRM_BUTTON_TEXT\\\">Confirm Cancel</md-button>\\n</md-dialog-actions><md-dialog-actions layout=\\\"row\\\" ng-show=\\\"vm.showConfirmAction\\\"><span>\\n{{\\'PURCHASE.CALCULATE_CONFIRM_MSG\\' | translate}}</span><md-button ng-click=\\\"vm.showConfirmAction = false\\\" \\ntranslate=\\\"PURCHASE.CANCEL\\\" ng-disabled=\\\"vm.saving\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nid=\\\"test-applyreg-button\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.save()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mr-8\\\">\\n</md-progress-circular><span translate=\\\"PURCHASE.WEIGHTED_AVERAGE_PRODUCT_PRICE_DIALOG_CONFIRM_CALCULATE_BUTTON_TEXT\\\">\\n</span></div></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-payments/nd-order-payments.html\",\"<div id=\\\"nd-order-payments\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h3\\\" translate=\\\"PURCHASE.PAYMENTS\\\"></span><md-button \\nclass=\\\"md-raised md-primary m-0\\\" ng-click=\\\"vm.addPayment()\\\" ng-if=\\\"!vm.globalEditMode\\\" ng-disabled=\\\"vm.newPayment\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.create\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"INVOICE.ADD_PAYMENT\\\"></span></div></md-button><md-button class=\\\"md-warn stroked m-0\\\" \\nng-click=\\\"vm.cancelPayment()\\\" ng-if=\\\"vm.globalEditMode\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.create\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span>{{vm.getCancelEditModeText()}}</span></div></md-button></md-card-title-text>\\n</md-card-title><md-card-content class=\\\"full-height\\\"><table class=\\\"simple payment-table\\\" ms-responsive-table><thead>\\n<tr><th translate=\\\"ORDER.PAYMENT_METHOD\\\" class=\\\"text-bold\\\" style=\\\"text-align: left\\\"></th><th translate=\\\"ORDER.AMOUNT\\\" \\nclass=\\\"text-bold\\\"></th><th translate=\\\"ORDER.PAYMENT_DATE\\\" class=\\\"text-bold\\\"></th><th translate=\\\"SALE.ASSIGNED_INVOICE\\\" \\nclass=\\\"text-bold\\\"></th><th translate=\\\"ORDER.PAYMENT_STATUS\\\" class=\\\"text-bold\\\"></th><th></th></tr></thead><tbody><tr \\nng-repeat=\\\"payment in vm.order.payments | orderBy: \\'id\\'\\\"><td width=\\\"25%\\\" style=\\\"text-align: left\\\"><span \\nng-if=\\\"!payment.editing\\\"><md-icon class=\\\"mb-5 mr-10\\\" md-font-icon=\\\"{{payment.payment_method_instance.icon}}\\\"></md-icon>\\n{{payment.payment_method_instance.name}}</span><md-select ng-if=\\\"payment.editing\\\" class=\\\"nd-input\\\" \\nng-model=\\\"payment.payment_method\\\" placeholder=\\\"{{ \\'INVOICE.PAYMENT_METHOD\\' | translate}}\\\"><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethods\\\" ng-value=\\\"paymentMethod.id\\\"><md-icon class=\\\"mb-5 mr-10\\\" \\nmd-font-icon=\\\"{{paymentMethod.icon}}\\\"></md-icon>{{paymentMethod.name}}</md-option></md-select></td><td width=\\\"16%\\\">\\n<span ng-if=\\\"!payment.editing\\\">{{payment.amount | price}} {{vm.currency | currencyCharacter}}</span><div flex \\nng-if=\\\"payment.editing\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"nd-input container-icon-input\\\" \\nng-class=\\\"{\\'nd-input-invalid\\' : vm.checkValidAmount(payment.amount) }\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/wand-magic-sparkles.6ddf699d.svg\\\" class=\\\"secondary-text ml-10 mr-10\\\" \\nmd-ripple ng-if=\\\"vm.showPendingAmountButton\\\" ng-click=\\\"vm.setOrderPendingAmount(payment)\\\"><md-tooltip \\nmd-direction=\\\"bottom\\\">{{vm.getTooltip()}}</md-tooltip></md-icon><input ng-if=\\\"payment.editing\\\" \\nclass=\\\"text-right input-icon nd-input\\\" step=\\\"0.01\\\" min=\\\"0.00\\\" placeholder=\\\"{{\\'ORDER.AMOUNT\\' | translate}}\\\" \\nng-model=\\\"payment.amount\\\" type=\\\"number\\\"> {{vm.currency | currencyCharacter}}</div></td><td width=\\\"16%\\\"><span \\nng-if=\\\"!payment.editing\\\">{{payment.date | date: \\\"dd-MM-yyyy\\\"}}</span><div class=\\\"nd-input datepicker-div\\\" \\nng-if=\\\"payment.editing\\\"><md-datepicker md-placeholder=\\\"{{ \\'ORDER.PAYMENT_DATE\\' | translate}}\\\" md-hide-icons=\\\"calendar\\\" \\nflex ng-model=\\\"payment.date\\\" md-open-on-focus></md-datepicker></div></td><td width=\\\"25%\\\"><span \\nng-if=\\\"!payment.editing\\\"><span>{{payment.invoice_autocode}} </span><span \\nng-if=\\\"payment.invoice_instance.expiration_date\\\">\\n· {{ \\'INVOICE.EXPIRATION\\' | translate}}: {{payment.invoice_instance.expiration_date | date: \\\"dd-MM-yyyy\\\"}}</span>\\n</span><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"payment.editing\\\"><div flex><md-select flex \\nclass=\\\"nd-input\\\" ng-model=\\\"payment.invoice\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" md-on-close=\\\"vm.onSelectorClose()\\\" \\nplaceholder=\\\"{{ \\'ORDER.ASSIGN_INVOICE\\' | translate}}\\\"><md-select-header><input type=\\\"search\\\" class=\\\"md-text\\\" \\nng-model=\\\"vm.searchText\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"invoice in vm.order.invoices | filter:{\\'autocode\\':vm.searchText} | orderBy: \\'autocode\\'\\\" \\nng-value=\\\"invoice.id\\\"><div layout=\\\"row\\\">{{invoice.autocode}} <span ng-if=\\\"invoice.expiration_date\\\">\\n&nbsp;· {{\\'INVOICE.EXPIRATION_SHORT\\' | translate}}: {{invoice.expiration_date | date: \\\"dd-MM-yyyy\\\"}}</span></div>\\n</md-option></md-select></div><md-button class=\\\"md-icon-button m-0\\\"><md-icon \\nng-if=\\\"payment.editing && payment.invoice\\\" md-font-icon=\\\"icon-close\\\" class=\\\"cursor-pointer\\\" \\nng-click=\\\"vm.clearFilter(payment)\\\"></md-icon></md-button></div></td><td width=\\\"16%\\\"><span ng-if=\\\"!payment.editing\\\" \\nclass=\\\"m-0\\\" ng-class=\\\"vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[payment.status]\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[payment.status] | translate}}</span><md-select \\nng-if=\\\"payment.editing\\\" ng-model=\\\"payment.status\\\" class=\\\"nd-input\\\" flex \\nplaceholder=\\\"{{ \\'ORDER.PAYMENT_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"pops in vm.purchaseOrderPaymentStatuses\\\" \\nng-value=\\\"pops\\\"><span class=\\\"m-0 {{vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[pops]}}\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[pops] | translate}}</span></md-option></md-select></td><td><md-menu \\nng-if=\\\"!payment.editing\\\" md-position-mode=\\\"target-right target\\\"><md-button class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdOpenMenu($event)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\') ||\\n                         Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\">\\n<md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content><md-menu-item><md-button \\nng-click=\\\"vm.editPayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\')}}\\\"><md-icon \\nmd-font-icon=\\\"icon-pencil\\\"></md-icon><span>{{\\'PURCHASE.EDIT_PAYMENT\\' | translate}}</span></md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.deletePayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span>{{\\'PURCHASE.DELETE_PAYMENT\\' | translate}}</span></md-button></md-menu-item>\\n</md-menu-content></md-menu><md-button ng-if=\\\"payment.editing\\\" class=\\\"m-0 md-primary stroked\\\" \\nng-click=\\\"vm.savePayment(payment)\\\" ng-disabled=\\\"vm.checkFormPayment(payment)==null || vm.saving\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></td></tr></tbody></table><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"mt-30 mb-15 secondary-text\\\" ng-if=\\\"vm.order.payments.length==0\\\" \\ntranslate=\\\"PURCHASES.PAYMENTS_TABLE_EMPTY\\\"></div></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-purchase-order-payments/nd-purchase-order-payments.html\",\"<div id=\\\"nd-purchase-order-payments\\\"><md-card class=\\\"mb-20\\\"><md-card-title><md-card-title-text layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span class=\\\"h3\\\" translate=\\\"PURCHASE.PAYMENTS\\\"></span><md-button \\nclass=\\\"md-raised md-primary m-0\\\" ng-click=\\\"vm.addPayment()\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.create\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"mr-5\\\"></md-icon><span \\ntranslate=\\\"INVOICE.ADD_PAYMENT\\\"></span></div></md-button></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"full-height\\\"><table class=\\\"simple\\\" ms-responsive-table><thead><tr><th translate=\\\"ORDER.PAYMENT_METHOD\\\">\\nPayment Method</th><th translate=\\\"ORDER.AMOUNT\\\">Amount</th><th translate=\\\"ORDER.DATE\\\">Date</th><th \\ntranslate=\\\"SALE.ASSIGNED_INVOICE\\\">Invoice</th><th translate=\\\"ORDER.PAYMENT_STATUS\\\">Actions</th><th class=\\\"text-right\\\">\\n</th></tr></thead><tbody><tr ng-repeat=\\\"payment in vm.order.payments | orderBy: \\'id\\'\\\"><td><span \\nng-if=\\\"!payment.editing\\\"><md-icon class=\\\"mb-5 mr-10\\\" md-font-icon=\\\"{{payment.payment_method_instance.icon}}\\\"></md-icon>\\n{{payment.payment_method_instance.name}}</span><md-select ng-if=\\\"payment.editing\\\" class=\\\"nd-input\\\" \\nng-model=\\\"payment.payment_method\\\" placeholder=\\\"{{ \\'INVOICE.PAYMENT_METHOD\\' | translate}}\\\"><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethods\\\" ng-value=\\\"paymentMethod.id\\\"><md-icon class=\\\"mb-5 mr-10\\\" \\nmd-font-icon=\\\"{{paymentMethod.icon}}\\\"></md-icon>{{paymentMethod.name}}</md-option></md-select></td><td><span \\nng-if=\\\"!payment.editing\\\">{{payment.amount | price}} {{vm.session.company.currency | currencyCharacter}}</span><div \\nclass=\\\"nd-input container-icon-input\\\" ng-if=\\\"payment.editing\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/wand-magic-sparkles.6ddf699d.svg\\\" class=\\\"secondary-text\\\" md-ripple \\nng-click=\\\"vm.setOrderPendingAmount(payment)\\\"><md-tooltip md-direction=\\\"bottom\\\">{{vm.getTooltip()}}</md-tooltip>\\n</md-icon><input ng-if=\\\"payment.editing\\\" class=\\\"input-icon\\\" step=\\\"1\\\" min=\\\"0.00\\\" \\nplaceholder=\\\"{{ \\'ORDER.AMOUNT\\' | translate}}\\\" ng-model=\\\"payment.amount\\\" type=\\\"number\\\"></div></td><td><span \\nng-if=\\\"!payment.editing\\\">{{payment.date | date}}</span><md-datepicker ng-if=\\\"payment.editing\\\" \\nmd-placeholder=\\\"{{ \\'ORDER.PAYMENT_DATE\\' | translate}}\\\" md-hide-icons=\\\"calendar\\\" flex ng-model=\\\"payment.date\\\" \\nmd-open-on-focus></md-datepicker></td><td><span ng-if=\\\"!payment.editing\\\"><span>{{payment.invoice_autocode}} </span>\\n<span ng-if=\\\"vm.order.invoice.expiration_date\\\">\\n· {{ \\'INVOICE.EXPIRATION\\' | translate}}: {{payment.invoice_expiration_date}}</span></span><md-autocomplete flex=\\\"100\\\" \\nng-if=\\\"payment.editing\\\" ng-class=\\\"{\\'nd-input-autocomplete\\': ndInput}\\\" data-test-id=\\\"newpayment-autocomplete-invoices\\\" \\nclass=\\\"invoices-autocomplete nd-input\\\" md-items=\\\"item in vm.querySearch()\\\" md-selected-item=\\\"payment.invoice\\\" \\nmd-search-text=\\\"vm.searchText\\\" md-selected-item-change=\\\"vm.selectItem(item)\\\" md-item-text=\\\"vm.displayFunction(item)\\\" \\nmd-min-length=\\\"2\\\" md-delay=\\\"300\\\" placeholder=\\\"{{ \\'ORDER.ASSIGN_INVOICE\\' | translate}}\\\" md-no-cache=\\\"true\\\" \\nng-disabled=\\\"ngDisabled\\\"><md-item-template><div layout=\\\"row\\\"><span ng-if=\\\"item.autocode\\\" \\nmd-highlight-text=\\\"searchText\\\" md-highlight-flags=\\\"^i\\\">{{item.autocode}}</span> <span \\nng-if=\\\"item.autocode && item.expiration_date\\\">&nbsp;· {{\\'INVOICE.EXPIRATION\\' | translate}}: {{item.expiration_date}}\\n</span></div></md-item-template><md-not-found>{{\\'GENERAL.INVOICE_NOT_FOUND\\' | translate}}</md-not-found>\\n</md-autocomplete></td><td><span ng-if=\\\"!payment.editing\\\" \\nng-class=\\\"vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[payment.status]\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[payment.status] | translate}}</span><md-select \\nng-if=\\\"payment.editing\\\" ng-model=\\\"payment.status\\\" class=\\\"nd-input\\\" flex \\nplaceholder=\\\"{{ \\'ORDER.PAYMENT_STATUS\\' | translate}}\\\"><md-option ng-repeat=\\\"pops in vm.purchaseOrderPaymentStatuses\\\" \\nng-value=\\\"pops\\\"><span class=\\\"m-0 {{vm.PURCHASE_ORDER_PAYMENT_STATUSES_COLORS[pops]}}\\\">\\n{{\\'PURCHASE.\\' + vm.PURCHASE_ORDER_PAYMENT_STATUSES[pops] | translate}}</span></md-option></md-select></td><td \\nclass=\\\"text-right\\\"><md-menu ng-if=\\\"!payment.editing\\\" md-position-mode=\\\"target-right target\\\"><md-button \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu($event)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\') ||\\n                         Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\">\\n<md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content><md-menu-item><md-button \\nng-click=\\\"vm.editPayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.update\\')}}\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span>{{\\'PURCHASE.EDIT_PAYMENT\\' | translate}}</span></div></md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button class=\\\"md-warn\\\" ng-click=\\\"vm.deletePayment(payment)\\\" \\nhas-permission=\\\"{{Session.hasPermission(\\'app.inventory.purchases.purchase.payments.delete\\')}}\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\"></md-icon><span>{{\\'PURCHASE.DELETE_PAYMENT\\' | translate}}</span></md-button></md-menu-item>\\n</md-menu-content></md-menu><md-button ng-if=\\\"payment.editing\\\" class=\\\"m-0 md-primary stroked\\\" \\nng-click=\\\"vm.savePayment(payment)\\\" ng-disabled=\\\"vm.checkFormPayment(payment)==null || vm.saving\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.saving\\\" md-diameter=\\\"20px\\\" class=\\\"mh-8\\\">\\n</md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></td></tr></tbody></table><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"mt-30 mb-15 secondary-text\\\" ng-if=\\\"vm.order.payments.length==0\\\" \\ntranslate=\\\"PURCHASES.PAYMENTS_TABLE_EMPTY\\\"></div></div></md-card-content></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/dialogs/summary-dialog/stocktaking-summary-dialog.html\",\"<md-dialog aria-label=\\\"Summary\\\" style=\\\"max-width: 600px\\\"><md-dialog-content><h2 \\ntranslate=\\\"STOCKTAKING.STOCKTAKING_SUMMARY\\\"></h2><h3 class=\\\"secondary-text mb-5\\\">{{vm.getStocktakingInformation()}}\\n</h3><div ng-if=\\\"vm.stocktakingSummaryData.stocktaking.created_at\\\"><span class=\\\"secondary-text\\\" \\ntranslate=\\\"STOCKTAKING.CREATION_DATE\\\">:</span> <span class=\\\"secondary-text\\\">\\n{{vm.stocktakingSummaryData.stocktaking.created_at | date:\\\"dd-MM-yyyy HH:mm\\\"}}</span></div><div \\nid=\\\"stocktaking-summary-dialog\\\" layout=\\\"row\\\" class=\\\"content-card\\\"><div layout=\\\"column\\\" flex><md-list><md-list-item \\nclass=\\\"padding-list-item\\\"><span translate=\\\"STOCKTAKING.TOTAL_PRODUCTS_REGISTERED\\\"></span><div class=\\\"md-secondary\\\">\\n{{vm.stocktakingSummaryData.totalStocktakingOrderProducts}}</div></md-list-item><md-list-item \\nclass=\\\"padding-list-item\\\"><span translate=\\\"STOCKTAKING.TOTAL_PRODUCT_VARIANTS_REGISTERED\\\"></span><div \\nclass=\\\"md-secondary\\\">{{vm.stocktakingSummaryData.totalStocktakingOrderProductVariants}}</div></md-list-item>\\n<md-divider></md-divider><md-list-item class=\\\"padding-list-item\\\"><span translate=\\\"STOCKTAKING.UNITS_BEFORE\\\"></span><div\\n class=\\\"md-secondary\\\">{{vm.stocktakingSummaryData.totalPreviousAmount}}</div></md-list-item><md-list-item \\nclass=\\\"padding-list-item\\\"><span translate=\\\"STOCKTAKING.UNITS_AFTER\\\"></span><div class=\\\"md-secondary\\\">\\n{{vm.stocktakingSummaryData.totalAmount}}</div></md-list-item><md-divider></md-divider><md-list-item \\nclass=\\\"padding-list-item\\\"><span translate=\\\"STOCKTAKING.DIFFERENCE\\\"></span><div class=\\\"md-secondary\\\">\\n{{vm.stocktakingSummaryData.totalAmount - vm.stocktakingSummaryData.totalPreviousAmount}}</div></md-list-item>\\n</md-list><div layout=\\\"column\\\" layout-align=\\\"center start\\\" class=\\\"mb-8\\\"><md-checkbox class=\\\"mv-12\\\" \\nng-model=\\\"vm.resetStock\\\">{{\\'STOCKTAKING.RESET_STOCK\\' | translate }}</md-checkbox></div><div \\nclass=\\\"did-you-know yellow animate-fade-in-out mb-10\\\" ng-if=\\\"vm.resetStock\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"mr-8\\\"><md-icon \\nmd-font-icon=\\\"icon-alert\\\"></md-icon></div>{{\\'STOCKTAKING.RESET_STOCK_MESSAGE\\' | translate}}</div></div><div \\nclass=\\\"did-you-know\\\"><div layout=\\\"column\\\" layout-align=\\\"start start\\\"><div layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-information-outline\\\" class=\\\"blue-fg\\\"></md-icon><p class=\\\"ml-5 mb-0 mt-0\\\" \\ntranslate=\\\"STOCKTAKING.STOCKTAKING_SUMMARY_MSG\\\"></p></div></div></div><md-dialog-actions layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" class=\\\"mv-10 mr-0 pr-0\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" \\nclass=\\\"stroked\\\"></md-button><md-button ng-click=\\\"vm.save()\\\" class=\\\"md-primary md-raised pr-0 no-right-margin\\\" \\ntranslate=\\\"STOCKTAKING.APPLY\\\"></md-button></md-dialog-actions></div></div></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-historic/nd-stocktaking-historic.html\",\"<md-sidenav id=\\\"nd-stocktaking-changes-historic\\\" class=\\\"sidenav md-sidenav-right\\\" md-is-locked-open=\\\"show\\\" \\nmd-component-id=\\\"sidenav\\\" ms-sidenav-helper><md-content class=\\\"content grey-100-bg\\\"><md-card class=\\\"main-card\\\"><div \\nstyle=\\\"display: none\\\">{{lastStocktakingChange = getLastStocktakingChange()}}</div><nd-stocktaking-historic-header \\nstocktaking-change=\\\"getLastStocktakingChange()\\\" ng-if=\\\"showHeader\\\"></nd-stocktaking-historic-header><md-card-content>\\n<div layout=\\\"row\\\"><md-input-container md-no-float class=\\\"nd-search-input md-block\\\" flex layout=\\\"row\\\"><md-icon \\nmd-font-icon=\\\"icon-magnify\\\" class=\\\"icon\\\"></md-icon><input id=\\\"stocktaking-changes-search\\\" \\nng-model=\\\"stocktakingHistoricSearch\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" maxlength=\\\"{{SEARCH_MAX_LENGTH}}\\\" \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\" flex></md-input-container></div><ul layout=\\\"column\\\" \\nclass=\\\"no-margin no-padding stocktaking-changes-list scrollable\\\" ms-scroll><li \\nng-repeat=\\\"(index, stocktakingChange) in previousStocktakingChanges=getPreviousStocktakingChanges(stocktakingHistoricSearch)\\\" \\nclass=\\\"pv-8\\\" ng-class=\\\"{\\'border-bottom\\': index < previousStocktakingChanges.length-1}\\\"><nd-stocktaking-historic-item \\nstocktaking-change=\\\"stocktakingChange\\\"></nd-stocktaking-historic-item></li><li><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"md-primary m-8\\\" ng-click=\\\"loadMore()\\\" ng-disabled=\\\"loading\\\" \\nng-if=\\\"stocktakingHistoricNext\\\">{{\\'CHANGELOGS.LOAD_MORE\\' | translate}}</md-button></div></li></ul></md-card-content>\\n</md-card></md-content></md-sidenav>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-order-product/nd-stocktaking-order-product.html\",\"<div id=\\\"nd-stocktaking-order-product\\\" class=\\\"flex\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"product-header border-top\\\"><img ng-if=\\\"::orderProduct.product_cover_thumbnail\\\" \\nsrc=\\\"{{::orderProduct.product_cover_thumbnail}}\\\"> <a class=\\\"mr-10\\\" tabindex=\\\"-1\\\" \\nhref=\\\"/inventory/products/{{::orderProduct.product.id}}/overview\\\">{{::orderProduct.product_code}}</a><span \\nclass=\\\"mr-10\\\">{{::orderProduct.product_name}}</span><span class=\\\"mr-10 secondary-text\\\"><small>\\n{{::orderProduct.brand_name}} · {{::orderProduct.category_name}} · {{::orderProduct.subcategory_name}}</small> </span>\\n<span flex></span> <span has-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\">\\n{{::orderProduct.previous_amount}}</span><md-icon class=\\\"mh-5 s12\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\" md-font-icon=\\\"icon-arrow-right\\\">\\n</md-icon>{{orderProductVariantByColorAndSize.total}}<md-button tabindex=\\\"-1\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.remove_product\\\" class=\\\"md-icon-button no-margin m-0\\\" \\nng-click=\\\"deleteOrderProductWrapper(orderProduct)\\\" ng-if=\\\"isEditable()\\\"><md-tooltip md-direction=\\\"bottom\\\">\\n{{\\\"STOCKTAKING.DELETE_PRODUCT\\\" | translate}}</md-tooltip><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button>\\n</div><input type=\\\"hidden\\\" autofocus=\\\"true\\\"><table class=\\\"simple\\\"><tr \\nng-repeat=\\\"color in orderProduct.color_variants | orderBy: \\'position\\'\\\"><td class=\\\"border-top auto\\\">\\n{{::color.code}} - {{::color.name}}</td><td class=\\\"border-top text-uppercase text-center small\\\" \\nng-repeat=\\\"size in ::orderProduct.size_variants | orderBy: \\'position\\'\\\" \\nng-init=\\\"orderProductVariant=getOrderProductVariantByColorAndSize(color.id, size.id, color.name, size.name)\\\"><div \\nclass=\\\"margins border border-radius text-uppercase text-center small\\\"><div \\nclass=\\\"border-radius size-header md-hue-2 text-truncate\\\"><span>{{::size.code}}<md-tooltip>{{::size.name}}</md-tooltip>\\n</span></div><div ng-if=\\\"showStocks\\\" class=\\\"border-radius stocks-header\\\" layout=\\\"row\\\"><span class=\\\"stock source\\\" flex \\nng-class=\\\"{\\'danger\\': (sourceStock < orderProductVariant.amount)}\\\">\\n{{orderProductVariantByColorAndSize[color.id][size.id].previous_amount}}</span></div><div><input \\nclass=\\\"border-radius amount\\\" ng-model=\\\"orderProductVariant.amount\\\" \\nng-if=\\\"!orderProduct.manage_uids && session.hasPermission(\\'inventory.stocktakings.stocktaking.products.update_amount\\')\\\" \\nng-model-options=\\\"{ debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.update_amount\\\" \\nng-change=\\\"saveOrderProductVariant(orderProductVariant, color.id)\\\" type=\\\"number\\\" placeholder=\\\"-\\\" \\nng-disabled=\\\"!isEditable()\\\" nd-mute-barcode-callbacks><div \\nng-if=\\\"!session.hasPermission(\\'inventory.stocktakings.stocktaking.products.update_amount\\')\\\" class=\\\"amount mv-5\\\">\\n{{orderProductVariant.amount || 0}}</div><span \\nng-if=\\\"orderProduct.manage_uids && session.hasPermission(\\'inventory.stocktakings.stocktaking.products.update_amount\\')\\\" \\nclass=\\\"m-0 uids-amount cursor-pointer\\\" has-permission=\\\"inventory.stocktakings.stocktaking.products.update_amount\\\" \\nng-click=\\\"showUidsDialog(orderProductVariant, color.name, size.name)\\\">{{orderProductVariant.amount || 0}}</span></div>\\n</div></td><td class=\\\"border-top text-uppercase text-center small\\\"><div \\nclass=\\\"margins border border-radius text-uppercase text-center small grey-background\\\"><div \\nclass=\\\"border-radius size-header md-hue-2 text-truncate\\\"><div><span translate=\\\"STOCKTAKING.TOTAL\\\"></span></div></div>\\n<div ng-if=\\\"showStocks\\\" class=\\\"border-radius stocks-header\\\" layout=\\\"row\\\"><span class=\\\"stock source\\\" flex>\\n{{orderProductVariantByColorAndSize[color.id].totalPrevious}}</span></div><div class=\\\"border-radius amount mt-5 mb-5\\\">\\n<div>{{orderProductVariantByColorAndSize[color.id].total}}</div></div></div></td></tr></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/dialogs/clone-success-dialog/stocktaking-clone-success-dialog.html\",\"<md-dialog style=\\\"max-width: 500px\\\"><md-dialog-content><h2 translate=\\\"STOCKTAKING.CLONE_DONE_DIALOG_TITLE\\\"></h2><div \\nlayout=\\\"row\\\" class=\\\"content-card\\\"><span translate=\\\"STOCKTAKING.CLONE_DONE_DIALOG_MESSAGE\\\"></span></div>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\" class=\\\"mv-10 mr-0 pr-0\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\"></md-button><md-button ng-click=\\\"vm.goToClonedStocktaking()\\\" \\nclass=\\\"md-primary md-raised pr-0 no-right-margin\\\" translate=\\\"STOCKTAKING.GO_TO_CLONED_STOCKTAKING\\\"></md-button>\\n</md-dialog-actions></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-order-product-uid/nd-stocktaking-order-product-uid.html\",\"<div id=\\\"stocktaking-order-product-uid\\\" class=\\\"flex\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"product-header border-top\\\"><img ng-if=\\\"::orderProduct.product_cover_thumbnail\\\" \\nsrc=\\\"{{::orderProduct.product_cover_thumbnail}}\\\"> <a class=\\\"mr-10\\\" tabindex=\\\"-1\\\" \\nhref=\\\"/inventory/products/{{::orderProduct.product.id}}/overview\\\">{{::orderProduct.product_code}}</a><span \\nclass=\\\"mr-10\\\">{{::orderProduct.product_name}}</span><span class=\\\"mr-10 secondary-text\\\"><small>\\n{{::orderProduct.brand_name}} · {{::orderProduct.category_name}} · {{::orderProduct.subcategory_name}}</small> </span>\\n<span flex></span> <span has-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\">\\n{{::orderProduct.previous_amount}}</span><md-icon class=\\\"mh-5 s12\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\" md-font-icon=\\\"icon-arrow-right\\\">\\n</md-icon>{{vm.totalAmount}} <input type=\\\"hidden\\\" autofocus=\\\"true\\\"><md-button ng-if=\\\"isEditable()\\\" \\nclass=\\\"md-icon-button no-margin m-0 cursor-pointer\\\" \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.update_amount\\\" ng-click=\\\"vm.addLot()\\\"><md-icon \\nmd-font-icon=\\\"icon-plus\\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\'PRODUCT.ADD_LOT\\' | translate}}</md-tooltip></md-icon>\\n</md-button><md-button tabindex=\\\"-1\\\" has-permission=\\\"inventory.stocktakings.stocktaking.products.remove_product\\\" \\nclass=\\\"md-icon-button no-margin m-0 cursor-pointer\\\" ng-click=\\\"vm.deleteOrderProductWrapper(orderProduct)\\\" \\nng-if=\\\"isEditable()\\\"><md-tooltip md-direction=\\\"bottom\\\">{{\\\"STOCKTAKING.DELETE_PRODUCT\\\" | translate}}</md-tooltip>\\n<md-icon md-font-icon=\\\"icon-delete\\\"></md-icon></md-button></div><div class=\\\"grid-container\\\" style=\\\"width: 100%\\\"><div \\nui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination ui-grid-resize-columns ui-grid-save-state ui-grid-auto-resize class=\\\"grid\\\" \\nstyle=\\\"height: {{vm.gridHeight}}px\\\"></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/dialogs/import/import.html\",\"<md-dialog aria-label=\\\"Import Transfer\\\" class=\\\"w-300\\\" id=\\\"import-transfer-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30\\\" ng-show=\\\"vm.transfer_order_products.length == 0\\\"><span \\ntranslate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" href=\\\"/assets/files/transfer_order_import.c78e53ce.xlsx\\\" \\ntarget=\\\"_blank\\\">transfer_order_import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"transfer-order-products-uploader\\\" ng-show=\\\"vm.transfer_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Change File</span>\\n</md-button><md-button ng-if=\\\"!product.cover\\\" class=\\\"md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">\\nSet File</span></md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.transfer_order_products.length > 0\\\">\\n{{vm.transfer_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div layout=\\\"row\\\"><md-button \\nng-disabled=\\\"vm.loading || !vm.fileLoaded\\\" ng-if=\\\"vm.transfer_order_products.length == 0 || !vm.fileLoaded\\\" \\nng-click=\\\"vm.uploadFile(true)\\\" class=\\\"md-raised md-primary m-0\\\" translate=\\\"IMPORT.IMPORT\\\" flex></md-button><md-button \\nng-disabled=\\\"vm.loading \\\" ng-if=\\\"vm.transfer_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" \\nclass=\\\"md-raised md-primary m-0\\\" translate=\\\"GENERAL.CLOSE\\\" flex></md-button></div></form></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/dialogs/loading-bar/loading-bar.html\",\"<md-dialog><md-dialog-content><div layout=\\\"column\\\" class=\\\"pb-30\\\"><h2 class=\\\"mb-10 mt-0\\\" translate=\\\"{{vm.title}}\\\"></h2>\\n<p translate=\\\"{{vm.body}}\\\"></p><md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"md-primary\\\"></md-progress-linear>\\n</div></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/dialogs/print/print.html\",\"<md-dialog aria-label=\\\"Import Contacts\\\" class=\\\"w-300\\\" id=\\\"purchase-print-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10 pb-10\\\" \\ntranslate=\\\"GENERAL.PRINT\\\"></h2><md-checkbox ng-model=\\\"vm.showBrand\\\"><span translate=\\\"PRODUCT.BRAND\\\"></span>\\n</md-checkbox><md-checkbox ng-model=\\\"vm.showHsCode\\\"><span translate=\\\"PRODUCT.HARMONISED_CODE\\\"></span></md-checkbox>\\n<md-checkbox ng-model=\\\"vm.showComposition\\\"><span translate=\\\"PRODUCT.COMPOSITION\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.showAttributes\\\"><span translate=\\\"PRODUCT.ATTRIBUTES\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.printImages\\\"><span translate=\\\"PURCHASE.PRINT_IMAGES\\\"></span></md-checkbox><md-checkbox \\nng-model=\\\"vm.thermalPrinter\\\"><span translate=\\\"TRANSFER.THERMAL_PRINTER_VERSION\\\"></span></md-checkbox><div layout=\\\"row\\\">\\n<md-button class=\\\"stroked\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" translate=\\\"GENERAL.CANCEL\\\" flex></md-button>\\n<md-button ng-click=\\\"vm.print()\\\" class=\\\"md-raised md-primary\\\" translate=\\\"GENERAL.PRINT\\\" flex></md-button></div></form>\\n</md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/directives/transfer-order-actions/nd-transfer-order-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-purchase-actions\\\"><md-card-title-text class=\\\"h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" type=\\\"type\\\"></nd-add-order-product></div><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular class=\\\"mh-8\\\" md-diameter=\\\"20px\\\" \\nng-if=\\\"changed || saving || changingStatus\\\"></md-progress-circular><div \\nng-if=\\\"vm.transfer.is_replenishment && vm.screenIsBig()\\\"><md-button class=\\\"md-warn stroked\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.cancel\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.CANCEL\\\">Cancel</md-button><md-button class=\\\"md-primary stroked\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" ng-click=\\\"vm.allocate()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\" \\ntranslate=\\\"TRANSFER.ORDER_AND_ALLOCATE\\\"></md-button><md-button class=\\\"md-primary md-raised\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" ng-click=\\\"vm.order()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\" \\ntranslate=\\\"TRANSFER.ORDER\\\">Confirm Draft</md-button></div><div ng-if=\\\"!vm.transfer.is_replenishment\\\"><md-button \\nclass=\\\"md-warn stroked\\\" data-test-id=\\\"transfer-button-cancel-order-allocation-shipping\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.cancel\\\" ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status > vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT && vm.transfer.status < vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_RECEPTION_DRAFT\\\">\\n<span ng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.CANCEL_ORDER\\\"></span> <span \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PREPARED\\\" \\ntranslate=\\\"TRANSFER.CANCEL_ALLOCATION\\\"></span> <span \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_SHIPPED\\\" \\ntranslate=\\\"TRANSFER.CANCEL_SHIPPING\\\"></span></md-button><md-button class=\\\"stroked md-primary\\\" \\ndata-test-id=\\\"transfer-button-allocate\\\" has-permission=\\\"inventory.transfers.transfer.products.prepare\\\" \\nng-click=\\\"vm.allocate()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status <= vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.ALLOCATE\\\">Allocate</md-button><md-button class=\\\"md-raised md-primary\\\" \\ndata-test-id=\\\"transfer-button-ship\\\" has-permission=\\\"inventory.transfers.transfer.products.ship\\\" \\nng-click=\\\"vm.prepareAndShip()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status <= vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\" \\ntranslate=\\\"TRANSFER.SHIP\\\">Ship</md-button><md-button class=\\\"md-raised md-primary\\\" \\nhas-permission=\\\"inventory.transfers.transfer.products.ship\\\" ng-click=\\\"vm.ship()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PREPARED\\\" \\ntranslate=\\\"TRANSFER.SHIP\\\">Ship</md-button><md-button class=\\\"md-raised md-primary\\\" \\ndata-test-id=\\\"transfer-button-recieve\\\" has-permission=\\\"inventory.transfers.transfer.products.receive\\\" \\nng-click=\\\"vm.receive()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_SHIPPED\\\" \\ntranslate=\\\"TRANSFER.RECEIVE\\\">Receive</md-button></div><md-menu class=\\\"mr-5\\\"><md-button aria-label=\\\"more\\\" \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu()\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"3\\\"><md-menu-item has-permission=\\\"inventory.transfers.transfer.products.cancel\\\" \\nng-if=\\\"!vm.screenIsBig() && vm.transfer.is_replenishment && vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_PENDING_TO_PREPARE\\\">\\n<md-button ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-cancel\\\"></md-icon><span \\nclass=\\\"text-capitalized\\\" translate=\\\"TRANSFER.CANCEL\\\"></span></md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" \\nng-if=\\\"!vm.screenIsBig() && vm.transfer.is_replenishment && vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\">\\n<md-button ng-click=\\\"vm.allocate()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-arrow-right\\\"></md-icon>\\n<span class=\\\"text-capitalized\\\" translate=\\\"TRANSFER.ORDER_AND_ALLOCATE\\\"></span></md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.prepare\\\" \\nng-if=\\\"!vm.screenIsBig() && vm.transfer.is_replenishment && vm.transfer.status == vm.TRANSFER_ORDER_STATUSES_REVERSE.TRANSFER_ORDER_STATUS_DRAFT\\\">\\n<md-button ng-click=\\\"vm.order()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-arrow-right\\\"></md-icon>\\n<span class=\\\"text-capitalized\\\" translate=\\\"TRANSFER.ORDER\\\"></span></md-button></md-menu-item><md-divider \\nng-if=\\\"!vm.screenIsBig()\\\"></md-divider><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.add_product\\\" ng-if=\\\"vm.transfer.status == 1 || vm.editable\\\">\\n<md-button ng-click=\\\"vm.importProductsDialog()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\">\\n</md-icon>{{\\'IMPORT.IMPORT_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.printOrder()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon><span translate=\\\"PURCHASE.PRINT\\\"></span>\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.importToLabelsGenerator()\\\" \\nng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><span \\ntranslate=\\\"LABELS_GENERATOR.IMPORT_TO_LABELS_GENERATOR\\\"></span></md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.duplicate()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\">\\n</md-icon><span translate=\\\"TRANSFER.DUPICATE\\\"></span></md-button></md-menu-item></md-menu-content></md-menu></div>\\n</md-card-title-text><md-card-title-text class=\\\"border-top h-50 pr-20\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\">\\n<div flex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-search-product-in-order flex=\\\"100\\\" layout=\\\"row\\\">\\n</nd-search-product-in-order><nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\">\\n</nd-order-product-visualization-options></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals \\norder=\\\"order\\\" show-cost=\\\"false\\\" type=\\\"type\\\" show-taxes=\\\"false\\\"></nd-get-order-totals></div></md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/transfer/directives/transfer-order-delivery-actions/nd-transfer-order-delivery-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-purchase-actions\\\"><md-card-title-text class=\\\"h-50 pr-5\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" show-dialog-when-adding=\\\"vm.isReplenishment()\\\" \\ntype=\\\"type\\\"></nd-add-order-product></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular \\nclass=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"changed || saving || changingStatus\\\"></md-progress-circular><md-button \\nclass=\\\"md-warn stroked m-5\\\" data-test-id=\\\"transfer-delivery-button-cancel\\\" \\nhas-permission=\\\"inventory.transfers.transfer.delivery.cancel\\\" ng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.transferOrderDelivery.status > 1\\\"><span ng-if=\\\"vm.transferOrderDelivery.status == 2\\\" \\ntranslate=\\\"TRANSFER.CANCEL_PREPARATION\\\"></span> <span ng-if=\\\"vm.transferOrderDelivery.status == 3\\\" \\ntranslate=\\\"TRANSFER.CANCEL_SHIPPING\\\"></span> <span ng-if=\\\"vm.transferOrderDelivery.status == 4\\\" \\ntranslate=\\\"TRANSFER.CANCEL_RECEPTION\\\"></span> <span ng-if=\\\"vm.transferOrderDelivery.status == 5\\\" \\ntranslate=\\\"TRANSFER.CANCEL_CONFIRMATION\\\"></span></md-button><md-button class=\\\"md-raised md-primary m-5\\\" \\ndata-test-id=\\\"transfer-replenish-button-prepare\\\" has-permission=\\\"inventory.transfers.transfer.delivery.prepare\\\" \\nng-click=\\\"vm.prepare()\\\" ng-disabled=\\\"vm.changingStatus\\\" ng-if=\\\"vm.transferOrderDelivery.status==1\\\" \\ntranslate=\\\"TRANSFER.PREPARE\\\">PREPARE</md-button><md-button class=\\\"md-raised md-primary m-5\\\" \\ndata-test-id=\\\"transfer-replenish-button-ship\\\" has-permission=\\\"inventory.transfers.transfer.delivery.ship\\\" \\nng-click=\\\"vm.ship()\\\" ng-disabled=\\\"vm.changingStatus\\\" ng-if=\\\"vm.transferOrderDelivery.status==2\\\" \\ntranslate=\\\"TRANSFER.SHIP\\\">SHIP</md-button><nd-menu-button md-class=\\\"\\'md-primary md-raised\\'\\\" \\nng-if=\\\"vm.transferOrderDelivery.status==3\\\"><md-button main-action ng-click=\\\"vm.receiveWithEmptyDeliveryOption(true)\\\">\\n<div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><div translate=\\\"{{vm.getReceivedWithMainOptionText()}}\\\" \\nclass=\\\"mr-8\\\"></div></div></md-button><md-button action ng-click=\\\"vm.receiveWithEmptyDeliveryOption(false)\\\"><div flex \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><div translate=\\\"{{vm.getReceivedWithSecondaryOptionText()}}\\\" class=\\\"mr-8\\\">\\n</div></div></md-button></nd-menu-button><md-button class=\\\"md-raised md-primary m-5\\\" \\ndata-test-id=\\\"transfer-replenish-button-confirm\\\" has-permission=\\\"inventory.transfers.transfer.delivery.confirm\\\" \\nng-click=\\\"vm.confirm()\\\" ng-disabled=\\\"vm.changingStatus\\\" ng-if=\\\"vm.transferOrderDelivery.status==4\\\" \\ntranslate=\\\"PURCHASE.CONFIRM\\\"></md-button><md-menu class=\\\"mr-5\\\"><md-button aria-label=\\\"more\\\" class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdOpenMenu()\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content width=\\\"3\\\">\\n<md-menu-item><md-button ng-click=\\\"vm.printDelivery()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon><span translate=\\\"PURCHASE.PRINT\\\"></span>\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.downloadExcel()\\\" \\nng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon md-font-icon=\\\"icon-file-excel\\\"></md-icon><span \\ntranslate=\\\"SALE.DOWNLOAD_EXCEL\\\"></span></md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.transfers.transfer.products.add_product\\\" \\nng-if=\\\"vm.transferOrderDelivery.status == 1 || vm.transferOrderDelivery.is_editable\\\"><md-button \\nng-click=\\\"vm.importProductsDialog()\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\"></md-icon>\\n{{\\'IMPORT.IMPORT_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.importToLabelsGenerator()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><span translate=\\\"LABELS_GENERATOR.IMPORT_TO_LABELS_GENERATOR\\\"></span>\\n</md-button></md-menu-item><md-menu-item ng-if=\\\"!order.is_replenishment\\\"><md-button ng-click=\\\"vm.duplicate()\\\" \\nng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\"></md-icon><span \\ntranslate=\\\"TRANSFER.DUPICATE\\\"></span></md-button></md-menu-item></md-menu-content></md-menu></div></md-card-title-text>\\n<md-card-title-text class=\\\"border-top h-50 pr-20\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-search-product-in-order layout=\\\"row\\\" flex=\\\"100\\\">\\n</nd-search-product-in-order><nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\">\\n</nd-order-product-visualization-options></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals \\norder=\\\"order\\\" show-cost=\\\"false\\\" type=\\\"type\\\" show-taxes=\\\"false\\\"></nd-get-order-totals></div></md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/dialogs/delete-warehouse/delete-warehouse-dialog.html\",\"<md-dialog class=\\\"w-400\\\"><md-dialog-content layout=\\\"column\\\" ms-scroll layout-wrap><h2 \\ntranslate=\\\"WAREHOUSE.DELETE_WAREHOUSE\\\"></h2><span translate=\\\"WAREHOUSE.DELETE_WAREHOUSE_MSG\\\"></span>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.closeDialog()\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-click=\\\"vm.confirm()\\\" \\ntranslate=\\\"WAREHOUSE.DELETE_WAREHOUSE\\\" class=\\\"md-warn md-raised\\\"></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/dialogs/stock-location-dialog/stock-location-dialog.html\",\"<md-dialog style=\\\"width: 550px\\\"><form ng-cloak name=\\\"stockLocationForm\\\"><md-dialog-content><h2 \\ntranslate=\\\"WAREHOUSE.NEW_LOCATION\\\" ng-if=\\\"!vm.stockLocation.id\\\" class=\\\"mb-32\\\"></h2><h2 \\ntranslate=\\\"WAREHOUSE.EDIT_LOCATION\\\" ng-if=\\\"vm.stockLocation.id\\\" class=\\\"mb-32\\\"></h2><md-input-container flex \\nclass=\\\"md-block mb-0\\\"><md-icon class=\\\"icon icon-code-tags name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.stockLocation.location\\\" placeholder=\\\"{{\\'WAREHOUSE.LOCATION\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" type=\\\"text\\\" required md-auto-focus>\\n</md-input-container><md-input-container flex class=\\\"md-block mb-0\\\"><md-icon \\nclass=\\\"icon icon-sort-numeric name font-size-24\\\"></md-icon><input ng-model=\\\"vm.stockLocation.position\\\" \\nplaceholder=\\\"{{\\'CONFIGURATION.POSITION\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" step=\\\"1\\\" type=\\\"number\\\" \\nname=\\\"position\\\" ng-pattern=\\\"/^\\\\d+$/\\\"><div ng-messages=\\\"stockLocationForm.position.$error\\\" \\nng-if=\\\"stockLocationForm.position.$touched || stockLocationForm.$submitted\\\"><div ng-message=\\\"pattern\\\" \\nstyle=\\\"color: red\\\">Solo se permiten números enteros.</div></div></md-input-container><md-input-container flex \\nclass=\\\"md-block mb-0\\\"><md-icon class=\\\"icon icon-barcode name font-size-24\\\"></md-icon><input \\nng-model=\\\"vm.stockLocation.barcode\\\" placeholder=\\\"{{\\'BARCODES.BARCODE\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nhas-permission-else-disable=\\\"app.inventory.warehouses.warehouse.stock-locations\\\" type=\\\"text\\\" name=\\\"barcode\\\">\\n</md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nhas-permission=\\\"app.inventory.warehouses.warehouse.stock-locations\\\"><md-button ng-click=\\\"vm.deleteLocation()\\\" \\nng-if=\\\"vm.stockLocation.id\\\" class=\\\"md-warn stroked\\\" translate=\\\"GENERAL.DELETE\\\"></md-button><span flex></span><md-button\\n ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" nd-track-click=\\\"cancel brand\\\">Cancel</md-button>\\n<md-button type=\\\"submit\\\" class=\\\"md-primary md-raised\\\" translate=\\\"GENERAL.SAVE\\\" ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"stockLocationForm.$invalid || vm.isSaving\\\"></md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/warehouse/dialogs/stock-location-search-dialog/stock-location-search-dialog.html\",\"<md-dialog class=\\\"stock-location-search-dialog\\\"><md-dialog-content><h2>{{ \\\"WAREHOUSE.ADD_LOCATION\\\" | translate }}</h2>\\n<div layout=\\\"column\\\"><span class=\\\"secondary-text mb-20\\\" translate=\\\"WAREHOUSE.STOCK_LOCATION_DIALOG_SUBTITLE\\\" \\ndata-translate-values=\\\"{\\'product_name\\': vm.getProductVariantName()}\\\"></span><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mb-20 product-variant-item-container\\\"><div \\nng-repeat=\\\"stock_location in vm.productVariant.stock_locations\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nclass=\\\"product-variant-item mr-5\\\"><span class=\\\"md-caption\\\">{{stock_location.location}}</span><md-button \\nclass=\\\"md-icon-button no-margin no-padding\\\" ng-click=\\\"vm.removeStockLocation(stock_location)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><span class=\\\"secondary-text\\\" \\nng-if=\\\"vm.productVariant.stock_locations.length === 0\\\">{{ \\\"WAREHOUSE.EMPTY_STOCK_LOCATIONS_HINT\\\" | translate }}</span>\\n</div><md-input-container md-no-float ng-if=\\\"!vm.loading\\\" class=\\\"nd-search-input\\\"><md-icon md-font-icon=\\\"icon-magnify\\\" \\nclass=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.search\\\" type=\\\"text\\\" ng-model-options=\\\"{debounce:200}\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" translate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container></div>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-if=\\\"vm.loading\\\" class=\\\"h-180\\\"><md-progress-circular>\\n</md-progress-circular></div><div class=\\\"stock-location-dialog-scroll mt-20\\\" style=\\\"overflow-y: auto\\\"><div flex \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\" ng-if=\\\"vm.stockLocations.length == 0 && !vm.loading\\\"><span \\nclass=\\\"secondary-text\\\" ng-if=\\\"vm.search\\\" translate=\\\"WAREHOUSE.NO_STOCK_LOCATIONS_FOUND_WITH_SEARCH\\\"></span> <span \\nclass=\\\"secondary-text\\\" ng-if=\\\"!vm.search\\\" translate=\\\"WAREHOUSE.NO_STOCK_LOCATIONS_FOUND\\\"></span></div><div \\nng-repeat=\\\"location in vm.stockLocations\\\"><md-checkbox ng-checked=\\\"vm.isLocationSelected(location)\\\" \\nng-click=\\\"vm.toggleLocation(location)\\\">{{location.location}}</md-checkbox></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-if=\\\"vm.loadingMoreData\\\" class=\\\"h-60\\\"><md-progress-circular md-diameter=\\\"30\\\">\\n</md-progress-circular></div></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><span flex></span><md-button \\nng-click=\\\"vm.close()\\\" class=\\\"stroked\\\" translate=\\\"GENERAL.CANCEL\\\"></md-button><md-button \\nng-click=\\\"vm.stockLocationDialog()\\\" class=\\\"stroked md-primary\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nclass=\\\"mr-5\\\" md-font-icon=\\\"icon-plus\\\"></md-icon>{{\\'WAREHOUSE.NEW_LOCATION\\' | translate}}</div></md-button><md-button \\nclass=\\\"md-primary md-raised\\\" ng-click=\\\"vm.save()\\\" translate=\\\"GENERAL.SAVE\\\"></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/goals/dialogs/sales-goal-detail/sales-goal-detail-dialog.html\",\"<md-dialog class=\\\"sales-goal-detail-dialog\\\" aria-label=\\\"New Message\\\"><md-toolbar class=\\\"md-primary md-hue-2\\\"><div \\nclass=\\\"md-toolbar-tools\\\"><span class=\\\"title\\\">{{vm.salesGoal.title}}</span> <span flex></span><md-button \\nclass=\\\"edit-sales-goal-button md-fab md-warn\\\" ng-click=\\\"vm.editSalesGoal(vm.salesGoal)\\\" aria-label=\\\"Edit sales goal\\\" \\ntranslate translate-attr-aria-label=\\\"GOALS.EDIT_SALES_GOAL\\\"><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon></md-button>\\n</div></md-toolbar><md-dialog-content ms-scroll><div class=\\\"sales-goal-details\\\" layout=\\\"column\\\"><div \\nclass=\\\"sales-goal-detail-row\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-icon md-font-icon=\\\"icon-clock\\\"></md-icon><div\\n layout=\\\"column\\\" flex><span class=\\\"h4\\\">{{vm.salesGoal.start.format(\\'MMMM Do YYYY, h:mm:ss a\\')}} <span \\nng-if=\\\"vm.salesGoal.end\\\">-</span> {{vm.salesGoal.end.format(\\'MMMM Do YYYY, h:mm:ss a\\')}}</span> <span \\nclass=\\\"secondary-text\\\">{{vm.salesGoal.repeat || \\'Does not repeat\\'}}</span></div></div></div></md-dialog-content>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/goals/dialogs/sales-goal-form/sales-goal-form-dialog.html\",\"<md-dialog class=\\\"sales-goal-form-dialog\\\" aria-label=\\\"New Message\\\"><form name=\\\"salesGoalForm\\\" class=\\\"md-inline-form\\\" \\nnovalidate><md-dialog-content ms-scroll><h2>{{vm.dialogTitle}}</h2><p class=\\\"secondary-text mb-32\\\">\\n{{vm.salesGoal.start | date: \\'mediumDate\\'}}</p><div flex layout=\\\"column\\\"><md-input-container class=\\\"w-300 m-0\\\"><label>\\n{{\\'GOALS.GOAL\\' | translate}} ({{vm.getCurrency() | currencyCharacter}})</label><input name=\\\"goal\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"sale.goals.update\\\" ng-model=\\\"vm.salesGoal.goal\\\" required autofocus md-autofocus><div \\nng-messages=\\\"salesGoalForm.goal.$error\\\" ng-show=\\\"salesGoalForm.goal.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\">\\n<span translate=\\\"GOALS.ERRORS.TITLE_REQUIRED\\\">Title field is required</span></div></div></md-input-container>\\n<md-input-container class=\\\"w-300 m-0\\\"><label translate=\\\"GOALS.WAREHOUSE\\\">Warehouse</label><md-select name=\\\"warehouse\\\" \\nng-model=\\\"vm.salesGoal.warehouse\\\" required><md-option ng-repeat=\\\"warehouse in vm.warehouses\\\" ng-value=\\\"warehouse.id\\\">\\n{{warehouse.name}}</md-option><div ng-messages=\\\"salesGoalForm.warehouse.$error\\\" \\nng-show=\\\"salesGoalForm.warehouse.$touched\\\" role=\\\"alert\\\"><div ng-message=\\\"required\\\"><span \\ntranslate=\\\"GOALS.ERRORS.TITLE_REQUIRED\\\">Title field is required</span></div></div></md-select></md-input-container>\\n</div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" layout-align=\\\"space-between center\\\"><md-button \\nclass=\\\"md-icon-button\\\" has-permission=\\\"sale.goals.delete\\\" ng-if=\\\"vm.salesGoal.id\\\" ng-click=\\\"vm.removeSalesGoal()\\\" \\naria-label=\\\"Delete\\\" translate translate-attr-aria-label=\\\"GOALS.DELETE\\\"><md-icon md-font-icon=\\\"icon-delete\\\"></md-icon>\\n<md-tooltip><span translate=\\\"GOALS.DELETE\\\">Delete</span></md-tooltip></md-button><span flex></span><md-button \\nng-click=\\\"vm.closeDialog()\\\" aria-label=\\\"CANCEL\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" \\ntranslate-attr-aria-label=\\\"GENERAL.CANCEL\\\">CANCEL</md-button><md-button ng-click=\\\"vm.saveSalesGoal()\\\" \\nhas-permission=\\\"sale.goals.create,sale.goals.update\\\" class=\\\"md-primary md-raised\\\" aria-label=\\\"SAVE\\\" \\nng-disabled=\\\"salesGoalForm.$invalid || (vm.type == \\'add\\' && salesGoalForm.$pristine) || vm.saving\\\" \\ntranslate=\\\"GOALS.SAVE\\\" translate-attr-aria-label=\\\"GOALS.SAVE\\\">SAVE</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/registers/dialogs/cash-counter/cash-counter-dialog.html\",\"<md-dialog><md-dialog-content><h2 class=\\\"md-title\\\">{{\\'REGISTER_CLOSURE.MONEY_COUNTER\\' |translate}}</h2><div \\nlayout=\\\"row\\\"><div layout=\\\"column\\\" class=\\\"border-right\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-repeat=\\\"bill in vm.bills\\\"><md-button class=\\\"md-primary\\\" ng-click=\\\"bill.amount = bill.amount  + 1\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><img ng-src=\\\"{{bill.image}}\\\" class=\\\"bill-icon\\\"> <span class=\\\"w-20\\\">{{bill.value}}</span>\\n</div></md-button><input class=\\\"nd-input text-right w-60\\\" type=\\\"number\\\" ng-model=\\\"bill.amount\\\"> <span \\nclass=\\\"w-75 ml-8\\\">{{bill.amount * bill.value |price}} {{vm.currencyCharacter}}</span></div></div><div layout=\\\"column\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-repeat=\\\"coin in vm.coins\\\"><md-button class=\\\"md-primary\\\" \\nng-click=\\\"coin.amount = coin.amount  + 1\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><img ng-src=\\\"{{coin.image}}\\\" \\nclass=\\\"coin-icon\\\"> <span class=\\\"w-20\\\">{{coin.value}}</span></div></md-button><input class=\\\"nd-input text-right w-60\\\" \\ntype=\\\"number\\\" ng-model=\\\"coin.amount\\\"> <span class=\\\"w-75 ml-8\\\">\\n{{coin.amount * coin.value |price}} {{vm.currencyCharacter}}</span></div></div></div></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\"><h2 class=\\\"md-title\\\"><span class=\\\"mr-8\\\">{{\\'GENERAL.TOTAL\\' |translate}}:</span> <strong>\\n{{vm.getTotal() |price}} {{vm.currencyCharacter}}</strong></h2><span flex></span><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.cancel()\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button class=\\\"md-primary md-raised\\\" \\nng-click=\\\"vm.save()\\\">{{\\'GENERAL.SAVE\\' | translate}}</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/registers/dialogs/close-register/close-register-dialog.html\",\"<md-dialog aria-label=\\\"Close Register\\\" id=\\\"close-register-dialog\\\" class=\\\"w-500\\\"><md-dialog-content class=\\\"p-0\\\"><div \\nflex class=\\\"h2 pv-24 ph-32\\\">\\n{{\\'REGISTER_CLOSURE.CLOSE_REGISTER_NAME\\' | translate: { register: vm.registerActivity.register.code } }}</div><div \\nng-include=\\\"\\'app/main/apps/sale/views/register-closure/subviews/payment-methods-table.html\\'\\\"></div><table \\nclass=\\\"simple\\\" flex><thead><tr><th colspan=\\\"2\\\">{{\\'GIFT_CARDS.VOUCHERS_AND_GIFT_CARDS\\' | translate}}</th></tr></thead>\\n<tbody ng-include=\\\"\\'app/main/apps/sale/views/register-closure/subviews/gift-cards-tbody.html\\'\\\" class=\\\"full-width\\\">\\n</tbody></table><div ng-include=\\\"\\'app/main/apps/sale/views/register-closure/subviews/cash-movements-table.html\\'\\\"></div>\\n<table class=\\\"simple\\\" flex><thead><tr><th colspan=\\\"2\\\">{{\\'REGISTER_CLOSURE.CASH_BALANCE\\' | translate}}</th></tr></thead>\\n<tbody><tr><td>{{\\'REGISTER_CLOSURE.TO_REMOVE\\' | translate: {amount: vm.cashFund, currency: vm.currencyCharacter} }}\\n</td><td class=\\\"text-right nowrap\\\">{{vm.cashToRemove | price}} {{vm.currencyCharacter}}</td></tr><tr><td>\\n{{\\'REGISTER_CLOSURE.CASH_FUND\\' | translate}}</td><td><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><input \\nclass=\\\"text-right nd-input w-100\\\" ng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" \\nng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" ng-disabled=\\\"vm.saving\\\" ng-model=\\\"vm.cashFund\\\" \\nng-change=\\\"vm.cashFundChanged()\\\" type=\\\"number\\\"> <span class=\\\"ml-5\\\">{{vm.currencyCharacter}}</span></div></td></tr><tr>\\n<td>{{\\'REGISTER_CLOSURE.BALANCE_POSTED\\' | translate}}</td><td><div layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><md-button class=\\\"md-icon-button\\\" ng-if=\\\"vm.registerActivity.currency === \\'EUR\\'\\\" \\nng-disabled=\\\"vm.saving\\\" ng-click=\\\"vm.openCashCounter()\\\"><md-tooltip>\\n{{\\'REGISTER_CLOSURE.OPEN_MONEY_COUNTER\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-register.25ab8937.svg\\\"></md-icon></md-button><input \\nclass=\\\"text-right nd-input w-100\\\" ng-disabled=\\\"vm.saving\\\" ng-model=\\\"vm.balancePosted\\\" \\nng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" ng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" \\nng-change=\\\"vm.balancePostedChanged()\\\" type=\\\"number\\\"> <span class=\\\"ml-5\\\">{{vm.currencyCharacter}}</span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\" ng-if=\\\"vm.balancePosted != vm.balancePostedExpected\\\" \\nng-class=\\\"{\\'red-fg\\': vm.balancePosted < vm.balancePostedExpected}\\\">\\n{{\\'REGISTER_CLOSURE.UNBALANCE\\' | translate}} {{vm.registerActivity.unbalance | price}} {{vm.currencyCharacter}}</div>\\n</div></td></tr><tr><td colspan=\\\"2\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nmd-font-icon=\\\"icon-comment-processing-outline\\\" class=\\\"icon mr-8\\\"></md-icon><input ng-model=\\\"vm.closureNotes\\\" \\nng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" ng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" flex \\nng-disabled=\\\"vm.saving\\\" class=\\\"nd-input p-5\\\" placeholder=\\\"{{\\'REGISTER_CLOSURE.NOTES_OR_COMMENTS\\' | translate}}\\\"></div>\\n</td></tr></tbody></table></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\nclass=\\\"stroked\\\" ng-disabled=\\\"vm.saving\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button \\nid=\\\"test-apply-closereg-button\\\" ng-click=\\\"vm.closeRegister()\\\" ng-disabled=\\\"vm.saving\\\" class=\\\"md-primary md-raised\\\" \\ntranslate=\\\"SALES.CLOSE_REGISTER\\\">Close register</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/registers/dialogs/new-register/new-register-dialog.html\",\"<md-dialog aria-label=\\\"New Register\\\" class=\\\"wb-400\\\"><form ng-cloak name=\\\"registerForm\\\"><md-dialog-content><h2 \\nclass=\\\"mb-30\\\" ng-if=\\\"!vm.register.id\\\" translate=\\\"REGISTERS.NEW_REGISTER\\\">New Register</h2><h2 class=\\\"mb-30\\\" \\nng-if=\\\"vm.register.id\\\" translate=\\\"REGISTERS.EDIT_REGISTER\\\">New Register</h2><div layout=\\\"row\\\" layout-wrap><div \\nflex=\\\"50\\\" layout=\\\"row\\\" class=\\\"pr-16\\\"><md-input-container flex class=\\\"no-errors-spacer\\\"><input \\nng-model=\\\"vm.register.code\\\" ng-disabled=\\\"vm.saving\\\" required placeholder=\\\"{{\\'GENERAL.CODE\\' | translate}}\\\" \\nautocomplete=\\\"off\\\"></md-input-container></div><div layout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-16 no-errors-spacer\\\">\\n<md-input-container flex class=\\\"mb-0 md-icon-float md-icon-right\\\"><input \\nng-model=\\\"vm.register.printer_characters_per_line\\\" ng-disabled=\\\"vm.saving\\\" type=\\\"number\\\" required \\nplaceholder=\\\"{{\\'REGISTERS.TICKET_WIDTH\\' | translate}}\\\" autocomplete=\\\"off\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\" class=\\\"secondary-text cursor-pointer\\\" \\nng-click=\\\"vm.printWidthDiscover()\\\"><md-tooltip>{{\\'REGISTERS.START_TICKET_WIDTH_TEST\\' | translate}}</md-tooltip>\\n</md-icon></md-input-container></div><div flex=\\\"100\\\" layout=\\\"row\\\" class=\\\"pr-16\\\"><md-input-container flex=\\\"50\\\" \\nclass=\\\"md-icon-float md-icon-right\\\"><input type=\\\"{{vm.showPassword ? \\'text\\' : \\'password\\'}}\\\" name=\\\"password\\\" \\nng-disabled=\\\"vm.saving\\\" maxlength=\\\"4\\\" ng-pattern=\\\"/^[0-9]{4}$/\\\" ng-model=\\\"vm.register.open_drawer_pin\\\" \\nplaceholder=\\\"{{\\'REGISTERS.OPEN_DRAWER_PIN\\' | translate}}\\\"><md-icon md-font-icon=\\\"icon-eye\\\" \\nclass=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = true\\\" ng-if=\\\"!vm.showPassword\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-eye-off\\\" class=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.showPassword = false\\\" \\nng-if=\\\"vm.showPassword\\\"></md-icon><div class=\\\"secondary-text\\\" translate=\\\"REGISTERS.IF_EMPTY_NOT_REQUEST_PIN\\\"></div>\\n</md-input-container></div></div><h3 flex=\\\"100\\\" class=\\\"mt-32\\\" translate=\\\"REGISTERS.SERIAL_NUMBER_TYPES_CONFIGURATION\\\">\\n</h3><div layout=\\\"row\\\" layout-wrap><div flex=\\\"50\\\" layout=\\\"row\\\" class=\\\"pr-16\\\"><md-input-container flex><label \\ntranslate=\\\"REGISTERS.POS_ORDER_COUNTER\\\"></label><md-select ng-model=\\\"vm.register.serial_number_type\\\" \\nng-disabled=\\\"vm.saving\\\" required><md-select-header><input ng-model=\\\"vm.serialNumberTypeSearch\\\" type=\\\"search\\\" \\nplaceholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" class=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\">\\n</md-select-header><md-option \\nng-repeat=\\\"serialNumberType in (vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_POS_ORDER | filter: { name: vm.serialNumberTypeSearch })\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option><md-option ng-click=\\\"vm.createNewSerialNumberType()\\\" class=\\\"border-top\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary\\\" class=\\\"mr-5\\\"></md-icon><span \\nclass=\\\"blue-fg\\\">{{\\'REGISTERS.CREATE_A_NEW_SERIAL_NUMBER_TYPE\\' | translate}}</span></div></md-option></md-select><div \\nclass=\\\"md-errors-spacer\\\"></div></md-input-container></div><div flex=\\\"50\\\" layout=\\\"row\\\" class=\\\"pr-16\\\"><md-input-container\\n flex><label translate=\\\"REGISTERS.POS_ORDER_DEVOLUTION_COUNTER\\\"></label><md-select \\nng-model=\\\"vm.register.pos_order_devolution_serial_number_type\\\" \\nng-change=\\\"vm.posOrderDevolutionSerialNumberTypeChanged()\\\" ng-disabled=\\\"vm.saving\\\"><md-select-header><input \\nng-model=\\\"vm.serialNumberTypeDevolutionSearch\\\" type=\\\"search\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\" \\nclass=\\\"md-select-header-input\\\" ng-keydown=\\\"$event.stopPropagation()\\\"></md-select-header><md-option ng-value=\\\"null\\\">\\n{{\\'REGISTERS.SAME_THAN_POS_ORDER_COUNTER\\' | translate}}</md-option><md-option \\nng-repeat=\\\"serialNumberType in (vm.serialNumberTypes | serialNumberTypeFilter: vm.SERIAL_NUMBER_TYPES.SERIAL_NUMBER_TYPE_POS_ORDER_DEVOLUTION | filter: { name: vm.serialNumberTypeDevolutionSearch })\\\" \\nng-value=\\\"serialNumberType.id\\\"><nd-full-serial-number-type value=\\\"serialNumberType\\\"></nd-full-serial-number-type>\\n</md-option><md-option ng-click=\\\"vm.createNewSerialNumberType()\\\" class=\\\"border-top\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary\\\" class=\\\"mr-5\\\"></md-icon><span \\nclass=\\\"blue-fg\\\">{{\\'REGISTERS.CREATE_A_NEW_SERIAL_NUMBER_TYPE\\' | translate}}</span></div></md-option></md-select><div \\nclass=\\\"md-errors-spacer\\\"></div></md-input-container></div></div><h3 flex=\\\"100\\\" class=\\\"mt-32\\\" \\ntranslate=\\\"REGISTERS.PAYMENT_METHODS_CONFIGURATION\\\"></h3><div layout=\\\"row\\\" layout-wrap><div flex=\\\"50\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"pr-16\\\"><md-checkbox ng-model=\\\"vm.register.filter_payment_methods\\\" class=\\\"m-0\\\" \\nng-disabled=\\\"vm.saving\\\">{{\\'REGISTERS.FILTER_PAYMENT_METHODS\\' | translate }}</md-checkbox></div><div flex=\\\"50\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pr-16\\\"><md-input-container flex><md-select \\nng-model=\\\"vm.register.payment_methods\\\" name=\\\"paymentMethods\\\" \\nng-change=\\\"vm.setPaymentMethodAlreadyLinkedValidity(true)\\\" \\nng-disabled=\\\"vm.saving || !vm.register.filter_payment_methods\\\" \\nplaceholder=\\\"{{\\'REGISTERS.SELECT_PAYMENT_METHODS\\' | translate}}\\\" multiple=\\\"multiple\\\" flex><md-option \\nng-repeat=\\\"paymentMethod in vm.paymentMethods | orderBy: \\'position\\'\\\" ng-value=\\\"paymentMethod.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon ng-if=\\\"paymentMethod.icon\\\" md-font-icon=\\\"{{paymentMethod.icon}}\\\" \\nclass=\\\"s20 mh-5\\\" style=\\\"color:#{{paymentMethod.foreground_color}}\\\"></md-icon><span class=\\\"text-truncate\\\" flex>\\n{{paymentMethod.name}}</span></div></md-option></md-select><div ng-messages=\\\"registerForm.paymentMethods.$error\\\" \\nrole=\\\"alert\\\"><div ng-message=\\\"PaymentMethodAlreadyLinked\\\"><span \\ntranslate=\\\"REGISTERS.PAYMENT_METHOD_LINKED_TO_ANOTHER_WAREHOUSE\\\" \\ndata-translate-values=\\\"{\\'warehouse\\': vm.paymentMethodErrorData.warehouse,\\n                      \\'paymentMethod\\': vm.paymentMethodErrorData.paymentMethod}\\\">\\n</span></div></div></md-input-container></div></div><h3 flex=\\\"100\\\" class=\\\"mt-32\\\" \\ntranslate=\\\"REGISTERS.ADVANCED_CONFIGURATION\\\"></h3><div layout=\\\"row\\\" layout-wrap><div flex=\\\"50\\\" layout=\\\"row\\\" \\nclass=\\\"pr-16\\\"><md-input-container flex class=\\\"md-icon-float md-icon-right\\\"><input \\nng-model=\\\"vm.register.open_drawer_signal\\\" ng-disabled=\\\"vm.saving\\\" \\nplaceholder=\\\"{{\\'REGISTERS.OPEN_DRAWER_SIGNAL\\' | translate}}\\\" autocomplete=\\\"off\\\"><md-icon md-font-icon=\\\"icon-eject\\\" \\nclass=\\\"secondary-text cursor-pointer\\\" ng-click=\\\"vm.openDrawer()\\\"><md-tooltip>\\n{{\\'REGISTERS.OPEN_DRAWER_SIGNAL_TEST\\' | translate}}</md-tooltip></md-icon></md-input-container></div></div><div \\nng-if=\\\"vm.contractedPlanLimit && !vm.register.id\\\" class=\\\"mt-16\\\" layout=\\\"row\\\" layout-wrap>\\n<nd-contracted-plan-limit-alert-box contracted-plan-limit=\\\"vm.contractedPlanLimit\\\" flex=\\\"100\\\">\\n</nd-contracted-plan-limit-alert-box></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.saving\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.saveRegister()\\\" ng-disabled=\\\"!registerForm.$valid || vm.saving\\\" translate=\\\"GENERAL.SAVE\\\" \\nclass=\\\"md-primary md-raised\\\" hotkey=\\\"{\\'enter\\': vm.saveRegister}\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular md-mode=\\\"indeterminate\\\" class=\\\"mr-8\\\" ng-if=\\\"vm.saving\\\" md-diameter=\\\"20\\\"></md-progress-circular>\\n<span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/registers/dialogs/open-register/open-register-dialog.html\",\"<md-dialog aria-label=\\\"Open Register\\\"><form ng-cloak name=\\\"form\\\"><md-dialog-content><h2 \\ntranslate=\\\"REGISTERS.OPEN_REGISTER\\\">Open Register</h2><p translate=\\\"REGISTERS.OPEN_REGISTER_MSG\\\">\\nSetting the opening cash drawer amount</p><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container flex \\nclass=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-cash name font-size-24\\\"></md-icon><input ng-model=\\\"vm.amount\\\" \\nplaceholder=\\\"{{\\'REGISTERS.AMOUNT_PLACEHOLDER\\' | translate}}\\\" autocomplete=\\\"off\\\" nd-mute-barcode-callbacks \\ntype=\\\"number\\\" step=\\\"0.01\\\" value=\\\"0.00\\\" md-auto-focus required></md-input-container><md-button class=\\\"md-icon-button\\\" \\nng-if=\\\"vm.register.currency === \\'EUR\\'\\\" ng-click=\\\"vm.openCashCounter()\\\"><md-tooltip>\\n{{\\'REGISTER_CLOSURE.OPEN_MONEY_COUNTER\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-register.25ab8937.svg\\\"></md-icon></md-button></div>\\n<md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon class=\\\"icon icon-pencil name font-size-24\\\"></md-icon>\\n<input ng-model=\\\"vm.notes\\\" placeholder=\\\"{{\\'REGISTERS.NOTES_PLACEHOLDER\\' | translate}}\\\" autocomplete=\\\"off\\\" \\nnd-mute-barcode-callbacks></md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nid=\\\"test-applyreg-button\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.saveOpening()\\\" \\nng-disabled=\\\"!form.$valid || vm.opening\\\" translate=\\\"GENERAL.SAVE\\\">Save</md-button></md-dialog-actions></form>\\n</md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/registers/dialogs/select-register/select-register-dialog.html\",\"<md-dialog aria-label=\\\"Select Register\\\"><form ng-cloak><md-dialog-content><h2 class=\\\"mb-30\\\" \\ntranslate=\\\"SELECT_REGISTER.SELECT_REGISTER\\\"></h2><p translate=\\\"{{vm.message}}\\\"></p><md-input-container flex \\nclass=\\\"w-250\\\"><md-icon class=\\\"icon icon-monitor name font-size-24\\\"></md-icon><label \\ntranslate=\\\"SELECT_REGISTER.REGISTER\\\">Register</label><md-select ng-model=\\\"vm.register\\\"><md-option \\nng-repeat=\\\"register in vm.registers \\\" ng-value=\\\"register\\\" ng-disabled=\\\"register.is_closed\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"mr-5\\\">{{::register.code}}</span> <small class=\\\"secondary-text\\\">\\n({{::register.warehouse.name}})</small> <span flex></span> <span ng-if=\\\"!register.is_closed\\\" \\nstyle=\\\"line-height: normal\\\" translate=\\\"REGISTERS.STATUS_OPEN\\\" class=\\\"text-boxed green-bg white-fg\\\">Open</span> <span \\nng-if=\\\"register.is_closed\\\" style=\\\"line-height: normal\\\" translate=\\\"REGISTERS.STATUS_CLOSE\\\" class=\\\"text-boxed\\\">Close\\n</span></div></md-option></md-select></md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\">\\n<md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button \\nng-click=\\\"vm.select()\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!vm.register || !vm.register.id\\\" \\ntranslate=\\\"SELECT_REGISTER.SELECT\\\">Select</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/dialogs/generate-invoices/generate-invoices-dialog.html\",\"<md-dialog><md-dialog-content class=\\\"p-0\\\"><h2 class=\\\"mb-32 md-padding\\\">{{\\'SALES_LOG.INVOICES_GENERATION\\' | translate}}\\n</h2><p ng-if=\\\"vm.invoices.length\\\" class=\\\"pl-16\\\">{{\\'SALES_LOG.INVOICES_GENERATED_SUCCESSFULLY\\' | translate}}</p><table \\nclass=\\\"simple material\\\" ng-if=\\\"vm.invoices.length\\\"><thead><tr><th>{{\\'SALES_LOG.CUSTOMER\\' | translate}}</th><th>\\n{{\\'SALES_LOG.GO_TO_INVOICE\\' | translate}}</th><th class=\\\"text-right\\\">{{\\'SALES_LOG.INVOICE_FILE\\' | translate}}</th></tr>\\n</thead><tbody><tr ng-repeat=\\\"invoice in vm.invoices\\\"><td>\\n{{invoice.customer_first_name}} {{invoice.customer_last_name}} <span ng-if=\\\"vm.alreadyInvoicedDict[invoice.id]\\\" \\nclass=\\\"secondary-text\\\">({{\\'SALES_LOG.ALREADY_INVOICED\\' | translate}})</span></td><td><a \\nui-sref=\\\"app.accounting.invoices.invoice({id:invoice.id})\\\" ng-click=\\\"vm.cancel()\\\">{{invoice.autocode}}</a></td><td \\nclass=\\\"text-right\\\"><a ng-if=\\\"invoice.pdf_file\\\" href=\\\"{{invoice.pdf_file}}\\\" target=\\\"_blank\\\"><md-icon \\nmd-font-icon=\\\"icon-file-pdf\\\" class=\\\"red-fg mr-8\\\"></md-icon>{{vm.getFilename(invoice.pdf_file)}} </a><em \\nng-if=\\\"!invoice.pdf_file\\\" class=\\\"secondary-text\\\">{{\\'SALES_LOG.INVOICE_NOT_GENERATED_YET\\' | translate}}</em></td></tr>\\n</tbody></table><p ng-if=\\\"vm.errors.length\\\" class=\\\"pl-16\\\">{{\\'SALES_LOG.ERRORS\\' | translate}}</p><table \\nclass=\\\"simple material\\\" ng-if=\\\"vm.errors.length\\\"><thead><tr><th>{{\\'SALES_LOG.SALE\\' | translate}}</th><th>\\n{{\\'SALES_LOG.ERROR\\' | translate}}</th></tr></thead><tbody><tr ng-repeat=\\\"error in vm.errors\\\"><td>{{error.pos_order}}\\n</td><td class=\\\"red-fg\\\">{{\\'SALES_LOG.\\' + error.error | translate}}</td></tr></tbody></table></md-dialog-content>\\n<md-dialog-actions layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CLOSE\\\">\\nClose</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/dialogs/pos-order/edit-payments.html\",\"<md-bottom-sheet layout=\\\"column\\\"><nd-barcode-listener devolution-card-callback=\\\"vm.devolutionCardCallback(barcode)\\\" \\navoid-change-root-scope=\\\"true\\\"></nd-barcode-listener><h4 layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n{{\\'SALES_LOG.EDIT_PAYMENT\\' | translate}}</h4><div layout=\\\"row\\\"><div layout=\\\"column\\\" flex=\\\"40\\\" flex-offset=\\\"30\\\"><div \\nlayout=\\\"row\\\" class=\\\"h2\\\"><span translate=\\\"SALES.TOTAL\\\" flex></span> <span>\\n{{vm.posOrder.total | price}} {{vm.currencyCharacter}}</span></div><md-divider class=\\\"mv-8\\\"></md-divider><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.isNormalPayingWorkflow(vm.posOrder)\\\" \\nng-repeat=\\\"posOrderPaymentMethod in vm.posOrder.pos_order_payment_methods | orderBy:\\'payment_method\\'\\\"><md-button \\nclass=\\\"m-0\\\" ng-disabled=\\\"vm.posOrder.generateDevolutionCard\\\" \\nng-click=\\\"vm.assignAllToPaymentMethod(vm.posOrder, posOrderPaymentMethod)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].icon}}\\\" \\nstyle=\\\"color:#{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].foreground_color}}\\\" class=\\\"mr-8\\\"></md-icon>\\n<span flex ng-if=\\\"!vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].company\\\">\\n{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].name |translate}} </span><span flex \\nng-if=\\\"vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].company\\\">\\n{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].name}}</span></div></md-button><span flex></span> <input \\nclass=\\\"text-right font-size-18 nd-input\\\" type=\\\"number\\\" step=\\\"0.01\\\" flex=\\\"33\\\" \\nng-blur=\\\"vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].focus = false\\\" \\nfocus-if=\\\"{{vm.paymentMethodsDict[posOrderPaymentMethod.payment_method].focus}}\\\" \\nng-model=\\\"posOrderPaymentMethod.given_amount\\\"><div class=\\\"h3 ml-5\\\" \\nng-class=\\\"{\\'hint-text\\': vm.posOrder.generateDevolutionCard}\\\">{{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button ng-click=\\\"vm.openDevolutionCardFinder(vm.posOrder)\\\" class=\\\"m-0\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-wallet-membership\\\" class=\\\"pink-fg mr-8\\\">\\n</md-icon><span flex translate=\\\"SALES.ADD_VOUCHER\\\" \\nng-if=\\\"!vm.posOrder.devolution_cards || vm.posOrder.devolution_cards.length === 0\\\">Add Voucher</span> <span flex \\ntranslate=\\\"SALES.ADD_ANOTHER_VOUCHER\\\" ng-if=\\\"vm.posOrder.devolution_cards && vm.posOrder.devolution_cards.length > 0\\\">\\nAdd Another Voucher</span></div></md-button><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex><span \\nclass=\\\"font-size-18 pink-fg voucher-amount\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-repeat=\\\"devolutionCard in vm.posOrder.devolution_cards\\\"><span>\\n{{ devolutionCard.amount * -1 | price}} {{::vm.currencyCharacter}}</span><md-button \\nclass=\\\"md-icon-button remove-devolution-card\\\" ng-click=\\\"vm.deleteDevolutionCard(vm.posOrder, $index)\\\"><md-icon \\nmd-font-icon=\\\"icon-trash\\\" class=\\\"s18 pink-fg\\\"></md-icon></md-button></span></div></div><div layout=\\\"row\\\" \\nclass=\\\"h3 mv-8 border-top\\\" ng-if=\\\"vm.isNormalPayingWorkflow(vm.posOrder)\\\"><span translate=\\\"SALES.TOTAL_ASSIGNED\\\" flex>\\n</span> <span class=\\\"secondary-text\\\" ng-class=\\\"{\\'green-fg\\': vm.getTotalAssigned(vm.posOrder) >= vm.posOrder.total}\\\">\\n{{vm.getTotalAssigned(vm.posOrder) | price}} {{vm.currencyCharacter}}</span></div><div layout=\\\"row\\\" class=\\\"h3 mb-8\\\" \\nng-if=\\\"vm.isNormalPayingWorkflow(vm.posOrder)\\\"><span translate=\\\"SALES.PENDING_TO_ASSIGN\\\" flex></span> <span \\nclass=\\\"secondary-text\\\" ng-class=\\\"{\\'red-fg\\': vm.getPendingToAssigned(vm.posOrder) > 0}\\\">\\n{{vm.getPendingToAssigned(vm.posOrder)| price}} {{vm.currencyCharacter}}</span></div><md-divider class=\\\"mv-8\\\">\\n</md-divider><div layout=\\\"row\\\" class=\\\"h2\\\" ng-if=\\\"vm.isNormalPayingWorkflow(vm.posOrder)\\\"><span \\ntranslate=\\\"SALES.BALANCE\\\" flex></span> <span class=\\\"text-bold\\\">\\n{{vm.getBalance(vm.posOrder) | price}} {{vm.currencyCharacter}}</span></div><div layout=\\\"row\\\" class=\\\"h2\\\" \\nng-if=\\\"vm.isDevolution(vm.posOrder)\\\"><md-radio-group ng-model=\\\"vm.tempRadioButtomGroup\\\" flex><md-radio-button \\nvalue=\\\"1\\\" flex class=\\\"devolution-radio-button\\\" ng-click=\\\"vm.refundByNewDevolutionCard()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex>{{\\'SALES.GENERATE_VOUCHER\\' | translate}} <span class=\\\"text-bold text-right\\\" flex \\nng-if=\\\"vm.posOrder.generateDevolutionCard && vm.tempRadioButtomGroup == 1\\\">\\n{{vm.getBalance(vm.posOrder) | price}} {{vm.currencyCharacter}}</span></div></md-radio-button><md-radio-button \\nvalue=\\\"2\\\" class=\\\"devolution-radio-button\\\" ng-click=\\\"vm.refundByCash()\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex>{{\\'SALES.REFUND_MONEY_CASH\\' | translate}} <span class=\\\"text-bold text-right\\\" flex \\nng-if=\\\"vm.posOrder.refundByPaymentMethodCash && vm.tempRadioButtomGroup == 2\\\">\\n{{vm.getTotalAssigned(vm.posOrder, true) | price}} {{vm.currencyCharacter}}</span></div></md-radio-button>\\n<md-radio-button value=\\\"3\\\" class=\\\"devolution-radio-button\\\" ng-click=\\\"vm.refundByCard()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" flex>{{\\'SALES.REFUND_MONEY_CARD\\' | translate}} <span class=\\\"text-bold text-right\\\" flex \\nng-if=\\\"vm.posOrder.refundByPaymentMethodCard && vm.tempRadioButtomGroup == 3\\\">\\n{{vm.getTotalAssigned(vm.posOrder, true) | price}} {{vm.currencyCharacter}}</span></div></md-radio-button>\\n</md-radio-group></div></div></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.paying\\\" class=\\\"stroked\\\">{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"vm.paying\\\" class=\\\"md-primary md-raised\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n<md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" ng-if=\\\"vm.paying\\\"></md-progress-circular><span class=\\\"ph-5\\\">\\n{{\\'GENERAL.SAVE\\' | translate}}</span></div></md-button></div></md-bottom-sheet>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/dialogs/pos-order/pos-order-dialog.controller.js.html\",\"<md-dialog aria-label=\\\"Sale detail\\\" id=\\\"pos-order-dialog\\\"><md-dialog-content class=\\\"edit-payment-container\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><h2 class=\\\"md-title m-0\\\"><span translate=\\\"SALES_LOG.SALE\\\"></span>\\n {{vm.posOrder.autocode}} <span ng-if=\\\"vm.posOrder.deleted && vm.posOrder.is_negative\\\">\\n({{\\'SALES_LOG.NEGATIVE_OF\\' | translate }} {{vm.posOrder.negative_of}}) </span><span \\nng-if=\\\"vm.posOrder.deleted && !vm.posOrder.is_negative\\\">({{\\'SALES.DELETED\\' |translate}}) </span><span \\nng-if=\\\"vm.posOrder.payment_status === vm.POS_ORDER_PAYMENT_STATUSES.POS_ORDER_PAYMENT_STATUS_UNPAID\\\" \\nclass=\\\"{{vm.POS_ORDER_PAYMENT_STATUSES_COLORS[vm.posOrder.payment_status]}}\\\">\\n{{\\'ORDER.POS_ORDER_PAYMENT_STATUS_UNPAID\\' | translate}}</span></h2><md-icon md-font-icon=\\\"icon-flag-variant\\\" \\nclass=\\\"red-fg\\\" ng-if=\\\"vm.posOrder.incidence\\\"><md-tooltip>{{\\'SALES_LOG.MARKED_AS_INCIDENCE\\' | translate}}</md-tooltip>\\n</md-icon><span flex></span></div><div layout=\\\"column\\\"><div layout=\\\"row\\\" layout-wrap class=\\\"pt-24\\\"><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-margin pr-\\\"><md-icon md-font-icon=\\\"icon-calendar\\\" class=\\\"icon\\\">\\n</md-icon><label translate=\\\"SALES_LOG.DATE\\\">Date</label><input value=\\\"{{::vm.posOrder.created_at | dataAndHour}}\\\" \\ndisabled=\\\"true\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-margin\\\">\\n<md-icon md-font-icon=\\\"icon-monitor\\\" class=\\\"icon\\\"></md-icon><label translate=\\\"REGISTERS.REGISTER\\\">Register</label>\\n<input value=\\\"{{::vm.posOrder.register.code}} ({{::vm.posOrder.source_warehouse.name}})\\\" disabled=\\\"true\\\">\\n</md-input-container><div layout=\\\"row\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-margin\\\"><nd-user-picture \\nng-if=\\\"vm.posOrder.created_by\\\" user=\\\"vm.posOrder.created_by\\\"></nd-user-picture><md-input-container class=\\\"no-margin\\\" \\nflex><md-autocomplete ng-disabled=\\\"!Session.hasPermission(\\'sale.sales_log.update_created_by\\')\\\" \\nclass=\\\"user-autocomplete\\\" md-items=\\\"user in vm.userQuerySearch(vm.userSearchText)\\\" \\nmd-selected-item=\\\"vm.posOrder.created_by\\\" md-selected-item-change=\\\"vm.createByHasChanged()\\\" \\nmd-search-text=\\\"vm.userSearchText\\\" md-item-text=\\\"vm.getUserText(user)\\\" md-min-length=\\\"3\\\" md-delay=\\\"300\\\" \\nmd-input-id=\\\"user-autocomplete-input\\\" md-floating-label=\\\"{{\\'SALES_LOG.SOLD_BY\\' | translate}}\\\" flex><md-item-template>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-user-picture user=\\\"user\\\" class=\\\"mr-8\\\"></nd-user-picture><span \\nmd-highlight-text=\\\"vm.userSearchText\\\" md-highlight-flags=\\\"^i\\\">{{ vm.getUserText(user)}}</span></div></md-item-template>\\n</md-autocomplete></md-input-container></div><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" \\nclass=\\\"no-margin md-icon-left\\\" ng-class=\\\"{\\'md-input-invalid\\': vm.assignCustomerError}\\\"><md-icon \\nmd-font-icon=\\\"icon-account\\\" class=\\\"icon\\\"></md-icon><md-autocomplete class=\\\"customer-autocomplete\\\" \\nng-focus=\\\"vm.setNdBarcodeListenerEnabled(false)\\\" ng-blur=\\\"vm.setNdBarcodeListenerEnabled(true)\\\" \\nng-disabled=\\\"vm.autocompleteDisabled() || !Session.hasPermission(\\'sale.sales_log.update_customer\\')\\\" \\nmd-items=\\\"customer in vm.customersQuerySearch(vm.customerSearchText)\\\" md-selected-item=\\\"vm.posOrder.customer\\\" \\nmd-selected-item-change=\\\"vm.customerHasChanged()\\\" md-search-text=\\\"vm.customerSearchText\\\" \\nmd-item-text=\\\"vm.getCustomerText(customer)\\\" md-min-length=\\\"3\\\" md-delay=\\\"300\\\" md-input-id=\\\"customer-autocomplete-input\\\" \\nmd-floating-label=\\\"{{\\'SALES.SEARCH_CUSTOMER\\' | translate}}\\\" flex><md-item-template><md-icon \\nmd-font-icon=\\\"icon-account\\\"></md-icon><span md-highlight-text=\\\"vm.customerSearchText\\\" md-highlight-flags=\\\"^i\\\">\\n{{ vm.getCustomerText(customer)}}</span></md-item-template><md-not-found><span translate=\\\"SALES.NO_CUSTOMER_FOUND\\\" \\ntranslate-values=\\\"{name: vm.customerSearchText}\\\">\\\"{{vm.customerSearchText}}\\\" not found.</span> <span flex></span> <a \\nng-click=\\\"vm.createCustomer(vm.posOrder.customer)\\\" translate=\\\"SALES.CLICL_TO_CREATE\\\">Add Customer</a></md-not-found>\\n<div ng-messages=\\\"vm.assignCustomerError\\\" ng-if=\\\"vm.assignCustomerError\\\"><div>\\n{{\\'SALES_LOG.MISSING_CUSTOMER_TEXT\\' | translate}}</div></div></md-autocomplete></md-input-container><md-input-container\\n flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" ng-if=\\\"vm.posOrder.invoice && !vm.posOrder.substitutive_invoices\\\" \\nclass=\\\"no-margin md-icon-right\\\"><md-icon md-font-icon=\\\"icon-file-pdf\\\" class=\\\"icon\\\"></md-icon><input ng-if=\\\"false\\\" \\ndisabled=\\\"disabled\\\"><div ng-if=\\\"vm.posOrder.invoice\\\"><a ng-click=\\\"vm.downloadInvoice(vm.posOrder.invoice.id)\\\" \\nclass=\\\"md-input cursor-pointer\\\">{{vm.posOrder.invoice.getFileName()}}</a></div><md-icon \\nmd-font-icon=\\\"icon-open-in-new\\\" has-permission=\\\"app.accounting.invoices.invoice\\\" class=\\\"cursor-pointer md-primary-fg\\\" \\nng-click=\\\"vm.openInvoice()\\\"><md-tooltip>{{\\'SALE.VIEW_INVOICE\\' | translate}}</md-tooltip></md-icon></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" ng-if=\\\"vm.posOrder.substitutive_invoices\\\" \\nng-repeat=\\\"substitutiveInvoice in vm.posOrder.substitutive_invoices\\\" class=\\\"no-margin md-icon-right\\\"><md-icon \\nmd-font-icon=\\\"icon-file-pdf\\\" class=\\\"icon\\\"></md-icon><input ng-if=\\\"false\\\" disabled=\\\"disabled\\\"><div \\nng-if=\\\"substitutiveInvoice.pdf_file\\\"><a ng-click=\\\"vm.downloadInvoice(substitutiveInvoice.id)\\\" \\nclass=\\\"md-input cursor-pointer\\\">{{substitutiveInvoice.getFileName()}}</a></div><md-icon \\nmd-font-icon=\\\"icon-open-in-new\\\" has-permission=\\\"app.accounting.invoices.invoice\\\" class=\\\"cursor-pointer md-primary-fg\\\" \\nng-click=\\\"vm.openInvoice(substitutiveInvoice.id)\\\"><md-tooltip>{{\\'SALE.VIEW_INVOICE\\' | translate}}</md-tooltip>\\n</md-icon></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"25\\\" class=\\\"no-margin\\\">\\n<md-icon md-font-icon=\\\"icon-comment-processing-outline\\\" class=\\\"icon\\\"></md-icon><label \\ntranslate=\\\"SALES.NOTES_OR_COMMENTS\\\">Notes or comments</label><input ng-model=\\\"vm.posOrder.notes\\\" \\nng-change=\\\"vm.notesHasChanged()\\\" autocomplete=\\\"false\\\"></md-input-container></div><div layout=\\\"column\\\"><table \\nclass=\\\"simple\\\" ms-responsive-table><thead><tr><th translate=\\\"SALES_LOG.AMOUNT\\\">Amount</th><th \\ntranslate=\\\"SALES_LOG.PRODUCT\\\">Product</th><th translate=\\\"SALES_LOG.DETAILS\\\">Details</th><th \\ntranslate=\\\"SALES_LOG.UNIT_PRICE\\\" class=\\\"text-right\\\">Unit Pice</th><th translate=\\\"SALES_LOG.DISCOUNT\\\" \\nclass=\\\"text-right\\\">Discount</th><th translate=\\\"SALES_LOG.TOTAL\\\" class=\\\"text-right\\\">Total</th></tr></thead><tbody><tr \\nng-repeat-start=\\\"product in vm.getPosOrderProductVariants()\\\" \\nng-class=\\\"{\\'md-orange-50-bg orange-900-fg\\': product.amount < 0 && vm.posOrder.devolution_of, \\'md-red-50-bg red-900-fg\\': product.deleted}\\\">\\n<td><div layout=\\\"row\\\" layout-align=\\\"start center\\\">{{product.amount}} <span class=\\\"orange-100-bg text-boxed\\\" \\nng-if=\\\"vm.isReturned(product)\\\">{{\\'SALES_LOG.RETURNED_AT\\' |translate}} <span \\nng-repeat=\\\"devolution in product.devolutions_of\\\"><a class=\\\"ml-5 cursor-pointer\\\" \\nng-click=\\\"vm.goToPosOrder(devolution.pos_order_id)\\\">{{devolution.pos_order_autocode}} </a></span></span><span \\nclass=\\\"orange-100-bg text-boxed\\\" \\nng-if=\\\"product.devolution_of && !vm.posOrder.is_negative && vm.posOrder.is_devolution\\\">\\n{{\\'SALES_LOG.BOUGHT_AT\\' |translate}} <a class=\\\"ml-5 cursor-pointer\\\" \\nng-click=\\\"vm.goToPosOrder(vm.posOrder.devolution_of.id)\\\">{{vm.posOrder.devolution_of.autocode}} </a></span><span flex>\\n</span><md-button class=\\\"md-button open-bundle-button\\\" \\nng-class=\\\"{\\'md-blue-50-bg\\': product.amount > 0 && !vm.posOrder.devolution_of,\\n                                   \\'md-primary\\': product.amount > 0 && !vm.posOrder.devolution_of,\\n                                   \\'white-bg\\': product.amount < 0 && vm.posOrder.devolution_of}\\\" \\nng-if=\\\"product.is_bundle\\\" ng-click=\\\"vm.showAndHideBundleVariants(product)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" class=\\\"h-30\\\">{{\\'PRODUCT.PACK\\' | translate}}<md-icon md-font-icon=\\\"icon-chevron-up\\\" \\nclass=\\\"toggle-icon no-margin\\\" \\nng-class=\\\"{\\'upside-down\\': !product.showBundle,\\n                                      \\'orange-900-fg\\': product.amount < 0}\\\">\\n</md-icon></div></md-button></div></td><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><img \\nclass=\\\"table-thumbnails mr-10 border-radius-image\\\" ng-class=\\\"{\\'default-icon\\': !product.cover_thumbnail}\\\" \\nsrc=\\\"{{product.getPopvCover()}}\\\"><div layout=\\\"column\\\" class=\\\"mr-8\\\"><a class=\\\"cursor-pointer\\\" ng-if=\\\"product.product\\\" \\nng-click=\\\"vm.goToProduct(product.product)\\\">{{product.product_name}}</a> <span ng-if=\\\"!product.product\\\">\\n{{product.product_name}}</span><small>{{ product.product_code }}</small> <small class=\\\"m-0 secondary-text\\\">\\n{{ ::product.brand_name}}</small> <span ng-if=\\\"product.promotion\\\" class=\\\"m-0\\\">{{ product.promotion_name}}</span></div>\\n</div></td><td><span ng-if=\\\"product.product_variant_size_name && product.product_variant_color_name\\\">\\n{{product.product_variant_size_name}} - {{product.product_variant_color_name}} </span><span \\nng-if=\\\"!product.product_variant_size_name || !product.product_variant_color_name\\\">\\n{{product.product_variant_size_name || product.product_variant_color_name}}</span><div ng-if=\\\"product.uid_stock_uid\\\" \\nclass=\\\"mt-8\\\"><small></small> <small class=\\\"m-0 secondary-text\\\">{{ product.uid_stock_uid }}</small></div><div \\nng-if=\\\"!product.uid_stock_uid && product.uid_stocks.length\\\" class=\\\"mt-8\\\"><span ng-repeat=\\\"lot in product.uid_stocks\\\">\\n<small></small> <small class=\\\"m-0 secondary-text\\\">{{ lot }}</small></span></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"product.seller_instance\\\"><md-tooltip>{{\\'USERS.SOLD_BY\\' | translate}}</md-tooltip>\\n<nd-user-picture user=\\\"product.seller_instance\\\"></nd-user-picture><span class=\\\"ml-5\\\">\\n{{product.seller_instance.first_name}} {{product.seller_instance.last_name}}</span></div></td><td class=\\\"text-right\\\" \\nng-if=\\\"!product.custom_price_incl_tax\\\"><span>{{product.price_incl_tax | price}}{{vm.currencyCharacter}}</span></td><td \\nclass=\\\"text-right\\\" ng-if=\\\"product.custom_price_incl_tax\\\"><span>\\n{{product.custom_price_incl_tax | price}}{{vm.currencyCharacter}}</span></td><td class=\\\"text-right\\\"><span \\nng-if=\\\"product.discount\\\">{{product.discount | price}}%</span></td><td class=\\\"text-right\\\" \\nng-class=\\\"{\\'refund-td\\':  product.returned_amount}\\\"><div class=\\\"text-bold\\\">\\n{{product.getTotal(true) | price}}{{vm.currencyCharacter}}</div><div class=\\\"secondary-text text-strike\\\" \\nng-if=\\\"product.discount || product.custom_price_incl_tax !== null\\\">\\n{{product.amount * product.price_incl_tax | price}}{{vm.currencyCharacter}}</div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\" class=\\\"red-700-fg\\\" ng-if=\\\"product.returned_amount\\\"><md-icon class=\\\"refund-icon\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/refund.221d6d4a.svg\\\"></md-icon>\\n-{{ product.getTotalReturned() | price}}{{::vm.currencyCharacter}}</div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" \\nng-if=\\\"product.returned_amount\\\">{{ product.total | price}}{{::vm.currencyCharacter}}</div></td></tr><tr \\nng-if=\\\"product.showBundle\\\" \\nng-class=\\\"{\\'md-orange-50-bg orange-900-fg\\': product.amount < 0 && vm.posOrder.devolution_of,\\n                         \\'md-red-50-bg red-900-fg\\': product.deleted,\\n                         \\'md-blue-50-bg\\': !vm.posOrder.devolution_of && product.amount > 0 }\\\" \\nng-repeat=\\\"bundle_variant in product.pos_order_bundle_content\\\"><td><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><span \\nng-if=\\\"product.devolution_of\\\">-</span> <span>{{bundle_variant.amount}}</span></div></td><td><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"table-thumbnails mr-10 border-radius-image\\\" \\nng-class=\\\"{\\'default-icon\\': !bundle_variant.cover_thumbnail}\\\" \\nsrc=\\\"{{bundle_variant.cover_thumbnail ? bundle_variant.cover_thumbnail : \\'/assets/images/package-variant-closed.9c71cbbe.png\\'}}\\\">\\n<div layout=\\\"column\\\" class=\\\"mr-8\\\"><a class=\\\"cursor-pointer\\\" ng-if=\\\"bundle_variant.product\\\" \\nng-click=\\\"vm.goToProduct(bundle_variant.product)\\\">{{bundle_variant.product_name}}</a> <span \\nng-if=\\\"!bundle_variant.product\\\">{{bundle_variant.product_name}}</span><small>{{ bundle_variant.product_code }}</small> \\n<small class=\\\"m-0 secondary-text\\\">{{ ::bundle_variant.brand_name}}</small></div></div></td><td><span \\nng-if=\\\"bundle_variant.size_name &&\\n               bundle_variant.color_name\\\">\\n{{bundle_variant.size_name}} - {{bundle_variant.color_name}} </span><span \\nng-if=\\\"!bundle_variant.size_name || !bundle_variant.color_name\\\">\\n{{bundle_variant.size_name || bundle_variant.color_name}}</span></td><td class=\\\"text-right\\\"></td><td \\nclass=\\\"text-right\\\"></td><td class=\\\"text-right\\\" ng-class=\\\"{\\'refund-td\\':  product.returned_amount}\\\"></td></tr><tr \\nng-repeat-end></tr></tbody><tr><td class=\\\"no-border text-left no-padding\\\" colspan=\\\"4\\\">\\n<nd-invoice-integration-app-details-card ng-if=\\\"vm.posOrder.kubibai_ticket_data\\\" \\nkubibai_invoice_data=\\\"vm.posOrder.kubibai_ticket_data\\\"></nd-invoice-integration-app-details-card>\\n<nd-invoice-integration-app-details-card ng-if=\\\"vm.posOrder.epos_italy_ticket_data\\\" \\nepos_italy_invoice_data=\\\"vm.posOrder.epos_italy_ticket_data\\\"></nd-invoice-integration-app-details-card>\\n<nd-pos-order-verifactu-card ng-if=\\\"vm.posOrder.hasVerifactuInvoices()\\\" pos-order-invoices=\\\"vm.posOrderInvoices\\\">\\n</nd-pos-order-verifactu-card></td><td class=\\\"no-border total-and-subtotal-td\\\" colspan=\\\"3\\\"><div layout=\\\"column\\\" \\nng-if=\\\"vm.posOrder.balance_discount && !vm.posOrder.is_devolution\\\" class=\\\"border-bottom total-breakdown-group\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><div translate=\\\"SALES.TOTAL_WITHOUT_DISCOUNT\\\"></div>\\n</div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex=\\\"30\\\">\\n{{vm.posOrder.total_without_discount | price}} {{::vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"end center\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><div class=\\\"balance-discount\\\" translate=\\\"SALES.APPLIED_BALANCE\\\">\\n</div></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\" flex=\\\"30\\\"><span class=\\\"text-right balance-discount\\\" flex>\\n{{-vm.posOrder.balance_discount | price}} {{::vm.currencyCharacter}}</span></div></div></div><div layout=\\\"column\\\" \\nclass=\\\"border-bottom total-breakdown-group\\\"><div ng-if=\\\"vm.posOrder.is_old_devolution_cards\\\"><div layout=\\\"row\\\" \\nng-repeat=\\\"consumeGiftCard in vm.getConsumedGiftCards() track by $index\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"pink-fg\\\"><md-icon md-font-icon=\\\"icon-wallet-membership\\\" class=\\\"pink-fg mr-3\\\">\\n</md-icon>{{\\'VOUCHERS.VOUCHER\\' | translate}} {{consumeGiftCard.barcode}}</div></div><div flex=\\\"30\\\" \\nclass=\\\"text-right pink-fg\\\">{{consumeGiftCard.amount | price}} {{vm.currencyCharacter}}</div></div></div><div \\nng-if=\\\"!vm.posOrder.is_old_devolution_cards\\\"><div layout=\\\"row\\\" \\nng-repeat=\\\"consumeGiftCard in vm.getConsumedGiftCards() track by $index\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"consumeGiftCard.consumed_gift_card_is_voucher\\\" class=\\\"pink-fg\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-membership\\\" class=\\\"pink-fg mr-3\\\"></md-icon>\\n{{\\'VOUCHERS.VOUCHER\\' | translate}} {{consumeGiftCard.gift_card_code}}</div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"!consumeGiftCard.consumed_gift_card_is_voucher\\\" class=\\\"indigo-fg\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-giftcard\\\" class=\\\"indigo-fg mr-3\\\"></md-icon>\\n{{\\'SALES_LOG.GIFT_CARD\\' | translate}} {{consumeGiftCard.gift_card_code}}</div></div><div flex=\\\"30\\\" class=\\\"text-right\\\" \\nng-class=\\\"{\\'pink-fg\\': consumeGiftCard.consumed_gift_card_is_voucher, \\'indigo-fg\\': !consumeGiftCard.consumed_gift_card_is_voucher}\\\">\\n{{consumeGiftCard.total | price}} {{vm.currencyCharacter}}</div></div></div><div ng-if=\\\"vm.posOrder.discount_excl_tax\\\" \\nlayout=\\\"column\\\"><div layout=\\\"row\\\"><div layout=\\\"row\\\" flex=\\\"70\\\" translate=\\\"ORDER.SUBTOTAL_BEFORE_DISCOUNT\\\"></div><div \\nclass=\\\"text-right\\\" flex=\\\"30\\\">{{vm.getSubtotal(true) | price}} {{vm.currencyCharacter}}</div></div><div layout=\\\"row\\\">\\n<div layout=\\\"row\\\" flex=\\\"70\\\" translate=\\\"ORDER.SUBTOTAL_DISCOUNT\\\"></div><div layout=\\\"row\\\" class=\\\"text-right\\\" flex=\\\"30\\\">\\n{{-1 * vm.posOrder.discount_excl_tax | price}} {{vm.currencyCharacter}}</div></div></div><div layout=\\\"row\\\"><div \\nlayout=\\\"row\\\" flex=\\\"70\\\" translate=\\\"SALES_LOG.SUBTOTAL\\\"></div><div flex=\\\"30\\\" class=\\\"text-right\\\">\\n{{vm.posOrder.subtotal | price}} {{vm.currencyCharacter}}</div></div><div layout=\\\"row\\\"><div layout=\\\"row\\\" flex=\\\"70\\\" \\ntranslate=\\\"SALES_LOG.TOTAL_TAXES\\\"></div><div flex=\\\"30\\\" class=\\\"text-right\\\">\\n{{vm.posOrder.total_taxes | price}} {{vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nng-repeat=\\\"shipping in vm.posOrder.pos_order_shipping_methods\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><i \\nclass=\\\"icon s14 icon-truck mr-10\\\"></i> <span class=\\\"mr-10\\\" translate=\\\"ORDER.SHIPPING_METHOD\\\"></span> <b>\\n{{shipping.shipping_method_name}}</b></div><div class=\\\"mt-16 text-bold text-right\\\" flex=\\\"30\\\">\\n{{shipping.price_incl_tax | price}} {{vm.currencyCharacter}}</div></div></div><div layout=\\\"row\\\" \\nclass=\\\"text-bold font-size-18 text-uppercase\\\"><div flex=\\\"70\\\" translate=\\\"SALES_LOG.TOTAL\\\"></div><div flex=\\\"30\\\" \\nclass=\\\"text-right\\\">{{vm.posOrder.total | price}}{{vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nng-repeat=\\\"posOrderPaymentMethod in vm.posOrder.pos_order_payment_methods | orderBy: \\'id\\'\\\" \\nstyle=\\\"color:#{{posOrderPaymentMethod.payment_method_instance.foreground_color}}\\\"><div layout=\\\"row\\\" flex=\\\"70\\\"><span \\nng-if=\\\"posOrderPaymentMethod.payment_method_instance.company\\\">{{posOrderPaymentMethod.payment_method_instance.name }} \\n</span><span ng-if=\\\"!posOrderPaymentMethod.payment_method_instance.company\\\">\\n{{posOrderPaymentMethod.payment_method_instance.name | translate}}</span></div><div flex=\\\"30\\\" class=\\\"text-right\\\">\\n{{ (posOrderPaymentMethod.given_amount) | price }}{{vm.currencyCharacter}}</div></div><div layout=\\\"row\\\" \\nng-if=\\\"vm.posOrder.is_old_generated_devolution_cards\\\" \\nng-repeat=\\\"chargedGiftCard in vm.getChargedGiftCards() track by $index\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"70\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pink-fg\\\"><md-icon md-font-icon=\\\"icon-wallet-membership\\\" \\nclass=\\\"pink-fg mr-3\\\"></md-icon>{{\\'VOUCHERS.VOUCHER\\' | translate}} {{chargedGiftCard.barcode}}</div></div><div \\nflex=\\\"30\\\" class=\\\"text-right pink-fg\\\">{{-1 * chargedGiftCard.amount | price}} {{vm.currencyCharacter}}</div></div><div \\nlayout=\\\"row\\\" ng-if=\\\"!vm.posOrder.is_old_generated_devolution_cards\\\" \\nng-repeat=\\\"chargedGiftCard in vm.getChargedGiftCards() track by $index\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nflex=\\\"70\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" ng-if=\\\"chargedGiftCard.charged_gift_card_is_voucher\\\" \\nclass=\\\"pink-fg\\\"><md-icon md-font-icon=\\\"icon-wallet-membership\\\" class=\\\"pink-fg mr-3\\\"></md-icon>\\n{{\\'VOUCHERS.VOUCHER\\' | translate}} {{chargedGiftCard.gift_card_code}}</div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" ng-if=\\\"!chargedGiftCard.charged_gift_card_is_voucher\\\" class=\\\"indigo-fg\\\"><md-icon \\nmd-font-icon=\\\"icon-wallet-giftcard\\\" class=\\\"indigo-fg mr-3\\\"></md-icon>\\n{{\\'SALES_LOG.GIFT_CARD\\' | translate}} {{chargedGiftCard.gift_card_code}}</div></div><div flex=\\\"30\\\" class=\\\"text-right\\\" \\nng-class=\\\"{\\'pink-fg\\': chargedGiftCard.charged_gift_card_is_voucher, \\'indigo-fg\\': !chargedGiftCard.charged_gift_card_is_voucher}\\\">\\n{{chargedGiftCard.total | price}} {{vm.currencyCharacter}}</div></div><div ng-if=\\\"vm.posOrder.output_amount !== null\\\" \\nclass=\\\"secondary-text\\\" layout=\\\"row\\\"><div flex=\\\"70\\\" translate=\\\"SALES_LOG.BALANCE\\\"></div><div flex=\\\"30\\\" \\nclass=\\\"text-right\\\">{{vm.posOrder.output_amount | price}}{{vm.currencyCharacter}}</div></div><div \\nng-if=\\\"vm.posOrder.pending_amount\\\" class=\\\"secondary-text\\\" layout=\\\"row\\\"><div flex=\\\"70\\\" translate=\\\"SALES.PENDING\\\"></div>\\n<div flex=\\\"30\\\" class=\\\"text-right\\\">{{vm.posOrder.pending_amount | price}}{{vm.currencyCharacter}}</div></div></td></tr>\\n</table></div></div></md-dialog-content><md-dialog-actions layout=\\\"row\\\" \\nng-show=\\\"!vm.showDeleteAction && !vm.posOrder.deleted && !(vm.posOrder.is_negative && !vm.posOrder.is_restored)\\\">\\n<md-button class=\\\"md-icon-button\\\" aria-label=\\\"Delete\\\" has-permission=\\\"sale.sales_log.delete\\\" \\nng-if=\\\"!vm.posOrder.deleted && !vm.posOrder.is_negative\\\" ng-click=\\\"vm.showDeleteAction = true\\\"><md-tooltip \\nmd-direction=\\\"top\\\">{{\\'GENERAL.DELETE\\' | translate}}</md-tooltip><md-icon md-font-icon=\\\"icon-trash\\\"></md-icon>\\n</md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Print\\\" ng-if=\\\"!!vm.posOrder.autocode\\\" \\nng-click=\\\"vm.print(false)\\\" ng-disabled=\\\"vm.posOrder.register === null\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'SALES_LOG.PRINT\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/printer-pos-outline.9f86b6d1.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" aria-label=\\\"Print\\\" ng-disabled=\\\"vm.printing\\\" ng-if=\\\"!!vm.posOrder.autocode\\\" \\nng-click=\\\"vm.printPdf()\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'SALES_LOG.OPEN_PDF\\' | translate}}</md-tooltip><md-icon \\nmd-font-icon=\\\"icon-file-pdf\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Print\\\" \\nng-if=\\\"!!vm.posOrder.autocode && !vm.hasEposItalyActive()\\\" ng-click=\\\"vm.print(true)\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'SALES_LOG.PRINT_GIFT\\' | translate}}</md-tooltip><md-icon md-font-icon=\\\"icon-gift\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" aria-label=\\\"Print\\\" ng-disabled=\\\"vm.fetching\\\" ng-click=\\\"vm.sendPdf()\\\" \\nng-if=\\\"!!vm.posOrder.autocode\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'SALES_LOG.SEND_BY_EMAIL\\' | translate}}</md-tooltip>\\n<md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/email-outline.a482d002.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" aria-label=\\\"Print\\\" ng-disabled=\\\"vm.fetching\\\" ng-click=\\\"vm.sendPdf(true)\\\" \\nng-if=\\\"!!vm.posOrder.autocode && !vm.hasEposItalyActive()\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'SALES_LOG.SEND_GIFT_BY_EMAIL\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/eco-gift-ticket.1759990e.svg\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" aria-label=\\\"Print Voucher\\\" ng-if=\\\"vm.posOrder.generated_devolution_card\\\" \\nng-click=\\\"vm.printDevolutionCard()\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'SALES_LOG.PRINT_VOUCHER\\' | translate}}\\n</md-tooltip><md-icon md-font-icon=\\\"icon-wallet-membership\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" \\naria-label=\\\"Print\\\" has-permission=\\\"sale.sales_log.create_devolution\\\" ng-if=\\\"!!vm.posOrder.autocode\\\" \\nng-disabled=\\\"!vm.isAllowedToCreateDevolution()\\\" ng-click=\\\"vm.createDevolution()\\\" data-test-id=\\\"sale-button-devolution\\\">\\n<md-tooltip md-direction=\\\"top\\\">{{\\'SALES_LOG.DEVOLUTION\\' | translate}}</md-tooltip><md-icon \\nmd-font-icon=\\\"icon-rotate-left\\\"></md-icon></md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Generate Invoice\\\" \\nhas-permission=\\\"sale.sales_log.generate_invoice\\\" ng-if=\\\"!!vm.posOrder.autocode && !vm.posOrder.invoice\\\" \\nng-click=\\\"vm.generateInvoice($event, false)\\\" ng-disabled=\\\"vm.generatingInvoice\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'SALES_LOG.GENERATE_INVOICE\\' | translate}}</md-tooltip><md-icon md-font-icon=\\\"icon-file-document-box\\\"></md-icon>\\n</md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Send Invoice\\\" \\nhas-permission=\\\"sale.sales_log.generate_invoice\\\" ng-if=\\\"!!vm.posOrder.autocode\\\" \\nng-click=\\\"vm.generateInvoice($event, true)\\\" ng-disabled=\\\"!vm.posOrder.invoice || vm.generatingInvoice\\\"><md-tooltip \\nmd-direction=\\\"top\\\">{{\\'SALES_LOG.SEND_INVOICE_BY_EMAIL\\' | translate}}</md-tooltip><md-icon md-font-icon=\\\"icon-email\\\">\\n</md-icon></md-button><md-button class=\\\"md-icon-button\\\" aria-label=\\\"Mark as incidence\\\" \\nhas-permission=\\\"sale.sales_log.update_sale\\\" ng-click=\\\"vm.markAsIncidence()\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{(vm.posOrder.incidence ? \\'SALES_LOG.MARK_AS_RESOLVED\\' : \\'SALES_LOG.MARK_AS_INCIDENCE\\') | translate}}</md-tooltip>\\n<md-icon md-font-icon=\\\"icon-flag-outline-variant\\\" ng-if=\\\"!vm.posOrder.incidence\\\"></md-icon><md-icon \\nmd-font-icon=\\\"icon-flag-variant\\\" class=\\\"red-fg\\\" ng-if=\\\"vm.posOrder.incidence\\\"></md-icon></md-button><md-button \\nclass=\\\"md-icon-button\\\" aria-label=\\\"Edit Order\\\" has-permission=\\\"sale.sales_log.update_sale\\\" ng-click=\\\"vm.hide(false)\\\" \\nui-sref=\\\"app.sale.sales_log.order({id:vm.posOrder.id})\\\"><md-tooltip md-direction=\\\"top\\\">{{\\'GENERAL.EDIT\\' | translate}}\\n</md-tooltip><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon></md-button><span flex></span><md-button \\nng-click=\\\"vm.hide()\\\" ng-hide=\\\"vm.createdByChanged || vm.notesChanged || vm.customerChanged\\\" translate=\\\"GENERAL.CLOSE\\\">\\nClose</md-button><md-button class=\\\"md-primary\\\" ng-if=\\\"!vm.posOrder.autocode\\\" translate=\\\"SALES_LOG.CONTINUE_SALE\\\" \\nng-click=\\\"vm.continueSale()\\\">Continue This Sale</md-button><md-button ng-click=\\\"vm.cancelChanges()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\" ng-hide=\\\"!vm.createdByChanged && !vm.notesChanged && !vm.customerChanged\\\">\\nCancel</md-button><md-button aria-label=\\\"Asign Customer\\\" class=\\\"md-primary md-raised\\\" \\nng-hide=\\\"!vm.createdByChanged && !vm.notesChanged && !vm.customerChanged\\\" ng-click=\\\"vm.saveChanges()\\\">\\n{{\\'GENERAL.SAVE\\' | translate}}</md-button></md-dialog-actions><md-dialog-actions layout=\\\"row\\\" \\nng-show=\\\"!vm.showDeleteAction && (vm.posOrder.deleted || (vm.posOrder.is_negative && !vm.posOrder.is_restored))\\\"><span \\nflex></span><md-button ng-click=\\\"vm.hide(false)\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button>\\n</md-dialog-actions><md-dialog-actions layout=\\\"row\\\" ng-show=\\\"vm.showDeleteAction\\\"><md-icon \\nmd-font-icon=\\\"icon-comment-alert-outline\\\" class=\\\"red-fg mr-10\\\" ng-if=\\\"vm.getGiftCardsKind()\\\"></md-icon><span \\nclass=\\\"md-warn-fg\\\" ng-if=\\\"!vm.isDevolutionWithPaymentGateway()\\\">{{\\'SALES_LOG.DELETE_POS_ORDER_MSG\\' | translate}}<br>\\n<strong ng-if=\\\"vm.getGiftCardsKind()\\\">\\n{{vm.getGiftCardsKind() == vm.giftCardKinds.CREATED? \\'SALES_LOG.DELETE_POS_ORDER_MSG_CREATED_GC\\' : \\'SALES_LOG.DELETE_POS_ORDER_MSG_CONSUMED_GC\\' | translate}} \\n</strong></span><span class=\\\"md-warn-fg\\\" ng-if=\\\"vm.isDevolutionWithPaymentGateway()\\\">\\n{{\\'SALES_LOG.DELETE_POS_ORDER_DEVOLUTION_MSG_WITH_GATEWAY\\' | translate}}<br><strong ng-if=\\\"vm.getGiftCardsKind()\\\">\\n{{vm.getGiftCardsKind() == vm.giftCardKinds.CREATED? \\'SALES_LOG.DELETE_POS_ORDER_MSG_CREATED_GC\\' : \\'SALES_LOG.DELETE_POS_ORDER_MSG_CONSUMED_GC\\' | translate}} \\n</strong></span><span flex></span><md-button ng-click=\\\"vm.showDeleteAction = false\\\" ng-disabled=\\\"vm.deletting\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">Cancel</md-button><md-button class=\\\"md-warn\\\" aria-label=\\\"Delete\\\" \\nng-disabled=\\\"vm.deletting\\\" ng-click=\\\"vm.posOrder.deletePosOrderPre(vm.deletePosOrder)\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.deletting\\\" class=\\\"mr-8\\\" md-diameter=\\\"20px\\\">\\n</md-progress-circular>{{\\'GENERAL.DELETE\\' | translate}}</div></md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sales-log/sidenavs/main/main-sidenav.html\",\"<md-content class=\\\"content\\\" flex ms-scroll><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"mt-20 mb-20\\\"><md-icon md-font-icon=\\\"icon-calendar\\\" class=\\\"mr-8 s16\\\"></md-icon>\\n<md-date-range flex placeholder=\\\"{{vm.dateRange.format(vm.dateRange.dateStart, vm.dateRange.dateEnd)}}\\\" \\nng-model=\\\"vm.dateRange\\\" date-start=\\\"vm.status.filters.startDate\\\" date-end=\\\"vm.status.filters.endDate\\\" \\nshow-template=\\\"true\\\" md-on-select=\\\"vm.setDateRangeFilters()\\\" class=\\\"date-range-filter\\\"></md-date-range></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mt-20 mb-20\\\"><md-icon md-font-icon=\\\"icon-clock\\\" class=\\\"mr-8 s16\\\">\\n</md-icon><div layout=\\\"row\\\" flex class=\\\"time-range-filter-selector\\\" layout-align=\\\"center center\\\"><input \\nng-model=\\\"vm.status.filters.startTime\\\" flex ng-change=\\\"vm.reloadPosOrders()\\\" class=\\\"time-filter\\\" type=\\\"time\\\"><div \\nclass=\\\"time-filter-separator\\\"><p class=\\\"m-0 text-center\\\">-</p></div><input ng-model=\\\"vm.status.filters.endTime\\\" flex \\nng-change=\\\"vm.reloadPosOrders()\\\" class=\\\"time-filter\\\" type=\\\"time\\\"></div></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-monitor-multiple\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.registersAndSites\\\" flex multiple=\\\"true\\\" \\nplaceholder=\\\"{{\\'SALES_LOG.FILTER_BY_REGISTER\\' | translate}}\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(\\'register\\')\\\" ng-change=\\\"vm.registersAndSitesChanged()\\\"><md-select-header><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.registerSearchText\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"register in vm.registers | filter:vm.registerSearchText\\\" ng-value=\\\"\\'register-\\' + register.id\\\">\\n{{register.code}}<br><md-icon md-font-icon=\\\"icon-store\\\" class=\\\"s14\\\"></md-icon><small class=\\\"secondary-text\\\">\\n{{register.warehouse.name}}</small></md-option><md-option ng-repeat=\\\"site in vm.sites | filter:vm.registerSearchText\\\" \\nng-value=\\\"\\'site-\\' + site.id\\\">{{site.name}}<br><md-icon md-font-icon=\\\"icon-web\\\" class=\\\"s14\\\"></md-icon><small \\nclass=\\\"secondary-text\\\">{{site.url}}</small></md-option></md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-show=\\\"vm.currentView == vm.POS_ORDERS_VIEW\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-account-multiple\\\">\\n</md-icon><md-select ng-model=\\\"vm.status.filters.users\\\" flex multiple=\\\"multiple\\\" \\nplaceholder=\\\"{{\\'SALES_LOG.FILTER_BY_USER\\' | translate}}\\\" md-on-open=\\\"vm.onSelectorOpen()\\\" \\nmd-on-close=\\\"vm.onSelectorClose(\\'user\\')\\\" ng-change=\\\"vm.reloadPosOrders()\\\"><md-select-header><md-icon \\nmd-font-icon=\\\"icon-magnify\\\"></md-icon><input type=\\\"search\\\" class=\\\"md-text\\\" ng-model=\\\"vm.userSearchText\\\" \\nmaxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" placeholder=\\\"{{\\'GENERAL.SEARCH\\' | translate}}\\\"></md-select-header><md-option \\nng-repeat=\\\"user in vm.users | filter:vm.userSearchText\\\" ng-value=\\\"user.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><nd-user-picture user=\\\"user\\\" class=\\\"mr-5\\\"></nd-user-picture>{{user | personname}}</div>\\n</md-option></md-select></div><div ng-show=\\\"vm.currentView == vm.POS_ORDERS_VIEW\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-cash-multiple\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.payment_statuses\\\" placeholder=\\\"{{\\'SALES_LOG.FILTER_BY_PAYMENT_STATUS\\' | translate}}\\\" \\nmultiple=\\\"multiple\\\" flex ng-change=\\\"vm.reloadPosOrders()\\\"><md-option ng-repeat=\\\"pops in vm.posOrderPaymentStatuses\\\" \\nng-value=\\\"pops\\\"><span class=\\\"m-0 {{vm.POS_ORDER_PAYMENT_STATUSES_COLORS[pops]}}\\\">\\n{{\\'ORDER.\\' + vm.POS_ORDER_PAYMENT_STATUSES[pops] | translate}}</span></md-option></md-select></div><div \\nng-show=\\\"vm.currentView == vm.POS_ORDERS_VIEW\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon \\nclass=\\\"mr-8 shopping-cart\\\" md-svg-src=\\\"assets/images/custom-material-design-icons/shopping_cart_checkout.338ab8bd.svg\\\">\\n</md-icon><md-select multiple=\\\"true\\\" ng-model=\\\"vm.status.filters.payment_methods\\\" \\nplaceholder=\\\"{{\\'SALES_LOG.FILTER_BY_PAYMENT_METHOD\\' | translate}}\\\" flex ng-change=\\\"vm.reloadPosOrders()\\\"><md-option \\nng-repeat=\\'pm in vm.paymentMethods| filter:{is_retail_method: true} | orderBy: \\\"name\\\"\\' ng-value=\\\"pm.id\\\"><span>\\n{{pm.name}}</span><md-icon md-font-icon=\\\"{{pm.icon}}\\\" class=\\\"s14 ml-5 mb-5\\\"></md-icon></md-option></md-select></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"h-75\\\"><md-checkbox ng-model=\\\"vm.status.filters.incidence\\\" \\nng-change=\\\"vm.reloadPosOrders()\\\" flex class=\\\"m-0\\\">{{\\'SALES_LOG.MARKED_WITH_INCIDENCE\\' | translate}}</md-checkbox></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"h-75\\\"><md-checkbox ng-model=\\\"vm.status.filters.deleted\\\" \\nng-change=\\\"vm.reloadPosOrders()\\\" flex class=\\\"m-0\\\">{{\\'SALES_LOG.DELETED_SALES\\' | translate}}</md-checkbox></div></div>\\n</md-content>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/cash-movement/cash-movement-dialog.html\",\"<md-dialog aria-label=\\\"Cash Movement\\\" class=\\\"cash-movement-dialog\\\"><md-dialog-content><h2 class=\\\"md-title\\\">\\n{{\\'CASH_MANAGEMENT.ADD_REMOVE_CASH\\' | translate}}</h2><div layout=\\\"row\\\" class=\\\"mb-8\\\"><md-button flex \\nng-click=\\\"vm.type = vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_INPUT\\\" class=\\\"movement-type-button\\\" \\nng-class=\\\"{\\'md-primary\\': vm.type === vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_INPUT}\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-inbox\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"CASH_MANAGEMENT.ADD_CASH\\\"></span></div></md-button><md-button flex \\nng-click=\\\"vm.type = vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_OUTPUT\\\" class=\\\"movement-type-button\\\" \\nng-class=\\\"{\\'md-primary\\': vm.type === vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_OUTPUT}\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-outbox\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"CASH_MANAGEMENT.REMOVE_CASH\\\"></span></div></md-button></div><form ng-cloak name=\\\"cashMovementForm\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container flex class=\\\"md-block mb-0 w-300\\\"><md-icon \\nclass=\\\"icon icon-cash name font-size-24\\\"></md-icon><input ng-model=\\\"vm.movement.amount\\\" \\nplaceholder=\\\"{{\\'REGISTERS.AMOUNT_PLACEHOLDER\\' | translate}}\\\" nd-mute-barcode-callbacks required autocomplete=\\\"off\\\" \\ntype=\\\"number\\\" step=\\\"0.01\\\" min=\\\"0.00\\\" value=\\\"0.00\\\"></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.openCashCounter()\\\"><md-tooltip>{{\\'REGISTER_CLOSURE.OPEN_MONEY_COUNTER\\' | translate}}</md-tooltip><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/cash-register.25ab8937.svg\\\"></md-icon></md-button></div>\\n<md-input-container flex class=\\\"md-block mb-0 no-errors-spacer\\\"><md-icon class=\\\"icon icon-pencil name font-size-24\\\">\\n</md-icon><input ng-model=\\\"vm.movement.notes\\\" required nd-mute-barcode-callbacks \\nplaceholder=\\\"{{ vm.type == vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_INPUT ? \\'CASH_MANAGEMENT.NOTES_PLACEHOLDER_INPUT\\' : \\'CASH_MANAGEMENT.NOTES_PLACEHOLDER_OUTPUT\\' | translate}}\\\" \\nautocomplete=\\\"off\\\"></md-input-container><div layout=\\\"row\\\" ng-if=\\\"isCategory\\\"><div class=\\\"pt-16 pl-5\\\"><md-checkbox \\nng-model=\\\"vm.movement.used_for_purchase\\\" aria-label=\\\"Used for purchase\\\" translate=\\\"CASH_MANAGEMENT.USED_FOR_PURCHASE\\\">\\nUsed for purchase</md-checkbox></div><md-icon md-font-icon=\\\"icon-question-mark-circle\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'CASH_MANAGEMENT.USED_FOR_PURCHASE_TEXT\\' | translate}}</md-tooltip></md-icon><span flex></span></div></form>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" \\nclass=\\\"stroked\\\">Cancel</md-button><md-button ng-click=\\\"vm.saveMovement()\\\" class=\\\"md-primary md-raised\\\" \\nng-disabled=\\\"cashMovementForm.$invalid\\\">\\n{{vm.type === vm.CASH_MOVEMENT_TYPES.CASH_MOVEMENT_TYPE_INPUT ? \\'CASH_MANAGEMENT.ADD\\' : \\'CASH_MANAGEMENT.REMOVE\\' | translate}}\\n</md-button></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/dialogs/set-number/set-number-dialog.html\",\"<md-dialog id=\\\"set-number-dialog\\\"><md-dialog-content flex><div layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-button ng-click=\\\"vm.minusClicked()\\\" class=\\\"stroked\\\"><md-icon md-font-icon=\\\"icon-minus\\\">\\n</md-icon></md-button><input class=\\\"nd-input text-right\\\" type=\\\"number\\\" step=\\\"0.01\\\" flex ng-model=\\\"vm.value\\\"><md-button \\nng-click=\\\"vm.plusClicked()\\\" class=\\\"stroked\\\"><md-icon md-font-icon=\\\"icon-plus\\\"></md-icon></md-button></div><md-divider \\nclass=\\\"mv-8\\\"></md-divider><div layout=\\\"row\\\" layout-wrap><div flex=\\\"25\\\" ng-repeat=\\\"option in vm.options\\\" layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.setValue(option)\\\" flex>\\n{{option | number: vm.decimals}} {{vm.unit}}</md-button></div></div></div></md-dialog-content><md-dialog-actions><div \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"stroked\\\">\\n{{\\'GENERAL.CANCEL\\' | translate}}</md-button><md-button ng-click=\\\"vm.apply()\\\" class=\\\"md-primary md-raised\\\">\\n{{\\'GENERAL.SAVE\\' | translate}}</md-button></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/directives/nd-numeric-keyword/nd-numeric-keyword.html\",\"<div class=\\\"full-height\\\" flex layout=\\\"column\\\" layout-align=\\\"center center\\\"><div flex=\\\"20\\\" layout=\\\"row\\\"><div \\nclass=\\\"border m-5 p-0 pr-10 ol-10 border-radius font-size-28\\\" flex layout=\\\"row\\\" layout-align=\\\"end center\\\">\\n{{value | number:vm.decimalPlaces}}</div></div><div flex=\\\"20\\\" layout=\\\"row\\\"><div class=\\\"p-5\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(1)\\\">1</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(2)\\\">2\\n</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"grey-100-bg border-radius key\\\" \\nflex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(3)\\\">3</div></div><div class=\\\"p-5\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"yellow-100-bg border-radius key\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\" ng-click=\\\"vm.clearValue()\\\">C</div></div></div><div flex=\\\"20\\\" layout=\\\"row\\\"><div \\nclass=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"grey-100-bg border-radius key\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(4)\\\">4</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(5)\\\">5</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(6)\\\">6\\n</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"border border-radius key\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.removeValue()\\\"><md-icon md-font-icon=\\\"icon-keyboard-backspace\\\">\\n</md-icon></div></div></div><div flex=\\\"40\\\" layout=\\\"row\\\"><div flex=\\\"75\\\" layout=\\\"column\\\"><div flex layout=\\\"row\\\"><div \\nclass=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div class=\\\"grey-100-bg border-radius key\\\" flex \\nlayout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(7)\\\">7</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.insertValue(8)\\\">8</div></div><div class=\\\"p-5\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(9)\\\">9\\n</div></div></div><div flex layout=\\\"row\\\"><div class=\\\"p-5\\\" flex=\\\"66\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(0)\\\">0\\n</div></div><div class=\\\"p-5\\\" flex=\\\"33\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><div \\nclass=\\\"grey-100-bg border-radius key\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" ng-click=\\\"vm.insertValue(\\'.\\')\\\">,\\n</div></div></div></div><div flex=\\\"25\\\" class=\\\"p-5\\\" layout=\\\"row\\\"><div \\nclass=\\\"green-200-bg border-radius key full-height\\\" flex layout=\\\"row\\\" layout-align=\\\"center center\\\" \\nng-click=\\\"vm.fillValue()\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/wand-magic-sparkles.6ddf699d.svg\\\">\\n</md-icon></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/sale/views/sell/directives/nd-sell-matrix/nd-sell-matrix.html\",\"<md-grid-list md-cols-sm=\\\"2\\\" md-cols-md=\\\"4\\\" md-cols-gt-md=\\\"6\\\" md-cols-gt-lg=\\\"8\\\" md-row-height=\\\"1:1\\\" md-gutter=\\\"16px\\\" \\nmd-gutter-gt-sm=\\\"16px\\\" class=\\\"nd-sell-matrix\\\"><md-grid-tile class=\\\"md-grey-100-bg\\\" \\nng-if=\\\"vm.currentView === vm.VIEW_CATEGORIES\\\" \\nng-repeat=\\\"category in vm.sellMatrixData.categories | orderBy: \\'position\\'\\\" ng-click=\\\"vm.categoryClicked(category)\\\"><div\\n layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"p-5\\\"><h3 class=\\\"text-center\\\">{{category.name}}</h3></div>\\n</md-grid-tile><md-grid-tile class=\\\"md-grey-100-bg\\\" ng-if=\\\"vm.currentView === vm.VIEW_PRODUCTS\\\" ng-click=\\\"vm.back()\\\">\\n<md-icon md-font-icon=\\\"icon-arrow-left\\\" ng-if=\\\"!vm.sellMatrixData.fetching\\\"></md-icon><md-progress-circular \\nng-if=\\\"vm.sellMatrixData.fetching\\\" class=\\\"md-hue-2\\\" md-diameter=\\\"20px\\\"></md-progress-circular></md-grid-tile>\\n<md-grid-tile class=\\\"md-grey-100-bg\\\" ng-if=\\\"vm.currentView === vm.VIEW_PRODUCTS\\\" \\nng-repeat=\\\"product in vm.sellMatrixData.products\\\" ng-click=\\\"vm.productClicked(product)\\\" \\nng-class=\\\"{\\'no-background-image\\': !vm.showProductImages}\\\" \\nstyle=\\\"background-image: url({{product.touch_thumbnail}}); background-size: cover; background-position: center center\\\">\\n<div layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"product-name-container\\\"><span class=\\\"text-center\\\">\\n{{product.name}}</span> <span class=\\\"text-center font-size-16\\\" ng-if=\\\"vm.showProductPrice\\\">\\n{{product.price_incl_tax | price}} {{vm.currencyCharacter}}</span></div></md-grid-tile><md-grid-tile \\nclass=\\\"md-grey-100-bg\\\" ng-click=\\\"vm.nextPage()\\\" \\nng-if=\\\"vm.currentView === vm.VIEW_PRODUCTS && vm.sellMatrixData.nextPageUrl\\\"><md-icon md-font-icon=\\\"icon-arrow-right\\\">\\n</md-icon></md-grid-tile></md-grid-list>\");\n$templateCache.put(\"app/main/apps/support/views/performance/directives/nd-bandwidth/nd-bandwidth.html\",\"<md-card class=\\\"performance-test-card\\\"><md-card-header layout=\\\"row\\\" class=\\\"m-0 p-0\\\" flex><div \\nclass=\\\"vertical-separator\\\" layout=\\\"column\\\" flex><div class=\\\"bandwidthometer\\\"><h3 class=\\\"h3 mt-0\\\" \\ntranslate=\\\"PERFORMANCE.DOWNLOAD\\\">Dowload</h3><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-arrow-down-bold-circle-outline\\\" class=\\\"mh-5\\\" ng-class=\\\"getColor(false)\\\"></md-icon><span \\nclass=\\\"h2 mt-0\\\">{{result.downloadSpeed || 0}} <span class=\\\"h3 mt-0 secondary-text\\\">Mbps</span></span></div></div></div>\\n<div layout=\\\"column\\\" flex><div class=\\\"bandwidthometer\\\"><h3 class=\\\"h3 mt-0\\\" translate=\\\"PERFORMANCE.UPLOAD\\\">Upload</h3>\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-arrow-up-bold-circle-outline\\\" class=\\\"mh-5\\\" \\nng-class=\\\"getColor(true)\\\"></md-icon><span class=\\\"h2 mt-0\\\">{{result.uploadSpeed || 0}} <span \\nclass=\\\"h3 mt-0 secondary-text\\\">Mbps</span></span></div></div></div></md-card-header><md-card-content layout=\\\"column\\\" \\nlayout-align=\\\"space-between start\\\"><div><h2 class=\\\"h2 ng-binding\\\" translate=\\\"PERFORMANCE.BANDWIDTH\\\">Bandwidth</h2><p \\nclass=\\\"secondary-text ng-binding\\\" translate=\\\"PERFORMANCE.BANDWIDTH_INFO\\\"></p></div><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"accounting.invoices.create\\\" ng-disabled=\\\"processing\\\" ng-click=\\\"run()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"processing\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mh-8\\\"></md-progress-circular><span class=\\\"pl-30 pr-30\\\" translate=\\\"PERFORMANCE.RUN\\\"></span></div></md-button>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/support/views/performance/directives/nd-benchmark/nd-benchmark.html\",\"<md-card class=\\\"performance-test-card\\\"><md-card-header layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"mb-10 p-10 rounded\\\" ng-class=\\\"getCustomClass(true)\\\"><md-icon class=\\\"s48\\\" \\nng-class=\\\"getCustomClass()\\\" md-svg-src=\\\"{{getSvgIcon()}}\\\" md-font-icon=\\\"{{getIconName()}}\\\"></md-icon></div><h2 \\nclass=\\\"h2 m-0\\\" ng-class=\\\"getCustomClass()\\\">{{getVeredictTitle()}}</h2><div><strong>{{result.ratio || 0}}</strong> <span\\n class=\\\"secondary-text\\\">{{\\\"PERFORMANCE.IPS\\\" | translate}}</span></div></div></md-card-header><md-card-content \\nlayout=\\\"column\\\" layout-align=\\\"space-between start\\\"><div><h2 class=\\\"h2 ng-binding\\\" translate=\\\"PERFORMANCE.BENCHMARK\\\">\\nBenchmark</h2><p class=\\\"secondary-text ng-binding\\\" translate=\\\"PERFORMANCE.BENCHMARK_INFO\\\"></p></div><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"accounting.invoices.create\\\" ng-disabled=\\\"processing\\\" ng-click=\\\"run()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"processing\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mh-8\\\"></md-progress-circular><span class=\\\"pl-30 pr-30\\\" translate=\\\"PERFORMANCE.RUN\\\"></span></div></md-button>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/support/views/performance/directives/nd-server/nd-server.html\",\"<md-card class=\\\"performance-test-card\\\"><md-card-header layout=\\\"row\\\" layout-align=\\\"center center\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><div class=\\\"mb-10 p-10 rounded\\\" ng-class=\\\"getCustomClass(true)\\\"><md-icon class=\\\"s48\\\" \\nng-class=\\\"getCustomClass()\\\" md-svg-src=\\\"{{getSvgIcon()}}\\\" md-font-icon=\\\"{{getIconName()}}\\\"></md-icon></div><h2 \\nclass=\\\"h2 m-0\\\" ng-class=\\\"getCustomClass()\\\">{{getVeredictTitle()}}</h2></div></md-card-header><md-card-content \\nlayout=\\\"column\\\" layout-align=\\\"space-between start\\\"><div><h2 class=\\\"h2 ng-binding\\\" translate=\\\"PERFORMANCE.SERVER\\\">Server\\n</h2><p class=\\\"secondary-text ng-binding\\\" translate=\\\"PERFORMANCE.SERVER_INFO\\\"></p></div><md-button \\nclass=\\\"m-0 md-primary md-raised\\\" has-permission=\\\"accounting.invoices.create\\\" ng-disabled=\\\"processing\\\" ng-click=\\\"run()\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"processing\\\" md-diameter=\\\"20px\\\" \\nclass=\\\"mh-8\\\"></md-progress-circular><span class=\\\"pl-30 pr-30\\\" translate=\\\"PERFORMANCE.RUN\\\"></span></div></md-button>\\n</md-card-content></md-card>\");\n$templateCache.put(\"app/main/apps/wholesale/views/presales/sidenavs/main/main-sidenav.html\",\"<md-content ms-scroll class=\\\"content no-padding\\\" flex><div class=\\\"navigation-simple\\\" layout=\\\"column\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" md-font-icon=\\\"icon-tag-text-outline\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.filterBrands\\\" flex><md-option ng-value=\\\"\\'\\'\\\" translate=\\\"PRESALES.ALL_BRANDS\\\"></md-option>\\n<md-option ng-repeat=\\\"brand in vm.brandsList | orderBy: \\'name\\'\\\" ng-value=\\\"brand.name\\\">{{brand.name}}</md-option>\\n</md-select></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-8 s16\\\" \\nmd-font-icon=\\\"icon-weather-sunny\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.filterSeasons\\\" flex><md-option \\nng-value=\\\"\\'\\'\\\" translate=\\\"PRESALES.ALL_SEASONS\\\"></md-option><md-option \\nng-repeat=\\\"season in vm.seasonsList | orderBy: \\'position\\'\\\" ng-value=\\\"season.name\\\">{{season.name}}</md-option>\\n</md-select></div></div></md-content>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/dialogs/delivery/delivery.html\",\"<md-dialog id=\\\"add-delivery-note-dialog\\\" class=\\\"\\\"><md-dialog-content class=\\\"pt-24\\\"><h2 \\ntranslate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_TITLE\\\" class=\\\"no-margin\\\"></h2><div class=\\\"did-you-know yellow mt-16\\\" \\nlayout=\\\"row\\\"><md-icon md-font-icon=\\\"icon-alert\\\" class=\\\"yellow-fg\\\"></md-icon><div flex \\nclass=\\\"pt-10 mb-8 did-you-know-message\\\"><span translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_BODY_WARNING\\\"></span></div>\\n</div></md-dialog-content><md-dialog-actions class=\\\"mt-8 mb-8\\\"><div layout=\\\"row\\\" class=\\\"pl-10 pr-10\\\" \\nlayout-align=\\\"space-between center\\\" flex><span translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_FOOTER_DESCRIPTION\\\"></span>\\n<div><md-button ng-click=\\\"vm.cancel()\\\" class=\\\"md-primary stroked\\\" translate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_CANCEL\\\">\\n</md-button><md-button class=\\\"md-primary stroked md-raised\\\" ng-click=\\\"vm.save()\\\" \\ntranslate=\\\"DELIVERY.CANCEL_DELIVERY_NOTE_OK\\\"></md-button></div></div></md-dialog-actions></md-dialog>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/dialogs/print/print.html\",\"<md-dialog aria-label=\\\"Print Sale Order\\\" class=\\\"w-400\\\" id=\\\"sale-print-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"GENERAL.PRINT_SEND\\\"></h2><div class=\\\"md-padding\\\" layout=\\\"column\\\"><md-input-container class=\\\"md-block\\\"><label\\n translate=\\\"PURCHASE.DESIGN\\\"></label><md-select ng-model=\\\"vm.printType\\\" ng-change=\\\"vm.changePrintType()\\\"><md-option \\nvalue=\\\"products\\\" translate=\\\"PURCHASE.PRODUCT_PER_ROW\\\"></md-option><md-option value=\\\"variants\\\" \\ntranslate=\\\"PURCHASE.PRODUCT_VARIANT_PER_ROW\\\"></md-option></md-select></md-input-container><md-checkbox \\nng-model=\\\"vm.showBrand\\\"><span translate=\\\"PRODUCT.BRAND\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showHsCode\\\">\\n<span translate=\\\"PRODUCT.HARMONISED_CODE\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showComposition\\\"><span \\ntranslate=\\\"PRODUCT.COMPOSITION\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.showAttributes\\\"><span \\ntranslate=\\\"PRODUCT.ATTRIBUTES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.printPrices\\\"><span \\ntranslate=\\\"PURCHASE.PRINT_PRICES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.printImages\\\"><span \\ntranslate=\\\"PURCHASE.PRINT_IMAGES\\\"></span></md-checkbox><md-checkbox ng-model=\\\"vm.sendEmail\\\"><span \\ntranslate=\\\"PURCHASE.SEND_BY_EMAIL\\\"></span></md-checkbox><md-input-container ng-if=\\\"vm.sendEmail\\\" class=\\\"mb-0 md-block\\\">\\n<label translate=\\\"CONTACTS.EMAIL\\\"></label><input ng-model=\\\"vm.emailTo\\\" type=\\\"email\\\" required></md-input-container>\\n</div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button class=\\\"stroked\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button><md-button ng-click=\\\"vm.print()\\\" class=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"importForm.$invalid\\\">{{(vm.sendEmail ? \\'GENERAL.SEND\\' : \\'GENERAL.PRINT\\') | translate }}</md-button></div>\\n</form></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/wholesale/views/sale/dialogs/import/import.html\",\"<md-dialog aria-label=\\\"Import Purchase\\\" class=\\\"w-300\\\" id=\\\"import-sale-dialog\\\"><md-dialog-content \\nclass=\\\"md-padding pt-0\\\"><form name=\\\"importForm\\\" class=\\\"pb-15\\\" ng-cloak layout=\\\"column\\\"><h2 class=\\\"mb-10\\\" \\ntranslate=\\\"IMPORT.IMPORT_PRODUCTS\\\"></h2><p class=\\\"mr-0 mb-30\\\" ng-show=\\\"vm.sale_order_products.length == 0\\\"><span \\ntranslate=\\\"IMPORT.FILL_TEMPLATE\\\"></span> <a class=\\\"ml-5 mr-5\\\" href=\\\"/assets/files/sale_order_import.b15fdd58.xlsx\\\" \\ntarget=\\\"_blank\\\">sale_order_import.xlsx</a> <span translate=\\\"IMPORT.IMPORT_IT\\\"></span></p><div \\nid=\\\"sale-order-products-uploader\\\" ng-show=\\\"vm.sale_order_products.length == 0\\\" flow-init=\\\"vm.ngFlowOptions\\\" \\nflow-name=\\\"vm.ngFlow.flow\\\" flow-file-success=\\\"vm.uploadFileSuccess($file, $message)\\\" \\nflow-file-added=\\\"vm.fileAdded($file)\\\"><div class=\\\"mb-20\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-button \\nng-if=\\\"product.cover\\\" class=\\\"md-primary md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">Change File</span>\\n</md-button><md-button ng-if=\\\"!product.cover\\\" class=\\\"md-raised no-margin\\\" flow-btn><span translate=\\\"IMPORT.FILE\\\">\\nSet File</span></md-button><span ng-if=\\\"vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\">{{vm.filename}}</span> <span \\nng-if=\\\"!vm.fileLoaded\\\" class=\\\"secondary-text pl-8\\\" translate=\\\"IMPORT.FILE_FORMAT\\\">Only XLS and XLSX</span></div></div>\\n<div ng-if=\\\"vm.loading\\\" class=\\\"md-padding\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular \\nmd-diameter=\\\"20px\\\" class=\\\"mh-8\\\"></md-progress-circular></div><p ng-if=\\\"vm.sale_order_products.length > 0\\\">\\n{{vm.sale_order_products.length}} <span translate=\\\"IMPORT.IMPORTED\\\"></span></p><div layout=\\\"row\\\"><md-button \\nng-disabled=\\\"vm.loading\\\" ng-if=\\\"vm.sale_order_products.length == 0 || !vm.fileLoaded\\\" ng-click=\\\"vm.uploadFile(true)\\\" \\nclass=\\\"md-raised md-primary m-0\\\" translate=\\\"IMPORT.IMPORT\\\" flex></md-button><md-button ng-disabled=\\\"vm.loading\\\" \\nng-if=\\\"vm.sale_order_products.length > 0\\\" ng-click=\\\"vm.hide()\\\" class=\\\"md-raised md-primary m-0\\\" \\ntranslate=\\\"GENERAL.CLOSE\\\" flex></md-button></div></form></md-dialog-content></md-dialog>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/address-form.html\",\"<div layout=\\\"row\\\" layout-wrap flex><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>\\n{{\\'CONTACTS.ADDRESS_NAME\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.editingAddress.name\\\">\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>\\n{{\\'CONTACTS.ADDRESS_1\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.editingAddress.address_1\\\">\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>\\n{{\\'CONTACTS.ADDRESS_2\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.editingAddress.address_2\\\">\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>\\n{{\\'CONTACTS.CITY\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.editingAddress.city\\\"></md-input-container>\\n<md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.STATE\\' | translate }}</label><input \\ntype=\\\"text\\\" ng-model=\\\"vm.editingAddress.state\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nflex-gt-md=\\\"33\\\"><label>{{\\'CONTACTS.ZIP\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.editingAddress.zip\\\">\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>\\n{{\\'CONTACTS.COUNTRY\\' | translate }}</label><md-select ng-model=\\\"vm.editingAddress.country\\\"><md-option \\nng-repeat=\\\"(countryCode, countryName) in vm.countries\\\" ng-value=\\\"countryCode\\\">{{countryName}}</md-option></md-select>\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label>\\n{{\\'CONTACTS.PHONE_NUMBER\\' | translate }}</label><input type=\\\"text\\\" ng-model=\\\"vm.editingAddress.phone\\\">\\n</md-input-container></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/addresses.html\",\"<div layout=\\\"row\\\" layout-wrap><form name=\\\"vm.addressForm\\\" class=\\\"md-inline-form p-8\\\" novalidate layout=\\\"column\\\" flex \\nng-if=\\\"vm.editingAddress\\\" has-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"><span \\nclass=\\\"md-subhead mb-16\\\" translate=\\\"CONTACTS.NEW_ADDRESS\\\"></span><div \\nng-include=\\\"\\'app/main/apps/contacts/views/contacts/dialogs/contact/tabs/address-form.html\\'\\\"></div><div layout=\\\"row\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><md-checkbox \\nng-model=\\\"vm.editingAddress.is_billing_address\\\" aria-label=\\\"Checkbox 1\\\">{{\\'CONTACTS.IS_BILLING_ADDRESS\\' | translate }}\\n</md-checkbox></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\">\\n<md-checkbox ng-model=\\\"vm.editingAddress.is_shipping_address\\\" aria-label=\\\"Checkbox 1\\\">\\n{{\\'CONTACTS.IS_SHIPPING_ADDRESS\\' | translate }}</md-checkbox></div></div></form><div layout=\\\"row\\\" flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\" class=\\\"p-8\\\" ng-if=\\\"!vm.editingAddress\\\"><md-whiteframe flex \\nclass=\\\"border new-address h-275\\\" md-whiteframe=\\\"-1\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button \\ntranslate=\\\"CONTACTS.ADD_NEW_ADDRESS\\\" ng-click=\\\"vm.newAddress()\\\" \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-button></md-whiteframe></div><div layout=\\\"row\\\" \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\" class=\\\"p-8\\\" ng-repeat=\\\"address in vm.contact.postal_addresses\\\" \\nng-if=\\\"!vm.editingAddress\\\"><md-whiteframe class=\\\"md-whiteframe-1dp h-275\\\" flex><div class=\\\"pt-16 pl-16 h-50\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-font-icon=\\\"icon-map-marker\\\"></md-icon><span class=\\\"md-subhead\\\">\\n{{address.name}}</span> <span flex></span><md-menu md-position-mode=\\\"target-right target\\\" ng-if=\\\"!address.deleting\\\" \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"><md-button aria-label=\\\"Open demo menu\\\" \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu($event)\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content width=\\\"4\\\"><md-menu-item><md-button ng-click=\\\"vm.editAddress(address)\\\" \\ntranslate=\\\"CONTACTS.EDIT_ADDRESS\\\"><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon></md-button></md-menu-item><md-divider>\\n</md-divider><md-menu-item><md-button ng-click=\\\"vm.deleteAddress(address)\\\" translate=\\\"CONTACTS.DELETE_ADDRESS\\\"><md-icon\\n md-font-icon=\\\"icon-trash\\\"></md-icon></md-button></md-menu-item></md-menu-content></md-menu></div><div \\nclass=\\\"md-padding h-175\\\" layout=\\\"column\\\" flex ng-if=\\\"!address.deleting\\\"><p class=\\\"mv-5\\\">{{address.address_1}}</p><p \\nclass=\\\"mv-5\\\" ng-if=\\\"address.address_2\\\">{{address.address_2}}</p><p class=\\\"mv-5\\\">{{address.city}},&nbsp;<span \\nng-if=\\\"address.state\\\">{{address.state}},&nbsp;</span>{{address.zip}}</p><p class=\\\"mv-5\\\">\\n{{vm.countries[address.country]}}</p><p class=\\\"mv-5\\\" ng-if=\\\"address.phone\\\">\\n{{\\'CONTACTS.PHONE_NUMBER\\' | translate}}: {{address.phone | phonenumber}}</p></div><div class=\\\"md-padding h-160\\\" \\nlayout=\\\"column\\\" flex ng-if=\\\"address.deleting\\\"><p translate=\\\"CONTACTS.DELETE_ADDRESS_MESSAGE\\\"></p></div><div \\nclass=\\\"p-8\\\" layout=\\\"row\\\" layout-align=\\\"end end\\\" ng-if=\\\"address.deleting\\\"><md-button class=\\\"md-raised\\\" \\ntranslate=\\\"CONTACTS.CANCEL\\\" ng-click=\\\"vm.cancelDeletingAddress(address)\\\"></md-button><md-button class=\\\"md-warn\\\" \\ntranslate=\\\"CONTACTS.DELETE\\\" ng-click=\\\"vm.confirmDeletingAddress(address)\\\"></md-button></div><div \\nclass=\\\"border-top ph-16 pv-8 md-background-bg md-hue-2 h-50\\\" layout=\\\"row\\\" layout-align=\\\"start start\\\" \\nng-if=\\\"!address.deleting\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"mv-5\\\" \\nng-if=\\\"(address.is_billing_address || address.is_shipping_address) && !address.editing\\\"><md-icon \\nmd-font-icon=\\\"icon-file-document\\\" ng-if=\\\"address.is_billing_address\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'CONTACTS.IS_BILLING_ADDRESS\\' | translate}}</md-tooltip></md-icon><md-icon md-font-icon=\\\"icon-truck\\\" \\nng-if=\\\"address.is_shipping_address\\\" ng-class=\\\"{\\'ml-8\\':address.is_billing_address}\\\"><md-tooltip md-direction=\\\"top\\\">\\n{{\\'CONTACTS.IS_SHIPPING_ADDRESS\\' | translate}}</md-tooltip></md-icon><span flex></span></div></div></md-whiteframe>\\n</div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/billing.html\",\"<form name=\\\"vm.billingForm\\\" class=\\\"md-inline-form\\\" novalidate layout=\\\"column\\\" flex><div layout=\\\"row\\\" flex=\\\"100\\\" \\nlayout-wrap><md-input-container class=\\\"md-icon-float\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon md-font-icon=\\\"icon-bank\\\" \\nclass=\\\"icon\\\"></md-icon><label translate=\\\"CONTACTS.PAYMENT_METHOD\\\"></label><md-select \\nng-model=\\\"vm.contact.payment_method\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'contacts.contacts.create\\') && !Session.hasPermission(\\'contacts.contacts.update\\')\\\">\\n<md-option ng-repeat=\\\"payment_method in vm.paymentMethods\\\" ng-value=\\\"payment_method.id\\\">{{payment_method.name}}\\n</md-option></md-select></md-input-container><md-input-container flex=\\\"50\\\" flex-gt-sm=\\\"25\\\" class=\\\"mt-5\\\"><md-checkbox \\nng-model=\\\"vm.contact.exclude_taxes\\\" aria-label=\\\"Exclude taxes\\\" flex \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\">\\n{{\\'CONTACTS.EXCLUDE_TAXES\\' | translate }}</md-checkbox></md-input-container><md-input-container flex=\\\"50\\\" \\nflex-gt-sm=\\\"25\\\" class=\\\"mt-5\\\"><md-checkbox ng-model=\\\"vm.contact.surcharge\\\" \\nng-disabled=\\\"vm.contact.exclude_taxes || (!Session.hasPermission(\\'contacts.contacts.create\\') && !Session.hasPermission(\\'contacts.contacts.update\\'))\\\" \\naria-label=\\\"Equivalence surcharge\\\" flex>{{\\'CONTACTS.EQUIVALENCE_SURCHARGE\\' | translate }}</md-checkbox>\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.IBAN\\\">\\n</label><md-icon md-font-icon=\\\"icon-credit-card\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.iban\\\" type=\\\"text\\\" \\nng-iban has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.SWIFT\\\"></label><md-icon \\nmd-font-icon=\\\"icon-credit-card\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.swift\\\" type=\\\"text\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.INVOICE_TYPE\\\"></label><md-icon \\nmd-font-icon=\\\"icon-document\\\" class=\\\"icon\\\"></md-icon><md-select ng-model=\\\"vm.contact.invoice_type\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'contacts.contacts.create\\') && !Session.hasPermission(\\'contacts.contacts.update\\')\\\">\\n<md-option ng-repeat=\\\"(code,value) in vm.contactInvoicingTypes\\\" value=\\\"{{value}}\\\">{{\\'CONTACTS.\\' + code | translate}}\\n</md-option></md-select></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.PRICING_TIER\\\"></label><md-icon md-font-icon=\\\"icon-layers\\\" class=\\\"icon\\\"></md-icon><md-select \\nng-model=\\\"vm.contact.pricing_tier\\\" \\nng-disabled=\\\"!Session.hasPermission(\\'contacts.contacts.create\\') && !Session.hasPermission(\\'contacts.contacts.update\\')\\\">\\n<md-option ng-repeat=\\\"pricingTier in vm.pricingTiers\\\" value=\\\"{{pricingTier.id}}\\\">{{pricingTier.name}}</md-option>\\n</md-select></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.DISCOUNT\\\"></label><md-icon md-font-icon=\\\"icon-percent\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.discount\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\"><label translate=\\\"CONTACTS.EARLY_PAYMENT_DISCOUNT\\\">\\n</label><md-icon md-font-icon=\\\"icon-percent\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.early_payment_discount\\\" type=\\\"number\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container></div></form>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/information.html\",\"<form name=\\\"vm.contactForm\\\" class=\\\"md-inline-form\\\" novalidate layout=\\\"column\\\" flex><div layout=\\\"row\\\" layout-wrap \\nflex=\\\"100\\\"><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.COMPANY_LEGAL_NAME\\\"></label><md-icon md-font-icon=\\\"icon-domain\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.name\\\" type=\\\"text\\\" has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.VAT\\\"></label><md-icon md-font-icon=\\\"icon-bank\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.vat\\\" type=\\\"text\\\" has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\">\\n</md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label \\ntranslate=\\\"CONTACTS.FIRST_NAME\\\"></label><md-icon md-font-icon=\\\"icon-account\\\" class=\\\"icon\\\"></md-icon><input \\nng-model=\\\"vm.contact.first_name\\\" type=\\\"text\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"CONTACTS.LAST_NAME\\\"></label><md-icon \\nmd-font-icon=\\\"icon-account\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.last_name\\\" type=\\\"text\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"CONTACTS.EMAIL\\\">\\n</label><md-icon md-font-icon=\\\"icon-email\\\" class=\\\"icon\\\"></md-icon><input ng-model=\\\"vm.contact.email\\\" type=\\\"text\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><label translate=\\\"USERS.DEFAULT_LANGUAGE\\\">Language</label>\\n<md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-flag-checkered-variant\\\"></md-icon><md-select \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-model=\\\"vm.contact.lang\\\" translate>\\n<md-option aria-label=\\\"{{lang.title}}\\\" ng-repeat=\\\"(iso, lang) in vm.languages\\\" ng-value=\\\"lang.code\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><img class=\\\"flag mr-5\\\" src=\\\"assets/images/flags/{{lang.flag}}.png\\\"> <span>\\n{{lang.translation | translate}}</span></div></md-option></md-select></md-input-container><md-input-container \\nflex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><md-icon md-font-icon=\\\"icon-phone\\\" class=\\\"icon\\\"></md-icon><label \\ntranslate=\\\"CONTACTS.PHONE_NUMBER\\\"></label><input ng-model=\\\"vm.contact.phone\\\" type=\\\"text\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container flex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><md-icon md-font-icon=\\\"icon-cellphone-iphone\\\" class=\\\"icon\\\"></md-icon>\\n<label translate=\\\"CONTACTS.MOBILE_PHONE_NUMBER\\\"></label><input ng-model=\\\"vm.contact.mobile_phone\\\" type=\\\"text\\\" \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></md-input-container>\\n<md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" ng-hide=\\\"vm.forceCustomer\\\"><md-icon \\nmd-font-icon=\\\"icon-clipboard-account\\\" class=\\\"icon\\\"></md-icon><label translate=\\\"CONTACTS.TYPE\\\"></label><md-select \\nng-model=\\\"vm.contact.type\\\" \\nng-disabled=\\\"vm.forceCustomer || (!Session.hasPermission(\\'contacts.create\\') &&  !Session.hasPermission(\\'contacts.update\\'))\\\" \\ntranslate-attr-placeholder=\\\"CONTACTS.TYPE\\\" required md-no-asterisk=\\\"false\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-option \\nng-repeat=\\\"(code,value) in vm.contactTypes\\\" ng-value=\\\"code\\\">{{\\'CONTACTS.\\' + value | translate}}</md-option></md-select>\\n</md-input-container><md-input-container class=\\\"md-icon-float md-icon-left md-block\\\" flex=\\\"50\\\" flex-gt-sm=\\\"25\\\"><md-icon\\n class=\\\"icon\\\" md-font-icon=\\\"icon-cake\\\"></md-icon><label>{{\\'CONTACTS.BIRTHDAY\\' | translate }}</label><md-datepicker \\nmd-hide-icons=\\\"calendar\\\" md-open-on-focus \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-model=\\\"vm.contact.birthday\\\">\\n</md-datepicker></md-input-container><md-input-container class=\\\"md-icon-float md-block\\\" flex=\\\"50\\\" flex-gt-sm=\\\"25\\\">\\n<md-icon class=\\\"icon\\\" md-font-icon=\\\"icon-gender-transgender\\\"></md-icon><label>{{\\'CONTACTS.GENDER\\' | translate }}\\n</label><md-select has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" \\nng-model=\\\"vm.contact.gender\\\" placeholder=\\\"{{\\'CONTACTS.GENDER\\' | translate }}\\\"><md-option ng-value=\\\"1\\\" \\ntranslate=\\\"CUSTOMERS.MALE\\\"></md-option><md-option ng-value=\\\"2\\\" translate=\\\"CUSTOMERS.FEMALE\\\"></md-option><md-option \\nng-value=\\\"3\\\" translate=\\\"CUSTOMERS.OTHER\\\"></md-option></md-select></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block mt-0\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-checkbox flex \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" ng-model=\\\"vm.contact.data_consent\\\">\\n{{\\'CONTACTS.DATA_CONSENT\\' | translate }}</md-checkbox></md-input-container><md-input-container \\nclass=\\\"md-icon-float md-block mt-0\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-checkbox flex \\nhas-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\" \\nng-model=\\\"vm.contact.marketing_consent\\\">{{\\'CONTACTS.MARKETING_CONSENT\\' | translate }}</md-checkbox>\\n</md-input-container><md-input-container class=\\\"md-block\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\"><md-icon md-font-icon=\\\"icon-note\\\" \\nclass=\\\"icon\\\"></md-icon><label translate=\\\"CONTACTS.NOTES\\\"></label><textarea ng-model=\\\"vm.contact.notes\\\" type=\\\"text\\\" \\nmax-rows=\\\"4\\\" has-permission-else-disable=\\\"contacts.contacts.create,contacts.contacts.update\\\"></textarea>\\n</md-input-container><div flex flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" layout=\\\"row\\\" class=\\\"md-block\\\"><md-icon \\nmd-font-icon=\\\"icon-tag\\\" class=\\\"icon m-5 mt-15\\\"></md-icon><md-chips ng-model=\\\"vm.contact.tags\\\" flex \\nplaceholder=\\\"{{\\'PRODUCT.TYPE_A_TAG\\' | translate}}\\\" secondary-placeholder=\\\"{{\\'PRODUCT.TYPE_ANOTHER_TAG\\' | translate}}\\\" \\nclass=\\\"s16\\\"></md-chips></div></div></form>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/invoices.html\",\"<div layout=\\\"row\\\" class=\\\"h-400\\\"><table class=\\\"dataTable row-border hover\\\" datatable \\ndt-instance=\\\"vm.dtInstanceInvoices\\\" dt-options=\\\"vm.dtOptionsInvoices\\\" dt-columns=\\\"vm.dtColumnsInvoices\\\" \\nid=\\\"invoices-datatable-table\\\"></table></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/persons.html\",\"<div layout=\\\"row\\\" layout-wrap><form name=\\\"vm.personForm\\\" class=\\\"md-inline-form p-8\\\" novalidate layout=\\\"column\\\" flex \\nng-if=\\\"vm.editingPerson\\\" has-permission=\\\"contacts.contacts.create,contacts.contacts.contacts.update\\\"><span \\nclass=\\\"md-subhead mb-16\\\" translate=\\\"CONTACTS.NEW_PERSON\\\"></span><div layout=\\\"row\\\" layout-wrap flex><md-input-container \\nflex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label translate=\\\"CONTACTS.FIRST_NAME\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"vm.editingPerson.first_name\\\" required></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nflex-gt-md=\\\"33\\\"><label translate=\\\"CONTACTS.LAST_NAME\\\"></label><input type=\\\"text\\\" ng-model=\\\"vm.editingPerson.last_name\\\">\\n</md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label translate=\\\"CONTACTS.EMAIL\\\">\\n</label><input type=\\\"email\\\" ng-model=\\\"vm.editingPerson.email\\\"></md-input-container><md-input-container flex=\\\"100\\\" \\nflex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\"><label translate=\\\"CONTACTS.PHONE_NUMBER\\\"></label><input type=\\\"text\\\" \\nng-model=\\\"vm.editingPerson.phone\\\"></md-input-container><md-input-container flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\">\\n<label translate=\\\"CONTACTS.NOTES\\\"></label><input type=\\\"text\\\" ng-model=\\\"vm.editingPerson.notes\\\"></md-input-container>\\n</div></form><div layout=\\\"row\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" flex-gt-md=\\\"33\\\" class=\\\"p-8\\\" ng-if=\\\"!vm.editingPerson\\\" \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"><md-whiteframe flex class=\\\"border new-person h-170\\\" \\nmd-whiteframe=\\\"-1\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-button translate=\\\"CONTACTS.ADD_NEW_PERSON\\\" \\nng-click=\\\"vm.newPerson()\\\"></md-button></md-whiteframe></div><div layout=\\\"row\\\" flex=\\\"100\\\" flex-gt-sm=\\\"50\\\" \\nflex-gt-md=\\\"33\\\" class=\\\"p-8\\\" ng-repeat=\\\"person in vm.contact.persons\\\" ng-if=\\\"!vm.editingPerson\\\"><md-whiteframe \\nclass=\\\"md-whiteframe-1dp h-170\\\" flex><div class=\\\"pt-16 pl-16 h-50\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\" \\nng-if=\\\"!person.deleting\\\"><md-icon md-font-icon=\\\"icon-account-circle\\\"></md-icon><span class=\\\"md-subhead pl-8\\\">\\n{{person | personname}}</span> <span flex></span><md-menu md-position-mode=\\\"target-right target\\\" \\nng-if=\\\"!person.deleting\\\" has-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"><md-button \\naria-label=\\\"Open demo menu\\\" class=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu($event)\\\"><md-icon \\nmd-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content width=\\\"4\\\"><md-menu-item><md-button \\nng-click=\\\"vm.editPerson(person)\\\" translate=\\\"CONTACTS.EDIT_PERSON\\\"><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon>\\n</md-button></md-menu-item><md-divider></md-divider><md-menu-item><md-button ng-click=\\\"vm.deletePerson(person)\\\" \\ntranslate=\\\"CONTACTS.DELETE_PERSON\\\"><md-icon md-font-icon=\\\"icon-trash\\\"></md-icon></md-button></md-menu-item>\\n</md-menu-content></md-menu></div><div class=\\\"md-padding h-120\\\" layout=\\\"column\\\" flex ng-if=\\\"!person.deleting\\\"><div \\nclass=\\\"mv-5\\\" ng-if=\\\"person.email\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"s16 mr-8\\\" \\nmd-font-icon=\\\"icon-mail-ru\\\"></md-icon><span flex>{{person.email}}</span></div><div class=\\\"mv-5\\\" ng-if=\\\"person.phone\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"s16 mr-8\\\" md-font-icon=\\\"icon-phone\\\"></md-icon><span flex>\\n{{person.phone | phonenumber}}</span></div><div class=\\\"mv-5\\\" ng-if=\\\"person.notes\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-icon class=\\\"s16 mr-8\\\" md-font-icon=\\\"icon-note\\\"></md-icon><span flex>{{person.notes}}\\n</span></div></div><div class=\\\"md-padding\\\" layout=\\\"column\\\" flex ng-if=\\\"person.deleting\\\" \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"><p translate=\\\"CONTACTS.DELETE_PERSON_MESSAGE\\\"></p>\\n</div><div class=\\\"p-8\\\" layout=\\\"row\\\" layout-align=\\\"end end\\\" ng-if=\\\"person.deleting\\\" \\nhas-permission=\\\"contacts.contacts.create,contacts.contacts.update\\\"><md-button class=\\\"md-raised\\\" \\ntranslate=\\\"CONTACTS.CANCEL\\\" ng-click=\\\"vm.cancelDeletingPerson(person)\\\"></md-button><md-button class=\\\"md-warn\\\" \\ntranslate=\\\"CONTACTS.DELETE\\\" ng-click=\\\"vm.confirmDeletingPerson(person)\\\"></md-button></div></md-whiteframe></div></div>\");\n$templateCache.put(\"app/main/apps/contacts/views/contacts/dialogs/contact/tabs/purchases.html\",\"<div layout=\\\"row\\\" class=\\\"h-400\\\"><table class=\\\"dataTable row-border hover\\\" datatable dt-instance=\\\"vm.dtInstance\\\" \\ndt-options=\\\"vm.dtOptions\\\" dt-columns=\\\"vm.dtColumns\\\" id=\\\"purchases-datatable-table\\\"></table></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/import-edit-wizard.html\",\"<div flex layout=\\\"column\\\" layout-align=\\\"center center\\\" class=\\\"wizard-container\\\" id=\\\"import-edit-wizard\\\"><md-card \\nclass=\\\"m-0 form-card\\\" flex><md-card-title><md-card-title-text><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><span \\nclass=\\\"h2\\\" translate=\\\"{{vm.wizard.step.title}}\\\"></span></div></md-card-title-text></md-card-title><md-card-content \\nclass=\\\"pb-0\\\"><div ng-include=\\\"vm.getTemplateUrl(vm.wizard.step.template)\\\"></div></md-card-content><md-card-footer \\nclass=\\\"pt-0\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex>\\n<md-button class=\\\"md-primary\\\" ng-if=\\\"vm.showBackOption()\\\" ng-click=\\\"vm.prevStep()\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-arrow-left\\\" class=\\\"mr-8\\\"></md-icon><span>\\n{{\\\"PRODUCT.BACK\\\" | translate}}</span></div></md-button></div><md-button class=\\\"stroked\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\"></md-button></div></md-card-footer></md-card></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/low-stock/tabs/purchases/by_provider/purchases_by_provider.html\",\"<div id=\\\"purchases-by-provider\\\" flex layout=\\\"column\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div layout=\\\"row\\\" flex>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar product-variant-toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"product-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.status.search\\\" ng-change=\\\"vm.getGridPage(false)\\\" \\nng-model-options=\\\"{debounce: { default: 500, blur: 0}, updateOn: \\'default blur\\'}\\\" type=\\\"text\\\" placeholder=\\\"Search\\\" \\nclass=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate translate-attr-placeholder=\\\"GENERAL.SEARCH\\\">\\n</md-input-container><span flex></span><md-button ng-click=\\\"vm.downloadCSV()\\\" class=\\\"md-primary m-0\\\" \\nng-disabled=\\\"vm.exporting\\\"><div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" \\nmd-diameter=\\\"16px\\\" ng-if=\\\"vm.exporting\\\"></md-progress-circular><span translate=\\\"CUSTOMERS.EXPORT_CSV\\\" \\nng-class=\\\"{\\'ml-8\\': vm.exporting}\\\">Export CSV</span></div></md-button></div><div class=\\\"full-width h-0\\\">\\n<md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" \\nng-if=\\\"vm.loading || vm.scope.performingAnalysis\\\"></md-progress-linear></div><md-content \\nclass=\\\"content uid-grid-container\\\" flex><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination ui-grid-move-columns \\nui-grid-exporter ui-grid-resize-columns ui-grid-pinning ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize \\nui-grid-exporter ui-grid-edit ui-grid-row-edit class=\\\"grid\\\" style=\\\"height: 100%\\\"></div></md-content></div></div></div>\\n</div>\");\n$templateCache.put(\"app/main/apps/inventory/views/low-stock/tabs/purchases/by_product/purchases_by_product.html\",\"<div id=\\\"purchases-by-product\\\" flex layout=\\\"column\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex><div layout=\\\"row\\\" flex>\\n<div layout=\\\"column\\\" flex><div class=\\\"toolbar product-variant-toolbar\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input w-200\\\"><md-icon md-font-icon=\\\"icon-magnify\\\"></md-icon><input \\nid=\\\"product-search\\\" nd-mute-barcode-callbacks ng-model=\\\"vm.status.search\\\" \\nng-change=\\\"vm.getGridProductsVariantsReplenishmentsPage(false)\\\" ng-model-options=\\\"{debounce:500}\\\" type=\\\"text\\\" \\nplaceholder=\\\"Search\\\" class=\\\"secondary-text\\\" maxlength=\\\"{{vm.SEARCH_MAX_LENGTH}}\\\" translate \\ntranslate-attr-placeholder=\\\"GENERAL.SEARCH\\\"></md-input-container><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.status.dynamicFilters.providers.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-store\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.providers\\\" multiple=\\\"multiple\\\" flex placeholder=\\\"{{\\'LOW_STOCK.PROVIDER\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"provider in vm.providers | orderBy: \\'position\\'\\\" \\nng-value=\\\"provider.id\\\">{{provider.name}}</md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" ng-click=\\\"vm.toggleFilterVisibility(\\'providers\\', vm.status.dynamicFilters.providers)\\\">\\n<md-icon md-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.status.dynamicFilters.availabilityStatuses.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/playlist_add_check.9ce53b3a.svg\\\" class=\\\"ng-scope md-default-theme\\\">\\n</md-icon><md-select ng-model=\\\"vm.status.filters.availabilityStatuses\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.AVAILABILITY_STATUS\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"availabilityStatus in vm.availabilityStatuses | orderBy: \\'position\\'\\\" ng-value=\\\"availabilityStatus\\\"><div \\nclass=\\\"replenishment-stock-status mr-5 {{availabilityStatus}}\\\"></div>\\n{{\\'INVENTORY_DASHBOARD.\\' + availabilityStatus | translate}}</md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'availabilityStatuses\\', vm.status.dynamicFilters.availabilityStatuses)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.status.dynamicFilters.abcCategories.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/abc.3172f407.svg\\\">\\n</md-icon><md-select ng-model=\\\"vm.status.filters.abcCategories\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.ABC_CATEGORY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"abcCategory in vm.abcCategories | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" \\nng-value=\\\"abcCategory\\\"><div class=\\\"abc-box type-{{abcCategory}}\\\">{{abcCategory}}</div></md-option></md-select>\\n</md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'abcCategories\\', vm.status.dynamicFilters.abcCategories)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.status.dynamicFilters.brands.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-tag-outline\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.brands\\\" multiple=\\\"multiple\\\" flex placeholder=\\\"{{\\'INVENTORY_DASHBOARD.BRAND\\' | translate}}\\\" \\nng-change=\\\"vm.filterChanged()\\\"><md-option ng-repeat=\\\"brand in vm.brands | orderBy: \\'position\\'\\\" \\nclass=\\\"status-badge-replenishments\\\" ng-value=\\\"brand.id\\\"><span>{{brand.name}}</span></md-option></md-select>\\n</md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'brands\\', vm.status.dynamicFilters.brands)\\\"><md-icon md-font-icon=\\\"icon-close\\\">\\n</md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" ng-if=\\\"vm.status.dynamicFilters.categories.visible\\\">\\n<md-input-container md-no-float class=\\\"nd-search-input nd-filter-input\\\"><md-icon \\nmd-font-icon=\\\"icon-folder-multiple-outline\\\" class=\\\"s24\\\"></md-icon><md-select ng-model=\\\"vm.status.filters.categories\\\" \\nmultiple=\\\"multiple\\\" flex placeholder=\\\"{{\\'INVENTORY_DASHBOARD.CATEGORY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\">\\n<md-option ng-repeat=\\\"category in vm.categories | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" \\nng-value=\\\"category.id\\\"><span>{{category.name}}</span></md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'categories\\', vm.status.dynamicFilters.categories)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.status.dynamicFilters.subcategories.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-folder-outline\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.subcategories\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.SUBCATEGORY\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"subcategory in vm.subcategories | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" \\nng-value=\\\"subcategory.id\\\"><span>{{subcategory.name}}</span></md-option></md-select></md-input-container><md-button \\nclass=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'subcategories\\', vm.status.dynamicFilters.subcategories)\\\"><md-icon \\nmd-font-icon=\\\"icon-close\\\"></md-icon></md-button></div><div class=\\\"ml-10\\\" layout=\\\"row\\\" \\nng-if=\\\"vm.status.dynamicFilters.seasons.visible\\\"><md-input-container md-no-float \\nclass=\\\"nd-search-input nd-filter-input\\\"><md-icon md-font-icon=\\\"icon-weather-sunny\\\" class=\\\"s24\\\"></md-icon><md-select \\nng-model=\\\"vm.status.filters.seasons\\\" multiple=\\\"multiple\\\" flex \\nplaceholder=\\\"{{\\'INVENTORY_DASHBOARD.SEASON\\' | translate}}\\\" ng-change=\\\"vm.filterChanged()\\\"><md-option \\nng-repeat=\\\"season in vm.seasons | orderBy: \\'position\\'\\\" class=\\\"status-badge-replenishments\\\" ng-value=\\\"season.id\\\"><span>\\n{{season.name}}</span></md-option></md-select></md-input-container><md-button class=\\\"md-icon-button no-margin\\\" \\nng-click=\\\"vm.toggleFilterVisibility(\\'seasons\\', vm.status.dynamicFilters.seasons)\\\"><md-icon md-font-icon=\\\"icon-close\\\">\\n</md-icon></md-button></div><md-menu><md-button class=\\\"md-button md-primary stroked\\\" ng-click=\\\"$mdMenu.open($event)\\\">\\n<div layout=\\\"row\\\" layout-align=\\\"center center\\\"><md-icon md-menu-origin class=\\\"mr-5\\\" \\nmd-svg-icon=\\\"assets/images/custom-material-design-icons/filter-variant-plus.90ad7787.svg\\\"></md-icon>\\n{{\\'INVENTORY_DASHBOARD.ADD_FILTER\\' | translate}}</div></md-button><md-menu-content><md-menu-item \\nng-repeat=\\\"(property, filter) in vm.status.dynamicFilters\\\" ng-hide=\\\"filter.visible\\\"><md-button \\nng-click=\\\"vm.toggleFilterVisibility(property, filter)\\\"><md-icon md-menu-align-target md-font-icon \\nng-if=\\\"filter.svgIcon\\\" md-svg-icon=\\\"{{filter.svgIcon}}\\\"></md-icon><md-icon md-menu-align-target \\nmd-font-icon=\\\"{{filter.icon}}\\\" ng-if=\\\"!filter.svgIcon\\\"></md-icon>{{filter.title | translate}}</md-button>\\n</md-menu-item></md-menu-content></md-menu><span ng-if=\\\"vm.keptSelectionArray.length\\\" class=\\\"secondary-text ml-10\\\">\\n{{\\'PRODUCTS.N_PRODUCTS_SELECTED\\' | translate: {n: vm.keptSelectionArray.length} }} </span><span flex></span><md-button \\nng-click=\\\"vm.downloadCSV()\\\" class=\\\"md-primary m-0\\\" ng-disabled=\\\"vm.exporting\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular class=\\\"md-hue-2\\\" md-diameter=\\\"16px\\\" ng-if=\\\"vm.exporting\\\">\\n</md-progress-circular><span translate=\\\"CUSTOMERS.EXPORT_CSV\\\" ng-class=\\\"{\\'ml-8\\': vm.exporting}\\\">Export CSV</span></div>\\n</md-button></div><div class=\\\"full-width h-0\\\"><md-progress-linear md-mode=\\\"indeterminate\\\" class=\\\"loader md-primary\\\" \\nng-if=\\\"vm.loading || vm.performingAnalysis\\\"></md-progress-linear></div><md-content class=\\\"content uid-grid-container\\\" \\nflex><div ui-grid=\\\"vm.gridOptions\\\" ui-grid-pagination ui-grid-move-columns ui-grid-selection ui-grid-exporter \\nui-grid-resize-columns ui-grid-pinning ui-grid-cellnav ui-grid-save-state ui-grid-auto-resize ui-grid-exporter \\nui-grid-edit ui-grid-row-edit class=\\\"grid\\\" style=\\\"height: 100%\\\"></div></md-content></div></div></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/low-stock/tabs/replenishments/by_warehouse/replenishments_by_warehouse.html\",\"<div id=\\\"replenishments-by-warehouse\\\" flex layout=\\\"column\\\"><div class=\\\"center\\\" layout=\\\"column\\\" flex>\\n<nd-barcode-listener callback=\\\"vm.barcodeListenerCallback(barcode)\\\"></nd-barcode-listener><nd-replenish-by-warehouse \\nclass=\\\"mb-16\\\" flex performing-analysis=\\\"vm.performingAnalysis\\\" perform-analysis=\\\"vm.performAnalysis\\\">\\n</nd-replenish-by-warehouse></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-provider-price/dialogs/product-provider-price-dialog.html\",\"<md-dialog class=\\\"product-provider-price-dialog\\\" aria-label=\\\"Brand\\\"><form ng-cloak name=\\\"productProviderPriceForm\\\">\\n<md-dialog-content><h2 translate=\\\"PRODUCT.NEW_PRODUCT_PROVIDER\\\" class=\\\"m-0\\\" ng-if=\\\"!vm.productProviderPrice.id\\\"></h2>\\n<h2 translate=\\\"PRODUCT.EDIT_PRODUCT_PROVIDER\\\" class=\\\"m-0\\\" ng-if=\\\"vm.productProviderPrice.id\\\"></h2><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-autocomplete flex=\\\"100\\\" ng-class=\\\"\\'contact\\'\\\" \\nmd-selected-item=\\\"vm.productProviderPrice.provider_instance\\\" md-search-text=\\\"vm.searchContact\\\" \\nmd-items=\\\"contact in vm.querySearch()\\\" md-selected-item-change=\\\"vm.selectContact(contact)\\\" md-item-text=\\\"contact.name\\\" \\nmd-floating-label=\\\"{{\\'PURCHASE.PROVIDER_CONTACT\\' | translate}}\\\" md-min-length=\\\"3\\\" md-clear-button=\\\"true\\\" \\nmd-delay=\\\"500\\\" required><span md-highlight-text=\\\"vm.searchContact\\\">\\n{{contact.name||\\'-\\'}} / {{contact.first_name||\\'-\\'}} {{contact.last_name}}</span><md-not-found>\\n{{\\'GENERAL.CONTACT_NOT_FOUND\\' | translate}}</md-not-found></md-autocomplete></div><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><md-input-container flex class=\\\"mb-0 w-200 pr-8\\\"><input \\nng-model=\\\"vm.productProviderPrice.provider_product_code\\\" placeholder=\\\"{{\\'PRODUCT.PROVIDER_PRODUCT_CODE\\' | translate}}\\\" \\ntype=\\\"text\\\"></md-input-container><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container flex \\nclass=\\\"mb-0 w-200\\\"><input ng-model=\\\"vm.productProviderPrice.provider_price\\\" \\nplaceholder=\\\"{{\\'PRODUCT.PROVIDER_PRICE\\' | translate}}\\\" min=\\\"0\\\" step=\\\"0.000001\\\" type=\\\"number\\\" required>\\n</md-input-container><span>{{vm.productProviderPrice.provider_currency | currencyCharacter}}</span></div></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-select ng-model=\\\"vm.productProviderPrice.tax\\\" class=\\\"no-margin\\\" \\nplaceholder=\\\"{{ \\'PRODUCT.TAX\\' | translate}}\\\" flex><md-option ng-repeat=\\\"tax in vm.taxes | orderBy: \\'percent_value\\'\\\" \\nvalue=\\\"{{tax.id}}\\\"><span>{{tax.name}}: </span><strong>{{tax.percent_value | price}}%</strong></md-option></md-select>\\n<md-input-container flex class=\\\"w-200 pr-8\\\"><label translate=\\\"PRODUCT.FOB_PRICE_CURRENCY\\\"></label><md-select \\nng-model=\\\"vm.productProviderPrice.provider_currency\\\" class=\\\"no-margin\\\"><md-option \\nng-value=\\\"vm.session.company.currency\\\" class=\\\"secondary-text\\\">\\n{{vm.session.company.currency}} ({{vm.CURRENCIES[vm.session.company.currency]}})</md-option><md-option \\nng-if=\\\"key != vm.session.company.currency\\\" ng-repeat=\\\"(key, symbol) in vm.CURRENCIES\\\" ng-value=\\\"key\\\">\\n{{key}} ({{symbol}})</md-option></md-select></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n<div layout-align=\\\"start center\\\" layout=\\\"row\\\" flex=\\\"50\\\" class=\\\"pr-8\\\"><md-input-container class=\\\"mb-0\\\" flex><label \\ntranslate=\\\"PRODUCT.FINAL_COST_PRICE\\\"></label><input ng-model=\\\"vm.productProviderPrice.final_cost_price\\\" min=\\\"0\\\" \\nstep=\\\"0.000001\\\" type=\\\"number\\\" required></md-input-container><span>{{vm.session.company.currency | currencyCharacter}}\\n</span></div><md-input-container flex class=\\\"w-200\\\"><label translate=\\\"PRODUCT.PRICE_TYPES\\\"></label><md-select \\nng-model=\\\"vm.productProviderPrice.provider_price_type\\\" ng-disabled=\\\"vm.saving\\\" class=\\\"no-margin\\\"><md-option \\nng-repeat=\\\"(type, number) in vm.PROVIDER_PRICE_TYPES\\\" ng-value=\\\"number\\\">{{\\\"PRODUCT.\\\"+ type | translate}}</md-option>\\n</md-select></md-input-container></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\"><md-input-container class=\\\"mb-0\\\">\\n<label translate=\\\"PRODUCT.DATE\\\"></label><md-datepicker md-hide-icons=\\\"calendar\\\" \\nng-model=\\\"vm.productProviderPrice.date\\\" md-placeholder=\\\"{{\\'PRODUCT.DATE\\' | translate}}\\\" md-open-on-focus \\nclass=\\\"no-margin full-width\\\"></md-datepicker></md-input-container></div></md-dialog-content><md-dialog-actions \\nlayout=\\\"row\\\" layout-align=\\\"end center\\\"><md-button ng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\" class=\\\"stroked\\\">\\nCancel</md-button><md-button ng-click=\\\"vm.save()\\\" \\nng-disabled=\\\"!productProviderPriceForm.$valid || !productProviderPriceForm.$dirty\\\" class=\\\"md-primary md-raised\\\" \\ntranslate=\\\"GENERAL.SAVE\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-variants-information/dialogs/product-variant-price-dialog.html\",\"<md-dialog><form ng-cloak><md-dialog-content class=\\\"pb-0\\\"><h2 translate=\\\"PRODUCT.EDIT_PRODUCT_VARIANT_PRICE\\\" \\nclass=\\\"mb-16\\\"></h2><div layout=\\\"row\\\" layout-wrap><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pr-8\\\" flex=\\\"33\\\">\\n<md-input-container class=\\\"no-errors-spacer\\\"><label translate=\\\"PRODUCT.PRICE_EXCL_TAX\\\">Price Excluding Tax</label>\\n<input ng-model=\\\"vm.productVariantPrice.price_excl_tax\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" step=\\\"0.000001\\\" value=\\\"0\\\" \\nclass=\\\"text-right\\\" ng-change=\\\"vm.priceExclTaxChanged()\\\"></md-input-container><span>{{vm.currency}}</span></div><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"33\\\"><md-input-container flex class=\\\"no-errors-spacer\\\"><label \\ntranslate=\\\"PRODUCT.PRICE_INCL_TAX\\\">Price Including Tax</label><input ng-model=\\\"vm.productVariantPrice.price_incl_tax\\\" \\nautocomplete=\\\"off\\\" type=\\\"number\\\" step=\\\"0.000001\\\" value=\\\"0\\\" class=\\\"text-right\\\" ng-change=\\\"vm.priceInclTaxChanged()\\\">\\n</md-input-container><span>{{vm.currency}}</span></div></div><h3 class=\\\"mb-16\\\" \\ntranslate=\\\"PRODUCT.EDIT_PRODUCT_VARIANT_DISCOUNT_PRICE\\\"></h3><div layout=\\\"row\\\" layout-wrap><div layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"pr-8\\\" flex=\\\"33\\\"><md-input-container flex class=\\\"no-errors-spacer\\\"><label \\ntranslate=\\\"PRODUCT.OFFER_PERCENTAGE\\\"></label><input ng-model=\\\"vm.productVariantPrice.discount\\\" autocomplete=\\\"off\\\" \\ntype=\\\"number\\\" step=\\\"0.000001\\\" value=\\\"0\\\" class=\\\"text-right\\\" ng-change=\\\"vm.offerPercentValueChanged()\\\">\\n</md-input-container><span>%</span></div><div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pr-8\\\" flex=\\\"33\\\">\\n<md-input-container flex class=\\\"no-errors-spacer\\\"><label translate=\\\"PRODUCT.DISCOUNT_PRICE_EXCL_TAX\\\"></label><input \\nng-model=\\\"vm.productVariantPrice.discount_price_excl_tax\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" step=\\\"0.000001\\\" value=\\\"0\\\" \\nclass=\\\"text-right\\\" ng-change=\\\"vm.offerPriceExclTaxChanged()\\\"></md-input-container><span>{{vm.currency}}</span></div>\\n<div layout=\\\"row\\\" layout-align=\\\"start center\\\" flex=\\\"33\\\"><md-input-container flex class=\\\"no-errors-spacer\\\"><label \\ntranslate=\\\"PRODUCT.DISCOUNT_PRICE_INCL_TAX\\\"></label><input ng-model=\\\"vm.productVariantPrice.discount_price_incl_tax\\\" \\nautocomplete=\\\"off\\\" type=\\\"number\\\" step=\\\"0.000001\\\" value=\\\"0\\\" class=\\\"text-right\\\" \\nng-change=\\\"vm.offerPriceInclTaxChanged()\\\"></md-input-container><span>{{vm.currency}}</span></div></div>\\n</md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button class=\\\"md-warn stroked\\\" \\nng-disabled=\\\"vm.fetching || vm.deleting\\\" ng-click=\\\"vm.delete()\\\" ng-if=\\\"vm.productVariantPrice.id\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.deleting\\\" class=\\\"mr-8\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular><span translate=\\\"GENERAL.DELETE\\\"></span></div></md-button><span flex>\\n</span><md-button class=\\\"stroked\\\" ng-disabled=\\\"vm.fetching || vm.deleting\\\" ng-click=\\\"vm.cancel()\\\" \\ntranslate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.save()\\\" ng-disabled=\\\"vm.fetching || vm.deleting\\\" \\nclass=\\\"md-raised md-primary\\\" \\nng-disabled=\\\"!vm.productVariantPrice.price_excl_tax || !vm.productVariantPrice.price_incl_tax\\\"><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><md-progress-circular ng-if=\\\"vm.fetching\\\" class=\\\"mr-8\\\" md-diameter=\\\"20\\\" \\nmd-mode=\\\"indeterminate\\\"></md-progress-circular><span translate=\\\"GENERAL.SAVE\\\"></span></div></md-button>\\n</md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/product/directives/nd-product-variants-information/dialogs/product-variant-unit-cost-dialog.html\",\"<md-dialog><form ng-cloak><md-dialog-content class=\\\"pb-0\\\"><h2 translate=\\\"PRODUCT.SET_UNIT_COST\\\" class=\\\"mb-32\\\">\\nSet unit cost</h2><div layout=\\\"row\\\" layout-align=\\\"start start\\\"><md-input-container flex class=\\\"md-icon-float\\\"><label \\ntranslate=\\\"PRODUCT.UNIT_COST\\\">Unit cost</label><input ng-model=\\\"vm.productVariant.ddp_price\\\" autocomplete=\\\"off\\\" \\ntype=\\\"number\\\" step=\\\"0.00001\\\" value=\\\"0.00000\\\" class=\\\"text-right\\\"></md-input-container><span class=\\\"mt-25 font-size-16\\\">\\n{{vm.currency}}</span></div><md-input-container flex class=\\\"md-block\\\"><md-checkbox ng-model=\\\"vm.updateAllProducts\\\" \\naria-label=\\\"{{\\'PRODUCT.APPLY_TO_ALL_VARIANTS\\' |translate}}\\\">{{\\'PRODUCT.APPLY_TO_ALL_VARIANTS\\' |translate}}\\n</md-checkbox></md-input-container></md-dialog-content><md-dialog-actions layout=\\\"row\\\"><md-button class=\\\"stroked\\\" \\nng-click=\\\"vm.cancel()\\\" translate=\\\"GENERAL.CANCEL\\\">Cancel</md-button><md-button ng-click=\\\"vm.save()\\\" \\ntranslate=\\\"GENERAL.SAVE\\\" class=\\\"md-raised md-primary\\\">Save</md-button></md-dialog-actions></form></md-dialog>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-actions/nd-order-product-price-actions/nd-order-product-price-actions.html\",\"<div class=\\\"nd-order-product-price-actions\\\"><div layout-gt-sm=\\\"row\\\" layout=\\\"column\\\" layout-align=\\\"start center\\\">\\n<md-input-container ng-if=\\\"showPriceTaxes && options.productOptions.shippingDate.selected\\\" \\nclass=\\\"nd-input no-errors-spacer\\\" hide-xs hide-sm hide-md><md-datepicker class=\\\"start-date-mini\\\" \\nng-disabled=\\\"!editable\\\" md-hide-icons=\\\"calendar\\\" flex md-placeholder=\\\"{{\\'PURCHASE.START_SHIPPING_DATE\\' | translate}}\\\" \\nng-change=\\\"changePurchaseOrderProductDate(orderProduct)\\\" ng-model=\\\"orderProduct.start_date\\\"></md-datepicker>\\n</md-input-container><div class=\\\"product-price-field\\\" \\nng-if=\\\"options.productOptions.price.selected && options.productOptions.show_prices_incl_tax.visible && options.productOptions.show_prices_incl_tax.selected\\\" \\nhide-xs hide-sm layout=\\\"row\\\" layout-align=\\\"start center\\\"><input class=\\\"nd-input text-right\\\" type=\\\"number\\\" \\nstep=\\\".000001\\\" ng-disabled=\\\"!editable\\\" placeholder=\\\"{{\\'PRODUCT.PRICE\\' | translate}}\\\" \\nng-model=\\\"orderProduct.price_incl_tax\\\" ng-blur=\\\"createOrUpdateOrderProductPrice()\\\"><div class=\\\"field-detail\\\">\\n{{::orderProduct.currency | currencyCharacter}}</div></div><div class=\\\"product-price-field\\\" hide-xs hide-sm \\nng-if=\\\"options.productOptions.price.selected && (!options.productOptions.show_prices_incl_tax.visible || !options.productOptions.show_prices_incl_tax.selected)\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><input class=\\\"nd-input text-right\\\" type=\\\"number\\\" step=\\\"0.000001\\\" min=\\\"0\\\" \\nplaceholder=\\\"{{\\'PRODUCT.PRICE\\' | translate}}\\\" has-permission-else-disable=\\\"app.inventory.purchases.purchase.products\\\" \\nng-disabled=\\\"!editable\\\" ng-model=\\\"orderProduct.price_excl_tax\\\" ng-blur=\\\"createOrUpdateOrderProductPrice()\\\"><div \\nclass=\\\"field-detail\\\" ng-if=\\\"options.productOptions.price.selected\\\">{{::orderProduct.currency | currencyCharacter}}*\\n<md-tooltip>{{\\'PURCHASE.PRODUCT_WITH_NO_TAX\\' | translate}}</md-tooltip></div></div><div hide-xs hide-sm layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\" class=\\\"product-price-field\\\" \\nng-if=\\\"(type === \\'PurchaseOrder\\' || type === \\'PurchaseOrderDelivery\\') && options.productOptions.discount.selected\\\">\\n<input class=\\\"nd-input text-right\\\" type=\\\"number\\\" step=\\\"0.01\\\" min=\\\"0\\\" max=\\\"100\\\" \\nplaceholder=\\\"{{\\'PURCHASE.DISCOUNT\\' | translate}}\\\" \\nhas-permission-else-disable=\\\"app.inventory.purchases.purchase.products\\\" ng-disabled=\\\"!editable\\\" \\nng-model=\\\"orderProduct.discount\\\" ng-focus=\\\"productDiscountOriginal = orderProduct.discount\\\" \\nng-blur=\\\"createOrUpdateOrderProductDiscount()\\\"><div class=\\\"field-detail\\\" \\nng-if=\\\"(type === \\'PurchaseOrder\\' || type === \\'PurchaseOrderDelivery\\') && options.productOptions.discount.selected\\\">%\\n</div></div><div class=\\\"product-price-field product-tax-field\\\" ng-if=\\\"options.productOptions.show_tax_select.selected\\\" \\nhide-xs hide-sm><md-select ng-model=\\\"orderProduct.tax\\\" ng-disabled=\\\"!editable || disableTaxes\\\" \\nclass=\\\"nd-input nd-input\\\" placeholder=\\\"{{\\'PRODUCT.TAX\\' | translate}}\\\" ng-change=\\\"createOrUpdateOrderProductPrice()\\\">\\n<md-option ng-repeat=\\\"tax in taxes | filter:{\\'name\\':vm.taxSearchText} | orderBy: \\'percent_value\\'\\\" value=\\\"{{tax.id}}\\\">\\n{{tax.name}}: {{tax.percent_value | price}} %</md-option><md-option ng-click=\\\"openTaxDialog()\\\" \\nclass=\\\"md-primary-fg nd-new-object-md-option\\\" ng-value=\\\"\\\"><md-icon md-font-icon=\\\"icon-plus\\\" class=\\\"md-primary-fg\\\">\\n</md-icon>{{\\'PURCHASE.NEW_TAX\\' | translate}}</md-option></md-select></div><md-icon \\nng-if=\\\"options.productOptions.show_tax_select.selected && !orderProduct.tax && showPriceTaxes\\\" hide-xs hide-sm hide-md \\nclass=\\\"secondary-text ml-10\\\" md-font-icon=\\\"icon-information-outline\\\"><md-tooltip>\\n{{\\'PURCHASE.PRODUCT_WITH_NO_TAX\\' | translate}}</md-tooltip></md-icon></div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-actions/purchase-order-actions/nd-purchase-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-purchase-actions\\\"><md-card-title-text class=\\\"h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" \\nng-disabled=\\\"order.is_editable || vm.purchaseOrder.status === vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\']\\\" \\norder=\\\"order\\\" type=\\\"type\\\"></nd-add-order-product></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><a \\nclass=\\\"md-link mr-16\\\" download href=\\\"{{vm.purchaseOrder.catalog}}\\\" ng-if=\\\"vm.purchaseOrder.catalog\\\"><md-tooltip>\\n{{\\'COLLECTION.LAST_UPDATE\\' | translate}}: {{vm.purchaseOrder.catalog_last_update | date: \\'short\\'}}</md-tooltip><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon class=\\\"mr-5\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/catalog.fdd681f4.svg\\\"></md-icon></div></a><md-progress-circular \\nclass=\\\"mh-8\\\" md-diameter=\\\"20px\\\" ng-if=\\\"changed || saving || changingStatus\\\"></md-progress-circular><md-button \\nclass=\\\"md-warn m-5 stroked\\\" id=\\\"purchase-cancel-button\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrder.status === vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_ORDERED\\']  && vm.purchaseOrder.purchase_order_deliveries === 0\\\" \\ntranslate=\\\"PURCHASE.CANCEL_ORDER\\\"></md-button><md-button class=\\\"md-warn m-5 stroked\\\" \\nid=\\\"purchase-cancel-reception-button\\\" ng-click=\\\"vm.cancel()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrder.status === vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_PARTIALLY_RECEIVED\\'] && vm.purchaseOrder.purchase_order_deliveries === 0\\\" \\ntranslate=\\\"PURCHASE.CANCEL_RECEPTION\\\"></md-button><md-button class=\\\"md-raised m-5 md-primary stroked\\\" \\ndata-test-id=\\\"newpurchase-button-makepurchase\\\" has-permission=\\\"inventory.purchases.purchase.products.order\\\" \\nid=\\\"purchase-order-button\\\" ng-click=\\\"vm.order()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrder.status === vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\']\\\" \\ntranslate=\\\"PURCHASE.ORDER\\\"></md-button><md-button class=\\\"md-primary m-5 stroked\\\" \\nhas-permission=\\\"inventory.purchases.purchase.products.partially_receive\\\" id=\\\"purchase-partially-receive-button\\\" \\nng-click=\\\"vm.partiallyReceive()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrder.status <= vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_ORDERED\\'] && !order.is_editable\\\" \\ntranslate=\\\"PURCHASE.PARTIALLY_RECEIVE\\\"></md-button><md-button class=\\\"md-raised m-5 md-primary\\\" \\ndata-test-id=\\\"newpurchase-button-recievepurchase\\\" has-permission=\\\"inventory.purchases.purchase.products.receive\\\" \\nid=\\\"purchase-receive-button\\\" ng-click=\\\"vm.receive()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrder.status <= vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_ORDERED\\'] && !order.is_editable\\\" \\ntranslate=\\\"PURCHASE.RECEIVE\\\">Receive</md-button><md-button class=\\\"md-raised m-5 md-primary stroked\\\" \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" id=\\\"purchase-modify-button\\\" \\nng-click=\\\"order.is_editable=!order.is_editable\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\" \\nng-if=\\\"order.is_editable && vm.purchaseOrder.status > vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\']\\\">\\n<span translate=\\\"GENERAL.SAVE\\\"></span></md-button><md-menu class=\\\"mr-5\\\"><md-button aria-label=\\\"more\\\" \\nclass=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu()\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button>\\n<md-menu-content class=\\\"md-menu-content-custom\\\" style=\\\"max-height: 80vh\\\" width=\\\"3\\\"><md-menu-item \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrder.status > vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\']\\\"><md-button \\nclass=\\\"mr-10\\\" ng-click=\\\"order.is_editable=!order.is_editable\\\"><md-icon md-font-icon=\\\"icon-pencil\\\"></md-icon><span \\nng-if=\\\"order.is_editable\\\" translate=\\\"GENERAL.SAVE\\\"></span> {{\\'PURCHASE.EDIT_ORDER\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item has-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\" ng-if=\\\"order.is_editable\\\"><md-button \\nclass=\\\"mr-10\\\" ng-click=\\\"vm.openDialogSetDiscountToAllPurchaseOrderProducts()\\\"><md-icon md-font-icon=\\\"icon-percent\\\">\\n</md-icon>{{\\'PURCHASE.ADD_DISCOUNT_TO_ALL_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\" ng-if=\\\"order.is_editable\\\"><md-button \\nclass=\\\"mr-10\\\" ng-click=\\\"vm.openDialogSetTaxToAllPurchaseOrderProducts()\\\"><md-icon md-font-icon=\\\"icon-percent\\\">\\n</md-icon>{{\\'PURCHASE.ADD_TAX_TO_ALL_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-divider></md-divider>\\n<md-menu-item has-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-if=\\\"vm.purchaseOrder.status === vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\'] || order.is_editable\\\">\\n<md-button ng-click=\\\"vm.importProductsDialog()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-font-icon=\\\"icon-import\\\"></md-icon>{{\\'IMPORT.IMPORT_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"app.wholesale\\\" \\nng-if=\\\"vm.purchaseOrder.status === vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\'] || order.is_editable\\\">\\n<md-button ng-click=\\\"vm.importSaleOrdersDialog()\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-font-icon=\\\"icon-import\\\"></md-icon>{{\\'PURCHASE.IMPORT_SALE_ORDERS\\' | translate}}</md-button></md-menu-item>\\n<md-menu-item><md-button ng-click=\\\"vm.downloadExcel()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-file-excel\\\">\\n</md-icon>{{\\'SALE.DOWNLOAD_EXCEL\\' | translate}}</md-button></md-menu-item><md-divider></md-divider><md-menu-item \\nhas-permission=\\\"manufacture.productions.create\\\"><md-button ng-click=\\\"vm.produce()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-factory\\\"></md-icon>\\n{{\\'PURCHASE.CREATE_PRODUCTION_ORDER\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.importToLabelsGenerator()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon>{{\\'LABELS_GENERATOR.IMPORT_TO_LABELS_GENERATOR\\' | translate}}\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.printOrder($event, false)\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon>{{\\'GENERAL.PRINT_SEND\\' | translate}}\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.printCatalog($event)\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus || vm.purchaseOrder.catalog_in_process\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/catalog.fdd681f4.svg\\\" \\nng-if=\\\"!purchase.catalog_in_process\\\"></md-icon><md-progress-circular class=\\\"mr-20\\\" md-diameter=\\\"24px\\\" \\nng-if=\\\"vm.purchaseOrder.catalog_in_process\\\"></md-progress-circular>\\n{{vm.purchaseOrder.catalog ? \\'PURCHASE.REGENERATE_CATALOG\\' : \\'PURCHASE.PRINT_CATALOG\\' | translate}}</div></md-button>\\n</md-menu-item><md-divider></md-divider><md-menu-item><md-button ng-click=\\\"vm.updatePrices()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus || vm.purchaseOrder.status != vm.PURCHASE_ORDER_STATUSES_REVERSE[\\'PURCHASE_ORDER_STATUS_DRAFT\\']\\\">\\n<md-icon md-font-icon=\\\"icon-sync\\\"></md-icon>{{\\'SALE.UPDATE_PRODUCTS\\' | translate}}</md-button></md-menu-item>\\n<md-divider></md-divider><md-menu-item><md-button ng-click=\\\"vm.duplicate()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-content-copy\\\">\\n</md-icon>{{\\'SALE.DUPLICATE\\' | translate}}</md-button></md-menu-item></md-menu-content></md-menu></div>\\n</md-card-title-text><md-card-title-text class=\\\"border-top h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div \\nflex=\\\"100\\\" layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-search-product-in-order flex=\\\"100\\\" layout=\\\"row\\\">\\n</nd-search-product-in-order><nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\">\\n</nd-order-product-visualization-options></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals \\norder=\\\"order\\\" show-cost=\\\"true\\\" type=\\\"type\\\" show-taxes=\\\"false\\\"></nd-get-order-totals></div></md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-actions/sale-order-actions/nd-sale-order-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-sale-order-actions\\\"><md-card-title-text class=\\\"h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" show-dialog-when-adding=\\\"false\\\" type=\\\"type\\\">\\n</nd-add-order-product></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular class=\\\"mh-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.changingStatus\\\"></md-progress-circular><md-button ng-if=\\\"vm.saleOrder.status == 1\\\" \\nclass=\\\"md-warn stroked\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.cancel,wholesale.presales.presale.preorders.preorder.products.cancel\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"SALE.CANCEL_ORDER\\\">\\n</md-button><md-button \\nng-if=\\\"vm.saleOrder.status == 2 && vm.saleOrder.sale_order_deliveries == 0 || vm.saleOrder.status == 7 && vm.saleOrder.sale_order_deliveries == 0\\\" \\nclass=\\\"md-warn stroked\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.cancel,wholesale.presales.presale.preorders.preorder.products.cancel\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" ng-click=\\\"vm.cancel()\\\" translate=\\\"SALE.CANCEL_CONFIRMATION\\\">\\n</md-button><md-button class=\\\"mr-10 md-primary md-raised\\\" ng-click=\\\"order.is_editable = !order.is_editable\\\" \\nng-if=\\\"order.is_editable && vm.saleOrder.status > 1\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.cancel,wholesale.presales.presale.preorders.preorder.products.cancel\\\" \\nclass=\\\"stroked md-raised\\\" ng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\"><span \\ntranslate=\\\"GENERAL.SAVE\\\"></span></md-button><md-button \\nng-if=\\\"!vm.saleOrder.is_devolution &&(vm.saleOrder.status == 1 || vm.saleOrder.status == 11 || vm.saleOrder.status == 12)\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.partial_delivery,wholesale.presales.presale.preorders.preorder.products.partial_delivery\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" class=\\\"stroked md-primary m-5\\\" \\ndata-test-id=\\\"sale-order-partial-delivery-button\\\" ng-click=\\\"vm.partialDelivery(true)\\\" \\ntranslate=\\\"SALE.CONFIRM_AND_ALLOCATE\\\"></md-button><md-button \\nng-if=\\\"vm.saleOrder.status == 1 || vm.saleOrder.status == 11 || vm.saleOrder.status == 12\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.partial_delivery,wholesale.presales.presale.preorders.preorder.products.partial_delivery\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\" class=\\\"md-raised md-primary m-5\\\" \\ndata-test-id=\\\"sale-order-partial-delivery-button\\\" ng-click=\\\"vm.partialDelivery(false)\\\" translate=\\\"SALE.CONFIRM\\\">\\n</md-button><md-menu class=\\\"mr-5\\\"><md-button class=\\\"md-icon-button\\\" ng-click=\\\"$mdOpenMenu()\\\" aria-label=\\\"more\\\"><md-icon\\n md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content width=\\\"3\\\"><md-menu-item \\nhas-permission=\\\"wholesale.sales.sale.products.add_product,wholesale.presales.presale.preorders.preorder.products.add_product\\\" \\nng-if=\\\"vm.saleOrder.status == 1 || order.is_editable\\\"><md-button ng-click=\\\"vm.importProductsDialog()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\"></md-icon>\\n{{\\'IMPORT.IMPORT_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.importToLabelsGenerator()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon>{{\\'LABELS_GENERATOR.IMPORT_TO_LABELS_GENERATOR\\' | translate}}\\n</md-button></md-menu-item><md-menu-item ng-if=\\\"vm.saleOrder.status > 1\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.cancel,wholesale.presales.presale.preorders.preorder.products.cancel\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\"><md-button class=\\\"mr-10\\\" \\nng-click=\\\"order.is_editable=!order.is_editable\\\" ng-disabled=\\\"order.is_editable\\\"><md-icon md-font-icon=\\\"icon-pencil\\\">\\n</md-icon><span translate=\\\"GENERAL.SAVE\\\" ng-if=\\\"vm.editable\\\"></span> {{\\'SALE.EDIT_ORDER\\' | translate}}</md-button>\\n</md-menu-item><md-menu-item ng-if=\\\"vm.saleOrder.is_editable\\\"><md-button ng-click=\\\"vm.onAutoUpdateProductsChange()\\\">\\n<md-icon md-font-icon=\\\"icon-currency-eur\\\"></md-icon>{{\\\"SALE.AUTO_UPDATE\\\" | translate}}</md-button></md-menu-item>\\n<md-menu-item><md-button ng-click=\\\"vm.updatePrices()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-sync\\\"></md-icon>\\n{{\\'SALE.UPDATE_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.createProforma()\\\" \\nhas-permission=\\\"wholesale.sales.sale.products.create_proforma,wholesale.presales.presale.preorders.preorder.products.create_proforma\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-receipt\\\">\\n</md-icon>{{\\'SALE.CREATE_PROFORMA_INVOICE\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.printOrder($event)\\\" ng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon>{{\\'GENERAL.PRINT_SEND\\' | translate}}\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.printCatalog()\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus || vm.saleOrder.catalog_in_process\\\"><div \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><md-icon md-svg-src=\\\"assets/images/custom-material-design-icons/catalog.fdd681f4.svg\\\" \\nng-if=\\\"!vm.saleOrder.catalog_in_process\\\"></md-icon><md-progress-circular md-diameter=\\\"24px\\\" \\nng-if=\\\"vm.saleOrder.catalog_in_process\\\" class=\\\"mr-20\\\"></md-progress-circular>\\n{{vm.saleOrder.catalog ? \\'PURCHASE.REGENERATE_CATALOG\\' : \\'PURCHASE.PRINT_CATALOG\\' | translate}}</div></md-button>\\n</md-menu-item><md-menu-item><md-button ng-click=\\\"vm.downloadExcel()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-file-excel\\\">\\n</md-icon>{{\\'SALE.DOWNLOAD_EXCEL\\' | translate}}</md-button></md-menu-item><md-menu-item><md-button \\nng-click=\\\"vm.downloadImages()\\\" ng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon \\nmd-font-icon=\\\"icon-file-image\\\"></md-icon>{{\\'SALE.DOWNLOAD_IMAGES\\' | translate}}</md-button></md-menu-item><md-menu-item\\n ng-if=\\\"vm.saleOrder.status == 1\\\"><md-button ng-click=\\\"vm.fillAll()\\\" \\nng-disabled=\\\"vm.printing || vm.changed || vm.saving || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-store\\\"></md-icon>\\n{{\\'SALE.FILL_ALL_STOCK\\' | translate}}</md-button></md-menu-item></md-menu-content></md-menu></div></md-card-title-text>\\n<md-card-title-text class=\\\"border-top h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div flex=\\\"100\\\" \\nlayout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-search-product-in-order flex=\\\"100\\\" layout=\\\"row\\\">\\n</nd-search-product-in-order><nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\">\\n</nd-order-product-visualization-options></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals \\norder=\\\"order\\\" show-cost=\\\"true\\\" type=\\\"type\\\" show-taxes=\\\"options.taxes.selected\\\"></nd-get-order-totals></div>\\n</md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-actions/sale-order-delivery-actions/nd-sale-order-delivery-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-sale-order-delivery-actions\\\"><md-card-title-text class=\\\"h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" show-dialog-when-adding=\\\"true\\\" type=\\\"type\\\">\\n</nd-add-order-product></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular class=\\\"mh-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.changingStatus\\\"></md-progress-circular><md-button \\nng-if=\\\"vm.saleOrderDelivery.status==1 || vm.saleOrderDelivery.status==7\\\" class=\\\"md-icon-button mr-10\\\" \\nng-click=\\\"vm.autocomplete()\\\" ng-disabled=\\\"vm.printing || vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-basket-fill\\\">\\n</md-icon><md-tooltip>{{\\'SALE.AUTOCOMPLETE\\' | translate}}</md-tooltip></md-button><nd-print-order-delivery-button \\nshow-only-icon=\\\"true\\\" sale-order-delivery=\\\"vm.saleOrderDelivery\\\"></nd-print-order-delivery-button><md-button \\nng-click=\\\"vm.showCancelDeliveryDialog(vm.saleOrderDelivery.status)\\\" class=\\\"md-warn stroked\\\" \\nhas-permission=\\\"wholesale.sales.sale.delivery.cancel,wholesale.presales.presale.preorders.preorder.delivery.cancel\\\" \\nng-disabled=\\\"vm.changingStatus\\\"><span ng-if=\\\"vm.saleOrderDelivery.status==1 || vm.saleOrderDelivery.status==4\\\" \\ntranslate=\\\"SALE.CANCEL_DELIVERY_NOTE\\\"></span> <span ng-if=\\\"vm.saleOrderDelivery.status==2\\\" \\ntranslate=\\\"SALE.CANCEL_PREPARATION\\\"></span> <span ng-if=\\\"vm.saleOrderDelivery.status==3\\\" \\ntranslate=\\\"SALE.CANCEL_SHIPPING\\\"></span> <span ng-if=\\\"vm.saleOrderDelivery.status==5\\\" \\ntranslate=\\\"SALE.CANCEL_RECEPTION\\\"></span></md-button><md-button ng-if=\\\"vm.saleOrderDelivery.status==1\\\" \\nclass=\\\"md-raised md-primary\\\" data-test-id=\\\"sale-order-delivery-prepare-button\\\" \\nhas-permission=\\\"wholesale.sales.sale.delivery.prepare,wholesale.presales.presale.preorders.preorder.delivery.prepare\\\" \\nng-click=\\\"vm.prepare()\\\" translate=\\\"SALE.PREPARE\\\" ng-disabled=\\\"vm.changingStatus\\\">PREPARE</md-button><md-button \\nng-if=\\\"vm.saleOrderDelivery.status==2\\\" class=\\\"md-raised md-primary\\\" ng-click=\\\"vm.ship()\\\" \\nhas-permission=\\\"wholesale.sales.sale.delivery.ship,wholesale.presales.presale.preorders.preorder.delivery.ship\\\" \\ntranslate=\\\"SALE.SHIP\\\" ng-disabled=\\\"vm.changingStatus\\\">SHIP</md-button><md-button \\nng-if=\\\"vm.saleOrderDelivery.status==4\\\" class=\\\"md-raised md-primary\\\" ng-click=\\\"vm.receive()\\\" \\nhas-permission=\\\"wholesale.sales.sale.delivery.receive,wholesale.presales.presale.preorders.preorder.delivery.receive\\\" \\ntranslate=\\\"SALE.RECEIVE\\\" ng-disabled=\\\"vm.changingStatus\\\"></md-button></div></md-card-title-text><md-card-title-text \\nclass=\\\"border-top h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><nd-search-product-in-order flex=\\\"100\\\" layout=\\\"row\\\"></nd-search-product-in-order>\\n<nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\"></nd-order-product-visualization-options></div>\\n<div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals order=\\\"order\\\" show-cost=\\\"true\\\" type=\\\"type\\\" \\nshow-taxes=\\\"options.taxes.selected\\\"></nd-get-order-totals></div></md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/purchase/directives/nd-order-actions/purchase-order-delivery-actions/nd-purchase-order-delivery-actions.html\",\"<div class=\\\"order-actions\\\" id=\\\"nd-purchase-order-delivery-actions\\\"><md-card-title-text class=\\\"h-50\\\" flex layout=\\\"row\\\" \\nlayout-align=\\\"space-between\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><nd-add-order-product \\ncurrent-tab=\\\"\\'products\\'\\\" flex=\\\"100\\\" layout=\\\"row\\\" order=\\\"order\\\" show-dialog-when-adding=\\\"true\\\" type=\\\"type\\\">\\n</nd-add-order-product></div><div layout=\\\"row\\\" layout-align=\\\"end center\\\"><md-progress-circular class=\\\"mh-8\\\" \\nmd-diameter=\\\"20px\\\" ng-if=\\\"vm.changingStatus\\\"></md-progress-circular><md-button class=\\\"stroked m-5\\\" \\nhas-permission=\\\"inventory.purchases.purchase.delivery.cancel\\\" id=\\\"purchase-delivery-cancel-button\\\" \\nng-click=\\\"vm.cancel()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status===vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\" \\ntranslate=\\\"PURCHASE.CANCEL_DELIVERY\\\">CANCEL</md-button><md-button class=\\\"stroked m-5\\\" \\nhas-permission=\\\"inventory.purchases.purchase.delivery.cancel\\\" id=\\\"purchase-delivery-cancel-delivery-dialog-button\\\" \\nng-click=\\\"vm.showCancelDeliveryDialog()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status > vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\" \\ntranslate=\\\"PURCHASE.CANCEL_CONFIRMATION\\\">CANCEL</md-button><md-button class=\\\"md-raised md-primary m-5\\\" \\nhas-permission=\\\"inventory.purchases.purchase.delivery.confirm\\\" id=\\\"purchase-delivery-confirm-button\\\" \\nng-click=\\\"vm.confirm()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status === vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\" \\ntranslate=\\\"PURCHASE.CONFIRM\\\">CONFIRM</md-button><md-button class=\\\"md-raised md-primary m-5\\\" \\nhas-permission=\\\"inventory.purchases.purchase.delivery.transfer\\\" id=\\\"purchase-delivery-transfer-button\\\" \\nng-click=\\\"vm.transfer()\\\" ng-disabled=\\\"vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status > vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\" \\ntranslate=\\\"PURCHASE.TRANSFER\\\"></md-button><md-menu class=\\\"mr-5\\\"><md-button aria-label=\\\"more\\\" class=\\\"md-icon-button\\\" \\nng-click=\\\"$mdOpenMenu()\\\"><md-icon md-font-icon=\\\"icon-dots-vertical\\\"></md-icon></md-button><md-menu-content width=\\\"3\\\">\\n<md-menu-item><md-button ng-click=\\\"vm.printDelivery()\\\" ng-disabled=\\\"vm.changingStatus || vm.fetching\\\"><md-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/file.0472566f.svg\\\"></md-icon><span translate=\\\"PURCHASE.PRINT\\\"></span>\\n</md-button></md-menu-item><md-menu-item has-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-disabled=\\\"vm.changed || vm.saving || vm.printing || vm.changingStatus\\\" ng-if=\\\"order.is_editable\\\"><md-button \\nclass=\\\"mr-10\\\" ng-click=\\\"vm.openDialogSetDiscountToAllPurchaseOrderProducts()\\\"><md-icon md-font-icon=\\\"icon-percent\\\">\\n</md-icon>{{\\'PURCHASE.ADD_DISCOUNT_TO_ALL_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" ng-disabled=\\\"vm.printing || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status===vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\"><md-button \\nng-click=\\\"vm.openDialogSetTaxToAllPurchaseOrderProducts()\\\"><md-icon md-font-icon=\\\"icon-percent\\\"></md-icon>\\n{{\\'PURCHASE.ADD_TAX_TO_ALL_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status==vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\"><md-button \\nng-click=\\\"vm.importProductsDialog(false)\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\">\\n</md-icon>{{\\'PURCHASE.IMPORT_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status==vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\"><md-button \\nng-click=\\\"vm.importProductsDialog(true)\\\" ng-disabled=\\\"vm.changingStatus\\\"><md-icon md-font-icon=\\\"icon-import\\\"></md-icon>\\n{{\\'PURCHASE.IMPORT_UID_PRODUCTS\\' | translate}}</md-button></md-menu-item><md-menu-item \\nhas-permission=\\\"inventory.purchases.purchase.products.add_product\\\" ng-disabled=\\\"vm.printing || vm.changingStatus\\\" \\nng-if=\\\"vm.purchaseOrderDelivery.status===vm.ORDER_DELIVERY_STATUSES_REVERSE[\\'RECEPTION_DRAFT\\']\\\"><md-button \\nng-click=\\\"vm.autocomplete()\\\"><md-icon md-font-icon=\\\"icon-basket-fill\\\"></md-icon>{{\\'SALE.AUTOCOMPLETE\\' | translate}}\\n</md-button></md-menu-item><md-menu-item><md-button ng-click=\\\"vm.importToLabelsGenerator()\\\"><md-icon \\nmd-font-icon=\\\"icon-tag-text-outline\\\"></md-icon>{{\\'LABELS_GENERATOR.IMPORT_TO_LABELS_GENERATOR\\' | translate}}\\n</md-button></md-menu-item></md-menu-content></md-menu></div></md-card-title-text><md-card-title-text \\nclass=\\\"border-top h-50\\\" flex layout=\\\"row\\\" layout-align=\\\"space-between\\\"><div flex=\\\"100\\\" layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><nd-search-product-in-order flex=\\\"100\\\" layout=\\\"row\\\"></nd-search-product-in-order>\\n<nd-order-product-visualization-options options=\\\"options\\\" type=\\\"type\\\"></nd-order-product-visualization-options></div>\\n<div layout=\\\"row\\\" layout-align=\\\"end center\\\"><nd-get-order-totals order=\\\"order\\\" show-cost=\\\"true\\\" type=\\\"type\\\" \\nshow-taxes=\\\"false\\\"></nd-get-order-totals></div></md-card-title-text></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/edit-existing-products.html\",\"<md-card-content><div class=\\\"pb-16\\\"><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_EDIT_EXISTING_PRODUCTS_SUBTITLE1\\\">\\n</div></div><div><div class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex ng-click=\\\"vm.nextStep(\\'edit-products\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.EDIT_PRODUCTS\\\"></span></div></md-button><md-button flex \\nng-click=\\\"vm.nextStep(\\'edit-product-variants\\')\\\" class=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-tag-outline\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.EDIT_PRODUCT_VARIANTS\\\"></span></div></md-button><md-button flex \\nng-click=\\\"vm.nextStep(\\'edit-bundles\\')\\\" class=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-tag-outline\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.EDIT_BUNDLES\\\"></span></div></md-button></div></div></md-card-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/import-edit.html\",\"<md-card-content><div class=\\\"pb-16\\\"><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_IMPORT_OR_EDIT_SUBTITLE1\\\"></div>\\n</div><div><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_IMPORT_OR_EDIT_SUBTITLE2\\\"></div></div><div><div \\nclass=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex ng-click=\\\"vm.nextStep(\\'products-or-series\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed-add.77a78a84.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.IMPORT_NEW_PRODUCTS\\\"></span></div></md-button><md-button flex \\nng-click=\\\"vm.nextStep(\\'edit-existing-products\\')\\\" class=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed-edit.6254b38f.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.EDIT_EXISTING_PRODUCTS\\\"></span></div></md-button></div></div></md-card-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-historic/directives/nd-stocktaking-historic-header/nd-stocktaking-historic-header.html\",\"<div ng-if=\\\"stocktakingChange\\\"><div \\nng-if=\\\"stocktakingChange.type != STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_DELETED\\']\\\"><md-card-header \\nclass=\\\"pb-8 green-200-bg\\\" ng-if=\\\"stocktakingChange.found\\\"><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nclass=\\\"stocktaking-change-title\\\"><div flex layout=\\\"row\\\" layout-align=\\\"start center\\\"><span><b>\\n{{stocktakingChange.product_code}}</b></span><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_SCAN\\']\\\" class=\\\"mh-8\\\" \\nmd-font-icon=\\\"icon-barcode\\\"></md-icon><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_MANUAL\\']\\\" class=\\\"mh-8\\\" \\nmd-font-icon=\\\"icon-cursor-default-outline\\\"></md-icon><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_IMPORT\\']\\\" class=\\\"mh-8\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/publish.6e703bc5.svg\\\"></md-icon></div><div layout=\\\"row\\\" \\nlayout-align=\\\"space-between center\\\"><span \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\">{{stocktakingChange.before}}</span>\\n<md-icon has-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\" class=\\\"mh-8 black-fg\\\" \\nmd-font-icon=\\\"icon-arrow-right\\\"></md-icon><span>{{stocktakingChange.after}}</span></div></div><span \\nclass=\\\"header-info\\\">{{stocktakingChange.product_name}}</span> <span class=\\\"header-info\\\">\\n{{stocktakingChange.color_name}} · {{stocktakingChange.size_name}}</span> <span class=\\\"header-info\\\"><small>\\n{{stocktakingChange.datetime | date:\\'short\\'}} · {{stocktakingChange.barcode}}</small></span></div></md-card-header>\\n<md-card-header class=\\\"pb-8 red-200-bg\\\" ng-if=\\\"!stocktakingChange.found\\\"><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" \\nclass=\\\"stocktaking-change-title\\\"><div flex><span><b>{{\\'STOCKTAKING.PRODUCT_NOT_FOUND\\' | translate}}</b></span></div>\\n</div><span class=\\\"header-info\\\">\\n{{\\\"STOCKTAKING.\\\"+STOCKTAKING_PRODUCT_NOT_FOUND_REASONS[stocktakingChange.not_found_reason] | translate}}</span> <span \\nclass=\\\"header-info\\\"><small>{{stocktakingChange.datetime | date:\\'short\\'}} · {{stocktakingChange.barcode}}</small></span>\\n</div></md-card-header></div><div \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_DELETED\\']\\\"><md-card-header \\nclass=\\\"pb-8 red-200-bg\\\"><div layout=\\\"column\\\" flex><div layout=\\\"row\\\" class=\\\"stocktaking-change-title\\\"><div flex><span>\\n<b>{{\\'STOCKTAKING.PRODUCT_DELETED_TITLE\\' | translate}}</b></span></div></div><span class=\\\"header-info\\\">\\n{{\\'STOCKTAKING.PRODUCT_DELETED_MSG\\' | translate: {productName: stocktakingChange.product_name} }}</span> <span \\nclass=\\\"header-info\\\"><small>{{stocktakingChange.datetime | date:\\'short\\'}}</small></span></div></md-card-header></div>\\n</div><div ng-if=\\\"!stocktakingChange\\\"><md-card-header class=\\\"pb-8\\\"></md-card-header></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/stocktaking/directives/nd-stocktaking-historic/directives/nd-stocktaking-historic-item/nd-stocktaking-historic-item.html\",\"<div ng-if=\\\"stocktakingChange\\\"><div \\nng-if=\\\"stocktakingChange.type != STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_DELETED\\']\\\"><div layout=\\\"column\\\" \\nng-if=\\\"stocktakingChange.found\\\"><div layout=\\\"row\\\" class=\\\"stocktaking-change-title\\\"><div flex layout=\\\"row\\\" \\nlayout-align=\\\"start center\\\"><span class=\\\"green-600-fg\\\"><b>{{stocktakingChange.product_code}}</b></span><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES.STOCKTAKING_CHANGE_TYPE_SCAN\\\" class=\\\"mh-8 green-fg\\\" \\nmd-font-icon=\\\"icon-barcode\\\"></md-icon><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES.STOCKTAKING_CHANGE_TYPE_MANUAL\\\" class=\\\"mh-8 green-fg\\\" \\nmd-font-icon=\\\"icon-cursor-default-outline\\\"></md-icon><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES.STOCKTAKING_CHANGE_TYPE_IMPORT\\\" class=\\\"mh-8 green-fg\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/publish.6e703bc5.svg\\\"></md-icon><md-icon \\nng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES.STOCKTAKING_CHANGE_TYPE_ALLOCATION\\\" class=\\\"mh-8 green-fg\\\" \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sa-automation.de8fd6e8.svg\\\"></md-icon></div><div layout=\\\"row\\\" \\nlayout-align=\\\"center center\\\"><span has-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\">\\n{{stocktakingChange.before}}</span><md-icon \\nhas-permission=\\\"inventory.stocktakings.stocktaking.products.show_previous_amount\\\" class=\\\"mh-8 black-fg\\\" \\nmd-font-icon=\\\"icon-arrow-right\\\"></md-icon><span>{{stocktakingChange.after}}</span></div></div><span \\nclass=\\\"grey-600-fg\\\"><small>{{stocktakingChange.datetime | date:\\'short\\'}} · {{stocktakingChange.barcode}}</small></span>\\n <span><small><b>\\n{{stocktakingChange.product_name}} · {{stocktakingChange.color_name}} · {{stocktakingChange.size_name}}</b></small>\\n</span></div><div layout=\\\"column\\\" ng-if=\\\"!stocktakingChange.found\\\"><div layout=\\\"row\\\" class=\\\"stocktaking-change-title\\\">\\n<span flex class=\\\"red-600-fg\\\"><b>{{\\'STOCKTAKING.PRODUCT_NOT_FOUND\\' | translate}}</b></span></div><span \\nclass=\\\"grey-600-fg\\\"><small>{{stocktakingChange.datetime | date:\\'short\\'}} · {{stocktakingChange.barcode}}</small></span>\\n <span><small><b>\\n{{\\\"STOCKTAKING.\\\"+STOCKTAKING_PRODUCT_NOT_FOUND_REASONS[stocktakingChange.not_found_reason] | translate}}</b></small>\\n</span></div></div><div ng-if=\\\"stocktakingChange.type === STOCKTAKING_CHANGE_TYPES[\\'STOCKTAKING_CHANGE_TYPE_DELETED\\']\\\">\\n<div layout=\\\"row\\\" class=\\\"stocktaking-change-title\\\"><span flex class=\\\"red-600-fg\\\"><b>\\n{{\\'STOCKTAKING.PRODUCT_DELETED_TITLE\\' | translate}}</b></span></div><span class=\\\"grey-600-fg\\\"><small>\\n{{stocktakingChange.datetime | date:\\'short\\'}}</small></span><br><span><small><b>\\n{{\\\"STOCKTAKING.PRODUCT_DELETED_MSG\\\" | translate:{productName: stocktakingChange.product_name} }}</b></small></span>\\n</div></div>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/to-wizard-templates/edit-bundles.html\",\"<md-card-content><div class=\\\"pb-16\\\"><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_EDIT_BUNDLES_SUBTITLE1\\\"></div>\\n</div><div><div class=\\\"step-text secondary-text\\\" translate=\\\"IMPORTER.STEP_EDIT_BUNDLES_SUBTITLE2\\\"></div></div><div><div\\n class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex ng-click=\\\"vm.showImportationDialog(\\'bundle_by_barcode\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-barcode\\\" class=\\\"mt-8\\\"></md-icon><span translate=\\\"IMPORTER.BARCODE\\\"></span></div></md-button>\\n<md-button flex ng-click=\\\"vm.showImportationDialog(\\'bundle_by_sku\\')\\\" class=\\\"order-type-button md-primary\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sku.6af2f8e6.svg\\\" class=\\\"mt-8\\\"></md-icon><span translate=\\\"IMPORTER.SKU\\\">\\n</span></div></md-button><md-button flex ng-click=\\\"vm.showImportationDialog(\\'bundle_by_id\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/identifier.3eb82659.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.ID\\\"></span></div></md-button></div></div></md-card-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/to-wizard-templates/edit-product-variants.html\",\"<md-card-content><div class=\\\"pb-16\\\"><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_EDIT_PRODUCT_VARIANTS_SUBTITLE1\\\">\\n</div></div><div><div class=\\\"step-text secondary-text\\\" translate=\\\"IMPORTER.STEP_EDIT_PRODUCT_VARIANTS_SUBTITLE2\\\"></div>\\n</div><div><div class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex \\nng-click=\\\"vm.showImportationDialog(\\'product_variant_by_barcode\\')\\\" class=\\\"order-type-button md-primary\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon=\\\"icon-barcode\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.BARCODE\\\"></span></div></md-button><md-button flex \\nng-click=\\\"vm.showImportationDialog(\\'product_variant_by_sku\\')\\\" class=\\\"order-type-button md-primary\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/sku.6af2f8e6.svg\\\" class=\\\"mt-8\\\"></md-icon><span translate=\\\"IMPORTER.SKU\\\">\\n</span></div></md-button><md-button flex ng-click=\\\"vm.showImportationDialog(\\'product_variant_by_id\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/identifier.3eb82659.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.ID\\\"></span></div></md-button></div></div></md-card-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/to-wizard-templates/edit-products.html\",\"<md-card-content><div class=\\\"pb-16\\\"><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_EDIT_PRODUCTS_SUBTITLE1\\\"></div>\\n</div><div><div class=\\\"step-text secondary-text\\\" translate=\\\"IMPORTER.STEP_EDIT_PRODUCTS_SUBTITLE2\\\"></div></div><div>\\n<div class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex ng-click=\\\"vm.showImportationDialog(\\'product_by_code\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon \\nmd-font-icon=\\\"icon-code-tags\\\" class=\\\"mt-8\\\"></md-icon><span translate=\\\"IMPORTER.PRODUCT_CODE\\\"></span></div></md-button>\\n<md-button flex ng-click=\\\"vm.showImportationDialog(\\'product_by_id\\')\\\" class=\\\"order-type-button md-primary\\\"><div \\nlayout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/identifier.3eb82659.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.ID\\\"></span></div></md-button></div></div></md-card-content>\");\n$templateCache.put(\"app/main/apps/inventory/views/import/dialogs/importation-wizard/import-edit-wizard/templates/to-wizard-templates/import.html\",\"<md-card-content><div class=\\\"pb-16\\\"><div class=\\\"step-text\\\" translate=\\\"IMPORTER.STEP_IMPORT_SUBTITLE1\\\"></div></div><div>\\n<div class=\\\"mt-8\\\" flex=\\\"100\\\" layout=\\\"row\\\"><md-button flex ng-click=\\\"vm.showImportationDialog(\\'product_variant\\')\\\" \\nclass=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" layout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/package-variant-closed.196557b8.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.IMPORT_TYPE_PRODUCT_VARIANT\\\"></span></div></md-button><md-button flex \\nng-click=\\\"vm.showImportationDialog(\\'series\\')\\\" class=\\\"order-type-button md-primary\\\"><div layout=\\\"column\\\" \\nlayout-align=\\\"center center\\\"><md-icon md-font-icon \\nmd-svg-src=\\\"assets/images/custom-material-design-icons/tag-multiple-outline.1ee87650.svg\\\" class=\\\"mt-8\\\"></md-icon><span \\ntranslate=\\\"IMPORTER.IMPORT_TYPE_SERIES\\\"></span></div></md-button></div></div></md-card-content>\");}]);"],"sourceRoot":"/source/"}